1 /* sp.c
2  *
3  * Copyright (C) 2006-2021 wolfSSL Inc.
4  *
5  * This file is part of wolfSSL.
6  *
7  * wolfSSL is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * wolfSSL is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
20  */
21 
22 /* Implementation by Sean Parkinson. */
23 
24 #ifdef HAVE_CONFIG_H
25     #include <config.h>
26 #endif
27 
28 #include <wolfssl/wolfcrypt/settings.h>
29 
30 #if defined(WOLFSSL_HAVE_SP_RSA) || defined(WOLFSSL_HAVE_SP_DH) || \
31     defined(WOLFSSL_HAVE_SP_ECC)
32 
33 #include <wolfssl/wolfcrypt/error-crypt.h>
34 #include <wolfssl/wolfcrypt/cpuid.h>
35 #ifdef NO_INLINE
36     #include <wolfssl/wolfcrypt/misc.h>
37 #else
38     #define WOLFSSL_MISC_INCLUDED
39     #include <wolfcrypt/src/misc.c>
40 #endif
41 
42 #ifdef RSA_LOW_MEM
43 #ifndef WOLFSSL_SP_SMALL
44 #define WOLFSSL_SP_SMALL
45 #endif
46 #endif
47 
48 #include <wolfssl/wolfcrypt/sp.h>
49 
50 #ifdef WOLFSSL_SP_X86_64_ASM
51 #define SP_PRINT_NUM(var, name, total, words, bits)     \
52     do {                                                \
53         int ii;                                         \
54         fprintf(stderr, name "=0x");                    \
55         for (ii = words - 1; ii >= 0; ii--)             \
56             fprintf(stderr, SP_PRINT_FMT, (var)[ii]);   \
57         fprintf(stderr, "\n");                         \
58     } while (0)
59 
60 #define SP_PRINT_VAL(var, name)                         \
61     fprintf(stderr, name "=0x" SP_PRINT_FMT "\n", var)
62 #if defined(WOLFSSL_HAVE_SP_RSA) || defined(WOLFSSL_HAVE_SP_DH)
63 #ifndef WOLFSSL_SP_NO_2048
64 extern void sp_2048_from_bin_bswap(sp_digit* r, int size, const byte* a, int n);
65 extern void sp_2048_from_bin_movbe(sp_digit* r, int size, const byte* a, int n);
66 /* Read big endian unsigned byte array into r.
67  *
68  * r  A single precision integer.
69  * size  Maximum number of bytes to convert
70  * a  Byte array.
71  * n  Number of bytes in array to read.
72  */
sp_2048_from_bin(sp_digit * r,int size,const byte * a,int n)73 static void sp_2048_from_bin(sp_digit* r, int size, const byte* a, int n)
74 {
75 #ifndef NO_MOVBE_SUPPORT
76     word32 cpuid_flags = cpuid_get_flags();
77 
78     if (IS_INTEL_MOVBE(cpuid_flags)) {
79         sp_2048_from_bin_movbe(r, size, a, n);
80     }
81     else
82 #endif
83     {
84         sp_2048_from_bin_bswap(r, size, a, n);
85     }
86 }
87 
88 /* Convert an mp_int to an array of sp_digit.
89  *
90  * r  A single precision integer.
91  * size  Maximum number of bytes to convert
92  * a  A multi-precision integer.
93  */
sp_2048_from_mp(sp_digit * r,int size,const mp_int * a)94 static void sp_2048_from_mp(sp_digit* r, int size, const mp_int* a)
95 {
96 #if DIGIT_BIT == 64
97     int j;
98 
99     XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
100 
101     for (j = a->used; j < size; j++) {
102         r[j] = 0;
103     }
104 #elif DIGIT_BIT > 64
105     int i;
106     int j = 0;
107     word32 s = 0;
108 
109     r[0] = 0;
110     for (i = 0; i < a->used && j < size; i++) {
111         r[j] |= ((sp_digit)a->dp[i] << s);
112         r[j] &= 0xffffffffffffffffl;
113         s = 64U - s;
114         if (j + 1 >= size) {
115             break;
116         }
117         /* lint allow cast of mismatch word32 and mp_digit */
118         r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
119         while ((s + 64U) <= (word32)DIGIT_BIT) {
120             s += 64U;
121             r[j] &= 0xffffffffffffffffl;
122             if (j + 1 >= size) {
123                 break;
124             }
125             if (s < (word32)DIGIT_BIT) {
126                 /* lint allow cast of mismatch word32 and mp_digit */
127                 r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
128             }
129             else {
130                 r[++j] = (sp_digit)0;
131             }
132         }
133         s = (word32)DIGIT_BIT - s;
134     }
135 
136     for (j++; j < size; j++) {
137         r[j] = 0;
138     }
139 #else
140     int i;
141     int j = 0;
142     int s = 0;
143 
144     r[0] = 0;
145     for (i = 0; i < a->used && j < size; i++) {
146         r[j] |= ((sp_digit)a->dp[i]) << s;
147         if (s + DIGIT_BIT >= 64) {
148             r[j] &= 0xffffffffffffffffl;
149             if (j + 1 >= size) {
150                 break;
151             }
152             s = 64 - s;
153             if (s == DIGIT_BIT) {
154                 r[++j] = 0;
155                 s = 0;
156             }
157             else {
158                 r[++j] = a->dp[i] >> s;
159                 s = DIGIT_BIT - s;
160             }
161         }
162         else {
163             s += DIGIT_BIT;
164         }
165     }
166 
167     for (j++; j < size; j++) {
168         r[j] = 0;
169     }
170 #endif
171 }
172 
173 extern void sp_2048_to_bin_bswap_32(sp_digit* r, byte* a);
174 extern void sp_2048_to_bin_movbe_32(sp_digit* r, byte* a);
175 /* Write r as big endian to byte array.
176  * Fixed length number of bytes written: 256
177  *
178  * r  A single precision integer.
179  * a  Byte array.
180  */
sp_2048_to_bin_32(sp_digit * r,byte * a)181 static void sp_2048_to_bin_32(sp_digit* r, byte* a)
182 {
183 #ifndef NO_MOVBE_SUPPORT
184     word32 cpuid_flags = cpuid_get_flags();
185 
186     if (IS_INTEL_MOVBE(cpuid_flags)) {
187         sp_2048_to_bin_movbe_32(r, a);
188     }
189     else
190 #endif
191     {
192         sp_2048_to_bin_bswap_32(r, a);
193     }
194 }
195 
196 #if (defined(WOLFSSL_HAVE_SP_RSA) && (!defined(WOLFSSL_RSA_PUBLIC_ONLY) || !defined(WOLFSSL_SP_SMALL))) || defined(WOLFSSL_HAVE_SP_DH)
197 /* Normalize the values in each word to 64.
198  *
199  * a  Array of sp_digit to normalize.
200  */
201 #define sp_2048_norm_32(a)
202 
203 #endif /* (WOLFSSL_HAVE_SP_RSA && (!WOLFSSL_RSA_PUBLIC_ONLY || !WOLFSSL_SP_SMALL)) || WOLFSSL_HAVE_SP_DH */
204 /* Normalize the values in each word to 64.
205  *
206  * a  Array of sp_digit to normalize.
207  */
208 #define sp_2048_norm_32(a)
209 
210 extern void sp_2048_mul_16(sp_digit* r, const sp_digit* a, const sp_digit* b);
211 extern void sp_2048_sqr_16(sp_digit* r, const sp_digit* a);
212 extern void sp_2048_mul_avx2_16(sp_digit* r, const sp_digit* a, const sp_digit* b);
213 extern void sp_2048_sqr_avx2_16(sp_digit* r, const sp_digit* a);
214 extern sp_digit sp_2048_add_16(sp_digit* r, const sp_digit* a, const sp_digit* b);
215 extern sp_digit sp_2048_sub_in_place_32(sp_digit* a, const sp_digit* b);
216 extern sp_digit sp_2048_add_32(sp_digit* r, const sp_digit* a, const sp_digit* b);
217 extern void sp_2048_mul_32(sp_digit* r, const sp_digit* a, const sp_digit* b);
218 
219 extern sp_digit sp_2048_dbl_16(sp_digit* r, const sp_digit* a);
220 extern void sp_2048_sqr_32(sp_digit* r, const sp_digit* a);
221 
222 extern void sp_2048_mul_avx2_32(sp_digit* r, const sp_digit* a, const sp_digit* b);
223 
224 extern void sp_2048_sqr_avx2_32(sp_digit* r, const sp_digit* a);
225 
226 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
227 extern sp_digit sp_2048_sub_in_place_16(sp_digit* a, const sp_digit* b);
228 #endif /* (WOLFSSL_HAVE_SP_RSA & !WOLFSSL_RSA_PUBLIC_ONLY) | WOLFSSL_HAVE_SP_DH */
229 
230 /* Caclulate the bottom digit of -1/a mod 2^n.
231  *
232  * a    A single precision number.
233  * rho  Bottom word of inverse.
234  */
sp_2048_mont_setup(const sp_digit * a,sp_digit * rho)235 static void sp_2048_mont_setup(const sp_digit* a, sp_digit* rho)
236 {
237     sp_digit x;
238     sp_digit b;
239 
240     b = a[0];
241     x = (((b + 2) & 4) << 1) + b; /* here x*a==1 mod 2**4 */
242     x *= 2 - b * x;               /* here x*a==1 mod 2**8 */
243     x *= 2 - b * x;               /* here x*a==1 mod 2**16 */
244     x *= 2 - b * x;               /* here x*a==1 mod 2**32 */
245     x *= 2 - b * x;               /* here x*a==1 mod 2**64 */
246 
247     /* rho = -1/m mod b */
248     *rho = (sp_digit)0 - x;
249 }
250 
251 extern void sp_2048_mul_d_32(sp_digit* r, const sp_digit* a, sp_digit b);
252 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
253 /* r = 2^n mod m where n is the number of bits to reduce by.
254  * Given m must be 2048 bits, just need to subtract.
255  *
256  * r  A single precision number.
257  * m  A single precision number.
258  */
sp_2048_mont_norm_16(sp_digit * r,const sp_digit * m)259 static void sp_2048_mont_norm_16(sp_digit* r, const sp_digit* m)
260 {
261     XMEMSET(r, 0, sizeof(sp_digit) * 16);
262 
263     ASSERT_SAVED_VECTOR_REGISTERS();
264 
265     /* r = 2^n mod m */
266     sp_2048_sub_in_place_16(r, m);
267 }
268 
269 extern sp_digit sp_2048_cond_sub_16(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
270 extern void sp_2048_mont_reduce_16(sp_digit* a, const sp_digit* m, sp_digit mp);
271 /* Multiply two Montgomery form numbers mod the modulus (prime).
272  * (r = a * b mod m)
273  *
274  * r   Result of multiplication.
275  * a   First number to multiply in Montgomery form.
276  * b   Second number to multiply in Montgomery form.
277  * m   Modulus (prime).
278  * mp  Montgomery mulitplier.
279  */
sp_2048_mont_mul_16(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)280 static void sp_2048_mont_mul_16(sp_digit* r, const sp_digit* a,
281         const sp_digit* b, const sp_digit* m, sp_digit mp)
282 {
283     sp_2048_mul_16(r, a, b);
284     sp_2048_mont_reduce_16(r, m, mp);
285 }
286 
287 /* Square the Montgomery form number. (r = a * a mod m)
288  *
289  * r   Result of squaring.
290  * a   Number to square in Montgomery form.
291  * m   Modulus (prime).
292  * mp  Montgomery mulitplier.
293  */
sp_2048_mont_sqr_16(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)294 static void sp_2048_mont_sqr_16(sp_digit* r, const sp_digit* a,
295         const sp_digit* m, sp_digit mp)
296 {
297     sp_2048_sqr_16(r, a);
298     sp_2048_mont_reduce_16(r, m, mp);
299 }
300 
301 extern sp_digit sp_2048_cond_sub_avx2_16(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
302 extern void sp_2048_mul_d_16(sp_digit* r, const sp_digit* a, sp_digit b);
303 extern void sp_2048_mul_d_avx2_16(sp_digit* r, const sp_digit* a, const sp_digit b);
304 #ifdef _WIN64
305 #if _MSC_VER < 1920
306 extern sp_digit div_2048_word_asm_16(sp_digit d1, sp_digit d0, sp_digit div);
307 #endif /* _MSC_VER < 1920 */
308 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
309  *
310  * d1   The high order half of the number to divide.
311  * d0   The low order half of the number to divide.
312  * div  The dividend.
313  * returns the result of the division.
314  */
div_2048_word_16(sp_digit d1,sp_digit d0,sp_digit div)315 static WC_INLINE sp_digit div_2048_word_16(sp_digit d1, sp_digit d0,
316         sp_digit div)
317 {
318     ASSERT_SAVED_VECTOR_REGISTERS();
319 #if _MSC_VER >= 1920
320     return _udiv128(d1, d0, div, NULL);
321 #else
322     return div_2048_word_asm_16(d1, d0, div);
323 #endif
324 }
325 #else
326 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
327  *
328  * d1   The high order half of the number to divide.
329  * d0   The low order half of the number to divide.
330  * div  The dividend.
331  * returns the result of the division.
332  */
div_2048_word_16(sp_digit d1,sp_digit d0,sp_digit div)333 static WC_INLINE sp_digit div_2048_word_16(sp_digit d1, sp_digit d0,
334         sp_digit div)
335 {
336     ASSERT_SAVED_VECTOR_REGISTERS();
337     register sp_digit r asm("rax");
338     __asm__ __volatile__ (
339         "divq %3"
340         : "=a" (r)
341         : "d" (d1), "a" (d0), "r" (div)
342         :
343     );
344     return r;
345 }
346 #endif /* _WIN64 */
347 /* AND m into each word of a and store in r.
348  *
349  * r  A single precision integer.
350  * a  A single precision integer.
351  * m  Mask to AND against each digit.
352  */
sp_2048_mask_16(sp_digit * r,const sp_digit * a,sp_digit m)353 static void sp_2048_mask_16(sp_digit* r, const sp_digit* a, sp_digit m)
354 {
355 #ifdef WOLFSSL_SP_SMALL
356     int i;
357 
358     for (i=0; i<16; i++) {
359         r[i] = a[i] & m;
360     }
361 #else
362     int i;
363 
364     for (i = 0; i < 16; i += 8) {
365         r[i+0] = a[i+0] & m;
366         r[i+1] = a[i+1] & m;
367         r[i+2] = a[i+2] & m;
368         r[i+3] = a[i+3] & m;
369         r[i+4] = a[i+4] & m;
370         r[i+5] = a[i+5] & m;
371         r[i+6] = a[i+6] & m;
372         r[i+7] = a[i+7] & m;
373     }
374 #endif
375 }
376 
377 extern sp_int64 sp_2048_cmp_16(const sp_digit* a, const sp_digit* b);
378 /* Divide d in a and put remainder into r (m*d + r = a)
379  * m is not calculated as it is not needed at this time.
380  *
381  * a  Number to be divided.
382  * d  Number to divide with.
383  * m  Multiplier result.
384  * r  Remainder from the division.
385  * returns MP_OKAY indicating success.
386  */
sp_2048_div_16(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)387 static WC_INLINE int sp_2048_div_16(const sp_digit* a, const sp_digit* d, sp_digit* m,
388         sp_digit* r)
389 {
390     sp_digit t1[32];
391     sp_digit t2[17];
392     sp_digit div;
393     sp_digit r1;
394     int i;
395 #ifdef HAVE_INTEL_AVX2
396     word32 cpuid_flags = cpuid_get_flags();
397 #endif
398 
399     ASSERT_SAVED_VECTOR_REGISTERS();
400 
401     (void)m;
402 
403     div = d[15];
404     XMEMCPY(t1, a, sizeof(*t1) * 2 * 16);
405     r1 = sp_2048_cmp_16(&t1[16], d) >= 0;
406 #ifdef HAVE_INTEL_AVX2
407     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
408         sp_2048_cond_sub_avx2_16(&t1[16], &t1[16], d, (sp_digit)0 - r1);
409     else
410 #endif
411         sp_2048_cond_sub_16(&t1[16], &t1[16], d, (sp_digit)0 - r1);
412     for (i=15; i>=0; i--) {
413         sp_digit hi = t1[16 + i] - (t1[16 + i] == div);
414         r1 = div_2048_word_16(hi, t1[16 + i - 1], div);
415 
416 #ifdef HAVE_INTEL_AVX2
417         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
418             sp_2048_mul_d_avx2_16(t2, d, r1);
419         else
420 #endif
421             sp_2048_mul_d_16(t2, d, r1);
422         t1[16 + i] += sp_2048_sub_in_place_16(&t1[i], t2);
423         t1[16 + i] -= t2[16];
424         sp_2048_mask_16(t2, d, t1[16 + i]);
425         t1[16 + i] += sp_2048_add_16(&t1[i], &t1[i], t2);
426         sp_2048_mask_16(t2, d, t1[16 + i]);
427         t1[16 + i] += sp_2048_add_16(&t1[i], &t1[i], t2);
428     }
429 
430     r1 = sp_2048_cmp_16(t1, d) >= 0;
431 #ifdef HAVE_INTEL_AVX2
432     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
433         sp_2048_cond_sub_avx2_16(r, t1, d, (sp_digit)0 - r1);
434     else
435 #endif
436         sp_2048_cond_sub_16(r, t1, d, (sp_digit)0 - r1);
437 
438     return MP_OKAY;
439 }
440 
441 /* Reduce a modulo m into r. (r = a mod m)
442  *
443  * r  A single precision number that is the reduced result.
444  * a  A single precision number that is to be reduced.
445  * m  A single precision number that is the modulus to reduce with.
446  * returns MP_OKAY indicating success.
447  */
sp_2048_mod_16(sp_digit * r,const sp_digit * a,const sp_digit * m)448 static WC_INLINE int sp_2048_mod_16(sp_digit* r, const sp_digit* a,
449         const sp_digit* m)
450 {
451     ASSERT_SAVED_VECTOR_REGISTERS();
452     return sp_2048_div_16(a, m, NULL, r);
453 }
454 
455 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
456  *
457  * r     A single precision number that is the result of the operation.
458  * a     A single precision number being exponentiated.
459  * e     A single precision number that is the exponent.
460  * bits  The number of bits in the exponent.
461  * m     A single precision number that is the modulus.
462  * returns  0 on success
463  * returns  MEMORY_E on dynamic memory allocation failure.
464  * returns  MP_VAL when base is even or exponent is 0.
465  */
sp_2048_mod_exp_16(sp_digit * r,const sp_digit * a,const sp_digit * e,int bits,const sp_digit * m,int reduceA)466 static int sp_2048_mod_exp_16(sp_digit* r, const sp_digit* a, const sp_digit* e,
467         int bits, const sp_digit* m, int reduceA)
468 {
469 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
470     sp_digit* td = NULL;
471 #else
472     sp_digit td[(33 * 32) + 32];
473 #endif
474     sp_digit* t[32];
475     sp_digit* rt = NULL;
476     sp_digit* norm;
477     sp_digit mp = 1;
478     sp_digit n;
479     sp_digit mask;
480     int i;
481     int c;
482     byte y;
483     int err = MP_OKAY;
484 
485     ASSERT_SAVED_VECTOR_REGISTERS();
486 
487     if ((m[0] & 1) == 0) {
488         err = MP_VAL;
489     }
490     else if (bits == 0) {
491         err = MP_VAL;
492     }
493 
494 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
495     if (err == MP_OKAY) {
496         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (33 * 32) + 32, NULL,
497                                 DYNAMIC_TYPE_TMP_BUFFER);
498         if (td == NULL) {
499             err = MEMORY_E;
500         }
501     }
502 #endif
503 
504     if (err == MP_OKAY) {
505         norm = td;
506 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
507         for (i=0; i<32; i++)
508             t[i] = td + i * 32;
509         rt = td + 1024;
510 #else
511         for (i=0; i<32; i++)
512             t[i] = &td[i * 32];
513         rt = &td[1024];
514 #endif
515 
516         sp_2048_mont_setup(m, &mp);
517         sp_2048_mont_norm_16(norm, m);
518 
519         XMEMSET(t[1], 0, sizeof(sp_digit) * 16);
520         if (reduceA) {
521             err = sp_2048_mod_16(t[1] + 16, a, m);
522             if (err == MP_OKAY)
523                 err = sp_2048_mod_16(t[1], t[1], m);
524         }
525         else {
526             XMEMCPY(t[1] + 16, a, sizeof(sp_digit) * 16);
527             err = sp_2048_mod_16(t[1], t[1], m);
528         }
529     }
530 
531     if (err == MP_OKAY) {
532         sp_2048_mont_sqr_16(t[ 2], t[ 1], m, mp);
533         sp_2048_mont_mul_16(t[ 3], t[ 2], t[ 1], m, mp);
534         sp_2048_mont_sqr_16(t[ 4], t[ 2], m, mp);
535         sp_2048_mont_mul_16(t[ 5], t[ 3], t[ 2], m, mp);
536         sp_2048_mont_sqr_16(t[ 6], t[ 3], m, mp);
537         sp_2048_mont_mul_16(t[ 7], t[ 4], t[ 3], m, mp);
538         sp_2048_mont_sqr_16(t[ 8], t[ 4], m, mp);
539         sp_2048_mont_mul_16(t[ 9], t[ 5], t[ 4], m, mp);
540         sp_2048_mont_sqr_16(t[10], t[ 5], m, mp);
541         sp_2048_mont_mul_16(t[11], t[ 6], t[ 5], m, mp);
542         sp_2048_mont_sqr_16(t[12], t[ 6], m, mp);
543         sp_2048_mont_mul_16(t[13], t[ 7], t[ 6], m, mp);
544         sp_2048_mont_sqr_16(t[14], t[ 7], m, mp);
545         sp_2048_mont_mul_16(t[15], t[ 8], t[ 7], m, mp);
546         sp_2048_mont_sqr_16(t[16], t[ 8], m, mp);
547         sp_2048_mont_mul_16(t[17], t[ 9], t[ 8], m, mp);
548         sp_2048_mont_sqr_16(t[18], t[ 9], m, mp);
549         sp_2048_mont_mul_16(t[19], t[10], t[ 9], m, mp);
550         sp_2048_mont_sqr_16(t[20], t[10], m, mp);
551         sp_2048_mont_mul_16(t[21], t[11], t[10], m, mp);
552         sp_2048_mont_sqr_16(t[22], t[11], m, mp);
553         sp_2048_mont_mul_16(t[23], t[12], t[11], m, mp);
554         sp_2048_mont_sqr_16(t[24], t[12], m, mp);
555         sp_2048_mont_mul_16(t[25], t[13], t[12], m, mp);
556         sp_2048_mont_sqr_16(t[26], t[13], m, mp);
557         sp_2048_mont_mul_16(t[27], t[14], t[13], m, mp);
558         sp_2048_mont_sqr_16(t[28], t[14], m, mp);
559         sp_2048_mont_mul_16(t[29], t[15], t[14], m, mp);
560         sp_2048_mont_sqr_16(t[30], t[15], m, mp);
561         sp_2048_mont_mul_16(t[31], t[16], t[15], m, mp);
562 
563         i = (bits - 1) / 64;
564         n = e[i--];
565         /* Number of bits available in top word. */
566         c = bits & 63;
567         if (c == 0) {
568             c = 64;
569         }
570         /* Minus the number of top bits to use so rest is a multiple of 5. */
571         if ((bits % 5) == 0) {
572             c -= 5;
573         }
574         else {
575             c -= bits % 5;
576         }
577         if (c < 0) {
578             /* Number of bits in top word is less than number needed. */
579             c = -c;
580             y = (byte)(n << c);
581             n = e[i--];
582             y |= (byte)(n >> (64 - c));
583             n <<= c;
584             c = 64 - c;
585         }
586         else {
587             y = (byte)(n >> c);
588             n <<= 64 - c;
589         }
590         XMEMCPY(r, t[y], sizeof(sp_digit) * 16);
591         for (; i>=0 || c>=5; ) {
592             if (c >= 5) {
593                 y = (byte)((n >> 59) & 0x1f);
594                 n <<= 5;
595                 c -= 5;
596             }
597             else if (c == 0) {
598                 n = e[i--];
599                 y = (byte)(n >> 59);
600                 n <<= 5;
601                 c = 59;
602             }
603             else {
604                 y = (byte)(n >> 59);
605                 n = e[i--];
606                 c = 5 - c;
607                 y |= (byte)(n >> (64 - c));
608                 n <<= c;
609                 c = 64 - c;
610             }
611 
612             sp_2048_sqr_16(rt, r);
613             sp_2048_mont_reduce_16(rt, m, mp);
614             sp_2048_sqr_16(r, rt);
615             sp_2048_mont_reduce_16(r, m, mp);
616             sp_2048_sqr_16(rt, r);
617             sp_2048_mont_reduce_16(rt, m, mp);
618             sp_2048_sqr_16(r, rt);
619             sp_2048_mont_reduce_16(r, m, mp);
620             sp_2048_sqr_16(rt, r);
621             sp_2048_mont_reduce_16(rt, m, mp);
622 
623             sp_2048_mul_16(r, rt, t[y]);
624             sp_2048_mont_reduce_16(r, m, mp);
625         }
626 
627         XMEMSET(&r[16], 0, sizeof(sp_digit) * 16);
628         sp_2048_mont_reduce_16(r, m, mp);
629 
630         mask = 0 - (sp_2048_cmp_16(r, m) >= 0);
631         sp_2048_cond_sub_16(r, r, m, mask);
632     }
633 
634 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
635     if (td != NULL)
636         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
637 #endif
638 
639     return err;
640 }
641 
642 extern void sp_2048_mont_reduce_avx2_16(sp_digit* a, const sp_digit* m, sp_digit mp);
643 #ifdef HAVE_INTEL_AVX2
644 /* Multiply two Montgomery form numbers mod the modulus (prime).
645  * (r = a * b mod m)
646  *
647  * r   Result of multiplication.
648  * a   First number to multiply in Montgomery form.
649  * b   Second number to multiply in Montgomery form.
650  * m   Modulus (prime).
651  * mp  Montgomery mulitplier.
652  */
sp_2048_mont_mul_avx2_16(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)653 static void sp_2048_mont_mul_avx2_16(sp_digit* r, const sp_digit* a,
654         const sp_digit* b, const sp_digit* m, sp_digit mp)
655 {
656     sp_2048_mul_avx2_16(r, a, b);
657     sp_2048_mont_reduce_avx2_16(r, m, mp);
658 }
659 
660 #endif /* HAVE_INTEL_AVX2 */
661 #ifdef HAVE_INTEL_AVX2
662 /* Square the Montgomery form number. (r = a * a mod m)
663  *
664  * r   Result of squaring.
665  * a   Number to square in Montgomery form.
666  * m   Modulus (prime).
667  * mp  Montgomery mulitplier.
668  */
sp_2048_mont_sqr_avx2_16(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)669 static void sp_2048_mont_sqr_avx2_16(sp_digit* r, const sp_digit* a,
670         const sp_digit* m, sp_digit mp)
671 {
672     sp_2048_sqr_avx2_16(r, a);
673     sp_2048_mont_reduce_avx2_16(r, m, mp);
674 }
675 
676 #endif /* HAVE_INTEL_AVX2 */
677 #ifdef HAVE_INTEL_AVX2
678 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
679  *
680  * r     A single precision number that is the result of the operation.
681  * a     A single precision number being exponentiated.
682  * e     A single precision number that is the exponent.
683  * bits  The number of bits in the exponent.
684  * m     A single precision number that is the modulus.
685  * returns  0 on success
686  * returns  MEMORY_E on dynamic memory allocation failure.
687  * returns  MP_VAL when base is even or exponent is 0.
688  */
sp_2048_mod_exp_avx2_16(sp_digit * r,const sp_digit * a,const sp_digit * e,int bits,const sp_digit * m,int reduceA)689 static int sp_2048_mod_exp_avx2_16(sp_digit* r, const sp_digit* a, const sp_digit* e,
690         int bits, const sp_digit* m, int reduceA)
691 {
692 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
693     sp_digit* td = NULL;
694 #else
695     sp_digit td[(33 * 32) + 32];
696 #endif
697     sp_digit* t[32];
698     sp_digit* rt = NULL;
699     sp_digit* norm;
700     sp_digit mp = 1;
701     sp_digit n;
702     sp_digit mask;
703     int i;
704     int c;
705     byte y;
706     int err = MP_OKAY;
707 
708     ASSERT_SAVED_VECTOR_REGISTERS();
709 
710     if ((m[0] & 1) == 0) {
711         err = MP_VAL;
712     }
713     else if (bits == 0) {
714         err = MP_VAL;
715     }
716 
717 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
718     if (err == MP_OKAY) {
719         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (33 * 32) + 32, NULL,
720                                 DYNAMIC_TYPE_TMP_BUFFER);
721         if (td == NULL) {
722             err = MEMORY_E;
723         }
724     }
725 #endif
726 
727     if (err == MP_OKAY) {
728         norm = td;
729 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
730         for (i=0; i<32; i++)
731             t[i] = td + i * 32;
732         rt = td + 1024;
733 #else
734         for (i=0; i<32; i++)
735             t[i] = &td[i * 32];
736         rt = &td[1024];
737 #endif
738 
739         sp_2048_mont_setup(m, &mp);
740         sp_2048_mont_norm_16(norm, m);
741 
742         XMEMSET(t[1], 0, sizeof(sp_digit) * 16);
743         if (reduceA) {
744             err = sp_2048_mod_16(t[1] + 16, a, m);
745             if (err == MP_OKAY)
746                 err = sp_2048_mod_16(t[1], t[1], m);
747         }
748         else {
749             XMEMCPY(t[1] + 16, a, sizeof(sp_digit) * 16);
750             err = sp_2048_mod_16(t[1], t[1], m);
751         }
752     }
753 
754     if (err == MP_OKAY) {
755         sp_2048_mont_sqr_avx2_16(t[ 2], t[ 1], m, mp);
756         sp_2048_mont_mul_avx2_16(t[ 3], t[ 2], t[ 1], m, mp);
757         sp_2048_mont_sqr_avx2_16(t[ 4], t[ 2], m, mp);
758         sp_2048_mont_mul_avx2_16(t[ 5], t[ 3], t[ 2], m, mp);
759         sp_2048_mont_sqr_avx2_16(t[ 6], t[ 3], m, mp);
760         sp_2048_mont_mul_avx2_16(t[ 7], t[ 4], t[ 3], m, mp);
761         sp_2048_mont_sqr_avx2_16(t[ 8], t[ 4], m, mp);
762         sp_2048_mont_mul_avx2_16(t[ 9], t[ 5], t[ 4], m, mp);
763         sp_2048_mont_sqr_avx2_16(t[10], t[ 5], m, mp);
764         sp_2048_mont_mul_avx2_16(t[11], t[ 6], t[ 5], m, mp);
765         sp_2048_mont_sqr_avx2_16(t[12], t[ 6], m, mp);
766         sp_2048_mont_mul_avx2_16(t[13], t[ 7], t[ 6], m, mp);
767         sp_2048_mont_sqr_avx2_16(t[14], t[ 7], m, mp);
768         sp_2048_mont_mul_avx2_16(t[15], t[ 8], t[ 7], m, mp);
769         sp_2048_mont_sqr_avx2_16(t[16], t[ 8], m, mp);
770         sp_2048_mont_mul_avx2_16(t[17], t[ 9], t[ 8], m, mp);
771         sp_2048_mont_sqr_avx2_16(t[18], t[ 9], m, mp);
772         sp_2048_mont_mul_avx2_16(t[19], t[10], t[ 9], m, mp);
773         sp_2048_mont_sqr_avx2_16(t[20], t[10], m, mp);
774         sp_2048_mont_mul_avx2_16(t[21], t[11], t[10], m, mp);
775         sp_2048_mont_sqr_avx2_16(t[22], t[11], m, mp);
776         sp_2048_mont_mul_avx2_16(t[23], t[12], t[11], m, mp);
777         sp_2048_mont_sqr_avx2_16(t[24], t[12], m, mp);
778         sp_2048_mont_mul_avx2_16(t[25], t[13], t[12], m, mp);
779         sp_2048_mont_sqr_avx2_16(t[26], t[13], m, mp);
780         sp_2048_mont_mul_avx2_16(t[27], t[14], t[13], m, mp);
781         sp_2048_mont_sqr_avx2_16(t[28], t[14], m, mp);
782         sp_2048_mont_mul_avx2_16(t[29], t[15], t[14], m, mp);
783         sp_2048_mont_sqr_avx2_16(t[30], t[15], m, mp);
784         sp_2048_mont_mul_avx2_16(t[31], t[16], t[15], m, mp);
785 
786         i = (bits - 1) / 64;
787         n = e[i--];
788         /* Number of bits available in top word. */
789         c = bits & 63;
790         if (c == 0) {
791             c = 64;
792         }
793         /* Minus the number of top bits to use so rest is a multiple of 5. */
794         if ((bits % 5) == 0) {
795             c -= 5;
796         }
797         else {
798             c -= bits % 5;
799         }
800         if (c < 0) {
801             /* Number of bits in top word is less than number needed. */
802             c = -c;
803             y = (byte)(n << c);
804             n = e[i--];
805             y |= (byte)(n >> (64 - c));
806             n <<= c;
807             c = 64 - c;
808         }
809         else {
810             y = (byte)(n >> c);
811             n <<= 64 - c;
812         }
813         XMEMCPY(r, t[y], sizeof(sp_digit) * 16);
814         for (; i>=0 || c>=5; ) {
815             if (c >= 5) {
816                 y = (byte)((n >> 59) & 0x1f);
817                 n <<= 5;
818                 c -= 5;
819             }
820             else if (c == 0) {
821                 n = e[i--];
822                 y = (byte)(n >> 59);
823                 n <<= 5;
824                 c = 59;
825             }
826             else {
827                 y = (byte)(n >> 59);
828                 n = e[i--];
829                 c = 5 - c;
830                 y |= (byte)(n >> (64 - c));
831                 n <<= c;
832                 c = 64 - c;
833             }
834 
835             sp_2048_sqr_avx2_16(rt, r);
836             sp_2048_mont_reduce_avx2_16(rt, m, mp);
837             sp_2048_sqr_avx2_16(r, rt);
838             sp_2048_mont_reduce_avx2_16(r, m, mp);
839             sp_2048_sqr_avx2_16(rt, r);
840             sp_2048_mont_reduce_avx2_16(rt, m, mp);
841             sp_2048_sqr_avx2_16(r, rt);
842             sp_2048_mont_reduce_avx2_16(r, m, mp);
843             sp_2048_sqr_avx2_16(rt, r);
844             sp_2048_mont_reduce_avx2_16(rt, m, mp);
845 
846             sp_2048_mul_avx2_16(r, rt, t[y]);
847             sp_2048_mont_reduce_avx2_16(r, m, mp);
848         }
849 
850         XMEMSET(&r[16], 0, sizeof(sp_digit) * 16);
851         sp_2048_mont_reduce_avx2_16(r, m, mp);
852 
853         mask = 0 - (sp_2048_cmp_16(r, m) >= 0);
854         sp_2048_cond_sub_avx2_16(r, r, m, mask);
855     }
856 
857 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
858     if (td != NULL)
859         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
860 #endif
861 
862     return err;
863 }
864 #endif /* HAVE_INTEL_AVX2 */
865 
866 #endif /* (WOLFSSL_HAVE_SP_RSA & !WOLFSSL_RSA_PUBLIC_ONLY) | WOLFSSL_HAVE_SP_DH */
867 
868 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
869 /* r = 2^n mod m where n is the number of bits to reduce by.
870  * Given m must be 2048 bits, just need to subtract.
871  *
872  * r  A single precision number.
873  * m  A single precision number.
874  */
sp_2048_mont_norm_32(sp_digit * r,const sp_digit * m)875 static void sp_2048_mont_norm_32(sp_digit* r, const sp_digit* m)
876 {
877     XMEMSET(r, 0, sizeof(sp_digit) * 32);
878 
879     ASSERT_SAVED_VECTOR_REGISTERS();
880 
881     /* r = 2^n mod m */
882     sp_2048_sub_in_place_32(r, m);
883 }
884 
885 #endif /* (WOLFSSL_HAVE_SP_RSA & !WOLFSSL_RSA_PUBLIC_ONLY) | WOLFSSL_HAVE_SP_DH */
886 extern sp_digit sp_2048_cond_sub_32(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
887 extern void sp_2048_mont_reduce_32(sp_digit* a, const sp_digit* m, sp_digit mp);
888 /* Multiply two Montgomery form numbers mod the modulus (prime).
889  * (r = a * b mod m)
890  *
891  * r   Result of multiplication.
892  * a   First number to multiply in Montgomery form.
893  * b   Second number to multiply in Montgomery form.
894  * m   Modulus (prime).
895  * mp  Montgomery mulitplier.
896  */
sp_2048_mont_mul_32(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)897 static void sp_2048_mont_mul_32(sp_digit* r, const sp_digit* a,
898         const sp_digit* b, const sp_digit* m, sp_digit mp)
899 {
900     sp_2048_mul_32(r, a, b);
901     sp_2048_mont_reduce_32(r, m, mp);
902 }
903 
904 /* Square the Montgomery form number. (r = a * a mod m)
905  *
906  * r   Result of squaring.
907  * a   Number to square in Montgomery form.
908  * m   Modulus (prime).
909  * mp  Montgomery mulitplier.
910  */
sp_2048_mont_sqr_32(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)911 static void sp_2048_mont_sqr_32(sp_digit* r, const sp_digit* a,
912         const sp_digit* m, sp_digit mp)
913 {
914     sp_2048_sqr_32(r, a);
915     sp_2048_mont_reduce_32(r, m, mp);
916 }
917 
918 extern sp_digit sp_2048_sub_32(sp_digit* r, const sp_digit* a, const sp_digit* b);
919 extern void sp_2048_mul_d_avx2_32(sp_digit* r, const sp_digit* a, const sp_digit b);
920 #ifdef _WIN64
921 #if _MSC_VER < 1920
922 extern sp_digit div_2048_word_asm_32(sp_digit d1, sp_digit d0, sp_digit div);
923 #endif /* _MSC_VER < 1920 */
924 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
925  *
926  * d1   The high order half of the number to divide.
927  * d0   The low order half of the number to divide.
928  * div  The dividend.
929  * returns the result of the division.
930  */
div_2048_word_32(sp_digit d1,sp_digit d0,sp_digit div)931 static WC_INLINE sp_digit div_2048_word_32(sp_digit d1, sp_digit d0,
932         sp_digit div)
933 {
934     ASSERT_SAVED_VECTOR_REGISTERS();
935 #if _MSC_VER >= 1920
936     return _udiv128(d1, d0, div, NULL);
937 #else
938     return div_2048_word_asm_32(d1, d0, div);
939 #endif
940 }
941 #else
942 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
943  *
944  * d1   The high order half of the number to divide.
945  * d0   The low order half of the number to divide.
946  * div  The dividend.
947  * returns the result of the division.
948  */
div_2048_word_32(sp_digit d1,sp_digit d0,sp_digit div)949 static WC_INLINE sp_digit div_2048_word_32(sp_digit d1, sp_digit d0,
950         sp_digit div)
951 {
952     ASSERT_SAVED_VECTOR_REGISTERS();
953     register sp_digit r asm("rax");
954     __asm__ __volatile__ (
955         "divq %3"
956         : "=a" (r)
957         : "d" (d1), "a" (d0), "r" (div)
958         :
959     );
960     return r;
961 }
962 #endif /* _WIN64 */
963 /* Divide d in a and put remainder into r (m*d + r = a)
964  * m is not calculated as it is not needed at this time.
965  *
966  * a  Number to be divided.
967  * d  Number to divide with.
968  * m  Multiplier result.
969  * r  Remainder from the division.
970  * returns MP_OKAY indicating success.
971  */
sp_2048_div_32_cond(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)972 static WC_INLINE int sp_2048_div_32_cond(const sp_digit* a, const sp_digit* d, sp_digit* m,
973         sp_digit* r)
974 {
975     sp_digit t1[64];
976     sp_digit t2[33];
977     sp_digit div;
978     sp_digit r1;
979     int i;
980 #ifdef HAVE_INTEL_AVX2
981     word32 cpuid_flags = cpuid_get_flags();
982 #endif
983 
984     ASSERT_SAVED_VECTOR_REGISTERS();
985 
986     (void)m;
987 
988     div = d[31];
989     XMEMCPY(t1, a, sizeof(*t1) * 2 * 32);
990     for (i = 31; i > 0; i--) {
991         if (t1[i + 32] != d[i])
992             break;
993     }
994     if (t1[i + 32] >= d[i]) {
995         sp_2048_sub_in_place_32(&t1[32], d);
996     }
997     for (i=31; i>=0; i--) {
998         sp_digit hi = t1[32 + i] - (t1[32 + i] == div);
999         r1 = div_2048_word_32(hi, t1[32 + i - 1], div);
1000 
1001 #ifdef HAVE_INTEL_AVX2
1002         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
1003             sp_2048_mul_d_avx2_32(t2, d, r1);
1004         else
1005 #endif
1006             sp_2048_mul_d_32(t2, d, r1);
1007         t1[32 + i] += sp_2048_sub_in_place_32(&t1[i], t2);
1008         t1[32 + i] -= t2[32];
1009         if (t1[32 + i] != 0) {
1010             t1[32 + i] += sp_2048_add_32(&t1[i], &t1[i], d);
1011             if (t1[32 + i] != 0)
1012                 t1[32 + i] += sp_2048_add_32(&t1[i], &t1[i], d);
1013         }
1014     }
1015 
1016     for (i = 31; i > 0; i--) {
1017         if (t1[i] != d[i])
1018             break;
1019     }
1020     if (t1[i] >= d[i]) {
1021         sp_2048_sub_32(r, t1, d);
1022     }
1023     else {
1024         XMEMCPY(r, t1, sizeof(*t1) * 32);
1025     }
1026 
1027     return MP_OKAY;
1028 }
1029 
1030 /* Reduce a modulo m into r. (r = a mod m)
1031  *
1032  * r  A single precision number that is the reduced result.
1033  * a  A single precision number that is to be reduced.
1034  * m  A single precision number that is the modulus to reduce with.
1035  * returns MP_OKAY indicating success.
1036  */
sp_2048_mod_32_cond(sp_digit * r,const sp_digit * a,const sp_digit * m)1037 static WC_INLINE int sp_2048_mod_32_cond(sp_digit* r, const sp_digit* a,
1038         const sp_digit* m)
1039 {
1040     ASSERT_SAVED_VECTOR_REGISTERS();
1041     return sp_2048_div_32_cond(a, m, NULL, r);
1042 }
1043 
1044 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
1045 extern sp_digit sp_2048_cond_sub_avx2_32(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
1046 /* AND m into each word of a and store in r.
1047  *
1048  * r  A single precision integer.
1049  * a  A single precision integer.
1050  * m  Mask to AND against each digit.
1051  */
sp_2048_mask_32(sp_digit * r,const sp_digit * a,sp_digit m)1052 static void sp_2048_mask_32(sp_digit* r, const sp_digit* a, sp_digit m)
1053 {
1054 #ifdef WOLFSSL_SP_SMALL
1055     int i;
1056 
1057     for (i=0; i<32; i++) {
1058         r[i] = a[i] & m;
1059     }
1060 #else
1061     int i;
1062 
1063     for (i = 0; i < 32; i += 8) {
1064         r[i+0] = a[i+0] & m;
1065         r[i+1] = a[i+1] & m;
1066         r[i+2] = a[i+2] & m;
1067         r[i+3] = a[i+3] & m;
1068         r[i+4] = a[i+4] & m;
1069         r[i+5] = a[i+5] & m;
1070         r[i+6] = a[i+6] & m;
1071         r[i+7] = a[i+7] & m;
1072     }
1073 #endif
1074 }
1075 
1076 extern sp_int64 sp_2048_cmp_32(const sp_digit* a, const sp_digit* b);
1077 /* Divide d in a and put remainder into r (m*d + r = a)
1078  * m is not calculated as it is not needed at this time.
1079  *
1080  * a  Number to be divided.
1081  * d  Number to divide with.
1082  * m  Multiplier result.
1083  * r  Remainder from the division.
1084  * returns MP_OKAY indicating success.
1085  */
sp_2048_div_32(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)1086 static WC_INLINE int sp_2048_div_32(const sp_digit* a, const sp_digit* d, sp_digit* m,
1087         sp_digit* r)
1088 {
1089     sp_digit t1[64];
1090     sp_digit t2[33];
1091     sp_digit div;
1092     sp_digit r1;
1093     int i;
1094 #ifdef HAVE_INTEL_AVX2
1095     word32 cpuid_flags = cpuid_get_flags();
1096 #endif
1097 
1098     ASSERT_SAVED_VECTOR_REGISTERS();
1099 
1100     (void)m;
1101 
1102     div = d[31];
1103     XMEMCPY(t1, a, sizeof(*t1) * 2 * 32);
1104     r1 = sp_2048_cmp_32(&t1[32], d) >= 0;
1105 #ifdef HAVE_INTEL_AVX2
1106     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
1107         sp_2048_cond_sub_avx2_32(&t1[32], &t1[32], d, (sp_digit)0 - r1);
1108     else
1109 #endif
1110         sp_2048_cond_sub_32(&t1[32], &t1[32], d, (sp_digit)0 - r1);
1111     for (i=31; i>=0; i--) {
1112         sp_digit hi = t1[32 + i] - (t1[32 + i] == div);
1113         r1 = div_2048_word_32(hi, t1[32 + i - 1], div);
1114 
1115 #ifdef HAVE_INTEL_AVX2
1116         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
1117             sp_2048_mul_d_avx2_32(t2, d, r1);
1118         else
1119 #endif
1120             sp_2048_mul_d_32(t2, d, r1);
1121         t1[32 + i] += sp_2048_sub_in_place_32(&t1[i], t2);
1122         t1[32 + i] -= t2[32];
1123         sp_2048_mask_32(t2, d, t1[32 + i]);
1124         t1[32 + i] += sp_2048_add_32(&t1[i], &t1[i], t2);
1125         sp_2048_mask_32(t2, d, t1[32 + i]);
1126         t1[32 + i] += sp_2048_add_32(&t1[i], &t1[i], t2);
1127     }
1128 
1129     r1 = sp_2048_cmp_32(t1, d) >= 0;
1130 #ifdef HAVE_INTEL_AVX2
1131     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
1132         sp_2048_cond_sub_avx2_32(r, t1, d, (sp_digit)0 - r1);
1133     else
1134 #endif
1135         sp_2048_cond_sub_32(r, t1, d, (sp_digit)0 - r1);
1136 
1137     return MP_OKAY;
1138 }
1139 
1140 #if defined(WOLFSSL_HAVE_SP_DH) || !defined(WOLFSSL_RSA_PUBLIC_ONLY)
1141 /* Reduce a modulo m into r. (r = a mod m)
1142  *
1143  * r  A single precision number that is the reduced result.
1144  * a  A single precision number that is to be reduced.
1145  * m  A single precision number that is the modulus to reduce with.
1146  * returns MP_OKAY indicating success.
1147  */
sp_2048_mod_32(sp_digit * r,const sp_digit * a,const sp_digit * m)1148 static WC_INLINE int sp_2048_mod_32(sp_digit* r, const sp_digit* a,
1149         const sp_digit* m)
1150 {
1151     ASSERT_SAVED_VECTOR_REGISTERS();
1152     return sp_2048_div_32(a, m, NULL, r);
1153 }
1154 
1155 #endif /* WOLFSSL_HAVE_SP_DH || !WOLFSSL_RSA_PUBLIC_ONLY */
1156 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
1157  *
1158  * r     A single precision number that is the result of the operation.
1159  * a     A single precision number being exponentiated.
1160  * e     A single precision number that is the exponent.
1161  * bits  The number of bits in the exponent.
1162  * m     A single precision number that is the modulus.
1163  * returns  0 on success
1164  * returns  MEMORY_E on dynamic memory allocation failure.
1165  * returns  MP_VAL when base is even or exponent is 0.
1166  */
sp_2048_mod_exp_32(sp_digit * r,const sp_digit * a,const sp_digit * e,int bits,const sp_digit * m,int reduceA)1167 static int sp_2048_mod_exp_32(sp_digit* r, const sp_digit* a, const sp_digit* e,
1168         int bits, const sp_digit* m, int reduceA)
1169 {
1170 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
1171     sp_digit* td = NULL;
1172 #else
1173     sp_digit td[(17 * 64) + 64];
1174 #endif
1175     sp_digit* t[16];
1176     sp_digit* rt = NULL;
1177     sp_digit* norm;
1178     sp_digit mp = 1;
1179     sp_digit n;
1180     sp_digit mask;
1181     int i;
1182     int c;
1183     byte y;
1184     int err = MP_OKAY;
1185 
1186     ASSERT_SAVED_VECTOR_REGISTERS();
1187 
1188     if ((m[0] & 1) == 0) {
1189         err = MP_VAL;
1190     }
1191     else if (bits == 0) {
1192         err = MP_VAL;
1193     }
1194 
1195 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
1196     if (err == MP_OKAY) {
1197         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (17 * 64) + 64, NULL,
1198                                 DYNAMIC_TYPE_TMP_BUFFER);
1199         if (td == NULL) {
1200             err = MEMORY_E;
1201         }
1202     }
1203 #endif
1204 
1205     if (err == MP_OKAY) {
1206         norm = td;
1207 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
1208         for (i=0; i<16; i++)
1209             t[i] = td + i * 64;
1210         rt = td + 1024;
1211 #else
1212         for (i=0; i<16; i++)
1213             t[i] = &td[i * 64];
1214         rt = &td[1024];
1215 #endif
1216 
1217         sp_2048_mont_setup(m, &mp);
1218         sp_2048_mont_norm_32(norm, m);
1219 
1220         XMEMSET(t[1], 0, sizeof(sp_digit) * 32);
1221         if (reduceA) {
1222             err = sp_2048_mod_32(t[1] + 32, a, m);
1223             if (err == MP_OKAY)
1224                 err = sp_2048_mod_32(t[1], t[1], m);
1225         }
1226         else {
1227             XMEMCPY(t[1] + 32, a, sizeof(sp_digit) * 32);
1228             err = sp_2048_mod_32(t[1], t[1], m);
1229         }
1230     }
1231 
1232     if (err == MP_OKAY) {
1233         sp_2048_mont_sqr_32(t[ 2], t[ 1], m, mp);
1234         sp_2048_mont_mul_32(t[ 3], t[ 2], t[ 1], m, mp);
1235         sp_2048_mont_sqr_32(t[ 4], t[ 2], m, mp);
1236         sp_2048_mont_mul_32(t[ 5], t[ 3], t[ 2], m, mp);
1237         sp_2048_mont_sqr_32(t[ 6], t[ 3], m, mp);
1238         sp_2048_mont_mul_32(t[ 7], t[ 4], t[ 3], m, mp);
1239         sp_2048_mont_sqr_32(t[ 8], t[ 4], m, mp);
1240         sp_2048_mont_mul_32(t[ 9], t[ 5], t[ 4], m, mp);
1241         sp_2048_mont_sqr_32(t[10], t[ 5], m, mp);
1242         sp_2048_mont_mul_32(t[11], t[ 6], t[ 5], m, mp);
1243         sp_2048_mont_sqr_32(t[12], t[ 6], m, mp);
1244         sp_2048_mont_mul_32(t[13], t[ 7], t[ 6], m, mp);
1245         sp_2048_mont_sqr_32(t[14], t[ 7], m, mp);
1246         sp_2048_mont_mul_32(t[15], t[ 8], t[ 7], m, mp);
1247 
1248         i = (bits - 1) / 64;
1249         n = e[i--];
1250         /* Number of bits available in top word. */
1251         c = bits & 63;
1252         if (c == 0) {
1253             c = 64;
1254         }
1255         /* Minus the number of top bits to use so rest is a multiple of 4. */
1256         if ((bits % 4) == 0) {
1257             c -= 4;
1258         }
1259         else {
1260             c -= bits % 4;
1261         }
1262         if (c < 0) {
1263             /* Number of bits in top word is less than number needed. */
1264             c = -c;
1265             y = (byte)(n << c);
1266             n = e[i--];
1267             y |= (byte)(n >> (64 - c));
1268             n <<= c;
1269             c = 64 - c;
1270         }
1271         else {
1272             y = (byte)(n >> c);
1273             n <<= 64 - c;
1274         }
1275         XMEMCPY(r, t[y], sizeof(sp_digit) * 32);
1276         for (; i>=0 || c>=4; ) {
1277             if (c >= 4) {
1278                 y = (byte)((n >> 60) & 0xf);
1279                 n <<= 4;
1280                 c -= 4;
1281             }
1282             else if (c == 0) {
1283                 n = e[i--];
1284                 y = (byte)(n >> 60);
1285                 n <<= 4;
1286                 c = 60;
1287             }
1288             else {
1289                 y = (byte)(n >> 60);
1290                 n = e[i--];
1291                 c = 4 - c;
1292                 y |= (byte)(n >> (64 - c));
1293                 n <<= c;
1294                 c = 64 - c;
1295             }
1296 
1297             sp_2048_sqr_32(rt, r);
1298             sp_2048_mont_reduce_32(rt, m, mp);
1299             sp_2048_sqr_32(r, rt);
1300             sp_2048_mont_reduce_32(r, m, mp);
1301             sp_2048_sqr_32(rt, r);
1302             sp_2048_mont_reduce_32(rt, m, mp);
1303             sp_2048_sqr_32(r, rt);
1304             sp_2048_mont_reduce_32(r, m, mp);
1305 
1306             sp_2048_mul_32(r, r, t[y]);
1307             sp_2048_mont_reduce_32(r, m, mp);
1308         }
1309 
1310         XMEMSET(&r[32], 0, sizeof(sp_digit) * 32);
1311         sp_2048_mont_reduce_32(r, m, mp);
1312 
1313         mask = 0 - (sp_2048_cmp_32(r, m) >= 0);
1314         sp_2048_cond_sub_32(r, r, m, mask);
1315     }
1316 
1317 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
1318     if (td != NULL)
1319         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
1320 #endif
1321 
1322     return err;
1323 }
1324 
1325 #endif /* (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
1326 extern void sp_2048_mont_reduce_avx2_32(sp_digit* a, const sp_digit* m, sp_digit mp);
1327 #ifdef HAVE_INTEL_AVX2
1328 /* Multiply two Montgomery form numbers mod the modulus (prime).
1329  * (r = a * b mod m)
1330  *
1331  * r   Result of multiplication.
1332  * a   First number to multiply in Montgomery form.
1333  * b   Second number to multiply in Montgomery form.
1334  * m   Modulus (prime).
1335  * mp  Montgomery mulitplier.
1336  */
sp_2048_mont_mul_avx2_32(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)1337 static void sp_2048_mont_mul_avx2_32(sp_digit* r, const sp_digit* a,
1338         const sp_digit* b, const sp_digit* m, sp_digit mp)
1339 {
1340     sp_2048_mul_avx2_32(r, a, b);
1341     sp_2048_mont_reduce_avx2_32(r, m, mp);
1342 }
1343 
1344 #endif /* HAVE_INTEL_AVX2 */
1345 #ifdef HAVE_INTEL_AVX2
1346 /* Square the Montgomery form number. (r = a * a mod m)
1347  *
1348  * r   Result of squaring.
1349  * a   Number to square in Montgomery form.
1350  * m   Modulus (prime).
1351  * mp  Montgomery mulitplier.
1352  */
sp_2048_mont_sqr_avx2_32(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)1353 static void sp_2048_mont_sqr_avx2_32(sp_digit* r, const sp_digit* a,
1354         const sp_digit* m, sp_digit mp)
1355 {
1356     sp_2048_sqr_avx2_32(r, a);
1357     sp_2048_mont_reduce_avx2_32(r, m, mp);
1358 }
1359 
1360 #endif /* HAVE_INTEL_AVX2 */
1361 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
1362 #ifdef HAVE_INTEL_AVX2
1363 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
1364  *
1365  * r     A single precision number that is the result of the operation.
1366  * a     A single precision number being exponentiated.
1367  * e     A single precision number that is the exponent.
1368  * bits  The number of bits in the exponent.
1369  * m     A single precision number that is the modulus.
1370  * returns  0 on success
1371  * returns  MEMORY_E on dynamic memory allocation failure.
1372  * returns  MP_VAL when base is even or exponent is 0.
1373  */
sp_2048_mod_exp_avx2_32(sp_digit * r,const sp_digit * a,const sp_digit * e,int bits,const sp_digit * m,int reduceA)1374 static int sp_2048_mod_exp_avx2_32(sp_digit* r, const sp_digit* a, const sp_digit* e,
1375         int bits, const sp_digit* m, int reduceA)
1376 {
1377 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
1378     sp_digit* td = NULL;
1379 #else
1380     sp_digit td[(17 * 64) + 64];
1381 #endif
1382     sp_digit* t[16];
1383     sp_digit* rt = NULL;
1384     sp_digit* norm;
1385     sp_digit mp = 1;
1386     sp_digit n;
1387     sp_digit mask;
1388     int i;
1389     int c;
1390     byte y;
1391     int err = MP_OKAY;
1392 
1393     ASSERT_SAVED_VECTOR_REGISTERS();
1394 
1395     if ((m[0] & 1) == 0) {
1396         err = MP_VAL;
1397     }
1398     else if (bits == 0) {
1399         err = MP_VAL;
1400     }
1401 
1402 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
1403     if (err == MP_OKAY) {
1404         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (17 * 64) + 64, NULL,
1405                                 DYNAMIC_TYPE_TMP_BUFFER);
1406         if (td == NULL) {
1407             err = MEMORY_E;
1408         }
1409     }
1410 #endif
1411 
1412     if (err == MP_OKAY) {
1413         norm = td;
1414 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
1415         for (i=0; i<16; i++)
1416             t[i] = td + i * 64;
1417         rt = td + 1024;
1418 #else
1419         for (i=0; i<16; i++)
1420             t[i] = &td[i * 64];
1421         rt = &td[1024];
1422 #endif
1423 
1424         sp_2048_mont_setup(m, &mp);
1425         sp_2048_mont_norm_32(norm, m);
1426 
1427         XMEMSET(t[1], 0, sizeof(sp_digit) * 32);
1428         if (reduceA) {
1429             err = sp_2048_mod_32(t[1] + 32, a, m);
1430             if (err == MP_OKAY)
1431                 err = sp_2048_mod_32(t[1], t[1], m);
1432         }
1433         else {
1434             XMEMCPY(t[1] + 32, a, sizeof(sp_digit) * 32);
1435             err = sp_2048_mod_32(t[1], t[1], m);
1436         }
1437     }
1438 
1439     if (err == MP_OKAY) {
1440         sp_2048_mont_sqr_avx2_32(t[ 2], t[ 1], m, mp);
1441         sp_2048_mont_mul_avx2_32(t[ 3], t[ 2], t[ 1], m, mp);
1442         sp_2048_mont_sqr_avx2_32(t[ 4], t[ 2], m, mp);
1443         sp_2048_mont_mul_avx2_32(t[ 5], t[ 3], t[ 2], m, mp);
1444         sp_2048_mont_sqr_avx2_32(t[ 6], t[ 3], m, mp);
1445         sp_2048_mont_mul_avx2_32(t[ 7], t[ 4], t[ 3], m, mp);
1446         sp_2048_mont_sqr_avx2_32(t[ 8], t[ 4], m, mp);
1447         sp_2048_mont_mul_avx2_32(t[ 9], t[ 5], t[ 4], m, mp);
1448         sp_2048_mont_sqr_avx2_32(t[10], t[ 5], m, mp);
1449         sp_2048_mont_mul_avx2_32(t[11], t[ 6], t[ 5], m, mp);
1450         sp_2048_mont_sqr_avx2_32(t[12], t[ 6], m, mp);
1451         sp_2048_mont_mul_avx2_32(t[13], t[ 7], t[ 6], m, mp);
1452         sp_2048_mont_sqr_avx2_32(t[14], t[ 7], m, mp);
1453         sp_2048_mont_mul_avx2_32(t[15], t[ 8], t[ 7], m, mp);
1454 
1455         i = (bits - 1) / 64;
1456         n = e[i--];
1457         /* Number of bits available in top word. */
1458         c = bits & 63;
1459         if (c == 0) {
1460             c = 64;
1461         }
1462         /* Minus the number of top bits to use so rest is a multiple of 4. */
1463         if ((bits % 4) == 0) {
1464             c -= 4;
1465         }
1466         else {
1467             c -= bits % 4;
1468         }
1469         if (c < 0) {
1470             /* Number of bits in top word is less than number needed. */
1471             c = -c;
1472             y = (byte)(n << c);
1473             n = e[i--];
1474             y |= (byte)(n >> (64 - c));
1475             n <<= c;
1476             c = 64 - c;
1477         }
1478         else {
1479             y = (byte)(n >> c);
1480             n <<= 64 - c;
1481         }
1482         XMEMCPY(r, t[y], sizeof(sp_digit) * 32);
1483         for (; i>=0 || c>=4; ) {
1484             if (c >= 4) {
1485                 y = (byte)((n >> 60) & 0xf);
1486                 n <<= 4;
1487                 c -= 4;
1488             }
1489             else if (c == 0) {
1490                 n = e[i--];
1491                 y = (byte)(n >> 60);
1492                 n <<= 4;
1493                 c = 60;
1494             }
1495             else {
1496                 y = (byte)(n >> 60);
1497                 n = e[i--];
1498                 c = 4 - c;
1499                 y |= (byte)(n >> (64 - c));
1500                 n <<= c;
1501                 c = 64 - c;
1502             }
1503 
1504             sp_2048_sqr_avx2_32(rt, r);
1505             sp_2048_mont_reduce_avx2_32(rt, m, mp);
1506             sp_2048_sqr_avx2_32(r, rt);
1507             sp_2048_mont_reduce_avx2_32(r, m, mp);
1508             sp_2048_sqr_avx2_32(rt, r);
1509             sp_2048_mont_reduce_avx2_32(rt, m, mp);
1510             sp_2048_sqr_avx2_32(r, rt);
1511             sp_2048_mont_reduce_avx2_32(r, m, mp);
1512 
1513             sp_2048_mul_avx2_32(r, r, t[y]);
1514             sp_2048_mont_reduce_avx2_32(r, m, mp);
1515         }
1516 
1517         XMEMSET(&r[32], 0, sizeof(sp_digit) * 32);
1518         sp_2048_mont_reduce_avx2_32(r, m, mp);
1519 
1520         mask = 0 - (sp_2048_cmp_32(r, m) >= 0);
1521         sp_2048_cond_sub_avx2_32(r, r, m, mask);
1522     }
1523 
1524 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
1525     if (td != NULL)
1526         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
1527 #endif
1528 
1529     return err;
1530 }
1531 #endif /* HAVE_INTEL_AVX2 */
1532 
1533 #endif /* (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
1534 #ifdef WOLFSSL_HAVE_SP_RSA
1535 /* RSA public key operation.
1536  *
1537  * in      Array of bytes representing the number to exponentiate, base.
1538  * inLen   Number of bytes in base.
1539  * em      Public exponent.
1540  * mm      Modulus.
1541  * out     Buffer to hold big-endian bytes of exponentiation result.
1542  *         Must be at least 256 bytes long.
1543  * outLen  Number of bytes in result.
1544  * returns 0 on success, MP_TO_E when the outLen is too small, MP_READ_E when
1545  * an array is too long and MEMORY_E when dynamic memory allocation fails.
1546  */
sp_RsaPublic_2048(const byte * in,word32 inLen,const mp_int * em,const mp_int * mm,byte * out,word32 * outLen)1547 int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em,
1548     const mp_int* mm, byte* out, word32* outLen)
1549 {
1550 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
1551     sp_digit* a = NULL;
1552 #else
1553     sp_digit a[32 * 5];
1554 #endif
1555     sp_digit* ah;
1556     sp_digit* m;
1557     sp_digit* r;
1558     sp_digit  e = 0;
1559     int err = MP_OKAY;
1560 #ifdef HAVE_INTEL_AVX2
1561     word32 cpuid_flags = cpuid_get_flags();
1562 #endif
1563 
1564     ASSERT_SAVED_VECTOR_REGISTERS();
1565 
1566     if (*outLen < 256) {
1567         err = MP_TO_E;
1568     }
1569     else if (mp_count_bits(em) > 64 || inLen > 256 ||
1570                                                      mp_count_bits(mm) != 2048) {
1571         err = MP_READ_E;
1572     }
1573     else if (mp_iseven(mm)) {
1574         err = MP_VAL;
1575     }
1576 
1577 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
1578     if (err == MP_OKAY) {
1579         a = (sp_digit*)XMALLOC(sizeof(sp_digit) * 32 * 5, NULL,
1580                                                               DYNAMIC_TYPE_RSA);
1581         if (a == NULL)
1582             err = MEMORY_E;
1583     }
1584 #endif
1585 
1586     if (err == MP_OKAY) {
1587         r = a + 32 * 2;
1588         m = r + 32 * 2;
1589         ah = a + 32;
1590 
1591         sp_2048_from_bin(ah, 32, in, inLen);
1592 #if DIGIT_BIT >= 64
1593         e = em->dp[0];
1594 #else
1595         e = em->dp[0];
1596         if (em->used > 1)
1597             e |= ((sp_digit)em->dp[1]) << DIGIT_BIT;
1598 #endif
1599         if (e == 0)
1600             err = MP_EXPTMOD_E;
1601     }
1602     if (err == MP_OKAY) {
1603         sp_2048_from_mp(m, 32, mm);
1604 
1605         if (e == 0x3) {
1606 #ifdef HAVE_INTEL_AVX2
1607             if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
1608                 if (err == MP_OKAY) {
1609                     sp_2048_sqr_avx2_32(r, ah);
1610                     err = sp_2048_mod_32_cond(r, r, m);
1611                 }
1612                 if (err == MP_OKAY) {
1613                     sp_2048_mul_avx2_32(r, ah, r);
1614                     err = sp_2048_mod_32_cond(r, r, m);
1615                 }
1616             }
1617             else
1618 #endif
1619             {
1620                 if (err == MP_OKAY) {
1621                     sp_2048_sqr_32(r, ah);
1622                     err = sp_2048_mod_32_cond(r, r, m);
1623                 }
1624                 if (err == MP_OKAY) {
1625                     sp_2048_mul_32(r, ah, r);
1626                     err = sp_2048_mod_32_cond(r, r, m);
1627                 }
1628             }
1629         }
1630         else {
1631             int i;
1632             sp_digit mp;
1633 
1634             sp_2048_mont_setup(m, &mp);
1635 
1636             /* Convert to Montgomery form. */
1637             XMEMSET(a, 0, sizeof(sp_digit) * 32);
1638             err = sp_2048_mod_32_cond(a, a, m);
1639 
1640             if (err == MP_OKAY) {
1641                 for (i=63; i>=0; i--) {
1642                     if (e >> i) {
1643                         break;
1644                     }
1645                 }
1646 
1647                 XMEMCPY(r, a, sizeof(sp_digit) * 32);
1648 #ifdef HAVE_INTEL_AVX2
1649                 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
1650                     for (i--; i>=0; i--) {
1651                         sp_2048_mont_sqr_avx2_32(r, r, m, mp);
1652                         if (((e >> i) & 1) == 1) {
1653                             sp_2048_mont_mul_avx2_32(r, r, a, m, mp);
1654                         }
1655                     }
1656                     XMEMSET(&r[32], 0, sizeof(sp_digit) * 32);
1657                     sp_2048_mont_reduce_avx2_32(r, m, mp);
1658                 }
1659                 else
1660 #endif
1661                 {
1662                     for (i--; i>=0; i--) {
1663                         sp_2048_mont_sqr_32(r, r, m, mp);
1664                         if (((e >> i) & 1) == 1) {
1665                             sp_2048_mont_mul_32(r, r, a, m, mp);
1666                         }
1667                     }
1668                     XMEMSET(&r[32], 0, sizeof(sp_digit) * 32);
1669                     sp_2048_mont_reduce_32(r, m, mp);
1670                 }
1671 
1672                 for (i = 31; i > 0; i--) {
1673                     if (r[i] != m[i])
1674                         break;
1675                 }
1676                 if (r[i] >= m[i])
1677                     sp_2048_sub_in_place_32(r, m);
1678             }
1679         }
1680     }
1681 
1682     if (err == MP_OKAY) {
1683         sp_2048_to_bin_32(r, out);
1684         *outLen = 256;
1685     }
1686 
1687 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
1688     if (a != NULL)
1689         XFREE(a, NULL, DYNAMIC_TYPE_RSA);
1690 #endif
1691 
1692     return err;
1693 }
1694 
1695 #ifndef WOLFSSL_RSA_PUBLIC_ONLY
1696 #if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
1697 /* RSA private key operation.
1698  *
1699  * in      Array of bytes representing the number to exponentiate, base.
1700  * inLen   Number of bytes in base.
1701  * dm      Private exponent.
1702  * pm      First prime.
1703  * qm      Second prime.
1704  * dpm     First prime's CRT exponent.
1705  * dqm     Second prime's CRT exponent.
1706  * qim     Inverse of second prime mod p.
1707  * mm      Modulus.
1708  * out     Buffer to hold big-endian bytes of exponentiation result.
1709  *         Must be at least 256 bytes long.
1710  * outLen  Number of bytes in result.
1711  * returns 0 on success, MP_TO_E when the outLen is too small, MP_READ_E when
1712  * an array is too long and MEMORY_E when dynamic memory allocation fails.
1713  */
sp_RsaPrivate_2048(const byte * in,word32 inLen,const mp_int * dm,const mp_int * pm,const mp_int * qm,const mp_int * dpm,const mp_int * dqm,const mp_int * qim,const mp_int * mm,byte * out,word32 * outLen)1714 int sp_RsaPrivate_2048(const byte* in, word32 inLen, const mp_int* dm,
1715     const mp_int* pm, const mp_int* qm,const  mp_int* dpm, const mp_int* dqm,
1716     const mp_int* qim, const mp_int* mm, byte* out, word32* outLen)
1717 {
1718 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
1719     sp_digit* d = NULL;
1720 #else
1721     sp_digit d[32 * 4];
1722 #endif
1723     sp_digit* a;
1724     sp_digit* m;
1725     sp_digit* r;
1726     int err = MP_OKAY;
1727 
1728     ASSERT_SAVED_VECTOR_REGISTERS();
1729 
1730     (void)pm;
1731     (void)qm;
1732     (void)dpm;
1733     (void)dqm;
1734     (void)qim;
1735 
1736     if (*outLen < 256U) {
1737         err = MP_TO_E;
1738     }
1739     if (err == MP_OKAY) {
1740         if (mp_count_bits(dm) > 2048) {
1741             err = MP_READ_E;
1742         }
1743         else if (inLen > 256U) {
1744             err = MP_READ_E;
1745         }
1746         else if (mp_count_bits(mm) != 2048) {
1747             err = MP_READ_E;
1748         }
1749         else if (mp_iseven(mm)) {
1750             err = MP_VAL;
1751         }
1752     }
1753 
1754 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
1755     if (err == MP_OKAY) {
1756         d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 32 * 4, NULL,
1757                                                              DYNAMIC_TYPE_RSA);
1758         if (d == NULL) {
1759             err = MEMORY_E;
1760         }
1761     }
1762 #endif
1763 
1764     if (err == MP_OKAY) {
1765         a = d + 32;
1766         m = a + 64;
1767 
1768         r = a;
1769 
1770         sp_2048_from_bin(a, 32, in, inLen);
1771         sp_2048_from_mp(d, 32, dm);
1772         sp_2048_from_mp(m, 32, mm);
1773         err = sp_2048_mod_exp_32(r, a, d, 2048, m, 0);
1774     }
1775 
1776     if (err == MP_OKAY) {
1777         sp_2048_to_bin_32(r, out);
1778         *outLen = 256;
1779     }
1780 
1781 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
1782     if (d != NULL)
1783 #endif
1784     {
1785         /* only zeroing private "d" */
1786         ForceZero(d, sizeof(sp_digit) * 32);
1787     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
1788         XFREE(d, NULL, DYNAMIC_TYPE_RSA);
1789     #endif
1790     }
1791 
1792     return err;
1793 }
1794 
1795 #else
1796 extern sp_digit sp_2048_cond_add_16(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
1797 extern sp_digit sp_2048_cond_add_avx2_16(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
1798 /* RSA private key operation.
1799  *
1800  * in      Array of bytes representing the number to exponentiate, base.
1801  * inLen   Number of bytes in base.
1802  * dm      Private exponent.
1803  * pm      First prime.
1804  * qm      Second prime.
1805  * dpm     First prime's CRT exponent.
1806  * dqm     Second prime's CRT exponent.
1807  * qim     Inverse of second prime mod p.
1808  * mm      Modulus.
1809  * out     Buffer to hold big-endian bytes of exponentiation result.
1810  *         Must be at least 256 bytes long.
1811  * outLen  Number of bytes in result.
1812  * returns 0 on success, MP_TO_E when the outLen is too small, MP_READ_E when
1813  * an array is too long and MEMORY_E when dynamic memory allocation fails.
1814  */
sp_RsaPrivate_2048(const byte * in,word32 inLen,const mp_int * dm,const mp_int * pm,const mp_int * qm,const mp_int * dpm,const mp_int * dqm,const mp_int * qim,const mp_int * mm,byte * out,word32 * outLen)1815 int sp_RsaPrivate_2048(const byte* in, word32 inLen, const mp_int* dm,
1816     const mp_int* pm, const mp_int* qm, const mp_int* dpm, const mp_int* dqm,
1817     const mp_int* qim, const mp_int* mm, byte* out, word32* outLen)
1818 {
1819 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
1820     sp_digit* a = NULL;
1821 #else
1822     sp_digit a[16 * 11];
1823 #endif
1824     sp_digit* p;
1825     sp_digit* q;
1826     sp_digit* dp;
1827     sp_digit* dq;
1828     sp_digit* qi;
1829     sp_digit* tmpa;
1830     sp_digit* tmpb;
1831     sp_digit* r;
1832     sp_digit c;
1833     int err = MP_OKAY;
1834 #ifdef HAVE_INTEL_AVX2
1835     word32 cpuid_flags = cpuid_get_flags();
1836 #endif
1837 
1838     ASSERT_SAVED_VECTOR_REGISTERS();
1839 
1840     (void)dm;
1841     (void)mm;
1842 
1843     if (*outLen < 256) {
1844         err = MP_TO_E;
1845     }
1846     else if (inLen > 256 || mp_count_bits(mm) != 2048) {
1847         err = MP_READ_E;
1848     }
1849     else if (mp_iseven(mm)) {
1850         err = MP_VAL;
1851     }
1852 
1853 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
1854     if (err == MP_OKAY) {
1855         a = (sp_digit*)XMALLOC(sizeof(sp_digit) * 16 * 11, NULL,
1856                                                               DYNAMIC_TYPE_RSA);
1857         if (a == NULL)
1858             err = MEMORY_E;
1859     }
1860 #endif
1861 
1862     if (err == MP_OKAY) {
1863         p = a + 32 * 2;
1864         q = p + 16;
1865         qi = dq = dp = q + 16;
1866         tmpa = qi + 16;
1867         tmpb = tmpa + 32;
1868         r = a + 32;
1869 
1870         sp_2048_from_bin(a, 32, in, inLen);
1871         sp_2048_from_mp(p, 16, pm);
1872         sp_2048_from_mp(q, 16, qm);
1873         sp_2048_from_mp(dp, 16, dpm);
1874 
1875 #ifdef HAVE_INTEL_AVX2
1876         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
1877             err = sp_2048_mod_exp_avx2_16(tmpa, a, dp, 1024, p, 1);
1878         else
1879 #endif
1880             err = sp_2048_mod_exp_16(tmpa, a, dp, 1024, p, 1);
1881     }
1882     if (err == MP_OKAY) {
1883         sp_2048_from_mp(dq, 16, dqm);
1884 #ifdef HAVE_INTEL_AVX2
1885         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
1886             err = sp_2048_mod_exp_avx2_16(tmpb, a, dq, 1024, q, 1);
1887        else
1888 #endif
1889             err = sp_2048_mod_exp_16(tmpb, a, dq, 1024, q, 1);
1890     }
1891 
1892     if (err == MP_OKAY) {
1893         c = sp_2048_sub_in_place_16(tmpa, tmpb);
1894 #ifdef HAVE_INTEL_AVX2
1895         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
1896             c += sp_2048_cond_add_avx2_16(tmpa, tmpa, p, c);
1897             sp_2048_cond_add_avx2_16(tmpa, tmpa, p, c);
1898         }
1899         else
1900 #endif
1901         {
1902             c += sp_2048_cond_add_16(tmpa, tmpa, p, c);
1903             sp_2048_cond_add_16(tmpa, tmpa, p, c);
1904         }
1905 
1906         sp_2048_from_mp(qi, 16, qim);
1907 #ifdef HAVE_INTEL_AVX2
1908         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
1909             sp_2048_mul_avx2_16(tmpa, tmpa, qi);
1910         }
1911         else
1912 #endif
1913         {
1914             sp_2048_mul_16(tmpa, tmpa, qi);
1915         }
1916         err = sp_2048_mod_16(tmpa, tmpa, p);
1917     }
1918 
1919     if (err == MP_OKAY) {
1920 #ifdef HAVE_INTEL_AVX2
1921         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
1922             sp_2048_mul_avx2_16(tmpa, q, tmpa);
1923         }
1924         else
1925 #endif
1926         {
1927             sp_2048_mul_16(tmpa, q, tmpa);
1928         }
1929         XMEMSET(&tmpb[16], 0, sizeof(sp_digit) * 16);
1930         sp_2048_add_32(r, tmpb, tmpa);
1931 
1932         sp_2048_to_bin_32(r, out);
1933         *outLen = 256;
1934     }
1935 
1936 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
1937     if (a != NULL)
1938 #endif
1939     {
1940         ForceZero(a, sizeof(sp_digit) * 16 * 11);
1941     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
1942         XFREE(a, NULL, DYNAMIC_TYPE_RSA);
1943     #endif
1944     }
1945 
1946     return err;
1947 }
1948 #endif /* SP_RSA_PRIVATE_EXP_D | RSA_LOW_MEM */
1949 #endif /* WOLFSSL_RSA_PUBLIC_ONLY */
1950 #endif /* WOLFSSL_HAVE_SP_RSA */
1951 #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
1952                                               !defined(WOLFSSL_RSA_PUBLIC_ONLY))
1953 /* Convert an array of sp_digit to an mp_int.
1954  *
1955  * a  A single precision integer.
1956  * r  A multi-precision integer.
1957  */
sp_2048_to_mp(const sp_digit * a,mp_int * r)1958 static int sp_2048_to_mp(const sp_digit* a, mp_int* r)
1959 {
1960     int err;
1961 
1962     err = mp_grow(r, (2048 + DIGIT_BIT - 1) / DIGIT_BIT);
1963     if (err == MP_OKAY) { /*lint !e774 case where err is always MP_OKAY*/
1964 #if DIGIT_BIT == 64
1965         XMEMCPY(r->dp, a, sizeof(sp_digit) * 32);
1966         r->used = 32;
1967         mp_clamp(r);
1968 #elif DIGIT_BIT < 64
1969         int i;
1970         int j = 0;
1971         int s = 0;
1972 
1973         r->dp[0] = 0;
1974         for (i = 0; i < 32; i++) {
1975             r->dp[j] |= (mp_digit)(a[i] << s);
1976             r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
1977             s = DIGIT_BIT - s;
1978             r->dp[++j] = (mp_digit)(a[i] >> s);
1979             while (s + DIGIT_BIT <= 64) {
1980                 s += DIGIT_BIT;
1981                 r->dp[j++] &= ((sp_digit)1 << DIGIT_BIT) - 1;
1982                 if (s == SP_WORD_SIZE) {
1983                     r->dp[j] = 0;
1984                 }
1985                 else {
1986                     r->dp[j] = (mp_digit)(a[i] >> s);
1987                 }
1988             }
1989             s = 64 - s;
1990         }
1991         r->used = (2048 + DIGIT_BIT - 1) / DIGIT_BIT;
1992         mp_clamp(r);
1993 #else
1994         int i;
1995         int j = 0;
1996         int s = 0;
1997 
1998         r->dp[0] = 0;
1999         for (i = 0; i < 32; i++) {
2000             r->dp[j] |= ((mp_digit)a[i]) << s;
2001             if (s + 64 >= DIGIT_BIT) {
2002     #if DIGIT_BIT != 32 && DIGIT_BIT != 64
2003                 r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
2004     #endif
2005                 s = DIGIT_BIT - s;
2006                 r->dp[++j] = a[i] >> s;
2007                 s = 64 - s;
2008             }
2009             else {
2010                 s += 64;
2011             }
2012         }
2013         r->used = (2048 + DIGIT_BIT - 1) / DIGIT_BIT;
2014         mp_clamp(r);
2015 #endif
2016     }
2017 
2018     return err;
2019 }
2020 
2021 /* Perform the modular exponentiation for Diffie-Hellman.
2022  *
2023  * base  Base. MP integer.
2024  * exp   Exponent. MP integer.
2025  * mod   Modulus. MP integer.
2026  * res   Result. MP integer.
2027  * returns 0 on success, MP_READ_E if there are too many bytes in an array
2028  * and MEMORY_E if memory allocation fails.
2029  */
sp_ModExp_2048(const mp_int * base,const mp_int * exp,const mp_int * mod,mp_int * res)2030 int sp_ModExp_2048(const mp_int* base, const mp_int* exp, const mp_int* mod,
2031     mp_int* res)
2032 {
2033     int err = MP_OKAY;
2034 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
2035     sp_digit *b = NULL;
2036     sp_digit *e = NULL;
2037     sp_digit *m = NULL;
2038     sp_digit* r;
2039 #else
2040     sp_digit b[64];
2041     sp_digit e[32];
2042     sp_digit m[32];
2043     sp_digit* r = b;
2044 #endif
2045 #ifdef HAVE_INTEL_AVX2
2046     word32 cpuid_flags = cpuid_get_flags();
2047 #endif
2048     int expBits = mp_count_bits(exp);
2049 
2050     ASSERT_SAVED_VECTOR_REGISTERS();
2051 
2052     if (mp_count_bits(base) > 2048 || expBits > 2048 ||
2053                                                    mp_count_bits(mod) != 2048) {
2054         err = MP_READ_E;
2055     }
2056     else if (mp_iseven(mod)) {
2057         err = MP_VAL;
2058     }
2059 
2060 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
2061     if (err == MP_OKAY) {
2062         if (((b = (sp_digit *)XMALLOC(64 * sizeof(*b), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL) ||
2063             ((e = (sp_digit *)XMALLOC(32 * sizeof(*e), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL) ||
2064             ((m = (sp_digit *)XMALLOC(32 * sizeof(*m), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL))
2065         {
2066             err = MEMORY_E;
2067         } else {
2068             r = b;
2069         }
2070     }
2071 #endif
2072 
2073     if (err == MP_OKAY) {
2074         sp_2048_from_mp(b, 32, base);
2075         sp_2048_from_mp(e, 32, exp);
2076         sp_2048_from_mp(m, 32, mod);
2077 
2078 #ifdef HAVE_INTEL_AVX2
2079         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
2080             err = sp_2048_mod_exp_avx2_32(r, b, e, expBits, m, 0);
2081         else
2082 #endif
2083             err = sp_2048_mod_exp_32(r, b, e, expBits, m, 0);
2084     }
2085 
2086     if (err == MP_OKAY) {
2087         err = sp_2048_to_mp(r, res);
2088     }
2089 
2090 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
2091     if (b != NULL)
2092         XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER);
2093     if (e != NULL) {
2094         XMEMSET(e, 0, 32);
2095         XFREE(e, NULL, DYNAMIC_TYPE_TMP_BUFFER);
2096     }
2097     if (m != NULL)
2098         XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER);
2099 #else
2100     XMEMSET(e, 0, sizeof(e));
2101 #endif
2102 
2103     return err;
2104 }
2105 
2106 #ifdef WOLFSSL_HAVE_SP_DH
2107 #ifdef HAVE_FFDHE_2048
2108 extern void sp_2048_lshift_32(sp_digit* r, const sp_digit* a, int n);
2109 #ifdef HAVE_INTEL_AVX2
2110 /* Modular exponentiate 2 to the e mod m. (r = 2^e mod m)
2111  *
2112  * r     A single precision number that is the result of the operation.
2113  * e     A single precision number that is the exponent.
2114  * bits  The number of bits in the exponent.
2115  * m     A single precision number that is the modulus.
2116  * returns  0 on success.
2117  * returns  MEMORY_E on dynamic memory allocation failure.
2118  * returns  MP_VAL when base is even.
2119  */
sp_2048_mod_exp_2_avx2_32(sp_digit * r,const sp_digit * e,int bits,const sp_digit * m)2120 static int sp_2048_mod_exp_2_avx2_32(sp_digit* r, const sp_digit* e, int bits,
2121         const sp_digit* m)
2122 {
2123 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
2124     sp_digit* td = NULL;
2125 #else
2126     sp_digit td[33 + 64];
2127 #endif
2128     sp_digit* norm;
2129     sp_digit* tmp;
2130     sp_digit mp = 1;
2131     sp_digit n;
2132     sp_digit o;
2133     sp_digit mask;
2134     int i;
2135     int c;
2136     byte y;
2137     int err = MP_OKAY;
2138 
2139     ASSERT_SAVED_VECTOR_REGISTERS();
2140 
2141     if ((m[0] & 1) == 0) {
2142         err = MP_VAL;
2143     }
2144 
2145 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
2146     if (err == MP_OKAY) {
2147         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (33 + 64), NULL,
2148                                 DYNAMIC_TYPE_TMP_BUFFER);
2149         if (td == NULL) {
2150             err = MEMORY_E;
2151         }
2152     }
2153 #endif
2154 
2155     if (err == MP_OKAY) {
2156         norm = td;
2157 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
2158         tmp = td + 64;
2159 #else
2160         tmp = &td[64];
2161 #endif
2162 
2163         sp_2048_mont_setup(m, &mp);
2164         sp_2048_mont_norm_32(norm, m);
2165 
2166         i = (bits - 1) / 64;
2167         n = e[i--];
2168         /* Number of bits available in top word. */
2169         c = bits & 63;
2170         if (c == 0) {
2171             c = 64;
2172         }
2173         /* Minus the number of top bits to use so rest is a multiple of 6. */
2174         if ((bits % 6) == 0) {
2175             c -= 6;
2176         }
2177         else {
2178             c -= bits % 6;
2179         }
2180         if (c < 0) {
2181             /* Number of bits in top word is less than number needed. */
2182             c = -c;
2183             y = (byte)(n << c);
2184             n = e[i--];
2185             y |= (byte)(n >> (64 - c));
2186             n <<= c;
2187             c = 64 - c;
2188         }
2189         else {
2190             y = (byte)(n >> c);
2191             n <<= 64 - c;
2192         }
2193         sp_2048_lshift_32(r, norm, y);
2194         while ((i >= 0) || (c >= 6)) {
2195             if (c == 0) {
2196                 n = e[i--];
2197                 y = (byte)(n >> 58);
2198                 n <<= 6;
2199                 c = 58;
2200             }
2201             else if (c < 6) {
2202                 y = (byte)(n >> 58);
2203                 n = e[i--];
2204                 c = 6 - c;
2205                 y |= (byte)(n >> (64 - c));
2206                 n <<= c;
2207                 c = 64 - c;
2208             }
2209             else {
2210                 y = (byte)((n >> 58) & 0x3f);
2211                 n <<= 6;
2212                 c -= 6;
2213             }
2214 
2215             sp_2048_mont_sqr_avx2_32(r, r, m, mp);
2216             sp_2048_mont_sqr_avx2_32(r, r, m, mp);
2217             sp_2048_mont_sqr_avx2_32(r, r, m, mp);
2218             sp_2048_mont_sqr_avx2_32(r, r, m, mp);
2219             sp_2048_mont_sqr_avx2_32(r, r, m, mp);
2220             sp_2048_mont_sqr_avx2_32(r, r, m, mp);
2221 
2222             sp_2048_lshift_32(r, r, y);
2223             sp_2048_mul_d_avx2_32(tmp, norm, r[32]);
2224             r[32] = 0;
2225             o = sp_2048_add_32(r, r, tmp);
2226             sp_2048_cond_sub_avx2_32(r, r, m, (sp_digit)0 - o);
2227         }
2228 
2229         XMEMSET(&r[32], 0, sizeof(sp_digit) * 32);
2230         sp_2048_mont_reduce_avx2_32(r, m, mp);
2231 
2232         mask = 0 - (sp_2048_cmp_32(r, m) >= 0);
2233         sp_2048_cond_sub_avx2_32(r, r, m, mask);
2234     }
2235 
2236 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
2237     if (td != NULL)
2238         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
2239 #endif
2240 
2241     return err;
2242 }
2243 #endif /* HAVE_INTEL_AVX2 */
2244 
2245 /* Modular exponentiate 2 to the e mod m. (r = 2^e mod m)
2246  *
2247  * r     A single precision number that is the result of the operation.
2248  * e     A single precision number that is the exponent.
2249  * bits  The number of bits in the exponent.
2250  * m     A single precision number that is the modulus.
2251  * returns  0 on success.
2252  * returns  MEMORY_E on dynamic memory allocation failure.
2253  * returns  MP_VAL when base is even.
2254  */
sp_2048_mod_exp_2_32(sp_digit * r,const sp_digit * e,int bits,const sp_digit * m)2255 static int sp_2048_mod_exp_2_32(sp_digit* r, const sp_digit* e, int bits,
2256         const sp_digit* m)
2257 {
2258 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
2259     sp_digit* td = NULL;
2260 #else
2261     sp_digit td[33 + 64];
2262 #endif
2263     sp_digit* norm;
2264     sp_digit* tmp;
2265     sp_digit mp = 1;
2266     sp_digit n;
2267     sp_digit o;
2268     sp_digit mask;
2269     int i;
2270     int c;
2271     byte y;
2272     int err = MP_OKAY;
2273 
2274     ASSERT_SAVED_VECTOR_REGISTERS();
2275 
2276     if ((m[0] & 1) == 0) {
2277         err = MP_VAL;
2278     }
2279 
2280 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
2281     if (err == MP_OKAY) {
2282         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (33 + 64), NULL,
2283                                 DYNAMIC_TYPE_TMP_BUFFER);
2284         if (td == NULL) {
2285             err = MEMORY_E;
2286         }
2287     }
2288 #endif
2289 
2290     if (err == MP_OKAY) {
2291         norm = td;
2292 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
2293         tmp = td + 64;
2294 #else
2295         tmp = &td[64];
2296 #endif
2297 
2298         sp_2048_mont_setup(m, &mp);
2299         sp_2048_mont_norm_32(norm, m);
2300 
2301         i = (bits - 1) / 64;
2302         n = e[i--];
2303         /* Number of bits available in top word. */
2304         c = bits & 63;
2305         if (c == 0) {
2306             c = 64;
2307         }
2308         /* Minus the number of top bits to use so rest is a multiple of 6. */
2309         if ((bits % 6) == 0) {
2310             c -= 6;
2311         }
2312         else {
2313             c -= bits % 6;
2314         }
2315         if (c < 0) {
2316             /* Number of bits in top word is less than number needed. */
2317             c = -c;
2318             y = (byte)(n << c);
2319             n = e[i--];
2320             y |= (byte)(n >> (64 - c));
2321             n <<= c;
2322             c = 64 - c;
2323         }
2324         else {
2325             y = (byte)(n >> c);
2326             n <<= 64 - c;
2327         }
2328         sp_2048_lshift_32(r, norm, y);
2329         while ((i >= 0) || (c >= 6)) {
2330             if (c == 0) {
2331                 n = e[i--];
2332                 y = (byte)(n >> 58);
2333                 n <<= 6;
2334                 c = 58;
2335             }
2336             else if (c < 6) {
2337                 y = (byte)(n >> 58);
2338                 n = e[i--];
2339                 c = 6 - c;
2340                 y |= (byte)(n >> (64 - c));
2341                 n <<= c;
2342                 c = 64 - c;
2343             }
2344             else {
2345                 y = (byte)((n >> 58) & 0x3f);
2346                 n <<= 6;
2347                 c -= 6;
2348             }
2349 
2350             sp_2048_mont_sqr_32(r, r, m, mp);
2351             sp_2048_mont_sqr_32(r, r, m, mp);
2352             sp_2048_mont_sqr_32(r, r, m, mp);
2353             sp_2048_mont_sqr_32(r, r, m, mp);
2354             sp_2048_mont_sqr_32(r, r, m, mp);
2355             sp_2048_mont_sqr_32(r, r, m, mp);
2356 
2357             sp_2048_lshift_32(r, r, y);
2358             sp_2048_mul_d_32(tmp, norm, r[32]);
2359             r[32] = 0;
2360             o = sp_2048_add_32(r, r, tmp);
2361             sp_2048_cond_sub_32(r, r, m, (sp_digit)0 - o);
2362         }
2363 
2364         XMEMSET(&r[32], 0, sizeof(sp_digit) * 32);
2365         sp_2048_mont_reduce_32(r, m, mp);
2366 
2367         mask = 0 - (sp_2048_cmp_32(r, m) >= 0);
2368         sp_2048_cond_sub_32(r, r, m, mask);
2369     }
2370 
2371 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
2372     if (td != NULL)
2373         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
2374 #endif
2375 
2376     return err;
2377 }
2378 
2379 #endif /* HAVE_FFDHE_2048 */
2380 
2381 /* Perform the modular exponentiation for Diffie-Hellman.
2382  *
2383  * base     Base.
2384  * exp      Array of bytes that is the exponent.
2385  * expLen   Length of data, in bytes, in exponent.
2386  * mod      Modulus.
2387  * out      Buffer to hold big-endian bytes of exponentiation result.
2388  *          Must be at least 256 bytes long.
2389  * outLen   Length, in bytes, of exponentiation result.
2390  * returns 0 on success, MP_READ_E if there are too many bytes in an array
2391  * and MEMORY_E if memory allocation fails.
2392  */
sp_DhExp_2048(const mp_int * base,const byte * exp,word32 expLen,const mp_int * mod,byte * out,word32 * outLen)2393 int sp_DhExp_2048(const mp_int* base, const byte* exp, word32 expLen,
2394     const mp_int* mod, byte* out, word32* outLen)
2395 {
2396     int err = MP_OKAY;
2397 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
2398     sp_digit *b = NULL;
2399     sp_digit *e = NULL;
2400     sp_digit *m = NULL;
2401     sp_digit* r;
2402 #else
2403     sp_digit b[64];
2404     sp_digit e[32];
2405     sp_digit m[32];
2406     sp_digit* r = b;
2407 #endif
2408     word32 i;
2409 #ifdef HAVE_INTEL_AVX2
2410     word32 cpuid_flags = cpuid_get_flags();
2411 #endif
2412 
2413     ASSERT_SAVED_VECTOR_REGISTERS();
2414 
2415     if (mp_count_bits(base) > 2048 || expLen > 256 ||
2416                                                    mp_count_bits(mod) != 2048) {
2417         err = MP_READ_E;
2418     }
2419     else if (mp_iseven(mod)) {
2420         err = MP_VAL;
2421     }
2422 
2423 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
2424     if (err == MP_OKAY) {
2425         if (((b = (sp_digit *)XMALLOC(64 * sizeof(*b), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL) ||
2426             ((e = (sp_digit *)XMALLOC(32 * sizeof(*e), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL) ||
2427             ((m = (sp_digit *)XMALLOC(32 * sizeof(*m), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL))
2428         {
2429             err = MEMORY_E;
2430         } else {
2431             r = b;
2432         }
2433     }
2434 #endif
2435 
2436     if (err == MP_OKAY) {
2437         sp_2048_from_mp(b, 32, base);
2438         sp_2048_from_bin(e, 32, exp, expLen);
2439         sp_2048_from_mp(m, 32, mod);
2440 
2441     #ifdef HAVE_FFDHE_2048
2442         if (base->used == 1 && base->dp[0] == 2 && m[31] == (sp_digit)-1) {
2443 #ifdef HAVE_INTEL_AVX2
2444             if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
2445                 err = sp_2048_mod_exp_2_avx2_32(r, e, expLen * 8, m);
2446             else
2447 #endif
2448                 err = sp_2048_mod_exp_2_32(r, e, expLen * 8, m);
2449         }
2450         else
2451     #endif
2452         {
2453 #ifdef HAVE_INTEL_AVX2
2454             if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
2455                 err = sp_2048_mod_exp_avx2_32(r, b, e, expLen * 8, m, 0);
2456             else
2457 #endif
2458                 err = sp_2048_mod_exp_32(r, b, e, expLen * 8, m, 0);
2459         }
2460     }
2461 
2462     if (err == MP_OKAY) {
2463         sp_2048_to_bin_32(r, out);
2464         *outLen = 256;
2465         for (i=0; i<256 && out[i] == 0; i++) {
2466             /* Search for first non-zero. */
2467         }
2468         *outLen -= i;
2469         XMEMMOVE(out, out + i, *outLen);
2470     }
2471 
2472 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
2473     if (b != NULL)
2474         XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER);
2475     if (e != NULL) {
2476         XMEMSET(e, 0, 32);
2477         XFREE(e, NULL, DYNAMIC_TYPE_TMP_BUFFER);
2478     }
2479     if (m != NULL)
2480         XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER);
2481 #else
2482     XMEMSET(e, 0, sizeof(e));
2483 #endif
2484 
2485     return err;
2486 }
2487 #endif
2488 /* Perform the modular exponentiation for Diffie-Hellman.
2489  *
2490  * base  Base. MP integer.
2491  * exp   Exponent. MP integer.
2492  * mod   Modulus. MP integer.
2493  * res   Result. MP integer.
2494  * returns 0 on success, MP_READ_E if there are too many bytes in an array
2495  * and MEMORY_E if memory allocation fails.
2496  */
sp_ModExp_1024(const mp_int * base,const mp_int * exp,const mp_int * mod,mp_int * res)2497 int sp_ModExp_1024(const mp_int* base, const mp_int* exp, const mp_int* mod,
2498     mp_int* res)
2499 {
2500     int err = MP_OKAY;
2501 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
2502     sp_digit *b = NULL;
2503     sp_digit *e = NULL;
2504     sp_digit *m = NULL;
2505     sp_digit* r;
2506 #else
2507     sp_digit b[32];
2508     sp_digit e[16];
2509     sp_digit m[16];
2510     sp_digit* r = b;
2511 #endif
2512 #ifdef HAVE_INTEL_AVX2
2513     word32 cpuid_flags = cpuid_get_flags();
2514 #endif
2515     int expBits = mp_count_bits(exp);
2516 
2517     ASSERT_SAVED_VECTOR_REGISTERS();
2518 
2519     if (mp_count_bits(base) > 1024 || expBits > 1024 ||
2520                                                    mp_count_bits(mod) != 1024) {
2521         err = MP_READ_E;
2522     }
2523     else if (mp_iseven(mod)) {
2524         err = MP_VAL;
2525     }
2526 
2527 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
2528     if (err == MP_OKAY) {
2529         if (((b = (sp_digit *)XMALLOC(32 * sizeof(*b), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL) ||
2530             ((e = (sp_digit *)XMALLOC(16 * sizeof(*e), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL) ||
2531             ((m = (sp_digit *)XMALLOC(16 * sizeof(*m), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL))
2532         {
2533             err = MEMORY_E;
2534         } else {
2535             r = b;
2536         }
2537     }
2538 #endif
2539 
2540     if (err == MP_OKAY) {
2541         sp_2048_from_mp(b, 16, base);
2542         sp_2048_from_mp(e, 16, exp);
2543         sp_2048_from_mp(m, 16, mod);
2544 
2545 #ifdef HAVE_INTEL_AVX2
2546         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
2547             err = sp_2048_mod_exp_avx2_16(r, b, e, expBits, m, 0);
2548         else
2549 #endif
2550             err = sp_2048_mod_exp_16(r, b, e, expBits, m, 0);
2551     }
2552 
2553     if (err == MP_OKAY) {
2554         XMEMSET(r + 16, 0, sizeof(*r) * 16);
2555         err = sp_2048_to_mp(r, res);
2556     }
2557 
2558 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
2559     if (b != NULL)
2560         XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER);
2561     if (e != NULL) {
2562         XMEMSET(e, 0, 16);
2563         XFREE(e, NULL, DYNAMIC_TYPE_TMP_BUFFER);
2564     }
2565     if (m != NULL)
2566         XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER);
2567 #else
2568     XMEMSET(e, 0, sizeof(e));
2569 #endif
2570 
2571     return err;
2572 }
2573 
2574 #endif /* WOLFSSL_HAVE_SP_DH | (WOLFSSL_HAVE_SP_RSA & !WOLFSSL_RSA_PUBLIC_ONLY) */
2575 
2576 #endif /* !WOLFSSL_SP_NO_2048 */
2577 
2578 #ifndef WOLFSSL_SP_NO_3072
2579 extern void sp_3072_from_bin_bswap(sp_digit* r, int size, const byte* a, int n);
2580 extern void sp_3072_from_bin_movbe(sp_digit* r, int size, const byte* a, int n);
2581 /* Read big endian unsigned byte array into r.
2582  *
2583  * r  A single precision integer.
2584  * size  Maximum number of bytes to convert
2585  * a  Byte array.
2586  * n  Number of bytes in array to read.
2587  */
sp_3072_from_bin(sp_digit * r,int size,const byte * a,int n)2588 static void sp_3072_from_bin(sp_digit* r, int size, const byte* a, int n)
2589 {
2590 #ifndef NO_MOVBE_SUPPORT
2591     word32 cpuid_flags = cpuid_get_flags();
2592 
2593     if (IS_INTEL_MOVBE(cpuid_flags)) {
2594         sp_3072_from_bin_movbe(r, size, a, n);
2595     }
2596     else
2597 #endif
2598     {
2599         sp_3072_from_bin_bswap(r, size, a, n);
2600     }
2601 }
2602 
2603 /* Convert an mp_int to an array of sp_digit.
2604  *
2605  * r  A single precision integer.
2606  * size  Maximum number of bytes to convert
2607  * a  A multi-precision integer.
2608  */
sp_3072_from_mp(sp_digit * r,int size,const mp_int * a)2609 static void sp_3072_from_mp(sp_digit* r, int size, const mp_int* a)
2610 {
2611 #if DIGIT_BIT == 64
2612     int j;
2613 
2614     XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
2615 
2616     for (j = a->used; j < size; j++) {
2617         r[j] = 0;
2618     }
2619 #elif DIGIT_BIT > 64
2620     int i;
2621     int j = 0;
2622     word32 s = 0;
2623 
2624     r[0] = 0;
2625     for (i = 0; i < a->used && j < size; i++) {
2626         r[j] |= ((sp_digit)a->dp[i] << s);
2627         r[j] &= 0xffffffffffffffffl;
2628         s = 64U - s;
2629         if (j + 1 >= size) {
2630             break;
2631         }
2632         /* lint allow cast of mismatch word32 and mp_digit */
2633         r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
2634         while ((s + 64U) <= (word32)DIGIT_BIT) {
2635             s += 64U;
2636             r[j] &= 0xffffffffffffffffl;
2637             if (j + 1 >= size) {
2638                 break;
2639             }
2640             if (s < (word32)DIGIT_BIT) {
2641                 /* lint allow cast of mismatch word32 and mp_digit */
2642                 r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
2643             }
2644             else {
2645                 r[++j] = (sp_digit)0;
2646             }
2647         }
2648         s = (word32)DIGIT_BIT - s;
2649     }
2650 
2651     for (j++; j < size; j++) {
2652         r[j] = 0;
2653     }
2654 #else
2655     int i;
2656     int j = 0;
2657     int s = 0;
2658 
2659     r[0] = 0;
2660     for (i = 0; i < a->used && j < size; i++) {
2661         r[j] |= ((sp_digit)a->dp[i]) << s;
2662         if (s + DIGIT_BIT >= 64) {
2663             r[j] &= 0xffffffffffffffffl;
2664             if (j + 1 >= size) {
2665                 break;
2666             }
2667             s = 64 - s;
2668             if (s == DIGIT_BIT) {
2669                 r[++j] = 0;
2670                 s = 0;
2671             }
2672             else {
2673                 r[++j] = a->dp[i] >> s;
2674                 s = DIGIT_BIT - s;
2675             }
2676         }
2677         else {
2678             s += DIGIT_BIT;
2679         }
2680     }
2681 
2682     for (j++; j < size; j++) {
2683         r[j] = 0;
2684     }
2685 #endif
2686 }
2687 
2688 extern void sp_3072_to_bin_bswap_48(sp_digit* r, byte* a);
2689 extern void sp_3072_to_bin_movbe_48(sp_digit* r, byte* a);
2690 /* Write r as big endian to byte array.
2691  * Fixed length number of bytes written: 384
2692  *
2693  * r  A single precision integer.
2694  * a  Byte array.
2695  */
sp_3072_to_bin_48(sp_digit * r,byte * a)2696 static void sp_3072_to_bin_48(sp_digit* r, byte* a)
2697 {
2698 #ifndef NO_MOVBE_SUPPORT
2699     word32 cpuid_flags = cpuid_get_flags();
2700 
2701     if (IS_INTEL_MOVBE(cpuid_flags)) {
2702         sp_3072_to_bin_movbe_48(r, a);
2703     }
2704     else
2705 #endif
2706     {
2707         sp_3072_to_bin_bswap_48(r, a);
2708     }
2709 }
2710 
2711 #if (defined(WOLFSSL_HAVE_SP_RSA) && (!defined(WOLFSSL_RSA_PUBLIC_ONLY) || !defined(WOLFSSL_SP_SMALL))) || defined(WOLFSSL_HAVE_SP_DH)
2712 /* Normalize the values in each word to 64.
2713  *
2714  * a  Array of sp_digit to normalize.
2715  */
2716 #define sp_3072_norm_48(a)
2717 
2718 #endif /* (WOLFSSL_HAVE_SP_RSA && (!WOLFSSL_RSA_PUBLIC_ONLY || !WOLFSSL_SP_SMALL)) || WOLFSSL_HAVE_SP_DH */
2719 /* Normalize the values in each word to 64.
2720  *
2721  * a  Array of sp_digit to normalize.
2722  */
2723 #define sp_3072_norm_48(a)
2724 
2725 extern void sp_3072_mul_12(sp_digit* r, const sp_digit* a, const sp_digit* b);
2726 extern void sp_3072_sqr_12(sp_digit* r, const sp_digit* a);
2727 extern void sp_3072_mul_avx2_12(sp_digit* r, const sp_digit* a, const sp_digit* b);
2728 extern void sp_3072_sqr_avx2_12(sp_digit* r, const sp_digit* a);
2729 extern sp_digit sp_3072_add_12(sp_digit* r, const sp_digit* a, const sp_digit* b);
2730 extern sp_digit sp_3072_sub_in_place_24(sp_digit* a, const sp_digit* b);
2731 extern sp_digit sp_3072_add_24(sp_digit* r, const sp_digit* a, const sp_digit* b);
2732 extern void sp_3072_mul_24(sp_digit* r, const sp_digit* a, const sp_digit* b);
2733 
2734 extern sp_digit sp_3072_dbl_12(sp_digit* r, const sp_digit* a);
2735 extern void sp_3072_sqr_24(sp_digit* r, const sp_digit* a);
2736 
2737 extern void sp_3072_mul_avx2_24(sp_digit* r, const sp_digit* a, const sp_digit* b);
2738 
2739 extern void sp_3072_sqr_avx2_24(sp_digit* r, const sp_digit* a);
2740 
2741 extern sp_digit sp_3072_sub_in_place_48(sp_digit* a, const sp_digit* b);
2742 extern sp_digit sp_3072_add_48(sp_digit* r, const sp_digit* a, const sp_digit* b);
2743 extern void sp_3072_mul_48(sp_digit* r, const sp_digit* a, const sp_digit* b);
2744 
2745 extern sp_digit sp_3072_dbl_24(sp_digit* r, const sp_digit* a);
2746 extern void sp_3072_sqr_48(sp_digit* r, const sp_digit* a);
2747 
2748 extern void sp_3072_mul_avx2_48(sp_digit* r, const sp_digit* a, const sp_digit* b);
2749 
2750 extern void sp_3072_sqr_avx2_48(sp_digit* r, const sp_digit* a);
2751 
2752 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
2753 #endif /* (WOLFSSL_HAVE_SP_RSA & !WOLFSSL_RSA_PUBLIC_ONLY) | WOLFSSL_HAVE_SP_DH */
2754 
2755 /* Caclulate the bottom digit of -1/a mod 2^n.
2756  *
2757  * a    A single precision number.
2758  * rho  Bottom word of inverse.
2759  */
sp_3072_mont_setup(const sp_digit * a,sp_digit * rho)2760 static void sp_3072_mont_setup(const sp_digit* a, sp_digit* rho)
2761 {
2762     sp_digit x;
2763     sp_digit b;
2764 
2765     b = a[0];
2766     x = (((b + 2) & 4) << 1) + b; /* here x*a==1 mod 2**4 */
2767     x *= 2 - b * x;               /* here x*a==1 mod 2**8 */
2768     x *= 2 - b * x;               /* here x*a==1 mod 2**16 */
2769     x *= 2 - b * x;               /* here x*a==1 mod 2**32 */
2770     x *= 2 - b * x;               /* here x*a==1 mod 2**64 */
2771 
2772     /* rho = -1/m mod b */
2773     *rho = (sp_digit)0 - x;
2774 }
2775 
2776 extern void sp_3072_mul_d_48(sp_digit* r, const sp_digit* a, sp_digit b);
2777 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
2778 /* r = 2^n mod m where n is the number of bits to reduce by.
2779  * Given m must be 3072 bits, just need to subtract.
2780  *
2781  * r  A single precision number.
2782  * m  A single precision number.
2783  */
sp_3072_mont_norm_24(sp_digit * r,const sp_digit * m)2784 static void sp_3072_mont_norm_24(sp_digit* r, const sp_digit* m)
2785 {
2786     XMEMSET(r, 0, sizeof(sp_digit) * 24);
2787 
2788     ASSERT_SAVED_VECTOR_REGISTERS();
2789 
2790     /* r = 2^n mod m */
2791     sp_3072_sub_in_place_24(r, m);
2792 }
2793 
2794 extern sp_digit sp_3072_cond_sub_24(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
2795 extern void sp_3072_mont_reduce_24(sp_digit* a, const sp_digit* m, sp_digit mp);
2796 /* Multiply two Montgomery form numbers mod the modulus (prime).
2797  * (r = a * b mod m)
2798  *
2799  * r   Result of multiplication.
2800  * a   First number to multiply in Montgomery form.
2801  * b   Second number to multiply in Montgomery form.
2802  * m   Modulus (prime).
2803  * mp  Montgomery mulitplier.
2804  */
sp_3072_mont_mul_24(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)2805 static void sp_3072_mont_mul_24(sp_digit* r, const sp_digit* a,
2806         const sp_digit* b, const sp_digit* m, sp_digit mp)
2807 {
2808     sp_3072_mul_24(r, a, b);
2809     sp_3072_mont_reduce_24(r, m, mp);
2810 }
2811 
2812 /* Square the Montgomery form number. (r = a * a mod m)
2813  *
2814  * r   Result of squaring.
2815  * a   Number to square in Montgomery form.
2816  * m   Modulus (prime).
2817  * mp  Montgomery mulitplier.
2818  */
sp_3072_mont_sqr_24(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)2819 static void sp_3072_mont_sqr_24(sp_digit* r, const sp_digit* a,
2820         const sp_digit* m, sp_digit mp)
2821 {
2822     sp_3072_sqr_24(r, a);
2823     sp_3072_mont_reduce_24(r, m, mp);
2824 }
2825 
2826 extern sp_digit sp_3072_cond_sub_avx2_24(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
2827 extern void sp_3072_mul_d_24(sp_digit* r, const sp_digit* a, sp_digit b);
2828 extern void sp_3072_mul_d_avx2_24(sp_digit* r, const sp_digit* a, const sp_digit b);
2829 #ifdef _WIN64
2830 #if _MSC_VER < 1920
2831 extern sp_digit div_3072_word_asm_24(sp_digit d1, sp_digit d0, sp_digit div);
2832 #endif /* _MSC_VER < 1920 */
2833 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
2834  *
2835  * d1   The high order half of the number to divide.
2836  * d0   The low order half of the number to divide.
2837  * div  The dividend.
2838  * returns the result of the division.
2839  */
div_3072_word_24(sp_digit d1,sp_digit d0,sp_digit div)2840 static WC_INLINE sp_digit div_3072_word_24(sp_digit d1, sp_digit d0,
2841         sp_digit div)
2842 {
2843     ASSERT_SAVED_VECTOR_REGISTERS();
2844 #if _MSC_VER >= 1920
2845     return _udiv128(d1, d0, div, NULL);
2846 #else
2847     return div_3072_word_asm_24(d1, d0, div);
2848 #endif
2849 }
2850 #else
2851 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
2852  *
2853  * d1   The high order half of the number to divide.
2854  * d0   The low order half of the number to divide.
2855  * div  The dividend.
2856  * returns the result of the division.
2857  */
div_3072_word_24(sp_digit d1,sp_digit d0,sp_digit div)2858 static WC_INLINE sp_digit div_3072_word_24(sp_digit d1, sp_digit d0,
2859         sp_digit div)
2860 {
2861     ASSERT_SAVED_VECTOR_REGISTERS();
2862     register sp_digit r asm("rax");
2863     __asm__ __volatile__ (
2864         "divq %3"
2865         : "=a" (r)
2866         : "d" (d1), "a" (d0), "r" (div)
2867         :
2868     );
2869     return r;
2870 }
2871 #endif /* _WIN64 */
2872 /* AND m into each word of a and store in r.
2873  *
2874  * r  A single precision integer.
2875  * a  A single precision integer.
2876  * m  Mask to AND against each digit.
2877  */
sp_3072_mask_24(sp_digit * r,const sp_digit * a,sp_digit m)2878 static void sp_3072_mask_24(sp_digit* r, const sp_digit* a, sp_digit m)
2879 {
2880 #ifdef WOLFSSL_SP_SMALL
2881     int i;
2882 
2883     for (i=0; i<24; i++) {
2884         r[i] = a[i] & m;
2885     }
2886 #else
2887     int i;
2888 
2889     for (i = 0; i < 24; i += 8) {
2890         r[i+0] = a[i+0] & m;
2891         r[i+1] = a[i+1] & m;
2892         r[i+2] = a[i+2] & m;
2893         r[i+3] = a[i+3] & m;
2894         r[i+4] = a[i+4] & m;
2895         r[i+5] = a[i+5] & m;
2896         r[i+6] = a[i+6] & m;
2897         r[i+7] = a[i+7] & m;
2898     }
2899 #endif
2900 }
2901 
2902 extern sp_int64 sp_3072_cmp_24(const sp_digit* a, const sp_digit* b);
2903 /* Divide d in a and put remainder into r (m*d + r = a)
2904  * m is not calculated as it is not needed at this time.
2905  *
2906  * a  Number to be divided.
2907  * d  Number to divide with.
2908  * m  Multiplier result.
2909  * r  Remainder from the division.
2910  * returns MP_OKAY indicating success.
2911  */
sp_3072_div_24(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)2912 static WC_INLINE int sp_3072_div_24(const sp_digit* a, const sp_digit* d, sp_digit* m,
2913         sp_digit* r)
2914 {
2915     sp_digit t1[48];
2916     sp_digit t2[25];
2917     sp_digit div;
2918     sp_digit r1;
2919     int i;
2920 #ifdef HAVE_INTEL_AVX2
2921     word32 cpuid_flags = cpuid_get_flags();
2922 #endif
2923 
2924     ASSERT_SAVED_VECTOR_REGISTERS();
2925 
2926     (void)m;
2927 
2928     div = d[23];
2929     XMEMCPY(t1, a, sizeof(*t1) * 2 * 24);
2930     r1 = sp_3072_cmp_24(&t1[24], d) >= 0;
2931 #ifdef HAVE_INTEL_AVX2
2932     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
2933         sp_3072_cond_sub_avx2_24(&t1[24], &t1[24], d, (sp_digit)0 - r1);
2934     else
2935 #endif
2936         sp_3072_cond_sub_24(&t1[24], &t1[24], d, (sp_digit)0 - r1);
2937     for (i=23; i>=0; i--) {
2938         sp_digit hi = t1[24 + i] - (t1[24 + i] == div);
2939         r1 = div_3072_word_24(hi, t1[24 + i - 1], div);
2940 
2941 #ifdef HAVE_INTEL_AVX2
2942         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
2943             sp_3072_mul_d_avx2_24(t2, d, r1);
2944         else
2945 #endif
2946             sp_3072_mul_d_24(t2, d, r1);
2947         t1[24 + i] += sp_3072_sub_in_place_24(&t1[i], t2);
2948         t1[24 + i] -= t2[24];
2949         sp_3072_mask_24(t2, d, t1[24 + i]);
2950         t1[24 + i] += sp_3072_add_24(&t1[i], &t1[i], t2);
2951         sp_3072_mask_24(t2, d, t1[24 + i]);
2952         t1[24 + i] += sp_3072_add_24(&t1[i], &t1[i], t2);
2953     }
2954 
2955     r1 = sp_3072_cmp_24(t1, d) >= 0;
2956 #ifdef HAVE_INTEL_AVX2
2957     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
2958         sp_3072_cond_sub_avx2_24(r, t1, d, (sp_digit)0 - r1);
2959     else
2960 #endif
2961         sp_3072_cond_sub_24(r, t1, d, (sp_digit)0 - r1);
2962 
2963     return MP_OKAY;
2964 }
2965 
2966 /* Reduce a modulo m into r. (r = a mod m)
2967  *
2968  * r  A single precision number that is the reduced result.
2969  * a  A single precision number that is to be reduced.
2970  * m  A single precision number that is the modulus to reduce with.
2971  * returns MP_OKAY indicating success.
2972  */
sp_3072_mod_24(sp_digit * r,const sp_digit * a,const sp_digit * m)2973 static WC_INLINE int sp_3072_mod_24(sp_digit* r, const sp_digit* a,
2974         const sp_digit* m)
2975 {
2976     ASSERT_SAVED_VECTOR_REGISTERS();
2977     return sp_3072_div_24(a, m, NULL, r);
2978 }
2979 
2980 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
2981  *
2982  * r     A single precision number that is the result of the operation.
2983  * a     A single precision number being exponentiated.
2984  * e     A single precision number that is the exponent.
2985  * bits  The number of bits in the exponent.
2986  * m     A single precision number that is the modulus.
2987  * returns  0 on success
2988  * returns  MEMORY_E on dynamic memory allocation failure.
2989  * returns  MP_VAL when base is even or exponent is 0.
2990  */
sp_3072_mod_exp_24(sp_digit * r,const sp_digit * a,const sp_digit * e,int bits,const sp_digit * m,int reduceA)2991 static int sp_3072_mod_exp_24(sp_digit* r, const sp_digit* a, const sp_digit* e,
2992         int bits, const sp_digit* m, int reduceA)
2993 {
2994 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
2995     sp_digit* td = NULL;
2996 #else
2997     sp_digit td[(33 * 48) + 48];
2998 #endif
2999     sp_digit* t[32];
3000     sp_digit* rt = NULL;
3001     sp_digit* norm;
3002     sp_digit mp = 1;
3003     sp_digit n;
3004     sp_digit mask;
3005     int i;
3006     int c;
3007     byte y;
3008     int err = MP_OKAY;
3009 
3010     ASSERT_SAVED_VECTOR_REGISTERS();
3011 
3012     if ((m[0] & 1) == 0) {
3013         err = MP_VAL;
3014     }
3015     else if (bits == 0) {
3016         err = MP_VAL;
3017     }
3018 
3019 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
3020     if (err == MP_OKAY) {
3021         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (33 * 48) + 48, NULL,
3022                                 DYNAMIC_TYPE_TMP_BUFFER);
3023         if (td == NULL) {
3024             err = MEMORY_E;
3025         }
3026     }
3027 #endif
3028 
3029     if (err == MP_OKAY) {
3030         norm = td;
3031 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
3032         for (i=0; i<32; i++)
3033             t[i] = td + i * 48;
3034         rt = td + 1536;
3035 #else
3036         for (i=0; i<32; i++)
3037             t[i] = &td[i * 48];
3038         rt = &td[1536];
3039 #endif
3040 
3041         sp_3072_mont_setup(m, &mp);
3042         sp_3072_mont_norm_24(norm, m);
3043 
3044         XMEMSET(t[1], 0, sizeof(sp_digit) * 24);
3045         if (reduceA) {
3046             err = sp_3072_mod_24(t[1] + 24, a, m);
3047             if (err == MP_OKAY)
3048                 err = sp_3072_mod_24(t[1], t[1], m);
3049         }
3050         else {
3051             XMEMCPY(t[1] + 24, a, sizeof(sp_digit) * 24);
3052             err = sp_3072_mod_24(t[1], t[1], m);
3053         }
3054     }
3055 
3056     if (err == MP_OKAY) {
3057         sp_3072_mont_sqr_24(t[ 2], t[ 1], m, mp);
3058         sp_3072_mont_mul_24(t[ 3], t[ 2], t[ 1], m, mp);
3059         sp_3072_mont_sqr_24(t[ 4], t[ 2], m, mp);
3060         sp_3072_mont_mul_24(t[ 5], t[ 3], t[ 2], m, mp);
3061         sp_3072_mont_sqr_24(t[ 6], t[ 3], m, mp);
3062         sp_3072_mont_mul_24(t[ 7], t[ 4], t[ 3], m, mp);
3063         sp_3072_mont_sqr_24(t[ 8], t[ 4], m, mp);
3064         sp_3072_mont_mul_24(t[ 9], t[ 5], t[ 4], m, mp);
3065         sp_3072_mont_sqr_24(t[10], t[ 5], m, mp);
3066         sp_3072_mont_mul_24(t[11], t[ 6], t[ 5], m, mp);
3067         sp_3072_mont_sqr_24(t[12], t[ 6], m, mp);
3068         sp_3072_mont_mul_24(t[13], t[ 7], t[ 6], m, mp);
3069         sp_3072_mont_sqr_24(t[14], t[ 7], m, mp);
3070         sp_3072_mont_mul_24(t[15], t[ 8], t[ 7], m, mp);
3071         sp_3072_mont_sqr_24(t[16], t[ 8], m, mp);
3072         sp_3072_mont_mul_24(t[17], t[ 9], t[ 8], m, mp);
3073         sp_3072_mont_sqr_24(t[18], t[ 9], m, mp);
3074         sp_3072_mont_mul_24(t[19], t[10], t[ 9], m, mp);
3075         sp_3072_mont_sqr_24(t[20], t[10], m, mp);
3076         sp_3072_mont_mul_24(t[21], t[11], t[10], m, mp);
3077         sp_3072_mont_sqr_24(t[22], t[11], m, mp);
3078         sp_3072_mont_mul_24(t[23], t[12], t[11], m, mp);
3079         sp_3072_mont_sqr_24(t[24], t[12], m, mp);
3080         sp_3072_mont_mul_24(t[25], t[13], t[12], m, mp);
3081         sp_3072_mont_sqr_24(t[26], t[13], m, mp);
3082         sp_3072_mont_mul_24(t[27], t[14], t[13], m, mp);
3083         sp_3072_mont_sqr_24(t[28], t[14], m, mp);
3084         sp_3072_mont_mul_24(t[29], t[15], t[14], m, mp);
3085         sp_3072_mont_sqr_24(t[30], t[15], m, mp);
3086         sp_3072_mont_mul_24(t[31], t[16], t[15], m, mp);
3087 
3088         i = (bits - 1) / 64;
3089         n = e[i--];
3090         /* Number of bits available in top word. */
3091         c = bits & 63;
3092         if (c == 0) {
3093             c = 64;
3094         }
3095         /* Minus the number of top bits to use so rest is a multiple of 5. */
3096         if ((bits % 5) == 0) {
3097             c -= 5;
3098         }
3099         else {
3100             c -= bits % 5;
3101         }
3102         if (c < 0) {
3103             /* Number of bits in top word is less than number needed. */
3104             c = -c;
3105             y = (byte)(n << c);
3106             n = e[i--];
3107             y |= (byte)(n >> (64 - c));
3108             n <<= c;
3109             c = 64 - c;
3110         }
3111         else {
3112             y = (byte)(n >> c);
3113             n <<= 64 - c;
3114         }
3115         XMEMCPY(r, t[y], sizeof(sp_digit) * 24);
3116         for (; i>=0 || c>=5; ) {
3117             if (c >= 5) {
3118                 y = (byte)((n >> 59) & 0x1f);
3119                 n <<= 5;
3120                 c -= 5;
3121             }
3122             else if (c == 0) {
3123                 n = e[i--];
3124                 y = (byte)(n >> 59);
3125                 n <<= 5;
3126                 c = 59;
3127             }
3128             else {
3129                 y = (byte)(n >> 59);
3130                 n = e[i--];
3131                 c = 5 - c;
3132                 y |= (byte)(n >> (64 - c));
3133                 n <<= c;
3134                 c = 64 - c;
3135             }
3136 
3137             sp_3072_sqr_24(rt, r);
3138             sp_3072_mont_reduce_24(rt, m, mp);
3139             sp_3072_sqr_24(r, rt);
3140             sp_3072_mont_reduce_24(r, m, mp);
3141             sp_3072_sqr_24(rt, r);
3142             sp_3072_mont_reduce_24(rt, m, mp);
3143             sp_3072_sqr_24(r, rt);
3144             sp_3072_mont_reduce_24(r, m, mp);
3145             sp_3072_sqr_24(rt, r);
3146             sp_3072_mont_reduce_24(rt, m, mp);
3147 
3148             sp_3072_mul_24(r, rt, t[y]);
3149             sp_3072_mont_reduce_24(r, m, mp);
3150         }
3151 
3152         XMEMSET(&r[24], 0, sizeof(sp_digit) * 24);
3153         sp_3072_mont_reduce_24(r, m, mp);
3154 
3155         mask = 0 - (sp_3072_cmp_24(r, m) >= 0);
3156         sp_3072_cond_sub_24(r, r, m, mask);
3157     }
3158 
3159 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
3160     if (td != NULL)
3161         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
3162 #endif
3163 
3164     return err;
3165 }
3166 
3167 extern void sp_3072_mont_reduce_avx2_24(sp_digit* a, const sp_digit* m, sp_digit mp);
3168 #ifdef HAVE_INTEL_AVX2
3169 /* Multiply two Montgomery form numbers mod the modulus (prime).
3170  * (r = a * b mod m)
3171  *
3172  * r   Result of multiplication.
3173  * a   First number to multiply in Montgomery form.
3174  * b   Second number to multiply in Montgomery form.
3175  * m   Modulus (prime).
3176  * mp  Montgomery mulitplier.
3177  */
sp_3072_mont_mul_avx2_24(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)3178 static void sp_3072_mont_mul_avx2_24(sp_digit* r, const sp_digit* a,
3179         const sp_digit* b, const sp_digit* m, sp_digit mp)
3180 {
3181     sp_3072_mul_avx2_24(r, a, b);
3182     sp_3072_mont_reduce_avx2_24(r, m, mp);
3183 }
3184 
3185 #endif /* HAVE_INTEL_AVX2 */
3186 #ifdef HAVE_INTEL_AVX2
3187 /* Square the Montgomery form number. (r = a * a mod m)
3188  *
3189  * r   Result of squaring.
3190  * a   Number to square in Montgomery form.
3191  * m   Modulus (prime).
3192  * mp  Montgomery mulitplier.
3193  */
sp_3072_mont_sqr_avx2_24(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)3194 static void sp_3072_mont_sqr_avx2_24(sp_digit* r, const sp_digit* a,
3195         const sp_digit* m, sp_digit mp)
3196 {
3197     sp_3072_sqr_avx2_24(r, a);
3198     sp_3072_mont_reduce_avx2_24(r, m, mp);
3199 }
3200 
3201 #endif /* HAVE_INTEL_AVX2 */
3202 #ifdef HAVE_INTEL_AVX2
3203 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
3204  *
3205  * r     A single precision number that is the result of the operation.
3206  * a     A single precision number being exponentiated.
3207  * e     A single precision number that is the exponent.
3208  * bits  The number of bits in the exponent.
3209  * m     A single precision number that is the modulus.
3210  * returns  0 on success
3211  * returns  MEMORY_E on dynamic memory allocation failure.
3212  * returns  MP_VAL when base is even or exponent is 0.
3213  */
sp_3072_mod_exp_avx2_24(sp_digit * r,const sp_digit * a,const sp_digit * e,int bits,const sp_digit * m,int reduceA)3214 static int sp_3072_mod_exp_avx2_24(sp_digit* r, const sp_digit* a, const sp_digit* e,
3215         int bits, const sp_digit* m, int reduceA)
3216 {
3217 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
3218     sp_digit* td = NULL;
3219 #else
3220     sp_digit td[(33 * 48) + 48];
3221 #endif
3222     sp_digit* t[32];
3223     sp_digit* rt = NULL;
3224     sp_digit* norm;
3225     sp_digit mp = 1;
3226     sp_digit n;
3227     sp_digit mask;
3228     int i;
3229     int c;
3230     byte y;
3231     int err = MP_OKAY;
3232 
3233     ASSERT_SAVED_VECTOR_REGISTERS();
3234 
3235     if ((m[0] & 1) == 0) {
3236         err = MP_VAL;
3237     }
3238     else if (bits == 0) {
3239         err = MP_VAL;
3240     }
3241 
3242 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
3243     if (err == MP_OKAY) {
3244         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (33 * 48) + 48, NULL,
3245                                 DYNAMIC_TYPE_TMP_BUFFER);
3246         if (td == NULL) {
3247             err = MEMORY_E;
3248         }
3249     }
3250 #endif
3251 
3252     if (err == MP_OKAY) {
3253         norm = td;
3254 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
3255         for (i=0; i<32; i++)
3256             t[i] = td + i * 48;
3257         rt = td + 1536;
3258 #else
3259         for (i=0; i<32; i++)
3260             t[i] = &td[i * 48];
3261         rt = &td[1536];
3262 #endif
3263 
3264         sp_3072_mont_setup(m, &mp);
3265         sp_3072_mont_norm_24(norm, m);
3266 
3267         XMEMSET(t[1], 0, sizeof(sp_digit) * 24);
3268         if (reduceA) {
3269             err = sp_3072_mod_24(t[1] + 24, a, m);
3270             if (err == MP_OKAY)
3271                 err = sp_3072_mod_24(t[1], t[1], m);
3272         }
3273         else {
3274             XMEMCPY(t[1] + 24, a, sizeof(sp_digit) * 24);
3275             err = sp_3072_mod_24(t[1], t[1], m);
3276         }
3277     }
3278 
3279     if (err == MP_OKAY) {
3280         sp_3072_mont_sqr_avx2_24(t[ 2], t[ 1], m, mp);
3281         sp_3072_mont_mul_avx2_24(t[ 3], t[ 2], t[ 1], m, mp);
3282         sp_3072_mont_sqr_avx2_24(t[ 4], t[ 2], m, mp);
3283         sp_3072_mont_mul_avx2_24(t[ 5], t[ 3], t[ 2], m, mp);
3284         sp_3072_mont_sqr_avx2_24(t[ 6], t[ 3], m, mp);
3285         sp_3072_mont_mul_avx2_24(t[ 7], t[ 4], t[ 3], m, mp);
3286         sp_3072_mont_sqr_avx2_24(t[ 8], t[ 4], m, mp);
3287         sp_3072_mont_mul_avx2_24(t[ 9], t[ 5], t[ 4], m, mp);
3288         sp_3072_mont_sqr_avx2_24(t[10], t[ 5], m, mp);
3289         sp_3072_mont_mul_avx2_24(t[11], t[ 6], t[ 5], m, mp);
3290         sp_3072_mont_sqr_avx2_24(t[12], t[ 6], m, mp);
3291         sp_3072_mont_mul_avx2_24(t[13], t[ 7], t[ 6], m, mp);
3292         sp_3072_mont_sqr_avx2_24(t[14], t[ 7], m, mp);
3293         sp_3072_mont_mul_avx2_24(t[15], t[ 8], t[ 7], m, mp);
3294         sp_3072_mont_sqr_avx2_24(t[16], t[ 8], m, mp);
3295         sp_3072_mont_mul_avx2_24(t[17], t[ 9], t[ 8], m, mp);
3296         sp_3072_mont_sqr_avx2_24(t[18], t[ 9], m, mp);
3297         sp_3072_mont_mul_avx2_24(t[19], t[10], t[ 9], m, mp);
3298         sp_3072_mont_sqr_avx2_24(t[20], t[10], m, mp);
3299         sp_3072_mont_mul_avx2_24(t[21], t[11], t[10], m, mp);
3300         sp_3072_mont_sqr_avx2_24(t[22], t[11], m, mp);
3301         sp_3072_mont_mul_avx2_24(t[23], t[12], t[11], m, mp);
3302         sp_3072_mont_sqr_avx2_24(t[24], t[12], m, mp);
3303         sp_3072_mont_mul_avx2_24(t[25], t[13], t[12], m, mp);
3304         sp_3072_mont_sqr_avx2_24(t[26], t[13], m, mp);
3305         sp_3072_mont_mul_avx2_24(t[27], t[14], t[13], m, mp);
3306         sp_3072_mont_sqr_avx2_24(t[28], t[14], m, mp);
3307         sp_3072_mont_mul_avx2_24(t[29], t[15], t[14], m, mp);
3308         sp_3072_mont_sqr_avx2_24(t[30], t[15], m, mp);
3309         sp_3072_mont_mul_avx2_24(t[31], t[16], t[15], m, mp);
3310 
3311         i = (bits - 1) / 64;
3312         n = e[i--];
3313         /* Number of bits available in top word. */
3314         c = bits & 63;
3315         if (c == 0) {
3316             c = 64;
3317         }
3318         /* Minus the number of top bits to use so rest is a multiple of 5. */
3319         if ((bits % 5) == 0) {
3320             c -= 5;
3321         }
3322         else {
3323             c -= bits % 5;
3324         }
3325         if (c < 0) {
3326             /* Number of bits in top word is less than number needed. */
3327             c = -c;
3328             y = (byte)(n << c);
3329             n = e[i--];
3330             y |= (byte)(n >> (64 - c));
3331             n <<= c;
3332             c = 64 - c;
3333         }
3334         else {
3335             y = (byte)(n >> c);
3336             n <<= 64 - c;
3337         }
3338         XMEMCPY(r, t[y], sizeof(sp_digit) * 24);
3339         for (; i>=0 || c>=5; ) {
3340             if (c >= 5) {
3341                 y = (byte)((n >> 59) & 0x1f);
3342                 n <<= 5;
3343                 c -= 5;
3344             }
3345             else if (c == 0) {
3346                 n = e[i--];
3347                 y = (byte)(n >> 59);
3348                 n <<= 5;
3349                 c = 59;
3350             }
3351             else {
3352                 y = (byte)(n >> 59);
3353                 n = e[i--];
3354                 c = 5 - c;
3355                 y |= (byte)(n >> (64 - c));
3356                 n <<= c;
3357                 c = 64 - c;
3358             }
3359 
3360             sp_3072_sqr_avx2_24(rt, r);
3361             sp_3072_mont_reduce_avx2_24(rt, m, mp);
3362             sp_3072_sqr_avx2_24(r, rt);
3363             sp_3072_mont_reduce_avx2_24(r, m, mp);
3364             sp_3072_sqr_avx2_24(rt, r);
3365             sp_3072_mont_reduce_avx2_24(rt, m, mp);
3366             sp_3072_sqr_avx2_24(r, rt);
3367             sp_3072_mont_reduce_avx2_24(r, m, mp);
3368             sp_3072_sqr_avx2_24(rt, r);
3369             sp_3072_mont_reduce_avx2_24(rt, m, mp);
3370 
3371             sp_3072_mul_avx2_24(r, rt, t[y]);
3372             sp_3072_mont_reduce_avx2_24(r, m, mp);
3373         }
3374 
3375         XMEMSET(&r[24], 0, sizeof(sp_digit) * 24);
3376         sp_3072_mont_reduce_avx2_24(r, m, mp);
3377 
3378         mask = 0 - (sp_3072_cmp_24(r, m) >= 0);
3379         sp_3072_cond_sub_avx2_24(r, r, m, mask);
3380     }
3381 
3382 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
3383     if (td != NULL)
3384         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
3385 #endif
3386 
3387     return err;
3388 }
3389 #endif /* HAVE_INTEL_AVX2 */
3390 
3391 #endif /* (WOLFSSL_HAVE_SP_RSA & !WOLFSSL_RSA_PUBLIC_ONLY) | WOLFSSL_HAVE_SP_DH */
3392 
3393 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
3394 /* r = 2^n mod m where n is the number of bits to reduce by.
3395  * Given m must be 3072 bits, just need to subtract.
3396  *
3397  * r  A single precision number.
3398  * m  A single precision number.
3399  */
sp_3072_mont_norm_48(sp_digit * r,const sp_digit * m)3400 static void sp_3072_mont_norm_48(sp_digit* r, const sp_digit* m)
3401 {
3402     XMEMSET(r, 0, sizeof(sp_digit) * 48);
3403 
3404     ASSERT_SAVED_VECTOR_REGISTERS();
3405 
3406     /* r = 2^n mod m */
3407     sp_3072_sub_in_place_48(r, m);
3408 }
3409 
3410 #endif /* (WOLFSSL_HAVE_SP_RSA & !WOLFSSL_RSA_PUBLIC_ONLY) | WOLFSSL_HAVE_SP_DH */
3411 extern sp_digit sp_3072_cond_sub_48(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
3412 extern void sp_3072_mont_reduce_48(sp_digit* a, const sp_digit* m, sp_digit mp);
3413 /* Multiply two Montgomery form numbers mod the modulus (prime).
3414  * (r = a * b mod m)
3415  *
3416  * r   Result of multiplication.
3417  * a   First number to multiply in Montgomery form.
3418  * b   Second number to multiply in Montgomery form.
3419  * m   Modulus (prime).
3420  * mp  Montgomery mulitplier.
3421  */
sp_3072_mont_mul_48(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)3422 static void sp_3072_mont_mul_48(sp_digit* r, const sp_digit* a,
3423         const sp_digit* b, const sp_digit* m, sp_digit mp)
3424 {
3425     sp_3072_mul_48(r, a, b);
3426     sp_3072_mont_reduce_48(r, m, mp);
3427 }
3428 
3429 /* Square the Montgomery form number. (r = a * a mod m)
3430  *
3431  * r   Result of squaring.
3432  * a   Number to square in Montgomery form.
3433  * m   Modulus (prime).
3434  * mp  Montgomery mulitplier.
3435  */
sp_3072_mont_sqr_48(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)3436 static void sp_3072_mont_sqr_48(sp_digit* r, const sp_digit* a,
3437         const sp_digit* m, sp_digit mp)
3438 {
3439     sp_3072_sqr_48(r, a);
3440     sp_3072_mont_reduce_48(r, m, mp);
3441 }
3442 
3443 extern sp_digit sp_3072_sub_48(sp_digit* r, const sp_digit* a, const sp_digit* b);
3444 extern void sp_3072_mul_d_avx2_48(sp_digit* r, const sp_digit* a, const sp_digit b);
3445 #ifdef _WIN64
3446 #if _MSC_VER < 1920
3447 extern sp_digit div_3072_word_asm_48(sp_digit d1, sp_digit d0, sp_digit div);
3448 #endif /* _MSC_VER < 1920 */
3449 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
3450  *
3451  * d1   The high order half of the number to divide.
3452  * d0   The low order half of the number to divide.
3453  * div  The dividend.
3454  * returns the result of the division.
3455  */
div_3072_word_48(sp_digit d1,sp_digit d0,sp_digit div)3456 static WC_INLINE sp_digit div_3072_word_48(sp_digit d1, sp_digit d0,
3457         sp_digit div)
3458 {
3459     ASSERT_SAVED_VECTOR_REGISTERS();
3460 #if _MSC_VER >= 1920
3461     return _udiv128(d1, d0, div, NULL);
3462 #else
3463     return div_3072_word_asm_48(d1, d0, div);
3464 #endif
3465 }
3466 #else
3467 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
3468  *
3469  * d1   The high order half of the number to divide.
3470  * d0   The low order half of the number to divide.
3471  * div  The dividend.
3472  * returns the result of the division.
3473  */
div_3072_word_48(sp_digit d1,sp_digit d0,sp_digit div)3474 static WC_INLINE sp_digit div_3072_word_48(sp_digit d1, sp_digit d0,
3475         sp_digit div)
3476 {
3477     ASSERT_SAVED_VECTOR_REGISTERS();
3478     register sp_digit r asm("rax");
3479     __asm__ __volatile__ (
3480         "divq %3"
3481         : "=a" (r)
3482         : "d" (d1), "a" (d0), "r" (div)
3483         :
3484     );
3485     return r;
3486 }
3487 #endif /* _WIN64 */
3488 /* Divide d in a and put remainder into r (m*d + r = a)
3489  * m is not calculated as it is not needed at this time.
3490  *
3491  * a  Number to be divided.
3492  * d  Number to divide with.
3493  * m  Multiplier result.
3494  * r  Remainder from the division.
3495  * returns MP_OKAY indicating success.
3496  */
sp_3072_div_48_cond(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)3497 static WC_INLINE int sp_3072_div_48_cond(const sp_digit* a, const sp_digit* d, sp_digit* m,
3498         sp_digit* r)
3499 {
3500     sp_digit t1[96];
3501     sp_digit t2[49];
3502     sp_digit div;
3503     sp_digit r1;
3504     int i;
3505 #ifdef HAVE_INTEL_AVX2
3506     word32 cpuid_flags = cpuid_get_flags();
3507 #endif
3508 
3509     ASSERT_SAVED_VECTOR_REGISTERS();
3510 
3511     (void)m;
3512 
3513     div = d[47];
3514     XMEMCPY(t1, a, sizeof(*t1) * 2 * 48);
3515     for (i = 47; i > 0; i--) {
3516         if (t1[i + 48] != d[i])
3517             break;
3518     }
3519     if (t1[i + 48] >= d[i]) {
3520         sp_3072_sub_in_place_48(&t1[48], d);
3521     }
3522     for (i=47; i>=0; i--) {
3523         sp_digit hi = t1[48 + i] - (t1[48 + i] == div);
3524         r1 = div_3072_word_48(hi, t1[48 + i - 1], div);
3525 
3526 #ifdef HAVE_INTEL_AVX2
3527         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
3528             sp_3072_mul_d_avx2_48(t2, d, r1);
3529         else
3530 #endif
3531             sp_3072_mul_d_48(t2, d, r1);
3532         t1[48 + i] += sp_3072_sub_in_place_48(&t1[i], t2);
3533         t1[48 + i] -= t2[48];
3534         if (t1[48 + i] != 0) {
3535             t1[48 + i] += sp_3072_add_48(&t1[i], &t1[i], d);
3536             if (t1[48 + i] != 0)
3537                 t1[48 + i] += sp_3072_add_48(&t1[i], &t1[i], d);
3538         }
3539     }
3540 
3541     for (i = 47; i > 0; i--) {
3542         if (t1[i] != d[i])
3543             break;
3544     }
3545     if (t1[i] >= d[i]) {
3546         sp_3072_sub_48(r, t1, d);
3547     }
3548     else {
3549         XMEMCPY(r, t1, sizeof(*t1) * 48);
3550     }
3551 
3552     return MP_OKAY;
3553 }
3554 
3555 /* Reduce a modulo m into r. (r = a mod m)
3556  *
3557  * r  A single precision number that is the reduced result.
3558  * a  A single precision number that is to be reduced.
3559  * m  A single precision number that is the modulus to reduce with.
3560  * returns MP_OKAY indicating success.
3561  */
sp_3072_mod_48_cond(sp_digit * r,const sp_digit * a,const sp_digit * m)3562 static WC_INLINE int sp_3072_mod_48_cond(sp_digit* r, const sp_digit* a,
3563         const sp_digit* m)
3564 {
3565     ASSERT_SAVED_VECTOR_REGISTERS();
3566     return sp_3072_div_48_cond(a, m, NULL, r);
3567 }
3568 
3569 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
3570 extern sp_digit sp_3072_cond_sub_avx2_48(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
3571 /* AND m into each word of a and store in r.
3572  *
3573  * r  A single precision integer.
3574  * a  A single precision integer.
3575  * m  Mask to AND against each digit.
3576  */
sp_3072_mask_48(sp_digit * r,const sp_digit * a,sp_digit m)3577 static void sp_3072_mask_48(sp_digit* r, const sp_digit* a, sp_digit m)
3578 {
3579 #ifdef WOLFSSL_SP_SMALL
3580     int i;
3581 
3582     for (i=0; i<48; i++) {
3583         r[i] = a[i] & m;
3584     }
3585 #else
3586     int i;
3587 
3588     for (i = 0; i < 48; i += 8) {
3589         r[i+0] = a[i+0] & m;
3590         r[i+1] = a[i+1] & m;
3591         r[i+2] = a[i+2] & m;
3592         r[i+3] = a[i+3] & m;
3593         r[i+4] = a[i+4] & m;
3594         r[i+5] = a[i+5] & m;
3595         r[i+6] = a[i+6] & m;
3596         r[i+7] = a[i+7] & m;
3597     }
3598 #endif
3599 }
3600 
3601 extern sp_int64 sp_3072_cmp_48(const sp_digit* a, const sp_digit* b);
3602 /* Divide d in a and put remainder into r (m*d + r = a)
3603  * m is not calculated as it is not needed at this time.
3604  *
3605  * a  Number to be divided.
3606  * d  Number to divide with.
3607  * m  Multiplier result.
3608  * r  Remainder from the division.
3609  * returns MP_OKAY indicating success.
3610  */
sp_3072_div_48(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)3611 static WC_INLINE int sp_3072_div_48(const sp_digit* a, const sp_digit* d, sp_digit* m,
3612         sp_digit* r)
3613 {
3614     sp_digit t1[96];
3615     sp_digit t2[49];
3616     sp_digit div;
3617     sp_digit r1;
3618     int i;
3619 #ifdef HAVE_INTEL_AVX2
3620     word32 cpuid_flags = cpuid_get_flags();
3621 #endif
3622 
3623     ASSERT_SAVED_VECTOR_REGISTERS();
3624 
3625     (void)m;
3626 
3627     div = d[47];
3628     XMEMCPY(t1, a, sizeof(*t1) * 2 * 48);
3629     r1 = sp_3072_cmp_48(&t1[48], d) >= 0;
3630 #ifdef HAVE_INTEL_AVX2
3631     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
3632         sp_3072_cond_sub_avx2_48(&t1[48], &t1[48], d, (sp_digit)0 - r1);
3633     else
3634 #endif
3635         sp_3072_cond_sub_48(&t1[48], &t1[48], d, (sp_digit)0 - r1);
3636     for (i=47; i>=0; i--) {
3637         sp_digit hi = t1[48 + i] - (t1[48 + i] == div);
3638         r1 = div_3072_word_48(hi, t1[48 + i - 1], div);
3639 
3640 #ifdef HAVE_INTEL_AVX2
3641         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
3642             sp_3072_mul_d_avx2_48(t2, d, r1);
3643         else
3644 #endif
3645             sp_3072_mul_d_48(t2, d, r1);
3646         t1[48 + i] += sp_3072_sub_in_place_48(&t1[i], t2);
3647         t1[48 + i] -= t2[48];
3648         sp_3072_mask_48(t2, d, t1[48 + i]);
3649         t1[48 + i] += sp_3072_add_48(&t1[i], &t1[i], t2);
3650         sp_3072_mask_48(t2, d, t1[48 + i]);
3651         t1[48 + i] += sp_3072_add_48(&t1[i], &t1[i], t2);
3652     }
3653 
3654     r1 = sp_3072_cmp_48(t1, d) >= 0;
3655 #ifdef HAVE_INTEL_AVX2
3656     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
3657         sp_3072_cond_sub_avx2_48(r, t1, d, (sp_digit)0 - r1);
3658     else
3659 #endif
3660         sp_3072_cond_sub_48(r, t1, d, (sp_digit)0 - r1);
3661 
3662     return MP_OKAY;
3663 }
3664 
3665 #if defined(WOLFSSL_HAVE_SP_DH) || !defined(WOLFSSL_RSA_PUBLIC_ONLY)
3666 /* Reduce a modulo m into r. (r = a mod m)
3667  *
3668  * r  A single precision number that is the reduced result.
3669  * a  A single precision number that is to be reduced.
3670  * m  A single precision number that is the modulus to reduce with.
3671  * returns MP_OKAY indicating success.
3672  */
sp_3072_mod_48(sp_digit * r,const sp_digit * a,const sp_digit * m)3673 static WC_INLINE int sp_3072_mod_48(sp_digit* r, const sp_digit* a,
3674         const sp_digit* m)
3675 {
3676     ASSERT_SAVED_VECTOR_REGISTERS();
3677     return sp_3072_div_48(a, m, NULL, r);
3678 }
3679 
3680 #endif /* WOLFSSL_HAVE_SP_DH || !WOLFSSL_RSA_PUBLIC_ONLY */
3681 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
3682  *
3683  * r     A single precision number that is the result of the operation.
3684  * a     A single precision number being exponentiated.
3685  * e     A single precision number that is the exponent.
3686  * bits  The number of bits in the exponent.
3687  * m     A single precision number that is the modulus.
3688  * returns  0 on success
3689  * returns  MEMORY_E on dynamic memory allocation failure.
3690  * returns  MP_VAL when base is even or exponent is 0.
3691  */
sp_3072_mod_exp_48(sp_digit * r,const sp_digit * a,const sp_digit * e,int bits,const sp_digit * m,int reduceA)3692 static int sp_3072_mod_exp_48(sp_digit* r, const sp_digit* a, const sp_digit* e,
3693         int bits, const sp_digit* m, int reduceA)
3694 {
3695 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
3696     sp_digit* td = NULL;
3697 #else
3698     sp_digit td[(17 * 96) + 96];
3699 #endif
3700     sp_digit* t[16];
3701     sp_digit* rt = NULL;
3702     sp_digit* norm;
3703     sp_digit mp = 1;
3704     sp_digit n;
3705     sp_digit mask;
3706     int i;
3707     int c;
3708     byte y;
3709     int err = MP_OKAY;
3710 
3711     ASSERT_SAVED_VECTOR_REGISTERS();
3712 
3713     if ((m[0] & 1) == 0) {
3714         err = MP_VAL;
3715     }
3716     else if (bits == 0) {
3717         err = MP_VAL;
3718     }
3719 
3720 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
3721     if (err == MP_OKAY) {
3722         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (17 * 96) + 96, NULL,
3723                                 DYNAMIC_TYPE_TMP_BUFFER);
3724         if (td == NULL) {
3725             err = MEMORY_E;
3726         }
3727     }
3728 #endif
3729 
3730     if (err == MP_OKAY) {
3731         norm = td;
3732 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
3733         for (i=0; i<16; i++)
3734             t[i] = td + i * 96;
3735         rt = td + 1536;
3736 #else
3737         for (i=0; i<16; i++)
3738             t[i] = &td[i * 96];
3739         rt = &td[1536];
3740 #endif
3741 
3742         sp_3072_mont_setup(m, &mp);
3743         sp_3072_mont_norm_48(norm, m);
3744 
3745         XMEMSET(t[1], 0, sizeof(sp_digit) * 48);
3746         if (reduceA) {
3747             err = sp_3072_mod_48(t[1] + 48, a, m);
3748             if (err == MP_OKAY)
3749                 err = sp_3072_mod_48(t[1], t[1], m);
3750         }
3751         else {
3752             XMEMCPY(t[1] + 48, a, sizeof(sp_digit) * 48);
3753             err = sp_3072_mod_48(t[1], t[1], m);
3754         }
3755     }
3756 
3757     if (err == MP_OKAY) {
3758         sp_3072_mont_sqr_48(t[ 2], t[ 1], m, mp);
3759         sp_3072_mont_mul_48(t[ 3], t[ 2], t[ 1], m, mp);
3760         sp_3072_mont_sqr_48(t[ 4], t[ 2], m, mp);
3761         sp_3072_mont_mul_48(t[ 5], t[ 3], t[ 2], m, mp);
3762         sp_3072_mont_sqr_48(t[ 6], t[ 3], m, mp);
3763         sp_3072_mont_mul_48(t[ 7], t[ 4], t[ 3], m, mp);
3764         sp_3072_mont_sqr_48(t[ 8], t[ 4], m, mp);
3765         sp_3072_mont_mul_48(t[ 9], t[ 5], t[ 4], m, mp);
3766         sp_3072_mont_sqr_48(t[10], t[ 5], m, mp);
3767         sp_3072_mont_mul_48(t[11], t[ 6], t[ 5], m, mp);
3768         sp_3072_mont_sqr_48(t[12], t[ 6], m, mp);
3769         sp_3072_mont_mul_48(t[13], t[ 7], t[ 6], m, mp);
3770         sp_3072_mont_sqr_48(t[14], t[ 7], m, mp);
3771         sp_3072_mont_mul_48(t[15], t[ 8], t[ 7], m, mp);
3772 
3773         i = (bits - 1) / 64;
3774         n = e[i--];
3775         /* Number of bits available in top word. */
3776         c = bits & 63;
3777         if (c == 0) {
3778             c = 64;
3779         }
3780         /* Minus the number of top bits to use so rest is a multiple of 4. */
3781         if ((bits % 4) == 0) {
3782             c -= 4;
3783         }
3784         else {
3785             c -= bits % 4;
3786         }
3787         if (c < 0) {
3788             /* Number of bits in top word is less than number needed. */
3789             c = -c;
3790             y = (byte)(n << c);
3791             n = e[i--];
3792             y |= (byte)(n >> (64 - c));
3793             n <<= c;
3794             c = 64 - c;
3795         }
3796         else {
3797             y = (byte)(n >> c);
3798             n <<= 64 - c;
3799         }
3800         XMEMCPY(r, t[y], sizeof(sp_digit) * 48);
3801         for (; i>=0 || c>=4; ) {
3802             if (c >= 4) {
3803                 y = (byte)((n >> 60) & 0xf);
3804                 n <<= 4;
3805                 c -= 4;
3806             }
3807             else if (c == 0) {
3808                 n = e[i--];
3809                 y = (byte)(n >> 60);
3810                 n <<= 4;
3811                 c = 60;
3812             }
3813             else {
3814                 y = (byte)(n >> 60);
3815                 n = e[i--];
3816                 c = 4 - c;
3817                 y |= (byte)(n >> (64 - c));
3818                 n <<= c;
3819                 c = 64 - c;
3820             }
3821 
3822             sp_3072_sqr_48(rt, r);
3823             sp_3072_mont_reduce_48(rt, m, mp);
3824             sp_3072_sqr_48(r, rt);
3825             sp_3072_mont_reduce_48(r, m, mp);
3826             sp_3072_sqr_48(rt, r);
3827             sp_3072_mont_reduce_48(rt, m, mp);
3828             sp_3072_sqr_48(r, rt);
3829             sp_3072_mont_reduce_48(r, m, mp);
3830 
3831             sp_3072_mul_48(r, r, t[y]);
3832             sp_3072_mont_reduce_48(r, m, mp);
3833         }
3834 
3835         XMEMSET(&r[48], 0, sizeof(sp_digit) * 48);
3836         sp_3072_mont_reduce_48(r, m, mp);
3837 
3838         mask = 0 - (sp_3072_cmp_48(r, m) >= 0);
3839         sp_3072_cond_sub_48(r, r, m, mask);
3840     }
3841 
3842 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
3843     if (td != NULL)
3844         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
3845 #endif
3846 
3847     return err;
3848 }
3849 
3850 #endif /* (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
3851 extern void sp_3072_mont_reduce_avx2_48(sp_digit* a, const sp_digit* m, sp_digit mp);
3852 #ifdef HAVE_INTEL_AVX2
3853 /* Multiply two Montgomery form numbers mod the modulus (prime).
3854  * (r = a * b mod m)
3855  *
3856  * r   Result of multiplication.
3857  * a   First number to multiply in Montgomery form.
3858  * b   Second number to multiply in Montgomery form.
3859  * m   Modulus (prime).
3860  * mp  Montgomery mulitplier.
3861  */
sp_3072_mont_mul_avx2_48(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)3862 static void sp_3072_mont_mul_avx2_48(sp_digit* r, const sp_digit* a,
3863         const sp_digit* b, const sp_digit* m, sp_digit mp)
3864 {
3865     sp_3072_mul_avx2_48(r, a, b);
3866     sp_3072_mont_reduce_avx2_48(r, m, mp);
3867 }
3868 
3869 #endif /* HAVE_INTEL_AVX2 */
3870 #ifdef HAVE_INTEL_AVX2
3871 /* Square the Montgomery form number. (r = a * a mod m)
3872  *
3873  * r   Result of squaring.
3874  * a   Number to square in Montgomery form.
3875  * m   Modulus (prime).
3876  * mp  Montgomery mulitplier.
3877  */
sp_3072_mont_sqr_avx2_48(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)3878 static void sp_3072_mont_sqr_avx2_48(sp_digit* r, const sp_digit* a,
3879         const sp_digit* m, sp_digit mp)
3880 {
3881     sp_3072_sqr_avx2_48(r, a);
3882     sp_3072_mont_reduce_avx2_48(r, m, mp);
3883 }
3884 
3885 #endif /* HAVE_INTEL_AVX2 */
3886 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
3887 #ifdef HAVE_INTEL_AVX2
3888 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
3889  *
3890  * r     A single precision number that is the result of the operation.
3891  * a     A single precision number being exponentiated.
3892  * e     A single precision number that is the exponent.
3893  * bits  The number of bits in the exponent.
3894  * m     A single precision number that is the modulus.
3895  * returns  0 on success
3896  * returns  MEMORY_E on dynamic memory allocation failure.
3897  * returns  MP_VAL when base is even or exponent is 0.
3898  */
sp_3072_mod_exp_avx2_48(sp_digit * r,const sp_digit * a,const sp_digit * e,int bits,const sp_digit * m,int reduceA)3899 static int sp_3072_mod_exp_avx2_48(sp_digit* r, const sp_digit* a, const sp_digit* e,
3900         int bits, const sp_digit* m, int reduceA)
3901 {
3902 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
3903     sp_digit* td = NULL;
3904 #else
3905     sp_digit td[(17 * 96) + 96];
3906 #endif
3907     sp_digit* t[16];
3908     sp_digit* rt = NULL;
3909     sp_digit* norm;
3910     sp_digit mp = 1;
3911     sp_digit n;
3912     sp_digit mask;
3913     int i;
3914     int c;
3915     byte y;
3916     int err = MP_OKAY;
3917 
3918     ASSERT_SAVED_VECTOR_REGISTERS();
3919 
3920     if ((m[0] & 1) == 0) {
3921         err = MP_VAL;
3922     }
3923     else if (bits == 0) {
3924         err = MP_VAL;
3925     }
3926 
3927 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
3928     if (err == MP_OKAY) {
3929         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (17 * 96) + 96, NULL,
3930                                 DYNAMIC_TYPE_TMP_BUFFER);
3931         if (td == NULL) {
3932             err = MEMORY_E;
3933         }
3934     }
3935 #endif
3936 
3937     if (err == MP_OKAY) {
3938         norm = td;
3939 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
3940         for (i=0; i<16; i++)
3941             t[i] = td + i * 96;
3942         rt = td + 1536;
3943 #else
3944         for (i=0; i<16; i++)
3945             t[i] = &td[i * 96];
3946         rt = &td[1536];
3947 #endif
3948 
3949         sp_3072_mont_setup(m, &mp);
3950         sp_3072_mont_norm_48(norm, m);
3951 
3952         XMEMSET(t[1], 0, sizeof(sp_digit) * 48);
3953         if (reduceA) {
3954             err = sp_3072_mod_48(t[1] + 48, a, m);
3955             if (err == MP_OKAY)
3956                 err = sp_3072_mod_48(t[1], t[1], m);
3957         }
3958         else {
3959             XMEMCPY(t[1] + 48, a, sizeof(sp_digit) * 48);
3960             err = sp_3072_mod_48(t[1], t[1], m);
3961         }
3962     }
3963 
3964     if (err == MP_OKAY) {
3965         sp_3072_mont_sqr_avx2_48(t[ 2], t[ 1], m, mp);
3966         sp_3072_mont_mul_avx2_48(t[ 3], t[ 2], t[ 1], m, mp);
3967         sp_3072_mont_sqr_avx2_48(t[ 4], t[ 2], m, mp);
3968         sp_3072_mont_mul_avx2_48(t[ 5], t[ 3], t[ 2], m, mp);
3969         sp_3072_mont_sqr_avx2_48(t[ 6], t[ 3], m, mp);
3970         sp_3072_mont_mul_avx2_48(t[ 7], t[ 4], t[ 3], m, mp);
3971         sp_3072_mont_sqr_avx2_48(t[ 8], t[ 4], m, mp);
3972         sp_3072_mont_mul_avx2_48(t[ 9], t[ 5], t[ 4], m, mp);
3973         sp_3072_mont_sqr_avx2_48(t[10], t[ 5], m, mp);
3974         sp_3072_mont_mul_avx2_48(t[11], t[ 6], t[ 5], m, mp);
3975         sp_3072_mont_sqr_avx2_48(t[12], t[ 6], m, mp);
3976         sp_3072_mont_mul_avx2_48(t[13], t[ 7], t[ 6], m, mp);
3977         sp_3072_mont_sqr_avx2_48(t[14], t[ 7], m, mp);
3978         sp_3072_mont_mul_avx2_48(t[15], t[ 8], t[ 7], m, mp);
3979 
3980         i = (bits - 1) / 64;
3981         n = e[i--];
3982         /* Number of bits available in top word. */
3983         c = bits & 63;
3984         if (c == 0) {
3985             c = 64;
3986         }
3987         /* Minus the number of top bits to use so rest is a multiple of 4. */
3988         if ((bits % 4) == 0) {
3989             c -= 4;
3990         }
3991         else {
3992             c -= bits % 4;
3993         }
3994         if (c < 0) {
3995             /* Number of bits in top word is less than number needed. */
3996             c = -c;
3997             y = (byte)(n << c);
3998             n = e[i--];
3999             y |= (byte)(n >> (64 - c));
4000             n <<= c;
4001             c = 64 - c;
4002         }
4003         else {
4004             y = (byte)(n >> c);
4005             n <<= 64 - c;
4006         }
4007         XMEMCPY(r, t[y], sizeof(sp_digit) * 48);
4008         for (; i>=0 || c>=4; ) {
4009             if (c >= 4) {
4010                 y = (byte)((n >> 60) & 0xf);
4011                 n <<= 4;
4012                 c -= 4;
4013             }
4014             else if (c == 0) {
4015                 n = e[i--];
4016                 y = (byte)(n >> 60);
4017                 n <<= 4;
4018                 c = 60;
4019             }
4020             else {
4021                 y = (byte)(n >> 60);
4022                 n = e[i--];
4023                 c = 4 - c;
4024                 y |= (byte)(n >> (64 - c));
4025                 n <<= c;
4026                 c = 64 - c;
4027             }
4028 
4029             sp_3072_sqr_avx2_48(rt, r);
4030             sp_3072_mont_reduce_avx2_48(rt, m, mp);
4031             sp_3072_sqr_avx2_48(r, rt);
4032             sp_3072_mont_reduce_avx2_48(r, m, mp);
4033             sp_3072_sqr_avx2_48(rt, r);
4034             sp_3072_mont_reduce_avx2_48(rt, m, mp);
4035             sp_3072_sqr_avx2_48(r, rt);
4036             sp_3072_mont_reduce_avx2_48(r, m, mp);
4037 
4038             sp_3072_mul_avx2_48(r, r, t[y]);
4039             sp_3072_mont_reduce_avx2_48(r, m, mp);
4040         }
4041 
4042         XMEMSET(&r[48], 0, sizeof(sp_digit) * 48);
4043         sp_3072_mont_reduce_avx2_48(r, m, mp);
4044 
4045         mask = 0 - (sp_3072_cmp_48(r, m) >= 0);
4046         sp_3072_cond_sub_avx2_48(r, r, m, mask);
4047     }
4048 
4049 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4050     if (td != NULL)
4051         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
4052 #endif
4053 
4054     return err;
4055 }
4056 #endif /* HAVE_INTEL_AVX2 */
4057 
4058 #endif /* (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
4059 #ifdef WOLFSSL_HAVE_SP_RSA
4060 /* RSA public key operation.
4061  *
4062  * in      Array of bytes representing the number to exponentiate, base.
4063  * inLen   Number of bytes in base.
4064  * em      Public exponent.
4065  * mm      Modulus.
4066  * out     Buffer to hold big-endian bytes of exponentiation result.
4067  *         Must be at least 384 bytes long.
4068  * outLen  Number of bytes in result.
4069  * returns 0 on success, MP_TO_E when the outLen is too small, MP_READ_E when
4070  * an array is too long and MEMORY_E when dynamic memory allocation fails.
4071  */
sp_RsaPublic_3072(const byte * in,word32 inLen,const mp_int * em,const mp_int * mm,byte * out,word32 * outLen)4072 int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em,
4073     const mp_int* mm, byte* out, word32* outLen)
4074 {
4075 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4076     sp_digit* a = NULL;
4077 #else
4078     sp_digit a[48 * 5];
4079 #endif
4080     sp_digit* ah;
4081     sp_digit* m;
4082     sp_digit* r;
4083     sp_digit  e = 0;
4084     int err = MP_OKAY;
4085 #ifdef HAVE_INTEL_AVX2
4086     word32 cpuid_flags = cpuid_get_flags();
4087 #endif
4088 
4089     ASSERT_SAVED_VECTOR_REGISTERS();
4090 
4091     if (*outLen < 384) {
4092         err = MP_TO_E;
4093     }
4094     else if (mp_count_bits(em) > 64 || inLen > 384 ||
4095                                                      mp_count_bits(mm) != 3072) {
4096         err = MP_READ_E;
4097     }
4098     else if (mp_iseven(mm)) {
4099         err = MP_VAL;
4100     }
4101 
4102 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4103     if (err == MP_OKAY) {
4104         a = (sp_digit*)XMALLOC(sizeof(sp_digit) * 48 * 5, NULL,
4105                                                               DYNAMIC_TYPE_RSA);
4106         if (a == NULL)
4107             err = MEMORY_E;
4108     }
4109 #endif
4110 
4111     if (err == MP_OKAY) {
4112         r = a + 48 * 2;
4113         m = r + 48 * 2;
4114         ah = a + 48;
4115 
4116         sp_3072_from_bin(ah, 48, in, inLen);
4117 #if DIGIT_BIT >= 64
4118         e = em->dp[0];
4119 #else
4120         e = em->dp[0];
4121         if (em->used > 1)
4122             e |= ((sp_digit)em->dp[1]) << DIGIT_BIT;
4123 #endif
4124         if (e == 0)
4125             err = MP_EXPTMOD_E;
4126     }
4127     if (err == MP_OKAY) {
4128         sp_3072_from_mp(m, 48, mm);
4129 
4130         if (e == 0x3) {
4131 #ifdef HAVE_INTEL_AVX2
4132             if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
4133                 if (err == MP_OKAY) {
4134                     sp_3072_sqr_avx2_48(r, ah);
4135                     err = sp_3072_mod_48_cond(r, r, m);
4136                 }
4137                 if (err == MP_OKAY) {
4138                     sp_3072_mul_avx2_48(r, ah, r);
4139                     err = sp_3072_mod_48_cond(r, r, m);
4140                 }
4141             }
4142             else
4143 #endif
4144             {
4145                 if (err == MP_OKAY) {
4146                     sp_3072_sqr_48(r, ah);
4147                     err = sp_3072_mod_48_cond(r, r, m);
4148                 }
4149                 if (err == MP_OKAY) {
4150                     sp_3072_mul_48(r, ah, r);
4151                     err = sp_3072_mod_48_cond(r, r, m);
4152                 }
4153             }
4154         }
4155         else {
4156             int i;
4157             sp_digit mp;
4158 
4159             sp_3072_mont_setup(m, &mp);
4160 
4161             /* Convert to Montgomery form. */
4162             XMEMSET(a, 0, sizeof(sp_digit) * 48);
4163             err = sp_3072_mod_48_cond(a, a, m);
4164 
4165             if (err == MP_OKAY) {
4166                 for (i=63; i>=0; i--) {
4167                     if (e >> i) {
4168                         break;
4169                     }
4170                 }
4171 
4172                 XMEMCPY(r, a, sizeof(sp_digit) * 48);
4173 #ifdef HAVE_INTEL_AVX2
4174                 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
4175                     for (i--; i>=0; i--) {
4176                         sp_3072_mont_sqr_avx2_48(r, r, m, mp);
4177                         if (((e >> i) & 1) == 1) {
4178                             sp_3072_mont_mul_avx2_48(r, r, a, m, mp);
4179                         }
4180                     }
4181                     XMEMSET(&r[48], 0, sizeof(sp_digit) * 48);
4182                     sp_3072_mont_reduce_avx2_48(r, m, mp);
4183                 }
4184                 else
4185 #endif
4186                 {
4187                     for (i--; i>=0; i--) {
4188                         sp_3072_mont_sqr_48(r, r, m, mp);
4189                         if (((e >> i) & 1) == 1) {
4190                             sp_3072_mont_mul_48(r, r, a, m, mp);
4191                         }
4192                     }
4193                     XMEMSET(&r[48], 0, sizeof(sp_digit) * 48);
4194                     sp_3072_mont_reduce_48(r, m, mp);
4195                 }
4196 
4197                 for (i = 47; i > 0; i--) {
4198                     if (r[i] != m[i])
4199                         break;
4200                 }
4201                 if (r[i] >= m[i])
4202                     sp_3072_sub_in_place_48(r, m);
4203             }
4204         }
4205     }
4206 
4207     if (err == MP_OKAY) {
4208         sp_3072_to_bin_48(r, out);
4209         *outLen = 384;
4210     }
4211 
4212 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4213     if (a != NULL)
4214         XFREE(a, NULL, DYNAMIC_TYPE_RSA);
4215 #endif
4216 
4217     return err;
4218 }
4219 
4220 #ifndef WOLFSSL_RSA_PUBLIC_ONLY
4221 #if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
4222 /* RSA private key operation.
4223  *
4224  * in      Array of bytes representing the number to exponentiate, base.
4225  * inLen   Number of bytes in base.
4226  * dm      Private exponent.
4227  * pm      First prime.
4228  * qm      Second prime.
4229  * dpm     First prime's CRT exponent.
4230  * dqm     Second prime's CRT exponent.
4231  * qim     Inverse of second prime mod p.
4232  * mm      Modulus.
4233  * out     Buffer to hold big-endian bytes of exponentiation result.
4234  *         Must be at least 384 bytes long.
4235  * outLen  Number of bytes in result.
4236  * returns 0 on success, MP_TO_E when the outLen is too small, MP_READ_E when
4237  * an array is too long and MEMORY_E when dynamic memory allocation fails.
4238  */
sp_RsaPrivate_3072(const byte * in,word32 inLen,const mp_int * dm,const mp_int * pm,const mp_int * qm,const mp_int * dpm,const mp_int * dqm,const mp_int * qim,const mp_int * mm,byte * out,word32 * outLen)4239 int sp_RsaPrivate_3072(const byte* in, word32 inLen, const mp_int* dm,
4240     const mp_int* pm, const mp_int* qm,const  mp_int* dpm, const mp_int* dqm,
4241     const mp_int* qim, const mp_int* mm, byte* out, word32* outLen)
4242 {
4243 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4244     sp_digit* d = NULL;
4245 #else
4246     sp_digit d[48 * 4];
4247 #endif
4248     sp_digit* a;
4249     sp_digit* m;
4250     sp_digit* r;
4251     int err = MP_OKAY;
4252 
4253     ASSERT_SAVED_VECTOR_REGISTERS();
4254 
4255     (void)pm;
4256     (void)qm;
4257     (void)dpm;
4258     (void)dqm;
4259     (void)qim;
4260 
4261     if (*outLen < 384U) {
4262         err = MP_TO_E;
4263     }
4264     if (err == MP_OKAY) {
4265         if (mp_count_bits(dm) > 3072) {
4266             err = MP_READ_E;
4267         }
4268         else if (inLen > 384U) {
4269             err = MP_READ_E;
4270         }
4271         else if (mp_count_bits(mm) != 3072) {
4272             err = MP_READ_E;
4273         }
4274         else if (mp_iseven(mm)) {
4275             err = MP_VAL;
4276         }
4277     }
4278 
4279 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4280     if (err == MP_OKAY) {
4281         d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 48 * 4, NULL,
4282                                                              DYNAMIC_TYPE_RSA);
4283         if (d == NULL) {
4284             err = MEMORY_E;
4285         }
4286     }
4287 #endif
4288 
4289     if (err == MP_OKAY) {
4290         a = d + 48;
4291         m = a + 96;
4292 
4293         r = a;
4294 
4295         sp_3072_from_bin(a, 48, in, inLen);
4296         sp_3072_from_mp(d, 48, dm);
4297         sp_3072_from_mp(m, 48, mm);
4298         err = sp_3072_mod_exp_48(r, a, d, 3072, m, 0);
4299     }
4300 
4301     if (err == MP_OKAY) {
4302         sp_3072_to_bin_48(r, out);
4303         *outLen = 384;
4304     }
4305 
4306 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4307     if (d != NULL)
4308 #endif
4309     {
4310         /* only zeroing private "d" */
4311         ForceZero(d, sizeof(sp_digit) * 48);
4312     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4313         XFREE(d, NULL, DYNAMIC_TYPE_RSA);
4314     #endif
4315     }
4316 
4317     return err;
4318 }
4319 
4320 #else
4321 extern sp_digit sp_3072_cond_add_24(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
4322 extern sp_digit sp_3072_cond_add_avx2_24(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
4323 /* RSA private key operation.
4324  *
4325  * in      Array of bytes representing the number to exponentiate, base.
4326  * inLen   Number of bytes in base.
4327  * dm      Private exponent.
4328  * pm      First prime.
4329  * qm      Second prime.
4330  * dpm     First prime's CRT exponent.
4331  * dqm     Second prime's CRT exponent.
4332  * qim     Inverse of second prime mod p.
4333  * mm      Modulus.
4334  * out     Buffer to hold big-endian bytes of exponentiation result.
4335  *         Must be at least 384 bytes long.
4336  * outLen  Number of bytes in result.
4337  * returns 0 on success, MP_TO_E when the outLen is too small, MP_READ_E when
4338  * an array is too long and MEMORY_E when dynamic memory allocation fails.
4339  */
sp_RsaPrivate_3072(const byte * in,word32 inLen,const mp_int * dm,const mp_int * pm,const mp_int * qm,const mp_int * dpm,const mp_int * dqm,const mp_int * qim,const mp_int * mm,byte * out,word32 * outLen)4340 int sp_RsaPrivate_3072(const byte* in, word32 inLen, const mp_int* dm,
4341     const mp_int* pm, const mp_int* qm, const mp_int* dpm, const mp_int* dqm,
4342     const mp_int* qim, const mp_int* mm, byte* out, word32* outLen)
4343 {
4344 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4345     sp_digit* a = NULL;
4346 #else
4347     sp_digit a[24 * 11];
4348 #endif
4349     sp_digit* p;
4350     sp_digit* q;
4351     sp_digit* dp;
4352     sp_digit* dq;
4353     sp_digit* qi;
4354     sp_digit* tmpa;
4355     sp_digit* tmpb;
4356     sp_digit* r;
4357     sp_digit c;
4358     int err = MP_OKAY;
4359 #ifdef HAVE_INTEL_AVX2
4360     word32 cpuid_flags = cpuid_get_flags();
4361 #endif
4362 
4363     ASSERT_SAVED_VECTOR_REGISTERS();
4364 
4365     (void)dm;
4366     (void)mm;
4367 
4368     if (*outLen < 384) {
4369         err = MP_TO_E;
4370     }
4371     else if (inLen > 384 || mp_count_bits(mm) != 3072) {
4372         err = MP_READ_E;
4373     }
4374     else if (mp_iseven(mm)) {
4375         err = MP_VAL;
4376     }
4377 
4378 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4379     if (err == MP_OKAY) {
4380         a = (sp_digit*)XMALLOC(sizeof(sp_digit) * 24 * 11, NULL,
4381                                                               DYNAMIC_TYPE_RSA);
4382         if (a == NULL)
4383             err = MEMORY_E;
4384     }
4385 #endif
4386 
4387     if (err == MP_OKAY) {
4388         p = a + 48 * 2;
4389         q = p + 24;
4390         qi = dq = dp = q + 24;
4391         tmpa = qi + 24;
4392         tmpb = tmpa + 48;
4393         r = a + 48;
4394 
4395         sp_3072_from_bin(a, 48, in, inLen);
4396         sp_3072_from_mp(p, 24, pm);
4397         sp_3072_from_mp(q, 24, qm);
4398         sp_3072_from_mp(dp, 24, dpm);
4399 
4400 #ifdef HAVE_INTEL_AVX2
4401         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
4402             err = sp_3072_mod_exp_avx2_24(tmpa, a, dp, 1536, p, 1);
4403         else
4404 #endif
4405             err = sp_3072_mod_exp_24(tmpa, a, dp, 1536, p, 1);
4406     }
4407     if (err == MP_OKAY) {
4408         sp_3072_from_mp(dq, 24, dqm);
4409 #ifdef HAVE_INTEL_AVX2
4410         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
4411             err = sp_3072_mod_exp_avx2_24(tmpb, a, dq, 1536, q, 1);
4412        else
4413 #endif
4414             err = sp_3072_mod_exp_24(tmpb, a, dq, 1536, q, 1);
4415     }
4416 
4417     if (err == MP_OKAY) {
4418         c = sp_3072_sub_in_place_24(tmpa, tmpb);
4419 #ifdef HAVE_INTEL_AVX2
4420         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
4421             c += sp_3072_cond_add_avx2_24(tmpa, tmpa, p, c);
4422             sp_3072_cond_add_avx2_24(tmpa, tmpa, p, c);
4423         }
4424         else
4425 #endif
4426         {
4427             c += sp_3072_cond_add_24(tmpa, tmpa, p, c);
4428             sp_3072_cond_add_24(tmpa, tmpa, p, c);
4429         }
4430 
4431         sp_3072_from_mp(qi, 24, qim);
4432 #ifdef HAVE_INTEL_AVX2
4433         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
4434             sp_3072_mul_avx2_24(tmpa, tmpa, qi);
4435         }
4436         else
4437 #endif
4438         {
4439             sp_3072_mul_24(tmpa, tmpa, qi);
4440         }
4441         err = sp_3072_mod_24(tmpa, tmpa, p);
4442     }
4443 
4444     if (err == MP_OKAY) {
4445 #ifdef HAVE_INTEL_AVX2
4446         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
4447             sp_3072_mul_avx2_24(tmpa, q, tmpa);
4448         }
4449         else
4450 #endif
4451         {
4452             sp_3072_mul_24(tmpa, q, tmpa);
4453         }
4454         XMEMSET(&tmpb[24], 0, sizeof(sp_digit) * 24);
4455         sp_3072_add_48(r, tmpb, tmpa);
4456 
4457         sp_3072_to_bin_48(r, out);
4458         *outLen = 384;
4459     }
4460 
4461 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4462     if (a != NULL)
4463 #endif
4464     {
4465         ForceZero(a, sizeof(sp_digit) * 24 * 11);
4466     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4467         XFREE(a, NULL, DYNAMIC_TYPE_RSA);
4468     #endif
4469     }
4470 
4471     return err;
4472 }
4473 #endif /* SP_RSA_PRIVATE_EXP_D | RSA_LOW_MEM */
4474 #endif /* WOLFSSL_RSA_PUBLIC_ONLY */
4475 #endif /* WOLFSSL_HAVE_SP_RSA */
4476 #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
4477                                               !defined(WOLFSSL_RSA_PUBLIC_ONLY))
4478 /* Convert an array of sp_digit to an mp_int.
4479  *
4480  * a  A single precision integer.
4481  * r  A multi-precision integer.
4482  */
sp_3072_to_mp(const sp_digit * a,mp_int * r)4483 static int sp_3072_to_mp(const sp_digit* a, mp_int* r)
4484 {
4485     int err;
4486 
4487     err = mp_grow(r, (3072 + DIGIT_BIT - 1) / DIGIT_BIT);
4488     if (err == MP_OKAY) { /*lint !e774 case where err is always MP_OKAY*/
4489 #if DIGIT_BIT == 64
4490         XMEMCPY(r->dp, a, sizeof(sp_digit) * 48);
4491         r->used = 48;
4492         mp_clamp(r);
4493 #elif DIGIT_BIT < 64
4494         int i;
4495         int j = 0;
4496         int s = 0;
4497 
4498         r->dp[0] = 0;
4499         for (i = 0; i < 48; i++) {
4500             r->dp[j] |= (mp_digit)(a[i] << s);
4501             r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
4502             s = DIGIT_BIT - s;
4503             r->dp[++j] = (mp_digit)(a[i] >> s);
4504             while (s + DIGIT_BIT <= 64) {
4505                 s += DIGIT_BIT;
4506                 r->dp[j++] &= ((sp_digit)1 << DIGIT_BIT) - 1;
4507                 if (s == SP_WORD_SIZE) {
4508                     r->dp[j] = 0;
4509                 }
4510                 else {
4511                     r->dp[j] = (mp_digit)(a[i] >> s);
4512                 }
4513             }
4514             s = 64 - s;
4515         }
4516         r->used = (3072 + DIGIT_BIT - 1) / DIGIT_BIT;
4517         mp_clamp(r);
4518 #else
4519         int i;
4520         int j = 0;
4521         int s = 0;
4522 
4523         r->dp[0] = 0;
4524         for (i = 0; i < 48; i++) {
4525             r->dp[j] |= ((mp_digit)a[i]) << s;
4526             if (s + 64 >= DIGIT_BIT) {
4527     #if DIGIT_BIT != 32 && DIGIT_BIT != 64
4528                 r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
4529     #endif
4530                 s = DIGIT_BIT - s;
4531                 r->dp[++j] = a[i] >> s;
4532                 s = 64 - s;
4533             }
4534             else {
4535                 s += 64;
4536             }
4537         }
4538         r->used = (3072 + DIGIT_BIT - 1) / DIGIT_BIT;
4539         mp_clamp(r);
4540 #endif
4541     }
4542 
4543     return err;
4544 }
4545 
4546 /* Perform the modular exponentiation for Diffie-Hellman.
4547  *
4548  * base  Base. MP integer.
4549  * exp   Exponent. MP integer.
4550  * mod   Modulus. MP integer.
4551  * res   Result. MP integer.
4552  * returns 0 on success, MP_READ_E if there are too many bytes in an array
4553  * and MEMORY_E if memory allocation fails.
4554  */
sp_ModExp_3072(const mp_int * base,const mp_int * exp,const mp_int * mod,mp_int * res)4555 int sp_ModExp_3072(const mp_int* base, const mp_int* exp, const mp_int* mod,
4556     mp_int* res)
4557 {
4558     int err = MP_OKAY;
4559 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4560     sp_digit *b = NULL;
4561     sp_digit *e = NULL;
4562     sp_digit *m = NULL;
4563     sp_digit* r;
4564 #else
4565     sp_digit b[96];
4566     sp_digit e[48];
4567     sp_digit m[48];
4568     sp_digit* r = b;
4569 #endif
4570 #ifdef HAVE_INTEL_AVX2
4571     word32 cpuid_flags = cpuid_get_flags();
4572 #endif
4573     int expBits = mp_count_bits(exp);
4574 
4575     ASSERT_SAVED_VECTOR_REGISTERS();
4576 
4577     if (mp_count_bits(base) > 3072 || expBits > 3072 ||
4578                                                    mp_count_bits(mod) != 3072) {
4579         err = MP_READ_E;
4580     }
4581     else if (mp_iseven(mod)) {
4582         err = MP_VAL;
4583     }
4584 
4585 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4586     if (err == MP_OKAY) {
4587         if (((b = (sp_digit *)XMALLOC(96 * sizeof(*b), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL) ||
4588             ((e = (sp_digit *)XMALLOC(48 * sizeof(*e), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL) ||
4589             ((m = (sp_digit *)XMALLOC(48 * sizeof(*m), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL))
4590         {
4591             err = MEMORY_E;
4592         } else {
4593             r = b;
4594         }
4595     }
4596 #endif
4597 
4598     if (err == MP_OKAY) {
4599         sp_3072_from_mp(b, 48, base);
4600         sp_3072_from_mp(e, 48, exp);
4601         sp_3072_from_mp(m, 48, mod);
4602 
4603 #ifdef HAVE_INTEL_AVX2
4604         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
4605             err = sp_3072_mod_exp_avx2_48(r, b, e, expBits, m, 0);
4606         else
4607 #endif
4608             err = sp_3072_mod_exp_48(r, b, e, expBits, m, 0);
4609     }
4610 
4611     if (err == MP_OKAY) {
4612         err = sp_3072_to_mp(r, res);
4613     }
4614 
4615 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4616     if (b != NULL)
4617         XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER);
4618     if (e != NULL) {
4619         XMEMSET(e, 0, 48);
4620         XFREE(e, NULL, DYNAMIC_TYPE_TMP_BUFFER);
4621     }
4622     if (m != NULL)
4623         XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER);
4624 #else
4625     XMEMSET(e, 0, sizeof(e));
4626 #endif
4627 
4628     return err;
4629 }
4630 
4631 #ifdef WOLFSSL_HAVE_SP_DH
4632 #ifdef HAVE_FFDHE_3072
4633 extern void sp_3072_lshift_48(sp_digit* r, const sp_digit* a, int n);
4634 #ifdef HAVE_INTEL_AVX2
4635 /* Modular exponentiate 2 to the e mod m. (r = 2^e mod m)
4636  *
4637  * r     A single precision number that is the result of the operation.
4638  * e     A single precision number that is the exponent.
4639  * bits  The number of bits in the exponent.
4640  * m     A single precision number that is the modulus.
4641  * returns  0 on success.
4642  * returns  MEMORY_E on dynamic memory allocation failure.
4643  * returns  MP_VAL when base is even.
4644  */
sp_3072_mod_exp_2_avx2_48(sp_digit * r,const sp_digit * e,int bits,const sp_digit * m)4645 static int sp_3072_mod_exp_2_avx2_48(sp_digit* r, const sp_digit* e, int bits,
4646         const sp_digit* m)
4647 {
4648 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4649     sp_digit* td = NULL;
4650 #else
4651     sp_digit td[49 + 96];
4652 #endif
4653     sp_digit* norm;
4654     sp_digit* tmp;
4655     sp_digit mp = 1;
4656     sp_digit n;
4657     sp_digit o;
4658     sp_digit mask;
4659     int i;
4660     int c;
4661     byte y;
4662     int err = MP_OKAY;
4663 
4664     ASSERT_SAVED_VECTOR_REGISTERS();
4665 
4666     if ((m[0] & 1) == 0) {
4667         err = MP_VAL;
4668     }
4669 
4670 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4671     if (err == MP_OKAY) {
4672         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (49 + 96), NULL,
4673                                 DYNAMIC_TYPE_TMP_BUFFER);
4674         if (td == NULL) {
4675             err = MEMORY_E;
4676         }
4677     }
4678 #endif
4679 
4680     if (err == MP_OKAY) {
4681         norm = td;
4682 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4683         tmp = td + 96;
4684 #else
4685         tmp = &td[96];
4686 #endif
4687 
4688         sp_3072_mont_setup(m, &mp);
4689         sp_3072_mont_norm_48(norm, m);
4690 
4691         i = (bits - 1) / 64;
4692         n = e[i--];
4693         /* Number of bits available in top word. */
4694         c = bits & 63;
4695         if (c == 0) {
4696             c = 64;
4697         }
4698         /* Minus the number of top bits to use so rest is a multiple of 6. */
4699         if ((bits % 6) == 0) {
4700             c -= 6;
4701         }
4702         else {
4703             c -= bits % 6;
4704         }
4705         if (c < 0) {
4706             /* Number of bits in top word is less than number needed. */
4707             c = -c;
4708             y = (byte)(n << c);
4709             n = e[i--];
4710             y |= (byte)(n >> (64 - c));
4711             n <<= c;
4712             c = 64 - c;
4713         }
4714         else {
4715             y = (byte)(n >> c);
4716             n <<= 64 - c;
4717         }
4718         sp_3072_lshift_48(r, norm, y);
4719         while ((i >= 0) || (c >= 6)) {
4720             if (c == 0) {
4721                 n = e[i--];
4722                 y = (byte)(n >> 58);
4723                 n <<= 6;
4724                 c = 58;
4725             }
4726             else if (c < 6) {
4727                 y = (byte)(n >> 58);
4728                 n = e[i--];
4729                 c = 6 - c;
4730                 y |= (byte)(n >> (64 - c));
4731                 n <<= c;
4732                 c = 64 - c;
4733             }
4734             else {
4735                 y = (byte)((n >> 58) & 0x3f);
4736                 n <<= 6;
4737                 c -= 6;
4738             }
4739 
4740             sp_3072_mont_sqr_avx2_48(r, r, m, mp);
4741             sp_3072_mont_sqr_avx2_48(r, r, m, mp);
4742             sp_3072_mont_sqr_avx2_48(r, r, m, mp);
4743             sp_3072_mont_sqr_avx2_48(r, r, m, mp);
4744             sp_3072_mont_sqr_avx2_48(r, r, m, mp);
4745             sp_3072_mont_sqr_avx2_48(r, r, m, mp);
4746 
4747             sp_3072_lshift_48(r, r, y);
4748             sp_3072_mul_d_avx2_48(tmp, norm, r[48]);
4749             r[48] = 0;
4750             o = sp_3072_add_48(r, r, tmp);
4751             sp_3072_cond_sub_avx2_48(r, r, m, (sp_digit)0 - o);
4752         }
4753 
4754         XMEMSET(&r[48], 0, sizeof(sp_digit) * 48);
4755         sp_3072_mont_reduce_avx2_48(r, m, mp);
4756 
4757         mask = 0 - (sp_3072_cmp_48(r, m) >= 0);
4758         sp_3072_cond_sub_avx2_48(r, r, m, mask);
4759     }
4760 
4761 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4762     if (td != NULL)
4763         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
4764 #endif
4765 
4766     return err;
4767 }
4768 #endif /* HAVE_INTEL_AVX2 */
4769 
4770 /* Modular exponentiate 2 to the e mod m. (r = 2^e mod m)
4771  *
4772  * r     A single precision number that is the result of the operation.
4773  * e     A single precision number that is the exponent.
4774  * bits  The number of bits in the exponent.
4775  * m     A single precision number that is the modulus.
4776  * returns  0 on success.
4777  * returns  MEMORY_E on dynamic memory allocation failure.
4778  * returns  MP_VAL when base is even.
4779  */
sp_3072_mod_exp_2_48(sp_digit * r,const sp_digit * e,int bits,const sp_digit * m)4780 static int sp_3072_mod_exp_2_48(sp_digit* r, const sp_digit* e, int bits,
4781         const sp_digit* m)
4782 {
4783 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4784     sp_digit* td = NULL;
4785 #else
4786     sp_digit td[49 + 96];
4787 #endif
4788     sp_digit* norm;
4789     sp_digit* tmp;
4790     sp_digit mp = 1;
4791     sp_digit n;
4792     sp_digit o;
4793     sp_digit mask;
4794     int i;
4795     int c;
4796     byte y;
4797     int err = MP_OKAY;
4798 
4799     ASSERT_SAVED_VECTOR_REGISTERS();
4800 
4801     if ((m[0] & 1) == 0) {
4802         err = MP_VAL;
4803     }
4804 
4805 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4806     if (err == MP_OKAY) {
4807         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (49 + 96), NULL,
4808                                 DYNAMIC_TYPE_TMP_BUFFER);
4809         if (td == NULL) {
4810             err = MEMORY_E;
4811         }
4812     }
4813 #endif
4814 
4815     if (err == MP_OKAY) {
4816         norm = td;
4817 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4818         tmp = td + 96;
4819 #else
4820         tmp = &td[96];
4821 #endif
4822 
4823         sp_3072_mont_setup(m, &mp);
4824         sp_3072_mont_norm_48(norm, m);
4825 
4826         i = (bits - 1) / 64;
4827         n = e[i--];
4828         /* Number of bits available in top word. */
4829         c = bits & 63;
4830         if (c == 0) {
4831             c = 64;
4832         }
4833         /* Minus the number of top bits to use so rest is a multiple of 6. */
4834         if ((bits % 6) == 0) {
4835             c -= 6;
4836         }
4837         else {
4838             c -= bits % 6;
4839         }
4840         if (c < 0) {
4841             /* Number of bits in top word is less than number needed. */
4842             c = -c;
4843             y = (byte)(n << c);
4844             n = e[i--];
4845             y |= (byte)(n >> (64 - c));
4846             n <<= c;
4847             c = 64 - c;
4848         }
4849         else {
4850             y = (byte)(n >> c);
4851             n <<= 64 - c;
4852         }
4853         sp_3072_lshift_48(r, norm, y);
4854         while ((i >= 0) || (c >= 6)) {
4855             if (c == 0) {
4856                 n = e[i--];
4857                 y = (byte)(n >> 58);
4858                 n <<= 6;
4859                 c = 58;
4860             }
4861             else if (c < 6) {
4862                 y = (byte)(n >> 58);
4863                 n = e[i--];
4864                 c = 6 - c;
4865                 y |= (byte)(n >> (64 - c));
4866                 n <<= c;
4867                 c = 64 - c;
4868             }
4869             else {
4870                 y = (byte)((n >> 58) & 0x3f);
4871                 n <<= 6;
4872                 c -= 6;
4873             }
4874 
4875             sp_3072_mont_sqr_48(r, r, m, mp);
4876             sp_3072_mont_sqr_48(r, r, m, mp);
4877             sp_3072_mont_sqr_48(r, r, m, mp);
4878             sp_3072_mont_sqr_48(r, r, m, mp);
4879             sp_3072_mont_sqr_48(r, r, m, mp);
4880             sp_3072_mont_sqr_48(r, r, m, mp);
4881 
4882             sp_3072_lshift_48(r, r, y);
4883             sp_3072_mul_d_48(tmp, norm, r[48]);
4884             r[48] = 0;
4885             o = sp_3072_add_48(r, r, tmp);
4886             sp_3072_cond_sub_48(r, r, m, (sp_digit)0 - o);
4887         }
4888 
4889         XMEMSET(&r[48], 0, sizeof(sp_digit) * 48);
4890         sp_3072_mont_reduce_48(r, m, mp);
4891 
4892         mask = 0 - (sp_3072_cmp_48(r, m) >= 0);
4893         sp_3072_cond_sub_48(r, r, m, mask);
4894     }
4895 
4896 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4897     if (td != NULL)
4898         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
4899 #endif
4900 
4901     return err;
4902 }
4903 
4904 #endif /* HAVE_FFDHE_3072 */
4905 
4906 /* Perform the modular exponentiation for Diffie-Hellman.
4907  *
4908  * base     Base.
4909  * exp      Array of bytes that is the exponent.
4910  * expLen   Length of data, in bytes, in exponent.
4911  * mod      Modulus.
4912  * out      Buffer to hold big-endian bytes of exponentiation result.
4913  *          Must be at least 384 bytes long.
4914  * outLen   Length, in bytes, of exponentiation result.
4915  * returns 0 on success, MP_READ_E if there are too many bytes in an array
4916  * and MEMORY_E if memory allocation fails.
4917  */
sp_DhExp_3072(const mp_int * base,const byte * exp,word32 expLen,const mp_int * mod,byte * out,word32 * outLen)4918 int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen,
4919     const mp_int* mod, byte* out, word32* outLen)
4920 {
4921     int err = MP_OKAY;
4922 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4923     sp_digit *b = NULL;
4924     sp_digit *e = NULL;
4925     sp_digit *m = NULL;
4926     sp_digit* r;
4927 #else
4928     sp_digit b[96];
4929     sp_digit e[48];
4930     sp_digit m[48];
4931     sp_digit* r = b;
4932 #endif
4933     word32 i;
4934 #ifdef HAVE_INTEL_AVX2
4935     word32 cpuid_flags = cpuid_get_flags();
4936 #endif
4937 
4938     ASSERT_SAVED_VECTOR_REGISTERS();
4939 
4940     if (mp_count_bits(base) > 3072 || expLen > 384 ||
4941                                                    mp_count_bits(mod) != 3072) {
4942         err = MP_READ_E;
4943     }
4944     else if (mp_iseven(mod)) {
4945         err = MP_VAL;
4946     }
4947 
4948 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4949     if (err == MP_OKAY) {
4950         if (((b = (sp_digit *)XMALLOC(96 * sizeof(*b), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL) ||
4951             ((e = (sp_digit *)XMALLOC(48 * sizeof(*e), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL) ||
4952             ((m = (sp_digit *)XMALLOC(48 * sizeof(*m), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL))
4953         {
4954             err = MEMORY_E;
4955         } else {
4956             r = b;
4957         }
4958     }
4959 #endif
4960 
4961     if (err == MP_OKAY) {
4962         sp_3072_from_mp(b, 48, base);
4963         sp_3072_from_bin(e, 48, exp, expLen);
4964         sp_3072_from_mp(m, 48, mod);
4965 
4966     #ifdef HAVE_FFDHE_3072
4967         if (base->used == 1 && base->dp[0] == 2 && m[47] == (sp_digit)-1) {
4968 #ifdef HAVE_INTEL_AVX2
4969             if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
4970                 err = sp_3072_mod_exp_2_avx2_48(r, e, expLen * 8, m);
4971             else
4972 #endif
4973                 err = sp_3072_mod_exp_2_48(r, e, expLen * 8, m);
4974         }
4975         else
4976     #endif
4977         {
4978 #ifdef HAVE_INTEL_AVX2
4979             if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
4980                 err = sp_3072_mod_exp_avx2_48(r, b, e, expLen * 8, m, 0);
4981             else
4982 #endif
4983                 err = sp_3072_mod_exp_48(r, b, e, expLen * 8, m, 0);
4984         }
4985     }
4986 
4987     if (err == MP_OKAY) {
4988         sp_3072_to_bin_48(r, out);
4989         *outLen = 384;
4990         for (i=0; i<384 && out[i] == 0; i++) {
4991             /* Search for first non-zero. */
4992         }
4993         *outLen -= i;
4994         XMEMMOVE(out, out + i, *outLen);
4995     }
4996 
4997 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
4998     if (b != NULL)
4999         XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER);
5000     if (e != NULL) {
5001         XMEMSET(e, 0, 48);
5002         XFREE(e, NULL, DYNAMIC_TYPE_TMP_BUFFER);
5003     }
5004     if (m != NULL)
5005         XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER);
5006 #else
5007     XMEMSET(e, 0, sizeof(e));
5008 #endif
5009 
5010     return err;
5011 }
5012 #endif
5013 /* Perform the modular exponentiation for Diffie-Hellman.
5014  *
5015  * base  Base. MP integer.
5016  * exp   Exponent. MP integer.
5017  * mod   Modulus. MP integer.
5018  * res   Result. MP integer.
5019  * returns 0 on success, MP_READ_E if there are too many bytes in an array
5020  * and MEMORY_E if memory allocation fails.
5021  */
sp_ModExp_1536(const mp_int * base,const mp_int * exp,const mp_int * mod,mp_int * res)5022 int sp_ModExp_1536(const mp_int* base, const mp_int* exp, const mp_int* mod,
5023     mp_int* res)
5024 {
5025     int err = MP_OKAY;
5026 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
5027     sp_digit *b = NULL;
5028     sp_digit *e = NULL;
5029     sp_digit *m = NULL;
5030     sp_digit* r;
5031 #else
5032     sp_digit b[48];
5033     sp_digit e[24];
5034     sp_digit m[24];
5035     sp_digit* r = b;
5036 #endif
5037 #ifdef HAVE_INTEL_AVX2
5038     word32 cpuid_flags = cpuid_get_flags();
5039 #endif
5040     int expBits = mp_count_bits(exp);
5041 
5042     ASSERT_SAVED_VECTOR_REGISTERS();
5043 
5044     if (mp_count_bits(base) > 1536 || expBits > 1536 ||
5045                                                    mp_count_bits(mod) != 1536) {
5046         err = MP_READ_E;
5047     }
5048     else if (mp_iseven(mod)) {
5049         err = MP_VAL;
5050     }
5051 
5052 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
5053     if (err == MP_OKAY) {
5054         if (((b = (sp_digit *)XMALLOC(48 * sizeof(*b), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL) ||
5055             ((e = (sp_digit *)XMALLOC(24 * sizeof(*e), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL) ||
5056             ((m = (sp_digit *)XMALLOC(24 * sizeof(*m), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL))
5057         {
5058             err = MEMORY_E;
5059         } else {
5060             r = b;
5061         }
5062     }
5063 #endif
5064 
5065     if (err == MP_OKAY) {
5066         sp_3072_from_mp(b, 24, base);
5067         sp_3072_from_mp(e, 24, exp);
5068         sp_3072_from_mp(m, 24, mod);
5069 
5070 #ifdef HAVE_INTEL_AVX2
5071         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
5072             err = sp_3072_mod_exp_avx2_24(r, b, e, expBits, m, 0);
5073         else
5074 #endif
5075             err = sp_3072_mod_exp_24(r, b, e, expBits, m, 0);
5076     }
5077 
5078     if (err == MP_OKAY) {
5079         XMEMSET(r + 24, 0, sizeof(*r) * 24);
5080         err = sp_3072_to_mp(r, res);
5081     }
5082 
5083 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
5084     if (b != NULL)
5085         XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER);
5086     if (e != NULL) {
5087         XMEMSET(e, 0, 24);
5088         XFREE(e, NULL, DYNAMIC_TYPE_TMP_BUFFER);
5089     }
5090     if (m != NULL)
5091         XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER);
5092 #else
5093     XMEMSET(e, 0, sizeof(e));
5094 #endif
5095 
5096     return err;
5097 }
5098 
5099 #endif /* WOLFSSL_HAVE_SP_DH | (WOLFSSL_HAVE_SP_RSA & !WOLFSSL_RSA_PUBLIC_ONLY) */
5100 
5101 #endif /* !WOLFSSL_SP_NO_3072 */
5102 
5103 #ifdef WOLFSSL_SP_4096
5104 extern void sp_4096_from_bin_bswap(sp_digit* r, int size, const byte* a, int n);
5105 extern void sp_4096_from_bin_movbe(sp_digit* r, int size, const byte* a, int n);
5106 /* Read big endian unsigned byte array into r.
5107  *
5108  * r  A single precision integer.
5109  * size  Maximum number of bytes to convert
5110  * a  Byte array.
5111  * n  Number of bytes in array to read.
5112  */
sp_4096_from_bin(sp_digit * r,int size,const byte * a,int n)5113 static void sp_4096_from_bin(sp_digit* r, int size, const byte* a, int n)
5114 {
5115 #ifndef NO_MOVBE_SUPPORT
5116     word32 cpuid_flags = cpuid_get_flags();
5117 
5118     if (IS_INTEL_MOVBE(cpuid_flags)) {
5119         sp_4096_from_bin_movbe(r, size, a, n);
5120     }
5121     else
5122 #endif
5123     {
5124         sp_4096_from_bin_bswap(r, size, a, n);
5125     }
5126 }
5127 
5128 /* Convert an mp_int to an array of sp_digit.
5129  *
5130  * r  A single precision integer.
5131  * size  Maximum number of bytes to convert
5132  * a  A multi-precision integer.
5133  */
sp_4096_from_mp(sp_digit * r,int size,const mp_int * a)5134 static void sp_4096_from_mp(sp_digit* r, int size, const mp_int* a)
5135 {
5136 #if DIGIT_BIT == 64
5137     int j;
5138 
5139     XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
5140 
5141     for (j = a->used; j < size; j++) {
5142         r[j] = 0;
5143     }
5144 #elif DIGIT_BIT > 64
5145     int i;
5146     int j = 0;
5147     word32 s = 0;
5148 
5149     r[0] = 0;
5150     for (i = 0; i < a->used && j < size; i++) {
5151         r[j] |= ((sp_digit)a->dp[i] << s);
5152         r[j] &= 0xffffffffffffffffl;
5153         s = 64U - s;
5154         if (j + 1 >= size) {
5155             break;
5156         }
5157         /* lint allow cast of mismatch word32 and mp_digit */
5158         r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
5159         while ((s + 64U) <= (word32)DIGIT_BIT) {
5160             s += 64U;
5161             r[j] &= 0xffffffffffffffffl;
5162             if (j + 1 >= size) {
5163                 break;
5164             }
5165             if (s < (word32)DIGIT_BIT) {
5166                 /* lint allow cast of mismatch word32 and mp_digit */
5167                 r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
5168             }
5169             else {
5170                 r[++j] = (sp_digit)0;
5171             }
5172         }
5173         s = (word32)DIGIT_BIT - s;
5174     }
5175 
5176     for (j++; j < size; j++) {
5177         r[j] = 0;
5178     }
5179 #else
5180     int i;
5181     int j = 0;
5182     int s = 0;
5183 
5184     r[0] = 0;
5185     for (i = 0; i < a->used && j < size; i++) {
5186         r[j] |= ((sp_digit)a->dp[i]) << s;
5187         if (s + DIGIT_BIT >= 64) {
5188             r[j] &= 0xffffffffffffffffl;
5189             if (j + 1 >= size) {
5190                 break;
5191             }
5192             s = 64 - s;
5193             if (s == DIGIT_BIT) {
5194                 r[++j] = 0;
5195                 s = 0;
5196             }
5197             else {
5198                 r[++j] = a->dp[i] >> s;
5199                 s = DIGIT_BIT - s;
5200             }
5201         }
5202         else {
5203             s += DIGIT_BIT;
5204         }
5205     }
5206 
5207     for (j++; j < size; j++) {
5208         r[j] = 0;
5209     }
5210 #endif
5211 }
5212 
5213 extern void sp_4096_to_bin_bswap_64(sp_digit* r, byte* a);
5214 extern void sp_4096_to_bin_movbe_64(sp_digit* r, byte* a);
5215 /* Write r as big endian to byte array.
5216  * Fixed length number of bytes written: 512
5217  *
5218  * r  A single precision integer.
5219  * a  Byte array.
5220  */
sp_4096_to_bin_64(sp_digit * r,byte * a)5221 static void sp_4096_to_bin_64(sp_digit* r, byte* a)
5222 {
5223 #ifndef NO_MOVBE_SUPPORT
5224     word32 cpuid_flags = cpuid_get_flags();
5225 
5226     if (IS_INTEL_MOVBE(cpuid_flags)) {
5227         sp_4096_to_bin_movbe_64(r, a);
5228     }
5229     else
5230 #endif
5231     {
5232         sp_4096_to_bin_bswap_64(r, a);
5233     }
5234 }
5235 
5236 #if (defined(WOLFSSL_HAVE_SP_RSA) && (!defined(WOLFSSL_RSA_PUBLIC_ONLY) || !defined(WOLFSSL_SP_SMALL))) || defined(WOLFSSL_HAVE_SP_DH)
5237 /* Normalize the values in each word to 64.
5238  *
5239  * a  Array of sp_digit to normalize.
5240  */
5241 #define sp_4096_norm_64(a)
5242 
5243 #endif /* (WOLFSSL_HAVE_SP_RSA && (!WOLFSSL_RSA_PUBLIC_ONLY || !WOLFSSL_SP_SMALL)) || WOLFSSL_HAVE_SP_DH */
5244 /* Normalize the values in each word to 64.
5245  *
5246  * a  Array of sp_digit to normalize.
5247  */
5248 #define sp_4096_norm_64(a)
5249 
5250 extern sp_digit sp_4096_sub_in_place_64(sp_digit* a, const sp_digit* b);
5251 extern sp_digit sp_4096_add_64(sp_digit* r, const sp_digit* a, const sp_digit* b);
5252 extern void sp_4096_mul_64(sp_digit* r, const sp_digit* a, const sp_digit* b);
5253 
5254 extern sp_digit sp_2048_dbl_32(sp_digit* r, const sp_digit* a);
5255 extern void sp_4096_sqr_64(sp_digit* r, const sp_digit* a);
5256 
5257 extern void sp_4096_mul_avx2_64(sp_digit* r, const sp_digit* a, const sp_digit* b);
5258 
5259 extern void sp_4096_sqr_avx2_64(sp_digit* r, const sp_digit* a);
5260 
5261 /* Caclulate the bottom digit of -1/a mod 2^n.
5262  *
5263  * a    A single precision number.
5264  * rho  Bottom word of inverse.
5265  */
sp_4096_mont_setup(const sp_digit * a,sp_digit * rho)5266 static void sp_4096_mont_setup(const sp_digit* a, sp_digit* rho)
5267 {
5268     sp_digit x;
5269     sp_digit b;
5270 
5271     b = a[0];
5272     x = (((b + 2) & 4) << 1) + b; /* here x*a==1 mod 2**4 */
5273     x *= 2 - b * x;               /* here x*a==1 mod 2**8 */
5274     x *= 2 - b * x;               /* here x*a==1 mod 2**16 */
5275     x *= 2 - b * x;               /* here x*a==1 mod 2**32 */
5276     x *= 2 - b * x;               /* here x*a==1 mod 2**64 */
5277 
5278     /* rho = -1/m mod b */
5279     *rho = (sp_digit)0 - x;
5280 }
5281 
5282 extern void sp_4096_mul_d_64(sp_digit* r, const sp_digit* a, sp_digit b);
5283 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
5284 /* r = 2^n mod m where n is the number of bits to reduce by.
5285  * Given m must be 4096 bits, just need to subtract.
5286  *
5287  * r  A single precision number.
5288  * m  A single precision number.
5289  */
sp_4096_mont_norm_64(sp_digit * r,const sp_digit * m)5290 static void sp_4096_mont_norm_64(sp_digit* r, const sp_digit* m)
5291 {
5292     XMEMSET(r, 0, sizeof(sp_digit) * 64);
5293 
5294     ASSERT_SAVED_VECTOR_REGISTERS();
5295 
5296     /* r = 2^n mod m */
5297     sp_4096_sub_in_place_64(r, m);
5298 }
5299 
5300 #endif /* (WOLFSSL_HAVE_SP_RSA & !WOLFSSL_RSA_PUBLIC_ONLY) | WOLFSSL_HAVE_SP_DH */
5301 extern sp_digit sp_4096_cond_sub_64(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
5302 extern void sp_4096_mont_reduce_64(sp_digit* a, const sp_digit* m, sp_digit mp);
5303 /* Multiply two Montgomery form numbers mod the modulus (prime).
5304  * (r = a * b mod m)
5305  *
5306  * r   Result of multiplication.
5307  * a   First number to multiply in Montgomery form.
5308  * b   Second number to multiply in Montgomery form.
5309  * m   Modulus (prime).
5310  * mp  Montgomery mulitplier.
5311  */
sp_4096_mont_mul_64(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)5312 static void sp_4096_mont_mul_64(sp_digit* r, const sp_digit* a,
5313         const sp_digit* b, const sp_digit* m, sp_digit mp)
5314 {
5315     sp_4096_mul_64(r, a, b);
5316     sp_4096_mont_reduce_64(r, m, mp);
5317 }
5318 
5319 /* Square the Montgomery form number. (r = a * a mod m)
5320  *
5321  * r   Result of squaring.
5322  * a   Number to square in Montgomery form.
5323  * m   Modulus (prime).
5324  * mp  Montgomery mulitplier.
5325  */
sp_4096_mont_sqr_64(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)5326 static void sp_4096_mont_sqr_64(sp_digit* r, const sp_digit* a,
5327         const sp_digit* m, sp_digit mp)
5328 {
5329     sp_4096_sqr_64(r, a);
5330     sp_4096_mont_reduce_64(r, m, mp);
5331 }
5332 
5333 extern sp_digit sp_4096_sub_64(sp_digit* r, const sp_digit* a, const sp_digit* b);
5334 extern void sp_4096_mul_d_avx2_64(sp_digit* r, const sp_digit* a, const sp_digit b);
5335 #ifdef _WIN64
5336 #if _MSC_VER < 1920
5337 extern sp_digit div_4096_word_asm_64(sp_digit d1, sp_digit d0, sp_digit div);
5338 #endif /* _MSC_VER < 1920 */
5339 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
5340  *
5341  * d1   The high order half of the number to divide.
5342  * d0   The low order half of the number to divide.
5343  * div  The dividend.
5344  * returns the result of the division.
5345  */
div_4096_word_64(sp_digit d1,sp_digit d0,sp_digit div)5346 static WC_INLINE sp_digit div_4096_word_64(sp_digit d1, sp_digit d0,
5347         sp_digit div)
5348 {
5349     ASSERT_SAVED_VECTOR_REGISTERS();
5350 #if _MSC_VER >= 1920
5351     return _udiv128(d1, d0, div, NULL);
5352 #else
5353     return div_4096_word_asm_64(d1, d0, div);
5354 #endif
5355 }
5356 #else
5357 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
5358  *
5359  * d1   The high order half of the number to divide.
5360  * d0   The low order half of the number to divide.
5361  * div  The dividend.
5362  * returns the result of the division.
5363  */
div_4096_word_64(sp_digit d1,sp_digit d0,sp_digit div)5364 static WC_INLINE sp_digit div_4096_word_64(sp_digit d1, sp_digit d0,
5365         sp_digit div)
5366 {
5367     ASSERT_SAVED_VECTOR_REGISTERS();
5368     register sp_digit r asm("rax");
5369     __asm__ __volatile__ (
5370         "divq %3"
5371         : "=a" (r)
5372         : "d" (d1), "a" (d0), "r" (div)
5373         :
5374     );
5375     return r;
5376 }
5377 #endif /* _WIN64 */
5378 /* Divide d in a and put remainder into r (m*d + r = a)
5379  * m is not calculated as it is not needed at this time.
5380  *
5381  * a  Number to be divided.
5382  * d  Number to divide with.
5383  * m  Multiplier result.
5384  * r  Remainder from the division.
5385  * returns MP_OKAY indicating success.
5386  */
sp_4096_div_64_cond(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)5387 static WC_INLINE int sp_4096_div_64_cond(const sp_digit* a, const sp_digit* d, sp_digit* m,
5388         sp_digit* r)
5389 {
5390     sp_digit t1[128];
5391     sp_digit t2[65];
5392     sp_digit div;
5393     sp_digit r1;
5394     int i;
5395 #ifdef HAVE_INTEL_AVX2
5396     word32 cpuid_flags = cpuid_get_flags();
5397 #endif
5398 
5399     ASSERT_SAVED_VECTOR_REGISTERS();
5400 
5401     (void)m;
5402 
5403     div = d[63];
5404     XMEMCPY(t1, a, sizeof(*t1) * 2 * 64);
5405     for (i = 63; i > 0; i--) {
5406         if (t1[i + 64] != d[i])
5407             break;
5408     }
5409     if (t1[i + 64] >= d[i]) {
5410         sp_4096_sub_in_place_64(&t1[64], d);
5411     }
5412     for (i=63; i>=0; i--) {
5413         sp_digit hi = t1[64 + i] - (t1[64 + i] == div);
5414         r1 = div_4096_word_64(hi, t1[64 + i - 1], div);
5415 
5416 #ifdef HAVE_INTEL_AVX2
5417         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
5418             sp_4096_mul_d_avx2_64(t2, d, r1);
5419         else
5420 #endif
5421             sp_4096_mul_d_64(t2, d, r1);
5422         t1[64 + i] += sp_4096_sub_in_place_64(&t1[i], t2);
5423         t1[64 + i] -= t2[64];
5424         if (t1[64 + i] != 0) {
5425             t1[64 + i] += sp_4096_add_64(&t1[i], &t1[i], d);
5426             if (t1[64 + i] != 0)
5427                 t1[64 + i] += sp_4096_add_64(&t1[i], &t1[i], d);
5428         }
5429     }
5430 
5431     for (i = 63; i > 0; i--) {
5432         if (t1[i] != d[i])
5433             break;
5434     }
5435     if (t1[i] >= d[i]) {
5436         sp_4096_sub_64(r, t1, d);
5437     }
5438     else {
5439         XMEMCPY(r, t1, sizeof(*t1) * 64);
5440     }
5441 
5442     return MP_OKAY;
5443 }
5444 
5445 /* Reduce a modulo m into r. (r = a mod m)
5446  *
5447  * r  A single precision number that is the reduced result.
5448  * a  A single precision number that is to be reduced.
5449  * m  A single precision number that is the modulus to reduce with.
5450  * returns MP_OKAY indicating success.
5451  */
sp_4096_mod_64_cond(sp_digit * r,const sp_digit * a,const sp_digit * m)5452 static WC_INLINE int sp_4096_mod_64_cond(sp_digit* r, const sp_digit* a,
5453         const sp_digit* m)
5454 {
5455     ASSERT_SAVED_VECTOR_REGISTERS();
5456     return sp_4096_div_64_cond(a, m, NULL, r);
5457 }
5458 
5459 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
5460 extern sp_digit sp_4096_cond_sub_avx2_64(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
5461 /* AND m into each word of a and store in r.
5462  *
5463  * r  A single precision integer.
5464  * a  A single precision integer.
5465  * m  Mask to AND against each digit.
5466  */
sp_4096_mask_64(sp_digit * r,const sp_digit * a,sp_digit m)5467 static void sp_4096_mask_64(sp_digit* r, const sp_digit* a, sp_digit m)
5468 {
5469 #ifdef WOLFSSL_SP_SMALL
5470     int i;
5471 
5472     for (i=0; i<64; i++) {
5473         r[i] = a[i] & m;
5474     }
5475 #else
5476     int i;
5477 
5478     for (i = 0; i < 64; i += 8) {
5479         r[i+0] = a[i+0] & m;
5480         r[i+1] = a[i+1] & m;
5481         r[i+2] = a[i+2] & m;
5482         r[i+3] = a[i+3] & m;
5483         r[i+4] = a[i+4] & m;
5484         r[i+5] = a[i+5] & m;
5485         r[i+6] = a[i+6] & m;
5486         r[i+7] = a[i+7] & m;
5487     }
5488 #endif
5489 }
5490 
5491 extern sp_int64 sp_4096_cmp_64(const sp_digit* a, const sp_digit* b);
5492 /* Divide d in a and put remainder into r (m*d + r = a)
5493  * m is not calculated as it is not needed at this time.
5494  *
5495  * a  Number to be divided.
5496  * d  Number to divide with.
5497  * m  Multiplier result.
5498  * r  Remainder from the division.
5499  * returns MP_OKAY indicating success.
5500  */
sp_4096_div_64(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)5501 static WC_INLINE int sp_4096_div_64(const sp_digit* a, const sp_digit* d, sp_digit* m,
5502         sp_digit* r)
5503 {
5504     sp_digit t1[128];
5505     sp_digit t2[65];
5506     sp_digit div;
5507     sp_digit r1;
5508     int i;
5509 #ifdef HAVE_INTEL_AVX2
5510     word32 cpuid_flags = cpuid_get_flags();
5511 #endif
5512 
5513     ASSERT_SAVED_VECTOR_REGISTERS();
5514 
5515     (void)m;
5516 
5517     div = d[63];
5518     XMEMCPY(t1, a, sizeof(*t1) * 2 * 64);
5519     r1 = sp_4096_cmp_64(&t1[64], d) >= 0;
5520 #ifdef HAVE_INTEL_AVX2
5521     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
5522         sp_4096_cond_sub_avx2_64(&t1[64], &t1[64], d, (sp_digit)0 - r1);
5523     else
5524 #endif
5525         sp_4096_cond_sub_64(&t1[64], &t1[64], d, (sp_digit)0 - r1);
5526     for (i=63; i>=0; i--) {
5527         sp_digit hi = t1[64 + i] - (t1[64 + i] == div);
5528         r1 = div_4096_word_64(hi, t1[64 + i - 1], div);
5529 
5530 #ifdef HAVE_INTEL_AVX2
5531         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
5532             sp_4096_mul_d_avx2_64(t2, d, r1);
5533         else
5534 #endif
5535             sp_4096_mul_d_64(t2, d, r1);
5536         t1[64 + i] += sp_4096_sub_in_place_64(&t1[i], t2);
5537         t1[64 + i] -= t2[64];
5538         sp_4096_mask_64(t2, d, t1[64 + i]);
5539         t1[64 + i] += sp_4096_add_64(&t1[i], &t1[i], t2);
5540         sp_4096_mask_64(t2, d, t1[64 + i]);
5541         t1[64 + i] += sp_4096_add_64(&t1[i], &t1[i], t2);
5542     }
5543 
5544     r1 = sp_4096_cmp_64(t1, d) >= 0;
5545 #ifdef HAVE_INTEL_AVX2
5546     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
5547         sp_4096_cond_sub_avx2_64(r, t1, d, (sp_digit)0 - r1);
5548     else
5549 #endif
5550         sp_4096_cond_sub_64(r, t1, d, (sp_digit)0 - r1);
5551 
5552     return MP_OKAY;
5553 }
5554 
5555 #if defined(WOLFSSL_HAVE_SP_DH) || !defined(WOLFSSL_RSA_PUBLIC_ONLY)
5556 /* Reduce a modulo m into r. (r = a mod m)
5557  *
5558  * r  A single precision number that is the reduced result.
5559  * a  A single precision number that is to be reduced.
5560  * m  A single precision number that is the modulus to reduce with.
5561  * returns MP_OKAY indicating success.
5562  */
sp_4096_mod_64(sp_digit * r,const sp_digit * a,const sp_digit * m)5563 static WC_INLINE int sp_4096_mod_64(sp_digit* r, const sp_digit* a,
5564         const sp_digit* m)
5565 {
5566     ASSERT_SAVED_VECTOR_REGISTERS();
5567     return sp_4096_div_64(a, m, NULL, r);
5568 }
5569 
5570 #endif /* WOLFSSL_HAVE_SP_DH || !WOLFSSL_RSA_PUBLIC_ONLY */
5571 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
5572  *
5573  * r     A single precision number that is the result of the operation.
5574  * a     A single precision number being exponentiated.
5575  * e     A single precision number that is the exponent.
5576  * bits  The number of bits in the exponent.
5577  * m     A single precision number that is the modulus.
5578  * returns  0 on success
5579  * returns  MEMORY_E on dynamic memory allocation failure.
5580  * returns  MP_VAL when base is even or exponent is 0.
5581  */
sp_4096_mod_exp_64(sp_digit * r,const sp_digit * a,const sp_digit * e,int bits,const sp_digit * m,int reduceA)5582 static int sp_4096_mod_exp_64(sp_digit* r, const sp_digit* a, const sp_digit* e,
5583         int bits, const sp_digit* m, int reduceA)
5584 {
5585 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
5586     sp_digit* td = NULL;
5587 #else
5588     sp_digit td[(17 * 128) + 128];
5589 #endif
5590     sp_digit* t[16];
5591     sp_digit* rt = NULL;
5592     sp_digit* norm;
5593     sp_digit mp = 1;
5594     sp_digit n;
5595     sp_digit mask;
5596     int i;
5597     int c;
5598     byte y;
5599     int err = MP_OKAY;
5600 
5601     ASSERT_SAVED_VECTOR_REGISTERS();
5602 
5603     if ((m[0] & 1) == 0) {
5604         err = MP_VAL;
5605     }
5606     else if (bits == 0) {
5607         err = MP_VAL;
5608     }
5609 
5610 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
5611     if (err == MP_OKAY) {
5612         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (17 * 128) + 128, NULL,
5613                                 DYNAMIC_TYPE_TMP_BUFFER);
5614         if (td == NULL) {
5615             err = MEMORY_E;
5616         }
5617     }
5618 #endif
5619 
5620     if (err == MP_OKAY) {
5621         norm = td;
5622 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
5623         for (i=0; i<16; i++)
5624             t[i] = td + i * 128;
5625         rt = td + 2048;
5626 #else
5627         for (i=0; i<16; i++)
5628             t[i] = &td[i * 128];
5629         rt = &td[2048];
5630 #endif
5631 
5632         sp_4096_mont_setup(m, &mp);
5633         sp_4096_mont_norm_64(norm, m);
5634 
5635         XMEMSET(t[1], 0, sizeof(sp_digit) * 64);
5636         if (reduceA) {
5637             err = sp_4096_mod_64(t[1] + 64, a, m);
5638             if (err == MP_OKAY)
5639                 err = sp_4096_mod_64(t[1], t[1], m);
5640         }
5641         else {
5642             XMEMCPY(t[1] + 64, a, sizeof(sp_digit) * 64);
5643             err = sp_4096_mod_64(t[1], t[1], m);
5644         }
5645     }
5646 
5647     if (err == MP_OKAY) {
5648         sp_4096_mont_sqr_64(t[ 2], t[ 1], m, mp);
5649         sp_4096_mont_mul_64(t[ 3], t[ 2], t[ 1], m, mp);
5650         sp_4096_mont_sqr_64(t[ 4], t[ 2], m, mp);
5651         sp_4096_mont_mul_64(t[ 5], t[ 3], t[ 2], m, mp);
5652         sp_4096_mont_sqr_64(t[ 6], t[ 3], m, mp);
5653         sp_4096_mont_mul_64(t[ 7], t[ 4], t[ 3], m, mp);
5654         sp_4096_mont_sqr_64(t[ 8], t[ 4], m, mp);
5655         sp_4096_mont_mul_64(t[ 9], t[ 5], t[ 4], m, mp);
5656         sp_4096_mont_sqr_64(t[10], t[ 5], m, mp);
5657         sp_4096_mont_mul_64(t[11], t[ 6], t[ 5], m, mp);
5658         sp_4096_mont_sqr_64(t[12], t[ 6], m, mp);
5659         sp_4096_mont_mul_64(t[13], t[ 7], t[ 6], m, mp);
5660         sp_4096_mont_sqr_64(t[14], t[ 7], m, mp);
5661         sp_4096_mont_mul_64(t[15], t[ 8], t[ 7], m, mp);
5662 
5663         i = (bits - 1) / 64;
5664         n = e[i--];
5665         /* Number of bits available in top word. */
5666         c = bits & 63;
5667         if (c == 0) {
5668             c = 64;
5669         }
5670         /* Minus the number of top bits to use so rest is a multiple of 4. */
5671         if ((bits % 4) == 0) {
5672             c -= 4;
5673         }
5674         else {
5675             c -= bits % 4;
5676         }
5677         if (c < 0) {
5678             /* Number of bits in top word is less than number needed. */
5679             c = -c;
5680             y = (byte)(n << c);
5681             n = e[i--];
5682             y |= (byte)(n >> (64 - c));
5683             n <<= c;
5684             c = 64 - c;
5685         }
5686         else {
5687             y = (byte)(n >> c);
5688             n <<= 64 - c;
5689         }
5690         XMEMCPY(r, t[y], sizeof(sp_digit) * 64);
5691         for (; i>=0 || c>=4; ) {
5692             if (c >= 4) {
5693                 y = (byte)((n >> 60) & 0xf);
5694                 n <<= 4;
5695                 c -= 4;
5696             }
5697             else if (c == 0) {
5698                 n = e[i--];
5699                 y = (byte)(n >> 60);
5700                 n <<= 4;
5701                 c = 60;
5702             }
5703             else {
5704                 y = (byte)(n >> 60);
5705                 n = e[i--];
5706                 c = 4 - c;
5707                 y |= (byte)(n >> (64 - c));
5708                 n <<= c;
5709                 c = 64 - c;
5710             }
5711 
5712             sp_4096_sqr_64(rt, r);
5713             sp_4096_mont_reduce_64(rt, m, mp);
5714             sp_4096_sqr_64(r, rt);
5715             sp_4096_mont_reduce_64(r, m, mp);
5716             sp_4096_sqr_64(rt, r);
5717             sp_4096_mont_reduce_64(rt, m, mp);
5718             sp_4096_sqr_64(r, rt);
5719             sp_4096_mont_reduce_64(r, m, mp);
5720 
5721             sp_4096_mul_64(r, r, t[y]);
5722             sp_4096_mont_reduce_64(r, m, mp);
5723         }
5724 
5725         XMEMSET(&r[64], 0, sizeof(sp_digit) * 64);
5726         sp_4096_mont_reduce_64(r, m, mp);
5727 
5728         mask = 0 - (sp_4096_cmp_64(r, m) >= 0);
5729         sp_4096_cond_sub_64(r, r, m, mask);
5730     }
5731 
5732 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
5733     if (td != NULL)
5734         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
5735 #endif
5736 
5737     return err;
5738 }
5739 
5740 #endif /* (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
5741 extern void sp_4096_mont_reduce_avx2_64(sp_digit* a, const sp_digit* m, sp_digit mp);
5742 #ifdef HAVE_INTEL_AVX2
5743 /* Multiply two Montgomery form numbers mod the modulus (prime).
5744  * (r = a * b mod m)
5745  *
5746  * r   Result of multiplication.
5747  * a   First number to multiply in Montgomery form.
5748  * b   Second number to multiply in Montgomery form.
5749  * m   Modulus (prime).
5750  * mp  Montgomery mulitplier.
5751  */
sp_4096_mont_mul_avx2_64(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)5752 static void sp_4096_mont_mul_avx2_64(sp_digit* r, const sp_digit* a,
5753         const sp_digit* b, const sp_digit* m, sp_digit mp)
5754 {
5755     sp_4096_mul_avx2_64(r, a, b);
5756     sp_4096_mont_reduce_avx2_64(r, m, mp);
5757 }
5758 
5759 #endif /* HAVE_INTEL_AVX2 */
5760 #ifdef HAVE_INTEL_AVX2
5761 /* Square the Montgomery form number. (r = a * a mod m)
5762  *
5763  * r   Result of squaring.
5764  * a   Number to square in Montgomery form.
5765  * m   Modulus (prime).
5766  * mp  Montgomery mulitplier.
5767  */
sp_4096_mont_sqr_avx2_64(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)5768 static void sp_4096_mont_sqr_avx2_64(sp_digit* r, const sp_digit* a,
5769         const sp_digit* m, sp_digit mp)
5770 {
5771     sp_4096_sqr_avx2_64(r, a);
5772     sp_4096_mont_reduce_avx2_64(r, m, mp);
5773 }
5774 
5775 #endif /* HAVE_INTEL_AVX2 */
5776 #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || defined(WOLFSSL_HAVE_SP_DH)
5777 #ifdef HAVE_INTEL_AVX2
5778 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
5779  *
5780  * r     A single precision number that is the result of the operation.
5781  * a     A single precision number being exponentiated.
5782  * e     A single precision number that is the exponent.
5783  * bits  The number of bits in the exponent.
5784  * m     A single precision number that is the modulus.
5785  * returns  0 on success
5786  * returns  MEMORY_E on dynamic memory allocation failure.
5787  * returns  MP_VAL when base is even or exponent is 0.
5788  */
sp_4096_mod_exp_avx2_64(sp_digit * r,const sp_digit * a,const sp_digit * e,int bits,const sp_digit * m,int reduceA)5789 static int sp_4096_mod_exp_avx2_64(sp_digit* r, const sp_digit* a, const sp_digit* e,
5790         int bits, const sp_digit* m, int reduceA)
5791 {
5792 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
5793     sp_digit* td = NULL;
5794 #else
5795     sp_digit td[(17 * 128) + 128];
5796 #endif
5797     sp_digit* t[16];
5798     sp_digit* rt = NULL;
5799     sp_digit* norm;
5800     sp_digit mp = 1;
5801     sp_digit n;
5802     sp_digit mask;
5803     int i;
5804     int c;
5805     byte y;
5806     int err = MP_OKAY;
5807 
5808     ASSERT_SAVED_VECTOR_REGISTERS();
5809 
5810     if ((m[0] & 1) == 0) {
5811         err = MP_VAL;
5812     }
5813     else if (bits == 0) {
5814         err = MP_VAL;
5815     }
5816 
5817 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
5818     if (err == MP_OKAY) {
5819         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (17 * 128) + 128, NULL,
5820                                 DYNAMIC_TYPE_TMP_BUFFER);
5821         if (td == NULL) {
5822             err = MEMORY_E;
5823         }
5824     }
5825 #endif
5826 
5827     if (err == MP_OKAY) {
5828         norm = td;
5829 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
5830         for (i=0; i<16; i++)
5831             t[i] = td + i * 128;
5832         rt = td + 2048;
5833 #else
5834         for (i=0; i<16; i++)
5835             t[i] = &td[i * 128];
5836         rt = &td[2048];
5837 #endif
5838 
5839         sp_4096_mont_setup(m, &mp);
5840         sp_4096_mont_norm_64(norm, m);
5841 
5842         XMEMSET(t[1], 0, sizeof(sp_digit) * 64);
5843         if (reduceA) {
5844             err = sp_4096_mod_64(t[1] + 64, a, m);
5845             if (err == MP_OKAY)
5846                 err = sp_4096_mod_64(t[1], t[1], m);
5847         }
5848         else {
5849             XMEMCPY(t[1] + 64, a, sizeof(sp_digit) * 64);
5850             err = sp_4096_mod_64(t[1], t[1], m);
5851         }
5852     }
5853 
5854     if (err == MP_OKAY) {
5855         sp_4096_mont_sqr_avx2_64(t[ 2], t[ 1], m, mp);
5856         sp_4096_mont_mul_avx2_64(t[ 3], t[ 2], t[ 1], m, mp);
5857         sp_4096_mont_sqr_avx2_64(t[ 4], t[ 2], m, mp);
5858         sp_4096_mont_mul_avx2_64(t[ 5], t[ 3], t[ 2], m, mp);
5859         sp_4096_mont_sqr_avx2_64(t[ 6], t[ 3], m, mp);
5860         sp_4096_mont_mul_avx2_64(t[ 7], t[ 4], t[ 3], m, mp);
5861         sp_4096_mont_sqr_avx2_64(t[ 8], t[ 4], m, mp);
5862         sp_4096_mont_mul_avx2_64(t[ 9], t[ 5], t[ 4], m, mp);
5863         sp_4096_mont_sqr_avx2_64(t[10], t[ 5], m, mp);
5864         sp_4096_mont_mul_avx2_64(t[11], t[ 6], t[ 5], m, mp);
5865         sp_4096_mont_sqr_avx2_64(t[12], t[ 6], m, mp);
5866         sp_4096_mont_mul_avx2_64(t[13], t[ 7], t[ 6], m, mp);
5867         sp_4096_mont_sqr_avx2_64(t[14], t[ 7], m, mp);
5868         sp_4096_mont_mul_avx2_64(t[15], t[ 8], t[ 7], m, mp);
5869 
5870         i = (bits - 1) / 64;
5871         n = e[i--];
5872         /* Number of bits available in top word. */
5873         c = bits & 63;
5874         if (c == 0) {
5875             c = 64;
5876         }
5877         /* Minus the number of top bits to use so rest is a multiple of 4. */
5878         if ((bits % 4) == 0) {
5879             c -= 4;
5880         }
5881         else {
5882             c -= bits % 4;
5883         }
5884         if (c < 0) {
5885             /* Number of bits in top word is less than number needed. */
5886             c = -c;
5887             y = (byte)(n << c);
5888             n = e[i--];
5889             y |= (byte)(n >> (64 - c));
5890             n <<= c;
5891             c = 64 - c;
5892         }
5893         else {
5894             y = (byte)(n >> c);
5895             n <<= 64 - c;
5896         }
5897         XMEMCPY(r, t[y], sizeof(sp_digit) * 64);
5898         for (; i>=0 || c>=4; ) {
5899             if (c >= 4) {
5900                 y = (byte)((n >> 60) & 0xf);
5901                 n <<= 4;
5902                 c -= 4;
5903             }
5904             else if (c == 0) {
5905                 n = e[i--];
5906                 y = (byte)(n >> 60);
5907                 n <<= 4;
5908                 c = 60;
5909             }
5910             else {
5911                 y = (byte)(n >> 60);
5912                 n = e[i--];
5913                 c = 4 - c;
5914                 y |= (byte)(n >> (64 - c));
5915                 n <<= c;
5916                 c = 64 - c;
5917             }
5918 
5919             sp_4096_sqr_avx2_64(rt, r);
5920             sp_4096_mont_reduce_avx2_64(rt, m, mp);
5921             sp_4096_sqr_avx2_64(r, rt);
5922             sp_4096_mont_reduce_avx2_64(r, m, mp);
5923             sp_4096_sqr_avx2_64(rt, r);
5924             sp_4096_mont_reduce_avx2_64(rt, m, mp);
5925             sp_4096_sqr_avx2_64(r, rt);
5926             sp_4096_mont_reduce_avx2_64(r, m, mp);
5927 
5928             sp_4096_mul_avx2_64(r, r, t[y]);
5929             sp_4096_mont_reduce_avx2_64(r, m, mp);
5930         }
5931 
5932         XMEMSET(&r[64], 0, sizeof(sp_digit) * 64);
5933         sp_4096_mont_reduce_avx2_64(r, m, mp);
5934 
5935         mask = 0 - (sp_4096_cmp_64(r, m) >= 0);
5936         sp_4096_cond_sub_avx2_64(r, r, m, mask);
5937     }
5938 
5939 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
5940     if (td != NULL)
5941         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
5942 #endif
5943 
5944     return err;
5945 }
5946 #endif /* HAVE_INTEL_AVX2 */
5947 
5948 #endif /* (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
5949 #ifdef WOLFSSL_HAVE_SP_RSA
5950 /* RSA public key operation.
5951  *
5952  * in      Array of bytes representing the number to exponentiate, base.
5953  * inLen   Number of bytes in base.
5954  * em      Public exponent.
5955  * mm      Modulus.
5956  * out     Buffer to hold big-endian bytes of exponentiation result.
5957  *         Must be at least 512 bytes long.
5958  * outLen  Number of bytes in result.
5959  * returns 0 on success, MP_TO_E when the outLen is too small, MP_READ_E when
5960  * an array is too long and MEMORY_E when dynamic memory allocation fails.
5961  */
sp_RsaPublic_4096(const byte * in,word32 inLen,const mp_int * em,const mp_int * mm,byte * out,word32 * outLen)5962 int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em,
5963     const mp_int* mm, byte* out, word32* outLen)
5964 {
5965 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
5966     sp_digit* a = NULL;
5967 #else
5968     sp_digit a[64 * 5];
5969 #endif
5970     sp_digit* ah;
5971     sp_digit* m;
5972     sp_digit* r;
5973     sp_digit  e = 0;
5974     int err = MP_OKAY;
5975 #ifdef HAVE_INTEL_AVX2
5976     word32 cpuid_flags = cpuid_get_flags();
5977 #endif
5978 
5979     ASSERT_SAVED_VECTOR_REGISTERS();
5980 
5981     if (*outLen < 512) {
5982         err = MP_TO_E;
5983     }
5984     else if (mp_count_bits(em) > 64 || inLen > 512 ||
5985                                                      mp_count_bits(mm) != 4096) {
5986         err = MP_READ_E;
5987     }
5988     else if (mp_iseven(mm)) {
5989         err = MP_VAL;
5990     }
5991 
5992 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
5993     if (err == MP_OKAY) {
5994         a = (sp_digit*)XMALLOC(sizeof(sp_digit) * 64 * 5, NULL,
5995                                                               DYNAMIC_TYPE_RSA);
5996         if (a == NULL)
5997             err = MEMORY_E;
5998     }
5999 #endif
6000 
6001     if (err == MP_OKAY) {
6002         r = a + 64 * 2;
6003         m = r + 64 * 2;
6004         ah = a + 64;
6005 
6006         sp_4096_from_bin(ah, 64, in, inLen);
6007 #if DIGIT_BIT >= 64
6008         e = em->dp[0];
6009 #else
6010         e = em->dp[0];
6011         if (em->used > 1)
6012             e |= ((sp_digit)em->dp[1]) << DIGIT_BIT;
6013 #endif
6014         if (e == 0)
6015             err = MP_EXPTMOD_E;
6016     }
6017     if (err == MP_OKAY) {
6018         sp_4096_from_mp(m, 64, mm);
6019 
6020         if (e == 0x3) {
6021 #ifdef HAVE_INTEL_AVX2
6022             if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
6023                 if (err == MP_OKAY) {
6024                     sp_4096_sqr_avx2_64(r, ah);
6025                     err = sp_4096_mod_64_cond(r, r, m);
6026                 }
6027                 if (err == MP_OKAY) {
6028                     sp_4096_mul_avx2_64(r, ah, r);
6029                     err = sp_4096_mod_64_cond(r, r, m);
6030                 }
6031             }
6032             else
6033 #endif
6034             {
6035                 if (err == MP_OKAY) {
6036                     sp_4096_sqr_64(r, ah);
6037                     err = sp_4096_mod_64_cond(r, r, m);
6038                 }
6039                 if (err == MP_OKAY) {
6040                     sp_4096_mul_64(r, ah, r);
6041                     err = sp_4096_mod_64_cond(r, r, m);
6042                 }
6043             }
6044         }
6045         else {
6046             int i;
6047             sp_digit mp;
6048 
6049             sp_4096_mont_setup(m, &mp);
6050 
6051             /* Convert to Montgomery form. */
6052             XMEMSET(a, 0, sizeof(sp_digit) * 64);
6053             err = sp_4096_mod_64_cond(a, a, m);
6054 
6055             if (err == MP_OKAY) {
6056                 for (i=63; i>=0; i--) {
6057                     if (e >> i) {
6058                         break;
6059                     }
6060                 }
6061 
6062                 XMEMCPY(r, a, sizeof(sp_digit) * 64);
6063 #ifdef HAVE_INTEL_AVX2
6064                 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
6065                     for (i--; i>=0; i--) {
6066                         sp_4096_mont_sqr_avx2_64(r, r, m, mp);
6067                         if (((e >> i) & 1) == 1) {
6068                             sp_4096_mont_mul_avx2_64(r, r, a, m, mp);
6069                         }
6070                     }
6071                     XMEMSET(&r[64], 0, sizeof(sp_digit) * 64);
6072                     sp_4096_mont_reduce_avx2_64(r, m, mp);
6073                 }
6074                 else
6075 #endif
6076                 {
6077                     for (i--; i>=0; i--) {
6078                         sp_4096_mont_sqr_64(r, r, m, mp);
6079                         if (((e >> i) & 1) == 1) {
6080                             sp_4096_mont_mul_64(r, r, a, m, mp);
6081                         }
6082                     }
6083                     XMEMSET(&r[64], 0, sizeof(sp_digit) * 64);
6084                     sp_4096_mont_reduce_64(r, m, mp);
6085                 }
6086 
6087                 for (i = 63; i > 0; i--) {
6088                     if (r[i] != m[i])
6089                         break;
6090                 }
6091                 if (r[i] >= m[i])
6092                     sp_4096_sub_in_place_64(r, m);
6093             }
6094         }
6095     }
6096 
6097     if (err == MP_OKAY) {
6098         sp_4096_to_bin_64(r, out);
6099         *outLen = 512;
6100     }
6101 
6102 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6103     if (a != NULL)
6104         XFREE(a, NULL, DYNAMIC_TYPE_RSA);
6105 #endif
6106 
6107     return err;
6108 }
6109 
6110 #ifndef WOLFSSL_RSA_PUBLIC_ONLY
6111 #if defined(SP_RSA_PRIVATE_EXP_D) || defined(RSA_LOW_MEM)
6112 /* RSA private key operation.
6113  *
6114  * in      Array of bytes representing the number to exponentiate, base.
6115  * inLen   Number of bytes in base.
6116  * dm      Private exponent.
6117  * pm      First prime.
6118  * qm      Second prime.
6119  * dpm     First prime's CRT exponent.
6120  * dqm     Second prime's CRT exponent.
6121  * qim     Inverse of second prime mod p.
6122  * mm      Modulus.
6123  * out     Buffer to hold big-endian bytes of exponentiation result.
6124  *         Must be at least 512 bytes long.
6125  * outLen  Number of bytes in result.
6126  * returns 0 on success, MP_TO_E when the outLen is too small, MP_READ_E when
6127  * an array is too long and MEMORY_E when dynamic memory allocation fails.
6128  */
sp_RsaPrivate_4096(const byte * in,word32 inLen,const mp_int * dm,const mp_int * pm,const mp_int * qm,const mp_int * dpm,const mp_int * dqm,const mp_int * qim,const mp_int * mm,byte * out,word32 * outLen)6129 int sp_RsaPrivate_4096(const byte* in, word32 inLen, const mp_int* dm,
6130     const mp_int* pm, const mp_int* qm,const  mp_int* dpm, const mp_int* dqm,
6131     const mp_int* qim, const mp_int* mm, byte* out, word32* outLen)
6132 {
6133 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6134     sp_digit* d = NULL;
6135 #else
6136     sp_digit d[64 * 4];
6137 #endif
6138     sp_digit* a;
6139     sp_digit* m;
6140     sp_digit* r;
6141     int err = MP_OKAY;
6142 
6143     ASSERT_SAVED_VECTOR_REGISTERS();
6144 
6145     (void)pm;
6146     (void)qm;
6147     (void)dpm;
6148     (void)dqm;
6149     (void)qim;
6150 
6151     if (*outLen < 512U) {
6152         err = MP_TO_E;
6153     }
6154     if (err == MP_OKAY) {
6155         if (mp_count_bits(dm) > 4096) {
6156             err = MP_READ_E;
6157         }
6158         else if (inLen > 512U) {
6159             err = MP_READ_E;
6160         }
6161         else if (mp_count_bits(mm) != 4096) {
6162             err = MP_READ_E;
6163         }
6164         else if (mp_iseven(mm)) {
6165             err = MP_VAL;
6166         }
6167     }
6168 
6169 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6170     if (err == MP_OKAY) {
6171         d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 64 * 4, NULL,
6172                                                              DYNAMIC_TYPE_RSA);
6173         if (d == NULL) {
6174             err = MEMORY_E;
6175         }
6176     }
6177 #endif
6178 
6179     if (err == MP_OKAY) {
6180         a = d + 64;
6181         m = a + 128;
6182 
6183         r = a;
6184 
6185         sp_4096_from_bin(a, 64, in, inLen);
6186         sp_4096_from_mp(d, 64, dm);
6187         sp_4096_from_mp(m, 64, mm);
6188         err = sp_4096_mod_exp_64(r, a, d, 4096, m, 0);
6189     }
6190 
6191     if (err == MP_OKAY) {
6192         sp_4096_to_bin_64(r, out);
6193         *outLen = 512;
6194     }
6195 
6196 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6197     if (d != NULL)
6198 #endif
6199     {
6200         /* only zeroing private "d" */
6201         ForceZero(d, sizeof(sp_digit) * 64);
6202     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6203         XFREE(d, NULL, DYNAMIC_TYPE_RSA);
6204     #endif
6205     }
6206 
6207     return err;
6208 }
6209 
6210 #else
6211 extern sp_digit sp_4096_cond_add_32(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
6212 extern sp_digit sp_4096_cond_add_avx2_32(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
6213 /* RSA private key operation.
6214  *
6215  * in      Array of bytes representing the number to exponentiate, base.
6216  * inLen   Number of bytes in base.
6217  * dm      Private exponent.
6218  * pm      First prime.
6219  * qm      Second prime.
6220  * dpm     First prime's CRT exponent.
6221  * dqm     Second prime's CRT exponent.
6222  * qim     Inverse of second prime mod p.
6223  * mm      Modulus.
6224  * out     Buffer to hold big-endian bytes of exponentiation result.
6225  *         Must be at least 512 bytes long.
6226  * outLen  Number of bytes in result.
6227  * returns 0 on success, MP_TO_E when the outLen is too small, MP_READ_E when
6228  * an array is too long and MEMORY_E when dynamic memory allocation fails.
6229  */
sp_RsaPrivate_4096(const byte * in,word32 inLen,const mp_int * dm,const mp_int * pm,const mp_int * qm,const mp_int * dpm,const mp_int * dqm,const mp_int * qim,const mp_int * mm,byte * out,word32 * outLen)6230 int sp_RsaPrivate_4096(const byte* in, word32 inLen, const mp_int* dm,
6231     const mp_int* pm, const mp_int* qm, const mp_int* dpm, const mp_int* dqm,
6232     const mp_int* qim, const mp_int* mm, byte* out, word32* outLen)
6233 {
6234 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6235     sp_digit* a = NULL;
6236 #else
6237     sp_digit a[32 * 11];
6238 #endif
6239     sp_digit* p;
6240     sp_digit* q;
6241     sp_digit* dp;
6242     sp_digit* dq;
6243     sp_digit* qi;
6244     sp_digit* tmpa;
6245     sp_digit* tmpb;
6246     sp_digit* r;
6247     sp_digit c;
6248     int err = MP_OKAY;
6249 #ifdef HAVE_INTEL_AVX2
6250     word32 cpuid_flags = cpuid_get_flags();
6251 #endif
6252 
6253     ASSERT_SAVED_VECTOR_REGISTERS();
6254 
6255     (void)dm;
6256     (void)mm;
6257 
6258     if (*outLen < 512) {
6259         err = MP_TO_E;
6260     }
6261     else if (inLen > 512 || mp_count_bits(mm) != 4096) {
6262         err = MP_READ_E;
6263     }
6264     else if (mp_iseven(mm)) {
6265         err = MP_VAL;
6266     }
6267 
6268 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6269     if (err == MP_OKAY) {
6270         a = (sp_digit*)XMALLOC(sizeof(sp_digit) * 32 * 11, NULL,
6271                                                               DYNAMIC_TYPE_RSA);
6272         if (a == NULL)
6273             err = MEMORY_E;
6274     }
6275 #endif
6276 
6277     if (err == MP_OKAY) {
6278         p = a + 64 * 2;
6279         q = p + 32;
6280         qi = dq = dp = q + 32;
6281         tmpa = qi + 32;
6282         tmpb = tmpa + 64;
6283         r = a + 64;
6284 
6285         sp_4096_from_bin(a, 64, in, inLen);
6286         sp_4096_from_mp(p, 32, pm);
6287         sp_4096_from_mp(q, 32, qm);
6288         sp_4096_from_mp(dp, 32, dpm);
6289 
6290 #ifdef HAVE_INTEL_AVX2
6291         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
6292             err = sp_2048_mod_exp_avx2_32(tmpa, a, dp, 2048, p, 1);
6293         else
6294 #endif
6295             err = sp_2048_mod_exp_32(tmpa, a, dp, 2048, p, 1);
6296     }
6297     if (err == MP_OKAY) {
6298         sp_4096_from_mp(dq, 32, dqm);
6299 #ifdef HAVE_INTEL_AVX2
6300         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
6301             err = sp_2048_mod_exp_avx2_32(tmpb, a, dq, 2048, q, 1);
6302        else
6303 #endif
6304             err = sp_2048_mod_exp_32(tmpb, a, dq, 2048, q, 1);
6305     }
6306 
6307     if (err == MP_OKAY) {
6308         c = sp_2048_sub_in_place_32(tmpa, tmpb);
6309 #ifdef HAVE_INTEL_AVX2
6310         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
6311             c += sp_4096_cond_add_avx2_32(tmpa, tmpa, p, c);
6312             sp_4096_cond_add_avx2_32(tmpa, tmpa, p, c);
6313         }
6314         else
6315 #endif
6316         {
6317             c += sp_4096_cond_add_32(tmpa, tmpa, p, c);
6318             sp_4096_cond_add_32(tmpa, tmpa, p, c);
6319         }
6320 
6321         sp_2048_from_mp(qi, 32, qim);
6322 #ifdef HAVE_INTEL_AVX2
6323         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
6324             sp_2048_mul_avx2_32(tmpa, tmpa, qi);
6325         }
6326         else
6327 #endif
6328         {
6329             sp_2048_mul_32(tmpa, tmpa, qi);
6330         }
6331         err = sp_2048_mod_32(tmpa, tmpa, p);
6332     }
6333 
6334     if (err == MP_OKAY) {
6335 #ifdef HAVE_INTEL_AVX2
6336         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
6337             sp_2048_mul_avx2_32(tmpa, q, tmpa);
6338         }
6339         else
6340 #endif
6341         {
6342             sp_2048_mul_32(tmpa, q, tmpa);
6343         }
6344         XMEMSET(&tmpb[32], 0, sizeof(sp_digit) * 32);
6345         sp_4096_add_64(r, tmpb, tmpa);
6346 
6347         sp_4096_to_bin_64(r, out);
6348         *outLen = 512;
6349     }
6350 
6351 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6352     if (a != NULL)
6353 #endif
6354     {
6355         ForceZero(a, sizeof(sp_digit) * 32 * 11);
6356     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6357         XFREE(a, NULL, DYNAMIC_TYPE_RSA);
6358     #endif
6359     }
6360 
6361     return err;
6362 }
6363 #endif /* SP_RSA_PRIVATE_EXP_D | RSA_LOW_MEM */
6364 #endif /* WOLFSSL_RSA_PUBLIC_ONLY */
6365 #endif /* WOLFSSL_HAVE_SP_RSA */
6366 #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
6367                                               !defined(WOLFSSL_RSA_PUBLIC_ONLY))
6368 /* Convert an array of sp_digit to an mp_int.
6369  *
6370  * a  A single precision integer.
6371  * r  A multi-precision integer.
6372  */
sp_4096_to_mp(const sp_digit * a,mp_int * r)6373 static int sp_4096_to_mp(const sp_digit* a, mp_int* r)
6374 {
6375     int err;
6376 
6377     err = mp_grow(r, (4096 + DIGIT_BIT - 1) / DIGIT_BIT);
6378     if (err == MP_OKAY) { /*lint !e774 case where err is always MP_OKAY*/
6379 #if DIGIT_BIT == 64
6380         XMEMCPY(r->dp, a, sizeof(sp_digit) * 64);
6381         r->used = 64;
6382         mp_clamp(r);
6383 #elif DIGIT_BIT < 64
6384         int i;
6385         int j = 0;
6386         int s = 0;
6387 
6388         r->dp[0] = 0;
6389         for (i = 0; i < 64; i++) {
6390             r->dp[j] |= (mp_digit)(a[i] << s);
6391             r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
6392             s = DIGIT_BIT - s;
6393             r->dp[++j] = (mp_digit)(a[i] >> s);
6394             while (s + DIGIT_BIT <= 64) {
6395                 s += DIGIT_BIT;
6396                 r->dp[j++] &= ((sp_digit)1 << DIGIT_BIT) - 1;
6397                 if (s == SP_WORD_SIZE) {
6398                     r->dp[j] = 0;
6399                 }
6400                 else {
6401                     r->dp[j] = (mp_digit)(a[i] >> s);
6402                 }
6403             }
6404             s = 64 - s;
6405         }
6406         r->used = (4096 + DIGIT_BIT - 1) / DIGIT_BIT;
6407         mp_clamp(r);
6408 #else
6409         int i;
6410         int j = 0;
6411         int s = 0;
6412 
6413         r->dp[0] = 0;
6414         for (i = 0; i < 64; i++) {
6415             r->dp[j] |= ((mp_digit)a[i]) << s;
6416             if (s + 64 >= DIGIT_BIT) {
6417     #if DIGIT_BIT != 32 && DIGIT_BIT != 64
6418                 r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
6419     #endif
6420                 s = DIGIT_BIT - s;
6421                 r->dp[++j] = a[i] >> s;
6422                 s = 64 - s;
6423             }
6424             else {
6425                 s += 64;
6426             }
6427         }
6428         r->used = (4096 + DIGIT_BIT - 1) / DIGIT_BIT;
6429         mp_clamp(r);
6430 #endif
6431     }
6432 
6433     return err;
6434 }
6435 
6436 /* Perform the modular exponentiation for Diffie-Hellman.
6437  *
6438  * base  Base. MP integer.
6439  * exp   Exponent. MP integer.
6440  * mod   Modulus. MP integer.
6441  * res   Result. MP integer.
6442  * returns 0 on success, MP_READ_E if there are too many bytes in an array
6443  * and MEMORY_E if memory allocation fails.
6444  */
sp_ModExp_4096(const mp_int * base,const mp_int * exp,const mp_int * mod,mp_int * res)6445 int sp_ModExp_4096(const mp_int* base, const mp_int* exp, const mp_int* mod,
6446     mp_int* res)
6447 {
6448     int err = MP_OKAY;
6449 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6450     sp_digit *b = NULL;
6451     sp_digit *e = NULL;
6452     sp_digit *m = NULL;
6453     sp_digit* r;
6454 #else
6455     sp_digit b[128];
6456     sp_digit e[64];
6457     sp_digit m[64];
6458     sp_digit* r = b;
6459 #endif
6460 #ifdef HAVE_INTEL_AVX2
6461     word32 cpuid_flags = cpuid_get_flags();
6462 #endif
6463     int expBits = mp_count_bits(exp);
6464 
6465     ASSERT_SAVED_VECTOR_REGISTERS();
6466 
6467     if (mp_count_bits(base) > 4096 || expBits > 4096 ||
6468                                                    mp_count_bits(mod) != 4096) {
6469         err = MP_READ_E;
6470     }
6471     else if (mp_iseven(mod)) {
6472         err = MP_VAL;
6473     }
6474 
6475 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6476     if (err == MP_OKAY) {
6477         if (((b = (sp_digit *)XMALLOC(128 * sizeof(*b), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL) ||
6478             ((e = (sp_digit *)XMALLOC(64 * sizeof(*e), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL) ||
6479             ((m = (sp_digit *)XMALLOC(64 * sizeof(*m), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL))
6480         {
6481             err = MEMORY_E;
6482         } else {
6483             r = b;
6484         }
6485     }
6486 #endif
6487 
6488     if (err == MP_OKAY) {
6489         sp_4096_from_mp(b, 64, base);
6490         sp_4096_from_mp(e, 64, exp);
6491         sp_4096_from_mp(m, 64, mod);
6492 
6493 #ifdef HAVE_INTEL_AVX2
6494         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
6495             err = sp_4096_mod_exp_avx2_64(r, b, e, expBits, m, 0);
6496         else
6497 #endif
6498             err = sp_4096_mod_exp_64(r, b, e, expBits, m, 0);
6499     }
6500 
6501     if (err == MP_OKAY) {
6502         err = sp_4096_to_mp(r, res);
6503     }
6504 
6505 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6506     if (b != NULL)
6507         XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER);
6508     if (e != NULL) {
6509         XMEMSET(e, 0, 64);
6510         XFREE(e, NULL, DYNAMIC_TYPE_TMP_BUFFER);
6511     }
6512     if (m != NULL)
6513         XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER);
6514 #else
6515     XMEMSET(e, 0, sizeof(e));
6516 #endif
6517 
6518     return err;
6519 }
6520 
6521 #ifdef WOLFSSL_HAVE_SP_DH
6522 #ifdef HAVE_FFDHE_4096
6523 extern void sp_4096_lshift_64(sp_digit* r, const sp_digit* a, int n);
6524 #ifdef HAVE_INTEL_AVX2
6525 /* Modular exponentiate 2 to the e mod m. (r = 2^e mod m)
6526  *
6527  * r     A single precision number that is the result of the operation.
6528  * e     A single precision number that is the exponent.
6529  * bits  The number of bits in the exponent.
6530  * m     A single precision number that is the modulus.
6531  * returns  0 on success.
6532  * returns  MEMORY_E on dynamic memory allocation failure.
6533  * returns  MP_VAL when base is even.
6534  */
sp_4096_mod_exp_2_avx2_64(sp_digit * r,const sp_digit * e,int bits,const sp_digit * m)6535 static int sp_4096_mod_exp_2_avx2_64(sp_digit* r, const sp_digit* e, int bits,
6536         const sp_digit* m)
6537 {
6538 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6539     sp_digit* td = NULL;
6540 #else
6541     sp_digit td[65 + 128];
6542 #endif
6543     sp_digit* norm;
6544     sp_digit* tmp;
6545     sp_digit mp = 1;
6546     sp_digit n;
6547     sp_digit o;
6548     sp_digit mask;
6549     int i;
6550     int c;
6551     byte y;
6552     int err = MP_OKAY;
6553 
6554     ASSERT_SAVED_VECTOR_REGISTERS();
6555 
6556     if ((m[0] & 1) == 0) {
6557         err = MP_VAL;
6558     }
6559 
6560 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6561     if (err == MP_OKAY) {
6562         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (65 + 128), NULL,
6563                                 DYNAMIC_TYPE_TMP_BUFFER);
6564         if (td == NULL) {
6565             err = MEMORY_E;
6566         }
6567     }
6568 #endif
6569 
6570     if (err == MP_OKAY) {
6571         norm = td;
6572 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6573         tmp = td + 128;
6574 #else
6575         tmp = &td[128];
6576 #endif
6577 
6578         sp_4096_mont_setup(m, &mp);
6579         sp_4096_mont_norm_64(norm, m);
6580 
6581         i = (bits - 1) / 64;
6582         n = e[i--];
6583         /* Number of bits available in top word. */
6584         c = bits & 63;
6585         if (c == 0) {
6586             c = 64;
6587         }
6588         /* Minus the number of top bits to use so rest is a multiple of 6. */
6589         if ((bits % 6) == 0) {
6590             c -= 6;
6591         }
6592         else {
6593             c -= bits % 6;
6594         }
6595         if (c < 0) {
6596             /* Number of bits in top word is less than number needed. */
6597             c = -c;
6598             y = (byte)(n << c);
6599             n = e[i--];
6600             y |= (byte)(n >> (64 - c));
6601             n <<= c;
6602             c = 64 - c;
6603         }
6604         else {
6605             y = (byte)(n >> c);
6606             n <<= 64 - c;
6607         }
6608         sp_4096_lshift_64(r, norm, y);
6609         while ((i >= 0) || (c >= 6)) {
6610             if (c == 0) {
6611                 n = e[i--];
6612                 y = (byte)(n >> 58);
6613                 n <<= 6;
6614                 c = 58;
6615             }
6616             else if (c < 6) {
6617                 y = (byte)(n >> 58);
6618                 n = e[i--];
6619                 c = 6 - c;
6620                 y |= (byte)(n >> (64 - c));
6621                 n <<= c;
6622                 c = 64 - c;
6623             }
6624             else {
6625                 y = (byte)((n >> 58) & 0x3f);
6626                 n <<= 6;
6627                 c -= 6;
6628             }
6629 
6630             sp_4096_mont_sqr_avx2_64(r, r, m, mp);
6631             sp_4096_mont_sqr_avx2_64(r, r, m, mp);
6632             sp_4096_mont_sqr_avx2_64(r, r, m, mp);
6633             sp_4096_mont_sqr_avx2_64(r, r, m, mp);
6634             sp_4096_mont_sqr_avx2_64(r, r, m, mp);
6635             sp_4096_mont_sqr_avx2_64(r, r, m, mp);
6636 
6637             sp_4096_lshift_64(r, r, y);
6638             sp_4096_mul_d_avx2_64(tmp, norm, r[64]);
6639             r[64] = 0;
6640             o = sp_4096_add_64(r, r, tmp);
6641             sp_4096_cond_sub_avx2_64(r, r, m, (sp_digit)0 - o);
6642         }
6643 
6644         XMEMSET(&r[64], 0, sizeof(sp_digit) * 64);
6645         sp_4096_mont_reduce_avx2_64(r, m, mp);
6646 
6647         mask = 0 - (sp_4096_cmp_64(r, m) >= 0);
6648         sp_4096_cond_sub_avx2_64(r, r, m, mask);
6649     }
6650 
6651 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6652     if (td != NULL)
6653         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
6654 #endif
6655 
6656     return err;
6657 }
6658 #endif /* HAVE_INTEL_AVX2 */
6659 
6660 /* Modular exponentiate 2 to the e mod m. (r = 2^e mod m)
6661  *
6662  * r     A single precision number that is the result of the operation.
6663  * e     A single precision number that is the exponent.
6664  * bits  The number of bits in the exponent.
6665  * m     A single precision number that is the modulus.
6666  * returns  0 on success.
6667  * returns  MEMORY_E on dynamic memory allocation failure.
6668  * returns  MP_VAL when base is even.
6669  */
sp_4096_mod_exp_2_64(sp_digit * r,const sp_digit * e,int bits,const sp_digit * m)6670 static int sp_4096_mod_exp_2_64(sp_digit* r, const sp_digit* e, int bits,
6671         const sp_digit* m)
6672 {
6673 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6674     sp_digit* td = NULL;
6675 #else
6676     sp_digit td[65 + 128];
6677 #endif
6678     sp_digit* norm;
6679     sp_digit* tmp;
6680     sp_digit mp = 1;
6681     sp_digit n;
6682     sp_digit o;
6683     sp_digit mask;
6684     int i;
6685     int c;
6686     byte y;
6687     int err = MP_OKAY;
6688 
6689     ASSERT_SAVED_VECTOR_REGISTERS();
6690 
6691     if ((m[0] & 1) == 0) {
6692         err = MP_VAL;
6693     }
6694 
6695 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6696     if (err == MP_OKAY) {
6697         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * (65 + 128), NULL,
6698                                 DYNAMIC_TYPE_TMP_BUFFER);
6699         if (td == NULL) {
6700             err = MEMORY_E;
6701         }
6702     }
6703 #endif
6704 
6705     if (err == MP_OKAY) {
6706         norm = td;
6707 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6708         tmp = td + 128;
6709 #else
6710         tmp = &td[128];
6711 #endif
6712 
6713         sp_4096_mont_setup(m, &mp);
6714         sp_4096_mont_norm_64(norm, m);
6715 
6716         i = (bits - 1) / 64;
6717         n = e[i--];
6718         /* Number of bits available in top word. */
6719         c = bits & 63;
6720         if (c == 0) {
6721             c = 64;
6722         }
6723         /* Minus the number of top bits to use so rest is a multiple of 6. */
6724         if ((bits % 6) == 0) {
6725             c -= 6;
6726         }
6727         else {
6728             c -= bits % 6;
6729         }
6730         if (c < 0) {
6731             /* Number of bits in top word is less than number needed. */
6732             c = -c;
6733             y = (byte)(n << c);
6734             n = e[i--];
6735             y |= (byte)(n >> (64 - c));
6736             n <<= c;
6737             c = 64 - c;
6738         }
6739         else {
6740             y = (byte)(n >> c);
6741             n <<= 64 - c;
6742         }
6743         sp_4096_lshift_64(r, norm, y);
6744         while ((i >= 0) || (c >= 6)) {
6745             if (c == 0) {
6746                 n = e[i--];
6747                 y = (byte)(n >> 58);
6748                 n <<= 6;
6749                 c = 58;
6750             }
6751             else if (c < 6) {
6752                 y = (byte)(n >> 58);
6753                 n = e[i--];
6754                 c = 6 - c;
6755                 y |= (byte)(n >> (64 - c));
6756                 n <<= c;
6757                 c = 64 - c;
6758             }
6759             else {
6760                 y = (byte)((n >> 58) & 0x3f);
6761                 n <<= 6;
6762                 c -= 6;
6763             }
6764 
6765             sp_4096_mont_sqr_64(r, r, m, mp);
6766             sp_4096_mont_sqr_64(r, r, m, mp);
6767             sp_4096_mont_sqr_64(r, r, m, mp);
6768             sp_4096_mont_sqr_64(r, r, m, mp);
6769             sp_4096_mont_sqr_64(r, r, m, mp);
6770             sp_4096_mont_sqr_64(r, r, m, mp);
6771 
6772             sp_4096_lshift_64(r, r, y);
6773             sp_4096_mul_d_64(tmp, norm, r[64]);
6774             r[64] = 0;
6775             o = sp_4096_add_64(r, r, tmp);
6776             sp_4096_cond_sub_64(r, r, m, (sp_digit)0 - o);
6777         }
6778 
6779         XMEMSET(&r[64], 0, sizeof(sp_digit) * 64);
6780         sp_4096_mont_reduce_64(r, m, mp);
6781 
6782         mask = 0 - (sp_4096_cmp_64(r, m) >= 0);
6783         sp_4096_cond_sub_64(r, r, m, mask);
6784     }
6785 
6786 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6787     if (td != NULL)
6788         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
6789 #endif
6790 
6791     return err;
6792 }
6793 
6794 #endif /* HAVE_FFDHE_4096 */
6795 
6796 /* Perform the modular exponentiation for Diffie-Hellman.
6797  *
6798  * base     Base.
6799  * exp      Array of bytes that is the exponent.
6800  * expLen   Length of data, in bytes, in exponent.
6801  * mod      Modulus.
6802  * out      Buffer to hold big-endian bytes of exponentiation result.
6803  *          Must be at least 512 bytes long.
6804  * outLen   Length, in bytes, of exponentiation result.
6805  * returns 0 on success, MP_READ_E if there are too many bytes in an array
6806  * and MEMORY_E if memory allocation fails.
6807  */
sp_DhExp_4096(const mp_int * base,const byte * exp,word32 expLen,const mp_int * mod,byte * out,word32 * outLen)6808 int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen,
6809     const mp_int* mod, byte* out, word32* outLen)
6810 {
6811     int err = MP_OKAY;
6812 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6813     sp_digit *b = NULL;
6814     sp_digit *e = NULL;
6815     sp_digit *m = NULL;
6816     sp_digit* r;
6817 #else
6818     sp_digit b[128];
6819     sp_digit e[64];
6820     sp_digit m[64];
6821     sp_digit* r = b;
6822 #endif
6823     word32 i;
6824 #ifdef HAVE_INTEL_AVX2
6825     word32 cpuid_flags = cpuid_get_flags();
6826 #endif
6827 
6828     ASSERT_SAVED_VECTOR_REGISTERS();
6829 
6830     if (mp_count_bits(base) > 4096 || expLen > 512 ||
6831                                                    mp_count_bits(mod) != 4096) {
6832         err = MP_READ_E;
6833     }
6834     else if (mp_iseven(mod)) {
6835         err = MP_VAL;
6836     }
6837 
6838 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6839     if (err == MP_OKAY) {
6840         if (((b = (sp_digit *)XMALLOC(128 * sizeof(*b), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL) ||
6841             ((e = (sp_digit *)XMALLOC(64 * sizeof(*e), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL) ||
6842             ((m = (sp_digit *)XMALLOC(64 * sizeof(*m), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL))
6843         {
6844             err = MEMORY_E;
6845         } else {
6846             r = b;
6847         }
6848     }
6849 #endif
6850 
6851     if (err == MP_OKAY) {
6852         sp_4096_from_mp(b, 64, base);
6853         sp_4096_from_bin(e, 64, exp, expLen);
6854         sp_4096_from_mp(m, 64, mod);
6855 
6856     #ifdef HAVE_FFDHE_4096
6857         if (base->used == 1 && base->dp[0] == 2 && m[63] == (sp_digit)-1) {
6858 #ifdef HAVE_INTEL_AVX2
6859             if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
6860                 err = sp_4096_mod_exp_2_avx2_64(r, e, expLen * 8, m);
6861             else
6862 #endif
6863                 err = sp_4096_mod_exp_2_64(r, e, expLen * 8, m);
6864         }
6865         else
6866     #endif
6867         {
6868 #ifdef HAVE_INTEL_AVX2
6869             if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
6870                 err = sp_4096_mod_exp_avx2_64(r, b, e, expLen * 8, m, 0);
6871             else
6872 #endif
6873                 err = sp_4096_mod_exp_64(r, b, e, expLen * 8, m, 0);
6874         }
6875     }
6876 
6877     if (err == MP_OKAY) {
6878         sp_4096_to_bin_64(r, out);
6879         *outLen = 512;
6880         for (i=0; i<512 && out[i] == 0; i++) {
6881             /* Search for first non-zero. */
6882         }
6883         *outLen -= i;
6884         XMEMMOVE(out, out + i, *outLen);
6885     }
6886 
6887 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
6888     if (b != NULL)
6889         XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER);
6890     if (e != NULL) {
6891         XMEMSET(e, 0, 64);
6892         XFREE(e, NULL, DYNAMIC_TYPE_TMP_BUFFER);
6893     }
6894     if (m != NULL)
6895         XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER);
6896 #else
6897     XMEMSET(e, 0, sizeof(e));
6898 #endif
6899 
6900     return err;
6901 }
6902 #endif
6903 #endif /* WOLFSSL_HAVE_SP_DH | (WOLFSSL_HAVE_SP_RSA & !WOLFSSL_RSA_PUBLIC_ONLY) */
6904 
6905 #endif /* WOLFSSL_SP_4096 */
6906 
6907 #endif /* WOLFSSL_HAVE_SP_RSA | WOLFSSL_HAVE_SP_DH */
6908 #ifdef WOLFSSL_HAVE_SP_ECC
6909 #ifndef WOLFSSL_SP_NO_256
6910 
6911 /* Point structure to use. */
6912 typedef struct sp_point_256 {
6913     /* X ordinate of point. */
6914     sp_digit x[2 * 4];
6915     /* Y ordinate of point. */
6916     sp_digit y[2 * 4];
6917     /* Z ordinate of point. */
6918     sp_digit z[2 * 4];
6919     /* Indicates point is at infinity. */
6920     int infinity;
6921 } sp_point_256;
6922 
6923 /* The modulus (prime) of the curve P256. */
6924 static const sp_digit p256_mod[4] = {
6925     0xffffffffffffffffL,0x00000000ffffffffL,0x0000000000000000L,
6926     0xffffffff00000001L
6927 };
6928 /* The Montgomery normalizer for modulus of the curve P256. */
6929 static const sp_digit p256_norm_mod[4] = {
6930     0x0000000000000001L,0xffffffff00000000L,0xffffffffffffffffL,
6931     0x00000000fffffffeL
6932 };
6933 /* The Montgomery multiplier for modulus of the curve P256. */
6934 static const sp_digit p256_mp_mod = 0x0000000000000001;
6935 #if defined(WOLFSSL_VALIDATE_ECC_KEYGEN) || defined(HAVE_ECC_SIGN) || \
6936                                             defined(HAVE_ECC_VERIFY)
6937 /* The order of the curve P256. */
6938 static const sp_digit p256_order[4] = {
6939     0xf3b9cac2fc632551L,0xbce6faada7179e84L,0xffffffffffffffffL,
6940     0xffffffff00000000L
6941 };
6942 #endif
6943 /* The order of the curve P256 minus 2. */
6944 static const sp_digit p256_order2[4] = {
6945     0xf3b9cac2fc63254fL,0xbce6faada7179e84L,0xffffffffffffffffL,
6946     0xffffffff00000000L
6947 };
6948 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
6949 /* The Montgomery normalizer for order of the curve P256. */
6950 static const sp_digit p256_norm_order[4] = {
6951     0x0c46353d039cdaafL,0x4319055258e8617bL,0x0000000000000000L,
6952     0x00000000ffffffffL
6953 };
6954 #endif
6955 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
6956 /* The Montgomery multiplier for order of the curve P256. */
6957 static const sp_digit p256_mp_order = 0xccd1c8aaee00bc4fL;
6958 #endif
6959 #ifdef WOLFSSL_SP_SMALL
6960 /* The base point of curve P256. */
6961 static const sp_point_256 p256_base = {
6962     /* X ordinate */
6963     {
6964         0xf4a13945d898c296L,0x77037d812deb33a0L,0xf8bce6e563a440f2L,
6965         0x6b17d1f2e12c4247L,
6966         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0
6967     },
6968     /* Y ordinate */
6969     {
6970         0xcbb6406837bf51f5L,0x2bce33576b315eceL,0x8ee7eb4a7c0f9e16L,
6971         0x4fe342e2fe1a7f9bL,
6972         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0
6973     },
6974     /* Z ordinate */
6975     {
6976         0x0000000000000001L,0x0000000000000000L,0x0000000000000000L,
6977         0x0000000000000000L,
6978         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0
6979     },
6980     /* infinity */
6981     0
6982 };
6983 #endif /* WOLFSSL_SP_SMALL */
6984 #if defined(HAVE_ECC_CHECK_KEY) || defined(HAVE_COMP_KEY)
6985 static const sp_digit p256_b[4] = {
6986     0x3bce3c3e27d2604bL,0x651d06b0cc53b0f6L,0xb3ebbd55769886bcL,
6987     0x5ac635d8aa3a93e7L
6988 };
6989 #endif
6990 
6991 extern void sp_256_mul_4(sp_digit* r, const sp_digit* a, const sp_digit* b);
6992 extern void sp_256_sqr_4(sp_digit* r, const sp_digit* a);
6993 extern sp_digit sp_256_add_4(sp_digit* r, const sp_digit* a, const sp_digit* b);
6994 extern sp_digit sp_256_sub_4(sp_digit* r, const sp_digit* a, const sp_digit* b);
6995 /* Multiply a number by Montgomery normalizer mod modulus (prime).
6996  *
6997  * r  The resulting Montgomery form number.
6998  * a  The number to convert.
6999  * m  The modulus (prime).
7000  */
sp_256_mod_mul_norm_4(sp_digit * r,const sp_digit * a,const sp_digit * m)7001 static int sp_256_mod_mul_norm_4(sp_digit* r, const sp_digit* a, const sp_digit* m)
7002 {
7003     int64_t t[8];
7004     int64_t a32[8];
7005     int64_t o;
7006 
7007     ASSERT_SAVED_VECTOR_REGISTERS();
7008 
7009     (void)m;
7010 
7011     a32[0] = a[0] & 0xffffffff;
7012     a32[1] = a[0] >> 32;
7013     a32[2] = a[1] & 0xffffffff;
7014     a32[3] = a[1] >> 32;
7015     a32[4] = a[2] & 0xffffffff;
7016     a32[5] = a[2] >> 32;
7017     a32[6] = a[3] & 0xffffffff;
7018     a32[7] = a[3] >> 32;
7019 
7020     /*  1  1  0 -1 -1 -1 -1  0 */
7021     t[0] = 0 + a32[0] + a32[1] - a32[3] - a32[4] - a32[5] - a32[6];
7022     /*  0  1  1  0 -1 -1 -1 -1 */
7023     t[1] = 0 + a32[1] + a32[2] - a32[4] - a32[5] - a32[6] - a32[7];
7024     /*  0  0  1  1  0 -1 -1 -1 */
7025     t[2] = 0 + a32[2] + a32[3] - a32[5] - a32[6] - a32[7];
7026     /* -1 -1  0  2  2  1  0 -1 */
7027     t[3] = 0 - a32[0] - a32[1] + 2 * a32[3] + 2 * a32[4] + a32[5] - a32[7];
7028     /*  0 -1 -1  0  2  2  1  0 */
7029     t[4] = 0 - a32[1] - a32[2] + 2 * a32[4] + 2 * a32[5] + a32[6];
7030     /*  0  0 -1 -1  0  2  2  1 */
7031     t[5] = 0 - a32[2] - a32[3] + 2 * a32[5] + 2 * a32[6] + a32[7];
7032     /* -1 -1  0  0  0  1  3  2 */
7033     t[6] = 0 - a32[0] - a32[1] + a32[5] + 3 * a32[6] + 2 * a32[7];
7034     /*  1  0 -1 -1 -1 -1  0  3 */
7035     t[7] = 0 + a32[0] - a32[2] - a32[3] - a32[4] - a32[5] + 3 * a32[7];
7036 
7037     t[1] += t[0] >> 32; t[0] &= 0xffffffff;
7038     t[2] += t[1] >> 32; t[1] &= 0xffffffff;
7039     t[3] += t[2] >> 32; t[2] &= 0xffffffff;
7040     t[4] += t[3] >> 32; t[3] &= 0xffffffff;
7041     t[5] += t[4] >> 32; t[4] &= 0xffffffff;
7042     t[6] += t[5] >> 32; t[5] &= 0xffffffff;
7043     t[7] += t[6] >> 32; t[6] &= 0xffffffff;
7044     o     = t[7] >> 32; t[7] &= 0xffffffff;
7045     t[0] += o;
7046     t[3] -= o;
7047     t[6] -= o;
7048     t[7] += o;
7049     t[1] += t[0] >> 32; t[0] &= 0xffffffff;
7050     t[2] += t[1] >> 32; t[1] &= 0xffffffff;
7051     t[3] += t[2] >> 32; t[2] &= 0xffffffff;
7052     t[4] += t[3] >> 32; t[3] &= 0xffffffff;
7053     t[5] += t[4] >> 32; t[4] &= 0xffffffff;
7054     t[6] += t[5] >> 32; t[5] &= 0xffffffff;
7055     t[7] += t[6] >> 32; t[6] &= 0xffffffff;
7056     r[0] = (t[1] << 32) | t[0];
7057     r[1] = (t[3] << 32) | t[2];
7058     r[2] = (t[5] << 32) | t[4];
7059     r[3] = (t[7] << 32) | t[6];
7060 
7061     return MP_OKAY;
7062 }
7063 
7064 /* Convert an mp_int to an array of sp_digit.
7065  *
7066  * r  A single precision integer.
7067  * size  Maximum number of bytes to convert
7068  * a  A multi-precision integer.
7069  */
sp_256_from_mp(sp_digit * r,int size,const mp_int * a)7070 static void sp_256_from_mp(sp_digit* r, int size, const mp_int* a)
7071 {
7072 #if DIGIT_BIT == 64
7073     int j;
7074 
7075     XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
7076 
7077     for (j = a->used; j < size; j++) {
7078         r[j] = 0;
7079     }
7080 #elif DIGIT_BIT > 64
7081     int i;
7082     int j = 0;
7083     word32 s = 0;
7084 
7085     r[0] = 0;
7086     for (i = 0; i < a->used && j < size; i++) {
7087         r[j] |= ((sp_digit)a->dp[i] << s);
7088         r[j] &= 0xffffffffffffffffl;
7089         s = 64U - s;
7090         if (j + 1 >= size) {
7091             break;
7092         }
7093         /* lint allow cast of mismatch word32 and mp_digit */
7094         r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
7095         while ((s + 64U) <= (word32)DIGIT_BIT) {
7096             s += 64U;
7097             r[j] &= 0xffffffffffffffffl;
7098             if (j + 1 >= size) {
7099                 break;
7100             }
7101             if (s < (word32)DIGIT_BIT) {
7102                 /* lint allow cast of mismatch word32 and mp_digit */
7103                 r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
7104             }
7105             else {
7106                 r[++j] = (sp_digit)0;
7107             }
7108         }
7109         s = (word32)DIGIT_BIT - s;
7110     }
7111 
7112     for (j++; j < size; j++) {
7113         r[j] = 0;
7114     }
7115 #else
7116     int i;
7117     int j = 0;
7118     int s = 0;
7119 
7120     r[0] = 0;
7121     for (i = 0; i < a->used && j < size; i++) {
7122         r[j] |= ((sp_digit)a->dp[i]) << s;
7123         if (s + DIGIT_BIT >= 64) {
7124             r[j] &= 0xffffffffffffffffl;
7125             if (j + 1 >= size) {
7126                 break;
7127             }
7128             s = 64 - s;
7129             if (s == DIGIT_BIT) {
7130                 r[++j] = 0;
7131                 s = 0;
7132             }
7133             else {
7134                 r[++j] = a->dp[i] >> s;
7135                 s = DIGIT_BIT - s;
7136             }
7137         }
7138         else {
7139             s += DIGIT_BIT;
7140         }
7141     }
7142 
7143     for (j++; j < size; j++) {
7144         r[j] = 0;
7145     }
7146 #endif
7147 }
7148 
7149 /* Convert a point of type ecc_point to type sp_point_256.
7150  *
7151  * p   Point of type sp_point_256 (result).
7152  * pm  Point of type ecc_point.
7153  */
sp_256_point_from_ecc_point_4(sp_point_256 * p,const ecc_point * pm)7154 static void sp_256_point_from_ecc_point_4(sp_point_256* p,
7155         const ecc_point* pm)
7156 {
7157     XMEMSET(p->x, 0, sizeof(p->x));
7158     XMEMSET(p->y, 0, sizeof(p->y));
7159     XMEMSET(p->z, 0, sizeof(p->z));
7160     sp_256_from_mp(p->x, 4, pm->x);
7161     sp_256_from_mp(p->y, 4, pm->y);
7162     sp_256_from_mp(p->z, 4, pm->z);
7163     p->infinity = 0;
7164 }
7165 
7166 /* Convert an array of sp_digit to an mp_int.
7167  *
7168  * a  A single precision integer.
7169  * r  A multi-precision integer.
7170  */
sp_256_to_mp(const sp_digit * a,mp_int * r)7171 static int sp_256_to_mp(const sp_digit* a, mp_int* r)
7172 {
7173     int err;
7174 
7175     err = mp_grow(r, (256 + DIGIT_BIT - 1) / DIGIT_BIT);
7176     if (err == MP_OKAY) { /*lint !e774 case where err is always MP_OKAY*/
7177 #if DIGIT_BIT == 64
7178         XMEMCPY(r->dp, a, sizeof(sp_digit) * 4);
7179         r->used = 4;
7180         mp_clamp(r);
7181 #elif DIGIT_BIT < 64
7182         int i;
7183         int j = 0;
7184         int s = 0;
7185 
7186         r->dp[0] = 0;
7187         for (i = 0; i < 4; i++) {
7188             r->dp[j] |= (mp_digit)(a[i] << s);
7189             r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
7190             s = DIGIT_BIT - s;
7191             r->dp[++j] = (mp_digit)(a[i] >> s);
7192             while (s + DIGIT_BIT <= 64) {
7193                 s += DIGIT_BIT;
7194                 r->dp[j++] &= ((sp_digit)1 << DIGIT_BIT) - 1;
7195                 if (s == SP_WORD_SIZE) {
7196                     r->dp[j] = 0;
7197                 }
7198                 else {
7199                     r->dp[j] = (mp_digit)(a[i] >> s);
7200                 }
7201             }
7202             s = 64 - s;
7203         }
7204         r->used = (256 + DIGIT_BIT - 1) / DIGIT_BIT;
7205         mp_clamp(r);
7206 #else
7207         int i;
7208         int j = 0;
7209         int s = 0;
7210 
7211         r->dp[0] = 0;
7212         for (i = 0; i < 4; i++) {
7213             r->dp[j] |= ((mp_digit)a[i]) << s;
7214             if (s + 64 >= DIGIT_BIT) {
7215     #if DIGIT_BIT != 32 && DIGIT_BIT != 64
7216                 r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
7217     #endif
7218                 s = DIGIT_BIT - s;
7219                 r->dp[++j] = a[i] >> s;
7220                 s = 64 - s;
7221             }
7222             else {
7223                 s += 64;
7224             }
7225         }
7226         r->used = (256 + DIGIT_BIT - 1) / DIGIT_BIT;
7227         mp_clamp(r);
7228 #endif
7229     }
7230 
7231     return err;
7232 }
7233 
7234 /* Convert a point of type sp_point_256 to type ecc_point.
7235  *
7236  * p   Point of type sp_point_256.
7237  * pm  Point of type ecc_point (result).
7238  * returns MEMORY_E when allocation of memory in ecc_point fails otherwise
7239  * MP_OKAY.
7240  */
sp_256_point_to_ecc_point_4(const sp_point_256 * p,ecc_point * pm)7241 static int sp_256_point_to_ecc_point_4(const sp_point_256* p, ecc_point* pm)
7242 {
7243     int err;
7244 
7245     err = sp_256_to_mp(p->x, pm->x);
7246     if (err == MP_OKAY) {
7247         err = sp_256_to_mp(p->y, pm->y);
7248     }
7249     if (err == MP_OKAY) {
7250         err = sp_256_to_mp(p->z, pm->z);
7251     }
7252 
7253     return err;
7254 }
7255 
7256 extern void sp_256_cond_copy_4(sp_digit* r, const sp_digit* a, sp_digit m);
7257 extern void sp_256_mont_mul_4(sp_digit* r, const sp_digit* a, const sp_digit* b, const sp_digit* m, sp_digit mp);
7258 extern void sp_256_mont_sqr_4(sp_digit* r, const sp_digit* a, const sp_digit* m, sp_digit mp);
7259 #if !defined(WOLFSSL_SP_SMALL) || defined(HAVE_COMP_KEY)
7260 /* Square the Montgomery form number a number of times. (r = a ^ n mod m)
7261  *
7262  * r   Result of squaring.
7263  * a   Number to square in Montgomery form.
7264  * n   Number of times to square.
7265  * m   Modulus (prime).
7266  * mp  Montgomery mulitplier.
7267  */
sp_256_mont_sqr_n_4(sp_digit * r,const sp_digit * a,int n,const sp_digit * m,sp_digit mp)7268 static void sp_256_mont_sqr_n_4(sp_digit* r, const sp_digit* a, int n,
7269         const sp_digit* m, sp_digit mp)
7270 {
7271     sp_256_mont_sqr_4(r, a, m, mp);
7272     for (; n > 1; n--) {
7273         sp_256_mont_sqr_4(r, r, m, mp);
7274     }
7275 }
7276 
7277 #endif /* !WOLFSSL_SP_SMALL | HAVE_COMP_KEY */
7278 #ifdef WOLFSSL_SP_SMALL
7279 /* Mod-2 for the P256 curve. */
7280 static const uint64_t p256_mod_minus_2[4] = {
7281     0xfffffffffffffffdU,0x00000000ffffffffU,0x0000000000000000U,
7282     0xffffffff00000001U
7283 };
7284 #endif /* !WOLFSSL_SP_SMALL */
7285 
7286 /* Invert the number, in Montgomery form, modulo the modulus (prime) of the
7287  * P256 curve. (r = 1 / a mod m)
7288  *
7289  * r   Inverse result.
7290  * a   Number to invert.
7291  * td  Temporary data.
7292  */
sp_256_mont_inv_4(sp_digit * r,const sp_digit * a,sp_digit * td)7293 static void sp_256_mont_inv_4(sp_digit* r, const sp_digit* a, sp_digit* td)
7294 {
7295 #ifdef WOLFSSL_SP_SMALL
7296     sp_digit* t = td;
7297     int i;
7298 
7299     XMEMCPY(t, a, sizeof(sp_digit) * 4);
7300     for (i=254; i>=0; i--) {
7301         sp_256_mont_sqr_4(t, t, p256_mod, p256_mp_mod);
7302         if (p256_mod_minus_2[i / 64] & ((sp_digit)1 << (i % 64)))
7303             sp_256_mont_mul_4(t, t, a, p256_mod, p256_mp_mod);
7304     }
7305     XMEMCPY(r, t, sizeof(sp_digit) * 4);
7306 #else
7307     sp_digit* t1 = td;
7308     sp_digit* t2 = td + 2 * 4;
7309     sp_digit* t3 = td + 4 * 4;
7310     /* 0x2 */
7311     sp_256_mont_sqr_4(t1, a, p256_mod, p256_mp_mod);
7312     /* 0x3 */
7313     sp_256_mont_mul_4(t2, t1, a, p256_mod, p256_mp_mod);
7314     /* 0xc */
7315     sp_256_mont_sqr_n_4(t1, t2, 2, p256_mod, p256_mp_mod);
7316     /* 0xd */
7317     sp_256_mont_mul_4(t3, t1, a, p256_mod, p256_mp_mod);
7318     /* 0xf */
7319     sp_256_mont_mul_4(t2, t2, t1, p256_mod, p256_mp_mod);
7320     /* 0xf0 */
7321     sp_256_mont_sqr_n_4(t1, t2, 4, p256_mod, p256_mp_mod);
7322     /* 0xfd */
7323     sp_256_mont_mul_4(t3, t3, t1, p256_mod, p256_mp_mod);
7324     /* 0xff */
7325     sp_256_mont_mul_4(t2, t2, t1, p256_mod, p256_mp_mod);
7326     /* 0xff00 */
7327     sp_256_mont_sqr_n_4(t1, t2, 8, p256_mod, p256_mp_mod);
7328     /* 0xfffd */
7329     sp_256_mont_mul_4(t3, t3, t1, p256_mod, p256_mp_mod);
7330     /* 0xffff */
7331     sp_256_mont_mul_4(t2, t2, t1, p256_mod, p256_mp_mod);
7332     /* 0xffff0000 */
7333     sp_256_mont_sqr_n_4(t1, t2, 16, p256_mod, p256_mp_mod);
7334     /* 0xfffffffd */
7335     sp_256_mont_mul_4(t3, t3, t1, p256_mod, p256_mp_mod);
7336     /* 0xffffffff */
7337     sp_256_mont_mul_4(t2, t2, t1, p256_mod, p256_mp_mod);
7338     /* 0xffffffff00000000 */
7339     sp_256_mont_sqr_n_4(t1, t2, 32, p256_mod, p256_mp_mod);
7340     /* 0xffffffffffffffff */
7341     sp_256_mont_mul_4(t2, t2, t1, p256_mod, p256_mp_mod);
7342     /* 0xffffffff00000001 */
7343     sp_256_mont_mul_4(r, t1, a, p256_mod, p256_mp_mod);
7344     /* 0xffffffff000000010000000000000000000000000000000000000000 */
7345     sp_256_mont_sqr_n_4(r, r, 160, p256_mod, p256_mp_mod);
7346     /* 0xffffffff00000001000000000000000000000000ffffffffffffffff */
7347     sp_256_mont_mul_4(r, r, t2, p256_mod, p256_mp_mod);
7348     /* 0xffffffff00000001000000000000000000000000ffffffffffffffff00000000 */
7349     sp_256_mont_sqr_n_4(r, r, 32, p256_mod, p256_mp_mod);
7350     /* 0xffffffff00000001000000000000000000000000fffffffffffffffffffffffd */
7351     sp_256_mont_mul_4(r, r, t3, p256_mod, p256_mp_mod);
7352 #endif /* WOLFSSL_SP_SMALL */
7353 }
7354 
7355 extern sp_int64 sp_256_cmp_4(const sp_digit* a, const sp_digit* b);
7356 /* Normalize the values in each word to 64.
7357  *
7358  * a  Array of sp_digit to normalize.
7359  */
7360 #define sp_256_norm_4(a)
7361 
7362 extern sp_digit sp_256_cond_sub_4(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
7363 #define sp_256_mont_reduce_order_4         sp_256_mont_reduce_4
7364 
7365 extern void sp_256_mont_reduce_4(sp_digit* a, const sp_digit* m, sp_digit mp);
7366 /* Map the Montgomery form projective coordinate point to an affine point.
7367  *
7368  * r  Resulting affine coordinate point.
7369  * p  Montgomery form projective coordinate point.
7370  * t  Temporary ordinate data.
7371  */
sp_256_map_4(sp_point_256 * r,const sp_point_256 * p,sp_digit * t)7372 static void sp_256_map_4(sp_point_256* r, const sp_point_256* p,
7373     sp_digit* t)
7374 {
7375     sp_digit* t1 = t;
7376     sp_digit* t2 = t + 2*4;
7377     sp_int64 n;
7378 
7379     sp_256_mont_inv_4(t1, p->z, t + 2*4);
7380 
7381     sp_256_mont_sqr_4(t2, t1, p256_mod, p256_mp_mod);
7382     sp_256_mont_mul_4(t1, t2, t1, p256_mod, p256_mp_mod);
7383 
7384     /* x /= z^2 */
7385     sp_256_mont_mul_4(r->x, p->x, t2, p256_mod, p256_mp_mod);
7386     XMEMSET(r->x + 4, 0, sizeof(r->x) / 2U);
7387     sp_256_mont_reduce_4(r->x, p256_mod, p256_mp_mod);
7388     /* Reduce x to less than modulus */
7389     n = sp_256_cmp_4(r->x, p256_mod);
7390     sp_256_cond_sub_4(r->x, r->x, p256_mod, 0 - ((n >= 0) ?
7391                 (sp_digit)1 : (sp_digit)0));
7392     sp_256_norm_4(r->x);
7393 
7394     /* y /= z^3 */
7395     sp_256_mont_mul_4(r->y, p->y, t1, p256_mod, p256_mp_mod);
7396     XMEMSET(r->y + 4, 0, sizeof(r->y) / 2U);
7397     sp_256_mont_reduce_4(r->y, p256_mod, p256_mp_mod);
7398     /* Reduce y to less than modulus */
7399     n = sp_256_cmp_4(r->y, p256_mod);
7400     sp_256_cond_sub_4(r->y, r->y, p256_mod, 0 - ((n >= 0) ?
7401                 (sp_digit)1 : (sp_digit)0));
7402     sp_256_norm_4(r->y);
7403 
7404     XMEMSET(r->z, 0, sizeof(r->z));
7405     r->z[0] = 1;
7406 
7407 }
7408 
7409 extern void sp_256_mont_add_4(sp_digit* r, const sp_digit* a, const sp_digit* b, const sp_digit* m);
7410 extern void sp_256_mont_dbl_4(sp_digit* r, const sp_digit* a, const sp_digit* m);
7411 extern void sp_256_mont_tpl_4(sp_digit* r, const sp_digit* a, const sp_digit* m);
7412 extern void sp_256_mont_sub_4(sp_digit* r, const sp_digit* a, const sp_digit* b, const sp_digit* m);
7413 extern void sp_256_div2_4(sp_digit* r, const sp_digit* a, const sp_digit* m);
7414 /* Double the Montgomery form projective point p.
7415  *
7416  * r  Result of doubling point.
7417  * p  Point to double.
7418  * t  Temporary ordinate data.
7419  */
7420 #ifdef WOLFSSL_SP_NONBLOCK
7421 typedef struct sp_256_proj_point_dbl_4_ctx {
7422     int state;
7423     sp_digit* t1;
7424     sp_digit* t2;
7425     sp_digit* x;
7426     sp_digit* y;
7427     sp_digit* z;
7428 } sp_256_proj_point_dbl_4_ctx;
7429 
sp_256_proj_point_dbl_4_nb(sp_ecc_ctx_t * sp_ctx,sp_point_256 * r,const sp_point_256 * p,sp_digit * t)7430 static int sp_256_proj_point_dbl_4_nb(sp_ecc_ctx_t* sp_ctx, sp_point_256* r, const sp_point_256* p, sp_digit* t)
7431 {
7432     int err = FP_WOULDBLOCK;
7433     sp_256_proj_point_dbl_4_ctx* ctx = (sp_256_proj_point_dbl_4_ctx*)sp_ctx->data;
7434 
7435     typedef char ctx_size_test[sizeof(sp_256_proj_point_dbl_4_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
7436     (void)sizeof(ctx_size_test);
7437 
7438     switch (ctx->state) {
7439     case 0:
7440         ctx->t1 = t;
7441         ctx->t2 = t + 2*4;
7442         ctx->x = r->x;
7443         ctx->y = r->y;
7444         ctx->z = r->z;
7445 
7446         /* Put infinity into result. */
7447         if (r != p) {
7448             r->infinity = p->infinity;
7449         }
7450         ctx->state = 1;
7451         break;
7452     case 1:
7453         /* T1 = Z * Z */
7454         sp_256_mont_sqr_4(ctx->t1, p->z, p256_mod, p256_mp_mod);
7455         ctx->state = 2;
7456         break;
7457     case 2:
7458         /* Z = Y * Z */
7459         sp_256_mont_mul_4(ctx->z, p->y, p->z, p256_mod, p256_mp_mod);
7460         ctx->state = 3;
7461         break;
7462     case 3:
7463         /* Z = 2Z */
7464         sp_256_mont_dbl_4(ctx->z, ctx->z, p256_mod);
7465         ctx->state = 4;
7466         break;
7467     case 4:
7468         /* T2 = X - T1 */
7469         sp_256_mont_sub_4(ctx->t2, p->x, ctx->t1, p256_mod);
7470         ctx->state = 5;
7471         break;
7472     case 5:
7473         /* T1 = X + T1 */
7474         sp_256_mont_add_4(ctx->t1, p->x, ctx->t1, p256_mod);
7475         ctx->state = 6;
7476         break;
7477     case 6:
7478         /* T2 = T1 * T2 */
7479         sp_256_mont_mul_4(ctx->t2, ctx->t1, ctx->t2, p256_mod, p256_mp_mod);
7480         ctx->state = 7;
7481         break;
7482     case 7:
7483         /* T1 = 3T2 */
7484         sp_256_mont_tpl_4(ctx->t1, ctx->t2, p256_mod);
7485         ctx->state = 8;
7486         break;
7487     case 8:
7488         /* Y = 2Y */
7489         sp_256_mont_dbl_4(ctx->y, p->y, p256_mod);
7490         ctx->state = 9;
7491         break;
7492     case 9:
7493         /* Y = Y * Y */
7494         sp_256_mont_sqr_4(ctx->y, ctx->y, p256_mod, p256_mp_mod);
7495         ctx->state = 10;
7496         break;
7497     case 10:
7498         /* T2 = Y * Y */
7499         sp_256_mont_sqr_4(ctx->t2, ctx->y, p256_mod, p256_mp_mod);
7500         ctx->state = 11;
7501         break;
7502     case 11:
7503         /* T2 = T2/2 */
7504         sp_256_div2_4(ctx->t2, ctx->t2, p256_mod);
7505         ctx->state = 12;
7506         break;
7507     case 12:
7508         /* Y = Y * X */
7509         sp_256_mont_mul_4(ctx->y, ctx->y, p->x, p256_mod, p256_mp_mod);
7510         ctx->state = 13;
7511         break;
7512     case 13:
7513         /* X = T1 * T1 */
7514         sp_256_mont_sqr_4(ctx->x, ctx->t1, p256_mod, p256_mp_mod);
7515         ctx->state = 14;
7516         break;
7517     case 14:
7518         /* X = X - Y */
7519         sp_256_mont_sub_4(ctx->x, ctx->x, ctx->y, p256_mod);
7520         ctx->state = 15;
7521         break;
7522     case 15:
7523         /* X = X - Y */
7524         sp_256_mont_sub_4(ctx->x, ctx->x, ctx->y, p256_mod);
7525         ctx->state = 16;
7526         break;
7527     case 16:
7528         /* Y = Y - X */
7529         sp_256_mont_sub_4(ctx->y, ctx->y, ctx->x, p256_mod);
7530         ctx->state = 17;
7531         break;
7532     case 17:
7533         /* Y = Y * T1 */
7534         sp_256_mont_mul_4(ctx->y, ctx->y, ctx->t1, p256_mod, p256_mp_mod);
7535         ctx->state = 18;
7536         break;
7537     case 18:
7538         /* Y = Y - T2 */
7539         sp_256_mont_sub_4(ctx->y, ctx->y, ctx->t2, p256_mod);
7540         ctx->state = 19;
7541         /* fall-through */
7542     case 19:
7543         err = MP_OKAY;
7544         break;
7545     }
7546 
7547     if (err == MP_OKAY && ctx->state != 19) {
7548         err = FP_WOULDBLOCK;
7549     }
7550 
7551     return err;
7552 }
7553 #endif /* WOLFSSL_SP_NONBLOCK */
7554 
sp_256_proj_point_dbl_4(sp_point_256 * r,const sp_point_256 * p,sp_digit * t)7555 static void sp_256_proj_point_dbl_4(sp_point_256* r, const sp_point_256* p, sp_digit* t)
7556 {
7557     sp_digit* t1 = t;
7558     sp_digit* t2 = t + 2*4;
7559     sp_digit* x;
7560     sp_digit* y;
7561     sp_digit* z;
7562 
7563     x = r->x;
7564     y = r->y;
7565     z = r->z;
7566     /* Put infinity into result. */
7567     if (r != p) {
7568         r->infinity = p->infinity;
7569     }
7570 
7571     /* T1 = Z * Z */
7572     sp_256_mont_sqr_4(t1, p->z, p256_mod, p256_mp_mod);
7573     /* Z = Y * Z */
7574     sp_256_mont_mul_4(z, p->y, p->z, p256_mod, p256_mp_mod);
7575     /* Z = 2Z */
7576     sp_256_mont_dbl_4(z, z, p256_mod);
7577     /* T2 = X - T1 */
7578     sp_256_mont_sub_4(t2, p->x, t1, p256_mod);
7579     /* T1 = X + T1 */
7580     sp_256_mont_add_4(t1, p->x, t1, p256_mod);
7581     /* T2 = T1 * T2 */
7582     sp_256_mont_mul_4(t2, t1, t2, p256_mod, p256_mp_mod);
7583     /* T1 = 3T2 */
7584     sp_256_mont_tpl_4(t1, t2, p256_mod);
7585     /* Y = 2Y */
7586     sp_256_mont_dbl_4(y, p->y, p256_mod);
7587     /* Y = Y * Y */
7588     sp_256_mont_sqr_4(y, y, p256_mod, p256_mp_mod);
7589     /* T2 = Y * Y */
7590     sp_256_mont_sqr_4(t2, y, p256_mod, p256_mp_mod);
7591     /* T2 = T2/2 */
7592     sp_256_div2_4(t2, t2, p256_mod);
7593     /* Y = Y * X */
7594     sp_256_mont_mul_4(y, y, p->x, p256_mod, p256_mp_mod);
7595     /* X = T1 * T1 */
7596     sp_256_mont_sqr_4(x, t1, p256_mod, p256_mp_mod);
7597     /* X = X - Y */
7598     sp_256_mont_sub_4(x, x, y, p256_mod);
7599     /* X = X - Y */
7600     sp_256_mont_sub_4(x, x, y, p256_mod);
7601     /* Y = Y - X */
7602     sp_256_mont_sub_4(y, y, x, p256_mod);
7603     /* Y = Y * T1 */
7604     sp_256_mont_mul_4(y, y, t1, p256_mod, p256_mp_mod);
7605     /* Y = Y - T2 */
7606     sp_256_mont_sub_4(y, y, t2, p256_mod);
7607 }
7608 
7609 /* Double the Montgomery form projective point p a number of times.
7610  *
7611  * r  Result of repeated doubling of point.
7612  * p  Point to double.
7613  * n  Number of times to double
7614  * t  Temporary ordinate data.
7615  */
sp_256_proj_point_dbl_n_4(sp_point_256 * p,int n,sp_digit * t)7616 static void sp_256_proj_point_dbl_n_4(sp_point_256* p, int n,
7617     sp_digit* t)
7618 {
7619     sp_digit* w = t;
7620     sp_digit* a = t + 2*4;
7621     sp_digit* b = t + 4*4;
7622     sp_digit* t1 = t + 6*4;
7623     sp_digit* t2 = t + 8*4;
7624     sp_digit* x;
7625     sp_digit* y;
7626     sp_digit* z;
7627 
7628     x = p->x;
7629     y = p->y;
7630     z = p->z;
7631 
7632     /* Y = 2*Y */
7633     sp_256_mont_dbl_4(y, y, p256_mod);
7634     /* W = Z^4 */
7635     sp_256_mont_sqr_4(w, z, p256_mod, p256_mp_mod);
7636     sp_256_mont_sqr_4(w, w, p256_mod, p256_mp_mod);
7637 
7638 #ifndef WOLFSSL_SP_SMALL
7639     while (--n > 0)
7640 #else
7641     while (--n >= 0)
7642 #endif
7643     {
7644         /* A = 3*(X^2 - W) */
7645         sp_256_mont_sqr_4(t1, x, p256_mod, p256_mp_mod);
7646         sp_256_mont_sub_4(t1, t1, w, p256_mod);
7647         sp_256_mont_tpl_4(a, t1, p256_mod);
7648         /* B = X*Y^2 */
7649         sp_256_mont_sqr_4(t1, y, p256_mod, p256_mp_mod);
7650         sp_256_mont_mul_4(b, t1, x, p256_mod, p256_mp_mod);
7651         /* X = A^2 - 2B */
7652         sp_256_mont_sqr_4(x, a, p256_mod, p256_mp_mod);
7653         sp_256_mont_dbl_4(t2, b, p256_mod);
7654         sp_256_mont_sub_4(x, x, t2, p256_mod);
7655         /* Z = Z*Y */
7656         sp_256_mont_mul_4(z, z, y, p256_mod, p256_mp_mod);
7657         /* t2 = Y^4 */
7658         sp_256_mont_sqr_4(t1, t1, p256_mod, p256_mp_mod);
7659 #ifdef WOLFSSL_SP_SMALL
7660         if (n != 0)
7661 #endif
7662         {
7663             /* W = W*Y^4 */
7664             sp_256_mont_mul_4(w, w, t1, p256_mod, p256_mp_mod);
7665         }
7666         /* y = 2*A*(B - X) - Y^4 */
7667         sp_256_mont_sub_4(y, b, x, p256_mod);
7668         sp_256_mont_mul_4(y, y, a, p256_mod, p256_mp_mod);
7669         sp_256_mont_dbl_4(y, y, p256_mod);
7670         sp_256_mont_sub_4(y, y, t1, p256_mod);
7671     }
7672 #ifndef WOLFSSL_SP_SMALL
7673     /* A = 3*(X^2 - W) */
7674     sp_256_mont_sqr_4(t1, x, p256_mod, p256_mp_mod);
7675     sp_256_mont_sub_4(t1, t1, w, p256_mod);
7676     sp_256_mont_tpl_4(a, t1, p256_mod);
7677     /* B = X*Y^2 */
7678     sp_256_mont_sqr_4(t1, y, p256_mod, p256_mp_mod);
7679     sp_256_mont_mul_4(b, t1, x, p256_mod, p256_mp_mod);
7680     /* X = A^2 - 2B */
7681     sp_256_mont_sqr_4(x, a, p256_mod, p256_mp_mod);
7682     sp_256_mont_dbl_4(t2, b, p256_mod);
7683     sp_256_mont_sub_4(x, x, t2, p256_mod);
7684     /* Z = Z*Y */
7685     sp_256_mont_mul_4(z, z, y, p256_mod, p256_mp_mod);
7686     /* t2 = Y^4 */
7687     sp_256_mont_sqr_4(t1, t1, p256_mod, p256_mp_mod);
7688     /* y = 2*A*(B - X) - Y^4 */
7689     sp_256_mont_sub_4(y, b, x, p256_mod);
7690     sp_256_mont_mul_4(y, y, a, p256_mod, p256_mp_mod);
7691     sp_256_mont_dbl_4(y, y, p256_mod);
7692     sp_256_mont_sub_4(y, y, t1, p256_mod);
7693 #endif
7694     /* Y = Y/2 */
7695     sp_256_div2_4(y, y, p256_mod);
7696 }
7697 
7698 /* Compare two numbers to determine if they are equal.
7699  * Constant time implementation.
7700  *
7701  * a  First number to compare.
7702  * b  Second number to compare.
7703  * returns 1 when equal and 0 otherwise.
7704  */
sp_256_cmp_equal_4(const sp_digit * a,const sp_digit * b)7705 static int sp_256_cmp_equal_4(const sp_digit* a, const sp_digit* b)
7706 {
7707     return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2]) |
7708             (a[3] ^ b[3])) == 0;
7709 }
7710 
7711 /* Add two Montgomery form projective points.
7712  *
7713  * r  Result of addition.
7714  * p  First point to add.
7715  * q  Second point to add.
7716  * t  Temporary ordinate data.
7717  */
7718 
7719 #ifdef WOLFSSL_SP_NONBLOCK
7720 typedef struct sp_256_proj_point_add_4_ctx {
7721     int state;
7722     sp_256_proj_point_dbl_4_ctx dbl_ctx;
7723     const sp_point_256* ap[2];
7724     sp_point_256* rp[2];
7725     sp_digit* t1;
7726     sp_digit* t2;
7727     sp_digit* t3;
7728     sp_digit* t4;
7729     sp_digit* t5;
7730     sp_digit* x;
7731     sp_digit* y;
7732     sp_digit* z;
7733 } sp_256_proj_point_add_4_ctx;
7734 
sp_256_proj_point_add_4_nb(sp_ecc_ctx_t * sp_ctx,sp_point_256 * r,const sp_point_256 * p,const sp_point_256 * q,sp_digit * t)7735 static int sp_256_proj_point_add_4_nb(sp_ecc_ctx_t* sp_ctx, sp_point_256* r,
7736     const sp_point_256* p, const sp_point_256* q, sp_digit* t)
7737 {
7738     int err = FP_WOULDBLOCK;
7739     sp_256_proj_point_add_4_ctx* ctx = (sp_256_proj_point_add_4_ctx*)sp_ctx->data;
7740 
7741     /* Ensure only the first point is the same as the result. */
7742     if (q == r) {
7743         const sp_point_256* a = p;
7744         p = q;
7745         q = a;
7746     }
7747 
7748     typedef char ctx_size_test[sizeof(sp_256_proj_point_add_4_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
7749     (void)sizeof(ctx_size_test);
7750 
7751     switch (ctx->state) {
7752     case 0: /* INIT */
7753         ctx->t1 = t;
7754         ctx->t2 = t + 2*4;
7755         ctx->t3 = t + 4*4;
7756         ctx->t4 = t + 6*4;
7757         ctx->t5 = t + 8*4;
7758 
7759         ctx->state = 1;
7760         break;
7761     case 1:
7762         /* Check double */
7763         (void)sp_256_sub_4(ctx->t1, p256_mod, q->y);
7764         sp_256_norm_4(ctx->t1);
7765         if ((sp_256_cmp_equal_4(p->x, q->x) & sp_256_cmp_equal_4(p->z, q->z) &
7766             (sp_256_cmp_equal_4(p->y, q->y) | sp_256_cmp_equal_4(p->y, ctx->t1))) != 0)
7767         {
7768             XMEMSET(&ctx->dbl_ctx, 0, sizeof(ctx->dbl_ctx));
7769             ctx->state = 2;
7770         }
7771         else {
7772             ctx->state = 3;
7773         }
7774         break;
7775     case 2:
7776         err = sp_256_proj_point_dbl_4_nb((sp_ecc_ctx_t*)&ctx->dbl_ctx, r, p, t);
7777         if (err == MP_OKAY)
7778             ctx->state = 27; /* done */
7779         break;
7780     case 3:
7781     {
7782         int i;
7783         ctx->rp[0] = r;
7784 
7785         /*lint allow cast to different type of pointer*/
7786         ctx->rp[1] = (sp_point_256*)t; /*lint !e9087 !e740*/
7787         XMEMSET(ctx->rp[1], 0, sizeof(sp_point_256));
7788         ctx->x = ctx->rp[p->infinity | q->infinity]->x;
7789         ctx->y = ctx->rp[p->infinity | q->infinity]->y;
7790         ctx->z = ctx->rp[p->infinity | q->infinity]->z;
7791 
7792         ctx->ap[0] = p;
7793         ctx->ap[1] = q;
7794         for (i=0; i<4; i++) {
7795             r->x[i] = ctx->ap[p->infinity]->x[i];
7796         }
7797         for (i=0; i<4; i++) {
7798             r->y[i] = ctx->ap[p->infinity]->y[i];
7799         }
7800         for (i=0; i<4; i++) {
7801             r->z[i] = ctx->ap[p->infinity]->z[i];
7802         }
7803         r->infinity = ctx->ap[p->infinity]->infinity;
7804 
7805         ctx->state = 4;
7806         break;
7807     }
7808     case 4:
7809         /* U1 = X1*Z2^2 */
7810         sp_256_mont_sqr_4(ctx->t1, q->z, p256_mod, p256_mp_mod);
7811         ctx->state = 5;
7812         break;
7813     case 5:
7814         sp_256_mont_mul_4(ctx->t3, ctx->t1, q->z, p256_mod, p256_mp_mod);
7815         ctx->state = 6;
7816         break;
7817     case 6:
7818         sp_256_mont_mul_4(ctx->t1, ctx->t1, ctx->x, p256_mod, p256_mp_mod);
7819         ctx->state = 7;
7820         break;
7821     case 7:
7822         /* U2 = X2*Z1^2 */
7823         sp_256_mont_sqr_4(ctx->t2, ctx->z, p256_mod, p256_mp_mod);
7824         ctx->state = 8;
7825         break;
7826     case 8:
7827         sp_256_mont_mul_4(ctx->t4, ctx->t2, ctx->z, p256_mod, p256_mp_mod);
7828         ctx->state = 9;
7829         break;
7830     case 9:
7831         sp_256_mont_mul_4(ctx->t2, ctx->t2, q->x, p256_mod, p256_mp_mod);
7832         ctx->state = 10;
7833         break;
7834     case 10:
7835         /* S1 = Y1*Z2^3 */
7836         sp_256_mont_mul_4(ctx->t3, ctx->t3, ctx->y, p256_mod, p256_mp_mod);
7837         ctx->state = 11;
7838         break;
7839     case 11:
7840         /* S2 = Y2*Z1^3 */
7841         sp_256_mont_mul_4(ctx->t4, ctx->t4, q->y, p256_mod, p256_mp_mod);
7842         ctx->state = 12;
7843         break;
7844     case 12:
7845         /* H = U2 - U1 */
7846         sp_256_mont_sub_4(ctx->t2, ctx->t2, ctx->t1, p256_mod);
7847         ctx->state = 13;
7848         break;
7849     case 13:
7850         /* R = S2 - S1 */
7851         sp_256_mont_sub_4(ctx->t4, ctx->t4, ctx->t3, p256_mod);
7852         ctx->state = 14;
7853         break;
7854     case 14:
7855         /* Z3 = H*Z1*Z2 */
7856         sp_256_mont_mul_4(ctx->z, ctx->z, q->z, p256_mod, p256_mp_mod);
7857         ctx->state = 15;
7858         break;
7859     case 15:
7860         sp_256_mont_mul_4(ctx->z, ctx->z, ctx->t2, p256_mod, p256_mp_mod);
7861         ctx->state = 16;
7862         break;
7863     case 16:
7864         /* X3 = R^2 - H^3 - 2*U1*H^2 */
7865         sp_256_mont_sqr_4(ctx->x, ctx->t4, p256_mod, p256_mp_mod);
7866         ctx->state = 17;
7867         break;
7868     case 17:
7869         sp_256_mont_sqr_4(ctx->t5, ctx->t2, p256_mod, p256_mp_mod);
7870         ctx->state = 18;
7871         break;
7872     case 18:
7873         sp_256_mont_mul_4(ctx->y, ctx->t1, ctx->t5, p256_mod, p256_mp_mod);
7874         ctx->state = 19;
7875         break;
7876     case 19:
7877         sp_256_mont_mul_4(ctx->t5, ctx->t5, ctx->t2, p256_mod, p256_mp_mod);
7878         ctx->state = 20;
7879         break;
7880     case 20:
7881         sp_256_mont_sub_4(ctx->x, ctx->x, ctx->t5, p256_mod);
7882         ctx->state = 21;
7883         break;
7884     case 21:
7885         sp_256_mont_dbl_4(ctx->t1, ctx->y, p256_mod);
7886         ctx->state = 22;
7887         break;
7888     case 22:
7889         sp_256_mont_sub_4(ctx->x, ctx->x, ctx->t1, p256_mod);
7890         ctx->state = 23;
7891         break;
7892     case 23:
7893         /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
7894         sp_256_mont_sub_4(ctx->y, ctx->y, ctx->x, p256_mod);
7895         ctx->state = 24;
7896         break;
7897     case 24:
7898         sp_256_mont_mul_4(ctx->y, ctx->y, ctx->t4, p256_mod, p256_mp_mod);
7899         ctx->state = 25;
7900         break;
7901     case 25:
7902         sp_256_mont_mul_4(ctx->t5, ctx->t5, ctx->t3, p256_mod, p256_mp_mod);
7903         ctx->state = 26;
7904         break;
7905     case 26:
7906         sp_256_mont_sub_4(ctx->y, ctx->y, ctx->t5, p256_mod);
7907         ctx->state = 27;
7908         /* fall-through */
7909     case 27:
7910         err = MP_OKAY;
7911         break;
7912     }
7913 
7914     if (err == MP_OKAY && ctx->state != 27) {
7915         err = FP_WOULDBLOCK;
7916     }
7917     return err;
7918 }
7919 #endif /* WOLFSSL_SP_NONBLOCK */
7920 
sp_256_proj_point_add_4(sp_point_256 * r,const sp_point_256 * p,const sp_point_256 * q,sp_digit * t)7921 static void sp_256_proj_point_add_4(sp_point_256* r,
7922         const sp_point_256* p, const sp_point_256* q, sp_digit* t)
7923 {
7924     const sp_point_256* ap[2];
7925     sp_point_256* rp[2];
7926     sp_digit* t1 = t;
7927     sp_digit* t2 = t + 2*4;
7928     sp_digit* t3 = t + 4*4;
7929     sp_digit* t4 = t + 6*4;
7930     sp_digit* t5 = t + 8*4;
7931     sp_digit* x;
7932     sp_digit* y;
7933     sp_digit* z;
7934     int i;
7935 
7936     /* Ensure only the first point is the same as the result. */
7937     if (q == r) {
7938         const sp_point_256* a = p;
7939         p = q;
7940         q = a;
7941     }
7942 
7943     /* Check double */
7944     (void)sp_256_sub_4(t1, p256_mod, q->y);
7945     sp_256_norm_4(t1);
7946     if ((sp_256_cmp_equal_4(p->x, q->x) & sp_256_cmp_equal_4(p->z, q->z) &
7947         (sp_256_cmp_equal_4(p->y, q->y) | sp_256_cmp_equal_4(p->y, t1))) != 0) {
7948         sp_256_proj_point_dbl_4(r, p, t);
7949     }
7950     else {
7951         rp[0] = r;
7952 
7953         /*lint allow cast to different type of pointer*/
7954         rp[1] = (sp_point_256*)t; /*lint !e9087 !e740*/
7955         XMEMSET(rp[1], 0, sizeof(sp_point_256));
7956         x = rp[p->infinity | q->infinity]->x;
7957         y = rp[p->infinity | q->infinity]->y;
7958         z = rp[p->infinity | q->infinity]->z;
7959 
7960         ap[0] = p;
7961         ap[1] = q;
7962         for (i=0; i<4; i++) {
7963             r->x[i] = ap[p->infinity]->x[i];
7964         }
7965         for (i=0; i<4; i++) {
7966             r->y[i] = ap[p->infinity]->y[i];
7967         }
7968         for (i=0; i<4; i++) {
7969             r->z[i] = ap[p->infinity]->z[i];
7970         }
7971         r->infinity = ap[p->infinity]->infinity;
7972 
7973         /* U1 = X1*Z2^2 */
7974         sp_256_mont_sqr_4(t1, q->z, p256_mod, p256_mp_mod);
7975         sp_256_mont_mul_4(t3, t1, q->z, p256_mod, p256_mp_mod);
7976         sp_256_mont_mul_4(t1, t1, x, p256_mod, p256_mp_mod);
7977         /* U2 = X2*Z1^2 */
7978         sp_256_mont_sqr_4(t2, z, p256_mod, p256_mp_mod);
7979         sp_256_mont_mul_4(t4, t2, z, p256_mod, p256_mp_mod);
7980         sp_256_mont_mul_4(t2, t2, q->x, p256_mod, p256_mp_mod);
7981         /* S1 = Y1*Z2^3 */
7982         sp_256_mont_mul_4(t3, t3, y, p256_mod, p256_mp_mod);
7983         /* S2 = Y2*Z1^3 */
7984         sp_256_mont_mul_4(t4, t4, q->y, p256_mod, p256_mp_mod);
7985         /* H = U2 - U1 */
7986         sp_256_mont_sub_4(t2, t2, t1, p256_mod);
7987         /* R = S2 - S1 */
7988         sp_256_mont_sub_4(t4, t4, t3, p256_mod);
7989         /* Z3 = H*Z1*Z2 */
7990         sp_256_mont_mul_4(z, z, q->z, p256_mod, p256_mp_mod);
7991         sp_256_mont_mul_4(z, z, t2, p256_mod, p256_mp_mod);
7992         /* X3 = R^2 - H^3 - 2*U1*H^2 */
7993         sp_256_mont_sqr_4(x, t4, p256_mod, p256_mp_mod);
7994         sp_256_mont_sqr_4(t5, t2, p256_mod, p256_mp_mod);
7995         sp_256_mont_mul_4(y, t1, t5, p256_mod, p256_mp_mod);
7996         sp_256_mont_mul_4(t5, t5, t2, p256_mod, p256_mp_mod);
7997         sp_256_mont_sub_4(x, x, t5, p256_mod);
7998         sp_256_mont_dbl_4(t1, y, p256_mod);
7999         sp_256_mont_sub_4(x, x, t1, p256_mod);
8000         /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
8001         sp_256_mont_sub_4(y, y, x, p256_mod);
8002         sp_256_mont_mul_4(y, y, t4, p256_mod, p256_mp_mod);
8003         sp_256_mont_mul_4(t5, t5, t3, p256_mod, p256_mp_mod);
8004         sp_256_mont_sub_4(y, y, t5, p256_mod);
8005     }
8006 }
8007 
8008 /* Double the Montgomery form projective point p a number of times.
8009  *
8010  * r  Result of repeated doubling of point.
8011  * p  Point to double.
8012  * n  Number of times to double
8013  * t  Temporary ordinate data.
8014  */
sp_256_proj_point_dbl_n_store_4(sp_point_256 * r,const sp_point_256 * p,int n,int m,sp_digit * t)8015 static void sp_256_proj_point_dbl_n_store_4(sp_point_256* r,
8016         const sp_point_256* p, int n, int m, sp_digit* t)
8017 {
8018     sp_digit* w = t;
8019     sp_digit* a = t + 2*4;
8020     sp_digit* b = t + 4*4;
8021     sp_digit* t1 = t + 6*4;
8022     sp_digit* t2 = t + 8*4;
8023     sp_digit* x = r[2*m].x;
8024     sp_digit* y = r[(1<<n)*m].y;
8025     sp_digit* z = r[2*m].z;
8026     int i;
8027     int j;
8028 
8029     for (i=0; i<4; i++) {
8030         x[i] = p->x[i];
8031     }
8032     for (i=0; i<4; i++) {
8033         y[i] = p->y[i];
8034     }
8035     for (i=0; i<4; i++) {
8036         z[i] = p->z[i];
8037     }
8038 
8039     /* Y = 2*Y */
8040     sp_256_mont_dbl_4(y, y, p256_mod);
8041     /* W = Z^4 */
8042     sp_256_mont_sqr_4(w, z, p256_mod, p256_mp_mod);
8043     sp_256_mont_sqr_4(w, w, p256_mod, p256_mp_mod);
8044     j = m;
8045     for (i=1; i<=n; i++) {
8046         j *= 2;
8047 
8048         /* A = 3*(X^2 - W) */
8049         sp_256_mont_sqr_4(t1, x, p256_mod, p256_mp_mod);
8050         sp_256_mont_sub_4(t1, t1, w, p256_mod);
8051         sp_256_mont_tpl_4(a, t1, p256_mod);
8052         /* B = X*Y^2 */
8053         sp_256_mont_sqr_4(t2, y, p256_mod, p256_mp_mod);
8054         sp_256_mont_mul_4(b, t2, x, p256_mod, p256_mp_mod);
8055         x = r[j].x;
8056         /* X = A^2 - 2B */
8057         sp_256_mont_sqr_4(x, a, p256_mod, p256_mp_mod);
8058         sp_256_mont_dbl_4(t1, b, p256_mod);
8059         sp_256_mont_sub_4(x, x, t1, p256_mod);
8060         /* Z = Z*Y */
8061         sp_256_mont_mul_4(r[j].z, z, y, p256_mod, p256_mp_mod);
8062         z = r[j].z;
8063         /* t2 = Y^4 */
8064         sp_256_mont_sqr_4(t2, t2, p256_mod, p256_mp_mod);
8065         if (i != n) {
8066             /* W = W*Y^4 */
8067             sp_256_mont_mul_4(w, w, t2, p256_mod, p256_mp_mod);
8068         }
8069         /* y = 2*A*(B - X) - Y^4 */
8070         sp_256_mont_sub_4(y, b, x, p256_mod);
8071         sp_256_mont_mul_4(y, y, a, p256_mod, p256_mp_mod);
8072         sp_256_mont_dbl_4(y, y, p256_mod);
8073         sp_256_mont_sub_4(y, y, t2, p256_mod);
8074 
8075         /* Y = Y/2 */
8076         sp_256_div2_4(r[j].y, y, p256_mod);
8077         r[j].infinity = 0;
8078     }
8079 }
8080 
8081 /* Add two Montgomery form projective points.
8082  *
8083  * ra  Result of addition.
8084  * rs  Result of subtraction.
8085  * p   First point to add.
8086  * q   Second point to add.
8087  * t   Temporary ordinate data.
8088  */
sp_256_proj_point_add_sub_4(sp_point_256 * ra,sp_point_256 * rs,const sp_point_256 * p,const sp_point_256 * q,sp_digit * t)8089 static void sp_256_proj_point_add_sub_4(sp_point_256* ra,
8090         sp_point_256* rs, const sp_point_256* p, const sp_point_256* q,
8091         sp_digit* t)
8092 {
8093     sp_digit* t1 = t;
8094     sp_digit* t2 = t + 2*4;
8095     sp_digit* t3 = t + 4*4;
8096     sp_digit* t4 = t + 6*4;
8097     sp_digit* t5 = t + 8*4;
8098     sp_digit* t6 = t + 10*4;
8099     sp_digit* x = ra->x;
8100     sp_digit* y = ra->y;
8101     sp_digit* z = ra->z;
8102     sp_digit* xs = rs->x;
8103     sp_digit* ys = rs->y;
8104     sp_digit* zs = rs->z;
8105 
8106 
8107     XMEMCPY(x, p->x, sizeof(p->x) / 2);
8108     XMEMCPY(y, p->y, sizeof(p->y) / 2);
8109     XMEMCPY(z, p->z, sizeof(p->z) / 2);
8110     ra->infinity = 0;
8111     rs->infinity = 0;
8112 
8113     /* U1 = X1*Z2^2 */
8114     sp_256_mont_sqr_4(t1, q->z, p256_mod, p256_mp_mod);
8115     sp_256_mont_mul_4(t3, t1, q->z, p256_mod, p256_mp_mod);
8116     sp_256_mont_mul_4(t1, t1, x, p256_mod, p256_mp_mod);
8117     /* U2 = X2*Z1^2 */
8118     sp_256_mont_sqr_4(t2, z, p256_mod, p256_mp_mod);
8119     sp_256_mont_mul_4(t4, t2, z, p256_mod, p256_mp_mod);
8120     sp_256_mont_mul_4(t2, t2, q->x, p256_mod, p256_mp_mod);
8121     /* S1 = Y1*Z2^3 */
8122     sp_256_mont_mul_4(t3, t3, y, p256_mod, p256_mp_mod);
8123     /* S2 = Y2*Z1^3 */
8124     sp_256_mont_mul_4(t4, t4, q->y, p256_mod, p256_mp_mod);
8125     /* H = U2 - U1 */
8126     sp_256_mont_sub_4(t2, t2, t1, p256_mod);
8127     /* RS = S2 + S1 */
8128     sp_256_mont_add_4(t6, t4, t3, p256_mod);
8129     /* R = S2 - S1 */
8130     sp_256_mont_sub_4(t4, t4, t3, p256_mod);
8131     /* Z3 = H*Z1*Z2 */
8132     /* ZS = H*Z1*Z2 */
8133     sp_256_mont_mul_4(z, z, q->z, p256_mod, p256_mp_mod);
8134     sp_256_mont_mul_4(z, z, t2, p256_mod, p256_mp_mod);
8135     XMEMCPY(zs, z, sizeof(p->z)/2);
8136     /* X3 = R^2 - H^3 - 2*U1*H^2 */
8137     /* XS = RS^2 - H^3 - 2*U1*H^2 */
8138     sp_256_mont_sqr_4(x, t4, p256_mod, p256_mp_mod);
8139     sp_256_mont_sqr_4(xs, t6, p256_mod, p256_mp_mod);
8140     sp_256_mont_sqr_4(t5, t2, p256_mod, p256_mp_mod);
8141     sp_256_mont_mul_4(y, t1, t5, p256_mod, p256_mp_mod);
8142     sp_256_mont_mul_4(t5, t5, t2, p256_mod, p256_mp_mod);
8143     sp_256_mont_sub_4(x, x, t5, p256_mod);
8144     sp_256_mont_sub_4(xs, xs, t5, p256_mod);
8145     sp_256_mont_dbl_4(t1, y, p256_mod);
8146     sp_256_mont_sub_4(x, x, t1, p256_mod);
8147     sp_256_mont_sub_4(xs, xs, t1, p256_mod);
8148     /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
8149     /* YS = -RS*(U1*H^2 - XS) - S1*H^3 */
8150     sp_256_mont_sub_4(ys, y, xs, p256_mod);
8151     sp_256_mont_sub_4(y, y, x, p256_mod);
8152     sp_256_mont_mul_4(y, y, t4, p256_mod, p256_mp_mod);
8153     sp_256_sub_4(t6, p256_mod, t6);
8154     sp_256_mont_mul_4(ys, ys, t6, p256_mod, p256_mp_mod);
8155     sp_256_mont_mul_4(t5, t5, t3, p256_mod, p256_mp_mod);
8156     sp_256_mont_sub_4(y, y, t5, p256_mod);
8157     sp_256_mont_sub_4(ys, ys, t5, p256_mod);
8158 }
8159 
8160 /* Structure used to describe recoding of scalar multiplication. */
8161 typedef struct ecc_recode_256 {
8162     /* Index into pre-computation table. */
8163     uint8_t i;
8164     /* Use the negative of the point. */
8165     uint8_t neg;
8166 } ecc_recode_256;
8167 
8168 /* The index into pre-computation table to use. */
8169 static const uint8_t recode_index_4_6[66] = {
8170      0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
8171     16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
8172     32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17,
8173     16, 15, 14, 13, 12, 11, 10,  9,  8,  7,  6,  5,  4,  3,  2,  1,
8174      0,  1,
8175 };
8176 
8177 /* Whether to negate y-ordinate. */
8178 static const uint8_t recode_neg_4_6[66] = {
8179      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
8180      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
8181      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
8182      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
8183      0,  0,
8184 };
8185 
8186 /* Recode the scalar for multiplication using pre-computed values and
8187  * subtraction.
8188  *
8189  * k  Scalar to multiply by.
8190  * v  Vector of operations to perform.
8191  */
sp_256_ecc_recode_6_4(const sp_digit * k,ecc_recode_256 * v)8192 static void sp_256_ecc_recode_6_4(const sp_digit* k, ecc_recode_256* v)
8193 {
8194     int i;
8195     int j;
8196     uint8_t y;
8197     int carry = 0;
8198     int o;
8199     sp_digit n;
8200 
8201     j = 0;
8202     n = k[j];
8203     o = 0;
8204     for (i=0; i<43; i++) {
8205         y = (int8_t)n;
8206         if (o + 6 < 64) {
8207             y &= 0x3f;
8208             n >>= 6;
8209             o += 6;
8210         }
8211         else if (o + 6 == 64) {
8212             n >>= 6;
8213             if (++j < 4)
8214                 n = k[j];
8215             o = 0;
8216         }
8217         else if (++j < 4) {
8218             n = k[j];
8219             y |= (uint8_t)((n << (64 - o)) & 0x3f);
8220             o -= 58;
8221             n >>= o;
8222         }
8223 
8224         y += (uint8_t)carry;
8225         v[i].i = recode_index_4_6[y];
8226         v[i].neg = recode_neg_4_6[y];
8227         carry = (y >> 6) + v[i].neg;
8228     }
8229 }
8230 
8231 extern void sp_256_get_point_33_4(sp_point_256* r, const sp_point_256* table, int idx);
8232 extern void sp_256_get_point_33_avx2_4(sp_point_256* r, const sp_point_256* table, int idx);
8233 /* Multiply the point by the scalar and return the result.
8234  * If map is true then convert result to affine coordinates.
8235  *
8236  * Window technique of 6 bits. (Add-Sub variation.)
8237  * Calculate 0..32 times the point. Use function that adds and
8238  * subtracts the same two points.
8239  * Recode to add or subtract one of the computed points.
8240  * Double to push up.
8241  * NOT a sliding window.
8242  *
8243  * r     Resulting point.
8244  * g     Point to multiply.
8245  * k     Scalar to multiply by.
8246  * map   Indicates whether to convert result to affine.
8247  * ct    Constant time required.
8248  * heap  Heap to use for allocation.
8249  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
8250  */
sp_256_ecc_mulmod_win_add_sub_4(sp_point_256 * r,const sp_point_256 * g,const sp_digit * k,int map,int ct,void * heap)8251 static int sp_256_ecc_mulmod_win_add_sub_4(sp_point_256* r, const sp_point_256* g,
8252         const sp_digit* k, int map, int ct, void* heap)
8253 {
8254 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
8255     sp_point_256* t = NULL;
8256     sp_digit* tmp = NULL;
8257 #else
8258     sp_point_256 t[33+2];
8259     sp_digit tmp[2 * 4 * 6];
8260 #endif
8261     sp_point_256* rt = NULL;
8262     sp_point_256* p = NULL;
8263     sp_digit* negy;
8264     int i;
8265     ecc_recode_256 v[43];
8266     int err = MP_OKAY;
8267 
8268     /* Constant time used for cache attack resistance implementation. */
8269     (void)ct;
8270     (void)heap;
8271 
8272 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
8273     t = (sp_point_256*)XMALLOC(sizeof(sp_point_256) *
8274         (33+2), heap, DYNAMIC_TYPE_ECC);
8275     if (t == NULL)
8276         err = MEMORY_E;
8277     if (err == MP_OKAY) {
8278         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 4 * 6,
8279                                  heap, DYNAMIC_TYPE_ECC);
8280         if (tmp == NULL)
8281             err = MEMORY_E;
8282     }
8283 #endif
8284 
8285     if (err == MP_OKAY) {
8286         rt = t + 33;
8287         p  = t + 33+1;
8288 
8289         /* t[0] = {0, 0, 1} * norm */
8290         XMEMSET(&t[0], 0, sizeof(t[0]));
8291         t[0].infinity = 1;
8292         /* t[1] = {g->x, g->y, g->z} * norm */
8293         err = sp_256_mod_mul_norm_4(t[1].x, g->x, p256_mod);
8294     }
8295     if (err == MP_OKAY) {
8296         err = sp_256_mod_mul_norm_4(t[1].y, g->y, p256_mod);
8297     }
8298     if (err == MP_OKAY) {
8299         err = sp_256_mod_mul_norm_4(t[1].z, g->z, p256_mod);
8300     }
8301 
8302     if (err == MP_OKAY) {
8303         t[1].infinity = 0;
8304         /* t[2] ... t[32]  */
8305         sp_256_proj_point_dbl_n_store_4(t, &t[ 1], 5, 1, tmp);
8306         sp_256_proj_point_add_4(&t[ 3], &t[ 2], &t[ 1], tmp);
8307         sp_256_proj_point_dbl_4(&t[ 6], &t[ 3], tmp);
8308         sp_256_proj_point_add_sub_4(&t[ 7], &t[ 5], &t[ 6], &t[ 1], tmp);
8309         sp_256_proj_point_dbl_4(&t[10], &t[ 5], tmp);
8310         sp_256_proj_point_add_sub_4(&t[11], &t[ 9], &t[10], &t[ 1], tmp);
8311         sp_256_proj_point_dbl_4(&t[12], &t[ 6], tmp);
8312         sp_256_proj_point_dbl_4(&t[14], &t[ 7], tmp);
8313         sp_256_proj_point_add_sub_4(&t[15], &t[13], &t[14], &t[ 1], tmp);
8314         sp_256_proj_point_dbl_4(&t[18], &t[ 9], tmp);
8315         sp_256_proj_point_add_sub_4(&t[19], &t[17], &t[18], &t[ 1], tmp);
8316         sp_256_proj_point_dbl_4(&t[20], &t[10], tmp);
8317         sp_256_proj_point_dbl_4(&t[22], &t[11], tmp);
8318         sp_256_proj_point_add_sub_4(&t[23], &t[21], &t[22], &t[ 1], tmp);
8319         sp_256_proj_point_dbl_4(&t[24], &t[12], tmp);
8320         sp_256_proj_point_dbl_4(&t[26], &t[13], tmp);
8321         sp_256_proj_point_add_sub_4(&t[27], &t[25], &t[26], &t[ 1], tmp);
8322         sp_256_proj_point_dbl_4(&t[28], &t[14], tmp);
8323         sp_256_proj_point_dbl_4(&t[30], &t[15], tmp);
8324         sp_256_proj_point_add_sub_4(&t[31], &t[29], &t[30], &t[ 1], tmp);
8325 
8326         negy = t[0].y;
8327 
8328         sp_256_ecc_recode_6_4(k, v);
8329 
8330         i = 42;
8331     #ifndef WC_NO_CACHE_RESISTANT
8332         if (ct) {
8333             sp_256_get_point_33_4(rt, t, v[i].i);
8334             rt->infinity = !v[i].i;
8335         }
8336         else
8337     #endif
8338         {
8339             XMEMCPY(rt, &t[v[i].i], sizeof(sp_point_256));
8340         }
8341         for (--i; i>=0; i--) {
8342             sp_256_proj_point_dbl_n_4(rt, 6, tmp);
8343 
8344         #ifndef WC_NO_CACHE_RESISTANT
8345             if (ct) {
8346                 sp_256_get_point_33_4(p, t, v[i].i);
8347                 p->infinity = !v[i].i;
8348             }
8349             else
8350         #endif
8351             {
8352                 XMEMCPY(p, &t[v[i].i], sizeof(sp_point_256));
8353             }
8354             sp_256_sub_4(negy, p256_mod, p->y);
8355             sp_256_norm_4(negy);
8356             sp_256_cond_copy_4(p->y, negy, (sp_digit)0 - v[i].neg);
8357             sp_256_proj_point_add_4(rt, rt, p, tmp);
8358         }
8359 
8360         if (map != 0) {
8361             sp_256_map_4(r, rt, tmp);
8362         }
8363         else {
8364             XMEMCPY(r, rt, sizeof(sp_point_256));
8365         }
8366     }
8367 
8368 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
8369     if (t != NULL)
8370         XFREE(t, heap, DYNAMIC_TYPE_ECC);
8371     if (tmp != NULL)
8372         XFREE(tmp, heap, DYNAMIC_TYPE_ECC);
8373 #endif
8374 
8375     return err;
8376 }
8377 
8378 #ifdef HAVE_INTEL_AVX2
8379 #define sp_256_mod_mul_norm_avx2_4 sp_256_mod_mul_norm_4
8380 extern void sp_256_mont_mul_avx2_4(sp_digit* r, const sp_digit* a, const sp_digit* b, const sp_digit* m, sp_digit mp);
8381 extern void sp_256_mont_sqr_avx2_4(sp_digit* r, const sp_digit* a, const sp_digit* m, sp_digit mp);
8382 #if !defined(WOLFSSL_SP_SMALL) || defined(HAVE_COMP_KEY)
8383 /* Square the Montgomery form number a number of times. (r = a ^ n mod m)
8384  *
8385  * r   Result of squaring.
8386  * a   Number to square in Montgomery form.
8387  * n   Number of times to square.
8388  * m   Modulus (prime).
8389  * mp  Montgomery mulitplier.
8390  */
sp_256_mont_sqr_n_avx2_4(sp_digit * r,const sp_digit * a,int n,const sp_digit * m,sp_digit mp)8391 static void sp_256_mont_sqr_n_avx2_4(sp_digit* r, const sp_digit* a, int n,
8392         const sp_digit* m, sp_digit mp)
8393 {
8394     sp_256_mont_sqr_avx2_4(r, a, m, mp);
8395     for (; n > 1; n--) {
8396         sp_256_mont_sqr_avx2_4(r, r, m, mp);
8397     }
8398 }
8399 
8400 #endif /* !WOLFSSL_SP_SMALL | HAVE_COMP_KEY */
8401 
8402 /* Invert the number, in Montgomery form, modulo the modulus (prime) of the
8403  * P256 curve. (r = 1 / a mod m)
8404  *
8405  * r   Inverse result.
8406  * a   Number to invert.
8407  * td  Temporary data.
8408  */
sp_256_mont_inv_avx2_4(sp_digit * r,const sp_digit * a,sp_digit * td)8409 static void sp_256_mont_inv_avx2_4(sp_digit* r, const sp_digit* a, sp_digit* td)
8410 {
8411 #ifdef WOLFSSL_SP_SMALL
8412     sp_digit* t = td;
8413     int i;
8414 
8415     XMEMCPY(t, a, sizeof(sp_digit) * 4);
8416     for (i=254; i>=0; i--) {
8417         sp_256_mont_sqr_avx2_4(t, t, p256_mod, p256_mp_mod);
8418         if (p256_mod_minus_2[i / 64] & ((sp_digit)1 << (i % 64)))
8419             sp_256_mont_mul_avx2_4(t, t, a, p256_mod, p256_mp_mod);
8420     }
8421     XMEMCPY(r, t, sizeof(sp_digit) * 4);
8422 #else
8423     sp_digit* t1 = td;
8424     sp_digit* t2 = td + 2 * 4;
8425     sp_digit* t3 = td + 4 * 4;
8426     /* 0x2 */
8427     sp_256_mont_sqr_avx2_4(t1, a, p256_mod, p256_mp_mod);
8428     /* 0x3 */
8429     sp_256_mont_mul_avx2_4(t2, t1, a, p256_mod, p256_mp_mod);
8430     /* 0xc */
8431     sp_256_mont_sqr_n_avx2_4(t1, t2, 2, p256_mod, p256_mp_mod);
8432     /* 0xd */
8433     sp_256_mont_mul_avx2_4(t3, t1, a, p256_mod, p256_mp_mod);
8434     /* 0xf */
8435     sp_256_mont_mul_avx2_4(t2, t2, t1, p256_mod, p256_mp_mod);
8436     /* 0xf0 */
8437     sp_256_mont_sqr_n_avx2_4(t1, t2, 4, p256_mod, p256_mp_mod);
8438     /* 0xfd */
8439     sp_256_mont_mul_avx2_4(t3, t3, t1, p256_mod, p256_mp_mod);
8440     /* 0xff */
8441     sp_256_mont_mul_avx2_4(t2, t2, t1, p256_mod, p256_mp_mod);
8442     /* 0xff00 */
8443     sp_256_mont_sqr_n_avx2_4(t1, t2, 8, p256_mod, p256_mp_mod);
8444     /* 0xfffd */
8445     sp_256_mont_mul_avx2_4(t3, t3, t1, p256_mod, p256_mp_mod);
8446     /* 0xffff */
8447     sp_256_mont_mul_avx2_4(t2, t2, t1, p256_mod, p256_mp_mod);
8448     /* 0xffff0000 */
8449     sp_256_mont_sqr_n_avx2_4(t1, t2, 16, p256_mod, p256_mp_mod);
8450     /* 0xfffffffd */
8451     sp_256_mont_mul_avx2_4(t3, t3, t1, p256_mod, p256_mp_mod);
8452     /* 0xffffffff */
8453     sp_256_mont_mul_avx2_4(t2, t2, t1, p256_mod, p256_mp_mod);
8454     /* 0xffffffff00000000 */
8455     sp_256_mont_sqr_n_avx2_4(t1, t2, 32, p256_mod, p256_mp_mod);
8456     /* 0xffffffffffffffff */
8457     sp_256_mont_mul_avx2_4(t2, t2, t1, p256_mod, p256_mp_mod);
8458     /* 0xffffffff00000001 */
8459     sp_256_mont_mul_avx2_4(r, t1, a, p256_mod, p256_mp_mod);
8460     /* 0xffffffff000000010000000000000000000000000000000000000000 */
8461     sp_256_mont_sqr_n_avx2_4(r, r, 160, p256_mod, p256_mp_mod);
8462     /* 0xffffffff00000001000000000000000000000000ffffffffffffffff */
8463     sp_256_mont_mul_avx2_4(r, r, t2, p256_mod, p256_mp_mod);
8464     /* 0xffffffff00000001000000000000000000000000ffffffffffffffff00000000 */
8465     sp_256_mont_sqr_n_avx2_4(r, r, 32, p256_mod, p256_mp_mod);
8466     /* 0xffffffff00000001000000000000000000000000fffffffffffffffffffffffd */
8467     sp_256_mont_mul_avx2_4(r, r, t3, p256_mod, p256_mp_mod);
8468 #endif /* WOLFSSL_SP_SMALL */
8469 }
8470 
8471 extern sp_digit sp_256_cond_sub_avx2_4(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
8472 #define sp_256_mont_reduce_order_avx2_4    sp_256_mont_reduce_avx2_4
8473 
8474 extern void sp_256_mont_reduce_avx2_4(sp_digit* a, const sp_digit* m, sp_digit mp);
8475 /* Map the Montgomery form projective coordinate point to an affine point.
8476  *
8477  * r  Resulting affine coordinate point.
8478  * p  Montgomery form projective coordinate point.
8479  * t  Temporary ordinate data.
8480  */
sp_256_map_avx2_4(sp_point_256 * r,const sp_point_256 * p,sp_digit * t)8481 static void sp_256_map_avx2_4(sp_point_256* r, const sp_point_256* p,
8482     sp_digit* t)
8483 {
8484     sp_digit* t1 = t;
8485     sp_digit* t2 = t + 2*4;
8486     sp_int64 n;
8487 
8488     sp_256_mont_inv_avx2_4(t1, p->z, t + 2*4);
8489 
8490     sp_256_mont_sqr_avx2_4(t2, t1, p256_mod, p256_mp_mod);
8491     sp_256_mont_mul_avx2_4(t1, t2, t1, p256_mod, p256_mp_mod);
8492 
8493     /* x /= z^2 */
8494     sp_256_mont_mul_avx2_4(r->x, p->x, t2, p256_mod, p256_mp_mod);
8495     XMEMSET(r->x + 4, 0, sizeof(r->x) / 2U);
8496     sp_256_mont_reduce_avx2_4(r->x, p256_mod, p256_mp_mod);
8497     /* Reduce x to less than modulus */
8498     n = sp_256_cmp_4(r->x, p256_mod);
8499     sp_256_cond_sub_4(r->x, r->x, p256_mod, 0 - ((n >= 0) ?
8500                 (sp_digit)1 : (sp_digit)0));
8501     sp_256_norm_4(r->x);
8502 
8503     /* y /= z^3 */
8504     sp_256_mont_mul_avx2_4(r->y, p->y, t1, p256_mod, p256_mp_mod);
8505     XMEMSET(r->y + 4, 0, sizeof(r->y) / 2U);
8506     sp_256_mont_reduce_avx2_4(r->y, p256_mod, p256_mp_mod);
8507     /* Reduce y to less than modulus */
8508     n = sp_256_cmp_4(r->y, p256_mod);
8509     sp_256_cond_sub_avx2_4(r->y, r->y, p256_mod, 0 - ((n >= 0) ?
8510                 (sp_digit)1 : (sp_digit)0));
8511     sp_256_norm_4(r->y);
8512 
8513     XMEMSET(r->z, 0, sizeof(r->z));
8514     r->z[0] = 1;
8515 
8516 }
8517 
8518 #define sp_256_mont_add_avx2_4 sp_256_mont_add_4
8519 #define sp_256_mont_dbl_avx2_4 sp_256_mont_dbl_4
8520 #define sp_256_mont_tpl_avx2_4 sp_256_mont_tpl_4
8521 #define sp_256_mont_sub_avx2_4 sp_256_mont_sub_4
8522 extern void sp_256_div2_avx2_4(sp_digit* r, const sp_digit* a, const sp_digit* m);
8523 /* Double the Montgomery form projective point p.
8524  *
8525  * r  Result of doubling point.
8526  * p  Point to double.
8527  * t  Temporary ordinate data.
8528  */
8529 #ifdef WOLFSSL_SP_NONBLOCK
8530 typedef struct sp_256_proj_point_dbl_avx2_4_ctx {
8531     int state;
8532     sp_digit* t1;
8533     sp_digit* t2;
8534     sp_digit* x;
8535     sp_digit* y;
8536     sp_digit* z;
8537 } sp_256_proj_point_dbl_avx2_4_ctx;
8538 
sp_256_proj_point_dbl_avx2_4_nb(sp_ecc_ctx_t * sp_ctx,sp_point_256 * r,const sp_point_256 * p,sp_digit * t)8539 static int sp_256_proj_point_dbl_avx2_4_nb(sp_ecc_ctx_t* sp_ctx, sp_point_256* r, const sp_point_256* p, sp_digit* t)
8540 {
8541     int err = FP_WOULDBLOCK;
8542     sp_256_proj_point_dbl_avx2_4_ctx* ctx = (sp_256_proj_point_dbl_avx2_4_ctx*)sp_ctx->data;
8543 
8544     typedef char ctx_size_test[sizeof(sp_256_proj_point_dbl_avx2_4_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
8545     (void)sizeof(ctx_size_test);
8546 
8547     switch (ctx->state) {
8548     case 0:
8549         ctx->t1 = t;
8550         ctx->t2 = t + 2*4;
8551         ctx->x = r->x;
8552         ctx->y = r->y;
8553         ctx->z = r->z;
8554 
8555         /* Put infinity into result. */
8556         if (r != p) {
8557             r->infinity = p->infinity;
8558         }
8559         ctx->state = 1;
8560         break;
8561     case 1:
8562         /* T1 = Z * Z */
8563         sp_256_mont_sqr_avx2_4(ctx->t1, p->z, p256_mod, p256_mp_mod);
8564         ctx->state = 2;
8565         break;
8566     case 2:
8567         /* Z = Y * Z */
8568         sp_256_mont_mul_avx2_4(ctx->z, p->y, p->z, p256_mod, p256_mp_mod);
8569         ctx->state = 3;
8570         break;
8571     case 3:
8572         /* Z = 2Z */
8573         sp_256_mont_dbl_avx2_4(ctx->z, ctx->z, p256_mod);
8574         ctx->state = 4;
8575         break;
8576     case 4:
8577         /* T2 = X - T1 */
8578         sp_256_mont_sub_avx2_4(ctx->t2, p->x, ctx->t1, p256_mod);
8579         ctx->state = 5;
8580         break;
8581     case 5:
8582         /* T1 = X + T1 */
8583         sp_256_mont_add_avx2_4(ctx->t1, p->x, ctx->t1, p256_mod);
8584         ctx->state = 6;
8585         break;
8586     case 6:
8587         /* T2 = T1 * T2 */
8588         sp_256_mont_mul_avx2_4(ctx->t2, ctx->t1, ctx->t2, p256_mod, p256_mp_mod);
8589         ctx->state = 7;
8590         break;
8591     case 7:
8592         /* T1 = 3T2 */
8593         sp_256_mont_tpl_avx2_4(ctx->t1, ctx->t2, p256_mod);
8594         ctx->state = 8;
8595         break;
8596     case 8:
8597         /* Y = 2Y */
8598         sp_256_mont_dbl_avx2_4(ctx->y, p->y, p256_mod);
8599         ctx->state = 9;
8600         break;
8601     case 9:
8602         /* Y = Y * Y */
8603         sp_256_mont_sqr_avx2_4(ctx->y, ctx->y, p256_mod, p256_mp_mod);
8604         ctx->state = 10;
8605         break;
8606     case 10:
8607         /* T2 = Y * Y */
8608         sp_256_mont_sqr_avx2_4(ctx->t2, ctx->y, p256_mod, p256_mp_mod);
8609         ctx->state = 11;
8610         break;
8611     case 11:
8612         /* T2 = T2/2 */
8613         sp_256_div2_avx2_4(ctx->t2, ctx->t2, p256_mod);
8614         ctx->state = 12;
8615         break;
8616     case 12:
8617         /* Y = Y * X */
8618         sp_256_mont_mul_avx2_4(ctx->y, ctx->y, p->x, p256_mod, p256_mp_mod);
8619         ctx->state = 13;
8620         break;
8621     case 13:
8622         /* X = T1 * T1 */
8623         sp_256_mont_sqr_avx2_4(ctx->x, ctx->t1, p256_mod, p256_mp_mod);
8624         ctx->state = 14;
8625         break;
8626     case 14:
8627         /* X = X - Y */
8628         sp_256_mont_sub_avx2_4(ctx->x, ctx->x, ctx->y, p256_mod);
8629         ctx->state = 15;
8630         break;
8631     case 15:
8632         /* X = X - Y */
8633         sp_256_mont_sub_avx2_4(ctx->x, ctx->x, ctx->y, p256_mod);
8634         ctx->state = 16;
8635         break;
8636     case 16:
8637         /* Y = Y - X */
8638         sp_256_mont_sub_avx2_4(ctx->y, ctx->y, ctx->x, p256_mod);
8639         ctx->state = 17;
8640         break;
8641     case 17:
8642         /* Y = Y * T1 */
8643         sp_256_mont_mul_avx2_4(ctx->y, ctx->y, ctx->t1, p256_mod, p256_mp_mod);
8644         ctx->state = 18;
8645         break;
8646     case 18:
8647         /* Y = Y - T2 */
8648         sp_256_mont_sub_avx2_4(ctx->y, ctx->y, ctx->t2, p256_mod);
8649         ctx->state = 19;
8650         /* fall-through */
8651     case 19:
8652         err = MP_OKAY;
8653         break;
8654     }
8655 
8656     if (err == MP_OKAY && ctx->state != 19) {
8657         err = FP_WOULDBLOCK;
8658     }
8659 
8660     return err;
8661 }
8662 #endif /* WOLFSSL_SP_NONBLOCK */
8663 
sp_256_proj_point_dbl_avx2_4(sp_point_256 * r,const sp_point_256 * p,sp_digit * t)8664 static void sp_256_proj_point_dbl_avx2_4(sp_point_256* r, const sp_point_256* p, sp_digit* t)
8665 {
8666     sp_digit* t1 = t;
8667     sp_digit* t2 = t + 2*4;
8668     sp_digit* x;
8669     sp_digit* y;
8670     sp_digit* z;
8671 
8672     x = r->x;
8673     y = r->y;
8674     z = r->z;
8675     /* Put infinity into result. */
8676     if (r != p) {
8677         r->infinity = p->infinity;
8678     }
8679 
8680     /* T1 = Z * Z */
8681     sp_256_mont_sqr_avx2_4(t1, p->z, p256_mod, p256_mp_mod);
8682     /* Z = Y * Z */
8683     sp_256_mont_mul_avx2_4(z, p->y, p->z, p256_mod, p256_mp_mod);
8684     /* Z = 2Z */
8685     sp_256_mont_dbl_avx2_4(z, z, p256_mod);
8686     /* T2 = X - T1 */
8687     sp_256_mont_sub_avx2_4(t2, p->x, t1, p256_mod);
8688     /* T1 = X + T1 */
8689     sp_256_mont_add_avx2_4(t1, p->x, t1, p256_mod);
8690     /* T2 = T1 * T2 */
8691     sp_256_mont_mul_avx2_4(t2, t1, t2, p256_mod, p256_mp_mod);
8692     /* T1 = 3T2 */
8693     sp_256_mont_tpl_avx2_4(t1, t2, p256_mod);
8694     /* Y = 2Y */
8695     sp_256_mont_dbl_avx2_4(y, p->y, p256_mod);
8696     /* Y = Y * Y */
8697     sp_256_mont_sqr_avx2_4(y, y, p256_mod, p256_mp_mod);
8698     /* T2 = Y * Y */
8699     sp_256_mont_sqr_avx2_4(t2, y, p256_mod, p256_mp_mod);
8700     /* T2 = T2/2 */
8701     sp_256_div2_avx2_4(t2, t2, p256_mod);
8702     /* Y = Y * X */
8703     sp_256_mont_mul_avx2_4(y, y, p->x, p256_mod, p256_mp_mod);
8704     /* X = T1 * T1 */
8705     sp_256_mont_sqr_avx2_4(x, t1, p256_mod, p256_mp_mod);
8706     /* X = X - Y */
8707     sp_256_mont_sub_avx2_4(x, x, y, p256_mod);
8708     /* X = X - Y */
8709     sp_256_mont_sub_avx2_4(x, x, y, p256_mod);
8710     /* Y = Y - X */
8711     sp_256_mont_sub_avx2_4(y, y, x, p256_mod);
8712     /* Y = Y * T1 */
8713     sp_256_mont_mul_avx2_4(y, y, t1, p256_mod, p256_mp_mod);
8714     /* Y = Y - T2 */
8715     sp_256_mont_sub_avx2_4(y, y, t2, p256_mod);
8716 }
8717 
8718 /* Double the Montgomery form projective point p a number of times.
8719  *
8720  * r  Result of repeated doubling of point.
8721  * p  Point to double.
8722  * n  Number of times to double
8723  * t  Temporary ordinate data.
8724  */
sp_256_proj_point_dbl_n_avx2_4(sp_point_256 * p,int n,sp_digit * t)8725 static void sp_256_proj_point_dbl_n_avx2_4(sp_point_256* p, int n,
8726     sp_digit* t)
8727 {
8728     sp_digit* w = t;
8729     sp_digit* a = t + 2*4;
8730     sp_digit* b = t + 4*4;
8731     sp_digit* t1 = t + 6*4;
8732     sp_digit* t2 = t + 8*4;
8733     sp_digit* x;
8734     sp_digit* y;
8735     sp_digit* z;
8736 
8737     x = p->x;
8738     y = p->y;
8739     z = p->z;
8740 
8741     /* Y = 2*Y */
8742     sp_256_mont_dbl_avx2_4(y, y, p256_mod);
8743     /* W = Z^4 */
8744     sp_256_mont_sqr_avx2_4(w, z, p256_mod, p256_mp_mod);
8745     sp_256_mont_sqr_avx2_4(w, w, p256_mod, p256_mp_mod);
8746 
8747 #ifndef WOLFSSL_SP_SMALL
8748     while (--n > 0)
8749 #else
8750     while (--n >= 0)
8751 #endif
8752     {
8753         /* A = 3*(X^2 - W) */
8754         sp_256_mont_sqr_avx2_4(t1, x, p256_mod, p256_mp_mod);
8755         sp_256_mont_sub_avx2_4(t1, t1, w, p256_mod);
8756         sp_256_mont_tpl_avx2_4(a, t1, p256_mod);
8757         /* B = X*Y^2 */
8758         sp_256_mont_sqr_avx2_4(t1, y, p256_mod, p256_mp_mod);
8759         sp_256_mont_mul_avx2_4(b, t1, x, p256_mod, p256_mp_mod);
8760         /* X = A^2 - 2B */
8761         sp_256_mont_sqr_avx2_4(x, a, p256_mod, p256_mp_mod);
8762         sp_256_mont_dbl_avx2_4(t2, b, p256_mod);
8763         sp_256_mont_sub_avx2_4(x, x, t2, p256_mod);
8764         /* Z = Z*Y */
8765         sp_256_mont_mul_avx2_4(z, z, y, p256_mod, p256_mp_mod);
8766         /* t2 = Y^4 */
8767         sp_256_mont_sqr_avx2_4(t1, t1, p256_mod, p256_mp_mod);
8768 #ifdef WOLFSSL_SP_SMALL
8769         if (n != 0)
8770 #endif
8771         {
8772             /* W = W*Y^4 */
8773             sp_256_mont_mul_avx2_4(w, w, t1, p256_mod, p256_mp_mod);
8774         }
8775         /* y = 2*A*(B - X) - Y^4 */
8776         sp_256_mont_sub_avx2_4(y, b, x, p256_mod);
8777         sp_256_mont_mul_avx2_4(y, y, a, p256_mod, p256_mp_mod);
8778         sp_256_mont_dbl_avx2_4(y, y, p256_mod);
8779         sp_256_mont_sub_avx2_4(y, y, t1, p256_mod);
8780     }
8781 #ifndef WOLFSSL_SP_SMALL
8782     /* A = 3*(X^2 - W) */
8783     sp_256_mont_sqr_avx2_4(t1, x, p256_mod, p256_mp_mod);
8784     sp_256_mont_sub_avx2_4(t1, t1, w, p256_mod);
8785     sp_256_mont_tpl_avx2_4(a, t1, p256_mod);
8786     /* B = X*Y^2 */
8787     sp_256_mont_sqr_avx2_4(t1, y, p256_mod, p256_mp_mod);
8788     sp_256_mont_mul_avx2_4(b, t1, x, p256_mod, p256_mp_mod);
8789     /* X = A^2 - 2B */
8790     sp_256_mont_sqr_avx2_4(x, a, p256_mod, p256_mp_mod);
8791     sp_256_mont_dbl_avx2_4(t2, b, p256_mod);
8792     sp_256_mont_sub_avx2_4(x, x, t2, p256_mod);
8793     /* Z = Z*Y */
8794     sp_256_mont_mul_avx2_4(z, z, y, p256_mod, p256_mp_mod);
8795     /* t2 = Y^4 */
8796     sp_256_mont_sqr_avx2_4(t1, t1, p256_mod, p256_mp_mod);
8797     /* y = 2*A*(B - X) - Y^4 */
8798     sp_256_mont_sub_avx2_4(y, b, x, p256_mod);
8799     sp_256_mont_mul_avx2_4(y, y, a, p256_mod, p256_mp_mod);
8800     sp_256_mont_dbl_avx2_4(y, y, p256_mod);
8801     sp_256_mont_sub_avx2_4(y, y, t1, p256_mod);
8802 #endif
8803     /* Y = Y/2 */
8804     sp_256_div2_avx2_4(y, y, p256_mod);
8805 }
8806 
8807 /* Add two Montgomery form projective points.
8808  *
8809  * r  Result of addition.
8810  * p  First point to add.
8811  * q  Second point to add.
8812  * t  Temporary ordinate data.
8813  */
8814 
8815 #ifdef WOLFSSL_SP_NONBLOCK
8816 typedef struct sp_256_proj_point_add_avx2_4_ctx {
8817     int state;
8818     sp_256_proj_point_dbl_avx2_4_ctx dbl_ctx;
8819     const sp_point_256* ap[2];
8820     sp_point_256* rp[2];
8821     sp_digit* t1;
8822     sp_digit* t2;
8823     sp_digit* t3;
8824     sp_digit* t4;
8825     sp_digit* t5;
8826     sp_digit* x;
8827     sp_digit* y;
8828     sp_digit* z;
8829 } sp_256_proj_point_add_avx2_4_ctx;
8830 
sp_256_proj_point_add_avx2_4_nb(sp_ecc_ctx_t * sp_ctx,sp_point_256 * r,const sp_point_256 * p,const sp_point_256 * q,sp_digit * t)8831 static int sp_256_proj_point_add_avx2_4_nb(sp_ecc_ctx_t* sp_ctx, sp_point_256* r,
8832     const sp_point_256* p, const sp_point_256* q, sp_digit* t)
8833 {
8834     int err = FP_WOULDBLOCK;
8835     sp_256_proj_point_add_avx2_4_ctx* ctx = (sp_256_proj_point_add_avx2_4_ctx*)sp_ctx->data;
8836 
8837     /* Ensure only the first point is the same as the result. */
8838     if (q == r) {
8839         const sp_point_256* a = p;
8840         p = q;
8841         q = a;
8842     }
8843 
8844     typedef char ctx_size_test[sizeof(sp_256_proj_point_add_avx2_4_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
8845     (void)sizeof(ctx_size_test);
8846 
8847     switch (ctx->state) {
8848     case 0: /* INIT */
8849         ctx->t1 = t;
8850         ctx->t2 = t + 2*4;
8851         ctx->t3 = t + 4*4;
8852         ctx->t4 = t + 6*4;
8853         ctx->t5 = t + 8*4;
8854 
8855         ctx->state = 1;
8856         break;
8857     case 1:
8858         /* Check double */
8859         (void)sp_256_sub_avx2_4(ctx->t1, p256_mod, q->y);
8860         sp_256_norm_avx2_4(ctx->t1);
8861         if ((sp_256_cmp_equal_avx2_4(p->x, q->x) & sp_256_cmp_equal_avx2_4(p->z, q->z) &
8862             (sp_256_cmp_equal_avx2_4(p->y, q->y) | sp_256_cmp_equal_avx2_4(p->y, ctx->t1))) != 0)
8863         {
8864             XMEMSET(&ctx->dbl_ctx, 0, sizeof(ctx->dbl_ctx));
8865             ctx->state = 2;
8866         }
8867         else {
8868             ctx->state = 3;
8869         }
8870         break;
8871     case 2:
8872         err = sp_256_proj_point_dbl_avx2_4_nb((sp_ecc_ctx_t*)&ctx->dbl_ctx, r, p, t);
8873         if (err == MP_OKAY)
8874             ctx->state = 27; /* done */
8875         break;
8876     case 3:
8877     {
8878         int i;
8879         ctx->rp[0] = r;
8880 
8881         /*lint allow cast to different type of pointer*/
8882         ctx->rp[1] = (sp_point_256*)t; /*lint !e9087 !e740*/
8883         XMEMSET(ctx->rp[1], 0, sizeof(sp_point_256));
8884         ctx->x = ctx->rp[p->infinity | q->infinity]->x;
8885         ctx->y = ctx->rp[p->infinity | q->infinity]->y;
8886         ctx->z = ctx->rp[p->infinity | q->infinity]->z;
8887 
8888         ctx->ap[0] = p;
8889         ctx->ap[1] = q;
8890         for (i=0; i<4; i++) {
8891             r->x[i] = ctx->ap[p->infinity]->x[i];
8892         }
8893         for (i=0; i<4; i++) {
8894             r->y[i] = ctx->ap[p->infinity]->y[i];
8895         }
8896         for (i=0; i<4; i++) {
8897             r->z[i] = ctx->ap[p->infinity]->z[i];
8898         }
8899         r->infinity = ctx->ap[p->infinity]->infinity;
8900 
8901         ctx->state = 4;
8902         break;
8903     }
8904     case 4:
8905         /* U1 = X1*Z2^2 */
8906         sp_256_mont_sqr_avx2_4(ctx->t1, q->z, p256_mod, p256_mp_mod);
8907         ctx->state = 5;
8908         break;
8909     case 5:
8910         sp_256_mont_mul_avx2_4(ctx->t3, ctx->t1, q->z, p256_mod, p256_mp_mod);
8911         ctx->state = 6;
8912         break;
8913     case 6:
8914         sp_256_mont_mul_avx2_4(ctx->t1, ctx->t1, ctx->x, p256_mod, p256_mp_mod);
8915         ctx->state = 7;
8916         break;
8917     case 7:
8918         /* U2 = X2*Z1^2 */
8919         sp_256_mont_sqr_avx2_4(ctx->t2, ctx->z, p256_mod, p256_mp_mod);
8920         ctx->state = 8;
8921         break;
8922     case 8:
8923         sp_256_mont_mul_avx2_4(ctx->t4, ctx->t2, ctx->z, p256_mod, p256_mp_mod);
8924         ctx->state = 9;
8925         break;
8926     case 9:
8927         sp_256_mont_mul_avx2_4(ctx->t2, ctx->t2, q->x, p256_mod, p256_mp_mod);
8928         ctx->state = 10;
8929         break;
8930     case 10:
8931         /* S1 = Y1*Z2^3 */
8932         sp_256_mont_mul_avx2_4(ctx->t3, ctx->t3, ctx->y, p256_mod, p256_mp_mod);
8933         ctx->state = 11;
8934         break;
8935     case 11:
8936         /* S2 = Y2*Z1^3 */
8937         sp_256_mont_mul_avx2_4(ctx->t4, ctx->t4, q->y, p256_mod, p256_mp_mod);
8938         ctx->state = 12;
8939         break;
8940     case 12:
8941         /* H = U2 - U1 */
8942         sp_256_mont_sub_avx2_4(ctx->t2, ctx->t2, ctx->t1, p256_mod);
8943         ctx->state = 13;
8944         break;
8945     case 13:
8946         /* R = S2 - S1 */
8947         sp_256_mont_sub_avx2_4(ctx->t4, ctx->t4, ctx->t3, p256_mod);
8948         ctx->state = 14;
8949         break;
8950     case 14:
8951         /* Z3 = H*Z1*Z2 */
8952         sp_256_mont_mul_avx2_4(ctx->z, ctx->z, q->z, p256_mod, p256_mp_mod);
8953         ctx->state = 15;
8954         break;
8955     case 15:
8956         sp_256_mont_mul_avx2_4(ctx->z, ctx->z, ctx->t2, p256_mod, p256_mp_mod);
8957         ctx->state = 16;
8958         break;
8959     case 16:
8960         /* X3 = R^2 - H^3 - 2*U1*H^2 */
8961         sp_256_mont_sqr_avx2_4(ctx->x, ctx->t4, p256_mod, p256_mp_mod);
8962         ctx->state = 17;
8963         break;
8964     case 17:
8965         sp_256_mont_sqr_avx2_4(ctx->t5, ctx->t2, p256_mod, p256_mp_mod);
8966         ctx->state = 18;
8967         break;
8968     case 18:
8969         sp_256_mont_mul_avx2_4(ctx->y, ctx->t1, ctx->t5, p256_mod, p256_mp_mod);
8970         ctx->state = 19;
8971         break;
8972     case 19:
8973         sp_256_mont_mul_avx2_4(ctx->t5, ctx->t5, ctx->t2, p256_mod, p256_mp_mod);
8974         ctx->state = 20;
8975         break;
8976     case 20:
8977         sp_256_mont_sub_avx2_4(ctx->x, ctx->x, ctx->t5, p256_mod);
8978         ctx->state = 21;
8979         break;
8980     case 21:
8981         sp_256_mont_dbl_avx2_4(ctx->t1, ctx->y, p256_mod);
8982         ctx->state = 22;
8983         break;
8984     case 22:
8985         sp_256_mont_sub_avx2_4(ctx->x, ctx->x, ctx->t1, p256_mod);
8986         ctx->state = 23;
8987         break;
8988     case 23:
8989         /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
8990         sp_256_mont_sub_avx2_4(ctx->y, ctx->y, ctx->x, p256_mod);
8991         ctx->state = 24;
8992         break;
8993     case 24:
8994         sp_256_mont_mul_avx2_4(ctx->y, ctx->y, ctx->t4, p256_mod, p256_mp_mod);
8995         ctx->state = 25;
8996         break;
8997     case 25:
8998         sp_256_mont_mul_avx2_4(ctx->t5, ctx->t5, ctx->t3, p256_mod, p256_mp_mod);
8999         ctx->state = 26;
9000         break;
9001     case 26:
9002         sp_256_mont_sub_avx2_4(ctx->y, ctx->y, ctx->t5, p256_mod);
9003         ctx->state = 27;
9004         /* fall-through */
9005     case 27:
9006         err = MP_OKAY;
9007         break;
9008     }
9009 
9010     if (err == MP_OKAY && ctx->state != 27) {
9011         err = FP_WOULDBLOCK;
9012     }
9013     return err;
9014 }
9015 #endif /* WOLFSSL_SP_NONBLOCK */
9016 
sp_256_proj_point_add_avx2_4(sp_point_256 * r,const sp_point_256 * p,const sp_point_256 * q,sp_digit * t)9017 static void sp_256_proj_point_add_avx2_4(sp_point_256* r,
9018         const sp_point_256* p, const sp_point_256* q, sp_digit* t)
9019 {
9020     const sp_point_256* ap[2];
9021     sp_point_256* rp[2];
9022     sp_digit* t1 = t;
9023     sp_digit* t2 = t + 2*4;
9024     sp_digit* t3 = t + 4*4;
9025     sp_digit* t4 = t + 6*4;
9026     sp_digit* t5 = t + 8*4;
9027     sp_digit* x;
9028     sp_digit* y;
9029     sp_digit* z;
9030     int i;
9031 
9032     /* Ensure only the first point is the same as the result. */
9033     if (q == r) {
9034         const sp_point_256* a = p;
9035         p = q;
9036         q = a;
9037     }
9038 
9039     /* Check double */
9040     (void)sp_256_sub_4(t1, p256_mod, q->y);
9041     sp_256_norm_4(t1);
9042     if ((sp_256_cmp_equal_4(p->x, q->x) & sp_256_cmp_equal_4(p->z, q->z) &
9043         (sp_256_cmp_equal_4(p->y, q->y) | sp_256_cmp_equal_4(p->y, t1))) != 0) {
9044         sp_256_proj_point_dbl_avx2_4(r, p, t);
9045     }
9046     else {
9047         rp[0] = r;
9048 
9049         /*lint allow cast to different type of pointer*/
9050         rp[1] = (sp_point_256*)t; /*lint !e9087 !e740*/
9051         XMEMSET(rp[1], 0, sizeof(sp_point_256));
9052         x = rp[p->infinity | q->infinity]->x;
9053         y = rp[p->infinity | q->infinity]->y;
9054         z = rp[p->infinity | q->infinity]->z;
9055 
9056         ap[0] = p;
9057         ap[1] = q;
9058         for (i=0; i<4; i++) {
9059             r->x[i] = ap[p->infinity]->x[i];
9060         }
9061         for (i=0; i<4; i++) {
9062             r->y[i] = ap[p->infinity]->y[i];
9063         }
9064         for (i=0; i<4; i++) {
9065             r->z[i] = ap[p->infinity]->z[i];
9066         }
9067         r->infinity = ap[p->infinity]->infinity;
9068 
9069         /* U1 = X1*Z2^2 */
9070         sp_256_mont_sqr_avx2_4(t1, q->z, p256_mod, p256_mp_mod);
9071         sp_256_mont_mul_avx2_4(t3, t1, q->z, p256_mod, p256_mp_mod);
9072         sp_256_mont_mul_avx2_4(t1, t1, x, p256_mod, p256_mp_mod);
9073         /* U2 = X2*Z1^2 */
9074         sp_256_mont_sqr_avx2_4(t2, z, p256_mod, p256_mp_mod);
9075         sp_256_mont_mul_avx2_4(t4, t2, z, p256_mod, p256_mp_mod);
9076         sp_256_mont_mul_avx2_4(t2, t2, q->x, p256_mod, p256_mp_mod);
9077         /* S1 = Y1*Z2^3 */
9078         sp_256_mont_mul_avx2_4(t3, t3, y, p256_mod, p256_mp_mod);
9079         /* S2 = Y2*Z1^3 */
9080         sp_256_mont_mul_avx2_4(t4, t4, q->y, p256_mod, p256_mp_mod);
9081         /* H = U2 - U1 */
9082         sp_256_mont_sub_avx2_4(t2, t2, t1, p256_mod);
9083         /* R = S2 - S1 */
9084         sp_256_mont_sub_avx2_4(t4, t4, t3, p256_mod);
9085         /* Z3 = H*Z1*Z2 */
9086         sp_256_mont_mul_avx2_4(z, z, q->z, p256_mod, p256_mp_mod);
9087         sp_256_mont_mul_avx2_4(z, z, t2, p256_mod, p256_mp_mod);
9088         /* X3 = R^2 - H^3 - 2*U1*H^2 */
9089         sp_256_mont_sqr_avx2_4(x, t4, p256_mod, p256_mp_mod);
9090         sp_256_mont_sqr_avx2_4(t5, t2, p256_mod, p256_mp_mod);
9091         sp_256_mont_mul_avx2_4(y, t1, t5, p256_mod, p256_mp_mod);
9092         sp_256_mont_mul_avx2_4(t5, t5, t2, p256_mod, p256_mp_mod);
9093         sp_256_mont_sub_avx2_4(x, x, t5, p256_mod);
9094         sp_256_mont_dbl_avx2_4(t1, y, p256_mod);
9095         sp_256_mont_sub_avx2_4(x, x, t1, p256_mod);
9096         /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
9097         sp_256_mont_sub_avx2_4(y, y, x, p256_mod);
9098         sp_256_mont_mul_avx2_4(y, y, t4, p256_mod, p256_mp_mod);
9099         sp_256_mont_mul_avx2_4(t5, t5, t3, p256_mod, p256_mp_mod);
9100         sp_256_mont_sub_avx2_4(y, y, t5, p256_mod);
9101     }
9102 }
9103 
9104 /* Double the Montgomery form projective point p a number of times.
9105  *
9106  * r  Result of repeated doubling of point.
9107  * p  Point to double.
9108  * n  Number of times to double
9109  * t  Temporary ordinate data.
9110  */
sp_256_proj_point_dbl_n_store_avx2_4(sp_point_256 * r,const sp_point_256 * p,int n,int m,sp_digit * t)9111 static void sp_256_proj_point_dbl_n_store_avx2_4(sp_point_256* r,
9112         const sp_point_256* p, int n, int m, sp_digit* t)
9113 {
9114     sp_digit* w = t;
9115     sp_digit* a = t + 2*4;
9116     sp_digit* b = t + 4*4;
9117     sp_digit* t1 = t + 6*4;
9118     sp_digit* t2 = t + 8*4;
9119     sp_digit* x = r[2*m].x;
9120     sp_digit* y = r[(1<<n)*m].y;
9121     sp_digit* z = r[2*m].z;
9122     int i;
9123     int j;
9124 
9125     for (i=0; i<4; i++) {
9126         x[i] = p->x[i];
9127     }
9128     for (i=0; i<4; i++) {
9129         y[i] = p->y[i];
9130     }
9131     for (i=0; i<4; i++) {
9132         z[i] = p->z[i];
9133     }
9134 
9135     /* Y = 2*Y */
9136     sp_256_mont_dbl_avx2_4(y, y, p256_mod);
9137     /* W = Z^4 */
9138     sp_256_mont_sqr_avx2_4(w, z, p256_mod, p256_mp_mod);
9139     sp_256_mont_sqr_avx2_4(w, w, p256_mod, p256_mp_mod);
9140     j = m;
9141     for (i=1; i<=n; i++) {
9142         j *= 2;
9143 
9144         /* A = 3*(X^2 - W) */
9145         sp_256_mont_sqr_avx2_4(t1, x, p256_mod, p256_mp_mod);
9146         sp_256_mont_sub_avx2_4(t1, t1, w, p256_mod);
9147         sp_256_mont_tpl_avx2_4(a, t1, p256_mod);
9148         /* B = X*Y^2 */
9149         sp_256_mont_sqr_avx2_4(t2, y, p256_mod, p256_mp_mod);
9150         sp_256_mont_mul_avx2_4(b, t2, x, p256_mod, p256_mp_mod);
9151         x = r[j].x;
9152         /* X = A^2 - 2B */
9153         sp_256_mont_sqr_avx2_4(x, a, p256_mod, p256_mp_mod);
9154         sp_256_mont_dbl_avx2_4(t1, b, p256_mod);
9155         sp_256_mont_sub_avx2_4(x, x, t1, p256_mod);
9156         /* Z = Z*Y */
9157         sp_256_mont_mul_avx2_4(r[j].z, z, y, p256_mod, p256_mp_mod);
9158         z = r[j].z;
9159         /* t2 = Y^4 */
9160         sp_256_mont_sqr_avx2_4(t2, t2, p256_mod, p256_mp_mod);
9161         if (i != n) {
9162             /* W = W*Y^4 */
9163             sp_256_mont_mul_avx2_4(w, w, t2, p256_mod, p256_mp_mod);
9164         }
9165         /* y = 2*A*(B - X) - Y^4 */
9166         sp_256_mont_sub_avx2_4(y, b, x, p256_mod);
9167         sp_256_mont_mul_avx2_4(y, y, a, p256_mod, p256_mp_mod);
9168         sp_256_mont_dbl_avx2_4(y, y, p256_mod);
9169         sp_256_mont_sub_avx2_4(y, y, t2, p256_mod);
9170 
9171         /* Y = Y/2 */
9172         sp_256_div2_avx2_4(r[j].y, y, p256_mod);
9173         r[j].infinity = 0;
9174     }
9175 }
9176 
9177 /* Add two Montgomery form projective points.
9178  *
9179  * ra  Result of addition.
9180  * rs  Result of subtraction.
9181  * p   First point to add.
9182  * q   Second point to add.
9183  * t   Temporary ordinate data.
9184  */
sp_256_proj_point_add_sub_avx2_4(sp_point_256 * ra,sp_point_256 * rs,const sp_point_256 * p,const sp_point_256 * q,sp_digit * t)9185 static void sp_256_proj_point_add_sub_avx2_4(sp_point_256* ra,
9186         sp_point_256* rs, const sp_point_256* p, const sp_point_256* q,
9187         sp_digit* t)
9188 {
9189     sp_digit* t1 = t;
9190     sp_digit* t2 = t + 2*4;
9191     sp_digit* t3 = t + 4*4;
9192     sp_digit* t4 = t + 6*4;
9193     sp_digit* t5 = t + 8*4;
9194     sp_digit* t6 = t + 10*4;
9195     sp_digit* x = ra->x;
9196     sp_digit* y = ra->y;
9197     sp_digit* z = ra->z;
9198     sp_digit* xs = rs->x;
9199     sp_digit* ys = rs->y;
9200     sp_digit* zs = rs->z;
9201 
9202 
9203     XMEMCPY(x, p->x, sizeof(p->x) / 2);
9204     XMEMCPY(y, p->y, sizeof(p->y) / 2);
9205     XMEMCPY(z, p->z, sizeof(p->z) / 2);
9206     ra->infinity = 0;
9207     rs->infinity = 0;
9208 
9209     /* U1 = X1*Z2^2 */
9210     sp_256_mont_sqr_avx2_4(t1, q->z, p256_mod, p256_mp_mod);
9211     sp_256_mont_mul_avx2_4(t3, t1, q->z, p256_mod, p256_mp_mod);
9212     sp_256_mont_mul_avx2_4(t1, t1, x, p256_mod, p256_mp_mod);
9213     /* U2 = X2*Z1^2 */
9214     sp_256_mont_sqr_avx2_4(t2, z, p256_mod, p256_mp_mod);
9215     sp_256_mont_mul_avx2_4(t4, t2, z, p256_mod, p256_mp_mod);
9216     sp_256_mont_mul_avx2_4(t2, t2, q->x, p256_mod, p256_mp_mod);
9217     /* S1 = Y1*Z2^3 */
9218     sp_256_mont_mul_avx2_4(t3, t3, y, p256_mod, p256_mp_mod);
9219     /* S2 = Y2*Z1^3 */
9220     sp_256_mont_mul_avx2_4(t4, t4, q->y, p256_mod, p256_mp_mod);
9221     /* H = U2 - U1 */
9222     sp_256_mont_sub_avx2_4(t2, t2, t1, p256_mod);
9223     /* RS = S2 + S1 */
9224     sp_256_mont_add_avx2_4(t6, t4, t3, p256_mod);
9225     /* R = S2 - S1 */
9226     sp_256_mont_sub_avx2_4(t4, t4, t3, p256_mod);
9227     /* Z3 = H*Z1*Z2 */
9228     /* ZS = H*Z1*Z2 */
9229     sp_256_mont_mul_avx2_4(z, z, q->z, p256_mod, p256_mp_mod);
9230     sp_256_mont_mul_avx2_4(z, z, t2, p256_mod, p256_mp_mod);
9231     XMEMCPY(zs, z, sizeof(p->z)/2);
9232     /* X3 = R^2 - H^3 - 2*U1*H^2 */
9233     /* XS = RS^2 - H^3 - 2*U1*H^2 */
9234     sp_256_mont_sqr_avx2_4(x, t4, p256_mod, p256_mp_mod);
9235     sp_256_mont_sqr_avx2_4(xs, t6, p256_mod, p256_mp_mod);
9236     sp_256_mont_sqr_avx2_4(t5, t2, p256_mod, p256_mp_mod);
9237     sp_256_mont_mul_avx2_4(y, t1, t5, p256_mod, p256_mp_mod);
9238     sp_256_mont_mul_avx2_4(t5, t5, t2, p256_mod, p256_mp_mod);
9239     sp_256_mont_sub_avx2_4(x, x, t5, p256_mod);
9240     sp_256_mont_sub_avx2_4(xs, xs, t5, p256_mod);
9241     sp_256_mont_dbl_avx2_4(t1, y, p256_mod);
9242     sp_256_mont_sub_avx2_4(x, x, t1, p256_mod);
9243     sp_256_mont_sub_avx2_4(xs, xs, t1, p256_mod);
9244     /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
9245     /* YS = -RS*(U1*H^2 - XS) - S1*H^3 */
9246     sp_256_mont_sub_avx2_4(ys, y, xs, p256_mod);
9247     sp_256_mont_sub_avx2_4(y, y, x, p256_mod);
9248     sp_256_mont_mul_avx2_4(y, y, t4, p256_mod, p256_mp_mod);
9249     sp_256_sub_4(t6, p256_mod, t6);
9250     sp_256_mont_mul_avx2_4(ys, ys, t6, p256_mod, p256_mp_mod);
9251     sp_256_mont_mul_avx2_4(t5, t5, t3, p256_mod, p256_mp_mod);
9252     sp_256_mont_sub_avx2_4(y, y, t5, p256_mod);
9253     sp_256_mont_sub_avx2_4(ys, ys, t5, p256_mod);
9254 }
9255 
9256 /* Multiply the point by the scalar and return the result.
9257  * If map is true then convert result to affine coordinates.
9258  *
9259  * Window technique of 6 bits. (Add-Sub variation.)
9260  * Calculate 0..32 times the point. Use function that adds and
9261  * subtracts the same two points.
9262  * Recode to add or subtract one of the computed points.
9263  * Double to push up.
9264  * NOT a sliding window.
9265  *
9266  * r     Resulting point.
9267  * g     Point to multiply.
9268  * k     Scalar to multiply by.
9269  * map   Indicates whether to convert result to affine.
9270  * ct    Constant time required.
9271  * heap  Heap to use for allocation.
9272  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
9273  */
sp_256_ecc_mulmod_win_add_sub_avx2_4(sp_point_256 * r,const sp_point_256 * g,const sp_digit * k,int map,int ct,void * heap)9274 static int sp_256_ecc_mulmod_win_add_sub_avx2_4(sp_point_256* r, const sp_point_256* g,
9275         const sp_digit* k, int map, int ct, void* heap)
9276 {
9277 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
9278     sp_point_256* t = NULL;
9279     sp_digit* tmp = NULL;
9280 #else
9281     sp_point_256 t[33+2];
9282     sp_digit tmp[2 * 4 * 6];
9283 #endif
9284     sp_point_256* rt = NULL;
9285     sp_point_256* p = NULL;
9286     sp_digit* negy;
9287     int i;
9288     ecc_recode_256 v[43];
9289     int err = MP_OKAY;
9290 
9291     /* Constant time used for cache attack resistance implementation. */
9292     (void)ct;
9293     (void)heap;
9294 
9295 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
9296     t = (sp_point_256*)XMALLOC(sizeof(sp_point_256) *
9297         (33+2), heap, DYNAMIC_TYPE_ECC);
9298     if (t == NULL)
9299         err = MEMORY_E;
9300     if (err == MP_OKAY) {
9301         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 4 * 6,
9302                                  heap, DYNAMIC_TYPE_ECC);
9303         if (tmp == NULL)
9304             err = MEMORY_E;
9305     }
9306 #endif
9307 
9308     if (err == MP_OKAY) {
9309         rt = t + 33;
9310         p  = t + 33+1;
9311 
9312         /* t[0] = {0, 0, 1} * norm */
9313         XMEMSET(&t[0], 0, sizeof(t[0]));
9314         t[0].infinity = 1;
9315         /* t[1] = {g->x, g->y, g->z} * norm */
9316         err = sp_256_mod_mul_norm_avx2_4(t[1].x, g->x, p256_mod);
9317     }
9318     if (err == MP_OKAY) {
9319         err = sp_256_mod_mul_norm_avx2_4(t[1].y, g->y, p256_mod);
9320     }
9321     if (err == MP_OKAY) {
9322         err = sp_256_mod_mul_norm_avx2_4(t[1].z, g->z, p256_mod);
9323     }
9324 
9325     if (err == MP_OKAY) {
9326         t[1].infinity = 0;
9327         /* t[2] ... t[32]  */
9328         sp_256_proj_point_dbl_n_store_avx2_4(t, &t[ 1], 5, 1, tmp);
9329         sp_256_proj_point_add_avx2_4(&t[ 3], &t[ 2], &t[ 1], tmp);
9330         sp_256_proj_point_dbl_avx2_4(&t[ 6], &t[ 3], tmp);
9331         sp_256_proj_point_add_sub_avx2_4(&t[ 7], &t[ 5], &t[ 6], &t[ 1], tmp);
9332         sp_256_proj_point_dbl_avx2_4(&t[10], &t[ 5], tmp);
9333         sp_256_proj_point_add_sub_avx2_4(&t[11], &t[ 9], &t[10], &t[ 1], tmp);
9334         sp_256_proj_point_dbl_avx2_4(&t[12], &t[ 6], tmp);
9335         sp_256_proj_point_dbl_avx2_4(&t[14], &t[ 7], tmp);
9336         sp_256_proj_point_add_sub_avx2_4(&t[15], &t[13], &t[14], &t[ 1], tmp);
9337         sp_256_proj_point_dbl_avx2_4(&t[18], &t[ 9], tmp);
9338         sp_256_proj_point_add_sub_avx2_4(&t[19], &t[17], &t[18], &t[ 1], tmp);
9339         sp_256_proj_point_dbl_avx2_4(&t[20], &t[10], tmp);
9340         sp_256_proj_point_dbl_avx2_4(&t[22], &t[11], tmp);
9341         sp_256_proj_point_add_sub_avx2_4(&t[23], &t[21], &t[22], &t[ 1], tmp);
9342         sp_256_proj_point_dbl_avx2_4(&t[24], &t[12], tmp);
9343         sp_256_proj_point_dbl_avx2_4(&t[26], &t[13], tmp);
9344         sp_256_proj_point_add_sub_avx2_4(&t[27], &t[25], &t[26], &t[ 1], tmp);
9345         sp_256_proj_point_dbl_avx2_4(&t[28], &t[14], tmp);
9346         sp_256_proj_point_dbl_avx2_4(&t[30], &t[15], tmp);
9347         sp_256_proj_point_add_sub_avx2_4(&t[31], &t[29], &t[30], &t[ 1], tmp);
9348 
9349         negy = t[0].y;
9350 
9351         sp_256_ecc_recode_6_4(k, v);
9352 
9353         i = 42;
9354     #ifndef WC_NO_CACHE_RESISTANT
9355         if (ct) {
9356             sp_256_get_point_33_avx2_4(rt, t, v[i].i);
9357             rt->infinity = !v[i].i;
9358         }
9359         else
9360     #endif
9361         {
9362             XMEMCPY(rt, &t[v[i].i], sizeof(sp_point_256));
9363         }
9364         for (--i; i>=0; i--) {
9365             sp_256_proj_point_dbl_n_avx2_4(rt, 6, tmp);
9366 
9367         #ifndef WC_NO_CACHE_RESISTANT
9368             if (ct) {
9369                 sp_256_get_point_33_avx2_4(p, t, v[i].i);
9370                 p->infinity = !v[i].i;
9371             }
9372             else
9373         #endif
9374             {
9375                 XMEMCPY(p, &t[v[i].i], sizeof(sp_point_256));
9376             }
9377             sp_256_sub_4(negy, p256_mod, p->y);
9378             sp_256_norm_4(negy);
9379             sp_256_cond_copy_4(p->y, negy, (sp_digit)0 - v[i].neg);
9380             sp_256_proj_point_add_avx2_4(rt, rt, p, tmp);
9381         }
9382 
9383         if (map != 0) {
9384             sp_256_map_avx2_4(r, rt, tmp);
9385         }
9386         else {
9387             XMEMCPY(r, rt, sizeof(sp_point_256));
9388         }
9389     }
9390 
9391 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
9392     if (t != NULL)
9393         XFREE(t, heap, DYNAMIC_TYPE_ECC);
9394     if (tmp != NULL)
9395         XFREE(tmp, heap, DYNAMIC_TYPE_ECC);
9396 #endif
9397 
9398     return err;
9399 }
9400 
9401 #endif /* HAVE_INTEL_AVX2 */
9402 /* A table entry for pre-computed points. */
9403 typedef struct sp_table_entry_256 {
9404     sp_digit x[4];
9405     sp_digit y[4];
9406 } sp_table_entry_256;
9407 
9408 #if defined(FP_ECC) || defined(WOLFSSL_SP_SMALL)
9409 #endif /* FP_ECC | WOLFSSL_SP_SMALL */
9410 /* Add two Montgomery form projective points. The second point has a q value of
9411  * one.
9412  * Only the first point can be the same pointer as the result point.
9413  *
9414  * r  Result of addition.
9415  * p  First point to add.
9416  * q  Second point to add.
9417  * t  Temporary ordinate data.
9418  */
sp_256_proj_point_add_qz1_4(sp_point_256 * r,const sp_point_256 * p,const sp_point_256 * q,sp_digit * t)9419 static void sp_256_proj_point_add_qz1_4(sp_point_256* r, const sp_point_256* p,
9420         const sp_point_256* q, sp_digit* t)
9421 {
9422     const sp_point_256* ap[2];
9423     sp_point_256* rp[2];
9424     sp_digit* t1 = t;
9425     sp_digit* t2 = t + 2*4;
9426     sp_digit* t3 = t + 4*4;
9427     sp_digit* t4 = t + 6*4;
9428     sp_digit* t5 = t + 8*4;
9429     sp_digit* x;
9430     sp_digit* y;
9431     sp_digit* z;
9432     int i;
9433 
9434     /* Check double */
9435     (void)sp_256_sub_4(t1, p256_mod, q->y);
9436     sp_256_norm_4(t1);
9437     if ((sp_256_cmp_equal_4(p->x, q->x) & sp_256_cmp_equal_4(p->z, q->z) &
9438         (sp_256_cmp_equal_4(p->y, q->y) | sp_256_cmp_equal_4(p->y, t1))) != 0) {
9439         sp_256_proj_point_dbl_4(r, p, t);
9440     }
9441     else {
9442         rp[0] = r;
9443 
9444         /*lint allow cast to different type of pointer*/
9445         rp[1] = (sp_point_256*)t; /*lint !e9087 !e740*/
9446         XMEMSET(rp[1], 0, sizeof(sp_point_256));
9447         x = rp[p->infinity | q->infinity]->x;
9448         y = rp[p->infinity | q->infinity]->y;
9449         z = rp[p->infinity | q->infinity]->z;
9450 
9451         ap[0] = p;
9452         ap[1] = q;
9453         for (i=0; i<4; i++) {
9454             r->x[i] = ap[p->infinity]->x[i];
9455         }
9456         for (i=0; i<4; i++) {
9457             r->y[i] = ap[p->infinity]->y[i];
9458         }
9459         for (i=0; i<4; i++) {
9460             r->z[i] = ap[p->infinity]->z[i];
9461         }
9462         r->infinity = ap[p->infinity]->infinity;
9463 
9464         /* U2 = X2*Z1^2 */
9465         sp_256_mont_sqr_4(t2, z, p256_mod, p256_mp_mod);
9466         sp_256_mont_mul_4(t4, t2, z, p256_mod, p256_mp_mod);
9467         sp_256_mont_mul_4(t2, t2, q->x, p256_mod, p256_mp_mod);
9468         /* S2 = Y2*Z1^3 */
9469         sp_256_mont_mul_4(t4, t4, q->y, p256_mod, p256_mp_mod);
9470         /* H = U2 - X1 */
9471         sp_256_mont_sub_4(t2, t2, x, p256_mod);
9472         /* R = S2 - Y1 */
9473         sp_256_mont_sub_4(t4, t4, y, p256_mod);
9474         /* Z3 = H*Z1 */
9475         sp_256_mont_mul_4(z, z, t2, p256_mod, p256_mp_mod);
9476         /* X3 = R^2 - H^3 - 2*X1*H^2 */
9477         sp_256_mont_sqr_4(t1, t4, p256_mod, p256_mp_mod);
9478         sp_256_mont_sqr_4(t5, t2, p256_mod, p256_mp_mod);
9479         sp_256_mont_mul_4(t3, x, t5, p256_mod, p256_mp_mod);
9480         sp_256_mont_mul_4(t5, t5, t2, p256_mod, p256_mp_mod);
9481         sp_256_mont_sub_4(x, t1, t5, p256_mod);
9482         sp_256_mont_dbl_4(t1, t3, p256_mod);
9483         sp_256_mont_sub_4(x, x, t1, p256_mod);
9484         /* Y3 = R*(X1*H^2 - X3) - Y1*H^3 */
9485         sp_256_mont_sub_4(t3, t3, x, p256_mod);
9486         sp_256_mont_mul_4(t3, t3, t4, p256_mod, p256_mp_mod);
9487         sp_256_mont_mul_4(t5, t5, y, p256_mod, p256_mp_mod);
9488         sp_256_mont_sub_4(y, t3, t5, p256_mod);
9489     }
9490 }
9491 
9492 #ifdef FP_ECC
9493 /* Convert the projective point to affine.
9494  * Ordinates are in Montgomery form.
9495  *
9496  * a  Point to convert.
9497  * t  Temporary data.
9498  */
sp_256_proj_to_affine_4(sp_point_256 * a,sp_digit * t)9499 static void sp_256_proj_to_affine_4(sp_point_256* a, sp_digit* t)
9500 {
9501     sp_digit* t1 = t;
9502     sp_digit* t2 = t + 2 * 4;
9503     sp_digit* tmp = t + 4 * 4;
9504 
9505     sp_256_mont_inv_4(t1, a->z, tmp);
9506 
9507     sp_256_mont_sqr_4(t2, t1, p256_mod, p256_mp_mod);
9508     sp_256_mont_mul_4(t1, t2, t1, p256_mod, p256_mp_mod);
9509 
9510     sp_256_mont_mul_4(a->x, a->x, t2, p256_mod, p256_mp_mod);
9511     sp_256_mont_mul_4(a->y, a->y, t1, p256_mod, p256_mp_mod);
9512     XMEMCPY(a->z, p256_norm_mod, sizeof(p256_norm_mod));
9513 }
9514 
9515 /* Generate the pre-computed table of points for the base point.
9516  *
9517  * width = 6
9518  * 64 entries
9519  * 42 bits between
9520  *
9521  * a      The base point.
9522  * table  Place to store generated point data.
9523  * tmp    Temporary data.
9524  * heap  Heap to use for allocation.
9525  */
sp_256_gen_stripe_table_4(const sp_point_256 * a,sp_table_entry_256 * table,sp_digit * tmp,void * heap)9526 static int sp_256_gen_stripe_table_4(const sp_point_256* a,
9527         sp_table_entry_256* table, sp_digit* tmp, void* heap)
9528 {
9529 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
9530     sp_point_256* t = NULL;
9531 #else
9532     sp_point_256 t[3];
9533 #endif
9534     sp_point_256* s1 = NULL;
9535     sp_point_256* s2 = NULL;
9536     int i;
9537     int j;
9538     int err = MP_OKAY;
9539 
9540     (void)heap;
9541 
9542 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
9543     t = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 3, heap,
9544                                      DYNAMIC_TYPE_ECC);
9545     if (t == NULL)
9546         err = MEMORY_E;
9547 #endif
9548 
9549     if (err == MP_OKAY) {
9550         s1 = t + 1;
9551         s2 = t + 2;
9552 
9553         err = sp_256_mod_mul_norm_4(t->x, a->x, p256_mod);
9554     }
9555     if (err == MP_OKAY) {
9556         err = sp_256_mod_mul_norm_4(t->y, a->y, p256_mod);
9557     }
9558     if (err == MP_OKAY) {
9559         err = sp_256_mod_mul_norm_4(t->z, a->z, p256_mod);
9560     }
9561     if (err == MP_OKAY) {
9562         t->infinity = 0;
9563         sp_256_proj_to_affine_4(t, tmp);
9564 
9565         XMEMCPY(s1->z, p256_norm_mod, sizeof(p256_norm_mod));
9566         s1->infinity = 0;
9567         XMEMCPY(s2->z, p256_norm_mod, sizeof(p256_norm_mod));
9568         s2->infinity = 0;
9569 
9570         /* table[0] = {0, 0, infinity} */
9571         XMEMSET(&table[0], 0, sizeof(sp_table_entry_256));
9572         /* table[1] = Affine version of 'a' in Montgomery form */
9573         XMEMCPY(table[1].x, t->x, sizeof(table->x));
9574         XMEMCPY(table[1].y, t->y, sizeof(table->y));
9575 
9576         for (i=1; i<6; i++) {
9577             sp_256_proj_point_dbl_n_4(t, 43, tmp);
9578             sp_256_proj_to_affine_4(t, tmp);
9579             XMEMCPY(table[1<<i].x, t->x, sizeof(table->x));
9580             XMEMCPY(table[1<<i].y, t->y, sizeof(table->y));
9581         }
9582 
9583         for (i=1; i<6; i++) {
9584             XMEMCPY(s1->x, table[1<<i].x, sizeof(table->x));
9585             XMEMCPY(s1->y, table[1<<i].y, sizeof(table->y));
9586             for (j=(1<<i)+1; j<(1<<(i+1)); j++) {
9587                 XMEMCPY(s2->x, table[j-(1<<i)].x, sizeof(table->x));
9588                 XMEMCPY(s2->y, table[j-(1<<i)].y, sizeof(table->y));
9589                 sp_256_proj_point_add_qz1_4(t, s1, s2, tmp);
9590                 sp_256_proj_to_affine_4(t, tmp);
9591                 XMEMCPY(table[j].x, t->x, sizeof(table->x));
9592                 XMEMCPY(table[j].y, t->y, sizeof(table->y));
9593             }
9594         }
9595     }
9596 
9597 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
9598     if (t != NULL)
9599         XFREE(t, heap, DYNAMIC_TYPE_ECC);
9600 #endif
9601 
9602     return err;
9603 }
9604 
9605 #endif /* FP_ECC */
9606 #if defined(FP_ECC) || defined(WOLFSSL_SP_SMALL)
9607 extern void sp_256_get_entry_64_4(sp_point_256* r, const sp_table_entry_256* table, int idx);
9608 extern void sp_256_get_entry_64_avx2_4(sp_point_256* r, const sp_table_entry_256* table, int idx);
9609 /* Multiply the point by the scalar and return the result.
9610  * If map is true then convert result to affine coordinates.
9611  *
9612  * Stripe implementation.
9613  * Pre-generated: 2^0, 2^42, ...
9614  * Pre-generated: products of all combinations of above.
9615  * 6 doubles and adds (with qz=1)
9616  *
9617  * r      Resulting point.
9618  * k      Scalar to multiply by.
9619  * table  Pre-computed table.
9620  * map    Indicates whether to convert result to affine.
9621  * ct     Constant time required.
9622  * heap   Heap to use for allocation.
9623  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
9624  */
sp_256_ecc_mulmod_stripe_4(sp_point_256 * r,const sp_point_256 * g,const sp_table_entry_256 * table,const sp_digit * k,int map,int ct,void * heap)9625 static int sp_256_ecc_mulmod_stripe_4(sp_point_256* r, const sp_point_256* g,
9626         const sp_table_entry_256* table, const sp_digit* k, int map,
9627         int ct, void* heap)
9628 {
9629 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
9630     sp_point_256* rt = NULL;
9631     sp_digit* t = NULL;
9632 #else
9633     sp_point_256 rt[2];
9634     sp_digit t[2 * 4 * 5];
9635 #endif
9636     sp_point_256* p = NULL;
9637     int i;
9638     int j;
9639     int y;
9640     int x;
9641     int err = MP_OKAY;
9642 
9643     (void)g;
9644     /* Constant time used for cache attack resistance implementation. */
9645     (void)ct;
9646     (void)heap;
9647 
9648 
9649 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
9650     rt = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 2, heap,
9651                                       DYNAMIC_TYPE_ECC);
9652     if (rt == NULL)
9653         err = MEMORY_E;
9654     if (err == MP_OKAY) {
9655         t = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 4 * 5, heap,
9656                                DYNAMIC_TYPE_ECC);
9657         if (t == NULL)
9658             err = MEMORY_E;
9659     }
9660 #endif
9661 
9662     if (err == MP_OKAY) {
9663         p = rt + 1;
9664 
9665         XMEMCPY(p->z, p256_norm_mod, sizeof(p256_norm_mod));
9666         XMEMCPY(rt->z, p256_norm_mod, sizeof(p256_norm_mod));
9667 
9668         y = 0;
9669         x = 42;
9670         for (j=0; j<6 && x<256; j++) {
9671             y |= (int)(((k[x / 64] >> (x % 64)) & 1) << j);
9672             x += 43;
9673         }
9674     #ifndef WC_NO_CACHE_RESISTANT
9675         if (ct) {
9676             sp_256_get_entry_64_4(rt, table, y);
9677         } else
9678     #endif
9679         {
9680             XMEMCPY(rt->x, table[y].x, sizeof(table[y].x));
9681             XMEMCPY(rt->y, table[y].y, sizeof(table[y].y));
9682         }
9683         rt->infinity = !y;
9684         for (i=41; i>=0; i--) {
9685             y = 0;
9686             x = i;
9687             for (j=0; j<6 && x<256; j++) {
9688                 y |= (int)(((k[x / 64] >> (x % 64)) & 1) << j);
9689                 x += 43;
9690             }
9691 
9692             sp_256_proj_point_dbl_4(rt, rt, t);
9693         #ifndef WC_NO_CACHE_RESISTANT
9694             if (ct) {
9695                 sp_256_get_entry_64_4(p, table, y);
9696             }
9697             else
9698         #endif
9699             {
9700                 XMEMCPY(p->x, table[y].x, sizeof(table[y].x));
9701                 XMEMCPY(p->y, table[y].y, sizeof(table[y].y));
9702             }
9703             p->infinity = !y;
9704             sp_256_proj_point_add_qz1_4(rt, rt, p, t);
9705         }
9706 
9707         if (map != 0) {
9708             sp_256_map_4(r, rt, t);
9709         }
9710         else {
9711             XMEMCPY(r, rt, sizeof(sp_point_256));
9712         }
9713     }
9714 
9715 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
9716     if (t != NULL)
9717         XFREE(t, heap, DYNAMIC_TYPE_ECC);
9718     if (rt != NULL)
9719         XFREE(rt, heap, DYNAMIC_TYPE_ECC);
9720 #endif
9721 
9722     return err;
9723 }
9724 
9725 #endif /* FP_ECC | WOLFSSL_SP_SMALL */
9726 #ifdef FP_ECC
9727 #ifndef FP_ENTRIES
9728     #define FP_ENTRIES 16
9729 #endif
9730 
9731 /* Cache entry - holds precomputation tables for a point. */
9732 typedef struct sp_cache_256_t {
9733     /* X ordinate of point that table was generated from. */
9734     sp_digit x[4];
9735     /* Y ordinate of point that table was generated from. */
9736     sp_digit y[4];
9737     /* Precomputation table for point. */
9738     sp_table_entry_256 table[64];
9739     /* Count of entries in table. */
9740     uint32_t cnt;
9741     /* Point and table set in entry. */
9742     int set;
9743 } sp_cache_256_t;
9744 
9745 /* Cache of tables. */
9746 static THREAD_LS_T sp_cache_256_t sp_cache_256[FP_ENTRIES];
9747 /* Index of last entry in cache. */
9748 static THREAD_LS_T int sp_cache_256_last = -1;
9749 /* Cache has been initialized. */
9750 static THREAD_LS_T int sp_cache_256_inited = 0;
9751 
9752 #ifndef HAVE_THREAD_LS
9753     static volatile int initCacheMutex_256 = 0;
9754     static wolfSSL_Mutex sp_cache_256_lock;
9755 #endif
9756 
9757 /* Get the cache entry for the point.
9758  *
9759  * g      [in]   Point scalar multipling.
9760  * cache  [out]  Cache table to use.
9761  */
sp_ecc_get_cache_256(const sp_point_256 * g,sp_cache_256_t ** cache)9762 static void sp_ecc_get_cache_256(const sp_point_256* g, sp_cache_256_t** cache)
9763 {
9764     int i;
9765     int j;
9766     uint32_t least;
9767 
9768     if (sp_cache_256_inited == 0) {
9769         for (i=0; i<FP_ENTRIES; i++) {
9770             sp_cache_256[i].set = 0;
9771         }
9772         sp_cache_256_inited = 1;
9773     }
9774 
9775     /* Compare point with those in cache. */
9776     for (i=0; i<FP_ENTRIES; i++) {
9777         if (!sp_cache_256[i].set)
9778             continue;
9779 
9780         if (sp_256_cmp_equal_4(g->x, sp_cache_256[i].x) &
9781                            sp_256_cmp_equal_4(g->y, sp_cache_256[i].y)) {
9782             sp_cache_256[i].cnt++;
9783             break;
9784         }
9785     }
9786 
9787     /* No match. */
9788     if (i == FP_ENTRIES) {
9789         /* Find empty entry. */
9790         i = (sp_cache_256_last + 1) % FP_ENTRIES;
9791         for (; i != sp_cache_256_last; i=(i+1)%FP_ENTRIES) {
9792             if (!sp_cache_256[i].set) {
9793                 break;
9794             }
9795         }
9796 
9797         /* Evict least used. */
9798         if (i == sp_cache_256_last) {
9799             least = sp_cache_256[0].cnt;
9800             for (j=1; j<FP_ENTRIES; j++) {
9801                 if (sp_cache_256[j].cnt < least) {
9802                     i = j;
9803                     least = sp_cache_256[i].cnt;
9804                 }
9805             }
9806         }
9807 
9808         XMEMCPY(sp_cache_256[i].x, g->x, sizeof(sp_cache_256[i].x));
9809         XMEMCPY(sp_cache_256[i].y, g->y, sizeof(sp_cache_256[i].y));
9810         sp_cache_256[i].set = 1;
9811         sp_cache_256[i].cnt = 1;
9812     }
9813 
9814     *cache = &sp_cache_256[i];
9815     sp_cache_256_last = i;
9816 }
9817 #endif /* FP_ECC */
9818 
9819 /* Multiply the base point of P256 by the scalar and return the result.
9820  * If map is true then convert result to affine coordinates.
9821  *
9822  * r     Resulting point.
9823  * g     Point to multiply.
9824  * k     Scalar to multiply by.
9825  * map   Indicates whether to convert result to affine.
9826  * ct    Constant time required.
9827  * heap  Heap to use for allocation.
9828  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
9829  */
sp_256_ecc_mulmod_4(sp_point_256 * r,const sp_point_256 * g,const sp_digit * k,int map,int ct,void * heap)9830 static int sp_256_ecc_mulmod_4(sp_point_256* r, const sp_point_256* g, const sp_digit* k,
9831         int map, int ct, void* heap)
9832 {
9833 #ifndef FP_ECC
9834     return sp_256_ecc_mulmod_win_add_sub_4(r, g, k, map, ct, heap);
9835 #else
9836     sp_digit tmp[2 * 4 * 5];
9837     sp_cache_256_t* cache;
9838     int err = MP_OKAY;
9839 
9840 #ifndef HAVE_THREAD_LS
9841     if (initCacheMutex_256 == 0) {
9842          wc_InitMutex(&sp_cache_256_lock);
9843          initCacheMutex_256 = 1;
9844     }
9845     if (wc_LockMutex(&sp_cache_256_lock) != 0)
9846        err = BAD_MUTEX_E;
9847 #endif /* HAVE_THREAD_LS */
9848 
9849     if (err == MP_OKAY) {
9850         sp_ecc_get_cache_256(g, &cache);
9851         if (cache->cnt == 2)
9852             sp_256_gen_stripe_table_4(g, cache->table, tmp, heap);
9853 
9854 #ifndef HAVE_THREAD_LS
9855         wc_UnLockMutex(&sp_cache_256_lock);
9856 #endif /* HAVE_THREAD_LS */
9857 
9858         if (cache->cnt < 2) {
9859             err = sp_256_ecc_mulmod_win_add_sub_4(r, g, k, map, ct, heap);
9860         }
9861         else {
9862             err = sp_256_ecc_mulmod_stripe_4(r, g, cache->table, k,
9863                     map, ct, heap);
9864         }
9865     }
9866 
9867     return err;
9868 #endif
9869 }
9870 
9871 #ifdef HAVE_INTEL_AVX2
9872 #if defined(FP_ECC) || defined(WOLFSSL_SP_SMALL)
9873 #endif /* FP_ECC | WOLFSSL_SP_SMALL */
9874 /* Add two Montgomery form projective points. The second point has a q value of
9875  * one.
9876  * Only the first point can be the same pointer as the result point.
9877  *
9878  * r  Result of addition.
9879  * p  First point to add.
9880  * q  Second point to add.
9881  * t  Temporary ordinate data.
9882  */
sp_256_proj_point_add_qz1_avx2_4(sp_point_256 * r,const sp_point_256 * p,const sp_point_256 * q,sp_digit * t)9883 static void sp_256_proj_point_add_qz1_avx2_4(sp_point_256* r, const sp_point_256* p,
9884         const sp_point_256* q, sp_digit* t)
9885 {
9886     const sp_point_256* ap[2];
9887     sp_point_256* rp[2];
9888     sp_digit* t1 = t;
9889     sp_digit* t2 = t + 2*4;
9890     sp_digit* t3 = t + 4*4;
9891     sp_digit* t4 = t + 6*4;
9892     sp_digit* t5 = t + 8*4;
9893     sp_digit* x;
9894     sp_digit* y;
9895     sp_digit* z;
9896     int i;
9897 
9898     /* Check double */
9899     (void)sp_256_sub_4(t1, p256_mod, q->y);
9900     sp_256_norm_4(t1);
9901     if ((sp_256_cmp_equal_4(p->x, q->x) & sp_256_cmp_equal_4(p->z, q->z) &
9902         (sp_256_cmp_equal_4(p->y, q->y) | sp_256_cmp_equal_4(p->y, t1))) != 0) {
9903         sp_256_proj_point_dbl_avx2_4(r, p, t);
9904     }
9905     else {
9906         rp[0] = r;
9907 
9908         /*lint allow cast to different type of pointer*/
9909         rp[1] = (sp_point_256*)t; /*lint !e9087 !e740*/
9910         XMEMSET(rp[1], 0, sizeof(sp_point_256));
9911         x = rp[p->infinity | q->infinity]->x;
9912         y = rp[p->infinity | q->infinity]->y;
9913         z = rp[p->infinity | q->infinity]->z;
9914 
9915         ap[0] = p;
9916         ap[1] = q;
9917         for (i=0; i<4; i++) {
9918             r->x[i] = ap[p->infinity]->x[i];
9919         }
9920         for (i=0; i<4; i++) {
9921             r->y[i] = ap[p->infinity]->y[i];
9922         }
9923         for (i=0; i<4; i++) {
9924             r->z[i] = ap[p->infinity]->z[i];
9925         }
9926         r->infinity = ap[p->infinity]->infinity;
9927 
9928         /* U2 = X2*Z1^2 */
9929         sp_256_mont_sqr_avx2_4(t2, z, p256_mod, p256_mp_mod);
9930         sp_256_mont_mul_avx2_4(t4, t2, z, p256_mod, p256_mp_mod);
9931         sp_256_mont_mul_avx2_4(t2, t2, q->x, p256_mod, p256_mp_mod);
9932         /* S2 = Y2*Z1^3 */
9933         sp_256_mont_mul_avx2_4(t4, t4, q->y, p256_mod, p256_mp_mod);
9934         /* H = U2 - X1 */
9935         sp_256_mont_sub_avx2_4(t2, t2, x, p256_mod);
9936         /* R = S2 - Y1 */
9937         sp_256_mont_sub_avx2_4(t4, t4, y, p256_mod);
9938         /* Z3 = H*Z1 */
9939         sp_256_mont_mul_avx2_4(z, z, t2, p256_mod, p256_mp_mod);
9940         /* X3 = R^2 - H^3 - 2*X1*H^2 */
9941         sp_256_mont_sqr_avx2_4(t1, t4, p256_mod, p256_mp_mod);
9942         sp_256_mont_sqr_avx2_4(t5, t2, p256_mod, p256_mp_mod);
9943         sp_256_mont_mul_avx2_4(t3, x, t5, p256_mod, p256_mp_mod);
9944         sp_256_mont_mul_avx2_4(t5, t5, t2, p256_mod, p256_mp_mod);
9945         sp_256_mont_sub_avx2_4(x, t1, t5, p256_mod);
9946         sp_256_mont_dbl_avx2_4(t1, t3, p256_mod);
9947         sp_256_mont_sub_avx2_4(x, x, t1, p256_mod);
9948         /* Y3 = R*(X1*H^2 - X3) - Y1*H^3 */
9949         sp_256_mont_sub_avx2_4(t3, t3, x, p256_mod);
9950         sp_256_mont_mul_avx2_4(t3, t3, t4, p256_mod, p256_mp_mod);
9951         sp_256_mont_mul_avx2_4(t5, t5, y, p256_mod, p256_mp_mod);
9952         sp_256_mont_sub_avx2_4(y, t3, t5, p256_mod);
9953     }
9954 }
9955 
9956 #ifdef FP_ECC
9957 /* Convert the projective point to affine.
9958  * Ordinates are in Montgomery form.
9959  *
9960  * a  Point to convert.
9961  * t  Temporary data.
9962  */
sp_256_proj_to_affine_avx2_4(sp_point_256 * a,sp_digit * t)9963 static void sp_256_proj_to_affine_avx2_4(sp_point_256* a, sp_digit* t)
9964 {
9965     sp_digit* t1 = t;
9966     sp_digit* t2 = t + 2 * 4;
9967     sp_digit* tmp = t + 4 * 4;
9968 
9969     sp_256_mont_inv_avx2_4(t1, a->z, tmp);
9970 
9971     sp_256_mont_sqr_avx2_4(t2, t1, p256_mod, p256_mp_mod);
9972     sp_256_mont_mul_avx2_4(t1, t2, t1, p256_mod, p256_mp_mod);
9973 
9974     sp_256_mont_mul_avx2_4(a->x, a->x, t2, p256_mod, p256_mp_mod);
9975     sp_256_mont_mul_avx2_4(a->y, a->y, t1, p256_mod, p256_mp_mod);
9976     XMEMCPY(a->z, p256_norm_mod, sizeof(p256_norm_mod));
9977 }
9978 
9979 /* Generate the pre-computed table of points for the base point.
9980  *
9981  * width = 6
9982  * 64 entries
9983  * 42 bits between
9984  *
9985  * a      The base point.
9986  * table  Place to store generated point data.
9987  * tmp    Temporary data.
9988  * heap  Heap to use for allocation.
9989  */
sp_256_gen_stripe_table_avx2_4(const sp_point_256 * a,sp_table_entry_256 * table,sp_digit * tmp,void * heap)9990 static int sp_256_gen_stripe_table_avx2_4(const sp_point_256* a,
9991         sp_table_entry_256* table, sp_digit* tmp, void* heap)
9992 {
9993 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
9994     sp_point_256* t = NULL;
9995 #else
9996     sp_point_256 t[3];
9997 #endif
9998     sp_point_256* s1 = NULL;
9999     sp_point_256* s2 = NULL;
10000     int i;
10001     int j;
10002     int err = MP_OKAY;
10003 
10004     (void)heap;
10005 
10006 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
10007     t = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 3, heap,
10008                                      DYNAMIC_TYPE_ECC);
10009     if (t == NULL)
10010         err = MEMORY_E;
10011 #endif
10012 
10013     if (err == MP_OKAY) {
10014         s1 = t + 1;
10015         s2 = t + 2;
10016 
10017         err = sp_256_mod_mul_norm_avx2_4(t->x, a->x, p256_mod);
10018     }
10019     if (err == MP_OKAY) {
10020         err = sp_256_mod_mul_norm_avx2_4(t->y, a->y, p256_mod);
10021     }
10022     if (err == MP_OKAY) {
10023         err = sp_256_mod_mul_norm_avx2_4(t->z, a->z, p256_mod);
10024     }
10025     if (err == MP_OKAY) {
10026         t->infinity = 0;
10027         sp_256_proj_to_affine_avx2_4(t, tmp);
10028 
10029         XMEMCPY(s1->z, p256_norm_mod, sizeof(p256_norm_mod));
10030         s1->infinity = 0;
10031         XMEMCPY(s2->z, p256_norm_mod, sizeof(p256_norm_mod));
10032         s2->infinity = 0;
10033 
10034         /* table[0] = {0, 0, infinity} */
10035         XMEMSET(&table[0], 0, sizeof(sp_table_entry_256));
10036         /* table[1] = Affine version of 'a' in Montgomery form */
10037         XMEMCPY(table[1].x, t->x, sizeof(table->x));
10038         XMEMCPY(table[1].y, t->y, sizeof(table->y));
10039 
10040         for (i=1; i<6; i++) {
10041             sp_256_proj_point_dbl_n_avx2_4(t, 43, tmp);
10042             sp_256_proj_to_affine_avx2_4(t, tmp);
10043             XMEMCPY(table[1<<i].x, t->x, sizeof(table->x));
10044             XMEMCPY(table[1<<i].y, t->y, sizeof(table->y));
10045         }
10046 
10047         for (i=1; i<6; i++) {
10048             XMEMCPY(s1->x, table[1<<i].x, sizeof(table->x));
10049             XMEMCPY(s1->y, table[1<<i].y, sizeof(table->y));
10050             for (j=(1<<i)+1; j<(1<<(i+1)); j++) {
10051                 XMEMCPY(s2->x, table[j-(1<<i)].x, sizeof(table->x));
10052                 XMEMCPY(s2->y, table[j-(1<<i)].y, sizeof(table->y));
10053                 sp_256_proj_point_add_qz1_avx2_4(t, s1, s2, tmp);
10054                 sp_256_proj_to_affine_avx2_4(t, tmp);
10055                 XMEMCPY(table[j].x, t->x, sizeof(table->x));
10056                 XMEMCPY(table[j].y, t->y, sizeof(table->y));
10057             }
10058         }
10059     }
10060 
10061 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
10062     if (t != NULL)
10063         XFREE(t, heap, DYNAMIC_TYPE_ECC);
10064 #endif
10065 
10066     return err;
10067 }
10068 
10069 #endif /* FP_ECC */
10070 #if defined(FP_ECC) || defined(WOLFSSL_SP_SMALL)
10071 /* Multiply the point by the scalar and return the result.
10072  * If map is true then convert result to affine coordinates.
10073  *
10074  * Stripe implementation.
10075  * Pre-generated: 2^0, 2^42, ...
10076  * Pre-generated: products of all combinations of above.
10077  * 6 doubles and adds (with qz=1)
10078  *
10079  * r      Resulting point.
10080  * k      Scalar to multiply by.
10081  * table  Pre-computed table.
10082  * map    Indicates whether to convert result to affine.
10083  * ct     Constant time required.
10084  * heap   Heap to use for allocation.
10085  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
10086  */
sp_256_ecc_mulmod_stripe_avx2_4(sp_point_256 * r,const sp_point_256 * g,const sp_table_entry_256 * table,const sp_digit * k,int map,int ct,void * heap)10087 static int sp_256_ecc_mulmod_stripe_avx2_4(sp_point_256* r, const sp_point_256* g,
10088         const sp_table_entry_256* table, const sp_digit* k, int map,
10089         int ct, void* heap)
10090 {
10091 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
10092     sp_point_256* rt = NULL;
10093     sp_digit* t = NULL;
10094 #else
10095     sp_point_256 rt[2];
10096     sp_digit t[2 * 4 * 5];
10097 #endif
10098     sp_point_256* p = NULL;
10099     int i;
10100     int j;
10101     int y;
10102     int x;
10103     int err = MP_OKAY;
10104 
10105     (void)g;
10106     /* Constant time used for cache attack resistance implementation. */
10107     (void)ct;
10108     (void)heap;
10109 
10110 
10111 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
10112     rt = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 2, heap,
10113                                       DYNAMIC_TYPE_ECC);
10114     if (rt == NULL)
10115         err = MEMORY_E;
10116     if (err == MP_OKAY) {
10117         t = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 4 * 5, heap,
10118                                DYNAMIC_TYPE_ECC);
10119         if (t == NULL)
10120             err = MEMORY_E;
10121     }
10122 #endif
10123 
10124     if (err == MP_OKAY) {
10125         p = rt + 1;
10126 
10127         XMEMCPY(p->z, p256_norm_mod, sizeof(p256_norm_mod));
10128         XMEMCPY(rt->z, p256_norm_mod, sizeof(p256_norm_mod));
10129 
10130         y = 0;
10131         x = 42;
10132         for (j=0; j<6 && x<256; j++) {
10133             y |= (int)(((k[x / 64] >> (x % 64)) & 1) << j);
10134             x += 43;
10135         }
10136     #ifndef WC_NO_CACHE_RESISTANT
10137         if (ct) {
10138             sp_256_get_entry_64_avx2_4(rt, table, y);
10139         } else
10140     #endif
10141         {
10142             XMEMCPY(rt->x, table[y].x, sizeof(table[y].x));
10143             XMEMCPY(rt->y, table[y].y, sizeof(table[y].y));
10144         }
10145         rt->infinity = !y;
10146         for (i=41; i>=0; i--) {
10147             y = 0;
10148             x = i;
10149             for (j=0; j<6 && x<256; j++) {
10150                 y |= (int)(((k[x / 64] >> (x % 64)) & 1) << j);
10151                 x += 43;
10152             }
10153 
10154             sp_256_proj_point_dbl_avx2_4(rt, rt, t);
10155         #ifndef WC_NO_CACHE_RESISTANT
10156             if (ct) {
10157                 sp_256_get_entry_64_avx2_4(p, table, y);
10158             }
10159             else
10160         #endif
10161             {
10162                 XMEMCPY(p->x, table[y].x, sizeof(table[y].x));
10163                 XMEMCPY(p->y, table[y].y, sizeof(table[y].y));
10164             }
10165             p->infinity = !y;
10166             sp_256_proj_point_add_qz1_avx2_4(rt, rt, p, t);
10167         }
10168 
10169         if (map != 0) {
10170             sp_256_map_avx2_4(r, rt, t);
10171         }
10172         else {
10173             XMEMCPY(r, rt, sizeof(sp_point_256));
10174         }
10175     }
10176 
10177 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
10178     if (t != NULL)
10179         XFREE(t, heap, DYNAMIC_TYPE_ECC);
10180     if (rt != NULL)
10181         XFREE(rt, heap, DYNAMIC_TYPE_ECC);
10182 #endif
10183 
10184     return err;
10185 }
10186 
10187 #endif /* FP_ECC | WOLFSSL_SP_SMALL */
10188 /* Multiply the base point of P256 by the scalar and return the result.
10189  * If map is true then convert result to affine coordinates.
10190  *
10191  * r     Resulting point.
10192  * g     Point to multiply.
10193  * k     Scalar to multiply by.
10194  * map   Indicates whether to convert result to affine.
10195  * ct    Constant time required.
10196  * heap  Heap to use for allocation.
10197  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
10198  */
sp_256_ecc_mulmod_avx2_4(sp_point_256 * r,const sp_point_256 * g,const sp_digit * k,int map,int ct,void * heap)10199 static int sp_256_ecc_mulmod_avx2_4(sp_point_256* r, const sp_point_256* g, const sp_digit* k,
10200         int map, int ct, void* heap)
10201 {
10202 #ifndef FP_ECC
10203     return sp_256_ecc_mulmod_win_add_sub_avx2_4(r, g, k, map, ct, heap);
10204 #else
10205     sp_digit tmp[2 * 4 * 5];
10206     sp_cache_256_t* cache;
10207     int err = MP_OKAY;
10208 
10209 #ifndef HAVE_THREAD_LS
10210     if (initCacheMutex_256 == 0) {
10211          wc_InitMutex(&sp_cache_256_lock);
10212          initCacheMutex_256 = 1;
10213     }
10214     if (wc_LockMutex(&sp_cache_256_lock) != 0)
10215        err = BAD_MUTEX_E;
10216 #endif /* HAVE_THREAD_LS */
10217 
10218     if (err == MP_OKAY) {
10219         sp_ecc_get_cache_256(g, &cache);
10220         if (cache->cnt == 2)
10221             sp_256_gen_stripe_table_avx2_4(g, cache->table, tmp, heap);
10222 
10223 #ifndef HAVE_THREAD_LS
10224         wc_UnLockMutex(&sp_cache_256_lock);
10225 #endif /* HAVE_THREAD_LS */
10226 
10227         if (cache->cnt < 2) {
10228             err = sp_256_ecc_mulmod_win_add_sub_avx2_4(r, g, k, map, ct, heap);
10229         }
10230         else {
10231             err = sp_256_ecc_mulmod_stripe_avx2_4(r, g, cache->table, k,
10232                     map, ct, heap);
10233         }
10234     }
10235 
10236     return err;
10237 #endif
10238 }
10239 
10240 #endif /* HAVE_INTEL_AVX2 */
10241 /* Multiply the point by the scalar and return the result.
10242  * If map is true then convert result to affine coordinates.
10243  *
10244  * km    Scalar to multiply by.
10245  * p     Point to multiply.
10246  * r     Resulting point.
10247  * map   Indicates whether to convert result to affine.
10248  * heap  Heap to use for allocation.
10249  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
10250  */
sp_ecc_mulmod_256(const mp_int * km,const ecc_point * gm,ecc_point * r,int map,void * heap)10251 int sp_ecc_mulmod_256(const mp_int* km, const ecc_point* gm, ecc_point* r,
10252         int map, void* heap)
10253 {
10254 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
10255     sp_point_256* point = NULL;
10256     sp_digit* k = NULL;
10257 #else
10258     sp_point_256 point[1];
10259     sp_digit k[4];
10260 #endif
10261     int err = MP_OKAY;
10262 #ifdef HAVE_INTEL_AVX2
10263     word32 cpuid_flags = cpuid_get_flags();
10264 #endif
10265 
10266 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
10267     point = (sp_point_256*)XMALLOC(sizeof(sp_point_256), heap,
10268                                          DYNAMIC_TYPE_ECC);
10269     if (point == NULL)
10270         err = MEMORY_E;
10271     if (err == MP_OKAY) {
10272         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 4, heap,
10273                                DYNAMIC_TYPE_ECC);
10274         if (k == NULL)
10275             err = MEMORY_E;
10276     }
10277 #endif
10278 
10279     if (err == MP_OKAY) {
10280         sp_256_from_mp(k, 4, km);
10281         sp_256_point_from_ecc_point_4(point, gm);
10282 
10283 #ifdef HAVE_INTEL_AVX2
10284         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
10285             err = sp_256_ecc_mulmod_avx2_4(point, point, k, map, 1, heap);
10286         else
10287 #endif
10288             err = sp_256_ecc_mulmod_4(point, point, k, map, 1, heap);
10289     }
10290     if (err == MP_OKAY) {
10291         err = sp_256_point_to_ecc_point_4(point, r);
10292     }
10293 
10294 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
10295     if (k != NULL)
10296         XFREE(k, heap, DYNAMIC_TYPE_ECC);
10297     if (point != NULL)
10298         XFREE(point, heap, DYNAMIC_TYPE_ECC);
10299 #endif
10300 
10301     return err;
10302 }
10303 
10304 /* Multiply the point by the scalar, add point a and return the result.
10305  * If map is true then convert result to affine coordinates.
10306  *
10307  * km      Scalar to multiply by.
10308  * p       Point to multiply.
10309  * am      Point to add to scalar mulitply result.
10310  * inMont  Point to add is in montgomery form.
10311  * r       Resulting point.
10312  * map     Indicates whether to convert result to affine.
10313  * heap    Heap to use for allocation.
10314  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
10315  */
sp_ecc_mulmod_add_256(const mp_int * km,const ecc_point * gm,const ecc_point * am,int inMont,ecc_point * r,int map,void * heap)10316 int sp_ecc_mulmod_add_256(const mp_int* km, const ecc_point* gm,
10317     const ecc_point* am, int inMont, ecc_point* r, int map, void* heap)
10318 {
10319 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
10320     sp_point_256* point = NULL;
10321     sp_digit* k = NULL;
10322 #else
10323     sp_point_256 point[2];
10324     sp_digit k[4 + 4 * 2 * 5];
10325 #endif
10326     sp_point_256* addP = NULL;
10327     sp_digit* tmp = NULL;
10328     int err = MP_OKAY;
10329 #ifdef HAVE_INTEL_AVX2
10330     word32 cpuid_flags = cpuid_get_flags();
10331 #endif
10332 
10333 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
10334     point = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 2, heap,
10335                                          DYNAMIC_TYPE_ECC);
10336     if (point == NULL)
10337         err = MEMORY_E;
10338     if (err == MP_OKAY) {
10339         k = (sp_digit*)XMALLOC(
10340             sizeof(sp_digit) * (4 + 4 * 2 * 5), heap,
10341             DYNAMIC_TYPE_ECC);
10342         if (k == NULL)
10343             err = MEMORY_E;
10344     }
10345 #endif
10346 
10347     if (err == MP_OKAY) {
10348         addP = point + 1;
10349         tmp = k + 4;
10350 
10351         sp_256_from_mp(k, 4, km);
10352         sp_256_point_from_ecc_point_4(point, gm);
10353         sp_256_point_from_ecc_point_4(addP, am);
10354     }
10355     if ((err == MP_OKAY) && (!inMont)) {
10356         err = sp_256_mod_mul_norm_4(addP->x, addP->x, p256_mod);
10357     }
10358     if ((err == MP_OKAY) && (!inMont)) {
10359         err = sp_256_mod_mul_norm_4(addP->y, addP->y, p256_mod);
10360     }
10361     if ((err == MP_OKAY) && (!inMont)) {
10362         err = sp_256_mod_mul_norm_4(addP->z, addP->z, p256_mod);
10363     }
10364     if (err == MP_OKAY) {
10365 #ifdef HAVE_INTEL_AVX2
10366         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
10367             err = sp_256_ecc_mulmod_avx2_4(point, point, k, 0, 0, heap);
10368         else
10369 #endif
10370             err = sp_256_ecc_mulmod_4(point, point, k, 0, 0, heap);
10371     }
10372     if (err == MP_OKAY) {
10373 #ifdef HAVE_INTEL_AVX2
10374         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
10375             sp_256_proj_point_add_avx2_4(point, point, addP, tmp);
10376         else
10377 #endif
10378             sp_256_proj_point_add_4(point, point, addP, tmp);
10379 
10380         if (map) {
10381 #ifdef HAVE_INTEL_AVX2
10382             if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
10383                 sp_256_map_avx2_4(point, point, tmp);
10384             else
10385 #endif
10386                 sp_256_map_4(point, point, tmp);
10387         }
10388 
10389         err = sp_256_point_to_ecc_point_4(point, r);
10390     }
10391 
10392 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
10393     if (k != NULL)
10394         XFREE(k, heap, DYNAMIC_TYPE_ECC);
10395     if (point != NULL)
10396         XFREE(point, heap, DYNAMIC_TYPE_ECC);
10397 #endif
10398 
10399     return err;
10400 }
10401 
10402 #ifdef WOLFSSL_SP_SMALL
10403 /* Striping precomputation table.
10404  * 6 points combined into a table of 64 points.
10405  * Distance of 43 between points.
10406  */
10407 static const sp_table_entry_256 p256_table[64] = {
10408     /* 0 */
10409     { { 0x00, 0x00, 0x00, 0x00 },
10410       { 0x00, 0x00, 0x00, 0x00 } },
10411     /* 1 */
10412     { { 0x79e730d418a9143cL,0x75ba95fc5fedb601L,0x79fb732b77622510L,
10413         0x18905f76a53755c6L },
10414       { 0xddf25357ce95560aL,0x8b4ab8e4ba19e45cL,0xd2e88688dd21f325L,
10415         0x8571ff1825885d85L } },
10416     /* 2 */
10417     { { 0x8910507903605c39L,0xf0843d9ea142c96cL,0xf374493416923684L,
10418         0x732caa2ffa0a2893L },
10419       { 0xb2e8c27061160170L,0xc32788cc437fbaa3L,0x39cd818ea6eda3acL,
10420         0xe2e942399e2b2e07L } },
10421     /* 3 */
10422     { { 0xb9c0d276abc3e190L,0x610e3d4dcb55b9caL,0xd16dbd025720f50aL,
10423         0xd0ed73dca607de84L },
10424       { 0x3bbde5bf49219fb5L,0x698e12c057771843L,0xdb606a9763470a5eL,
10425         0x61c71975853635d5L } },
10426     /* 4 */
10427     { { 0xeb5ddcb6ec7fae9fL,0x995f2714efb66e5aL,0xdee95d8e69445d52L,
10428         0x1b6c2d4609e27620L },
10429       { 0x32621c318129d716L,0xb03909f10958c1aaL,0x8c468ef91af4af63L,
10430         0x162c429ffba5cdf6L } },
10431     /* 5 */
10432     { { 0x4615d912c1d85f12L,0x1f0880b0e1f4e302L,0x336bcc896f1fca13L,
10433         0xda59ad0dc70dedbcL },
10434       { 0x3897efaeb0f62eceL,0xbaed81cdf4990cfdL,0xa3b1c2f260321bbbL,
10435         0x2aefd95addc84f79L } },
10436     /* 6 */
10437     { { 0x2d427e3cee9e92e6L,0x43d40da0437fe629L,0x0006e4e06ab72b31L,
10438         0x21ccfbb46f5c8e02L },
10439       { 0x53a2f1a753e821ecL,0x5d72d201e209d591L,0xfd84a26445e8ad41L,
10440         0x86ee0e684059cc6eL } },
10441     /* 7 */
10442     { { 0x3d8242d09248fce2L,0x32d4bf827f49f33dL,0x78807beb29d41fd1L,
10443         0xfce48b99f8f562cbL },
10444       { 0x72a7d4849f38f097L,0x1b482c10a37059adL,0xc1aa8284472e5ed3L,
10445         0xc5d6f3bbef23e9c9L } },
10446     /* 8 */
10447     { { 0x23f949feb8a24a20L,0x17ebfed1f52ca53fL,0x9b691bbebcfb4853L,
10448         0x5617ff6b6278a05dL },
10449       { 0x241b34c5e3c99ebdL,0xfc64242e1784156aL,0x4206482f695d67dfL,
10450         0xb967ce0eee27c011L } },
10451     /* 9 */
10452     { { 0x569aacdf9fc3df19L,0x0c6782c7c34c6fb2L,0xbb5f98b2c4ec873dL,
10453         0x5578433b9fe9e475L },
10454       { 0xfa14f3869ca84821L,0xb8ef658d39589501L,0x4022c48e07127b8eL,
10455         0xcbc4dfe35402ea12L } },
10456     /* 10 */
10457     { { 0x092ef96a2ad408a3L,0xf1e1a4c4cfbc45a3L,0x966b2676efeecdeeL,
10458         0xa0e2c6713a6216c5L },
10459       { 0xcd6e22a292c4bf61L,0x56d99a11d830dfc7L,0xb8c612bd259de547L,
10460         0x3d8e9a72e91f8ff7L } },
10461     /* 11 */
10462     { { 0x0b885e962352b4ffL,0x6be320d2a6545766L,0xbd22a444b9a59e72L,
10463         0x2f2d32d6ccc55d7dL },
10464       { 0xd86e4c4cddcec70bL,0x19cdb0e97a25c934L,0x542ade069ca97e28L,
10465         0x58c5927c746517f7L } },
10466     /* 12 */
10467     { { 0x24abb0f08d087091L,0x6aa2c2ef51add8deL,0xc3e1cb4ccc2a2134L,
10468         0x3563112895589212L },
10469       { 0x3bf17d2a7984344bL,0xbcb6f7b2f8a142ccL,0xd6057d8a08ec9266L,
10470         0x75c150d22852405aL } },
10471     /* 13 */
10472     { { 0xa8f88eb5a9fee73eL,0x72a84174576ea39bL,0x671fa0ade2692e7dL,
10473         0x2556288596769f9eL },
10474       { 0x254323bce850a6b0L,0x74b61c18fff6c89aL,0x2e7c563fcfae2690L,
10475         0x2cf454b7164afb0fL } },
10476     /* 14 */
10477     { { 0xe312a5618f10f423L,0x59a1f1fff2b85df4L,0x56c5991941c48122L,
10478         0x74953c1eae3d175fL },
10479       { 0x4d767fc78859244cL,0xc486bc00719a4cc1L,0xdd282985df1c1787L,
10480         0x1143301aae93c719L } },
10481     /* 15 */
10482     { { 0x7201a1d61fab7d71L,0x65931f5432cbbee8L,0x202955d3dcb387eeL,
10483         0xa5045ba5c4678432L },
10484       { 0xcfb5ee87dca85ff6L,0xdd25a7c6dfec0f67L,0xfee47169356a87c6L,
10485         0x20a8f159c3d7ece9L } },
10486     /* 16 */
10487     { { 0xe4ac8b33070d3aabL,0x2643672b9a2cd5e5L,0x52eff79b1cfc9173L,
10488         0x665ca49b90a7c13fL },
10489       { 0x5a8dda59b3efb998L,0x8a5b922d052f1341L,0xae9ebbab3cf9a530L,
10490         0x35986e7bf56da4d7L } },
10491     /* 17 */
10492     { { 0x21e07f9abc0a70c0L,0xecfdb3a2989a0182L,0x360682c0e40e8125L,
10493         0x73a637952f837f32L },
10494       { 0xf4eb8cef9c0d326bL,0xefb97fecebf4c7a5L,0xf9352123af3d5d7eL,
10495         0xb71ef4ef34e22ab1L } },
10496     /* 18 */
10497     { { 0xd6bd0d810d488032L,0x1676df9971f0b92eL,0xa7acdcfcb6d215acL,
10498         0x82461a26cd0ff939L },
10499       { 0x827189c0b635d2e5L,0x18f3b6dda92f1622L,0x10d738aa05cef325L,
10500         0x12c2a13f39bb0aa6L } },
10501     /* 19 */
10502     { { 0x5f94d8deb50b4e82L,0xbcd9144e34bd93e9L,0x61c3392107c08623L,
10503         0xedec947e7e3de8eeL },
10504       { 0x9d2da51d2f21b202L,0xc0c885cd96692a89L,0x4a613462a5e7309cL,
10505         0x227788550f28dee6L } },
10506     /* 20 */
10507     { { 0x1ff0bd527695447aL,0x63534a4a42ae2627L,0xd96af0dad0cc09f2L,
10508         0xb59ea545412d3e1aL },
10509       { 0xd10518cf6a759072L,0xffeec37c10475dfdL,0xacbc29ccb25089c4L,
10510         0xbf3dfc8521b6d4eeL } },
10511     /* 21 */
10512     { { 0x8f2eacfe49388995L,0x000fc8d4841be9edL,0x2ed8085a6955c290L,
10513         0x1929cf606d8e176fL },
10514       { 0x2efd26a5fd1a09dbL,0x58d767ad6cb626cdL,0x13a81b95b26c6e05L,
10515         0x68fe61078f61832bL } },
10516     /* 22 */
10517     { { 0x4ad7de2e2d85c2f6L,0xcd552fcb510101a1L,0x638d122b02acdabfL,
10518         0x117221e850bfd921L },
10519       { 0x08571ee199a99129L,0xebd046d1ba2f03a9L,0x035ed7baa6f8a181L,
10520         0x8aabf98d3187c6f3L } },
10521     /* 23 */
10522     { { 0xaf8e65cae3ab5f4eL,0x8b0b8b897561a69cL,0x37e83aa0b17c1e66L,
10523         0xe894d84cf8d80edcL },
10524       { 0xf1e465e7ce514e22L,0xc7fa324ca72340efL,0x08297fcae7370673L,
10525         0x4f799682b119ae5eL } },
10526     /* 24 */
10527     { { 0x014d6bd8f180f206L,0x56640c8b7ab44f55L,0x9a39660d93f9a5b8L,
10528         0xcac069e9959b68f1L },
10529       { 0x2bf6b65e208d9918L,0xb7e45dfb3f943291L,0xad5770f0d439c712L,
10530         0xfec635e17654d805L } },
10531     /* 25 */
10532     { { 0x37221cd13f031a88L,0xe4d53d2f0b5558d4L,0x2ede8e8fdafc51cdL,
10533         0xb587284ca8a883eaL },
10534       { 0xfa37674044fa5251L,0x5e5e18f95c5e3528L,0x8af51fac6e10b958L,
10535         0x09be79032c429b30L } },
10536     /* 26 */
10537     { { 0x7a468ba47f29936dL,0xacbbe3657cfb8176L,0xe892c10a4db9cd5dL,
10538         0xcb2f29d7a1aade8bL },
10539       { 0x3087eef4efffcb14L,0x92a7f3ec2afe8f2eL,0x199d89b8136f29d2L,
10540         0x3131604eb4836623L } },
10541     /* 27 */
10542     { { 0xf5cca5da31b5df76L,0x9431318676a4abc0L,0x5db8e6f71877c7c7L,
10543         0x3ce3f5f96031ac99L },
10544       { 0x585961d07e7cef80L,0x5ed6e841d424f16aL,0x18289cd056b16a49L,
10545         0x8008d03b2e5770faL } },
10546     /* 28 */
10547     { { 0xc8c2af64254e39deL,0x783cea738582571cL,0x2f2f55f1a6edd971L,
10548         0x7e00cc92c86bf30aL },
10549       { 0xa0db735447d7491fL,0xb3eb751ca5b12260L,0x3bc39a23297fb234L,
10550         0xd1330c20b8b4bfe4L } },
10551     /* 29 */
10552     { { 0xfb776af07824d53aL,0x04709096422dea35L,0x6f480b6b5fec3ac7L,
10553         0xdb2b1b62e27edda4L },
10554       { 0x0bba904cda78b494L,0x37ef59b691a147f7L,0xf880517726a4730aL,
10555         0xecc9d79aa8ab368eL } },
10556     /* 30 */
10557     { { 0x628e05c185a4bd0eL,0xebf7b67800e244e8L,0xf645947b8b176eebL,
10558         0xc92bf8301641ab35L },
10559       { 0x7a039c1a21be7a6fL,0x11e4354d2fd4bd92L,0x42552422886fd224L,
10560         0xdbf3194cc44ced37L } },
10561     /* 31 */
10562     { { 0x832da983c56f6b04L,0x7aaa84eb8ef098aeL,0x602e3eefa6a616a2L,
10563         0xc2824ddcb7b717a3L },
10564       { 0x19f50324ddb0a2e9L,0x04553a285bedfbbdL,0x37ea8b12aa1aee0aL,
10565         0xc1844e79945959a1L } },
10566     /* 32 */
10567     { { 0x5043dea7e0f222c2L,0x309d42ac72e65142L,0x94fe9ddd9216cd30L,
10568         0xd6539c7d0f87feecL },
10569       { 0x03c5a57c432ac7d7L,0x72692cf0327fda10L,0xec28c85f280698deL,
10570         0x2331fb467ec283b1L } },
10571     /* 33 */
10572     { { 0x651cfdeb43248e67L,0x2c3d72ceee561de8L,0xa48b8f33443dac8bL,
10573         0xe6b042fe7991f986L },
10574       { 0xd091636de810bcd2L,0xfc1e96aea97416d7L,0x2b6087cb2892694dL,
10575         0x0f8ac2459985a628L } },
10576     /* 34 */
10577     { { 0x54e908747f2326a2L,0xce43dd44fa9e1131L,0x4b2c740cd3d2d948L,
10578         0x9b0b126aa86e8b07L },
10579       { 0x228ef320b77f5af2L,0x14fc8a01ca07661cL,0x1d72509ed34f1a3aL,
10580         0xd169031729d9086eL } },
10581     /* 35 */
10582     { { 0x13e44acc03c5fe33L,0x13f4374e0105bbc6L,0x0cba5018cb4451b8L,
10583         0xa1a38e4afa29a4e1L },
10584       { 0x063fb9a8f4403917L,0x7afe108f996ea7f2L,0xec252363f93a1f87L,
10585         0xc029c8117e432609L } },
10586     /* 36 */
10587     { { 0x25080c29486e548eL,0xdaa411327868ab32L,0x46891511d61d1a3aL,
10588         0xc87f3f533efc8facL },
10589       { 0x984f613ff3e31393L,0x10bb15f67648f5d2L,0xe4990f2bdefaa440L,
10590         0xce647f03dd51c31dL } },
10591     /* 37 */
10592     { { 0x3161ebdd9c2c0abfL,0x48b7ee7bf497cf35L,0x9233e31d94dd9c97L,
10593         0x4aef9a62c5d2988fL },
10594       { 0x89a54161a03e6456L,0x9d25e003c1f02b47L,0x8784cdbfc1857782L,
10595         0x7928cafd0222b49cL } },
10596     /* 38 */
10597     { { 0x5a591abdecf4ea23L,0xb2725e8a80bd9b8aL,0xf569679f29ff348bL,
10598         0xa28163d36f22536aL },
10599       { 0x89e7a8f621c43971L,0x60cbe4a1c4a09567L,0x41046c8f5928b03dL,
10600         0x646feda7ef74a95aL } },
10601     /* 39 */
10602     { { 0x3aef6bc05d75d310L,0xf3e7f03c82476e5cL,0x9dcf3d508419b8a0L,
10603         0x221a3885eaf07f07L },
10604       { 0x16d533f337bdcb7dL,0xd778066bbb49550dL,0xf6f4540936c2600cL,
10605         0x7544396fc1c61709L } },
10606     /* 40 */
10607     { { 0xf79f556fde08cd42L,0x7d0aba1ee13cadc8L,0x841d9df6d4d81fefL,
10608         0x8f7ae1f2602d2043L },
10609       { 0x950c4de4b57ee181L,0xfe51e045c55cf490L,0xdb60b56a1efdd0a8L,
10610         0x276bccb3bf0fa497L } },
10611     /* 41 */
10612     { { 0x7926625b19e5a603L,0xf1b98e93e1bf712bL,0x933ecb52e33abeccL,
10613         0x9ebfc506f826619bL },
10614       { 0xd2965f67a1692c52L,0x8ac4012dfc4f9564L,0xa8af57036739f003L,
10615         0x7dd2282dbc715e13L } },
10616     /* 42 */
10617     { { 0x3ec01587cf2bb490L,0x5346082c3f1ea428L,0xf2c679e26739e506L,
10618         0xeab710d6930c28e4L },
10619       { 0xe9947ff8e043249aL,0x63640678ad54b0e6L,0x8cde42591854eaafL,
10620         0xf1feeaec6b25bdceL } },
10621     /* 43 */
10622     { { 0x49f7e8991bdd2aa2L,0x88fd273534e3cae9L,0x5ac0510182cbfea2L,
10623         0x324c9d414cf84578L },
10624       { 0xa242311719f13061L,0x69d67cf15f3b9932L,0x32ecdb3cdde2dfadL,
10625         0x2f74d995b916f7a6L } },
10626     /* 44 */
10627     { { 0x35f7ed423d14bc68L,0x32f63a0445574f91L,0xd04108335e8801e7L,
10628         0x63b6f13c1c9c1462L },
10629       { 0x180dcbcd9dc7201fL,0xa07b5b2c360350dfL,0x2582b2774236f5ccL,
10630         0x90163924a7ab06b9L } },
10631     /* 45 */
10632     { { 0x35e751b50767cdf2L,0x808372e69d8e2838L,0xcbad6b30646914d7L,
10633         0x4eeeb1de6c7b3cabL },
10634       { 0x3ef3af968c965004L,0xd162290fd281920bL,0x4626c313181f811bL,
10635         0x5fa42f4fbe61dd14L } },
10636     /* 46 */
10637     { { 0x1f5a9c53a185e98eL,0x13c28277ea9e83c3L,0xb566e4c0b693a226L,
10638         0x2ea3f1c001533e9eL },
10639       { 0xb4dbcc336215a21fL,0x7df608c3cb4e98f0L,0x677df928b4dd95ddL,
10640         0x4c1d7142eeed2934L } },
10641     /* 47 */
10642     { { 0x30bf236c86a2ee12L,0x74d5a12705ecb4c0L,0x9ef43b0f1601cca9L,
10643         0xbe1b1bf9ac4dd202L },
10644       { 0x84943e4717b6f93bL,0x6f789757cd5214b3L,0x5e0db1a97f313dfaL,
10645         0x0515efacece0b72bL } },
10646     /* 48 */
10647     { { 0x433a677ca78c3f8bL,0x204a9feaf376a9c1L,0xb6bfbea444baeadfL,
10648         0x5a43cafd2b48a3f4L },
10649       { 0xe25a7d0b67d1d226L,0xb2115844f6837985L,0x8c9cca3ed87c2b88L,
10650         0xecd4bc73894772e1L } },
10651     /* 49 */
10652     { { 0x368abec6783490e7L,0xf26da8bdd925c359L,0xf9b643e5e8fb0679L,
10653         0x7ab803d9b555d175L },
10654       { 0x1b4059994ebae595L,0x07fbbf25ba417a49L,0x02d7cf1cc617957aL,
10655         0x79070ea5565c1fbbL } },
10656     /* 50 */
10657     { { 0x70194602d9b028faL,0x9c49969d9ff06760L,0xbf4add816ad27b42L,
10658         0x7d1f226d8651524eL },
10659       { 0xb0779b40eecd7724L,0xd356077265938707L,0xe3a61fe5d054b903L,
10660         0xd6f5a3433365136bL } },
10661     /* 51 */
10662     { { 0x25c87c76d2970fcfL,0x7c9f60a04d5546a8L,0x7dab072f8dd8bf8cL,
10663         0x3d10907ce8ff9f28L },
10664       { 0xb08d6d0e34bb2a29L,0x5dfd4907c3fcfdafL,0xe4a2d4b147123ba6L,
10665         0x6e9eef0b42de6d8dL } },
10666     /* 52 */
10667     { { 0x81255af5cbb55f9dL,0x579f27055328d39eL,0xa7bfc9173e5ae663L,
10668         0xe9b55d57a1246e42L },
10669       { 0x240ecd9475629188L,0x8748d297457bd3c0L,0x50e215ef373c361cL,
10670         0xaf9d8a8618c967b9L } },
10671     /* 53 */
10672     { { 0x79a041040a04143fL,0x03f7410fc700c616L,0xe8f2a3f291108ca6L,
10673         0xa26d67e8f5ac679aL },
10674       { 0xa15dbfebb83fbd9aL,0xf1aaebd23a0b5587L,0x639a97ddce0ead44L,
10675         0xf253b00c71d12ee0L } },
10676     /* 54 */
10677     { { 0x7baecf4c9e35e57cL,0x522e26a16786e3a5L,0x600b538b8af829a2L,
10678         0x19fa80b72c6de44aL },
10679       { 0xb52364f0aaf0ff52L,0x2e4bc21a6714587fL,0x401377a3c245967dL,
10680         0x65178766a23cf3ebL } },
10681     /* 55 */
10682     { { 0xc1c81838923ac000L,0x42021f02c4abc0eeL,0xcde3bc9a47132a20L,
10683         0x6f52a864c69f55fbL },
10684       { 0x0bdfd3e4df89ff6aL,0x244c943bc88bd74eL,0x649e0b532612998bL,
10685         0xce61ebc3d3413d4aL } },
10686     /* 56 */
10687     { { 0xe31629042cba5a90L,0xa72710aedb6c224eL,0x51831390d87e44dbL,
10688         0xa687dc9848fe2ef3L },
10689       { 0x857e985516a21ca9L,0xe3428d8ec9a7bc12L,0x16d3bcd012b044a2L,
10690         0xe6fa0c69e85f6704L } },
10691     /* 57 */
10692     { { 0xe4cca34b8fd42692L,0xc86d49a6e15f3acfL,0xbfe1f263a6b18392L,
10693         0x0664c933dcd266f6L },
10694       { 0x86738cf519399d88L,0x1cbcc8c3749ce6bcL,0x28171f7bc773b884L,
10695         0x306fc95701acf19eL } },
10696     /* 58 */
10697     { { 0x0da7a737afb6a419L,0x637fc26a195fbc40L,0x0fc8f8769c64e8e7L,
10698         0x2a68579b208c0626L },
10699       { 0x82e823108628abc3L,0xe4e09313ab23ae94L,0x66bf9adbe5155cf1L,
10700         0x17909f6ce8a2dd0cL } },
10701     /* 59 */
10702     { { 0x767c359643d7ad31L,0x7ba3a1aa49ccef62L,0x5261c3160242bf5aL,
10703         0x85f452199eb82dfbL },
10704       { 0x554cb38237b42e47L,0xc9771ec14cf66133L,0xde70617a153905a3L,
10705         0x2cab26fcbc61316dL } },
10706     /* 60 */
10707     { { 0x7dababbd75c10315L,0x9a8fbe88a48df64eL,0x2b076fe5e1b8f912L,
10708         0x1a530ce9ccbd50dcL },
10709       { 0x47361ab76647d225L,0xf84e73be4d636a15L,0xd58fcaaf5904a2faL,
10710         0x73747d4b38523a19L } },
10711     /* 61 */
10712     { { 0x6e6b0fb8b6864cc0L,0x5d8a0027ab3b623cL,0x5e6665389a1cfc9cL,
10713         0x816b19de521e4ff3L },
10714       { 0x56709ad00bc447f8L,0x1d46cb1c8f1464d7L,0x49cef820a949873dL,
10715         0x02804692d9d3e65fL } },
10716     /* 62 */
10717     { { 0x1ae0ea28ad8b5976L,0x4e9ad48e869458fbL,0xe9437ec996cfedf8L,
10718         0xa4f924a22afa74d9L },
10719       { 0xcb5b1845aaf797c0L,0xe5d6dd0eba6f557fL,0xa1496fe691dc2e7cL,
10720         0xad31edac8c179fc7L } },
10721     /* 63 */
10722     { { 0xf9c5e9de44b06ed7L,0x6ce7c4f74a597159L,0xd02ec441833accb5L,
10723         0xf30205996296e8fcL },
10724       { 0x7df6c5c6c2afbe06L,0xff429dda9c849b09L,0x42170166f5dd78d6L,
10725         0x2403ea21830c388bL } },
10726 };
10727 
10728 /* Multiply the base point of P256 by the scalar and return the result.
10729  * If map is true then convert result to affine coordinates.
10730  *
10731  * Stripe implementation.
10732  * Pre-generated: 2^0, 2^42, ...
10733  * Pre-generated: products of all combinations of above.
10734  * 6 doubles and adds (with qz=1)
10735  *
10736  * r     Resulting point.
10737  * k     Scalar to multiply by.
10738  * map   Indicates whether to convert result to affine.
10739  * ct    Constant time required.
10740  * heap  Heap to use for allocation.
10741  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
10742  */
sp_256_ecc_mulmod_base_4(sp_point_256 * r,const sp_digit * k,int map,int ct,void * heap)10743 static int sp_256_ecc_mulmod_base_4(sp_point_256* r, const sp_digit* k,
10744         int map, int ct, void* heap)
10745 {
10746     return sp_256_ecc_mulmod_stripe_4(r, &p256_base, p256_table,
10747                                       k, map, ct, heap);
10748 }
10749 
10750 #ifdef HAVE_INTEL_AVX2
10751 /* Multiply the base point of P256 by the scalar and return the result.
10752  * If map is true then convert result to affine coordinates.
10753  *
10754  * Stripe implementation.
10755  * Pre-generated: 2^0, 2^42, ...
10756  * Pre-generated: products of all combinations of above.
10757  * 6 doubles and adds (with qz=1)
10758  *
10759  * r     Resulting point.
10760  * k     Scalar to multiply by.
10761  * map   Indicates whether to convert result to affine.
10762  * ct    Constant time required.
10763  * heap  Heap to use for allocation.
10764  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
10765  */
sp_256_ecc_mulmod_base_avx2_4(sp_point_256 * r,const sp_digit * k,int map,int ct,void * heap)10766 static int sp_256_ecc_mulmod_base_avx2_4(sp_point_256* r, const sp_digit* k,
10767         int map, int ct, void* heap)
10768 {
10769     return sp_256_ecc_mulmod_stripe_avx2_4(r, &p256_base, p256_table,
10770                                       k, map, ct, heap);
10771 }
10772 
10773 #endif /* HAVE_INTEL_AVX2 */
10774 #else /* WOLFSSL_SP_SMALL */
10775 /* The index into pre-computation table to use. */
10776 static const uint8_t recode_index_4_7[130] = {
10777      0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
10778     16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
10779     32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
10780     48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
10781     64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49,
10782     48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33,
10783     32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17,
10784     16, 15, 14, 13, 12, 11, 10,  9,  8,  7,  6,  5,  4,  3,  2,  1,
10785      0,  1,
10786 };
10787 
10788 /* Whether to negate y-ordinate. */
10789 static const uint8_t recode_neg_4_7[130] = {
10790      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
10791      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
10792      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
10793      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
10794      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
10795      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
10796      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
10797      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
10798      0,  0,
10799 };
10800 
10801 /* Recode the scalar for multiplication using pre-computed values and
10802  * subtraction.
10803  *
10804  * k  Scalar to multiply by.
10805  * v  Vector of operations to perform.
10806  */
sp_256_ecc_recode_7_4(const sp_digit * k,ecc_recode_256 * v)10807 static void sp_256_ecc_recode_7_4(const sp_digit* k, ecc_recode_256* v)
10808 {
10809     int i;
10810     int j;
10811     uint8_t y;
10812     int carry = 0;
10813     int o;
10814     sp_digit n;
10815 
10816     j = 0;
10817     n = k[j];
10818     o = 0;
10819     for (i=0; i<37; i++) {
10820         y = (int8_t)n;
10821         if (o + 7 < 64) {
10822             y &= 0x7f;
10823             n >>= 7;
10824             o += 7;
10825         }
10826         else if (o + 7 == 64) {
10827             n >>= 7;
10828             if (++j < 4)
10829                 n = k[j];
10830             o = 0;
10831         }
10832         else if (++j < 4) {
10833             n = k[j];
10834             y |= (uint8_t)((n << (64 - o)) & 0x7f);
10835             o -= 57;
10836             n >>= o;
10837         }
10838 
10839         y += (uint8_t)carry;
10840         v[i].i = recode_index_4_7[y];
10841         v[i].neg = recode_neg_4_7[y];
10842         carry = (y >> 7) + v[i].neg;
10843     }
10844 }
10845 
10846 extern void sp_256_get_entry_65_4(sp_point_256* r, const sp_table_entry_256* table, int idx);
10847 extern void sp_256_get_entry_65_avx2_4(sp_point_256* r, const sp_table_entry_256* table, int idx);
10848 static const sp_table_entry_256 p256_table[2405] = {
10849     /* 0 << 0 */
10850     { { 0x00, 0x00, 0x00, 0x00 },
10851       { 0x00, 0x00, 0x00, 0x00 } },
10852     /* 1 << 0 */
10853     { { 0x79e730d418a9143cL,0x75ba95fc5fedb601L,0x79fb732b77622510L,
10854         0x18905f76a53755c6L },
10855       { 0xddf25357ce95560aL,0x8b4ab8e4ba19e45cL,0xd2e88688dd21f325L,
10856         0x8571ff1825885d85L } },
10857     /* 2 << 0 */
10858     { { 0x850046d410ddd64dL,0xaa6ae3c1a433827dL,0x732205038d1490d9L,
10859         0xf6bb32e43dcf3a3bL },
10860       { 0x2f3648d361bee1a5L,0x152cd7cbeb236ff8L,0x19a8fb0e92042dbeL,
10861         0x78c577510a5b8a3bL } },
10862     /* 3 << 0 */
10863     { { 0xffac3f904eebc127L,0xb027f84a087d81fbL,0x66ad77dd87cbbc98L,
10864         0x26936a3fb6ff747eL },
10865       { 0xb04c5c1fc983a7ebL,0x583e47ad0861fe1aL,0x788208311a2ee98eL,
10866         0xd5f06a29e587cc07L } },
10867     /* 4 << 0 */
10868     { { 0x74b0b50d46918dccL,0x4650a6edc623c173L,0x0cdaacace8100af2L,
10869         0x577362f541b0176bL },
10870       { 0x2d96f24ce4cbaba6L,0x17628471fad6f447L,0x6b6c36dee5ddd22eL,
10871         0x84b14c394c5ab863L } },
10872     /* 5 << 0 */
10873     { { 0xbe1b8aaec45c61f5L,0x90ec649a94b9537dL,0x941cb5aad076c20cL,
10874         0xc9079605890523c8L },
10875       { 0xeb309b4ae7ba4f10L,0x73c568efe5eb882bL,0x3540a9877e7a1f68L,
10876         0x73a076bb2dd1e916L } },
10877     /* 6 << 0 */
10878     { { 0x403947373e77664aL,0x55ae744f346cee3eL,0xd50a961a5b17a3adL,
10879         0x13074b5954213673L },
10880       { 0x93d36220d377e44bL,0x299c2b53adff14b5L,0xf424d44cef639f11L,
10881         0xa4c9916d4a07f75fL } },
10882     /* 7 << 0 */
10883     { { 0x0746354ea0173b4fL,0x2bd20213d23c00f7L,0xf43eaab50c23bb08L,
10884         0x13ba5119c3123e03L },
10885       { 0x2847d0303f5b9d4dL,0x6742f2f25da67bddL,0xef933bdc77c94195L,
10886         0xeaedd9156e240867L } },
10887     /* 8 << 0 */
10888     { { 0x27f14cd19499a78fL,0x462ab5c56f9b3455L,0x8f90f02af02cfc6bL,
10889         0xb763891eb265230dL },
10890       { 0xf59da3a9532d4977L,0x21e3327dcf9eba15L,0x123c7b84be60bbf0L,
10891         0x56ec12f27706df76L } },
10892     /* 9 << 0 */
10893     { { 0x75c96e8f264e20e8L,0xabe6bfed59a7a841L,0x2cc09c0444c8eb00L,
10894         0xe05b3080f0c4e16bL },
10895       { 0x1eb7777aa45f3314L,0x56af7bedce5d45e3L,0x2b6e019a88b12f1aL,
10896         0x086659cdfd835f9bL } },
10897     /* 10 << 0 */
10898     { { 0x2c18dbd19dc21ec8L,0x98f9868a0fcf8139L,0x737d2cd648250b49L,
10899         0xcc61c94724b3428fL },
10900       { 0x0c2b407880dd9e76L,0xc43a8991383fbe08L,0x5f7d2d65779be5d2L,
10901         0x78719a54eb3b4ab5L } },
10902     /* 11 << 0 */
10903     { { 0xea7d260a6245e404L,0x9de407956e7fdfe0L,0x1ff3a4158dac1ab5L,
10904         0x3e7090f1649c9073L },
10905       { 0x1a7685612b944e88L,0x250f939ee57f61c8L,0x0c0daa891ead643dL,
10906         0x68930023e125b88eL } },
10907     /* 12 << 0 */
10908     { { 0x04b71aa7d2697768L,0xabdedef5ca345a33L,0x2409d29dee37385eL,
10909         0x4ee1df77cb83e156L },
10910       { 0x0cac12d91cbb5b43L,0x170ed2f6ca895637L,0x28228cfa8ade6d66L,
10911         0x7ff57c9553238acaL } },
10912     /* 13 << 0 */
10913     { { 0xccc425634b2ed709L,0x0e356769856fd30dL,0xbcbcd43f559e9811L,
10914         0x738477ac5395b759L },
10915       { 0x35752b90c00ee17fL,0x68748390742ed2e3L,0x7cd06422bd1f5bc1L,
10916         0xfbc08769c9e7b797L } },
10917     /* 14 << 0 */
10918     { { 0xa242a35bb0cf664aL,0x126e48f77f9707e3L,0x1717bf54c6832660L,
10919         0xfaae7332fd12c72eL },
10920       { 0x27b52db7995d586bL,0xbe29569e832237c2L,0xe8e4193e2a65e7dbL,
10921         0x152706dc2eaa1bbbL } },
10922     /* 15 << 0 */
10923     { { 0x72bcd8b7bc60055bL,0x03cc23ee56e27e4bL,0xee337424e4819370L,
10924         0xe2aa0e430ad3da09L },
10925       { 0x40b8524f6383c45dL,0xd766355442a41b25L,0x64efa6de778a4797L,
10926         0x2042170a7079adf4L } },
10927     /* 16 << 0 */
10928     { { 0x808b0b650bc6fb80L,0x5882e0753ffe2e6bL,0xd5ef2f7c2c83f549L,
10929         0x54d63c809103b723L },
10930       { 0xf2f11bd652a23f9bL,0x3670c3194b0b6587L,0x55c4623bb1580e9eL,
10931         0x64edf7b201efe220L } },
10932     /* 17 << 0 */
10933     { { 0x97091dcbd53c5c9dL,0xf17624b6ac0a177bL,0xb0f139752cfe2dffL,
10934         0xc1a35c0a6c7a574eL },
10935       { 0x227d314693e79987L,0x0575bf30e89cb80eL,0x2f4e247f0d1883bbL,
10936         0xebd512263274c3d0L } },
10937     /* 18 << 0 */
10938     { { 0x5f3e51c856ada97aL,0x4afc964d8f8b403eL,0xa6f247ab412e2979L,
10939         0x675abd1b6f80ebdaL },
10940       { 0x66a2bd725e485a1dL,0x4b2a5caf8f4f0b3cL,0x2626927f1b847bbaL,
10941         0x6c6fc7d90502394dL } },
10942     /* 19 << 0 */
10943     { { 0xfea912baa5659ae8L,0x68363aba25e1a16eL,0xb8842277752c41acL,
10944         0xfe545c282897c3fcL },
10945       { 0x2d36e9e7dc4c696bL,0x5806244afba977c5L,0x85665e9be39508c1L,
10946         0xf720ee256d12597bL } },
10947     /* 20 << 0 */
10948     { { 0x8a979129d2337a31L,0x5916868f0f862bdcL,0x048099d95dd283baL,
10949         0xe2d1eeb6fe5bfb4eL },
10950       { 0x82ef1c417884005dL,0xa2d4ec17ffffcbaeL,0x9161c53f8aa95e66L,
10951         0x5ee104e1c5fee0d0L } },
10952     /* 21 << 0 */
10953     { { 0x562e4cecc135b208L,0x74e1b2654783f47dL,0x6d2a506c5a3f3b30L,
10954         0xecead9f4c16762fcL },
10955       { 0xf29dd4b2e286e5b9L,0x1b0fadc083bb3c61L,0x7a75023e7fac29a4L,
10956         0xc086d5f1c9477fa3L } },
10957     /* 22 << 0 */
10958     { { 0x0fc611352f6f3076L,0xc99ffa23e3912a9aL,0x6a0b0685d2f8ba3dL,
10959         0xfdc777e8e93358a4L },
10960       { 0x94a787bb35415f04L,0x640c2d6a4d23fea4L,0x9de917da153a35b5L,
10961         0x793e8d075d5cd074L } },
10962     /* 23 << 0 */
10963     { { 0xf4f876532de45068L,0x37c7a7e89e2e1f6eL,0xd0825fa2a3584069L,
10964         0xaf2cea7c1727bf42L },
10965       { 0x0360a4fb9e4785a9L,0xe5fda49c27299f4aL,0x48068e1371ac2f71L,
10966         0x83d0687b9077666fL } },
10967     /* 24 << 0 */
10968     { { 0x6d3883b215d02819L,0x6d0d755040dd9a35L,0x61d7cbf91d2b469fL,
10969         0xf97b232f2efc3115L },
10970       { 0xa551d750b24bcbc7L,0x11ea494988a1e356L,0x7669f03193cb7501L,
10971         0x595dc55eca737b8aL } },
10972     /* 25 << 0 */
10973     { { 0xa4a319acd837879fL,0x6fc1b49eed6b67b0L,0xe395993332f1f3afL,
10974         0x966742eb65432a2eL },
10975       { 0x4b8dc9feb4966228L,0x96cc631243f43950L,0x12068859c9b731eeL,
10976         0x7b948dc356f79968L } },
10977     /* 26 << 0 */
10978     { { 0x61e4ad32ed1f8008L,0xe6c9267ad8b17538L,0x1ac7c5eb857ff6fbL,
10979         0x994baaa855f2fb10L },
10980       { 0x84cf14e11d248018L,0x5a39898b628ac508L,0x14fde97b5fa944f5L,
10981         0xed178030d12e5ac7L } },
10982     /* 27 << 0 */
10983     { { 0x042c2af497e2feb4L,0xd36a42d7aebf7313L,0x49d2c9eb084ffdd7L,
10984         0x9f8aa54b2ef7c76aL },
10985       { 0x9200b7ba09895e70L,0x3bd0c66fddb7fb58L,0x2d97d10878eb4cbbL,
10986         0x2d431068d84bde31L } },
10987     /* 28 << 0 */
10988     { { 0x4b523eb7172ccd1fL,0x7323cb2830a6a892L,0x97082ec0cfe153ebL,
10989         0xe97f6b6af2aadb97L },
10990       { 0x1d3d393ed1a83da1L,0xa6a7f9c7804b2a68L,0x4a688b482d0cb71eL,
10991         0xa9b4cc5f40585278L } },
10992     /* 29 << 0 */
10993     { { 0x5e5db46acb66e132L,0xf1be963a0d925880L,0x944a70270317b9e2L,
10994         0xe266f95948603d48L },
10995       { 0x98db66735c208899L,0x90472447a2fb18a3L,0x8a966939777c619fL,
10996         0x3798142a2a3be21bL } },
10997     /* 30 << 0 */
10998     { { 0xb4241cb13298b343L,0xa3a14e49b44f65a1L,0xc5f4d6cd3ac77acdL,
10999         0xd0288cb552b6fc3cL },
11000       { 0xd5cc8c2f1c040abcL,0xb675511e06bf9b4aL,0xd667da379b3aa441L,
11001         0x460d45ce51601f72L } },
11002     /* 31 << 0 */
11003     { { 0xe2f73c696755ff89L,0xdd3cf7e7473017e6L,0x8ef5689d3cf7600dL,
11004         0x948dc4f8b1fc87b4L },
11005       { 0xd9e9fe814ea53299L,0x2d921ca298eb6028L,0xfaecedfd0c9803fcL,
11006         0xf38ae8914d7b4745L } },
11007     /* 32 << 0 */
11008     { { 0xd8c5fccfc5e3a3d8L,0xbefd904c4079dfbfL,0xbc6d6a58fead0197L,
11009         0x39227077695532a4L },
11010       { 0x09e23e6ddbef42f5L,0x7e449b64480a9908L,0x7b969c1aad9a2e40L,
11011         0x6231d7929591c2a4L } },
11012     /* 33 << 0 */
11013     { { 0x871514560f664534L,0x85ceae7c4b68f103L,0xac09c4ae65578ab9L,
11014         0x33ec6868f044b10cL },
11015       { 0x6ac4832b3a8ec1f1L,0x5509d1285847d5efL,0xf909604f763f1574L,
11016         0xb16c4303c32f63c4L } },
11017     /* 34 << 0 */
11018     { { 0xb6ab20147ca23cd3L,0xcaa7a5c6a391849dL,0x5b0673a375678d94L,
11019         0xc982ddd4dd303e64L },
11020       { 0xfd7b000b5db6f971L,0xbba2cb1f6f876f92L,0xc77332a33c569426L,
11021         0xa159100c570d74f8L } },
11022     /* 35 << 0 */
11023     { { 0xfd16847fdec67ef5L,0x742ee464233e76b7L,0x0b8e4134efc2b4c8L,
11024         0xca640b8642a3e521L },
11025       { 0x653a01908ceb6aa9L,0x313c300c547852d5L,0x24e4ab126b237af7L,
11026         0x2ba901628bb47af8L } },
11027     /* 36 << 0 */
11028     { { 0x3d5e58d6a8219bb7L,0xc691d0bd1b06c57fL,0x0ae4cb10d257576eL,
11029         0x3569656cd54a3dc3L },
11030       { 0xe5ebaebd94cda03aL,0x934e82d3162bfe13L,0x450ac0bae251a0c6L,
11031         0x480b9e11dd6da526L } },
11032     /* 37 << 0 */
11033     { { 0x00467bc58cce08b5L,0xb636458c7f178d55L,0xc5748baea677d806L,
11034         0x2763a387dfa394ebL },
11035       { 0xa12b448a7d3cebb6L,0xe7adda3e6f20d850L,0xf63ebce51558462cL,
11036         0x58b36143620088a8L } },
11037     /* 38 << 0 */
11038     { { 0x8a2cc3ca4d63c0eeL,0x512331170fe948ceL,0x7463fd85222ef33bL,
11039         0xadf0c7dc7c603d6cL },
11040       { 0x0ec32d3bfe7765e5L,0xccaab359bf380409L,0xbdaa84d68e59319cL,
11041         0xd9a4c2809c80c34dL } },
11042     /* 39 << 0 */
11043     { { 0xa9d89488a059c142L,0x6f5ae714ff0b9346L,0x068f237d16fb3664L,
11044         0x5853e4c4363186acL },
11045       { 0xe2d87d2363c52f98L,0x2ec4a76681828876L,0x47b864fae14e7b1cL,
11046         0x0c0bc0e569192408L } },
11047     /* 40 << 0 */
11048     { { 0xe4d7681db82e9f3eL,0x83200f0bdf25e13cL,0x8909984c66f27280L,
11049         0x462d7b0075f73227L },
11050       { 0xd90ba188f2651798L,0x74c6e18c36ab1c34L,0xab256ea35ef54359L,
11051         0x03466612d1aa702fL } },
11052     /* 41 << 0 */
11053     { { 0x624d60492ed22e91L,0x6fdfe0b56f072822L,0xeeca111539ce2271L,
11054         0x98100a4fdb01614fL },
11055       { 0xb6b0daa2a35c628fL,0xb6f94d2ec87e9a47L,0xc67732591d57d9ceL,
11056         0xf70bfeec03884a7bL } },
11057     /* 42 << 0 */
11058     { { 0x5fb35ccfed2bad01L,0xa155cbe31da6a5c7L,0xc2e2594c30a92f8fL,
11059         0x649c89ce5bfafe43L },
11060       { 0xd158667de9ff257aL,0x9b359611f32c50aeL,0x4b00b20b906014cfL,
11061         0xf3a8cfe389bc7d3dL } },
11062     /* 43 << 0 */
11063     { { 0x4ff23ffd248a7d06L,0x80c5bfb4878873faL,0xb7d9ad9005745981L,
11064         0x179c85db3db01994L },
11065       { 0xba41b06261a6966cL,0x4d82d052eadce5a8L,0x9e91cd3ba5e6a318L,
11066         0x47795f4f95b2dda0L } },
11067     /* 44 << 0 */
11068     { { 0xecfd7c1fd55a897cL,0x009194abb29110fbL,0x5f0e2046e381d3b0L,
11069         0x5f3425f6a98dd291L },
11070       { 0xbfa06687730d50daL,0x0423446c4b083b7fL,0x397a247dd69d3417L,
11071         0xeb629f90387ba42aL } },
11072     /* 45 << 0 */
11073     { { 0x1ee426ccd5cd79bfL,0x0032940b946c6e18L,0x1b1e8ae057477f58L,
11074         0xe94f7d346d823278L },
11075       { 0xc747cb96782ba21aL,0xc5254469f72b33a5L,0x772ef6dec7f80c81L,
11076         0xd73acbfe2cd9e6b5L } },
11077     /* 46 << 0 */
11078     { { 0x4075b5b149ee90d9L,0x785c339aa06e9ebaL,0xa1030d5babf825e0L,
11079         0xcec684c3a42931dcL },
11080       { 0x42ab62c9c1586e63L,0x45431d665ab43f2bL,0x57c8b2c055f7835dL,
11081         0x033da338c1b7f865L } },
11082     /* 47 << 0 */
11083     { { 0x283c7513caa76097L,0x0a624fa936c83906L,0x6b20afec715af2c7L,
11084         0x4b969974eba78bfdL },
11085       { 0x220755ccd921d60eL,0x9b944e107baeca13L,0x04819d515ded93d4L,
11086         0x9bbff86e6dddfd27L } },
11087     /* 48 << 0 */
11088     { { 0x6b34413077adc612L,0xa7496529bbd803a0L,0x1a1baaa76d8805bdL,
11089         0xc8403902470343adL },
11090       { 0x39f59f66175adff1L,0x0b26d7fbb7d8c5b7L,0xa875f5ce529d75e3L,
11091         0x85efc7e941325cc2L } },
11092     /* 49 << 0 */
11093     { { 0x21950b421ff6acd3L,0xffe7048453dc6909L,0xff4cd0b228766127L,
11094         0xabdbe6084fb7db2bL },
11095       { 0x837c92285e1109e8L,0x26147d27f4645b5aL,0x4d78f592f7818ed8L,
11096         0xd394077ef247fa36L } },
11097     /* 50 << 0 */
11098     { { 0x0fb9c2d0488c171aL,0xa78bfbaa13685278L,0xedfbe268d5b1fa6aL,
11099         0x0dceb8db2b7eaba7L },
11100       { 0xbf9e80899ae2b710L,0xefde7ae6a4449c96L,0x43b7716bcc143a46L,
11101         0xd7d34194c3628c13L } },
11102     /* 51 << 0 */
11103     { { 0x508cec1c3b3f64c9L,0xe20bc0ba1e5edf3fL,0xda1deb852f4318d4L,
11104         0xd20ebe0d5c3fa443L },
11105       { 0x370b4ea773241ea3L,0x61f1511c5e1a5f65L,0x99a5e23d82681c62L,
11106         0xd731e383a2f54c2dL } },
11107     /* 52 << 0 */
11108     { { 0x2692f36e83445904L,0x2e0ec469af45f9c0L,0x905a3201c67528b7L,
11109         0x88f77f34d0e5e542L },
11110       { 0xf67a8d295864687cL,0x23b92eae22df3562L,0x5c27014b9bbec39eL,
11111         0x7ef2f2269c0f0f8dL } },
11112     /* 53 << 0 */
11113     { { 0x97359638546c4d8dL,0x5f9c3fc492f24679L,0x912e8beda8c8acd9L,
11114         0xec3a318d306634b0L },
11115       { 0x80167f41c31cb264L,0x3db82f6f522113f2L,0xb155bcd2dcafe197L,
11116         0xfba1da5943465283L } },
11117     /* 54 << 0 */
11118     { { 0xa0425b8eb212cf53L,0x4f2e512ef8557c5fL,0xc1286ff925c4d56cL,
11119         0xbb8a0feaee26c851L },
11120       { 0xc28f70d2e7d6107eL,0x7ee0c444e76265aaL,0x3df277a41d1936b1L,
11121         0x1a556e3fea9595ebL } },
11122     /* 55 << 0 */
11123     { { 0x258bbbf9e7305683L,0x31eea5bf07ef5be6L,0x0deb0e4a46c814c1L,
11124         0x5cee8449a7b730ddL },
11125       { 0xeab495c5a0182bdeL,0xee759f879e27a6b4L,0xc2cf6a6880e518caL,
11126         0x25e8013ff14cf3f4L } },
11127     /* 56 << 0 */
11128     { { 0x8fc441407e8d7a14L,0xbb1ff3ca9556f36aL,0x6a84438514600044L,
11129         0xba3f0c4a7451ae63L },
11130       { 0xdfcac25b1f9af32aL,0x01e0db86b1f2214bL,0x4e9a5bc2a4b596acL,
11131         0x83927681026c2c08L } },
11132     /* 57 << 0 */
11133     { { 0x3ec832e77acaca28L,0x1bfeea57c7385b29L,0x068212e3fd1eaf38L,
11134         0xc13298306acf8cccL },
11135       { 0xb909f2db2aac9e59L,0x5748060db661782aL,0xc5ab2632c79b7a01L,
11136         0xda44c6c600017626L } },
11137     /* 58 << 0 */
11138     { { 0xf26c00e8a7ea82f0L,0x99cac80de4299aafL,0xd66fe3b67ed78be1L,
11139         0x305f725f648d02cdL },
11140       { 0x33ed1bc4623fb21bL,0xfa70533e7a6319adL,0x17ab562dbe5ffb3eL,
11141         0x0637499456674741L } },
11142     /* 59 << 0 */
11143     { { 0x69d44ed65c46aa8eL,0x2100d5d3a8d063d1L,0xcb9727eaa2d17c36L,
11144         0x4c2bab1b8add53b7L },
11145       { 0xa084e90c15426704L,0x778afcd3a837ebeaL,0x6651f7017ce477f8L,
11146         0xa062499846fb7a8bL } },
11147     /* 60 << 0 */
11148     { { 0xdc1e6828ed8a6e19L,0x33fc23364189d9c7L,0x026f8fe2671c39bcL,
11149         0xd40c4ccdbc6f9915L },
11150       { 0xafa135bbf80e75caL,0x12c651a022adff2cL,0xc40a04bd4f51ad96L,
11151         0x04820109bbe4e832L } },
11152     /* 61 << 0 */
11153     { { 0x3667eb1a7f4c04ccL,0x59556621a9404f84L,0x71cdf6537eceb50aL,
11154         0x994a44a69b8335faL },
11155       { 0xd7faf819dbeb9b69L,0x473c5680eed4350dL,0xb6658466da44bba2L,
11156         0x0d1bc780872bdbf3L } },
11157     /* 62 << 0 */
11158     { { 0xe535f175a1962f91L,0x6ed7e061ed58f5a7L,0x177aa4c02089a233L,
11159         0x0dbcb03ae539b413L },
11160       { 0xe3dc424ebb32e38eL,0x6472e5ef6806701eL,0xdd47ff98814be9eeL,
11161         0x6b60cfff35ace009L } },
11162     /* 63 << 0 */
11163     { { 0xb8d3d9319ff91fe5L,0x039c4800f0518eedL,0x95c376329182cb26L,
11164         0x0763a43482fc568dL },
11165       { 0x707c04d5383e76baL,0xac98b930824e8197L,0x92bf7c8f91230de0L,
11166         0x90876a0140959b70L } },
11167     /* 64 << 0 */
11168     { { 0xdb6d96f305968b80L,0x380a0913089f73b9L,0x7da70b83c2c61e01L,
11169         0x95fb8394569b38c7L },
11170       { 0x9a3c651280edfe2fL,0x8f726bb98faeaf82L,0x8010a4a078424bf8L,
11171         0x296720440e844970L } },
11172     /* 0 << 7 */
11173     { { 0x00, 0x00, 0x00, 0x00 },
11174       { 0x00, 0x00, 0x00, 0x00 } },
11175     /* 1 << 7 */
11176     { { 0x63c5cb817a2ad62aL,0x7ef2b6b9ac62ff54L,0x3749bba4b3ad9db5L,
11177         0xad311f2c46d5a617L },
11178       { 0xb77a8087c2ff3b6dL,0xb46feaf3367834ffL,0xf8aa266d75d6b138L,
11179         0xfa38d320ec008188L } },
11180     /* 2 << 7 */
11181     { { 0x486d8ffa696946fcL,0x50fbc6d8b9cba56dL,0x7e3d423e90f35a15L,
11182         0x7c3da195c0dd962cL },
11183       { 0xe673fdb03cfd5d8bL,0x0704b7c2889dfca5L,0xf6ce581ff52305aaL,
11184         0x399d49eb914d5e53L } },
11185     /* 3 << 7 */
11186     { { 0x380a496d6ec293cdL,0x733dbda78e7051f5L,0x037e388db849140aL,
11187         0xee4b32b05946dbf6L },
11188       { 0xb1c4fda9cae368d1L,0x5001a7b0fdb0b2f3L,0x6df593742e3ac46eL,
11189         0x4af675f239b3e656L } },
11190     /* 4 << 7 */
11191     { { 0x44e3811039949296L,0x5b63827b361db1b5L,0x3e5323ed206eaff5L,
11192         0x942370d2c21f4290L },
11193       { 0xf2caaf2ee0d985a1L,0x192cc64b7239846dL,0x7c0b8f47ae6312f8L,
11194         0x7dc61f9196620108L } },
11195     /* 5 << 7 */
11196     { { 0xb830fb5bc2da7de9L,0xd0e643df0ff8d3beL,0x31ee77ba188a9641L,
11197         0x4e8aa3aabcf6d502L },
11198       { 0xf9fb65329a49110fL,0xd18317f62dd6b220L,0x7e3ced4152c3ea5aL,
11199         0x0d296a147d579c4aL } },
11200     /* 6 << 7 */
11201     { { 0x35d6a53eed4c3717L,0x9f8240cf3d0ed2a3L,0x8c0d4d05e5543aa5L,
11202         0x45d5bbfbdd33b4b4L },
11203       { 0xfa04cc73137fd28eL,0x862ac6efc73b3ffdL,0x403ff9f531f51ef2L,
11204         0x34d5e0fcbc73f5a2L } },
11205     /* 7 << 7 */
11206     { { 0xf252682008913f4fL,0xea20ed61eac93d95L,0x51ed38b46ca6b26cL,
11207         0x8662dcbcea4327b0L },
11208       { 0x6daf295c725d2aaaL,0xbad2752f8e52dcdaL,0x2210e7210b17daccL,
11209         0xa37f7912d51e8232L } },
11210     /* 8 << 7 */
11211     { { 0x4f7081e144cc3addL,0xd5ffa1d687be82cfL,0x89890b6c0edd6472L,
11212         0xada26e1a3ed17863L },
11213       { 0x276f271563483caaL,0xe6924cd92f6077fdL,0x05a7fe980a466e3cL,
11214         0xf1c794b0b1902d1fL } },
11215     /* 9 << 7 */
11216     { { 0xe521368882a8042cL,0xd931cfafcd278298L,0x069a0ae0f597a740L,
11217         0x0adbb3f3eb59107cL },
11218       { 0x983e951e5eaa8eb8L,0xe663a8b511b48e78L,0x1631cc0d8a03f2c5L,
11219         0x7577c11e11e271e2L } },
11220     /* 10 << 7 */
11221     { { 0x33b2385c08369a90L,0x2990c59b190eb4f8L,0x819a6145c68eac80L,
11222         0x7a786d622ec4a014L },
11223       { 0x33faadbe20ac3a8dL,0x31a217815aba2d30L,0x209d2742dba4f565L,
11224         0xdb2ce9e355aa0fbbL } },
11225     /* 11 << 7 */
11226     { { 0x8cef334b168984dfL,0xe81dce1733879638L,0xf6e6949c263720f0L,
11227         0x5c56feaff593cbecL },
11228       { 0x8bff5601fde58c84L,0x74e241172eccb314L,0xbcf01b614c9a8a78L,
11229         0xa233e35e544c9868L } },
11230     /* 12 << 7 */
11231     { { 0xb3156bf38bd7aff1L,0x1b5ee4cb1d81b146L,0x7ba1ac41d628a915L,
11232         0x8f3a8f9cfd89699eL },
11233       { 0x7329b9c9a0748be7L,0x1d391c95a92e621fL,0xe51e6b214d10a837L,
11234         0xd255f53a4947b435L } },
11235     /* 13 << 7 */
11236     { { 0x07669e04f1788ee3L,0xc14f27afa86938a2L,0x8b47a334e93a01c0L,
11237         0xff627438d9366808L },
11238       { 0x7a0985d8ca2a5965L,0x3d9a5542d6e9b9b3L,0xc23eb80b4cf972e8L,
11239         0x5c1c33bb4fdf72fdL } },
11240     /* 14 << 7 */
11241     { { 0x0c4a58d474a86108L,0xf8048a8fee4c5d90L,0xe3c7c924e86d4c80L,
11242         0x28c889de056a1e60L },
11243       { 0x57e2662eb214a040L,0xe8c48e9837e10347L,0x8774286280ac748aL,
11244         0xf1c24022186b06f2L } },
11245     /* 15 << 7 */
11246     { { 0xac2dd4c35f74040aL,0x409aeb71fceac957L,0x4fbad78255c4ec23L,
11247         0xb359ed618a7b76ecL },
11248       { 0x12744926ed6f4a60L,0xe21e8d7f4b912de3L,0xe2575a59fc705a59L,
11249         0x72f1d4deed2dbc0eL } },
11250     /* 16 << 7 */
11251     { { 0x3d2b24b9eb7926b8L,0xbff88cb3cdbe5509L,0xd0f399afe4dd640bL,
11252         0x3c5fe1302f76ed45L },
11253       { 0x6f3562f43764fb3dL,0x7b5af3183151b62dL,0xd5bd0bc7d79ce5f3L,
11254         0xfdaf6b20ec66890fL } },
11255     /* 17 << 7 */
11256     { { 0x735c67ec6063540cL,0x50b259c2e5f9cb8fL,0xb8734f9a3f99c6abL,
11257         0xf8cc13d5a3a7bc85L },
11258       { 0x80c1b305c5217659L,0xfe5364d44ec12a54L,0xbd87045e681345feL,
11259         0x7f8efeb1582f897fL } },
11260     /* 18 << 7 */
11261     { { 0xe8cbf1e5d5923359L,0xdb0cea9d539b9fb0L,0x0c5b34cf49859b98L,
11262         0x5e583c56a4403cc6L },
11263       { 0x11fc1a2dd48185b7L,0xc93fbc7e6e521787L,0x47e7a05805105b8bL,
11264         0x7b4d4d58db8260c8L } },
11265     /* 19 << 7 */
11266     { { 0xe33930b046eb842aL,0x8e844a9a7bdae56dL,0x34ef3a9e13f7fdfcL,
11267         0xb3768f82636ca176L },
11268       { 0x2821f4e04e09e61cL,0x414dc3a1a0c7cddcL,0xd537943754945fcdL,
11269         0x151b6eefb3555ff1L } },
11270     /* 20 << 7 */
11271     { { 0xb31bd6136339c083L,0x39ff8155dfb64701L,0x7c3388d2e29604abL,
11272         0x1e19084ba6b10442L },
11273       { 0x17cf54c0eccd47efL,0x896933854a5dfb30L,0x69d023fb47daf9f6L,
11274         0x9222840b7d91d959L } },
11275     /* 21 << 7 */
11276     { { 0x439108f5803bac62L,0x0b7dd91d379bd45fL,0xd651e827ca63c581L,
11277         0x5c5d75f6509c104fL },
11278       { 0x7d5fc7381f2dc308L,0x20faa7bfd98454beL,0x95374beea517b031L,
11279         0xf036b9b1642692acL } },
11280     /* 22 << 7 */
11281     { { 0xc510610939842194L,0xb7e2353e49d05295L,0xfc8c1d5cefb42ee0L,
11282         0xe04884eb08ce811cL },
11283       { 0xf1f75d817419f40eL,0x5b0ac162a995c241L,0x120921bbc4c55646L,
11284         0x713520c28d33cf97L } },
11285     /* 23 << 7 */
11286     { { 0xb4a65a5ce98c5100L,0x6cec871d2ddd0f5aL,0x251f0b7f9ba2e78bL,
11287         0x224a8434ce3a2a5fL },
11288       { 0x26827f6125f5c46fL,0x6a22bedc48545ec0L,0x25ae5fa0b1bb5cdcL,
11289         0xd693682ffcb9b98fL } },
11290     /* 24 << 7 */
11291     { { 0x32027fe891e5d7d3L,0xf14b7d1773a07678L,0xf88497b3c0dfdd61L,
11292         0xf7c2eec02a8c4f48L },
11293       { 0xaa5573f43756e621L,0xc013a2401825b948L,0x1c03b34563878572L,
11294         0xa0472bea653a4184L } },
11295     /* 25 << 7 */
11296     { { 0xf4222e270ac69a80L,0x34096d25f51e54f6L,0x00a648cb8fffa591L,
11297         0x4e87acdc69b6527fL },
11298       { 0x0575e037e285ccb4L,0x188089e450ddcf52L,0xaa96c9a8870ff719L,
11299         0x74a56cd81fc7e369L } },
11300     /* 26 << 7 */
11301     { { 0x41d04ee21726931aL,0x0bbbb2c83660ecfdL,0xa6ef6de524818e18L,
11302         0xe421cc51e7d57887L },
11303       { 0xf127d208bea87be6L,0x16a475d3b1cdd682L,0x9db1b684439b63f7L,
11304         0x5359b3dbf0f113b6L } },
11305     /* 27 << 7 */
11306     { { 0xdfccf1de8bf06e31L,0x1fdf8f44dd383901L,0x10775cad5017e7d2L,
11307         0xdfc3a59758d11eefL },
11308       { 0x6ec9c8a0b1ecff10L,0xee6ed6cc28400549L,0xb5ad7bae1b4f8d73L,
11309         0x61b4f11de00aaab9L } },
11310     /* 28 << 7 */
11311     { { 0x7b32d69bd4eff2d7L,0x88ae67714288b60fL,0x159461b437a1e723L,
11312         0x1f3d4789570aae8cL },
11313       { 0x869118c07f9871daL,0x35fbda78f635e278L,0x738f3641e1541dacL,
11314         0x6794b13ac0dae45fL } },
11315     /* 29 << 7 */
11316     { { 0x065064ac09cc0917L,0x27c53729c68540fdL,0x0d2d4c8eef227671L,
11317         0xd23a9f80a1785a04L },
11318       { 0x98c5952852650359L,0xfa09ad0174a1acadL,0x082d5a290b55bf5cL,
11319         0xa40f1c67419b8084L } },
11320     /* 30 << 7 */
11321     { { 0x3a5c752edcc18770L,0x4baf1f2f8825c3a5L,0xebd63f7421b153edL,
11322         0xa2383e47b2f64723L },
11323       { 0xe7bf620a2646d19aL,0x56cb44ec03c83ffdL,0xaf7267c94f6be9f1L,
11324         0x8b2dfd7bc06bb5e9L } },
11325     /* 31 << 7 */
11326     { { 0xb87072f2a672c5c7L,0xeacb11c80d53c5e2L,0x22dac29dff435932L,
11327         0x37bdb99d4408693cL },
11328       { 0xf6e62fb62899c20fL,0x3535d512447ece24L,0xfbdc6b88ff577ce3L,
11329         0x726693bd190575f2L } },
11330     /* 32 << 7 */
11331     { { 0x6772b0e5ab4b35a2L,0x1d8b6001f5eeaacfL,0x728f7ce4795b9580L,
11332         0x4a20ed2a41fb81daL },
11333       { 0x9f685cd44fec01e6L,0x3ed7ddcca7ff50adL,0x460fd2640c2d97fdL,
11334         0x3a241426eb82f4f9L } },
11335     /* 33 << 7 */
11336     { { 0x17d1df2c6a8ea820L,0xb2b50d3bf22cc254L,0x03856cbab7291426L,
11337         0x87fd26ae04f5ee39L },
11338       { 0x9cb696cc02bee4baL,0x5312180406820fd6L,0xa5dfc2690212e985L,
11339         0x666f7ffa160f9a09L } },
11340     /* 34 << 7 */
11341     { { 0xc503cd33bccd9617L,0x365dede4ba7730a3L,0x798c63555ddb0786L,
11342         0xa6c3200efc9cd3bcL },
11343       { 0x060ffb2ce5e35efdL,0x99a4e25b5555a1c1L,0x11d95375f70b3751L,
11344         0x0a57354a160e1bf6L } },
11345     /* 35 << 7 */
11346     { { 0xecb3ae4bf8e4b065L,0x07a834c42e53022bL,0x1cd300b38692ed96L,
11347         0x16a6f79261ee14ecL },
11348       { 0x8f1063c66a8649edL,0xfbcdfcfe869f3e14L,0x2cfb97c100a7b3ecL,
11349         0xcea49b3c7130c2f1L } },
11350     /* 36 << 7 */
11351     { { 0x462d044fe9d96488L,0x4b53d52e8182a0c1L,0x84b6ddd30391e9e9L,
11352         0x80ab7b48b1741a09L },
11353       { 0xec0e15d427d3317fL,0x8dfc1ddb1a64671eL,0x93cc5d5fd49c5b92L,
11354         0xc995d53d3674a331L } },
11355     /* 37 << 7 */
11356     { { 0x302e41ec090090aeL,0x2278a0ccedb06830L,0x1d025932fbc99690L,
11357         0x0c32fbd2b80d68daL },
11358       { 0xd79146daf341a6c1L,0xae0ba1391bef68a0L,0xc6b8a5638d774b3aL,
11359         0x1cf307bd880ba4d7L } },
11360     /* 38 << 7 */
11361     { { 0xc033bdc719803511L,0xa9f97b3b8888c3beL,0x3d68aebc85c6d05eL,
11362         0xc3b88a9d193919ebL },
11363       { 0x2d300748c48b0ee3L,0x7506bc7c07a746c1L,0xfc48437c6e6d57f3L,
11364         0x5bd71587cfeaa91aL } },
11365     /* 39 << 7 */
11366     { { 0xa4ed0408c1bc5225L,0xd0b946db2719226dL,0x109ecd62758d2d43L,
11367         0x75c8485a2751759bL },
11368       { 0xb0b75f499ce4177aL,0x4fa61a1e79c10c3dL,0xc062d300a167fcd7L,
11369         0x4df3874c750f0fa8L } },
11370     /* 40 << 7 */
11371     { { 0x29ae2cf983dfedc9L,0xf84371348d87631aL,0xaf5717117429c8d2L,
11372         0x18d15867146d9272L },
11373       { 0x83053ecf69769bb7L,0xc55eb856c479ab82L,0x5ef7791c21b0f4b2L,
11374         0xaa5956ba3d491525L } },
11375     /* 41 << 7 */
11376     { { 0x407a96c29fe20ebaL,0xf27168bbe52a5ad3L,0x43b60ab3bf1d9d89L,
11377         0xe45c51ef710e727aL },
11378       { 0xdfca5276099b4221L,0x8dc6407c2557a159L,0x0ead833591035895L,
11379         0x0a9db9579c55dc32L } },
11380     /* 42 << 7 */
11381     { { 0xe40736d3df61bc76L,0x13a619c03f778cdbL,0x6dd921a4c56ea28fL,
11382         0x76a524332fa647b4L },
11383       { 0x23591891ac5bdc5dL,0xff4a1a72bac7dc01L,0x9905e26162df8453L,
11384         0x3ac045dfe63b265fL } },
11385     /* 43 << 7 */
11386     { { 0x8a3f341bad53dba7L,0x8ec269cc837b625aL,0xd71a27823ae31189L,
11387         0x8fb4f9a355e96120L },
11388       { 0x804af823ff9875cfL,0x23224f575d442a9bL,0x1c4d3b9eecc62679L,
11389         0x91da22fba0e7ddb1L } },
11390     /* 44 << 7 */
11391     { { 0xa370324d6c04a661L,0x9710d3b65e376d17L,0xed8c98f03044e357L,
11392         0xc364ebbe6422701cL },
11393       { 0x347f5d517733d61cL,0xd55644b9cea826c3L,0x80c6e0ad55a25548L,
11394         0x0aa7641d844220a7L } },
11395     /* 45 << 7 */
11396     { { 0x1438ec8131810660L,0x9dfa6507de4b4043L,0x10b515d8cc3e0273L,
11397         0x1b6066dd28d8cfb2L },
11398       { 0xd3b045919c9efebdL,0x425d4bdfa21c1ff4L,0x5fe5af19d57607d3L,
11399         0xbbf773f754481084L } },
11400     /* 46 << 7 */
11401     { { 0x8435bd6994b03ed1L,0xd9ad1de3634cc546L,0x2cf423fc00e420caL,
11402         0xeed26d80a03096ddL },
11403       { 0xd7f60be7a4db09d2L,0xf47f569d960622f7L,0xe5925fd77296c729L,
11404         0xeff2db2626ca2715L } },
11405     /* 47 << 7 */
11406     { { 0xa6fcd014b913e759L,0x53da47868ff4de93L,0x14616d79c32068e1L,
11407         0xb187d664ccdf352eL },
11408       { 0xf7afb6501dc90b59L,0x8170e9437daa1b26L,0xc8e3bdd8700c0a84L,
11409         0x6e8d345f6482bdfaL } },
11410     /* 48 << 7 */
11411     { { 0x84cfbfa1c5c5ea50L,0xd3baf14c67960681L,0x263984030dd50942L,
11412         0xe4b7839c4716a663L },
11413       { 0xd5f1f794e7de6dc0L,0x5cd0f4d4622aa7ceL,0x5295f3f159acfeecL,
11414         0x8d933552953e0607L } },
11415     /* 49 << 7 */
11416     { { 0xc7db8ec5776c5722L,0xdc467e622b5f290cL,0xd4297e704ff425a9L,
11417         0x4be924c10cf7bb72L },
11418       { 0x0d5dc5aea1892131L,0x8bf8a8e3a705c992L,0x73a0b0647a305ac5L,
11419         0x00c9ca4e9a8c77a8L } },
11420     /* 50 << 7 */
11421     { { 0x5dfee80f83774bddL,0x6313160285734485L,0xa1b524ae914a69a9L,
11422         0xebc2ffafd4e300d7L },
11423       { 0x52c93db77cfa46a5L,0x71e6161f21653b50L,0x3574fc57a4bc580aL,
11424         0xc09015dde1bc1253L } },
11425     /* 51 << 7 */
11426     { { 0x4b7b47b2d174d7aaL,0x4072d8e8f3a15d04L,0xeeb7d47fd6fa07edL,
11427         0x6f2b9ff9edbdafb1L },
11428       { 0x18c516153760fe8aL,0x7a96e6bff06c6c13L,0x4d7a04100ea2d071L,
11429         0xa1914e9b0be2a5ceL } },
11430     /* 52 << 7 */
11431     { { 0x5726e357d8a3c5cfL,0x1197ecc32abb2b13L,0x6c0d7f7f31ae88ddL,
11432         0x15b20d1afdbb3efeL },
11433       { 0xcd06aa2670584039L,0x2277c969a7dc9747L,0xbca695877855d815L,
11434         0x899ea2385188b32aL } },
11435     /* 53 << 7 */
11436     { { 0x37d9228b760c1c9dL,0xc7efbb119b5c18daL,0x7f0d1bc819f6dbc5L,
11437         0x4875384b07e6905bL },
11438       { 0xc7c50baa3ba8cd86L,0xb0ce40fbc2905de0L,0x708406737a231952L,
11439         0xa912a262cf43de26L } },
11440     /* 54 << 7 */
11441     { { 0x9c38ddcceb5b76c1L,0x746f528526fc0ab4L,0x52a63a50d62c269fL,
11442         0x60049c5599458621L },
11443       { 0xe7f48f823c2f7c9eL,0x6bd99043917d5cf3L,0xeb1317a88701f469L,
11444         0xbd3fe2ed9a449fe0L } },
11445     /* 55 << 7 */
11446     { { 0x421e79ca12ef3d36L,0x9ee3c36c3e7ea5deL,0xe48198b5cdff36f7L,
11447         0xaff4f967c6b82228L },
11448       { 0x15e19dd0c47adb7eL,0x45699b23032e7dfaL,0x40680c8b1fae026aL,
11449         0x5a347a48550dbf4dL } },
11450     /* 56 << 7 */
11451     { { 0xe652533b3cef0d7dL,0xd94f7b182bbb4381L,0x838752be0e80f500L,
11452         0x8e6e24889e9c9bfbL },
11453       { 0xc975169716caca6aL,0x866c49d838531ad9L,0xc917e2397151ade1L,
11454         0x2d016ec16037c407L } },
11455     /* 57 << 7 */
11456     { { 0xa407ccc900eac3f9L,0x835f6280e2ed4748L,0xcc54c3471cc98e0dL,
11457         0x0e969937dcb572ebL },
11458       { 0x1b16c8e88f30c9cbL,0xa606ae75373c4661L,0x47aa689b35502cabL,
11459         0xf89014ae4d9bb64fL } },
11460     /* 58 << 7 */
11461     { { 0x202f6a9c31c71f7bL,0x01f95aa3296ffe5cL,0x5fc0601453cec3a3L,
11462         0xeb9912375f498a45L },
11463       { 0xae9a935e5d91ba87L,0xc6ac62810b564a19L,0x8a8fe81c3bd44e69L,
11464         0x7c8b467f9dd11d45L } },
11465     /* 59 << 7 */
11466     { { 0xf772251fea5b8e69L,0xaeecb3bdc5b75fbcL,0x1aca3331887ff0e5L,
11467         0xbe5d49ff19f0a131L },
11468       { 0x582c13aae5c8646fL,0xdbaa12e820e19980L,0x8f40f31af7abbd94L,
11469         0x1f13f5a81dfc7663L } },
11470     /* 60 << 7 */
11471     { { 0x5d81f1eeaceb4fc0L,0x362560025e6f0f42L,0x4b67d6d7751370c8L,
11472         0x2608b69803e80589L },
11473       { 0xcfc0d2fc05268301L,0xa6943d3940309212L,0x192a90c21fd0e1c2L,
11474         0xb209f11337f1dc76L } },
11475     /* 61 << 7 */
11476     { { 0xefcc5e0697bf1298L,0xcbdb6730219d639eL,0xd009c116b81e8c6fL,
11477         0xa3ffdde31a7ce2e5L },
11478       { 0xc53fbaaaa914d3baL,0x836d500f88df85eeL,0xd98dc71b66ee0751L,
11479         0x5a3d7005714516fdL } },
11480     /* 62 << 7 */
11481     { { 0x21d3634d39eedbbaL,0x35cd2e680455a46dL,0xc8cafe65f9d7eb0cL,
11482         0xbda3ce9e00cefb3eL },
11483       { 0xddc17a602c9cf7a4L,0x01572ee47bcb8773L,0xa92b2b018c7548dfL,
11484         0x732fd309a84600e3L } },
11485     /* 63 << 7 */
11486     { { 0xe22109c716543a40L,0x9acafd36fede3c6cL,0xfb2068526824e614L,
11487         0x2a4544a9da25dca0L },
11488       { 0x2598526291d60b06L,0x281b7be928753545L,0xec667b1a90f13b27L,
11489         0x33a83aff940e2eb4L } },
11490     /* 64 << 7 */
11491     { { 0x80009862d5d721d5L,0x0c3357a35bd3a182L,0x27f3a83b7aa2cda4L,
11492         0xb58ae74ef6f83085L },
11493       { 0x2a911a812e6dad6bL,0xde286051f43d6c5bL,0x4bdccc41f996c4d8L,
11494         0xe7312ec00ae1e24eL } },
11495     /* 0 << 14 */
11496     { { 0x00, 0x00, 0x00, 0x00 },
11497       { 0x00, 0x00, 0x00, 0x00 } },
11498     /* 1 << 14 */
11499     { { 0xf8d112e76e6485b3L,0x4d3e24db771c52f8L,0x48e3ee41684a2f6dL,
11500         0x7161957d21d95551L },
11501       { 0x19631283cdb12a6cL,0xbf3fa8822e50e164L,0xf6254b633166cc73L,
11502         0x3aefa7aeaee8cc38L } },
11503     /* 2 << 14 */
11504     { { 0x79b0fe623b36f9fdL,0x26543b23fde19fc0L,0x136e64a0958482efL,
11505         0x23f637719b095825L },
11506       { 0x14cfd596b6a1142eL,0x5ea6aac6335aac0bL,0x86a0e8bdf3081dd5L,
11507         0x5fb89d79003dc12aL } },
11508     /* 3 << 14 */
11509     { { 0xf615c33af72e34d4L,0x0bd9ea40110eec35L,0x1c12bc5bc1dea34eL,
11510         0x686584c949ae4699L },
11511       { 0x13ad95d38c97b942L,0x4609561a4e5c7562L,0x9e94a4aef2737f89L,
11512         0xf57594c6371c78b6L } },
11513     /* 4 << 14 */
11514     { { 0x0f0165fce3779ee3L,0xe00e7f9dbd495d9eL,0x1fa4efa220284e7aL,
11515         0x4564bade47ac6219L },
11516       { 0x90e6312ac4708e8eL,0x4f5725fba71e9adfL,0xe95f55ae3d684b9fL,
11517         0x47f7ccb11e94b415L } },
11518     /* 5 << 14 */
11519     { { 0x7322851b8d946581L,0xf0d13133bdf4a012L,0xa3510f696584dae0L,
11520         0x03a7c1713c9f6c6dL },
11521       { 0x5be97f38e475381aL,0xca1ba42285823334L,0xf83cc5c70be17ddaL,
11522         0x158b14940b918c0fL } },
11523     /* 6 << 14 */
11524     { { 0xda3a77e5522e6b69L,0x69c908c3bbcd6c18L,0x1f1b9e48d924fd56L,
11525         0x37c64e36aa4bb3f7L },
11526       { 0x5a4fdbdfee478d7dL,0xba75c8bc0193f7a0L,0x84bc1e8456cd16dfL,
11527         0x1fb08f0846fad151L } },
11528     /* 7 << 14 */
11529     { { 0x8a7cabf9842e9f30L,0xa331d4bf5eab83afL,0xd272cfba017f2a6aL,
11530         0x27560abc83aba0e3L },
11531       { 0x94b833870e3a6b75L,0x25c6aea26b9f50f5L,0x803d691db5fdf6d0L,
11532         0x03b77509e6333514L } },
11533     /* 8 << 14 */
11534     { { 0x3617890361a341c1L,0x3604dc600cfd6142L,0x022295eb8533316cL,
11535         0x3dbde4ac44af2922L },
11536       { 0x898afc5d1c7eef69L,0x58896805d14f4fa1L,0x05002160203c21caL,
11537         0x6f0d1f3040ef730bL } },
11538     /* 9 << 14 */
11539     { { 0x8e8c44d4196224f8L,0x75a4ab95374d079dL,0x79085ecc7d48f123L,
11540         0x56f04d311bf65ad8L },
11541       { 0xe220bf1cbda602b2L,0x73ee1742f9612c69L,0x76008fc8084fd06bL,
11542         0x4000ef9ff11380d1L } },
11543     /* 10 << 14 */
11544     { { 0x48201b4b12cfe297L,0x3eee129c292f74e5L,0xe1fe114ec9e874e8L,
11545         0x899b055c92c5fc41L },
11546       { 0x4e477a643a39c8cfL,0x82f09efe78963cc9L,0x6fd3fd8fd333f863L,
11547         0x85132b2adc949c63L } },
11548     /* 11 << 14 */
11549     { { 0x7e06a3ab516eb17bL,0x73bec06fd2c7372bL,0xe4f74f55ba896da6L,
11550         0xbb4afef88e9eb40fL },
11551       { 0x2d75bec8e61d66b0L,0x02bda4b4ef29300bL,0x8bbaa8de026baa5aL,
11552         0xff54befda07f4440L } },
11553     /* 12 << 14 */
11554     { { 0xbd9b8b1dbe7a2af3L,0xec51caa94fb74a72L,0xb9937a4b63879697L,
11555         0x7c9a9d20ec2687d5L },
11556       { 0x1773e44f6ef5f014L,0x8abcf412e90c6900L,0x387bd0228142161eL,
11557         0x50393755fcb6ff2aL } },
11558     /* 13 << 14 */
11559     { { 0x9813fd56ed6def63L,0x53cf64827d53106cL,0x991a35bd431f7ac1L,
11560         0xf1e274dd63e65fafL },
11561       { 0xf63ffa3c44cc7880L,0x411a426b7c256981L,0xb698b9fd93a420e0L,
11562         0x89fdddc0ae53f8feL } },
11563     /* 14 << 14 */
11564     { { 0x766e072232398baaL,0x205fee425cfca031L,0xa49f53417a029cf2L,
11565         0xa88c68b84023890dL },
11566       { 0xbc2750417337aaa8L,0x9ed364ad0eb384f4L,0xe0816f8529aba92fL,
11567         0x2e9e194104e38a88L } },
11568     /* 15 << 14 */
11569     { { 0x57eef44a3dafd2d5L,0x35d1fae597ed98d8L,0x50628c092307f9b1L,
11570         0x09d84aaed6cba5c6L },
11571       { 0x67071bc788aaa691L,0x2dea57a9afe6cb03L,0xdfe11bb43d78ac01L,
11572         0x7286418c7fd7aa51L } },
11573     /* 16 << 14 */
11574     { { 0xfabf770977f7195aL,0x8ec86167adeb838fL,0xea1285a8bb4f012dL,
11575         0xd68835039a3eab3fL },
11576       { 0xee5d24f8309004c2L,0xa96e4b7613ffe95eL,0x0cdffe12bd223ea4L,
11577         0x8f5c2ee5b6739a53L } },
11578     /* 17 << 14 */
11579     { { 0x5cb4aaa5dd968198L,0xfa131c5272413a6cL,0x53d46a909536d903L,
11580         0xb270f0d348606d8eL },
11581       { 0x518c7564a053a3bcL,0x088254b71a86caefL,0xb3ba8cb40ab5efd0L,
11582         0x5c59900e4605945dL } },
11583     /* 18 << 14 */
11584     { { 0xecace1dda1887395L,0x40960f36932a65deL,0x9611ff5c3aa95529L,
11585         0xc58215b07c1e5a36L },
11586       { 0xd48c9b58f0e1a524L,0xb406856bf590dfb8L,0xc7605e049cd95662L,
11587         0x0dd036eea33ecf82L } },
11588     /* 19 << 14 */
11589     { { 0xa50171acc33156b3L,0xf09d24ea4a80172eL,0x4e1f72c676dc8eefL,
11590         0xe60caadc5e3d44eeL },
11591       { 0x006ef8a6979b1d8fL,0x60908a1c97788d26L,0x6e08f95b266feec0L,
11592         0x618427c222e8c94eL } },
11593     /* 20 << 14 */
11594     { { 0x3d61333959145a65L,0xcd9bc368fa406337L,0x82d11be32d8a52a0L,
11595         0xf6877b2797a1c590L },
11596       { 0x837a819bf5cbdb25L,0x2a4fd1d8de090249L,0x622a7de774990e5fL,
11597         0x840fa5a07945511bL } },
11598     /* 21 << 14 */
11599     { { 0x30b974be6558842dL,0x70df8c6417f3d0a6L,0x7c8035207542e46dL,
11600         0x7251fe7fe4ecc823L },
11601       { 0xe59134cb5e9aac9aL,0x11bb0934f0045d71L,0x53e5d9b5dbcb1d4eL,
11602         0x8d97a90592defc91L } },
11603     /* 22 << 14 */
11604     { { 0xfe2893277946d3f9L,0xe132bd2407472273L,0xeeeb510c1eb6ae86L,
11605         0x777708c5f0595067L },
11606       { 0x18e2c8cd1297029eL,0x2c61095cbbf9305eL,0xe466c2586b85d6d9L,
11607         0x8ac06c36da1ea530L } },
11608     /* 23 << 14 */
11609     { { 0xa365dc39a1304668L,0xe4a9c88507f89606L,0x65a4898facc7228dL,
11610         0x3e2347ff84ca8303L },
11611       { 0xa5f6fb77ea7d23a3L,0x2fac257d672a71cdL,0x6908bef87e6a44d3L,
11612         0x8ff87566891d3d7aL } },
11613     /* 24 << 14 */
11614     { { 0xe58e90b36b0cf82eL,0x6438d2462615b5e7L,0x07b1f8fc669c145aL,
11615         0xb0d8b2da36f1e1cbL },
11616       { 0x54d5dadbd9184c4dL,0x3dbb18d5f93d9976L,0x0a3e0f56d1147d47L,
11617         0x2afa8c8da0a48609L } },
11618     /* 25 << 14 */
11619     { { 0x275353e8bc36742cL,0x898f427eeea0ed90L,0x26f4947e3e477b00L,
11620         0x8ad8848a308741e3L },
11621       { 0x6c703c38d74a2a46L,0x5e3e05a99ba17ba2L,0xc1fa6f664ab9a9e4L,
11622         0x474a2d9a3841d6ecL } },
11623     /* 26 << 14 */
11624     { { 0x871239ad653ae326L,0x14bcf72aa74cbb43L,0x8737650e20d4c083L,
11625         0x3df86536110ed4afL },
11626       { 0xd2d86fe7b53ca555L,0x688cb00dabd5d538L,0xcf81bda31ad38468L,
11627         0x7ccfe3ccf01167b6L } },
11628     /* 27 << 14 */
11629     { { 0xcf4f47e06c4c1fe6L,0x557e1f1a298bbb79L,0xf93b974f30d45a14L,
11630         0x174a1d2d0baf97c4L },
11631       { 0x7a003b30c51fbf53L,0xd8940991ee68b225L,0x5b0aa7b71c0f4173L,
11632         0x975797c9a20a7153L } },
11633     /* 28 << 14 */
11634     { { 0x26e08c07e3533d77L,0xd7222e6a2e341c99L,0x9d60ec3d8d2dc4edL,
11635         0xbdfe0d8f7c476cf8L },
11636       { 0x1fe59ab61d056605L,0xa9ea9df686a8551fL,0x8489941e47fb8d8cL,
11637         0xfeb874eb4a7f1b10L } },
11638     /* 29 << 14 */
11639     { { 0xfe5fea867ee0d98fL,0x201ad34bdbf61864L,0x45d8fe4737c031d4L,
11640         0xd5f49fae795f0822L },
11641       { 0xdb0fb291c7f4a40cL,0x2e69d9c1730ddd92L,0x754e105449d76987L,
11642         0x8a24911d7662db87L } },
11643     /* 30 << 14 */
11644     { { 0x61fc181060a71676L,0xe852d1a8f66a8ad1L,0x172bbd656417231eL,
11645         0x0d6de7bd3babb11fL },
11646       { 0x6fde6f88c8e347f8L,0x1c5875479bd99cc3L,0x78e54ed034076950L,
11647         0x97f0f334796e83baL } },
11648     /* 31 << 14 */
11649     { { 0xe4dbe1ce4924867aL,0xbd5f51b060b84917L,0x375300403cb09a79L,
11650         0xdb3fe0f8ff1743d8L },
11651       { 0xed7894d8556fa9dbL,0xfa26216923412fbfL,0x563be0dbba7b9291L,
11652         0x6ca8b8c00c9fb234L } },
11653     /* 32 << 14 */
11654     { { 0xed406aa9bd763802L,0xc21486a065303da1L,0x61ae291ec7e62ec4L,
11655         0x622a0492df99333eL },
11656       { 0x7fd80c9dbb7a8ee0L,0xdc2ed3bc6c01aedbL,0x35c35a1208be74ecL,
11657         0xd540cb1a469f671fL } },
11658     /* 33 << 14 */
11659     { { 0xd16ced4ecf84f6c7L,0x8561fb9c2d090f43L,0x7e693d796f239db4L,
11660         0xa736f92877bd0d94L },
11661       { 0x07b4d9292c1950eeL,0xda17754356dc11b3L,0xa5dfbbaa7a6a878eL,
11662         0x1c70cb294decb08aL } },
11663     /* 34 << 14 */
11664     { { 0xfba28c8b6f0f7c50L,0xa8eba2b8854dcc6dL,0x5ff8e89a36b78642L,
11665         0x070c1c8ef6873adfL },
11666       { 0xbbd3c3716484d2e4L,0xfb78318f0d414129L,0x2621a39c6ad93b0bL,
11667         0x979d74c2a9e917f7L } },
11668     /* 35 << 14 */
11669     { { 0xfc19564761fb0428L,0x4d78954abee624d4L,0xb94896e0b8ae86fdL,
11670         0x6667ac0cc91c8b13L },
11671       { 0x9f18051243bcf832L,0xfbadf8b7a0010137L,0xc69b4089b3ba8aa7L,
11672         0xfac4bacde687ce85L } },
11673     /* 36 << 14 */
11674     { { 0x9164088d977eab40L,0x51f4c5b62760b390L,0xd238238f340dd553L,
11675         0x358566c3db1d31c9L },
11676       { 0x3a5ad69e5068f5ffL,0xf31435fcdaff6b06L,0xae549a5bd6debff0L,
11677         0x59e5f0b775e01331L } },
11678     /* 37 << 14 */
11679     { { 0x5d492fb898559acfL,0x96018c2e4db79b50L,0x55f4a48f609f66aaL,
11680         0x1943b3af4900a14fL },
11681       { 0xc22496df15a40d39L,0xb2a446844c20f7c5L,0x76a35afa3b98404cL,
11682         0xbec75725ff5d1b77L } },
11683     /* 38 << 14 */
11684     { { 0xb67aa163bea06444L,0x27e95bb2f724b6f2L,0x3c20e3e9d238c8abL,
11685         0x1213754eddd6ae17L },
11686       { 0x8c431020716e0f74L,0x6679c82effc095c2L,0x2eb3adf4d0ac2932L,
11687         0x2cc970d301bb7a76L } },
11688     /* 39 << 14 */
11689     { { 0x70c71f2f740f0e66L,0x545c616b2b6b23ccL,0x4528cfcbb40a8bd7L,
11690         0xff8396332ab27722L },
11691       { 0x049127d9025ac99aL,0xd314d4a02b63e33bL,0xc8c310e728d84519L,
11692         0x0fcb8983b3bc84baL } },
11693     /* 40 << 14 */
11694     { { 0x2cc5226138634818L,0x501814f4b44c2e0bL,0xf7e181aa54dfdba3L,
11695         0xcfd58ff0e759718cL },
11696       { 0xf90cdb14d3b507a8L,0x57bd478ec50bdad8L,0x29c197e250e5f9aaL,
11697         0x4db6eef8e40bc855L } },
11698     /* 41 << 14 */
11699     { { 0x2cc8f21ad1fc0654L,0xc71cc96381269d73L,0xecfbb204077f49f9L,
11700         0xdde92571ca56b793L },
11701       { 0x9abed6a3f97ad8f7L,0xe6c19d3f924de3bdL,0x8dce92f4a140a800L,
11702         0x85f44d1e1337af07L } },
11703     /* 42 << 14 */
11704     { { 0x5953c08b09d64c52L,0xa1b5e49ff5df9749L,0x336a8fb852735f7dL,
11705         0xb332b6db9add676bL },
11706       { 0x558b88a0b4511aa4L,0x09788752dbd5cc55L,0x16b43b9cd8cd52bdL,
11707         0x7f0bc5a0c2a2696bL } },
11708     /* 43 << 14 */
11709     { { 0x146e12d4c11f61efL,0x9ce107543a83e79eL,0x08ec73d96cbfca15L,
11710         0x09ff29ad5b49653fL },
11711       { 0xe31b72bde7da946eL,0xebf9eb3bee80a4f2L,0xd1aabd0817598ce4L,
11712         0x18b5fef453f37e80L } },
11713     /* 44 << 14 */
11714     { { 0xd5d5cdd35958cd79L,0x3580a1b51d373114L,0xa36e4c91fa935726L,
11715         0xa38c534def20d760L },
11716       { 0x7088e40a2ff5845bL,0xe5bb40bdbd78177fL,0x4f06a7a8857f9920L,
11717         0xe3cc3e50e968f05dL } },
11718     /* 45 << 14 */
11719     { { 0x1d68b7fee5682d26L,0x5206f76faec7f87cL,0x41110530041951abL,
11720         0x58ec52c1d4b5a71aL },
11721       { 0xf3488f990f75cf9aL,0xf411951fba82d0d5L,0x27ee75be618895abL,
11722         0xeae060d46d8aab14L } },
11723     /* 46 << 14 */
11724     { { 0x9ae1df737fb54dc2L,0x1f3e391b25963649L,0x242ec32afe055081L,
11725         0x5bd450ef8491c9bdL },
11726       { 0x367efc67981eb389L,0xed7e19283a0550d5L,0x362e776bab3ce75cL,
11727         0xe890e3081f24c523L } },
11728     /* 47 << 14 */
11729     { { 0xb961b682feccef76L,0x8b8e11f58bba6d92L,0x8f2ccc4c2b2375c4L,
11730         0x0d7f7a52e2f86cfaL },
11731       { 0xfd94d30a9efe5633L,0x2d8d246b5451f934L,0x2234c6e3244e6a00L,
11732         0xde2b5b0dddec8c50L } },
11733     /* 48 << 14 */
11734     { { 0x2ce53c5abf776f5bL,0x6f72407160357b05L,0xb259371771bf3f7aL,
11735         0x87d2501c440c4a9fL },
11736       { 0x440552e187b05340L,0xb7bf7cc821624c32L,0x4155a6ce22facddbL,
11737         0x5a4228cb889837efL } },
11738     /* 49 << 14 */
11739     { { 0xef87d6d6fd4fd671L,0xa233687ec2daa10eL,0x7562224403c0eb96L,
11740         0x7632d1848bf19be6L },
11741       { 0x05d0f8e940735ff4L,0x3a3e6e13c00931f1L,0x31ccde6adafe3f18L,
11742         0xf381366acfe51207L } },
11743     /* 50 << 14 */
11744     { { 0x24c222a960167d92L,0x62f9d6f87529f18cL,0x412397c00353b114L,
11745         0x334d89dcef808043L },
11746       { 0xd9ec63ba2a4383ceL,0xcec8e9375cf92ba0L,0xfb8b4288c8be74c0L,
11747         0x67d6912f105d4391L } },
11748     /* 51 << 14 */
11749     { { 0x7b996c461b913149L,0x36aae2ef3a4e02daL,0xb68aa003972de594L,
11750         0x284ec70d4ec6d545L },
11751       { 0xf3d2b2d061391d54L,0x69c5d5d6fe114e92L,0xbe0f00b5b4482dffL,
11752         0xe1596fa5f5bf33c5L } },
11753     /* 52 << 14 */
11754     { { 0x10595b5696a71cbaL,0x944938b2fdcadeb7L,0xa282da4cfccd8471L,
11755         0x98ec05f30d37bfe1L },
11756       { 0xe171ce1b0698304aL,0x2d69144421bdf79bL,0xd0cd3b741b21dec1L,
11757         0x712ecd8b16a15f71L } },
11758     /* 53 << 14 */
11759     { { 0x8d4c00a700fd56e1L,0x02ec9692f9527c18L,0x21c449374a3e42e1L,
11760         0x9176fbab1392ae0aL },
11761       { 0x8726f1ba44b7b618L,0xb4d7aae9f1de491cL,0xf91df7b907b582c0L,
11762         0x7e116c30ef60aa3aL } },
11763     /* 54 << 14 */
11764     { { 0x99270f81466265d7L,0xb15b6fe24df7adf0L,0xfe33b2d3f9738f7fL,
11765         0x48553ab9d6d70f95L },
11766       { 0x2cc72ac8c21e94dbL,0x795ac38dbdc0bbeeL,0x0a1be4492e40478fL,
11767         0x81bd3394052bde55L } },
11768     /* 55 << 14 */
11769     { { 0x63c8dbe956b3c4f2L,0x017a99cf904177ccL,0x947bbddb4d010fc1L,
11770         0xacf9b00bbb2c9b21L },
11771       { 0x2970bc8d47173611L,0x1a4cbe08ac7d756fL,0x06d9f4aa67d541a2L,
11772         0xa3e8b68959c2cf44L } },
11773     /* 56 << 14 */
11774     { { 0xaad066da4d88f1ddL,0xc604f1657ad35deaL,0x7edc07204478ca67L,
11775         0xa10dfae0ba02ce06L },
11776       { 0xeceb1c76af36f4e4L,0x994b2292af3f8f48L,0xbf9ed77b77c8a68cL,
11777         0x74f544ea51744c9dL } },
11778     /* 57 << 14 */
11779     { { 0x82d05bb98113a757L,0x4ef2d2b48a9885e4L,0x1e332be51aa7865fL,
11780         0x22b76b18290d1a52L },
11781       { 0x308a231044351683L,0x9d861896a3f22840L,0x5959ddcd841ed947L,
11782         0x0def0c94154b73bfL } },
11783     /* 58 << 14 */
11784     { { 0xf01054174c7c15e0L,0x539bfb023a277c32L,0xe699268ef9dccf5fL,
11785         0x9f5796a50247a3bdL },
11786       { 0x8b839de84f157269L,0xc825c1e57a30196bL,0x6ef0aabcdc8a5a91L,
11787         0xf4a8ce6c498b7fe6L } },
11788     /* 59 << 14 */
11789     { { 0x1cce35a770cbac78L,0x83488e9bf6b23958L,0x0341a070d76cb011L,
11790         0xda6c9d06ae1b2658L },
11791       { 0xb701fb30dd648c52L,0x994ca02c52fb9fd1L,0x069331176f563086L,
11792         0x3d2b810017856babL } },
11793     /* 60 << 14 */
11794     { { 0xe89f48c85963a46eL,0x658ab875a99e61c7L,0x6e296f874b8517b4L,
11795         0x36c4fcdcfc1bc656L },
11796       { 0xde5227a1a3906defL,0x9fe95f5762418945L,0x20c91e81fdd96cdeL,
11797         0x5adbe47eda4480deL } },
11798     /* 61 << 14 */
11799     { { 0xa009370f396de2b6L,0x98583d4bf0ecc7bdL,0xf44f6b57e51d0672L,
11800         0x03d6b078556b1984L },
11801       { 0x27dbdd93b0b64912L,0x9b3a343415687b09L,0x0dba646151ec20a9L,
11802         0xec93db7fff28187cL } },
11803     /* 62 << 14 */
11804     { { 0x00ff8c2466e48bddL,0x2514f2f911ccd78eL,0xeba11f4fe1250603L,
11805         0x8a22cd41243fa156L },
11806       { 0xa4e58df4b283e4c6L,0x78c298598b39783fL,0x5235aee2a5259809L,
11807         0xc16284b50e0227ddL } },
11808     /* 63 << 14 */
11809     { { 0xa5f579161338830dL,0x6d4b8a6bd2123fcaL,0x236ea68af9c546f8L,
11810         0xc1d36873fa608d36L },
11811       { 0xcd76e4958d436d13L,0xd4d9c2218fb080afL,0x665c1728e8ad3fb5L,
11812         0xcf1ebe4db3d572e0L } },
11813     /* 64 << 14 */
11814     { { 0xa7a8746a584c5e20L,0x267e4ea1b9dc7035L,0x593a15cfb9548c9bL,
11815         0x5e6e21354bd012f3L },
11816       { 0xdf31cc6a8c8f936eL,0x8af84d04b5c241dcL,0x63990a6f345efb86L,
11817         0x6fef4e61b9b962cbL } },
11818     /* 0 << 21 */
11819     { { 0x00, 0x00, 0x00, 0x00 },
11820       { 0x00, 0x00, 0x00, 0x00 } },
11821     /* 1 << 21 */
11822     { { 0xf6368f0925722608L,0x131260db131cf5c6L,0x40eb353bfab4f7acL,
11823         0x85c7888037eee829L },
11824       { 0x4c1581ffc3bdf24eL,0x5bff75cbf5c3c5a8L,0x35e8c83fa14e6f40L,
11825         0xb81d1c0f0295e0caL } },
11826     /* 2 << 21 */
11827     { { 0xfcde7cc8f43a730fL,0xe89b6f3c33ab590eL,0xc823f529ad03240bL,
11828         0x82b79afe98bea5dbL },
11829       { 0x568f2856962fe5deL,0x0c590adb60c591f3L,0x1fc74a144a28a858L,
11830         0x3b662498b3203f4cL } },
11831     /* 3 << 21 */
11832     { { 0x91e3cf0d6c39765aL,0xa2db3acdac3cca0bL,0x288f2f08cb953b50L,
11833         0x2414582ccf43cf1aL },
11834       { 0x8dec8bbc60eee9a8L,0x54c79f02729aa042L,0xd81cd5ec6532f5d5L,
11835         0xa672303acf82e15fL } },
11836     /* 4 << 21 */
11837     { { 0x376aafa8719c0563L,0xcd8ad2dcbc5fc79fL,0x303fdb9fcb750cd3L,
11838         0x14ff052f4418b08eL },
11839       { 0xf75084cf3e2d6520L,0x7ebdf0f8144ed509L,0xf43bf0f2d3f25b98L,
11840         0x86ad71cfa354d837L } },
11841     /* 5 << 21 */
11842     { { 0xb827fe9226f43572L,0xdfd3ab5b5d824758L,0x315dd23a539094c1L,
11843         0x85c0e37a66623d68L },
11844       { 0x575c79727be19ae0L,0x616a3396df0d36b5L,0xa1ebb3c826b1ff7eL,
11845         0x635b9485140ad453L } },
11846     /* 6 << 21 */
11847     { { 0x92bf3cdada430c0bL,0x4702850e3a96dac6L,0xc91cf0a515ac326aL,
11848         0x95de4f49ab8c25e4L },
11849       { 0xb01bad09e265c17cL,0x24e45464087b3881L,0xd43e583ce1fac5caL,
11850         0xe17cb3186ead97a6L } },
11851     /* 7 << 21 */
11852     { { 0x6cc3924374dcec46L,0x33cfc02d54c2b73fL,0x82917844f26cd99cL,
11853         0x8819dd95d1773f89L },
11854       { 0x09572aa60871f427L,0x8e0cf365f6f01c34L,0x7fa52988bff1f5afL,
11855         0x4eb357eae75e8e50L } },
11856     /* 8 << 21 */
11857     { { 0xd9d0c8c4868af75dL,0xd7325cff45c8c7eaL,0xab471996cc81ecb0L,
11858         0xff5d55f3611824edL },
11859       { 0xbe3145411977a0eeL,0x5085c4c5722038c6L,0x2d5335bff94bb495L,
11860         0x894ad8a6c8e2a082L } },
11861     /* 9 << 21 */
11862     { { 0x5c3e2341ada35438L,0xf4a9fc89049b8c4eL,0xbeeb355a9f17cf34L,
11863         0x3f311e0e6c91fe10L },
11864       { 0xc2d2003892ab9891L,0x257bdcc13e8ce9a9L,0x1b2d978988c53beeL,
11865         0x927ce89acdba143aL } },
11866     /* 10 << 21 */
11867     { { 0xb0a32cca523db280L,0x5c889f8a50d43783L,0x503e04b34897d16fL,
11868         0x8cdb6e7808f5f2e8L },
11869       { 0x6ab91cf0179c8e74L,0xd8874e5248211d60L,0xf948d4d5ea851200L,
11870         0x4076d41ee6f9840aL } },
11871     /* 11 << 21 */
11872     { { 0xc20e263c47b517eaL,0x79a448fd30685e5eL,0xe55f6f78f90631a0L,
11873         0x88a790b1a79e6346L },
11874       { 0x62160c7d80969fe8L,0x54f92fd441491bb9L,0xa6645c235c957526L,
11875         0xf44cc5aebea3ce7bL } },
11876     /* 12 << 21 */
11877     { { 0xf76283278b1e68b7L,0xc731ad7a303f29d3L,0xfe5a9ca957d03ecbL,
11878         0x96c0d50c41bc97a7L },
11879       { 0xc4669fe79b4f7f24L,0xfdd781d83d9967efL,0x7892c7c35d2c208dL,
11880         0x8bf64f7cae545cb3L } },
11881     /* 13 << 21 */
11882     { { 0xc01f862c467be912L,0xf4c85ee9c73d30ccL,0x1fa6f4be6ab83ec7L,
11883         0xa07a3c1c4e3e3cf9L },
11884       { 0x87f8ef450c00beb3L,0x30e2c2b3000d4c3eL,0x1aa00b94fe08bf5bL,
11885         0x32c133aa9224ef52L } },
11886     /* 14 << 21 */
11887     { { 0x38df16bb32e5685dL,0x68a9e06958e6f544L,0x495aaff7cdc5ebc6L,
11888         0xf894a645378b135fL },
11889       { 0xf316350a09e27ecfL,0xeced201e58f7179dL,0x2eec273ce97861baL,
11890         0x47ec2caed693be2eL } },
11891     /* 15 << 21 */
11892     { { 0xfa4c97c4f68367ceL,0xe4f47d0bbe5a5755L,0x17de815db298a979L,
11893         0xd7eca659c177dc7dL },
11894       { 0x20fdbb7149ded0a3L,0x4cb2aad4fb34d3c5L,0x2cf31d2860858a33L,
11895         0x3b6873efa24aa40fL } },
11896     /* 16 << 21 */
11897     { { 0x540234b22c11bb37L,0x2d0366dded4c74a3L,0xf9a968daeec5f25dL,
11898         0x3660106867b63142L },
11899       { 0x07cd6d2c68d7b6d4L,0xa8f74f090c842942L,0xe27514047768b1eeL,
11900         0x4b5f7e89fe62aee4L } },
11901     /* 17 << 21 */
11902     { { 0xc6a7717789070d26L,0xa1f28e4edd1c8bc7L,0xea5f4f06469e1f17L,
11903         0x78fc242afbdb78e0L },
11904       { 0xc9c7c5928b0588f1L,0xb6b7a0fd1535921eL,0xcc5bdb91bde5ae35L,
11905         0xb42c485e12ff1864L } },
11906     /* 18 << 21 */
11907     { { 0xa1113e13dbab98aaL,0xde9d469ba17b1024L,0x23f48b37c0462d3aL,
11908         0x3752e5377c5c078dL },
11909       { 0xe3a86add15544eb9L,0xf013aea780fba279L,0x8b5bb76cf22001b5L,
11910         0xe617ba14f02891abL } },
11911     /* 19 << 21 */
11912     { { 0xd39182a6936219d3L,0x5ce1f194ae51cb19L,0xc78f8598bf07a74cL,
11913         0x6d7158f222cbf1bcL },
11914       { 0x3b846b21e300ce18L,0x35fba6302d11275dL,0x5fe25c36a0239b9bL,
11915         0xd8beb35ddf05d940L } },
11916     /* 20 << 21 */
11917     { { 0x4db02bb01f7e320dL,0x0641c3646da320eaL,0x6d95fa5d821389a3L,
11918         0x926997488fcd8e3dL },
11919       { 0x316fef17ceb6c143L,0x67fcb841d933762bL,0xbb837e35118b17f8L,
11920         0x4b92552f9fd24821L } },
11921     /* 21 << 21 */
11922     { { 0xae6bc70e46aca793L,0x1cf0b0e4e579311bL,0x8dc631be5802f716L,
11923         0x099bdc6fbddbee4dL },
11924       { 0xcc352bb20caf8b05L,0xf74d505a72d63df2L,0xb9876d4b91c4f408L,
11925         0x1ce184739e229b2dL } },
11926     /* 22 << 21 */
11927     { { 0x4950759783abdb4aL,0x850fbcb6dee84b18L,0x6325236e609e67dcL,
11928         0x04d831d99336c6d8L },
11929       { 0x8deaae3bfa12d45dL,0xe425f8ce4746e246L,0x8004c17524f5f31eL,
11930         0xaca16d8fad62c3b7L } },
11931     /* 23 << 21 */
11932     { { 0x0dc15a6a9152f934L,0xf1235e5ded0e12c1L,0xc33c06ecda477dacL,
11933         0x76be8732b2ea0006L },
11934       { 0xcf3f78310c0cd313L,0x3c524553a614260dL,0x31a756f8cab22d15L,
11935         0x03ee10d177827a20L } },
11936     /* 24 << 21 */
11937     { { 0xd1e059b21994ef20L,0x2a653b69638ae318L,0x70d5eb582f699010L,
11938         0x279739f709f5f84aL },
11939       { 0x5da4663c8b799336L,0xfdfdf14d203c37ebL,0x32d8a9dca1dbfb2dL,
11940         0xab40cff077d48f9bL } },
11941     /* 25 << 21 */
11942     { { 0xc018b383d20b42d5L,0xf9a810ef9f78845fL,0x40af3753bdba9df0L,
11943         0xb90bdcfc131dfdf9L },
11944       { 0x18720591f01ab782L,0xc823f2116af12a88L,0xa51b80f30dc14401L,
11945         0xde248f77fb2dfbe3L } },
11946     /* 26 << 21 */
11947     { { 0xef5a44e50cafe751L,0x73997c9cd4dcd221L,0x32fd86d1de854024L,
11948         0xd5b53adca09b84bbL },
11949       { 0x008d7a11dcedd8d1L,0x406bd1c874b32c84L,0x5d4472ff05dde8b1L,
11950         0x2e25f2cdfce2b32fL } },
11951     /* 27 << 21 */
11952     { { 0xbec0dd5e29dfc254L,0x4455fcf62b98b267L,0x0b4d43a5c72df2adL,
11953         0xea70e6be48a75397L },
11954       { 0x2aad61695820f3bfL,0xf410d2dd9e37f68fL,0x70fb7dba7be5ac83L,
11955         0x636bb64536ec3eecL } },
11956     /* 28 << 21 */
11957     { { 0x27104ea39754e21cL,0xbc87a3e68d63c373L,0x483351d74109db9aL,
11958         0x0fa724e360134da7L },
11959       { 0x9ff44c29b0720b16L,0x2dd0cf1306aceeadL,0x5942758ce26929a6L,
11960         0x96c5db92b766a92bL } },
11961     /* 29 << 21 */
11962     { { 0xcec7d4c05f18395eL,0xd3f227441f80d032L,0x7a68b37acb86075bL,
11963         0x074764ddafef92dbL },
11964       { 0xded1e9507bc7f389L,0xc580c850b9756460L,0xaeeec2a47da48157L,
11965         0x3f0b4e7f82c587b3L } },
11966     /* 30 << 21 */
11967     { { 0x231c6de8a9f19c53L,0x5717bd736974e34eL,0xd9e1d216f1508fa9L,
11968         0x9f112361dadaa124L },
11969       { 0x80145e31823b7348L,0x4dd8f0d5ac634069L,0xe3d82fc72297c258L,
11970         0x276fcfee9cee7431L } },
11971     /* 31 << 21 */
11972     { { 0x8eb61b5e2bc0aea9L,0x4f668fd5de329431L,0x03a32ab138e4b87eL,
11973         0xe137451773d0ef0bL },
11974       { 0x1a46f7e6853ac983L,0xc3bdf42e68e78a57L,0xacf207852ea96dd1L,
11975         0xa10649b9f1638460L } },
11976     /* 32 << 21 */
11977     { { 0xf2369f0b879fbbedL,0x0ff0ae86da9d1869L,0x5251d75956766f45L,
11978         0x4984d8c02be8d0fcL },
11979       { 0x7ecc95a6d21008f0L,0x29bd54a03a1a1c49L,0xab9828c5d26c50f3L,
11980         0x32c0087c51d0d251L } },
11981     /* 33 << 21 */
11982     { { 0x9bac3ce60c1cdb26L,0xcd94d947557ca205L,0x1b1bd5989db1fdcdL,
11983         0x0eda0108a3d8b149L },
11984       { 0x9506661056152fccL,0xc2f037e6e7192b33L,0xdeffb41ac92e05a4L,
11985         0x1105f6c2c2f6c62eL } },
11986     /* 34 << 21 */
11987     { { 0x68e735008733913cL,0xcce861633f3adc40L,0xf407a94238a278e9L,
11988         0xd13c1b9d2ab21292L },
11989       { 0x93ed7ec71c74cf5cL,0x8887dc48f1a4c1b4L,0x3830ff304b3a11f1L,
11990         0x358c5a3c58937cb6L } },
11991     /* 35 << 21 */
11992     { { 0x027dc40489022829L,0x40e939773b798f79L,0x90ad333738be6eadL,
11993         0x9c23f6bcf34c0a5dL },
11994       { 0xd1711a35fbffd8bbL,0x60fcfb491949d3ddL,0x09c8ef4b7825d93aL,
11995         0x24233cffa0a8c968L } },
11996     /* 36 << 21 */
11997     { { 0x67ade46ce6d982afL,0xebb6bf3ee7544d7cL,0xd6b9ba763d8bd087L,
11998         0x46fe382d4dc61280L },
11999       { 0xbd39a7e8b5bdbd75L,0xab381331b8f228feL,0x0709a77cce1c4300L,
12000         0x6a247e56f337ceacL } },
12001     /* 37 << 21 */
12002     { { 0x8f34f21b636288beL,0x9dfdca74c8a7c305L,0x6decfd1bea919e04L,
12003         0xcdf2688d8e1991f8L },
12004       { 0xe607df44d0f8a67eL,0xd985df4b0b58d010L,0x57f834c50c24f8f4L,
12005         0xe976ef56a0bf01aeL } },
12006     /* 38 << 21 */
12007     { { 0x536395aca1c32373L,0x351027aa734c0a13L,0xd2f1b5d65e6bd5bcL,
12008         0x2b539e24223debedL },
12009       { 0xd4994cec0eaa1d71L,0x2a83381d661dcf65L,0x5f1aed2f7b54c740L,
12010         0x0bea3fa5d6dda5eeL } },
12011     /* 39 << 21 */
12012     { { 0x9d4fb68436cc6134L,0x8eb9bbf3c0a443ddL,0xfc500e2e383b7d2aL,
12013         0x7aad621c5b775257L },
12014       { 0x69284d740a8f7cc0L,0xe820c2ce07562d65L,0xbf9531b9499758eeL,
12015         0x73e95ca56ee0cc2dL } },
12016     /* 40 << 21 */
12017     { { 0xf61790abfbaf50a5L,0xdf55e76b684e0750L,0xec516da7f176b005L,
12018         0x575553bb7a2dddc7L },
12019       { 0x37c87ca3553afa73L,0x315f3ffc4d55c251L,0xe846442aaf3e5d35L,
12020         0x61b911496495ff28L } },
12021     /* 41 << 21 */
12022     { { 0x23cc95d3fa326dc3L,0x1df4da1f18fc2ceaL,0x24bf9adcd0a37d59L,
12023         0xb6710053320d6e1eL },
12024       { 0x96f9667e618344d1L,0xcc7ce042a06445afL,0xa02d8514d68dbc3aL,
12025         0x4ea109e4280b5a5bL } },
12026     /* 42 << 21 */
12027     { { 0x5741a7acb40961bfL,0x4ada59376aa56bfaL,0x7feb914502b765d1L,
12028         0x561e97bee6ad1582L },
12029       { 0xbbc4a5b6da3982f5L,0x0c2659edb546f468L,0xb8e7e6aa59612d20L,
12030         0xd83dfe20ac19e8e0L } },
12031     /* 43 << 21 */
12032     { { 0x8530c45fb835398cL,0x6106a8bfb38a41c2L,0x21e8f9a635f5dcdbL,
12033         0x39707137cae498edL },
12034       { 0x70c23834d8249f00L,0x9f14b58fab2537a0L,0xd043c3655f61c0c2L,
12035         0xdc5926d609a194a7L } },
12036     /* 44 << 21 */
12037     { { 0xddec03398e77738aL,0xd07a63effba46426L,0x2e58e79cee7f6e86L,
12038         0xe59b0459ff32d241L },
12039       { 0xc5ec84e520fa0338L,0x97939ac8eaff5aceL,0x0310a4e3b4a38313L,
12040         0x9115fba28f9d9885L } },
12041     /* 45 << 21 */
12042     { { 0x8dd710c25fadf8c3L,0x66be38a2ce19c0e2L,0xd42a279c4cfe5022L,
12043         0x597bb5300e24e1b8L },
12044       { 0x3cde86b7c153ca7fL,0xa8d30fb3707d63bdL,0xac905f92bd60d21eL,
12045         0x98e7ffb67b9a54abL } },
12046     /* 46 << 21 */
12047     { { 0xd7147df8e9726a30L,0xb5e216ffafce3533L,0xb550b7992ff1ec40L,
12048         0x6b613b87a1e953fdL },
12049       { 0x87b88dba792d5610L,0x2ee1270aa190fbe1L,0x02f4e2dc2ef581daL,
12050         0x016530e4eff82a95L } },
12051     /* 47 << 21 */
12052     { { 0xcbb93dfd8fd6ee89L,0x16d3d98646848fffL,0x600eff241da47adfL,
12053         0x1b9754a00ad47a71L },
12054       { 0x8f9266df70c33b98L,0xaadc87aedf34186eL,0x0d2ce8e14ad24132L,
12055         0x8a47cbfc19946ebaL } },
12056     /* 48 << 21 */
12057     { { 0x47feeb6662b5f3afL,0xcefab5610abb3734L,0x449de60e19f35cb1L,
12058         0x39f8db14157f0eb9L },
12059       { 0xffaecc5b3c61bfd6L,0xa5a4d41d41216703L,0x7f8fabed224e1cc2L,
12060         0x0d5a8186871ad953L } },
12061     /* 49 << 21 */
12062     { { 0xf10774f7d22da9a9L,0x45b8a678cc8a9b0dL,0xd9c2e722bdc32cffL,
12063         0xbf71b5f5337202a5L },
12064       { 0x95c57f2f69fc4db9L,0xb6dad34c765d01e1L,0x7e0bd13fcb904635L,
12065         0x61751253763a588cL } },
12066     /* 50 << 21 */
12067     { { 0xd85c299781af2c2dL,0xc0f7d9c481b9d7daL,0x838a34ae08533e8dL,
12068         0x15c4cb08311d8311L },
12069       { 0x97f832858e121e14L,0xeea7dc1e85000a5fL,0x0c6059b65d256274L,
12070         0xec9beaceb95075c0L } },
12071     /* 51 << 21 */
12072     { { 0x173daad71df97828L,0xbf851cb5a8937877L,0xb083c59401646f3cL,
12073         0x3bad30cf50c6d352L },
12074       { 0xfeb2b202496bbceaL,0x3cf9fd4f18a1e8baL,0xd26de7ff1c066029L,
12075         0x39c81e9e4e9ed4f8L } },
12076     /* 52 << 21 */
12077     { { 0xd8be0cb97b390d35L,0x01df2bbd964aab27L,0x3e8c1a65c3ef64f8L,
12078         0x567291d1716ed1ddL },
12079       { 0x95499c6c5f5406d3L,0x71fdda395ba8e23fL,0xcfeb320ed5096eceL,
12080         0xbe7ba92bca66dd16L } },
12081     /* 53 << 21 */
12082     { { 0x4608d36bc6fb5a7dL,0xe3eea15a6d2dd0e0L,0x75b0a3eb8f97a36aL,
12083         0xf59814cc1c83de1eL },
12084       { 0x56c9c5b01c33c23fL,0xa96c1da46faa4136L,0x46bf2074de316551L,
12085         0x3b866e7b1f756c8fL } },
12086     /* 54 << 21 */
12087     { { 0x727727d81495ed6bL,0xb2394243b682dce7L,0x8ab8454e758610f3L,
12088         0xc243ce84857d72a4L },
12089       { 0x7b320d71dbbf370fL,0xff9afa3778e0f7caL,0x0119d1e0ea7b523fL,
12090         0xb997f8cb058c7d42L } },
12091     /* 55 << 21 */
12092     { { 0x285bcd2a37bbb184L,0x51dcec49a45d1fa6L,0x6ade3b64e29634cbL,
12093         0x080c94a726b86ef1L },
12094       { 0xba583db12283fbe3L,0x902bddc85a9315edL,0x07c1ccb386964becL,
12095         0x78f4eacfb6258301L } },
12096     /* 56 << 21 */
12097     { { 0x4bdf3a4956f90823L,0xba0f5080741d777bL,0x091d71c3f38bf760L,
12098         0x9633d50f9b625b02L },
12099       { 0x03ecb743b8c9de61L,0xb47512545de74720L,0x9f9defc974ce1cb2L,
12100         0x774a4f6a00bd32efL } },
12101     /* 57 << 21 */
12102     { { 0xaca385f773848f22L,0x53dad716f3f8558eL,0xab7b34b093c471f9L,
12103         0xf530e06919644bc7L },
12104       { 0x3d9fb1ffdd59d31aL,0x4382e0df08daa795L,0x165c6f4bd5cc88d7L,
12105         0xeaa392d54a18c900L } },
12106     /* 58 << 21 */
12107     { { 0x94203c67648024eeL,0x188763f28c2fabcdL,0xa80f87acbbaec835L,
12108         0x632c96e0f29d8d54L },
12109       { 0x29b0a60e4c00a95eL,0x2ef17f40e011e9faL,0xf6c0e1d115b77223L,
12110         0xaaec2c6214b04e32L } },
12111     /* 59 << 21 */
12112     { { 0xd35688d83d84e58cL,0x2af5094c958571dbL,0x4fff7e19760682a6L,
12113         0x4cb27077e39a407cL },
12114       { 0x0f59c5474ff0e321L,0x169f34a61b34c8ffL,0x2bff109652bc1ba7L,
12115         0xa25423b783583544L } },
12116     /* 60 << 21 */
12117     { { 0x5d55d5d50ac8b782L,0xff6622ec2db3c892L,0x48fce7416b8bb642L,
12118         0x31d6998c69d7e3dcL },
12119       { 0xdbaf8004cadcaed0L,0x801b0142d81d053cL,0x94b189fc59630ec6L,
12120         0x120e9934af762c8eL } },
12121     /* 61 << 21 */
12122     { { 0x53a29aa4fdc6a404L,0x19d8e01ea1909948L,0x3cfcabf1d7e89681L,
12123         0x3321a50d4e132d37L },
12124       { 0xd0496863e9a86111L,0x8c0cde6106a3bc65L,0xaf866c49fc9f8eefL,
12125         0x2066350eff7f5141L } },
12126     /* 62 << 21 */
12127     { { 0x4f8a4689e56ddfbdL,0xea1b0c07fe32983aL,0x2b317462873cb8cbL,
12128         0x658deddc2d93229fL },
12129       { 0x65efaf4d0f64ef58L,0xfe43287d730cc7a8L,0xaebc0c723d047d70L,
12130         0x92efa539d92d26c9L } },
12131     /* 63 << 21 */
12132     { { 0x06e7845794b56526L,0x415cb80f0961002dL,0x89e5c56576dcb10fL,
12133         0x8bbb6982ff9259feL },
12134       { 0x4fe8795b9abc2668L,0xb5d4f5341e678fb1L,0x6601f3be7b7da2b9L,
12135         0x98da59e2a13d6805L } },
12136     /* 64 << 21 */
12137     { { 0x190d8ea601799a52L,0xa20cec41b86d2952L,0x3062ffb27fff2a7cL,
12138         0x741b32e579f19d37L },
12139       { 0xf80d81814eb57d47L,0x7a2d0ed416aef06bL,0x09735fb01cecb588L,
12140         0x1641caaac6061f5bL } },
12141     /* 0 << 28 */
12142     { { 0x00, 0x00, 0x00, 0x00 },
12143       { 0x00, 0x00, 0x00, 0x00 } },
12144     /* 1 << 28 */
12145     { { 0x7f99824f20151427L,0x206828b692430206L,0xaa9097d7e1112357L,
12146         0xacf9a2f209e414ecL },
12147       { 0xdbdac9da27915356L,0x7e0734b7001efee3L,0x54fab5bbd2b288e2L,
12148         0x4c630fc4f62dd09cL } },
12149     /* 2 << 28 */
12150     { { 0x8537107a1ac2703bL,0xb49258d86bc857b5L,0x57df14debcdaccd1L,
12151         0x24ab68d7c4ae8529L },
12152       { 0x7ed8b5d4734e59d0L,0x5f8740c8c495cc80L,0x84aedd5a291db9b3L,
12153         0x80b360f84fb995beL } },
12154     /* 3 << 28 */
12155     { { 0xae915f5d5fa067d1L,0x4134b57f9668960cL,0xbd3656d6a48edaacL,
12156         0xdac1e3e4fc1d7436L },
12157       { 0x674ff869d81fbb26L,0x449ed3ecb26c33d4L,0x85138705d94203e8L,
12158         0xccde538bbeeb6f4aL } },
12159     /* 4 << 28 */
12160     { { 0x55d5c68da61a76faL,0x598b441dca1554dcL,0xd39923b9773b279cL,
12161         0x33331d3c36bf9efcL },
12162       { 0x2d4c848e298de399L,0xcfdb8e77a1a27f56L,0x94c855ea57b8ab70L,
12163         0xdcdb9dae6f7879baL } },
12164     /* 5 << 28 */
12165     { { 0x7bdff8c2019f2a59L,0xb3ce5bb3cb4fbc74L,0xea907f688a9173ddL,
12166         0x6cd3d0d395a75439L },
12167       { 0x92ecc4d6efed021cL,0x09a9f9b06a77339aL,0x87ca6b157188c64aL,
12168         0x10c2996844899158L } },
12169     /* 6 << 28 */
12170     { { 0x5859a229ed6e82efL,0x16f338e365ebaf4eL,0x0cd313875ead67aeL,
12171         0x1c73d22854ef0bb4L },
12172       { 0x4cb5513174a5c8c7L,0x01cd29707f69ad6aL,0xa04d00dde966f87eL,
12173         0xd96fe4470b7b0321L } },
12174     /* 7 << 28 */
12175     { { 0x342ac06e88fbd381L,0x02cd4a845c35a493L,0xe8fa89de54f1bbcdL,
12176         0x341d63672575ed4cL },
12177       { 0xebe357fbd238202bL,0x600b4d1aa984ead9L,0xc35c9f4452436ea0L,
12178         0x96fe0a39a370751bL } },
12179     /* 8 << 28 */
12180     { { 0x4c4f07367f636a38L,0x9f943fb70e76d5cbL,0xb03510baa8b68b8bL,
12181         0xc246780a9ed07a1fL },
12182       { 0x3c0514156d549fc2L,0xc2953f31607781caL,0x955e2c69d8d95413L,
12183         0xb300fadc7bd282e3L } },
12184     /* 9 << 28 */
12185     { { 0x81fe7b5087e9189fL,0xdb17375cf42dda27L,0x22f7d896cf0a5904L,
12186         0xa0e57c5aebe348e6L },
12187       { 0xa61011d3f40e3c80L,0xb11893218db705c5L,0x4ed9309e50fedec3L,
12188         0xdcf14a104d6d5c1dL } },
12189     /* 10 << 28 */
12190     { { 0x056c265b55691342L,0xe8e0850491049dc7L,0x131329f5c9bae20aL,
12191         0x96c8b3e8d9dccdb4L },
12192       { 0x8c5ff838fb4ee6b4L,0xfc5a9aeb41e8ccf0L,0x7417b764fae050c6L,
12193         0x0953c3d700452080L } },
12194     /* 11 << 28 */
12195     { { 0x2137268238dfe7e8L,0xea417e152bb79d4bL,0x59641f1c76e7cf2dL,
12196         0x271e3059ea0bcfccL },
12197       { 0x624c7dfd7253ecbdL,0x2f552e254fca6186L,0xcbf84ecd4d866e9cL,
12198         0x73967709f68d4610L } },
12199     /* 12 << 28 */
12200     { { 0xa14b1163c27901b4L,0xfd9236e0899b8bf3L,0x42b091eccbc6da0aL,
12201         0xbb1dac6f5ad1d297L },
12202       { 0x80e61d53a91cf76eL,0x4110a412d31f1ee7L,0x2d87c3ba13efcf77L,
12203         0x1f374bb4df450d76L } },
12204     /* 13 << 28 */
12205     { { 0x5e78e2f20d188dabL,0xe3968ed0f4b885efL,0x46c0568e7314570fL,
12206         0x3161633801170521L },
12207       { 0x18e1e7e24f0c8afeL,0x4caa75ffdeea78daL,0x82db67f27c5d8a51L,
12208         0x36a44d866f505370L } },
12209     /* 14 << 28 */
12210     { { 0xd72c5bda0333974fL,0x5db516ae27a70146L,0x34705281210ef921L,
12211         0xbff17a8f0c9c38e5L },
12212       { 0x78f4814e12476da1L,0xc1e1661333c16980L,0x9e5b386f424d4bcaL,
12213         0x4c274e87c85740deL } },
12214     /* 15 << 28 */
12215     { { 0xb6a9b88d6c2f5226L,0x14d1b944550d7ca8L,0x580c85fc1fc41709L,
12216         0xc1da368b54c6d519L },
12217       { 0x2b0785ced5113cf7L,0x0670f6335a34708fL,0x46e2376715cc3f88L,
12218         0x1b480cfa50c72c8fL } },
12219     /* 16 << 28 */
12220     { { 0x202886024147519aL,0xd0981eac26b372f0L,0xa9d4a7caa785ebc8L,
12221         0xd953c50ddbdf58e9L },
12222       { 0x9d6361ccfd590f8fL,0x72e9626b44e6c917L,0x7fd9611022eb64cfL,
12223         0x863ebb7e9eb288f3L } },
12224     /* 17 << 28 */
12225     { { 0x6e6ab7616aca8ee7L,0x97d10b39d7b40358L,0x1687d3771e5feb0dL,
12226         0xc83e50e48265a27aL },
12227       { 0x8f75a9fec954b313L,0xcc2e8f47310d1f61L,0xf5ba81c56557d0e0L,
12228         0x25f9680c3eaf6207L } },
12229     /* 18 << 28 */
12230     { { 0xf95c66094354080bL,0x5225bfa57bf2fe1cL,0xc5c004e25c7d98faL,
12231         0x3561bf1c019aaf60L },
12232       { 0x5e6f9f17ba151474L,0xdec2f934b04f6ecaL,0x64e368a1269acb1eL,
12233         0x1332d9e40cdda493L } },
12234     /* 19 << 28 */
12235     { { 0x60d6cf69df23de05L,0x66d17da2009339a0L,0x9fcac9850a693923L,
12236         0xbcf057fced7c6a6dL },
12237       { 0xc3c5c8c5f0b5662cL,0x25318dd8dcba4f24L,0x60e8cb75082b69ffL,
12238         0x7c23b3ee1e728c01L } },
12239     /* 20 << 28 */
12240     { { 0x15e10a0a097e4403L,0xcb3d0a8619854665L,0x88d8e211d67d4826L,
12241         0xb39af66e0b9d2839L },
12242       { 0xa5f94588bd475ca8L,0xe06b7966c077b80bL,0xfedb1485da27c26cL,
12243         0xd290d33afe0fd5e0L } },
12244     /* 21 << 28 */
12245     { { 0xa40bcc47f34fb0faL,0xb4760cc81fb1ab09L,0x8fca0993a273bfe3L,
12246         0x13e4fe07f70b213cL },
12247       { 0x3bcdb992fdb05163L,0x8c484b110c2b19b6L,0x1acb815faaf2e3e2L,
12248         0xc6905935b89ff1b4L } },
12249     /* 22 << 28 */
12250     { { 0xb2ad6f9d586e74e1L,0x488883ad67b80484L,0x758aa2c7369c3ddbL,
12251         0x8ab74e699f9afd31L },
12252       { 0x10fc2d285e21beb1L,0x3484518a318c42f9L,0x377427dc53cf40c3L,
12253         0x9de0781a391bc1d9L } },
12254     /* 23 << 28 */
12255     { { 0x8faee858693807e1L,0xa38653274e81ccc7L,0x02c30ff26f835b84L,
12256         0xb604437b0d3d38d4L },
12257       { 0xb3fc8a985ca1823dL,0xb82f7ec903be0324L,0xee36d761cf684a33L,
12258         0x5a01df0e9f29bf7dL } },
12259     /* 24 << 28 */
12260     { { 0x686202f31306583dL,0x05b10da0437c622eL,0xbf9aaa0f076a7bc8L,
12261         0x25e94efb8f8f4e43L },
12262       { 0x8a35c9b7fa3dc26dL,0xe0e5fb9396ff03c5L,0xa77e3843ebc394ceL,
12263         0xcede65958361de60L } },
12264     /* 25 << 28 */
12265     { { 0xd27c22f6a1993545L,0xab01cc3624d671baL,0x63fa2877a169c28eL,
12266         0x925ef9042eb08376L },
12267       { 0x3b2fa3cf53aa0b32L,0xb27beb5b71c49d7aL,0xb60e1834d105e27fL,
12268         0xd60897884f68570dL } },
12269     /* 26 << 28 */
12270     { { 0x23094ce0d6fbc2acL,0x738037a1815ff551L,0xda73b1bb6bef119cL,
12271         0xdcf6c430eef506baL },
12272       { 0x00e4fe7be3ef104aL,0xebdd9a2c0a065628L,0x853a81c38792043eL,
12273         0x22ad6eceb3b59108L } },
12274     /* 27 << 28 */
12275     { { 0x9fb813c039cd297dL,0x8ec7e16e05bda5d9L,0x2834797c0d104b96L,
12276         0xcc11a2e77c511510L },
12277       { 0x96ca5a5396ee6380L,0x054c8655cea38742L,0xb5946852d54dfa7dL,
12278         0x97c422e71f4ab207L } },
12279     /* 28 << 28 */
12280     { { 0xbf9075090c22b540L,0x2cde42aab7c267d4L,0xba18f9ed5ab0d693L,
12281         0x3ba62aa66e4660d9L },
12282       { 0xb24bf97bab9ea96aL,0x5d039642e3b60e32L,0x4e6a45067c4d9bd5L,
12283         0x666c5b9e7ed4a6a4L } },
12284     /* 29 << 28 */
12285     { { 0xfa3fdcd98edbd7ccL,0x4660bb87c6ccd753L,0x9ae9082021e6b64fL,
12286         0x8a56a713b36bfb3fL },
12287       { 0xabfce0965726d47fL,0x9eed01b20b1a9a7fL,0x30e9cad44eb74a37L,
12288         0x7b2524cc53e9666dL } },
12289     /* 30 << 28 */
12290     { { 0x6a29683b8f4b002fL,0xc2200d7a41f4fc20L,0xcf3af47a3a338accL,
12291         0x6539a4fbe7128975L },
12292       { 0xcec31c14c33c7fcfL,0x7eb6799bc7be322bL,0x119ef4e96646f623L,
12293         0x7b7a26a554d7299bL } },
12294     /* 31 << 28 */
12295     { { 0xcb37f08d403f46f2L,0x94b8fc431a0ec0c7L,0xbb8514e3c332142fL,
12296         0xf3ed2c33e80d2a7aL },
12297       { 0x8d2080afb639126cL,0xf7b6be60e3553adeL,0x3950aa9f1c7e2b09L,
12298         0x847ff9586410f02bL } },
12299     /* 32 << 28 */
12300     { { 0x877b7cf5678a31b0L,0xd50301ae3998b620L,0x734257c5c00fb396L,
12301         0xf9fb18a004e672a6L },
12302       { 0xff8bd8ebe8758851L,0x1e64e4c65d99ba44L,0x4b8eaedf7dfd93b7L,
12303         0xba2f2a9804e76b8cL } },
12304     /* 33 << 28 */
12305     { { 0x7d790cbae8053433L,0xc8e725a03d2c9585L,0x58c5c476cdd8f5edL,
12306         0xd106b952efa9fe1dL },
12307       { 0x3c5c775b0eff13a9L,0x242442bae057b930L,0xe9f458d4c9b70cbdL,
12308         0x69b71448a3cdb89aL } },
12309     /* 34 << 28 */
12310     { { 0x41ee46f60e2ed742L,0x573f104540067493L,0xb1e154ff9d54c304L,
12311         0x2ad0436a8d3a7502L },
12312       { 0xee4aaa2d431a8121L,0xcd38b3ab886f11edL,0x57d49ea6034a0eb7L,
12313         0xd2b773bdf7e85e58L } },
12314     /* 35 << 28 */
12315     { { 0x4a559ac49b5c1f14L,0xc444be1a3e54df2bL,0x13aad704eda41891L,
12316         0xcd927bec5eb5c788L },
12317       { 0xeb3c8516e48c8a34L,0x1b7ac8124b546669L,0x1815f896594df8ecL,
12318         0x87c6a79c79227865L } },
12319     /* 36 << 28 */
12320     { { 0xae02a2f09b56ddbdL,0x1339b5ac8a2f1cf3L,0xf2b569c7839dff0dL,
12321         0xb0b9e864fee9a43dL },
12322       { 0x4ff8ca4177bb064eL,0x145a2812fd249f63L,0x3ab7beacf86f689aL,
12323         0x9bafec2701d35f5eL } },
12324     /* 37 << 28 */
12325     { { 0x28054c654265aa91L,0xa4b18304035efe42L,0x6887b0e69639dec7L,
12326         0xf4b8f6ad3d52aea5L },
12327       { 0xfb9293cc971a8a13L,0x3f159e5d4c934d07L,0x2c50e9b109acbc29L,
12328         0x08eb65e67154d129L } },
12329     /* 38 << 28 */
12330     { { 0x4feff58930b75c3eL,0x0bb82fe294491c93L,0xd8ac377a89af62bbL,
12331         0xd7b514909685e49fL },
12332       { 0xabca9a7b04497f19L,0x1b35ed0a1a7ad13fL,0x6b601e213ec86ed6L,
12333         0xda91fcb9ce0c76f1L } },
12334     /* 39 << 28 */
12335     { { 0x9e28507bd7ab27e1L,0x7c19a55563945b7bL,0x6b43f0a1aafc9827L,
12336         0x443b4fbd3aa55b91L },
12337       { 0x962b2e656962c88fL,0x139da8d4ce0db0caL,0xb93f05dd1b8d6c4fL,
12338         0x779cdff7180b9824L } },
12339     /* 40 << 28 */
12340     { { 0xbba23fddae57c7b7L,0x345342f21b932522L,0xfd9c80fe556d4aa3L,
12341         0xa03907ba6525bb61L },
12342       { 0x38b010e1ff218933L,0xc066b654aa52117bL,0x8e14192094f2e6eaL,
12343         0x66a27dca0d32f2b2L } },
12344     /* 41 << 28 */
12345     { { 0x69c7f993048b3717L,0xbf5a989ab178ae1cL,0x49fa9058564f1d6bL,
12346         0x27ec6e15d31fde4eL },
12347       { 0x4cce03737276e7fcL,0x64086d7989d6bf02L,0x5a72f0464ccdd979L,
12348         0x909c356647775631L } },
12349     /* 42 << 28 */
12350     { { 0x1c07bc6b75dd7125L,0xb4c6bc9787a0428dL,0x507ece52fdeb6b9dL,
12351         0xfca56512b2c95432L },
12352       { 0x15d97181d0e8bd06L,0x384dd317c6bb46eaL,0x5441ea203952b624L,
12353         0xbcf70dee4e7dc2fbL } },
12354     /* 43 << 28 */
12355     { { 0x372b016e6628e8c3L,0x07a0d667b60a7522L,0xcf05751b0a344ee2L,
12356         0x0ec09a48118bdeecL },
12357       { 0x6e4b3d4ed83dce46L,0x43a6316d99d2fc6eL,0xa99d898956cf044cL,
12358         0x7c7f4454ae3e5fb7L } },
12359     /* 44 << 28 */
12360     { { 0xb2e6b121fbabbe92L,0x281850fbe1330076L,0x093581ec97890015L,
12361         0x69b1dded75ff77f5L },
12362       { 0x7cf0b18fab105105L,0x953ced31a89ccfefL,0x3151f85feb914009L,
12363         0x3c9f1b8788ed48adL } },
12364     /* 45 << 28 */
12365     { { 0xc9aba1a14a7eadcbL,0x928e7501522e71cfL,0xeaede7273a2e4f83L,
12366         0x467e10d11ce3bbd3L },
12367       { 0xf3442ac3b955dcf0L,0xba96307dd3d5e527L,0xf763a10efd77f474L,
12368         0x5d744bd06a6e1ff0L } },
12369     /* 46 << 28 */
12370     { { 0xd287282aa777899eL,0xe20eda8fd03f3cdeL,0x6a7e75bb50b07d31L,
12371         0x0b7e2a946f379de4L },
12372       { 0x31cb64ad19f593cfL,0x7b1a9e4f1e76ef1dL,0xe18c9c9db62d609cL,
12373         0x439bad6de779a650L } },
12374     /* 47 << 28 */
12375     { { 0x219d9066e032f144L,0x1db632b8e8b2ec6aL,0xff0d0fd4fda12f78L,
12376         0x56fb4c2d2a25d265L },
12377       { 0x5f4e2ee1255a03f1L,0x61cd6af2e96af176L,0xe0317ba8d068bc97L,
12378         0x927d6bab264b988eL } },
12379     /* 48 << 28 */
12380     { { 0xa18f07e0e90fb21eL,0x00fd2b80bba7fca1L,0x20387f2795cd67b5L,
12381         0x5b89a4e7d39707f7L },
12382       { 0x8f83ad3f894407ceL,0xa0025b946c226132L,0xc79563c7f906c13bL,
12383         0x5f548f314e7bb025L } },
12384     /* 49 << 28 */
12385     { { 0x2b4c6b8feac6d113L,0xa67e3f9c0e813c76L,0x3982717c3fe1f4b9L,
12386         0x5886581926d8050eL },
12387       { 0x99f3640cf7f06f20L,0xdc6102162a66ebc2L,0x52f2c175767a1e08L,
12388         0x05660e1a5999871bL } },
12389     /* 50 << 28 */
12390     { { 0x6b0f17626d3c4693L,0xf0e7d62737ed7beaL,0xc51758c7b75b226dL,
12391         0x40a886281f91613bL },
12392       { 0x889dbaa7bbb38ce0L,0xe0404b65bddcad81L,0xfebccd3a8bc9671fL,
12393         0xfbf9a357ee1f5375L } },
12394     /* 51 << 28 */
12395     { { 0x5dc169b028f33398L,0xb07ec11d72e90f65L,0xae7f3b4afaab1eb1L,
12396         0xd970195e5f17538aL },
12397       { 0x52b05cbe0181e640L,0xf5debd622643313dL,0x761481545df31f82L,
12398         0x23e03b333a9e13c5L } },
12399     /* 52 << 28 */
12400     { { 0xff7589494fde0c1fL,0xbf8a1abee5b6ec20L,0x702278fb87e1db6cL,
12401         0xc447ad7a35ed658fL },
12402       { 0x48d4aa3803d0ccf2L,0x80acb338819a7c03L,0x9bc7c89e6e17ceccL,
12403         0x46736b8b03be1d82L } },
12404     /* 53 << 28 */
12405     { { 0xd65d7b60c0432f96L,0xddebe7a3deb5442fL,0x79a253077dff69a2L,
12406         0x37a56d9402cf3122L },
12407       { 0x8bab8aedf2350d0aL,0x13c3f276037b0d9aL,0xc664957c44c65caeL,
12408         0x88b44089c2e71a88L } },
12409     /* 54 << 28 */
12410     { { 0xdb88e5a35cb02664L,0x5d4c0bf18686c72eL,0xea3d9b62a682d53eL,
12411         0x9b605ef40b2ad431L },
12412       { 0x71bac202c69645d0L,0xa115f03a6a1b66e7L,0xfe2c563a158f4dc4L,
12413         0xf715b3a04d12a78cL } },
12414     /* 55 << 28 */
12415     { { 0x8f7f0a48d413213aL,0x2035806dc04becdbL,0xecd34a995d8587f5L,
12416         0x4d8c30799f6d3a71L },
12417       { 0x1b2a2a678d95a8f6L,0xc58c9d7df2110d0dL,0xdeee81d5cf8fba3fL,
12418         0xa42be3c00c7cdf68L } },
12419     /* 56 << 28 */
12420     { { 0x2126f742d43b5eaaL,0x054a0766dfa59b85L,0x9d0d5e36126bfd45L,
12421         0xa1f8fbd7384f8a8fL },
12422       { 0x317680f5d563fcccL,0x48ca5055f280a928L,0xe00b81b227b578cfL,
12423         0x10aad9182994a514L } },
12424     /* 57 << 28 */
12425     { { 0xd9e07b62b7bdc953L,0x9f0f6ff25bc086ddL,0x09d1ccff655eee77L,
12426         0x45475f795bef7df1L },
12427       { 0x3faa28fa86f702ccL,0x92e609050f021f07L,0xe9e629687f8fa8c6L,
12428         0xbd71419af036ea2cL } },
12429     /* 58 << 28 */
12430     { { 0x171ee1cc6028da9aL,0x5352fe1ac251f573L,0xf8ff236e3fa997f4L,
12431         0xd831b6c9a5749d5fL },
12432       { 0x7c872e1de350e2c2L,0xc56240d91e0ce403L,0xf9deb0776974f5cbL,
12433         0x7d50ba87961c3728L } },
12434     /* 59 << 28 */
12435     { { 0xd6f894265a3a2518L,0xcf817799c6303d43L,0x510a0471619e5696L,
12436         0xab049ff63a5e307bL },
12437       { 0xe4cdf9b0feb13ec7L,0xd5e971179d8ff90cL,0xf6f64d069afa96afL,
12438         0x00d0bf5e9d2012a2L } },
12439     /* 60 << 28 */
12440     { { 0xe63f301f358bcdc0L,0x07689e990a9d47f8L,0x1f689e2f4f43d43aL,
12441         0x4d542a1690920904L },
12442       { 0xaea293d59ca0a707L,0xd061fe458ac68065L,0x1033bf1b0090008cL,
12443         0x29749558c08a6db6L } },
12444     /* 61 << 28 */
12445     { { 0x74b5fc59c1d5d034L,0xf712e9f667e215e0L,0xfd520cbd860200e6L,
12446         0x0229acb43ea22588L },
12447       { 0x9cd1e14cfff0c82eL,0x87684b6259c69e73L,0xda85e61c96ccb989L,
12448         0x2d5dbb02a3d06493L } },
12449     /* 62 << 28 */
12450     { { 0xf22ad33ae86b173cL,0xe8e41ea5a79ff0e3L,0x01d2d725dd0d0c10L,
12451         0x31f39088032d28f9L },
12452       { 0x7b3f71e17829839eL,0x0cf691b44502ae58L,0xef658dbdbefc6115L,
12453         0xa5cd6ee5b3ab5314L } },
12454     /* 63 << 28 */
12455     { { 0x206c8d7b5f1d2347L,0x794645ba4cc2253aL,0xd517d8ff58389e08L,
12456         0x4fa20dee9f847288L },
12457       { 0xeba072d8d797770aL,0x7360c91dbf429e26L,0x7200a3b380af8279L,
12458         0x6a1c915082dadce3L } },
12459     /* 64 << 28 */
12460     { { 0x0ee6d3a7c35d8794L,0x042e65580356bae5L,0x9f59698d643322fdL,
12461         0x9379ae1550a61967L },
12462       { 0x64b9ae62fcc9981eL,0xaed3d6316d2934c6L,0x2454b3025e4e65ebL,
12463         0xab09f647f9950428L } },
12464     /* 0 << 35 */
12465     { { 0x00, 0x00, 0x00, 0x00 },
12466       { 0x00, 0x00, 0x00, 0x00 } },
12467     /* 1 << 35 */
12468     { { 0xb2083a1222248accL,0x1f6ec0ef3264e366L,0x5659b7045afdee28L,
12469         0x7a823a40e6430bb5L },
12470       { 0x24592a04e1900a79L,0xcde09d4ac9ee6576L,0x52b6463f4b5ea54aL,
12471         0x1efe9ed3d3ca65a7L } },
12472     /* 2 << 35 */
12473     { { 0xe27a6dbe305406ddL,0x8eb7dc7fdd5d1957L,0xf54a6876387d4d8fL,
12474         0x9c479409c7762de4L },
12475       { 0xbe4d5b5d99b30778L,0x25380c566e793682L,0x602d37f3dac740e3L,
12476         0x140deabe1566e4aeL } },
12477     /* 3 << 35 */
12478     { { 0x4481d067afd32acfL,0xd8f0fccae1f71ccfL,0xd208dd0cb596f2daL,
12479         0xd049d7309aad93f9L },
12480       { 0xc79f263d42ab580eL,0x09411bb123f707b4L,0x8cfde1ff835e0edaL,
12481         0x7270749090f03402L } },
12482     /* 4 << 35 */
12483     { { 0xeaee6126c49a861eL,0x024f3b65e14f0d06L,0x51a3f1e8c69bfc17L,
12484         0xc3c3a8e9a7686381L },
12485       { 0x3400752cb103d4c8L,0x02bc46139218b36bL,0xc67f75eb7651504aL,
12486         0xd6848b56d02aebfaL } },
12487     /* 5 << 35 */
12488     { { 0xbd9802e6c30fa92bL,0x5a70d96d9a552784L,0x9085c4ea3f83169bL,
12489         0xfa9423bb06908228L },
12490       { 0x2ffebe12fe97a5b9L,0x85da604971b99118L,0x9cbc2f7f63178846L,
12491         0xfd96bc709153218eL } },
12492     /* 6 << 35 */
12493     { { 0x958381db1782269bL,0xae34bf792597e550L,0xbb5c60645f385153L,
12494         0x6f0e96afe3088048L },
12495       { 0xbf6a021577884456L,0xb3b5688c69310ea7L,0x17c9429504fad2deL,
12496         0xe020f0e517896d4dL } },
12497     /* 7 << 35 */
12498     { { 0x730ba0ab0976505fL,0x567f6813095e2ec5L,0x470620106331ab71L,
12499         0x72cfa97741d22b9fL },
12500       { 0x33e55ead8a2373daL,0xa8d0d5f47ba45a68L,0xba1d8f9c03029d15L,
12501         0x8f34f1ccfc55b9f3L } },
12502     /* 8 << 35 */
12503     { { 0xcca4428dbbe5a1a9L,0x8187fd5f3126bd67L,0x0036973a48105826L,
12504         0xa39b6663b8bd61a0L },
12505       { 0x6d42deef2d65a808L,0x4969044f94636b19L,0xf611ee47dd5d564cL,
12506         0x7b2f3a49d2873077L } },
12507     /* 9 << 35 */
12508     { { 0x94157d45300eb294L,0x2b2a656e169c1494L,0xc000dd76d3a47aa9L,
12509         0xa2864e4fa6243ea4L },
12510       { 0x82716c47db89842eL,0x12dfd7d761479fb7L,0x3b9a2c56e0b2f6dcL,
12511         0x46be862ad7f85d67L } },
12512     /* 10 << 35 */
12513     { { 0x03b0d8dd0f82b214L,0x460c34f9f103cbc6L,0xf32e5c0318d79e19L,
12514         0x8b8888baa84117f8L },
12515       { 0x8f3c37dcc0722677L,0x10d21be91c1c0f27L,0xd47c8468e0f7a0c6L,
12516         0x9bf02213adecc0e0L } },
12517     /* 11 << 35 */
12518     { { 0x0baa7d1242b48b99L,0x1bcb665d48424096L,0x8b847cd6ebfb5cfbL,
12519         0x87c2ae569ad4d10dL },
12520       { 0xf1cbb1220de36726L,0xe7043c683fdfbd21L,0x4bd0826a4e79d460L,
12521         0x11f5e5984bd1a2cbL } },
12522     /* 12 << 35 */
12523     { { 0x97554160b7fe7b6eL,0x7d16189a400a3fb2L,0xd73e9beae328ca1eL,
12524         0x0dd04b97e793d8ccL },
12525       { 0xa9c83c9b506db8ccL,0x5cd47aaecf38814cL,0x26fc430db64b45e6L,
12526         0x079b5499d818ea84L } },
12527     /* 13 << 35 */
12528     { { 0xebb01102c1c24a3bL,0xca24e5681c161c1aL,0x103eea6936f00a4aL,
12529         0x9ad76ee876176c7bL },
12530       { 0x97451fc2538e0ff7L,0x94f898096604b3b0L,0x6311436e3249cfd7L,
12531         0x27b4a7bd41224f69L } },
12532     /* 14 << 35 */
12533     { { 0x03b5d21ae0ac2941L,0x279b0254c2d31937L,0x3307c052cac992d0L,
12534         0x6aa7cb92efa8b1f3L },
12535       { 0x5a1825800d37c7a5L,0x13380c37342d5422L,0x92ac2d66d5d2ef92L,
12536         0x035a70c9030c63c6L } },
12537     /* 15 << 35 */
12538     { { 0xc16025dd4ce4f152L,0x1f419a71f9df7c06L,0x6d5b221491e4bb14L,
12539         0xfc43c6cc839fb4ceL },
12540       { 0x49f06591925d6b2dL,0x4b37d9d362186598L,0x8c54a971d01b1629L,
12541         0xe1a9c29f51d50e05L } },
12542     /* 16 << 35 */
12543     { { 0x5109b78571ba1861L,0x48b22d5cd0c8f93dL,0xe8fa84a78633bb93L,
12544         0x53fba6ba5aebbd08L },
12545       { 0x7ff27df3e5eea7d8L,0x521c879668ca7158L,0xb9d5133bce6f1a05L,
12546         0x2d50cd53fd0ebee4L } },
12547     /* 17 << 35 */
12548     { { 0xc82115d6c5a3ef16L,0x993eff9dba079221L,0xe4da2c5e4b5da81cL,
12549         0x9a89dbdb8033fd85L },
12550       { 0x60819ebf2b892891L,0x53902b215d14a4d5L,0x6ac35051d7fda421L,
12551         0xcc6ab88561c83284L } },
12552     /* 18 << 35 */
12553     { { 0x14eba133f74cff17L,0x240aaa03ecb813f2L,0xcfbb65406f665beeL,
12554         0x084b1fe4a425ad73L },
12555       { 0x009d5d16d081f6a6L,0x35304fe8eef82c90L,0xf20346d5aa9eaa22L,
12556         0x0ada9f07ac1c91e3L } },
12557     /* 19 << 35 */
12558     { { 0xa6e21678968a6144L,0x54c1f77c07b31a1eL,0xd6bb787e5781fbe1L,
12559         0x61bd2ee0e31f1c4aL },
12560       { 0xf25aa1e9781105fcL,0x9cf2971f7b2f8e80L,0x26d15412cdff919bL,
12561         0x01db4ebe34bc896eL } },
12562     /* 20 << 35 */
12563     { { 0x7d9b3e23b40df1cfL,0x5933737394e971b4L,0xbf57bd14669cf921L,
12564         0x865daedf0c1a1064L },
12565       { 0x3eb70bd383279125L,0xbc3d5b9f34ecdaabL,0x91e3ed7e5f755cafL,
12566         0x49699f54d41e6f02L } },
12567     /* 21 << 35 */
12568     { { 0x185770e1d4a7a15bL,0x08f3587aeaac87e7L,0x352018db473133eaL,
12569         0x674ce71904fd30fcL },
12570       { 0x7b8d9835088b3e0eL,0x7a0356a95d0d47a1L,0x9d9e76596474a3c4L,
12571         0x61ea48a7ff66966cL } },
12572     /* 22 << 35 */
12573     { { 0x304177580f3e4834L,0xfdbb21c217a9afcbL,0x756fa17f2f9a67b3L,
12574         0x2a6b2421a245c1a8L },
12575       { 0x64be27944af02291L,0xade465c62a5804feL,0x8dffbd39a6f08fd7L,
12576         0xc4efa84caa14403bL } },
12577     /* 23 << 35 */
12578     { { 0xa1b91b2a442b0f5cL,0xb748e317cf997736L,0x8d1b62bfcee90e16L,
12579         0x907ae2710b2078c0L },
12580       { 0xdf31534b0c9bcdddL,0x043fb05439adce83L,0x99031043d826846aL,
12581         0x61a9c0d6b144f393L } },
12582     /* 24 << 35 */
12583     { { 0xdab4804647718427L,0xdf17ff9b6e830f8bL,0x408d7ee8e49a1347L,
12584         0x6ac71e2391c1d4aeL },
12585       { 0xc8cbb9fd1defd73cL,0x19840657bbbbfec5L,0x39db1cb59e7ef8eaL,
12586         0x78aa829664105f30L } },
12587     /* 25 << 35 */
12588     { { 0xa3d9b7f0a3738c29L,0x0a2f235abc3250a3L,0x55e506f6445e4cafL,
12589         0x0974f73d33475f7aL },
12590       { 0xd37dbba35ba2f5a8L,0x542c6e636af40066L,0x26d99b53c5d73e2cL,
12591         0x06060d7d6c3ca33eL } },
12592     /* 26 << 35 */
12593     { { 0xcdbef1c2065fef4aL,0x77e60f7dfd5b92e3L,0xd7c549f026708350L,
12594         0x201b3ad034f121bfL },
12595       { 0x5fcac2a10334fc14L,0x8a9a9e09344552f6L,0x7dd8a1d397653082L,
12596         0x5fc0738f79d4f289L } },
12597     /* 27 << 35 */
12598     { { 0x787d244d17d2d8c3L,0xeffc634570830684L,0x5ddb96dde4f73ae5L,
12599         0x8efb14b1172549a5L },
12600       { 0x6eb73eee2245ae7aL,0xbca4061eea11f13eL,0xb577421d30b01f5dL,
12601         0xaa688b24782e152cL } },
12602     /* 28 << 35 */
12603     { { 0x67608e71bd3502baL,0x4ef41f24b4de75a0L,0xb08dde5efd6125e5L,
12604         0xde484825a409543fL },
12605       { 0x1f198d9865cc2295L,0x428a37716e0edfa2L,0x4f9697a2adf35fc7L,
12606         0x01a43c79f7cac3c7L } },
12607     /* 29 << 35 */
12608     { { 0xb05d70590fd3659aL,0x8927f30cbb7f2d9aL,0x4023d1ac8cf984d3L,
12609         0x32125ed302897a45L },
12610       { 0xfb572dad3d414205L,0x73000ef2e3fa82a9L,0x4c0868e9f10a5581L,
12611         0x5b61fc676b0b3ca5L } },
12612     /* 30 << 35 */
12613     { { 0xc1258d5b7cae440cL,0x21c08b41402b7531L,0xf61a8955de932321L,
12614         0x3568faf82d1408afL },
12615       { 0x71b15e999ecf965bL,0xf14ed248e917276fL,0xc6f4caa1820cf9e2L,
12616         0x681b20b218d83c7eL } },
12617     /* 31 << 35 */
12618     { { 0x6cde738dc6c01120L,0x71db0813ae70e0dbL,0x95fc064474afe18cL,
12619         0x34619053129e2be7L },
12620       { 0x80615ceadb2a3b15L,0x0a49a19edb4c7073L,0x0e1b84c88fd2d367L,
12621         0xd74bf462033fb8aaL } },
12622     /* 32 << 35 */
12623     { { 0x889f6d65533ef217L,0x7158c7e4c3ca2e87L,0xfb670dfbdc2b4167L,
12624         0x75910a01844c257fL },
12625       { 0xf336bf07cf88577dL,0x22245250e45e2aceL,0x2ed92e8d7ca23d85L,
12626         0x29f8be4c2b812f58L } },
12627     /* 33 << 35 */
12628     { { 0xdd9ebaa7076fe12bL,0x3f2400cbae1537f9L,0x1aa9352817bdfb46L,
12629         0xc0f9843067883b41L },
12630       { 0x5590ede10170911dL,0x7562f5bb34d4b17fL,0xe1fa1df21826b8d2L,
12631         0xb40b796a6bd80d59L } },
12632     /* 34 << 35 */
12633     { { 0xd65bf1973467ba92L,0x8c9b46dbf70954b0L,0x97c8a0f30e78f15dL,
12634         0xa8f3a69a85a4c961L },
12635       { 0x4242660f61e4ce9bL,0xbf06aab36ea6790cL,0xc6706f8eec986416L,
12636         0x9e56dec19a9fc225L } },
12637     /* 35 << 35 */
12638     { { 0x527c46f49a9898d9L,0xd799e77b5633cdefL,0x24eacc167d9e4297L,
12639         0xabb61cea6b1cb734L },
12640       { 0xbee2e8a7f778443cL,0x3bb42bf129de2fe6L,0xcbed86a13003bb6fL,
12641         0xd3918e6cd781cdf6L } },
12642     /* 36 << 35 */
12643     { { 0x4bee32719a5103f1L,0x5243efc6f50eac06L,0xb8e122cb6adcc119L,
12644         0x1b7faa84c0b80a08L },
12645       { 0x32c3d1bd6dfcd08cL,0x129dec4e0be427deL,0x98ab679c1d263c83L,
12646         0xafc83cb7cef64effL } },
12647     /* 37 << 35 */
12648     { { 0x85eb60882fa6be76L,0x892585fb1328cbfeL,0xc154d3edcf618ddaL,
12649         0xc44f601b3abaf26eL },
12650       { 0x7bf57d0b2be1fdfdL,0xa833bd2d21137feeL,0x9353af362db591a8L,
12651         0xc76f26dc5562a056L } },
12652     /* 38 << 35 */
12653     { { 0x1d87e47d3fdf5a51L,0x7afb5f9355c9cab0L,0x91bbf58f89e0586eL,
12654         0x7c72c0180d843709L },
12655       { 0xa9a5aafb99b5c3dcL,0xa48a0f1d3844aeb0L,0x7178b7ddb667e482L,
12656         0x453985e96e23a59aL } },
12657     /* 39 << 35 */
12658     { { 0x4a54c86001b25dd8L,0x0dd37f48fb897c8aL,0x5f8aa6100ea90cd9L,
12659         0xc8892c6816d5830dL },
12660       { 0xeb4befc0ef514ca5L,0x478eb679e72c9ee6L,0x9bca20dadbc40d5fL,
12661         0xf015de21dde4f64aL } },
12662     /* 40 << 35 */
12663     { { 0xaa6a4de0eaf4b8a5L,0x68cfd9ca4bc60e32L,0x668a4b017fd15e70L,
12664         0xd9f0694af27dc09dL },
12665       { 0xf6c3cad5ba708bcdL,0x5cd2ba695bb95c2aL,0xaa28c1d333c0a58fL,
12666         0x23e274e3abc77870L } },
12667     /* 41 << 35 */
12668     { { 0x44c3692ddfd20a4aL,0x091c5fd381a66653L,0x6c0bb69109a0757dL,
12669         0x9072e8b9667343eaL },
12670       { 0x31d40eb080848becL,0x95bd480a79fd36ccL,0x01a77c6165ed43f5L,
12671         0xafccd1272e0d40bfL } },
12672     /* 42 << 35 */
12673     { { 0xeccfc82d1cc1884bL,0xc85ac2015d4753b4L,0xc7a6caac658e099fL,
12674         0xcf46369e04b27390L },
12675       { 0xe2e7d049506467eaL,0x481b63a237cdecccL,0x4029abd8ed80143aL,
12676         0x28bfe3c7bcb00b88L } },
12677     /* 43 << 35 */
12678     { { 0x3bec10090643d84aL,0x885f3668abd11041L,0xdb02432cf83a34d6L,
12679         0x32f7b360719ceebeL },
12680       { 0xf06c7837dad1fe7aL,0x60a157a95441a0b0L,0x704970e9e2d47550L,
12681         0xcd2bd553271b9020L } },
12682     /* 44 << 35 */
12683     { { 0xff57f82f33e24a0bL,0x9cbee23ff2565079L,0x16353427eb5f5825L,
12684         0x276feec4e948d662L },
12685       { 0xd1b62bc6da10032bL,0x718351ddf0e72a53L,0x934520762420e7baL,
12686         0x96368fff3a00118dL } },
12687     /* 45 << 35 */
12688     { { 0x00ce2d26150a49e4L,0x0c28b6363f04706bL,0xbad65a4658b196d0L,
12689         0x6c8455fcec9f8b7cL },
12690       { 0xe90c895f2d71867eL,0x5c0be31bedf9f38cL,0x2a37a15ed8f6ec04L,
12691         0x239639e78cd85251L } },
12692     /* 46 << 35 */
12693     { { 0xd89753159c7c4c6bL,0x603aa3c0d7409af7L,0xb8d53d0c007132fbL,
12694         0x68d12af7a6849238L },
12695       { 0xbe0607e7bf5d9279L,0x9aa50055aada74ceL,0xe81079cbba7e8ccbL,
12696         0x610c71d1a5f4ff5eL } },
12697     /* 47 << 35 */
12698     { { 0x9e2ee1a75aa07093L,0xca84004ba75da47cL,0x074d39513de75401L,
12699         0xf938f756bb311592L },
12700       { 0x9619761800a43421L,0x39a2536207bc78c8L,0x278f710a0a171276L,
12701         0xb28446ea8d1a8f08L } },
12702     /* 48 << 35 */
12703     { { 0x184781bfe3b6a661L,0x7751cb1de6d279f7L,0xf8ff95d6c59eb662L,
12704         0x186d90b758d3dea7L },
12705       { 0x0e4bb6c1dfb4f754L,0x5c5cf56b2b2801dcL,0xc561e4521f54564dL,
12706         0xb4fb8c60f0dd7f13L } },
12707     /* 49 << 35 */
12708     { { 0xf884963033ff98c7L,0x9619fffacf17769cL,0xf8090bf61bfdd80aL,
12709         0x14d9a149422cfe63L },
12710       { 0xb354c3606f6df9eaL,0xdbcf770d218f17eaL,0x207db7c879eb3480L,
12711         0x213dbda8559b6a26L } },
12712     /* 50 << 35 */
12713     { { 0xac4c200b29fc81b3L,0xebc3e09f171d87c1L,0x917995301481aa9eL,
12714         0x051b92e192e114faL },
12715       { 0xdf8f92e9ecb5537fL,0x44b1b2cc290c7483L,0xa711455a2adeb016L,
12716         0x964b685681a10c2cL } },
12717     /* 51 << 35 */
12718     { { 0x4f159d99cec03623L,0x05532225ef3271eaL,0xb231bea3c5ee4849L,
12719         0x57a54f507094f103L },
12720       { 0x3e2d421d9598b352L,0xe865a49c67412ab4L,0xd2998a251cc3a912L,
12721         0x5d0928080c74d65dL } },
12722     /* 52 << 35 */
12723     { { 0x73f459084088567aL,0xeb6b280e1f214a61L,0x8c9adc34caf0c13dL,
12724         0x39d12938f561fb80L },
12725       { 0xb2dc3a5ebc6edfb4L,0x7485b1b1fe4d210eL,0x062e0400e186ae72L,
12726         0x91e32d5c6eeb3b88L } },
12727     /* 53 << 35 */
12728     { { 0x6df574d74be59224L,0xebc88ccc716d55f3L,0x26c2e6d0cad6ed33L,
12729         0xc6e21e7d0d3e8b10L },
12730       { 0x2cc5840e5bcc36bbL,0x9292445e7da74f69L,0x8be8d3214e5193a8L,
12731         0x3ec236298df06413L } },
12732     /* 54 << 35 */
12733     { { 0xc7e9ae85b134defaL,0x6073b1d01bb2d475L,0xb9ad615e2863c00dL,
12734         0x9e29493d525f4ac4L },
12735       { 0xc32b1dea4e9acf4fL,0x3e1f01c8a50db88dL,0xb05d70ea04da916cL,
12736         0x714b0d0ad865803eL } },
12737     /* 55 << 35 */
12738     { { 0x4bd493fc9920cb5eL,0x5b44b1f792c7a3acL,0xa2a77293bcec9235L,
12739         0x5ee06e87cd378553L },
12740       { 0xceff8173da621607L,0x2bb03e4c99f5d290L,0x2945106aa6f734acL,
12741         0xb5056604d25c4732L } },
12742     /* 56 << 35 */
12743     { { 0x5945920ce079afeeL,0x686e17a06789831fL,0x5966bee8b74a5ae5L,
12744         0x38a673a21e258d46L },
12745       { 0xbd1cc1f283141c95L,0x3b2ecf4f0e96e486L,0xcd3aa89674e5fc78L,
12746         0x415ec10c2482fa7aL } },
12747     /* 57 << 35 */
12748     { { 0x1523441980503380L,0x513d917ad314b392L,0xb0b52f4e63caecaeL,
12749         0x07bf22ad2dc7780bL },
12750       { 0xe761e8a1e4306839L,0x1b3be9625dd7feaaL,0x4fe728de74c778f1L,
12751         0xf1fa0bda5e0070f6L } },
12752     /* 58 << 35 */
12753     { { 0x85205a316ec3f510L,0x2c7e4a14d2980475L,0xde3c19c06f30ebfdL,
12754         0xdb1c1f38d4b7e644L },
12755       { 0xfe291a755dce364aL,0xb7b22a3c058f5be3L,0x2cd2c30237fea38cL,
12756         0x2930967a2e17be17L } },
12757     /* 59 << 35 */
12758     { { 0x87f009de0c061c65L,0xcb014aacedc6ed44L,0x49bd1cb43bafb1ebL,
12759         0x81bd8b5c282d3688L },
12760       { 0x1cdab87ef01a17afL,0x21f37ac4e710063bL,0x5a6c567642fc8193L,
12761         0xf4753e7056a6015cL } },
12762     /* 60 << 35 */
12763     { { 0x020f795ea15b0a44L,0x8f37c8d78958a958L,0x63b7e89ba4b675b5L,
12764         0xb4fb0c0c0fc31aeaL },
12765       { 0xed95e639a7ff1f2eL,0x9880f5a3619614fbL,0xdeb6ff02947151abL,
12766         0x5bc5118ca868dcdbL } },
12767     /* 61 << 35 */
12768     { { 0xd8da20554c20cea5L,0xcac2776e14c4d69aL,0xcccb22c1622d599bL,
12769         0xa4ddb65368a9bb50L },
12770       { 0x2c4ff1511b4941b4L,0xe1ff19b46efba588L,0x35034363c48345e0L,
12771         0x45542e3d1e29dfc4L } },
12772     /* 62 << 35 */
12773     { { 0xf197cb91349f7aedL,0x3b2b5a008fca8420L,0x7c175ee823aaf6d8L,
12774         0x54dcf42135af32b6L },
12775       { 0x0ba1430727d6561eL,0x879d5ee4d175b1e2L,0xc7c4367399807db5L,
12776         0x77a544559cd55bcdL } },
12777     /* 63 << 35 */
12778     { { 0xe6c2ff130105c072L,0x18f7a99f8dda7da4L,0x4c3018200e2d35c1L,
12779         0x06a53ca0d9cc6c82L },
12780       { 0xaa21cc1ef1aa1d9eL,0x324143344a75b1e8L,0x2a6d13280ebe9fdcL,
12781         0x16bd173f98a4755aL } },
12782     /* 64 << 35 */
12783     { { 0xfbb9b2452133ffd9L,0x39a8b2f1830f1a20L,0x484bc97dd5a1f52aL,
12784         0xd6aebf56a40eddf8L },
12785       { 0x32257acb76ccdac6L,0xaf4d36ec1586ff27L,0x8eaa8863f8de7dd1L,
12786         0x0045d5cf88647c16L } },
12787     /* 0 << 42 */
12788     { { 0x00, 0x00, 0x00, 0x00 },
12789       { 0x00, 0x00, 0x00, 0x00 } },
12790     /* 1 << 42 */
12791     { { 0xa6f3d574c005979dL,0xc2072b426a40e350L,0xfca5c1568de2ecf9L,
12792         0xa8c8bf5ba515344eL },
12793       { 0x97aee555114df14aL,0xd4374a4dfdc5ec6bL,0x754cc28f2ca85418L,
12794         0x71cb9e27d3c41f78L } },
12795     /* 2 << 42 */
12796     { { 0x8910507903605c39L,0xf0843d9ea142c96cL,0xf374493416923684L,
12797         0x732caa2ffa0a2893L },
12798       { 0xb2e8c27061160170L,0xc32788cc437fbaa3L,0x39cd818ea6eda3acL,
12799         0xe2e942399e2b2e07L } },
12800     /* 3 << 42 */
12801     { { 0x6967d39b0260e52aL,0xd42585cc90653325L,0x0d9bd60521ca7954L,
12802         0x4fa2087781ed57b3L },
12803       { 0x60c1eff8e34a0bbeL,0x56b0040c84f6ef64L,0x28be2b24b1af8483L,
12804         0xb2278163f5531614L } },
12805     /* 4 << 42 */
12806     { { 0x8df275455922ac1cL,0xa7b3ef5ca52b3f63L,0x8e77b21471de57c4L,
12807         0x31682c10834c008bL },
12808       { 0xc76824f04bd55d31L,0xb6d1c08617b61c71L,0x31db0903c2a5089dL,
12809         0x9c092172184e5d3fL } },
12810     /* 5 << 42 */
12811     { { 0xdd7ced5bc00cc638L,0x1a2015eb61278fc2L,0x2e8e52886a37f8d6L,
12812         0xc457786fe79933adL },
12813       { 0xb3fe4cce2c51211aL,0xad9b10b224c20498L,0x90d87a4fd28db5e5L,
12814         0x698cd1053aca2fc3L } },
12815     /* 6 << 42 */
12816     { { 0x4f112d07e91b536dL,0xceb982f29eba09d6L,0x3c157b2c197c396fL,
12817         0xe23c2d417b66eb24L },
12818       { 0x480c57d93f330d37L,0xb3a4c8a179108debL,0x702388decb199ce5L,
12819         0x0b019211b944a8d4L } },
12820     /* 7 << 42 */
12821     { { 0x24f2a692840bb336L,0x7c353bdca669fa7bL,0xda20d6fcdec9c300L,
12822         0x625fbe2fa13a4f17L },
12823       { 0xa2b1b61adbc17328L,0x008965bfa9515621L,0x49690939c620ff46L,
12824         0x182dd27d8717e91cL } },
12825     /* 8 << 42 */
12826     { { 0x5ace5035ea6c3997L,0x54259aaac2610befL,0xef18bb3f3c80dd39L,
12827         0x6910b95b5fc3fa39L },
12828       { 0xfce2f51043e09aeeL,0xced56c9fa7675665L,0x10e265acd872db61L,
12829         0x6982812eae9fce69L } },
12830     /* 9 << 42 */
12831     { { 0x29be11c6ce800998L,0x72bb1752b90360d9L,0x2c1931975a4ad590L,
12832         0x2ba2f5489fc1dbc0L },
12833       { 0x7fe4eebbe490ebe0L,0x12a0a4cd7fae11c0L,0x7197cf81e903ba37L,
12834         0xcf7d4aa8de1c6dd8L } },
12835     /* 10 << 42 */
12836     { { 0x92af6bf43fd5684cL,0x2b26eecf80360aa1L,0xbd960f3000546a82L,
12837         0x407b3c43f59ad8feL },
12838       { 0x86cae5fe249c82baL,0x9e0faec72463744cL,0x87f551e894916272L,
12839         0x033f93446ceb0615L } },
12840     /* 11 << 42 */
12841     { { 0x1e5eb0d18be82e84L,0x89967f0e7a582fefL,0xbcf687d5a6e921faL,
12842         0xdfee4cf3d37a09baL },
12843       { 0x94f06965b493c465L,0x638b9a1c7635c030L,0x7666786466f05e9fL,
12844         0xccaf6808c04da725L } },
12845     /* 12 << 42 */
12846     { { 0xca2eb690768fccfcL,0xf402d37db835b362L,0x0efac0d0e2fdfcceL,
12847         0xefc9cdefb638d990L },
12848       { 0x2af12b72d1669a8bL,0x33c536bc5774ccbdL,0x30b21909fb34870eL,
12849         0xc38fa2f77df25acaL } },
12850     /* 13 << 42 */
12851     { { 0x74c5f02bbf81f3f5L,0x0525a5aeaf7e4581L,0x88d2aaba433c54aeL,
12852         0xed9775db806a56c5L },
12853       { 0xd320738ac0edb37dL,0x25fdb6ee66cc1f51L,0xac661d1710600d76L,
12854         0x931ec1f3bdd1ed76L } },
12855     /* 14 << 42 */
12856     { { 0x65c11d6219ee43f1L,0x5cd57c3e60829d97L,0xd26c91a3984be6e8L,
12857         0xf08d93098b0c53bdL },
12858       { 0x94bc9e5bc016e4eaL,0xd391683911d43d2bL,0x886c5ad773701155L,
12859         0xe037762620b00715L } },
12860     /* 15 << 42 */
12861     { { 0x7f01c9ecaa80ba59L,0x3083411a68538e51L,0x970370f1e88128afL,
12862         0x625cc3db91dec14bL },
12863       { 0xfef9666c01ac3107L,0xb2a8d577d5057ac3L,0xb0f2629992be5df7L,
12864         0xf579c8e500353924L } },
12865     /* 16 << 42 */
12866     { { 0xb8fa3d931341ed7aL,0x4223272ca7b59d49L,0x3dcb194783b8c4a4L,
12867         0x4e413c01ed1302e4L },
12868       { 0x6d999127e17e44ceL,0xee86bf7533b3adfbL,0xf6902fe625aa96caL,
12869         0xb73540e4e5aae47dL } },
12870     /* 17 << 42 */
12871     { { 0x32801d7b1b4a158cL,0xe571c99e27e2a369L,0x40cb76c010d9f197L,
12872         0xc308c2893167c0aeL },
12873       { 0xa6ef9dd3eb7958f2L,0xa7226dfc300879b1L,0x6cd0b3627edf0636L,
12874         0x4efbce6c7bc37eedL } },
12875     /* 18 << 42 */
12876     { { 0x75f92a058d699021L,0x586d4c79772566e3L,0x378ca5f1761ad23aL,
12877         0x650d86fc1465a8acL },
12878       { 0x7a4ed457842ba251L,0x6b65e3e642234933L,0xaf1543b731aad657L,
12879         0xa4cefe98cbfec369L } },
12880     /* 19 << 42 */
12881     { { 0xb587da909f47befbL,0x6562e9fb41312d13L,0xa691ea59eff1cefeL,
12882         0xcc30477a05fc4cf6L },
12883       { 0xa16324610b0ffd3dL,0xa1f16f3b5b355956L,0x5b148d534224ec24L,
12884         0xdc834e7bf977012aL } },
12885     /* 20 << 42 */
12886     { { 0x7bfc5e75b2c69dbcL,0x3aa77a2903c3da6cL,0xde0df03cca910271L,
12887         0xcbd5ca4a7806dc55L },
12888       { 0xe1ca58076db476cbL,0xfde15d625f37a31eL,0xf49af520f41af416L,
12889         0x96c5c5b17d342db5L } },
12890     /* 21 << 42 */
12891     { { 0x155c43b7eb4ceb9bL,0x2e9930104e77371aL,0x1d2987da675d43afL,
12892         0xef2bc1c08599fd72L },
12893       { 0x96894b7b9342f6b2L,0x201eadf27c8e71f0L,0xf3479d9f4a1f3efcL,
12894         0xe0f8a742702a9704L } },
12895     /* 22 << 42 */
12896     { { 0xeafd44b6b3eba40cL,0xf9739f29c1c1e0d0L,0x0091471a619d505eL,
12897         0xc15f9c969d7c263eL },
12898       { 0x5be4728583afbe33L,0xa3b6d6af04f1e092L,0xe76526b9751a9d11L,
12899         0x2ec5b26d9a4ae4d2L } },
12900     /* 23 << 42 */
12901     { { 0xeb66f4d902f6fb8dL,0x4063c56196912164L,0xeb7050c180ef3000L,
12902         0x288d1c33eaa5b3f0L },
12903       { 0xe87c68d607806fd8L,0xb2f7f9d54bbbf50fL,0x25972f3aac8d6627L,
12904         0xf854777410e8c13bL } },
12905     /* 24 << 42 */
12906     { { 0xcc50ef6c872b4a60L,0xab2a34a44613521bL,0x39c5c190983e15d1L,
12907         0x61dde5df59905512L },
12908       { 0xe417f6219f2275f3L,0x0750c8b6451d894bL,0x75b04ab978b0bdaaL,
12909         0x3bfd9fd4458589bdL } },
12910     /* 25 << 42 */
12911     { { 0xf1013e30ee9120b6L,0x2b51af9323a4743eL,0xea96ffae48d14d9eL,
12912         0x71dc0dbe698a1d32L },
12913       { 0x914962d20180cca4L,0x1ae60677c3568963L,0x8cf227b1437bc444L,
12914         0xc650c83bc9962c7aL } },
12915     /* 26 << 42 */
12916     { { 0x23c2c7ddfe7ccfc4L,0xf925c89d1b929d48L,0x4460f74b06783c33L,
12917         0xac2c8d49a590475aL },
12918       { 0xfb40b407b807bba0L,0x9d1e362d69ff8f3aL,0xa33e9681cbef64a4L,
12919         0x67ece5fa332fb4b2L } },
12920     /* 27 << 42 */
12921     { { 0x6900a99b739f10e3L,0xc3341ca9ff525925L,0xee18a626a9e2d041L,
12922         0xa5a8368529580dddL },
12923       { 0xf3470c819d7de3cdL,0xedf025862062cf9cL,0xf43522fac010edb0L,
12924         0x3031413513a4b1aeL } },
12925     /* 28 << 42 */
12926     { { 0xc792e02adb22b94bL,0x993d8ae9a1eaa45bL,0x8aad6cd3cd1e1c63L,
12927         0x89529ca7c5ce688aL },
12928       { 0x2ccee3aae572a253L,0xe02b643802a21efbL,0xa7091b6ec9430358L,
12929         0x06d1b1fa9d7db504L } },
12930     /* 29 << 42 */
12931     { { 0x58846d32c4744733L,0x40517c71379f9e34L,0x2f65655f130ef6caL,
12932         0x526e4488f1f3503fL },
12933       { 0x8467bd177ee4a976L,0x1d9dc913921363d1L,0xd8d24c33b069e041L,
12934         0x5eb5da0a2cdf7f51L } },
12935     /* 30 << 42 */
12936     { { 0x1c0f3cb1197b994fL,0x3c95a6c52843eae9L,0x7766ffc9a6097ea5L,
12937         0x7bea4093d723b867L },
12938       { 0xb48e1f734db378f9L,0x70025b00e37b77acL,0x943dc8e7af24ad46L,
12939         0xb98a15ac16d00a85L } },
12940     /* 31 << 42 */
12941     { { 0x3adc38ba2743b004L,0xb1c7f4f7334415eeL,0xea43df8f1e62d05aL,
12942         0x326189059d76a3b6L },
12943       { 0x2fbd0bb5a23a0f46L,0x5bc971db6a01918cL,0x7801d94ab4743f94L,
12944         0xb94df65e676ae22bL } },
12945     /* 32 << 42 */
12946     { { 0xaafcbfabaf95894cL,0x7b9bdc07276b2241L,0xeaf983625bdda48bL,
12947         0x5977faf2a3fcb4dfL },
12948       { 0xbed042ef052c4b5bL,0x9fe87f71067591f0L,0xc89c73ca22f24ec7L,
12949         0x7d37fa9ee64a9f1bL } },
12950     /* 33 << 42 */
12951     { { 0x2710841a15562627L,0x2c01a613c243b034L,0x1d135c562bc68609L,
12952         0xc2ca17158b03f1f6L },
12953       { 0xc9966c2d3eb81d82L,0xc02abf4a8f6df13eL,0x77b34bd78f72b43bL,
12954         0xaff6218f360c82b0L } },
12955     /* 34 << 42 */
12956     { { 0x0aa5726c8d55b9d2L,0xdc0adbe999e9bffbL,0x9097549cefb9e72aL,
12957         0x167557129dfb3111L },
12958       { 0xdd8bf984f26847f9L,0xbcb8e387dfb30cb7L,0xc1fd32a75171ef9cL,
12959         0x977f3fc7389b363fL } },
12960     /* 35 << 42 */
12961     { { 0x116eaf2bf4babda0L,0xfeab68bdf7113c8eL,0xd1e3f064b7def526L,
12962         0x1ac30885e0b3fa02L },
12963       { 0x1c5a6e7b40142d9dL,0x839b560330921c0bL,0x48f301fa36a116a3L,
12964         0x380e1107cfd9ee6dL } },
12965     /* 36 << 42 */
12966     { { 0x7945ead858854be1L,0x4111c12ecbd4d49dL,0xece3b1ec3a29c2efL,
12967         0x6356d4048d3616f5L },
12968       { 0x9f0d6a8f594d320eL,0x0989316df651ccd2L,0x6c32117a0f8fdde4L,
12969         0x9abe5cc5a26a9bbcL } },
12970     /* 37 << 42 */
12971     { { 0xcff560fb9723f671L,0x21b2a12d7f3d593cL,0xe4cb18da24ba0696L,
12972         0x186e2220c3543384L },
12973       { 0x722f64e088312c29L,0x94282a9917dc7752L,0x62467bbf5a85ee89L,
12974         0xf435c650f10076a0L } },
12975     /* 38 << 42 */
12976     { { 0xc9ff153943b3a50bL,0x7132130c1a53efbcL,0x31bfe063f7b0c5b7L,
12977         0xb0179a7d4ea994ccL },
12978       { 0x12d064b3c85f455bL,0x472593288f6e0062L,0xf64e590bb875d6d9L,
12979         0x22dd6225ad92bcc7L } },
12980     /* 39 << 42 */
12981     { { 0xb658038eb9c3bd6dL,0x00cdb0d6fbba27c8L,0x0c6813371062c45dL,
12982         0xd8515b8c2d33407dL },
12983       { 0xcb8f699e8cbb5ecfL,0x8c4347f8c608d7d8L,0x2c11850abb3e00dbL,
12984         0x20a8dafdecb49d19L } },
12985     /* 40 << 42 */
12986     { { 0xbd78148045ee2f40L,0x75e354af416b60cfL,0xde0b58a18d49a8c4L,
12987         0xe40e94e2fa359536L },
12988       { 0xbd4fa59f62accd76L,0x05cf466a8c762837L,0xb5abda99448c277bL,
12989         0x5a9e01bf48b13740L } },
12990     /* 41 << 42 */
12991     { { 0x9d457798326aad8dL,0xbdef4954c396f7e7L,0x6fb274a2c253e292L,
12992         0x2800bf0a1cfe53e7L },
12993       { 0x22426d3144438fd4L,0xef2339235e259f9aL,0x4188503c03f66264L,
12994         0x9e5e7f137f9fdfabL } },
12995     /* 42 << 42 */
12996     { { 0x565eb76c5fcc1abaL,0xea63254859b5bff8L,0x5587c087aab6d3faL,
12997         0x92b639ea6ce39c1bL },
12998       { 0x0706e782953b135cL,0x7308912e425268efL,0x599e92c7090e7469L,
12999         0x83b90f529bc35e75L } },
13000     /* 43 << 42 */
13001     { { 0x4750b3d0244975b3L,0xf3a4435811965d72L,0x179c67749c8dc751L,
13002         0xff18cdfed23d9ff0L },
13003       { 0xc40138332028e247L,0x96e280e2f3bfbc79L,0xf60417bdd0880a84L,
13004         0x263c9f3d2a568151L } },
13005     /* 44 << 42 */
13006     { { 0x36be15b32d2ce811L,0x846dc0c2f8291d21L,0x5cfa0ecb789fcfdbL,
13007         0x45a0beedd7535b9aL },
13008       { 0xec8e9f0796d69af1L,0x31a7c5b8599ab6dcL,0xd36d45eff9e2e09fL,
13009         0x3cf49ef1dcee954bL } },
13010     /* 45 << 42 */
13011     { { 0x6be34cf3086cff9bL,0x88dbd49139a3360fL,0x1e96b8cc0dbfbd1dL,
13012         0xc1e5f7bfcb7e2552L },
13013       { 0x0547b21428819d98L,0xc770dd9c7aea9dcbL,0xaef0d4c7041d68c8L,
13014         0xcc2b981813cb9ba8L } },
13015     /* 46 << 42 */
13016     { { 0x7fc7bc76fe86c607L,0x6b7b9337502a9a95L,0x1948dc27d14dab63L,
13017         0x249dd198dae047beL },
13018       { 0xe8356584a981a202L,0x3531dd183a893387L,0x1be11f90c85c7209L,
13019         0x93d2fe1ee2a52b5aL } },
13020     /* 47 << 42 */
13021     { { 0x8225bfe2ec6d6b97L,0x9cf6d6f4bd0aa5deL,0x911459cb54779f5fL,
13022         0x5649cddb86aeb1f3L },
13023       { 0x321335793f26ce5aL,0xc289a102550f431eL,0x559dcfda73b84c6fL,
13024         0x84973819ee3ac4d7L } },
13025     /* 48 << 42 */
13026     { { 0xb51e55e6f2606a82L,0xe25f706190f2fb57L,0xacef6c2ab1a4e37cL,
13027         0x864e359d5dcf2706L },
13028       { 0x479e6b187ce57316L,0x2cab25003a96b23dL,0xed4898628ef16df7L,
13029         0x2056538cef3758b5L } },
13030     /* 49 << 42 */
13031     { { 0xa7df865ef15d3101L,0x80c5533a61b553d7L,0x366e19974ed14294L,
13032         0x6620741fb3c0bcd6L },
13033       { 0x21d1d9c4edc45418L,0x005b859ec1cc4a9dL,0xdf01f630a1c462f0L,
13034         0x15d06cf3f26820c7L } },
13035     /* 50 << 42 */
13036     { { 0x9f7f24ee3484be47L,0x2ff33e964a0c902fL,0x00bdf4575a0bc453L,
13037         0x2378dfaf1aa238dbL },
13038       { 0x272420ec856720f2L,0x2ad9d95b96797291L,0xd1242cc6768a1558L,
13039         0x2e287f8b5cc86aa8L } },
13040     /* 51 << 42 */
13041     { { 0x796873d0990cecaaL,0xade55f81675d4080L,0x2645eea321f0cd84L,
13042         0x7a1efa0fb4e17d02L },
13043       { 0xf6858420037cc061L,0x682e05f0d5d43e12L,0x59c3699427218710L,
13044         0x85cbba4d3f7cd2fcL } },
13045     /* 52 << 42 */
13046     { { 0x726f97297a3cd22aL,0x9f8cd5dc4a628397L,0x17b93ab9c23165edL,
13047         0xff5f5dbf122823d4L },
13048       { 0xc1e4e4b5654a446dL,0xd1a9496f677257baL,0x6387ba94de766a56L,
13049         0x23608bc8521ec74aL } },
13050     /* 53 << 42 */
13051     { { 0x16a522d76688c4d4L,0x9d6b428207373abdL,0xa62f07acb42efaa3L,
13052         0xf73e00f7e3b90180L },
13053       { 0x36175fec49421c3eL,0xc4e44f9b3dcf2678L,0x76df436b7220f09fL,
13054         0x172755fb3aa8b6cfL } },
13055     /* 54 << 42 */
13056     { { 0xbab89d57446139ccL,0x0a0a6e025fe0208fL,0xcdbb63e211e5d399L,
13057         0x33ecaa12a8977f0bL },
13058       { 0x59598b21f7c42664L,0xb3e91b32ab65d08aL,0x035822eef4502526L,
13059         0x1dcf0176720a82a9L } },
13060     /* 55 << 42 */
13061     { { 0x50f8598f3d589e02L,0xdf0478ffb1d63d2cL,0x8b8068bd1571cd07L,
13062         0x30c3aa4fd79670cdL },
13063       { 0x25e8fd4b941ade7fL,0x3d1debdc32790011L,0x65b6dcbd3a3f9ff0L,
13064         0x282736a4793de69cL } },
13065     /* 56 << 42 */
13066     { { 0xef69a0c3d41d3bd3L,0xb533b8c907a26bdeL,0xe2801d97db2edf9fL,
13067         0xdc4a8269e1877af0L },
13068       { 0x6c1c58513d590dbeL,0x84632f6bee4e9357L,0xd36d36b779b33374L,
13069         0xb46833e39bbca2e6L } },
13070     /* 57 << 42 */
13071     { { 0x37893913f7fc0586L,0x385315f766bf4719L,0x72c56293b31855dcL,
13072         0xd1416d4e849061feL },
13073       { 0xbeb3ab7851047213L,0x447f6e61f040c996L,0xd06d310d638b1d0cL,
13074         0xe28a413fbad1522eL } },
13075     /* 58 << 42 */
13076     { { 0x685a76cb82003f86L,0x610d07f70bcdbca3L,0x6ff660219ca4c455L,
13077         0x7df39b87cea10eecL },
13078       { 0xb9255f96e22db218L,0x8cc6d9eb08a34c44L,0xcd4ffb86859f9276L,
13079         0x8fa15eb250d07335L } },
13080     /* 59 << 42 */
13081     { { 0xdf553845cf2c24b5L,0x89f66a9f52f9c3baL,0x8f22b5b9e4a7ceb3L,
13082         0xaffef8090e134686L },
13083       { 0x3e53e1c68eb8fac2L,0x93c1e4eb28aec98eL,0xb6b91ec532a43bcbL,
13084         0x2dbfa947b2d74a51L } },
13085     /* 60 << 42 */
13086     { { 0xe065d190ca84bad7L,0xfb13919fad58e65cL,0x3c41718bf1cb6e31L,
13087         0x688969f006d05c3fL },
13088       { 0xd4f94ce721264d45L,0xfdfb65e97367532bL,0x5b1be8b10945a39dL,
13089         0x229f789c2b8baf3bL } },
13090     /* 61 << 42 */
13091     { { 0xd8f41f3e6f49f15dL,0x678ce828907f0792L,0xc69ace82fca6e867L,
13092         0x106451aed01dcc89L },
13093       { 0x1bb4f7f019fc32d2L,0x64633dfcb00c52d2L,0x8f13549aad9ea445L,
13094         0x99a3bf50fb323705L } },
13095     /* 62 << 42 */
13096     { { 0x0c9625a2534d4dbcL,0x45b8f1d1c2a2fea3L,0x76ec21a1a530fc1aL,
13097         0x4bac9c2a9e5bd734L },
13098       { 0x5996d76a7b4e3587L,0x0045cdee1182d9e3L,0x1aee24b91207f13dL,
13099         0x66452e9797345a41L } },
13100     /* 63 << 42 */
13101     { { 0x16e5b0549f950cd0L,0x9cc72fb1d7fdd075L,0x6edd61e766249663L,
13102         0xde4caa4df043cccbL },
13103       { 0x11b1f57a55c7ac17L,0x779cbd441a85e24dL,0x78030f86e46081e7L,
13104         0xfd4a60328e20f643L } },
13105     /* 64 << 42 */
13106     { { 0xcc7a64880a750c0fL,0x39bacfe34e548e83L,0x3d418c760c110f05L,
13107         0x3e4daa4cb1f11588L },
13108       { 0x2733e7b55ffc69ffL,0x46f147bc92053127L,0x885b2434d722df94L,
13109         0x6a444f65e6fc6b7cL } },
13110     /* 0 << 49 */
13111     { { 0x00, 0x00, 0x00, 0x00 },
13112       { 0x00, 0x00, 0x00, 0x00 } },
13113     /* 1 << 49 */
13114     { { 0x7a1a465ac3f16ea8L,0x115a461db2f1d11cL,0x4767dd956c68a172L,
13115         0x3392f2ebd13a4698L },
13116       { 0xc7a99ccde526cdc7L,0x8e537fdc22292b81L,0x76d8cf69a6d39198L,
13117         0xffc5ff432446852dL } },
13118     /* 2 << 49 */
13119     { { 0x97b14f7ea90567e6L,0x513257b7b6ae5cb7L,0x85454a3c9f10903dL,
13120         0xd8d2c9ad69bc3724L },
13121       { 0x38da93246b29cb44L,0xb540a21d77c8cbacL,0x9bbfe43501918e42L,
13122         0xfffa707a56c3614eL } },
13123     /* 3 << 49 */
13124     { { 0x0ce4e3f1d4e353b7L,0x062d8a14ef46b0a0L,0x6408d5ab574b73fdL,
13125         0xbc41d1c9d3273ffdL },
13126       { 0x3538e1e76be77800L,0x71fe8b37c5655031L,0x1cd916216b9b331aL,
13127         0xad825d0bbb388f73L } },
13128     /* 4 << 49 */
13129     { { 0x56c2e05b1cb76219L,0x0ec0bf9171567e7eL,0xe7076f8661c4c910L,
13130         0xd67b085bbabc04d9L },
13131       { 0x9fb904595e93a96aL,0x7526c1eafbdc249aL,0x0d44d367ecdd0bb7L,
13132         0x953999179dc0d695L } },
13133     /* 5 << 49 */
13134     { { 0x61360ee99e240d18L,0x057cdcacb4b94466L,0xe7667cd12fe5325cL,
13135         0x1fa297b521974e3bL },
13136       { 0xfa4081e7db083d76L,0x31993be6f206bd15L,0x8949269b14c19f8cL,
13137         0x21468d72a9d92357L } },
13138     /* 6 << 49 */
13139     { { 0x2ccbc583a4c506ecL,0x957ed188d1acfe97L,0x8baed83312f1aea2L,
13140         0xef2a6cb48325362dL },
13141       { 0x130dde428e195c43L,0xc842025a0e6050c6L,0x2da972a708686a5dL,
13142         0xb52999a1e508b4a8L } },
13143     /* 7 << 49 */
13144     { { 0xd9f090b910a5a8bdL,0xca91d249096864daL,0x8e6a93be3f67dbc1L,
13145         0xacae6fbaf5f4764cL },
13146       { 0x1563c6e0d21411a0L,0x28fa787fda0a4ad8L,0xd524491c908c8030L,
13147         0x1257ba0e4c795f07L } },
13148     /* 8 << 49 */
13149     { { 0x83f49167ceca9754L,0x426d2cf64b7939a0L,0x2555e355723fd0bfL,
13150         0xa96e6d06c4f144e2L },
13151       { 0x4768a8dd87880e61L,0x15543815e508e4d5L,0x09d7e772b1b65e15L,
13152         0x63439dd6ac302fa0L } },
13153     /* 9 << 49 */
13154     { { 0xb93f802fc14e35c2L,0x71735b7c4341333cL,0x03a2510416d4f362L,
13155         0x3f4d069bbf433c8eL },
13156       { 0x0d83ae01f78f5a7cL,0x50a8ffbe7c4eed07L,0xc74f890676e10f83L,
13157         0x7d0809669ddaf8e1L } },
13158     /* 10 << 49 */
13159     { { 0xb11df8e1698e04ccL,0x877be203169005c8L,0x32749e8c4f3c6179L,
13160         0x2dbc9d0a7853fc05L },
13161       { 0x187d4f939454d937L,0xe682ce9db4800e1bL,0xa9129ad8165e68e8L,
13162         0x0fe29735be7f785bL } },
13163     /* 11 << 49 */
13164     { { 0x5303f40c5b9e02b7L,0xa37c969235ee04e8L,0x5f46cc2034d6632bL,
13165         0x55ef72b296ac545bL },
13166       { 0xabec5c1f7b91b062L,0x0a79e1c7bb33e821L,0xbb04b4283a9f4117L,
13167         0x0de1f28ffd2a475aL } },
13168     /* 12 << 49 */
13169     { { 0x31019ccf3a4434b4L,0xa34581111a7954dcL,0xa9dac80de34972a7L,
13170         0xb043d05474f6b8ddL },
13171       { 0x021c319e11137b1aL,0x00a754ceed5cc03fL,0x0aa2c794cbea5ad4L,
13172         0x093e67f470c015b6L } },
13173     /* 13 << 49 */
13174     { { 0x72cdfee9c97e3f6bL,0xc10bcab4b6da7461L,0x3b02d2fcb59806b9L,
13175         0x85185e89a1de6f47L },
13176       { 0x39e6931f0eb6c4d4L,0x4d4440bdd4fa5b04L,0x5418786e34be7eb8L,
13177         0x6380e5219d7259bcL } },
13178     /* 14 << 49 */
13179     { { 0x20ac0351d598d710L,0x272c4166cb3a4da4L,0xdb82fe1aca71de1fL,
13180         0x746e79f2d8f54b0fL },
13181       { 0x6e7fc7364b573e9bL,0x75d03f46fd4b5040L,0x5c1cc36d0b98d87bL,
13182         0x513ba3f11f472da1L } },
13183     /* 15 << 49 */
13184     { { 0x79d0af26abb177ddL,0xf82ab5687891d564L,0x2b6768a972232173L,
13185         0xefbb3bb08c1f6619L },
13186       { 0xb29c11dba6d18358L,0x519e2797b0916d3aL,0xd4dc18f09188e290L,
13187         0x648e86e398b0ca7fL } },
13188     /* 16 << 49 */
13189     { { 0x859d3145983c38b5L,0xb14f176c637abc8bL,0x2793fb9dcaff7be6L,
13190         0xebe5a55f35a66a5aL },
13191       { 0x7cec1dcd9f87dc59L,0x7c595cd3fbdbf560L,0x5b543b2226eb3257L,
13192         0x69080646c4c935fdL } },
13193     /* 17 << 49 */
13194     { { 0x7f2e440381e9ede3L,0x243c3894caf6df0aL,0x7c605bb11c073b11L,
13195         0xcd06a541ba6a4a62L },
13196       { 0x2916894949d4e2e5L,0x33649d074af66880L,0xbfc0c885e9a85035L,
13197         0xb4e52113fc410f4bL } },
13198     /* 18 << 49 */
13199     { { 0xdca3b70678a6513bL,0x92ea4a2a9edb1943L,0x02642216db6e2dd8L,
13200         0x9b45d0b49fd57894L },
13201       { 0x114e70dbc69d11aeL,0x1477dd194c57595fL,0xbc2208b4ec77c272L,
13202         0x95c5b4d7db68f59cL } },
13203     /* 19 << 49 */
13204     { { 0xb8c4fc6342e532b7L,0x386ba4229ae35290L,0xfb5dda42d201ecbcL,
13205         0x2353dc8ba0e38fd6L },
13206       { 0x9a0b85ea68f7e978L,0x96ec56822ad6d11fL,0x5e279d6ce5f6886dL,
13207         0xd3fe03cd3cb1914dL } },
13208     /* 20 << 49 */
13209     { { 0xfe541fa47ea67c77L,0x952bd2afe3ea810cL,0x791fef568d01d374L,
13210         0xa3a1c6210f11336eL },
13211       { 0x5ad0d5a9c7ec6d79L,0xff7038af3225c342L,0x003c6689bc69601bL,
13212         0x25059bc745e8747dL } },
13213     /* 21 << 49 */
13214     { { 0xfa4965b2f2086fbfL,0xf6840ea686916078L,0xd7ac762070081d6cL,
13215         0xe600da31b5328645L },
13216       { 0x01916f63529b8a80L,0xe80e48582d7d6f3eL,0x29eb0fe8d664ca7cL,
13217         0xf017637be7b43b0cL } },
13218     /* 22 << 49 */
13219     { { 0x9a75c80676cb2566L,0x8f76acb1b24892d9L,0x7ae7b9cc1f08fe45L,
13220         0x19ef73296a4907d8L },
13221       { 0x2db4ab715f228bf0L,0xf3cdea39817032d7L,0x0b1f482edcabe3c0L,
13222         0x3baf76b4bb86325cL } },
13223     /* 23 << 49 */
13224     { { 0xd49065e010089465L,0x3bab5d298e77c596L,0x7636c3a6193dbd95L,
13225         0xdef5d294b246e499L },
13226       { 0xb22c58b9286b2475L,0xa0b93939cd80862bL,0x3002c83af0992388L,
13227         0x6de01f9beacbe14cL } },
13228     /* 24 << 49 */
13229     { { 0x6aac688eadd70482L,0x708de92a7b4a4e8aL,0x75b6dd73758a6eefL,
13230         0xea4bf352725b3c43L },
13231       { 0x10041f2c87912868L,0xb1b1be95ef09297aL,0x19ae23c5a9f3860aL,
13232         0xc4f0f839515dcf4bL } },
13233     /* 25 << 49 */
13234     { { 0x3c7ecca397f6306aL,0x744c44ae68a3a4b0L,0x69cd13a0b3a1d8a2L,
13235         0x7cad0a1e5256b578L },
13236       { 0xea653fcd33791d9eL,0x9cc2a05d74b2e05fL,0x73b391dcfd7affa2L,
13237         0xddb7091eb6b05442L } },
13238     /* 26 << 49 */
13239     { { 0xc71e27bf8538a5c6L,0x195c63dd89abff17L,0xfd3152851b71e3daL,
13240         0x9cbdfda7fa680fa0L },
13241       { 0x9db876ca849d7eabL,0xebe2764b3c273271L,0x663357e3f208dceaL,
13242         0x8c5bd833565b1b70L } },
13243     /* 27 << 49 */
13244     { { 0xccc3b4f59837fc0dL,0x9b641ba8a79cf00fL,0x7428243ddfdf3990L,
13245         0x83a594c4020786b1L },
13246       { 0xb712451a526c4502L,0x9d39438e6adb3f93L,0xfdb261e3e9ff0ccdL,
13247         0x80344e3ce07af4c3L } },
13248     /* 28 << 49 */
13249     { { 0x75900d7c2fa4f126L,0x08a3b8655c99a232L,0x2478b6bfdb25e0c3L,
13250         0x482cc2c271db2edfL },
13251       { 0x37df7e645f321bb8L,0x8a93821b9a8005b4L,0x3fa2f10ccc8c1958L,
13252         0x0d3322182c269d0aL } },
13253     /* 29 << 49 */
13254     { { 0x20ab8119e246b0e6L,0xb39781e4d349fd17L,0xd293231eb31aa100L,
13255         0x4b779c97bb032168L },
13256       { 0x4b3f19e1c8470500L,0x45b7efe90c4c869dL,0xdb84f38aa1a6bbccL,
13257         0x3b59cb15b2fddbc1L } },
13258     /* 30 << 49 */
13259     { { 0xba5514df3fd165e8L,0x499fd6a9061f8811L,0x72cd1fe0bfef9f00L,
13260         0x120a4bb979ad7e8aL },
13261       { 0xf2ffd0955f4a5ac5L,0xcfd174f195a7a2f0L,0xd42301ba9d17baf1L,
13262         0xd2fa487a77f22089L } },
13263     /* 31 << 49 */
13264     { { 0x9cb09efeb1dc77e1L,0xe956693921c99682L,0x8c5469016c6067bbL,
13265         0xfd37857461c24456L },
13266       { 0x2b6a6cbe81796b33L,0x62d550f658e87f8bL,0x1b763e1c7f1b01b4L,
13267         0x4b93cfea1b1b5e12L } },
13268     /* 32 << 49 */
13269     { { 0xb93452381d531696L,0x57201c0088cdde69L,0xdde922519a86afc7L,
13270         0xe3043895bd35cea8L },
13271       { 0x7608c1e18555970dL,0x8267dfa92535935eL,0xd4c60a57322ea38bL,
13272         0xe0bf7977804ef8b5L } },
13273     /* 33 << 49 */
13274     { { 0x1a0dab28c06fece4L,0xd405991e94e7b49dL,0xc542b6d2706dab28L,
13275         0xcb228da3a91618fbL },
13276       { 0x224e4164107d1ceaL,0xeb9fdab3d0f5d8f1L,0xc02ba3860d6e41cdL,
13277         0x676a72c59b1f7146L } },
13278     /* 34 << 49 */
13279     { { 0xffd6dd984d6cb00bL,0xcef9c5cade2e8d7cL,0xa1bbf5d7641c7936L,
13280         0x1b95b230ee8f772eL },
13281       { 0xf765a92ee8ac25b1L,0xceb04cfc3a18b7c6L,0x27944cef0acc8966L,
13282         0xcbb3c957434c1004L } },
13283     /* 35 << 49 */
13284     { { 0x9c9971a1a43ff93cL,0x5bc2db17a1e358a9L,0x45b4862ea8d9bc82L,
13285         0x70ebfbfb2201e052L },
13286       { 0xafdf64c792871591L,0xea5bcae6b42d0219L,0xde536c552ad8f03cL,
13287         0xcd6c3f4da76aa33cL } },
13288     /* 36 << 49 */
13289     { { 0xbeb5f6230bca6de3L,0xdd20dd99b1e706fdL,0x90b3ff9dac9059d4L,
13290         0x2d7b29027ccccc4eL },
13291       { 0x8a090a59ce98840fL,0xa5d947e08410680aL,0x49ae346a923379a5L,
13292         0x7dbc84f9b28a3156L } },
13293     /* 37 << 49 */
13294     { { 0xfd40d91654a1aff2L,0xabf318ba3a78fb9bL,0x50152ed83029f95eL,
13295         0x9fc1dd77c58ad7faL },
13296       { 0x5fa5791513595c17L,0xb95046688f62b3a9L,0x907b5b24ff3055b0L,
13297         0x2e995e359a84f125L } },
13298     /* 38 << 49 */
13299     { { 0x87dacf697e9bbcfbL,0x95d0c1d6e86d96e3L,0x65726e3c2d95a75cL,
13300         0x2c3c9001acd27f21L },
13301       { 0x1deab5616c973f57L,0x108b7e2ca5221643L,0x5fee9859c4ef79d4L,
13302         0xbd62b88a40d4b8c6L } },
13303     /* 39 << 49 */
13304     { { 0xb4dd29c4197c75d6L,0x266a6df2b7076febL,0x9512d0ea4bf2df11L,
13305         0x1320c24f6b0cc9ecL },
13306       { 0x6bb1e0e101a59596L,0x8317c5bbeff9aaacL,0x65bb405e385aa6c9L,
13307         0x613439c18f07988fL } },
13308     /* 40 << 49 */
13309     { { 0xd730049f16a66e91L,0xe97f2820fa1b0e0dL,0x4131e003304c28eaL,
13310         0x820ab732526bac62L },
13311       { 0xb2ac9ef928714423L,0x54ecfffaadb10cb2L,0x8781476ef886a4ccL,
13312         0x4b2c87b5db2f8d49L } },
13313     /* 41 << 49 */
13314     { { 0xe857cd200a44295dL,0x707d7d2158c6b044L,0xae8521f9f596757cL,
13315         0x87448f0367b2b714L },
13316       { 0x13a9bc455ebcd58dL,0x79bcced99122d3c1L,0x3c6442479e076642L,
13317         0x0cf227782df4767dL } },
13318     /* 42 << 49 */
13319     { { 0x5e61aee471d444b6L,0x211236bfc5084a1dL,0x7e15bc9a4fd3eaf6L,
13320         0x68df2c34ab622bf5L },
13321       { 0x9e674f0f59bf4f36L,0xf883669bd7f34d73L,0xc48ac1b831497b1dL,
13322         0x323b925d5106703bL } },
13323     /* 43 << 49 */
13324     { { 0x22156f4274082008L,0xeffc521ac8482bcbL,0x5c6831bf12173479L,
13325         0xcaa2528fc4739490L },
13326       { 0x84d2102a8f1b3c4dL,0xcf64dfc12d9bec0dL,0x433febad78a546efL,
13327         0x1f621ec37b73cef1L } },
13328     /* 44 << 49 */
13329     { { 0x6aecd62737338615L,0x162082ab01d8edf6L,0x833a811919e86b66L,
13330         0x6023a251d299b5dbL },
13331       { 0xf5bb0c3abbf04b89L,0x6735eb69ae749a44L,0xd0e058c54713de3bL,
13332         0xfdf2593e2c3d4ccdL } },
13333     /* 45 << 49 */
13334     { { 0x1b8f414efdd23667L,0xdd52aacafa2015eeL,0x3e31b517bd9625ffL,
13335         0x5ec9322d8db5918cL },
13336       { 0xbc73ac85a96f5294L,0x82aa5bf361a0666aL,0x49755810bf08ac42L,
13337         0xd21cdfd5891cedfcL } },
13338     /* 46 << 49 */
13339     { { 0x918cb57b67f8be10L,0x365d1a7c56ffa726L,0x2435c5046532de93L,
13340         0xc0fc5e102674cd02L },
13341       { 0x6e51fcf89cbbb142L,0x1d436e5aafc50692L,0x766bffff3fbcae22L,
13342         0x3148c2fdfd55d3b8L } },
13343     /* 47 << 49 */
13344     { { 0x52c7fdc9233222faL,0x89ff1092e419fb6bL,0x3cd6db9925254977L,
13345         0x2e85a1611cf12ca7L },
13346       { 0xadd2547cdc810bc9L,0xea3f458f9d257c22L,0x642c1fbe27d6b19bL,
13347         0xed07e6b5140481a6L } },
13348     /* 48 << 49 */
13349     { { 0x6ada1d4286d2e0f8L,0xe59201220e8a9fd5L,0x02c936af708c1b49L,
13350         0x60f30fee2b4bfaffL },
13351       { 0x6637ad06858e6a61L,0xce4c77673fd374d0L,0x39d54b2d7188defbL,
13352         0xa8c9d250f56a6b66L } },
13353     /* 49 << 49 */
13354     { { 0x58fc0f5eb24fe1dcL,0x9eaf9dee6b73f24cL,0xa90d588b33650705L,
13355         0xde5b62c5af2ec729L },
13356       { 0x5c72cfaed3c2b36eL,0x868c19d5034435daL,0x88605f93e17ee145L,
13357         0xaa60c4ee77a5d5b1L } },
13358     /* 50 << 49 */
13359     { { 0xbcf5bfd23b60c472L,0xaf4ef13ceb1d3049L,0x373f44fce13895c9L,
13360         0xf29b382f0cbc9822L },
13361       { 0x1bfcb85373efaef6L,0xcf56ac9ca8c96f40L,0xd7adf1097a191e24L,
13362         0x98035f44bf8a8dc2L } },
13363     /* 51 << 49 */
13364     { { 0xf40a71b91e750c84L,0xc57f7b0c5dc6c469L,0x49a0e79c6fbc19c1L,
13365         0x6b0f5889a48ebdb8L },
13366       { 0x5d3fd084a07c4e9fL,0xc3830111ab27de14L,0x0e4929fe33e08dccL,
13367         0xf4a5ad2440bb73a3L } },
13368     /* 52 << 49 */
13369     { { 0xde86c2bf490f97caL,0x288f09c667a1ce18L,0x364bb8861844478dL,
13370         0x7840fa42ceedb040L },
13371       { 0x1269fdd25a631b37L,0x94761f1ea47c8b7dL,0xfc0c2e17481c6266L,
13372         0x85e16ea23daa5fa7L } },
13373     /* 53 << 49 */
13374     { { 0xccd8603392491048L,0x0c2f6963f4d402d7L,0x6336f7dfdf6a865cL,
13375         0x0a2a463cb5c02a87L },
13376       { 0xb0e29be7bf2f12eeL,0xf0a2200266bad988L,0x27f87e039123c1d7L,
13377         0x21669c55328a8c98L } },
13378     /* 54 << 49 */
13379     { { 0x186b980392f14529L,0xd3d056cc63954df3L,0x2f03fd58175a46f6L,
13380         0x63e34ebe11558558L },
13381       { 0xe13fedee5b80cfa5L,0xe872a120d401dbd1L,0x52657616e8a9d667L,
13382         0xbc8da4b6e08d6693L } },
13383     /* 55 << 49 */
13384     { { 0x370fb9bb1b703e75L,0x6773b186d4338363L,0x18dad378ecef7bffL,
13385         0xaac787ed995677daL },
13386       { 0x4801ea8b0437164bL,0xf430ad2073fe795eL,0xb164154d8ee5eb73L,
13387         0x0884ecd8108f7c0eL } },
13388     /* 56 << 49 */
13389     { { 0x0e6ec0965f520698L,0x640631fe44f7b8d9L,0x92fd34fca35a68b9L,
13390         0x9c5a4b664d40cf4eL },
13391       { 0x949454bf80b6783dL,0x80e701fe3a320a10L,0x8d1a564a1a0a39b2L,
13392         0x1436d53d320587dbL } },
13393     /* 57 << 49 */
13394     { { 0xf5096e6d6556c362L,0xbc23a3c0e2455d7eL,0x3a7aee54807230f9L,
13395         0x9ba1cfa622ae82fdL },
13396       { 0x833a057a99c5d706L,0x8be85f4b842315c9L,0xd083179a66a72f12L,
13397         0x2fc77d5dcdcc73cdL } },
13398     /* 58 << 49 */
13399     { { 0x22b88a805616ee30L,0xfb09548fe7ab1083L,0x8ad6ab0d511270cdL,
13400         0x61f6c57a6924d9abL },
13401       { 0xa0f7bf7290aecb08L,0x849f87c90df784a4L,0x27c79c15cfaf1d03L,
13402         0xbbf9f675c463faceL } },
13403     /* 59 << 49 */
13404     { { 0x91502c65765ba543L,0x18ce3cac42ea60ddL,0xe5cee6ac6e43ecb3L,
13405         0x63e4e91068f2aeebL },
13406       { 0x26234fa3c85932eeL,0x96883e8b4c90c44dL,0x29b9e738a18a50f6L,
13407         0xbfc62b2a3f0420dfL } },
13408     /* 60 << 49 */
13409     { { 0xd22a7d906d3e1fa9L,0x17115618fe05b8a3L,0x2a0c9926bb2b9c01L,
13410         0xc739fcc6e07e76a2L },
13411       { 0x540e9157165e439aL,0x06353a626a9063d8L,0x84d9559461e927a3L,
13412         0x013b9b26e2e0be7fL } },
13413     /* 61 << 49 */
13414     { { 0x4feaec3b973497f1L,0x15c0f94e093ebc2dL,0x6af5f22733af0583L,
13415         0x0c2af206c61f3340L },
13416       { 0xd25dbdf14457397cL,0x2e8ed017cabcbae0L,0xe3010938c2815306L,
13417         0xbaa99337e8c6cd68L } },
13418     /* 62 << 49 */
13419     { { 0x085131823b0ec7deL,0x1e1b822b58df05dfL,0x5c14842fa5c3b683L,
13420         0x98fe977e3eba34ceL },
13421       { 0xfd2316c20d5e8873L,0xe48d839abd0d427dL,0x495b2218623fc961L,
13422         0x24ee56e7b46fba5eL } },
13423     /* 63 << 49 */
13424     { { 0x9184a55b91e4de58L,0xa7488ca5dfdea288L,0xa723862ea8dcc943L,
13425         0x92d762b2849dc0fcL },
13426       { 0x3c444a12091ff4a9L,0x581113fa0cada274L,0xb9de0a4530d8eae2L,
13427         0x5e0fcd85df6b41eaL } },
13428     /* 64 << 49 */
13429     { { 0x6233ea68c094dbb5L,0xb77d062ed968d410L,0x3e719bbc58b3002dL,
13430         0x68e7dd3d3dc49d58L },
13431       { 0x8d825740013a5e58L,0x213117473c9e3c1bL,0x0cb0a2a77c99b6abL,
13432         0x5c48a3b3c2f888f2L } },
13433     /* 0 << 56 */
13434     { { 0x00, 0x00, 0x00, 0x00 },
13435       { 0x00, 0x00, 0x00, 0x00 } },
13436     /* 1 << 56 */
13437     { { 0xc7913e91991724f3L,0x5eda799c39cbd686L,0xddb595c763d4fc1eL,
13438         0x6b63b80bac4fed54L },
13439       { 0x6ea0fc697e5fb516L,0x737708bad0f1c964L,0x9628745f11a92ca5L,
13440         0x61f379589a86967aL } },
13441     /* 2 << 56 */
13442     { { 0x9af39b2caa665072L,0x78322fa4efd324efL,0x3d153394c327bd31L,
13443         0x81d5f2713129dab0L },
13444       { 0xc72e0c42f48027f5L,0xaa40cdbc8536e717L,0xf45a657a2d369d0fL,
13445         0xb03bbfc4ea7f74e6L } },
13446     /* 3 << 56 */
13447     { { 0x46a8c4180d738dedL,0x6f1a5bb0e0de5729L,0xf10230b98ba81675L,
13448         0x32c6f30c112b33d4L },
13449       { 0x7559129dd8fffb62L,0x6a281b47b459bf05L,0x77c1bd3afa3b6776L,
13450         0x0709b3807829973aL } },
13451     /* 4 << 56 */
13452     { { 0x8c26b232a3326505L,0x38d69272ee1d41bfL,0x0459453effe32afaL,
13453         0xce8143ad7cb3ea87L },
13454       { 0x932ec1fa7e6ab666L,0x6cd2d23022286264L,0x459a46fe6736f8edL,
13455         0x50bf0d009eca85bbL } },
13456     /* 5 << 56 */
13457     { { 0x0b825852877a21ecL,0x300414a70f537a94L,0x3f1cba4021a9a6a2L,
13458         0x50824eee76943c00L },
13459       { 0xa0dbfcecf83cba5dL,0xf953814893b4f3c0L,0x6174416248f24dd7L,
13460         0x5322d64de4fb09ddL } },
13461     /* 6 << 56 */
13462     { { 0x574473843d9325f3L,0xa9bef2d0f371cb84L,0x77d2188ba61e36c5L,
13463         0xbbd6a7d7c602df72L },
13464       { 0xba3aa9028f61bc0bL,0xf49085ed6ed0b6a1L,0x8bc625d6ae6e8298L,
13465         0x832b0b1da2e9c01dL } },
13466     /* 7 << 56 */
13467     { { 0xa337c447f1f0ced1L,0x800cc7939492dd2bL,0x4b93151dbea08efaL,
13468         0x820cf3f8de0a741eL },
13469       { 0xff1982dc1c0f7d13L,0xef92196084dde6caL,0x1ad7d97245f96ee3L,
13470         0x319c8dbe29dea0c7L } },
13471     /* 8 << 56 */
13472     { { 0xd3ea38717b82b99bL,0x75922d4d470eb624L,0x8f66ec543b95d466L,
13473         0x66e673ccbee1e346L },
13474       { 0x6afe67c4b5f2b89aL,0x3de9c1e6290e5cd3L,0x8c278bb6310a2adaL,
13475         0x420fa3840bdb323bL } },
13476     /* 9 << 56 */
13477     { { 0x0ae1d63b0eb919b0L,0xd74ee51da74b9620L,0x395458d0a674290cL,
13478         0x324c930f4620a510L },
13479       { 0x2d1f4d19fbac27d4L,0x4086e8ca9bedeeacL,0x0cdd211b9b679ab8L,
13480         0x5970167d7090fec4L } },
13481     /* 10 << 56 */
13482     { { 0x3420f2c9faf1fc63L,0x616d333a328c8bb4L,0x7d65364c57f1fe4aL,
13483         0x9343e87755e5c73aL },
13484       { 0x5795176be970e78cL,0xa36ccebf60533627L,0xfc7c738009cdfc1bL,
13485         0xb39a2afeb3fec326L } },
13486     /* 11 << 56 */
13487     { { 0xb7ff1ba16224408aL,0xcc856e92247cfc5eL,0x01f102e7c18bc493L,
13488         0x4613ab742091c727L },
13489       { 0xaa25e89cc420bf2bL,0x00a5317690337ec2L,0xd2be9f437d025fc7L,
13490         0x3316fb856e6fe3dcL } },
13491     /* 12 << 56 */
13492     { { 0x27520af59ac50814L,0xfdf95e789a8e4223L,0xb7e7df2a56bec5a0L,
13493         0xf7022f7ddf159e5dL },
13494       { 0x93eeeab1cac1fe8fL,0x8040188c37451168L,0x7ee8aa8ad967dce6L,
13495         0xfa0e79e73abc9299L } },
13496     /* 13 << 56 */
13497     { { 0x67332cfc2064cfd1L,0x339c31deb0651934L,0x719b28d52a3bcbeaL,
13498         0xee74c82b9d6ae5c6L },
13499       { 0x0927d05ebaf28ee6L,0x82cecf2c9d719028L,0x0b0d353eddb30289L,
13500         0xfe4bb977fddb2e29L } },
13501     /* 14 << 56 */
13502     { { 0xbb5bb990640bfd9eL,0xd226e27782f62108L,0x4bf0098502ffdd56L,
13503         0x7756758a2ca1b1b5L },
13504       { 0xc32b62a35285fe91L,0xedbc546a8c9cd140L,0x1e47a013af5cb008L,
13505         0xbca7e720073ce8f2L } },
13506     /* 15 << 56 */
13507     { { 0xe10b2ab817a91caeL,0xb89aab6508e27f63L,0x7b3074a7dba3ddf9L,
13508         0x1c20ce09330c2972L },
13509       { 0x6b9917b45fcf7e33L,0xe6793743945ceb42L,0x18fc22155c633d19L,
13510         0xad1adb3cc7485474L } },
13511     /* 16 << 56 */
13512     { { 0x646f96796424c49bL,0xf888dfe867c241c9L,0xe12d4b9324f68b49L,
13513         0x9a6b62d8a571df20L },
13514       { 0x81b4b26d179483cbL,0x666f96329511fae2L,0xd281b3e4d53aa51fL,
13515         0x7f96a7657f3dbd16L } },
13516     /* 17 << 56 */
13517     { { 0xa7f8b5bf074a30ceL,0xd7f52107005a32e6L,0x6f9e090750237ed4L,
13518         0x2f21da478096fa2bL },
13519       { 0xf3e19cb4eec863a0L,0xd18f77fd9527620aL,0x9505c81c407c1cf8L,
13520         0x9998db4e1b6ec284L } },
13521     /* 18 << 56 */
13522     { { 0x7e3389e5c247d44dL,0x125071413f4f3d80L,0xd4ba01104a78a6c7L,
13523         0x312874a0767720beL },
13524       { 0xded059a675944370L,0xd6123d903b2c0bddL,0xa56b717b51c108e3L,
13525         0x9bb7940e070623e9L } },
13526     /* 19 << 56 */
13527     { { 0x794e2d5984ac066cL,0xf5954a92e68c69a0L,0x28c524584fd99dccL,
13528         0x60e639fcb1012517L },
13529       { 0xc2e601257de79248L,0xe9ef6404f12fc6d7L,0x4c4f28082a3b5d32L,
13530         0x865ad32ec768eb8aL } },
13531     /* 20 << 56 */
13532     { { 0xac02331b13fb70b6L,0x037b44c195599b27L,0x1a860fc460bd082cL,
13533         0xa2e25745c980cd01L },
13534       { 0xee3387a81da0263eL,0x931bfb952d10f3d6L,0x5b687270a1f24a32L,
13535         0xf140e65dca494b86L } },
13536     /* 21 << 56 */
13537     { { 0x4f4ddf91b2f1ac7aL,0xf99eaabb760fee27L,0x57f4008a49c228e5L,
13538         0x090be4401cf713bbL },
13539       { 0xac91fbe45004f022L,0xd838c2c2569e1af6L,0xd6c7d20b0f1daaa5L,
13540         0xaa063ac11bbb02c0L } },
13541     /* 22 << 56 */
13542     { { 0x0938a42259558a78L,0x5343c6698435da2fL,0x96f67b18034410dcL,
13543         0x7cc1e42484510804L },
13544       { 0x86a1543f16dfbb7dL,0x921fa9425b5bd592L,0x9dcccb6eb33dd03cL,
13545         0x8581ddd9b843f51eL } },
13546     /* 23 << 56 */
13547     { { 0x54935fcb81d73c9eL,0x6d07e9790a5e97abL,0x4dc7b30acf3a6babL,
13548         0x147ab1f3170bee11L },
13549       { 0x0aaf8e3d9fafdee4L,0xfab3dbcb538a8b95L,0x405df4b36ef13871L,
13550         0xf1f4e9cb088d5a49L } },
13551     /* 24 << 56 */
13552     { { 0x9bcd24d366b33f1dL,0x3b97b8205ce445c0L,0xe2926549ba93ff61L,
13553         0xd9c341ce4dafe616L },
13554       { 0xfb30a76e16efb6f3L,0xdf24b8ca605b953cL,0x8bd52afec2fffb9fL,
13555         0xbbac5ff7e19d0b96L } },
13556     /* 25 << 56 */
13557     { { 0x43c01b87459afccdL,0x6bd45143b7432652L,0x8473453055b5d78eL,
13558         0x81088fdb1554ba7dL },
13559       { 0xada0a52c1e269375L,0xf9f037c42dc5ec10L,0xc066060794bfbc11L,
13560         0xc0a630bbc9c40d2fL } },
13561     /* 26 << 56 */
13562     { { 0x5efc797eab64c31eL,0xffdb1dab74507144L,0xf61242871ca6790cL,
13563         0xe9609d81e69bf1bfL },
13564       { 0xdb89859500d24fc9L,0x9c750333e51fb417L,0x51830a91fef7bbdeL,
13565         0x0ce67dc8945f585cL } },
13566     /* 27 << 56 */
13567     { { 0x9a730ed44763eb50L,0x24a0e221c1ab0d66L,0x643b6393648748f3L,
13568         0x1982daa16d3c6291L },
13569       { 0x6f00a9f78bbc5549L,0x7a1783e17f36384eL,0xe8346323de977f50L,
13570         0x91ab688db245502aL } },
13571     /* 28 << 56 */
13572     { { 0x331ab6b56d0bdd66L,0x0a6ef32e64b71229L,0x1028150efe7c352fL,
13573         0x27e04350ce7b39d3L },
13574       { 0x2a3c8acdc1070c82L,0xfb2034d380c9feefL,0x2d729621709f3729L,
13575         0x8df290bf62cb4549L } },
13576     /* 29 << 56 */
13577     { { 0x02f99f33fc2e4326L,0x3b30076d5eddf032L,0xbb21f8cf0c652fb5L,
13578         0x314fb49eed91cf7bL },
13579       { 0xa013eca52f700750L,0x2b9e3c23712a4575L,0xe5355557af30fbb0L,
13580         0x1ada35167c77e771L } },
13581     /* 30 << 56 */
13582     { { 0x45f6ecb27b135670L,0xe85d19df7cfc202eL,0x0f1b50c758d1be9fL,
13583         0x5ebf2c0aead2e344L },
13584       { 0x1531fe4eabc199c9L,0xc703259256bab0aeL,0x16ab2e486c1fec54L,
13585         0x0f87fda804280188L } },
13586     /* 31 << 56 */
13587     { { 0xdc9f46fc609e4a74L,0x2a44a143ba667f91L,0xbc3d8b95b4d83436L,
13588         0xa01e4bd0c7bd2958L },
13589       { 0x7b18293273483c90L,0xa79c6aa1a7c7b598L,0xbf3983c6eaaac07eL,
13590         0x8f18181e96e0d4e6L } },
13591     /* 32 << 56 */
13592     { { 0x8553d37c051af62bL,0xe9a998eb0bf94496L,0xe0844f9fb0d59aa1L,
13593         0x983fd558e6afb813L },
13594       { 0x9670c0ca65d69804L,0x732b22de6ea5ff2dL,0xd7640ba95fd8623bL,
13595         0x9f619163a6351782L } },
13596     /* 33 << 56 */
13597     { { 0x0bfc27eeacee5043L,0xae419e732eb10f02L,0x19c028d18943fb05L,
13598         0x71f01cf7ff13aa2aL },
13599       { 0x7790737e8887a132L,0x6751330966318410L,0x9819e8a37ddb795eL,
13600         0xfecb8ef5dad100b2L } },
13601     /* 34 << 56 */
13602     { { 0x59f74a223021926aL,0xb7c28a496f9b4c1cL,0xed1a733f912ad0abL,
13603         0x42a910af01a5659cL },
13604       { 0x3842c6e07bd68cabL,0x2b57fa3876d70ac8L,0x8a6707a83c53aaebL,
13605         0x62c1c51065b4db18L } },
13606     /* 35 << 56 */
13607     { { 0x8de2c1fbb2d09dc7L,0xc3dfed12266bd23bL,0x927d039bd5b27db6L,
13608         0x2fb2f0f1103243daL },
13609       { 0xf855a07b80be7399L,0xed9327ce1f9f27a8L,0xa0bd99c7729bdef7L,
13610         0x2b67125e28250d88L } },
13611     /* 36 << 56 */
13612     { { 0x784b26e88670ced7L,0xe3dfe41fc31bd3b4L,0x9e353a06bcc85cbcL,
13613         0x302e290960178a9dL },
13614       { 0x860abf11a6eac16eL,0x76447000aa2b3aacL,0x46ff9d19850afdabL,
13615         0x35bdd6a5fdb2d4c1L } },
13616     /* 37 << 56 */
13617     { { 0xe82594b07e5c9ce9L,0x0f379e5320af346eL,0x608b31e3bc65ad4aL,
13618         0x710c6b12267c4826L },
13619       { 0x51c966f971954cf1L,0xb1cec7930d0aa215L,0x1f15598986bd23a8L,
13620         0xae2ff99cf9452e86L } },
13621     /* 38 << 56 */
13622     { { 0xd8dd953c340ceaa2L,0x263552752e2e9333L,0x15d4e5f98586f06dL,
13623         0xd6bf94a8f7cab546L },
13624       { 0x33c59a0ab76a9af0L,0x52740ab3ba095af7L,0xc444de8a24389ca0L,
13625         0xcc6f9863706da0cbL } },
13626     /* 39 << 56 */
13627     { { 0xb5a741a76b2515cfL,0x71c416019585c749L,0x78350d4fe683de97L,
13628         0x31d6152463d0b5f5L },
13629       { 0x7a0cc5e1fbce090bL,0xaac927edfbcb2a5bL,0xe920de4920d84c35L,
13630         0x8c06a0b622b4de26L } },
13631     /* 40 << 56 */
13632     { { 0xd34dd58bafe7ddf3L,0x55851fedc1e6e55bL,0xd1395616960696e7L,
13633         0x940304b25f22705fL },
13634       { 0x6f43f861b0a2a860L,0xcf1212820e7cc981L,0x121862120ab64a96L,
13635         0x09215b9ab789383cL } },
13636     /* 41 << 56 */
13637     { { 0x311eb30537387c09L,0xc5832fcef03ee760L,0x30358f5832f7ea19L,
13638         0xe01d3c3491d53551L },
13639       { 0x1ca5ee41da48ea80L,0x34e71e8ecf4fa4c1L,0x312abd257af1e1c7L,
13640         0xe3afcdeb2153f4a5L } },
13641     /* 42 << 56 */
13642     { { 0x9d5c84d700235e9aL,0x0308d3f48c4c836fL,0xc0a66b0489332de5L,
13643         0x610dd39989e566efL },
13644       { 0xf8eea460d1ac1635L,0x84cbb3fb20a2c0dfL,0x40afb488e74a48c5L,
13645         0x29738198d326b150L } },
13646     /* 43 << 56 */
13647     { { 0x2a17747fa6d74081L,0x60ea4c0555a26214L,0x53514bb41f88c5feL,
13648         0xedd645677e83426cL },
13649       { 0xd5d6cbec96460b25L,0xa12fd0ce68dc115eL,0xc5bc3ed2697840eaL,
13650         0x969876a8a6331e31L } },
13651     /* 44 << 56 */
13652     { { 0x60c36217472ff580L,0xf42297054ad41393L,0x4bd99ef0a03b8b92L,
13653         0x501c7317c144f4f6L },
13654       { 0x159009b318464945L,0x6d5e594c74c5c6beL,0x2d587011321a3660L,
13655         0xd1e184b13898d022L } },
13656     /* 45 << 56 */
13657     { { 0x5ba047524c6a7e04L,0x47fa1e2b45550b65L,0x9419daf048c0a9a5L,
13658         0x663629537c243236L },
13659       { 0xcd0744b15cb12a88L,0x561b6f9a2b646188L,0x599415a566c2c0c0L,
13660         0xbe3f08590f83f09aL } },
13661     /* 46 << 56 */
13662     { { 0x9141c5beb92041b8L,0x01ae38c726477d0dL,0xca8b71f3d12c7a94L,
13663         0xfab5b31f765c70dbL },
13664       { 0x76ae7492487443e9L,0x8595a310990d1349L,0xf8dbeda87d460a37L,
13665         0x7f7ad0821e45a38fL } },
13666     /* 47 << 56 */
13667     { { 0xed1d4db61059705aL,0xa3dd492ae6b9c697L,0x4b92ee3a6eb38bd5L,
13668         0xbab2609d67cc0bb7L },
13669       { 0x7fc4fe896e70ee82L,0xeff2c56e13e6b7e3L,0x9b18959e34d26fcaL,
13670         0x2517ab66889d6b45L } },
13671     /* 48 << 56 */
13672     { { 0xf167b4e0bdefdd4fL,0x69958465f366e401L,0x5aa368aba73bbec0L,
13673         0x121487097b240c21L },
13674       { 0x378c323318969006L,0xcb4d73cee1fe53d1L,0x5f50a80e130c4361L,
13675         0xd67f59517ef5212bL } },
13676     /* 49 << 56 */
13677     { { 0xf145e21e9e70c72eL,0xb2e52e295566d2fbL,0x44eaba4a032397f5L,
13678         0x5e56937b7e31a7deL },
13679       { 0x68dcf517456c61e1L,0xbc2e954aa8b0a388L,0xe3552fa760a8b755L,
13680         0x03442dae73ad0cdeL } },
13681     /* 50 << 56 */
13682     { { 0x37ffe747ceb26210L,0x983545e8787baef9L,0x8b8c853586a3de31L,
13683         0xc621dbcbfacd46dbL },
13684       { 0x82e442e959266fbbL,0xa3514c37339d471cL,0x3a11b77162cdad96L,
13685         0xf0cb3b3cecf9bdf0L } },
13686     /* 51 << 56 */
13687     { { 0x3fcbdbce478e2135L,0x7547b5cfbda35342L,0xa97e81f18a677af6L,
13688         0xc8c2bf8328817987L },
13689       { 0xdf07eaaf45580985L,0xc68d1f05c93b45cbL,0x106aa2fec77b4cacL,
13690         0x4c1d8afc04a7ae86L } },
13691     /* 52 << 56 */
13692     { { 0xdb41c3fd9eb45ab2L,0x5b234b5bd4b22e74L,0xda253decf215958aL,
13693         0x67e0606ea04edfa0L },
13694       { 0xabbbf070ef751b11L,0xf352f175f6f06dceL,0xdfc4b6af6839f6b4L,
13695         0x53ddf9a89959848eL } },
13696     /* 53 << 56 */
13697     { { 0xda49c379c21520b0L,0x90864ff0dbd5d1b6L,0x2f055d235f49c7f7L,
13698         0xe51e4e6aa796b2d8L },
13699       { 0xc361a67f5c9dc340L,0x5ad53c37bca7c620L,0xda1d658832c756d0L,
13700         0xad60d9118bb67e13L } },
13701     /* 54 << 56 */
13702     { { 0xd6c47bdf0eeec8c6L,0x4a27fec1078a1821L,0x081f7415c3099524L,
13703         0x8effdf0b82cd8060L },
13704       { 0xdb70ec1c65842df8L,0x8821b358d319a901L,0x72ee56eede42b529L,
13705         0x5bb39592236e4286L } },
13706     /* 55 << 56 */
13707     { { 0xd1183316fd6f7140L,0xf9fadb5bbd8e81f7L,0x701d5e0c5a02d962L,
13708         0xfdee4dbf1b601324L },
13709       { 0xbed1740735d7620eL,0x04e3c2c3f48c0012L,0x9ee29da73455449aL,
13710         0x562cdef491a836c4L } },
13711     /* 56 << 56 */
13712     { { 0x8f682a5f47701097L,0x617125d8ff88d0c2L,0x948fda2457bb86ddL,
13713         0x348abb8f289f7286L },
13714       { 0xeb10eab599d94bbdL,0xd51ba28e4684d160L,0xabe0e51c30c8f41aL,
13715         0x66588b4513254f4aL } },
13716     /* 57 << 56 */
13717     { { 0x147ebf01fad097a5L,0x49883ea8610e815dL,0xe44d60ba8a11de56L,
13718         0xa970de6e827a7a6dL },
13719       { 0x2be414245e17fc19L,0xd833c65701214057L,0x1375813b363e723fL,
13720         0x6820bb88e6a52e9bL } },
13721     /* 58 << 56 */
13722     { { 0x7e7f6970d875d56aL,0xd6a0a9ac51fbf6bfL,0x54ba8790a3083c12L,
13723         0xebaeb23d6ae7eb64L },
13724       { 0xa8685c3ab99a907aL,0xf1e74550026bf40bL,0x7b73a027c802cd9eL,
13725         0x9a8a927c4fef4635L } },
13726     /* 59 << 56 */
13727     { { 0xe1b6f60c08191224L,0xc4126ebbde4ec091L,0xe1dff4dc4ae38d84L,
13728         0xde3f57db4f2ef985L },
13729       { 0x34964337d446a1ddL,0x7bf217a0859e77f6L,0x8ff105278e1d13f5L,
13730         0xa304ef0374eeae27L } },
13731     /* 60 << 56 */
13732     { { 0xfc6f5e47d19dfa5aL,0xdb007de37fad982bL,0x28205ad1613715f5L,
13733         0x251e67297889529eL },
13734       { 0x727051841ae98e78L,0xf818537d271cac32L,0xc8a15b7eb7f410f5L,
13735         0xc474356f81f62393L } },
13736     /* 61 << 56 */
13737     { { 0x92dbdc5ac242316bL,0xabe060acdbf4aff5L,0x6e8c38fe909a8ec6L,
13738         0x43e514e56116cb94L },
13739       { 0x2078fa3807d784f9L,0x1161a880f4b5b357L,0x5283ce7913adea3dL,
13740         0x0756c3e6cc6a910bL } },
13741     /* 62 << 56 */
13742     { { 0x60bcfe01aaa79697L,0x04a73b2956391db1L,0xdd8dad47189b45a0L,
13743         0xbfac0dd048d5b8d9L },
13744       { 0x34ab3af57d3d2ec2L,0x6fa2fc2d207bd3afL,0x9ff4009266550dedL,
13745         0x719b3e871fd5b913L } },
13746     /* 63 << 56 */
13747     { { 0xa573a4966d17fbc7L,0x0cd1a70a73d2b24eL,0x34e2c5cab2676937L,
13748         0xe7050b06bf669f21L },
13749       { 0xfbe948b61ede9046L,0xa053005197662659L,0x58cbd4edf10124c5L,
13750         0xde2646e4dd6c06c8L } },
13751     /* 64 << 56 */
13752     { { 0x332f81088cad38c0L,0x471b7e906bd68ae2L,0x56ac3fb20d8e27a3L,
13753         0xb54660db136b4b0dL },
13754       { 0x123a1e11a6fd8de4L,0x44dbffeaa37799efL,0x4540b977ce6ac17cL,
13755         0x495173a8af60acefL } },
13756     /* 0 << 63 */
13757     { { 0x00, 0x00, 0x00, 0x00 },
13758       { 0x00, 0x00, 0x00, 0x00 } },
13759     /* 1 << 63 */
13760     { { 0x9ebb284d391c2a82L,0xbcdd4863158308e8L,0x006f16ec83f1edcaL,
13761         0xa13e2c37695dc6c8L },
13762       { 0x2ab756f04a057a87L,0xa8765500a6b48f98L,0x4252face68651c44L,
13763         0xa52b540be1765e02L } },
13764     /* 2 << 63 */
13765     { { 0x4f922fc516a0d2bbL,0x0d5cc16c1a623499L,0x9241cf3a57c62c8bL,
13766         0x2f5e6961fd1b667fL },
13767       { 0x5c15c70bf5a01797L,0x3d20b44d60956192L,0x04911b37071fdb52L,
13768         0xf648f9168d6f0f7bL } },
13769     /* 3 << 63 */
13770     { { 0x6dc1acafe60b7cf7L,0x25860a5084a9d869L,0x56fc6f09e7ba8ac4L,
13771         0x828c5bd06148d29eL },
13772       { 0xac6b435edc55ae5fL,0xa527f56cc0117411L,0x94d5045efd24342cL,
13773         0x2c4c0a3570b67c0dL } },
13774     /* 4 << 63 */
13775     { { 0x027cc8b8fac61d9aL,0x7d25e062e3c6fe8aL,0xe08805bfe5bff503L,
13776         0x13271e6c6ff632f7L },
13777       { 0x55dca6c0232f76a5L,0x8957c32d701ef426L,0xee728bcba10a5178L,
13778         0x5ea60411b62c5173L } },
13779     /* 5 << 63 */
13780     { { 0xfc4e964ed0b8892bL,0x9ea176839301bb74L,0x6265c5aefcc48626L,
13781         0xe60cf82ebb3e9102L },
13782       { 0x57adf797d4df5531L,0x235b59a18deeefe2L,0x60adcf583f306eb1L,
13783         0x105c27533d09492dL } },
13784     /* 6 << 63 */
13785     { { 0x4090914bb5def996L,0x1cb69c83233dd1e7L,0xc1e9c1d39b3d5e76L,
13786         0x1f3338edfccf6012L },
13787       { 0xb1e95d0d2f5378a8L,0xacf4c2c72f00cd21L,0x6e984240eb5fe290L,
13788         0xd66c038d248088aeL } },
13789     /* 7 << 63 */
13790     { { 0x804d264af94d70cfL,0xbdb802ef7314bf7eL,0x8fb54de24333ed02L,
13791         0x740461e0285635d9L },
13792       { 0x4113b2c8365e9383L,0xea762c833fdef652L,0x4eec6e2e47b956c1L,
13793         0xa3d814be65620fa4L } },
13794     /* 8 << 63 */
13795     { { 0x9ad5462bb4d8bc50L,0x181c0b16a9195770L,0xebd4fe1c78412a68L,
13796         0xae0341bcc0dff48cL },
13797       { 0xb6bc45cf7003e866L,0xf11a6dea8a24a41bL,0x5407151ad04c24c2L,
13798         0x62c9d27dda5b7b68L } },
13799     /* 9 << 63 */
13800     { { 0x2e96423588cceff6L,0x8594c54f8b07ed69L,0x1578e73cc84d0d0dL,
13801         0x7b4e1055ff532868L },
13802       { 0xa348c0d5b5ec995aL,0xbf4b9d5514289a54L,0x9ba155a658fbd777L,
13803         0x186ed7a81a84491dL } },
13804     /* 10 << 63 */
13805     { { 0xd4992b30614c0900L,0xda98d121bd00c24bL,0x7f534dc87ec4bfa1L,
13806         0x4a5ff67437dc34bcL },
13807       { 0x68c196b81d7ea1d7L,0x38cf289380a6d208L,0xfd56cd09e3cbbd6eL,
13808         0xec72e27e4205a5b6L } },
13809     /* 11 << 63 */
13810     { { 0x15ea68f5a44f77f7L,0x7aa5f9fdb43c52bcL,0x86ff676f94f0e609L,
13811         0xa4cde9632e2d432bL },
13812       { 0x8cafa0c0eee470afL,0x84137d0e8a3f5ec8L,0xebb40411faa31231L,
13813         0xa239c13f6f7f7ccfL } },
13814     /* 12 << 63 */
13815     { { 0x32865719a8afd30bL,0x867983288a826dceL,0xdf04e891c4a8fbe0L,
13816         0xbb6b6e1bebf56ad3L },
13817       { 0x0a695b11471f1ff0L,0xd76c3389be15baf0L,0x018edb95be96c43eL,
13818         0xf2beaaf490794158L } },
13819     /* 13 << 63 */
13820     { { 0x152db09ec3076a27L,0x5e82908ee416545dL,0xa2c41272356d6f2eL,
13821         0xdc9c964231fd74e1L },
13822       { 0x66ceb88d519bf615L,0xe29ecd7605a2274eL,0x3a0473c4bf5e2fa0L,
13823         0x6b6eb67164284e67L } },
13824     /* 14 << 63 */
13825     { { 0xe8b97932b88756ddL,0xed4e8652f17e3e61L,0xc2dd14993ee1c4a4L,
13826         0xc0aaee17597f8c0eL },
13827       { 0x15c4edb96c168af3L,0x6563c7bfb39ae875L,0xadfadb6f20adb436L,
13828         0xad55e8c99a042ac0L } },
13829     /* 15 << 63 */
13830     { { 0x975a1ed8b76da1f5L,0x10dfa466a58acb94L,0x8dd7f7e3ac060282L,
13831         0x6813e66a572a051eL },
13832       { 0xb4ccae1e350cb901L,0xb653d65650cb7822L,0x42484710dfab3b87L,
13833         0xcd7ee5379b670fd0L } },
13834     /* 16 << 63 */
13835     { { 0x0a50b12e523b8bf6L,0x8009eb5b8f910c1bL,0xf535af824a167588L,
13836         0x0f835f9cfb2a2abdL },
13837       { 0xf59b29312afceb62L,0xc797df2a169d383fL,0xeb3f5fb066ac02b0L,
13838         0x029d4c6fdaa2d0caL } },
13839     /* 17 << 63 */
13840     { { 0xd4059bc1afab4bc5L,0x833f5c6f56783247L,0xb53466308d2d3605L,
13841         0x83387891d34d8433L },
13842       { 0xd973b30fadd9419aL,0xbcca1099afe3fce8L,0x081783150809aac6L,
13843         0x01b7f21a540f0f11L } },
13844     /* 18 << 63 */
13845     { { 0x65c29219909523c8L,0xa62f648fa3a1c741L,0x88598d4f60c9e55aL,
13846         0xbce9141b0e4f347aL },
13847       { 0x9af97d8435f9b988L,0x0210da62320475b6L,0x3c076e229191476cL,
13848         0x7520dbd944fc7834L } },
13849     /* 19 << 63 */
13850     { { 0x6a6b2cfec1ab1bbdL,0xef8a65bedc650938L,0x72855540805d7bc4L,
13851         0xda389396ed11fdfdL },
13852       { 0xa9d5bd3674660876L,0x11d67c54b45dff35L,0x6af7d148a4f5da94L,
13853         0xbb8d4c3fc0bbeb31L } },
13854     /* 20 << 63 */
13855     { { 0x87a7ebd1e0a1b12aL,0x1e4ef88d770ba95fL,0x8c33345cdc2ae9cbL,
13856         0xcecf127601cc8403L },
13857       { 0x687c012e1b39b80fL,0xfd90d0ad35c33ba4L,0xa3ef5a675c9661c2L,
13858         0x368fc88ee017429eL } },
13859     /* 21 << 63 */
13860     { { 0xd30c6761196a2fa2L,0x931b9817bd5b312eL,0xba01000c72f54a31L,
13861         0xa203d2c866eaa541L },
13862       { 0xf2abdee098939db3L,0xe37d6c2c3e606c02L,0xf2921574521ff643L,
13863         0x2781b3c4d7e2fca3L } },
13864     /* 22 << 63 */
13865     { { 0x664300b07850ec06L,0xac5a38b97d3a10cfL,0x9233188de34ab39dL,
13866         0xe77057e45072cbb9L },
13867       { 0xbcf0c042b59e78dfL,0x4cfc91e81d97de52L,0x4661a26c3ee0ca4aL,
13868         0x5620a4c1fb8507bcL } },
13869     /* 23 << 63 */
13870     { { 0x4b44d4aa049f842cL,0xceabc5d51540e82bL,0x306710fd15c6f156L,
13871         0xbe5ae52b63db1d72L },
13872       { 0x06f1e7e6334957f1L,0x57e388f031144a70L,0xfb69bb2fdf96447bL,
13873         0x0f78ebd373e38a12L } },
13874     /* 24 << 63 */
13875     { { 0xb82226052b7ce542L,0xe6d4ce997472bde1L,0x53e16ebe09d2f4daL,
13876         0x180ff42e53b92b2eL },
13877       { 0xc59bcc022c34a1c6L,0x3803d6f9422c46c2L,0x18aff74f5c14a8a2L,
13878         0x55aebf8010a08b28L } },
13879     /* 25 << 63 */
13880     { { 0x66097d587135593fL,0x32e6eff72be570cdL,0x584e6a102a8c860dL,
13881         0xcd185890a2eb4163L },
13882       { 0x7ceae99d6d97e134L,0xd42c6b70dd8447ceL,0x59ddbb4ab8c50273L,
13883         0x03c612df3cf34e1eL } },
13884     /* 26 << 63 */
13885     { { 0x84b9ca1504b6c5a0L,0x35216f3918f0e3a3L,0x3ec2d2bcbd986c00L,
13886         0x8bf546d9d19228feL },
13887       { 0xd1c655a44cd623c3L,0x366ce718502b8e5aL,0x2cfc84b4eea0bfe7L,
13888         0xe01d5ceecf443e8eL } },
13889     /* 27 << 63 */
13890     { { 0x8ec045d9036520f8L,0xdfb3c3d192d40e98L,0x0bac4ccecc559a04L,
13891         0x35eccae5240ea6b1L },
13892       { 0x180b32dbf8a5a0acL,0x547972a5eb699700L,0xa3765801ca26bca0L,
13893         0x57e09d0ea647f25aL } },
13894     /* 28 << 63 */
13895     { { 0xb956970e2fdd23ccL,0xb80288bc5682e971L,0xe6e6d91e9ae86ebcL,
13896         0x0564c83f8c9f1939L },
13897       { 0x551932a239560368L,0xe893752b049c28e2L,0x0b03cee5a6a158c3L,
13898         0xe12d656b04964263L } },
13899     /* 29 << 63 */
13900     { { 0x4b47554e63e3bc1dL,0xc719b6a245044ff7L,0x4f24d30ae48daa07L,
13901         0xa3f37556c8c1edc3L },
13902       { 0x9a47bf760700d360L,0xbb1a1824822ae4e2L,0x22e275a389f1fb4cL,
13903         0x72b1aa239968c5f5L } },
13904     /* 30 << 63 */
13905     { { 0xa75feacabe063f64L,0x9b392f43bce47a09L,0xd42415091ad07acaL,
13906         0x4b0c591b8d26cd0fL },
13907       { 0x2d42ddfd92f1169aL,0x63aeb1ac4cbf2392L,0x1de9e8770691a2afL,
13908         0xebe79af7d98021daL } },
13909     /* 31 << 63 */
13910     { { 0xcfdf2a4e40e50acfL,0xf0a98ad7af01d665L,0xefb640bf1831be1fL,
13911         0x6fe8bd2f80e9ada0L },
13912       { 0x94c103a16cafbc91L,0x170f87598308e08cL,0x5de2d2ab9780ff4fL,
13913         0x666466bc45b201f2L } },
13914     /* 32 << 63 */
13915     { { 0x58af2010f5b343bcL,0x0f2e400af2f142feL,0x3483bfdea85f4bdfL,
13916         0xf0b1d09303bfeaa9L },
13917       { 0x2ea01b95c7081603L,0xe943e4c93dba1097L,0x47be92adb438f3a6L,
13918         0x00bb7742e5bf6636L } },
13919     /* 33 << 63 */
13920     { { 0x136b7083824297b4L,0x9d0e55805584455fL,0xab48cedcf1c7d69eL,
13921         0x53a9e4812a256e76L },
13922       { 0x0402b0e065eb2413L,0xdadbbb848fc407a7L,0xa65cd5a48d7f5492L,
13923         0x21d4429374bae294L } },
13924     /* 34 << 63 */
13925     { { 0x66917ce63b5f1cc4L,0x37ae52eace872e62L,0xbb087b722905f244L,
13926         0x120770861e6af74fL },
13927       { 0x4b644e491058edeaL,0x827510e3b638ca1dL,0x8cf2b7046038591cL,
13928         0xffc8b47afe635063L } },
13929     /* 35 << 63 */
13930     { { 0x3ae220e61b4d5e63L,0xbd8647429d961b4bL,0x610c107e9bd16bedL,
13931         0x4270352a1127147bL },
13932       { 0x7d17ffe664cfc50eL,0x50dee01a1e36cb42L,0x068a762235dc5f9aL,
13933         0x9a08d536df53f62cL } },
13934     /* 36 << 63 */
13935     { { 0x4ed714576be5f7deL,0xd93006f8c2263c9eL,0xe073694ccacacb36L,
13936         0x2ff7a5b43ae118abL },
13937       { 0x3cce53f1cd871236L,0xf156a39dc2aa6d52L,0x9cc5f271b198d76dL,
13938         0xbc615b6f81383d39L } },
13939     /* 37 << 63 */
13940     { { 0xa54538e8de3eee6bL,0x58c77538ab910d91L,0x31e5bdbc58d278bdL,
13941         0x3cde4adfb963acaeL },
13942       { 0xb1881fd25302169cL,0x8ca60fa0a989ed8bL,0xa1999458ff96a0eeL,
13943         0xc1141f03ac6c283dL } },
13944     /* 38 << 63 */
13945     { { 0x7677408d6dfafed3L,0x33a0165339661588L,0x3c9c15ec0b726fa0L,
13946         0x090cfd936c9b56daL },
13947       { 0xe34f4baea3c40af5L,0x3469eadbd21129f1L,0xcc51674a1e207ce8L,
13948         0x1e293b24c83b1ef9L } },
13949     /* 39 << 63 */
13950     { { 0x17173d131e6c0bb4L,0x1900469590776d35L,0xe7980e346de6f922L,
13951         0x873554cbf4dd9a22L },
13952       { 0x0316c627cbf18a51L,0x4d93651b3032c081L,0x207f27713946834dL,
13953         0x2c08d7b430cdbf80L } },
13954     /* 40 << 63 */
13955     { { 0x137a4fb486df2a61L,0xa1ed9c07ecf7b4a2L,0xb2e460e27bd042ffL,
13956         0xb7f5e2fa5f62f5ecL },
13957       { 0x7aa6ec6bcc2423b7L,0x75ce0a7fba63eea7L,0x67a45fb1f250a6e1L,
13958         0x93bc919ce53cdc9fL } },
13959     /* 41 << 63 */
13960     { { 0x9271f56f871942dfL,0x2372ff6f7859ad66L,0x5f4c2b9633cb1a78L,
13961         0xe3e291015838aa83L },
13962       { 0xa7ed1611e4e8110cL,0x2a2d70d5330198ceL,0xbdf132e86720efe0L,
13963         0xe61a896266a471bfL } },
13964     /* 42 << 63 */
13965     { { 0x796d3a85825808bdL,0x51dc3cb73fd6e902L,0x643c768a916219d1L,
13966         0x36cd7685a2ad7d32L },
13967       { 0xe3db9d05b22922a4L,0x6494c87edba29660L,0xf0ac91dfbcd2ebc7L,
13968         0x4deb57a045107f8dL } },
13969     /* 43 << 63 */
13970     { { 0x42271f59c3d12a73L,0x5f71687ca5c2c51dL,0xcb1f50c605797bcbL,
13971         0x29ed0ed9d6d34eb0L },
13972       { 0xe5fe5b474683c2ebL,0x4956eeb597447c46L,0x5b163a4371207167L,
13973         0x93fa2fed0248c5efL } },
13974     /* 44 << 63 */
13975     { { 0x67930af231f63950L,0xa77797c114caa2c9L,0x526e80ee27ac7e62L,
13976         0xe1e6e62658b28aecL },
13977       { 0x636178b0b3c9fef0L,0xaf7752e06d5f90beL,0x94ecaf18eece51cfL,
13978         0x2864d0edca806e1fL } },
13979     /* 45 << 63 */
13980     { { 0x6de2e38397c69134L,0x5a42c316eb291293L,0xc77792196a60bae0L,
13981         0xa24de3466b7599d1L },
13982       { 0x49d374aab75d4941L,0x989005862d501ff0L,0x9f16d40eeb7974cfL,
13983         0x1033860bcdd8c115L } },
13984     /* 46 << 63 */
13985     { { 0xb6c69ac82094cec3L,0x9976fb88403b770cL,0x1dea026c4859590dL,
13986         0xb6acbb468562d1fdL },
13987       { 0x7cd6c46144569d85L,0xc3190a3697f0891dL,0xc6f5319548d5a17dL,
13988         0x7d919966d749abc8L } },
13989     /* 47 << 63 */
13990     { { 0x65104837dd1c8a20L,0x7e5410c82f683419L,0x958c3ca8be94022eL,
13991         0x605c31976145dac2L },
13992       { 0x3fc0750101683d54L,0x1d7127c5595b1234L,0x10b8f87c9481277fL,
13993         0x677db2a8e65a1adbL } },
13994     /* 48 << 63 */
13995     { { 0xec2fccaaddce3345L,0x2a6811b7012a4350L,0x96760ff1ac598bdcL,
13996         0x054d652ad1bf4128L },
13997       { 0x0a1151d492a21005L,0xad7f397133110fdfL,0x8c95928c1960100fL,
13998         0x6c91c8257bf03362L } },
13999     /* 49 << 63 */
14000     { { 0xc8c8b2a2ce309f06L,0xfdb27b59ca27204bL,0xd223eaa50848e32eL,
14001         0xb93e4b2ee7bfaf1eL },
14002       { 0xc5308ae644aa3dedL,0x317a666ac015d573L,0xc888ce231a979707L,
14003         0xf141c1e60d5c4958L } },
14004     /* 50 << 63 */
14005     { { 0xb53b7de561906373L,0x858dbadeeb999595L,0x8cbb47b2a59e5c36L,
14006         0x660318b3dcf4e842L },
14007       { 0xbd161ccd12ba4b7aL,0xf399daabf8c8282aL,0x1587633aeeb2130dL,
14008         0xa465311ada38dd7dL } },
14009     /* 51 << 63 */
14010     { { 0x5f75eec864d3779bL,0x3c5d0476ad64c171L,0x874103712a914428L,
14011         0x8096a89190e2fc29L },
14012       { 0xd3d2ae9d23b3ebc2L,0x90bdd6dba580cfd6L,0x52dbb7f3c5b01f6cL,
14013         0xe68eded4e102a2dcL } },
14014     /* 52 << 63 */
14015     { { 0x17785b7799eb6df0L,0x26c3cc517386b779L,0x345ed9886417a48eL,
14016         0xe990b4e407d6ef31L },
14017       { 0x0f456b7e2586abbaL,0x239ca6a559c96e9aL,0xe327459ce2eb4206L,
14018         0x3a4c3313a002b90aL } },
14019     /* 53 << 63 */
14020     { { 0x2a114806f6a3f6fbL,0xad5cad2f85c251ddL,0x92c1f613f5a784d3L,
14021         0xec7bfacf349766d5L },
14022       { 0x04b3cd333e23cb3bL,0x3979fe84c5a64b2dL,0x192e27207e589106L,
14023         0xa60c43d1a15b527fL } },
14024     /* 54 << 63 */
14025     { { 0x2dae9082be7cf3a6L,0xcc86ba92bc967274L,0xf28a2ce8aea0a8a9L,
14026         0x404ca6d96ee988b3L },
14027       { 0xfd7e9c5d005921b8L,0xf56297f144e79bf9L,0xa163b4600d75ddc2L,
14028         0x30b23616a1f2be87L } },
14029     /* 55 << 63 */
14030     { { 0x4b070d21bfe50e2bL,0x7ef8cfd0e1bfede1L,0xadba00112aac4ae0L,
14031         0x2a3e7d01b9ebd033L },
14032       { 0x995277ece38d9d1cL,0xb500249e9c5d2de3L,0x8912b820f13ca8c9L,
14033         0xc8798114877793afL } },
14034     /* 56 << 63 */
14035     { { 0x19e6125dec3f1decL,0x07b1f040911178daL,0xd93ededa904a6738L,
14036         0x55187a5a0bebedcdL },
14037       { 0xf7d04722eb329d41L,0xf449099ef170b391L,0xfd317a69ca99f828L,
14038         0x50c3db2b34a4976dL } },
14039     /* 57 << 63 */
14040     { { 0xe9ba77843757b392L,0x326caefdaa3ca05aL,0x78e5293bf1e593d4L,
14041         0x7842a9370d98fd13L },
14042       { 0xe694bf965f96b10dL,0x373a9df606a8cd05L,0x997d1e51e8f0c7fcL,
14043         0x1d01979063fd972eL } },
14044     /* 58 << 63 */
14045     { { 0x0064d8585499fb32L,0x7b67bad977a8aeb7L,0x1d3eb9772d08eec5L,
14046         0x5fc047a6cbabae1dL },
14047       { 0x0577d159e54a64bbL,0x8862201bc43497e4L,0xad6b4e282ce0608dL,
14048         0x8b687b7d0b167aacL } },
14049     /* 59 << 63 */
14050     { { 0x6ed4d3678b2ecfa9L,0x24dfe62da90c3c38L,0xa1862e103fe5c42bL,
14051         0x1ca73dcad5732a9fL },
14052       { 0x35f038b776bb87adL,0x674976abf242b81fL,0x4f2bde7eb0fd90cdL,
14053         0x6efc172ea7fdf092L } },
14054     /* 60 << 63 */
14055     { { 0x3806b69b92222f1fL,0x5a2459ca6cf7ae70L,0x6789f69ca85217eeL,
14056         0x5f232b5ee3dc85acL },
14057       { 0x660e3ec548e9e516L,0x124b4e473197eb31L,0x10a0cb13aafcca23L,
14058         0x7bd63ba48213224fL } },
14059     /* 61 << 63 */
14060     { { 0xaffad7cc290a7f4fL,0x6b409c9e0286b461L,0x58ab809fffa407afL,
14061         0xc3122eedc68ac073L },
14062       { 0x17bf9e504ef24d7eL,0x5d9297943e2a5811L,0x519bc86702902e01L,
14063         0x76bba5da39c8a851L } },
14064     /* 62 << 63 */
14065     { { 0xe9f9669cda94951eL,0x4b6af58d66b8d418L,0xfa32107417d426a4L,
14066         0xc78e66a99dde6027L },
14067       { 0x0516c0834a53b964L,0xfc659d38ff602330L,0x0ab55e5c58c5c897L,
14068         0x985099b2838bc5dfL } },
14069     /* 63 << 63 */
14070     { { 0x061d9efcc52fc238L,0x712b27286ac1da3fL,0xfb6581499283fe08L,
14071         0x4954ac94b8aaa2f7L },
14072       { 0x85c0ada47fb2e74fL,0xee8ba98eb89926b0L,0xe4f9d37d23d1af5bL,
14073         0x14ccdbf9ba9b015eL } },
14074     /* 64 << 63 */
14075     { { 0xb674481b7bfe7178L,0x4e1debae65405868L,0x061b2821c48c867dL,
14076         0x69c15b35513b30eaL },
14077       { 0x3b4a166636871088L,0xe5e29f5d1220b1ffL,0x4b82bb35233d9f4dL,
14078         0x4e07633318cdc675L } },
14079     /* 0 << 70 */
14080     { { 0x00, 0x00, 0x00, 0x00 },
14081       { 0x00, 0x00, 0x00, 0x00 } },
14082     /* 1 << 70 */
14083     { { 0x0d53f5c7a3e6fcedL,0xe8cbbdd5f45fbdebL,0xf85c01df13339a70L,
14084         0x0ff71880142ceb81L },
14085       { 0x4c4e8774bd70437aL,0x5fb32891ba0bda6aL,0x1cdbebd2f18bd26eL,
14086         0x2f9526f103a9d522L } },
14087     /* 2 << 70 */
14088     { { 0x40ce305192c4d684L,0x8b04d7257612efcdL,0xb9dcda366f9cae20L,
14089         0x0edc4d24f058856cL },
14090       { 0x64f2e6bf85427900L,0x3de81295dc09dfeaL,0xd41b4487379bf26cL,
14091         0x50b62c6d6df135a9L } },
14092     /* 3 << 70 */
14093     { { 0xd4f8e3b4c72dfe67L,0xc416b0f690e19fdfL,0x18b9098d4c13bd35L,
14094         0xac11118a15b8cb9eL },
14095       { 0xf598a318f0062841L,0xbfe0602f89f356f4L,0x7ae3637e30177a0cL,
14096         0x3409774761136537L } },
14097     /* 4 << 70 */
14098     { { 0x0db2fb5ed005832aL,0x5f5efd3b91042e4fL,0x8c4ffdc6ed70f8caL,
14099         0xe4645d0bb52da9ccL },
14100       { 0x9596f58bc9001d1fL,0x52c8f0bc4e117205L,0xfd4aa0d2e398a084L,
14101         0x815bfe3a104f49deL } },
14102     /* 5 << 70 */
14103     { { 0x97e5443f23885e5fL,0xf72f8f99e8433aabL,0xbd00b154e4d4e604L,
14104         0xd0b35e6ae5e173ffL },
14105       { 0x57b2a0489164722dL,0x3e3c665b88761ec8L,0x6bdd13973da83832L,
14106         0x3c8b1a1e73dafe3bL } },
14107     /* 6 << 70 */
14108     { { 0x4497ace654317cacL,0xbe600ab9521771b3L,0xb42e409eb0dfe8b8L,
14109         0x386a67d73942310fL },
14110       { 0x25548d8d4431cc28L,0xa7cff142985dc524L,0x4d60f5a193c4be32L,
14111         0x83ebd5c8d071c6e1L } },
14112     /* 7 << 70 */
14113     { { 0xba3a80a7b1fd2b0bL,0x9b3ad3965bec33e8L,0xb3868d6179743fb3L,
14114         0xcfd169fcfdb462faL },
14115       { 0xd3b499d79ce0a6afL,0x55dc1cf1e42d3ff8L,0x04fb9e6cc6c3e1b2L,
14116         0x47e6961d6f69a474L } },
14117     /* 8 << 70 */
14118     { { 0x54eb3acce548b37bL,0xb38e754284d40549L,0x8c3daa517b341b4fL,
14119         0x2f6928ec690bf7faL },
14120       { 0x0496b32386ce6c41L,0x01be1c5510adadcdL,0xc04e67e74bb5faf9L,
14121         0x3cbaf678e15c9985L } },
14122     /* 9 << 70 */
14123     { { 0x8cd1214550ca4247L,0xba1aa47ae7dd30aaL,0x2f81ddf1e58fee24L,
14124         0x03452936eec9b0e8L },
14125       { 0x8bdc3b81243aea96L,0x9a2919af15c3d0e5L,0x9ea640ec10948361L,
14126         0x5ac86d5b6e0bcccfL } },
14127     /* 10 << 70 */
14128     { { 0xf892d918c36cf440L,0xaed3e837c939719cL,0xb07b08d2c0218b64L,
14129         0x6f1bcbbace9790ddL },
14130       { 0x4a84d6ed60919b8eL,0xd89007918ac1f9ebL,0xf84941aa0dd5daefL,
14131         0xb22fe40a67fd62c5L } },
14132     /* 11 << 70 */
14133     { { 0x97e15ba2157f2db3L,0xbda2fc8f8e28ca9cL,0x5d050da437b9f454L,
14134         0x3d57eb572379d72eL },
14135       { 0xe9b5eba2fb5ee997L,0x01648ca2e11538caL,0x32bb76f6f6327974L,
14136         0x338f14b8ff3f4bb7L } },
14137     /* 12 << 70 */
14138     { { 0x524d226ad7ab9a2dL,0x9c00090d7dfae958L,0x0ba5f5398751d8c2L,
14139         0x8afcbcdd3ab8262dL },
14140       { 0x57392729e99d043bL,0xef51263baebc943aL,0x9feace9320862935L,
14141         0x639efc03b06c817bL } },
14142     /* 13 << 70 */
14143     { { 0x1fe054b366b4be7aL,0x3f25a9de84a37a1eL,0xf39ef1ad78d75cd9L,
14144         0xd7b58f495062c1b5L },
14145       { 0x6f74f9a9ff563436L,0xf718ff29e8af51e7L,0x5234d31315e97fecL,
14146         0xb6a8e2b1292f1c0aL } },
14147     /* 14 << 70 */
14148     { { 0xa7f53aa8327720c1L,0x956ca322ba092cc8L,0x8f03d64a28746c4dL,
14149         0x51fe178266d0d392L },
14150       { 0xd19b34db3c832c80L,0x60dccc5c6da2e3b4L,0x245dd62e0a104cccL,
14151         0xa7ab1de1620b21fdL } },
14152     /* 15 << 70 */
14153     { { 0xb293ae0b3893d123L,0xf7b75783b15ee71cL,0x5aa3c61442a9468bL,
14154         0xd686123cdb15d744L },
14155       { 0x8c616891a7ab4116L,0x6fcd72c8a4e6a459L,0xac21911077e5fad7L,
14156         0xfb6a20e7704fa46bL } },
14157     /* 16 << 70 */
14158     { { 0xe839be7d341d81dcL,0xcddb688932148379L,0xda6211a1f7026eadL,
14159         0xf3b2575ff4d1cc5eL },
14160       { 0x40cfc8f6a7a73ae6L,0x83879a5e61d5b483L,0xc5acb1ed41a50ebcL,
14161         0x59a60cc83c07d8faL } },
14162     /* 17 << 70 */
14163     { { 0x1b73bdceb1876262L,0x2b0d79f012af4ee9L,0x8bcf3b0bd46e1d07L,
14164         0x17d6af9de45d152fL },
14165       { 0x735204616d736451L,0x43cbbd9756b0bf5aL,0xb0833a5bd5999b9dL,
14166         0x702614f0eb72e398L } },
14167     /* 18 << 70 */
14168     { { 0x0aadf01a59c3e9f8L,0x40200e77ce6b3d16L,0xda22bdd3deddafadL,
14169         0x76dedaf4310d72e1L },
14170       { 0x49ef807c4bc2e88fL,0x6ba81291146dd5a5L,0xa1a4077a7d8d59e9L,
14171         0x87b6a2e7802db349L } },
14172     /* 19 << 70 */
14173     { { 0xd56799971b4e598eL,0xf499ef1f06fe4b1dL,0x3978d3aefcb267c5L,
14174         0xb582b557235786d0L },
14175       { 0x32b3b2ca1715cb07L,0x4c3de6a28480241dL,0x63b5ffedcb571ecdL,
14176         0xeaf53900ed2fe9a9L } },
14177     /* 20 << 70 */
14178     { { 0xdec98d4ac3b81990L,0x1cb837229e0cc8feL,0xfe0b0491d2b427b9L,
14179         0x0f2386ace983a66cL },
14180       { 0x930c4d1eb3291213L,0xa2f82b2e59a62ae4L,0x77233853f93e89e3L,
14181         0x7f8063ac11777c7fL } },
14182     /* 21 << 70 */
14183     { { 0xff0eb56759ad2877L,0x6f4546429865c754L,0xe6fe701a236e9a84L,
14184         0xc586ef1606e40fc3L },
14185       { 0x3f62b6e024bafad9L,0xc8b42bd264da906aL,0xc98e1eb4da3276a0L,
14186         0x30d0e5fc06cbf852L } },
14187     /* 22 << 70 */
14188     { { 0x1b6b2ae1e8b4dfd4L,0xd754d5c78301cbacL,0x66097629112a39acL,
14189         0xf86b599993ba4ab9L },
14190       { 0x26c9dea799f9d581L,0x0473b1a8c2fafeaaL,0x1469af553b2505a5L,
14191         0x227d16d7d6a43323L } },
14192     /* 23 << 70 */
14193     { { 0x3316f73cad3d97f9L,0x52bf3bb51f137455L,0x953eafeb09954e7cL,
14194         0xa721dfeddd732411L },
14195       { 0xb4929821141d4579L,0x3411321caa3bd435L,0xafb355aa17fa6015L,
14196         0xb4e7ef4a18e42f0eL } },
14197     /* 24 << 70 */
14198     { { 0x604ac97c59371000L,0xe1c48c707f759c18L,0x3f62ecc5a5db6b65L,
14199         0x0a78b17338a21495L },
14200       { 0x6be1819dbcc8ad94L,0x70dc04f6d89c3400L,0x462557b4a6b4840aL,
14201         0x544c6ade60bd21c0L } },
14202     /* 25 << 70 */
14203     { { 0x6a00f24e907a544bL,0xa7520dcb313da210L,0xfe939b7511e4994bL,
14204         0x918b6ba6bc275d70L },
14205       { 0xd3e5e0fc644be892L,0x707a9816fdaf6c42L,0x60145567f15c13feL,
14206         0x4818ebaae130a54aL } },
14207     /* 26 << 70 */
14208     { { 0x28aad3ad58d2f767L,0xdc5267fdd7e7c773L,0x4919cc88c3afcc98L,
14209         0xaa2e6ab02db8cd4bL },
14210       { 0xd46fec04d0c63eaaL,0xa1cb92c519ffa832L,0x678dd178e43a631fL,
14211         0xfb5ae1cd3dc788b3L } },
14212     /* 27 << 70 */
14213     { { 0x68b4fb906e77de04L,0x7992bcf0f06dbb97L,0x896e6a13c417c01dL,
14214         0x8d96332cb956be01L },
14215       { 0x902fc93a413aa2b9L,0x99a4d915fc98c8a5L,0x52c29407565f1137L,
14216         0x4072690f21e4f281L } },
14217     /* 28 << 70 */
14218     { { 0x36e607cf02ff6072L,0xa47d2ca98ad98cdcL,0xbf471d1ef5f56609L,
14219         0xbcf86623f264ada0L },
14220       { 0xb70c0687aa9e5cb6L,0xc98124f217401c6cL,0x8189635fd4a61435L,
14221         0xd28fb8afa9d98ea6L } },
14222     /* 29 << 70 */
14223     { { 0xb9a67c2a40c251f8L,0x88cd5d87a2da44beL,0x437deb96e09b5423L,
14224         0x150467db64287dc1L },
14225       { 0xe161debbcdabb839L,0xa79e9742f1839a3eL,0xbb8dd3c2652d202bL,
14226         0x7b3e67f7e9f97d96L } },
14227     /* 30 << 70 */
14228     { { 0x5aa5d78fb1cb6ac9L,0xffa13e8eca1d0d45L,0x369295dd2ba5bf95L,
14229         0xd68bd1f839aff05eL },
14230       { 0xaf0d86f926d783f2L,0x543a59b3fc3aafc1L,0x3fcf81d27b7da97cL,
14231         0xc990a056d25dee46L } },
14232     /* 31 << 70 */
14233     { { 0x3e6775b8519cce2cL,0xfc9af71fae13d863L,0x774a4a6f47c1605cL,
14234         0x46ba42452fd205e8L },
14235       { 0xa06feea4d3fd524dL,0x1e7246416de1acc2L,0xf53816f1334e2b42L,
14236         0x49e5918e922f0024L } },
14237     /* 32 << 70 */
14238     { { 0x439530b665c7322dL,0xcf12cc01b3c1b3fbL,0xc70b01860172f685L,
14239         0xb915ee221b58391dL },
14240       { 0x9afdf03ba317db24L,0x87dec65917b8ffc4L,0x7f46597be4d3d050L,
14241         0x80a1c1ed006500e7L } },
14242     /* 33 << 70 */
14243     { { 0x84902a9678bf030eL,0xfb5e9c9a50560148L,0x6dae0a9263362426L,
14244         0xdcaeecf4a9e30c40L },
14245       { 0xc0d887bb518d0c6bL,0x99181152cb985b9dL,0xad186898ef7bc381L,
14246         0x18168ffb9ee46201L } },
14247     /* 34 << 70 */
14248     { { 0x9a04cdaa2502753cL,0xbb279e2651407c41L,0xeacb03aaf23564e5L,
14249         0x1833658271e61016L },
14250       { 0x8684b8c4eb809877L,0xb336e18dea0e672eL,0xefb601f034ee5867L,
14251         0x2733edbe1341cfd1L } },
14252     /* 35 << 70 */
14253     { { 0xb15e809a26025c3cL,0xe6e981a69350df88L,0x923762378502fd8eL,
14254         0x4791f2160c12be9bL },
14255       { 0xb725678925f02425L,0xec8631947a974443L,0x7c0ce882fb41cc52L,
14256         0xc266ff7ef25c07f2L } },
14257     /* 36 << 70 */
14258     { { 0x3d4da8c3017025f3L,0xefcf628cfb9579b4L,0x5c4d00161f3716ecL,
14259         0x9c27ebc46801116eL },
14260       { 0x5eba0ea11da1767eL,0xfe15145247004c57L,0x3ace6df68c2373b7L,
14261         0x75c3dffe5dbc37acL } },
14262     /* 37 << 70 */
14263     { { 0x3dc32a73ddc925fcL,0xb679c8412f65ee0bL,0x715a3295451cbfebL,
14264         0xd9889768f76e9a29L },
14265       { 0xec20ce7fb28ad247L,0xe99146c400894d79L,0x71457d7c9f5e3ea7L,
14266         0x097b266238030031L } },
14267     /* 38 << 70 */
14268     { { 0xdb7f6ae6cf9f82a8L,0x319decb9438f473aL,0xa63ab386283856c3L,
14269         0x13e3172fb06a361bL },
14270       { 0x2959f8dc7d5a006cL,0x2dbc27c675fba752L,0xc1227ab287c22c9eL,
14271         0x06f61f7571a268b2L } },
14272     /* 39 << 70 */
14273     { { 0x1b6bb97104779ce2L,0xaca838120aadcb1dL,0x297ae0bcaeaab2d5L,
14274         0xa5c14ee75bfb9f13L },
14275       { 0xaa00c583f17a62c7L,0x39eb962c173759f6L,0x1eeba1d486c9a88fL,
14276         0x0ab6c37adf016c5eL } },
14277     /* 40 << 70 */
14278     { { 0xa2a147dba28a0749L,0x246c20d6ee519165L,0x5068d1b1d3810715L,
14279         0xb1e7018c748160b9L },
14280       { 0x03f5b1faf380ff62L,0xef7fb1ddf3cb2c1eL,0xeab539a8fc91a7daL,
14281         0x83ddb707f3f9b561L } },
14282     /* 41 << 70 */
14283     { { 0xc550e211fe7df7a4L,0xa7cd07f2063f6f40L,0xb0de36352976879cL,
14284         0xb5f83f85e55741daL },
14285       { 0x4ea9d25ef3d8ac3dL,0x6fe2066f62819f02L,0x4ab2b9c2cef4a564L,
14286         0x1e155d965ffa2de3L } },
14287     /* 42 << 70 */
14288     { { 0x0eb0a19bc3a72d00L,0x4037665b8513c31bL,0x2fb2b6bf04c64637L,
14289         0x45c34d6e08cdc639L },
14290       { 0x56f1e10ff01fd796L,0x4dfb8101fe3667b8L,0xe0eda2539021d0c0L,
14291         0x7a94e9ff8a06c6abL } },
14292     /* 43 << 70 */
14293     { { 0x2d3bb0d9bb9aa882L,0xea20e4e5ec05fd10L,0xed7eeb5f1a1ca64eL,
14294         0x2fa6b43cc6327cbdL },
14295       { 0xb577e3cf3aa91121L,0x8c6bd5ea3a34079bL,0xd7e5ba3960e02fc0L,
14296         0xf16dd2c390141bf8L } },
14297     /* 44 << 70 */
14298     { { 0xb57276d980101b98L,0x760883fdb82f0f66L,0x89d7de754bc3eff3L,
14299         0x03b606435dc2ab40L },
14300       { 0xcd6e53dfe05beeacL,0xf2f1e862bc3325cdL,0xdd0f7921774f03c3L,
14301         0x97ca72214552cc1bL } },
14302     /* 45 << 70 */
14303     { { 0x5a0d6afe1cd19f72L,0xa20915dcf183fbebL,0x9fda4b40832c403cL,
14304         0x32738eddbe425442L },
14305       { 0x469a1df6b5eccf1aL,0x4b5aff4228bbe1f0L,0x31359d7f570dfc93L,
14306         0xa18be235f0088628L } },
14307     /* 46 << 70 */
14308     { { 0xa5b30fbab00ed3a9L,0x34c6137473cdf8beL,0x2c5c5f46abc56797L,
14309         0x5cecf93db82a8ae2L },
14310       { 0x7d3dbe41a968fbf0L,0xd23d45831a5c7f3dL,0xf28f69a0c087a9c7L,
14311         0xc2d75471474471caL } },
14312     /* 47 << 70 */
14313     { { 0x36ec9f4a4eb732ecL,0x6c943bbdb1ca6bedL,0xd64535e1f2457892L,
14314         0x8b84a8eaf7e2ac06L },
14315       { 0xe0936cd32499dd5fL,0x12053d7e0ed04e57L,0x4bdd0076e4305d9dL,
14316         0x34a527b91f67f0a2L } },
14317     /* 48 << 70 */
14318     { { 0xe79a4af09cec46eaL,0xb15347a1658b9bc7L,0x6bd2796f35af2f75L,
14319         0xac9579904051c435L },
14320       { 0x2669dda3c33a655dL,0x5d503c2e88514aa3L,0xdfa113373753dd41L,
14321         0x3f0546730b754f78L } },
14322     /* 49 << 70 */
14323     { { 0xbf185677496125bdL,0xfb0023c83775006cL,0xfa0f072f3a037899L,
14324         0x4222b6eb0e4aea57L },
14325       { 0x3dde5e767866d25aL,0xb6eb04f84837aa6fL,0x5315591a2cf1cdb8L,
14326         0x6dfb4f412d4e683cL } },
14327     /* 50 << 70 */
14328     { { 0x7e923ea448ee1f3aL,0x9604d9f705a2afd5L,0xbe1d4a3340ea4948L,
14329         0x5b45f1f4b44cbd2fL },
14330       { 0x5faf83764acc757eL,0xa7cf9ab863d68ff7L,0x8ad62f69df0e404bL,
14331         0xd65f33c212bdafdfL } },
14332     /* 51 << 70 */
14333     { { 0xc365de15a377b14eL,0x6bf5463b8e39f60cL,0x62030d2d2ce68148L,
14334         0xd95867efe6f843a8L },
14335       { 0xd39a0244ef5ab017L,0x0bd2d8c14ab55d12L,0xc9503db341639169L,
14336         0x2d4e25b0f7660c8aL } },
14337     /* 52 << 70 */
14338     { { 0x760cb3b5e224c5d7L,0xfa3baf8c68616919L,0x9fbca1138d142552L,
14339         0x1ab18bf17669ebf5L },
14340       { 0x55e6f53e9bdf25ddL,0x04cc0bf3cb6cd154L,0x595bef4995e89080L,
14341         0xfe9459a8104a9ac1L } },
14342     /* 53 << 70 */
14343     { { 0xad2d89cacce9bb32L,0xddea65e1f7de8285L,0x62ed8c35b351bd4bL,
14344         0x4150ff360c0e19a7L },
14345       { 0x86e3c801345f4e47L,0x3bf21f71203a266cL,0x7ae110d4855b1f13L,
14346         0x5d6aaf6a07262517L } },
14347     /* 54 << 70 */
14348     { { 0x1e0f12e1813d28f1L,0x6000e11d7ad7a523L,0xc7d8deefc744a17bL,
14349         0x1e990b4814c05a00L },
14350       { 0x68fddaee93e976d5L,0x696241d146610d63L,0xb204e7c3893dda88L,
14351         0x8bccfa656a3a6946L } },
14352     /* 55 << 70 */
14353     { { 0xb59425b4c5cd1411L,0x701b4042ff3658b1L,0xe3e56bca4784cf93L,
14354         0x27de5f158fe68d60L },
14355       { 0x4ab9cfcef8d53f19L,0xddb10311a40a730dL,0x6fa73cd14eee0a8aL,
14356         0xfd5487485249719dL } },
14357     /* 56 << 70 */
14358     { { 0x49d66316a8123ef0L,0x73c32db4e7f95438L,0x2e2ed2090d9e7854L,
14359         0xf98a93299d9f0507L },
14360       { 0xc5d33cf60c6aa20aL,0x9a32ba1475279bb2L,0x7e3202cb774a7307L,
14361         0x64ed4bc4e8c42dbdL } },
14362     /* 57 << 70 */
14363     { { 0xc20f1a06d4caed0dL,0xb8021407171d22b3L,0xd426ca04d13268d7L,
14364         0x9237700725f4d126L },
14365       { 0x4204cbc371f21a85L,0x18461b7af82369baL,0xc0c07d313fc858f9L,
14366         0x5deb5a50e2bab569L } },
14367     /* 58 << 70 */
14368     { { 0xd5959d46d5eea89eL,0xfdff842408437f4bL,0xf21071e43cfe254fL,
14369         0x7241769695468321L },
14370       { 0x5d8288b9102cae3eL,0x2d143e3df1965dffL,0x00c9a376a078d847L,
14371         0x6fc0da3126028731L } },
14372     /* 59 << 70 */
14373     { { 0xa2baeadfe45083a2L,0x66bc72185e5b4bcdL,0x2c826442d04b8e7fL,
14374         0xc19f54516c4b586bL },
14375       { 0x60182c495b7eeed5L,0xd9954ecd7aa9dfa1L,0xa403a8ecc73884adL,
14376         0x7fb17de29bb39041L } },
14377     /* 60 << 70 */
14378     { { 0x694b64c5abb020e8L,0x3d18c18419c4eec7L,0x9c4673ef1c4793e5L,
14379         0xc7b8aeb5056092e6L },
14380       { 0x3aa1ca43f0f8c16bL,0x224ed5ecd679b2f6L,0x0d56eeaf55a205c9L,
14381         0xbfe115ba4b8e028bL } },
14382     /* 61 << 70 */
14383     { { 0x97e608493927f4feL,0xf91fbf94759aa7c5L,0x985af7696be90a51L,
14384         0xc1277b7878ccb823L },
14385       { 0x395b656ee7a75952L,0x00df7de0928da5f5L,0x09c231754ca4454fL,
14386         0x4ec971f47aa2d3c1L } },
14387     /* 62 << 70 */
14388     { { 0x45c3c507e75d9cccL,0x63b7be8a3dc90306L,0x37e09c665db44bdcL,
14389         0x50d60da16841c6a2L },
14390       { 0x6f9b65ee08df1b12L,0x387348797ff089dfL,0x9c331a663fe8013dL,
14391         0x017f5de95f42fcc8L } },
14392     /* 63 << 70 */
14393     { { 0x43077866e8e57567L,0xc9f781cef9fcdb18L,0x38131dda9b12e174L,
14394         0x25d84aa38a03752aL },
14395       { 0x45e09e094d0c0ce2L,0x1564008b92bebba5L,0xf7e8ad31a87284c7L,
14396         0xb7c4b46c97e7bbaaL } },
14397     /* 64 << 70 */
14398     { { 0x3e22a7b397acf4ecL,0x0426c4005ea8b640L,0x5e3295a64e969285L,
14399         0x22aabc59a6a45670L },
14400       { 0xb929714c5f5942bcL,0x9a6168bdfa3182edL,0x2216a665104152baL,
14401         0x46908d03b6926368L } },
14402     /* 0 << 77 */
14403     { { 0x00, 0x00, 0x00, 0x00 },
14404       { 0x00, 0x00, 0x00, 0x00 } },
14405     /* 1 << 77 */
14406     { { 0xa9f5d8745a1251fbL,0x967747a8c72725c7L,0x195c33e531ffe89eL,
14407         0x609d210fe964935eL },
14408       { 0xcafd6ca82fe12227L,0xaf9b5b960426469dL,0x2e9ee04c5693183cL,
14409         0x1084a333c8146fefL } },
14410     /* 2 << 77 */
14411     { { 0x96649933aed1d1f7L,0x566eaff350563090L,0x345057f0ad2e39cfL,
14412         0x148ff65b1f832124L },
14413       { 0x042e89d4cf94cf0dL,0x319bec84520c58b3L,0x2a2676265361aa0dL,
14414         0xc86fa3028fbc87adL } },
14415     /* 3 << 77 */
14416     { { 0xfc83d2ab5c8b06d5L,0xb1a785a2fe4eac46L,0xb99315bc846f7779L,
14417         0xcf31d816ef9ea505L },
14418       { 0x2391fe6a15d7dc85L,0x2f132b04b4016b33L,0x29547fe3181cb4c7L,
14419         0xdb66d8a6650155a1L } },
14420     /* 4 << 77 */
14421     { { 0x6b66d7e1adc1696fL,0x98ebe5930acd72d0L,0x65f24550cc1b7435L,
14422         0xce231393b4b9a5ecL },
14423       { 0x234a22d4db067df9L,0x98dda095caff9b00L,0x1bbc75a06100c9c1L,
14424         0x1560a9c8939cf695L } },
14425     /* 5 << 77 */
14426     { { 0xcf006d3e99e0925fL,0x2dd74a966322375aL,0xc58b446ab56af5baL,
14427         0x50292683e0b9b4f1L },
14428       { 0xe2c34cb41aeaffa3L,0x8b17203f9b9587c1L,0x6d559207ead1350cL,
14429         0x2b66a215fb7f9604L } },
14430     /* 6 << 77 */
14431     { { 0x0850325efe51bf74L,0x9c4f579e5e460094L,0x5c87b92a76da2f25L,
14432         0x889de4e06febef33L },
14433       { 0x6900ec06646083ceL,0xbe2a0335bfe12773L,0xadd1da35c5344110L,
14434         0x757568b7b802cd20L } },
14435     /* 7 << 77 */
14436     { { 0x7555977900f7e6c8L,0x38e8b94f0facd2f0L,0xfea1f3af03fde375L,
14437         0x5e11a1d875881dfcL },
14438       { 0xb3a6b02ec1e2f2efL,0x193d2bbbc605a6c5L,0x325ffeee339a0b2dL,
14439         0x27b6a7249e0c8846L } },
14440     /* 8 << 77 */
14441     { { 0xe4050f1cf1c367caL,0x9bc85a9bc90fbc7dL,0xa373c4a2e1a11032L,
14442         0xb64232b7ad0393a9L },
14443       { 0xf5577eb0167dad29L,0x1604f30194b78ab2L,0x0baa94afe829348bL,
14444         0x77fbd8dd41654342L } },
14445     /* 9 << 77 */
14446     { { 0xdab50ea5b964e39aL,0xd4c29e3cd0d3c76eL,0x80dae67c56d11964L,
14447         0x7307a8bfe5ffcc2fL },
14448       { 0x65bbc1aa91708c3bL,0xa151e62c28bf0eebL,0x6cb533816fa34db7L,
14449         0x5139e05ca29403a8L } },
14450     /* 10 << 77 */
14451     { { 0x6ff651b494a7cd2eL,0x5671ffd10699336cL,0x6f5fd2cc979a896aL,
14452         0x11e893a8d8148cefL },
14453       { 0x988906a165cf7b10L,0x81b67178c50d8485L,0x7c0deb358a35b3deL,
14454         0x423ac855c1d29799L } },
14455     /* 11 << 77 */
14456     { { 0xaf580d87dac50b74L,0x28b2b89f5869734cL,0x99a3b936874e28fbL,
14457         0xbb2c919025f3f73aL },
14458       { 0x199f691884a9d5b7L,0x7ebe23257e770374L,0xf442e1070738efe2L,
14459         0xcf9f3f56cf9082d2L } },
14460     /* 12 << 77 */
14461     { { 0x719f69e109618708L,0xcc9e8364c183f9b1L,0xec203a95366a21afL,
14462         0x6aec5d6d068b141fL },
14463       { 0xee2df78a994f04e9L,0xb39ccae8271245b0L,0xb875a4a997e43f4fL,
14464         0x507dfe11db2cea98L } },
14465     /* 13 << 77 */
14466     { { 0x4fbf81cb489b03e9L,0xdb86ec5b6ec414faL,0xfad444f9f51b3ae5L,
14467         0xca7d33d61914e3feL },
14468       { 0xa9c32f5c0ae6c4d0L,0xa9ca1d1e73969568L,0x98043c311aa7467eL,
14469         0xe832e75ce21b5ac6L } },
14470     /* 14 << 77 */
14471     { { 0x314b7aea5232123dL,0x08307c8c65ae86dbL,0x06e7165caa4668edL,
14472         0xb170458bb4d3ec39L },
14473       { 0x4d2e3ec6c19bb986L,0xc5f34846ae0304edL,0x917695a06c9f9722L,
14474         0x6c7f73174cab1c0aL } },
14475     /* 15 << 77 */
14476     { { 0x6295940e9d6d2e8bL,0xd318b8c1549f7c97L,0x2245320497713885L,
14477         0x468d834ba8a440feL },
14478       { 0xd81fe5b2bfba796eL,0x152364db6d71f116L,0xbb8c7c59b5b66e53L,
14479         0x0b12c61b2641a192L } },
14480     /* 16 << 77 */
14481     { { 0x31f14802fcf0a7fdL,0x42fd07895488b01eL,0x71d78d6d9952b498L,
14482         0x8eb572d907ac5201L },
14483       { 0xe0a2a44c4d194a88L,0xd2b63fd9ba017e66L,0x78efc6c8f888aefcL,
14484         0xb76f6bda4a881a11L } },
14485     /* 17 << 77 */
14486     { { 0x187f314bb46c2397L,0x004cf5665ded2819L,0xa9ea570438764d34L,
14487         0xbba4521778084709L },
14488       { 0x064745711171121eL,0xad7b7eb1e7c9b671L,0xdacfbc40730f7507L,
14489         0x178cd8c6c7ad7bd1L } },
14490     /* 18 << 77 */
14491     { { 0xbf0be101b2a67238L,0x3556d367af9c14f2L,0x104b7831a5662075L,
14492         0x58ca59bb79d9e60aL },
14493       { 0x4bc45392a569a73bL,0x517a52e85698f6c9L,0x85643da5aeadd755L,
14494         0x1aed0cd52a581b84L } },
14495     /* 19 << 77 */
14496     { { 0xb9b4ff8480af1372L,0x244c3113f1ba5d1fL,0x2a5dacbef5f98d31L,
14497         0x2c3323e84375bc2aL },
14498       { 0x17a3ab4a5594b1ddL,0xa1928bfbceb4797eL,0xe83af245e4886a19L,
14499         0x8979d54672b5a74aL } },
14500     /* 20 << 77 */
14501     { { 0xa0f726bc19f9e967L,0xd9d03152e8fbbf4eL,0xcfd6f51db7707d40L,
14502         0x633084d963f6e6e0L },
14503       { 0xedcd9cdc55667eafL,0x73b7f92b2e44d56fL,0xfb2e39b64e962b14L,
14504         0x7d408f6ef671fcbfL } },
14505     /* 21 << 77 */
14506     { { 0xcc634ddc164a89bbL,0x74a42bb23ef3bd05L,0x1280dbb2428decbbL,
14507         0x6103f6bb402c8596L },
14508       { 0xfa2bf581355a5752L,0x562f96a800946674L,0x4e4ca16d6da0223bL,
14509         0xfe47819f28d3aa25L } },
14510     /* 22 << 77 */
14511     { { 0x9eea3075f8dfcf8aL,0xa284f0aa95669825L,0xb3fca250867d3fd8L,
14512         0x20757b5f269d691eL },
14513       { 0xf2c2402093b8a5deL,0xd3f93359ebc06da6L,0x1178293eb2739c33L,
14514         0xd2a3e770bcd686e5L } },
14515     /* 23 << 77 */
14516     { { 0xa76f49f4cd941534L,0x0d37406be3c71c0eL,0x172d93973b97f7e3L,
14517         0xec17e239bd7fd0deL },
14518       { 0xe32905516f496ba2L,0x6a69317236ad50e7L,0xc4e539a283e7eff5L,
14519         0x752737e718e1b4cfL } },
14520     /* 24 << 77 */
14521     { { 0xa2f7932c68af43eeL,0x5502468e703d00bdL,0xe5dc978f2fb061f5L,
14522         0xc9a1904a28c815adL },
14523       { 0xd3af538d470c56a4L,0x159abc5f193d8cedL,0x2a37245f20108ef3L,
14524         0xfa17081e223f7178L } },
14525     /* 25 << 77 */
14526     { { 0x27b0fb2b10c8c0f5L,0x2102c3ea40650547L,0x594564df8ac3bfa7L,
14527         0x98102033509dad96L },
14528       { 0x6989643ff1d18a13L,0x35eebd91d7fc5af0L,0x078d096afaeaafd8L,
14529         0xb7a89341def3de98L } },
14530     /* 26 << 77 */
14531     { { 0x2a206e8decf2a73aL,0x066a63978e551994L,0x3a6a088ab98d53a2L,
14532         0x0ce7c67c2d1124aaL },
14533       { 0x48cec671759a113cL,0xe3b373d34f6f67faL,0x5455d479fd36727bL,
14534         0xe5a428eea13c0d81L } },
14535     /* 27 << 77 */
14536     { { 0xb853dbc81c86682bL,0xb78d2727b8d02b2aL,0xaaf69bed8ebc329aL,
14537         0xdb6b40b3293b2148L },
14538       { 0xe42ea77db8c4961fL,0xb1a12f7c20e5e0abL,0xa0ec527479e8b05eL,
14539         0x68027391fab60a80L } },
14540     /* 28 << 77 */
14541     { { 0x6bfeea5f16b1bd5eL,0xf957e4204de30ad3L,0xcbaf664e6a353b9eL,
14542         0x5c87331226d14febL },
14543       { 0x4e87f98cb65f57cbL,0xdb60a6215e0cdd41L,0x67c16865a6881440L,
14544         0x1093ef1a46ab52aaL } },
14545     /* 29 << 77 */
14546     { { 0xc095afb53f4ece64L,0x6a6bb02e7604551aL,0x55d44b4e0b26b8cdL,
14547         0xe5f9a999f971268aL },
14548       { 0xc08ec42511a7de84L,0x83568095fda469ddL,0x737bfba16c6c90a2L,
14549         0x1cb9c4a0be229831L } },
14550     /* 30 << 77 */
14551     { { 0x93bccbbabb2eec64L,0xa0c23b64da03adbeL,0x5f7aa00ae0e86ac4L,
14552         0x470b941efc1401e6L },
14553       { 0x5ad8d6799df43574L,0x4ccfb8a90f65d810L,0x1bce80e3aa7fbd81L,
14554         0x273291ad9508d20aL } },
14555     /* 31 << 77 */
14556     { { 0xf5c4b46b42a92806L,0x810684eca86ab44aL,0x4591640bca0bc9f8L,
14557         0xb5efcdfc5c4b6054L },
14558       { 0x16fc89076e9edd12L,0xe29d0b50d4d792f9L,0xa45fd01c9b03116dL,
14559         0x85035235c81765a4L } },
14560     /* 32 << 77 */
14561     { { 0x1fe2a9b2b4b4b67cL,0xc1d10df0e8020604L,0x9d64abfcbc8058d8L,
14562         0x8943b9b2712a0fbbL },
14563       { 0x90eed9143b3def04L,0x85ab3aa24ce775ffL,0x605fd4ca7bbc9040L,
14564         0x8b34a564e2c75dfbL } },
14565     /* 33 << 77 */
14566     { { 0x41ffc94a10358560L,0x2d8a50729e5c28aaL,0xe915a0fc4cc7eb15L,
14567         0xe9efab058f6d0f5dL },
14568       { 0xdbab47a9d19e9b91L,0x8cfed7450276154cL,0x154357ae2cfede0dL,
14569         0x520630df19f5a4efL } },
14570     /* 34 << 77 */
14571     { { 0x25759f7ce382360fL,0xb6db05c988bf5857L,0x2917d61d6c58d46cL,
14572         0x14f8e491fd20cb7aL },
14573       { 0xb68a727a11c20340L,0x0386f86faf7ccbb6L,0x5c8bc6ccfee09a20L,
14574         0x7d76ff4abb7eea35L } },
14575     /* 35 << 77 */
14576     { { 0xa7bdebe7db15be7aL,0x67a08054d89f0302L,0x56bf0ea9c1193364L,
14577         0xc824446762837ebeL },
14578       { 0x32bd8e8b20d841b8L,0x127a0548dbb8a54fL,0x83dd4ca663b20236L,
14579         0x87714718203491faL } },
14580     /* 36 << 77 */
14581     { { 0x4dabcaaaaa8a5288L,0x91cc0c8aaf23a1c9L,0x34c72c6a3f220e0cL,
14582         0xbcc20bdf1232144aL },
14583       { 0x6e2f42daa20ede1bL,0xc441f00c74a00515L,0xbf46a5b6734b8c4bL,
14584         0x574095037b56c9a4L } },
14585     /* 37 << 77 */
14586     { { 0x9f735261e4585d45L,0x9231faed6734e642L,0x1158a176be70ee6cL,
14587         0x35f1068d7c3501bfL },
14588       { 0x6beef900a2d26115L,0x649406f2ef0afee3L,0x3f43a60abc2420a1L,
14589         0x509002a7d5aee4acL } },
14590     /* 38 << 77 */
14591     { { 0xb46836a53ff3571bL,0x24f98b78837927c1L,0x6254256a4533c716L,
14592         0xf27abb0bd07ee196L },
14593       { 0xd7cf64fc5c6d5bfdL,0x6915c751f0cd7a77L,0xd9f590128798f534L,
14594         0x772b0da8f81d8b5fL } },
14595     /* 39 << 77 */
14596     { { 0x1244260c2e03fa69L,0x36cf0e3a3be1a374L,0x6e7c1633ef06b960L,
14597         0xa71a4c55671f90f6L },
14598       { 0x7a94125133c673dbL,0xc0bea51073e8c131L,0x61a8a699d4f6c734L,
14599         0x25e78c88341ed001L } },
14600     /* 40 << 77 */
14601     { { 0x5c18acf88e2f7d90L,0xfdbf33d777be32cdL,0x0a085cd7d2eb5ee9L,
14602         0x2d702cfbb3201115L },
14603       { 0xb6e0ebdb85c88ce8L,0x23a3ce3c1e01d617L,0x3041618e567333acL,
14604         0x9dd0fd8f157edb6bL } },
14605     /* 41 << 77 */
14606     { { 0x27f74702b57872b8L,0x2ef26b4f657d5fe1L,0x95426f0a57cf3d40L,
14607         0x847e2ad165a6067aL },
14608       { 0xd474d9a009996a74L,0x16a56acd2a26115cL,0x02a615c3d16f4d43L,
14609         0xcc3fc965aadb85b7L } },
14610     /* 42 << 77 */
14611     { { 0x386bda73ce07d1b0L,0xd82910c258ad4178L,0x124f82cfcd2617f4L,
14612         0xcc2f5e8def691770L },
14613       { 0x82702550b8c30cccL,0x7b856aea1a8e575aL,0xbb822fefb1ab9459L,
14614         0x085928bcec24e38eL } },
14615     /* 43 << 77 */
14616     { { 0x5d0402ecba8f4b4dL,0xc07cd4ba00b4d58bL,0x5d8dffd529227e7aL,
14617         0x61d44d0c31bf386fL },
14618       { 0xe486dc2b135e6f4dL,0x680962ebe79410efL,0xa61bd343f10088b5L,
14619         0x6aa76076e2e28686L } },
14620     /* 44 << 77 */
14621     { { 0x80463d118fb98871L,0xcb26f5c3bbc76affL,0xd4ab8eddfbe03614L,
14622         0xc8eb579bc0cf2deeL },
14623       { 0xcc004c15c93bae41L,0x46fbae5d3aeca3b2L,0x671235cf0f1e9ab1L,
14624         0xadfba9349ec285c1L } },
14625     /* 45 << 77 */
14626     { { 0x88ded013f216c980L,0xc8ac4fb8f79e0bc1L,0xa29b89c6fb97a237L,
14627         0xb697b7809922d8e7L },
14628       { 0x3142c639ddb945b5L,0x447b06c7e094c3a9L,0xcdcb364272266c90L,
14629         0x633aad08a9385046L } },
14630     /* 46 << 77 */
14631     { { 0xa36c936bb57c6477L,0x871f8b64e94dbcc6L,0x28d0fb62a591a67bL,
14632         0x9d40e081c1d926f5L },
14633       { 0x3111eaf6f2d84b5aL,0x228993f9a565b644L,0x0ccbf5922c83188bL,
14634         0xf87b30ab3df3e197L } },
14635     /* 47 << 77 */
14636     { { 0xb8658b317642bca8L,0x1a032d7f52800f17L,0x051dcae579bf9445L,
14637         0xeba6b8ee54a2e253L },
14638       { 0x5c8b9cadd4485692L,0x84bda40e8986e9beL,0xd16d16a42f0db448L,
14639         0x8ec80050a14d4188L } },
14640     /* 48 << 77 */
14641     { { 0xb2b2610798fa7aaaL,0x41209ee4f073aa4eL,0xf1570359f2d6b19bL,
14642         0xcbe6868cfc577cafL },
14643       { 0x186c4bdc32c04dd3L,0xa6c35faecfeee397L,0xb4a1b312f086c0cfL,
14644         0xe0a5ccc6d9461fe2L } },
14645     /* 49 << 77 */
14646     { { 0xc32278aa1536189fL,0x1126c55fba6df571L,0x0f71a602b194560eL,
14647         0x8b2d7405324bd6e1L },
14648       { 0x8481939e3738be71L,0xb5090b1a1a4d97a9L,0x116c65a3f05ba915L,
14649         0x21863ad3aae448aaL } },
14650     /* 50 << 77 */
14651     { { 0xd24e2679a7aae5d3L,0x7076013d0de5c1c4L,0x2d50f8babb05b629L,
14652         0x73c1abe26e66efbbL },
14653       { 0xefd4b422f2488af7L,0xe4105d02663ba575L,0x7eb60a8b53a69457L,
14654         0x62210008c945973bL } },
14655     /* 51 << 77 */
14656     { { 0xfb25547877a50ec6L,0xbf0392f70a37a72cL,0xa0a7a19c4be18e7aL,
14657         0x90d8ea1625b1e0afL },
14658       { 0x7582a293ef953f57L,0x90a64d05bdc5465aL,0xca79c497e2510717L,
14659         0x560dbb7c18cb641fL } },
14660     /* 52 << 77 */
14661     { { 0x1d8e32864b66abfbL,0xd26f52e559030900L,0x1ee3f6435584941aL,
14662         0x6d3b3730569f5958L },
14663       { 0x9ff2a62f4789dba5L,0x91fcb81572b5c9b7L,0xf446cb7d6c8f9a0eL,
14664         0x48f625c139b7ecb5L } },
14665     /* 53 << 77 */
14666     { { 0xbabae8011c6219b8L,0xe7a562d928ac2f23L,0xe1b4873226e20588L,
14667         0x06ee1cad775af051L },
14668       { 0xda29ae43faff79f7L,0xc141a412652ee9e0L,0x1e127f6f195f4bd0L,
14669         0x29c6ab4f072f34f8L } },
14670     /* 54 << 77 */
14671     { { 0x7b7c147730448112L,0x82b51af1e4a38656L,0x2bf2028a2f315010L,
14672         0xc9a4a01f6ea88cd4L },
14673       { 0xf63e95d8257e5818L,0xdd8efa10b4519b16L,0xed8973e00da910bfL,
14674         0xed49d0775c0fe4a9L } },
14675     /* 55 << 77 */
14676     { { 0xac3aac5eb7caee1eL,0x1033898da7f4da57L,0x42145c0e5c6669b9L,
14677         0x42daa688c1aa2aa0L },
14678       { 0x629cc15c1a1d885aL,0x25572ec0f4b76817L,0x8312e4359c8f8f28L,
14679         0x8107f8cd81965490L } },
14680     /* 56 << 77 */
14681     { { 0x516ff3a36fa6110cL,0x74fb1eb1fb93561fL,0x6c0c90478457522bL,
14682         0xcfd321046bb8bdc6L },
14683       { 0x2d6884a2cc80ad57L,0x7c27fc3586a9b637L,0x3461baedadf4e8cdL,
14684         0x1d56251a617242f0L } },
14685     /* 57 << 77 */
14686     { { 0x0b80d209c955bef4L,0xdf02cad206adb047L,0xf0d7cb915ec74feeL,
14687         0xd25033751111ba44L },
14688       { 0x9671755edf53cb36L,0x54dcb6123368551bL,0x66d69aacc8a025a4L,
14689         0x6be946c6e77ef445L } },
14690     /* 58 << 77 */
14691     { { 0x719946d1a995e094L,0x65e848f6e51e04d8L,0xe62f33006a1e3113L,
14692         0x1541c7c1501de503L },
14693       { 0x4daac9faf4acfadeL,0x0e58589744cd0b71L,0x544fd8690a51cd77L,
14694         0x60fc20ed0031016dL } },
14695     /* 59 << 77 */
14696     { { 0x58b404eca4276867L,0x46f6c3cc34f34993L,0x477ca007c636e5bdL,
14697         0x8018f5e57c458b47L },
14698       { 0xa1202270e47b668fL,0xcef48ccdee14f203L,0x23f98bae62ff9b4dL,
14699         0x55acc035c589edddL } },
14700     /* 60 << 77 */
14701     { { 0x3fe712af64db4444L,0x19e9d634becdd480L,0xe08bc047a930978aL,
14702         0x2dbf24eca1280733L },
14703       { 0x3c0ae38c2cd706b2L,0x5b012a5b359017b9L,0x3943c38c72e0f5aeL,
14704         0x786167ea57176fa3L } },
14705     /* 61 << 77 */
14706     { { 0xe5f9897d594881dcL,0x6b5efad8cfb820c1L,0xb2179093d55018deL,
14707         0x39ad7d320bac56ceL },
14708       { 0xb55122e02cfc0e81L,0x117c4661f6d89daaL,0x362d01e1cb64fa09L,
14709         0x6a309b4e3e9c4dddL } },
14710     /* 62 << 77 */
14711     { { 0xfa979fb7abea49b1L,0xb4b1d27d10e2c6c5L,0xbd61c2c423afde7aL,
14712         0xeb6614f89786d358L },
14713       { 0x4a5d816b7f6f7459L,0xe431a44f09360e7bL,0x8c27a032c309914cL,
14714         0xcea5d68acaede3d8L } },
14715     /* 63 << 77 */
14716     { { 0x3668f6653a0a3f95L,0x893694167ceba27bL,0x89981fade4728fe9L,
14717         0x7102c8a08a093562L },
14718       { 0xbb80310e235d21c8L,0x505e55d1befb7f7bL,0xa0a9081112958a67L,
14719         0xd67e106a4d851fefL } },
14720     /* 64 << 77 */
14721     { { 0xb84011a9431dd80eL,0xeb7c7cca73306cd9L,0x20fadd29d1b3b730L,
14722         0x83858b5bfe37b3d3L },
14723       { 0xbf4cd193b6251d5cL,0x1cca1fd31352d952L,0xc66157a490fbc051L,
14724         0x7990a63889b98636L } },
14725     /* 0 << 84 */
14726     { { 0x00, 0x00, 0x00, 0x00 },
14727       { 0x00, 0x00, 0x00, 0x00 } },
14728     /* 1 << 84 */
14729     { { 0xe5aa692a87dec0e1L,0x010ded8df7b39d00L,0x7b1b80c854cfa0b5L,
14730         0x66beb876a0f8ea28L },
14731       { 0x50d7f5313476cd0eL,0xa63d0e65b08d3949L,0x1a09eea953479fc6L,
14732         0x82ae9891f499e742L } },
14733     /* 2 << 84 */
14734     { { 0xab58b9105ca7d866L,0x582967e23adb3b34L,0x89ae4447cceac0bcL,
14735         0x919c667c7bf56af5L },
14736       { 0x9aec17b160f5dcd7L,0xec697b9fddcaadbcL,0x0b98f341463467f5L,
14737         0xb187f1f7a967132fL } },
14738     /* 3 << 84 */
14739     { { 0x90fe7a1d214aeb18L,0x1506af3c741432f7L,0xbb5565f9e591a0c4L,
14740         0x10d41a77b44f1bc3L },
14741       { 0xa09d65e4a84bde96L,0x42f060d8f20a6a1cL,0x652a3bfdf27f9ce7L,
14742         0xb6bdb65c3b3d739fL } },
14743     /* 4 << 84 */
14744     { { 0xeb5ddcb6ec7fae9fL,0x995f2714efb66e5aL,0xdee95d8e69445d52L,
14745         0x1b6c2d4609e27620L },
14746       { 0x32621c318129d716L,0xb03909f10958c1aaL,0x8c468ef91af4af63L,
14747         0x162c429ffba5cdf6L } },
14748     /* 5 << 84 */
14749     { { 0x2f682343753b9371L,0x29cab45a5f1f9cd7L,0x571623abb245db96L,
14750         0xc507db093fd79999L },
14751       { 0x4e2ef652af036c32L,0x86f0cc7805018e5cL,0xc10a73d4ab8be350L,
14752         0x6519b3977e826327L } },
14753     /* 6 << 84 */
14754     { { 0xe8cb5eef9c053df7L,0x8de25b37b300ea6fL,0xdb03fa92c849cffbL,
14755         0x242e43a7e84169bbL },
14756       { 0xe4fa51f4dd6f958eL,0x6925a77ff4445a8dL,0xe6e72a50e90d8949L,
14757         0xc66648e32b1f6390L } },
14758     /* 7 << 84 */
14759     { { 0xb2ab1957173e460cL,0x1bbbce7530704590L,0xc0a90dbddb1c7162L,
14760         0x505e399e15cdd65dL },
14761       { 0x68434dcb57797ab7L,0x60ad35ba6a2ca8e8L,0x4bfdb1e0de3336c1L,
14762         0xbbef99ebd8b39015L } },
14763     /* 8 << 84 */
14764     { { 0x6c3b96f31711ebecL,0x2da40f1fce98fdc4L,0xb99774d357b4411fL,
14765         0x87c8bdf415b65bb6L },
14766       { 0xda3a89e3c2eef12dL,0xde95bb9b3c7471f3L,0x600f225bd812c594L,
14767         0x54907c5d2b75a56bL } },
14768     /* 9 << 84 */
14769     { { 0xa93cc5f08db60e35L,0x743e3cd6fa833319L,0x7dad5c41f81683c9L,
14770         0x70c1e7d99c34107eL },
14771       { 0x0edc4a39a6be0907L,0x36d4703586d0b7d3L,0x8c76da03272bfa60L,
14772         0x0b4a07ea0f08a414L } },
14773     /* 10 << 84 */
14774     { { 0x699e4d2945c1dd53L,0xcadc5898231debb5L,0xdf49fcc7a77f00e0L,
14775         0x93057bbfa73e5a0eL },
14776       { 0x2f8b7ecd027a4cd1L,0x114734b3c614011aL,0xe7a01db767677c68L,
14777         0x89d9be5e7e273f4fL } },
14778     /* 11 << 84 */
14779     { { 0xd225cb2e089808efL,0xf1f7a27dd59e4107L,0x53afc7618211b9c9L,
14780         0x0361bc67e6819159L },
14781       { 0x2a865d0b7f071426L,0x6a3c1810e7072567L,0x3e3bca1e0d6bcabdL,
14782         0xa1b02bc1408591bcL } },
14783     /* 12 << 84 */
14784     { { 0xe0deee5931fba239L,0xf47424d398bd91d1L,0x0f8886f4071a3c1dL,
14785         0x3f7d41e8a819233bL },
14786       { 0x708623c2cf6eb998L,0x86bb49af609a287fL,0x942bb24963c90762L,
14787         0x0ef6eea555a9654bL } },
14788     /* 13 << 84 */
14789     { { 0x5f6d2d7236f5defeL,0xfa9922dc56f99176L,0x6c8c5ecef78ce0c7L,
14790         0x7b44589dbe09b55eL },
14791       { 0xe11b3bca9ea83770L,0xd7fa2c7f2ab71547L,0x2a3dd6fa2a1ddcc0L,
14792         0x09acb4305a7b7707L } },
14793     /* 14 << 84 */
14794     { { 0x4add4a2e649d4e57L,0xcd53a2b01917526eL,0xc526233020b44ac4L,
14795         0x4028746abaa2c31dL },
14796       { 0x5131839064291d4cL,0xbf48f151ee5ad909L,0xcce57f597b185681L,
14797         0x7c3ac1b04854d442L } },
14798     /* 15 << 84 */
14799     { { 0x65587dc3c093c171L,0xae7acb2424f42b65L,0x5a338adb955996cbL,
14800         0xc8e656756051f91bL },
14801       { 0x66711fba28b8d0b1L,0x15d74137b6c10a90L,0x70cdd7eb3a232a80L,
14802         0xc9e2f07f6191ed24L } },
14803     /* 16 << 84 */
14804     { { 0xa80d1db6f79588c0L,0xfa52fc69b55768ccL,0x0b4df1ae7f54438aL,
14805         0x0cadd1a7f9b46a4fL },
14806       { 0xb40ea6b31803dd6fL,0x488e4fa555eaae35L,0x9f047d55382e4e16L,
14807         0xc9b5b7e02f6e0c98L } },
14808     /* 17 << 84 */
14809     { { 0x6b1bd2d395762649L,0xa9604ee7c7aea3f6L,0x3646ff276dc6f896L,
14810         0x9bf0e7f52860bad1L },
14811       { 0x2d92c8217cb44b92L,0xa2f5ce63aea9c182L,0xd0a2afb19154a5fdL,
14812         0x482e474c95801da6L } },
14813     /* 18 << 84 */
14814     { { 0xc19972d0b611c24bL,0x1d468e6560a8f351L,0xeb7580697bcf6421L,
14815         0xec9dd0ee88fbc491L },
14816       { 0x5b59d2bf956c2e32L,0x73dc6864dcddf94eL,0xfd5e2321bcee7665L,
14817         0xa7b4f8ef5e9a06c4L } },
14818     /* 19 << 84 */
14819     { { 0xfba918dd7280f855L,0xbbaac2608baec688L,0xa3b3f00f33400f42L,
14820         0x3d2dba2966f2e6e4L },
14821       { 0xb6f71a9498509375L,0x8f33031fcea423ccL,0x009b8dd04807e6fbL,
14822         0x5163cfe55cdb954cL } },
14823     /* 20 << 84 */
14824     { { 0x03cc8f17cf41c6e8L,0xf1f03c2a037b925cL,0xc39c19cc66d2427cL,
14825         0x823d24ba7b6c18e4L },
14826       { 0x32ef9013901f0b4fL,0x684360f1f8941c2eL,0x0ebaff522c28092eL,
14827         0x7891e4e3256c932fL } },
14828     /* 21 << 84 */
14829     { { 0x51264319ac445e3dL,0x553432e78ea74381L,0xe6eeaa6967e9c50aL,
14830         0x27ced28462e628c7L },
14831       { 0x3f96d3757a4afa57L,0xde0a14c3e484c150L,0x364a24eb38bd9923L,
14832         0x1df18da0e5177422L } },
14833     /* 22 << 84 */
14834     { { 0x174e8f82d8d38a9bL,0x2e97c600e7de1391L,0xc5709850a1c175ddL,
14835         0x969041a032ae5035L },
14836       { 0xcbfd533b76a2086bL,0xd6bba71bd7c2e8feL,0xb2d58ee6099dfb67L,
14837         0x3a8b342d064a85d9L } },
14838     /* 23 << 84 */
14839     { { 0x3bc07649522f9be3L,0x690c075bdf1f49a8L,0x80e1aee83854ec42L,
14840         0x2a7dbf4417689dc7L },
14841       { 0xc004fc0e3faf4078L,0xb2f02e9edf11862cL,0xf10a5e0fa0a1b7b3L,
14842         0x30aca6238936ec80L } },
14843     /* 24 << 84 */
14844     { { 0xf83cbf0502f40d9aL,0x4681c4682c318a4dL,0x985756180e9c2674L,
14845         0xbe79d0461847092eL },
14846       { 0xaf1e480a78bd01e0L,0x6dd359e472a51db9L,0x62ce3821e3afbab6L,
14847         0xc5cee5b617733199L } },
14848     /* 25 << 84 */
14849     { { 0xe08b30d46ffd9fbbL,0x6e5bc69936c610b7L,0xf343cff29ce262cfL,
14850         0xca2e4e3568b914c1L },
14851       { 0x011d64c016de36c5L,0xe0b10fdd42e2b829L,0x789429816685aaf8L,
14852         0xe7511708230ede97L } },
14853     /* 26 << 84 */
14854     { { 0x671ed8fc3b922bf8L,0xe4d8c0a04c29b133L,0x87eb12393b6e99c4L,
14855         0xaff3974c8793bebaL },
14856       { 0x037494052c18df9bL,0xc5c3a29391007139L,0x6a77234fe37a0b95L,
14857         0x02c29a21b661c96bL } },
14858     /* 27 << 84 */
14859     { { 0xc3aaf1d6141ecf61L,0x9195509e3bb22f53L,0x2959740422d51357L,
14860         0x1b083822537bed60L },
14861       { 0xcd7d6e35e07289f0L,0x1f94c48c6dd86effL,0xc8bb1f82eb0f9cfaL,
14862         0x9ee0b7e61b2eb97dL } },
14863     /* 28 << 84 */
14864     { { 0x5a52fe2e34d74e31L,0xa352c3103bf79ab6L,0x97ff6c5aabfeeb8fL,
14865         0xbfbe8feff5c97305L },
14866       { 0xd6081ce6a7904608L,0x1f812f3ac4fca249L,0x9b24bc9ab9e5e200L,
14867         0x91022c6738012ee8L } },
14868     /* 29 << 84 */
14869     { { 0xe83d9c5d30a713a1L,0x4876e3f084ef0f93L,0xc9777029c1fbf928L,
14870         0xef7a6bb3bce7d2a4L },
14871       { 0xb8067228dfa2a659L,0xd5cd3398d877a48fL,0xbea4fd8f025d0f3fL,
14872         0xd67d2e352eae7c2bL } },
14873     /* 30 << 84 */
14874     { { 0x184de7d7cc5f4394L,0xb5551b5c4536e142L,0x2e89b212d34aa60aL,
14875         0x14a96feaf50051d5L },
14876       { 0x4e21ef740d12bb0bL,0xc522f02060b9677eL,0x8b12e4672df7731dL,
14877         0x39f803827b326d31L } },
14878     /* 31 << 84 */
14879     { { 0xdfb8630c39024a94L,0xaacb96a897319452L,0xd68a3961eda3867cL,
14880         0x0c58e2b077c4ffcaL },
14881       { 0x3d545d634da919faL,0xef79b69af15e2289L,0x54bc3d3d808bab10L,
14882         0xc8ab300745f82c37L } },
14883     /* 32 << 84 */
14884     { { 0xc12738b67c4a658aL,0xb3c4763940e72182L,0x3b77be468798e44fL,
14885         0xdc047df217a7f85fL },
14886       { 0x2439d4c55e59d92dL,0xcedca475e8e64d8dL,0xa724cd0d87ca9b16L,
14887         0x35e4fd59a5540dfeL } },
14888     /* 33 << 84 */
14889     { { 0xf8c1ff18e4bcf6b1L,0x856d6285295018faL,0x433f665c3263c949L,
14890         0xa6a76dd6a1f21409L },
14891       { 0x17d32334cc7b4f79L,0xa1d0312206720e4aL,0xadb6661d81d9bed5L,
14892         0xf0d6fb0211db15d1L } },
14893     /* 34 << 84 */
14894     { { 0x7fd11ad51fb747d2L,0xab50f9593033762bL,0x2a7e711bfbefaf5aL,
14895         0xc73932783fef2bbfL },
14896       { 0xe29fa2440df6f9beL,0x9092757b71efd215L,0xee60e3114f3d6fd9L,
14897         0x338542d40acfb78bL } },
14898     /* 35 << 84 */
14899     { { 0x44a23f0838961a0fL,0x1426eade986987caL,0x36e6ee2e4a863cc6L,
14900         0x48059420628b8b79L },
14901       { 0x30303ad87396e1deL,0x5c8bdc4838c5aad1L,0x3e40e11f5c8f5066L,
14902         0xabd6e7688d246bbdL } },
14903     /* 36 << 84 */
14904     { { 0x68aa40bb23330a01L,0xd23f5ee4c34eafa0L,0x3bbee3155de02c21L,
14905         0x18dd4397d1d8dd06L },
14906       { 0x3ba1939a122d7b44L,0xe6d3b40aa33870d6L,0x8e620f701c4fe3f8L,
14907         0xf6bba1a5d3a50cbfL } },
14908     /* 37 << 84 */
14909     { { 0x4a78bde5cfc0aee0L,0x847edc46c08c50bdL,0xbaa2439cad63c9b2L,
14910         0xceb4a72810fc2acbL },
14911       { 0xa419e40e26da033dL,0x6cc3889d03e02683L,0x1cd28559fdccf725L,
14912         0x0fd7e0f18d13d208L } },
14913     /* 38 << 84 */
14914     { { 0x01b9733b1f0df9d4L,0x8cc2c5f3a2b5e4f3L,0x43053bfa3a304fd4L,
14915         0x8e87665c0a9f1aa7L },
14916       { 0x087f29ecd73dc965L,0x15ace4553e9023dbL,0x2370e3092bce28b4L,
14917         0xf9723442b6b1e84aL } },
14918     /* 39 << 84 */
14919     { { 0xbeee662eb72d9f26L,0xb19396def0e47109L,0x85b1fa73e13289d0L,
14920         0x436cf77e54e58e32L },
14921       { 0x0ec833b3e990ef77L,0x7373e3ed1b11fc25L,0xbe0eda870fc332ceL,
14922         0xced049708d7ea856L } },
14923     /* 40 << 84 */
14924     { { 0xf85ff7857e977ca0L,0xb66ee8dadfdd5d2bL,0xf5e37950905af461L,
14925         0x587b9090966d487cL },
14926       { 0x6a198a1b32ba0127L,0xa7720e07141615acL,0xa23f3499996ef2f2L,
14927         0xef5f64b4470bcb3dL } },
14928     /* 41 << 84 */
14929     { { 0xa526a96292b8c559L,0x0c14aac069740a0fL,0x0d41a9e3a6bdc0a5L,
14930         0x97d521069c48aef4L },
14931       { 0xcf16bd303e7c253bL,0xcc834b1a47fdedc1L,0x7362c6e5373aab2eL,
14932         0x264ed85ec5f590ffL } },
14933     /* 42 << 84 */
14934     { { 0x7a46d9c066d41870L,0xa50c20b14787ba09L,0x185e7e51e3d44635L,
14935         0xb3b3e08031e2d8dcL },
14936       { 0xbed1e558a179e9d9L,0x2daa3f7974a76781L,0x4372baf23a40864fL,
14937         0x46900c544fe75cb5L } },
14938     /* 43 << 84 */
14939     { { 0xb95f171ef76765d0L,0x4ad726d295c87502L,0x2ec769da4d7c99bdL,
14940         0x5e2ddd19c36cdfa8L },
14941       { 0xc22117fca93e6deaL,0xe8a2583b93771123L,0xbe2f6089fa08a3a2L,
14942         0x4809d5ed8f0e1112L } },
14943     /* 44 << 84 */
14944     { { 0x3b414aa3da7a095eL,0x9049acf126f5aaddL,0x78d46a4d6be8b84aL,
14945         0xd66b1963b732b9b3L },
14946       { 0x5c2ac2a0de6e9555L,0xcf52d098b5bd8770L,0x15a15fa60fd28921L,
14947         0x56ccb81e8b27536dL } },
14948     /* 45 << 84 */
14949     { { 0x0f0d8ab89f4ccbb8L,0xed5f44d2db221729L,0x4314198800bed10cL,
14950         0xc94348a41d735b8bL },
14951       { 0x79f3e9c429ef8479L,0x4c13a4e3614c693fL,0x32c9af568e143a14L,
14952         0xbc517799e29ac5c4L } },
14953     /* 46 << 84 */
14954     { { 0x05e179922774856fL,0x6e52fb056c1bf55fL,0xaeda4225e4f19e16L,
14955         0x70f4728aaf5ccb26L },
14956       { 0x5d2118d1b2947f22L,0xc827ea16281d6fb9L,0x8412328d8cf0eabdL,
14957         0x45ee9fb203ef9dcfL } },
14958     /* 47 << 84 */
14959     { { 0x8e700421bb937d63L,0xdf8ff2d5cc4b37a6L,0xa4c0d5b25ced7b68L,
14960         0x6537c1efc7308f59L },
14961       { 0x25ce6a263b37f8e8L,0x170e9a9bdeebc6ceL,0xdd0379528728d72cL,
14962         0x445b0e55850154bcL } },
14963     /* 48 << 84 */
14964     { { 0x4b7d0e0683a7337bL,0x1e3416d4ffecf249L,0x24840eff66a2b71fL,
14965         0xd0d9a50ab37cc26dL },
14966       { 0xe21981506fe28ef7L,0x3cc5ef1623324c7fL,0x220f3455769b5263L,
14967         0xe2ade2f1a10bf475L } },
14968     /* 49 << 84 */
14969     { { 0x28cd20fa458d3671L,0x1549722c2dc4847bL,0x6dd01e55591941e3L,
14970         0x0e6fbcea27128ccbL },
14971       { 0xae1a1e6b3bef0262L,0xfa8c472c8f54e103L,0x7539c0a872c052ecL,
14972         0xd7b273695a3490e9L } },
14973     /* 50 << 84 */
14974     { { 0x143fe1f171684349L,0x36b4722e32e19b97L,0xdc05922790980affL,
14975         0x175c9c889e13d674L },
14976       { 0xa7de5b226e6bfdb1L,0x5ea5b7b2bedb4b46L,0xd5570191d34a6e44L,
14977         0xfcf60d2ea24ff7e6L } },
14978     /* 51 << 84 */
14979     { { 0x614a392d677819e1L,0x7be74c7eaa5a29e8L,0xab50fece63c85f3fL,
14980         0xaca2e2a946cab337L },
14981       { 0x7f700388122a6fe3L,0xdb69f703882a04a8L,0x9a77935dcf7aed57L,
14982         0xdf16207c8d91c86fL } },
14983     /* 52 << 84 */
14984     { { 0x2fca49ab63ed9998L,0xa3125c44a77ddf96L,0x05dd8a8624344072L,
14985         0xa023dda2fec3fb56L },
14986       { 0x421b41fc0c743032L,0x4f2120c15e438639L,0xfb7cae51c83c1b07L,
14987         0xb2370caacac2171aL } },
14988     /* 53 << 84 */
14989     { { 0x2eb2d9626cc820fbL,0x59feee5cb85a44bfL,0x94620fca5b6598f0L,
14990         0x6b922cae7e314051L },
14991       { 0xff8745ad106bed4eL,0x546e71f5dfa1e9abL,0x935c1e481ec29487L,
14992         0x9509216c4d936530L } },
14993     /* 54 << 84 */
14994     { { 0xc7ca306785c9a2dbL,0xd6ae51526be8606fL,0x09dbcae6e14c651dL,
14995         0xc9536e239bc32f96L },
14996       { 0xa90535a934521b03L,0xf39c526c878756ffL,0x383172ec8aedf03cL,
14997         0x20a8075eefe0c034L } },
14998     /* 55 << 84 */
14999     { { 0xf22f9c6264026422L,0x8dd1078024b9d076L,0x944c742a3bef2950L,
15000         0x55b9502e88a2b00bL },
15001       { 0xa59e14b486a09817L,0xa39dd3ac47bb4071L,0x55137f663be0592fL,
15002         0x07fcafd4c9e63f5bL } },
15003     /* 56 << 84 */
15004     { { 0x963652ee346eb226L,0x7dfab085ec2facb7L,0x273bf2b8691add26L,
15005         0x30d74540f2b46c44L },
15006       { 0x05e8e73ef2c2d065L,0xff9b8a00d42eeac9L,0x2fcbd20597209d22L,
15007         0xeb740ffade14ea2cL } },
15008     /* 57 << 84 */
15009     { { 0xc71ff913a8aef518L,0x7bfc74bbfff4cfa2L,0x1716680cb6b36048L,
15010         0x121b2cce9ef79af1L },
15011       { 0xbff3c836a01eb3d3L,0x50eb1c6a5f79077bL,0xa48c32d6a004bbcfL,
15012         0x47a593167d64f61dL } },
15013     /* 58 << 84 */
15014     { { 0x6068147f93102016L,0x12c5f65494d12576L,0xefb071a7c9bc6b91L,
15015         0x7c2da0c56e23ea95L },
15016       { 0xf4fd45b6d4a1dd5dL,0x3e7ad9b69122b13cL,0x342ca118e6f57a48L,
15017         0x1c2e94a706f8288fL } },
15018     /* 59 << 84 */
15019     { { 0x99e68f075a97d231L,0x7c80de974d838758L,0xbce0f5d005872727L,
15020         0xbe5d95c219c4d016L },
15021       { 0x921d5cb19c2492eeL,0x42192dc1404d6fb3L,0x4c84dcd132f988d3L,
15022         0xde26d61fa17b8e85L } },
15023     /* 60 << 84 */
15024     { { 0xc466dcb6137c7408L,0x9a38d7b636a266daL,0x7ef5cb0683bebf1bL,
15025         0xe5cdcbbf0fd014e3L },
15026       { 0x30aa376df65965a0L,0x60fe88c2ebb3e95eL,0x33fd0b6166ee6f20L,
15027         0x8827dcdb3f41f0a0L } },
15028     /* 61 << 84 */
15029     { { 0xbf8a9d240c56c690L,0x40265dadddb7641dL,0x522b05bf3a6b662bL,
15030         0x466d1dfeb1478c9bL },
15031       { 0xaa6169621484469bL,0x0db6054902df8f9fL,0xc37bca023cb8bf51L,
15032         0x5effe34621371ce8L } },
15033     /* 62 << 84 */
15034     { { 0xe8f65264ff112c32L,0x8a9c736d7b971fb2L,0xa4f194707b75080dL,
15035         0xfc3f2c5a8839c59bL },
15036       { 0x1d6c777e5aeb49c2L,0xf3db034dda1addfeL,0xd76fee5a5535affcL,
15037         0x0853ac70b92251fdL } },
15038     /* 63 << 84 */
15039     { { 0x37e3d5948b2a29d5L,0x28f1f4574de00ddbL,0x8083c1b5f42c328bL,
15040         0xd8ef1d8fe493c73bL },
15041       { 0x96fb626041dc61bdL,0xf74e8a9d27ee2f8aL,0x7c605a802c946a5dL,
15042         0xeed48d653839ccfdL } },
15043     /* 64 << 84 */
15044     { { 0x9894344f3a29467aL,0xde81e949c51eba6dL,0xdaea066ba5e5c2f2L,
15045         0x3fc8a61408c8c7b3L },
15046       { 0x7adff88f06d0de9fL,0xbbc11cf53b75ce0aL,0x9fbb7accfbbc87d5L,
15047         0xa1458e267badfde2L } },
15048     /* 0 << 91 */
15049     { { 0x00, 0x00, 0x00, 0x00 },
15050       { 0x00, 0x00, 0x00, 0x00 } },
15051     /* 1 << 91 */
15052     { { 0x1cb43668e039c256L,0x5f26fb8b7c17fd5dL,0xeee426af79aa062bL,
15053         0x072002d0d78fbf04L },
15054       { 0x4c9ca237e84fb7e3L,0xb401d8a10c82133dL,0xaaa525926d7e4181L,
15055         0xe943083373dbb152L } },
15056     /* 2 << 91 */
15057     { { 0xf92dda31be24319aL,0x03f7d28be095a8e7L,0xa52fe84098782185L,
15058         0x276ddafe29c24dbcL },
15059       { 0x80cd54961d7a64ebL,0xe43608897f1dbe42L,0x2f81a8778438d2d5L,
15060         0x7e4d52a885169036L } },
15061     /* 3 << 91 */
15062     { { 0x19e3d5b11d59715dL,0xc7eaa762d788983eL,0xe5a730b0abf1f248L,
15063         0xfbab8084fae3fd83L },
15064       { 0x65e50d2153765b2fL,0xbdd4e083fa127f3dL,0x9cf3c074397b1b10L,
15065         0x59f8090cb1b59fd3L } },
15066     /* 4 << 91 */
15067     { { 0x7b15fd9d615faa8fL,0x8fa1eb40968554edL,0x7bb4447e7aa44882L,
15068         0x2bb2d0d1029fff32L },
15069       { 0x075e2a646caa6d2fL,0x8eb879de22e7351bL,0xbcd5624e9a506c62L,
15070         0x218eaef0a87e24dcL } },
15071     /* 5 << 91 */
15072     { { 0x37e5684744ddfa35L,0x9ccfc5c5dab3f747L,0x9ac1df3f1ee96cf4L,
15073         0x0c0571a13b480b8fL },
15074       { 0x2fbeb3d54b3a7b3cL,0x35c036695dcdbb99L,0x52a0f5dcb2415b3aL,
15075         0xd57759b44413ed9aL } },
15076     /* 6 << 91 */
15077     { { 0x1fe647d83d30a2c5L,0x0857f77ef78a81dcL,0x11d5a334131a4a9bL,
15078         0xc0a94af929d393f5L },
15079       { 0xbc3a5c0bdaa6ec1aL,0xba9fe49388d2d7edL,0xbb4335b4bb614797L,
15080         0x991c4d6872f83533L } },
15081     /* 7 << 91 */
15082     { { 0x53258c28d2f01cb3L,0x93d6eaa3d75db0b1L,0x419a2b0de87d0db4L,
15083         0xa1e48f03d8fe8493L },
15084       { 0xf747faf6c508b23aL,0xf137571a35d53549L,0x9f5e58e2fcf9b838L,
15085         0xc7186ceea7fd3cf5L } },
15086     /* 8 << 91 */
15087     { { 0x77b868cee978a1d3L,0xe3a68b337ab92d04L,0x5102979487a5b862L,
15088         0x5f0606c33a61d41dL },
15089       { 0x2814be276f9326f1L,0x2f521c14c6fe3c2eL,0x17464d7dacdf7351L,
15090         0x10f5f9d3777f7e44L } },
15091     /* 9 << 91 */
15092     { { 0xce8e616b269fb37dL,0xaaf738047de62de5L,0xaba111754fdd4153L,
15093         0x515759ba3770b49bL },
15094       { 0x8b09ebf8aa423a61L,0x592245a1cd41fb92L,0x1cba8ec19b4c8936L,
15095         0xa87e91e3af36710eL } },
15096     /* 10 << 91 */
15097     { { 0x1fd84ce43d34a2e3L,0xee3759ceb43b5d61L,0x895bc78c619186c7L,
15098         0xf19c3809cbb9725aL },
15099       { 0xc0be21aade744b1fL,0xa7d222b060f8056bL,0x74be6157b23efe11L,
15100         0x6fab2b4f0cd68253L } },
15101     /* 11 << 91 */
15102     { { 0xad33ea5f4bf1d725L,0x9c1d8ee24f6c950fL,0x544ee78aa377af06L,
15103         0x54f489bb94a113e1L },
15104       { 0x8f11d634992fb7e8L,0x0169a7aaa2a44347L,0x1d49d4af95020e00L,
15105         0x95945722e08e120bL } },
15106     /* 12 << 91 */
15107     { { 0xb6e33878a4d32282L,0xe36e029d48020ae7L,0xe05847fb37a9b750L,
15108         0xf876812cb29e3819L },
15109       { 0x84ad138ed23a17f0L,0x6d7b4480f0b3950eL,0xdfa8aef42fd67ae0L,
15110         0x8d3eea2452333af6L } },
15111     /* 13 << 91 */
15112     { { 0x0d052075b15d5accL,0xc6d9c79fbd815bc4L,0x8dcafd88dfa36cf2L,
15113         0x908ccbe238aa9070L },
15114       { 0x638722c4ba35afceL,0x5a3da8b0fd6abf0bL,0x2dce252cc9c335c1L,
15115         0x84e7f0de65aa799bL } },
15116     /* 14 << 91 */
15117     { { 0x2101a522b99a72cbL,0x06de6e6787618016L,0x5ff8c7cde6f3653eL,
15118         0x0a821ab5c7a6754aL },
15119       { 0x7e3fa52b7cb0b5a2L,0xa7fb121cc9048790L,0x1a72502006ce053aL,
15120         0xb490a31f04e929b0L } },
15121     /* 15 << 91 */
15122     { { 0xe17be47d62dd61adL,0x781a961c6be01371L,0x1063bfd3dae3cbbaL,
15123         0x356474067f73c9baL },
15124       { 0xf50e957b2736a129L,0xa6313702ed13f256L,0x9436ee653a19fcc5L,
15125         0xcf2bdb29e7a4c8b6L } },
15126     /* 16 << 91 */
15127     { { 0xb06b1244c5f95cd8L,0xda8c8af0f4ab95f4L,0x1bae59c2b9e5836dL,
15128         0x07d51e7e3acffffcL },
15129       { 0x01e15e6ac2ccbcdaL,0x3bc1923f8528c3e0L,0x43324577a49fead4L,
15130         0x61a1b8842aa7a711L } },
15131     /* 17 << 91 */
15132     { { 0xf9a86e08700230efL,0x0af585a1bd19adf8L,0x7645f361f55ad8f2L,
15133         0x6e67622346c3614cL },
15134       { 0x23cb257c4e774d3fL,0x82a38513ac102d1bL,0x9bcddd887b126aa5L,
15135         0xe716998beefd3ee4L } },
15136     /* 18 << 91 */
15137     { { 0x4239d571fb167583L,0xdd011c78d16c8f8aL,0x271c289569a27519L,
15138         0x9ce0a3b7d2d64b6aL },
15139       { 0x8c977289d5ec6738L,0xa3b49f9a8840ef6bL,0x808c14c99a453419L,
15140         0x5c00295b0cf0a2d5L } },
15141     /* 19 << 91 */
15142     { { 0x524414fb1d4bcc76L,0xb07691d2459a88f1L,0x77f43263f70d110fL,
15143         0x64ada5e0b7abf9f3L },
15144       { 0xafd0f94e5b544cf5L,0xb4a13a15fd2713feL,0xb99b7d6e250c74f4L,
15145         0x097f2f7320324e45L } },
15146     /* 20 << 91 */
15147     { { 0x994b37d8affa8208L,0xc3c31b0bdc29aafcL,0x3da746517a3a607fL,
15148         0xd8e1b8c1fe6955d6L },
15149       { 0x716e1815c8418682L,0x541d487f7dc91d97L,0x48a04669c6996982L,
15150         0xf39cab1583a6502eL } },
15151     /* 21 << 91 */
15152     { { 0x025801a0e68db055L,0xf3569758ba3338d5L,0xb0c8c0aaee2afa84L,
15153         0x4f6985d3fb6562d1L },
15154       { 0x351f1f15132ed17aL,0x510ed0b4c04365feL,0xa3f98138e5b1f066L,
15155         0xbc9d95d632df03dcL } },
15156     /* 22 << 91 */
15157     { { 0xa83ccf6e19abd09eL,0x0b4097c14ff17edbL,0x58a5c478d64a06ceL,
15158         0x2ddcc3fd544a58fdL },
15159       { 0xd449503d9e8153b8L,0x3324fd027774179bL,0xaf5d47c8dbd9120cL,
15160         0xeb86016234fa94dbL } },
15161     /* 23 << 91 */
15162     { { 0x5817bdd1972f07f4L,0xe5579e2ed27bbcebL,0x86847a1f5f11e5a6L,
15163         0xb39ed2557c3cf048L },
15164       { 0xe1076417a2f62e55L,0x6b9ab38f1bcf82a2L,0x4bb7c3197aeb29f9L,
15165         0xf6d17da317227a46L } },
15166     /* 24 << 91 */
15167     { { 0xab53ddbd0f968c00L,0xa03da7ec000c880bL,0x7b2396246a9ad24dL,
15168         0x612c040101ec60d0L },
15169       { 0x70d10493109f5df1L,0xfbda403080af7550L,0x30b93f95c6b9a9b3L,
15170         0x0c74ec71007d9418L } },
15171     /* 25 << 91 */
15172     { { 0x941755646edb951fL,0x5f4a9d787f22c282L,0xb7870895b38d1196L,
15173         0xbc593df3a228ce7cL },
15174       { 0xc78c5bd46af3641aL,0x7802200b3d9b3dccL,0x0dc73f328be33304L,
15175         0x847ed87d61ffb79aL } },
15176     /* 26 << 91 */
15177     { { 0xf85c974e6d671192L,0x1e14100ade16f60fL,0x45cb0d5a95c38797L,
15178         0x18923bba9b022da4L },
15179       { 0xef2be899bbe7e86eL,0x4a1510ee216067bfL,0xd98c815484d5ce3eL,
15180         0x1af777f0f92a2b90L } },
15181     /* 27 << 91 */
15182     { { 0x9fbcb4004ef65724L,0x3e04a4c93c0ca6feL,0xfb3e2cb555002994L,
15183         0x1f3a93c55363ecabL },
15184       { 0x1fe00efe3923555bL,0x744bedd91e1751eaL,0x3fb2db596ab69357L,
15185         0x8dbd7365f5e6618bL } },
15186     /* 28 << 91 */
15187     { { 0x99d53099df1ea40eL,0xb3f24a0b57d61e64L,0xd088a198596eb812L,
15188         0x22c8361b5762940bL },
15189       { 0x66f01f97f9c0d95cL,0x884611728e43cdaeL,0x11599a7fb72b15c3L,
15190         0x135a7536420d95ccL } },
15191     /* 29 << 91 */
15192     { { 0x2dcdf0f75f7ae2f6L,0x15fc6e1dd7fa6da2L,0x81ca829ad1d441b6L,
15193         0x84c10cf804a106b6L },
15194       { 0xa9b26c95a73fbbd0L,0x7f24e0cb4d8f6ee8L,0x48b459371e25a043L,
15195         0xf8a74fca036f3dfeL } },
15196     /* 30 << 91 */
15197     { { 0x1ed46585c9f84296L,0x7fbaa8fb3bc278b0L,0xa8e96cd46c4fcbd0L,
15198         0x940a120273b60a5fL },
15199       { 0x34aae12055a4aec8L,0x550e9a74dbd742f0L,0x794456d7228c68abL,
15200         0x492f8868a4e25ec6L } },
15201     /* 31 << 91 */
15202     { { 0x682915adb2d8f398L,0xf13b51cc5b84c953L,0xcda90ab85bb917d6L,
15203         0x4b6155604ea3dee1L },
15204       { 0x578b4e850a52c1c8L,0xeab1a69520b75fc4L,0x60c14f3caa0bb3c6L,
15205         0x220f448ab8216094L } },
15206     /* 32 << 91 */
15207     { { 0x4fe7ee31b0e63d34L,0xf4600572a9e54fabL,0xc0493334d5e7b5a4L,
15208         0x8589fb9206d54831L },
15209       { 0xaa70f5cc6583553aL,0x0879094ae25649e5L,0xcc90450710044652L,
15210         0xebb0696d02541c4fL } },
15211     /* 33 << 91 */
15212     { { 0x5a171fdeb9718710L,0x38f1bed8f374a9f5L,0xc8c582e1ba39bdc1L,
15213         0xfc457b0a908cc0ceL },
15214       { 0x9a187fd4883841e2L,0x8ec25b3938725381L,0x2553ed0596f84395L,
15215         0x095c76616f6c6897L } },
15216     /* 34 << 91 */
15217     { { 0x917ac85c4bdc5610L,0xb2885fe4179eb301L,0x5fc655478b78bdccL,
15218         0x4a9fc893e59e4699L },
15219       { 0xbb7ff0cd3ce299afL,0x195be9b3adf38b20L,0x6a929c87d38ddb8fL,
15220         0x55fcc99cb21a51b9L } },
15221     /* 35 << 91 */
15222     { { 0x2b695b4c721a4593L,0xed1e9a15768eaac2L,0xfb63d71c7489f914L,
15223         0xf98ba31c78118910L },
15224       { 0x802913739b128eb4L,0x7801214ed448af4aL,0xdbd2e22b55418dd3L,
15225         0xeffb3c0dd3998242L } },
15226     /* 36 << 91 */
15227     { { 0xdfa6077cc7bf3827L,0xf2165bcb47f8238fL,0xfe37cf688564d554L,
15228         0xe5f825c40a81fb98L },
15229       { 0x43cc4f67ffed4d6fL,0xbc609578b50a34b0L,0x8aa8fcf95041faf1L,
15230         0x5659f053651773b6L } },
15231     /* 37 << 91 */
15232     { { 0xe87582c36044d63bL,0xa60894090cdb0ca0L,0x8c993e0fbfb2bcf6L,
15233         0xfc64a71945985cfcL },
15234       { 0x15c4da8083dbedbaL,0x804ae1122be67df7L,0xda4c9658a23defdeL,
15235         0x12002ddd5156e0d3L } },
15236     /* 38 << 91 */
15237     { { 0xe68eae895dd21b96L,0x8b99f28bcf44624dL,0x0ae008081ec8897aL,
15238         0xdd0a93036712f76eL },
15239       { 0x962375224e233de4L,0x192445b12b36a8a5L,0xabf9ff74023993d9L,
15240         0x21f37bf42aad4a8fL } },
15241     /* 39 << 91 */
15242     { { 0x340a4349f8bd2bbdL,0x1d902cd94868195dL,0x3d27bbf1e5fdb6f1L,
15243         0x7a5ab088124f9f1cL },
15244       { 0xc466ab06f7a09e03L,0x2f8a197731f2c123L,0xda355dc7041b6657L,
15245         0xcb840d128ece2a7cL } },
15246     /* 40 << 91 */
15247     { { 0xb600ad9f7db32675L,0x78fea13307a06f1bL,0x5d032269b31f6094L,
15248         0x07753ef583ec37aaL },
15249       { 0x03485aed9c0bea78L,0x41bb3989bc3f4524L,0x09403761697f726dL,
15250         0x6109beb3df394820L } },
15251     /* 41 << 91 */
15252     { { 0x804111ea3b6d1145L,0xb6271ea9a8582654L,0x619615e624e66562L,
15253         0xa2554945d7b6ad9cL },
15254       { 0xd9c4985e99bfe35fL,0x9770ccc07b51cdf6L,0x7c32701392881832L,
15255         0x8777d45f286b26d1L } },
15256     /* 42 << 91 */
15257     { { 0x9bbeda22d847999dL,0x03aa33b6c3525d32L,0x4b7b96d428a959a1L,
15258         0xbb3786e531e5d234L },
15259       { 0xaeb5d3ce6961f247L,0x20aa85af02f93d3fL,0x9cd1ad3dd7a7ae4fL,
15260         0xbf6688f0781adaa8L } },
15261     /* 43 << 91 */
15262     { { 0xb1b40e867469ceadL,0x1904c524309fca48L,0x9b7312af4b54bbc7L,
15263         0xbe24bf8f593affa2L },
15264       { 0xbe5e0790bd98764bL,0xa0f45f17a26e299eL,0x4af0d2c26b8fe4c7L,
15265         0xef170db18ae8a3e6L } },
15266     /* 44 << 91 */
15267     { { 0x0e8d61a029e0ccc1L,0xcd53e87e60ad36caL,0x328c6623c8173822L,
15268         0x7ee1767da496be55L },
15269       { 0x89f13259648945afL,0x9e45a5fd25c8009cL,0xaf2febd91f61ab8cL,
15270         0x43f6bc868a275385L } },
15271     /* 45 << 91 */
15272     { { 0x87792348f2142e79L,0x17d89259c6e6238aL,0x7536d2f64a839d9bL,
15273         0x1f428fce76a1fbdcL },
15274       { 0x1c1096010db06dfeL,0xbfc16bc150a3a3ccL,0xf9cbd9ec9b30f41bL,
15275         0x5b5da0d600138cceL } },
15276     /* 46 << 91 */
15277     { { 0xec1d0a4856ef96a7L,0xb47eb848982bf842L,0x66deae32ec3f700dL,
15278         0x4e43c42caa1181e0L },
15279       { 0xa1d72a31d1a4aa2aL,0x440d4668c004f3ceL,0x0d6a2d3b45fe8a7aL,
15280         0x820e52e2fb128365L } },
15281     /* 47 << 91 */
15282     { { 0x29ac5fcf25e51b09L,0x180cd2bf2023d159L,0xa9892171a1ebf90eL,
15283         0xf97c4c877c132181L },
15284       { 0x9f1dc724c03dbb7eL,0xae043765018cbbe4L,0xfb0b2a360767d153L,
15285         0xa8e2f4d6249cbaebL } },
15286     /* 48 << 91 */
15287     { { 0x172a5247d95ea168L,0x1758fada2970764aL,0xac803a511d978169L,
15288         0x299cfe2ede77e01bL },
15289       { 0x652a1e17b0a98927L,0x2e26e1d120014495L,0x7ae0af9f7175b56aL,
15290         0xc2e22a80d64b9f95L } },
15291     /* 49 << 91 */
15292     { { 0x4d0ff9fbd90a060aL,0x496a27dbbaf38085L,0x32305401da776bcfL,
15293         0xb8cdcef6725f209eL },
15294       { 0x61ba0f37436a0bbaL,0x263fa10876860049L,0x92beb98eda3542cfL,
15295         0xa2d4d14ad5849538L } },
15296     /* 50 << 91 */
15297     { { 0x989b9d6812e9a1bcL,0x61d9075c5f6e3268L,0x352c6aa999ace638L,
15298         0xde4e4a55920f43ffL },
15299       { 0xe5e4144ad673c017L,0x667417ae6f6e05eaL,0x613416aedcd1bd56L,
15300         0x5eb3620186693711L } },
15301     /* 51 << 91 */
15302     { { 0x2d7bc5043a1aa914L,0x175a129976dc5975L,0xe900e0f23fc8125cL,
15303         0x569ef68c11198875L },
15304       { 0x9012db6363a113b4L,0xe3bd3f5698835766L,0xa5c94a5276412deaL,
15305         0xad9e2a09aa735e5cL } },
15306     /* 52 << 91 */
15307     { { 0x405a984c508b65e9L,0xbde4a1d16df1a0d1L,0x1a9433a1dfba80daL,
15308         0xe9192ff99440ad2eL },
15309       { 0x9f6496965099fe92L,0x25ddb65c0b27a54aL,0x178279ddc590da61L,
15310         0x5479a999fbde681aL } },
15311     /* 53 << 91 */
15312     { { 0xd0e84e05013fe162L,0xbe11dc92632d471bL,0xdf0b0c45fc0e089fL,
15313         0x04fb15b04c144025L },
15314       { 0xa61d5fc213c99927L,0xa033e9e03de2eb35L,0xf8185d5cb8dacbb4L,
15315         0x9a88e2658644549dL } },
15316     /* 54 << 91 */
15317     { { 0xf717af6254671ff6L,0x4bd4241b5fa58603L,0x06fba40be67773c0L,
15318         0xc1d933d26a2847e9L },
15319       { 0xf4f5acf3689e2c70L,0x92aab0e746bafd31L,0x798d76aa3473f6e5L,
15320         0xcc6641db93141934L } },
15321     /* 55 << 91 */
15322     { { 0xcae27757d31e535eL,0x04cc43b687c2ee11L,0x8d1f96752e029ffaL,
15323         0xc2150672e4cc7a2cL },
15324       { 0x3b03c1e08d68b013L,0xa9d6816fedf298f3L,0x1bfbb529a2804464L,
15325         0x95a52fae5db22125L } },
15326     /* 56 << 91 */
15327     { { 0x55b321600e1cb64eL,0x004828f67e7fc9feL,0x13394b821bb0fb93L,
15328         0xb6293a2d35f1a920L },
15329       { 0xde35ef21d145d2d9L,0xbe6225b3bb8fa603L,0x00fc8f6b32cf252dL,
15330         0xa28e52e6117cf8c2L } },
15331     /* 57 << 91 */
15332     { { 0x9d1dc89b4c371e6dL,0xcebe067536ef0f28L,0x5de05d09a4292f81L,
15333         0xa8303593353e3083L },
15334       { 0xa1715b0a7e37a9bbL,0x8c56f61e2b8faec3L,0x5250743133c9b102L,
15335         0x0130cefca44431f0L } },
15336     /* 58 << 91 */
15337     { { 0x56039fa0bd865cfbL,0x4b03e578bc5f1dd7L,0x40edf2e4babe7224L,
15338         0xc752496d3a1988f6L },
15339       { 0xd1572d3b564beb6bL,0x0db1d11039a1c608L,0x568d193416f60126L,
15340         0x05ae9668f354af33L } },
15341     /* 59 << 91 */
15342     { { 0x19de6d37c92544f2L,0xcc084353a35837d5L,0xcbb6869c1a514eceL,
15343         0xb633e7282e1d1066L },
15344       { 0xf15dd69f936c581cL,0x96e7b8ce7439c4f9L,0x5e676f482e448a5bL,
15345         0xb2ca7d5bfd916bbbL } },
15346     /* 60 << 91 */
15347     { { 0xd55a2541f5024025L,0x47bc5769e4c2d937L,0x7d31b92a0362189fL,
15348         0x83f3086eef7816f9L },
15349       { 0xf9f46d94b587579aL,0xec2d22d830e76c5fL,0x27d57461b000ffcfL,
15350         0xbb7e65f9364ffc2cL } },
15351     /* 61 << 91 */
15352     { { 0x7c7c94776652a220L,0x61618f89d696c981L,0x5021701d89effff3L,
15353         0xf2c8ff8e7c314163L },
15354       { 0x2da413ad8efb4d3eL,0x937b5adfce176d95L,0x22867d342a67d51cL,
15355         0x262b9b1018eb3ac9L } },
15356     /* 62 << 91 */
15357     { { 0x4e314fe4c43ff28bL,0x764766276a664e7aL,0x3e90e40bb7a565c2L,
15358         0x8588993ac1acf831L },
15359       { 0xd7b501d68f938829L,0x996627ee3edd7d4cL,0x37d44a6290cd34c7L,
15360         0xa8327499f3833e8dL } },
15361     /* 63 << 91 */
15362     { { 0x2e18917d4bf50353L,0x85dd726b556765fbL,0x54fe65d693d5ab66L,
15363         0x3ddbaced915c25feL },
15364       { 0xa799d9a412f22e85L,0xe2a248676d06f6bcL,0xf4f1ee5643ca1637L,
15365         0xfda2828b61ece30aL } },
15366     /* 64 << 91 */
15367     { { 0x758c1a3ea2dee7a6L,0xdcde2f3c734b2284L,0xaba445d24eaba6adL,
15368         0x35aaf66876cee0a7L },
15369       { 0x7e0b04a9e5aa049aL,0xe74083ad91103e84L,0xbeb183ce40afecc3L,
15370         0x6b89de9fea043f7aL } },
15371     /* 0 << 98 */
15372     { { 0x00, 0x00, 0x00, 0x00 },
15373       { 0x00, 0x00, 0x00, 0x00 } },
15374     /* 1 << 98 */
15375     { { 0x0e299d23fe67ba66L,0x9145076093cf2f34L,0xf45b5ea997fcf913L,
15376         0x5be008438bd7dddaL },
15377       { 0x358c3e05d53ff04dL,0xbf7ccdc35de91ef7L,0xad684dbfb69ec1a0L,
15378         0x367e7cf2801fd997L } },
15379     /* 2 << 98 */
15380     { { 0x0ca1f3b7b0dc8595L,0x27de46089f1d9f2eL,0x1af3bf39badd82a7L,
15381         0x79356a7965862448L },
15382       { 0xc0602345f5f9a052L,0x1a8b0f89139a42f9L,0xb53eee42844d40fcL,
15383         0x93b0bfe54e5b6368L } },
15384     /* 3 << 98 */
15385     { { 0x5434dd02c024789cL,0x90dca9ea41b57bfcL,0x8aa898e2243398dfL,
15386         0xf607c834894a94bbL },
15387       { 0xbb07be97c2c99b76L,0x6576ba6718c29302L,0x3d79efcce703a88cL,
15388         0xf259ced7b6a0d106L } },
15389     /* 4 << 98 */
15390     { { 0x0f893a5dc8de610bL,0xe8c515fb67e223ceL,0x7774bfa64ead6dc5L,
15391         0x89d20f95925c728fL },
15392       { 0x7a1e0966098583ceL,0xa2eedb9493f2a7d7L,0x1b2820974c304d4aL,
15393         0x0842e3dac077282dL } },
15394     /* 5 << 98 */
15395     { { 0xe4d972a33b9e2d7bL,0x7cc60b27c48218ffL,0x8fc7083884149d91L,
15396         0x5c04346f2f461eccL },
15397       { 0xebe9fdf2614650a9L,0x5e35b537c1f666acL,0x645613d188babc83L,
15398         0x88cace3ac5e1c93eL } },
15399     /* 6 << 98 */
15400     { { 0x209ca3753de92e23L,0xccb03cc85fbbb6e3L,0xccb90f03d7b1487eL,
15401         0xfa9c2a38c710941fL },
15402       { 0x756c38236724ceedL,0x3a902258192d0323L,0xb150e519ea5e038eL,
15403         0xdcba2865c7427591L } },
15404     /* 7 << 98 */
15405     { { 0xe549237f78890732L,0xc443bef953fcb4d9L,0x9884d8a6eb3480d6L,
15406         0x8a35b6a13048b186L },
15407       { 0xb4e4471665e9a90aL,0x45bf380d653006c0L,0x8f3f820d4fe9ae3bL,
15408         0x244a35a0979a3b71L } },
15409     /* 8 << 98 */
15410     { { 0xa1010e9d74cd06ffL,0x9c17c7dfaca3eeacL,0x74c86cd38063aa2bL,
15411         0x8595c4b3734614ffL },
15412       { 0xa3de00ca990f62ccL,0xd9bed213ca0c3be5L,0x7886078adf8ce9f5L,
15413         0xddb27ce35cd44444L } },
15414     /* 9 << 98 */
15415     { { 0xed374a6658926dddL,0x138b2d49908015b8L,0x886c6579de1f7ab8L,
15416         0x888b9aa0c3020b7aL },
15417       { 0xd3ec034e3a96e355L,0xba65b0b8f30fbe9aL,0x064c8e50ff21367aL,
15418         0x1f508ea40b04b46eL } },
15419     /* 10 << 98 */
15420     { { 0x98561a49747c866cL,0xbbb1e5fe0518a062L,0x20ff4e8becdc3608L,
15421         0x7f55cded20184027L },
15422       { 0x8d73ec95f38c85f0L,0x5b589fdf8bc3b8c3L,0xbe95dd980f12b66fL,
15423         0xf5bd1a090e338e01L } },
15424     /* 11 << 98 */
15425     { { 0x65163ae55e915918L,0x6158d6d986f8a46bL,0x8466b538eeebf99cL,
15426         0xca8761f6bca477efL },
15427       { 0xaf3449c29ebbc601L,0xef3b0f41e0c3ae2fL,0xaa6c577d5de63752L,
15428         0xe916660164682a51L } },
15429     /* 12 << 98 */
15430     { { 0x5a3097befc15aa1eL,0x40d12548b54b0745L,0x5bad4706519a5f12L,
15431         0xed03f717a439dee6L },
15432       { 0x0794bb6c4a02c499L,0xf725083dcffe71d2L,0x2cad75190f3adcafL,
15433         0x7f68ea1c43729310L } },
15434     /* 13 << 98 */
15435     { { 0xe747c8c7b7ffd977L,0xec104c3580761a22L,0x8395ebaf5a3ffb83L,
15436         0xfb3261f4e4b63db7L },
15437       { 0x53544960d883e544L,0x13520d708cc2eeb8L,0x08f6337bd3d65f99L,
15438         0x83997db2781cf95bL } },
15439     /* 14 << 98 */
15440     { { 0xce6ff1060dbd2c01L,0x4f8eea6b1f9ce934L,0x546f7c4b0e993921L,
15441         0x6236a3245e753fc7L },
15442       { 0x65a41f84a16022e9L,0x0c18d87843d1dbb2L,0x73c556402d4cef9cL,
15443         0xa042810870444c74L } },
15444     /* 15 << 98 */
15445     { { 0x68e4f15e9afdfb3cL,0x49a561435bdfb6dfL,0xa9bc1bd45f823d97L,
15446         0xbceb5970ea111c2aL },
15447       { 0x366b455fb269bbc4L,0x7cd85e1ee9bc5d62L,0xc743c41c4f18b086L,
15448         0xa4b4099095294fb9L } },
15449     /* 16 << 98 */
15450     { { 0x9c7c581d26ee8382L,0xcf17dcc5359d638eL,0xee8273abb728ae3dL,
15451         0x1d112926f821f047L },
15452       { 0x1149847750491a74L,0x687fa761fde0dfb9L,0x2c2580227ea435abL,
15453         0x6b8bdb9491ce7e3fL } },
15454     /* 17 << 98 */
15455     { { 0x4c5b5dc93bf834aaL,0x043718194f6c7e4bL,0xc284e00a3736bcadL,
15456         0x0d88111821ae8f8dL },
15457       { 0xf9cf0f82f48c8e33L,0xa11fd075a1bf40dbL,0xdceab0dedc2733e5L,
15458         0xc560a8b58e986bd7L } },
15459     /* 18 << 98 */
15460     { { 0x48dd1fe23929d097L,0x3885b29092f188f1L,0x0f2ae613da6fcdacL,
15461         0x9054303eb662a46cL },
15462       { 0xb6871e440738042aL,0x98e6a977bdaf6449L,0xd8bc0650d1c9df1bL,
15463         0xef3d645136e098f9L } },
15464     /* 19 << 98 */
15465     { { 0x03fbae82b6d72d28L,0x77ca9db1f5d84080L,0x8a112cffa58efc1cL,
15466         0x518d761cc564cb4aL },
15467       { 0x69b5740ef0d1b5ceL,0x717039cce9eb1785L,0x3fe29f9022f53382L,
15468         0x8e54ba566bc7c95cL } },
15469     /* 20 << 98 */
15470     { { 0x9c806d8af7f91d0fL,0x3b61b0f1a82a5728L,0x4640032d94d76754L,
15471         0x273eb5de47d834c6L },
15472       { 0x2988abf77b4e4d53L,0xb7ce66bfde401777L,0x9fba6b32715071b3L,
15473         0x82413c24ad3a1a98L } },
15474     /* 21 << 98 */
15475     { { 0x5b7fc8c4e0e8ad93L,0xb5679aee5fab868dL,0xb1f9d2fa2b3946f3L,
15476         0x458897dc5685b50aL },
15477       { 0x1e98c93089d0caf3L,0x39564c5f78642e92L,0x1b77729a0dbdaf18L,
15478         0xf9170722579e82e6L } },
15479     /* 22 << 98 */
15480     { { 0x680c0317e4515fa5L,0xf85cff84fb0c790fL,0xc7a82aab6d2e0765L,
15481         0x7446bca935c82b32L },
15482       { 0x5de607aa6d63184fL,0x7c1a46a8262803a6L,0xd218313daebe8035L,
15483         0x92113ffdc73c51f8L } },
15484     /* 23 << 98 */
15485     { { 0x4b38e08312e7e46cL,0x69d0a37a56126bd5L,0xfb3f324b73c07e04L,
15486         0xa0c22f678fda7267L },
15487       { 0x8f2c00514d2c7d8fL,0xbc45ced3cbe2cae5L,0xe1c6cf07a8f0f277L,
15488         0xbc3923121eb99a98L } },
15489     /* 24 << 98 */
15490     { { 0x75537b7e3cc8ac85L,0x8d725f57dd02753bL,0xfd05ff64b737df2fL,
15491         0x55fe8712f6d2531dL },
15492       { 0x57ce04a96ab6b01cL,0x69a02a897cd93724L,0x4f82ac35cf86699bL,
15493         0x8242d3ad9cb4b232L } },
15494     /* 25 << 98 */
15495     { { 0x713d0f65d62105e5L,0xbb222bfa2d29be61L,0xf2f9a79e6cfbef09L,
15496         0xfc24d8d3d5d6782fL },
15497       { 0x5db77085d4129967L,0xdb81c3ccdc3c2a43L,0x9d655fc005d8d9a3L,
15498         0x3f5d057a54298026L } },
15499     /* 26 << 98 */
15500     { { 0x1157f56d88c54694L,0xb26baba59b09573eL,0x2cab03b022adffd1L,
15501         0x60a412c8dd69f383L },
15502       { 0xed76e98b54b25039L,0xd4ee67d3687e714dL,0x877396487b00b594L,
15503         0xce419775c9ef709bL } },
15504     /* 27 << 98 */
15505     { { 0x40f76f851c203a40L,0x30d352d6eafd8f91L,0xaf196d3d95578dd2L,
15506         0xea4bb3d777cc3f3dL },
15507       { 0x42a5bd03b98e782bL,0xac958c400624920dL,0xb838134cfc56fcc8L,
15508         0x86ec4ccf89572e5eL } },
15509     /* 28 << 98 */
15510     { { 0x69c435269be47be0L,0x323b7dd8cb28fea1L,0xfa5538ba3a6c67e5L,
15511         0xef921d701d378e46L },
15512       { 0xf92961fc3c4b880eL,0x3f6f914e98940a67L,0xa990eb0afef0ff39L,
15513         0xa6c2920ff0eeff9cL } },
15514     /* 29 << 98 */
15515     { { 0xca80416651b8d9a3L,0x42531bc90ffb0db1L,0x72ce4718aa82e7ceL,
15516         0x6e199913df574741L },
15517       { 0xd5f1b13dd5d36946L,0x8255dc65f68f0194L,0xdc9df4cd8710d230L,
15518         0x3453c20f138c1988L } },
15519     /* 30 << 98 */
15520     { { 0x9af98dc089a6ef01L,0x4dbcc3f09857df85L,0x348056015c1ad924L,
15521         0x40448da5d0493046L },
15522       { 0xf629926d4ee343e2L,0x6343f1bd90e8a301L,0xefc9349140815b3fL,
15523         0xf882a423de8f66fbL } },
15524     /* 31 << 98 */
15525     { { 0x3a12d5f4e7db9f57L,0x7dfba38a3c384c27L,0x7a904bfd6fc660b1L,
15526         0xeb6c5db32773b21cL },
15527       { 0xc350ee661cdfe049L,0x9baac0ce44540f29L,0xbc57b6aba5ec6aadL,
15528         0x167ce8c30a7c1baaL } },
15529     /* 32 << 98 */
15530     { { 0xb23a03a553fb2b56L,0x6ce141e74e057f78L,0x796525c389e490d9L,
15531         0x0bc95725a31a7e75L },
15532       { 0x1ec567911220fd06L,0x716e3a3c408b0bd6L,0x31cd6bf7e8ebeba9L,
15533         0xa7326ca6bee6b670L } },
15534     /* 33 << 98 */
15535     { { 0x3d9f851ccd090c43L,0x561e8f13f12c3988L,0x50490b6a904b7be4L,
15536         0x61690ce10410737bL },
15537       { 0x299e9a370f009052L,0x258758f0f026092eL,0x9fa255f3fdfcdc0fL,
15538         0xdbc9fb1fc0e1bcd2L } },
15539     /* 34 << 98 */
15540     { { 0x35f9dd6e24651840L,0xdca45a84a5c59abcL,0x103d396fecca4938L,
15541         0x4532da0ab97b3f29L },
15542       { 0xc4135ea51999a6bfL,0x3aa9505a5e6bf2eeL,0xf77cef063f5be093L,
15543         0x97d1a0f8a943152eL } },
15544     /* 35 << 98 */
15545     { { 0x2cb0ebba2e1c21ddL,0xf41b29fc2c6797c4L,0xc6e17321b300101fL,
15546         0x4422b0e9d0d79a89L },
15547       { 0x49e4901c92f1bfc4L,0x06ab1f8fe1e10ed9L,0x84d35577db2926b8L,
15548         0xca349d39356e8ec2L } },
15549     /* 36 << 98 */
15550     { { 0x70b63d32343bf1a9L,0x8fd3bd2837d1a6b1L,0x0454879c316865b4L,
15551         0xee959ff6c458efa2L },
15552       { 0x0461dcf89706dc3fL,0x737db0e2164e4b2eL,0x092626802f8843c8L,
15553         0x54498bbc7745e6f6L } },
15554     /* 37 << 98 */
15555     { { 0x359473faa29e24afL,0xfcc3c45470aa87a1L,0xfd2c4bf500573aceL,
15556         0xb65b514e28dd1965L },
15557       { 0xe46ae7cf2193e393L,0x60e9a4e1f5444d97L,0xe7594e9600ff38edL,
15558         0x43d84d2f0a0e0f02L } },
15559     /* 38 << 98 */
15560     { { 0x8b6db141ee398a21L,0xb88a56aee3bcc5beL,0x0a1aa52f373460eaL,
15561         0x20da1a56160bb19bL },
15562       { 0xfb54999d65bf0384L,0x71a14d245d5a180eL,0xbc44db7b21737b04L,
15563         0xd84fcb1801dd8e92L } },
15564     /* 39 << 98 */
15565     { { 0x80de937bfa44b479L,0x535054995c98fd4fL,0x1edb12ab28f08727L,
15566         0x4c58b582a5f3ef53L },
15567       { 0xbfb236d88327f246L,0xc3a3bfaa4d7df320L,0xecd96c59b96024f2L,
15568         0xfc293a537f4e0433L } },
15569     /* 40 << 98 */
15570     { { 0x5341352b5acf6e10L,0xc50343fdafe652c3L,0x4af3792d18577a7fL,
15571         0xe1a4c617af16823dL },
15572       { 0x9b26d0cd33425d0aL,0x306399ed9b7bc47fL,0x2a792f33706bb20bL,
15573         0x3121961498111055L } },
15574     /* 41 << 98 */
15575     { { 0x864ec06487f5d28bL,0x11392d91962277fdL,0xb5aa7942bb6aed5fL,
15576         0x080094dc47e799d9L },
15577       { 0x4afa588c208ba19bL,0xd3e7570f8512f284L,0xcbae64e602f5799aL,
15578         0xdeebe7ef514b9492L } },
15579     /* 42 << 98 */
15580     { { 0x30300f98e5c298ffL,0x17f561be3678361fL,0xf52ff31298cb9a16L,
15581         0x6233c3bc5562d490L },
15582       { 0x7bfa15a192e3a2cbL,0x961bcfd1e6365119L,0x3bdd29bf2c8c53b1L,
15583         0x739704df822844baL } },
15584     /* 43 << 98 */
15585     { { 0x7dacfb587e7b754bL,0x23360791a806c9b9L,0xe7eb88c923504452L,
15586         0x2983e996852c1783L },
15587       { 0xdd4ae529958d881dL,0x026bae03262c7b3cL,0x3a6f9193960b52d1L,
15588         0xd0980f9092696cfbL } },
15589     /* 44 << 98 */
15590     { { 0x4c1f428cd5f30851L,0x94dfed272a4f6630L,0x4df53772fc5d48a4L,
15591         0xdd2d5a2f933260ceL },
15592       { 0x574115bdd44cc7a5L,0x4ba6b20dbd12533aL,0x30e93cb8243057c9L,
15593         0x794c486a14de320eL } },
15594     /* 45 << 98 */
15595     { { 0xe925d4cef21496e4L,0xf951d198ec696331L,0x9810e2de3e8d812fL,
15596         0xd0a47259389294abL },
15597       { 0x513ba2b50e3bab66L,0x462caff5abad306fL,0xe2dc6d59af04c49eL,
15598         0x1aeb8750e0b84b0bL } },
15599     /* 46 << 98 */
15600     { { 0xc034f12f2f7d0ca2L,0x6d2e8128e06acf2fL,0x801f4f8321facc2fL,
15601         0xa1170c03f40ef607L },
15602       { 0xfe0a1d4f7805a99cL,0xbde56a36cc26aba5L,0x5b1629d035531f40L,
15603         0xac212c2b9afa6108L } },
15604     /* 47 << 98 */
15605     { { 0x30a06bf315697be5L,0x6f0545dc2c63c7c1L,0x5d8cb8427ccdadafL,
15606         0xd52e379bac7015bbL },
15607       { 0xc4f56147f462c23eL,0xd44a429846bc24b0L,0xbc73d23ae2856d4fL,
15608         0x61cedd8c0832bcdfL } },
15609     /* 48 << 98 */
15610     { { 0x6095355699f241d7L,0xee4adbd7001a349dL,0x0b35bf6aaa89e491L,
15611         0x7f0076f4136f7546L },
15612       { 0xd19a18ba9264da3dL,0x6eb2d2cd62a7a28bL,0xcdba941f8761c971L,
15613         0x1550518ba3be4a5dL } },
15614     /* 49 << 98 */
15615     { { 0xd0e8e2f057d0b70cL,0xeea8612ecd133ba3L,0x814670f044416aecL,
15616         0x424db6c330775061L },
15617       { 0xd96039d116213fd1L,0xc61e7fa518a3478fL,0xa805bdcccb0c5021L,
15618         0xbdd6f3a80cc616ddL } },
15619     /* 50 << 98 */
15620     { { 0x060096675d97f7e2L,0x31db0fc1af0bf4b6L,0x23680ed45491627aL,
15621         0xb99a3c667d741fb1L },
15622       { 0xe9bb5f5536b1ff92L,0x29738577512b388dL,0xdb8a2ce750fcf263L,
15623         0x385346d46c4f7b47L } },
15624     /* 51 << 98 */
15625     { { 0xbe86c5ef31631f9eL,0xbf91da2103a57a29L,0xc3b1f7967b23f821L,
15626         0x0f7d00d2770db354L },
15627       { 0x8ffc6c3bd8fe79daL,0xcc5e8c40d525c996L,0x4640991dcfff632aL,
15628         0x64d97e8c67112528L } },
15629     /* 52 << 98 */
15630     { { 0xc232d97302f1cd1eL,0xce87eacb1dd212a4L,0x6e4c8c73e69802f7L,
15631         0x12ef02901fffddbdL },
15632       { 0x941ec74e1bcea6e2L,0xd0b540243cb92cbbL,0x809fb9d47e8f9d05L,
15633         0x3bf16159f2992aaeL } },
15634     /* 53 << 98 */
15635     { { 0xad40f279f8a7a838L,0x11aea63105615660L,0xbf52e6f1a01f6fa1L,
15636         0xef0469953dc2aec9L },
15637       { 0x785dbec9d8080711L,0xe1aec60a9fdedf76L,0xece797b5fa21c126L,
15638         0xc66e898f05e52732L } },
15639     /* 54 << 98 */
15640     { { 0x39bb69c408811fdbL,0x8bfe1ef82fc7f082L,0xc8e7a393174f4138L,
15641         0xfba8ad1dd58d1f98L },
15642       { 0xbc21d0cebfd2fd5bL,0x0b839a826ee60d61L,0xaacf7658afd22253L,
15643         0xb526bed8aae396b3L } },
15644     /* 55 << 98 */
15645     { { 0xccc1bbc238564464L,0x9e3ff9478c45bc73L,0xcde9bca358188a78L,
15646         0x138b8ee0d73bf8f7L },
15647       { 0x5c7e234c4123c489L,0x66e69368fa643297L,0x0629eeee39a15fa3L,
15648         0x95fab881a9e2a927L } },
15649     /* 56 << 98 */
15650     { { 0xb2497007eafbb1e1L,0xd75c9ce6e75b7a93L,0x3558352defb68d78L,
15651         0xa2f26699223f6396L },
15652       { 0xeb911ecfe469b17aL,0x62545779e72d3ec2L,0x8ea47de782cb113fL,
15653         0xebe4b0864e1fa98dL } },
15654     /* 57 << 98 */
15655     { { 0xec2d5ed78cdfedb1L,0xa535c077fe211a74L,0x9678109b11d244c5L,
15656         0xf17c8bfbbe299a76L },
15657       { 0xb651412efb11fbc4L,0xea0b548294ab3f65L,0xd8dffd950cf78243L,
15658         0x2e719e57ce0361d4L } },
15659     /* 58 << 98 */
15660     { { 0x9007f085304ddc5bL,0x095e8c6d4daba2eaL,0x5a33cdb43f9d28a9L,
15661         0x85b95cd8e2283003L },
15662       { 0xbcd6c819b9744733L,0x29c5f538fc7f5783L,0x6c49b2fad59038e4L,
15663         0x68349cc13bbe1018L } },
15664     /* 59 << 98 */
15665     { { 0xcc490c1d21830ee5L,0x36f9c4eee9bfa297L,0x58fd729448de1a94L,
15666         0xaadb13a84e8f2cdcL },
15667       { 0x515eaaa081313dbaL,0xc76bb468c2152dd8L,0x357f8d75a653dbf8L,
15668         0xe4d8c4d1b14ac143L } },
15669     /* 60 << 98 */
15670     { { 0xbdb8e675b055cb40L,0x898f8e7b977b5167L,0xecc65651b82fb863L,
15671         0x565448146d88f01fL },
15672       { 0xb0928e95263a75a9L,0xcfb6836f1a22fcdaL,0x651d14db3f3bd37cL,
15673         0x1d3837fbb6ad4664L } },
15674     /* 61 << 98 */
15675     { { 0x7c5fb538ff4f94abL,0x7243c7126d7fb8f2L,0xef13d60ca85c5287L,
15676         0x18cfb7c74bb8dd1bL },
15677       { 0x82f9bfe672908219L,0x35c4592b9d5144abL,0x52734f379cf4b42fL,
15678         0x6bac55e78c60ddc4L } },
15679     /* 62 << 98 */
15680     { { 0xb5cd811e94dea0f6L,0x259ecae4e18cc1a3L,0x6a0e836e15e660f8L,
15681         0x6c639ea60e02bff2L },
15682       { 0x8721b8cb7e1026fdL,0x9e73b50b63261942L,0xb8c7097477f01da3L,
15683         0x1839e6a68268f57fL } },
15684     /* 63 << 98 */
15685     { { 0x571b94155150b805L,0x1892389ef92c7097L,0x8d69c18e4a084b95L,
15686         0x7014c512be5b495cL },
15687       { 0x4780db361b07523cL,0x2f6219ce2c1c64faL,0xc38b81b0602c105aL,
15688         0xab4f4f205dc8e360L } },
15689     /* 64 << 98 */
15690     { { 0x20d3c982cf7d62d2L,0x1f36e29d23ba8150L,0x48ae0bf092763f9eL,
15691         0x7a527e6b1d3a7007L },
15692       { 0xb4a89097581a85e3L,0x1f1a520fdc158be5L,0xf98db37d167d726eL,
15693         0x8802786e1113e862L } },
15694     /* 0 << 105 */
15695     { { 0x00, 0x00, 0x00, 0x00 },
15696       { 0x00, 0x00, 0x00, 0x00 } },
15697     /* 1 << 105 */
15698     { { 0xefb2149e36f09ab0L,0x03f163ca4a10bb5bL,0xd029704506e20998L,
15699         0x56f0af001b5a3babL },
15700       { 0x7af4cfec70880e0dL,0x7332a66fbe3d913fL,0x32e6c84a7eceb4bdL,
15701         0xedc4a79a9c228f55L } },
15702     /* 2 << 105 */
15703     { { 0xc37c7dd0c55c4496L,0xa6a9635725bbabd2L,0x5b7e63f2add7f363L,
15704         0x9dce37822e73f1dfL },
15705       { 0xe1e5a16ab2b91f71L,0xe44898235ba0163cL,0xf2759c32f6e515adL,
15706         0xa5e2f1f88615eecfL } },
15707     /* 3 << 105 */
15708     { { 0x74519be7abded551L,0x03d358b8c8b74410L,0x4d00b10b0e10d9a9L,
15709         0x6392b0b128da52b7L },
15710       { 0x6744a2980b75c904L,0xc305b0aea8f7f96cL,0x042e421d182cf932L,
15711         0xf6fc5d509e4636caL } },
15712     /* 4 << 105 */
15713     { { 0x795847c9d64cc78cL,0x6c50621b9b6cb27bL,0x07099bf8df8022abL,
15714         0x48f862ebc04eda1dL },
15715       { 0xd12732ede1603c16L,0x19a80e0f5c9a9450L,0xe2257f54b429b4fcL,
15716         0x66d3b2c645460515L } },
15717     /* 5 << 105 */
15718     { { 0x6ca4f87e822e37beL,0x73f237b4253bda4eL,0xf747f3a241190aebL,
15719         0xf06fa36f804cf284L },
15720       { 0x0a6bbb6efc621c12L,0x5d624b6440b80ec6L,0x4b0724257ba556f3L,
15721         0x7fa0c3543e2d20a8L } },
15722     /* 6 << 105 */
15723     { { 0xe921fa31e3229d41L,0xa929c65294531bd4L,0x84156027a6d38209L,
15724         0xf3d69f736bdb97bdL },
15725       { 0x8906d19a16833631L,0x68a34c2e03d51be3L,0xcb59583b0e511cd8L,
15726         0x99ce6bfdfdc132a8L } },
15727     /* 7 << 105 */
15728     { { 0x3facdaaaffcdb463L,0x658bbc1a34a38b08L,0x12a801f8f1a9078dL,
15729         0x1567bcf96ab855deL },
15730       { 0xe08498e03572359bL,0xcf0353e58659e68bL,0xbb86e9c87d23807cL,
15731         0xbc08728d2198e8a2L } },
15732     /* 8 << 105 */
15733     { { 0x8de2b7bc453cadd6L,0x203900a7bc0bc1f8L,0xbcd86e47a6abd3afL,
15734         0x911cac128502effbL },
15735       { 0x2d550242ec965469L,0x0e9f769229e0017eL,0x633f078f65979885L,
15736         0xfb87d4494cf751efL } },
15737     /* 9 << 105 */
15738     { { 0xe1790e4bfc25419aL,0x364672034bff3cfdL,0xc8db638625b6e83fL,
15739         0x6cc69f236cad6fd2L },
15740       { 0x0219e45a6bc68bb9L,0xe43d79b6297f7334L,0x7d445368465dc97cL,
15741         0x4b9eea322a0b949aL } },
15742     /* 10 << 105 */
15743     { { 0x1b96c6ba6102d021L,0xeaafac782f4461eaL,0xd4b85c41c49f19a8L,
15744         0x275c28e4cf538875L },
15745       { 0x35451a9ddd2e54e0L,0x6991adb50605618bL,0x5b8b4bcd7b36cd24L,
15746         0x372a4f8c56f37216L } },
15747     /* 11 << 105 */
15748     { { 0xc890bd73a6a5da60L,0x6f083da0dc4c9ff0L,0xf4e14d94f0536e57L,
15749         0xf9ee1edaaaec8243L },
15750       { 0x571241ec8bdcf8e7L,0xa5db82710b041e26L,0x9a0b9a99e3fff040L,
15751         0xcaaf21dd7c271202L } },
15752     /* 12 << 105 */
15753     { { 0xb4e2b2e14f0dd2e8L,0xe77e7c4f0a377ac7L,0x69202c3f0d7a2198L,
15754         0xf759b7ff28200eb8L },
15755       { 0xc87526eddcfe314eL,0xeb84c52453d5cf99L,0xb1b52ace515138b6L,
15756         0x5aa7ff8c23fca3f4L } },
15757     /* 13 << 105 */
15758     { { 0xff0b13c3b9791a26L,0x960022dacdd58b16L,0xdbd55c9257aad2deL,
15759         0x3baaaaa3f30fe619L },
15760       { 0x9a4b23460d881efdL,0x506416c046325e2aL,0x91381e76035c18d4L,
15761         0xb3bb68bef27817b0L } },
15762     /* 14 << 105 */
15763     { { 0x15bfb8bf5116f937L,0x7c64a586c1268943L,0x71e25cc38419a2c8L,
15764         0x9fd6b0c48335f463L },
15765       { 0x4bf0ba3ce8ee0e0eL,0x6f6fba60298c21faL,0x57d57b39ae66bee0L,
15766         0x292d513022672544L } },
15767     /* 15 << 105 */
15768     { { 0xf451105dbab093b3L,0x012f59b902839986L,0x8a9158023474a89cL,
15769         0x048c919c2de03e97L },
15770       { 0xc476a2b591071cd5L,0x791ed89a034970a5L,0x89bd9042e1b7994bL,
15771         0x8eaf5179a1057ffdL } },
15772     /* 16 << 105 */
15773     { { 0x6066e2a2d551ee10L,0x87a8f1d8727e09a6L,0x00d08bab2c01148dL,
15774         0x6da8e4f1424f33feL },
15775       { 0x466d17f0cf9a4e71L,0xff5020103bf5cb19L,0xdccf97d8d062ecc0L,
15776         0x80c0d9af81d80ac4L } },
15777     /* 17 << 105 */
15778     { { 0xe87771d8033f2876L,0xb0186ec67d5cc3dbL,0x58e8bb803bc9bc1dL,
15779         0x4d1395cc6f6ef60eL },
15780       { 0xa73c62d6186244a0L,0x918e5f23110a5b53L,0xed4878ca741b7eabL,
15781         0x3038d71adbe03e51L } },
15782     /* 18 << 105 */
15783     { { 0x840204b7a93c3246L,0x21ab6069a0b9b4cdL,0xf5fa6e2bb1d64218L,
15784         0x1de6ad0ef3d56191L },
15785       { 0x570aaa88ff1929c7L,0xc6df4c6b640e87b5L,0xde8a74f2c65f0cccL,
15786         0x8b972fd5e6f6cc01L } },
15787     /* 19 << 105 */
15788     { { 0x3fff36b60b846531L,0xba7e45e610a5e475L,0x84a1d10e4145b6c5L,
15789         0xf1f7f91a5e046d9dL },
15790       { 0x0317a69244de90d7L,0x951a1d4af199c15eL,0x91f78046c9d73debL,
15791         0x74c82828fab8224fL } },
15792     /* 20 << 105 */
15793     { { 0xaa6778fce7560b90L,0xb4073e61a7e824ceL,0xff0d693cd642eba8L,
15794         0x7ce2e57a5dccef38L },
15795       { 0x89c2c7891df1ad46L,0x83a06922098346fdL,0x2d715d72da2fc177L,
15796         0x7b6dd71d85b6cf1dL } },
15797     /* 21 << 105 */
15798     { { 0xc60a6d0a73fa9cb0L,0xedd3992e328bf5a9L,0xc380ddd0832c8c82L,
15799         0xd182d410a2a0bf50L },
15800       { 0x7d9d7438d9a528dbL,0xe8b1a0e9caf53994L,0xddd6e5fe0e19987cL,
15801         0xacb8df03190b059dL } },
15802     /* 22 << 105 */
15803     { { 0x53703a328300129fL,0x1f63766268c43bfdL,0xbcbd191300e54051L,
15804         0x812fcc627bf5a8c5L },
15805       { 0x3f969d5f29fb85daL,0x72f4e00a694759e8L,0x426b6e52790726b7L,
15806         0x617bbc873bdbb209L } },
15807     /* 23 << 105 */
15808     { { 0x511f8bb997aee317L,0x812a4096e81536a8L,0x137dfe593ac09b9bL,
15809         0x0682238fba8c9a7aL },
15810       { 0x7072ead6aeccb4bdL,0x6a34e9aa692ba633L,0xc82eaec26fff9d33L,
15811         0xfb7535121d4d2b62L } },
15812     /* 24 << 105 */
15813     { { 0x1a0445ff1d7aadabL,0x65d38260d5f6a67cL,0x6e62fb0891cfb26fL,
15814         0xef1e0fa55c7d91d6L },
15815       { 0x47e7c7ba33db72cdL,0x017cbc09fa7c74b2L,0x3c931590f50a503cL,
15816         0xcac54f60616baa42L } },
15817     /* 25 << 105 */
15818     { { 0x9b6cd380b2369f0fL,0x97d3a70d23c76151L,0x5f9dd6fc9862a9c6L,
15819         0x044c4ab212312f51L },
15820       { 0x035ea0fd834a2ddcL,0x49e6b862cc7b826dL,0xb03d688362fce490L,
15821         0x62f2497ab37e36e9L } },
15822     /* 26 << 105 */
15823     { { 0x04b005b6c6458293L,0x36bb5276e8d10af7L,0xacf2dc138ee617b8L,
15824         0x470d2d35b004b3d4L },
15825       { 0x06790832feeb1b77L,0x2bb75c3985657f9cL,0xd70bd4edc0f60004L,
15826         0xfe797ecc219b018bL } },
15827     /* 27 << 105 */
15828     { { 0x9b5bec2a753aebccL,0xdaf9f3dcc939eca5L,0xd6bc6833d095ad09L,
15829         0x98abdd51daa4d2fcL },
15830       { 0xd9840a318d168be5L,0xcf7c10e02325a23cL,0xa5c02aa07e6ecfafL,
15831         0x2462e7e6b5bfdf18L } },
15832     /* 28 << 105 */
15833     { { 0xab2d8a8ba0cc3f12L,0x68dd485dbc672a29L,0x72039752596f2cd3L,
15834         0x5d3eea67a0cf3d8dL },
15835       { 0x810a1a81e6602671L,0x8f144a4014026c0cL,0xbc753a6d76b50f85L,
15836         0xc4dc21e8645cd4a4L } },
15837     /* 29 << 105 */
15838     { { 0xc5262dea521d0378L,0x802b8e0e05011c6fL,0x1ba19cbb0b4c19eaL,
15839         0x21db64b5ebf0aaecL },
15840       { 0x1f394ee970342f9dL,0x93a10aee1bc44a14L,0xa7eed31b3efd0baaL,
15841         0x6e7c824e1d154e65L } },
15842     /* 30 << 105 */
15843     { { 0xee23fa819966e7eeL,0x64ec4aa805b7920dL,0x2d44462d2d90aad4L,
15844         0xf44dd195df277ad5L },
15845       { 0x8d6471f1bb46b6a1L,0x1e65d313fd885090L,0x33a800f513a977b4L,
15846         0xaca9d7210797e1efL } },
15847     /* 31 << 105 */
15848     { { 0x9a5a85a0fcff6a17L,0x9970a3f31eca7ceeL,0xbb9f0d6bc9504be3L,
15849         0xe0c504beadd24ee2L },
15850       { 0x7e09d95677fcc2f4L,0xef1a522765bb5fc4L,0x145d4fb18b9286aaL,
15851         0x66fd0c5d6649028bL } },
15852     /* 32 << 105 */
15853     { { 0x98857ceb1bf4581cL,0xe635e186aca7b166L,0x278ddd22659722acL,
15854         0xa0903c4c1db68007L },
15855       { 0x366e458948f21402L,0x31b49c14b96abda2L,0x329c4b09e0403190L,
15856         0x97197ca3d29f43feL } },
15857     /* 33 << 105 */
15858     { { 0x8073dd1e274983d8L,0xda1a3bde55717c8fL,0xfd3d4da20361f9d1L,
15859         0x1332d0814c7de1ceL },
15860       { 0x9b7ef7a3aa6d0e10L,0x17db2e73f54f1c4aL,0xaf3dffae4cd35567L,
15861         0xaaa2f406e56f4e71L } },
15862     /* 34 << 105 */
15863     { { 0x8966759e7ace3fc7L,0x9594eacf45a8d8c6L,0x8de3bd8b91834e0eL,
15864         0xafe4ca53548c0421L },
15865       { 0xfdd7e856e6ee81c6L,0x8f671beb6b891a3aL,0xf7a58f2bfae63829L,
15866         0x9ab186fb9c11ac9fL } },
15867     /* 35 << 105 */
15868     { { 0x8d6eb36910b5be76L,0x046b7739fb040bcdL,0xccb4529fcb73de88L,
15869         0x1df0fefccf26be03L },
15870       { 0xad7757a6bcfcd027L,0xa8786c75bb3165caL,0xe9db1e347e99a4d9L,
15871         0x99ee86dfb06c504bL } },
15872     /* 36 << 105 */
15873     { { 0x5b7c2dddc15c9f0aL,0xdf87a7344295989eL,0x59ece47c03d08fdaL,
15874         0xb074d3ddad5fc702L },
15875       { 0x2040790351a03776L,0x2bb1f77b2a608007L,0x25c58f4fe1153185L,
15876         0xe6df62f6766e6447L } },
15877     /* 37 << 105 */
15878     { { 0xefb3d1beed51275aL,0x5de47dc72f0f483fL,0x7932d98e97c2bedfL,
15879         0xd5c119270219f8a1L },
15880       { 0x9d751200a73a294eL,0x5f88434a9dc20172L,0xd28d9fd3a26f506aL,
15881         0xa890cd319d1dcd48L } },
15882     /* 38 << 105 */
15883     { { 0x0aebaec170f4d3b4L,0xfd1a13690ffc8d00L,0xb9d9c24057d57838L,
15884         0x45929d2668bac361L },
15885       { 0x5a2cd06025b15ca6L,0x4b3c83e16e474446L,0x1aac7578ee1e5134L,
15886         0xa418f5d6c91e2f41L } },
15887     /* 39 << 105 */
15888     { { 0x6936fc8a213ed68bL,0x860ae7ed510a5224L,0x63660335def09b53L,
15889         0x641b2897cd79c98dL },
15890       { 0x29bd38e101110f35L,0x79c26f42648b1937L,0x64dae5199d9164f4L,
15891         0xd85a23100265c273L } },
15892     /* 40 << 105 */
15893     { { 0x7173dd5d4b07e2b1L,0xd144c4cb8d9ea221L,0xe8b04ea41105ab14L,
15894         0x92dda542fe80d8f1L },
15895       { 0xe9982fa8cf03dce6L,0x8b5ea9651a22cffcL,0xf7f4ea7f3fad88c4L,
15896         0x62db773e6a5ba95cL } },
15897     /* 41 << 105 */
15898     { { 0xd20f02fb93f24567L,0xfd46c69a315257caL,0x0ac74cc78bcab987L,
15899         0x46f31c015ceca2f5L },
15900       { 0x40aedb59888b219eL,0xe50ecc37e1fccd02L,0x1bcd9dad911f816cL,
15901         0x583cc1ec8db9b00cL } },
15902     /* 42 << 105 */
15903     { { 0xf3cd2e66a483bf11L,0xfa08a6f5b1b2c169L,0xf375e2454be9fa28L,
15904         0x99a7ffec5b6d011fL },
15905       { 0x6a3ebddbc4ae62daL,0x6cea00ae374aef5dL,0xab5fb98d9d4d05bcL,
15906         0x7cba1423d560f252L } },
15907     /* 43 << 105 */
15908     { { 0x49b2cc21208490deL,0x1ca66ec3bcfb2879L,0x7f1166b71b6fb16fL,
15909         0xfff63e0865fe5db3L },
15910       { 0xb8345abe8b2610beL,0xb732ed8039de3df4L,0x0e24ed50211c32b4L,
15911         0xd10d8a69848ff27dL } },
15912     /* 44 << 105 */
15913     { { 0xc1074398ed4de248L,0xd7cedace10488927L,0xa4aa6bf885673e13L,
15914         0xb46bae916daf30afL },
15915       { 0x07088472fcef7ad8L,0x61151608d4b35e97L,0xbcfe8f26dde29986L,
15916         0xeb84c4c7d5a34c79L } },
15917     /* 45 << 105 */
15918     { { 0xc1eec55c164e1214L,0x891be86da147bb03L,0x9fab4d100ba96835L,
15919         0xbf01e9b8a5c1ae9fL },
15920       { 0x6b4de139b186ebc0L,0xd5c74c2685b91bcaL,0x5086a99cc2d93854L,
15921         0xeed62a7ba7a9dfbcL } },
15922     /* 46 << 105 */
15923     { { 0x8778ed6f76b7618aL,0xbff750a503b66062L,0x4cb7be22b65186dbL,
15924         0x369dfbf0cc3a6d13L },
15925       { 0xc7dab26c7191a321L,0x9edac3f940ed718eL,0xbc142b36d0cfd183L,
15926         0xc8af82f67c991693L } },
15927     /* 47 << 105 */
15928     { { 0xb3d1e4d897ce0b2aL,0xe6d7c87fc3a55cdfL,0x35846b9568b81afeL,
15929         0x018d12afd3c239d8L },
15930       { 0x2b2c620801206e15L,0xe0e42453a3b882c6L,0x854470a3a50162d5L,
15931         0x081574787017a62aL } },
15932     /* 48 << 105 */
15933     { { 0x18bd3fb4820357c7L,0x992039ae6f1458adL,0x9a1df3c525b44aa1L,
15934         0x2d780357ed3d5281L },
15935       { 0x58cf7e4dc77ad4d4L,0xd49a7998f9df4fc4L,0x4465a8b51d71205eL,
15936         0xa0ee0ea6649254aaL } },
15937     /* 49 << 105 */
15938     { { 0x4b5eeecfab7bd771L,0x6c87307335c262b9L,0xdc5bd6483c9d61e7L,
15939         0x233d6d54321460d2L },
15940       { 0xd20c5626fc195bccL,0x2544595804d78b63L,0xe03fcb3d17ec8ef3L,
15941         0x54b690d146b8f781L } },
15942     /* 50 << 105 */
15943     { { 0x82fa2c8a21230646L,0xf51aabb9084f418cL,0xff4fbec11a30ba43L,
15944         0x6a5acf73743c9df7L },
15945       { 0x1da2b357d635b4d5L,0xc3de68ddecd5c1daL,0xa689080bd61af0ddL,
15946         0xdea5938ad665bf99L } },
15947     /* 51 << 105 */
15948     { { 0x0231d71afe637294L,0x01968aa6a5a81cd8L,0x11252d50048e63b5L,
15949         0xc446bc526ca007e9L },
15950       { 0xef8c50a696d6134bL,0x9361fbf59e09a05cL,0xf17f85a6dca3291aL,
15951         0xb178d548ff251a21L } },
15952     /* 52 << 105 */
15953     { { 0x87f6374ba4df3915L,0x566ce1bf2fd5d608L,0x425cba4d7de35102L,
15954         0x6b745f8f58c5d5e2L },
15955       { 0x88402af663122edfL,0x3190f9ed3b989a89L,0x4ad3d387ebba3156L,
15956         0xef385ad9c7c469a5L } },
15957     /* 53 << 105 */
15958     { { 0xb08281de3f642c29L,0x20be0888910ffb88L,0xf353dd4ad5292546L,
15959         0x3f1627de8377a262L },
15960       { 0xa5faa013eefcd638L,0x8f3bf62674cc77c3L,0x32618f65a348f55eL,
15961         0x5787c0dc9fefeb9eL } },
15962     /* 54 << 105 */
15963     { { 0xf1673aa2d9a23e44L,0x88dfa9934e10690dL,0x1ced1b362bf91108L,
15964         0x9193ceca3af48649L },
15965       { 0xfb34327d2d738fc5L,0x6697b037975fee6cL,0x2f485da0c04079a5L,
15966         0x2cdf57352feaa1acL } },
15967     /* 55 << 105 */
15968     { { 0x76944420bd55659eL,0x7973e32b4376090cL,0x86bb4fe1163b591aL,
15969         0x10441aedc196f0caL },
15970       { 0x3b431f4a045ad915L,0x6c11b437a4afacb1L,0x30b0c7db71fdbbd8L,
15971         0xb642931feda65acdL } },
15972     /* 56 << 105 */
15973     { { 0x4baae6e89c92b235L,0xa73bbd0e6b3993a1L,0xd06d60ec693dd031L,
15974         0x03cab91b7156881cL },
15975       { 0xd615862f1db3574bL,0x485b018564bb061aL,0x27434988a0181e06L,
15976         0x2cd61ad4c1c0c757L } },
15977     /* 57 << 105 */
15978     { { 0x3effed5a2ff9f403L,0x8dc98d8b62239029L,0x2206021e1f17b70dL,
15979         0xafbec0cabf510015L },
15980       { 0x9fed716480130dfaL,0x306dc2b58a02dcf5L,0x48f06620feb10fc0L,
15981         0x78d1e1d55a57cf51L } },
15982     /* 58 << 105 */
15983     { { 0xadef8c5a192ef710L,0x88afbd4b3b7431f9L,0x7e1f740764250c9eL,
15984         0x6e31318db58bec07L },
15985       { 0xfd4fc4b824f89b4eL,0x65a5dd8848c36a2aL,0x4f1eccfff024baa7L,
15986         0x22a21cf2cba94650L } },
15987     /* 59 << 105 */
15988     { { 0x95d29dee42a554f7L,0x828983a5002ec4baL,0x8112a1f78badb73dL,
15989         0x79ea8897a27c1839L },
15990       { 0x8969a5a7d065fd83L,0xf49af791b262a0bcL,0xfcdea8b6af2b5127L,
15991         0x10e913e1564c2dbcL } },
15992     /* 60 << 105 */
15993     { { 0x51239d14bc21ef51L,0xe51c3ceb4ce57292L,0x795ff06847bbcc3bL,
15994         0x86b46e1ebd7e11e6L },
15995       { 0x0ea6ba2380041ef4L,0xd72fe5056262342eL,0x8abc6dfd31d294d4L,
15996         0xbbe017a21278c2c9L } },
15997     /* 61 << 105 */
15998     { { 0xb1fcfa09b389328aL,0x322fbc62d01771b5L,0x04c0d06360b045bfL,
15999         0xdb652edc10e52d01L },
16000       { 0x50ef932c03ec6627L,0xde1b3b2dc1ee50e3L,0x5ab7bdc5dc37a90dL,
16001         0xfea6721331e33a96L } },
16002     /* 62 << 105 */
16003     { { 0x6482b5cb4f2999aaL,0x38476cc6b8cbf0ddL,0x93ebfacb173405bbL,
16004         0x15cdafe7e52369ecL },
16005       { 0xd42d5ba4d935b7dbL,0x648b60041c99a4cdL,0x785101bda3b5545bL,
16006         0x4bf2c38a9dd67fafL } },
16007     /* 63 << 105 */
16008     { { 0xb1aadc634442449cL,0xe0e9921a33ad4fb8L,0x5c552313aa686d82L,
16009         0xdee635fa465d866cL },
16010       { 0xbc3c224a18ee6e8aL,0xeed748a6ed42e02fL,0xe70f930ad474cd08L,
16011         0x774ea6ecfff24adfL } },
16012     /* 64 << 105 */
16013     { { 0x03e2de1cf3480d4aL,0xf0d8edc7bc8acf1aL,0xf23e330368295a9cL,
16014         0xfadd5f68c546a97dL },
16015       { 0x895597ad96f8acb1L,0xbddd49d5671bdae2L,0x16fcd52821dd43f4L,
16016         0xa5a454126619141aL } },
16017     /* 0 << 112 */
16018     { { 0x00, 0x00, 0x00, 0x00 },
16019       { 0x00, 0x00, 0x00, 0x00 } },
16020     /* 1 << 112 */
16021     { { 0x8ce9b6bfc360e25aL,0xe6425195075a1a78L,0x9dc756a8481732f4L,
16022         0x83c0440f5432b57aL },
16023       { 0xc670b3f1d720281fL,0x2205910ed135e051L,0xded14b0edb052be7L,
16024         0x697b3d27c568ea39L } },
16025     /* 2 << 112 */
16026     { { 0x2e599b9afb3ff9edL,0x28c2e0ab17f6515cL,0x1cbee4fd474da449L,
16027         0x071279a44f364452L },
16028       { 0x97abff6601fbe855L,0x3ee394e85fda51c4L,0x190385f667597c0bL,
16029         0x6e9fccc6a27ee34bL } },
16030     /* 3 << 112 */
16031     { { 0x0b89de9314092ebbL,0xf17256bd428e240cL,0xcf89a7f393d2f064L,
16032         0x4f57841ee1ed3b14L },
16033       { 0x4ee14405e708d855L,0x856aae7203f1c3d0L,0xc8e5424fbdd7eed5L,
16034         0x3333e4ef73ab4270L } },
16035     /* 4 << 112 */
16036     { { 0x3bc77adedda492f8L,0xc11a3aea78297205L,0x5e89a3e734931b4cL,
16037         0x17512e2e9f5694bbL },
16038       { 0x5dc349f3177bf8b6L,0x232ea4ba08c7ff3eL,0x9c4f9d16f511145dL,
16039         0xccf109a333b379c3L } },
16040     /* 5 << 112 */
16041     { { 0xe75e7a88a1f25897L,0x7ac6961fa1b5d4d8L,0xe3e1077308f3ed5cL,
16042         0x208a54ec0a892dfbL },
16043       { 0xbe826e1978660710L,0x0cf70a97237df2c8L,0x418a7340ed704da5L,
16044         0xa3eeb9a908ca33fdL } },
16045     /* 6 << 112 */
16046     { { 0x49d96233169bca96L,0x04d286d42da6aafbL,0xc09606eca0c2fa94L,
16047         0x8869d0d523ff0fb3L },
16048       { 0xa99937e5d0150d65L,0xa92e2503240c14c9L,0x656bf945108e2d49L,
16049         0x152a733aa2f59e2bL } },
16050     /* 7 << 112 */
16051     { { 0xb4323d588434a920L,0xc0af8e93622103c5L,0x667518ef938dbf9aL,
16052         0xa184307383a9cdf2L },
16053       { 0x350a94aa5447ab80L,0xe5e5a325c75a3d61L,0x74ba507f68411a9eL,
16054         0x10581fc1594f70c5L } },
16055     /* 8 << 112 */
16056     { { 0x60e2857080eb24a9L,0x7bedfb4d488e0cfdL,0x721ebbd7c259cdb8L,
16057         0x0b0da855bc6390a9L },
16058       { 0x2b4d04dbde314c70L,0xcdbf1fbc6c32e846L,0x33833eabb162fc9eL,
16059         0x9939b48bb0dd3ab7L } },
16060     /* 9 << 112 */
16061     { { 0x5aaa98a7cb0c9c8cL,0x75105f3081c4375cL,0xceee50575ef1c90fL,
16062         0xb31e065fc23a17bfL },
16063       { 0x5364d275d4b6d45aL,0xd363f3ad62ec8996L,0xb5d212394391c65bL,
16064         0x84564765ebb41b47L } },
16065     /* 10 << 112 */
16066     { { 0x20d18ecc37107c78L,0xacff3b6b570c2a66L,0x22f975d99bd0d845L,
16067         0xef0a0c46ba178fa0L },
16068       { 0x1a41965176b6028eL,0xc49ec674248612d4L,0x5b6ac4f27338af55L,
16069         0x06145e627bee5a36L } },
16070     /* 11 << 112 */
16071     { { 0x33e95d07e75746b5L,0x1c1e1f6dc40c78beL,0x967833ef222ff8e2L,
16072         0x4bedcf6ab49180adL },
16073       { 0x6b37e9c13d7a4c8aL,0x2748887c6ddfe760L,0xf7055123aa3a5bbcL,
16074         0x954ff2257bbb8e74L } },
16075     /* 12 << 112 */
16076     { { 0xc42b8ab197c3dfb9L,0x55a549b0cf168154L,0xad6748e7c1b50692L,
16077         0x2775780f6fc5cbcbL },
16078       { 0x4eab80b8e1c9d7c8L,0x8c69dae13fdbcd56L,0x47e6b4fb9969eaceL,
16079         0x002f1085a705cb5aL } },
16080     /* 13 << 112 */
16081     { { 0x4e23ca446d3fea55L,0xb4ae9c86f4810568L,0x47bfb91b2a62f27dL,
16082         0x60deb4c9d9bac28cL },
16083       { 0xa892d8947de6c34cL,0x4ee682594494587dL,0x914ee14e1a3f8a5bL,
16084         0xbb113eaa28700385L } },
16085     /* 14 << 112 */
16086     { { 0x81ca03b92115b4c9L,0x7c163d388908cad1L,0xc912a118aa18179aL,
16087         0xe09ed750886e3081L },
16088       { 0xa676e3fa26f516caL,0x753cacf78e732f91L,0x51592aea833da8b4L,
16089         0xc626f42f4cbea8aaL } },
16090     /* 15 << 112 */
16091     { { 0xef9dc899a7b56eafL,0x00c0e52c34ef7316L,0x5b1e4e24fe818a86L,
16092         0x9d31e20dc538be47L },
16093       { 0x22eb932d3ed68974L,0xe44bbc087c4e87c4L,0x4121086e0dde9aefL,
16094         0x8e6b9cff134f4345L } },
16095     /* 16 << 112 */
16096     { { 0x96892c1f711b0eb9L,0xb905f2c8780ab954L,0xace26309a20792dbL,
16097         0xec8ac9b30684e126L },
16098       { 0x486ad8b6b40a2447L,0x60121fc19fe3fb24L,0x5626fccf1a8e3b3fL,
16099         0x4e5686226ad1f394L } },
16100     /* 17 << 112 */
16101     { { 0xda7aae0d196aa5a1L,0xe0df8c771041b5fbL,0x451465d926b318b7L,
16102         0xc29b6e557ab136e9L },
16103       { 0x2c2ab48b71148463L,0xb5738de364454a76L,0x54ccf9a05a03abe4L,
16104         0x377c02960427d58eL } },
16105     /* 18 << 112 */
16106     { { 0x73f5f0b92bb39c1fL,0x14373f2ce608d8c5L,0xdcbfd31400fbb805L,
16107         0xdf18fb2083afdcfbL },
16108       { 0x81a57f4242b3523fL,0xe958532d87f650fbL,0xaa8dc8b68b0a7d7cL,
16109         0x1b75dfb7150166beL } },
16110     /* 19 << 112 */
16111     { { 0x90e4f7c92d7d1413L,0x67e2d6b59834f597L,0x4fd4f4f9a808c3e8L,
16112         0xaf8237e0d5281ec1L },
16113       { 0x25ab5fdc84687ceeL,0xc5ded6b1a5b26c09L,0x8e4a5aecc8ea7650L,
16114         0x23b73e5c14cc417fL } },
16115     /* 20 << 112 */
16116     { { 0x2bfb43183037bf52L,0xb61e6db578c725d7L,0x8efd4060bbb3e5d7L,
16117         0x2e014701dbac488eL },
16118       { 0xac75cf9a360aa449L,0xb70cfd0579634d08L,0xa591536dfffb15efL,
16119         0xb2c37582d07c106cL } },
16120     /* 21 << 112 */
16121     { { 0xb4293fdcf50225f9L,0xc52e175cb0e12b03L,0xf649c3bad0a8bf64L,
16122         0x745a8fefeb8ae3c6L },
16123       { 0x30d7e5a358321bc3L,0xb1732be70bc4df48L,0x1f217993e9ea5058L,
16124         0xf7a71cde3e4fd745L } },
16125     /* 22 << 112 */
16126     { { 0x86cc533e894c5bbbL,0x6915c7d969d83082L,0xa6aa2d055815c244L,
16127         0xaeeee59249b22ce5L },
16128       { 0x89e39d1378135486L,0x3a275c1f16b76f2fL,0xdb6bcc1be036e8f5L,
16129         0x4df69b215e4709f5L } },
16130     /* 23 << 112 */
16131     { { 0xa188b2502d0f39aaL,0x622118bb15a85947L,0x2ebf520ffde0f4faL,
16132         0xa40e9f294860e539L },
16133       { 0x7b6a51eb22b57f0fL,0x849a33b97e80644aL,0x50e5d16f1cf095feL,
16134         0xd754b54eec55f002L } },
16135     /* 24 << 112 */
16136     { { 0x5cfbbb22236f4a98L,0x0b0c59e9066800bbL,0x4ac69a8f5a9a7774L,
16137         0x2b33f804d6bec948L },
16138       { 0xb372929532e6c466L,0x68956d0f4e599c73L,0xa47a249f155c31ccL,
16139         0x24d80f0de1ce284eL } },
16140     /* 25 << 112 */
16141     { { 0xcd821dfb988baf01L,0xe6331a7ddbb16647L,0x1eb8ad33094cb960L,
16142         0x593cca38c91bbca5L },
16143       { 0x384aac8d26567456L,0x40fa0309c04b6490L,0x97834cd6dab6c8f6L,
16144         0x68a7318d3f91e55fL } },
16145     /* 26 << 112 */
16146     { { 0xa00fd04efc4d3157L,0xb56f8ab22bf3bdeaL,0x014f56484fa57172L,
16147         0x948c5860450abdb3L },
16148       { 0x342b5df00ebd4f08L,0x3e5168cd0e82938eL,0x7aedc1ceb0df5dd0L,
16149         0x6bbbc6d9e5732516L } },
16150     /* 27 << 112 */
16151     { { 0xc7bfd486605daaa6L,0x46fd72b7bb9a6c9eL,0xe4847fb1a124fb89L,
16152         0x75959cbda2d8ffbcL },
16153       { 0x42579f65c8a588eeL,0x368c92e6b80b499dL,0xea4ef6cd999a5df1L,
16154         0xaa73bb7f936fe604L } },
16155     /* 28 << 112 */
16156     { { 0xf347a70d6457d188L,0x86eda86b8b7a388bL,0xb7cdff060ccd6013L,
16157         0xbeb1b6c7d0053fb2L },
16158       { 0x0b02238799240a9fL,0x1bbb384f776189b2L,0x8695e71e9066193aL,
16159         0x2eb5009706ffac7eL } },
16160     /* 29 << 112 */
16161     { { 0x0654a9c04a7d2caaL,0x6f3fb3d1a5aaa290L,0x835db041ff476e8fL,
16162         0x540b8b0bc42295e4L },
16163       { 0xa5c73ac905e214f5L,0x9a74075a56a0b638L,0x2e4b1090ce9e680bL,
16164         0x57a5b4796b8d9afaL } },
16165     /* 30 << 112 */
16166     { { 0x0dca48e726bfe65cL,0x097e391c7290c307L,0x683c462e6669e72eL,
16167         0xf505be1e062559acL },
16168       { 0x5fbe3ea1e3a3035aL,0x6431ebf69cd50da8L,0xfd169d5c1f6407f2L,
16169         0x8d838a9560fce6b8L } },
16170     /* 31 << 112 */
16171     { { 0x2a2bfa7f650006f0L,0xdfd7dad350c0fbb2L,0x92452495ccf9ad96L,
16172         0x183bf494d95635f9L },
16173       { 0x02d5df434a7bd989L,0x505385cca5431095L,0xdd98e67dfd43f53eL,
16174         0xd61e1a6c500c34a9L } },
16175     /* 32 << 112 */
16176     { { 0x5a4b46c64a8a3d62L,0x8469c4d0247743d2L,0x2bb3a13d88f7e433L,
16177         0x62b23a1001be5849L },
16178       { 0xe83596b4a63d1a4cL,0x454e7fea7d183f3eL,0x643fce6117afb01cL,
16179         0x4e65e5e61c4c3638L } },
16180     /* 33 << 112 */
16181     { { 0x41d85ea1ef74c45bL,0x2cfbfa66ae328506L,0x98b078f53ada7da9L,
16182         0xd985fe37ec752fbbL },
16183       { 0xeece68fe5a0148b4L,0x6f9a55c72d78136dL,0x232dccc4d2b729ceL,
16184         0xa27e0dfd90aafbc4L } },
16185     /* 34 << 112 */
16186     { { 0x9647445212b4603eL,0xa876c5516b706d14L,0xdf145fcf69a9d412L,
16187         0xe2ab75b72d479c34L },
16188       { 0x12df9a761a23ff97L,0xc61389925d359d10L,0x6e51c7aefa835f22L,
16189         0x69a79cb1c0fcc4d9L } },
16190     /* 35 << 112 */
16191     { { 0xf57f350d594cc7e1L,0x3079ca633350ab79L,0x226fb6149aff594aL,
16192         0x35afec026d59a62bL },
16193       { 0x9bee46f406ed2c6eL,0x58da17357d939a57L,0x44c504028fd1797eL,
16194         0xd8853e7c5ccea6caL } },
16195     /* 36 << 112 */
16196     { { 0x4065508da35fcd5fL,0x8965df8c495ccaebL,0x0f2da85012e1a962L,
16197         0xee471b94c1cf1cc4L },
16198       { 0xcef19bc80a08fb75L,0x704958f581de3591L,0x2867f8b23aef4f88L,
16199         0x8d749384ea9f9a5fL } },
16200     /* 37 << 112 */
16201     { { 0x1b3855378c9049f4L,0x5be948f37b92d8b6L,0xd96f725db6e2bd6bL,
16202         0x37a222bc958c454dL },
16203       { 0xe7c61abb8809bf61L,0x46f07fbc1346f18dL,0xfb567a7ae87c0d1cL,
16204         0x84a461c87ef3d07aL } },
16205     /* 38 << 112 */
16206     { { 0x0a5adce6d9278d98L,0x24d948139dfc73e1L,0x4f3528b6054321c3L,
16207         0x2e03fdde692ea706L },
16208       { 0x10e6061947b533c0L,0x1a8bc73f2ca3c055L,0xae58d4b21bb62b8fL,
16209         0xb2045a73584a24e3L } },
16210     /* 39 << 112 */
16211     { { 0x3ab3d5afbd76e195L,0x478dd1ad6938a810L,0x6ffab3936ee3d5cbL,
16212         0xdfb693db22b361e4L },
16213       { 0xf969449651dbf1a7L,0xcab4b4ef08a2e762L,0xe8c92f25d39bba9aL,
16214         0x850e61bcf1464d96L } },
16215     /* 40 << 112 */
16216     { { 0xb7e830e3dc09508bL,0xfaf6d2cf74317655L,0x72606cebdf690355L,
16217         0x48bb92b3d0c3ded6L },
16218       { 0x65b754845c7cf892L,0xf6cd7ac9d5d5f01fL,0xc2c30a5996401d69L,
16219         0x91268650ed921878L } },
16220     /* 41 << 112 */
16221     { { 0x380bf913b78c558fL,0x43c0baebc8afdaa9L,0x377f61d554f169d3L,
16222         0xf8da07e3ae5ff20bL },
16223       { 0xb676c49da8a90ea8L,0x81c1ff2b83a29b21L,0x383297ac2ad8d276L,
16224         0x3001122fba89f982L } },
16225     /* 42 << 112 */
16226     { { 0xe1d794be6718e448L,0x246c14827c3e6e13L,0x56646ef85d26b5efL,
16227         0x80f5091e88069cddL },
16228       { 0xc5992e2f724bdd38L,0x02e915b48471e8c7L,0x96ff320a0d0ff2a9L,
16229         0xbf8864874384d1a0L } },
16230     /* 43 << 112 */
16231     { { 0xbbe1e6a6c93f72d6L,0xd5f75d12cad800eaL,0xfa40a09fe7acf117L,
16232         0x32c8cdd57581a355L },
16233       { 0x742219927023c499L,0xa8afe5d738ec3901L,0x5691afcba90e83f0L,
16234         0x41bcaa030b8f8eacL } },
16235     /* 44 << 112 */
16236     { { 0xe38b5ff98d2668d5L,0x0715281a7ad81965L,0x1bc8fc7c03c6ce11L,
16237         0xcbbee6e28b650436L },
16238       { 0x06b00fe80cdb9808L,0x17d6e066fe3ed315L,0x2e9d38c64d0b5018L,
16239         0xab8bfd56844dcaefL } },
16240     /* 45 << 112 */
16241     { { 0x42894a59513aed8bL,0xf77f3b6d314bd07aL,0xbbdecb8f8e42b582L,
16242         0xf10e2fa8d2390fe6L },
16243       { 0xefb9502262a2f201L,0x4d59ea5050ee32b0L,0xd87f77286da789a8L,
16244         0xcf98a2cff79492c4L } },
16245     /* 46 << 112 */
16246     { { 0xf9577239720943c2L,0xba044cf53990b9d0L,0x5aa8e82395f2884aL,
16247         0x834de6ed0278a0afL },
16248       { 0xc8e1ee9a5f25bd12L,0x9259ceaa6f7ab271L,0x7e6d97a277d00b76L,
16249         0x5c0c6eeaa437832aL } },
16250     /* 47 << 112 */
16251     { { 0x5232c20f5606b81dL,0xabd7b3750d991ee5L,0x4d2bfe358632d951L,
16252         0x78f8514698ed9364L },
16253       { 0x951873f0f30c3282L,0x0da8ac80a789230bL,0x3ac7789c5398967fL,
16254         0xa69b8f7fbdda0fb5L } },
16255     /* 48 << 112 */
16256     { { 0xe5db77176add8545L,0x1b71cb6672c49b66L,0xd856073968421d77L,
16257         0x03840fe883e3afeaL },
16258       { 0xb391dad51ec69977L,0xae243fb9307f6726L,0xc88ac87be8ca160cL,
16259         0x5174cced4ce355f4L } },
16260     /* 49 << 112 */
16261     { { 0x98a35966e58ba37dL,0xfdcc8da27817335dL,0x5b75283083fbc7bfL,
16262         0x68e419d4d9c96984L },
16263       { 0x409a39f402a40380L,0x88940faf1fe977bcL,0xc640a94b8f8edea6L,
16264         0x1e22cd17ed11547dL } },
16265     /* 50 << 112 */
16266     { { 0xe28568ce59ffc3e2L,0x60aa1b55c1dee4e7L,0xc67497c8837cb363L,
16267         0x06fb438a105a2bf2L },
16268       { 0x30357ec4500d8e20L,0x1ad9095d0670db10L,0x7f589a05c73b7cfdL,
16269         0xf544607d880d6d28L } },
16270     /* 51 << 112 */
16271     { { 0x17ba93b1a20ef103L,0xad8591306ba6577bL,0x65c91cf66fa214a0L,
16272         0xd7d49c6c27990da5L },
16273       { 0xecd9ec8d20bb569dL,0xbd4b2502eeffbc33L,0x2056ca5a6bed0467L,
16274         0x7916a1f75b63728cL } },
16275     /* 52 << 112 */
16276     { { 0xd4f9497d53a4f566L,0x8973466497b56810L,0xf8e1da740494a621L,
16277         0x82546a938d011c68L },
16278       { 0x1f3acb19c61ac162L,0x52f8fa9cabad0d3eL,0x15356523b4b7ea43L,
16279         0x5a16ad61ae608125L } },
16280     /* 53 << 112 */
16281     { { 0xb0bcb87f4faed184L,0x5f236b1d5029f45fL,0xd42c76070bc6b1fcL,
16282         0xc644324e68aefce3L },
16283       { 0x8e191d595c5d8446L,0xc020807713ae1979L,0xadcaee553ba59cc7L,
16284         0x20ed6d6ba2cb81baL } },
16285     /* 54 << 112 */
16286     { { 0x0952ba19b6efcffcL,0x60f12d6897c0b87cL,0x4ee2c7c49caa30bcL,
16287         0x767238b797fbff4eL },
16288       { 0xebc73921501b5d92L,0x3279e3dfc2a37737L,0x9fc12bc86d197543L,
16289         0xfa94dc6f0a40db4eL } },
16290     /* 55 << 112 */
16291     { { 0x7392b41a530ccbbdL,0x87c82146ea823525L,0xa52f984c05d98d0cL,
16292         0x2ae57d735ef6974cL },
16293       { 0x9377f7bf3042a6ddL,0xb1a007c019647a64L,0xfaa9079a0cca9767L,
16294         0x3d81a25bf68f72d5L } },
16295     /* 56 << 112 */
16296     { { 0x752067f8ff81578eL,0x786221509045447dL,0xc0c22fcf0505aa6fL,
16297         0x1030f0a66bed1c77L },
16298       { 0x31f29f151f0bd739L,0x2d7989c7e6debe85L,0x5c070e728e677e98L,
16299         0x0a817bd306e81fd5L } },
16300     /* 57 << 112 */
16301     { { 0xc110d830b0f2ac95L,0x48d0995aab20e64eL,0x0f3e00e17729cd9aL,
16302         0x2a570c20dd556946L },
16303       { 0x912dbcfd4e86214dL,0x2d014ee2cf615498L,0x55e2b1e63530d76eL,
16304         0xc5135ae4fd0fd6d1L } },
16305     /* 58 << 112 */
16306     { { 0x0066273ad4f3049fL,0xbb8e9893e7087477L,0x2dba1ddb14c6e5fdL,
16307         0xdba3788651f57e6cL },
16308       { 0x5aaee0a65a72f2cfL,0x1208bfbf7bea5642L,0xf5c6aa3b67872c37L,
16309         0xd726e08343f93224L } },
16310     /* 59 << 112 */
16311     { { 0x1854daa5061f1658L,0xc0016df1df0cd2b3L,0xc2a3f23e833d50deL,
16312         0x73b681d2bbbd3017L },
16313       { 0x2f046dc43ac343c0L,0x9c847e7d85716421L,0xe1e13c910917eed4L,
16314         0x3fc9eebd63a1b9c6L } },
16315     /* 60 << 112 */
16316     { { 0x0f816a727fe02299L,0x6335ccc2294f3319L,0x3820179f4745c5beL,
16317         0xe647b782922f066eL },
16318       { 0xc22e49de02cafb8aL,0x299bc2fffcc2ecccL,0x9a8feea26e0e8282L,
16319         0xa627278bfe893205L } },
16320     /* 61 << 112 */
16321     { { 0xa7e197337933e47bL,0xf4ff6b132e766402L,0xa4d8be0a98440d9fL,
16322         0x658f5c2f38938808L },
16323       { 0x90b75677c95b3b3eL,0xfa0442693137b6ffL,0x077b039b43c47c29L,
16324         0xcca95dd38a6445b2L } },
16325     /* 62 << 112 */
16326     { { 0x0b498ba42333fc4cL,0x274f8e68f736a1b1L,0x6ca348fd5f1d4b2eL,
16327         0x24d3be78a8f10199L },
16328       { 0x8535f858ca14f530L,0xa6e7f1635b982e51L,0x847c851236e1bf62L,
16329         0xf6a7c58e03448418L } },
16330     /* 63 << 112 */
16331     { { 0x583f3703f9374ab6L,0x864f91956e564145L,0x33bc3f4822526d50L,
16332         0x9f323c801262a496L },
16333       { 0xaa97a7ae3f046a9aL,0x70da183edf8a039aL,0x5b68f71c52aa0ba6L,
16334         0x9be0fe5121459c2dL } },
16335     /* 64 << 112 */
16336     { { 0xc1e17eb6cbc613e5L,0x33131d55497ea61cL,0x2f69d39eaf7eded5L,
16337         0x73c2f434de6af11bL },
16338       { 0x4ca52493a4a375faL,0x5f06787cb833c5c2L,0x814e091f3e6e71cfL,
16339         0x76451f578b746666L } },
16340     /* 0 << 119 */
16341     { { 0x00, 0x00, 0x00, 0x00 },
16342       { 0x00, 0x00, 0x00, 0x00 } },
16343     /* 1 << 119 */
16344     { { 0x80f9bdef694db7e0L,0xedca8787b9fcddc6L,0x51981c3403b8dce1L,
16345         0x4274dcf170e10ba1L },
16346       { 0xf72743b86def6d1aL,0xd25b1670ebdb1866L,0xc4491e8c050c6f58L,
16347         0x2be2b2ab87fbd7f5L } },
16348     /* 2 << 119 */
16349     { { 0x3e0e5c9dd111f8ecL,0xbcc33f8db7c4e760L,0x702f9a91bd392a51L,
16350         0x7da4a795c132e92dL },
16351       { 0x1a0b0ae30bb1151bL,0x54febac802e32251L,0xea3a5082694e9e78L,
16352         0xe58ffec1e4fe40b8L } },
16353     /* 3 << 119 */
16354     { { 0xf85592fcd1e0cf9eL,0xdea75f0dc0e7b2e8L,0xc04215cfc135584eL,
16355         0x174fc7272f57092aL },
16356       { 0xe7277877eb930beaL,0x504caccb5eb02a5aL,0xf9fe08f7f5241b9bL,
16357         0xe7fb62f48d5ca954L } },
16358     /* 4 << 119 */
16359     { { 0xfbb8349d29c4120bL,0x9f94391fc0d0d915L,0xc4074fa75410ba51L,
16360         0xa66adbf6150a5911L },
16361       { 0xc164543c34bfca38L,0xe0f27560b9e1ccfcL,0x99da0f53e820219cL,
16362         0xe8234498c6b4997aL } },
16363     /* 5 << 119 */
16364     { { 0xcfb88b769d4c5423L,0x9e56eb10b0521c49L,0x418e0b5ebe8700a1L,
16365         0x00cbaad6f93cb58aL },
16366       { 0xe923fbded92a5e67L,0xca4979ac1f347f11L,0x89162d856bc0585bL,
16367         0xdd6254afac3c70e3L } },
16368     /* 6 << 119 */
16369     { { 0x7b23c513516e19e4L,0x56e2e847c5c4d593L,0x9f727d735ce71ef6L,
16370         0x5b6304a6f79a44c5L },
16371       { 0x6638a7363ab7e433L,0x1adea470fe742f83L,0xe054b8545b7fc19fL,
16372         0xf935381aba1d0698L } },
16373     /* 7 << 119 */
16374     { { 0x546eab2d799e9a74L,0x96239e0ea949f729L,0xca274c6b7090055aL,
16375         0x835142c39020c9b0L },
16376       { 0xa405667aa2e8807fL,0x29f2c0851aa3d39eL,0xcc555d6442fc72f5L,
16377         0xe856e0e7fbeacb3cL } },
16378     /* 8 << 119 */
16379     { { 0xb5504f9d918e4936L,0x65035ef6b2513982L,0x0553a0c26f4d9cb9L,
16380         0x6cb10d56bea85509L },
16381       { 0x48d957b7a242da11L,0x16a4d3dd672b7268L,0x3d7e637c8502a96bL,
16382         0x27c7032b730d463bL } },
16383     /* 9 << 119 */
16384     { { 0xbdc02b18e4136a14L,0xbacf969d678e32bfL,0xc98d89a3dd9c3c03L,
16385         0x7b92420a23becc4fL },
16386       { 0xd4b41f78c64d565cL,0x9f969d0010f28295L,0xec7f7f76b13d051aL,
16387         0x08945e1ea92da585L } },
16388     /* 10 << 119 */
16389     { { 0x55366b7d5846426fL,0xe7d09e89247d441dL,0x510b404d736fbf48L,
16390         0x7fa003d0e784bd7dL },
16391       { 0x25f7614f17fd9596L,0x49e0e0a135cb98dbL,0x2c65957b2e83a76aL,
16392         0x5d40da8dcddbe0f8L } },
16393     /* 11 << 119 */
16394     { { 0xf2b8c405050bad24L,0x8918426dc2aa4823L,0x2aeab3dda38365a7L,
16395         0x720317177c91b690L },
16396       { 0x8b00d69960a94120L,0x478a255de99eaeecL,0xbf656a5f6f60aafdL,
16397         0xdfd7cb755dee77b3L } },
16398     /* 12 << 119 */
16399     { { 0x37f68bb4a595939dL,0x0355647928740217L,0x8e740e7c84ad7612L,
16400         0xd89bc8439044695fL },
16401       { 0xf7f3da5d85a9184dL,0x562563bb9fc0b074L,0x06d2e6aaf88a888eL,
16402         0x612d8643161fbe7cL } },
16403     /* 13 << 119 */
16404     { { 0x465edba7f64085e7L,0xb230f30429aa8511L,0x53388426cda2d188L,
16405         0x908857354b666649L },
16406       { 0x6f02ff9a652f54f6L,0x65c822945fae2bf0L,0x7816ade062f5eee3L,
16407         0xdcdbdf43fcc56d70L } },
16408     /* 14 << 119 */
16409     { { 0x9fb3bba354530bb2L,0xbde3ef77cb0869eaL,0x89bc90460b431163L,
16410         0x4d03d7d2e4819a35L },
16411       { 0x33ae4f9e43b6a782L,0x216db3079c88a686L,0x91dd88e000ffedd9L,
16412         0xb280da9f12bd4840L } },
16413     /* 15 << 119 */
16414     { { 0x32a7cb8a1635e741L,0xfe14008a78be02a7L,0x3fafb3341b7ae030L,
16415         0x7fd508e75add0ce9L },
16416       { 0x72c83219d607ad51L,0x0f229c0a8d40964aL,0x1be2c3361c878da2L,
16417         0xe0c96742eab2ab86L } },
16418     /* 16 << 119 */
16419     { { 0x458f86913e538cd7L,0xa7001f6c8e08ad53L,0x52b8c6e6bf5d15ffL,
16420         0x548234a4011215ddL },
16421       { 0xff5a9d2d3d5b4045L,0xb0ffeeb64a904190L,0x55a3aca448607f8bL,
16422         0x8cbd665c30a0672aL } },
16423     /* 17 << 119 */
16424     { { 0x87f834e042583068L,0x02da2aebf3f6e683L,0x6b763e5d05c12248L,
16425         0x7230378f65a8aefcL },
16426       { 0x93bd80b571e8e5caL,0x53ab041cb3b62524L,0x1b8605136c9c552eL,
16427         0xe84d402cd5524e66L } },
16428     /* 18 << 119 */
16429     { { 0xa37f3573f37f5937L,0xeb0f6c7dd1e4fca5L,0x2965a554ac8ab0fcL,
16430         0x17fbf56c274676acL },
16431       { 0x2e2f6bd9acf7d720L,0x41fc8f8810224766L,0x517a14b385d53befL,
16432         0xdae327a57d76a7d1L } },
16433     /* 19 << 119 */
16434     { { 0x6ad0a065c4818267L,0x33aa189b37c1bbc1L,0x64970b5227392a92L,
16435         0x21699a1c2d1535eaL },
16436       { 0xcd20779cc2d7a7fdL,0xe318605999c83cf2L,0x9b69440b72c0b8c7L,
16437         0xa81497d77b9e0e4dL } },
16438     /* 20 << 119 */
16439     { { 0x515d5c891f5f82dcL,0x9a7f67d76361079eL,0xa8da81e311a35330L,
16440         0xe44990c44b18be1bL },
16441       { 0xc7d5ed95af103e59L,0xece8aba78dac9261L,0xbe82b0999394b8d3L,
16442         0x6830f09a16adfe83L } },
16443     /* 21 << 119 */
16444     { { 0x250a29b488172d01L,0x8b20bd65caff9e02L,0xb8a7661ee8a6329aL,
16445         0x4520304dd3fce920L },
16446       { 0xae45da1f2b47f7efL,0xe07f52885bffc540L,0xf79970093464f874L,
16447         0x2244c2cda6fa1f38L } },
16448     /* 22 << 119 */
16449     { { 0x43c41ac194d7d9b1L,0x5bafdd82c82e7f17L,0xdf0614c15fda0fcaL,
16450         0x74b043a7a8ae37adL },
16451       { 0x3ba6afa19e71734cL,0x15d5437e9c450f2eL,0x4a5883fe67e242b1L,
16452         0x5143bdc22c1953c2L } },
16453     /* 23 << 119 */
16454     { { 0x542b8b53fc5e8920L,0x363bf9a89a9cee08L,0x02375f10c3486e08L,
16455         0x2037543b8c5e70d2L },
16456       { 0x7109bccc625640b4L,0xcbc1051e8bc62c3bL,0xf8455fed803f26eaL,
16457         0x6badceabeb372424L } },
16458     /* 24 << 119 */
16459     { { 0xa2a9ce7c6b53f5f9L,0x642465951b176d99L,0xb1298d36b95c081bL,
16460         0x53505bb81d9a9ee6L },
16461       { 0x3f6f9e61f2ba70b0L,0xd07e16c98afad453L,0x9f1694bbe7eb4a6aL,
16462         0xdfebced93cb0bc8eL } },
16463     /* 25 << 119 */
16464     { { 0x92d3dcdc53868c8bL,0x174311a2386107a6L,0x4109e07c689b4e64L,
16465         0x30e4587f2df3dcb6L },
16466       { 0x841aea310811b3b2L,0x6144d41d0cce43eaL,0x464c45812a9a7803L,
16467         0xd03d371f3e158930L } },
16468     /* 26 << 119 */
16469     { { 0xc676d7f2b1f3390bL,0x9f7a1b8ca5b61272L,0x4ebebfc9c2e127a9L,
16470         0x4602500c5dd997bfL },
16471       { 0x7f09771c4711230fL,0x058eb37c020f09c1L,0xab693d4bfee5e38bL,
16472         0x9289eb1f4653cbc0L } },
16473     /* 27 << 119 */
16474     { { 0xbecf46abd51b9cf5L,0xd2aa9c029f0121afL,0x36aaf7d2e90dc274L,
16475         0x909e4ea048b95a3cL },
16476       { 0xe6b704966f32dbdbL,0x672188a08b030b3eL,0xeeffe5b3cfb617e2L,
16477         0x87e947de7c82709eL } },
16478     /* 28 << 119 */
16479     { { 0xa44d2b391770f5a7L,0xe4d4d7910e44eb82L,0x42e69d1e3f69712aL,
16480         0xbf11c4d6ac6a820eL },
16481       { 0xb5e7f3e542c4224cL,0xd6b4e81c449d941cL,0x5d72bd165450e878L,
16482         0x6a61e28aee25ac54L } },
16483     /* 29 << 119 */
16484     { { 0x33272094e6f1cd95L,0x7512f30d0d18673fL,0x32f7a4ca5afc1464L,
16485         0x2f0956566bbb977bL },
16486       { 0x586f47caa8226200L,0x02c868ad1ac07369L,0x4ef2b845c613acbeL,
16487         0x43d7563e0386054cL } },
16488     /* 30 << 119 */
16489     { { 0x54da9dc7ab952578L,0xb5423df226e84d0bL,0xa8b64eeb9b872042L,
16490         0xac2057825990f6dfL },
16491       { 0x4ff696eb21f4c77aL,0x1a79c3e4aab273afL,0x29bc922e9436b3f1L,
16492         0xff807ef8d6d9a27aL } },
16493     /* 31 << 119 */
16494     { { 0x82acea3d778f22a0L,0xfb10b2e85b5e7469L,0xc0b169802818ee7dL,
16495         0x011afff4c91c1a2fL },
16496       { 0x95a6d126ad124418L,0x31c081a5e72e295fL,0x36bb283af2f4db75L,
16497         0xd115540f7acef462L } },
16498     /* 32 << 119 */
16499     { { 0xc7f3a8f833f6746cL,0x21e46f65fea990caL,0x915fd5c5caddb0a9L,
16500         0xbd41f01678614555L },
16501       { 0x346f4434426ffb58L,0x8055943614dbc204L,0xf3dd20fe5a969b7fL,
16502         0x9d59e956e899a39aL } },
16503     /* 33 << 119 */
16504     { { 0xf1b0971c8ad4cf4bL,0x034488602ffb8fb8L,0xf071ac3c65340ba4L,
16505         0x408d0596b27fd758L },
16506       { 0xe7c78ea498c364b0L,0xa4aac4a5051e8ab5L,0xb9e1d560485d9002L,
16507         0x9acd518a88844455L } },
16508     /* 34 << 119 */
16509     { { 0xe4ca688fd06f56c0L,0xa48af70ddf027972L,0x691f0f045e9a609dL,
16510         0xa9dd82cdee61270eL },
16511       { 0x8903ca63a0ef18d3L,0x9fb7ee353d6ca3bdL,0xa7b4a09cabf47d03L,
16512         0x4cdada011c67de8eL } },
16513     /* 35 << 119 */
16514     { { 0x520037499355a244L,0xe77fd2b64f2151a9L,0x695d6cf666b4efcbL,
16515         0xc5a0cacfda2cfe25L },
16516       { 0x104efe5cef811865L,0xf52813e89ea5cc3dL,0x855683dc40b58dbcL,
16517         0x0338ecde175fcb11L } },
16518     /* 36 << 119 */
16519     { { 0xf9a0563774921592L,0xb4f1261db9bb9d31L,0x551429b74e9c5459L,
16520         0xbe182e6f6ea71f53L },
16521       { 0xd3a3b07cdfc50573L,0x9ba1afda62be8d44L,0x9bcfd2cb52ab65d3L,
16522         0xdf11d547a9571802L } },
16523     /* 37 << 119 */
16524     { { 0x099403ee02a2404aL,0x497406f421088a71L,0x994794095004ae71L,
16525         0xbdb42078a812c362L },
16526       { 0x2b72a30fd8828442L,0x283add27fcb5ed1cL,0xf7c0e20066a40015L,
16527         0x3e3be64108b295efL } },
16528     /* 38 << 119 */
16529     { { 0xac127dc1e038a675L,0x729deff38c5c6320L,0xb7df8fd4a90d2c53L,
16530         0x9b74b0ec681e7cd3L },
16531       { 0x5cb5a623dab407e5L,0xcdbd361576b340c6L,0xa184415a7d28392cL,
16532         0xc184c1d8e96f7830L } },
16533     /* 39 << 119 */
16534     { { 0xc3204f1981d3a80fL,0xfde0c841c8e02432L,0x78203b3e8149e0c1L,
16535         0x5904bdbb08053a73L },
16536       { 0x30fc1dd1101b6805L,0x43c223bc49aa6d49L,0x9ed671417a174087L,
16537         0x311469a0d5997008L } },
16538     /* 40 << 119 */
16539     { { 0xb189b6845e43fc61L,0xf3282375e0d3ab57L,0x4fa34b67b1181da8L,
16540         0x621ed0b299ee52b8L },
16541       { 0x9b178de1ad990676L,0xd51de67b56d54065L,0x2a2c27c47538c201L,
16542         0x33856ec838a40f5cL } },
16543     /* 41 << 119 */
16544     { { 0x2522fc15be6cdcdeL,0x1e603f339f0c6f89L,0x7994edc3103e30a6L,
16545         0x033a00db220c853eL },
16546       { 0xd3cfa409f7bb7fd7L,0x70f8781e462d18f6L,0xbbd82980687fe295L,
16547         0x6eef4c32595669f3L } },
16548     /* 42 << 119 */
16549     { { 0x86a9303b2f7e85c3L,0x5fce462171988f9bL,0x5b935bf6c138acb5L,
16550         0x30ea7d6725661212L },
16551       { 0xef1eb5f4e51ab9a2L,0x0587c98aae067c78L,0xb3ce1b3c77ca9ca6L,
16552         0x2a553d4d54b5f057L } },
16553     /* 43 << 119 */
16554     { { 0xc78982364da29ec2L,0xdbdd5d13b9c57316L,0xc57d6e6b2cd80d47L,
16555         0x80b460cffe9e7391L },
16556       { 0x98648cabf963c31eL,0x67f9f633cc4d32fdL,0x0af42a9dfdf7c687L,
16557         0x55f292a30b015ea7L } },
16558     /* 44 << 119 */
16559     { { 0x89e468b2cd21ab3dL,0xe504f022c393d392L,0xab21e1d4a5013af9L,
16560         0xe3283f78c2c28acbL },
16561       { 0xf38b35f6226bf99fL,0xe83542740e291e69L,0x61673a15b20c162dL,
16562         0xc101dc75b04fbdbeL } },
16563     /* 45 << 119 */
16564     { { 0x8323b4c2255bd617L,0x6c9696936c2a9154L,0xc6e6586062679387L,
16565         0x8e01db0cb8c88e23L },
16566       { 0x33c42873893a5559L,0x7630f04b47a3e149L,0xb5d80805ddcf35f8L,
16567         0x582ca08077dfe732L } },
16568     /* 46 << 119 */
16569     { { 0x2c7156e10b1894a0L,0x92034001d81c68c0L,0xed225d00c8b115b5L,
16570         0x237f9c2283b907f2L },
16571       { 0x0ea2f32f4470e2c0L,0xb725f7c158be4e95L,0x0f1dcafab1ae5463L,
16572         0x59ed51871ba2fc04L } },
16573     /* 47 << 119 */
16574     { { 0xf6e0f316d0115d4dL,0x5180b12fd3691599L,0x157e32c9527f0a41L,
16575         0x7b0b081da8e0ecc0L },
16576       { 0x6dbaaa8abf4f0dd0L,0x99b289c74d252696L,0x79b7755edbf864feL,
16577         0x6974e2b176cad3abL } },
16578     /* 48 << 119 */
16579     { { 0x35dbbee206ddd657L,0xe7cbdd112ff3a96dL,0x88381968076be758L,
16580         0x2d737e7208c91f5dL },
16581       { 0x5f83ab6286ec3776L,0x98aa649d945fa7a1L,0xf477ec3772ef0933L,
16582         0x66f52b1e098c17b1L } },
16583     /* 49 << 119 */
16584     { { 0x9eec58fbd803738bL,0x91aaade7e4e86aa4L,0x6b1ae617a5b51492L,
16585         0x63272121bbc45974L },
16586       { 0x7e0e28f0862c5129L,0x0a8f79a93321a4a0L,0xe26d16645041c88fL,
16587         0x0571b80553233e3aL } },
16588     /* 50 << 119 */
16589     { { 0xd1b0ccdec9520711L,0x55a9e4ed3c8b84bfL,0x9426bd39a1fef314L,
16590         0x4f5f638e6eb93f2bL },
16591       { 0xba2a1ed32bf9341bL,0xd63c13214d42d5a9L,0xd2964a89316dc7c5L,
16592         0xd1759606ca511851L } },
16593     /* 51 << 119 */
16594     { { 0xd8a9201ff9e6ed35L,0xb7b5ee456736925aL,0x0a83fbbc99581af7L,
16595         0x3076bc4064eeb051L },
16596       { 0x5511c98c02dec312L,0x270de898238dcb78L,0x2cf4cf9c539c08c9L,
16597         0xa70cb65e38d3b06eL } },
16598     /* 52 << 119 */
16599     { { 0xb12ec10ecfe57bbdL,0x82c7b65635a0c2b5L,0xddc7d5cd161c67bdL,
16600         0xe32e8985ae3a32ccL },
16601       { 0x7aba9444d11a5529L,0xe964ed022427fa1aL,0x1528392d24a1770aL,
16602         0xa152ce2c12c72fcdL } },
16603     /* 53 << 119 */
16604     { { 0x714553a48ec07649L,0x18b4c290459dd453L,0xea32b7147b64b110L,
16605         0xb871bfa52e6f07a2L },
16606       { 0xb67112e59e2e3c9bL,0xfbf250e544aa90f6L,0xf77aedb8bd539006L,
16607         0x3b0cdf9ad172a66fL } },
16608     /* 54 << 119 */
16609     { { 0xedf69feaf8c51187L,0x05bb67ec741e4da7L,0x47df0f3208114345L,
16610         0x56facb07bb9792b1L },
16611       { 0xf3e007e98f6229e4L,0x62d103f4526fba0fL,0x4f33bef7b0339d79L,
16612         0x9841357bb59bfec1L } },
16613     /* 55 << 119 */
16614     { { 0xfa8dbb59c34e6705L,0xc3c7180b7fdaa84cL,0xf95872fca4108537L,
16615         0x8750cc3b932a3e5aL },
16616       { 0xb61cc69db7275d7dL,0xffa0168b2e59b2e9L,0xca032abc6ecbb493L,
16617         0x1d86dbd32c9082d8L } },
16618     /* 56 << 119 */
16619     { { 0xae1e0b67e28ef5baL,0x2c9a4699cb18e169L,0x0ecd0e331e6bbd20L,
16620         0x571b360eaf5e81d2L },
16621       { 0xcd9fea58101c1d45L,0x6651788e18880452L,0xa99726351f8dd446L,
16622         0x44bed022e37281d0L } },
16623     /* 57 << 119 */
16624     { { 0x094b2b2d33da525dL,0xf193678e13144fd8L,0xb8ab5ba4f4c1061dL,
16625         0x4343b5fadccbe0f4L },
16626       { 0xa870237163812713L,0x47bf6d2df7611d93L,0x46729b8cbd21e1d7L,
16627         0x7484d4e0d629e77dL } },
16628     /* 58 << 119 */
16629     { { 0x830e6eea60dbac1fL,0x23d8c484da06a2f7L,0x896714b050ca535bL,
16630         0xdc8d3644ebd97a9bL },
16631       { 0x106ef9fab12177b4L,0xf79bf464534d5d9cL,0x2537a349a6ab360bL,
16632         0xc7c54253a00c744fL } },
16633     /* 59 << 119 */
16634     { { 0xb3c7a047e5911a76L,0x61ffa5c8647f1ee7L,0x15aed36f8f56ab42L,
16635         0x6a0d41b0a3ff9ac9L },
16636       { 0x68f469f5cc30d357L,0xbe9adf816b72be96L,0x1cd926fe903ad461L,
16637         0x7e89e38fcaca441bL } },
16638     /* 60 << 119 */
16639     { { 0xf0f82de5facf69d4L,0x363b7e764775344cL,0x6894f312b2e36d04L,
16640         0x3c6cb4fe11d1c9a5L },
16641       { 0x85d9c3394008e1f2L,0x5e9a85ea249f326cL,0xdc35c60a678c5e06L,
16642         0xc08b944f9f86fba9L } },
16643     /* 61 << 119 */
16644     { { 0xde40c02c89f71f0fL,0xad8f3e31ff3da3c0L,0x3ea5096b42125dedL,
16645         0x13879cbfa7379183L },
16646       { 0x6f4714a56b306a0bL,0x359c2ea667646c5eL,0xfacf894307726368L,
16647         0x07a5893565ff431eL } },
16648     /* 62 << 119 */
16649     { { 0x24d661d168754ab0L,0x801fce1d6f429a76L,0xc068a85fa58ce769L,
16650         0xedc35c545d5eca2bL },
16651       { 0xea31276fa3f660d1L,0xa0184ebeb8fc7167L,0x0f20f21a1d8db0aeL,
16652         0xd96d095f56c35e12L } },
16653     /* 63 << 119 */
16654     { { 0xedf402b5f8c2a25bL,0x1bb772b9059204b6L,0x50cbeae219b4e34cL,
16655         0x93109d803fa0845aL },
16656       { 0x54f7ccf78ef59fb5L,0x3b438fe288070963L,0x9e28c65931f3ba9bL,
16657         0x9cc31b46ead9da92L } },
16658     /* 64 << 119 */
16659     { { 0x3c2f0ba9b733aa5fL,0xdece47cbf05af235L,0xf8e3f715a2ac82a5L,
16660         0xc97ba6412203f18aL },
16661       { 0xc3af550409c11060L,0x56ea2c0546af512dL,0xfac28daff3f28146L,
16662         0x87fab43a959ef494L } },
16663     /* 0 << 126 */
16664     { { 0x00, 0x00, 0x00, 0x00 },
16665       { 0x00, 0x00, 0x00, 0x00 } },
16666     /* 1 << 126 */
16667     { { 0x09891641d4c5105fL,0x1ae80f8e6d7fbd65L,0x9d67225fbee6bdb0L,
16668         0x3b433b597fc4d860L },
16669       { 0x44e66db693e85638L,0xf7b59252e3e9862fL,0xdb785157665c32ecL,
16670         0x702fefd7ae362f50L } },
16671     /* 2 << 126 */
16672     { { 0x3754475d0fefb0c3L,0xd48fb56b46d7c35dL,0xa070b633363798a4L,
16673         0xae89f3d28fdb98e6L },
16674       { 0x970b89c86363d14cL,0x8981752167abd27dL,0x9bf7d47444d5a021L,
16675         0xb3083bafcac72aeeL } },
16676     /* 3 << 126 */
16677     { { 0x389741debe949a44L,0x638e9388546a4fa5L,0x3fe6419ca0047bdcL,
16678         0x7047f648aaea57caL },
16679       { 0x54e48a9041fbab17L,0xda8e0b28576bdba2L,0xe807eebcc72afddcL,
16680         0x07d3336df42577bfL } },
16681     /* 4 << 126 */
16682     { { 0x62a8c244bfe20925L,0x91c19ac38fdce867L,0x5a96a5d5dd387063L,
16683         0x61d587d421d324f6L },
16684       { 0xe87673a2a37173eaL,0x2384800853778b65L,0x10f8441e05bab43eL,
16685         0xfa11fe124621efbeL } },
16686     /* 5 << 126 */
16687     { { 0x047b772e81685d7bL,0x23f27d81bf34a976L,0xc27608e2915f48efL,
16688         0x3b0b43faa521d5c3L },
16689       { 0x7613fb2663ca7284L,0x7f5729b41d4db837L,0x87b14898583b526bL,
16690         0x00b732a6bbadd3d1L } },
16691     /* 6 << 126 */
16692     { { 0x8e02f4262048e396L,0x436b50b6383d9de4L,0xf78d3481471e85adL,
16693         0x8b01ea6ad005c8d6L },
16694       { 0xd3c7afee97015c07L,0x46cdf1a94e3ba2aeL,0x7a42e50183d3a1d2L,
16695         0xd54b5268b541dff4L } },
16696     /* 7 << 126 */
16697     { { 0x3f24cf304e23e9bcL,0x4387f816126e3624L,0x26a46a033b0b6d61L,
16698         0xaf1bc8458b2d777cL },
16699       { 0x25c401ba527de79cL,0x0e1346d44261bbb6L,0x4b96c44b287b4bc7L,
16700         0x658493c75254562fL } },
16701     /* 8 << 126 */
16702     { { 0x23f949feb8a24a20L,0x17ebfed1f52ca53fL,0x9b691bbebcfb4853L,
16703         0x5617ff6b6278a05dL },
16704       { 0x241b34c5e3c99ebdL,0xfc64242e1784156aL,0x4206482f695d67dfL,
16705         0xb967ce0eee27c011L } },
16706     /* 9 << 126 */
16707     { { 0x65db375121c80b5dL,0x2e7a563ca31ecca0L,0xe56ffc4e5238a07eL,
16708         0x3d6c296632ced854L },
16709       { 0xe99d7d1aaf70b885L,0xafc3bad92d686459L,0x9c78bf460cc8ba5bL,
16710         0x5a43951918955aa3L } },
16711     /* 10 << 126 */
16712     { { 0xf8b517a85fe4e314L,0xe60234d0fcb8906fL,0xffe542acf2061b23L,
16713         0x287e191f6b4cb59cL },
16714       { 0x21857ddc09d877d8L,0x1c23478c14678941L,0xbbf0c056b6e05ea4L,
16715         0x82da4b53b01594feL } },
16716     /* 11 << 126 */
16717     { { 0xf7526791fadb8608L,0x049e832d7b74cdf6L,0xa43581ccc2b90a34L,
16718         0x73639eb89360b10cL },
16719       { 0x4fba331fe1e4a71bL,0x6ffd6b938072f919L,0x6e53271c65679032L,
16720         0x67206444f14272ceL } },
16721     /* 12 << 126 */
16722     { { 0xc0f734a3b2335834L,0x9526205a90ef6860L,0xcb8be71704e2bb0dL,
16723         0x2418871e02f383faL },
16724       { 0xd71776814082c157L,0xcc914ad029c20073L,0xf186c1ebe587e728L,
16725         0x6fdb3c2261bcd5fdL } },
16726     /* 13 << 126 */
16727     { { 0x30d014a6f2f9f8e9L,0x963ece234fec49d2L,0x862025c59605a8d9L,
16728         0x3987444519f8929aL },
16729       { 0x01b6ff6512bf476aL,0x598a64d809cf7d91L,0xd7ec774993be56caL,
16730         0x10899785cbb33615L } },
16731     /* 14 << 126 */
16732     { { 0xb8a092fd02eee3adL,0xa86b3d3530145270L,0x323d98c68512b675L,
16733         0x4b8bc78562ebb40fL },
16734       { 0x7d301f54413f9cdeL,0xa5e4fb4f2bab5664L,0x1d2b252d1cbfec23L,
16735         0xfcd576bbe177120dL } },
16736     /* 15 << 126 */
16737     { { 0x04427d3e83731a34L,0x2bb9028eed836e8eL,0xb36acff8b612ca7cL,
16738         0xb88fe5efd3d9c73aL },
16739       { 0xbe2a6bc6edea4eb3L,0x43b93133488eec77L,0xf41ff566b17106e1L,
16740         0x469e9172654efa32L } },
16741     /* 16 << 126 */
16742     { { 0xb4480f0441c23fa3L,0xb4712eb0c1989a2eL,0x3ccbba0f93a29ca7L,
16743         0x6e205c14d619428cL },
16744       { 0x90db7957b3641686L,0x0432691d45ac8b4eL,0x07a759acf64e0350L,
16745         0x0514d89c9c972517L } },
16746     /* 17 << 126 */
16747     { { 0x1701147fa8e67fc3L,0x9e2e0b8bab2085beL,0xd5651824ac284e57L,
16748         0x890d432574893664L },
16749       { 0x8a7c5e6ec55e68a3L,0xbf12e90b4339c85aL,0x31846b85f922b655L,
16750         0x9a54ce4d0bf4d700L } },
16751     /* 18 << 126 */
16752     { { 0xd7f4e83af1a14295L,0x916f955cb285d4f9L,0xe57bb0e099ffdabaL,
16753         0x28a43034eab0d152L },
16754       { 0x0a36ffa2b8a9cef8L,0x5517407eb9ec051aL,0x9c796096ea68e672L,
16755         0x853db5fbfb3c77fbL } },
16756     /* 19 << 126 */
16757     { { 0x21474ba9e864a51aL,0x6c2676996e8a1b8bL,0x7c82362694120a28L,
16758         0xe61e9a488383a5dbL },
16759       { 0x7dd750039f84216dL,0xab020d07ad43cd85L,0x9437ae48da12c659L,
16760         0x6449c2ebe65452adL } },
16761     /* 20 << 126 */
16762     { { 0xcc7c4c1c2cf9d7c1L,0x1320886aee95e5abL,0xbb7b9056beae170cL,
16763         0xc8a5b250dbc0d662L },
16764       { 0x4ed81432c11d2303L,0x7da669121f03769fL,0x3ac7a5fd84539828L,
16765         0x14dada943bccdd02L } },
16766     /* 21 << 126 */
16767     { { 0x8b84c3217ef6b0d1L,0x52a9477a7c933f22L,0x5ef6728afd440b82L,
16768         0x5c3bd8596ce4bd5eL },
16769       { 0x918b80f5f22c2d3eL,0x368d5040b7bb6cc5L,0xb66142a12695a11cL,
16770         0x60ac583aeb19ea70L } },
16771     /* 22 << 126 */
16772     { { 0x317cbb980eab2437L,0x8cc08c555e2654c8L,0xfe2d6520e6d8307fL,
16773         0xe9f147f357428993L },
16774       { 0x5f9c7d14d2fd6cf1L,0xa3ecd0642d4fcbb0L,0xad83fef08e7341f7L,
16775         0x643f23a03a63115cL } },
16776     /* 23 << 126 */
16777     { { 0xd38a78abe65ab743L,0xbf7c75b135edc89cL,0x3dd8752e530df568L,
16778         0xf85c4a76e308c682L },
16779       { 0x4c9955b2e68acf37L,0xa544df3dab32af85L,0x4b8ec3f5a25cf493L,
16780         0x4d8f27641a622febL } },
16781     /* 24 << 126 */
16782     { { 0x7bb4f7aaf0dcbc49L,0x7de551f970bbb45bL,0xcfd0f3e49f2ca2e5L,
16783         0xece587091f5c76efL },
16784       { 0x32920edd167d79aeL,0x039df8a2fa7d7ec1L,0xf46206c0bb30af91L,
16785         0x1ff5e2f522676b59L } },
16786     /* 25 << 126 */
16787     { { 0x11f4a0396ea51d66L,0x506c1445807d7a26L,0x60da5705755a9b24L,
16788         0x8fc8cc321f1a319eL },
16789       { 0x83642d4d9433d67dL,0x7fa5cb8f6a7dd296L,0x576591db9b7bde07L,
16790         0x13173d25419716fbL } },
16791     /* 26 << 126 */
16792     { { 0xea30599dd5b340ffL,0xfc6b5297b0fe76c5L,0x1c6968c8ab8f5adcL,
16793         0xf723c7f5901c928dL },
16794       { 0x4203c3219773d402L,0xdf7c6aa31b51dd47L,0x3d49e37a552be23cL,
16795         0x57febee80b5a6e87L } },
16796     /* 27 << 126 */
16797     { { 0xc5ecbee47bd8e739L,0x79d44994ae63bf75L,0x168bd00f38fb8923L,
16798         0x75d48ee4d0533130L },
16799       { 0x554f77aadb5cdf33L,0x3396e8963c696769L,0x2fdddbf2d3fd674eL,
16800         0xbbb8f6ee99d0e3e5L } },
16801     /* 28 << 126 */
16802     { { 0x51b90651cbae2f70L,0xefc4bc0593aaa8ebL,0x8ecd8689dd1df499L,
16803         0x1aee99a822f367a5L },
16804       { 0x95d485b9ae8274c5L,0x6c14d4457d30b39cL,0xbafea90bbcc1ef81L,
16805         0x7c5f317aa459a2edL } },
16806     /* 29 << 126 */
16807     { { 0x012110754ef44227L,0xa17bed6edc20f496L,0x0cdfe424819853cdL,
16808         0x13793298f71e2ce7L },
16809       { 0x3c1f3078dbbe307bL,0x6dd1c20e76ee9936L,0x23ee4b57423caa20L,
16810         0x4ac3793b8efb840eL } },
16811     /* 30 << 126 */
16812     { { 0x934438ebed1f8ca0L,0x3e5466584ebb25a2L,0xc415af0ec069896fL,
16813         0xc13eddb09a5aa43dL },
16814       { 0x7a04204fd49eb8f6L,0xd0d5bdfcd74f1670L,0x3697e28656fc0558L,
16815         0x1020737101cebadeL } },
16816     /* 31 << 126 */
16817     { { 0x5f87e6900647a82bL,0x908e0ed48f40054fL,0xa9f633d479853803L,
16818         0x8ed13c9a4a28b252L },
16819       { 0x3e2ef6761f460f64L,0x53930b9b36d06336L,0x347073ac8fc4979bL,
16820         0x84380e0e5ecd5597L } },
16821     /* 32 << 126 */
16822     { { 0xe3b22c6bc4fe3c39L,0xba4a81536c7bebdfL,0xf23ab6b725693459L,
16823         0x53bc377014922b11L },
16824       { 0x4645c8ab5afc60dbL,0xaa02235520b9f2a3L,0x52a2954cce0fc507L,
16825         0x8c2731bb7ce1c2e7L } },
16826     /* 33 << 126 */
16827     { { 0xf39608ab18a0339dL,0xac7a658d3735436cL,0xb22c2b07cd992b4fL,
16828         0x4e83daecf40dcfd4L },
16829       { 0x8a34c7be2f39ea3eL,0xef0c005fb0a56d2eL,0x62731f6a6edd8038L,
16830         0x5721d7404e3cb075L } },
16831     /* 34 << 126 */
16832     { { 0x1ea41511fbeeee1bL,0xd1ef5e73ef1d0c05L,0x42feefd173c07d35L,
16833         0xe530a00a8a329493L },
16834       { 0x5d55b7fef15ebfb0L,0x549de03cd322491aL,0xf7b5f602745b3237L,
16835         0x3632a3a21ab6e2b6L } },
16836     /* 35 << 126 */
16837     { { 0x0d3bba890ef59f78L,0x0dfc6443c9e52b9aL,0x1dc7969972631447L,
16838         0xef033917b3be20b1L },
16839       { 0x0c92735db1383948L,0xc1fc29a2c0dd7d7dL,0x6485b697403ed068L,
16840         0x13bfaab3aac93bdcL } },
16841     /* 36 << 126 */
16842     { { 0x410dc6a90deeaf52L,0xb003fb024c641c15L,0x1384978c5bc504c4L,
16843         0x37640487864a6a77L },
16844       { 0x05991bc6222a77daL,0x62260a575e47eb11L,0xc7af6613f21b432cL,
16845         0x22f3acc9ab4953e9L } },
16846     /* 37 << 126 */
16847     { { 0x529349228e41d155L,0x4d0245683ac059efL,0xb02017554d884411L,
16848         0xce8055cfa59a178fL },
16849       { 0xcd77d1aff6204549L,0xa0a00a3ec7066759L,0x471071ef0272c229L,
16850         0x009bcf6bd3c4b6b0L } },
16851     /* 38 << 126 */
16852     { { 0x2a2638a822305177L,0xd51d59df41645bbfL,0xa81142fdc0a7a3c0L,
16853         0xa17eca6d4c7063eeL },
16854       { 0x0bb887ed60d9dcecL,0xd6d28e5120ad2455L,0xebed6308a67102baL,
16855         0x042c31148bffa408L } },
16856     /* 39 << 126 */
16857     { { 0xfd099ac58aa68e30L,0x7a6a3d7c1483513eL,0xffcc6b75ba2d8f0cL,
16858         0x54dacf961e78b954L },
16859       { 0xf645696fa4a9af89L,0x3a41194006ac98ecL,0x41b8b3f622a67a20L,
16860         0x2d0b1e0f99dec626L } },
16861     /* 40 << 126 */
16862     { { 0x27c8919240be34e8L,0xc7162b3791907f35L,0x90188ec1a956702bL,
16863         0xca132f7ddf93769cL },
16864       { 0x3ece44f90e2025b4L,0x67aaec690c62f14cL,0xad74141822e3cc11L,
16865         0xcf9b75c37ff9a50eL } },
16866     /* 41 << 126 */
16867     { { 0x02fa2b164d348272L,0xbd99d61a9959d56dL,0xbc4f19db18762916L,
16868         0xcc7cce5049c1ac80L },
16869       { 0x4d59ebaad846bd83L,0x8775a9dca9202849L,0x07ec4ae16e1f4ca9L,
16870         0x27eb5875ba893f11L } },
16871     /* 42 << 126 */
16872     { { 0x00284d51662cc565L,0x82353a6b0db4138dL,0xd9c7aaaaaa32a594L,
16873         0xf5528b5ea5669c47L },
16874       { 0xf32202312f23c5ffL,0xe3e8147a6affa3a1L,0xfb423d5c202ddda0L,
16875         0x3d6414ac6b871bd4L } },
16876     /* 43 << 126 */
16877     { { 0x586f82e1a51a168aL,0xb712c67148ae5448L,0x9a2e4bd176233eb8L,
16878         0x0188223a78811ca9L },
16879       { 0x553c5e21f7c18de1L,0x7682e451b27bb286L,0x3ed036b30e51e929L,
16880         0xf487211bec9cb34fL } },
16881     /* 44 << 126 */
16882     { { 0x0d0942770c24efc8L,0x0349fd04bef737a4L,0x6d1c9dd2514cdd28L,
16883         0x29c135ff30da9521L },
16884       { 0xea6e4508f78b0b6fL,0x176f5dd2678c143cL,0x081484184be21e65L,
16885         0x27f7525ce7df38c4L } },
16886     /* 45 << 126 */
16887     { { 0x1fb70e09748ab1a4L,0x9cba50a05efe4433L,0x7846c7a615f75af2L,
16888         0x2a7c2c575ee73ea8L },
16889       { 0x42e566a43f0a449aL,0x45474c3bad90fc3dL,0x7447be3d8b61d057L,
16890         0x3e9d1cf13a4ec092L } },
16891     /* 46 << 126 */
16892     { { 0x1603e453f380a6e6L,0x0b86e4319b1437c2L,0x7a4173f2ef29610aL,
16893         0x8fa729a7f03d57f7L },
16894       { 0x3e186f6e6c9c217eL,0xbe1d307991919524L,0x92a62a70153d4fb1L,
16895         0x32ed3e34d68c2f71L } },
16896     /* 47 << 126 */
16897     { { 0xd785027f9eb1a8b7L,0xbc37eb77c5b22fe8L,0x466b34f0b9d6a191L,
16898         0x008a89af9a05f816L },
16899       { 0x19b028fb7d42c10aL,0x7fe8c92f49b3f6b8L,0x58907cc0a5a0ade3L,
16900         0xb3154f51559d1a7cL } },
16901     /* 48 << 126 */
16902     { { 0x5066efb6d9790ed6L,0xa77a0cbca6aa793bL,0x1a915f3c223e042eL,
16903         0x1c5def0469c5874bL },
16904       { 0x0e83007873b6c1daL,0x55cf85d2fcd8557aL,0x0f7c7c760460f3b1L,
16905         0x87052acb46e58063L } },
16906     /* 49 << 126 */
16907     { { 0x09212b80907eae66L,0x3cb068e04d721c89L,0xa87941aedd45ac1cL,
16908         0xde8d5c0d0daa0dbbL },
16909       { 0xda421fdce3502e6eL,0xc89442014d89a084L,0x7307ba5ef0c24bfbL,
16910         0xda212beb20bde0efL } },
16911     /* 50 << 126 */
16912     { { 0xea2da24bf82ce682L,0x058d381607f71fe4L,0x35a024625ffad8deL,
16913         0xcd7b05dcaadcefabL },
16914       { 0xd442f8ed1d9f54ecL,0x8be3d618b2d3b5caL,0xe2220ed0e06b2ce2L,
16915         0x82699a5f1b0da4c0L } },
16916     /* 51 << 126 */
16917     { { 0x3ff106f571c0c3a7L,0x8f580f5a0d34180cL,0x4ebb120e22d7d375L,
16918         0x5e5782cce9513675L },
16919       { 0x2275580c99c82a70L,0xe8359fbf15ea8c4cL,0x53b48db87b415e70L,
16920         0xaacf2240100c6014L } },
16921     /* 52 << 126 */
16922     { { 0x9faaccf5e4652f1dL,0xbd6fdd2ad56157b2L,0xa4f4fb1f6261ec50L,
16923         0x244e55ad476bcd52L },
16924       { 0x881c9305047d320bL,0x1ca983d56181263fL,0x354e9a44278fb8eeL,
16925         0xad2dbc0f396e4964L } },
16926     /* 53 << 126 */
16927     { { 0x723f3aa29268b3deL,0x0d1ca29ae6e0609aL,0x794866aa6cf44252L,
16928         0x0b59f3e301af87edL },
16929       { 0xe234e5ff7f4a6c51L,0xa8768fd261dc2f7eL,0xdafc73320a94d81fL,
16930         0xd7f8428206938ce1L } },
16931     /* 54 << 126 */
16932     { { 0xae0b3c0e0546063eL,0x7fbadcb25d61abc6L,0xd5d7a2c9369ac400L,
16933         0xa5978d09ae67d10cL },
16934       { 0x290f211e4f85eaacL,0xe61e2ad1facac681L,0xae125225388384cdL,
16935         0xa7fb68e9ccfde30fL } },
16936     /* 55 << 126 */
16937     { { 0x7a59b9363daed4c2L,0x80a9aa402606f789L,0xb40c1ea5f6a6d90aL,
16938         0x948364d3514d5885L },
16939       { 0x062ebc6070985182L,0xa6db5b0e33310895L,0x64a12175e329c2f5L,
16940         0xc5f25bd290ea237eL } },
16941     /* 56 << 126 */
16942     { { 0x7915c5242d0a4c23L,0xeb5d26e46bb3cc52L,0x369a9116c09e2c92L,
16943         0x0c527f92cf182cf8L },
16944       { 0x9e5919382aede0acL,0xb29222086cc34939L,0x3c9d896299a34361L,
16945         0x3c81836dc1905fe6L } },
16946     /* 57 << 126 */
16947     { { 0x4bfeb57fa001ec5aL,0xe993f5bba0dc5dbaL,0x47884109724a1380L,
16948         0x8a0369ab32fe9a04L },
16949       { 0xea068d608c927db8L,0xbf5f37cf94655741L,0x47d402a204b6c7eaL,
16950         0x4551c2956af259cbL } },
16951     /* 58 << 126 */
16952     { { 0x698b71e7ed77ee8bL,0xbddf7bd0f309d5c7L,0x6201c22c34e780caL,
16953         0xab04f7d84c295ef4L },
16954       { 0x1c9472944313a8ceL,0xe532e4ac92ca4cfeL,0x89738f80d0a7a97aL,
16955         0xec088c88a580fd5bL } },
16956     /* 59 << 126 */
16957     { { 0x612b1ecc42ce9e51L,0x8f9840fdb25fdd2aL,0x3cda78c001e7f839L,
16958         0x546b3d3aece05480L },
16959       { 0x271719a980d30916L,0x45497107584c20c4L,0xaf8f94785bc78608L,
16960         0x28c7d484277e2a4cL } },
16961     /* 60 << 126 */
16962     { { 0xfce0176788a2ffe4L,0xdc506a3528e169a5L,0x0ea108617af9c93aL,
16963         0x1ed2436103fa0e08L },
16964       { 0x96eaaa92a3d694e7L,0xc0f43b4def50bc74L,0xce6aa58c64114db4L,
16965         0x8218e8ea7c000fd4L } },
16966     /* 61 << 126 */
16967     { { 0xac815dfb185f8844L,0xcd7e90cb1557abfbL,0x23d16655afbfecdfL,
16968         0x80f3271f085cac4aL },
16969       { 0x7fc39aa7d0e62f47L,0x88d519d1460a48e5L,0x59559ac4d28f101eL,
16970         0x7981d9e9ca9ae816L } },
16971     /* 62 << 126 */
16972     { { 0x5c38652c9ac38203L,0x86eaf87f57657fe5L,0x568fc472e21f5416L,
16973         0x2afff39ce7e597b5L },
16974       { 0x3adbbb07256d4eabL,0x225986928285ab89L,0x35f8112a041caefeL,
16975         0x95df02e3a5064c8bL } },
16976     /* 63 << 126 */
16977     { { 0x4d63356ec7004bf3L,0x230a08f4db83c7deL,0xca27b2708709a7b7L,
16978         0x0d1c4cc4cb9abd2dL },
16979       { 0x8a0bc66e7550fee8L,0x369cd4c79cf7247eL,0x75562e8492b5b7e7L,
16980         0x8fed0da05802af7bL } },
16981     /* 64 << 126 */
16982     { { 0x6a7091c2e48fb889L,0x26882c137b8a9d06L,0xa24986631b82a0e2L,
16983         0x844ed7363518152dL },
16984       { 0x282f476fd86e27c7L,0xa04edaca04afefdcL,0x8b256ebc6119e34dL,
16985         0x56a413e90787d78bL } },
16986     /* 0 << 133 */
16987     { { 0x00, 0x00, 0x00, 0x00 },
16988       { 0x00, 0x00, 0x00, 0x00 } },
16989     /* 1 << 133 */
16990     { { 0x82ee061d5a74be50L,0xe41781c4dea16ff5L,0xe0b0c81e99bfc8a2L,
16991         0x624f4d690b547e2dL },
16992       { 0x3a83545dbdcc9ae4L,0x2573dbb6409b1e8eL,0x482960c4a6c93539L,
16993         0xf01059ad5ae18798L } },
16994     /* 2 << 133 */
16995     { { 0x715c9f973112795fL,0xe8244437984e6ee1L,0x55cb4858ecb66bcdL,
16996         0x7c136735abaffbeeL },
16997       { 0x546615955dbec38eL,0x51c0782c388ad153L,0x9ba4c53ac6e0952fL,
16998         0x27e6782a1b21dfa8L } },
16999     /* 3 << 133 */
17000     { { 0x682f903d4ed2dbc2L,0x0eba59c87c3b2d83L,0x8e9dc84d9c7e9335L,
17001         0x5f9b21b00eb226d7L },
17002       { 0xe33bd394af267baeL,0xaa86cc25be2e15aeL,0x4f0bf67d6a8ec500L,
17003         0x5846aa44f9630658L } },
17004     /* 4 << 133 */
17005     { { 0xfeb09740e2c2bf15L,0x627a2205a9e99704L,0xec8d73d0c2fbc565L,
17006         0x223eed8fc20c8de8L },
17007       { 0x1ee32583a8363b49L,0x1a0b6cb9c9c2b0a6L,0x49f7c3d290dbc85cL,
17008         0xa8dfbb971ef4c1acL } },
17009     /* 5 << 133 */
17010     { { 0xafb34d4c65c7c2abL,0x1d4610e7e2c5ea84L,0x893f6d1b973c4ab5L,
17011         0xa3cdd7e9945ba5c4L },
17012       { 0x60514983064417eeL,0x1459b23cad6bdf2bL,0x23b2c3415cf726c3L,
17013         0x3a82963532d6354aL } },
17014     /* 6 << 133 */
17015     { { 0x294f901fab192c18L,0xec5fcbfe7030164fL,0xe2e2fcb7e2246ba6L,
17016         0x1e7c88b3221a1a0cL },
17017       { 0x72c7dd93c92d88c5L,0x41c2148e1106fb59L,0x547dd4f5a0f60f14L,
17018         0xed9b52b263960f31L } },
17019     /* 7 << 133 */
17020     { { 0x6c8349ebb0a5b358L,0xb154c5c29e7e2ed6L,0xcad5eccfeda462dbL,
17021         0xf2d6dbe42de66b69L },
17022       { 0x426aedf38665e5b2L,0x488a85137b7f5723L,0x15cc43b38bcbb386L,
17023         0x27ad0af3d791d879L } },
17024     /* 8 << 133 */
17025     { { 0xc16c236e846e364fL,0x7f33527cdea50ca0L,0xc48107750926b86dL,
17026         0x6c2a36090598e70cL },
17027       { 0xa6755e52f024e924L,0xe0fa07a49db4afcaL,0x15c3ce7d66831790L,
17028         0x5b4ef350a6cbb0d6L } },
17029     /* 9 << 133 */
17030     { { 0x2c4aafc4b6205969L,0x42563f02f6c7854fL,0x016aced51d983b48L,
17031         0xfeb356d899949755L },
17032       { 0x8c2a2c81d1a39bd7L,0x8f44340fe6934ae9L,0x148cf91c447904daL,
17033         0x7340185f0f51a926L } },
17034     /* 10 << 133 */
17035     { { 0x2f8f00fb7409ab46L,0x057e78e680e289b2L,0x03e5022ca888e5d1L,
17036         0x3c87111a9dede4e2L },
17037       { 0x5b9b0e1c7809460bL,0xe751c85271c9abc7L,0x8b944e28c7cc1dc9L,
17038         0x4f201ffa1d3cfa08L } },
17039     /* 11 << 133 */
17040     { { 0x02fc905c3e6721ceL,0xd52d70dad0b3674cL,0x5dc2e5ca18810da4L,
17041         0xa984b2735c69dd99L },
17042       { 0x63b9252784de5ca4L,0x2f1c9872c852dec4L,0x18b03593c2e3de09L,
17043         0x19d70b019813dc2fL } },
17044     /* 12 << 133 */
17045     { { 0x42806b2da6dc1d29L,0xd3030009f871e144L,0xa1feb333aaf49276L,
17046         0xb5583b9ec70bc04bL },
17047       { 0x1db0be7895695f20L,0xfc84181189d012b5L,0x6409f27205f61643L,
17048         0x40d34174d5883128L } },
17049     /* 13 << 133 */
17050     { { 0xd79196f567419833L,0x6059e252863b7b08L,0x84da18171c56700cL,
17051         0x5758ee56b28d3ec4L },
17052       { 0x7da2771d013b0ea6L,0xfddf524b54c5e9b9L,0x7df4faf824305d80L,
17053         0x58f5c1bf3a97763fL } },
17054     /* 14 << 133 */
17055     { { 0xa5af37f17c696042L,0xd4cba22c4a2538deL,0x211cb9959ea42600L,
17056         0xcd105f417b069889L },
17057       { 0xb1e1cf19ddb81e74L,0x472f2d895157b8caL,0x086fb008ee9db885L,
17058         0x365cd5700f26d131L } },
17059     /* 15 << 133 */
17060     { { 0x284b02bba2be7053L,0xdcbbf7c67ab9a6d6L,0x4425559c20f7a530L,
17061         0x961f2dfa188767c8L },
17062       { 0xe2fd943570dc80c4L,0x104d6b63f0784120L,0x7f592bc153567122L,
17063         0xf6bc1246f688ad77L } },
17064     /* 16 << 133 */
17065     { { 0x05214c050f15dde9L,0xa47a76a80d5f2b82L,0xbb254d3062e82b62L,
17066         0x11a05fe03ec955eeL },
17067       { 0x7eaff46e9d529b36L,0x55ab13018f9e3df6L,0xc463e37199317698L,
17068         0xfd251438ccda47adL } },
17069     /* 17 << 133 */
17070     { { 0xca9c354723d695eaL,0x48ce626e16e589b5L,0x6b5b64c7b187d086L,
17071         0xd02e1794b2207948L },
17072       { 0x8b58e98f7198111dL,0x90ca6305dcf9c3ccL,0x5691fe72f34089b0L,
17073         0x60941af1fc7c80ffL } },
17074     /* 18 << 133 */
17075     { { 0xa09bc0a222eb51e5L,0xc0bb7244aa9cf09aL,0x36a8077f80159f06L,
17076         0x8b5c989edddc560eL },
17077       { 0x19d2f316512e1f43L,0x02eac554ad08ff62L,0x012ab84c07d20b4eL,
17078         0x37d1e115d6d4e4e1L } },
17079     /* 19 << 133 */
17080     { { 0xb6443e1aab7b19a8L,0xf08d067edef8cd45L,0x63adf3e9685e03daL,
17081         0xcf15a10e4792b916L },
17082       { 0xf44bcce5b738a425L,0xebe131d59636b2fdL,0x940688417850d605L,
17083         0x09684eaab40d749dL } },
17084     /* 20 << 133 */
17085     { { 0x8c3c669c72ba075bL,0x89f78b55ba469015L,0x5706aade3e9f8ba8L,
17086         0x6d8bd565b32d7ed7L },
17087       { 0x25f4e63b805f08d6L,0x7f48200dc3bcc1b5L,0x4e801968b025d847L,
17088         0x74afac0487cbe0a8L } },
17089     /* 21 << 133 */
17090     { { 0x43ed2c2b7e63d690L,0xefb6bbf00223cdb8L,0x4fec3cae2884d3feL,
17091         0x065ecce6d75e25a4L },
17092       { 0x6c2294ce69f79071L,0x0d9a8e5f044b8666L,0x5009f23817b69d8fL,
17093         0x3c29f8fec5dfdaf7L } },
17094     /* 22 << 133 */
17095     { { 0x9067528febae68c4L,0x5b38563230c5ba21L,0x540df1191fdd1aecL,
17096         0xcf37825bcfba4c78L },
17097       { 0x77eff980beb11454L,0x40a1a99160c1b066L,0xe8018980f889a1c7L,
17098         0xb9c52ae976c24be0L } },
17099     /* 23 << 133 */
17100     { { 0x05fbbcce45650ef4L,0xae000f108aa29ac7L,0x884b71724f04c470L,
17101         0x7cd4fde219bb5c25L },
17102       { 0x6477b22ae8840869L,0xa88688595fbd0686L,0xf23cc02e1116dfbaL,
17103         0x76cd563fd87d7776L } },
17104     /* 24 << 133 */
17105     { { 0xe2a37598a9d82abfL,0x5f188ccbe6c170f5L,0x816822005066b087L,
17106         0xda22c212c7155adaL },
17107       { 0x151e5d3afbddb479L,0x4b606b846d715b99L,0x4a73b54bf997cb2eL,
17108         0x9a1bfe433ecd8b66L } },
17109     /* 25 << 133 */
17110     { { 0x1c3128092a67d48aL,0xcd6a671e031fa9e2L,0xbec3312a0e43a34aL,
17111         0x1d93563955ef47d3L },
17112       { 0x5ea024898fea73eaL,0x8247b364a035afb2L,0xb58300a65265b54cL,
17113         0x3286662f722c7148L } },
17114     /* 26 << 133 */
17115     { { 0xb77fd76bb4ec4c20L,0xf0a12fa70f3fe3fdL,0xf845bbf541d8c7e8L,
17116         0xe4d969ca5ec10aa8L },
17117       { 0x4c0053b743e232a3L,0xdc7a3fac37f8a45aL,0x3c4261c520d81c8fL,
17118         0xfd4b3453b00eab00L } },
17119     /* 27 << 133 */
17120     { { 0x76d48f86d36e3062L,0x626c5277a143ff02L,0x538174deaf76f42eL,
17121         0x2267aa866407ceacL },
17122       { 0xfad7635172e572d5L,0xab861af7ba7330ebL,0xa0a1c8c7418d8657L,
17123         0x988821cb20289a52L } },
17124     /* 28 << 133 */
17125     { { 0x79732522cccc18adL,0xaadf3f8df1a6e027L,0xf7382c9317c2354dL,
17126         0x5ce1680cd818b689L },
17127       { 0x359ebbfcd9ecbee9L,0x4330689c1cae62acL,0xb55ce5b4c51ac38aL,
17128         0x7921dfeafe238ee8L } },
17129     /* 29 << 133 */
17130     { { 0x3972bef8271d1ca5L,0x3e423bc7e8aabd18L,0x57b09f3f44a3e5e3L,
17131         0x5da886ae7b444d66L },
17132       { 0x68206634a9964375L,0x356a2fa3699cd0ffL,0xaf0faa24dba515e9L,
17133         0x536e1f5cb321d79aL } },
17134     /* 30 << 133 */
17135     { { 0xd3b9913a5c04e4eaL,0xd549dcfed6f11513L,0xee227bf579fd1d94L,
17136         0x9f35afeeb43f2c67L },
17137       { 0xd2638d24f1314f53L,0x62baf948cabcd822L,0x5542de294ef48db0L,
17138         0xb3eb6a04fc5f6bb2L } },
17139     /* 31 << 133 */
17140     { { 0x23c110ae1208e16aL,0x1a4d15b5f8363e24L,0x30716844164be00bL,
17141         0xa8e24824f6f4690dL },
17142       { 0x548773a290b170cfL,0xa1bef33142f191f4L,0x70f418d09247aa97L,
17143         0xea06028e48be9147L } },
17144     /* 32 << 133 */
17145     { { 0xe13122f3dbfb894eL,0xbe9b79f6ce274b18L,0x85a49de5ca58aadfL,
17146         0x2495775811487351L },
17147       { 0x111def61bb939099L,0x1d6a974a26d13694L,0x4474b4ced3fc253bL,
17148         0x3a1485e64c5db15eL } },
17149     /* 33 << 133 */
17150     { { 0xe79667b4147c15b4L,0xe34f553b7bc61301L,0x032b80f817094381L,
17151         0x55d8bafd723eaa21L },
17152       { 0x5a987995f1c0e74eL,0x5a9b292eebba289cL,0x413cd4b2eb4c8251L,
17153         0x98b5d243d162db0aL } },
17154     /* 34 << 133 */
17155     { { 0xbb47bf6668342520L,0x08d68949baa862d1L,0x11f349c7e906abcdL,
17156         0x454ce985ed7bf00eL },
17157       { 0xacab5c9eb55b803bL,0xb03468ea31e3c16dL,0x5c24213dd273bf12L,
17158         0x211538eb71587887L } },
17159     /* 35 << 133 */
17160     { { 0x198e4a2f731dea2dL,0xd5856cf274ed7b2aL,0x86a632eb13a664feL,
17161         0x932cd909bda41291L },
17162       { 0x850e95d4c0c4ddc0L,0xc0f422f8347fc2c9L,0xe68cbec486076bcbL,
17163         0xf9e7c0c0cd6cd286L } },
17164     /* 36 << 133 */
17165     { { 0x65994ddb0f5f27caL,0xe85461fba80d59ffL,0xff05481a66601023L,
17166         0xc665427afc9ebbfbL },
17167       { 0xb0571a697587fd52L,0x935289f88d49efceL,0x61becc60ea420688L,
17168         0xb22639d913a786afL } },
17169     /* 37 << 133 */
17170     { { 0x1a8e6220361ecf90L,0x001f23e025506463L,0xe4ae9b5d0a5c2b79L,
17171         0xebc9cdadd8149db5L },
17172       { 0xb33164a1934aa728L,0x750eb00eae9b60f3L,0x5a91615b9b9cfbfdL,
17173         0x97015cbfef45f7f6L } },
17174     /* 38 << 133 */
17175     { { 0xb462c4a5bf5151dfL,0x21adcc41b07118f2L,0xd60c545b043fa42cL,
17176         0xfc21aa54e96be1abL },
17177       { 0xe84bc32f4e51ea80L,0x3dae45f0259b5d8dL,0xbb73c7ebc38f1b5eL,
17178         0xe405a74ae8ae617dL } },
17179     /* 39 << 133 */
17180     { { 0xbb1ae9c69f1c56bdL,0x8c176b9849f196a4L,0xc448f3116875092bL,
17181         0xb5afe3de9f976033L },
17182       { 0xa8dafd49145813e5L,0x687fc4d9e2b34226L,0xf2dfc92d4c7ff57fL,
17183         0x004e3fc1401f1b46L } },
17184     /* 40 << 133 */
17185     { { 0x5afddab61430c9abL,0x0bdd41d32238e997L,0xf0947430418042aeL,
17186         0x71f9addacdddc4cbL },
17187       { 0x7090c016c52dd907L,0xd9bdf44d29e2047fL,0xe6f1fe801b1011a6L,
17188         0xb63accbcd9acdc78L } },
17189     /* 41 << 133 */
17190     { { 0xcfc7e2351272a95bL,0x0c667717a6276ac8L,0x3c0d3709e2d7eef7L,
17191         0x5add2b069a685b3eL },
17192       { 0x363ad32d14ea5d65L,0xf8e01f068d7dd506L,0xc9ea221375b4aac6L,
17193         0xed2a2bf90d353466L } },
17194     /* 42 << 133 */
17195     { { 0x439d79b5e9d3a7c3L,0x8e0ee5a681b7f34bL,0xcf3dacf51dc4ba75L,
17196         0x1d3d1773eb3310c7L },
17197       { 0xa8e671127747ae83L,0x31f43160197d6b40L,0x0521cceecd961400L,
17198         0x67246f11f6535768L } },
17199     /* 43 << 133 */
17200     { { 0x702fcc5aef0c3133L,0x247cc45d7e16693bL,0xfd484e49c729b749L,
17201         0x522cef7db218320fL },
17202       { 0xe56ef40559ab93b3L,0x225fba119f181071L,0x33bd659515330ed0L,
17203         0xc4be69d51ddb32f7L } },
17204     /* 44 << 133 */
17205     { { 0x264c76680448087cL,0xac30903f71432daeL,0x3851b26600f9bf47L,
17206         0x400ed3116cdd6d03L },
17207       { 0x045e79fef8fd2424L,0xfdfd974afa6da98bL,0x45c9f6410c1e673aL,
17208         0x76f2e7335b2c5168L } },
17209     /* 45 << 133 */
17210     { { 0x1adaebb52a601753L,0xb286514cc57c2d49L,0xd87696701e0bfd24L,
17211         0x950c547e04478922L },
17212       { 0xd1d41969e5d32bfeL,0x30bc1472750d6c3eL,0x8f3679fee0e27f3aL,
17213         0x8f64a7dca4a6ee0cL } },
17214     /* 46 << 133 */
17215     { { 0x2fe59937633dfb1fL,0xea82c395977f2547L,0xcbdfdf1a661ea646L,
17216         0xc7ccc591b9085451L },
17217       { 0x8217796281761e13L,0xda57596f9196885cL,0xbc17e84928ffbd70L,
17218         0x1e6e0a412671d36fL } },
17219     /* 47 << 133 */
17220     { { 0x61ae872c4152fcf5L,0x441c87b09e77e754L,0xd0799dd5a34dff09L,
17221         0x766b4e4488a6b171L },
17222       { 0xdc06a51211f1c792L,0xea02ae934be35c3eL,0xe5ca4d6de90c469eL,
17223         0x4df4368e56e4ff5cL } },
17224     /* 48 << 133 */
17225     { { 0x7817acab4baef62eL,0x9f5a2202a85b91e8L,0x9666ebe66ce57610L,
17226         0x32ad31f3f73bfe03L },
17227       { 0x628330a425bcf4d6L,0xea950593515056e6L,0x59811c89e1332156L,
17228         0xc89cf1fe8c11b2d7L } },
17229     /* 49 << 133 */
17230     { { 0x75b6391304e60cc0L,0xce811e8d4625d375L,0x030e43fc2d26e562L,
17231         0xfbb30b4b608d36a0L },
17232       { 0x634ff82c48528118L,0x7c6fe085cd285911L,0x7f2830c099358f28L,
17233         0x2e60a95e665e6c09L } },
17234     /* 50 << 133 */
17235     { { 0x08407d3d9b785dbfL,0x530889aba759bce7L,0xf228e0e652f61239L,
17236         0x2b6d14616879be3cL },
17237       { 0xe6902c0451a7bbf7L,0x30ad99f076f24a64L,0x66d9317a98bc6da0L,
17238         0xf4f877f3cb596ac0L } },
17239     /* 51 << 133 */
17240     { { 0xb05ff62d4c44f119L,0x4555f536e9b77416L,0xc7c0d0598caed63bL,
17241         0x0cd2b7cec358b2a9L },
17242       { 0x3f33287b46945fa3L,0xf8785b20d67c8791L,0xc54a7a619637bd08L,
17243         0x54d4598c18be79d7L } },
17244     /* 52 << 133 */
17245     { { 0x889e5acbc46d7ce1L,0x9a515bb78b085877L,0xfac1a03d0b7a5050L,
17246         0x7d3e738af2926035L },
17247       { 0x861cc2ce2a6cb0ebL,0x6f2e29558f7adc79L,0x61c4d45133016376L,
17248         0xd9fd2c805ad59090L } },
17249     /* 53 << 133 */
17250     { { 0xe5a83738b2b836a1L,0x855b41a07c0d6622L,0x186fe3177cc19af1L,
17251         0x6465c1fffdd99acbL },
17252       { 0x46e5c23f6974b99eL,0x75a7cf8ba2717cbeL,0x4d2ebc3f062be658L,
17253         0x094b44475f209c98L } },
17254     /* 54 << 133 */
17255     { { 0x4af285edb940cb5aL,0x6706d7927cc82f10L,0xc8c8776c030526faL,
17256         0xfa8e6f76a0da9140L },
17257       { 0x77ea9d34591ee4f0L,0x5f46e33740274166L,0x1bdf98bbea671457L,
17258         0xd7c08b46862a1fe2L } },
17259     /* 55 << 133 */
17260     { { 0x46cc303c1c08ad63L,0x995434404c845e7bL,0x1b8fbdb548f36bf7L,
17261         0x5b82c3928c8273a7L },
17262       { 0x08f712c4928435d5L,0x071cf0f179330380L,0xc74c2d24a8da054aL,
17263         0xcb0e720143c46b5cL } },
17264     /* 56 << 133 */
17265     { { 0x0ad7337ac0b7eff3L,0x8552225ec5e48b3cL,0xe6f78b0c73f13a5fL,
17266         0x5e70062e82349cbeL },
17267       { 0x6b8d5048e7073969L,0x392d2a29c33cb3d2L,0xee4f727c4ecaa20fL,
17268         0xa068c99e2ccde707L } },
17269     /* 57 << 133 */
17270     { { 0xfcd5651fb87a2913L,0xea3e3c153cc252f0L,0x777d92df3b6cd3e4L,
17271         0x7a414143c5a732e7L },
17272       { 0xa895951aa71ff493L,0xfe980c92bbd37cf6L,0x45bd5e64decfeeffL,
17273         0x910dc2a9a44c43e9L } },
17274     /* 58 << 133 */
17275     { { 0xcb403f26cca9f54dL,0x928bbdfb9303f6dbL,0x3c37951ea9eee67cL,
17276         0x3bd61a52f79961c3L },
17277       { 0x09a238e6395c9a79L,0x6940ca2d61eb352dL,0x7d1e5c5ec1875631L,
17278         0x1e19742c1e1b20d1L } },
17279     /* 59 << 133 */
17280     { { 0x4633d90823fc2e6eL,0xa76e29a908959149L,0x61069d9c84ed7da5L,
17281         0x0baa11cf5dbcad51L },
17282       { 0xd01eec64961849daL,0x93b75f1faf3d8c28L,0x57bc4f9f1ca2ee44L,
17283         0x5a26322d00e00558L } },
17284     /* 60 << 133 */
17285     { { 0x1888d65861a023efL,0x1d72aab4b9e5246eL,0xa9a26348e5563ec0L,
17286         0xa0971963c3439a43L },
17287       { 0x567dd54badb9b5b7L,0x73fac1a1c45a524bL,0x8fe97ef7fe38e608L,
17288         0x608748d23f384f48L } },
17289     /* 61 << 133 */
17290     { { 0xb0571794c486094fL,0x869254a38bf3a8d6L,0x148a8dd1310b0e25L,
17291         0x99ab9f3f9aa3f7d8L },
17292       { 0x0927c68a6706c02eL,0x22b5e76c69790e6cL,0x6c3252606c71376cL,
17293         0x53a5769009ef6657L } },
17294     /* 62 << 133 */
17295     { { 0x8d63f852edffcf3aL,0xb4d2ed043c0a6f55L,0xdb3aa8de12519b9eL,
17296         0x5d38e9c41e0a569aL },
17297       { 0x871528bf303747e2L,0xa208e77cf5b5c18dL,0x9d129c88ca6bf923L,
17298         0xbcbf197fbf02839fL } },
17299     /* 63 << 133 */
17300     { { 0x9b9bf03027323194L,0x3b055a8b339ca59dL,0xb46b23120f669520L,
17301         0x19789f1f497e5f24L },
17302       { 0x9c499468aaf01801L,0x72ee11908b69d59cL,0x8bd39595acf4c079L,
17303         0x3ee11ece8e0cd048L } },
17304     /* 64 << 133 */
17305     { { 0xebde86ec1ed66f18L,0x225d906bd61fce43L,0x5cab07d6e8bed74dL,
17306         0x16e4617f27855ab7L },
17307       { 0x6568aaddb2fbc3ddL,0xedb5484f8aeddf5bL,0x878f20e86dcf2fadL,
17308         0x3516497c615f5699L } },
17309     /* 0 << 140 */
17310     { { 0x00, 0x00, 0x00, 0x00 },
17311       { 0x00, 0x00, 0x00, 0x00 } },
17312     /* 1 << 140 */
17313     { { 0xef0a3fecfa181e69L,0x9ea02f8130d69a98L,0xb2e9cf8e66eab95dL,
17314         0x520f2beb24720021L },
17315       { 0x621c540a1df84361L,0x1203772171fa6d5dL,0x6e3c7b510ff5f6ffL,
17316         0x817a069babb2bef3L } },
17317     /* 2 << 140 */
17318     { { 0x83572fb6b294cda6L,0x6ce9bf75b9039f34L,0x20e012f0095cbb21L,
17319         0xa0aecc1bd063f0daL },
17320       { 0x57c21c3af02909e5L,0xc7d59ecf48ce9cdcL,0x2732b8448ae336f8L,
17321         0x056e37233f4f85f4L } },
17322     /* 3 << 140 */
17323     { { 0x8a10b53189e800caL,0x50fe0c17145208fdL,0x9e43c0d3b714ba37L,
17324         0x427d200e34189accL },
17325       { 0x05dee24fe616e2c0L,0x9c25f4c8ee1854c1L,0x4d3222a58f342a73L,
17326         0x0807804fa027c952L } },
17327     /* 4 << 140 */
17328     { { 0xc222653a4f0d56f3L,0x961e4047ca28b805L,0x2c03f8b04a73434bL,
17329         0x4c966787ab712a19L },
17330       { 0xcc196c42864fee42L,0xc1be93da5b0ece5cL,0xa87d9f22c131c159L,
17331         0x2bb6d593dce45655L } },
17332     /* 5 << 140 */
17333     { { 0x22c49ec9b809b7ceL,0x8a41486be2c72c2cL,0x813b9420fea0bf36L,
17334         0xb3d36ee9a66dac69L },
17335       { 0x6fddc08a328cc987L,0x0a3bcd2c3a326461L,0x7103c49dd810dbbaL,
17336         0xf9d81a284b78a4c4L } },
17337     /* 6 << 140 */
17338     { { 0x3de865ade4d55941L,0xdedafa5e30384087L,0x6f414abb4ef18b9bL,
17339         0x9ee9ea42faee5268L },
17340       { 0x260faa1637a55a4aL,0xeb19a514015f93b9L,0x51d7ebd29e9c3598L,
17341         0x523fc56d1932178eL } },
17342     /* 7 << 140 */
17343     { { 0x501d070cb98fe684L,0xd60fbe9a124a1458L,0xa45761c892bc6b3fL,
17344         0xf5384858fe6f27cbL },
17345       { 0x4b0271f7b59e763bL,0x3d4606a95b5a8e5eL,0x1eda5d9b05a48292L,
17346         0xda7731d0e6fec446L } },
17347     /* 8 << 140 */
17348     { { 0xa3e3369390d45871L,0xe976404006166d8dL,0xb5c3368289a90403L,
17349         0x4bd1798372f1d637L },
17350       { 0xa616679ed5d2c53aL,0x5ec4bcd8fdcf3b87L,0xae6d7613b66a694eL,
17351         0x7460fc76e3fc27e5L } },
17352     /* 9 << 140 */
17353     { { 0x70469b8295caabeeL,0xde024ca5889501e3L,0x6bdadc06076ed265L,
17354         0x0cb1236b5a0ef8b2L },
17355       { 0x4065ddbf0972ebf9L,0xf1dd387522aca432L,0xa88b97cf744aff76L,
17356         0xd1359afdfe8e3d24L } },
17357     /* 10 << 140 */
17358     { { 0x52a3ba2b91502cf3L,0x2c3832a8084db75dL,0x04a12dddde30b1c9L,
17359         0x7802eabce31fd60cL },
17360       { 0x33707327a37fddabL,0x65d6f2abfaafa973L,0x3525c5b811e6f91aL,
17361         0x76aeb0c95f46530bL } },
17362     /* 11 << 140 */
17363     { { 0xe8815ff62f93a675L,0xa6ec968405f48679L,0x6dcbb556358ae884L,
17364         0x0af61472e19e3873L },
17365       { 0x72334372a5f696beL,0xc65e57ea6f22fb70L,0x268da30c946cea90L,
17366         0x136a8a8765681b2aL } },
17367     /* 12 << 140 */
17368     { { 0xad5e81dc0f9f44d4L,0xf09a69602c46585aL,0xd1649164c447d1b1L,
17369         0x3b4b36c8879dc8b1L },
17370       { 0x20d4177b3b6b234cL,0x096a25051730d9d0L,0x0611b9b8ef80531dL,
17371         0xba904b3b64bb495dL } },
17372     /* 13 << 140 */
17373     { { 0x1192d9d493a3147aL,0x9f30a5dc9a565545L,0x90b1f9cb6ef07212L,
17374         0x299585460d87fc13L },
17375       { 0xd3323effc17db9baL,0xcb18548ccb1644a8L,0x18a306d44f49ffbcL,
17376         0x28d658f14c2e8684L } },
17377     /* 14 << 140 */
17378     { { 0x44ba60cda99f8c71L,0x67b7abdb4bf742ffL,0x66310f9c914b3f99L,
17379         0xae430a32f412c161L },
17380       { 0x1e6776d388ace52fL,0x4bc0fa2452d7067dL,0x03c286aa8f07cd1bL,
17381         0x4cb8f38ca985b2c1L } },
17382     /* 15 << 140 */
17383     { { 0x83ccbe808c3bff36L,0x005a0bd25263e575L,0x460d7dda259bdcd1L,
17384         0x4a1c5642fa5cab6bL },
17385       { 0x2b7bdbb99fe4fc88L,0x09418e28cc97bbb5L,0xd8274fb4a12321aeL,
17386         0xb137007d5c87b64eL } },
17387     /* 16 << 140 */
17388     { { 0x80531fe1c63c4962L,0x50541e89981fdb25L,0xdc1291a1fd4c2b6bL,
17389         0xc0693a17a6df4fcaL },
17390       { 0xb2c4604e0117f203L,0x245f19630a99b8d0L,0xaedc20aac6212c44L,
17391         0xb1ed4e56520f52a8L } },
17392     /* 17 << 140 */
17393     { { 0xfe48f575f8547be3L,0x0a7033cda9e45f98L,0x4b45d3a918c50100L,
17394         0xb2a6cd6aa61d41daL },
17395       { 0x60bbb4f557933c6bL,0xa7538ebd2b0d7ffcL,0x9ea3ab8d8cd626b6L,
17396         0x8273a4843601625aL } },
17397     /* 18 << 140 */
17398     { { 0x888598450168e508L,0x8cbc9bb299a94abdL,0x713ac792fab0a671L,
17399         0xa3995b196c9ebffcL },
17400       { 0xe711668e1239e152L,0x56892558bbb8dff4L,0x8bfc7dabdbf17963L,
17401         0x5b59fe5ab3de1253L } },
17402     /* 19 << 140 */
17403     { { 0x7e3320eb34a9f7aeL,0xe5e8cf72d751efe4L,0x7ea003bcd9be2f37L,
17404         0xc0f551a0b6c08ef7L },
17405       { 0x56606268038f6725L,0x1dd38e356d92d3b6L,0x07dfce7cc3cbd686L,
17406         0x4e549e04651c5da8L } },
17407     /* 20 << 140 */
17408     { { 0x4058f93b08b19340L,0xc2fae6f4cac6d89dL,0x4bad8a8c8f159cc7L,
17409         0x0ddba4b3cb0b601cL },
17410       { 0xda4fc7b51dd95f8cL,0x1d163cd7cea5c255L,0x30707d06274a8c4cL,
17411         0x79d9e0082802e9ceL } },
17412     /* 21 << 140 */
17413     { { 0x02a29ebfe6ddd505L,0x37064e74b50bed1aL,0x3f6bae65a7327d57L,
17414         0x3846f5f1f83920bcL },
17415       { 0x87c3749160df1b9bL,0x4cfb28952d1da29fL,0x10a478ca4ed1743cL,
17416         0x390c60303edd47c6L } },
17417     /* 22 << 140 */
17418     { { 0x8f3e53128c0a78deL,0xccd02bda1e85df70L,0xd6c75c03a61b6582L,
17419         0x0762921cfc0eebd1L },
17420       { 0xd34d0823d85010c0L,0xd73aaacb0044cf1fL,0xfb4159bba3b5e78aL,
17421         0x2287c7f7e5826f3fL } },
17422     /* 23 << 140 */
17423     { { 0x4aeaf742580b1a01L,0xf080415d60423b79L,0xe12622cda7dea144L,
17424         0x49ea499659d62472L },
17425       { 0xb42991ef571f3913L,0x0610f214f5b25a8aL,0x47adc58530b79e8fL,
17426         0xf90e3df607a065a2L } },
17427     /* 24 << 140 */
17428     { { 0x5d0a5deb43e2e034L,0x53fb5a34444024aaL,0xa8628c686b0c9f7fL,
17429         0x9c69c29cac563656L },
17430       { 0x5a231febbace47b6L,0xbdce02899ea5a2ecL,0x05da1fac9463853eL,
17431         0x96812c52509e78aaL } },
17432     /* 25 << 140 */
17433     { { 0xd3fb577157151692L,0xeb2721f8d98e1c44L,0xc050608732399be1L,
17434         0xda5a5511d979d8b8L },
17435       { 0x737ed55dc6f56780L,0xe20d30040dc7a7f4L,0x02ce7301f5941a03L,
17436         0x91ef5215ed30f83aL } },
17437     /* 26 << 140 */
17438     { { 0x28727fc14092d85fL,0x72d223c65c49e41aL,0xa7cf30a2ba6a4d81L,
17439         0x7c086209b030d87dL },
17440       { 0x04844c7dfc588b09L,0x728cd4995874bbb0L,0xcc1281eee84c0495L,
17441         0x0769b5baec31958fL } },
17442     /* 27 << 140 */
17443     { { 0x665c228bf99c2471L,0xf2d8a11b191eb110L,0x4594f494d36d7024L,
17444         0x482ded8bcdcb25a1L },
17445       { 0xc958a9d8dadd4885L,0x7004477ef1d2b547L,0x0a45f6ef2a0af550L,
17446         0x4fc739d62f8d6351L } },
17447     /* 28 << 140 */
17448     { { 0x75cdaf27786f08a9L,0x8700bb2642c2737fL,0x855a71411c4e2670L,
17449         0x810188c115076fefL },
17450       { 0xc251d0c9abcd3297L,0xae4c8967f48108ebL,0xbd146de718ceed30L,
17451         0xf9d4f07ac986bcedL } },
17452     /* 29 << 140 */
17453     { { 0x5ad98ed583fa1e08L,0x7780d33ebeabd1fbL,0xe330513c903b1196L,
17454         0xba11de9ea47bc8c4L },
17455       { 0x684334da02c2d064L,0x7ecf360da48de23bL,0x57a1b4740a9089d8L,
17456         0xf28fa439ff36734cL } },
17457     /* 30 << 140 */
17458     { { 0xf2a482cbea4570b3L,0xee65d68ba5ebcee9L,0x988d0036b9694cd5L,
17459         0x53edd0e937885d32L },
17460       { 0xe37e3307beb9bc6dL,0xe9abb9079f5c6768L,0x4396ccd551f2160fL,
17461         0x2500888c47336da6L } },
17462     /* 31 << 140 */
17463     { { 0x383f9ed9926fce43L,0x809dd1c704da2930L,0x30f6f5968a4cb227L,
17464         0x0d700c7f73a56b38L },
17465       { 0x1825ea33ab64a065L,0xaab9b7351338df80L,0x1516100d9b63f57fL,
17466         0x2574395a27a6a634L } },
17467     /* 32 << 140 */
17468     { { 0xb5560fb6700a1acdL,0xe823fd73fd999681L,0xda915d1f6cb4e1baL,
17469         0x0d0301186ebe00a3L },
17470       { 0x744fb0c989fca8cdL,0x970d01dbf9da0e0bL,0x0ad8c5647931d76fL,
17471         0xb15737bff659b96aL } },
17472     /* 33 << 140 */
17473     { { 0xdc9933e8a8b484e7L,0xb2fdbdf97a26dec7L,0x2349e9a49f1f0136L,
17474         0x7860368e70fddddbL },
17475       { 0xd93d2c1cf9ad3e18L,0x6d6c5f17689f4e79L,0x7a544d91b24ff1b6L,
17476         0x3e12a5ebfe16cd8cL } },
17477     /* 34 << 140 */
17478     { { 0x543574e9a56b872fL,0xa1ad550cfcf68ea2L,0x689e37d23f560ef7L,
17479         0x8c54b9cac9d47a8bL },
17480       { 0x46d40a4a088ac342L,0xec450c7c1576c6d0L,0xb589e31c1f9689e9L,
17481         0xdacf2602b8781718L } },
17482     /* 35 << 140 */
17483     { { 0xa89237c6c8cb6b42L,0x1326fc93b96ef381L,0x55d56c6db5f07825L,
17484         0xacba2eea7449e22dL },
17485       { 0x74e0887a633c3000L,0xcb6cd172d7cbcf71L,0x309e81dec36cf1beL,
17486         0x07a18a6d60ae399bL } },
17487     /* 36 << 140 */
17488     { { 0xb36c26799edce57eL,0x52b892f4df001d41L,0xd884ae5d16a1f2c6L,
17489         0x9b329424efcc370aL },
17490       { 0x3120daf2bd2e21dfL,0x55298d2d02470a99L,0x0b78af6ca05db32eL,
17491         0x5c76a331601f5636L } },
17492     /* 37 << 140 */
17493     { { 0xaae861fff8a4f29cL,0x70dc9240d68f8d49L,0x960e649f81b1321cL,
17494         0x3d2c801b8792e4ceL },
17495       { 0xf479f77242521876L,0x0bed93bc416c79b1L,0xa67fbc05263e5bc9L,
17496         0x01e8e630521db049L } },
17497     /* 38 << 140 */
17498     { { 0x76f26738c6f3431eL,0xe609cb02e3267541L,0xb10cff2d818c877cL,
17499         0x1f0e75ce786a13cbL },
17500       { 0xf4fdca641158544dL,0x5d777e896cb71ed0L,0x3c233737a9aa4755L,
17501         0x7b453192e527ab40L } },
17502     /* 39 << 140 */
17503     { { 0xdb59f68839f05ffeL,0x8f4f4be06d82574eL,0xcce3450cee292d1bL,
17504         0xaa448a1261ccd086L },
17505       { 0xabce91b3f7914967L,0x4537f09b1908a5edL,0xa812421ef51042e7L,
17506         0xfaf5cebcec0b3a34L } },
17507     /* 40 << 140 */
17508     { { 0x730ffd874ca6b39aL,0x70fb72ed02efd342L,0xeb4735f9d75c8edbL,
17509         0xc11f2157c278aa51L },
17510       { 0xc459f635bf3bfebfL,0x3a1ff0b46bd9601fL,0xc9d12823c420cb73L,
17511         0x3e9af3e23c2915a3L } },
17512     /* 41 << 140 */
17513     { { 0xe0c82c72b41c3440L,0x175239e5e3039a5fL,0xe1084b8a558795a3L,
17514         0x328d0a1dd01e5c60L },
17515       { 0x0a495f2ed3788a04L,0x25d8ff1666c11a9fL,0xf5155f059ed692d6L,
17516         0x954fa1074f425fe4L } },
17517     /* 42 << 140 */
17518     { { 0xd16aabf2e98aaa99L,0x90cd8ba096b0f88aL,0x957f4782c154026aL,
17519         0x54ee073452af56d2L },
17520       { 0xbcf89e5445b4147aL,0x3d102f219a52816cL,0x6808517e39b62e77L,
17521         0x92e2542169169ad8L } },
17522     /* 43 << 140 */
17523     { { 0xd721d871bb608558L,0x60e4ebaef6d4ff9bL,0x0ba1081941f2763eL,
17524         0xca2e45be51ee3247L },
17525       { 0x66d172ec2bfd7a5fL,0x528a8f2f74d0b12dL,0xe17f1e38dabe70dcL,
17526         0x1d5d73169f93983cL } },
17527     /* 44 << 140 */
17528     { { 0x51b2184adf423e31L,0xcb417291aedb1a10L,0x2054ca93625bcab9L,
17529         0x54396860a98998f0L },
17530       { 0x4e53f6c4a54ae57eL,0x0ffeb590ee648e9dL,0xfbbdaadc6afaf6bcL,
17531         0xf88ae796aa3bfb8aL } },
17532     /* 45 << 140 */
17533     { { 0x209f1d44d2359ed9L,0xac68dd03f3544ce2L,0xf378da47fd51e569L,
17534         0xe1abd8602cc80097L },
17535       { 0x23ca18d9343b6e3aL,0x480797e8b40a1baeL,0xd1f0c717533f3e67L,
17536         0x4489697006e6cdfcL } },
17537     /* 46 << 140 */
17538     { { 0x8ca2105552a82e8dL,0xb2caf78578460cdcL,0x4c1b7b62e9037178L,
17539         0xefc09d2cdb514b58L },
17540       { 0x5f2df9ee9113be5cL,0x2fbda78fb3f9271cL,0xe09a81af8f83fc54L,
17541         0x06b138668afb5141L } },
17542     /* 47 << 140 */
17543     { { 0x38f6480f43e3865dL,0x72dd77a81ddf47d9L,0xf2a8e9714c205ff7L,
17544         0x46d449d89d088ad8L },
17545       { 0x926619ea185d706fL,0xe47e02ebc7dd7f62L,0xe7f120a78cbc2031L,
17546         0xc18bef00998d4ac9L } },
17547     /* 48 << 140 */
17548     { { 0x18f37a9c6bdf22daL,0xefbc432f90dc82dfL,0xc52cef8e5d703651L,
17549         0x82887ba0d99881a5L },
17550       { 0x7cec9ddab920ec1dL,0xd0d7e8c3ec3e8d3bL,0x445bc3954ca88747L,
17551         0xedeaa2e09fd53535L } },
17552     /* 49 << 140 */
17553     { { 0x461b1d936cc87475L,0xd92a52e26d2383bdL,0xfabccb59d7903546L,
17554         0x6111a7613d14b112L },
17555       { 0x0ae584feb3d5f612L,0x5ea69b8d60e828ecL,0x6c07898554087030L,
17556         0x649cab04ac4821feL } },
17557     /* 50 << 140 */
17558     { { 0x25ecedcf8bdce214L,0xb5622f7286af7361L,0x0e1227aa7038b9e2L,
17559         0xd0efb273ac20fa77L },
17560       { 0x817ff88b79df975bL,0x856bf2861999503eL,0xb4d5351f5038ec46L,
17561         0x740a52c5fc42af6eL } },
17562     /* 51 << 140 */
17563     { { 0x2e38bb152cbb1a3fL,0xc3eb99fe17a83429L,0xca4fcbf1dd66bb74L,
17564         0x880784d6cde5e8fcL },
17565       { 0xddc84c1cb4e7a0beL,0x8780510dbd15a72fL,0x44bcf1af81ec30e1L,
17566         0x141e50a80a61073eL } },
17567     /* 52 << 140 */
17568     { { 0x0d95571847be87aeL,0x68a61417f76a4372L,0xf57e7e87c607c3d3L,
17569         0x043afaf85252f332L },
17570       { 0xcc14e1211552a4d2L,0xb6dee692bb4d4ab4L,0xb6ab74c8a03816a4L,
17571         0x84001ae46f394a29L } },
17572     /* 53 << 140 */
17573     { { 0x5bed8344d795fb45L,0x57326e7db79f55a5L,0xc9533ce04accdffcL,
17574         0x53473caf3993fa04L },
17575       { 0x7906eb93a13df4c8L,0xa73e51f697cbe46fL,0xd1ab3ae10ae4ccf8L,
17576         0x256145088a5b3dbcL } },
17577     /* 54 << 140 */
17578     { { 0x61eff96211a71b27L,0xdf71412b6bb7fa39L,0xb31ba6b82bd7f3efL,
17579         0xb0b9c41569180d29L },
17580       { 0xeec14552014cdde5L,0x702c624b227b4bbbL,0x2b15e8c2d3e988f3L,
17581         0xee3bcc6da4f7fd04L } },
17582     /* 55 << 140 */
17583     { { 0x9d00822a42ac6c85L,0x2db0cea61df9f2b7L,0xd7cad2ab42de1e58L,
17584         0x346ed5262d6fbb61L },
17585       { 0xb39629951a2faf09L,0x2fa8a5807c25612eL,0x30ae04da7cf56490L,
17586         0x756629080eea3961L } },
17587     /* 56 << 140 */
17588     { { 0x3609f5c53d080847L,0xcb081d395241d4f6L,0xb4fb381077961a63L,
17589         0xc20c59842abb66fcL },
17590       { 0x3d40aa7cf902f245L,0x9cb127364e536b1eL,0x5eda24da99b3134fL,
17591         0xafbd9c695cd011afL } },
17592     /* 57 << 140 */
17593     { { 0x9a16e30ac7088c7dL,0x5ab657103207389fL,0x1b09547fe7407a53L,
17594         0x2322f9d74fdc6eabL },
17595       { 0xc0f2f22d7430de4dL,0x19382696e68ca9a9L,0x17f1eff1918e5868L,
17596         0xe3b5b635586f4204L } },
17597     /* 58 << 140 */
17598     { { 0x146ef9803fbc4341L,0x359f2c805b5eed4eL,0x9f35744e7482e41dL,
17599         0x9a9ac3ecf3b224c2L },
17600       { 0x9161a6fe91fc50aeL,0x89ccc66bc613fa7cL,0x89268b14c732f15aL,
17601         0x7cd6f4e2b467ed03L } },
17602     /* 59 << 140 */
17603     { { 0xfbf79869ce56b40eL,0xf93e094cc02dde98L,0xefe0c3a8edee2cd7L,
17604         0x90f3ffc0b268fd42L },
17605       { 0x81a7fd5608241aedL,0x95ab7ad800b1afe8L,0x401270563e310d52L,
17606         0xd3ffdeb109d9fc43L } },
17607     /* 60 << 140 */
17608     { { 0xc8f85c91d11a8594L,0x2e74d25831cf6db8L,0x829c7ca302b5dfd0L,
17609         0xe389cfbe69143c86L },
17610       { 0xd01b6405941768d8L,0x4510399503bf825dL,0xcc4ee16656cd17e2L,
17611         0xbea3c283ba037e79L } },
17612     /* 61 << 140 */
17613     { { 0x4e1ac06ed9a47520L,0xfbfe18aaaf852404L,0x5615f8e28087648aL,
17614         0x7301e47eb9d150d9L },
17615       { 0x79f9f9ddb299b977L,0x76697a7ba5b78314L,0x10d674687d7c90e7L,
17616         0x7afffe03937210b5L } },
17617     /* 62 << 140 */
17618     { { 0x5aef3e4b28c22ceeL,0xefb0ecd809fd55aeL,0x4cea71320d2a5d6aL,
17619         0x9cfb5fa101db6357L },
17620       { 0x395e0b57f36e1ac5L,0x008fa9ad36cafb7dL,0x8f6cdf705308c4dbL,
17621         0x51527a3795ed2477L } },
17622     /* 63 << 140 */
17623     { { 0xba0dee305bd21311L,0x6ed41b22909c90d7L,0xc5f6b7587c8696d3L,
17624         0x0db8eaa83ce83a80L },
17625       { 0xd297fe37b24b4b6fL,0xfe58afe8522d1f0dL,0x973587368c98dbd9L,
17626         0x6bc226ca9454a527L } },
17627     /* 64 << 140 */
17628     { { 0xa12b384ece53c2d0L,0x779d897d5e4606daL,0xa53e47b073ec12b0L,
17629         0x462dbbba5756f1adL },
17630       { 0x69fe09f2cafe37b6L,0x273d1ebfecce2e17L,0x8ac1d5383cf607fdL,
17631         0x8035f7ff12e10c25L } },
17632     /* 0 << 147 */
17633     { { 0x00, 0x00, 0x00, 0x00 },
17634       { 0x00, 0x00, 0x00, 0x00 } },
17635     /* 1 << 147 */
17636     { { 0x854d34c77e6c5520L,0xc27df9efdcb9ea58L,0x405f2369d686666dL,
17637         0x29d1febf0417aa85L },
17638       { 0x9846819e93470afeL,0x3e6a9669e2a27f9eL,0x24d008a2e31e6504L,
17639         0xdba7cecf9cb7680aL } },
17640     /* 2 << 147 */
17641     { { 0xecaff541338d6e43L,0x56f7dd734541d5ccL,0xb5d426de96bc88caL,
17642         0x48d94f6b9ed3a2c3L },
17643       { 0x6354a3bb2ef8279cL,0xd575465b0b1867f2L,0xef99b0ff95225151L,
17644         0xf3e19d88f94500d8L } },
17645     /* 3 << 147 */
17646     { { 0x92a83268e32dd620L,0x913ec99f627849a2L,0xedd8fdfa2c378882L,
17647         0xaf96f33eee6f8cfeL },
17648       { 0xc06737e5dc3fa8a5L,0x236bb531b0b03a1dL,0x33e59f2989f037b0L,
17649         0x13f9b5a7d9a12a53L } },
17650     /* 4 << 147 */
17651     { { 0x0d0df6ce51efb310L,0xcb5b2eb4958df5beL,0xd6459e2936158e59L,
17652         0x82aae2b91466e336L },
17653       { 0xfb658a39411aa636L,0x7152ecc5d4c0a933L,0xf10c758a49f026b7L,
17654         0xf4837f97cb09311fL } },
17655     /* 5 << 147 */
17656     { { 0xddfb02c4c753c45fL,0x18ca81b6f9c840feL,0x846fd09ab0f8a3e6L,
17657         0xb1162adde7733dbcL },
17658       { 0x7070ad20236e3ab6L,0xf88cdaf5b2a56326L,0x05fc8719997cbc7aL,
17659         0x442cd4524b665272L } },
17660     /* 6 << 147 */
17661     { { 0x7807f364b71698f5L,0x6ba418d29f7b605eL,0xfd20b00fa03b2cbbL,
17662         0x883eca37da54386fL },
17663       { 0xff0be43ff3437f24L,0xe910b432a48bb33cL,0x4963a128329df765L,
17664         0xac1dd556be2fe6f7L } },
17665     /* 7 << 147 */
17666     { { 0x557610f924a0a3fcL,0x38e17bf4e881c3f9L,0x6ba84fafed0dac99L,
17667         0xd4a222c359eeb918L },
17668       { 0xc79c1dbe13f542b6L,0x1fc65e0de425d457L,0xeffb754f1debb779L,
17669         0x638d8fd09e08af60L } },
17670     /* 8 << 147 */
17671     { { 0x994f523a626332d5L,0x7bc388335561bb44L,0x005ed4b03d845ea2L,
17672         0xd39d3ee1c2a1f08aL },
17673       { 0x6561fdd3e7676b0dL,0x620e35fffb706017L,0x36ce424ff264f9a8L,
17674         0xc4c3419fda2681f7L } },
17675     /* 9 << 147 */
17676     { { 0xfb6afd2f69beb6e8L,0x3a50b9936d700d03L,0xc840b2ad0c83a14fL,
17677         0x573207be54085befL },
17678       { 0x5af882e309fe7e5bL,0x957678a43b40a7e1L,0x172d4bdd543056e2L,
17679         0x9c1b26b40df13c0aL } },
17680     /* 10 << 147 */
17681     { { 0x1c30861cf405ff06L,0xebac86bd486e828bL,0xe791a971636933fcL,
17682         0x50e7c2be7aeee947L },
17683       { 0xc3d4a095fa90d767L,0xae60eb7be670ab7bL,0x17633a64397b056dL,
17684         0x93a21f33105012aaL } },
17685     /* 11 << 147 */
17686     { { 0x663c370babb88643L,0x91df36d722e21599L,0x183ba8358b761671L,
17687         0x381eea1d728f3bf1L },
17688       { 0xb9b2f1ba39966e6cL,0x7c464a28e7295492L,0x0fd5f70a09b26b7fL,
17689         0xa9aba1f9fbe009dfL } },
17690     /* 12 << 147 */
17691     { { 0x857c1f22369b87adL,0x3c00e5d932fca556L,0x1ad74cab90b06466L,
17692         0xa7112386550faaf2L },
17693       { 0x7435e1986d9bd5f5L,0x2dcc7e3859c3463fL,0xdc7df748ca7bd4b2L,
17694         0x13cd4c089dec2f31L } },
17695     /* 13 << 147 */
17696     { { 0x0d3b5df8e3237710L,0x0dadb26ecbd2f7b0L,0x9f5966abe4aa082bL,
17697         0x666ec8de350e966eL },
17698       { 0x1bfd1ed5ee524216L,0xcd93c59b41dab0b6L,0x658a8435d186d6baL,
17699         0x1b7d34d2159d1195L } },
17700     /* 14 << 147 */
17701     { { 0x5936e46022caf46bL,0x6a45dd8f9a96fe4fL,0xf7925434b98f474eL,
17702         0x414104120053ef15L },
17703       { 0x71cf8d1241de97bfL,0xb8547b61bd80bef4L,0xb47d3970c4db0037L,
17704         0xf1bcd328fef20dffL } },
17705     /* 15 << 147 */
17706     { { 0x31a92e0910caad67L,0x1f5919605531a1e1L,0x3bb852e05f4fc840L,
17707         0x63e297ca93a72c6cL },
17708       { 0x3c2b0b2e49abad67L,0x6ec405fced3db0d9L,0xdc14a5307fef1d40L,
17709         0xccd19846280896fcL } },
17710     /* 16 << 147 */
17711     { { 0x00f831769bb81648L,0xd69eb485653120d0L,0xd17d75f44ccabc62L,
17712         0x34a07f82b749fcb1L },
17713       { 0x2c3af787bbfb5554L,0xb06ed4d062e283f8L,0x5722889fa19213a0L,
17714         0x162b085edcf3c7b4L } },
17715     /* 17 << 147 */
17716     { { 0xbcaecb31e0dd3ecaL,0xc6237fbce52f13a5L,0xcc2b6b0327bac297L,
17717         0x2ae1cac5b917f54aL },
17718       { 0x474807d47845ae4fL,0xfec7dd92ce5972e0L,0xc3bd25411d7915bbL,
17719         0x66f85dc4d94907caL } },
17720     /* 18 << 147 */
17721     { { 0xd981b888bdbcf0caL,0xd75f5da6df279e9fL,0x128bbf247054e934L,
17722         0x3c6ff6e581db134bL },
17723       { 0x795b7cf4047d26e4L,0xf370f7b85049ec37L,0xc6712d4dced945afL,
17724         0xdf30b5ec095642bcL } },
17725     /* 19 << 147 */
17726     { { 0x9b034c624896246eL,0x5652c016ee90bbd1L,0xeb38636f87fedb73L,
17727         0x5e32f8470135a613L },
17728       { 0x0703b312cf933c83L,0xd05bb76e1a7f47e6L,0x825e4f0c949c2415L,
17729         0x569e56227250d6f8L } },
17730     /* 20 << 147 */
17731     { { 0xbbe9eb3a6568013eL,0x8dbd203f22f243fcL,0x9dbd7694b342734aL,
17732         0x8f6d12f846afa984L },
17733       { 0xb98610a2c9eade29L,0xbab4f32347dd0f18L,0x5779737b671c0d46L,
17734         0x10b6a7c6d3e0a42aL } },
17735     /* 21 << 147 */
17736     { { 0xfb19ddf33035b41cL,0xd336343f99c45895L,0x61fe493854c857e5L,
17737         0xc4d506beae4e57d5L },
17738       { 0x3cd8c8cbbbc33f75L,0x7281f08a9262c77dL,0x083f4ea6f11a2823L,
17739         0x8895041e9fba2e33L } },
17740     /* 22 << 147 */
17741     { { 0xfcdfea499c438edfL,0x7678dcc391edba44L,0xf07b3b87e2ba50f0L,
17742         0xc13888ef43948c1bL },
17743       { 0xc2135ad41140af42L,0x8e5104f3926ed1a7L,0xf24430cb88f6695fL,
17744         0x0ce0637b6d73c120L } },
17745     /* 23 << 147 */
17746     { { 0xb2db01e6fe631e8fL,0x1c5563d7d7bdd24bL,0x8daea3ba369ad44fL,
17747         0x000c81b68187a9f9L },
17748       { 0x5f48a951aae1fd9aL,0xe35626c78d5aed8aL,0x209527630498c622L,
17749         0x76d17634773aa504L } },
17750     /* 24 << 147 */
17751     { { 0x36d90ddaeb300f7aL,0x9dcf7dfcedb5e801L,0x645cb26874d5244cL,
17752         0xa127ee79348e3aa2L },
17753       { 0x488acc53575f1dbbL,0x95037e8580e6161eL,0x57e59283292650d0L,
17754         0xabe67d9914938216L } },
17755     /* 25 << 147 */
17756     { { 0x3c7f944b3f8e1065L,0xed908cb6330e8924L,0x08ee8fd56f530136L,
17757         0x2227b7d5d7ffc169L },
17758       { 0x4f55c893b5cd6dd5L,0x82225e11a62796e8L,0x5c6cead1cb18e12cL,
17759         0x4381ae0c84f5a51aL } },
17760     /* 26 << 147 */
17761     { { 0x345913d37fafa4c8L,0x3d9180820491aac0L,0x9347871f3e69264cL,
17762         0xbea9dd3cb4f4f0cdL },
17763       { 0xbda5d0673eadd3e7L,0x0033c1b80573bcd8L,0x255893795da2486cL,
17764         0xcb89ee5b86abbee7L } },
17765     /* 27 << 147 */
17766     { { 0x8fe0a8f322532e5dL,0xb6410ff0727dfc4cL,0x619b9d58226726dbL,
17767         0x5ec256697a2b2dc7L },
17768       { 0xaf4d2e064c3beb01L,0x852123d07acea556L,0x0e9470faf783487aL,
17769         0x75a7ea045664b3ebL } },
17770     /* 28 << 147 */
17771     { { 0x4ad78f356798e4baL,0x9214e6e5c7d0e091L,0xc420b488b1290403L,
17772         0x64049e0afc295749L },
17773       { 0x03ef5af13ae9841fL,0xdbe4ca19b0b662a6L,0x46845c5ffa453458L,
17774         0xf8dabf1910b66722L } },
17775     /* 29 << 147 */
17776     { { 0xb650f0aacce2793bL,0x71db851ec5ec47c1L,0x3eb78f3e3b234fa9L,
17777         0xb0c60f35fc0106ceL },
17778       { 0x05427121774eadbdL,0x25367fafce323863L,0x7541b5c9cd086976L,
17779         0x4ff069e2dc507ad1L } },
17780     /* 30 << 147 */
17781     { { 0x741452568776e667L,0x6e76142cb23c6bb5L,0xdbf307121b3a8a87L,
17782         0x60e7363e98450836L },
17783       { 0x5741450eb7366d80L,0xe4ee14ca4837dbdfL,0xa765eb9b69d4316fL,
17784         0x04548dca8ef43825L } },
17785     /* 31 << 147 */
17786     { { 0x9c9f4e4c5ae888ebL,0x733abb5156e9ac99L,0xdaad3c20ba6ac029L,
17787         0x9b8dd3d32ba3e38eL },
17788       { 0xa9bb4c920bc5d11aL,0xf20127a79c5f88a3L,0x4f52b06e161d3cb8L,
17789         0x26c1ff096afaf0a6L } },
17790     /* 32 << 147 */
17791     { { 0x32670d2f7189e71fL,0xc64387485ecf91e7L,0x15758e57db757a21L,
17792         0x427d09f8290a9ce5L },
17793       { 0x846a308f38384a7aL,0xaac3acb4b0732b99L,0x9e94100917845819L,
17794         0x95cba111a7ce5e03L } },
17795     /* 33 << 147 */
17796     { { 0x6f3d4f7fb00009c4L,0xb8396c278ff28b5fL,0xb1a9ae431c97975dL,
17797         0x9d7ba8afe5d9fed5L },
17798       { 0x338cf09f34f485b6L,0xbc0ddacc64122516L,0xa450da1205d471feL,
17799         0x4c3a6250628dd8c9L } },
17800     /* 34 << 147 */
17801     { { 0x69c7d103d1295837L,0xa2893e503807eb2fL,0xd6e1e1debdb41491L,
17802         0xc630745b5e138235L },
17803       { 0xc892109e48661ae1L,0x8d17e7ebea2b2674L,0x00ec0f87c328d6b5L,
17804         0x6d858645f079ff9eL } },
17805     /* 35 << 147 */
17806     { { 0x6cdf243e19115eadL,0x1ce1393e4bac4fcfL,0x2c960ed09c29f25bL,
17807         0x59be4d8e9d388a05L },
17808       { 0x0d46e06cd0def72bL,0xb923db5de0342748L,0xf7d3aacd936d4a3dL,
17809         0x558519cc0b0b099eL } },
17810     /* 36 << 147 */
17811     { { 0x3ea8ebf8827097efL,0x259353dbd054f55dL,0x84c89abc6d2ed089L,
17812         0x5c548b698e096a7cL },
17813       { 0xd587f616994b995dL,0x4d1531f6a5845601L,0x792ab31e451fd9f0L,
17814         0xc8b57bb265adf6caL } },
17815     /* 37 << 147 */
17816     { { 0x68440fcb1cd5ad73L,0xb9c860e66144da4fL,0x2ab286aa8462beb8L,
17817         0xcc6b8fffef46797fL },
17818       { 0xac820da420c8a471L,0x69ae05a177ff7fafL,0xb9163f39bfb5da77L,
17819         0xbd03e5902c73ab7aL } },
17820     /* 38 << 147 */
17821     { { 0x7e862b5eb2940d9eL,0x3c663d864b9af564L,0xd8309031bde3033dL,
17822         0x298231b2d42c5bc6L },
17823       { 0x42090d2c552ad093L,0xa4799d1cff854695L,0x0a88b5d6d31f0d00L,
17824         0xf8b40825a2f26b46L } },
17825     /* 39 << 147 */
17826     { { 0xec29b1edf1bd7218L,0xd491c53b4b24c86eL,0xd2fe588f3395ea65L,
17827         0x6f3764f74456ef15L },
17828       { 0xdb43116dcdc34800L,0xcdbcd456c1e33955L,0xefdb554074ab286bL,
17829         0x948c7a51d18c5d7cL } },
17830     /* 40 << 147 */
17831     { { 0xeb81aa377378058eL,0x41c746a104411154L,0xa10c73bcfb828ac7L,
17832         0x6439be919d972b29L },
17833       { 0x4bf3b4b043a2fbadL,0x39e6dadf82b5e840L,0x4f7164086397bd4cL,
17834         0x0f7de5687f1eeccbL } },
17835     /* 41 << 147 */
17836     { { 0x5865c5a1d2ffbfc1L,0xf74211fa4ccb6451L,0x66368a88c0b32558L,
17837         0x5b539dc29ad7812eL },
17838       { 0x579483d02f3af6f6L,0x5213207899934eceL,0x50b9650fdcc9e983L,
17839         0xca989ec9aee42b8aL } },
17840     /* 42 << 147 */
17841     { { 0x6a44c829d6f62f99L,0x8f06a3094c2a7c0cL,0x4ea2b3a098a0cb0aL,
17842         0x5c547b70beee8364L },
17843       { 0x461d40e1682afe11L,0x9e0fc77a7b41c0a8L,0x79e4aefde20d5d36L,
17844         0x2916e52032dd9f63L } },
17845     /* 43 << 147 */
17846     { { 0xf59e52e83f883fafL,0x396f96392b868d35L,0xc902a9df4ca19881L,
17847         0x0fc96822db2401a6L },
17848       { 0x4123758766f1c68dL,0x10fc6de3fb476c0dL,0xf8b6b579841f5d90L,
17849         0x2ba8446cfa24f44aL } },
17850     /* 44 << 147 */
17851     { { 0xa237b920ef4a9975L,0x60bb60042330435fL,0xd6f4ab5acfb7e7b5L,
17852         0xb2ac509783435391L },
17853       { 0xf036ee2fb0d1ea67L,0xae779a6a74c56230L,0x59bff8c8ab838ae6L,
17854         0xcd83ca999b38e6f0L } },
17855     /* 45 << 147 */
17856     { { 0xbb27bef5e33deed3L,0xe6356f6f001892a8L,0xbf3be6cc7adfbd3eL,
17857         0xaecbc81c33d1ac9dL },
17858       { 0xe4feb909e6e861dcL,0x90a247a453f5f801L,0x01c50acb27346e57L,
17859         0xce29242e461acc1bL } },
17860     /* 46 << 147 */
17861     { { 0x04dd214a2f998a91L,0x271ee9b1d4baf27bL,0x7e3027d1e8c26722L,
17862         0x21d1645c1820dce5L },
17863       { 0x086f242c7501779cL,0xf0061407fa0e8009L,0xf23ce47760187129L,
17864         0x05bbdedb0fde9bd0L } },
17865     /* 47 << 147 */
17866     { { 0x682f483225d98473L,0xf207fe855c658427L,0xb6fdd7ba4166ffa1L,
17867         0x0c3140569eed799dL },
17868       { 0x0db8048f4107e28fL,0x74ed387141216840L,0x74489f8f56a3c06eL,
17869         0x1e1c005b12777134L } },
17870     /* 48 << 147 */
17871     { { 0xdb332a73f37ec3c3L,0xc65259bddd59eba0L,0x2291709cdb4d3257L,
17872         0x9a793b25bd389390L },
17873       { 0xf39fe34be43756f0L,0x2f76bdce9afb56c9L,0x9f37867a61208b27L,
17874         0xea1d4307089972c3L } },
17875     /* 49 << 147 */
17876     { { 0x8c5953308bdf623aL,0x5f5accda8441fb7dL,0xfafa941832ddfd95L,
17877         0x6ad40c5a0fde9be7L },
17878       { 0x43faba89aeca8709L,0xc64a7cf12c248a9dL,0x1662025272637a76L,
17879         0xaee1c79122b8d1bbL } },
17880     /* 50 << 147 */
17881     { { 0xf0f798fd21a843b2L,0x56e4ed4d8d005cb1L,0x355f77801f0d8abeL,
17882         0x197b04cf34522326L },
17883       { 0x41f9b31ffd42c13fL,0x5ef7feb2b40f933dL,0x27326f425d60bad4L,
17884         0x027ecdb28c92cf89L } },
17885     /* 51 << 147 */
17886     { { 0x04aae4d14e3352feL,0x08414d2f73591b90L,0x5ed6124eb7da7d60L,
17887         0xb985b9314d13d4ecL },
17888       { 0xa592d3ab96bf36f9L,0x012dbed5bbdf51dfL,0xa57963c0df6c177dL,
17889         0x010ec86987ca29cfL } },
17890     /* 52 << 147 */
17891     { { 0xba1700f6bf926dffL,0x7c9fdbd1f4bf6bc2L,0xdc18dc8f64da11f5L,
17892         0xa6074b7ad938ae75L },
17893       { 0x14270066e84f44a4L,0x99998d38d27b954eL,0xc1be8ab2b4f38e9aL,
17894         0x8bb55bbf15c01016L } },
17895     /* 53 << 147 */
17896     { { 0xf73472b40ea2ab30L,0xd365a340f73d68ddL,0xc01a716819c2e1ebL,
17897         0x32f49e3734061719L },
17898       { 0xb73c57f101d8b4d6L,0x03c8423c26b47700L,0x321d0bc8a4d8826aL,
17899         0x6004213c4bc0e638L } },
17900     /* 54 << 147 */
17901     { { 0xf78c64a1c1c06681L,0x16e0a16fef018e50L,0x31cbdf91db42b2b3L,
17902         0xf8f4ffcee0d36f58L },
17903       { 0xcdcc71cd4cc5e3e0L,0xd55c7cfaa129e3e0L,0xccdb6ba00fb2cbf1L,
17904         0x6aba0005c4bce3cbL } },
17905     /* 55 << 147 */
17906     { { 0x501cdb30d232cfc4L,0x9ddcf12ed58a3cefL,0x02d2cf9c87e09149L,
17907         0xdc5d7ec72c976257L },
17908       { 0x6447986e0b50d7ddL,0x88fdbaf7807f112aL,0x58c9822ab00ae9f6L,
17909         0x6abfb9506d3d27e0L } },
17910     /* 56 << 147 */
17911     { { 0xd0a744878a429f4fL,0x0649712bdb516609L,0xb826ba57e769b5dfL,
17912         0x82335df21fc7aaf2L },
17913       { 0x2389f0675c93d995L,0x59ac367a68677be6L,0xa77985ff21d9951bL,
17914         0x038956fb85011cceL } },
17915     /* 57 << 147 */
17916     { { 0x608e48cbbb734e37L,0xc08c0bf22be5b26fL,0x17bbdd3bf9b1a0d9L,
17917         0xeac7d89810483319L },
17918       { 0xc95c4bafbc1a6deaL,0xfdd0e2bf172aafdbL,0x40373cbc8235c41aL,
17919         0x14303f21fb6f41d5L } },
17920     /* 58 << 147 */
17921     { { 0xba0636210408f237L,0xcad3b09aecd2d1edL,0x4667855a52abb6a2L,
17922         0xba9157dcaa8b417bL },
17923       { 0xfe7f35074f013efbL,0x1b112c4baa38c4a2L,0xa1406a609ba64345L,
17924         0xe53cba336993c80bL } },
17925     /* 59 << 147 */
17926     { { 0x45466063ded40d23L,0x3d5f1f4d54908e25L,0x9ebefe62403c3c31L,
17927         0x274ea0b50672a624L },
17928       { 0xff818d99451d1b71L,0x80e826438f79cf79L,0xa165df1373ce37f5L,
17929         0xa744ef4ffe3a21fdL } },
17930     /* 60 << 147 */
17931     { { 0x73f1e7f5cf551396L,0xc616898e868c676bL,0x671c28c78c442c36L,
17932         0xcfe5e5585e0a317dL },
17933       { 0x1242d8187051f476L,0x56fad2a614f03442L,0x262068bc0a44d0f6L,
17934         0xdfa2cd6ece6edf4eL } },
17935     /* 61 << 147 */
17936     { { 0x0f43813ad15d1517L,0x61214cb2377d44f5L,0xd399aa29c639b35fL,
17937         0x42136d7154c51c19L },
17938       { 0x9774711b08417221L,0x0a5546b352545a57L,0x80624c411150582dL,
17939         0x9ec5c418fbc555bcL } },
17940     /* 62 << 147 */
17941     { { 0x2c87dcad771849f1L,0xb0c932c501d7bf6fL,0x6aa5cd3e89116eb2L,
17942         0xd378c25a51ca7bd3L },
17943       { 0xc612a0da9e6e3e31L,0x0417a54db68ad5d0L,0x00451e4a22c6edb8L,
17944         0x9fbfe019b42827ceL } },
17945     /* 63 << 147 */
17946     { { 0x2fa92505ba9384a2L,0x21b8596e64ad69c1L,0x8f4fcc49983b35a6L,
17947         0xde09376072754672L },
17948       { 0x2f14ccc8f7bffe6dL,0x27566bff5d94263dL,0xb5b4e9c62df3ec30L,
17949         0x94f1d7d53e6ea6baL } },
17950     /* 64 << 147 */
17951     { { 0x97b7851aaaca5e9bL,0x518aa52156713b97L,0x3357e8c7150a61f6L,
17952         0x7842e7e2ec2c2b69L },
17953       { 0x8dffaf656868a548L,0xd963bd82e068fc81L,0x64da5c8b65917733L,
17954         0x927090ff7b247328L } },
17955     /* 0 << 154 */
17956     { { 0x00, 0x00, 0x00, 0x00 },
17957       { 0x00, 0x00, 0x00, 0x00 } },
17958     /* 1 << 154 */
17959     { { 0x214bc9a7d298c241L,0xe3b697ba56807cfdL,0xef1c78024564eadbL,
17960         0xdde8cdcfb48149c5L },
17961       { 0x946bf0a75a4d2604L,0x27154d7f6c1538afL,0x95cc9230de5b1fccL,
17962         0xd88519e966864f82L } },
17963     /* 2 << 154 */
17964     { { 0xb828dd1a7cb1282cL,0xa08d7626be46973aL,0x6baf8d40e708d6b2L,
17965         0x72571fa14daeb3f3L },
17966       { 0x85b1732ff22dfd98L,0x87ab01a70087108dL,0xaaaafea85988207aL,
17967         0xccc832f869f00755L } },
17968     /* 3 << 154 */
17969     { { 0x964d950e36ff3bf0L,0x8ad20f6ff0b34638L,0x4d9177b3b5d7585fL,
17970         0xcf839760ef3f019fL },
17971       { 0x582fc5b38288c545L,0x2f8e4e9b13116bd1L,0xf91e1b2f332120efL,
17972         0xcf5687242a17dd23L } },
17973     /* 4 << 154 */
17974     { { 0x488f1185ca8d9d1aL,0xadf2c77dd987ded2L,0x5f3039f060c46124L,
17975         0xe5d70b7571e095f4L },
17976       { 0x82d586506260e70fL,0x39d75ea7f750d105L,0x8cf3d0b175bac364L,
17977         0xf3a7564d21d01329L } },
17978     /* 5 << 154 */
17979     { { 0x182f04cd2f52d2a7L,0x4fde149ae2df565aL,0xb80c5eeca79fb2f7L,
17980         0xab491d7b22ddc897L },
17981       { 0x99d76c18c6312c7fL,0xca0d5f3d6aa41a57L,0x71207325d15363a0L,
17982         0xe82aa265beb252c2L } },
17983     /* 6 << 154 */
17984     { { 0x94ab4700ec3128c2L,0x6c76d8628e383f49L,0xdc36b150c03024ebL,
17985         0xfb43947753daac69L },
17986       { 0xfc68764a8dc79623L,0x5b86995db440fbb2L,0xd66879bfccc5ee0dL,
17987         0x0522894295aa8bd3L } },
17988     /* 7 << 154 */
17989     { { 0xb51a40a51e6a75c1L,0x24327c760ea7d817L,0x0663018207774597L,
17990         0xd6fdbec397fa7164L },
17991       { 0x20c99dfb13c90f48L,0xd6ac5273686ef263L,0xc6a50bdcfef64eebL,
17992         0xcd87b28186fdfc32L } },
17993     /* 8 << 154 */
17994     { { 0xb24aa43e3fcd3efcL,0xdd26c034b8088e9aL,0xa5ef4dc9bd3d46eaL,
17995         0xa2f99d588a4c6a6fL },
17996       { 0xddabd3552f1da46cL,0x72c3f8ce1afacdd1L,0xd90c4eee92d40578L,
17997         0xd28bb41fca623b94L } },
17998     /* 9 << 154 */
17999     { { 0x50fc0711745edc11L,0x9dd9ad7d3dc87558L,0xce6931fbb49d1e64L,
18000         0x6c77a0a2c98bd0f9L },
18001       { 0x62b9a6296baf7cb1L,0xcf065f91ccf72d22L,0x7203cce979639071L,
18002         0x09ae4885f9cb732fL } },
18003     /* 10 << 154 */
18004     { { 0x5e7c3becee8314f3L,0x1c068aeddbea298fL,0x08d381f17c80acecL,
18005         0x03b56be8e330495bL },
18006       { 0xaeffb8f29222882dL,0x95ff38f6c4af8bf7L,0x50e32d351fc57d8cL,
18007         0x6635be5217b444f0L } },
18008     /* 11 << 154 */
18009     { { 0x04d15276a5177900L,0x4e1dbb47f6858752L,0x5b475622c615796cL,
18010         0xa6fa0387691867bfL },
18011       { 0xed7f5d562844c6d0L,0xc633cf9b03a2477dL,0xf6be5c402d3721d6L,
18012         0xaf312eb7e9fd68e6L } },
18013     /* 12 << 154 */
18014     { { 0x242792d2e7417ce1L,0xff42bc71970ee7f5L,0x1ff4dc6d5c67a41eL,
18015         0x77709b7b20882a58L },
18016       { 0x3554731dbe217f2cL,0x2af2a8cd5bb72177L,0x58eee769591dd059L,
18017         0xbb2930c94bba6477L } },
18018     /* 13 << 154 */
18019     { { 0x863ee0477d930cfcL,0x4c262ad1396fd1f4L,0xf4765bc8039af7e1L,
18020         0x2519834b5ba104f6L },
18021       { 0x7cd61b4cd105f961L,0xa5415da5d63bca54L,0x778280a088a1f17cL,
18022         0xc49689492329512cL } },
18023     /* 14 << 154 */
18024     { { 0x174a9126cecdaa7aL,0xfc8c7e0e0b13247bL,0x29c110d23484c1c4L,
18025         0xf8eb8757831dfc3bL },
18026       { 0x022f0212c0067452L,0x3f6f69ee7b9b926cL,0x09032da0ef42daf4L,
18027         0x79f00ade83f80de4L } },
18028     /* 15 << 154 */
18029     { { 0x6210db7181236c97L,0x74f7685b3ee0781fL,0x4df7da7ba3e41372L,
18030         0x2aae38b1b1a1553eL },
18031       { 0x1688e222f6dd9d1bL,0x576954485b8b6487L,0x478d21274b2edeaaL,
18032         0xb2818fa51e85956aL } },
18033     /* 16 << 154 */
18034     { { 0x1e6adddaf176f2c0L,0x01ca4604e2572658L,0x0a404ded85342ffbL,
18035         0x8cf60f96441838d6L },
18036       { 0x9bbc691cc9071c4aL,0xfd58874434442803L,0x97101c85809c0d81L,
18037         0xa7fb754c8c456f7fL } },
18038     /* 17 << 154 */
18039     { { 0xc95f3c5cd51805e1L,0xab4ccd39b299dca8L,0x3e03d20b47eaf500L,
18040         0xfa3165c1d7b80893L },
18041       { 0x005e8b54e160e552L,0xdc4972ba9019d11fL,0x21a6972e0c9a4a7aL,
18042         0xa52c258f37840fd7L } },
18043     /* 18 << 154 */
18044     { { 0xf8559ff4c1e99d81L,0x08e1a7d6a3c617c0L,0xb398fd43248c6ba7L,
18045         0x6ffedd91d1283794L },
18046       { 0x8a6a59d2d629d208L,0xa9d141d53490530eL,0x42f6fc1838505989L,
18047         0x09bf250d479d94eeL } },
18048     /* 19 << 154 */
18049     { { 0x223ad3b1b3822790L,0x6c5926c093b8971cL,0x609efc7e75f7fa62L,
18050         0x45d66a6d1ec2d989L },
18051       { 0x4422d663987d2792L,0x4a73caad3eb31d2bL,0xf06c2ac1a32cb9e6L,
18052         0xd9445c5f91aeba84L } },
18053     /* 20 << 154 */
18054     { { 0x6af7a1d5af71013fL,0xe68216e50bedc946L,0xf4cba30bd27370a0L,
18055         0x7981afbf870421ccL },
18056       { 0x02496a679449f0e1L,0x86cfc4be0a47edaeL,0x3073c936b1feca22L,
18057         0xf569461203f8f8fbL } },
18058     /* 21 << 154 */
18059     { { 0xd063b723901515eaL,0x4c6c77a5749cf038L,0x6361e360ab9e5059L,
18060         0x596cf171a76a37c0L },
18061       { 0x800f53fa6530ae7aL,0x0f5e631e0792a7a6L,0x5cc29c24efdb81c9L,
18062         0xa269e8683f9c40baL } },
18063     /* 22 << 154 */
18064     { { 0xec14f9e12cb7191eL,0x78ea1bd8e5b08ea6L,0x3c65aa9b46332bb9L,
18065         0x84cc22b3bf80ce25L },
18066       { 0x0098e9e9d49d5bf1L,0xcd4ec1c619087da4L,0x3c9d07c5aef6e357L,
18067         0x839a02689f8f64b8L } },
18068     /* 23 << 154 */
18069     { { 0xc5e9eb62c6d8607fL,0x759689f56aa995e4L,0x70464669bbb48317L,
18070         0x921474bfe402417dL },
18071       { 0xcabe135b2a354c8cL,0xd51e52d2812fa4b5L,0xec74109653311fe8L,
18072         0x4f774535b864514bL } },
18073     /* 24 << 154 */
18074     { { 0xbcadd6715bde48f8L,0xc97038732189bc7dL,0x5d45299ec709ee8aL,
18075         0xd1287ee2845aaff8L },
18076       { 0x7d1f8874db1dbf1fL,0xea46588b990c88d6L,0x60ba649a84368313L,
18077         0xd5fdcbce60d543aeL } },
18078     /* 25 << 154 */
18079     { { 0x90b46d43810d5ab0L,0x6739d8f904d7e5ccL,0x021c1a580d337c33L,
18080         0x00a6116268e67c40L },
18081       { 0x95ef413b379f0a1fL,0xfe126605e9e2ab95L,0x67578b852f5f199cL,
18082         0xf5c003292cb84913L } },
18083     /* 26 << 154 */
18084     { { 0xf795643037577dd8L,0x83b82af429c5fe88L,0x9c1bea26cdbdc132L,
18085         0x589fa0869c04339eL },
18086       { 0x033e9538b13799dfL,0x85fa8b21d295d034L,0xdf17f73fbd9ddccaL,
18087         0xf32bd122ddb66334L } },
18088     /* 27 << 154 */
18089     { { 0x55ef88a7858b044cL,0x1f0d69c25aa9e397L,0x55fd9cc340d85559L,
18090         0xc774df727785ddb2L },
18091       { 0x5dcce9f6d3bd2e1cL,0xeb30da20a85dfed0L,0x5ed7f5bbd3ed09c4L,
18092         0x7d42a35c82a9c1bdL } },
18093     /* 28 << 154 */
18094     { { 0xcf3de9959890272dL,0x75f3432a3e713a10L,0x5e13479fe28227b8L,
18095         0xb8561ea9fefacdc8L },
18096       { 0xa6a297a08332aafdL,0x9b0d8bb573809b62L,0xd2fa1cfd0c63036fL,
18097         0x7a16eb55bd64bda8L } },
18098     /* 29 << 154 */
18099     { { 0x3f5cf5f678e62ddcL,0x2267c45407fd752bL,0x5e361b6b5e437bbeL,
18100         0x95c595018354e075L },
18101       { 0xec725f85f2b254d9L,0x844b617d2cb52b4eL,0xed8554f5cf425fb5L,
18102         0xab67703e2af9f312L } },
18103     /* 30 << 154 */
18104     { { 0x4cc34ec13cf48283L,0xb09daa259c8a705eL,0xd1e9d0d05b7d4f84L,
18105         0x4df6ef64db38929dL },
18106       { 0xe16b0763aa21ba46L,0xc6b1d178a293f8fbL,0x0ff5b602d520aabfL,
18107         0x94d671bdc339397aL } },
18108     /* 31 << 154 */
18109     { { 0x7c7d98cf4f5792faL,0x7c5e0d6711215261L,0x9b19a631a7c5a6d4L,
18110         0xc8511a627a45274dL },
18111       { 0x0c16621ca5a60d99L,0xf7fbab88cf5e48cbL,0xab1e6ca2f7ddee08L,
18112         0x83bd08cee7867f3cL } },
18113     /* 32 << 154 */
18114     { { 0xf7e48e8a2ac13e27L,0x4494f6df4eb1a9f5L,0xedbf84eb981f0a62L,
18115         0x49badc32536438f0L },
18116       { 0x50bea541004f7571L,0xbac67d10df1c94eeL,0x253d73a1b727bc31L,
18117         0xb3d01cf230686e28L } },
18118     /* 33 << 154 */
18119     { { 0x51b77b1b55fd0b8bL,0xa099d183feec3173L,0x202b1fb7670e72b7L,
18120         0xadc88b33a8e1635fL },
18121       { 0x34e8216af989d905L,0xc2e68d2029b58d01L,0x11f81c926fe55a93L,
18122         0x15f1462a8f296f40L } },
18123     /* 34 << 154 */
18124     { { 0x1915d375ea3d62f2L,0xa17765a301c8977dL,0x7559710ae47b26f6L,
18125         0xe0bd29c8535077a5L },
18126       { 0x615f976d08d84858L,0x370dfe8569ced5c1L,0xbbc7503ca734fa56L,
18127         0xfbb9f1ec91ac4574L } },
18128     /* 35 << 154 */
18129     { { 0x95d7ec53060dd7efL,0xeef2dacd6e657979L,0x54511af3e2a08235L,
18130         0x1e324aa41f4aea3dL },
18131       { 0x550e7e71e6e67671L,0xbccd5190bf52faf7L,0xf880d316223cc62aL,
18132         0x0d402c7e2b32eb5dL } },
18133     /* 36 << 154 */
18134     { { 0xa40bc039306a5a3bL,0x4e0a41fd96783a1bL,0xa1e8d39a0253cdd4L,
18135         0x6480be26c7388638L },
18136       { 0xee365e1d2285f382L,0x188d8d8fec0b5c36L,0x34ef1a481f0f4d82L,
18137         0x1a8f43e1a487d29aL } },
18138     /* 37 << 154 */
18139     { { 0x8168226d77aefb3aL,0xf69a751e1e72c253L,0x8e04359ae9594df1L,
18140         0x475ffd7dd14c0467L },
18141       { 0xb5a2c2b13844e95cL,0x85caf647dd12ef94L,0x1ecd2a9ff1063d00L,
18142         0x1dd2e22923843311L } },
18143     /* 38 << 154 */
18144     { { 0x38f0e09d73d17244L,0x3ede77468fc653f1L,0xae4459f5dc20e21cL,
18145         0x00db2ffa6a8599eaL },
18146       { 0x11682c3930cfd905L,0x4934d074a5c112a6L,0xbdf063c5568bfe95L,
18147         0x779a440a016c441aL } },
18148     /* 39 << 154 */
18149     { { 0x0c23f21897d6fbdcL,0xd3a5cd87e0776aacL,0xcee37f72d712e8dbL,
18150         0xfb28c70d26f74e8dL },
18151       { 0xffe0c728b61301a0L,0xa6282168d3724354L,0x7ff4cb00768ffedcL,
18152         0xc51b308803b02de9L } },
18153     /* 40 << 154 */
18154     { { 0xa5a8147c3902dda5L,0x35d2f706fe6973b4L,0x5ac2efcfc257457eL,
18155         0x933f48d48700611bL },
18156       { 0xc365af884912beb2L,0x7f5a4de6162edf94L,0xc646ba7c0c32f34bL,
18157         0x632c6af3b2091074L } },
18158     /* 41 << 154 */
18159     { { 0x58d4f2e3753e43a9L,0x70e1d21724d4e23fL,0xb24bf729afede6a6L,
18160         0x7f4a94d8710c8b60L },
18161       { 0xaad90a968d4faa6aL,0xd9ed0b32b066b690L,0x52fcd37b78b6dbfdL,
18162         0x0b64615e8bd2b431L } },
18163     /* 42 << 154 */
18164     { { 0x228e2048cfb9fad5L,0xbeaa386d240b76bdL,0x2d6681c890dad7bcL,
18165         0x3e553fc306d38f5eL },
18166       { 0xf27cdb9b9d5f9750L,0x3e85c52ad28c5b0eL,0x190795af5247c39bL,
18167         0x547831ebbddd6828L } },
18168     /* 43 << 154 */
18169     { { 0xf327a2274a82f424L,0x36919c787e47f89dL,0xe478391943c7392cL,
18170         0xf101b9aa2316fefeL },
18171       { 0xbcdc9e9c1c5009d2L,0xfb55ea139cd18345L,0xf5b5e231a3ce77c7L,
18172         0xde6b4527d2f2cb3dL } },
18173     /* 44 << 154 */
18174     { { 0x10f6a3339bb26f5fL,0x1e85db8e044d85b6L,0xc3697a0894197e54L,
18175         0x65e18cc0a7cb4ea8L },
18176       { 0xa38c4f50a471fe6eL,0xf031747a2f13439cL,0x53c4a6bac007318bL,
18177         0xa8da3ee51deccb3dL } },
18178     /* 45 << 154 */
18179     { { 0x0555b31c558216b1L,0x90c7810c2f79e6c2L,0x9b669f4dfe8eed3cL,
18180         0x70398ec8e0fac126L },
18181       { 0xa96a449ef701b235L,0x0ceecdb3eb94f395L,0x285fc368d0cb7431L,
18182         0x0d37bb5216a18c64L } },
18183     /* 46 << 154 */
18184     { { 0x05110d38b880d2ddL,0xa60f177b65930d57L,0x7da34a67f36235f5L,
18185         0x47f5e17c183816b9L },
18186       { 0xc7664b57db394af4L,0x39ba215d7036f789L,0x46d2ca0e2f27b472L,
18187         0xc42647eef73a84b7L } },
18188     /* 47 << 154 */
18189     { { 0x44bc754564488f1dL,0xaa922708f4cf85d5L,0x721a01d553e4df63L,
18190         0x649c0c515db46cedL },
18191       { 0x6bf0d64e3cffcb6cL,0xe3bf93fe50f71d96L,0x75044558bcc194a0L,
18192         0x16ae33726afdc554L } },
18193     /* 48 << 154 */
18194     { { 0xbfc01adf5ca48f3fL,0x64352f06e22a9b84L,0xcee54da1c1099e4aL,
18195         0xbbda54e8fa1b89c0L },
18196       { 0x166a3df56f6e55fbL,0x1ca44a2420176f88L,0x936afd88dfb7b5ffL,
18197         0xe34c24378611d4a0L } },
18198     /* 49 << 154 */
18199     { { 0x7effbb7586142103L,0x6704ba1b1f34fc4dL,0x7c2a468f10c1b122L,
18200         0x36b3a6108c6aace9L },
18201       { 0xabfcc0a775a0d050L,0x066f91973ce33e32L,0xce905ef429fe09beL,
18202         0x89ee25baa8376351L } },
18203     /* 50 << 154 */
18204     { { 0x2a3ede22fd29dc76L,0x7fd32ed936f17260L,0x0cadcf68284b4126L,
18205         0x63422f08a7951fc8L },
18206       { 0x562b24f40807e199L,0xfe9ce5d122ad4490L,0xc2f51b100db2b1b4L,
18207         0xeb3613ffe4541d0dL } },
18208     /* 51 << 154 */
18209     { { 0xbd2c4a052680813bL,0x527aa55d561b08d6L,0xa9f8a40ea7205558L,
18210         0xe3eea56f243d0becL },
18211       { 0x7b853817a0ff58b3L,0xb67d3f651a69e627L,0x0b76bbb9a869b5d6L,
18212         0xa3afeb82546723edL } },
18213     /* 52 << 154 */
18214     { { 0x5f24416d3e554892L,0x8413b53d430e2a45L,0x99c56aee9032a2a0L,
18215         0x09432bf6eec367b1L },
18216       { 0x552850c6daf0ecc1L,0x49ebce555bc92048L,0xdfb66ba654811307L,
18217         0x1b84f7976f298597L } },
18218     /* 53 << 154 */
18219     { { 0x795904818d1d7a0dL,0xd9fabe033a6fa556L,0xa40f9c59ba9e5d35L,
18220         0xcb1771c1f6247577L },
18221       { 0x542a47cae9a6312bL,0xa34b3560552dd8c5L,0xfdf94de00d794716L,
18222         0xd46124a99c623094L } },
18223     /* 54 << 154 */
18224     { { 0x56b7435d68afe8b4L,0x27f205406c0d8ea1L,0x12b77e1473186898L,
18225         0xdbc3dd467479490fL },
18226       { 0x951a9842c03b0c05L,0x8b1b3bb37921bc96L,0xa573b3462b202e0aL,
18227         0x77e4665d47254d56L } },
18228     /* 55 << 154 */
18229     { { 0x08b70dfcd23e3984L,0xab86e8bcebd14236L,0xaa3e07f857114ba7L,
18230         0x5ac71689ab0ef4f2L },
18231       { 0x88fca3840139d9afL,0x72733f8876644af0L,0xf122f72a65d74f4aL,
18232         0x13931577a5626c7aL } },
18233     /* 56 << 154 */
18234     { { 0xd5b5d9eb70f8d5a4L,0x375adde7d7bbb228L,0x31e88b860c1c0b32L,
18235         0xd1f568c4173edbaaL },
18236       { 0x1592fc835459df02L,0x2beac0fb0fcd9a7eL,0xb0a6fdb81b473b0aL,
18237         0xe3224c6f0fe8fc48L } },
18238     /* 57 << 154 */
18239     { { 0x680bd00ee87edf5bL,0x30385f0220e77cf5L,0xe9ab98c04d42d1b2L,
18240         0x72d191d2d3816d77L },
18241       { 0x1564daca0917d9e5L,0x394eab591f8fed7fL,0xa209aa8d7fbb3896L,
18242         0x5564f3b9be6ac98eL } },
18243     /* 58 << 154 */
18244     { { 0xead21d05d73654efL,0x68d1a9c413d78d74L,0x61e017086d4973a0L,
18245         0x83da350046e6d32aL },
18246       { 0x6a3dfca468ae0118L,0xa1b9a4c9d02da069L,0x0b2ff9c7ebab8302L,
18247         0x98af07c3944ba436L } },
18248     /* 59 << 154 */
18249     { { 0x85997326995f0f9fL,0x467fade071b58bc6L,0x47e4495abd625a2bL,
18250         0xfdd2d01d33c3b8cdL },
18251       { 0x2c38ae28c693f9faL,0x48622329348f7999L,0x97bf738e2161f583L,
18252         0x15ee2fa7565e8cc9L } },
18253     /* 60 << 154 */
18254     { { 0xa1a5c8455777e189L,0xcc10bee0456f2829L,0x8ad95c56da762bd5L,
18255         0x152e2214e9d91da8L },
18256       { 0x975b0e727cb23c74L,0xfd5d7670a90c66dfL,0xb5b5b8ad225ffc53L,
18257         0xab6dff73faded2aeL } },
18258     /* 61 << 154 */
18259     { { 0xebd567816f4cbe9dL,0x0ed8b2496a574bd7L,0x41c246fe81a881faL,
18260         0x91564805c3db9c70L },
18261       { 0xd7c12b085b862809L,0x1facd1f155858d7bL,0x7693747caf09e92aL,
18262         0x3b69dcba189a425fL } },
18263     /* 62 << 154 */
18264     { { 0x0be28e9f967365efL,0x57300eb2e801f5c9L,0x93b8ac6ad583352fL,
18265         0xa2cf1f89cd05b2b7L },
18266       { 0x7c0c9b744dcc40ccL,0xfee38c45ada523fbL,0xb49a4dec1099cc4dL,
18267         0x325c377f69f069c6L } },
18268     /* 63 << 154 */
18269     { { 0xe12458ce476cc9ffL,0x580e0b6cc6d4cb63L,0xd561c8b79072289bL,
18270         0x0377f264a619e6daL },
18271       { 0x2668536288e591a5L,0xa453a7bd7523ca2bL,0x8a9536d2c1df4533L,
18272         0xc8e50f2fbe972f79L } },
18273     /* 64 << 154 */
18274     { { 0xd433e50f6d3549cfL,0x6f33696ffacd665eL,0x695bfdacce11fcb4L,
18275         0x810ee252af7c9860L },
18276       { 0x65450fe17159bb2cL,0xf7dfbebe758b357bL,0x2b057e74d69fea72L,
18277         0xd485717a92731745L } },
18278     /* 0 << 161 */
18279     { { 0x00, 0x00, 0x00, 0x00 },
18280       { 0x00, 0x00, 0x00, 0x00 } },
18281     /* 1 << 161 */
18282     { { 0x896c42e8ee36860cL,0xdaf04dfd4113c22dL,0x1adbb7b744104213L,
18283         0xe5fd5fa11fd394eaL },
18284       { 0x68235d941a4e0551L,0x6772cfbe18d10151L,0x276071e309984523L,
18285         0xe4e879de5a56ba98L } },
18286     /* 2 << 161 */
18287     { { 0xaaafafb0285b9491L,0x01a0be881e4c705eL,0xff1d4f5d2ad9caabL,
18288         0x6e349a4ac37a233fL },
18289       { 0xcf1c12464a1c6a16L,0xd99e6b6629383260L,0xea3d43665f6d5471L,
18290         0x36974d04ff8cc89bL } },
18291     /* 3 << 161 */
18292     { { 0xc26c49a1cfe89d80L,0xb42c026dda9c8371L,0xca6c013adad066d2L,
18293         0xfb8f722856a4f3eeL },
18294       { 0x08b579ecd850935bL,0x34c1a74cd631e1b3L,0xcb5fe596ac198534L,
18295         0x39ff21f6e1f24f25L } },
18296     /* 4 << 161 */
18297     { { 0x27f29e148f929057L,0x7a64ae06c0c853dfL,0x256cd18358e9c5ceL,
18298         0x9d9cce82ded092a5L },
18299       { 0xcc6e59796e93b7c7L,0xe1e4709231bb9e27L,0xb70b3083aa9e29a0L,
18300         0xbf181a753785e644L } },
18301     /* 5 << 161 */
18302     { { 0xf53f2c658ead09f7L,0x1335e1d59780d14dL,0x69cc20e0cd1b66bcL,
18303         0x9b670a37bbe0bfc8L },
18304       { 0xce53dc8128efbeedL,0x0c74e77c8326a6e5L,0x3604e0d2b88e9a63L,
18305         0xbab38fca13dc2248L } },
18306     /* 6 << 161 */
18307     { { 0x8ed6e8c85c0a3f1eL,0xbcad24927c87c37fL,0xfdfb62bb9ee3b78dL,
18308         0xeba8e477cbceba46L },
18309       { 0x37d38cb0eeaede4bL,0x0bc498e87976deb6L,0xb2944c046b6147fbL,
18310         0x8b123f35f71f9609L } },
18311     /* 7 << 161 */
18312     { { 0xa155dcc7de79dc24L,0xf1168a32558f69cdL,0xbac215950d1850dfL,
18313         0x15c8295bb204c848L },
18314       { 0xf661aa367d8184ffL,0xc396228e30447bdbL,0x11cd5143bde4a59eL,
18315         0xe3a26e3b6beab5e6L } },
18316     /* 8 << 161 */
18317     { { 0xd3b3a13f1402b9d0L,0x573441c32c7bc863L,0x4b301ec4578c3e6eL,
18318         0xc26fc9c40adaf57eL },
18319       { 0x96e71bfd7493cea3L,0xd05d4b3f1af81456L,0xdaca2a8a6a8c608fL,
18320         0x53ef07f60725b276L } },
18321     /* 9 << 161 */
18322     { { 0x07a5fbd27824fc56L,0x3467521813289077L,0x5bf69fd5e0c48349L,
18323         0xa613ddd3b6aa7875L },
18324       { 0x7f78c19c5450d866L,0x46f4409c8f84a481L,0x9f1d192890fce239L,
18325         0x016c4168b2ce44b9L } },
18326     /* 10 << 161 */
18327     { { 0xbae023f0c7435978L,0xb152c88820e30e19L,0x9c241645e3fa6fafL,
18328         0x735d95c184823e60L },
18329       { 0x0319757303955317L,0x0b4b02a9f03b4995L,0x076bf55970274600L,
18330         0x32c5cc53aaf57508L } },
18331     /* 11 << 161 */
18332     { { 0xe8af6d1f60624129L,0xb7bc5d649a5e2b5eL,0x3814b0485f082d72L,
18333         0x76f267f2ce19677aL },
18334       { 0x626c630fb36eed93L,0x55230cd73bf56803L,0x78837949ce2736a0L,
18335         0x0d792d60aa6c55f1L } },
18336     /* 12 << 161 */
18337     { { 0x0318dbfdd5c7c5d2L,0xb38f8da7072b342dL,0x3569bddc7b8de38aL,
18338         0xf25b5887a1c94842L },
18339       { 0xb2d5b2842946ad60L,0x854f29ade9d1707eL,0xaa5159dc2c6a4509L,
18340         0x899f94c057189837L } },
18341     /* 13 << 161 */
18342     { { 0xcf6adc51f4a55b03L,0x261762de35e3b2d5L,0x4cc4301204827b51L,
18343         0xcd22a113c6021442L },
18344       { 0xce2fd61a247c9569L,0x59a50973d152becaL,0x6c835a1163a716d4L,
18345         0xc26455ed187dedcfL } },
18346     /* 14 << 161 */
18347     { { 0x27f536e049ce89e7L,0x18908539cc890cb5L,0x308909abd83c2aa1L,
18348         0xecd3142b1ab73bd3L },
18349       { 0x6a85bf59b3f5ab84L,0x3c320a68f2bea4c6L,0xad8dc5386da4541fL,
18350         0xeaf34eb0b7c41186L } },
18351     /* 15 << 161 */
18352     { { 0x1c780129977c97c4L,0x5ff9beebc57eb9faL,0xa24d0524c822c478L,
18353         0xfd8eec2a461cd415L },
18354       { 0xfbde194ef027458cL,0xb4ff53191d1be115L,0x63f874d94866d6f4L,
18355         0x35c75015b21ad0c9L } },
18356     /* 16 << 161 */
18357     { { 0xa6b5c9d646ac49d2L,0x42c77c0b83137aa9L,0x24d000fc68225a38L,
18358         0x0f63cfc82fe1e907L },
18359       { 0x22d1b01bc6441f95L,0x7d38f719ec8e448fL,0x9b33fa5f787fb1baL,
18360         0x94dcfda1190158dfL } },
18361     /* 17 << 161 */
18362     { { 0xc47cb3395f6d4a09L,0x6b4f355cee52b826L,0x3d100f5df51b930aL,
18363         0xf4512fac9f668f69L },
18364       { 0x546781d5206c4c74L,0xd021d4d4cb4d2e48L,0x494a54c2ca085c2dL,
18365         0xf1dbaca4520850a8L } },
18366     /* 18 << 161 */
18367     { { 0x63c79326490a1acaL,0xcb64dd9c41526b02L,0xbb772591a2979258L,
18368         0x3f58297048d97846L },
18369       { 0xd66b70d17c213ba7L,0xc28febb5e8a0ced4L,0x6b911831c10338c1L,
18370         0x0d54e389bf0126f3L } },
18371     /* 19 << 161 */
18372     { { 0x7048d4604af206eeL,0x786c88f677e97cb9L,0xd4375ae1ac64802eL,
18373         0x469bcfe1d53ec11cL },
18374       { 0xfc9b340d47062230L,0xe743bb57c5b4a3acL,0xfe00b4aa59ef45acL,
18375         0x29a4ef2359edf188L } },
18376     /* 20 << 161 */
18377     { { 0x40242efeb483689bL,0x2575d3f6513ac262L,0xf30037c80ca6db72L,
18378         0xc9fcce8298864be2L },
18379       { 0x84a112ff0149362dL,0x95e575821c4ae971L,0x1fa4b1a8945cf86cL,
18380         0x4525a7340b024a2fL } },
18381     /* 21 << 161 */
18382     { { 0xe76c8b628f338360L,0x483ff59328edf32bL,0x67e8e90a298b1aecL,
18383         0x9caab338736d9a21L },
18384       { 0x5c09d2fd66892709L,0x2496b4dcb55a1d41L,0x93f5fb1ae24a4394L,
18385         0x08c750496fa8f6c1L } },
18386     /* 22 << 161 */
18387     { { 0xcaead1c2c905d85fL,0xe9d7f7900733ae57L,0x24c9a65cf07cdd94L,
18388         0x7389359ca4b55931L },
18389       { 0xf58709b7367e45f7L,0x1f203067cb7e7adcL,0x82444bffc7b72818L,
18390         0x07303b35baac8033L } },
18391     /* 23 << 161 */
18392     { { 0x1e1ee4e4d13b7ea1L,0xe6489b24e0e74180L,0xa5f2c6107e70ef70L,
18393         0xa1655412bdd10894L },
18394       { 0x555ebefb7af4194eL,0x533c1c3c8e89bd9cL,0x735b9b5789895856L,
18395         0x15fb3cd2567f5c15L } },
18396     /* 24 << 161 */
18397     { { 0x057fed45526f09fdL,0xe8a4f10c8128240aL,0x9332efc4ff2bfd8dL,
18398         0x214e77a0bd35aa31L },
18399       { 0x32896d7314faa40eL,0x767867ec01e5f186L,0xc9adf8f117a1813eL,
18400         0xcb6cda7854741795L } },
18401     /* 25 << 161 */
18402     { { 0xb7521b6d349d51aaL,0xf56b5a9ee3c7b8e9L,0xc6f1e5c932a096dfL,
18403         0x083667c4a3635024L },
18404       { 0x365ea13518087f2fL,0xf1b8eaacd136e45dL,0xc8a0e48473aec989L,
18405         0xd75a324b142c9259L } },
18406     /* 26 << 161 */
18407     { { 0xb7b4d00101dae185L,0x45434e0b9b7a94bcL,0xf54339affbd8cb0bL,
18408         0xdcc4569ee98ef49eL },
18409       { 0x7789318a09a51299L,0x81b4d206b2b025d8L,0xf64aa418fae85792L,
18410         0x3e50258facd7baf7L } },
18411     /* 27 << 161 */
18412     { { 0xdce84cdb2996864bL,0xa2e670891f485fa4L,0xb28b2bb6534c6a5aL,
18413         0x31a7ec6bc94b9d39L },
18414       { 0x1d217766d6bc20daL,0x4acdb5ec86761190L,0x6872632873701063L,
18415         0x4d24ee7c2128c29bL } },
18416     /* 28 << 161 */
18417     { { 0xc072ebd3a19fd868L,0x612e481cdb8ddd3bL,0xb4e1d7541a64d852L,
18418         0x00ef95acc4c6c4abL },
18419       { 0x1536d2edaa0a6c46L,0x6129408643774790L,0x54af25e8343fda10L,
18420         0x9ff9d98dfd25d6f2L } },
18421     /* 29 << 161 */
18422     { { 0x0746af7c468b8835L,0x977a31cb730ecea7L,0xa5096b80c2cf4a81L,
18423         0xaa9868336458c37aL },
18424       { 0x6af29bf3a6bd9d34L,0x6a62fe9b33c5d854L,0x50e6c304b7133b5eL,
18425         0x04b601597d6e6848L } },
18426     /* 30 << 161 */
18427     { { 0x4cd296df5579bea4L,0x10e35ac85ceedaf1L,0x04c4c5fde3bcc5b1L,
18428         0x95f9ee8a89412cf9L },
18429       { 0x2c9459ee82b6eb0fL,0x2e84576595c2aaddL,0x774a84aed327fcfeL,
18430         0xd8c937220368d476L } },
18431     /* 31 << 161 */
18432     { { 0x0dbd5748f83e8a3bL,0xa579aa968d2495f3L,0x535996a0ae496e9bL,
18433         0x07afbfe9b7f9bcc2L },
18434       { 0x3ac1dc6d5b7bd293L,0x3b592cff7022323dL,0xba0deb989c0a3e76L,
18435         0x18e78e9f4b197acbL } },
18436     /* 32 << 161 */
18437     { { 0x211cde10296c36efL,0x7ee8967282c4da77L,0xb617d270a57836daL,
18438         0xf0cd9c319cb7560bL },
18439       { 0x01fdcbf7e455fe90L,0x3fb53cbb7e7334f3L,0x781e2ea44e7de4ecL,
18440         0x8adab3ad0b384fd0L } },
18441     /* 33 << 161 */
18442     { { 0x129eee2f53d64829L,0x7a471e17a261492bL,0xe4f9adb9e4cb4a2cL,
18443         0x3d359f6f97ba2c2dL },
18444       { 0x346c67860aacd697L,0x92b444c375c2f8a8L,0xc79fa117d85df44eL,
18445         0x56782372398ddf31L } },
18446     /* 34 << 161 */
18447     { { 0x60e690f2bbbab3b8L,0x4851f8ae8b04816bL,0xc72046ab9c92e4d2L,
18448         0x518c74a17cf3136bL },
18449       { 0xff4eb50af9877d4cL,0x14578d90a919cabbL,0x8218f8c4ac5eb2b6L,
18450         0xa3ccc547542016e4L } },
18451     /* 35 << 161 */
18452     { { 0x025bf48e327f8349L,0xf3e97346f43cb641L,0xdc2bafdf500f1085L,
18453         0x571678762f063055L },
18454       { 0x5bd914b9411925a6L,0x7c078d48a1123de5L,0xee6bf835182b165dL,
18455         0xb11b5e5bba519727L } },
18456     /* 36 << 161 */
18457     { { 0xe33ea76c1eea7b85L,0x2352b46192d4f85eL,0xf101d334afe115bbL,
18458         0xfabc1294889175a3L },
18459       { 0x7f6bcdc05233f925L,0xe0a802dbe77fec55L,0xbdb47b758069b659L,
18460         0x1c5e12def98fbd74L } },
18461     /* 37 << 161 */
18462     { { 0x869c58c64b8457eeL,0xa5360f694f7ea9f7L,0xe576c09ff460b38fL,
18463         0x6b70d54822b7fb36L },
18464       { 0x3fd237f13bfae315L,0x33797852cbdff369L,0x97df25f525b516f9L,
18465         0x46f388f2ba38ad2dL } },
18466     /* 38 << 161 */
18467     { { 0x656c465889d8ddbbL,0x8830b26e70f38ee8L,0x4320fd5cde1212b0L,
18468         0xc34f30cfe4a2edb2L },
18469       { 0xabb131a356ab64b8L,0x7f77f0ccd99c5d26L,0x66856a37bf981d94L,
18470         0x19e76d09738bd76eL } },
18471     /* 39 << 161 */
18472     { { 0xe76c8ac396238f39L,0xc0a482bea830b366L,0xb7b8eaff0b4eb499L,
18473         0x8ecd83bc4bfb4865L },
18474       { 0x971b2cb7a2f3776fL,0xb42176a4f4b88adfL,0xb9617df5be1fa446L,
18475         0x8b32d508cd031bd2L } },
18476     /* 40 << 161 */
18477     { { 0x1c6bd47d53b618c0L,0xc424f46c6a227923L,0x7303ffdedd92d964L,
18478         0xe971287871b5abf2L },
18479       { 0x8f48a632f815561dL,0x85f48ff5d3c055d1L,0x222a14277525684fL,
18480         0xd0d841a067360cc3L } },
18481     /* 41 << 161 */
18482     { { 0x4245a9260b9267c6L,0xc78913f1cf07f863L,0xaa844c8e4d0d9e24L,
18483         0xa42ad5223d5f9017L },
18484       { 0xbd371749a2c989d5L,0x928292dfe1f5e78eL,0x493b383e0a1ea6daL,
18485         0x5136fd8d13aee529L } },
18486     /* 42 << 161 */
18487     { { 0x860c44b1f2c34a99L,0x3b00aca4bf5855acL,0xabf6aaa0faaf37beL,
18488         0x65f436822a53ec08L },
18489       { 0x1d9a5801a11b12e1L,0x78a7ab2ce20ed475L,0x0de1067e9a41e0d5L,
18490         0x30473f5f305023eaL } },
18491     /* 43 << 161 */
18492     { { 0xdd3ae09d169c7d97L,0x5cd5baa4cfaef9cdL,0x5cd7440b65a44803L,
18493         0xdc13966a47f364deL },
18494       { 0x077b2be82b8357c1L,0x0cb1b4c5e9d57c2aL,0x7a4ceb3205ff363eL,
18495         0xf310fa4dca35a9efL } },
18496     /* 44 << 161 */
18497     { { 0xdbb7b352f97f68c6L,0x0c773b500b02cf58L,0xea2e48213c1f96d9L,
18498         0xffb357b0eee01815L },
18499       { 0xb9c924cde0f28039L,0x0b36c95a46a3fbe4L,0x1faaaea45e46db6cL,
18500         0xcae575c31928aaffL } },
18501     /* 45 << 161 */
18502     { { 0x7f671302a70dab86L,0xfcbd12a971c58cfcL,0xcbef9acfbee0cb92L,
18503         0x573da0b9f8c1b583L },
18504       { 0x4752fcfe0d41d550L,0xe7eec0e32155cffeL,0x0fc39fcb545ae248L,
18505         0x522cb8d18065f44eL } },
18506     /* 46 << 161 */
18507     { { 0x263c962a70cbb96cL,0xe034362abcd124a9L,0xf120db283c2ae58dL,
18508         0xb9a38d49fef6d507L },
18509       { 0xb1fd2a821ff140fdL,0xbd162f3020aee7e0L,0x4e17a5d4cb251949L,
18510         0x2aebcb834f7e1c3dL } },
18511     /* 47 << 161 */
18512     { { 0x608eb25f937b0527L,0xf42e1e47eb7d9997L,0xeba699c4b8a53a29L,
18513         0x1f921c71e091b536L },
18514       { 0xcce29e7b5b26bbd5L,0x7a8ef5ed3b61a680L,0xe5ef8043ba1f1c7eL,
18515         0x16ea821718158ddaL } },
18516     /* 48 << 161 */
18517     { { 0x01778a2b599ff0f9L,0x68a923d78104fc6bL,0x5bfa44dfda694ff3L,
18518         0x4f7199dbf7667f12L },
18519       { 0xc06d8ff6e46f2a79L,0x08b5deade9f8131dL,0x02519a59abb4ce7cL,
18520         0xc4f710bcb42aec3eL } },
18521     /* 49 << 161 */
18522     { { 0x3d77b05778bde41aL,0x6474bf80b4186b5aL,0x048b3f6788c65741L,
18523         0xc64519de03c7c154L },
18524       { 0xdf0738460edfcc4fL,0x319aa73748f1aa6bL,0x8b9f8a02ca909f77L,
18525         0x902581397580bfefL } },
18526     /* 50 << 161 */
18527     { { 0xd8bfd3cac0c22719L,0xc60209e4c9ca151eL,0x7a744ab5d9a1a69cL,
18528         0x6de5048b14937f8fL },
18529       { 0x171938d8e115ac04L,0x7df709401c6b16d2L,0xa6aeb6637f8e94e7L,
18530         0xc130388e2a2cf094L } },
18531     /* 51 << 161 */
18532     { { 0x1850be8477f54e6eL,0x9f258a7265d60fe5L,0xff7ff0c06c9146d6L,
18533         0x039aaf90e63a830bL },
18534       { 0x38f27a739460342fL,0x4703148c3f795f8aL,0x1bb5467b9681a97eL,
18535         0x00931ba5ecaeb594L } },
18536     /* 52 << 161 */
18537     { { 0xcdb6719d786f337cL,0xd9c01cd2e704397dL,0x0f4a3f20555c2fefL,
18538         0x004525097c0af223L },
18539       { 0x54a5804784db8e76L,0x3bacf1aa93c8aa06L,0x11ca957cf7919422L,
18540         0x5064105378cdaa40L } },
18541     /* 53 << 161 */
18542     { { 0x7a3038749f7144aeL,0x170c963f43d4acfdL,0x5e14814958ddd3efL,
18543         0xa7bde5829e72dba8L },
18544       { 0x0769da8b6fa68750L,0xfa64e532572e0249L,0xfcaadf9d2619ad31L,
18545         0x87882daaa7b349cdL } },
18546     /* 54 << 161 */
18547     { { 0x9f6eb7316c67a775L,0xcb10471aefc5d0b1L,0xb433750ce1b806b2L,
18548         0x19c5714d57b1ae7eL },
18549       { 0xc0dc8b7bed03fd3fL,0xdd03344f31bc194eL,0xa66c52a78c6320b5L,
18550         0x8bc82ce3d0b6fd93L } },
18551     /* 55 << 161 */
18552     { { 0xf8e13501b35f1341L,0xe53156dd25a43e42L,0xd3adf27e4daeb85cL,
18553         0xb81d8379bbeddeb5L },
18554       { 0x1b0b546e2e435867L,0x9020eb94eba5dd60L,0x37d911618210cb9dL,
18555         0x4c596b315c91f1cfL } },
18556     /* 56 << 161 */
18557     { { 0xb228a90f0e0b040dL,0xbaf02d8245ff897fL,0x2aac79e600fa6122L,
18558         0x248288178e36f557L },
18559       { 0xb9521d31113ec356L,0x9e48861e15eff1f8L,0x2aa1d412e0d41715L,
18560         0x71f8620353f131b8L } },
18561     /* 57 << 161 */
18562     { { 0xf60da8da3fd19408L,0x4aa716dc278d9d99L,0x394531f7a8c51c90L,
18563         0xb560b0e8f59db51cL },
18564       { 0xa28fc992fa34bdadL,0xf024fa149cd4f8bdL,0x5cf530f723a9d0d3L,
18565         0x615ca193e28c9b56L } },
18566     /* 58 << 161 */
18567     { { 0x6d2a483d6f73c51eL,0xa4cb2412ea0dc2ddL,0x50663c411eb917ffL,
18568         0x3d3a74cfeade299eL },
18569       { 0x29b3990f4a7a9202L,0xa9bccf59a7b15c3dL,0x66a3ccdca5df9208L,
18570         0x48027c1443f2f929L } },
18571     /* 59 << 161 */
18572     { { 0xd385377c40b557f0L,0xe001c366cd684660L,0x1b18ed6be2183a27L,
18573         0x879738d863210329L },
18574       { 0xa687c74bbda94882L,0xd1bbcc48a684b299L,0xaf6f1112863b3724L,
18575         0x6943d1b42c8ce9f8L } },
18576     /* 60 << 161 */
18577     { { 0xe044a3bb098cafb4L,0x27ed231060d48cafL,0x542b56753a31b84dL,
18578         0xcbf3dd50fcddbed7L },
18579       { 0x25031f1641b1d830L,0xa7ec851dcb0c1e27L,0xac1c8fe0b5ae75dbL,
18580         0xb24c755708c52120L } },
18581     /* 61 << 161 */
18582     { { 0x57f811dc1d4636c3L,0xf8436526681a9939L,0x1f6bc6d99c81adb3L,
18583         0x840f8ac35b7d80d4L },
18584       { 0x731a9811f4387f1aL,0x7c501cd3b5156880L,0xa5ca4a07dfe68867L,
18585         0xf123d8f05fcea120L } },
18586     /* 62 << 161 */
18587     { { 0x1fbb0e71d607039eL,0x2b70e215cd3a4546L,0x32d2f01d53324091L,
18588         0xb796ff08180ab19bL },
18589       { 0x32d87a863c57c4aaL,0x2aed9cafb7c49a27L,0x9fb35eac31630d98L,
18590         0x338e8cdf5c3e20a3L } },
18591     /* 63 << 161 */
18592     { { 0x80f1618266cde8dbL,0x4e1599802d72fd36L,0xd7b8f13b9b6e5072L,
18593         0xf52139073b7b5dc1L },
18594       { 0x4d431f1d8ce4396eL,0x37a1a680a7ed2142L,0xbf375696d01aaf6bL,
18595         0xaa1c0c54e63aab66L } },
18596     /* 64 << 161 */
18597     { { 0x3014368b4ed80940L,0x67e6d0567a6fceddL,0x7c208c49ca97579fL,
18598         0xfe3d7a81a23597f6L },
18599       { 0x5e2032027e096ae2L,0xb1f3e1e724b39366L,0x26da26f32fdcdffcL,
18600         0x79422f1d6097be83L } },
18601     /* 0 << 168 */
18602     { { 0x00, 0x00, 0x00, 0x00 },
18603       { 0x00, 0x00, 0x00, 0x00 } },
18604     /* 1 << 168 */
18605     { { 0x263a2cfb9db3b381L,0x9c3a2deed4df0a4bL,0x728d06e97d04e61fL,
18606         0x8b1adfbc42449325L },
18607       { 0x6ec1d9397e053a1bL,0xee2be5c766daf707L,0x80ba1e14810ac7abL,
18608         0xdd2ae778f530f174L } },
18609     /* 2 << 168 */
18610     { { 0x0435d97a205b9d8bL,0x6eb8f064056756d4L,0xd5e88a8bb6f8210eL,
18611         0x070ef12dec9fd9eaL },
18612       { 0x4d8495053bcc876aL,0x12a75338a7404ce3L,0xd22b49e1b8a1db5eL,
18613         0xec1f205114bfa5adL } },
18614     /* 3 << 168 */
18615     { { 0xadbaeb79b6828f36L,0x9d7a025801bd5b9eL,0xeda01e0d1e844b0cL,
18616         0x4b625175887edfc9L },
18617       { 0x14109fdd9669b621L,0x88a2ca56f6f87b98L,0xfe2eb788170df6bcL,
18618         0x0cea06f4ffa473f9L } },
18619     /* 4 << 168 */
18620     { { 0x43ed81b5c4e83d33L,0xd9f358795efd488bL,0x164a620f9deb4d0fL,
18621         0xc6927bdbac6a7394L },
18622       { 0x45c28df79f9e0f03L,0x2868661efcd7e1a9L,0x7cf4e8d0ffa348f1L,
18623         0x6bd4c284398538e0L } },
18624     /* 5 << 168 */
18625     { { 0x2618a091289a8619L,0xef796e606671b173L,0x664e46e59090c632L,
18626         0xa38062d41e66f8fbL },
18627       { 0x6c744a200573274eL,0xd07b67e4a9271394L,0x391223b26bdc0e20L,
18628         0xbe2d93f1eb0a05a7L } },
18629     /* 6 << 168 */
18630     { { 0xf23e2e533f36d141L,0xe84bb3d44dfca442L,0xb804a48d6b7c023aL,
18631         0x1e16a8fa76431c3bL },
18632       { 0x1b5452adddd472e0L,0x7d405ee70d1ee127L,0x50fc6f1dffa27599L,
18633         0x351ac53cbf391b35L } },
18634     /* 7 << 168 */
18635     { { 0x7efa14b84444896bL,0x64974d2ff94027fbL,0xefdcd0e8de84487dL,
18636         0x8c45b2602b48989bL },
18637       { 0xa8fcbbc2d8463487L,0xd1b2b3f73fbc476cL,0x21d005b7c8f443c0L,
18638         0x518f2e6740c0139cL } },
18639     /* 8 << 168 */
18640     { { 0x56036e8c06d75fc1L,0x2dcf7bb73249a89fL,0x81dd1d3de245e7ddL,
18641         0xf578dc4bebd6e2a7L },
18642       { 0x4c028903df2ce7a0L,0xaee362889c39afacL,0xdc847c31146404abL,
18643         0x6304c0d8a4e97818L } },
18644     /* 9 << 168 */
18645     { { 0xae51dca2a91f6791L,0x2abe41909baa9efcL,0xd9d2e2f4559c7ac1L,
18646         0xe82f4b51fc9f773aL },
18647       { 0xa77130274073e81cL,0xc0276facfbb596fcL,0x1d819fc9a684f70cL,
18648         0x29b47fddc9f7b1e0L } },
18649     /* 10 << 168 */
18650     { { 0x358de103459b1940L,0xec881c595b013e93L,0x51574c9349532ad3L,
18651         0x2db1d445b37b46deL },
18652       { 0xc6445b87df239fd8L,0xc718af75151d24eeL,0xaea1c4a4f43c6259L,
18653         0x40c0e5d770be02f7L } },
18654     /* 11 << 168 */
18655     { { 0x6a4590f4721b33f2L,0x2124f1fbfedf04eaL,0xf8e53cde9745efe7L,
18656         0xe7e1043265f046d9L },
18657       { 0xc3fca28ee4d0c7e6L,0x847e339a87253b1bL,0x9b5953483743e643L,
18658         0xcb6a0a0b4fd12fc5L } },
18659     /* 12 << 168 */
18660     { { 0xfb6836c327d02dccL,0x5ad009827a68bcc2L,0x1b24b44c005e912dL,
18661         0xcc83d20f811fdcfeL },
18662       { 0x36527ec1666fba0cL,0x6994819714754635L,0xfcdcb1a8556da9c2L,
18663         0xa593426781a732b2L } },
18664     /* 13 << 168 */
18665     { { 0xec1214eda714181dL,0x609ac13b6067b341L,0xff4b4c97a545df1fL,
18666         0xa124050134d2076bL },
18667       { 0x6efa0c231409ca97L,0x254cc1a820638c43L,0xd4e363afdcfb46cdL,
18668         0x62c2adc303942a27L } },
18669     /* 14 << 168 */
18670     { { 0xc67b9df056e46483L,0xa55abb2063736356L,0xab93c098c551bc52L,
18671         0x382b49f9b15fe64bL },
18672       { 0x9ec221ad4dff8d47L,0x79caf615437df4d6L,0x5f13dc64bb456509L,
18673         0xe4c589d9191f0714L } },
18674     /* 15 << 168 */
18675     { { 0x27b6a8ab3fd40e09L,0xe455842e77313ea9L,0x8b51d1e21f55988bL,
18676         0x5716dd73062bbbfcL },
18677       { 0x633c11e54e8bf3deL,0x9a0e77b61b85be3bL,0x565107290911cca6L,
18678         0x27e76495efa6590fL } },
18679     /* 16 << 168 */
18680     { { 0xe4ac8b33070d3aabL,0x2643672b9a2cd5e5L,0x52eff79b1cfc9173L,
18681         0x665ca49b90a7c13fL },
18682       { 0x5a8dda59b3efb998L,0x8a5b922d052f1341L,0xae9ebbab3cf9a530L,
18683         0x35986e7bf56da4d7L } },
18684     /* 17 << 168 */
18685     { { 0x3a636b5cff3513ccL,0xbb0cf8ba3198f7ddL,0xb8d4052241f16f86L,
18686         0x760575d8de13a7bfL },
18687       { 0x36f74e169f7aa181L,0x163a3ecff509ed1cL,0x6aead61f3c40a491L,
18688         0x158c95fcdfe8fcaaL } },
18689     /* 18 << 168 */
18690     { { 0xa3991b6e13cda46fL,0x79482415342faed0L,0xf3ba5bde666b5970L,
18691         0x1d52e6bcb26ab6ddL },
18692       { 0x768ba1e78608dd3dL,0x4930db2aea076586L,0xd9575714e7dc1afaL,
18693         0x1fc7bf7df7c58817L } },
18694     /* 19 << 168 */
18695     { { 0x6b47accdd9eee96cL,0x0ca277fbe58cec37L,0x113fe413e702c42aL,
18696         0xdd1764eec47cbe51L },
18697       { 0x041e7cde7b3ed739L,0x50cb74595ce9e1c0L,0x355685132925b212L,
18698         0x7cff95c4001b081cL } },
18699     /* 20 << 168 */
18700     { { 0x63ee4cbd8088b454L,0xdb7f32f79a9e0c8aL,0xb377d4186b2447cbL,
18701         0xe3e982aad370219bL },
18702       { 0x06ccc1e4c2a2a593L,0x72c368650773f24fL,0xa13b4da795859423L,
18703         0x8bbf1d3375040c8fL } },
18704     /* 21 << 168 */
18705     { { 0x726f0973da50c991L,0x48afcd5b822d6ee2L,0xe5fc718b20fd7771L,
18706         0xb9e8e77dfd0807a1L },
18707       { 0x7f5e0f4499a7703dL,0x6972930e618e36f3L,0x2b7c77b823807bbeL,
18708         0xe5b82405cb27ff50L } },
18709     /* 22 << 168 */
18710     { { 0xba8b8be3bd379062L,0xd64b7a1d2dce4a92L,0x040a73c5b2952e37L,
18711         0x0a9e252ed438aecaL },
18712       { 0xdd43956bc39d3bcbL,0x1a31ca00b32b2d63L,0xd67133b85c417a18L,
18713         0xd08e47902ef442c8L } },
18714     /* 23 << 168 */
18715     { { 0x98cb1ae9255c0980L,0x4bd863812b4a739fL,0x5a5c31e11e4a45a1L,
18716         0x1e5d55fe9cb0db2fL },
18717       { 0x74661b068ff5cc29L,0x026b389f0eb8a4f4L,0x536b21a458848c24L,
18718         0x2e5bf8ec81dc72b0L } },
18719     /* 24 << 168 */
18720     { { 0x03c187d0ad886aacL,0x5c16878ab771b645L,0xb07dfc6fc74045abL,
18721         0x2c6360bf7800caedL },
18722       { 0x24295bb5b9c972a3L,0xc9e6f88e7c9a6dbaL,0x90ffbf2492a79aa6L,
18723         0xde29d50a41c26ac2L } },
18724     /* 25 << 168 */
18725     { { 0x9f0af483d309cbe6L,0x5b020d8ae0bced4fL,0x606e986db38023e3L,
18726         0xad8f2c9d1abc6933L },
18727       { 0x19292e1de7400e93L,0xfe3e18a952be5e4dL,0xe8e9771d2e0680bfL,
18728         0x8c5bec98c54db063L } },
18729     /* 26 << 168 */
18730     { { 0x2af9662a74a55d1fL,0xe3fbf28f046f66d8L,0xa3a72ab4d4dc4794L,
18731         0x09779f455c7c2dd8L },
18732       { 0xd893bdafc3d19d8dL,0xd5a7509457d6a6dfL,0x8cf8fef9952e6255L,
18733         0x3da67cfbda9a8affL } },
18734     /* 27 << 168 */
18735     { { 0x4c23f62a2c160dcdL,0x34e6c5e38f90eaefL,0x35865519a9a65d5aL,
18736         0x07c48aae8fd38a3dL },
18737       { 0xb7e7aeda50068527L,0x2c09ef231c90936aL,0x31ecfeb6e879324cL,
18738         0xa0871f6bfb0ec938L } },
18739     /* 28 << 168 */
18740     { { 0xb1f0fb68d84d835dL,0xc90caf39861dc1e6L,0x12e5b0467594f8d7L,
18741         0x26897ae265012b92L },
18742       { 0xbcf68a08a4d6755dL,0x403ee41c0991fbdaL,0x733e343e3bbf17e8L,
18743         0xd2c7980d679b3d65L } },
18744     /* 29 << 168 */
18745     { { 0x33056232d2e11305L,0x966be492f3c07a6fL,0x6a8878ffbb15509dL,
18746         0xff2211010a9b59a4L },
18747       { 0x6c9f564aabe30129L,0xc6f2c940336e64cfL,0x0fe752628b0c8022L,
18748         0xbe0267e96ae8db87L } },
18749     /* 30 << 168 */
18750     { { 0x22e192f193bc042bL,0xf085b534b237c458L,0xa0d192bd832c4168L,
18751         0x7a76e9e3bdf6271dL },
18752       { 0x52a882fab88911b5L,0xc85345e4b4db0eb5L,0xa3be02a681a7c3ffL,
18753         0x51889c8cf0ec0469L } },
18754     /* 31 << 168 */
18755     { { 0x9d031369a5e829e5L,0xcbb4c6fc1607aa41L,0x75ac59a6241d84c1L,
18756         0xc043f2bf8829e0eeL },
18757       { 0x82a38f758ea5e185L,0x8bda40b9d87cbd9fL,0x9e65e75e2d8fc601L,
18758         0x3d515f74a35690b3L } },
18759     /* 32 << 168 */
18760     { { 0x534acf4fda79e5acL,0x68b83b3a8630215fL,0x5c748b2ed085756eL,
18761         0xb0317258e5d37cb2L },
18762       { 0x6735841ac5ccc2c4L,0x7d7dc96b3d9d5069L,0xa147e410fd1754bdL,
18763         0x65296e94d399ddd5L } },
18764     /* 33 << 168 */
18765     { { 0xf6b5b2d0bc8fa5bcL,0x8a5ead67500c277bL,0x214625e6dfa08a5dL,
18766         0x51fdfedc959cf047L },
18767       { 0x6bc9430b289fca32L,0xe36ff0cf9d9bdc3fL,0x2fe187cb58ea0edeL,
18768         0xed66af205a900b3fL } },
18769     /* 34 << 168 */
18770     { { 0x00e0968b5fa9f4d6L,0x2d4066ce37a362e7L,0xa99a9748bd07e772L,
18771         0x710989c006a4f1d0L },
18772       { 0xd5dedf35ce40cbd8L,0xab55c5f01743293dL,0x766f11448aa24e2cL,
18773         0x94d874f8605fbcb4L } },
18774     /* 35 << 168 */
18775     { { 0xa365f0e8a518001bL,0xee605eb69d04ef0fL,0x5a3915cdba8d4d25L,
18776         0x44c0e1b8b5113472L },
18777       { 0xcbb024e88b6740dcL,0x89087a53ee1d4f0cL,0xa88fa05c1fc4e372L,
18778         0x8bf395cbaf8b3af2L } },
18779     /* 36 << 168 */
18780     { { 0x1e71c9a1deb8568bL,0xa35daea080fb3d32L,0xe8b6f2662cf8fb81L,
18781         0x6d51afe89490696aL },
18782       { 0x81beac6e51803a19L,0xe3d24b7f86219080L,0x727cfd9ddf6f463cL,
18783         0x8c6865ca72284ee8L } },
18784     /* 37 << 168 */
18785     { { 0x32c88b7db743f4efL,0x3793909be7d11dceL,0xd398f9222ff2ebe8L,
18786         0x2c70ca44e5e49796L },
18787       { 0xdf4d9929cb1131b1L,0x7826f29825888e79L,0x4d3a112cf1d8740aL,
18788         0x00384cb6270afa8bL } },
18789     /* 38 << 168 */
18790     { { 0xcb64125b3ab48095L,0x3451c25662d05106L,0xd73d577da4955845L,
18791         0x39570c16bf9f4433L },
18792       { 0xd7dfaad3adecf263L,0xf1c3d8d1dc76e102L,0x5e774a5854c6a836L,
18793         0xdad4b6723e92d47bL } },
18794     /* 39 << 168 */
18795     { { 0xbe7e990ff0d796a0L,0x5fc62478df0e8b02L,0x8aae8bf4030c00adL,
18796         0x3d2db93b9004ba0fL },
18797       { 0xe48c8a79d85d5ddcL,0xe907caa76bb07f34L,0x58db343aa39eaed5L,
18798         0x0ea6e007adaf5724L } },
18799     /* 40 << 168 */
18800     { { 0xe00df169d23233f3L,0x3e32279677cb637fL,0x1f897c0e1da0cf6cL,
18801         0xa651f5d831d6bbddL },
18802       { 0xdd61af191a230c76L,0xbd527272cdaa5e4aL,0xca753636d0abcd7eL,
18803         0x78bdd37c370bd8dcL } },
18804     /* 41 << 168 */
18805     { { 0xc23916c217cd93feL,0x65b97a4ddadce6e2L,0xe04ed4eb174e42f8L,
18806         0x1491ccaabb21480aL },
18807       { 0x145a828023196332L,0x3c3862d7587b479aL,0x9f4a88a301dcd0edL,
18808         0x4da2b7ef3ea12f1fL } },
18809     /* 42 << 168 */
18810     { { 0xf8e7ae33b126e48eL,0x404a0b32f494e237L,0x9beac474c55acadbL,
18811         0x4ee5cf3bcbec9fd9L },
18812       { 0x336b33b97df3c8c3L,0xbd905fe3b76808fdL,0x8f436981aa45c16aL,
18813         0x255c5bfa3dd27b62L } },
18814     /* 43 << 168 */
18815     { { 0x71965cbfc3dd9b4dL,0xce23edbffc068a87L,0xb78d4725745b029bL,
18816         0x74610713cefdd9bdL },
18817       { 0x7116f75f1266bf52L,0x0204672218e49bb6L,0xdf43df9f3d6f19e3L,
18818         0xef1bc7d0e685cb2fL } },
18819     /* 44 << 168 */
18820     { { 0xcddb27c17078c432L,0xe1961b9cb77fedb7L,0x1edc2f5cc2290570L,
18821         0x2c3fefca19cbd886L },
18822       { 0xcf880a36c2af389aL,0x96c610fdbda71ceaL,0xf03977a932aa8463L,
18823         0x8eb7763f8586d90aL } },
18824     /* 45 << 168 */
18825     { { 0x3f3424542a296e77L,0xc871868342837a35L,0x7dc710906a09c731L,
18826         0x54778ffb51b816dbL },
18827       { 0x6b33bfecaf06defdL,0xfe3c105f8592b70bL,0xf937fda461da6114L,
18828         0x3c13e6514c266ad7L } },
18829     /* 46 << 168 */
18830     { { 0xe363a829855938e8L,0x2eeb5d9e9de54b72L,0xbeb93b0e20ccfab9L,
18831         0x3dffbb5f25e61a25L },
18832       { 0x7f655e431acc093dL,0x0cb6cc3d3964ce61L,0x6ab283a1e5e9b460L,
18833         0x55d787c5a1c7e72dL } },
18834     /* 47 << 168 */
18835     { { 0x4d2efd47deadbf02L,0x11e80219ac459068L,0x810c762671f311f0L,
18836         0xfa17ef8d4ab6ef53L },
18837       { 0xaf47fd2593e43bffL,0x5cb5ff3f0be40632L,0x546871068ee61da3L,
18838         0x7764196eb08afd0fL } },
18839     /* 48 << 168 */
18840     { { 0x831ab3edf0290a8fL,0xcae81966cb47c387L,0xaad7dece184efb4fL,
18841         0xdcfc53b34749110eL },
18842       { 0x6698f23c4cb632f9L,0xc42a1ad6b91f8067L,0xb116a81d6284180aL,
18843         0xebedf5f8e901326fL } },
18844     /* 49 << 168 */
18845     { { 0xf2274c9f97e3e044L,0x4201852011d09fc9L,0x56a65f17d18e6e23L,
18846         0x2ea61e2a352b683cL },
18847       { 0x27d291bc575eaa94L,0x9e7bc721b8ff522dL,0x5f7268bfa7f04d6fL,
18848         0x5868c73faba41748L } },
18849     /* 50 << 168 */
18850     { { 0x9f85c2db7be0eeadL,0x511e7842ff719135L,0x5a06b1e9c5ea90d7L,
18851         0x0c19e28326fab631L },
18852       { 0x8af8f0cfe9206c55L,0x89389cb43553c06aL,0x39dbed97f65f8004L,
18853         0x0621b037c508991dL } },
18854     /* 51 << 168 */
18855     { { 0x1c52e63596e78cc4L,0x5385c8b20c06b4a8L,0xd84ddfdbb0e87d03L,
18856         0xc49dfb66934bafadL },
18857       { 0x7071e17059f70772L,0x3a073a843a1db56bL,0x034949033b8af190L,
18858         0x7d882de3d32920f0L } },
18859     /* 52 << 168 */
18860     { { 0x91633f0ab2cf8940L,0x72b0b1786f948f51L,0x2d28dc30782653c8L,
18861         0x88829849db903a05L },
18862       { 0xb8095d0c6a19d2bbL,0x4b9e7f0c86f782cbL,0x7af739882d907064L,
18863         0xd12be0fe8b32643cL } },
18864     /* 53 << 168 */
18865     { { 0x358ed23d0e165dc3L,0x3d47ce624e2378ceL,0x7e2bb0b9feb8a087L,
18866         0x3246e8aee29e10b9L },
18867       { 0x459f4ec703ce2b4dL,0xe9b4ca1bbbc077cfL,0x2613b4f20e9940c1L,
18868         0xfc598bb9047d1eb1L } },
18869     /* 54 << 168 */
18870     { { 0x9744c62b45036099L,0xa9dee742167c65d8L,0x0c511525dabe1943L,
18871         0xda11055493c6c624L },
18872       { 0xae00a52c651a3be2L,0xcda5111d884449a6L,0x063c06f4ff33bed1L,
18873         0x73baaf9a0d3d76b4L } },
18874     /* 55 << 168 */
18875     { { 0x52fb0c9d7fc63668L,0x6886c9dd0c039cdeL,0x602bd59955b22351L,
18876         0xb00cab02360c7c13L },
18877       { 0x8cb616bc81b69442L,0x41486700b55c3ceeL,0x71093281f49ba278L,
18878         0xad956d9c64a50710L } },
18879     /* 56 << 168 */
18880     { { 0x9561f28b638a7e81L,0x54155cdf5980ddc3L,0xb2db4a96d26f247aL,
18881         0x9d774e4e4787d100L },
18882       { 0x1a9e6e2e078637d2L,0x1c363e2d5e0ae06aL,0x7493483ee9cfa354L,
18883         0x76843cb37f74b98dL } },
18884     /* 57 << 168 */
18885     { { 0xbaca6591d4b66947L,0xb452ce9804460a8cL,0x6830d24643768f55L,
18886         0xf4197ed87dff12dfL },
18887       { 0x6521b472400dd0f7L,0x59f5ca8f4b1e7093L,0x6feff11b080338aeL,
18888         0x0ada31f6a29ca3c6L } },
18889     /* 58 << 168 */
18890     { { 0x24794eb694a2c215L,0xd83a43ab05a57ab4L,0x264a543a2a6f89feL,
18891         0x2c2a3868dd5ec7c2L },
18892       { 0xd33739408439d9b2L,0x715ea6720acd1f11L,0x42c1d235e7e6cc19L,
18893         0x81ce6e96b990585cL } },
18894     /* 59 << 168 */
18895     { { 0x04e5dfe0d809c7bdL,0xd7b2580c8f1050abL,0x6d91ad78d8a4176fL,
18896         0x0af556ee4e2e897cL },
18897       { 0x162a8b73921de0acL,0x52ac9c227ea78400L,0xee2a4eeaefce2174L,
18898         0xbe61844e6d637f79L } },
18899     /* 60 << 168 */
18900     { { 0x0491f1bc789a283bL,0x72d3ac3d880836f4L,0xaa1c5ea388e5402dL,
18901         0x1b192421d5cc473dL },
18902       { 0x5c0b99989dc84cacL,0xb0a8482d9c6e75b8L,0x639961d03a191ce2L,
18903         0xda3bc8656d837930L } },
18904     /* 61 << 168 */
18905     { { 0xca990653056e6f8fL,0x84861c4164d133a7L,0x8b403276746abe40L,
18906         0xb7b4d51aebf8e303L },
18907       { 0x05b43211220a255dL,0xc997152c02419e6eL,0x76ff47b6630c2feaL,
18908         0x50518677281fdadeL } },
18909     /* 62 << 168 */
18910     { { 0x3283b8bacf902b0bL,0x8d4b4eb537db303bL,0xcc89f42d755011bcL,
18911         0xb43d74bbdd09d19bL },
18912       { 0x65746bc98adba350L,0x364eaf8cb51c1927L,0x13c7659610ad72ecL,
18913         0x30045121f8d40c20L } },
18914     /* 63 << 168 */
18915     { { 0x6d2d99b7ea7b979bL,0xcd78cd74e6fb3bcdL,0x11e45a9e86cffbfeL,
18916         0x78a61cf4637024f6L },
18917       { 0xd06bc8723d502295L,0xf1376854458cb288L,0xb9db26a1342f8586L,
18918         0xf33effcf4beee09eL } },
18919     /* 64 << 168 */
18920     { { 0xd7e0c4cdb30cfb3aL,0x6d09b8c16c9db4c8L,0x40ba1a4207c8d9dfL,
18921         0x6fd495f71c52c66dL },
18922       { 0xfb0e169f275264daL,0x80c2b746e57d8362L,0xedd987f749ad7222L,
18923         0xfdc229af4398ec7bL } },
18924     /* 0 << 175 */
18925     { { 0x00, 0x00, 0x00, 0x00 },
18926       { 0x00, 0x00, 0x00, 0x00 } },
18927     /* 1 << 175 */
18928     { { 0xb0d1ed8452666a58L,0x4bcb6e00e6a9c3c2L,0x3c57411c26906408L,
18929         0xcfc2075513556400L },
18930       { 0xa08b1c505294dba3L,0xa30ba2868b7dd31eL,0xd70ba90e991eca74L,
18931         0x094e142ce762c2b9L } },
18932     /* 2 << 175 */
18933     { { 0xb81d783e979f3925L,0x1efd130aaf4c89a7L,0x525c2144fd1bf7faL,
18934         0x4b2969041b265a9eL },
18935       { 0xed8e9634b9db65b6L,0x35c82e3203599d8aL,0xdaa7a54f403563f3L,
18936         0x9df088ad022c38abL } },
18937     /* 3 << 175 */
18938     { { 0xe5cfb066bb3fd30aL,0x429169daeff0354eL,0x809cf8523524e36cL,
18939         0x136f4fb30155be1dL },
18940       { 0x4826af011fbba712L,0x6ef0f0b4506ba1a1L,0xd9928b3177aea73eL,
18941         0xe2bf6af25eaa244eL } },
18942     /* 4 << 175 */
18943     { { 0x8d084f124237b64bL,0x688ebe99e3ecfd07L,0x57b8a70cf6845dd8L,
18944         0x808fc59c5da4a325L },
18945       { 0xa9032b2ba3585862L,0xb66825d5edf29386L,0xb5a5a8db431ec29bL,
18946         0xbb143a983a1e8dc8L } },
18947     /* 5 << 175 */
18948     { { 0x35ee94ce12ae381bL,0x3a7f176c86ccda90L,0xc63a657e4606eacaL,
18949         0x9ae5a38043cd04dfL },
18950       { 0x9bec8d15ed251b46L,0x1f5d6d30caca5e64L,0x347b3b359ff20f07L,
18951         0x4d65f034f7e4b286L } },
18952     /* 6 << 175 */
18953     { { 0x9e93ba24f111661eL,0xedced484b105eb04L,0x96dc9ba1f424b578L,
18954         0xbf8f66b7e83e9069L },
18955       { 0x872d4df4d7ed8216L,0xbf07f3778e2cbecfL,0x4281d89998e73754L,
18956         0xfec85fbb8aab8708L } },
18957     /* 7 << 175 */
18958     { { 0x9a3c0deea5ba5b0bL,0xe6a116ce42d05299L,0xae9775fee9b02d42L,
18959         0x72b05200a1545cb6L },
18960       { 0xbc506f7d31a3b4eaL,0xe58930788bbd9b32L,0xc8bc5f37e4b12a97L,
18961         0x6b000c064a73b671L } },
18962     /* 8 << 175 */
18963     { { 0x13b5bf22765fa7d0L,0x59805bf01d6a5370L,0x67a5e29d4280db98L,
18964         0x4f53916f776b1ce3L },
18965       { 0x714ff61f33ddf626L,0x4206238ea085d103L,0x1c50d4b7e5809ee3L,
18966         0x999f450d85f8eb1dL } },
18967     /* 9 << 175 */
18968     { { 0x658a6051e4c79e9bL,0x1394cb73c66a9feaL,0x27f31ed5c6be7b23L,
18969         0xf4c88f365aa6f8feL },
18970       { 0x0fb0721f4aaa499eL,0x68b3a7d5e3fb2a6bL,0xa788097d3a92851dL,
18971         0x060e7f8ae96f4913L } },
18972     /* 10 << 175 */
18973     { { 0x82eebe731a3a93bcL,0x42bbf465a21adc1aL,0xc10b6fa4ef030efdL,
18974         0x247aa4c787b097bbL },
18975       { 0x8b8dc632f60c77daL,0x6ffbc26ac223523eL,0xa4f6ff11344579cfL,
18976         0x5825653c980250f6L } },
18977     /* 11 << 175 */
18978     { { 0xb2dd097ebc1aa2b9L,0x0788939337a0333aL,0x1cf55e7137a0db38L,
18979         0x2648487f792c1613L },
18980       { 0xdad013363fcef261L,0x6239c81d0eabf129L,0x8ee761de9d276be2L,
18981         0x406a7a341eda6ad3L } },
18982     /* 12 << 175 */
18983     { { 0x4bf367ba4a493b31L,0x54f20a529bf7f026L,0xb696e0629795914bL,
18984         0xcddab96d8bf236acL },
18985       { 0x4ff2c70aed25ea13L,0xfa1d09eb81cbbbe7L,0x88fc8c87468544c5L,
18986         0x847a670d696b3317L } },
18987     /* 13 << 175 */
18988     { { 0xf133421e64bcb626L,0xaea638c826dee0b5L,0xd6e7680bb310346cL,
18989         0xe06f4097d5d4ced3L },
18990       { 0x099614527512a30bL,0xf3d867fde589a59aL,0x2e73254f52d0c180L,
18991         0x9063d8a3333c74acL } },
18992     /* 14 << 175 */
18993     { { 0xeda6c595d314e7bcL,0x2ee7464b467899edL,0x1cef423c0a1ed5d3L,
18994         0x217e76ea69cc7613L },
18995       { 0x27ccce1fe7cda917L,0x12d8016b8a893f16L,0xbcd6de849fc74f6bL,
18996         0xfa5817e2f3144e61L } },
18997     /* 15 << 175 */
18998     { { 0x1f3541640821ee4cL,0x1583eab40bc61992L,0x7490caf61d72879fL,
18999         0x998ad9f3f76ae7b2L },
19000       { 0x1e181950a41157f7L,0xa9d7e1e6e8da3a7eL,0x963784eb8426b95fL,
19001         0x0ee4ed6e542e2a10L } },
19002     /* 16 << 175 */
19003     { { 0xb79d4cc5ac751e7bL,0x93f96472fd4211bdL,0x8c72d3d2c8de4fc6L,
19004         0x7b69cbf5df44f064L },
19005       { 0x3da90ca2f4bf94e1L,0x1a5325f8f12894e2L,0x0a437f6c7917d60bL,
19006         0x9be7048696c9cb5dL } },
19007     /* 17 << 175 */
19008     { { 0xb4d880bfe1dc5c05L,0xd738addaeebeeb57L,0x6f0119d3df0fe6a3L,
19009         0x5c686e5566eaaf5aL },
19010       { 0x9cb10b50dfd0b7ecL,0xbdd0264b6a497c21L,0xfc0935148c546c96L,
19011         0x58a947fa79dbf42aL } },
19012     /* 18 << 175 */
19013     { { 0xc0b48d4e49ccd6d7L,0xff8fb02c88bd5580L,0xc75235e907d473b2L,
19014         0x4fab1ac5a2188af3L },
19015       { 0x030fa3bc97576ec0L,0xe8c946e80b7e7d2fL,0x40a5c9cc70305600L,
19016         0x6d8260a9c8b013b4L } },
19017     /* 19 << 175 */
19018     { { 0x0368304f70bba85cL,0xad090da1a4a0d311L,0x7170e8702415eec1L,
19019         0xbfba35fe8461ea47L },
19020       { 0x6279019ac1e91938L,0xa47638f31afc415fL,0x36c65cbbbcba0e0fL,
19021         0x02160efb034e2c48L } },
19022     /* 20 << 175 */
19023     { { 0xe6c51073615cd9e4L,0x498ec047f1243c06L,0x3e5a8809b17b3d8cL,
19024         0x5cd99e610cc565f1L },
19025       { 0x81e312df7851dafeL,0xf156f5baa79061e2L,0x80d62b71880c590eL,
19026         0xbec9746f0a39faa1L } },
19027     /* 21 << 175 */
19028     { { 0x1d98a9c1c8ed1f7aL,0x09e43bb5a81d5ff2L,0xd5f00f680da0794aL,
19029         0x412050d9661aa836L },
19030       { 0xa89f7c4e90747e40L,0x6dc05ebbb62a3686L,0xdf4de847308e3353L,
19031         0x53868fbb9fb53bb9L } },
19032     /* 22 << 175 */
19033     { { 0x2b09d2c3cfdcf7ddL,0x41a9fce3723fcab4L,0x73d905f707f57ca3L,
19034         0x080f9fb1ac8e1555L },
19035       { 0x7c088e849ba7a531L,0x07d35586ed9a147fL,0x602846abaf48c336L,
19036         0x7320fd320ccf0e79L } },
19037     /* 23 << 175 */
19038     { { 0xaa780798b18bd1ffL,0x52c2e300afdd2905L,0xf27ea3d6434267cdL,
19039         0x8b96d16d15605b5fL },
19040       { 0x7bb310494b45706bL,0xe7f58b8e743d25f8L,0xe9b5e45b87f30076L,
19041         0xd19448d65d053d5aL } },
19042     /* 24 << 175 */
19043     { { 0x1ecc8cb9d3210a04L,0x6bc7d463dafb5269L,0x3e59b10a67c3489fL,
19044         0x1769788c65641e1bL },
19045       { 0x8a53b82dbd6cb838L,0x7066d6e6236d5f22L,0x03aa1c616908536eL,
19046         0xc971da0d66ae9809L } },
19047     /* 25 << 175 */
19048     { { 0x01b3a86bc49a2facL,0x3b8420c03092e77aL,0x020573007d6fb556L,
19049         0x6941b2a1bff40a87L },
19050       { 0x140b63080658ff2aL,0x878043633424ab36L,0x0253bd515751e299L,
19051         0xc75bcd76449c3e3aL } },
19052     /* 26 << 175 */
19053     { { 0x92eb40907f8f875dL,0x9c9d754e56c26bbfL,0x158cea618110bbe7L,
19054         0x62a6b802745f91eaL },
19055       { 0xa79c41aac6e7394bL,0x445b6a83ad57ef10L,0x0c5277eb6ea6f40cL,
19056         0x319fe96b88633365L } },
19057     /* 27 << 175 */
19058     { { 0x0b0fc61f385f63cbL,0x41250c8422bdd127L,0x67d153f109e942c2L,
19059         0x60920d08c021ad5dL },
19060       { 0x229f5746724d81a5L,0xb7ffb8925bba3299L,0x518c51a1de413032L,
19061         0x2a9bfe773c2fd94cL } },
19062     /* 28 << 175 */
19063     { { 0xcbcde2393191f4fdL,0x43093e16d3d6ada1L,0x184579f358769606L,
19064         0x2c94a8b3d236625cL },
19065       { 0x6922b9c05c437d8eL,0x3d4ae423d8d9f3c8L,0xf72c31c12e7090a2L,
19066         0x4ac3f5f3d76a55bdL } },
19067     /* 29 << 175 */
19068     { { 0x342508fc6b6af991L,0x0d5271001b5cebbdL,0xb84740d0dd440dd7L,
19069         0x748ef841780162fdL },
19070       { 0xa8dbfe0edfc6fafbL,0xeadfdf05f7300f27L,0x7d06555ffeba4ec9L,
19071         0x12c56f839e25fa97L } },
19072     /* 30 << 175 */
19073     { { 0x77f84203d39b8c34L,0xed8b1be63125eddbL,0x5bbf2441f6e39dc5L,
19074         0xb00f6ee66a5d678aL },
19075       { 0xba456ecf57d0ea99L,0xdcae0f5817e06c43L,0x01643de40f5b4baaL,
19076         0x2c324341d161b9beL } },
19077     /* 31 << 175 */
19078     { { 0x80177f55e126d468L,0xed325f1f76748e09L,0x6116004acfa9bdc2L,
19079         0x2d8607e63a9fb468L },
19080       { 0x0e573e276009d660L,0x3a525d2e8d10c5a1L,0xd26cb45c3b9009a0L,
19081         0xb6b0cdc0de9d7448L } },
19082     /* 32 << 175 */
19083     { { 0x949c9976e1337c26L,0x6faadebdd73d68e5L,0x9e158614f1b768d9L,
19084         0x22dfa5579cc4f069L },
19085       { 0xccd6da17be93c6d6L,0x24866c61a504f5b9L,0x2121353c8d694da1L,
19086         0x1c6ca5800140b8c6L } },
19087     /* 33 << 175 */
19088     { { 0xc245ad8ce964021eL,0xb83bffba032b82b3L,0xfaa220c647ef9898L,
19089         0x7e8d3ac6982c948aL },
19090       { 0x1faa2091bc2d124aL,0xbd54c3dd05b15ff4L,0x386bf3abc87c6fb7L,
19091         0xfb2b0563fdeb6f66L } },
19092     /* 34 << 175 */
19093     { { 0x4e77c5575b45afb4L,0xe9ded649efb8912dL,0x7ec9bbf542f6e557L,
19094         0x2570dfff62671f00L },
19095       { 0x2b3bfb7888e084bdL,0xa024b238f37fe5b4L,0x44e7dc0495649aeeL,
19096         0x498ca2555e7ec1d8L } },
19097     /* 35 << 175 */
19098     { { 0x3bc766eaaaa07e86L,0x0db6facbf3608586L,0xbadd2549bdc259c8L,
19099         0x95af3c6e041c649fL },
19100       { 0xb36a928c02e30afbL,0x9b5356ad008a88b8L,0x4b67a5f1cf1d9e9dL,
19101         0xc6542e47a5d8d8ceL } },
19102     /* 36 << 175 */
19103     { { 0x73061fe87adfb6ccL,0xcc826fd398678141L,0x00e758b13c80515aL,
19104         0x6afe324741485083L },
19105       { 0x0fcb08b9b6ae8a75L,0xb8cf388d4acf51e1L,0x344a55606961b9d6L,
19106         0x1a6778b86a97fd0cL } },
19107     /* 37 << 175 */
19108     { { 0xd840fdc1ecc4c7e3L,0xde9fe47d16db68ccL,0xe95f89dea3e216aaL,
19109         0x84f1a6a49594a8beL },
19110       { 0x7ddc7d725a7b162bL,0xc5cfda19adc817a3L,0x80a5d35078b58d46L,
19111         0x93365b1382978f19L } },
19112     /* 38 << 175 */
19113     { { 0x2e44d22526a1fc90L,0x0d6d10d24d70705dL,0xd94b6b10d70c45f4L,
19114         0x0f201022b216c079L },
19115       { 0xcec966c5658fde41L,0xa8d2bc7d7e27601dL,0xbfcce3e1ff230be7L,
19116         0x3394ff6b0033ffb5L } },
19117     /* 39 << 175 */
19118     { { 0xd890c5098132c9afL,0xaac4b0eb361e7868L,0x5194ded3e82d15aaL,
19119         0x4550bd2e23ae6b7dL },
19120       { 0x3fda318eea5399d4L,0xd989bffa91638b80L,0x5ea124d0a14aa12dL,
19121         0x1fb1b8993667b944L } },
19122     /* 40 << 175 */
19123     { { 0x95ec796944c44d6aL,0x91df144a57e86137L,0x915fd62073adac44L,
19124         0x8f01732d59a83801L },
19125       { 0xec579d253aa0a633L,0x06de5e7cc9d6d59cL,0xc132f958b1ef8010L,
19126         0x29476f96e65c1a02L } },
19127     /* 41 << 175 */
19128     { { 0x336a77c0d34c3565L,0xef1105b21b9f1e9eL,0x63e6d08bf9e08002L,
19129         0x9aff2f21c613809eL },
19130       { 0xb5754f853a80e75dL,0xde71853e6bbda681L,0x86f041df8197fd7aL,
19131         0x8b332e08127817faL } },
19132     /* 42 << 175 */
19133     { { 0x05d99be8b9c20cdaL,0x89f7aad5d5cd0c98L,0x7ef936fe5bb94183L,
19134         0x92ca0753b05cd7f2L },
19135       { 0x9d65db1174a1e035L,0x02628cc813eaea92L,0xf2d9e24249e4fbf2L,
19136         0x94fdfd9be384f8b7L } },
19137     /* 43 << 175 */
19138     { { 0x65f5605463428c6bL,0x2f7205b290b409a5L,0xf778bb78ff45ae11L,
19139         0xa13045bec5ee53b2L },
19140       { 0xe00a14ff03ef77feL,0x689cd59fffef8befL,0x3578f0ed1e9ade22L,
19141         0xe99f3ec06268b6a8L } },
19142     /* 44 << 175 */
19143     { { 0xa2057d91ea1b3c3eL,0x2d1a7053b8823a4aL,0xabbb336a2cca451eL,
19144         0xcd2466e32218bb5dL },
19145       { 0x3ac1f42fc8cb762dL,0x7e312aae7690211fL,0xebb9bd7345d07450L,
19146         0x207c4b8246c2213fL } },
19147     /* 45 << 175 */
19148     { { 0x99d425c1375913ecL,0x94e45e9667908220L,0xc08f3087cd67dbf6L,
19149         0xa5670fbec0887056L },
19150       { 0x6717b64a66f5b8fcL,0xd5a56aea786fec28L,0xa8c3f55fc0ff4952L,
19151         0xa77fefae457ac49bL } },
19152     /* 46 << 175 */
19153     { { 0x29882d7c98379d44L,0xd000bdfb509edc8aL,0xc6f95979e66fe464L,
19154         0x504a6115fa61bde0L },
19155       { 0x56b3b871effea31aL,0x2d3de26df0c21a54L,0x21dbff31834753bfL,
19156         0xe67ecf4969269d86L } },
19157     /* 47 << 175 */
19158     { { 0x7a176952151fe690L,0x035158047f2adb5fL,0xee794b15d1b62a8dL,
19159         0xf004ceecaae454e6L },
19160       { 0x0897ea7cf0386facL,0x3b62ff12d1fca751L,0x154181df1b7a04ecL,
19161         0x2008e04afb5847ecL } },
19162     /* 48 << 175 */
19163     { { 0xd147148e41dbd772L,0x2b419f7322942654L,0x669f30d3e9c544f7L,
19164         0x52a2c223c8540149L },
19165       { 0x5da9ee14634dfb02L,0x5f074ff0f47869f3L,0x74ee878da3933accL,
19166         0xe65106514fe35ed1L } },
19167     /* 49 << 175 */
19168     { { 0xb3eb9482f1012e7aL,0x51013cc0a8a566aeL,0xdd5e924347c00d3bL,
19169         0x7fde089d946bb0e5L },
19170       { 0x030754fec731b4b3L,0x12a136a499fda062L,0x7c1064b85a1a35bcL,
19171         0xbf1f5763446c84efL } },
19172     /* 50 << 175 */
19173     { { 0xed29a56da16d4b34L,0x7fba9d09dca21c4fL,0x66d7ac006d8de486L,
19174         0x6006198773a2a5e1L },
19175       { 0x8b400f869da28ff0L,0x3133f70843c4599cL,0x9911c9b8ee28cb0dL,
19176         0xcd7e28748e0af61dL } },
19177     /* 51 << 175 */
19178     { { 0x5a85f0f272ed91fcL,0x85214f319cd4a373L,0x881fe5be1925253cL,
19179         0xd8dc98e091e8bc76L },
19180       { 0x7120affe585cc3a2L,0x724952ed735bf97aL,0x5581e7dc3eb34581L,
19181         0x5cbff4f2e52ee57dL } },
19182     /* 52 << 175 */
19183     { { 0x8d320a0e87d8cc7bL,0x9beaa7f3f1d280d0L,0x7a0b95719beec704L,
19184         0x9126332e5b7f0057L },
19185       { 0x01fbc1b48ed3bd6dL,0x35bb2c12d945eb24L,0x6404694e9a8ae255L,
19186         0xb6092eec8d6abfb3L } },
19187     /* 53 << 175 */
19188     { { 0x4d76143fcc058865L,0x7b0a5af26e249922L,0x8aef94406a50d353L,
19189         0xe11e4bcc64f0e07aL },
19190       { 0x4472993aa14a90faL,0x7706e20cba0c51d4L,0xf403292f1532672dL,
19191         0x52573bfa21829382L } },
19192     /* 54 << 175 */
19193     { { 0x6a7bb6a93b5bdb83L,0x08da65c0a4a72318L,0xc58d22aa63eb065fL,
19194         0x1717596c1b15d685L },
19195       { 0x112df0d0b266d88bL,0xf688ae975941945aL,0x487386e37c292cacL,
19196         0x42f3b50d57d6985cL } },
19197     /* 55 << 175 */
19198     { { 0x6da4f9986a90fc34L,0xc8f257d365ca8a8dL,0xc2feabca6951f762L,
19199         0xe1bc81d074c323acL },
19200       { 0x1bc68f67251a2a12L,0x10d86587be8a70dcL,0xd648af7ff0f84d2eL,
19201         0xf0aa9ebc6a43ac92L } },
19202     /* 56 << 175 */
19203     { { 0x69e3be0427596893L,0xb6bb02a645bf452bL,0x0875c11af4c698c8L,
19204         0x6652b5c7bece3794L },
19205       { 0x7b3755fd4f5c0499L,0x6ea16558b5532b38L,0xd1c69889a2e96ef7L,
19206         0x9c773c3a61ed8f48L } },
19207     /* 57 << 175 */
19208     { { 0x2b653a409b323abcL,0xe26605e1f0e1d791L,0x45d410644a87157aL,
19209         0x8f9a78b7cbbce616L },
19210       { 0xcf1e44aac407edddL,0x81ddd1d8a35b964fL,0x473e339efd083999L,
19211         0x6c94bdde8e796802L } },
19212     /* 58 << 175 */
19213     { { 0x5a304ada8545d185L,0x82ae44ea738bb8cbL,0x628a35e3df87e10eL,
19214         0xd3624f3da15b9fe3L },
19215       { 0xcc44209b14be4254L,0x7d0efcbcbdbc2ea5L,0x1f60336204c37bbeL,
19216         0x21f363f556a5852cL } },
19217     /* 59 << 175 */
19218     { { 0xa1503d1ca8501550L,0x2251e0e1d8ab10bbL,0xde129c966961c51cL,
19219         0x1f7246a481910f68L },
19220       { 0x2eb744ee5f2591f2L,0x3c47d33f5e627157L,0x4d6d62c922f3bd68L,
19221         0x6120a64bcb8df856L } },
19222     /* 60 << 175 */
19223     { { 0x3a9ac6c07b5d07dfL,0xa92b95587ef39783L,0xe128a134ab3a9b4fL,
19224         0x41c18807b1252f05L },
19225       { 0xfc7ed08980ba9b1cL,0xac8dc6dec532a9ddL,0xbf829cef55246809L,
19226         0x101b784f5b4ee80fL } },
19227     /* 61 << 175 */
19228     { { 0xc09945bbb6f11603L,0x57b09dbe41d2801eL,0xfba5202fa97534a8L,
19229         0x7fd8ae5fc17b9614L },
19230       { 0xa50ba66678308435L,0x9572f77cd3868c4dL,0x0cef7bfd2dd7aab0L,
19231         0xe7958e082c7c79ffL } },
19232     /* 62 << 175 */
19233     { { 0x81262e4225346689L,0x716da290b07c7004L,0x35f911eab7950ee3L,
19234         0x6fd72969261d21b5L },
19235       { 0x5238980308b640d3L,0x5b0026ee887f12a1L,0x20e21660742e9311L,
19236         0x0ef6d5415ff77ff7L } },
19237     /* 63 << 175 */
19238     { { 0x969127f0f9c41135L,0xf21d60c968a64993L,0x656e5d0ce541875cL,
19239         0xf1e0f84ea1d3c233L },
19240       { 0x9bcca35906002d60L,0xbe2da60c06191552L,0x5da8bbae61181ec3L,
19241         0x9f04b82365806f19L } },
19242     /* 64 << 175 */
19243     { { 0xf1604a7dd4b79bb8L,0xaee806fb52c878c8L,0x34144f118d47b8e8L,
19244         0x72edf52b949f9054L },
19245       { 0xebfca84e2127015aL,0x9051d0c09cb7cef3L,0x86e8fe58296deec8L,
19246         0x33b2818841010d74L } },
19247     /* 0 << 182 */
19248     { { 0x00, 0x00, 0x00, 0x00 },
19249       { 0x00, 0x00, 0x00, 0x00 } },
19250     /* 1 << 182 */
19251     { { 0x01079383171b445fL,0x9bcf21e38131ad4cL,0x8cdfe205c93987e8L,
19252         0xe63f4152c92e8c8fL },
19253       { 0x729462a930add43dL,0x62ebb143c980f05aL,0x4f3954e53b06e968L,
19254         0xfe1d75ad242cf6b1L } },
19255     /* 2 << 182 */
19256     { { 0x5f95c6c7af8685c8L,0xd4c1c8ce2f8f01aaL,0xc44bbe322574692aL,
19257         0xb8003478d4a4a068L },
19258       { 0x7c8fc6e52eca3cdbL,0xea1db16bec04d399L,0xb05bc82e8f2bc5cfL,
19259         0x763d517ff44793d2L } },
19260     /* 3 << 182 */
19261     { { 0x4451c1b808bd98d0L,0x644b1cd46575f240L,0x6907eb337375d270L,
19262         0x56c8bebdfa2286bdL },
19263       { 0xc713d2acc4632b46L,0x17da427aafd60242L,0x313065b7c95c7546L,
19264         0xf8239898bf17a3deL } },
19265     /* 4 << 182 */
19266     { { 0xf3b7963f4c830320L,0x842c7aa0903203e3L,0xaf22ca0ae7327afbL,
19267         0x38e13092967609b6L },
19268       { 0x73b8fb62757558f1L,0x3cc3e831f7eca8c1L,0xe4174474f6331627L,
19269         0xa77989cac3c40234L } },
19270     /* 5 << 182 */
19271     { { 0xe5fd17a144a081e0L,0xd797fb7db70e296aL,0x2b472b30481f719cL,
19272         0x0e632a98fe6f8c52L },
19273       { 0x89ccd116c5f0c284L,0xf51088af2d987c62L,0x2a2bccda4c2de6cfL,
19274         0x810f9efef679f0f9L } },
19275     /* 6 << 182 */
19276     { { 0xb0f394b97ffe4b3eL,0x0b691d21e5fa5d21L,0xb0bd77479dfbbc75L,
19277         0xd2830fdafaf78b00L },
19278       { 0xf78c249c52434f57L,0x4b1f754598096dabL,0x73bf6f948ff8c0b3L,
19279         0x34aef03d454e134cL } },
19280     /* 7 << 182 */
19281     { { 0xf8d151f4b7ac7ec5L,0xd6ceb95ae50da7d5L,0xa1b492b0dc3a0eb8L,
19282         0x75157b69b3dd2863L },
19283       { 0xe2c4c74ec5413d62L,0xbe329ff7bc5fc4c7L,0x835a2aea60fa9ddaL,
19284         0xf117f5ad7445cb87L } },
19285     /* 8 << 182 */
19286     { { 0xae8317f4b0166f7aL,0xfbd3e3f7ceec74e6L,0xfdb516ace0874bfdL,
19287         0x3d846019c681f3a3L },
19288       { 0x0b12ee5c7c1620b0L,0xba68b4dd2b63c501L,0xac03cd326668c51eL,
19289         0x2a6279f74e0bcb5bL } },
19290     /* 9 << 182 */
19291     { { 0x17bd69b06ae85c10L,0x729469791dfdd3a6L,0xd9a032682c078becL,
19292         0x41c6a658bfd68a52L },
19293       { 0xcdea10240e023900L,0xbaeec121b10d144dL,0x5a600e74058ab8dcL,
19294         0x1333af21bb89ccddL } },
19295     /* 10 << 182 */
19296     { { 0xdf25eae03aaba1f1L,0x2cada16e3b7144cfL,0x657ee27d71ab98bcL,
19297         0x99088b4c7a6fc96eL },
19298       { 0x05d5c0a03549dbd4L,0x42cbdf8ff158c3acL,0x3fb6b3b087edd685L,
19299         0x22071cf686f064d0L } },
19300     /* 11 << 182 */
19301     { { 0xd2d6721fff2811e5L,0xdb81b703fe7fae8cL,0x3cfb74efd3f1f7bbL,
19302         0x0cdbcd7616cdeb5dL },
19303       { 0x4f39642a566a808cL,0x02b74454340064d6L,0xfabbadca0528fa6fL,
19304         0xe4c3074cd3fc0bb6L } },
19305     /* 12 << 182 */
19306     { { 0xb32cb8b0b796d219L,0xc3e95f4f34741dd9L,0x8721212568edf6f5L,
19307         0x7a03aee4a2b9cb8eL },
19308       { 0x0cd3c376f53a89aaL,0x0d8af9b1948a28dcL,0xcf86a3f4902ab04fL,
19309         0x8aacb62a7f42002dL } },
19310     /* 13 << 182 */
19311     { { 0x106985ebf62ffd52L,0xe670b54e5797bf10L,0x4b405209c5e30aefL,
19312         0x12c97a204365b5e9L },
19313       { 0x104646ce1fe32093L,0x13cb4ff63907a8c9L,0x8b9f30d1d46e726bL,
19314         0xe1985e21aba0f499L } },
19315     /* 14 << 182 */
19316     { { 0xc573dea910a230cdL,0x24f46a93cd30f947L,0xf2623fcfabe2010aL,
19317         0x3f278cb273f00e4fL },
19318       { 0xed55c67d50b920ebL,0xf1cb9a2d8e760571L,0x7c50d1090895b709L,
19319         0x4207cf07190d4369L } },
19320     /* 15 << 182 */
19321     { { 0x3b027e81c4127fe1L,0xa9f8b9ad3ae9c566L,0x5ab10851acbfbba5L,
19322         0xa747d648569556f5L },
19323       { 0xcc172b5c2ba97bf7L,0x15e0f77dbcfa3324L,0xa345b7977686279dL,
19324         0x5a723480e38003d3L } },
19325     /* 16 << 182 */
19326     { { 0xfd8e139f8f5fcda8L,0xf3e558c4bdee5bfdL,0xd76cbaf4e33f9f77L,
19327         0x3a4c97a471771969L },
19328       { 0xda27e84bf6dce6a7L,0xff373d9613e6c2d1L,0xf115193cd759a6e9L,
19329         0x3f9b702563d2262cL } },
19330     /* 17 << 182 */
19331     { { 0xd9764a31317cd062L,0x30779d8e199f8332L,0xd807410616b11b0bL,
19332         0x7917ab9f78aeaed8L },
19333       { 0xb67a9cbe28fb1d8eL,0x2e313563136eda33L,0x010b7069a371a86cL,
19334         0x44d90fa26744e6b7L } },
19335     /* 18 << 182 */
19336     { { 0x68190867d6b3e243L,0x9fe6cd9d59048c48L,0xb900b02895731538L,
19337         0xa012062f32cae04fL },
19338       { 0x8107c8bc9399d082L,0x47e8c54a41df12e2L,0x14ba5117b6ef3f73L,
19339         0x22260bea81362f0bL } },
19340     /* 19 << 182 */
19341     { { 0x90ea261e1a18cc20L,0x2192999f2321d636L,0xef64d314e311b6a0L,
19342         0xd7401e4c3b54a1f5L },
19343       { 0x190199836fbca2baL,0x46ad32938fbffc4bL,0xa142d3f63786bf40L,
19344         0xeb5cbc26b67039fcL } },
19345     /* 20 << 182 */
19346     { { 0x9cb0ae6c252bd479L,0x05e0f88a12b5848fL,0x78f6d2b2a5c97663L,
19347         0x6f6e149bc162225cL },
19348       { 0xe602235cde601a89L,0xd17bbe98f373be1fL,0xcaf49a5ba8471827L,
19349         0x7e1a0a8518aaa116L } },
19350     /* 21 << 182 */
19351     { { 0x6c833196270580c3L,0x1e233839f1c98a14L,0x67b2f7b4ae34e0a5L,
19352         0x47ac8745d8ce7289L },
19353       { 0x2b74779a100dd467L,0x274a43374ee50d09L,0x603dcf1383608bc9L,
19354         0xcd9da6c3c89e8388L } },
19355     /* 22 << 182 */
19356     { { 0x2660199f355116acL,0xcc38bb59b6d18eedL,0x3075f31f2f4bc071L,
19357         0x9774457f265dc57eL },
19358       { 0x06a6a9c8c6db88bbL,0x6429d07f4ec98e04L,0x8d05e57b05ecaa8bL,
19359         0x20f140b17872ea7bL } },
19360     /* 23 << 182 */
19361     { { 0xdf8c0f09ca494693L,0x48d3a020f252e909L,0x4c5c29af57b14b12L,
19362         0x7e6fa37dbf47ad1cL },
19363       { 0x66e7b50649a0c938L,0xb72c0d486be5f41fL,0x6a6242b8b2359412L,
19364         0xcd35c7748e859480L } },
19365     /* 24 << 182 */
19366     { { 0x12536fea87baa627L,0x58c1fec1f72aa680L,0x6c29b637601e5dc9L,
19367         0x9e3c3c1cde9e01b9L },
19368       { 0xefc8127b2bcfe0b0L,0x351071022a12f50dL,0x6ccd6cb14879b397L,
19369         0xf792f804f8a82f21L } },
19370     /* 25 << 182 */
19371     { { 0x509d4804a9b46402L,0xedddf85dc10f0850L,0x928410dc4b6208aaL,
19372         0xf6229c46391012dcL },
19373       { 0xc5a7c41e7727b9b6L,0x289e4e4baa444842L,0x049ba1d9e9a947eaL,
19374         0x44f9e47f83c8debcL } },
19375     /* 26 << 182 */
19376     { { 0xfa77a1fe611f8b8eL,0xfd2e416af518f427L,0xc5fffa70114ebac3L,
19377         0xfe57c4e95d89697bL },
19378       { 0xfdd053acb1aaf613L,0x31df210fea585a45L,0x318cc10e24985034L,
19379         0x1a38efd15f1d6130L } },
19380     /* 27 << 182 */
19381     { { 0xbf86f2370b1e9e21L,0xb258514d1dbe88aaL,0x1e38a58890c1baf9L,
19382         0x2936a01ebdb9b692L },
19383       { 0xd576de986dd5b20cL,0xb586bf7170f98ecfL,0xcccf0f12c42d2fd7L,
19384         0x8717e61cfb35bd7bL } },
19385     /* 28 << 182 */
19386     { { 0x8b1e572235e6fc06L,0x3477728f0b3e13d5L,0x150c294daa8a7372L,
19387         0xc0291d433bfa528aL },
19388       { 0xc6c8bc67cec5a196L,0xdeeb31e45c2e8a7cL,0xba93e244fb6e1c51L,
19389         0xb9f8b71b2e28e156L } },
19390     /* 29 << 182 */
19391     { { 0xce65a287968a2ab9L,0xe3c5ce6946bbcb1fL,0xf8c835b9e7ae3f30L,
19392         0x16bbee26ff72b82bL },
19393       { 0x665e2017fd42cd22L,0x1e139970f8b1d2a0L,0x125cda2979204932L,
19394         0x7aee94a549c3bee5L } },
19395     /* 30 << 182 */
19396     { { 0x68c7016089821a66L,0xf7c376788f981669L,0xd90829fc48cc3645L,
19397         0x346af049d70addfcL },
19398       { 0x2057b232370bf29cL,0xf90c73ce42e650eeL,0xe03386eaa126ab90L,
19399         0x0e266e7e975a087bL } },
19400     /* 31 << 182 */
19401     { { 0x80578eb90fca65d9L,0x7e2989ea16af45b8L,0x7438212dcac75a4eL,
19402         0x38c7ca394fef36b8L },
19403       { 0x8650c494d402676aL,0x26ab5a66f72c7c48L,0x4e6cb426ce3a464eL,
19404         0xf8f998962b72f841L } },
19405     /* 32 << 182 */
19406     { { 0x8c3184911a335cc8L,0x563459ba6a5913e4L,0x1b920d61c7b32919L,
19407         0x805ab8b6a02425adL },
19408       { 0x2ac512da8d006086L,0x6ca4846abcf5c0fdL,0xafea51d8ac2138d7L,
19409         0xcb647545344cd443L } },
19410     /* 33 << 182 */
19411     { { 0x0429ee8fbd7d9040L,0xee66a2de819b9c96L,0x54f9ec25dea7d744L,
19412         0x2ffea642671721bbL },
19413       { 0x4f19dbd1114344eaL,0x04304536fd0dbc8bL,0x014b50aa29ec7f91L,
19414         0xb5fc22febb06014dL } },
19415     /* 34 << 182 */
19416     { { 0x60d963a91ee682e0L,0xdf48abc0fe85c727L,0x0cadba132e707c2dL,
19417         0xde608d3aa645aeffL },
19418       { 0x05f1c28bedafd883L,0x3c362edebd94de1fL,0x8dd0629d13593e41L,
19419         0x0a5e736f766d6eafL } },
19420     /* 35 << 182 */
19421     { { 0xbfa92311f68cf9d1L,0xa4f9ef87c1797556L,0x10d75a1f5601c209L,
19422         0x651c374c09b07361L },
19423       { 0x49950b5888b5ceadL,0x0ef000586fa9dbaaL,0xf51ddc264e15f33aL,
19424         0x1f8b5ca62ef46140L } },
19425     /* 36 << 182 */
19426     { { 0x343ac0a3ee9523f0L,0xbb75eab2975ea978L,0x1bccf332107387f4L,
19427         0x790f92599ab0062eL },
19428       { 0xf1a363ad1e4f6a5fL,0x06e08b8462519a50L,0x609151877265f1eeL,
19429         0x6a80ca3493ae985eL } },
19430     /* 37 << 182 */
19431     { { 0x81b29768aaba4864L,0xb13cabf28d52a7d6L,0xb5c363488ead03f1L,
19432         0xc932ad9581c7c1c0L },
19433       { 0x5452708ecae1e27bL,0x9dac42691b0df648L,0x233e3f0cdfcdb8bcL,
19434         0xe6ceccdfec540174L } },
19435     /* 38 << 182 */
19436     { { 0xbd0d845e95081181L,0xcc8a7920699355d5L,0x111c0f6dc3b375a8L,
19437         0xfd95bc6bfd51e0dcL },
19438       { 0x4a106a266888523aL,0x4d142bd6cb01a06dL,0x79bfd289adb9b397L,
19439         0x0bdbfb94e9863914L } },
19440     /* 39 << 182 */
19441     { { 0x29d8a2291660f6a6L,0x7f6abcd6551c042dL,0x13039deb0ac3ffe8L,
19442         0xa01be628ec8523fbL },
19443       { 0x6ea341030ca1c328L,0xc74114bdb903928eL,0x8aa4ff4e9e9144b0L,
19444         0x7064091f7f9a4b17L } },
19445     /* 40 << 182 */
19446     { { 0xa3f4f521e447f2c4L,0x81b8da7a604291f0L,0xd680bc467d5926deL,
19447         0x84f21fd534a1202fL },
19448       { 0x1d1e31814e9df3d8L,0x1ca4861a39ab8d34L,0x809ddeec5b19aa4aL,
19449         0x59f72f7e4d329366L } },
19450     /* 41 << 182 */
19451     { { 0xa2f93f41386d5087L,0x40bf739cdd67d64fL,0xb449420566702158L,
19452         0xc33c65be73b1e178L },
19453       { 0xcdcd657c38ca6153L,0x97f4519adc791976L,0xcc7c7f29cd6e1f39L,
19454         0x38de9cfb7e3c3932L } },
19455     /* 42 << 182 */
19456     { { 0xe448eba37b793f85L,0xe9f8dbf9f067e914L,0xc0390266f114ae87L,
19457         0x39ed75a7cd6a8e2aL },
19458       { 0xadb148487ffba390L,0x67f8cb8b6af9bc09L,0x322c38489c7476dbL,
19459         0xa320fecf52a538d6L } },
19460     /* 43 << 182 */
19461     { { 0xe0493002b2aced2bL,0xdfba1809616bd430L,0x531c4644c331be70L,
19462         0xbc04d32e90d2e450L },
19463       { 0x1805a0d10f9f142dL,0x2c44a0c547ee5a23L,0x31875a433989b4e3L,
19464         0x6b1949fd0c063481L } },
19465     /* 44 << 182 */
19466     { { 0x2dfb9e08be0f4492L,0x3ff0da03e9d5e517L,0x03dbe9a1f79466a8L,
19467         0x0b87bcd015ea9932L },
19468       { 0xeb64fc83ab1f58abL,0x6d9598da817edc8aL,0x699cff661d3b67e5L,
19469         0x645c0f2992635853L } },
19470     /* 45 << 182 */
19471     { { 0x253cdd82eabaf21cL,0x82b9602a2241659eL,0x2cae07ec2d9f7091L,
19472         0xbe4c720c8b48cd9bL },
19473       { 0x6ce5bc036f08d6c9L,0x36e8a997af10bf40L,0x83422d213e10ff12L,
19474         0x7b26d3ebbcc12494L } },
19475     /* 46 << 182 */
19476     { { 0xb240d2d0c9469ad6L,0xc4a11b4d30afa05bL,0x4b604acedd6ba286L,
19477         0x184866003ee2864cL },
19478       { 0x5869d6ba8d9ce5beL,0x0d8f68c5ff4bfb0dL,0xb69f210b5700cf73L,
19479         0x61f6653a6d37c135L } },
19480     /* 47 << 182 */
19481     { { 0xff3d432b5aff5a48L,0x0d81c4b972ba3a69L,0xee879ae9fa1899efL,
19482         0xbac7e2a02d6acafdL },
19483       { 0xd6d93f6c1c664399L,0x4c288de15bcb135dL,0x83031dab9dab7cbfL,
19484         0xfe23feb03abbf5f0L } },
19485     /* 48 << 182 */
19486     { { 0x9f1b2466cdedca85L,0x140bb7101a09538cL,0xac8ae8515e11115dL,
19487         0x0d63ff676f03f59eL },
19488       { 0x755e55517d234afbL,0x61c2db4e7e208fc1L,0xaa9859cef28a4b5dL,
19489         0xbdd6d4fc34af030fL } },
19490     /* 49 << 182 */
19491     { { 0xd1c4a26d3be01cb1L,0x9ba14ffc243aa07cL,0xf95cd3a9b2503502L,
19492         0xe379bc067d2a93abL },
19493       { 0x3efc18e9d4ca8d68L,0x083558ec80bb412aL,0xd903b9409645a968L,
19494         0xa499f0b69ba6054fL } },
19495     /* 50 << 182 */
19496     { { 0x208b573cb8349abeL,0x3baab3e530b4fc1cL,0x87e978bacb524990L,
19497         0x3524194eccdf0e80L },
19498       { 0x627117257d4bcc42L,0xe90a3d9bb90109baL,0x3b1bdd571323e1e0L,
19499         0xb78e9bd55eae1599L } },
19500     /* 51 << 182 */
19501     { { 0x0794b7469e03d278L,0x80178605d70e6297L,0x171792f899c97855L,
19502         0x11b393eef5a86b5cL },
19503       { 0x48ef6582d8884f27L,0xbd44737abf19ba5fL,0x8698de4ca42062c6L,
19504         0x8975eb8061ce9c54L } },
19505     /* 52 << 182 */
19506     { { 0xd50e57c7d7fe71f3L,0x15342190bc97ce38L,0x51bda2de4df07b63L,
19507         0xba12aeae200eb87dL },
19508       { 0xabe135d2a9b4f8f6L,0x04619d65fad6d99cL,0x4a6683a77994937cL,
19509         0x7a778c8b6f94f09aL } },
19510     /* 53 << 182 */
19511     { { 0x8c50862320a71b89L,0x241a2aed1c229165L,0x352be595aaf83a99L,
19512         0x9fbfee7f1562bac8L },
19513       { 0xeaf658b95c4017e3L,0x1dc7f9e015120b86L,0xd84f13dd4c034d6fL,
19514         0x283dd737eaea3038L } },
19515     /* 54 << 182 */
19516     { { 0x197f2609cd85d6a2L,0x6ebbc345fae60177L,0xb80f031b4e12fedeL,
19517         0xde55d0c207a2186bL },
19518       { 0x1fb3e37f24dcdd5aL,0x8d602da57ed191fbL,0x108fb05676023e0dL,
19519         0x70178c71459c20c0L } },
19520     /* 55 << 182 */
19521     { { 0xfad5a3863fe54cf0L,0xa4a3ec4f02bbb475L,0x1aa5ec20919d94d7L,
19522         0x5d3b63b5a81e4ab3L },
19523       { 0x7fa733d85ad3d2afL,0xfbc586ddd1ac7a37L,0x282925de40779614L,
19524         0xfe0ffffbe74a242aL } },
19525     /* 56 << 182 */
19526     { { 0x3f39e67f906151e5L,0xcea27f5f55e10649L,0xdca1d4e1c17cf7b7L,
19527         0x0c326d122fe2362dL },
19528       { 0x05f7ac337dd35df3L,0x0c3b7639c396dbdfL,0x0912f5ac03b7db1cL,
19529         0x9dea4b705c9ed4a9L } },
19530     /* 57 << 182 */
19531     { { 0x475e6e53aae3f639L,0xfaba0e7cfc278bacL,0x16f9e2219490375fL,
19532         0xaebf9746a5a7ed0aL },
19533       { 0x45f9af3ff41ad5d6L,0x03c4623cb2e99224L,0x82c5bb5cb3cf56aaL,
19534         0x6431181934567ed3L } },
19535     /* 58 << 182 */
19536     { { 0xec57f2118be489acL,0x2821895db9a1104bL,0x610dc8756064e007L,
19537         0x8e526f3f5b20d0feL },
19538       { 0x6e71ca775b645aeeL,0x3d1dcb9f800e10ffL,0x36b51162189cf6deL,
19539         0x2c5a3e306bb17353L } },
19540     /* 59 << 182 */
19541     { { 0xc186cd3e2a6c6fbfL,0xa74516fa4bf97906L,0x5b4b8f4b279d6901L,
19542         0x0c4e57b42b573743L },
19543       { 0x75fdb229b6e386b6L,0xb46793fd99deac27L,0xeeec47eacf712629L,
19544         0xe965f3c4cbc3b2ddL } },
19545     /* 60 << 182 */
19546     { { 0x8dd1fb83425c6559L,0x7fc00ee60af06fdaL,0xe98c922533d956dfL,
19547         0x0f1ef3354fbdc8a2L },
19548       { 0x2abb5145b79b8ea2L,0x40fd2945bdbff288L,0x6a814ac4d7185db7L,
19549         0xc4329d6fc084609aL } },
19550     /* 61 << 182 */
19551     { { 0xc9ba7b52ed1be45dL,0x891dd20de4cd2c74L,0x5a4d4a7f824139b1L,
19552         0x66c17716b873c710L },
19553       { 0x5e5bc1412843c4e0L,0xd5ac4817b97eb5bfL,0xc0f8af54450c95c7L,
19554         0xc91b3fa0318406c5L } },
19555     /* 62 << 182 */
19556     { { 0x360c340aab9d97f8L,0xfb57bd0790a2d611L,0x4339ae3ca6a6f7e5L,
19557         0x9c1fcd2a2feb8a10L },
19558       { 0x972bcca9c7ea7432L,0x1b0b924c308076f6L,0x80b2814a2a5b4ca5L,
19559         0x2f78f55b61ef3b29L } },
19560     /* 63 << 182 */
19561     { { 0xf838744ac18a414fL,0xc611eaae903d0a86L,0x94dabc162a453f55L,
19562         0xe6f2e3da14efb279L },
19563       { 0x5b7a60179320dc3cL,0x692e382f8df6b5a4L,0x3f5e15e02d40fa90L,
19564         0xc87883ae643dd318L } },
19565     /* 64 << 182 */
19566     { { 0x511053e453544774L,0x834d0ecc3adba2bcL,0x4215d7f7bae371f5L,
19567         0xfcfd57bf6c8663bcL },
19568       { 0xded2383dd6901b1dL,0x3b49fbb4b5587dc3L,0xfd44a08d07625f62L,
19569         0x3ee4d65b9de9b762L } },
19570     /* 0 << 189 */
19571     { { 0x00, 0x00, 0x00, 0x00 },
19572       { 0x00, 0x00, 0x00, 0x00 } },
19573     /* 1 << 189 */
19574     { { 0x64e5137d0d63d1faL,0x658fc05202a9d89fL,0x4889487450436309L,
19575         0xe9ae30f8d598da61L },
19576       { 0x2ed710d1818baf91L,0xe27e9e068b6a0c20L,0x1e28dcfb1c1a6b44L,
19577         0x883acb64d6ac57dcL } },
19578     /* 2 << 189 */
19579     { { 0x8735728dc2c6ff70L,0x79d6122fc5dc2235L,0x23f5d00319e277f9L,
19580         0x7ee84e25dded8cc7L },
19581       { 0x91a8afb063cd880aL,0x3f3ea7c63574af60L,0x0cfcdc8402de7f42L,
19582         0x62d0792fb31aa152L } },
19583     /* 3 << 189 */
19584     { { 0x8e1b4e438a5807ceL,0xad283893e4109a7eL,0xc30cc9cbafd59ddaL,
19585         0xf65f36c63d8d8093L },
19586       { 0xdf31469ea60d32b2L,0xee93df4b3e8191c8L,0x9c1017c5355bdeb5L,
19587         0xd26231858616aa28L } },
19588     /* 4 << 189 */
19589     { { 0xb02c83f9dec31a21L,0x988c8b236ad9d573L,0x53e983aea57be365L,
19590         0xe968734d646f834eL },
19591       { 0x9137ea8f5da6309bL,0x10f3a624c1f1ce16L,0x782a9ea2ca440921L,
19592         0xdf94739e5b46f1b5L } },
19593     /* 5 << 189 */
19594     { { 0x9f9be006cce85c9bL,0x360e70d6a4c7c2d3L,0x2cd5beeaaefa1e60L,
19595         0x64cf63c08c3d2b6dL },
19596       { 0xfb107fa3e1cf6f90L,0xb7e937c6d5e044e6L,0x74e8ca78ce34db9fL,
19597         0x4f8b36c13e210bd0L } },
19598     /* 6 << 189 */
19599     { { 0x1df165a434a35ea8L,0x3418e0f74d4412f6L,0x5af1f8af518836c3L,
19600         0x42ceef4d130e1965L },
19601       { 0x5560ca0b543a1957L,0xc33761e5886cb123L,0x66624b1ffe98ed30L,
19602         0xf772f4bf1090997dL } },
19603     /* 7 << 189 */
19604     { { 0xf4e540bb4885d410L,0x7287f8109ba5f8d7L,0x22d0d865de98dfb1L,
19605         0x49ff51a1bcfbb8a3L },
19606       { 0xb6b6fa536bc3012eL,0x3d31fd72170d541dL,0x8018724f4b0f4966L,
19607         0x79e7399f87dbde07L } },
19608     /* 8 << 189 */
19609     { { 0x56f8410ef4f8b16aL,0x97241afec47b266aL,0x0a406b8e6d9c87c1L,
19610         0x803f3e02cd42ab1bL },
19611       { 0x7f0309a804dbec69L,0xa83b85f73bbad05fL,0xc6097273ad8e197fL,
19612         0xc097440e5067adc1L } },
19613     /* 9 << 189 */
19614     { { 0x730eafb63524ff16L,0xd7f9b51e823fc6ceL,0x27bd0d32443e4ac0L,
19615         0x40c59ad94d66f217L },
19616       { 0x6c33136f17c387a4L,0x5043b8d5eb86804dL,0x74970312675a73c9L,
19617         0x838fdb31f16669b6L } },
19618     /* 10 << 189 */
19619     { { 0xc507b6dd418e7dddL,0x39888d93472f19d6L,0x7eae26be0c27eb4dL,
19620         0x17b53ed3fbabb884L },
19621       { 0xfc27021b2b01ae4fL,0x88462e87cf488682L,0xbee096ec215e2d87L,
19622         0xeb2fea9ad242e29bL } },
19623     /* 11 << 189 */
19624     { { 0x5d985b5fb821fc28L,0x89d2e197dc1e2ad2L,0x55b566b89030ba62L,
19625         0xe3fd41b54f41b1c6L },
19626       { 0xb738ac2eb9a96d61L,0x7f8567ca369443f4L,0x8698622df803a440L,
19627         0x2b5862368fe2f4dcL } },
19628     /* 12 << 189 */
19629     { { 0xbbcc00c756b95bceL,0x5ec03906616da680L,0x79162ee672214252L,
19630         0x43132b6386a892d2L },
19631       { 0x4bdd3ff22f3263bfL,0xd5b3733c9cd0a142L,0x592eaa8244415ccbL,
19632         0x663e89248d5474eaL } },
19633     /* 13 << 189 */
19634     { { 0x8058a25e5236344eL,0x82e8df9dbda76ee6L,0xdcf6efd811cc3d22L,
19635         0x00089cda3b4ab529L },
19636       { 0x91d3a071bd38a3dbL,0x4ea97fc0ef72b925L,0x0c9fc15bea3edf75L,
19637         0x5a6297cda4348ed3L } },
19638     /* 14 << 189 */
19639     { { 0x0d38ab35ce7c42d4L,0x9fd493ef82feab10L,0x46056b6d82111b45L,
19640         0xda11dae173efc5c3L },
19641       { 0xdc7402785545a7fbL,0xbdb2601c40d507e6L,0x121dfeeb7066fa58L,
19642         0x214369a839ae8c2aL } },
19643     /* 15 << 189 */
19644     { { 0x195709cb06e0956cL,0x4c9d254f010cd34bL,0xf51e13f70471a532L,
19645         0xe19d67911e73054dL },
19646       { 0xf702a628db5c7be3L,0xc7141218b24dde05L,0xdc18233cf29b2e2eL,
19647         0x3a6bd1e885342dbaL } },
19648     /* 16 << 189 */
19649     { { 0x3f747fa0b311898cL,0xe2a272e4cd0eac65L,0x4bba5851f914d0bcL,
19650         0x7a1a9660c4a43ee3L },
19651       { 0xe5a367cea1c8cde9L,0x9d958ba97271abe3L,0xf3ff7eb63d1615cdL,
19652         0xa2280dcef5ae20b0L } },
19653     /* 17 << 189 */
19654     { { 0x56dba5c1cf640147L,0xea5a2e3d5e83d118L,0x04cd6b6dda24c511L,
19655         0x1c0f4671e854d214L },
19656       { 0x91a6b7a969565381L,0xdc966240decf1f5bL,0x1b22d21cfcf5d009L,
19657         0x2a05f6419021dbd5L } },
19658     /* 18 << 189 */
19659     { { 0x8c0ed566d4312483L,0x5179a95d643e216fL,0xcc185fec17044493L,
19660         0xb306333954991a21L },
19661       { 0xd801ecdb0081a726L,0x0149b0c64fa89bbbL,0xafe9065a4391b6b9L,
19662         0xedc92786d633f3a3L } },
19663     /* 19 << 189 */
19664     { { 0xe408c24aae6a8e13L,0x85833fde9f3897abL,0x43800e7ed81a0715L,
19665         0xde08e346b44ffc5fL },
19666       { 0x7094184ccdeff2e0L,0x49f9387b165eaed1L,0x635d6129777c468aL,
19667         0x8c0dcfd1538c2dd8L } },
19668     /* 20 << 189 */
19669     { { 0xd6d9d9e37a6a308bL,0x623758304c2767d3L,0x874a8bc6f38cbeb6L,
19670         0xd94d3f1accb6fd9eL },
19671       { 0x92a9735bba21f248L,0x272ad0e56cd1efb0L,0x7437b69c05b03284L,
19672         0xe7f047026948c225L } },
19673     /* 21 << 189 */
19674     { { 0x8a56c04acba2ececL,0x0c181270e3a73e41L,0x6cb34e9d03e93725L,
19675         0xf77c8713496521a9L },
19676       { 0x94569183fa7f9f90L,0xf2e7aa4c8c9707adL,0xced2c9ba26c1c9a3L,
19677         0x9109fe9640197507L } },
19678     /* 22 << 189 */
19679     { { 0x9ae868a9e9adfe1cL,0x3984403d314e39bbL,0xb5875720f2fe378fL,
19680         0x33f901e0ba44a628L },
19681       { 0xea1125fe3652438cL,0xae9ec4e69dd1f20bL,0x1e740d9ebebf7fbdL,
19682         0x6dbd3ddc42dbe79cL } },
19683     /* 23 << 189 */
19684     { { 0x62082aecedd36776L,0xf612c478e9859039L,0xa493b201032f7065L,
19685         0xebd4d8f24ff9b211L },
19686       { 0x3f23a0aaaac4cb32L,0xea3aadb715ed4005L,0xacf17ea4afa27e63L,
19687         0x56125c1ac11fd66cL } },
19688     /* 24 << 189 */
19689     { { 0x266344a43794f8dcL,0xdcca923a483c5c36L,0x2d6b6bbf3f9d10a0L,
19690         0xb320c5ca81d9bdf3L },
19691       { 0x620e28ff47b50a95L,0x933e3b01cef03371L,0xf081bf8599100153L,
19692         0x183be9a0c3a8c8d6L } },
19693     /* 25 << 189 */
19694     { { 0x4e3ddc5ad6bbe24dL,0xc6c7463053843795L,0x78193dd765ec2d4cL,
19695         0xb8df26cccd3c89b2L },
19696       { 0x98dbe3995a483f8dL,0x72d8a9577dd3313aL,0x65087294ab0bd375L,
19697         0xfcd892487c259d16L } },
19698     /* 26 << 189 */
19699     { { 0x8a9443d77613aa81L,0x8010080085fe6584L,0x70fc4dbc7fb10288L,
19700         0xf58280d3e86beee8L },
19701       { 0x14fdd82f7c978c38L,0xdf1204c10de44d7bL,0xa08a1c844160252fL,
19702         0x591554cac17646a5L } },
19703     /* 27 << 189 */
19704     { { 0x214a37d6a05bd525L,0x48d5f09b07957b3cL,0x0247cdcbd7109bc9L,
19705         0x40f9e4bb30599ce7L },
19706       { 0xc325fa03f46ad2ecL,0x00f766cfc3e3f9eeL,0xab556668d43a4577L,
19707         0x68d30a613ee03b93L } },
19708     /* 28 << 189 */
19709     { { 0x7ddc81ea77b46a08L,0xcf5a6477c7480699L,0x43a8cb346633f683L,
19710         0x1b867e6b92363c60L },
19711       { 0x439211141f60558eL,0xcdbcdd632f41450eL,0x7fc04601cc630e8bL,
19712         0xea7c66d597038b43L } },
19713     /* 29 << 189 */
19714     { { 0x7259b8a504e99fd8L,0x98a8dd124785549aL,0x0e459a7c840552e1L,
19715         0xcdfcf4d04bb0909eL },
19716       { 0x34a86db253758da7L,0xe643bb83eac997e1L,0x96400bd7530c5b7eL,
19717         0x9f97af87b41c8b52L } },
19718     /* 30 << 189 */
19719     { { 0x34fc8820fbeee3f9L,0x93e5349049091afdL,0x764b9be59a31f35cL,
19720         0x71f3786457e3d924L },
19721       { 0x02fb34e0943aa75eL,0xa18c9c58ab8ff6e4L,0x080f31b133cf0d19L,
19722         0x5c9682db083518a7L } },
19723     /* 31 << 189 */
19724     { { 0x873d4ca6b709c3deL,0x64a842623575b8f0L,0x6275da1f020154bbL,
19725         0x97678caad17cf1abL },
19726       { 0x8779795f951a95c3L,0xdd35b16350fccc08L,0x3270962733d8f031L,
19727         0x3c5ab10a498dd85cL } },
19728     /* 32 << 189 */
19729     { { 0xb6c185c341dca566L,0x7de7fedad8622aa3L,0x99e84d92901b6dfbL,
19730         0x30a02b0e7c4ad288L },
19731       { 0xc7c81daa2fd3cf36L,0xd1319547df89e59fL,0xb2be8184cd496733L,
19732         0xd5f449eb93d3412bL } },
19733     /* 33 << 189 */
19734     { { 0x7ea41b1b25fe531dL,0xf97974326a1d5646L,0x86067f722bde501aL,
19735         0xf91481c00c85e89cL },
19736       { 0xca8ee465f8b05bc6L,0x1844e1cf02e83cdaL,0xca82114ab4dbe33bL,
19737         0x0f9f87694eabfde2L } },
19738     /* 34 << 189 */
19739     { { 0x4936b1c038b27fe2L,0x63b6359baba402dfL,0x40c0ea2f656bdbabL,
19740         0x9c992a896580c39cL },
19741       { 0x600e8f152a60aed1L,0xeb089ca4e0bf49dfL,0x9c233d7d2d42d99aL,
19742         0x648d3f954c6bc2faL } },
19743     /* 35 << 189 */
19744     { { 0xdcc383a8e1add3f3L,0xf42c0c6a4f64a348L,0x2abd176f0030dbdbL,
19745         0x4de501a37d6c215eL },
19746       { 0x4a107c1f4b9a64bcL,0xa77f0ad32496cd59L,0xfb78ac627688dffbL,
19747         0x7025a2ca67937d8eL } },
19748     /* 36 << 189 */
19749     { { 0xfde8b2d1d1a8f4e7L,0xf5b3da477354927cL,0xe48606a3d9205735L,
19750         0xac477cc6e177b917L },
19751       { 0xfb1f73d2a883239aL,0xe12572f6cc8b8357L,0x9d355e9cfb1f4f86L,
19752         0x89b795f8d9f3ec6eL } },
19753     /* 37 << 189 */
19754     { { 0x27be56f1b54398dcL,0x1890efd73fedeed5L,0x62f77f1f9c6d0140L,
19755         0x7ef0e314596f0ee4L },
19756       { 0x50ca6631cc61dab3L,0x4a39801df4866e4fL,0x66c8d032ae363b39L,
19757         0x22c591e52ead66aaL } },
19758     /* 38 << 189 */
19759     { { 0x954ba308de02a53eL,0x2a6c060fd389f357L,0xe6cfcde8fbf40b66L,
19760         0x8e02fc56c6340ce1L },
19761       { 0xe495779573adb4baL,0x7b86122ca7b03805L,0x63f835120c8e6fa6L,
19762         0x83660ea0057d7804L } },
19763     /* 39 << 189 */
19764     { { 0xbad7910521ba473cL,0xb6c50beeded5389dL,0xee2caf4daa7c9bc0L,
19765         0xd97b8de48c4e98a7L },
19766       { 0xa9f63e70ab3bbddbL,0x3898aabf2597815aL,0x7659af89ac15b3d9L,
19767         0xedf7725b703ce784L } },
19768     /* 40 << 189 */
19769     { { 0x25470fabe085116bL,0x04a4337587285310L,0x4e39187ee2bfd52fL,
19770         0x36166b447d9ebc74L },
19771       { 0x92ad433cfd4b322cL,0x726aa817ba79ab51L,0xf96eacd8c1db15ebL,
19772         0xfaf71e910476be63L } },
19773     /* 41 << 189 */
19774     { { 0xdd69a640641fad98L,0xb799591829622559L,0x03c6daa5de4199dcL,
19775         0x92cadc97ad545eb4L },
19776       { 0x1028238b256534e4L,0x73e80ce68595409aL,0x690d4c66d05dc59bL,
19777         0xc95f7b8f981dee80L } },
19778     /* 42 << 189 */
19779     { { 0xf4337014d856ac25L,0x441bd9ddac524dcaL,0x640b3d855f0499f5L,
19780         0x39cf84a9d5fda182L },
19781       { 0x04e7b055b2aa95a0L,0x29e33f0a0ddf1860L,0x082e74b5423f6b43L,
19782         0x217edeb90aaa2b0fL } },
19783     /* 43 << 189 */
19784     { { 0x58b83f3583cbea55L,0xc485ee4dbc185d70L,0x833ff03b1e5f6992L,
19785         0xb5b9b9cccf0c0dd5L },
19786       { 0x7caaee8e4e9e8a50L,0x462e907b6269dafdL,0x6ed5cee9fbe791c6L,
19787         0x68ca3259ed430790L } },
19788     /* 44 << 189 */
19789     { { 0x2b72bdf213b5ba88L,0x60294c8a35ef0ac4L,0x9c3230ed19b99b08L,
19790         0x560fff176c2589aaL },
19791       { 0x552b8487d6770374L,0xa373202d9a56f685L,0xd3e7f90745f175d9L,
19792         0x3c2f315fd080d810L } },
19793     /* 45 << 189 */
19794     { { 0x1130e9dd7b9520e8L,0xc078f9e20af037b5L,0x38cd2ec71e9c104cL,
19795         0x0f684368c472fe92L },
19796       { 0xd3f1b5ed6247e7efL,0xb32d33a9396dfe21L,0x46f59cf44a9aa2c2L,
19797         0x69cd5168ff0f7e41L } },
19798     /* 46 << 189 */
19799     { { 0x3f59da0f4b3234daL,0xcf0b0235b4579ebeL,0x6d1cbb256d2476c7L,
19800         0x4f0837e69dc30f08L },
19801       { 0x9a4075bb906f6e98L,0x253bb434c761e7d1L,0xde2e645f6e73af10L,
19802         0xb89a40600c5f131cL } },
19803     /* 47 << 189 */
19804     { { 0xd12840c5b8cc037fL,0x3d093a5b7405bb47L,0x6202c253206348b8L,
19805         0xbf5d57fcc55a3ca7L },
19806       { 0x89f6c90c8c3bef48L,0x23ac76235a0a960aL,0xdfbd3d6b552b42abL,
19807         0x3ef22458132061f6L } },
19808     /* 48 << 189 */
19809     { { 0xd74e9bdac97e6516L,0x88779360c230f49eL,0xa6ec1de31e74ea49L,
19810         0x581dcee53fb645a2L },
19811       { 0xbaef23918f483f14L,0x6d2dddfcd137d13bL,0x54cde50ed2743a42L,
19812         0x89a34fc5e4d97e67L } },
19813     /* 49 << 189 */
19814     { { 0x13f1f5b312e08ce5L,0xa80540b8a7f0b2caL,0x854bcf7701982805L,
19815         0xb8653ffd233bea04L },
19816       { 0x8e7b878702b0b4c9L,0x2675261f9acb170aL,0x061a9d90930c14e5L,
19817         0xb59b30e0def0abeaL } },
19818     /* 50 << 189 */
19819     { { 0x1dc19ea60200ec7dL,0xb6f4a3f90bce132bL,0xb8d5de90f13e27e0L,
19820         0xbaee5ef01fade16fL },
19821       { 0x6f406aaae4c6cf38L,0xab4cfe06d1369815L,0x0dcffe87efd550c6L,
19822         0x9d4f59c775ff7d39L } },
19823     /* 51 << 189 */
19824     { { 0xb02553b151deb6adL,0x812399a4b1877749L,0xce90f71fca6006e1L,
19825         0xc32363a6b02b6e77L },
19826       { 0x02284fbedc36c64dL,0x86c81e31a7e1ae61L,0x2576c7e5b909d94aL,
19827         0x8b6f7d02818b2bb0L } },
19828     /* 52 << 189 */
19829     { { 0xeca3ed0756faa38aL,0xa3790e6c9305bb54L,0xd784eeda7bc73061L,
19830         0xbd56d3696dd50614L },
19831       { 0xd6575949229a8aa9L,0xdcca8f474595ec28L,0x814305c106ab4fe6L,
19832         0xc8c3976824f43f16L } },
19833     /* 53 << 189 */
19834     { { 0xe2a45f36523f2b36L,0x995c6493920d93bbL,0xf8afdab790f1632bL,
19835         0x79ebbecd1c295954L },
19836       { 0xc7bb3ddb79592f48L,0x67216a7b5f88e998L,0xd91f098bbc01193eL,
19837         0xf7d928a5b1db83fcL } },
19838     /* 54 << 189 */
19839     { { 0x55e38417e991f600L,0x2a91113e2981a934L,0xcbc9d64806b13bdeL,
19840         0xb011b6ac0755ff44L },
19841       { 0x6f4cb518045ec613L,0x522d2d31c2f5930aL,0x5acae1af382e65deL,
19842         0x5764306727bc966fL } },
19843     /* 55 << 189 */
19844     { { 0x5e12705d1c7193f0L,0xf0f32f473be8858eL,0x785c3d7d96c6dfc7L,
19845         0xd75b4a20bf31795dL },
19846       { 0x91acf17b342659d4L,0xe596ea3444f0378fL,0x4515708fce52129dL,
19847         0x17387e1e79f2f585L } },
19848     /* 56 << 189 */
19849     { { 0x72cfd2e949dee168L,0x1ae052233e2af239L,0x009e75be1d94066aL,
19850         0x6cca31c738abf413L },
19851       { 0xb50bd61d9bc49908L,0x4a9b4a8cf5e2bc1eL,0xeb6cc5f7946f83acL,
19852         0x27da93fcebffab28L } },
19853     /* 57 << 189 */
19854     { { 0xea314c964821c8c5L,0x8de49deda83c15f4L,0x7a64cf207af33004L,
19855         0x45f1bfebc9627e10L },
19856       { 0x878b062654b9df60L,0x5e4fdc3ca95c0b33L,0xe54a37cac2035d8eL,
19857         0x9087cda980f20b8cL } },
19858     /* 58 << 189 */
19859     { { 0x36f61c238319ade4L,0x766f287ade8cfdf8L,0x48821948346f3705L,
19860         0x49a7b85316e4f4a2L },
19861       { 0xb9b3f8a75cedadfdL,0x8f5628158db2a815L,0xc0b7d55401f68f95L,
19862         0x12971e27688a208eL } },
19863     /* 59 << 189 */
19864     { { 0xc9f8b696d0ff34fcL,0x20824de21222718cL,0x7213cf9f0c95284dL,
19865         0xe2ad741bdc158240L },
19866       { 0x0ee3a6df54043ccfL,0x16ff479bd84412b3L,0xf6c74ee0dfc98af0L,
19867         0xa78a169f52fcd2fbL } },
19868     /* 60 << 189 */
19869     { { 0xd8ae874699c930e9L,0x1d33e85849e117a5L,0x7581fcb46624759fL,
19870         0xde50644f5bedc01dL },
19871       { 0xbeec5d00caf3155eL,0x672d66acbc73e75fL,0x86b9d8c6270b01dbL,
19872         0xd249ef8350f55b79L } },
19873     /* 61 << 189 */
19874     { { 0x6131d6d473978fe3L,0xcc4e4542754b00a1L,0x4e05df0557dfcfe9L,
19875         0x94b29cdd51ef6bf0L },
19876       { 0xe4530cff9bc7edf2L,0x8ac236fdd3da65f3L,0x0faf7d5fc8eb0b48L,
19877         0x4d2de14c660eb039L } },
19878     /* 62 << 189 */
19879     { { 0xc006bba760430e54L,0x10a2d0d6da3289abL,0x9c037a5dd7979c59L,
19880         0x04d1f3d3a116d944L },
19881       { 0x9ff224738a0983cdL,0x28e25b38c883cabbL,0xe968dba547a58995L,
19882         0x2c80b505774eebdfL } },
19883     /* 63 << 189 */
19884     { { 0xee763b714a953bebL,0x502e223f1642e7f6L,0x6fe4b64161d5e722L,
19885         0x9d37c5b0dbef5316L },
19886       { 0x0115ed70f8330bc7L,0x139850e675a72789L,0x27d7faecffceccc2L,
19887         0x3016a8604fd9f7f6L } },
19888     /* 64 << 189 */
19889     { { 0xc492ec644cd8f64cL,0x58a2d790279d7b51L,0x0ced1fc51fc75256L,
19890         0x3e658aed8f433017L },
19891       { 0x0b61942e05da59ebL,0xba3d60a30ddc3722L,0x7c311cd1742e7f87L,
19892         0x6473ffeef6b01b6eL } },
19893     /* 0 << 196 */
19894     { { 0x00, 0x00, 0x00, 0x00 },
19895       { 0x00, 0x00, 0x00, 0x00 } },
19896     /* 1 << 196 */
19897     { { 0x8303604f692ac542L,0xf079ffe1227b91d3L,0x19f63e6315aaf9bdL,
19898         0xf99ee565f1f344fbL },
19899       { 0x8a1d661fd6219199L,0x8c883bc6d48ce41cL,0x1065118f3c74d904L,
19900         0x713889ee0faf8b1bL } },
19901     /* 2 << 196 */
19902     { { 0x972b3f8f81a1b3beL,0x4f3ce145ce2764a0L,0xe2d0f1cc28c4f5f7L,
19903         0xdeee0c0dc7f3985bL },
19904       { 0x7df4adc0d39e25c3L,0x40619820c467a080L,0x440ebc9361cf5a58L,
19905         0x527729a6422ad600L } },
19906     /* 3 << 196 */
19907     { { 0xca6c0937b1b76ba6L,0x1a2eab854d2026dcL,0xb1715e1519d9ae0aL,
19908         0xf1ad9199bac4a026L },
19909       { 0x35b3dfb807ea7b0eL,0xedf5496f3ed9eb89L,0x8932e5ff2d6d08abL,
19910         0xf314874e25bd2731L } },
19911     /* 4 << 196 */
19912     { { 0xefb26a753f73f449L,0x1d1c94f88d44fc79L,0x49f0fbc53bc0dc4dL,
19913         0xb747ea0b3698a0d0L },
19914       { 0x5218c3fe228d291eL,0x35b804b543c129d6L,0xfac859b8d1acc516L,
19915         0x6c10697d95d6e668L } },
19916     /* 5 << 196 */
19917     { { 0xc38e438f0876fd4eL,0x45f0c30783d2f383L,0x203cc2ecb10934cbL,
19918         0x6a8f24392c9d46eeL },
19919       { 0xf16b431b65ccde7bL,0x41e2cd1827e76a6fL,0xb9c8cf8f4e3484d7L,
19920         0x64426efd8315244aL } },
19921     /* 6 << 196 */
19922     { { 0x1c0a8e44fc94dea3L,0x34c8cdbfdad6a0b0L,0x919c384004113cefL,
19923         0xfd32fba415490ffaL },
19924       { 0x58d190f6795dcfb7L,0xfef01b0383588bafL,0x9e6d1d63ca1fc1c0L,
19925         0x53173f96f0a41ac9L } },
19926     /* 7 << 196 */
19927     { { 0x2b1d402aba16f73bL,0x2fb310148cf9b9fcL,0x2d51e60e446ef7bfL,
19928         0xc731021bb91e1745L },
19929       { 0x9d3b47244fee99d4L,0x4bca48b6fac5c1eaL,0x70f5f514bbea9af7L,
19930         0x751f55a5974c283aL } },
19931     /* 8 << 196 */
19932     { { 0x6e30251acb452fdbL,0x31ee696550f30650L,0xb0b3e508933548d9L,
19933         0xb8949a4ff4b0ef5bL },
19934       { 0x208b83263c88f3bdL,0xab147c30db1d9989L,0xed6515fd44d4df03L,
19935         0x17a12f75e72eb0c5L } },
19936     /* 9 << 196 */
19937     { { 0x3b59796d36cf69dbL,0x1219eee956670c18L,0xfe3341f77a070d8eL,
19938         0x9b70130ba327f90cL },
19939       { 0x36a324620ae18e0eL,0x2021a62346c0a638L,0x251b5817c62eb0d4L,
19940         0x87bfbcdf4c762293L } },
19941     /* 10 << 196 */
19942     { { 0xf78ab505cdd61d64L,0x8c7a53fcc8c18857L,0xa653ce6f16147515L,
19943         0x9c923aa5ea7d52d5L },
19944       { 0xc24709cb5c18871fL,0x7d53bec873b3cc74L,0x59264afffdd1d4c4L,
19945         0x5555917e240da582L } },
19946     /* 11 << 196 */
19947     { { 0xcae8bbda548f5a0eL,0x1910eaba3bbfbbe1L,0xae5796857677afc3L,
19948         0x49ea61f173ff0b5cL },
19949       { 0x786554784f7c3922L,0x95d337cd20c68eefL,0x68f1e1e5df779ab9L,
19950         0x14b491b0b5cf69a8L } },
19951     /* 12 << 196 */
19952     { { 0x7a6cbbe028e3fe89L,0xe7e1fee4c5aac0ebL,0x7f47eda5697e5140L,
19953         0x4f450137b454921fL },
19954       { 0xdb625f8495cd8185L,0x74be0ba1cdb2e583L,0xaee4fd7cdd5e6de4L,
19955         0x4251437de8101739L } },
19956     /* 13 << 196 */
19957     { { 0x686d72a0ac620366L,0x4be3fb9cb6d59344L,0x6e8b44e7a1eb75b9L,
19958         0x84e39da391a5c10cL },
19959       { 0x37cc1490b38f0409L,0x029519432c2ade82L,0x9b6887831190a2d8L,
19960         0x25627d14231182baL } },
19961     /* 14 << 196 */
19962     { { 0x6eb550aa658a6d87L,0x1405aaa7cf9c7325L,0xd147142e5c8748c9L,
19963         0x7f637e4f53ede0e0L },
19964       { 0xf8ca277614ffad2cL,0xe58fb1bdbafb6791L,0x17158c23bf8f93fcL,
19965         0x7f15b3730a4a4655L } },
19966     /* 15 << 196 */
19967     { { 0x39d4add2d842ca72L,0xa71e43913ed96305L,0x5bb09cbe6700be14L,
19968         0x68d69d54d8befcf6L },
19969       { 0xa45f536737183bcfL,0x7152b7bb3370dff7L,0xcf887baabf12525bL,
19970         0xe7ac7bddd6d1e3cdL } },
19971     /* 16 << 196 */
19972     { { 0x25914f7881fdad90L,0xcf638f560d2cf6abL,0xb90bc03fcc054de5L,
19973         0x932811a718b06350L },
19974       { 0x2f00b3309bbd11ffL,0x76108a6fb4044974L,0x801bb9e0a851d266L,
19975         0x0dd099bebf8990c1L } },
19976     /* 17 << 196 */
19977     { { 0x58c5aaaaabe32986L,0x0fe9dd2a50d59c27L,0x84951ff48d307305L,
19978         0x6c23f82986529b78L },
19979       { 0x50bb22180b136a79L,0x7e2174de77a20996L,0x6f00a4b9c0bb4da6L,
19980         0x89a25a17efdde8daL } },
19981     /* 18 << 196 */
19982     { { 0xf728a27ec11ee01dL,0xf900553ae5f10dfbL,0x189a83c802ec893cL,
19983         0x3ca5bdc123f66d77L },
19984       { 0x9878153797eada9fL,0x59c50ab310256230L,0x346042d9323c69b3L,
19985         0x1b715a6d2c460449L } },
19986     /* 19 << 196 */
19987     { { 0xa41dd4766ae06e0bL,0xcdd7888e9d42e25fL,0x0f395f7456b25a20L,
19988         0xeadfe0ae8700e27eL },
19989       { 0xb09d52a969950093L,0x3525d9cb327f8d40L,0xb8235a9467df886aL,
19990         0x77e4b0dd035faec2L } },
19991     /* 20 << 196 */
19992     { { 0x115eb20a517d7061L,0x77fe34336c2df683L,0x6870ddc7cdc6fc67L,
19993         0xb16105880b87de83L },
19994       { 0x343584cad9c4ddbeL,0xb3164f1c3d754be2L,0x0731ed3ac1e6c894L,
19995         0x26327dec4f6b904cL } },
19996     /* 21 << 196 */
19997     { { 0x9d49c6de97b5cd32L,0x40835daeb5eceecdL,0xc66350edd9ded7feL,
19998         0x8aeebb5c7a678804L },
19999       { 0x51d42fb75b8ee9ecL,0xd7a17bdd8e3ca118L,0x40d7511a2ef4400eL,
20000         0xc48990ac875a66f4L } },
20001     /* 22 << 196 */
20002     { { 0x8de07d2a2199e347L,0xbee755562a39e051L,0x56918786916e51dcL,
20003         0xeb1913134a2d89ecL },
20004       { 0x6679610d37d341edL,0x434fbb4156d51c2bL,0xe54b7ee7d7492dbaL,
20005         0xaa33a79a59021493L } },
20006     /* 23 << 196 */
20007     { { 0x49fc5054e4bd6d3dL,0x09540f045ab551d0L,0x8acc90854942d3a6L,
20008         0x231af02f2d28323bL },
20009       { 0x93458cac0992c163L,0x1fef8e71888e3bb4L,0x27578da5be8c268cL,
20010         0xcc8be792e805ec00L } },
20011     /* 24 << 196 */
20012     { { 0x29267baec61c3855L,0xebff429d58c1fd3bL,0x22d886c08c0b93b8L,
20013         0xca5e00b22ddb8953L },
20014       { 0xcf330117c3fed8b7L,0xd49ac6fa819c01f6L,0x6ddaa6bd3c0fbd54L,
20015         0x917430688049a2cfL } },
20016     /* 25 << 196 */
20017     { { 0xd67f981eaff2ef81L,0xc3654d352818ae80L,0x81d050441b2aa892L,
20018         0x2db067bf3d099328L },
20019       { 0xe7c79e86703dcc97L,0xe66f9b37e133e215L,0xcdf119a6e39a7a5cL,
20020         0x47c60de3876f1b61L } },
20021     /* 26 << 196 */
20022     { { 0x6e405939d860f1b2L,0x3e9a1dbcf5ed4d4aL,0x3f23619ec9b6bcbdL,
20023         0x5ee790cf734e4497L },
20024       { 0xf0a834b15bdaf9bbL,0x02cedda74ca295f0L,0x4619aa2bcb8e378cL,
20025         0xe5613244cc987ea4L } },
20026     /* 27 << 196 */
20027     { { 0x0bc022cc76b23a50L,0x4a2793ad0a6c21ceL,0x3832878089cac3f5L,
20028         0x29176f1bcba26d56L },
20029       { 0x062961874f6f59ebL,0x86e9bca98bdc658eL,0x2ca9c4d357e30402L,
20030         0x5438b216516a09bbL } },
20031     /* 28 << 196 */
20032     { { 0x0a6a063c7672765aL,0x37a3ce640547b9bfL,0x42c099c898b1a633L,
20033         0xb5ab800d05ee6961L },
20034       { 0xf1963f5911a5acd6L,0xbaee615746201063L,0x36d9a649a596210aL,
20035         0xaed043631ba7138cL } },
20036     /* 29 << 196 */
20037     { { 0xcf817d1ca4a82b76L,0x5586960ef3806be9L,0x7ab67c8909dc6bb5L,
20038         0x52ace7a0114fe7ebL },
20039       { 0xcd987618cbbc9b70L,0x4f06fd5a604ca5e1L,0x90af14ca6dbde133L,
20040         0x1afe4322948a3264L } },
20041     /* 30 << 196 */
20042     { { 0xa70d2ca6c44b2c6cL,0xab7267990ef87dfeL,0x310f64dc2e696377L,
20043         0x49b42e684c8126a0L },
20044       { 0x0ea444c3cea0b176L,0x53a8ddf7cb269182L,0xf3e674ebbbba9dcbL,
20045         0x0d2878a8d8669d33L } },
20046     /* 31 << 196 */
20047     { { 0x04b935d5d019b6a3L,0xbb5cf88e406f1e46L,0xa1912d165b57c111L,
20048         0x9803fc2119ebfd78L },
20049       { 0x4f231c9ec07764a9L,0xd93286eeb75bd055L,0x83a9457d8ee6c9deL,
20050         0x046959156087ec90L } },
20051     /* 32 << 196 */
20052     { { 0x14c6dd8a58d6cd46L,0x9cb633b58e6634d2L,0xc1305047f81bc328L,
20053         0x12ede0e226a177e5L },
20054       { 0x332cca62065a6f4fL,0xc3a47ecd67be487bL,0x741eb1870f47ed1cL,
20055         0x99e66e58e7598b14L } },
20056     /* 33 << 196 */
20057     { { 0x6f0544ca63d0ff12L,0xe5efc784b610a05fL,0xf72917b17cad7b47L,
20058         0x3ff6ea20f2cac0c0L },
20059       { 0xcc23791bf21db8b7L,0x7dac70b1d7d93565L,0x682cda1d694bdaadL,
20060         0xeb88bb8c1023516dL } },
20061     /* 34 << 196 */
20062     { { 0xc4c634b4dfdbeb1bL,0x22f5ca72b4ee4deaL,0x1045a368e6524821L,
20063         0xed9e8a3f052b18b2L },
20064       { 0x9b7f2cb1b961f49aL,0x7fee2ec17b009670L,0x350d875422507a6dL,
20065         0x561bd7114db55f1dL } },
20066     /* 35 << 196 */
20067     { { 0x4c189ccc320bbcafL,0x568434cfdf1de48cL,0x6af1b00e0fa8f128L,
20068         0xf0ba9d028907583cL },
20069       { 0x735a400432ff9f60L,0x3dd8e4b6c25dcf33L,0xf2230f1642c74cefL,
20070         0xd8117623013fa8adL } },
20071     /* 36 << 196 */
20072     { { 0x36822876f51fe76eL,0x8a6811cc11d62589L,0xc3fc7e6546225718L,
20073         0xb7df2c9fc82fdbcdL },
20074       { 0x3b1d4e52dd7b205bL,0xb695947847a2e414L,0x05e4d793efa91148L,
20075         0xb47ed446fd2e9675L } },
20076     /* 37 << 196 */
20077     { { 0x1a7098b904c9d9bfL,0x661e28811b793048L,0xb1a16966b01ee461L,
20078         0xbc5213082954746fL },
20079       { 0xc909a0fc2477de50L,0xd80bb41c7dbd51efL,0xa85be7ec53294905L,
20080         0x6d465b1883958f97L } },
20081     /* 38 << 196 */
20082     { { 0x16f6f330fb6840fdL,0xfaaeb2143401e6c8L,0xaf83d30fccb5b4f8L,
20083         0x22885739266dec4bL },
20084       { 0x51b4367c7bc467dfL,0x926562e3d842d27aL,0xdfcb66140fea14a6L,
20085         0xeb394daef2734cd9L } },
20086     /* 39 << 196 */
20087     { { 0x3eeae5d211c0be98L,0xb1e6ed11814e8165L,0x191086bce52bce1cL,
20088         0x14b74cc6a75a04daL },
20089       { 0x63cf11868c060985L,0x071047de2dbd7f7cL,0x4e433b8bce0942caL,
20090         0xecbac447d8fec61dL } },
20091     /* 40 << 196 */
20092     { { 0x8f0ed0e2ebf3232fL,0xfff80f9ec52a2eddL,0xad9ab43375b55fdbL,
20093         0x73ca7820e42e0c11L },
20094       { 0x6dace0a0e6251b46L,0x89bc6b5c4c0d932dL,0x3438cd77095da19aL,
20095         0x2f24a9398d48bdfbL } },
20096     /* 41 << 196 */
20097     { { 0x99b47e46766561b7L,0x736600e60ed0322aL,0x06a47cb1638e1865L,
20098         0x927c1c2dcb136000L },
20099       { 0x295423370cc5df69L,0x99b37c0209d649a9L,0xc5f0043c6aefdb27L,
20100         0x6cdd99871be95c27L } },
20101     /* 42 << 196 */
20102     { { 0x69850931390420d2L,0x299c40ac0983efa4L,0x3a05e778af39aeadL,
20103         0x8427440843a45193L },
20104       { 0x6bcd0fb991a711a0L,0x461592c89f52ab17L,0xb49302b4da3c6ed6L,
20105         0xc51fddc7330d7067L } },
20106     /* 43 << 196 */
20107     { { 0x94babeb6da50d531L,0x521b840da6a7b9daL,0x5305151e404bdc89L,
20108         0x1bcde201d0d07449L },
20109       { 0xf427a78b3b76a59aL,0xf84841ce07791a1bL,0xebd314bebf91ed1cL,
20110         0x8e61d34cbf172943L } },
20111     /* 44 << 196 */
20112     { { 0x1d5dc4515541b892L,0xb186ee41fc9d9e54L,0x9d9f345ed5bf610dL,
20113         0x3e7ba65df6acca9fL },
20114       { 0x9dda787aa8369486L,0x09f9dab78eb5ba53L,0x5afb2033d6481bc3L,
20115         0x76f4ce30afa62104L } },
20116     /* 45 << 196 */
20117     { { 0xa8fa00cff4f066b5L,0x89ab5143461dafc2L,0x44339ed7a3389998L,
20118         0x2ff862f1bc214903L },
20119       { 0x2c88f985b05556e3L,0xcd96058e3467081eL,0x7d6a4176edc637eaL,
20120         0xe1743d0936a5acdcL } },
20121     /* 46 << 196 */
20122     { { 0x66fd72e27eb37726L,0xf7fa264e1481a037L,0x9fbd3bde45f4aa79L,
20123         0xed1e0147767c3e22L },
20124       { 0x7621f97982e7abe2L,0x19eedc7245f633f8L,0xe69b155e6137bf3aL,
20125         0xa0ad13ce414ee94eL } },
20126     /* 47 << 196 */
20127     { { 0x93e3d5241c0e651aL,0xab1a6e2a02ce227eL,0xe7af17974ab27ecaL,
20128         0x245446debd444f39L },
20129       { 0x59e22a2156c07613L,0x43deafcef4275498L,0x10834ccb67fd0946L,
20130         0xa75841e547406edfL } },
20131     /* 48 << 196 */
20132     { { 0xebd6a6777b0ac93dL,0xa6e37b0d78f5e0d7L,0x2516c09676f5492bL,
20133         0x1e4bf8889ac05f3aL },
20134       { 0xcdb42ce04df0ba2bL,0x935d5cfd5062341bL,0x8a30333382acac20L,
20135         0x429438c45198b00eL } },
20136     /* 49 << 196 */
20137     { { 0x1d083bc9049d33faL,0x58b82dda946f67ffL,0xac3e2db867a1d6a3L,
20138         0x62e6bead1798aac8L },
20139       { 0xfc85980fde46c58cL,0xa7f6937969c8d7beL,0x23557927837b35ecL,
20140         0x06a933d8e0790c0cL } },
20141     /* 50 << 196 */
20142     { { 0x827c0e9b077ff55dL,0x53977798bb26e680L,0x595308741d9cb54fL,
20143         0xcca3f4494aac53efL },
20144       { 0x11dc5c87a07eda0fL,0xc138bccffd6400c8L,0x549680d313e5da72L,
20145         0xc93eed824540617eL } },
20146     /* 51 << 196 */
20147     { { 0xfd3db1574d0b75c0L,0x9716eb426386075bL,0x0639605c817b2c16L,
20148         0x09915109f1e4f201L },
20149       { 0x35c9a9285cca6c3bL,0xb25f7d1a3505c900L,0xeb9f7d20630480c4L,
20150         0xc3c7b8c62a1a501cL } },
20151     /* 52 << 196 */
20152     { { 0x3f99183c5a1f8e24L,0xfdb118fa9dd255f0L,0xb9b18b90c27f62a6L,
20153         0xe8f732f7396ec191L },
20154       { 0x524a2d910be786abL,0x5d32adef0ac5a0f5L,0x9b53d4d69725f694L,
20155         0x032a76c60510ba89L } },
20156     /* 53 << 196 */
20157     { { 0x840391a3ebeb1544L,0x44b7b88c3ed73ac3L,0xd24bae7a256cb8b3L,
20158         0x7ceb151ae394cb12L },
20159       { 0xbd6b66d05bc1e6a8L,0xec70cecb090f07bfL,0x270644ed7d937589L,
20160         0xee9e1a3d5f1dccfeL } },
20161     /* 54 << 196 */
20162     { { 0xb0d40a84745b98d2L,0xda429a212556ed40L,0xf676eced85148cb9L,
20163         0x5a22d40cded18936L },
20164       { 0x3bc4b9e570e8a4ceL,0xbfd1445b9eae0379L,0xf23f2c0c1a0bd47eL,
20165         0xa9c0bb31e1845531L } },
20166     /* 55 << 196 */
20167     { { 0x9ddc4d600a4c3f6bL,0xbdfaad792c15ef44L,0xce55a2367f484accL,
20168         0x08653ca7055b1f15L },
20169       { 0x2efa8724538873a3L,0x09299e5dace1c7e7L,0x07afab66ade332baL,
20170         0x9be1fdf692dd71b7L } },
20171     /* 56 << 196 */
20172     { { 0xa49b5d595758b11cL,0x0b852893c8654f40L,0xb63ef6f452379447L,
20173         0xd4957d29105e690cL },
20174       { 0x7d484363646559b0L,0xf4a8273c49788a8eL,0xee406cb834ce54a9L,
20175         0x1e1c260ff86fda9bL } },
20176     /* 57 << 196 */
20177     { { 0xe150e228cf6a4a81L,0x1fa3b6a31b488772L,0x1e6ff110c5a9c15bL,
20178         0xc6133b918ad6aa47L },
20179       { 0x8ac5d55c9dffa978L,0xba1d1c1d5f3965f2L,0xf969f4e07732b52fL,
20180         0xfceecdb5a5172a07L } },
20181     /* 58 << 196 */
20182     { { 0xb0120a5f10f2b8f5L,0xc83a6cdf5c4c2f63L,0x4d47a491f8f9c213L,
20183         0xd9e1cce5d3f1bbd5L },
20184       { 0x0d91bc7caba7e372L,0xfcdc74c8dfd1a2dbL,0x05efa800374618e5L,
20185         0x1121696915a7925eL } },
20186     /* 59 << 196 */
20187     { { 0xd4c89823f6021c5dL,0x880d5e84eff14423L,0x6523bc5a6dcd1396L,
20188         0xd1acfdfc113c978bL },
20189       { 0xb0c164e8bbb66840L,0xf7f4301e72b58459L,0xc29ad4a6a638e8ecL,
20190         0xf5ab896146b78699L } },
20191     /* 60 << 196 */
20192     { { 0x9dbd79740e954750L,0x0121de8864f9d2c6L,0x2e597b42d985232eL,
20193         0x55b6c3c553451777L },
20194       { 0xbb53e547519cb9fbL,0xf134019f8428600dL,0x5a473176e081791aL,
20195         0x2f3e226335fb0c08L } },
20196     /* 61 << 196 */
20197     { { 0xb28c301773d273b0L,0xccd210767721ef9aL,0x054cc292b650dc39L,
20198         0x662246de6188045eL },
20199       { 0x904b52fa6b83c0d1L,0xa72df26797e9cd46L,0x886b43cd899725e4L,
20200         0x2b651688d849ff22L } },
20201     /* 62 << 196 */
20202     { { 0x60479b7902f34533L,0x5e354c140c77c148L,0xb4bb7581a8537c78L,
20203         0x188043d7efe1495fL },
20204       { 0x9ba12f428c1d5026L,0x2e0c8a2693d4aaabL,0xbdba7b8baa57c450L,
20205         0x140c9ad69bbdafefL } },
20206     /* 63 << 196 */
20207     { { 0x2067aa4225ac0f18L,0xf7b1295b04d1fbf3L,0x14829111a4b04824L,
20208         0x2ce3f19233bd5e91L },
20209       { 0x9c7a1d558f2e1b72L,0xfe932286302aa243L,0x497ca7b4d4be9554L,
20210         0xb8e821b8e0547a6eL } },
20211     /* 64 << 196 */
20212     { { 0xfb2838be67e573e0L,0x05891db94084c44bL,0x9131137396c1c2c5L,
20213         0x6aebfa3fd958444bL },
20214       { 0xac9cdce9e56e55c1L,0x7148ced32caa46d0L,0x2e10c7efb61fe8ebL,
20215         0x9fd835daff97cf4dL } },
20216     /* 0 << 203 */
20217     { { 0x00, 0x00, 0x00, 0x00 },
20218       { 0x00, 0x00, 0x00, 0x00 } },
20219     /* 1 << 203 */
20220     { { 0xa36da109081e9387L,0xfb9780d78c935828L,0xd5940332e540b015L,
20221         0xc9d7b51be0f466faL },
20222       { 0xfaadcd41d6d9f671L,0xba6c1e28b1a2ac17L,0x066a7833ed201e5fL,
20223         0x19d99719f90f462bL } },
20224     /* 2 << 203 */
20225     { { 0xf431f462060b5f61L,0xa56f46b47bd057c2L,0x348dca6c47e1bf65L,
20226         0x9a38783e41bcf1ffL },
20227       { 0x7a5d33a9da710718L,0x5a7799872e0aeaf6L,0xca87314d2d29d187L,
20228         0xfa0edc3ec687d733L } },
20229     /* 3 << 203 */
20230     { { 0x9df336216a31e09bL,0xde89e44dc1350e35L,0x292148714ca0cf52L,
20231         0xdf3796720b88a538L },
20232       { 0xc92a510a2591d61bL,0x79aa87d7585b447bL,0xf67db604e5287f77L,
20233         0x1697c8bf5efe7a80L } },
20234     /* 4 << 203 */
20235     { { 0x1c894849cb198ac7L,0xa884a93d0f264665L,0x2da964ef9b200678L,
20236         0x3c351b87009834e6L },
20237       { 0xafb2ef9fe2c4b44bL,0x580f6c473326790cL,0xb84805210b02264aL,
20238         0x8ba6f9e242a194e2L } },
20239     /* 5 << 203 */
20240     { { 0xfc87975f8fb54738L,0x3516078827c3ead3L,0x834116d2b74a085aL,
20241         0x53c99a73a62fe996L },
20242       { 0x87585be05b81c51bL,0x925bafa8be0852b7L,0x76a4fafda84d19a7L,
20243         0x39a45982585206d4L } },
20244     /* 6 << 203 */
20245     { { 0x499b6ab65eb03c0eL,0xf19b795472bc3fdeL,0xa86b5b9c6e3a80d2L,
20246         0xe43775086d42819fL },
20247       { 0xc1663650bb3ee8a3L,0x75eb14fcb132075fL,0xa8ccc9067ad834f6L,
20248         0xea6a2474e6e92ffdL } },
20249     /* 7 << 203 */
20250     { { 0x9d72fd950f8d6758L,0xcb84e101408c07ddL,0xb9114bfda5e23221L,
20251         0x358b5fe2e94e742cL },
20252       { 0x1c0577ec95f40e75L,0xf01554513d73f3d6L,0x9d55cd67bd1b9b66L,
20253         0x63e86e78af8d63c7L } },
20254     /* 8 << 203 */
20255     { { 0x39d934abd3c095f1L,0x04b261bee4b76d71L,0x1d2e6970e73e6984L,
20256         0x879fb23b5e5fcb11L },
20257       { 0x11506c72dfd75490L,0x3a97d08561bcf1c1L,0x43201d82bf5e7007L,
20258         0x7f0ac52f798232a7L } },
20259     /* 9 << 203 */
20260     { { 0x2715cbc46eb564d4L,0x8d6c752c9e570e29L,0xf80247c89ef5fd5dL,
20261         0xc3c66b46d53eb514L },
20262       { 0x9666b4010f87de56L,0xce62c06fc6c603b5L,0xae7b4c607e4fc942L,
20263         0x38ac0b77663a9c19L } },
20264     /* 10 << 203 */
20265     { { 0xcb4d20ee4b049136L,0x8b63bf12356a4613L,0x1221aef670e08128L,
20266         0xe62d8c514acb6b16L },
20267       { 0x71f64a67379e7896L,0xb25237a2cafd7fa5L,0xf077bd983841ba6aL,
20268         0xc4ac02443cd16e7eL } },
20269     /* 11 << 203 */
20270     { { 0x548ba86921fea4caL,0xd36d0817f3dfdac1L,0x09d8d71ff4685fafL,
20271         0x8eff66bec52c459aL },
20272       { 0x182faee70b57235eL,0xee3c39b10106712bL,0x5107331fc0fcdcb0L,
20273         0x669fb9dca51054baL } },
20274     /* 12 << 203 */
20275     { { 0xb25101fb319d7682L,0xb02931290a982feeL,0x51c1c9b90261b344L,
20276         0x0e008c5bbfd371faL },
20277       { 0xd866dd1c0278ca33L,0x666f76a6e5aa53b1L,0xe5cfb7796013a2cfL,
20278         0x1d3a1aada3521836L } },
20279     /* 13 << 203 */
20280     { { 0xcedd253173faa485L,0xc8ee6c4fc0a76878L,0xddbccfc92a11667dL,
20281         0x1a418ea91c2f695aL },
20282       { 0xdb11bd9251f73971L,0x3e4b3c82da2ed89fL,0x9a44f3f4e73e0319L,
20283         0xd1e3de0f303431afL } },
20284     /* 14 << 203 */
20285     { { 0x3c5604ff50f75f9cL,0x1d8eddf37e752b22L,0x0ef074dd3c9a1118L,
20286         0xd0ffc172ccb86d7bL },
20287       { 0xabd1ece3037d90f2L,0xe3f307d66055856cL,0x422f93287e4c6dafL,
20288         0x902aac66334879a0L } },
20289     /* 15 << 203 */
20290     { { 0xb6a1e7bf94cdfadeL,0x6c97e1ed7fc6d634L,0x662ad24da2fb63f8L,
20291         0xf81be1b9a5928405L },
20292       { 0x86d765e4d14b4206L,0xbecc2e0e8fa0db65L,0xa28838e0b17fc76cL,
20293         0xe49a602ae37cf24eL } },
20294     /* 16 << 203 */
20295     { { 0x76b4131a567193ecL,0xaf3c305ae5f6e70bL,0x9587bd39031eebddL,
20296         0x5709def871bbe831L },
20297       { 0x570599830eb2b669L,0x4d80ce1b875b7029L,0x838a7da80364ac16L,
20298         0x2f431d23be1c83abL } },
20299     /* 17 << 203 */
20300     { { 0xe56812a6f9294dd3L,0xb448d01f9b4b0d77L,0xf3ae606104e8305cL,
20301         0x2bead64594d8c63eL },
20302       { 0x0a85434d84fd8b07L,0x537b983ff7a9dee5L,0xedcc5f18ef55bd85L,
20303         0x2041af6221c6cf8bL } },
20304     /* 18 << 203 */
20305     { { 0x8e52874cb940c71eL,0x211935a9db5f4b3aL,0x94350492301b1dc3L,
20306         0x33d2646d29958620L },
20307       { 0x16b0d64bef911404L,0x9d1f25ea9a3c5ef4L,0x20f200eb4a352c78L,
20308         0x43929f2c4bd0b428L } },
20309     /* 19 << 203 */
20310     { { 0xa5656667c7196e29L,0x7992c2f09391be48L,0xaaa97cbd9ee0cd6eL,
20311         0x51b0310c3dc8c9bfL },
20312       { 0x237f8acfdd9f22cbL,0xbb1d81a1b585d584L,0x8d5d85f58c416388L,
20313         0x0d6e5a5a42fe474fL } },
20314     /* 20 << 203 */
20315     { { 0xe781276638235d4eL,0x1c62bd67496e3298L,0x8378660c3f175bc8L,
20316         0x4d04e18917afdd4dL },
20317       { 0x32a8160185a8068cL,0xdb58e4e192b29a85L,0xe8a65b86c70d8a3bL,
20318         0x5f0e6f4e98a0403bL } },
20319     /* 21 << 203 */
20320     { { 0x0812968469ed2370L,0x34dc30bd0871ee26L,0x3a5ce9487c9c5b05L,
20321         0x7d487b8043a90c87L },
20322       { 0x4089ba37dd0e7179L,0x45f80191b4041811L,0x1c3e105898747ba5L,
20323         0x98c4e13a6e1ae592L } },
20324     /* 22 << 203 */
20325     { { 0xd44636e6e82c9f9eL,0x711db87cc33a1043L,0x6f431263aa8aec05L,
20326         0x43ff120d2744a4aaL },
20327       { 0xd3bd892fae77779bL,0xf0fe0cc98cdc9f82L,0xca5f7fe6f1c5b1bcL,
20328         0xcc63a68244929a72L } },
20329     /* 23 << 203 */
20330     { { 0xc7eaba0c09dbe19aL,0x2f3585ad6b5c73c2L,0x8ab8924b0ae50c30L,
20331         0x17fcd27a638b30baL },
20332       { 0xaf414d3410b3d5a5L,0x09c107d22a9accf1L,0x15dac49f946a6242L,
20333         0xaec3df2ad707d642L } },
20334     /* 24 << 203 */
20335     { { 0x2c2492b73f894ae0L,0xf59df3e5b75f18ceL,0x7cb740d28f53cad0L,
20336         0x3eb585fbc4f01294L },
20337       { 0x17da0c8632c7f717L,0xeb8c795baf943f4cL,0x4ee23fb5f67c51d2L,
20338         0xef18757568889949L } },
20339     /* 25 << 203 */
20340     { { 0xa6b4bdb20389168bL,0xc4ecd258ea577d03L,0x3a63782b55743082L,
20341         0x6f678f4cc72f08cdL },
20342       { 0x553511cf65e58dd8L,0xd53b4e3ed402c0cdL,0x37de3e29a037c14cL,
20343         0x86b6c516c05712aaL } },
20344     /* 26 << 203 */
20345     { { 0x2834da3eb38dff6fL,0xbe012c52ea636be8L,0x292d238c61dd37f8L,
20346         0x0e54523f8f8142dbL },
20347       { 0xe31eb436036a05d8L,0x83e3cdff1e93c0ffL,0x3fd2fe0f50821ddfL,
20348         0xc8e19b0dff9eb33bL } },
20349     /* 27 << 203 */
20350     { { 0xc8cc943fb569a5feL,0xad0090d4d4342d75L,0x82090b4bcaeca000L,
20351         0xca39687f1bd410ebL },
20352       { 0xe7bb0df765959d77L,0x39d782189c964999L,0xd87f62e8b2415451L,
20353         0xe5efb774bed76108L } },
20354     /* 28 << 203 */
20355     { { 0x3ea011a4e822f0d0L,0xbc647ad15a8704f8L,0xbb315b3550c6820fL,
20356         0x863dec3db7e76becL },
20357       { 0x01ff5d3af017bfc7L,0x20054439976b8229L,0x067fca370bbd0d3bL,
20358         0xf63dde647f5e3d0fL } },
20359     /* 29 << 203 */
20360     { { 0x22dbefb32a4c94e9L,0xafbff0fe96f8278aL,0x80aea0b13503793dL,
20361         0xb22380295f06cd29L },
20362       { 0x65703e578ec3fecaL,0x06c38314393e7053L,0xa0b751eb7c6734c4L,
20363         0xd2e8a435c59f0f1eL } },
20364     /* 30 << 203 */
20365     { { 0x147d90525e9ca895L,0x2f4dd31e972072dfL,0xa16fda8ee6c6755cL,
20366         0xc66826ffcf196558L },
20367       { 0x1f1a76a30cf43895L,0xa9d604e083c3097bL,0xe190830966390e0eL,
20368         0xa50bf753b3c85effL } },
20369     /* 31 << 203 */
20370     { { 0x0696bddef6a70251L,0x548b801b3c6ab16aL,0x37fcf704a4d08762L,
20371         0x090b3defdff76c4eL },
20372       { 0x87e8cb8969cb9158L,0x44a90744995ece43L,0xf85395f40ad9fbf5L,
20373         0x49b0f6c54fb0c82dL } },
20374     /* 32 << 203 */
20375     { { 0x75d9bc15adf7cccfL,0x81a3e5d6dfa1e1b0L,0x8c39e444249bc17eL,
20376         0xf37dccb28ea7fd43L },
20377       { 0xda654873907fba12L,0x35daa6da4a372904L,0x0564cfc66283a6c5L,
20378         0xd09fa4f64a9395bfL } },
20379     /* 33 << 203 */
20380     { { 0x688e9ec9aeb19a36L,0xd913f1cec7bfbfb4L,0x797b9a3c61c2faa6L,
20381         0x2f979bec6a0a9c12L },
20382       { 0xb5969d0f359679ecL,0xebcf523d079b0460L,0xfd6b000810fab870L,
20383         0x3f2edcda9373a39cL } },
20384     /* 34 << 203 */
20385     { { 0x0d64f9a76f568431L,0xf848c27c02f8898cL,0xf418ade1260b5bd5L,
20386         0xc1f3e3236973dee8L },
20387       { 0x46e9319c26c185ddL,0x6d85b7d8546f0ac4L,0x427965f2247f9d57L,
20388         0xb519b636b0035f48L } },
20389     /* 35 << 203 */
20390     { { 0x6b6163a9ab87d59cL,0xff9f58c339caaa11L,0x4ac39cde3177387bL,
20391         0x5f6557c2873e77f9L },
20392       { 0x6750400636a83041L,0x9b1c96ca75ef196cL,0xf34283deb08c7940L,
20393         0x7ea096441128c316L } },
20394     /* 36 << 203 */
20395     { { 0xb510b3b56aa39dffL,0x59b43da29f8e4d8cL,0xa8ce31fd9e4c4b9fL,
20396         0x0e20be26c1303c01L },
20397       { 0x18187182e8ee47c9L,0xd9687cdb7db98101L,0x7a520e4da1e14ff6L,
20398         0x429808ba8836d572L } },
20399     /* 37 << 203 */
20400     { { 0xa37ca60d4944b663L,0xf901f7a9a3f91ae5L,0xe4e3e76e9e36e3b1L,
20401         0x9aa219cf29d93250L },
20402       { 0x347fe275056a2512L,0xa4d643d9de65d95cL,0x9669d396699fc3edL,
20403         0xb598dee2cf8c6bbeL } },
20404     /* 38 << 203 */
20405     { { 0x682ac1e5dda9e5c6L,0x4e0d3c72caa9fc95L,0x17faaade772bea44L,
20406         0x5ef8428cab0009c8L },
20407       { 0xcc4ce47a460ff016L,0xda6d12bf725281cbL,0x44c678480223aad2L,
20408         0x6e342afa36256e28L } },
20409     /* 39 << 203 */
20410     { { 0x1400bb0b93a37c04L,0x62b1bc9bdd10bd96L,0x7251adeb0dac46b7L,
20411         0x7d33b92e7be4ef51L },
20412       { 0x28b2a94be61fa29aL,0x4b2be13f06422233L,0x36d6d062330d8d37L,
20413         0x5ef80e1eb28ca005L } },
20414     /* 40 << 203 */
20415     { { 0x174d46996d16768eL,0x9fc4ff6a628bf217L,0x77705a94154e490dL,
20416         0x9d96dd288d2d997aL },
20417       { 0x77e2d9d8ce5d72c4L,0x9d06c5a4c11c714fL,0x02aa513679e4a03eL,
20418         0x1386b3c2030ff28bL } },
20419     /* 41 << 203 */
20420     { { 0xfe82e8a6fb283f61L,0x7df203e5f3abc3fbL,0xeec7c3513a4d3622L,
20421         0xf7d17dbfdf762761L },
20422       { 0xc3956e44522055f0L,0xde3012db8fa748dbL,0xca9fcb63bf1dcc14L,
20423         0xa56d9dcfbe4e2f3aL } },
20424     /* 42 << 203 */
20425     { { 0xb86186b68bcec9c2L,0x7cf24df9680b9f06L,0xc46b45eac0d29281L,
20426         0xfff42bc507b10e12L },
20427       { 0x12263c404d289427L,0x3d5f1899b4848ec4L,0x11f97010d040800cL,
20428         0xb4c5f529300feb20L } },
20429     /* 43 << 203 */
20430     { { 0xcc543f8fde94fdcbL,0xe96af739c7c2f05eL,0xaa5e0036882692e1L,
20431         0x09c75b68950d4ae9L },
20432       { 0x62f63df2b5932a7aL,0x2658252ede0979adL,0x2a19343fb5e69631L,
20433         0x718c7501525b666bL } },
20434     /* 44 << 203 */
20435     { { 0x26a42d69ea40dc3aL,0xdc84ad22aecc018fL,0x25c36c7b3270f04aL,
20436         0x46ba6d4750fa72edL },
20437       { 0x6c37d1c593e58a8eL,0xa2394731120c088cL,0xc3be4263cb6e86daL,
20438         0x2c417d367126d038L } },
20439     /* 45 << 203 */
20440     { { 0x5b70f9c58b6f8efaL,0x671a2faa37718536L,0xd3ced3c6b539c92bL,
20441         0xe56f1bd9a31203c2L },
20442       { 0x8b096ec49ff3c8ebL,0x2deae43243491ceaL,0x2465c6eb17943794L,
20443         0x5d267e6620586843L } },
20444     /* 46 << 203 */
20445     { { 0x9d3d116db07159d0L,0xae07a67fc1896210L,0x8fc84d87bb961579L,
20446         0x30009e491c1f8dd6L },
20447       { 0x8a8caf22e3132819L,0xcffa197cf23ab4ffL,0x58103a44205dd687L,
20448         0x57b796c30ded67a2L } },
20449     /* 47 << 203 */
20450     { { 0x0b9c3a6ca1779ad7L,0xa33cfe2e357c09c5L,0x2ea293153db4a57eL,
20451         0x919596958ebeb52eL },
20452       { 0x118db9a6e546c879L,0x8e996df46295c8d6L,0xdd99048455ec806bL,
20453         0x24f291ca165c1035L } },
20454     /* 48 << 203 */
20455     { { 0xcca523bb440e2229L,0x324673a273ef4d04L,0xaf3adf343e11ec39L,
20456         0x6136d7f1dc5968d3L },
20457       { 0x7a7b2899b053a927L,0x3eaa2661ae067ecdL,0x8549b9c802779cd9L,
20458         0x061d7940c53385eaL } },
20459     /* 49 << 203 */
20460     { { 0x3e0ba883f06d18bdL,0x4ba6de53b2700843L,0xb966b668591a9e4dL,
20461         0x93f675677f4fa0edL },
20462       { 0x5a02711b4347237bL,0xbc041e2fe794608eL,0x55af10f570f73d8cL,
20463         0xd2d4d4f7bb7564f7L } },
20464     /* 50 << 203 */
20465     { { 0xd7d27a89b3e93ce7L,0xf7b5a8755d3a2c1bL,0xb29e68a0255b218aL,
20466         0xb533837e8af76754L },
20467       { 0xd1b05a73579fab2eL,0xb41055a1ecd74385L,0xb2369274445e9115L,
20468         0x2972a7c4f520274eL } },
20469     /* 51 << 203 */
20470     { { 0x6c08334ef678e68aL,0x4e4160f099b057edL,0x3cfe11b852ccb69aL,
20471         0x2fd1823a21c8f772L },
20472       { 0xdf7f072f3298f055L,0x8c0566f9fec74a6eL,0xe549e0195bb4d041L,
20473         0x7c3930ba9208d850L } },
20474     /* 52 << 203 */
20475     { { 0xe07141fcaaa2902bL,0x539ad799e4f69ad3L,0xa6453f94813f9ffdL,
20476         0xc58d3c48375bc2f7L },
20477       { 0xb3326fad5dc64e96L,0x3aafcaa9b240e354L,0x1d1b0903aca1e7a9L,
20478         0x4ceb97671211b8a0L } },
20479     /* 53 << 203 */
20480     { { 0xeca83e49e32a858eL,0x4c32892eae907badL,0xd5b42ab62eb9b494L,
20481         0x7fde3ee21eabae1bL },
20482       { 0x13b5ab09caf54957L,0xbfb028bee5f5d5d5L,0x928a06502003e2c0L,
20483         0x90793aac67476843L } },
20484     /* 54 << 203 */
20485     { { 0x5e942e79c81710a0L,0x557e4a3627ccadd4L,0x72a2bc564bcf6d0cL,
20486         0x09ee5f4326d7b80cL },
20487       { 0x6b70dbe9d4292f19L,0x56f74c2663f16b18L,0xc23db0f735fbb42aL,
20488         0xb606bdf66ae10040L } },
20489     /* 55 << 203 */
20490     { { 0x1eb15d4d044573acL,0x7dc3cf86556b0ba4L,0x97af9a33c60df6f7L,
20491         0x0b1ef85ca716ce8cL },
20492       { 0x2922f884c96958beL,0x7c32fa9435690963L,0x2d7f667ceaa00061L,
20493         0xeaaf7c173547365cL } },
20494     /* 56 << 203 */
20495     { { 0x1eb4de4687032d58L,0xc54f3d835e2c79e0L,0x07818df45d04ef23L,
20496         0x55faa9c8673d41b4L },
20497       { 0xced64f6f89b95355L,0x4860d2eab7415c84L,0x5fdb9bd2050ebad3L,
20498         0xdb53e0cc6685a5bfL } },
20499     /* 57 << 203 */
20500     { { 0xb830c0319feb6593L,0xdd87f3106accff17L,0x2303ebab9f555c10L,
20501         0x94603695287e7065L },
20502       { 0xf88311c32e83358cL,0x508dd9b4eefb0178L,0x7ca237062dba8652L,
20503         0x62aac5a30047abe5L } },
20504     /* 58 << 203 */
20505     { { 0x9a61d2a08b1ea7b3L,0xd495ab63ae8b1485L,0x38740f8487052f99L,
20506         0x178ebe5bb2974eeaL },
20507       { 0x030bbcca5b36d17fL,0xb5e4cce3aaf86eeaL,0xb51a022068f8e9e0L,
20508         0xa434879609eb3e75L } },
20509     /* 59 << 203 */
20510     { { 0xbe592309eef1a752L,0x5d7162d76f2aa1edL,0xaebfb5ed0f007dd2L,
20511         0x255e14b2c89edd22L },
20512       { 0xba85e0720303b697L,0xc5d17e25f05720ffL,0x02b58d6e5128ebb6L,
20513         0x2c80242dd754e113L } },
20514     /* 60 << 203 */
20515     { { 0x919fca5fabfae1caL,0x937afaac1a21459bL,0x9e0ca91c1f66a4d2L,
20516         0x194cc7f323ec1331L },
20517       { 0xad25143a8aa11690L,0xbe40ad8d09b59e08L,0x37d60d9be750860aL,
20518         0x6c53b008c6bf434cL } },
20519     /* 61 << 203 */
20520     { { 0xb572415d1356eb80L,0xb8bf9da39578ded8L,0x22658e365e8fb38bL,
20521         0x9b70ce225af8cb22L },
20522       { 0x7c00018a829a8180L,0x84329f93b81ed295L,0x7c343ea25f3cea83L,
20523         0x38f8655f67586536L } },
20524     /* 62 << 203 */
20525     { { 0xa661a0d01d3ec517L,0x98744652512321aeL,0x084ca591eca92598L,
20526         0xa9bb9dc91dcb3febL },
20527       { 0x14c5435578b4c240L,0x5ed62a3b610cafdcL,0x07512f371b38846bL,
20528         0x571bb70ab0e38161L } },
20529     /* 63 << 203 */
20530     { { 0xb556b95b2da705d2L,0x3ef8ada6b1a08f98L,0x85302ca7ddecfbe5L,
20531         0x0e530573943105cdL },
20532       { 0x60554d5521a9255dL,0x63a32fa1f2f3802aL,0x35c8c5b0cd477875L,
20533         0x97f458ea6ad42da1L } },
20534     /* 64 << 203 */
20535     { { 0x832d7080eb6b242dL,0xd30bd0233b71e246L,0x7027991bbe31139dL,
20536         0x68797e91462e4e53L },
20537       { 0x423fe20a6b4e185aL,0x82f2c67e42d9b707L,0x25c817684cf7811bL,
20538         0xbd53005e045bb95dL } },
20539     /* 0 << 210 */
20540     { { 0x00, 0x00, 0x00, 0x00 },
20541       { 0x00, 0x00, 0x00, 0x00 } },
20542     /* 1 << 210 */
20543     { { 0xe5f649be9d8e68fdL,0xdb0f05331b044320L,0xf6fde9b3e0c33398L,
20544         0x92f4209b66c8cfaeL },
20545       { 0xe9d1afcc1a739d4bL,0x09aea75fa28ab8deL,0x14375fb5eac6f1d0L,
20546         0x6420b560708f7aa5L } },
20547     /* 2 << 210 */
20548     { { 0x9eae499c6254dc41L,0x7e2939247a837e7eL,0x74aec08c090524a7L,
20549         0xf82b92198d6f55f2L },
20550       { 0x493c962e1402cec5L,0x9f17ca17fa2f30e7L,0xbcd783e8e9b879cbL,
20551         0xea3d8c145a6f145fL } },
20552     /* 3 << 210 */
20553     { { 0xdede15e75e0dee6eL,0x74f24872dc628aa2L,0xd3e9c4fe7861bb93L,
20554         0x56d4822a6187b2e0L },
20555       { 0xb66417cfc59826f9L,0xca2609692408169eL,0xedf69d06c79ef885L,
20556         0x00031f8adc7d138fL } },
20557     /* 4 << 210 */
20558     { { 0x103c46e60ebcf726L,0x4482b8316231470eL,0x6f6dfaca487c2109L,
20559         0x2e0ace9762e666efL },
20560       { 0x3246a9d31f8d1f42L,0x1b1e83f1574944d2L,0x13dfa63aa57f334bL,
20561         0x0cf8daed9f025d81L } },
20562     /* 5 << 210 */
20563     { { 0x30d78ea800ee11c1L,0xeb053cd4b5e3dd75L,0x9b65b13ed58c43c5L,
20564         0xc3ad49bdbd151663L },
20565       { 0x99fd8e41b6427990L,0x12cf15bd707eae1eL,0x29ad4f1b1aabb71eL,
20566         0x5143e74d07545d0eL } },
20567     /* 6 << 210 */
20568     { { 0x30266336c88bdee1L,0x25f293065876767cL,0x9c078571c6731996L,
20569         0xc88690b2ed552951L },
20570       { 0x274f2c2d852705b4L,0xb0bf8d444e09552dL,0x7628beeb986575d1L,
20571         0x407be2387f864651L } },
20572     /* 7 << 210 */
20573     { { 0x0e5e3049a639fc6bL,0xe75c35d986003625L,0x0cf35bd85dcc1646L,
20574         0x8bcaced26c26273aL },
20575       { 0xe22ecf1db5536742L,0x013dd8971a9e068bL,0x17f411cb8a7909c5L,
20576         0x5757ac98861dd506L } },
20577     /* 8 << 210 */
20578     { { 0x85de1f0d1e935abbL,0xdefd10b4154de37aL,0xb8d9e392369cebb5L,
20579         0x54d5ef9b761324beL },
20580       { 0x4d6341ba74f17e26L,0xc0a0e3c878c1dde4L,0xa6d7758187d918fdL,
20581         0x6687601502ca3a13L } },
20582     /* 9 << 210 */
20583     { { 0xc7313e9cf36658f0L,0xc433ef1c71f8057eL,0x853262461b6a835aL,
20584         0xc8f053987c86394cL },
20585       { 0xff398cdfe983c4a1L,0xbf5e816203b7b931L,0x93193c46b7b9045bL,
20586         0x1e4ebf5da4a6e46bL } },
20587     /* 10 << 210 */
20588     { { 0xf9942a6043a24fe7L,0x29c1191effb3492bL,0x9f662449902fde05L,
20589         0xc792a7ac6713c32dL },
20590       { 0x2fd88ad8b737982cL,0x7e3a0319a21e60e3L,0x09b0de447383591aL,
20591         0x6df141ee8310a456L } },
20592     /* 11 << 210 */
20593     { { 0xaec1a039e6d6f471L,0x14b2ba0f1198d12eL,0xebc1a1603aeee5acL,
20594         0x401f4836e0b964ceL },
20595       { 0x2ee437964fd03f66L,0x3fdb4e49dd8f3f12L,0x6ef267f629380f18L,
20596         0x3e8e96708da64d16L } },
20597     /* 12 << 210 */
20598     { { 0xbc19180c207674f1L,0x112e09a733ae8fdbL,0x996675546aaeb71eL,
20599         0x79432af1e101b1c7L },
20600       { 0xd5eb558fde2ddec6L,0x81392d1f5357753fL,0xa7a76b973ae1158aL,
20601         0x416fbbff4a899991L } },
20602     /* 13 << 210 */
20603     { { 0x9e65fdfd0d4a9dcfL,0x7bc29e48944ddf12L,0xbc1a92d93c856866L,
20604         0x273c69056e98dfe2L },
20605       { 0x69fce418cdfaa6b8L,0x606bd8235061c69fL,0x42d495a06af75e27L,
20606         0x8ed3d5056d873a1fL } },
20607     /* 14 << 210 */
20608     { { 0xaf5528416ab25b6aL,0xc6c0ffc72b1a4523L,0xab18827b21c99e03L,
20609         0x060e86489034691bL },
20610       { 0x5207f90f93c7f398L,0x9f4a96cb82f8d10bL,0xdd71cd793ad0f9e3L,
20611         0x84f435d2fc3a54f5L } },
20612     /* 15 << 210 */
20613     { { 0x4b03c55b8e33787fL,0xef42f975a6384673L,0xff7304f75051b9f0L,
20614         0x18aca1dc741c87c2L },
20615       { 0x56f120a72d4bfe80L,0xfd823b3d053e732cL,0x11bccfe47537ca16L,
20616         0xdf6c9c741b5a996bL } },
20617     /* 16 << 210 */
20618     { { 0xee7332c7904fc3faL,0x14a23f45c7e3636aL,0xc38659c3f091d9aaL,
20619         0x4a995e5db12d8540L },
20620       { 0x20a53becf3a5598aL,0x56534b17b1eaa995L,0x9ed3dca4bf04e03cL,
20621         0x716c563ad8d56268L } },
20622     /* 17 << 210 */
20623     { { 0x27ba77a41d6178e7L,0xe4c80c4068a1ff8eL,0x750110990a13f63dL,
20624         0x7bf33521a61d46f3L },
20625       { 0x0aff218e10b365bbL,0x810218040fd7ea75L,0x05a3fd8aa4b3a925L,
20626         0xb829e75f9b3db4e6L } },
20627     /* 18 << 210 */
20628     { { 0x6bdc75a54d53e5fbL,0x04a5dc02d52717e3L,0x86af502fe9a42ec2L,
20629         0x8867e8fb2630e382L },
20630       { 0xbf845c6ebec9889bL,0x54f491f2cb47c98dL,0xa3091fba790c2a12L,
20631         0xd7f6fd78c20f708bL } },
20632     /* 19 << 210 */
20633     { { 0xa569ac30acde5e17L,0xd0f996d06852b4d7L,0xe51d4bb54609ae54L,
20634         0x3fa37d170daed061L },
20635       { 0x62a8868434b8fb41L,0x99a2acbd9efb64f1L,0xb75c1a5e6448e1f2L,
20636         0xfa99951a42b5a069L } },
20637     /* 20 << 210 */
20638     { { 0x6d956e892f3b26e7L,0xf4709860da875247L,0x3ad151792482dda3L,
20639         0xd64110e3017d82f0L },
20640       { 0x14928d2cfad414e4L,0x2b155f582ed02b24L,0x481a141bcb821bf1L,
20641         0x12e3c7704f81f5daL } },
20642     /* 21 << 210 */
20643     { { 0xe49c5de59fff8381L,0x110532325bbec894L,0xa0d051cc454d88c4L,
20644         0x4f6db89c1f8e531bL },
20645       { 0x34fe3fd6ca563a44L,0x7f5c221558da8ab9L,0x8445016d9474f0a1L,
20646         0x17d34d61cb7d8a0aL } },
20647     /* 22 << 210 */
20648     { { 0x8e9d39101c474019L,0xcaff2629d52ceefbL,0xf9cf3e32c1622c2bL,
20649         0xd4b95e3ce9071a05L },
20650       { 0xfbbca61f1594438cL,0x1eb6e6a604aadedfL,0x853027f468e14940L,
20651         0x221d322adfabda9cL } },
20652     /* 23 << 210 */
20653     { { 0xed8ea9f6b7cb179aL,0xdc7b764db7934dccL,0xfcb139405e09180dL,
20654         0x6629a6bfb47dc2ddL },
20655       { 0xbfc55e4e9f5a915eL,0xb1db9d376204441eL,0xf82d68cf930c5f53L,
20656         0x17d3a142cbb605b1L } },
20657     /* 24 << 210 */
20658     { { 0xdd5944ea308780f2L,0xdc8de7613845f5e4L,0x6beaba7d7624d7a3L,
20659         0x1e709afd304df11eL },
20660       { 0x9536437602170456L,0xbf204b3ac8f94b64L,0x4e53af7c5680ca68L,
20661         0x0526074ae0c67574L } },
20662     /* 25 << 210 */
20663     { { 0x95d8cef8ecd92af6L,0xe6b9fa7a6cd1745aL,0x3d546d3da325c3e4L,
20664         0x1f57691d9ae93aaeL },
20665       { 0xe891f3fe9d2e1a33L,0xd430093fac063d35L,0xeda59b125513a327L,
20666         0xdc2134f35536f18fL } },
20667     /* 26 << 210 */
20668     { { 0xaa51fe2c5c210286L,0x3f68aaee1cab658cL,0x5a23a00bf9357292L,
20669         0x9a626f397efdabedL },
20670       { 0xfe2b3bf3199d78e3L,0xb7a2af7771bbc345L,0x3d19827a1e59802cL,
20671         0x823bbc15b487a51cL } },
20672     /* 27 << 210 */
20673     { { 0x856139f299d0a422L,0x9ac3df65f456c6fbL,0xaddf65c6701f8bd6L,
20674         0x149f321e3758df87L },
20675       { 0xb1ecf714721b7ebaL,0xe17df09831a3312aL,0xdb2fd6ecd5c4d581L,
20676         0xfd02996f8fcea1b3L } },
20677     /* 28 << 210 */
20678     { { 0xe29fa63e7882f14fL,0xc9f6dc3507c6cadcL,0x46f22d6fb882bed0L,
20679         0x1a45755bd118e52cL },
20680       { 0x9f2c7c277c4608cfL,0x7ccbdf32568012c2L,0xfcb0aedd61729b0eL,
20681         0x7ca2ca9ef7d75dbfL } },
20682     /* 29 << 210 */
20683     { { 0xf58fecb16f640f62L,0xe274b92b39f51946L,0x7f4dfc046288af44L,
20684         0x0a91f32aeac329e5L },
20685       { 0x43ad274bd6aaba31L,0x719a16400f6884f9L,0x685d29f6daf91e20L,
20686         0x5ec1cc3327e49d52L } },
20687     /* 30 << 210 */
20688     { { 0x38f4de963b54a059L,0x0e0015e5efbcfdb3L,0x177d23d94dbb8da6L,
20689         0x98724aa297a617adL },
20690       { 0x30f0885bfdb6558eL,0xf9f7a28ac7899a96L,0xd2ae8ac8872dc112L,
20691         0xfa0642ca73c3c459L } },
20692     /* 31 << 210 */
20693     { { 0x15296981e7dfc8d6L,0x67cd44501fb5b94aL,0x0ec71cf10eddfd37L,
20694         0xc7e5eeb39a8eddc7L },
20695       { 0x02ac8e3d81d95028L,0x0088f17270b0e35dL,0xec041fabe1881fe3L,
20696         0x62cf71b8d99e7faaL } },
20697     /* 32 << 210 */
20698     { { 0x5043dea7e0f222c2L,0x309d42ac72e65142L,0x94fe9ddd9216cd30L,
20699         0xd6539c7d0f87feecL },
20700       { 0x03c5a57c432ac7d7L,0x72692cf0327fda10L,0xec28c85f280698deL,
20701         0x2331fb467ec283b1L } },
20702     /* 33 << 210 */
20703     { { 0xd34bfa322867e633L,0x78709a820a9cc815L,0xb7fe6964875e2fa5L,
20704         0x25cc064f9e98bfb5L },
20705       { 0x9eb0151c493a65c5L,0x5fb5d94153182464L,0x69e6f130f04618e2L,
20706         0xa8ecec22f89c8ab6L } },
20707     /* 34 << 210 */
20708     { { 0xcd6ac88bb96209bdL,0x65fa8cdbb3e1c9e0L,0xa47d22f54a8d8eacL,
20709         0x83895cdf8d33f963L },
20710       { 0xa8adca59b56cd3d1L,0x10c8350bdaf38232L,0x2b161fb3a5080a9fL,
20711         0xbe7f5c643af65b3aL } },
20712     /* 35 << 210 */
20713     { { 0x2c75403997403a11L,0x94626cf7121b96afL,0x431de7c46a983ec2L,
20714         0x3780dd3a52cc3df7L },
20715       { 0xe28a0e462baf8e3bL,0xabe68aad51d299aeL,0x603eb8f9647a2408L,
20716         0x14c61ed65c750981L } },
20717     /* 36 << 210 */
20718     { { 0x88b34414c53352e7L,0x5a34889c1337d46eL,0x612c1560f95f2bc8L,
20719         0x8a3f8441d4807a3aL },
20720       { 0x680d9e975224da68L,0x60cd6e88c3eb00e9L,0x3875a98e9a6bc375L,
20721         0xdc80f9244fd554c2L } },
20722     /* 37 << 210 */
20723     { { 0x6c4b34156ac77407L,0xa1e5ea8f25420681L,0x541bfa144607a458L,
20724         0x5dbc7e7a96d7fbf9L },
20725       { 0x646a851b31590a47L,0x039e85ba15ee6df8L,0xd19fa231d7b43fc0L,
20726         0x84bc8be8299a0e04L } },
20727     /* 38 << 210 */
20728     { { 0x2b9d2936f20df03aL,0x240543828608d472L,0x76b6ba049149202aL,
20729         0xb21c38313670e7b7L },
20730       { 0xddd93059d6fdee10L,0x9da47ad378488e71L,0x99cc1dfda0fcfb25L,
20731         0x42abde1064696954L } },
20732     /* 39 << 210 */
20733     { { 0x14cc15fc17eab9feL,0xd6e863e4d3e70972L,0x29a7765c6432112cL,
20734         0x886600015b0774d8L },
20735       { 0x3729175a2c088eaeL,0x13afbcae8230b8d4L,0x44768151915f4379L,
20736         0xf086431ad8d22812L } },
20737     /* 40 << 210 */
20738     { { 0x37461955c298b974L,0x905fb5f0f8711e04L,0x787abf3afe969d18L,
20739         0x392167c26f6a494eL },
20740       { 0xfc7a0d2d28c511daL,0xf127c7dcb66a262dL,0xf9c4bb95fd63fdf0L,
20741         0x900165893913ef46L } },
20742     /* 41 << 210 */
20743     { { 0x74d2a73c11aa600dL,0x2f5379bd9fb5ab52L,0xe49e53a47fb70068L,
20744         0x68dd39e5404aa9a7L },
20745       { 0xb9b0cf572ecaa9c3L,0xba0e103be824826bL,0x60c2198b4631a3c4L,
20746         0xc5ff84abfa8966a2L } },
20747     /* 42 << 210 */
20748     { { 0x2d6ebe22ac95aff8L,0x1c9bb6dbb5a46d09L,0x419062da53ee4f8dL,
20749         0x7b9042d0bb97efefL },
20750       { 0x0f87f080830cf6bdL,0x4861d19a6ec8a6c6L,0xd3a0daa1202f01aaL,
20751         0xb0111674f25afbd5L } },
20752     /* 43 << 210 */
20753     { { 0x6d00d6cf1afb20d9L,0x1369500040671bc5L,0x913ab0dc2485ea9bL,
20754         0x1f2bed069eef61acL },
20755       { 0x850c82176d799e20L,0x93415f373271c2deL,0x5afb06e96c4f5910L,
20756         0x688a52dfc4e9e421L } },
20757     /* 44 << 210 */
20758     { { 0x30495ba3e2a9a6dbL,0x4601303d58f9268bL,0xbe3b0dad7eb0f04fL,
20759         0x4ea472504456936dL },
20760       { 0x8caf8798d33fd3e7L,0x1ccd8a89eb433708L,0x9effe3e887fd50adL,
20761         0xbe240a566b29c4dfL } },
20762     /* 45 << 210 */
20763     { { 0xec4ffd98ca0e7ebdL,0xf586783ae748616eL,0xa5b00d8fc77baa99L,
20764         0x0acada29b4f34c9cL },
20765       { 0x36dad67d0fe723acL,0x1d8e53a539c36c1eL,0xe4dd342d1f4bea41L,
20766         0x64fd5e35ebc9e4e0L } },
20767     /* 46 << 210 */
20768     { { 0x96f01f9057908805L,0xb5b9ea3d5ed480ddL,0x366c5dc23efd2dd0L,
20769         0xed2fe3056e9dfa27L },
20770       { 0x4575e8926e9197e2L,0x11719c09ab502a5dL,0x264c7bece81f213fL,
20771         0x741b924155f5c457L } },
20772     /* 47 << 210 */
20773     { { 0x78ac7b6849a5f4f4L,0xf91d70a29fc45b7dL,0x39b05544b0f5f355L,
20774         0x11f06bceeef930d9L },
20775       { 0xdb84d25d038d05e1L,0x04838ee5bacc1d51L,0x9da3ce869e8ee00bL,
20776         0xc3412057c36eda1fL } },
20777     /* 48 << 210 */
20778     { { 0xae80b91364d9c2f4L,0x7468bac3a010a8ffL,0xdfd2003737359d41L,
20779         0x1a0f5ab815efeaccL },
20780       { 0x7c25ad2f659d0ce0L,0x4011bcbb6785cff1L,0x128b99127e2192c7L,
20781         0xa549d8e113ccb0e8L } },
20782     /* 49 << 210 */
20783     { { 0x805588d8c85438b1L,0x5680332dbc25cb27L,0xdcd1bc961a4bfdf4L,
20784         0x779ff428706f6566L },
20785       { 0x8bbee998f059987aL,0xf6ce8cf2cc686de7L,0xf8ad3c4a953cfdb2L,
20786         0xd1d426d92205da36L } },
20787     /* 50 << 210 */
20788     { { 0xb3c0f13fc781a241L,0x3e89360ed75362a8L,0xccd05863c8a91184L,
20789         0x9bd0c9b7efa8a7f4L },
20790       { 0x97ee4d538a912a4bL,0xde5e15f8bcf518fdL,0x6a055bf8c467e1e0L,
20791         0x10be4b4b1587e256L } },
20792     /* 51 << 210 */
20793     { { 0xd90c14f2668621c9L,0xd5518f51ab9c92c1L,0x8e6a0100d6d47b3cL,
20794         0xcbe980dd66716175L },
20795       { 0x500d3f10ddd83683L,0x3b6cb35d99cac73cL,0x53730c8b6083d550L,
20796         0xcf159767df0a1987L } },
20797     /* 52 << 210 */
20798     { { 0x84bfcf5343ad73b3L,0x1b528c204f035a94L,0x4294edf733eeac69L,
20799         0xb6283e83817f3240L },
20800       { 0xc3fdc9590a5f25b1L,0xefaf8aa55844ee22L,0xde269ba5dbdde4deL,
20801         0xe3347160c56133bfL } },
20802     /* 53 << 210 */
20803     { { 0xc11842198d9ea9f8L,0x090de5dbf3fc1ab5L,0x404c37b10bf22cdaL,
20804         0x7de20ec8f5618894L },
20805       { 0x754c588eecdaecabL,0x6ca4b0ed88342743L,0x76f08bddf4a938ecL,
20806         0xd182de8991493ccbL } },
20807     /* 54 << 210 */
20808     { { 0xd652c53ec8a4186aL,0xb3e878db946d8e33L,0x088453c05f37663cL,
20809         0x5cd9daaab407748bL },
20810       { 0xa1f5197f586d5e72L,0x47500be8c443ca59L,0x78ef35b2e2652424L,
20811         0x09c5d26f6dd7767dL } },
20812     /* 55 << 210 */
20813     { { 0x7175a79aa74d3f7bL,0x0428fd8dcf5ea459L,0x511cb97ca5d1746dL,
20814         0x36363939e71d1278L },
20815       { 0xcf2df95510350bf4L,0xb381743960aae782L,0xa748c0e43e688809L,
20816         0x98021fbfd7a5a006L } },
20817     /* 56 << 210 */
20818     { { 0x9076a70c0e367a98L,0xbea1bc150f62b7c2L,0x2645a68c30fe0343L,
20819         0xacaffa78699dc14fL },
20820       { 0xf4469964457bf9c4L,0x0db6407b0d2ead83L,0x68d56cadb2c6f3ebL,
20821         0x3b512e73f376356cL } },
20822     /* 57 << 210 */
20823     { { 0xe43b0e1ffce10408L,0x89ddc0035a5e257dL,0xb0ae0d120362e5b3L,
20824         0x07f983c7b0519161L },
20825       { 0xc2e94d155d5231e7L,0xcff22aed0b4f9513L,0xb02588dd6ad0b0b5L,
20826         0xb967d1ac11d0dcd5L } },
20827     /* 58 << 210 */
20828     { { 0x8dac6bc6cf777b6cL,0x0062bdbd4c6d1959L,0x53da71b50ef5cc85L,
20829         0x07012c7d4006f14fL },
20830       { 0x4617f962ac47800dL,0x53365f2bc102ed75L,0xb422efcb4ab8c9d3L,
20831         0x195cb26b34af31c9L } },
20832     /* 59 << 210 */
20833     { { 0x3a926e2905f2c4ceL,0xbd2bdecb9856966cL,0x5d16ab3a85527015L,
20834         0x9f81609e4486c231L },
20835       { 0xd8b96b2cda350002L,0xbd054690fa1b7d36L,0xdc90ebf5e71d79bcL,
20836         0xf241b6f908964e4eL } },
20837     /* 60 << 210 */
20838     { { 0x7c8386432fe3cd4cL,0xe0f33acbb4bc633cL,0xb4a9ecec3d139f1fL,
20839         0x05ce69cddc4a1f49L },
20840       { 0xa19d1b16f5f98aafL,0x45bb71d66f23e0efL,0x33789fcd46cdfdd3L,
20841         0x9b8e2978cee040caL } },
20842     /* 61 << 210 */
20843     { { 0x9c69b246ae0a6828L,0xba533d247078d5aaL,0x7a2e42c07bb4fbdbL,
20844         0xcfb4879a7035385cL },
20845       { 0x8c3dd30b3281705bL,0x7e361c6c404fe081L,0x7b21649c3f604edfL,
20846         0x5dbf6a3fe52ffe47L } },
20847     /* 62 << 210 */
20848     { { 0xc41b7c234b54d9bfL,0x1374e6813511c3d9L,0x1863bf16c1b2b758L,
20849         0x90e785071e9e6a96L },
20850       { 0xab4bf98d5d86f174L,0xd74e0bd385e96fe4L,0x8afde39fcac5d344L,
20851         0x90946dbcbd91b847L } },
20852     /* 63 << 210 */
20853     { { 0xf5b42358fe1a838cL,0x05aae6c5620ac9d8L,0x8e193bd8a1ce5a0bL,
20854         0x8f7105714dabfd72L },
20855       { 0x8d8fdd48182caaacL,0x8c4aeefa040745cfL,0x73c6c30af3b93e6dL,
20856         0x991241f316f42011L } },
20857     /* 64 << 210 */
20858     { { 0xa0158eeae457a477L,0xd19857dbee6ddc05L,0xb326522418c41671L,
20859         0x3ffdfc7e3c2c0d58L },
20860       { 0x3a3a525426ee7cdaL,0x341b0869df02c3a8L,0xa023bf42723bbfc8L,
20861         0x3d15002a14452691L } },
20862     /* 0 << 217 */
20863     { { 0x00, 0x00, 0x00, 0x00 },
20864       { 0x00, 0x00, 0x00, 0x00 } },
20865     /* 1 << 217 */
20866     { { 0x5ef7324c85edfa30L,0x2597655487d4f3daL,0x352f5bc0dcb50c86L,
20867         0x8f6927b04832a96cL },
20868       { 0xd08ee1ba55f2f94cL,0x6a996f99344b45faL,0xe133cb8da8aa455dL,
20869         0x5d0721ec758dc1f7L } },
20870     /* 2 << 217 */
20871     { { 0x6ba7a92079e5fb67L,0xe1331feb70aa725eL,0x5080ccf57df5d837L,
20872         0xe4cae01d7ff72e21L },
20873       { 0xd9243ee60412a77dL,0x06ff7cacdf449025L,0xbe75f7cd23ef5a31L,
20874         0xbc9578220ddef7a8L } },
20875     /* 3 << 217 */
20876     { { 0x8cf7230cb0ce1c55L,0x5b534d050bbfb607L,0xee1ef1130e16363bL,
20877         0x27e0aa7ab4999e82L },
20878       { 0xce1dac2d79362c41L,0x67920c9091bb6cb0L,0x1e648d632223df24L,
20879         0x0f7d9eefe32e8f28L } },
20880     /* 4 << 217 */
20881     { { 0x6943f39afa833834L,0x22951722a6328562L,0x81d63dd54170fc10L,
20882         0x9f5fa58faecc2e6dL },
20883       { 0xb66c8725e77d9a3bL,0x11235cea6384ebe0L,0x06a8c1185845e24aL,
20884         0x0137b286ebd093b1L } },
20885     /* 5 << 217 */
20886     { { 0xc589e1ce44ace150L,0xe0f8d3d94381e97cL,0x59e99b1162c5a4b8L,
20887         0x90d262f7fd0ec9f9L },
20888       { 0xfbc854c9283e13c9L,0x2d04fde7aedc7085L,0x057d776547dcbecbL,
20889         0x8dbdf5919a76fa5fL } },
20890     /* 6 << 217 */
20891     { { 0xd01506950de1e578L,0x2e1463e7e9f72bc6L,0xffa684411b39eca5L,
20892         0x673c85307c037f2fL },
20893       { 0xd0d6a600747f91daL,0xb08d43e1c9cb78e9L,0x0fc0c64427b5cef5L,
20894         0x5c1d160aa60a2fd6L } },
20895     /* 7 << 217 */
20896     { { 0xf98cae5328c8e13bL,0x375f10c4b2eddcd1L,0xd4eb8b7f5cce06adL,
20897         0xb4669f4580a2e1efL },
20898       { 0xd593f9d05bbd8699L,0x5528a4c9e7976d13L,0x3923e0951c7e28d3L,
20899         0xb92937903f6bb577L } },
20900     /* 8 << 217 */
20901     { { 0xdb567d6ac42bd6d2L,0x6df86468bb1f96aeL,0x0efe5b1a4843b28eL,
20902         0x961bbb056379b240L },
20903       { 0xb6caf5f070a6a26bL,0x70686c0d328e6e39L,0x80da06cf895fc8d3L,
20904         0x804d8810b363fdc9L } },
20905     /* 9 << 217 */
20906     { { 0xbe22877b207f1670L,0x9b0dd1884e615291L,0x625ae8dc97a3c2bfL,
20907         0x08584ef7439b86e8L },
20908       { 0xde7190a5dcd898ffL,0x26286c402058ee3dL,0x3db0b2175f87b1c1L,
20909         0xcc334771102a6db5L } },
20910     /* 10 << 217 */
20911     { { 0xd99de9542f770fb1L,0x97c1c6204cd7535eL,0xd3b6c4483f09cefcL,
20912         0xd725af155a63b4f8L },
20913       { 0x0c95d24fc01e20ecL,0xdfd374949ae7121fL,0x7d6ddb72ec77b7ecL,
20914         0xfe079d3b0353a4aeL } },
20915     /* 11 << 217 */
20916     { { 0x3066e70a2e6ac8d2L,0x9c6b5a43106e5c05L,0x52d3c6f5ede59b8cL,
20917         0x30d6a5c3fccec9aeL },
20918       { 0xedec7c224fc0a9efL,0x190ff08395c16cedL,0xbe12ec8f94de0fdeL,
20919         0x0d131ab8852d3433L } },
20920     /* 12 << 217 */
20921     { { 0x42ace07e85701291L,0x94793ed9194061a8L,0x30e83ed6d7f4a485L,
20922         0x9eec7269f9eeff4dL },
20923       { 0x90acba590c9d8005L,0x5feca4581e79b9d1L,0x8fbe54271d506a1eL,
20924         0xa32b2c8e2439cfa7L } },
20925     /* 13 << 217 */
20926     { { 0x1671c17373dd0b4eL,0x37a2821444a054c6L,0x81760a1b4e8b53f1L,
20927         0xa6c04224f9f93b9eL },
20928       { 0x18784b34cf671e3cL,0x81bbecd2cda9b994L,0x38831979b2ab3848L,
20929         0xef54feb7f2e03c2dL } },
20930     /* 14 << 217 */
20931     { { 0xcf197ca7fb8088faL,0x014272474ddc96c5L,0xa2d2550a30777176L,
20932         0x534698984d0cf71dL },
20933       { 0x6ce937b83a2aaac6L,0xe9f91dc35af38d9bL,0x2598ad83c8bf2899L,
20934         0x8e706ac9b5536c16L } },
20935     /* 15 << 217 */
20936     { { 0x40dc7495f688dc98L,0x26490cd7124c4afcL,0xe651ec841f18775cL,
20937         0x393ea6c3b4fdaf4aL },
20938       { 0x1e1f33437f338e0dL,0x39fb832b6053e7b5L,0x46e702da619e14d5L,
20939         0x859cacd1cdeef6e0L } },
20940     /* 16 << 217 */
20941     { { 0x63b99ce74462007dL,0xb8ab48a54cb5f5b7L,0x9ec673d2f55edde7L,
20942         0xd1567f748cfaefdaL },
20943       { 0x46381b6b0887bcecL,0x694497cee178f3c2L,0x5e6525e31e6266cbL,
20944         0x5931de26697d6413L } },
20945     /* 17 << 217 */
20946     { { 0x87f8df7c0e58d493L,0xb1ae5ed058b73f12L,0xc368f784dea0c34dL,
20947         0x9bd0a120859a91a0L },
20948       { 0xb00d88b7cc863c68L,0x3a1cc11e3d1f4d65L,0xea38e0e70aa85593L,
20949         0x37f13e987dc4aee8L } },
20950     /* 18 << 217 */
20951     { { 0x10d38667bc947badL,0x738e07ce2a36ee2eL,0xc93470cdc577fcacL,
20952         0xdee1b6162782470dL },
20953       { 0x36a25e672e793d12L,0xd6aa6caee0f186daL,0x474d0fd980e07af7L,
20954         0xf7cdc47dba8a5cd4L } },
20955     /* 19 << 217 */
20956     { { 0x28af6d9dab15247fL,0x7c789c10493a537fL,0x7ac9b11023a334e7L,
20957         0x0236ac0912c9c277L },
20958       { 0xa7e5bd251d7a5144L,0x098b9c2af13ec4ecL,0x3639dacad3f0abcaL,
20959         0x642da81aa23960f9L } },
20960     /* 20 << 217 */
20961     { { 0x7d2e5c054f7269b1L,0xfcf30777e287c385L,0x10edc84ff2a46f21L,
20962         0x354417574f43fa36L },
20963       { 0xf1327899fd703431L,0xa438d7a616dd587aL,0x65c34c57e9c8352dL,
20964         0xa728edab5cc5a24eL } },
20965     /* 21 << 217 */
20966     { { 0xaed78abc42531689L,0x0a51a0e8010963efL,0x5776fa0ad717d9b3L,
20967         0xf356c2397dd3428bL },
20968       { 0x29903fff8d3a3dacL,0x409597fa3d94491fL,0x4cd7a5ffbf4a56a4L,
20969         0xe50964748adab462L } },
20970     /* 22 << 217 */
20971     { { 0xa97b51265c3427b0L,0x6401405cd282c9bdL,0x3629f8d7222c5c45L,
20972         0xb1c02c16e8d50aedL },
20973       { 0xbea2ed75d9635bc9L,0x226790c76e24552fL,0x3c33f2a365f1d066L,
20974         0x2a43463e6dfccc2eL } },
20975     /* 23 << 217 */
20976     { { 0x8cc3453adb483761L,0xe7cc608565d5672bL,0x277ed6cbde3efc87L,
20977         0x19f2f36869234eafL },
20978       { 0x9aaf43175c0b800bL,0x1f1e7c898b6da6e2L,0x6cfb4715b94ec75eL,
20979         0xd590dd5f453118c2L } },
20980     /* 24 << 217 */
20981     { { 0x14e49da11f17a34cL,0x5420ab39235a1456L,0xb76372412f50363bL,
20982         0x7b15d623c3fabb6eL },
20983       { 0xa0ef40b1e274e49cL,0x5cf5074496b1860aL,0xd6583fbf66afe5a4L,
20984         0x44240510f47e3e9aL } },
20985     /* 25 << 217 */
20986     { { 0x9925434311b2d595L,0xf1367499eec8df57L,0x3cb12c613e73dd05L,
20987         0xd248c0337dac102aL },
20988       { 0xcf154f13a77739f5L,0xbf4288cb23d2af42L,0xaa64c9b632e4a1cfL,
20989         0xee8c07a8c8a208f3L } },
20990     /* 26 << 217 */
20991     { { 0xe10d49996fe8393fL,0x0f809a3fe91f3a32L,0x61096d1c802f63c8L,
20992         0x289e146257750d3dL },
20993       { 0xed06167e9889feeaL,0xd5c9c0e2e0993909L,0x46fca0d856508ac6L,
20994         0x918260474f1b8e83L } },
20995     /* 27 << 217 */
20996     { { 0x4f2c877a9a4a2751L,0x71bd0072cae6feadL,0x38df8dcc06aa1941L,
20997         0x5a074b4c63beeaa8L },
20998       { 0xd6d65934c1cec8edL,0xa6ecb49eaabc03bdL,0xaade91c2de8a8415L,
20999         0xcfb0efdf691136e0L } },
21000     /* 28 << 217 */
21001     { { 0x11af45ee23ab3495L,0xa132df880b77463dL,0x8923c15c815d06f4L,
21002         0xc3ceb3f50d61a436L },
21003       { 0xaf52291de88fb1daL,0xea0579741da12179L,0xb0d7218cd2fef720L,
21004         0x6c0899c98e1d8845L } },
21005     /* 29 << 217 */
21006     { { 0x98157504752ddad7L,0xd60bd74fa1a68a97L,0x7047a3a9f658fb99L,
21007         0x1f5d86d65f8511e4L },
21008       { 0xb8a4bc424b5a6d88L,0x69eb2c331abefa7dL,0x95bf39e813c9c510L,
21009         0xf571960ad48aab43L } },
21010     /* 30 << 217 */
21011     { { 0x7e8cfbcf704e23c6L,0xc71b7d2228aaa65bL,0xa041b2bd245e3c83L,
21012         0x69b98834d21854ffL },
21013       { 0x89d227a3963bfeecL,0x99947aaade7da7cbL,0x1d9ee9dbee68a9b1L,
21014         0x0a08f003698ec368L } },
21015     /* 31 << 217 */
21016     { { 0xe9ea409478ef2487L,0xc8d2d41502cfec26L,0xc52f9a6eb7dcf328L,
21017         0x0ed489e385b6a937L },
21018       { 0x9b94986bbef3366eL,0x0de59c70edddddb8L,0xffdb748ceadddbe2L,
21019         0x9b9784bb8266ea40L } },
21020     /* 32 << 217 */
21021     { { 0x142b55021a93507aL,0xb4cd11878d3c06cfL,0xdf70e76a91ec3f40L,
21022         0x484e81ad4e7553c2L },
21023       { 0x830f87b5272e9d6eL,0xea1c93e5c6ff514aL,0x67cc2adcc4192a8eL,
21024         0xc77e27e242f4535aL } },
21025     /* 33 << 217 */
21026     { { 0x9cdbab36d2b713c5L,0x86274ea0cf7b0cd3L,0x784680f309af826bL,
21027         0xbfcc837a0c72dea3L },
21028       { 0xa8bdfe9dd6529b73L,0x708aa22863a88002L,0x6c7a9a54c91d45b9L,
21029         0xdf1a38bbfd004f56L } },
21030     /* 34 << 217 */
21031     { { 0x2e8c9a26b8bad853L,0x2d52cea33723eae7L,0x054d6d8156ca2830L,
21032         0xa3317d149a8dc411L },
21033       { 0xa08662fefd4ddedaL,0xed2a153ab55d792bL,0x7035c16abfc6e944L,
21034         0xb6bc583400171cf3L } },
21035     /* 35 << 217 */
21036     { { 0xe27152b383d102b6L,0xfe695a470646b848L,0xa5bb09d8916e6d37L,
21037         0xb4269d640d17015eL },
21038       { 0x8d8156a10a1d2285L,0xfeef6c5146d26d72L,0x9dac57c84c5434a7L,
21039         0x0282e5be59d39e31L } },
21040     /* 36 << 217 */
21041     { { 0xedfff181721c486dL,0x301baf10bc58824eL,0x8136a6aa00570031L,
21042         0x55aaf78c1cddde68L },
21043       { 0x2682937159c63952L,0x3a3bd2748bc25bafL,0xecdf8657b7e52dc3L,
21044         0x2dd8c087fd78e6c8L } },
21045     /* 37 << 217 */
21046     { { 0x20553274f5531461L,0x8b4a12815d95499bL,0xe2c8763a1a80f9d2L,
21047         0xd1dbe32b4ddec758L },
21048       { 0xaf12210d30c34169L,0xba74a95378baa533L,0x3d133c6ea438f254L,
21049         0xa431531a201bef5bL } },
21050     /* 38 << 217 */
21051     { { 0x15295e22f669d7ecL,0xca374f64357fb515L,0x8a8406ffeaa3fdb3L,
21052         0x106ae448df3f2da8L },
21053       { 0x8f9b0a9033c8e9a1L,0x234645e271ad5885L,0x3d0832241c0aed14L,
21054         0xf10a7d3e7a942d46L } },
21055     /* 39 << 217 */
21056     { { 0x7c11deee40d5c9beL,0xb2bae7ffba84ed98L,0x93e97139aad58dddL,
21057         0x3d8727963f6d1fa3L },
21058       { 0x483aca818569ff13L,0x8b89a5fb9a600f72L,0x4cbc27c3c06f2b86L,
21059         0x2213071363ad9c0bL } },
21060     /* 40 << 217 */
21061     { { 0xb5358b1e48ac2840L,0x18311294ecba9477L,0xda58f990a6946b43L,
21062         0x3098baf99ab41819L },
21063       { 0x66c4c1584198da52L,0xab4fc17c146bfd1bL,0x2f0a4c3cbf36a908L,
21064         0x2ae9e34b58cf7838L } },
21065     /* 41 << 217 */
21066     { { 0xf411529e3fa11b1fL,0x21e43677974af2b4L,0x7c20958ec230793bL,
21067         0x710ea88516e840f3L },
21068       { 0xfc0b21fcc5dc67cfL,0x08d5164788405718L,0xd955c21fcfe49eb7L,
21069         0x9722a5d556dd4a1fL } },
21070     /* 42 << 217 */
21071     { { 0xc9ef50e2c861baa5L,0xc0c21a5d9505ac3eL,0xaf6b9a338b7c063fL,
21072         0xc63703392f4779c1L },
21073       { 0x22df99c7638167c3L,0xfe6ffe76795db30cL,0x2b822d33a4854989L,
21074         0xfef031dd30563aa5L } },
21075     /* 43 << 217 */
21076     { { 0x16b09f82d57c667fL,0xc70312cecc0b76f1L,0xbf04a9e6c9118aecL,
21077         0x82fcb4193409d133L },
21078       { 0x1a8ab385ab45d44dL,0xfba07222617b83a3L,0xb05f50dd58e81b52L,
21079         0x1d8db55321ce5affL } },
21080     /* 44 << 217 */
21081     { { 0x3097b8d4e344a873L,0x7d8d116dfe36d53eL,0x6db22f587875e750L,
21082         0x2dc5e37343e144eaL },
21083       { 0xc05f32e6e799eb95L,0xe9e5f4df6899e6ecL,0xbdc3bd681fab23d5L,
21084         0xb72b8ab773af60e6L } },
21085     /* 45 << 217 */
21086     { { 0x8db27ae02cecc84aL,0x600016d87bdb871cL,0x42a44b13d7c46f58L,
21087         0xb8919727c3a77d39L },
21088       { 0xcfc6bbbddafd6088L,0x1a7401466bd20d39L,0x8c747abd98c41072L,
21089         0x4c91e765bdf68ea1L } },
21090     /* 46 << 217 */
21091     { { 0x7c95e5ca08819a78L,0xcf48b729c9587921L,0x091c7c5fdebbcc7dL,
21092         0x6f287404f0e05149L },
21093       { 0xf83b5ac226cd44ecL,0x88ae32a6cfea250eL,0x6ac5047a1d06ebc5L,
21094         0xc7e550b4d434f781L } },
21095     /* 47 << 217 */
21096     { { 0x61ab1cf25c727bd2L,0x2e4badb11cf915b0L,0x1b4dadecf69d3920L,
21097         0xe61b1ca6f14c1dfeL },
21098       { 0x90b479ccbd6bd51fL,0x8024e4018045ec30L,0xcab29ca325ef0e62L,
21099         0x4f2e941649e4ebc0L } },
21100     /* 48 << 217 */
21101     { { 0x45eb40ec0ccced58L,0x25cd4b9c0da44f98L,0x43e06458871812c6L,
21102         0x99f80d5516cef651L },
21103       { 0x571340c9ce6dc153L,0x138d5117d8665521L,0xacdb45bc4e07014dL,
21104         0x2f34bb3884b60b91L } },
21105     /* 49 << 217 */
21106     { { 0xf44a4fd22ae8921eL,0xb039288e892ba1e2L,0x9da50174b1c180b2L,
21107         0x6b70ab661693dc87L },
21108       { 0x7e9babc9e7057481L,0x4581ddef9c80dc41L,0x0c890da951294682L,
21109         0x0b5629d33f4736e5L } },
21110     /* 50 << 217 */
21111     { { 0x2340c79eb06f5b41L,0xa42e84ce4e243469L,0xf9a20135045a71a9L,
21112         0xefbfb415d27b6fb6L },
21113       { 0x25ebea239d33cd6fL,0x9caedb88aa6c0af8L,0x53dc7e9ad9ce6f96L,
21114         0x3897f9fd51e0b15aL } },
21115     /* 51 << 217 */
21116     { { 0xf51cb1f88e5d788eL,0x1aec7ba8e1d490eeL,0x265991e0cc58cb3cL,
21117         0x9f306e8c9fc3ad31L },
21118       { 0x5fed006e5040a0acL,0xca9d5043fb476f2eL,0xa19c06e8beea7a23L,
21119         0xd28658010edabb63L } },
21120     /* 52 << 217 */
21121     { { 0xdb92293f6967469aL,0x2894d8398d8a8ed8L,0x87c9e406bbc77122L,
21122         0x8671c6f12ea3a26aL },
21123       { 0xe42df8d6d7de9853L,0x2e3ce346b1f2bcc7L,0xda601dfc899d50cfL,
21124         0xbfc913defb1b598fL } },
21125     /* 53 << 217 */
21126     { { 0x81c4909fe61f7908L,0x192e304f9bbc7b29L,0xc3ed8738c104b338L,
21127         0xedbe9e47783f5d61L },
21128       { 0x0c06e9be2db30660L,0xda3e613fc0eb7d8eL,0xd8fa3e97322e096eL,
21129         0xfebd91e8d336e247L } },
21130     /* 54 << 217 */
21131     { { 0x8f13ccc4df655a49L,0xa9e00dfc5eb20210L,0x84631d0fc656b6eaL,
21132         0x93a058cdd8c0d947L },
21133       { 0x6846904a67bd3448L,0x4a3d4e1af394fd5cL,0xc102c1a5db225f52L,
21134         0xe3455bbafc4f5e9aL } },
21135     /* 55 << 217 */
21136     { { 0x6b36985b4b9ad1ceL,0xa98185365bb7f793L,0x6c25e1d048b1a416L,
21137         0x1381dd533c81bee7L },
21138       { 0xd2a30d617a4a7620L,0xc841292639b8944cL,0x3c1c6fbe7a97c33aL,
21139         0x941e541d938664e7L } },
21140     /* 56 << 217 */
21141     { { 0x417499e84a34f239L,0x15fdb83cb90402d5L,0xb75f46bf433aa832L,
21142         0xb61e15af63215db1L },
21143       { 0xaabe59d4a127f89aL,0x5d541e0c07e816daL,0xaaba0659a618b692L,
21144         0x5532773317266026L } },
21145     /* 57 << 217 */
21146     { { 0xaf53a0fc95f57552L,0x329476506cacb0c9L,0x253ff58dc821be01L,
21147         0xb0309531a06f1146L },
21148       { 0x59bbbdf505c2e54dL,0x158f27ad26e8dd22L,0xcc5b7ffb397e1e53L,
21149         0xae03f65b7fc1e50dL } },
21150     /* 58 << 217 */
21151     { { 0xa9784ebd9c95f0f9L,0x5ed9deb224640771L,0x31244af7035561c4L,
21152         0x87332f3a7ee857deL },
21153       { 0x09e16e9e2b9e0d88L,0x52d910f456a06049L,0x507ed477a9592f48L,
21154         0x85cb917b2365d678L } },
21155     /* 59 << 217 */
21156     { { 0xf8511c934c8998d1L,0x2186a3f1730ea58fL,0x50189626b2029db0L,
21157         0x9137a6d902ceb75aL },
21158       { 0x2fe17f37748bc82cL,0x87c2e93180469f8cL,0x850f71cdbf891aa2L,
21159         0x0ca1b89b75ec3d8dL } },
21160     /* 60 << 217 */
21161     { { 0x516c43aa5e1cd3cdL,0x893978089a887c28L,0x0059c699ddea1f9fL,
21162         0x7737d6fa8e6868f7L },
21163       { 0x6d93746a60f1524bL,0x36985e55ba052aa7L,0x41b1d322ed923ea5L,
21164         0x3429759f25852a11L } },
21165     /* 61 << 217 */
21166     { { 0xbeca6ec3092e9f41L,0x3a238c6662256bbdL,0xd82958ea70ad487dL,
21167         0x4ac8aaf965610d93L },
21168       { 0x3fa101b15e4ccab0L,0x9bf430f29de14bfbL,0xa10f5cc66531899dL,
21169         0x590005fbea8ce17dL } },
21170     /* 62 << 217 */
21171     { { 0xc437912f24544cb6L,0x9987b71ad79ac2e3L,0x13e3d9ddc058a212L,
21172         0x00075aacd2de9606L },
21173       { 0x80ab508b6cac8369L,0x87842be7f54f6c89L,0xa7ad663d6bc532a4L,
21174         0x67813de778a91bc8L } },
21175     /* 63 << 217 */
21176     { { 0x5dcb61cec3427239L,0x5f3c7cf0c56934d9L,0xc079e0fbe3191591L,
21177         0xe40896bdb01aada7L },
21178       { 0x8d4667910492d25fL,0x8aeb30c9e7408276L,0xe94374959287aaccL,
21179         0x23d4708d79fe03d4L } },
21180     /* 64 << 217 */
21181     { { 0x8cda9cf2d0c05199L,0x502fbc22fae78454L,0xc0bda9dff572a182L,
21182         0x5f9b71b86158b372L },
21183       { 0xe0f33a592b82dd07L,0x763027359523032eL,0x7fe1a721c4505a32L,
21184         0x7b6e3e82f796409fL } },
21185     /* 0 << 224 */
21186     { { 0x00, 0x00, 0x00, 0x00 },
21187       { 0x00, 0x00, 0x00, 0x00 } },
21188     /* 1 << 224 */
21189     { { 0xe3417bc035d0b34aL,0x440b386b8327c0a7L,0x8fb7262dac0362d1L,
21190         0x2c41114ce0cdf943L },
21191       { 0x2ba5cef1ad95a0b1L,0xc09b37a867d54362L,0x26d6cdd201e486c9L,
21192         0x20477abf42ff9297L } },
21193     /* 2 << 224 */
21194     { { 0xa004dcb3292a9287L,0xddc15cf677b092c7L,0x083a8464806c0605L,
21195         0x4a68df703db997b0L },
21196       { 0x9c134e4505bf7dd0L,0xa4e63d398ccf7f8cL,0xa6e6517f41b5f8afL,
21197         0xaa8b9342ad7bc1ccL } },
21198     /* 3 << 224 */
21199     { { 0x126f35b51e706ad9L,0xb99cebb4c3a9ebdfL,0xa75389afbf608d90L,
21200         0x76113c4fc6c89858L },
21201       { 0x80de8eb097e2b5aaL,0x7e1022cc63b91304L,0x3bdab6056ccc066cL,
21202         0x33cbb144b2edf900L } },
21203     /* 4 << 224 */
21204     { { 0xc41764717af715d2L,0xe2f7f594d0134a96L,0x2c1873efa41ec956L,
21205         0xe4e7b4f677821304L },
21206       { 0xe5c8ff9788d5374aL,0x2b915e6380823d5bL,0xea6bc755b2ee8fe2L,
21207         0x6657624ce7112651L } },
21208     /* 5 << 224 */
21209     { { 0x157af101dace5acaL,0xc4fdbcf211a6a267L,0xdaddf340c49c8609L,
21210         0x97e49f52e9604a65L },
21211       { 0x9be8e790937e2ad5L,0x846e2508326e17f1L,0x3f38007a0bbbc0dcL,
21212         0xcf03603fb11e16d6L } },
21213     /* 6 << 224 */
21214     { { 0xd6f800e07442f1d5L,0x475607d166e0e3abL,0x82807f16b7c64047L,
21215         0x8858e1e3a749883dL },
21216       { 0x5859120b8231ee10L,0x1b80e7eb638a1eceL,0xcb72525ac6aa73a4L,
21217         0xa7cdea3d844423acL } },
21218     /* 7 << 224 */
21219     { { 0x5ed0c007f8ae7c38L,0x6db07a5c3d740192L,0xbe5e9c2a5fe36db3L,
21220         0xd5b9d57a76e95046L },
21221       { 0x54ac32e78eba20f2L,0xef11ca8f71b9a352L,0x305e373eff98a658L,
21222         0xffe5a100823eb667L } },
21223     /* 8 << 224 */
21224     { { 0x57477b11e51732d2L,0xdfd6eb282538fc0eL,0x5c43b0cc3b39eec5L,
21225         0x6af12778cb36cc57L },
21226       { 0x70b0852d06c425aeL,0x6df92f8c5c221b9bL,0x6c8d4f9ece826d9cL,
21227         0xf59aba7bb49359c3L } },
21228     /* 9 << 224 */
21229     { { 0x5c8ed8d5da64309dL,0x61a6de5691b30704L,0xd6b52f6a2f9b5808L,
21230         0x0eee419498c958a7L },
21231       { 0xcddd9aab771e4caaL,0x83965dfd78bc21beL,0x02affce3b3b504f5L,
21232         0x30847a21561c8291L } },
21233     /* 10 << 224 */
21234     { { 0xd2eb2cf152bfda05L,0xe0e4c4e96197b98cL,0x1d35076cf8a1726fL,
21235         0x6c06085b2db11e3dL },
21236       { 0x15c0c4d74463ba14L,0x9d292f830030238cL,0x1311ee8b3727536dL,
21237         0xfeea86efbeaedc1eL } },
21238     /* 11 << 224 */
21239     { { 0xb9d18cd366131e2eL,0xf31d974f80fe2682L,0xb6e49e0fe4160289L,
21240         0x7c48ec0b08e92799L },
21241       { 0x818111d8d1989aa7L,0xb34fa0aaebf926f9L,0xdb5fe2f5a245474aL,
21242         0xf80a6ebb3c7ca756L } },
21243     /* 12 << 224 */
21244     { { 0xa7f96054afa05dd8L,0x26dfcf21fcaf119eL,0xe20ef2e30564bb59L,
21245         0xef4dca5061cb02b8L },
21246       { 0xcda7838a65d30672L,0x8b08d534fd657e86L,0x4c5b439546d595c8L,
21247         0x39b58725425cb836L } },
21248     /* 13 << 224 */
21249     { { 0x8ea610593de9abe3L,0x404348819cdc03beL,0x9b261245cfedce8cL,
21250         0x78c318b4cf5234a1L },
21251       { 0x510bcf16fde24c99L,0x2a77cb75a2c2ff5dL,0x9c895c2b27960fb4L,
21252         0xd30ce975b0eda42bL } },
21253     /* 14 << 224 */
21254     { { 0xfda853931a62cc26L,0x23c69b9650c0e052L,0xa227df15bfc633f3L,
21255         0x2ac788481bae7d48L },
21256       { 0x487878f9187d073dL,0x6c2be919967f807dL,0x765861d8336e6d8fL,
21257         0x88b8974cce528a43L } },
21258     /* 15 << 224 */
21259     { { 0x09521177ff57d051L,0x2ff38037fb6a1961L,0xfc0aba74a3d76ad4L,
21260         0x7c76480325a7ec17L },
21261       { 0x7532d75f48879bc8L,0xea7eacc058ce6bc1L,0xc82176b48e896c16L,
21262         0x9a30e0b22c750fedL } },
21263     /* 16 << 224 */
21264     { { 0xc37e2c2e421d3aa4L,0xf926407ce84fa840L,0x18abc03d1454e41cL,
21265         0x26605ecd3f7af644L },
21266       { 0x242341a6d6a5eabfL,0x1edb84f4216b668eL,0xd836edb804010102L,
21267         0x5b337ce7945e1d8cL } },
21268     /* 17 << 224 */
21269     { { 0xd2075c77c055dc14L,0x2a0ffa2581d89cdfL,0x8ce815ea6ffdcbafL,
21270         0xa3428878fb648867L },
21271       { 0x277699cf884655fbL,0xfa5b5bd6364d3e41L,0x01f680c6441e1cb7L,
21272         0x3fd61e66b70a7d67L } },
21273     /* 18 << 224 */
21274     { { 0x666ba2dccc78cf66L,0xb30181746fdbff77L,0x8d4dd0db168d4668L,
21275         0x259455d01dab3a2aL },
21276       { 0xf58564c5cde3acecL,0x7714192513adb276L,0x527d725d8a303f65L,
21277         0x55deb6c9e6f38f7bL } },
21278     /* 19 << 224 */
21279     { { 0xfd5bb657b1fa70fbL,0xfa07f50fd8073a00L,0xf72e3aa7bca02500L,
21280         0xf68f895d9975740dL },
21281       { 0x301120605cae2a6aL,0x01bd721802874842L,0x3d4238917ce47bd3L,
21282         0xa66663c1789544f6L } },
21283     /* 20 << 224 */
21284     { { 0x864d05d73272d838L,0xe22924f9fa6295c5L,0x8189593f6c2fda32L,
21285         0x330d7189b184b544L },
21286       { 0x79efa62cbde1f714L,0x35771c94e5cb1a63L,0x2f4826b8641c8332L,
21287         0x00a894fbc8cee854L } },
21288     /* 21 << 224 */
21289     { { 0xb4b9a39b36194d40L,0xe857a7c577612601L,0xf4209dd24ecf2f58L,
21290         0x82b9e66d5a033487L },
21291       { 0xc1e36934e4e8b9ddL,0xd2372c9da42377d7L,0x51dc94c70e3ae43bL,
21292         0x4c57761e04474f6fL } },
21293     /* 22 << 224 */
21294     { { 0xdcdacd0a1058a318L,0x369cf3f578053a9aL,0xc6c3de5031c68de2L,
21295         0x4653a5763c4b6d9fL },
21296       { 0x1688dd5aaa4e5c97L,0x5be80aa1b7ab3c74L,0x70cefe7cbc65c283L,
21297         0x57f95f1306867091L } },
21298     /* 23 << 224 */
21299     { { 0xa39114e24415503bL,0xc08ff7c64cbb17e9L,0x1eff674dd7dec966L,
21300         0x6d4690af53376f63L },
21301       { 0xff6fe32eea74237bL,0xc436d17ecd57508eL,0x15aa28e1edcc40feL,
21302         0x0d769c04581bbb44L } },
21303     /* 24 << 224 */
21304     { { 0xc240b6de34eaacdaL,0xd9e116e82ba0f1deL,0xcbe45ec779438e55L,
21305         0x91787c9d96f752d7L },
21306       { 0x897f532bf129ac2fL,0xd307b7c85a36e22cL,0x91940675749fb8f3L,
21307         0xd14f95d0157fdb28L } },
21308     /* 25 << 224 */
21309     { { 0xfe51d0296ae55043L,0x8931e98f44a87de1L,0xe57f1cc609e4fee2L,
21310         0x0d063b674e072d92L },
21311       { 0x70a998b9ed0e4316L,0xe74a736b306aca46L,0xecf0fbf24fda97c7L,
21312         0xa40f65cb3e178d93L } },
21313     /* 26 << 224 */
21314     { { 0x1625360416df4285L,0xb0c9babbd0c56ae2L,0x73032b19cfc5cfc3L,
21315         0xe497e5c309752056L },
21316       { 0x12096bb4164bda96L,0x1ee42419a0b74da1L,0x8fc36243403826baL,
21317         0x0c8f0069dc09e660L } },
21318     /* 27 << 224 */
21319     { { 0x8667e981c27253c9L,0x05a6aefb92b36a45L,0xa62c4b369cb7bb46L,
21320         0x8394f37511f7027bL },
21321       { 0x747bc79c5f109d0fL,0xcad88a765b8cc60aL,0x80c5a66b58f09e68L,
21322         0xe753d451f6127eacL } },
21323     /* 28 << 224 */
21324     { { 0xc44b74a15b0ec6f5L,0x47989fe45289b2b8L,0x745f848458d6fc73L,
21325         0xec362a6ff61c70abL },
21326       { 0x070c98a7b3a8ad41L,0x73a20fc07b63db51L,0xed2c2173f44c35f4L,
21327         0x8a56149d9acc9dcaL } },
21328     /* 29 << 224 */
21329     { { 0x98f178819ac6e0f4L,0x360fdeafa413b5edL,0x0625b8f4a300b0fdL,
21330         0xf1f4d76a5b3222d3L },
21331       { 0x9d6f5109587f76b8L,0x8b4ee08d2317fdb5L,0x88089bb78c68b095L,
21332         0x95570e9a5808d9b9L } },
21333     /* 30 << 224 */
21334     { { 0xa395c36f35d33ae7L,0x200ea12350bb5a94L,0x20c789bd0bafe84bL,
21335         0x243ef52d0919276aL },
21336       { 0x3934c577e23ae233L,0xb93807afa460d1ecL,0xb72a53b1f8fa76a4L,
21337         0xd8914cb0c3ca4491L } },
21338     /* 31 << 224 */
21339     { { 0x2e1284943fb42622L,0x3b2700ac500907d5L,0xf370fb091a95ec63L,
21340         0xf8f30be231b6dfbdL },
21341       { 0xf2b2f8d269e55f15L,0x1fead851cc1323e9L,0xfa366010d9e5eef6L,
21342         0x64d487b0e316107eL } },
21343     /* 32 << 224 */
21344     { { 0x4c076b86d23ddc82L,0x03fd344c7e0143f0L,0xa95362ff317af2c5L,
21345         0x0add3db7e18b7a4fL },
21346       { 0x9c673e3f8260e01bL,0xfbeb49e554a1cc91L,0x91351bf292f2e433L,
21347         0xc755e7ec851141ebL } },
21348     /* 33 << 224 */
21349     { { 0xc9a9513929607745L,0x0ca07420a26f2b28L,0xcb2790e74bc6f9ddL,
21350         0x345bbb58adcaffc0L },
21351       { 0xc65ea38cbe0f27a2L,0x67c24d7c641fcb56L,0x2c25f0a7a9e2c757L,
21352         0x93f5cdb016f16c49L } },
21353     /* 34 << 224 */
21354     { { 0x2ca5a9d7c5ee30a1L,0xd1593635b909b729L,0x804ce9f3dadeff48L,
21355         0xec464751b07c30c3L },
21356       { 0x89d65ff39e49af6aL,0xf2d6238a6f3d01bcL,0x1095561e0bced843L,
21357         0x51789e12c8a13fd8L } },
21358     /* 35 << 224 */
21359     { { 0xd633f929763231dfL,0x46df9f7de7cbddefL,0x01c889c0cb265da8L,
21360         0xfce1ad10af4336d2L },
21361       { 0x8d110df6fc6a0a7eL,0xdd431b986da425dcL,0xcdc4aeab1834aabeL,
21362         0x84deb1248439b7fcL } },
21363     /* 36 << 224 */
21364     { { 0x8796f1693c2a5998L,0x9b9247b47947190dL,0x55b9d9a511597014L,
21365         0x7e9dd70d7b1566eeL },
21366       { 0x94ad78f7cbcd5e64L,0x0359ac179bd4c032L,0x3b11baaf7cc222aeL,
21367         0xa6a6e284ba78e812L } },
21368     /* 37 << 224 */
21369     { { 0x8392053f24cea1a0L,0xc97bce4a33621491L,0x7eb1db3435399ee9L,
21370         0x473f78efece81ad1L },
21371       { 0x41d72fe0f63d3d0dL,0xe620b880afab62fcL,0x92096bc993158383L,
21372         0x41a213578f896f6cL } },
21373     /* 38 << 224 */
21374     { { 0x1b5ee2fac7dcfcabL,0x650acfde9546e007L,0xc081b749b1b02e07L,
21375         0xda9e41a0f9eca03dL },
21376       { 0x013ba727175a54abL,0xca0cd190ea5d8d10L,0x85ea52c095fd96a9L,
21377         0x2c591b9fbc5c3940L } },
21378     /* 39 << 224 */
21379     { { 0x6fb4d4e42bad4d5fL,0xfa4c3590fef0059bL,0x6a10218af5122294L,
21380         0x9a78a81aa85751d1L },
21381       { 0x04f20579a98e84e7L,0xfe1242c04997e5b5L,0xe77a273bca21e1e4L,
21382         0xfcc8b1ef9411939dL } },
21383     /* 40 << 224 */
21384     { { 0xe20ea30292d0487aL,0x1442dbec294b91feL,0x1f7a4afebb6b0e8fL,
21385         0x1700ef746889c318L },
21386       { 0xf5bbffc370f1fc62L,0x3b31d4b669c79ccaL,0xe8bc2aaba7f6340dL,
21387         0xb0b08ab4a725e10aL } },
21388     /* 41 << 224 */
21389     { { 0x44f05701ae340050L,0xba4b30161cf0c569L,0x5aa29f83fbe19a51L,
21390         0x1b9ed428b71d752eL },
21391       { 0x1666e54eeb4819f5L,0x616cdfed9e18b75bL,0x112ed5be3ee27b0bL,
21392         0xfbf2831944c7de4dL } },
21393     /* 42 << 224 */
21394     { { 0xd685ec85e0e60d84L,0x68037e301db7ee78L,0x5b65bdcd003c4d6eL,
21395         0x33e7363a93e29a6aL },
21396       { 0x995b3a6108d0756cL,0xd727f85c2faf134bL,0xfac6edf71d337823L,
21397         0x99b9aa500439b8b4L } },
21398     /* 43 << 224 */
21399     { { 0x722eb104e2b4e075L,0x49987295437c4926L,0xb1e4c0e446a9b82dL,
21400         0xd0cb319757a006f5L },
21401       { 0xf3de0f7dd7808c56L,0xb5c54d8f51f89772L,0x500a114aadbd31aaL,
21402         0x9afaaaa6295f6cabL } },
21403     /* 44 << 224 */
21404     { { 0x94705e2104cf667aL,0xfc2a811b9d3935d7L,0x560b02806d09267cL,
21405         0xf19ed119f780e53bL },
21406       { 0xf0227c09067b6269L,0x967b85335caef599L,0x155b924368efeebcL,
21407         0xcd6d34f5c497bae6L } },
21408     /* 45 << 224 */
21409     { { 0x1dd8d5d36cceb370L,0x2aeac579a78d7bf9L,0x5d65017d70b67a62L,
21410         0x70c8e44f17c53f67L },
21411       { 0xd1fc095086a34d09L,0xe0fca256e7134907L,0xe24fa29c80fdd315L,
21412         0x2c4acd03d87499adL } },
21413     /* 46 << 224 */
21414     { { 0xbaaf75173b5a9ba6L,0xb9cbe1f612e51a51L,0xd88edae35e154897L,
21415         0xe4309c3c77b66ca0L },
21416       { 0xf5555805f67f3746L,0x85fc37baa36401ffL,0xdf86e2cad9499a53L,
21417         0x6270b2a3ecbc955bL } },
21418     /* 47 << 224 */
21419     { { 0xafae64f5974ad33bL,0x04d85977fe7b2df1L,0x2a3db3ff4ab03f73L,
21420         0x0b87878a8702740aL },
21421       { 0x6d263f015a061732L,0xc25430cea32a1901L,0xf7ebab3ddb155018L,
21422         0x3a86f69363a9b78eL } },
21423     /* 48 << 224 */
21424     { { 0x349ae368da9f3804L,0x470f07fea164349cL,0xd52f4cc98562baa5L,
21425         0xc74a9e862b290df3L },
21426       { 0xd3a1aa3543471a24L,0x239446beb8194511L,0xbec2dd0081dcd44dL,
21427         0xca3d7f0fc42ac82dL } },
21428     /* 49 << 224 */
21429     { { 0x1f3db085fdaf4520L,0xbb6d3e804549daf2L,0xf5969d8a19ad5c42L,
21430         0x7052b13ddbfd1511L },
21431       { 0x11890d1b682b9060L,0xa71d3883ac34452cL,0xa438055b783805b4L,
21432         0x432412774725b23eL } },
21433     /* 50 << 224 */
21434     { { 0xf20cf96e4901bbedL,0x6419c710f432a2bbL,0x57a0fbb9dfa9cd7dL,
21435         0x589111e400daa249L },
21436       { 0x19809a337b60554eL,0xea5f8887ede283a4L,0x2d713802503bfd35L,
21437         0x151bb0af585d2a53L } },
21438     /* 51 << 224 */
21439     { { 0x40b08f7443b30ca8L,0xe10b5bbad9934583L,0xe8a546d6b51110adL,
21440         0x1dd50e6628e0b6c5L },
21441       { 0x292e9d54cff2b821L,0x3882555d47281760L,0x134838f83724d6e3L,
21442         0xf2c679e022ddcda1L } },
21443     /* 52 << 224 */
21444     { { 0x40ee88156d2a5768L,0x7f227bd21c1e7e2dL,0x487ba134d04ff443L,
21445         0x76e2ff3dc614e54bL },
21446       { 0x36b88d6fa3177ec7L,0xbf731d512328fff5L,0x758caea249ba158eL,
21447         0x5ab8ff4c02938188L } },
21448     /* 53 << 224 */
21449     { { 0x33e1605635edc56dL,0x5a69d3497e940d79L,0x6c4fd00103866dcbL,
21450         0x20a38f574893cdefL },
21451       { 0xfbf3e790fac3a15bL,0x6ed7ea2e7a4f8e6bL,0xa663eb4fbc3aca86L,
21452         0x22061ea5080d53f7L } },
21453     /* 54 << 224 */
21454     { { 0x2480dfe6f546783fL,0xd38bc6da5a0a641eL,0xfb093cd12ede8965L,
21455         0x89654db4acb455cfL },
21456       { 0x413cbf9a26e1adeeL,0x291f3764373294d4L,0x00797257648083feL,
21457         0x25f504d3208cc341L } },
21458     /* 55 << 224 */
21459     { { 0x635a8e5ec3a0ee43L,0x70aaebca679898ffL,0x9ee9f5475dc63d56L,
21460         0xce987966ffb34d00L },
21461       { 0xf9f86b195e26310aL,0x9e435484382a8ca8L,0x253bcb81c2352fe4L,
21462         0xa4eac8b04474b571L } },
21463     /* 56 << 224 */
21464     { { 0xc1b97512c1ad8cf8L,0x193b4e9e99e0b697L,0x939d271601e85df0L,
21465         0x4fb265b3cd44eafdL },
21466       { 0x321e7dcde51e1ae2L,0x8e3a8ca6e3d8b096L,0x8de46cb052604998L,
21467         0x91099ad839072aa7L } },
21468     /* 57 << 224 */
21469     { { 0x2617f91c93aa96b8L,0x0fc8716b7fca2e13L,0xa7106f5e95328723L,
21470         0xd1c9c40b262e6522L },
21471       { 0xb9bafe8642b7c094L,0x1873439d1543c021L,0xe1baa5de5cbefd5dL,
21472         0xa363fc5e521e8affL } },
21473     /* 58 << 224 */
21474     { { 0xefe6320df862eaacL,0x14419c6322c647dcL,0x0e06707c4e46d428L,
21475         0xcb6c834f4a178f8fL },
21476       { 0x0f993a45d30f917cL,0xd4c4b0499879afeeL,0xb6142a1e70500063L,
21477         0x7c9b41c3a5d9d605L } },
21478     /* 59 << 224 */
21479     { { 0xbc00fc2f2f8ba2c7L,0x0966eb2f7c67aa28L,0x13f7b5165a786972L,
21480         0x3bfb75578a2fbba0L },
21481       { 0x131c4f235a2b9620L,0xbff3ed276faf46beL,0x9b4473d17e172323L,
21482         0x421e8878339f6246L } },
21483     /* 60 << 224 */
21484     { { 0x0fa8587a25a41632L,0xc0814124a35b6c93L,0x2b18a9f559ebb8dbL,
21485         0x264e335776edb29cL },
21486       { 0xaf245ccdc87c51e2L,0x16b3015b501e6214L,0xbb31c5600a3882ceL,
21487         0x6961bb94fec11e04L } },
21488     /* 61 << 224 */
21489     { { 0x3b825b8deff7a3a0L,0xbec33738b1df7326L,0x68ad747c99604a1fL,
21490         0xd154c9349a3bd499L },
21491       { 0xac33506f1cc7a906L,0x73bb53926c560e8fL,0x6428fcbe263e3944L,
21492         0xc11828d51c387434L } },
21493     /* 62 << 224 */
21494     { { 0x3cd04be13e4b12ffL,0xc3aad9f92d88667cL,0xc52ddcf8248120cfL,
21495         0x985a892e2a389532L },
21496       { 0xfbb4b21b3bb85fa0L,0xf95375e08dfc6269L,0xfb4fb06c7ee2aceaL,
21497         0x6785426e309c4d1fL } },
21498     /* 63 << 224 */
21499     { { 0x659b17c8d8ceb147L,0x9b649eeeb70a5554L,0x6b7fa0b5ac6bc634L,
21500         0xd99fe2c71d6e732fL },
21501       { 0x30e6e7628d3abba2L,0x18fee6e7a797b799L,0x5c9d360dc696464dL,
21502         0xe3baeb4827bfde12L } },
21503     /* 64 << 224 */
21504     { { 0x2bf5db47f23206d5L,0x2f6d34201d260152L,0x17b876533f8ff89aL,
21505         0x5157c30c378fa458L },
21506       { 0x7517c5c52d4fb936L,0xef22f7ace6518cdcL,0xdeb483e6bf847a64L,
21507         0xf508455892e0fa89L } },
21508     /* 0 << 231 */
21509     { { 0x00, 0x00, 0x00, 0x00 },
21510       { 0x00, 0x00, 0x00, 0x00 } },
21511     /* 1 << 231 */
21512     { { 0xab9659d8df7304d4L,0xb71bcf1bff210e8eL,0xa9a2438bd73fbd60L,
21513         0x4595cd1f5d11b4deL },
21514       { 0x9c0d329a4835859dL,0x4a0f0d2d7dbb6e56L,0xc6038e5edf928a4eL,
21515         0xc94296218f5ad154L } },
21516     /* 2 << 231 */
21517     { { 0x91213462f23f2d92L,0x6cab71bd60b94078L,0x6bdd0a63176cde20L,
21518         0x54c9b20cee4d54bcL },
21519       { 0x3cd2d8aa9f2ac02fL,0x03f8e617206eedb0L,0xc7f68e1693086434L,
21520         0x831469c592dd3db9L } },
21521     /* 3 << 231 */
21522     { { 0x8521df248f981354L,0x587e23ec3588a259L,0xcbedf281d7a0992cL,
21523         0x06930a5538961407L },
21524       { 0x09320debbe5bbe21L,0xa7ffa5b52491817fL,0xe6c8b4d909065160L,
21525         0xac4f3992fff6d2a9L } },
21526     /* 4 << 231 */
21527     { { 0x7aa7a1583ae9c1bdL,0xe0af6d98e37ce240L,0xe54342d928ab38b4L,
21528         0xe8b750070a1c98caL },
21529       { 0xefce86afe02358f2L,0x31b8b856ea921228L,0x052a19120a1c67fcL,
21530         0xb4069ea4e3aead59L } },
21531     /* 5 << 231 */
21532     { { 0x3232d6e27fa03cb3L,0xdb938e5b0fdd7d88L,0x04c1d2cd2ccbfc5dL,
21533         0xd2f45c12af3a580fL },
21534       { 0x592620b57883e614L,0x5fd27e68be7c5f26L,0x139e45a91567e1e3L,
21535         0x2cc71d2d44d8aaafL } },
21536     /* 6 << 231 */
21537     { { 0x4a9090cde36d0757L,0xf722d7b1d9a29382L,0xfb7fb04c04b48ddfL,
21538         0x628ad2a7ebe16f43L },
21539       { 0xcd3fbfb520226040L,0x6c34ecb15104b6c4L,0x30c0754ec903c188L,
21540         0xec336b082d23cab0L } },
21541     /* 7 << 231 */
21542     { { 0x473d62a21e206ee5L,0xf1e274808c49a633L,0x87ab956ce9f6b2c3L,
21543         0x61830b4862b606eaL },
21544       { 0x67cd6846e78e815fL,0xfe40139f4c02082aL,0x52bbbfcb952ec365L,
21545         0x74c116426b9836abL } },
21546     /* 8 << 231 */
21547     { { 0x9f51439e558df019L,0x230da4baac712b27L,0x518919e355185a24L,
21548         0x4dcefcdd84b78f50L },
21549       { 0xa7d90fb2a47d4c5aL,0x55ac9abfb30e009eL,0xfd2fc35974eed273L,
21550         0xb72d824cdbea8fafL } },
21551     /* 9 << 231 */
21552     { { 0xce721a744513e2caL,0x0b41861238240b2cL,0x05199968d5baa450L,
21553         0xeb1757ed2b0e8c25L },
21554       { 0x6ebc3e283dfac6d5L,0xb2431e2e48a237f5L,0x2acb5e2352f61499L,
21555         0x5558a2a7e06c936bL } },
21556     /* 10 << 231 */
21557     { { 0xd213f923cbb13d1bL,0x98799f425bfb9bfeL,0x1ae8ddc9701144a9L,
21558         0x0b8b3bb64c5595eeL },
21559       { 0x0ea9ef2e3ecebb21L,0x17cb6c4b3671f9a7L,0x47ef464f726f1d1fL,
21560         0x171b94846943a276L } },
21561     /* 11 << 231 */
21562     { { 0x51a4ae2d7ef0329cL,0x0850922291c4402aL,0x64a61d35afd45bbcL,
21563         0x38f096fe3035a851L },
21564       { 0xc7468b74a1dec027L,0xe8cf10e74fc7dcbaL,0xea35ff40f4a06353L,
21565         0x0b4c0dfa8b77dd66L } },
21566     /* 12 << 231 */
21567     { { 0x779b8552de7e5c19L,0xfab28609c1c0256cL,0x64f58eeeabd4743dL,
21568         0x4e8ef8387b6cc93bL },
21569       { 0xee650d264cb1bf3dL,0x4c1f9d0973dedf61L,0xaef7c9d7bfb70cedL,
21570         0x1ec0507e1641de1eL } },
21571     /* 13 << 231 */
21572     { { 0xcd7e5cc7cde45079L,0xde173c9a516ac9e4L,0x517a8494c170315cL,
21573         0x438fd90591d8e8fbL },
21574       { 0x5145c506c7d9630bL,0x6457a87bf47d4d75L,0xd31646bf0d9a80e8L,
21575         0x453add2bcef3aabeL } },
21576     /* 14 << 231 */
21577     { { 0xc9941109a607419dL,0xfaa71e62bb6bca80L,0x34158c1307c431f3L,
21578         0x594abebc992bc47aL },
21579       { 0x6dfea691eb78399fL,0x48aafb353f42cba4L,0xedcd65af077c04f0L,
21580         0x1a29a366e884491aL } },
21581     /* 15 << 231 */
21582     { { 0x023a40e51c21f2bfL,0xf99a513ca5057aeeL,0xa3fe7e25bcab072eL,
21583         0x8568d2e140e32bcfL },
21584       { 0x904594ebd3f69d9fL,0x181a973307affab1L,0xe4d68d76b6e330f4L,
21585         0x87a6dafbc75a7fc1L } },
21586     /* 16 << 231 */
21587     { { 0x549db2b5ef7d9289L,0x2480d4a8197f015aL,0x61d5590bc40493b6L,
21588         0x3a55b52e6f780331L },
21589       { 0x40eb8115309eadb0L,0xdea7de5a92e5c625L,0x64d631f0cc6a3d5aL,
21590         0x9d5e9d7c93e8dd61L } },
21591     /* 17 << 231 */
21592     { { 0xf297bef5206d3ffcL,0x23d5e0337d808bd4L,0x4a4f6912d24cf5baL,
21593         0xe4d8163b09cdaa8aL },
21594       { 0x0e0de9efd3082e8eL,0x4fe1246c0192f360L,0x1f9001504b8eee0aL,
21595         0x5219da81f1da391bL } },
21596     /* 18 << 231 */
21597     { { 0x7bf6a5c1f7ea25aaL,0xd165e6bffbb07d5fL,0xe353936189e78671L,
21598         0xa3fcac892bac4219L },
21599       { 0xdfab6fd4f0baa8abL,0x5a4adac1e2c1c2e5L,0x6cd75e3140d85849L,
21600         0xce263fea19b39181L } },
21601     /* 19 << 231 */
21602     { { 0xcb6803d307032c72L,0x7f40d5ce790968c8L,0xa6de86bddce978f0L,
21603         0x25547c4f368f751cL },
21604       { 0xb1e685fd65fb2a9eL,0xce69336f1eb9179cL,0xb15d1c2712504442L,
21605         0xb7df465cb911a06bL } },
21606     /* 20 << 231 */
21607     { { 0xb8d804a3315980cdL,0x693bc492fa3bebf7L,0x3578aeee2253c504L,
21608         0x158de498cd2474a2L },
21609       { 0x1331f5c7cfda8368L,0xd2d7bbb378d7177eL,0xdf61133af3c1e46eL,
21610         0x5836ce7dd30e7be8L } },
21611     /* 21 << 231 */
21612     { { 0x83084f1994f834cbL,0xd35653d4429ed782L,0xa542f16f59e58243L,
21613         0xc2b52f650470a22dL },
21614       { 0xe3b6221b18f23d96L,0xcb05abac3f5252b4L,0xca00938b87d61402L,
21615         0x2f186cdd411933e4L } },
21616     /* 22 << 231 */
21617     { { 0xe042ece59a29a5c5L,0xb19b3c073b6c8402L,0xc97667c719d92684L,
21618         0xb5624622ebc66372L },
21619       { 0x0cb96e653c04fa02L,0x83a7176c8eaa39aaL,0x2033561deaa1633fL,
21620         0x45a9d0864533df73L } },
21621     /* 23 << 231 */
21622     { { 0xe0542c1d3dc090bcL,0x82c996efaa59c167L,0xe3f735e80ee7fc4dL,
21623         0x7b1793937c35db79L },
21624       { 0xb6419e25f8c5dbfdL,0x4d9d7a1e1f327b04L,0x979f6f9b298dfca8L,
21625         0xc7c5dff18de9366aL } },
21626     /* 24 << 231 */
21627     { { 0x1b7a588d04c82bddL,0x68005534f8319dfdL,0xde8a55b5d8eb9580L,
21628         0x5ea886da8d5bca81L },
21629       { 0xe8530a01252a0b4dL,0x1bffb4fe35eaa0a1L,0x2ad828b1d8e99563L,
21630         0x7de96ef595f9cd87L } },
21631     /* 25 << 231 */
21632     { { 0x4abb2d0cd77d970cL,0x03cfb933d33ef9cbL,0xb0547c018b211fe9L,
21633         0x2fe64809a56ed1c6L },
21634       { 0xcb7d5624c2ac98ccL,0x2a1372c01a393e33L,0xc8d1ec1c29660521L,
21635         0xf3d31b04b37ac3e9L } },
21636     /* 26 << 231 */
21637     { { 0xa29ae9df5ece6e7cL,0x0603ac8f0facfb55L,0xcfe85b7adda233a5L,
21638         0xe618919fbd75f0b8L },
21639       { 0xf555a3d299bf1603L,0x1f43afc9f184255aL,0xdcdaf341319a3e02L,
21640         0xd3b117ef03903a39L } },
21641     /* 27 << 231 */
21642     { { 0xe095da1365d1d131L,0x86f16367c37ad03eL,0x5f37389e462cd8ddL,
21643         0xc103fa04d67a60e6L },
21644       { 0x57c34344f4b478f0L,0xce91edd8e117c98dL,0x001777b0231fc12eL,
21645         0x11ae47f2b207bccbL } },
21646     /* 28 << 231 */
21647     { { 0xd983cf8d20f8a242L,0x7aff5b1df22e1ad8L,0x68fd11d07fc4feb3L,
21648         0x5d53ae90b0f1c3e1L },
21649       { 0x50fb7905ec041803L,0x85e3c97714404888L,0x0e67faedac628d8fL,
21650         0x2e8651506668532cL } },
21651     /* 29 << 231 */
21652     { { 0x15acaaa46a67a6b0L,0xf4cdee25b25cec41L,0x49ee565ae4c6701eL,
21653         0x2a04ca66fc7d63d8L },
21654       { 0xeb105018ef0543fbL,0xf709a4f5d1b0d81dL,0x5b906ee62915d333L,
21655         0xf4a8741296f1f0abL } },
21656     /* 30 << 231 */
21657     { { 0xb6b82fa74d82f4c2L,0x90725a606804efb3L,0xbc82ec46adc3425eL,
21658         0xb7b805812787843eL },
21659       { 0xdf46d91cdd1fc74cL,0xdc1c62cbe783a6c4L,0x59d1b9f31a04cbbaL,
21660         0xd87f6f7295e40764L } },
21661     /* 31 << 231 */
21662     { { 0x02b4cfc1317f4a76L,0x8d2703eb91036bceL,0x98206cc6a5e72a56L,
21663         0x57be9ed1cf53fb0fL },
21664       { 0x09374571ef0b17acL,0x74b2655ed9181b38L,0xc8f80ea889935d0eL,
21665         0xc0d9e94291529936L } },
21666     /* 32 << 231 */
21667     { { 0x196860411e84e0e5L,0xa5db84d3aea34c93L,0xf9d5bb197073a732L,
21668         0xb8d2fe566bcfd7c0L },
21669       { 0x45775f36f3eb82faL,0x8cb20cccfdff8b58L,0x1659b65f8374c110L,
21670         0xb8b4a422330c789aL } },
21671     /* 33 << 231 */
21672     { { 0x75e3c3ea6fe8208bL,0xbd74b9e4286e78feL,0x0be2e81bd7d93a1aL,
21673         0x7ed06e27dd0a5aaeL },
21674       { 0x721f5a586be8b800L,0x428299d1d846db28L,0x95cb8e6b5be88ed3L,
21675         0xc3186b231c034e11L } },
21676     /* 34 << 231 */
21677     { { 0xa6312c9e8977d99bL,0xbe94433183f531e7L,0x8232c0c218d3b1d4L,
21678         0x617aae8be1247b73L },
21679       { 0x40153fc4282aec3bL,0xc6063d2ff7b8f823L,0x68f10e583304f94cL,
21680         0x31efae74ee676346L } },
21681     /* 35 << 231 */
21682     { { 0xbadb6c6d40a9b97cL,0x14702c634f666256L,0xdeb954f15184b2e3L,
21683         0x5184a52694b6ca40L },
21684       { 0xfff05337003c32eaL,0x5aa374dd205974c7L,0x9a7638544b0dd71aL,
21685         0x459cd27fdeb947ecL } },
21686     /* 36 << 231 */
21687     { { 0xa6e28161459c2b92L,0x2f020fa875ee8ef5L,0xb132ec2d30b06310L,
21688         0xc3e15899bc6a4530L },
21689       { 0xdc5f53feaa3f451aL,0x3a3c7f23c2d9acacL,0x2ec2f8926b27e58bL,
21690         0x68466ee7d742799fL } },
21691     /* 37 << 231 */
21692     { { 0x98324dd41fa26613L,0xa2dc6dabbdc29d63L,0xf9675faad712d657L,
21693         0x813994be21fd8d15L },
21694       { 0x5ccbb722fd4f7553L,0x5135ff8bf3a36b20L,0x44be28af69559df5L,
21695         0x40b65bed9d41bf30L } },
21696     /* 38 << 231 */
21697     { { 0xd98bf2a43734e520L,0x5e3abbe3209bdcbaL,0x77c76553bc945b35L,
21698         0x5331c093c6ef14aaL },
21699       { 0x518ffe2976b60c80L,0x2285593b7ace16f8L,0xab1f64ccbe2b9784L,
21700         0xe8f2c0d9ab2421b6L } },
21701     /* 39 << 231 */
21702     { { 0x617d7174c1df065cL,0xafeeb5ab5f6578faL,0x16ff1329263b54a8L,
21703         0x45c55808c990dce3L },
21704       { 0x42eab6c0ecc8c177L,0x799ea9b55982ecaaL,0xf65da244b607ef8eL,
21705         0x8ab226ce32a3fc2cL } },
21706     /* 40 << 231 */
21707     { { 0x745741e57ea973dcL,0x5c00ca7020888f2eL,0x7cdce3cf45fd9cf1L,
21708         0x8a741ef15507f872L },
21709       { 0x47c51c2f196b4cecL,0x70d08e43c97ea618L,0x930da15c15b18a2bL,
21710         0x33b6c6782f610514L } },
21711     /* 41 << 231 */
21712     { { 0xc662e4f807ac9794L,0x1eccf050ba06cb79L,0x1ff08623e7d954e5L,
21713         0x6ef2c5fb24cf71c3L },
21714       { 0xb2c063d267978453L,0xa0cf37961d654af8L,0x7cb242ea7ebdaa37L,
21715         0x206e0b10b86747e0L } },
21716     /* 42 << 231 */
21717     { { 0x481dae5fd5ecfefcL,0x07084fd8c2bff8fcL,0x8040a01aea324596L,
21718         0x4c646980d4de4036L },
21719       { 0x9eb8ab4ed65abfc3L,0xe01cb91f13541ec7L,0x8f029adbfd695012L,
21720         0x9ae284833c7569ecL } },
21721     /* 43 << 231 */
21722     { { 0xa5614c9ea66d80a1L,0x680a3e4475f5f911L,0x0c07b14dceba4fc1L,
21723         0x891c285ba13071c1L },
21724       { 0xcac67ceb799ece3cL,0x29b910a941e07e27L,0x66bdb409f2e43123L,
21725         0x06f8b1377ac9ecbeL } },
21726     /* 44 << 231 */
21727     { { 0x5981fafd38547090L,0x19ab8b9f85e3415dL,0xfc28c194c7e31b27L,
21728         0x843be0aa6fbcbb42L },
21729       { 0xf3b1ed43a6db836cL,0x2a1330e401a45c05L,0x4f19f3c595c1a377L,
21730         0xa85f39d044b5ee33L } },
21731     /* 45 << 231 */
21732     { { 0x3da18e6d4ae52834L,0x5a403b397423dcb0L,0xbb555e0af2374aefL,
21733         0x2ad599c41e8ca111L },
21734       { 0x1b3a2fb9014b3bf8L,0x73092684f66d5007L,0x079f1426c4340102L,
21735         0x1827cf818fddf4deL } },
21736     /* 46 << 231 */
21737     { { 0xc83605f6f10ff927L,0xd387145123739fc6L,0x6d163450cac1c2ccL,
21738         0x6b521296a2ec1ac5L },
21739       { 0x0606c4f96e3cb4a5L,0xe47d3f41778abff7L,0x425a8d5ebe8e3a45L,
21740         0x53ea9e97a6102160L } },
21741     /* 47 << 231 */
21742     { { 0x477a106e39cbb688L,0x532401d2f3386d32L,0x8e564f64b1b9b421L,
21743         0xca9b838881dad33fL },
21744       { 0xb1422b4e2093913eL,0x533d2f9269bc8112L,0x3fa017beebe7b2c7L,
21745         0xb2767c4acaf197c6L } },
21746     /* 48 << 231 */
21747     { { 0xc925ff87aedbae9fL,0x7daf0eb936880a54L,0x9284ddf59c4d0e71L,
21748         0x1581cf93316f8cf5L },
21749       { 0x3eeca8873ac1f452L,0xb417fce9fb6aeffeL,0xa5918046eefb8dc3L,
21750         0x73d318ac02209400L } },
21751     /* 49 << 231 */
21752     { { 0xe800400f728693e5L,0xe87d814b339927edL,0x93e94d3b57ea9910L,
21753         0xff8a35b62245fb69L },
21754       { 0x043853d77f200d34L,0x470f1e680f653ce1L,0x81ac05bd59a06379L,
21755         0xa14052c203930c29L } },
21756     /* 50 << 231 */
21757     { { 0x6b72fab526bc2797L,0x13670d1699f16771L,0x001700521e3e48d1L,
21758         0x978fe401b7adf678L },
21759       { 0x55ecfb92d41c5dd4L,0x5ff8e247c7b27da5L,0xe7518272013fb606L,
21760         0x5768d7e52f547a3cL } },
21761     /* 51 << 231 */
21762     { { 0xbb24eaa360017a5fL,0x6b18e6e49c64ce9bL,0xc225c655103dde07L,
21763         0xfc3672ae7592f7eaL },
21764       { 0x9606ad77d06283a1L,0x542fc650e4d59d99L,0xabb57c492a40e7c2L,
21765         0xac948f13a8db9f55L } },
21766     /* 52 << 231 */
21767     { { 0x6d4c9682b04465c3L,0xe3d062fa6468bd15L,0xa51729ac5f318d7eL,
21768         0x1fc87df69eb6fc95L },
21769       { 0x63d146a80591f652L,0xa861b8f7589621aaL,0x59f5f15ace31348cL,
21770         0x8f663391440da6daL } },
21771     /* 53 << 231 */
21772     { { 0xcfa778acb591ffa3L,0x027ca9c54cdfebceL,0xbe8e05a5444ea6b3L,
21773         0x8aab4e69a78d8254L },
21774       { 0x2437f04fb474d6b8L,0x6597ffd4045b3855L,0xbb0aea4eca47ecaaL,
21775         0x568aae8385c7ebfcL } },
21776     /* 54 << 231 */
21777     { { 0x0e966e64c73b2383L,0x49eb3447d17d8762L,0xde1078218da05dabL,
21778         0x443d8baa016b7236L },
21779       { 0x163b63a5ea7610d6L,0xe47e4185ce1ca979L,0xae648b6580baa132L,
21780         0xebf53de20e0d5b64L } },
21781     /* 55 << 231 */
21782     { { 0x8d3bfcb4d3c8c1caL,0x0d914ef35d04b309L,0x55ef64153de7d395L,
21783         0xbde1666f26b850e8L },
21784       { 0xdbe1ca6ed449ab19L,0x8902b322e89a2672L,0xb1674b7edacb7a53L,
21785         0x8e9faf6ef52523ffL } },
21786     /* 56 << 231 */
21787     { { 0x6ba535da9a85788bL,0xd21f03aebd0626d4L,0x099f8c47e873dc64L,
21788         0xcda8564d018ec97eL },
21789       { 0x3e8d7a5cde92c68cL,0x78e035a173323cc4L,0x3ef26275f880ff7cL,
21790         0xa4ee3dff273eedaaL } },
21791     /* 57 << 231 */
21792     { { 0x58823507af4e18f8L,0x967ec9b50672f328L,0x9ded19d9559d3186L,
21793         0x5e2ab3de6cdce39cL },
21794       { 0xabad6e4d11c226dfL,0xf9783f4387723014L,0x9a49a0cf1a885719L,
21795         0xfc0c1a5a90da9dbfL } },
21796     /* 58 << 231 */
21797     { { 0x8bbaec49571d92acL,0x569e85fe4692517fL,0x8333b014a14ea4afL,
21798         0x32f2a62f12e5c5adL },
21799       { 0x98c2ce3a06d89b85L,0xb90741aa2ff77a08L,0x2530defc01f795a2L,
21800         0xd6e5ba0b84b3c199L } },
21801     /* 59 << 231 */
21802     { { 0x7d8e845112e4c936L,0xae419f7dbd0be17bL,0xa583fc8c22262bc9L,
21803         0x6b842ac791bfe2bdL },
21804       { 0x33cef4e9440d6827L,0x5f69f4deef81fb14L,0xf16cf6f6234fbb92L,
21805         0x76ae3fc3d9e7e158L } },
21806     /* 60 << 231 */
21807     { { 0x4e89f6c2e9740b33L,0x677bc85d4962d6a1L,0x6c6d8a7f68d10d15L,
21808         0x5f9a72240257b1cdL },
21809       { 0x7096b9164ad85961L,0x5f8c47f7e657ab4aL,0xde57d7d0f7461d7eL,
21810         0x7eb6094d80ce5ee2L } },
21811     /* 61 << 231 */
21812     { { 0x0b1e1dfd34190547L,0x8a394f43f05dd150L,0x0a9eb24d97df44e6L,
21813         0x78ca06bf87675719L },
21814       { 0x6f0b34626ffeec22L,0x9d91bcea36cdd8fbL,0xac83363ca105be47L,
21815         0x81ba76c1069710e3L } },
21816     /* 62 << 231 */
21817     { { 0x3d1b24cb28c682c6L,0x27f252288612575bL,0xb587c779e8e66e98L,
21818         0x7b0c03e9405eb1feL },
21819       { 0xfdf0d03015b548e7L,0xa8be76e038b36af7L,0x4cdab04a4f310c40L,
21820         0x6287223ef47ecaecL } },
21821     /* 63 << 231 */
21822     { { 0x678e60558b399320L,0x61fe3fa6c01e4646L,0xc482866b03261a5eL,
21823         0xdfcf45b85c2f244aL },
21824       { 0x8fab9a512f684b43L,0xf796c654c7220a66L,0x1d90707ef5afa58fL,
21825         0x2c421d974fdbe0deL } },
21826     /* 64 << 231 */
21827     { { 0xc4f4cda3af2ebc2fL,0xa0af843dcb4efe24L,0x53b857c19ccd10b1L,
21828         0xddc9d1eb914d3e04L },
21829       { 0x7bdec8bb62771debL,0x829277aa91c5aa81L,0x7af18dd6832391aeL,
21830         0x1740f316c71a84caL } },
21831     /* 0 << 238 */
21832     { { 0x00, 0x00, 0x00, 0x00 },
21833       { 0x00, 0x00, 0x00, 0x00 } },
21834     /* 1 << 238 */
21835     { { 0x8928e99aeeaf8c49L,0xee7aa73d6e24d728L,0x4c5007c2e72b156cL,
21836         0x5fcf57c5ed408a1dL },
21837       { 0x9f719e39b6057604L,0x7d343c01c2868bbfL,0x2cca254b7e103e2dL,
21838         0xe6eb38a9f131bea2L } },
21839     /* 2 << 238 */
21840     { { 0xb33e624f8be762b4L,0x2a9ee4d1058e3413L,0x968e636967d805faL,
21841         0x9848949b7db8bfd7L },
21842       { 0x5308d7e5d23a8417L,0x892f3b1df3e29da5L,0xc95c139e3dee471fL,
21843         0x8631594dd757e089L } },
21844     /* 3 << 238 */
21845     { { 0xe0c82a3cde918dccL,0x2e7b599426fdcf4bL,0x82c5024932cb1b2dL,
21846         0xea613a9d7657ae07L },
21847       { 0xc2eb5f6cf1fdc9f7L,0xb6eae8b8879fe682L,0x253dfee0591cbc7fL,
21848         0x000da7133e1290e6L } },
21849     /* 4 << 238 */
21850     { { 0x1083e2ea1f095615L,0x0a28ad7714e68c33L,0x6bfc02523d8818beL,
21851         0xb585113af35850cdL },
21852       { 0x7d935f0b30df8aa1L,0xaddda07c4ab7e3acL,0x92c34299552f00cbL,
21853         0xc33ed1de2909df6cL } },
21854     /* 5 << 238 */
21855     { { 0x22c2195d80e87766L,0x9e99e6d89ddf4ac0L,0x09642e4e65e74934L,
21856         0x2610ffa2ff1ff241L },
21857       { 0x4d1d47d4751c8159L,0x697b4985af3a9363L,0x0318ca4687477c33L,
21858         0xa90cb5659441eff3L } },
21859     /* 6 << 238 */
21860     { { 0x58bb384836f024cbL,0x85be1f7736016168L,0x6c59587cdc7e07f1L,
21861         0x191be071af1d8f02L },
21862       { 0xbf169fa5cca5e55cL,0x3864ba3cf7d04eacL,0x915e367f8d7d05dbL,
21863         0xb48a876da6549e5dL } },
21864     /* 7 << 238 */
21865     { { 0xef89c656580e40a2L,0xf194ed8c728068bcL,0x74528045a47990c9L,
21866         0xf53fc7d75e1a4649L },
21867       { 0xbec5ae9b78593e7dL,0x2cac4ee341db65d7L,0xa8c1eb2404a3d39bL,
21868         0x53b7d63403f8f3efL } },
21869     /* 8 << 238 */
21870     { { 0x2dc40d483e07113cL,0x6e4a5d397d8b63aeL,0x5582a94b79684c2bL,
21871         0x932b33d4622da26cL },
21872       { 0xf534f6510dbbf08dL,0x211d07c964c23a52L,0x0eeece0fee5bdc9bL,
21873         0xdf178168f7015558L } },
21874     /* 9 << 238 */
21875     { { 0xd42946350a712229L,0x93cbe44809273f8cL,0x00b095ef8f13bc83L,
21876         0xbb7419728798978cL },
21877       { 0x9d7309a256dbe6e7L,0xe578ec565a5d39ecL,0x3961151b851f9a31L,
21878         0x2da7715de5709eb4L } },
21879     /* 10 << 238 */
21880     { { 0x867f301753dfabf0L,0x728d2078b8e39259L,0x5c75a0cd815d9958L,
21881         0xf84867a616603be1L },
21882       { 0xc865b13d70e35b1cL,0x0241446819b03e2cL,0xe46041daac1f3121L,
21883         0x7c9017ad6f028a7cL } },
21884     /* 11 << 238 */
21885     { { 0xabc96de90a482873L,0x4265d6b1b77e54d4L,0x68c38e79a57d88e7L,
21886         0xd461d7669ce82de3L },
21887       { 0x817a9ec564a7e489L,0xcc5675cda0def5f2L,0x9a00e785985d494eL,
21888         0xc626833f1b03514aL } },
21889     /* 12 << 238 */
21890     { { 0xabe7905a83cdd60eL,0x50602fb5a1170184L,0x689886cdb023642aL,
21891         0xd568d090a6e1fb00L },
21892       { 0x5b1922c70259217fL,0x93831cd9c43141e4L,0xdfca35870c95f86eL,
21893         0xdec2057a568ae828L } },
21894     /* 13 << 238 */
21895     { { 0xc44ea599f98a759aL,0x55a0a7a2f7c23c1dL,0xd5ffb6e694c4f687L,
21896         0x3563cce212848478L },
21897       { 0x812b3517e7b1fbe1L,0x8a7dc9794f7338e0L,0x211ecee952d048dbL,
21898         0x2eea4056c86ea3b8L } },
21899     /* 14 << 238 */
21900     { { 0xd8cb68a7ba772b34L,0xe16ed3415f4e2541L,0x9b32f6a60fec14dbL,
21901         0xeee376f7391698beL },
21902       { 0xe9a7aa1783674c02L,0x65832f975843022aL,0x29f3a8da5ba4990fL,
21903         0x79a59c3afb8e3216L } },
21904     /* 15 << 238 */
21905     { { 0x9cdc4d2ebd19bb16L,0xc6c7cfd0b3262d86L,0xd4ce14d0969c0b47L,
21906         0x1fa352b713e56128L },
21907       { 0x383d55b8973db6d3L,0x71836850e8e5b7bfL,0xc7714596e6bb571fL,
21908         0x259df31f2d5b2dd2L } },
21909     /* 16 << 238 */
21910     { { 0x568f8925913cc16dL,0x18bc5b6de1a26f5aL,0xdfa413bef5f499aeL,
21911         0xf8835decc3f0ae84L },
21912       { 0xb6e60bd865a40ab0L,0x65596439194b377eL,0xbcd8562592084a69L,
21913         0x5ce433b94f23ede0L } },
21914     /* 17 << 238 */
21915     { { 0xe8e8f04f6ad65143L,0x11511827d6e14af6L,0x3d390a108295c0c7L,
21916         0x71e29ee4621eba16L },
21917       { 0xa588fc0963717b46L,0x02be02fee06ad4a2L,0x931558c604c22b22L,
21918         0xbb4d4bd612f3c849L } },
21919     /* 18 << 238 */
21920     { { 0x54a4f49620efd662L,0x92ba6d20c5952d14L,0x2db8ea1ecc9784c2L,
21921         0x81cc10ca4b353644L },
21922       { 0x40b570ad4b4d7f6cL,0x5c9f1d9684a1dcd2L,0x01379f813147e797L,
21923         0xe5c6097b2bd499f5L } },
21924     /* 19 << 238 */
21925     { { 0x40dcafa6328e5e20L,0xf7b5244a54815550L,0xb9a4f11847bfc978L,
21926         0x0ea0e79fd25825b1L },
21927       { 0xa50f96eb646c7ecfL,0xeb811493446dea9dL,0x2af04677dfabcf69L,
21928         0xbe3a068fc713f6e8L } },
21929     /* 20 << 238 */
21930     { { 0x860d523d42e06189L,0xbf0779414e3aff13L,0x0b616dcac1b20650L,
21931         0xe66dd6d12131300dL },
21932       { 0xd4a0fd67ff99abdeL,0xc9903550c7aac50dL,0x022ecf8b7c46b2d7L,
21933         0x3333b1e83abf92afL } },
21934     /* 21 << 238 */
21935     { { 0x11cc113c6c491c14L,0x0597668880dd3f88L,0xf5b4d9e729d932edL,
21936         0xe982aad8a2c38b6dL },
21937       { 0x6f9253478be0dcf0L,0x700080ae65ca53f2L,0xd8131156443ca77fL,
21938         0xe92d6942ec51f984L } },
21939     /* 22 << 238 */
21940     { { 0xd2a08af885dfe9aeL,0xd825d9a54d2a86caL,0x2c53988d39dff020L,
21941         0xf38b135a430cdc40L },
21942       { 0x0c918ae062a7150bL,0xf31fd8de0c340e9bL,0xafa0e7ae4dbbf02eL,
21943         0x5847fb2a5eba6239L } },
21944     /* 23 << 238 */
21945     { { 0x6b1647dcdccbac8bL,0xb642aa7806f485c8L,0x873f37657038ecdfL,
21946         0x2ce5e865fa49d3feL },
21947       { 0xea223788c98c4400L,0x8104a8cdf1fa5279L,0xbcf7cc7a06becfd7L,
21948         0x49424316c8f974aeL } },
21949     /* 24 << 238 */
21950     { { 0xc0da65e784d6365dL,0xbcb7443f8f759fb8L,0x35c712b17ae81930L,
21951         0x80428dff4c6e08abL },
21952       { 0xf19dafefa4faf843L,0xced8538dffa9855fL,0x20ac409cbe3ac7ceL,
21953         0x358c1fb6882da71eL } },
21954     /* 25 << 238 */
21955     { { 0xafa9c0e5fd349961L,0x2b2cfa518421c2fcL,0x2a80db17f3a28d38L,
21956         0xa8aba5395d138e7eL },
21957       { 0x52012d1d6e96eb8dL,0x65d8dea0cbaf9622L,0x57735447b264f56cL,
21958         0xbeebef3f1b6c8da2L } },
21959     /* 26 << 238 */
21960     { { 0xfc346d98ce785254L,0xd50e8d72bb64a161L,0xc03567c749794addL,
21961         0x15a76065752c7ef6L },
21962       { 0x59f3a222961f23d6L,0x378e443873ecc0b0L,0xc74be4345a82fde4L,
21963         0xae509af2d8b9cf34L } },
21964     /* 27 << 238 */
21965     { { 0x4a61ee46577f44a1L,0xe09b748cb611deebL,0xc0481b2cf5f7b884L,
21966         0x3562667861acfa6bL },
21967       { 0x37f4c518bf8d21e6L,0x22d96531b205a76dL,0x37fb85e1954073c0L,
21968         0xbceafe4f65b3a567L } },
21969     /* 28 << 238 */
21970     { { 0xefecdef7be42a582L,0xd3fc608065046be6L,0xc9af13c809e8dba9L,
21971         0x1e6c9847641491ffL },
21972       { 0x3b574925d30c31f7L,0xb7eb72baac2a2122L,0x776a0dacef0859e7L,
21973         0x06fec31421900942L } },
21974     /* 29 << 238 */
21975     { { 0x2464bc10f8c22049L,0x9bfbcce7875ebf69L,0xd7a88e2a4336326bL,
21976         0xda05261c5bc2acfaL },
21977       { 0xc29f5bdceba7efc8L,0x471237ca25dbbf2eL,0xa72773f22975f127L,
21978         0xdc744e8e04d0b326L } },
21979     /* 30 << 238 */
21980     { { 0x38a7ed16a56edb73L,0x64357e372c007e70L,0xa167d15b5080b400L,
21981         0x07b4116423de4be1L },
21982       { 0xb2d91e3274c89883L,0x3c1628212882e7edL,0xad6b36ba7503e482L,
21983         0x48434e8e0ea34331L } },
21984     /* 31 << 238 */
21985     { { 0x79f4f24f2c7ae0b9L,0xc46fbf811939b44aL,0x76fefae856595eb1L,
21986         0x417b66abcd5f29c7L },
21987       { 0x5f2332b2c5ceec20L,0xd69661ffe1a1cae2L,0x5ede7e529b0286e6L,
21988         0x9d062529e276b993L } },
21989     /* 32 << 238 */
21990     { { 0x324794b07e50122bL,0xdd744f8b4af07ca5L,0x30a12f08d63fc97bL,
21991         0x39650f1a76626d9dL },
21992       { 0x101b47f71fa38477L,0x3d815f19d4dc124fL,0x1569ae95b26eb58aL,
21993         0xc3cde18895fb1887L } },
21994     /* 33 << 238 */
21995     { { 0x54e9f37bf9539a48L,0xb0100e067408c1a5L,0x821d9811ea580cbbL,
21996         0x8af52d3586e50c56L },
21997       { 0xdfbd9d47dbbf698bL,0x2961a1ea03dc1c73L,0x203d38f8e76a5df8L,
21998         0x08a53a686def707aL } },
21999     /* 34 << 238 */
22000     { { 0x26eefb481bee45d4L,0xb3cee3463c688036L,0x463c5315c42f2469L,
22001         0x19d84d2e81378162L },
22002       { 0x22d7c3c51c4d349fL,0x65965844163d59c5L,0xcf198c56b8abceaeL,
22003         0x6fb1fb1b628559d5L } },
22004     /* 35 << 238 */
22005     { { 0x8bbffd0607bf8fe3L,0x46259c583467734bL,0xd8953cea35f7f0d3L,
22006         0x1f0bece2d65b0ff1L },
22007       { 0xf7d5b4b3f3c72914L,0x29e8ea953cb53389L,0x4a365626836b6d46L,
22008         0xe849f910ea174fdeL } },
22009     /* 36 << 238 */
22010     { { 0x7ec62fbbf4737f21L,0xd8dba5ab6209f5acL,0x24b5d7a9a5f9adbeL,
22011         0x707d28f7a61dc768L },
22012       { 0x7711460bcaa999eaL,0xba7b174d1c92e4ccL,0x3c4bab6618d4bf2dL,
22013         0xb8f0c980eb8bd279L } },
22014     /* 37 << 238 */
22015     { { 0x024bea9a324b4737L,0xfba9e42332a83bcaL,0x6e635643a232dcedL,
22016         0x996193672571c8baL },
22017       { 0xe8c9f35754b7032bL,0xf936b3ba2442d54aL,0x2263f0f08290c65aL,
22018         0x48989780ee2c7fdbL } },
22019     /* 38 << 238 */
22020     { { 0xadc5d55a13d4f95eL,0x737cff85ad9b8500L,0x271c557b8a73f43dL,
22021         0xbed617a4e18bc476L },
22022       { 0x662454017dfd8ab2L,0xae7b89ae3a2870aaL,0x1b555f5323a7e545L,
22023         0x6791e247be057e4cL } },
22024     /* 39 << 238 */
22025     { { 0x860136ad324fa34dL,0xea1114474cbeae28L,0x023a4270bedd3299L,
22026         0x3d5c3a7fc1c35c34L },
22027       { 0xb0f6db678d0412d2L,0xd92625e2fcdc6b9aL,0x92ae5ccc4e28a982L,
22028         0xea251c3647a3ce7eL } },
22029     /* 40 << 238 */
22030     { { 0x9d658932790691bfL,0xed61058906b736aeL,0x712c2f04c0d63b6eL,
22031         0x5cf06fd5c63d488fL },
22032       { 0x97363facd9588e41L,0x1f9bf7622b93257eL,0xa9d1ffc4667acaceL,
22033         0x1cf4a1aa0a061ecfL } },
22034     /* 41 << 238 */
22035     { { 0x40e48a49dc1818d0L,0x0643ff39a3621ab0L,0x5768640ce39ef639L,
22036         0x1fc099ea04d86854L },
22037       { 0x9130b9c3eccd28fdL,0xd743cbd27eec54abL,0x052b146fe5b475b6L,
22038         0x058d9a82900a7d1fL } },
22039     /* 42 << 238 */
22040     { { 0x65e0229291262b72L,0x96f924f9bb0edf03L,0x5cfa59c8fe206842L,
22041         0xf60370045eafa720L },
22042       { 0x5f30699e18d7dd96L,0x381e8782cbab2495L,0x91669b46dd8be949L,
22043         0xb40606f526aae8efL } },
22044     /* 43 << 238 */
22045     { { 0x2812b839fc6751a4L,0x16196214fba800efL,0x4398d5ca4c1a2875L,
22046         0x720c00ee653d8349L },
22047       { 0xc2699eb0d820007cL,0x880ee660a39b5825L,0x70694694471f6984L,
22048         0xf7d16ea8e3dda99aL } },
22049     /* 44 << 238 */
22050     { { 0x28d675b2c0519a23L,0x9ebf94fe4f6952e3L,0xf28bb767a2294a8aL,
22051         0x85512b4dfe0af3f5L },
22052       { 0x18958ba899b16a0dL,0x95c2430cba7548a7L,0xb30d1b10a16be615L,
22053         0xe3ebbb9785bfb74cL } },
22054     /* 45 << 238 */
22055     { { 0xa3273cfe18549fdbL,0xf6e200bf4fcdb792L,0x54a76e1883aba56cL,
22056         0x73ec66f689ef6aa2L },
22057       { 0x8d17add7d1b9a305L,0xa959c5b9b7ae1b9dL,0x886435226bcc094aL,
22058         0xcc5616c4d7d429b9L } },
22059     /* 46 << 238 */
22060     { { 0xa6dada01e6a33f7cL,0xc6217a079d4e70adL,0xd619a81809c15b7cL,
22061         0xea06b3290e80c854L },
22062       { 0x174811cea5f5e7b9L,0x66dfc310787c65f4L,0x4ea7bd693316ab54L,
22063         0xc12c4acb1dcc0f70L } },
22064     /* 47 << 238 */
22065     { { 0xe4308d1a1e407dd9L,0xe8a3587c91afa997L,0xea296c12ab77b7a5L,
22066         0xb5ad49e4673c0d52L },
22067       { 0x40f9b2b27006085aL,0xa88ff34087bf6ec2L,0x978603b14e3066a6L,
22068         0xb3f99fc2b5e486e2L } },
22069     /* 48 << 238 */
22070     { { 0x07b53f5eb2e63645L,0xbe57e54784c84232L,0xd779c2167214d5cfL,
22071         0x617969cd029a3acaL },
22072       { 0xd17668cd8a7017a0L,0x77b4d19abe9b7ee8L,0x58fd0e939c161776L,
22073         0xa8c4f4efd5968a72L } },
22074     /* 49 << 238 */
22075     { { 0x296071cc67b3de77L,0xae3c0b8e634f7905L,0x67e440c28a7100c9L,
22076         0xbb8c3c1beb4b9b42L },
22077       { 0x6d71e8eac51b3583L,0x7591f5af9525e642L,0xf73a2f7b13f509f3L,
22078         0x618487aa5619ac9bL } },
22079     /* 50 << 238 */
22080     { { 0x3a72e5f79d61718aL,0x00413bcc7592d28cL,0x7d9b11d3963c35cfL,
22081         0x77623bcfb90a46edL },
22082       { 0xdeef273bdcdd2a50L,0x4a741f9b0601846eL,0x33b89e510ec6e929L,
22083         0xcb02319f8b7f22cdL } },
22084     /* 51 << 238 */
22085     { { 0xbbe1500d084bae24L,0x2f0ae8d7343d2693L,0xacffb5f27cdef811L,
22086         0xaa0c030a263fb94fL },
22087       { 0x6eef0d61a0f442deL,0xf92e181727b139d3L,0x1ae6deb70ad8bc28L,
22088         0xa89e38dcc0514130L } },
22089     /* 52 << 238 */
22090     { { 0x81eeb865d2fdca23L,0x5a15ee08cc8ef895L,0x768fa10a01905614L,
22091         0xeff5b8ef880ee19bL },
22092       { 0xf0c0cabbcb1c8a0eL,0x2e1ee9cdb8c838f9L,0x0587d8b88a4a14c0L,
22093         0xf6f278962ff698e5L } },
22094     /* 53 << 238 */
22095     { { 0xed38ef1c89ee6256L,0xf44ee1fe6b353b45L,0x9115c0c770e903b3L,
22096         0xc78ec0a1818f31dfL },
22097       { 0x6c003324b7dccbc6L,0xd96dd1f3163bbc25L,0x33aa82dd5cedd805L,
22098         0x123aae4f7f7eb2f1L } },
22099     /* 54 << 238 */
22100     { { 0x1723fcf5a26262cdL,0x1f7f4d5d0060ebd5L,0xf19c5c01b2eaa3afL,
22101         0x2ccb9b149790accfL },
22102       { 0x1f9c1cad52324aa6L,0x632005267247df54L,0x5732fe42bac96f82L,
22103         0x52fe771f01a1c384L } },
22104     /* 55 << 238 */
22105     { { 0x546ca13db1001684L,0xb56b4eeea1709f75L,0x266545a9d5db8672L,
22106         0xed971c901e8f3cfbL },
22107       { 0x4e7d8691e3a07b29L,0x7570d9ece4b696b9L,0xdc5fa0677bc7e9aeL,
22108         0x68b44cafc82c4844L } },
22109     /* 56 << 238 */
22110     { { 0x519d34b3bf44da80L,0x283834f95ab32e66L,0x6e6087976278a000L,
22111         0x1e62960e627312f6L },
22112       { 0x9b87b27be6901c55L,0x80e7853824fdbc1fL,0xbbbc09512facc27dL,
22113         0x06394239ac143b5aL } },
22114     /* 57 << 238 */
22115     { { 0x35bb4a40376c1944L,0x7cb6269463da1511L,0xafd29161b7148a3bL,
22116         0xa6f9d9ed4e2ea2eeL },
22117       { 0x15dc2ca2880dd212L,0x903c3813a61139a9L,0x2aa7b46d6c0f8785L,
22118         0x36ce2871901c60ffL } },
22119     /* 58 << 238 */
22120     { { 0xc683b028e10d9c12L,0x7573baa2032f33d3L,0x87a9b1f667a31b58L,
22121         0xfd3ed11af4ffae12L },
22122       { 0x83dcaa9a0cb2748eL,0x8239f0185d6fdf16L,0xba67b49c72753941L,
22123         0x2beec455c321cb36L } },
22124     /* 59 << 238 */
22125     { { 0x880156063f8b84ceL,0x764170838d38c86fL,0x054f1ca7598953ddL,
22126         0xc939e1104e8e7429L },
22127       { 0x9b1ac2b35a914f2fL,0x39e35ed3e74b8f9cL,0xd0debdb2781b2fb0L,
22128         0x1585638f2d997ba2L } },
22129     /* 60 << 238 */
22130     { { 0x9c4b646e9e2fce99L,0x68a210811e80857fL,0x06d54e443643b52aL,
22131         0xde8d6d630d8eb843L },
22132       { 0x7032156342146a0aL,0x8ba826f25eaa3622L,0x227a58bd86138787L,
22133         0x43b6c03c10281d37L } },
22134     /* 61 << 238 */
22135     { { 0x6326afbbb54dde39L,0x744e5e8adb6f2d5fL,0x48b2a99acff158e1L,
22136         0xa93c8fa0ef87918fL },
22137       { 0x2182f956de058c5cL,0x216235d2936f9e7aL,0xace0c0dbd2e31e67L,
22138         0xc96449bff23ac3e7L } },
22139     /* 62 << 238 */
22140     { { 0x7e9a2874170693bdL,0xa28e14fda45e6335L,0x5757f6b356427344L,
22141         0x822e4556acf8edf9L },
22142       { 0x2b7a6ee2e6a285cdL,0x5866f211a9df3af0L,0x40dde2ddf845b844L,
22143         0x986c3726110e5e49L } },
22144     /* 63 << 238 */
22145     { { 0x73680c2af7172277L,0x57b94f0f0cccb244L,0xbdff72672d438ca7L,
22146         0xbad1ce11cf4663fdL },
22147       { 0x9813ed9dd8f71caeL,0xf43272a6961fdaa6L,0xbeff0119bd6d1637L,
22148         0xfebc4f9130361978L } },
22149     /* 64 << 238 */
22150     { { 0x02b37a952f41deffL,0x0e44a59ae63b89b7L,0x673257dc143ff951L,
22151         0x19c02205d752baf4L },
22152       { 0x46c23069c4b7d692L,0x2e6392c3fd1502acL,0x6057b1a21b220846L,
22153         0xe51ff9460c1b5b63L } },
22154     /* 0 << 245 */
22155     { { 0x00, 0x00, 0x00, 0x00 },
22156       { 0x00, 0x00, 0x00, 0x00 } },
22157     /* 1 << 245 */
22158     { { 0x6e85cb51566c5c43L,0xcff9c9193597f046L,0x9354e90c4994d94aL,
22159         0xe0a393322147927dL },
22160       { 0x8427fac10dc1eb2bL,0x88cfd8c22ff319faL,0xe2d4e68401965274L,
22161         0xfa2e067d67aaa746L } },
22162     /* 2 << 245 */
22163     { { 0xb6d92a7f3e5f9f11L,0x9afe153ad6cb3b8eL,0x4d1a6dd7ddf800bdL,
22164         0xf6c13cc0caf17e19L },
22165       { 0x15f6c58e325fc3eeL,0x71095400a31dc3b2L,0x168e7c07afa3d3e7L,
22166         0x3f8417a194c7ae2dL } },
22167     /* 3 << 245 */
22168     { { 0xec234772813b230dL,0x634d0f5f17344427L,0x11548ab1d77fc56aL,
22169         0x7fab1750ce06af77L },
22170       { 0xb62c10a74f7c4f83L,0xa7d2edc4220a67d9L,0x1c404170921209a0L,
22171         0x0b9815a0face59f0L } },
22172     /* 4 << 245 */
22173     { { 0x2842589b319540c3L,0x18490f59a283d6f8L,0xa2731f84daae9fcbL,
22174         0x3db6d960c3683ba0L },
22175       { 0xc85c63bb14611069L,0xb19436af0788bf05L,0x905459df347460d2L,
22176         0x73f6e094e11a7db1L } },
22177     /* 5 << 245 */
22178     { { 0xdc7f938eb6357f37L,0xc5d00f792bd8aa62L,0xc878dcb92ca979fcL,
22179         0x37e83ed9eb023a99L },
22180       { 0x6b23e2731560bf3dL,0x1086e4591d0fae61L,0x782483169a9414bdL,
22181         0x1b956bc0f0ea9ea1L } },
22182     /* 6 << 245 */
22183     { { 0x7b85bb91c31b9c38L,0x0c5aa90b48ef57b5L,0xdedeb169af3bab6fL,
22184         0xe610ad732d373685L },
22185       { 0xf13870df02ba8e15L,0x0337edb68ca7f771L,0xe4acf747b62c036cL,
22186         0xd921d576b6b94e81L } },
22187     /* 7 << 245 */
22188     { { 0xdbc864392c422f7aL,0xfb635362ed348898L,0x83084668c45bfcd1L,
22189         0xc357c9e32b315e11L },
22190       { 0xb173b5405b2e5b8cL,0x7e946931e102b9a4L,0x17c890eb7b0fb199L,
22191         0xec225a83d61b662bL } },
22192     /* 8 << 245 */
22193     { { 0xf306a3c8ee3c76cbL,0x3cf11623d32a1f6eL,0xe6d5ab646863e956L,
22194         0x3b8a4cbe5c005c26L },
22195       { 0xdcd529a59ce6bb27L,0xc4afaa5204d4b16fL,0xb0624a267923798dL,
22196         0x85e56df66b307fabL } },
22197     /* 9 << 245 */
22198     { { 0x0281893c2bf29698L,0x91fc19a4d7ce7603L,0x75a5dca3ad9a558fL,
22199         0x40ceb3fa4d50bf77L },
22200       { 0x1baf6060bc9ba369L,0x927e1037597888c2L,0xd936bf1986a34c07L,
22201         0xd4cf10c1c34ae980L } },
22202     /* 10 << 245 */
22203     { { 0x3a3e5334859dd614L,0x9c475b5b18d0c8eeL,0x63080d1f07cd51d5L,
22204         0xc9c0d0a6b88b4326L },
22205       { 0x1ac98691c234296fL,0x2a0a83a494887fb6L,0x565114270cea9cf2L,
22206         0x5230a6e8a24802f5L } },
22207     /* 11 << 245 */
22208     { { 0xf7a2bf0f72e3d5c1L,0x377174464f21439eL,0xfedcbf259ce30334L,
22209         0xe0030a787ce202f9L },
22210       { 0x6f2d9ebf1202e9caL,0xe79dde6c75e6e591L,0xf52072aff1dac4f8L,
22211         0x6c8d087ebb9b404dL } },
22212     /* 12 << 245 */
22213     { { 0xad0fc73dbce913afL,0x909e587b458a07cbL,0x1300da84d4f00c8aL,
22214         0x425cd048b54466acL },
22215       { 0xb59cb9be90e9d8bfL,0x991616db3e431b0eL,0xd3aa117a531aecffL,
22216         0x91af92d359f4dc3bL } },
22217     /* 13 << 245 */
22218     { { 0x9b1ec292e93fda29L,0x76bb6c17e97d91bcL,0x7509d95faface1e6L,
22219         0x3653fe47be855ae3L },
22220       { 0x73180b280f680e75L,0x75eefd1beeb6c26cL,0xa4cdf29fb66d4236L,
22221         0x2d70a9976b5821d8L } },
22222     /* 14 << 245 */
22223     { { 0x7a3ee20720445c36L,0x71d1ac8259877174L,0x0fc539f7949f73e9L,
22224         0xd05cf3d7982e3081L },
22225       { 0x8758e20b7b1c7129L,0xffadcc20569e61f2L,0xb05d3a2f59544c2dL,
22226         0xbe16f5c19fff5e53L } },
22227     /* 15 << 245 */
22228     { { 0x73cf65b8aad58135L,0x622c2119037aa5beL,0x79373b3f646fd6a0L,
22229         0x0e029db50d3978cfL },
22230       { 0x8bdfc43794fba037L,0xaefbd687620797a6L,0x3fa5382bbd30d38eL,
22231         0x7627cfbf585d7464L } },
22232     /* 16 << 245 */
22233     { { 0xb2330fef4e4ca463L,0xbcef72873566cc63L,0xd161d2cacf780900L,
22234         0x135dc5395b54827dL },
22235       { 0x638f052e27bf1bc6L,0x10a224f007dfa06cL,0xe973586d6d3321daL,
22236         0x8b0c573826152c8fL } },
22237     /* 17 << 245 */
22238     { { 0x07ef4f2a34606074L,0x80fe7fe8a0f7047aL,0x3d1a8152e1a0e306L,
22239         0x32cf43d888da5222L },
22240       { 0xbf89a95f5f02ffe6L,0x3d9eb9a4806ad3eaL,0x012c17bb79c8e55eL,
22241         0xfdcd1a7499c81dacL } },
22242     /* 18 << 245 */
22243     { { 0x7043178bb9556098L,0x4090a1df801c3886L,0x759800ff9b67b912L,
22244         0x3e5c0304232620c8L },
22245       { 0x4b9d3c4b70dceecaL,0xbb2d3c15181f648eL,0xf981d8376e33345cL,
22246         0xb626289b0cf2297aL } },
22247     /* 19 << 245 */
22248     { { 0x766ac6598baebdcfL,0x1a28ae0975df01e5L,0xb71283da375876d8L,
22249         0x4865a96d607b9800L },
22250       { 0x25dd1bcd237936b2L,0x332f4f4b60417494L,0xd0923d68370a2147L,
22251         0x497f5dfbdc842203L } },
22252     /* 20 << 245 */
22253     { { 0x9dc74cbd32be5e0fL,0x7475bcb717a01375L,0x438477c950d872b1L,
22254         0xcec67879ffe1d63dL },
22255       { 0x9b006014d8578c70L,0xc9ad99a878bb6b8bL,0x6799008e11fb3806L,
22256         0xcfe81435cd44cab3L } },
22257     /* 21 << 245 */
22258     { { 0xa2ee15822f4fb344L,0xb8823450483fa6ebL,0x622d323d652c7749L,
22259         0xd8474a98beb0a15bL },
22260       { 0xe43c154d5d1c00d0L,0x7fd581d90e3e7aacL,0x2b44c6192525ddf8L,
22261         0x67a033ebb8ae9739L } },
22262     /* 22 << 245 */
22263     { { 0x113ffec19ef2d2e4L,0x1bf6767ed5a0ea7fL,0x57fff75e03714c0aL,
22264         0xa23c422e0a23e9eeL },
22265       { 0xdd5f6b2d540f83afL,0xc2c2c27e55ea46a7L,0xeb6b4246672a1208L,
22266         0xd13599f7ae634f7aL } },
22267     /* 23 << 245 */
22268     { { 0xcf914b5cd7b32c6eL,0x61a5a640eaf61814L,0x8dc3df8b208a1bbbL,
22269         0xef627fd6b6d79aa5L },
22270       { 0x44232ffcc4c86bc8L,0xe6f9231b061539feL,0x1d04f25a958b9533L,
22271         0x180cf93449e8c885L } },
22272     /* 24 << 245 */
22273     { { 0x896895959884aaf7L,0xb1959be307b348a6L,0x96250e573c147c87L,
22274         0xae0efb3add0c61f8L },
22275       { 0xed00745eca8c325eL,0x3c911696ecff3f70L,0x73acbc65319ad41dL,
22276         0x7b01a020f0b1c7efL } },
22277     /* 25 << 245 */
22278     { { 0xea32b29363a1483fL,0x89eabe717a248f96L,0x9c6231d3343157e5L,
22279         0x93a375e5df3c546dL },
22280       { 0xe76e93436a2afe69L,0xc4f89100e166c88eL,0x248efd0d4f872093L,
22281         0xae0eb3ea8fe0ea61L } },
22282     /* 26 << 245 */
22283     { { 0xaf89790d9d79046eL,0x4d650f2d6cee0976L,0xa3935d9a43071ecaL,
22284         0x66fcd2c9283b0bfeL },
22285       { 0x0e665eb5696605f1L,0xe77e5d07a54cd38dL,0x90ee050a43d950cfL,
22286         0x86ddebdad32e69b5L } },
22287     /* 27 << 245 */
22288     { { 0x6ad94a3dfddf7415L,0xf7fa13093f6e8d5aL,0xc4831d1de9957f75L,
22289         0x7de28501d5817447L },
22290       { 0x6f1d70789e2aeb6bL,0xba2b9ff4f67a53c2L,0x36963767df9defc3L,
22291         0x479deed30d38022cL } },
22292     /* 28 << 245 */
22293     { { 0xd2edb89b3a8631e8L,0x8de855de7a213746L,0xb2056cb7b00c5f11L,
22294         0xdeaefbd02c9b85e4L },
22295       { 0x03f39a8dd150892dL,0x37b84686218b7985L,0x36296dd8b7375f1aL,
22296         0x472cd4b1b78e898eL } },
22297     /* 29 << 245 */
22298     { { 0x15dff651e9f05de9L,0xd40450692ce98ba9L,0x8466a7ae9b38024cL,
22299         0xb910e700e5a6b5efL },
22300       { 0xae1c56eab3aa8f0dL,0xbab2a5077eee74a6L,0x0dca11e24b4c4620L,
22301         0xfd896e2e4c47d1f4L } },
22302     /* 30 << 245 */
22303     { { 0xeb45ae53308fbd93L,0x46cd5a2e02c36fdaL,0x6a3d4e90baa48385L,
22304         0xdd55e62e9dbe9960L },
22305       { 0xa1406aa02a81ede7L,0x6860dd14f9274ea7L,0xcfdcb0c280414f86L,
22306         0xff410b1022f94327L } },
22307     /* 31 << 245 */
22308     { { 0x5a33cc3849ad467bL,0xefb48b6c0a7335f1L,0x14fb54a4b153a360L,
22309         0x604aa9d2b52469ccL },
22310       { 0x5e9dc486754e48e9L,0x693cb45537471e8eL,0xfb2fd7cd8d3b37b6L,
22311         0x63345e16cf09ff07L } },
22312     /* 32 << 245 */
22313     { { 0x9910ba6b23a5d896L,0x1fe19e357fe4364eL,0x6e1da8c39a33c677L,
22314         0x15b4488b29fd9fd0L },
22315       { 0x1f4392541a1f22bfL,0x920a8a70ab8163e8L,0x3fd1b24907e5658eL,
22316         0xf2c4f79cb6ec839bL } },
22317     /* 33 << 245 */
22318     { { 0x1abbc3d04aa38d1bL,0x3b0db35cb5d9510eL,0x1754ac783e60dec0L,
22319         0x53272fd7ea099b33L },
22320       { 0x5fb0494f07a8e107L,0x4a89e1376a8191faL,0xa113b7f63c4ad544L,
22321         0x88a2e9096cb9897bL } },
22322     /* 34 << 245 */
22323     { { 0x17d55de3b44a3f84L,0xacb2f34417c6c690L,0x3208816810232390L,
22324         0xf2e8a61f6c733bf7L },
22325       { 0xa774aab69c2d7652L,0xfb5307e3ed95c5bcL,0xa05c73c24981f110L,
22326         0x1baae31ca39458c9L } },
22327     /* 35 << 245 */
22328     { { 0x1def185bcbea62e7L,0xe8ac9eaeeaf63059L,0x098a8cfd9921851cL,
22329         0xd959c3f13abe2f5bL },
22330       { 0xa4f1952520e40ae5L,0x320789e307a24aa1L,0x259e69277392b2bcL,
22331         0x58f6c6671918668bL } },
22332     /* 36 << 245 */
22333     { { 0xce1db2bbc55d2d8bL,0x41d58bb7f4f6ca56L,0x7650b6808f877614L,
22334         0x905e16baf4c349edL },
22335       { 0xed415140f661acacL,0x3b8784f0cb2270afL,0x3bc280ac8a402cbaL,
22336         0xd53f71460937921aL } },
22337     /* 37 << 245 */
22338     { { 0xc03c8ee5e5681e83L,0x62126105f6ac9e4aL,0x9503a53f936b1a38L,
22339         0x3d45e2d4782fecbdL },
22340       { 0x69a5c43976e8ae98L,0xb53b2eebbfb4b00eL,0xf167471272386c89L,
22341         0x30ca34a24268bce4L } },
22342     /* 38 << 245 */
22343     { { 0x7f1ed86c78341730L,0x8ef5beb8b525e248L,0xbbc489fdb74fbf38L,
22344         0x38a92a0e91a0b382L },
22345       { 0x7a77ba3f22433ccfL,0xde8362d6a29f05a9L,0x7f6a30ea61189afcL,
22346         0x693b550559ef114fL } },
22347     /* 39 << 245 */
22348     { { 0x50266bc0cd1797a1L,0xea17b47ef4b7af2dL,0xd6c4025c3df9483eL,
22349         0x8cbb9d9fa37b18c9L },
22350       { 0x91cbfd9c4d8424cfL,0xdb7048f1ab1c3506L,0x9eaf641f028206a3L,
22351         0xf986f3f925bdf6ceL } },
22352     /* 40 << 245 */
22353     { { 0x262143b5224c08dcL,0x2bbb09b481b50c91L,0xc16ed709aca8c84fL,
22354         0xa6210d9db2850ca8L },
22355       { 0x6d8df67a09cb54d6L,0x91eef6e0500919a4L,0x90f613810f132857L,
22356         0x9acede47f8d5028bL } },
22357     /* 41 << 245 */
22358     { { 0x844d1b7190b771c3L,0x563b71e4ba6426beL,0x2efa2e83bdb802ffL,
22359         0x3410cbabab5b4a41L },
22360       { 0x555b2d2630da84ddL,0xd0711ae9ee1cc29aL,0xcf3e8c602f547792L,
22361         0x03d7d5dedc678b35L } },
22362     /* 42 << 245 */
22363     { { 0x071a2fa8ced806b8L,0x222e6134697f1478L,0xdc16fd5dabfcdbbfL,
22364         0x44912ebf121b53b8L },
22365       { 0xac9436742496c27cL,0x8ea3176c1ffc26b0L,0xb6e224ac13debf2cL,
22366         0x524cc235f372a832L } },
22367     /* 43 << 245 */
22368     { { 0xd706e1d89f6f1b18L,0x2552f00544cce35bL,0x8c8326c2a88e31fcL,
22369         0xb5468b2cf9552047L },
22370       { 0xce683e883ff90f2bL,0x77947bdf2f0a5423L,0xd0a1b28bed56e328L,
22371         0xaee35253c20134acL } },
22372     /* 44 << 245 */
22373     { { 0x7e98367d3567962fL,0x379ed61f8188bffbL,0x73bba348faf130a1L,
22374         0x6c1f75e1904ed734L },
22375       { 0x189566423b4a79fcL,0xf20bc83d54ef4493L,0x836d425d9111eca1L,
22376         0xe5b5c318009a8dcfL } },
22377     /* 45 << 245 */
22378     { { 0x3360b25d13221bc5L,0x707baad26b3eeaf7L,0xd7279ed8743a95a1L,
22379         0x7450a875969e809fL },
22380       { 0x32b6bd53e5d0338fL,0x1e77f7af2b883bbcL,0x90da12cc1063ecd0L,
22381         0xe2697b58c315be47L } },
22382     /* 46 << 245 */
22383     { { 0x2771a5bdda85d534L,0x53e78c1fff980eeaL,0xadf1cf84900385e7L,
22384         0x7d3b14f6c9387b62L },
22385       { 0x170e74b0cb8f2bd2L,0x2d50b486827fa993L,0xcdbe8c9af6f32babL,
22386         0x55e906b0c3b93ab8L } },
22387     /* 47 << 245 */
22388     { { 0x747f22fc8fe280d1L,0xcd8e0de5b2e114abL,0x5ab7dbebe10b68b0L,
22389         0x9dc63a9ca480d4b2L },
22390       { 0x78d4bc3b4be1495fL,0x25eb3db89359122dL,0x3f8ac05b0809cbdcL,
22391         0xbf4187bbd37c702fL } },
22392     /* 48 << 245 */
22393     { { 0x84cea0691416a6a5L,0x8f860c7943ef881cL,0x41311f8a38038a5dL,
22394         0xe78c2ec0fc612067L },
22395       { 0x494d2e815ad73581L,0xb4cc9e0059604097L,0xff558aecf3612cbaL,
22396         0x35beef7a9e36c39eL } },
22397     /* 49 << 245 */
22398     { { 0x1845c7cfdbcf41b9L,0x5703662aaea997c0L,0x8b925afee402f6d8L,
22399         0xd0a1b1ae4dd72162L },
22400       { 0x9f47b37503c41c4bL,0xa023829b0391d042L,0x5f5045c3503b8b0aL,
22401         0x123c268898c010e5L } },
22402     /* 50 << 245 */
22403     { { 0x324ec0cc36ba06eeL,0xface31153dd2cc0cL,0xb364f3bef333e91fL,
22404         0xef8aff7328e832b0L },
22405       { 0x1e9bad042d05841bL,0x42f0e3df356a21e2L,0xa3270bcb4add627eL,
22406         0xb09a8158d322e711L } },
22407     /* 51 << 245 */
22408     { { 0x86e326a10fee104aL,0xad7788f83703f65dL,0x7e76543047bc4833L,
22409         0x6cee582b2b9b893aL },
22410       { 0x9cd2a167e8f55a7bL,0xefbee3c6d9e4190dL,0x33ee7185d40c2e9dL,
22411         0x844cc9c5a380b548L } },
22412     /* 52 << 245 */
22413     { { 0x323f8ecd66926e04L,0x0001e38f8110c1baL,0x8dbcac12fc6a7f07L,
22414         0xd65e1d580cec0827L },
22415       { 0xd2cd4141be76ca2dL,0x7895cf5ce892f33aL,0x956d230d367139d2L,
22416         0xa91abd3ed012c4c1L } },
22417     /* 53 << 245 */
22418     { { 0x34fa488387eb36bfL,0xc5f07102914b8fb4L,0x90f0e579adb9c95fL,
22419         0xfe6ea8cb28888195L },
22420       { 0x7b9b5065edfa9284L,0x6c510bd22b8c8d65L,0xd7b8ebefcbe8aafdL,
22421         0xedb3af9896b1da07L } },
22422     /* 54 << 245 */
22423     { { 0x28ff779d6295d426L,0x0c4f6ac73fa3ad7bL,0xec44d0548b8e2604L,
22424         0x9b32a66d8b0050e1L },
22425       { 0x1f943366f0476ce2L,0x7554d953a602c7b4L,0xbe35aca6524f2809L,
22426         0xb6881229fd4edbeaL } },
22427     /* 55 << 245 */
22428     { { 0xe8cd0c8f508efb63L,0x9eb5b5c86abcefc7L,0xf5621f5fb441ab4fL,
22429         0x79e6c046b76a2b22L },
22430       { 0x74a4792ce37a1f69L,0xcbd252cb03542b60L,0x785f65d5b3c20bd3L,
22431         0x8dea61434fabc60cL } },
22432     /* 56 << 245 */
22433     { { 0x45e21446de673629L,0x57f7aa1e703c2d21L,0xa0e99b7f98c868c7L,
22434         0x4e42f66d8b641676L },
22435       { 0x602884dc91077896L,0xa0d690cfc2c9885bL,0xfeb4da333b9a5187L,
22436         0x5f789598153c87eeL } },
22437     /* 57 << 245 */
22438     { { 0x2192dd4752b16dbaL,0xdeefc0e63524c1b1L,0x465ea76ee4383693L,
22439         0x79401711361b8d98L },
22440       { 0xa5f9ace9f21a15cbL,0x73d26163efee9aebL,0xcca844b3e677016cL,
22441         0x6c122b0757eaee06L } },
22442     /* 58 << 245 */
22443     { { 0xb782dce715f09690L,0x508b9b122dfc0fc9L,0x9015ab4b65d89fc6L,
22444         0x5e79dab7d6d5bb0fL },
22445       { 0x64f021f06c775aa2L,0xdf09d8cc37c7eca1L,0x9a761367ef2fa506L,
22446         0xed4ca4765b81eec6L } },
22447     /* 59 << 245 */
22448     { { 0x262ede3610bbb8b5L,0x0737ce830641ada3L,0x4c94288ae9831cccL,
22449         0x487fc1ce8065e635L },
22450       { 0xb13d7ab3b8bb3659L,0xdea5df3e855e4120L,0xb9a1857385eb0244L,
22451         0x1a1b8ea3a7cfe0a3L } },
22452     /* 60 << 245 */
22453     { { 0x3b83711967b0867cL,0x8d5e0d089d364520L,0x52dccc1ed930f0e3L,
22454         0xefbbcec7bf20bbafL },
22455       { 0x99cffcab0263ad10L,0xd8199e6dfcd18f8aL,0x64e2773fe9f10617L,
22456         0x0079e8e108704848L } },
22457     /* 61 << 245 */
22458     { { 0x1169989f8a342283L,0x8097799ca83012e6L,0xece966cb8a6a9001L,
22459         0x93b3afef072ac7fcL },
22460       { 0xe6893a2a2db3d5baL,0x263dc46289bf4fdcL,0x8852dfc9e0396673L,
22461         0x7ac708953af362b6L } },
22462     /* 62 << 245 */
22463     { { 0xbb9cce4d5c2f342bL,0xbf80907ab52d7aaeL,0x97f3d3cd2161bcd0L,
22464         0xb25b08340962744dL },
22465       { 0xc5b18ea56c3a1ddaL,0xfe4ec7eb06c92317L,0xb787b890ad1c4afeL,
22466         0xdccd9a920ede801aL } },
22467     /* 63 << 245 */
22468     { { 0x9ac6dddadb58da1fL,0x22bbc12fb8cae6eeL,0xc6f8bced815c4a43L,
22469         0x8105a92cf96480c7L },
22470       { 0x0dc3dbf37a859d51L,0xe3ec7ce63041196bL,0xd9f64b250d1067c9L,
22471         0xf23213213d1f8dd8L } },
22472     /* 64 << 245 */
22473     { { 0x8b5c619c76497ee8L,0x5d2b0ac6c717370eL,0x98204cb64fcf68e1L,
22474         0x0bdec21162bc6792L },
22475       { 0x6973ccefa63b1011L,0xf9e3fa97e0de1ac5L,0x5efb693e3d0e0c8bL,
22476         0x037248e9d2d4fcb4L } },
22477     /* 0 << 252 */
22478     { { 0x00, 0x00, 0x00, 0x00 },
22479       { 0x00, 0x00, 0x00, 0x00 } },
22480     /* 1 << 252 */
22481     { { 0x80802dc91ec34f9eL,0xd8772d3533810603L,0x3f06d66c530cb4f3L,
22482         0x7be5ed0dc475c129L },
22483       { 0xcb9e3c1931e82b10L,0xc63d2857c9ff6b4cL,0xb92118c692a1b45eL,
22484         0x0aec44147285bbcaL } },
22485     /* 2 << 252 */
22486     { { 0xfc189ae71e29a3efL,0xcbe906f04c93302eL,0xd0107914ceaae10eL,
22487         0xb7a23f34b68e19f8L },
22488       { 0xe9d875c2efd2119dL,0x03198c6efcadc9c8L,0x65591bf64da17113L,
22489         0x3cf0bbf83d443038L } },
22490     /* 3 << 252 */
22491     { { 0xae485bb72b724759L,0x945353e1b2d4c63aL,0x82159d07de7d6f2cL,
22492         0x389caef34ec5b109L },
22493       { 0x4a8ebb53db65ef14L,0x2dc2cb7edd99de43L,0x816fa3ed83f2405fL,
22494         0x73429bb9c14208a3L } },
22495     /* 4 << 252 */
22496     { { 0xb618d590b01e6e27L,0x047e2ccde180b2dcL,0xd1b299b504aea4a9L,
22497         0x412c9e1e9fa403a4L },
22498       { 0x88d28a3679407552L,0x49c50136f332b8e3L,0x3a1b6fcce668de19L,
22499         0x178851bc75122b97L } },
22500     /* 5 << 252 */
22501     { { 0xb1e13752fb85fa4cL,0xd61257ce383c8ce9L,0xd43da670d2f74daeL,
22502         0xa35aa23fbf846bbbL },
22503       { 0x5e74235d4421fc83L,0xf6df8ee0c363473bL,0x34d7f52a3c4aa158L,
22504         0x50d05aab9bc6d22eL } },
22505     /* 6 << 252 */
22506     { { 0x8c56e735a64785f4L,0xbc56637b5f29cd07L,0x53b2bb803ee35067L,
22507         0x50235a0fdc919270L },
22508       { 0x191ab6d8f2c4aa65L,0xc34758318396023bL,0x80400ba5f0f805baL,
22509         0x8881065b5ec0f80fL } },
22510     /* 7 << 252 */
22511     { { 0xc370e522cc1b5e83L,0xde2d4ad1860b8bfbL,0xad364df067b256dfL,
22512         0x8f12502ee0138997L },
22513       { 0x503fa0dc7783920aL,0xe80014adc0bc866aL,0x3f89b744d3064ba6L,
22514         0x03511dcdcba5dba5L } },
22515     /* 8 << 252 */
22516     { { 0x197dd46d95a7b1a2L,0x9c4e7ad63c6341fbL,0x426eca29484c2eceL,
22517         0x9211e489de7f4f8aL },
22518       { 0x14997f6ec78ef1f4L,0x2b2c091006574586L,0x17286a6e1c3eede8L,
22519         0x25f92e470f60e018L } },
22520     /* 9 << 252 */
22521     { { 0x805c564631890a36L,0x703ef60057feea5bL,0x389f747caf3c3030L,
22522         0xe0e5daeb54dd3739L },
22523       { 0xfe24a4c3c9c9f155L,0x7e4bf176b5393962L,0x37183de2af20bf29L,
22524         0x4a1bd7b5f95a8c3bL } },
22525     /* 10 << 252 */
22526     { { 0xa83b969946191d3dL,0x281fc8dd7b87f257L,0xb18e2c1354107588L,
22527         0x6372def79b2bafe8L },
22528       { 0xdaf4bb480d8972caL,0x3f2dd4b756167a3fL,0x1eace32d84310cf4L,
22529         0xe3bcefafe42700aaL } },
22530     /* 11 << 252 */
22531     { { 0x5fe5691ed785e73dL,0xa5db5ab62ea60467L,0x02e23d41dfc6514aL,
22532         0x35e8048ee03c3665L },
22533       { 0x3f8b118f1adaa0f8L,0x28ec3b4584ce1a5aL,0xe8cacc6e2c6646b8L,
22534         0x1343d185dbd0e40fL } },
22535     /* 12 << 252 */
22536     { { 0xe5d7f844caaa358cL,0x1a1db7e49924182aL,0xd64cd42d9c875d9aL,
22537         0xb37b515f042eeec8L },
22538       { 0x4d4dd4097b165fbeL,0xfc322ed9e206eff3L,0x7dee410259b7e17eL,
22539         0x55a481c08236ca00L } },
22540     /* 13 << 252 */
22541     { { 0x8c885312c23fc975L,0x1571580605d6297bL,0xa078868ef78edd39L,
22542         0x956b31e003c45e52L },
22543       { 0x470275d5ff7b33a6L,0xc8d5dc3a0c7e673fL,0x419227b47e2f2598L,
22544         0x8b37b6344c14a975L } },
22545     /* 14 << 252 */
22546     { { 0xd0667ed68b11888cL,0x5e0e8c3e803e25dcL,0x34e5d0dcb987a24aL,
22547         0x9f40ac3bae920323L },
22548       { 0x5463de9534e0f63aL,0xa128bf926b6328f9L,0x491ccd7cda64f1b7L,
22549         0x7ef1ec27c47bde35L } },
22550     /* 15 << 252 */
22551     { { 0xa857240fa36a2737L,0x35dc136663621bc1L,0x7a3a6453d4fb6897L,
22552         0x80f1a439c929319dL },
22553       { 0xfc18274bf8cb0ba0L,0xb0b537668078c5ebL,0xfb0d49241e01d0efL,
22554         0x50d7c67d372ab09cL } },
22555     /* 16 << 252 */
22556     { { 0xb4e370af3aeac968L,0xe4f7fee9c4b63266L,0xb4acd4c2e3ac5664L,
22557         0xf8910bd2ceb38cbfL },
22558       { 0x1c3ae50cc9c0726eL,0x15309569d97b40bfL,0x70884b7ffd5a5a1bL,
22559         0x3890896aef8314cdL } },
22560     /* 17 << 252 */
22561     { { 0x58e1515ca5618c93L,0xe665432b77d942d1L,0xb32181bfb6f767a8L,
22562         0x753794e83a604110L },
22563       { 0x09afeb7ce8c0dbccL,0x31e02613598673a3L,0x5d98e5577d46db00L,
22564         0xfc21fb8c9d985b28L } },
22565     /* 18 << 252 */
22566     { { 0xc9040116b0843e0bL,0x53b1b3a869b04531L,0xdd1649f085d7d830L,
22567         0xbb3bcc87cb7427e8L },
22568       { 0x77261100c93dce83L,0x7e79da61a1922a2aL,0x587a2b02f3149ce8L,
22569         0x147e1384de92ec83L } },
22570     /* 19 << 252 */
22571     { { 0x484c83d3af077f30L,0xea78f8440658b53aL,0x912076c2027aec53L,
22572         0xf34714e393c8177dL },
22573       { 0x37ef5d15c2376c84L,0x8315b6593d1aa783L,0x3a75c484ef852a90L,
22574         0x0ba0c58a16086bd4L } },
22575     /* 20 << 252 */
22576     { { 0x29688d7a529a6d48L,0x9c7f250dc2f19203L,0x123042fb682e2df9L,
22577         0x2b7587e7ad8121bcL },
22578       { 0x30fc0233e0182a65L,0xb82ecf87e3e1128aL,0x7168286193fb098fL,
22579         0x043e21ae85e9e6a7L } },
22580     /* 21 << 252 */
22581     { { 0xab5b49d666c834eaL,0x3be43e1847414287L,0xf40fb859219a2a47L,
22582         0x0e6559e9cc58df3cL },
22583       { 0xfe1dfe8e0c6615b4L,0x14abc8fd56459d70L,0x7be0fa8e05de0386L,
22584         0x8e63ef68e9035c7cL } },
22585     /* 22 << 252 */
22586     { { 0x116401b453b31e91L,0x0cba7ad44436b4d8L,0x9151f9a0107afd66L,
22587         0xafaca8d01f0ee4c4L },
22588       { 0x75fe5c1d9ee9761cL,0x3497a16bf0c0588fL,0x3ee2bebd0304804cL,
22589         0xa8fb9a60c2c990b9L } },
22590     /* 23 << 252 */
22591     { { 0xd14d32fe39251114L,0x36bf25bccac73366L,0xc9562c66dba7495cL,
22592         0x324d301b46ad348bL },
22593       { 0x9f46620cd670407eL,0x0ea8d4f1e3733a01L,0xd396d532b0c324e0L,
22594         0x5b211a0e03c317cdL } },
22595     /* 24 << 252 */
22596     { { 0x090d7d205ffe7b37L,0x3b7f3efb1747d2daL,0xa2cb525fb54fc519L,
22597         0x6e220932f66a971eL },
22598       { 0xddc160dfb486d440L,0x7fcfec463fe13465L,0x83da7e4e76e4c151L,
22599         0xd6fa48a1d8d302b5L } },
22600     /* 25 << 252 */
22601     { { 0xc6304f265872cd88L,0x806c1d3c278b90a1L,0x3553e725caf0bc1cL,
22602         0xff59e603bb9d8d5cL },
22603       { 0xa4550f327a0b85ddL,0xdec5720a93ecc217L,0x0b88b74169d62213L,
22604         0x7212f2455b365955L } },
22605     /* 26 << 252 */
22606     { { 0x20764111b5cae787L,0x13cb7f581dfd3124L,0x2dca77da1175aefbL,
22607         0xeb75466bffaae775L },
22608       { 0x74d76f3bdb6cff32L,0x7440f37a61fcda9aL,0x1bb3ac92b525028bL,
22609         0x20fbf8f7a1975f29L } },
22610     /* 27 << 252 */
22611     { { 0x982692e1df83097fL,0x28738f6c554b0800L,0xdc703717a2ce2f2fL,
22612         0x7913b93c40814194L },
22613       { 0x049245931fe89636L,0x7b98443ff78834a6L,0x11c6ab015114a5a1L,
22614         0x60deb383ffba5f4cL } },
22615     /* 28 << 252 */
22616     { { 0x4caa54c601a982e6L,0x1dd35e113491cd26L,0x973c315f7cbd6b05L,
22617         0xcab0077552494724L },
22618       { 0x04659b1f6565e15aL,0xbf30f5298c8fb026L,0xfc21641ba8a0de37L,
22619         0xe9c7a366fa5e5114L } },
22620     /* 29 << 252 */
22621     { { 0xdb849ca552f03ad8L,0xc7e8dbe9024e35c0L,0xa1a2bbaccfc3c789L,
22622         0xbf733e7d9c26f262L },
22623       { 0x882ffbf5b8444823L,0xb7224e886bf8483bL,0x53023b8b65bef640L,
22624         0xaabfec91d4d5f8cdL } },
22625     /* 30 << 252 */
22626     { { 0xa40e1510079ea1bdL,0x1ad9addcd05d5d26L,0xdb3f2eab13e68d4fL,
22627         0x1cff1ae2640f803fL },
22628       { 0xe0e7b749d4cee117L,0x8e9f275b4036d909L,0xce34e31d8f4d4c38L,
22629         0x22b37f69d75130fcL } },
22630     /* 31 << 252 */
22631     { { 0x83e0f1fdb4014604L,0xa8ce991989415078L,0x82375b7541792efeL,
22632         0x4f59bf5c97d4515bL },
22633       { 0xac4f324f923a277dL,0xd9bc9b7d650f3406L,0xc6fa87d18a39bc51L,
22634         0x825885305ccc108fL } },
22635     /* 32 << 252 */
22636     { { 0x5ced3c9f82e4c634L,0x8efb83143a4464f8L,0xe706381b7a1dca25L,
22637         0x6cd15a3c5a2a412bL },
22638       { 0x9347a8fdbfcd8fb5L,0x31db2eef6e54cd22L,0xc4aeb11ef8d8932fL,
22639         0x11e7c1ed344411afL } },
22640     /* 33 << 252 */
22641     { { 0x2653050cdc9a151eL,0x9edbfc083bb0a859L,0x926c81c7fd5691e7L,
22642         0x9c1b23426f39019aL },
22643       { 0x64a81c8b7f8474b9L,0x90657c0701761819L,0x390b333155e0375aL,
22644         0xc676c626b6ebc47dL } },
22645     /* 34 << 252 */
22646     { { 0x51623247b7d6dee8L,0x0948d92779659313L,0x99700161e9ab35edL,
22647         0x06cc32b48ddde408L },
22648       { 0x6f2fd664061ef338L,0x1606fa02c202e9edL,0x55388bc1929ba99bL,
22649         0xc4428c5e1e81df69L } },
22650     /* 35 << 252 */
22651     { { 0xce2028aef91b0b2aL,0xce870a23f03dfd3fL,0x66ec2c870affe8edL,
22652         0xb205fb46284d0c00L },
22653       { 0xbf5dffe744cefa48L,0xb6fc37a8a19876d7L,0xbecfa84c08b72863L,
22654         0xd7205ff52576374fL } },
22655     /* 36 << 252 */
22656     { { 0x80330d328887de41L,0x5de0df0c869ea534L,0x13f427533c56ea17L,
22657         0xeb1f6069452b1a78L },
22658       { 0x50474396e30ea15cL,0x575816a1c1494125L,0xbe1ce55bfe6bb38fL,
22659         0xb901a94896ae30f7L } },
22660     /* 37 << 252 */
22661     { { 0xe5af0f08d8fc3548L,0x5010b5d0d73bfd08L,0x993d288053fe655aL,
22662         0x99f2630b1c1309fdL },
22663       { 0xd8677bafb4e3b76fL,0x14e51ddcb840784bL,0x326c750cbf0092ceL,
22664         0xc83d306bf528320fL } },
22665     /* 38 << 252 */
22666     { { 0xc445671577d4715cL,0xd30019f96b703235L,0x207ccb2ed669e986L,
22667         0x57c824aff6dbfc28L },
22668       { 0xf0eb532fd8f92a23L,0x4a557fd49bb98fd2L,0xa57acea7c1e6199aL,
22669         0x0c6638208b94b1edL } },
22670     /* 39 << 252 */
22671     { { 0x9b42be8ff83a9266L,0xc7741c970101bd45L,0x95770c1107bd9cebL,
22672         0x1f50250a8b2e0744L },
22673       { 0xf762eec81477b654L,0xc65b900e15efe59aL,0x88c961489546a897L,
22674         0x7e8025b3c30b4d7cL } },
22675     /* 40 << 252 */
22676     { { 0xae4065ef12045cf9L,0x6fcb2caf9ccce8bdL,0x1fa0ba4ef2cf6525L,
22677         0xf683125dcb72c312L },
22678       { 0xa01da4eae312410eL,0x67e286776cd8e830L,0xabd9575298fb3f07L,
22679         0x05f11e11eef649a5L } },
22680     /* 41 << 252 */
22681     { { 0xba47faef9d3472c2L,0x3adff697c77d1345L,0x4761fa04dd15afeeL,
22682         0x64f1f61ab9e69462L },
22683       { 0xfa691fab9bfb9093L,0x3df8ae8fa1133dfeL,0xcd5f896758cc710dL,
22684         0xfbb88d5016c7fe79L } },
22685     /* 42 << 252 */
22686     { { 0x8e011b4ce88c50d1L,0x7532e807a8771c4fL,0x64c78a48e2278ee4L,
22687         0x0b283e833845072aL },
22688       { 0x98a6f29149e69274L,0xb96e96681868b21cL,0x38f0adc2b1a8908eL,
22689         0x90afcff71feb829dL } },
22690     /* 43 << 252 */
22691     { { 0x9915a383210b0856L,0xa5a80602def04889L,0x800e9af97c64d509L,
22692         0x81382d0bb8996f6fL },
22693       { 0x490eba5381927e27L,0x46c63b324af50182L,0x784c5fd9d3ad62ceL,
22694         0xe4fa1870f8ae8736L } },
22695     /* 44 << 252 */
22696     { { 0x4ec9d0bcd7466b25L,0x84ddbe1adb235c65L,0x5e2645ee163c1688L,
22697         0x570bd00e00eba747L },
22698       { 0xfa51b629128bfa0fL,0x92fce1bd6c1d3b68L,0x3e7361dcb66778b1L,
22699         0x9c7d249d5561d2bbL } },
22700     /* 45 << 252 */
22701     { { 0xa40b28bf0bbc6229L,0x1c83c05edfd91497L,0x5f9f5154f083df05L,
22702         0xbac38b3ceee66c9dL },
22703       { 0xf71db7e3ec0dfcfdL,0xf2ecda8e8b0a8416L,0x52fddd867812aa66L,
22704         0x2896ef104e6f4272L } },
22705     /* 46 << 252 */
22706     { { 0xff27186a0fe9a745L,0x08249fcd49ca70dbL,0x7425a2e6441cac49L,
22707         0xf4a0885aece5ff57L },
22708       { 0x6e2cb7317d7ead58L,0xf96cf7d61898d104L,0xafe67c9d4f2c9a89L,
22709         0x89895a501c7bf5bcL } },
22710     /* 47 << 252 */
22711     { { 0xdc7cb8e5573cecfaL,0x66497eaed15f03e6L,0x6bc0de693f084420L,
22712         0x323b9b36acd532b0L },
22713       { 0xcfed390a0115a3c1L,0x9414c40b2d65ca0eL,0x641406bd2f530c78L,
22714         0x29369a44833438f2L } },
22715     /* 48 << 252 */
22716     { { 0x996884f5903fa271L,0xe6da0fd2b9da921eL,0xa6f2f2695db01e54L,
22717         0x1ee3e9bd6876214eL },
22718       { 0xa26e181ce27a9497L,0x36d254e48e215e04L,0x42f32a6c252cabcaL,
22719         0x9948148780b57614L } },
22720     /* 49 << 252 */
22721     { { 0x4c4dfe6940d9cae1L,0x0586958011a10f09L,0xca287b573491b64bL,
22722         0x77862d5d3fd4a53bL },
22723       { 0xbf94856e50349126L,0x2be30bd171c5268fL,0x10393f19cbb650a6L,
22724         0x639531fe778cf9fdL } },
22725     /* 50 << 252 */
22726     { { 0x02556a11b2935359L,0xda38aa96af8c126eL,0x47dbe6c20960167fL,
22727         0x37bbabb6501901cdL },
22728       { 0xb6e979e02c947778L,0xd69a51757a1a1dc6L,0xc3ed50959d9faf0cL,
22729         0x4dd9c0961d5fa5f0L } },
22730     /* 51 << 252 */
22731     { { 0xa0c4304d64f16ea8L,0x8b1cac167e718623L,0x0b5765467c67f03eL,
22732         0x559cf5adcbd88c01L },
22733       { 0x074877bb0e2af19aL,0x1f717ec1a1228c92L,0x70bcb800326e8920L,
22734         0xec6e2c5c4f312804L } },
22735     /* 52 << 252 */
22736     { { 0x426aea7d3fca4752L,0xf12c09492211f62aL,0x24beecd87be7b6b5L,
22737         0xb77eaf4c36d7a27dL },
22738       { 0x154c2781fda78fd3L,0x848a83b0264eeabeL,0x81287ef04ffe2bc4L,
22739         0x7b6d88c6b6b6fc2aL } },
22740     /* 53 << 252 */
22741     { { 0x805fb947ce417d99L,0x4b93dcc38b916cc4L,0x72e65bb321273323L,
22742         0xbcc1badd6ea9886eL },
22743       { 0x0e2230114bc5ee85L,0xa561be74c18ee1e4L,0x762fd2d4a6bcf1f1L,
22744         0x50e6a5a495231489L } },
22745     /* 54 << 252 */
22746     { { 0xca96001fa00b500bL,0x5c098cfc5d7dcdf5L,0xa64e2d2e8c446a85L,
22747         0xbae9bcf1971f3c62L },
22748       { 0x4ec226838435a2c5L,0x8ceaed6c4bad4643L,0xe9f8fb47ccccf4e3L,
22749         0xbd4f3fa41ce3b21eL } },
22750     /* 55 << 252 */
22751     { { 0xd79fb110a3db3292L,0xe28a37dab536c66aL,0x279ce87b8e49e6a9L,
22752         0x70ccfe8dfdcec8e3L },
22753       { 0x2193e4e03ba464b2L,0x0f39d60eaca9a398L,0x7d7932aff82c12abL,
22754         0xd8ff50ed91e7e0f7L } },
22755     /* 56 << 252 */
22756     { { 0xea961058fa28a7e0L,0xc726cf250bf5ec74L,0xe74d55c8db229666L,
22757         0x0bd9abbfa57f5799L },
22758       { 0x7479ef074dfc47b3L,0xd9c65fc30c52f91dL,0x8e0283fe36a8bde2L,
22759         0xa32a8b5e7d4b7280L } },
22760     /* 57 << 252 */
22761     { { 0x6a677c6112e83233L,0x0fbb3512dcc9bf28L,0x562e8ea50d780f61L,
22762         0x0db8b22b1dc4e89cL },
22763       { 0x0a6fd1fb89be0144L,0x8c77d246ca57113bL,0x4639075dff09c91cL,
22764         0x5b47b17f5060824cL } },
22765     /* 58 << 252 */
22766     { { 0x58aea2b016287b52L,0xa1343520d0cd8eb0L,0x6148b4d0c5d58573L,
22767         0xdd2b6170291c68aeL },
22768       { 0xa61b39291da3b3b7L,0x5f946d7908c4ac10L,0x4105d4a57217d583L,
22769         0x5061da3d25e6de5eL } },
22770     /* 59 << 252 */
22771     { { 0x3113940dec1b4991L,0xf12195e136f485aeL,0xa7507fb2731a2ee0L,
22772         0x95057a8e6e9e196eL },
22773       { 0xa3c2c9112e130136L,0x97dfbb3633c60d15L,0xcaf3c581b300ee2bL,
22774         0x77f25d90f4bac8b8L } },
22775     /* 60 << 252 */
22776     { { 0xdb1c4f986d840cd6L,0x471d62c0e634288cL,0x8ec2f85ecec8a161L,
22777         0x41f37cbcfa6f4ae2L },
22778       { 0x6793a20f4b709985L,0x7a7bd33befa8985bL,0x2c6a3fbd938e6446L,
22779         0x190426192a8d47c1L } },
22780     /* 61 << 252 */
22781     { { 0x16848667cc36975fL,0x02acf1689d5f1dfbL,0x62d41ad4613baa94L,
22782         0xb56fbb929f684670L },
22783       { 0xce610d0de9e40569L,0x7b99c65f35489fefL,0x0c88ad1b3df18b97L,
22784         0x81b7d9be5d0e9edbL } },
22785     /* 62 << 252 */
22786     { { 0xd85218c0c716cc0aL,0xf4b5ff9085691c49L,0xa4fd666bce356ac6L,
22787         0x17c728954b327a7aL },
22788       { 0xf93d5085da6be7deL,0xff71530e3301d34eL,0x4cd96442d8f448e8L,
22789         0x9283d3312ed18ffaL } },
22790     /* 63 << 252 */
22791     { { 0x4d33dd992a849870L,0xa716964b41576335L,0xff5e3a9b179be0e5L,
22792         0x5b9d6b1b83b13632L },
22793       { 0x3b8bd7d4a52f313bL,0xc9dd95a0637a4660L,0x300359620b3e218fL,
22794         0xce1481a3c7b28a3cL } },
22795     /* 64 << 252 */
22796     { { 0xab41b43a43228d83L,0x24ae1c304ad63f99L,0x8e525f1a46a51229L,
22797         0x14af860fcd26d2b4L },
22798       { 0xd6baef613f714aa1L,0xf51865adeb78795eL,0xd3e21fcee6a9d694L,
22799         0x82ceb1dd8a37b527L } },
22800 };
22801 
22802 /* Multiply the point by the scalar and return the result.
22803  * If map is true then convert result to affine coordinates.
22804  *
22805  * Pre-computed table containing multiples of g times powers of 2.
22806  * Width between powers is 7 bits.
22807  * Accumulate into the result.
22808  *
22809  * r      Resulting point.
22810  * g      Point to scalar multiply.
22811  * k      Scalar to multiply by.
22812  * table  Pre-computed table of points.
22813  * map    Indicates whether to convert result to affine.
22814  * ct     Constant time required.
22815  * heap   Heap to use for allocation.
22816  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
22817  */
sp_256_ecc_mulmod_add_only_4(sp_point_256 * r,const sp_point_256 * g,const sp_table_entry_256 * table,const sp_digit * k,int map,int ct,void * heap)22818 static int sp_256_ecc_mulmod_add_only_4(sp_point_256* r, const sp_point_256* g,
22819         const sp_table_entry_256* table, const sp_digit* k, int map,
22820         int ct, void* heap)
22821 {
22822 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
22823     sp_point_256* rt = NULL;
22824     sp_digit* tmp = NULL;
22825 #else
22826     sp_point_256 rt[2];
22827     sp_digit tmp[2 * 4 * 5];
22828 #endif
22829     sp_point_256* p = NULL;
22830     sp_digit* negy = NULL;
22831     int i;
22832     ecc_recode_256 v[37];
22833     int err = MP_OKAY;
22834 
22835     (void)g;
22836     (void)ct;
22837     (void)heap;
22838 
22839 
22840 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
22841     rt = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 2, heap,
22842                                      DYNAMIC_TYPE_ECC);
22843     if (rt == NULL)
22844         err = MEMORY_E;
22845     if (err == MP_OKAY) {
22846         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 4 * 5, heap,
22847                                  DYNAMIC_TYPE_ECC);
22848         if (tmp == NULL)
22849             err = MEMORY_E;
22850     }
22851 #endif
22852 
22853     if (err == MP_OKAY) {
22854         negy = tmp;
22855         p = rt + 1;
22856     }
22857 
22858     if (err == MP_OKAY) {
22859         sp_256_ecc_recode_7_4(k, v);
22860 
22861         XMEMCPY(p->z, p256_norm_mod, sizeof(p256_norm_mod));
22862         XMEMCPY(rt->z, p256_norm_mod, sizeof(p256_norm_mod));
22863 
22864         i = 36;
22865     #ifndef WC_NO_CACHE_RESISTANT
22866         if (ct) {
22867             sp_256_get_entry_65_4(rt, &table[i * 65], v[i].i);
22868         }
22869         else
22870     #endif
22871         {
22872             XMEMCPY(rt->x, table[i * 65 + v[i].i].x, sizeof(table->x));
22873             XMEMCPY(rt->y, table[i * 65 + v[i].i].y, sizeof(table->y));
22874         }
22875         rt->infinity = !v[i].i;
22876         for (--i; i>=0; i--) {
22877         #ifndef WC_NO_CACHE_RESISTANT
22878             if (ct) {
22879                 sp_256_get_entry_65_4(p, &table[i * 65], v[i].i);
22880             }
22881             else
22882         #endif
22883             {
22884                 XMEMCPY(p->x, table[i * 65 + v[i].i].x, sizeof(table->x));
22885                 XMEMCPY(p->y, table[i * 65 + v[i].i].y, sizeof(table->y));
22886             }
22887             p->infinity = !v[i].i;
22888             sp_256_sub_4(negy, p256_mod, p->y);
22889             sp_256_norm_4(negy);
22890             sp_256_cond_copy_4(p->y, negy, 0 - v[i].neg);
22891             sp_256_proj_point_add_qz1_4(rt, rt, p, tmp);
22892         }
22893         if (map != 0) {
22894             sp_256_map_4(r, rt, tmp);
22895         }
22896         else {
22897             XMEMCPY(r, rt, sizeof(sp_point_256));
22898         }
22899     }
22900 
22901 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
22902     if (tmp != NULL)
22903 #endif
22904     {
22905         ForceZero(tmp, sizeof(sp_digit) * 2 * 4 * 5);
22906     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
22907         XFREE(tmp, heap, DYNAMIC_TYPE_ECC);
22908     #endif
22909     }
22910 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
22911     if (rt != NULL)
22912         XFREE(rt, heap, DYNAMIC_TYPE_ECC);
22913 #endif
22914 
22915     return MP_OKAY;
22916 }
22917 
22918 /* Multiply the base point of P256 by the scalar and return the result.
22919  * If map is true then convert result to affine coordinates.
22920  *
22921  * r     Resulting point.
22922  * k     Scalar to multiply by.
22923  * map   Indicates whether to convert result to affine.
22924  * ct    Constant time required.
22925  * heap  Heap to use for allocation.
22926  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
22927  */
sp_256_ecc_mulmod_base_4(sp_point_256 * r,const sp_digit * k,int map,int ct,void * heap)22928 static int sp_256_ecc_mulmod_base_4(sp_point_256* r, const sp_digit* k,
22929         int map, int ct, void* heap)
22930 {
22931     return sp_256_ecc_mulmod_add_only_4(r, NULL, p256_table,
22932                                       k, map, ct, heap);
22933 }
22934 
22935 #ifdef HAVE_INTEL_AVX2
22936 /* Multiply the point by the scalar and return the result.
22937  * If map is true then convert result to affine coordinates.
22938  *
22939  * Pre-computed table containing multiples of g times powers of 2.
22940  * Width between powers is 7 bits.
22941  * Accumulate into the result.
22942  *
22943  * r      Resulting point.
22944  * g      Point to scalar multiply.
22945  * k      Scalar to multiply by.
22946  * table  Pre-computed table of points.
22947  * map    Indicates whether to convert result to affine.
22948  * ct     Constant time required.
22949  * heap   Heap to use for allocation.
22950  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
22951  */
sp_256_ecc_mulmod_add_only_avx2_4(sp_point_256 * r,const sp_point_256 * g,const sp_table_entry_256 * table,const sp_digit * k,int map,int ct,void * heap)22952 static int sp_256_ecc_mulmod_add_only_avx2_4(sp_point_256* r, const sp_point_256* g,
22953         const sp_table_entry_256* table, const sp_digit* k, int map,
22954         int ct, void* heap)
22955 {
22956 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
22957     sp_point_256* rt = NULL;
22958     sp_digit* tmp = NULL;
22959 #else
22960     sp_point_256 rt[2];
22961     sp_digit tmp[2 * 4 * 5];
22962 #endif
22963     sp_point_256* p = NULL;
22964     sp_digit* negy = NULL;
22965     int i;
22966     ecc_recode_256 v[37];
22967     int err = MP_OKAY;
22968 
22969     (void)g;
22970     (void)ct;
22971     (void)heap;
22972 
22973 
22974 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
22975     rt = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 2, heap,
22976                                      DYNAMIC_TYPE_ECC);
22977     if (rt == NULL)
22978         err = MEMORY_E;
22979     if (err == MP_OKAY) {
22980         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 4 * 5, heap,
22981                                  DYNAMIC_TYPE_ECC);
22982         if (tmp == NULL)
22983             err = MEMORY_E;
22984     }
22985 #endif
22986 
22987     if (err == MP_OKAY) {
22988         negy = tmp;
22989         p = rt + 1;
22990     }
22991 
22992     if (err == MP_OKAY) {
22993         sp_256_ecc_recode_7_4(k, v);
22994 
22995         XMEMCPY(p->z, p256_norm_mod, sizeof(p256_norm_mod));
22996         XMEMCPY(rt->z, p256_norm_mod, sizeof(p256_norm_mod));
22997 
22998         i = 36;
22999     #ifndef WC_NO_CACHE_RESISTANT
23000         if (ct) {
23001             sp_256_get_entry_65_avx2_4(rt, &table[i * 65], v[i].i);
23002         }
23003         else
23004     #endif
23005         {
23006             XMEMCPY(rt->x, table[i * 65 + v[i].i].x, sizeof(table->x));
23007             XMEMCPY(rt->y, table[i * 65 + v[i].i].y, sizeof(table->y));
23008         }
23009         rt->infinity = !v[i].i;
23010         for (--i; i>=0; i--) {
23011         #ifndef WC_NO_CACHE_RESISTANT
23012             if (ct) {
23013                 sp_256_get_entry_65_avx2_4(p, &table[i * 65], v[i].i);
23014             }
23015             else
23016         #endif
23017             {
23018                 XMEMCPY(p->x, table[i * 65 + v[i].i].x, sizeof(table->x));
23019                 XMEMCPY(p->y, table[i * 65 + v[i].i].y, sizeof(table->y));
23020             }
23021             p->infinity = !v[i].i;
23022             sp_256_sub_4(negy, p256_mod, p->y);
23023             sp_256_norm_4(negy);
23024             sp_256_cond_copy_4(p->y, negy, 0 - v[i].neg);
23025             sp_256_proj_point_add_qz1_avx2_4(rt, rt, p, tmp);
23026         }
23027         if (map != 0) {
23028             sp_256_map_avx2_4(r, rt, tmp);
23029         }
23030         else {
23031             XMEMCPY(r, rt, sizeof(sp_point_256));
23032         }
23033     }
23034 
23035 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
23036     if (tmp != NULL)
23037 #endif
23038     {
23039         ForceZero(tmp, sizeof(sp_digit) * 2 * 4 * 5);
23040     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
23041         XFREE(tmp, heap, DYNAMIC_TYPE_ECC);
23042     #endif
23043     }
23044 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
23045     if (rt != NULL)
23046         XFREE(rt, heap, DYNAMIC_TYPE_ECC);
23047 #endif
23048 
23049     return MP_OKAY;
23050 }
23051 
23052 /* Multiply the base point of P256 by the scalar and return the result.
23053  * If map is true then convert result to affine coordinates.
23054  *
23055  * r     Resulting point.
23056  * k     Scalar to multiply by.
23057  * map   Indicates whether to convert result to affine.
23058  * ct    Constant time required.
23059  * heap  Heap to use for allocation.
23060  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
23061  */
sp_256_ecc_mulmod_base_avx2_4(sp_point_256 * r,const sp_digit * k,int map,int ct,void * heap)23062 static int sp_256_ecc_mulmod_base_avx2_4(sp_point_256* r, const sp_digit* k,
23063         int map, int ct, void* heap)
23064 {
23065     return sp_256_ecc_mulmod_add_only_avx2_4(r, NULL, p256_table,
23066                                       k, map, ct, heap);
23067 }
23068 
23069 #endif /* HAVE_INTEL_AVX2 */
23070 #endif /* WOLFSSL_SP_SMALL */
23071 /* Multiply the base point of P256 by the scalar and return the result.
23072  * If map is true then convert result to affine coordinates.
23073  *
23074  * km    Scalar to multiply by.
23075  * r     Resulting point.
23076  * map   Indicates whether to convert result to affine.
23077  * heap  Heap to use for allocation.
23078  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
23079  */
sp_ecc_mulmod_base_256(const mp_int * km,ecc_point * r,int map,void * heap)23080 int sp_ecc_mulmod_base_256(const mp_int* km, ecc_point* r, int map, void* heap)
23081 {
23082 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
23083     sp_point_256* point = NULL;
23084     sp_digit* k = NULL;
23085 #else
23086     sp_point_256  point[1];
23087     sp_digit k[4];
23088 #endif
23089     int err = MP_OKAY;
23090 #ifdef HAVE_INTEL_AVX2
23091     word32 cpuid_flags = cpuid_get_flags();
23092 #endif
23093 
23094 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
23095     point = (sp_point_256*)XMALLOC(sizeof(sp_point_256), heap,
23096                                          DYNAMIC_TYPE_ECC);
23097     if (point == NULL)
23098         err = MEMORY_E;
23099     if (err == MP_OKAY) {
23100         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 4, heap,
23101                                DYNAMIC_TYPE_ECC);
23102         if (k == NULL)
23103             err = MEMORY_E;
23104     }
23105 #endif
23106 
23107     if (err == MP_OKAY) {
23108         sp_256_from_mp(k, 4, km);
23109 
23110 #ifdef HAVE_INTEL_AVX2
23111         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
23112             err = sp_256_ecc_mulmod_base_avx2_4(point, k, map, 1, heap);
23113         else
23114 #endif
23115             err = sp_256_ecc_mulmod_base_4(point, k, map, 1, heap);
23116     }
23117     if (err == MP_OKAY) {
23118         err = sp_256_point_to_ecc_point_4(point, r);
23119     }
23120 
23121 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
23122     if (k != NULL)
23123         XFREE(k, heap, DYNAMIC_TYPE_ECC);
23124     if (point != NULL)
23125         XFREE(point, heap, DYNAMIC_TYPE_ECC);
23126 #endif
23127 
23128     return err;
23129 }
23130 
23131 /* Multiply the base point of P256 by the scalar, add point a and return
23132  * the result. If map is true then convert result to affine coordinates.
23133  *
23134  * km      Scalar to multiply by.
23135  * am      Point to add to scalar mulitply result.
23136  * inMont  Point to add is in montgomery form.
23137  * r       Resulting point.
23138  * map     Indicates whether to convert result to affine.
23139  * heap    Heap to use for allocation.
23140  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
23141  */
sp_ecc_mulmod_base_add_256(const mp_int * km,const ecc_point * am,int inMont,ecc_point * r,int map,void * heap)23142 int sp_ecc_mulmod_base_add_256(const mp_int* km, const ecc_point* am,
23143         int inMont, ecc_point* r, int map, void* heap)
23144 {
23145 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
23146     sp_point_256* point = NULL;
23147     sp_digit* k = NULL;
23148 #else
23149     sp_point_256 point[2];
23150     sp_digit k[4 + 4 * 2 * 5];
23151 #endif
23152     sp_point_256* addP = NULL;
23153     sp_digit* tmp = NULL;
23154     int err = MP_OKAY;
23155 #ifdef HAVE_INTEL_AVX2
23156     word32 cpuid_flags = cpuid_get_flags();
23157 #endif
23158 
23159 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
23160     point = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 2, heap,
23161                                          DYNAMIC_TYPE_ECC);
23162     if (point == NULL)
23163         err = MEMORY_E;
23164     if (err == MP_OKAY) {
23165         k = (sp_digit*)XMALLOC(
23166             sizeof(sp_digit) * (4 + 4 * 2 * 5),
23167             heap, DYNAMIC_TYPE_ECC);
23168         if (k == NULL)
23169             err = MEMORY_E;
23170     }
23171 #endif
23172 
23173     if (err == MP_OKAY) {
23174         addP = point + 1;
23175         tmp = k + 4;
23176 
23177         sp_256_from_mp(k, 4, km);
23178         sp_256_point_from_ecc_point_4(addP, am);
23179     }
23180     if ((err == MP_OKAY) && (!inMont)) {
23181         err = sp_256_mod_mul_norm_4(addP->x, addP->x, p256_mod);
23182     }
23183     if ((err == MP_OKAY) && (!inMont)) {
23184         err = sp_256_mod_mul_norm_4(addP->y, addP->y, p256_mod);
23185     }
23186     if ((err == MP_OKAY) && (!inMont)) {
23187         err = sp_256_mod_mul_norm_4(addP->z, addP->z, p256_mod);
23188     }
23189     if (err == MP_OKAY) {
23190 #ifdef HAVE_INTEL_AVX2
23191         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
23192             err = sp_256_ecc_mulmod_base_avx2_4(point, k, 0, 0, heap);
23193         else
23194 #endif
23195             err = sp_256_ecc_mulmod_base_4(point, k, 0, 0, heap);
23196     }
23197     if (err == MP_OKAY) {
23198 #ifdef HAVE_INTEL_AVX2
23199         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
23200             sp_256_proj_point_add_avx2_4(point, point, addP, tmp);
23201         else
23202 #endif
23203             sp_256_proj_point_add_4(point, point, addP, tmp);
23204 
23205         if (map) {
23206 #ifdef HAVE_INTEL_AVX2
23207             if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
23208                 sp_256_map_avx2_4(point, point, tmp);
23209             else
23210 #endif
23211                 sp_256_map_4(point, point, tmp);
23212         }
23213 
23214         err = sp_256_point_to_ecc_point_4(point, r);
23215     }
23216 
23217 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
23218     if (k != NULL)
23219         XFREE(k, heap, DYNAMIC_TYPE_ECC);
23220     if (point)
23221         XFREE(point, heap, DYNAMIC_TYPE_ECC);
23222 #endif
23223 
23224     return err;
23225 }
23226 
23227 #if defined(WOLFSSL_VALIDATE_ECC_KEYGEN) || defined(HAVE_ECC_SIGN) || \
23228                                                         defined(HAVE_ECC_VERIFY)
23229 /* Returns 1 if the number of zero.
23230  * Implementation is constant time.
23231  *
23232  * a  Number to check.
23233  * returns 1 if the number is zero and 0 otherwise.
23234  */
sp_256_iszero_4(const sp_digit * a)23235 static int sp_256_iszero_4(const sp_digit* a)
23236 {
23237     return (a[0] | a[1] | a[2] | a[3]) == 0;
23238 }
23239 
23240 #endif /* WOLFSSL_VALIDATE_ECC_KEYGEN | HAVE_ECC_SIGN | HAVE_ECC_VERIFY */
23241 extern void sp_256_add_one_4(sp_digit* a);
23242 extern void sp_256_from_bin_bswap(sp_digit* r, int size, const byte* a, int n);
23243 extern void sp_256_from_bin_movbe(sp_digit* r, int size, const byte* a, int n);
23244 /* Read big endian unsigned byte array into r.
23245  *
23246  * r  A single precision integer.
23247  * size  Maximum number of bytes to convert
23248  * a  Byte array.
23249  * n  Number of bytes in array to read.
23250  */
sp_256_from_bin(sp_digit * r,int size,const byte * a,int n)23251 static void sp_256_from_bin(sp_digit* r, int size, const byte* a, int n)
23252 {
23253 #ifndef NO_MOVBE_SUPPORT
23254     word32 cpuid_flags = cpuid_get_flags();
23255 
23256     if (IS_INTEL_MOVBE(cpuid_flags)) {
23257         sp_256_from_bin_movbe(r, size, a, n);
23258     }
23259     else
23260 #endif
23261     {
23262         sp_256_from_bin_bswap(r, size, a, n);
23263     }
23264 }
23265 
23266 /* Generates a scalar that is in the range 1..order-1.
23267  *
23268  * rng  Random number generator.
23269  * k    Scalar value.
23270  * returns RNG failures, MEMORY_E when memory allocation fails and
23271  * MP_OKAY on success.
23272  */
sp_256_ecc_gen_k_4(WC_RNG * rng,sp_digit * k)23273 static int sp_256_ecc_gen_k_4(WC_RNG* rng, sp_digit* k)
23274 {
23275     int err;
23276     byte buf[32];
23277 
23278     do {
23279         err = wc_RNG_GenerateBlock(rng, buf, sizeof(buf));
23280         if (err == 0) {
23281             sp_256_from_bin(k, 4, buf, (int)sizeof(buf));
23282             if (sp_256_cmp_4(k, p256_order2) <= 0) {
23283                 sp_256_add_one_4(k);
23284                 break;
23285             }
23286         }
23287     }
23288     while (err == 0);
23289 
23290     return err;
23291 }
23292 
23293 /* Makes a random EC key pair.
23294  *
23295  * rng   Random number generator.
23296  * priv  Generated private value.
23297  * pub   Generated public point.
23298  * heap  Heap to use for allocation.
23299  * returns ECC_INF_E when the point does not have the correct order, RNG
23300  * failures, MEMORY_E when memory allocation fails and MP_OKAY on success.
23301  */
sp_ecc_make_key_256(WC_RNG * rng,mp_int * priv,ecc_point * pub,void * heap)23302 int sp_ecc_make_key_256(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap)
23303 {
23304 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
23305     sp_point_256* point = NULL;
23306     sp_digit* k = NULL;
23307 #else
23308     #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
23309     sp_point_256 point[2];
23310     #else
23311     sp_point_256 point[1];
23312     #endif
23313     sp_digit k[4];
23314 #endif
23315 #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
23316     sp_point_256* infinity = NULL;
23317 #endif
23318     int err = MP_OKAY;
23319 
23320 #ifdef HAVE_INTEL_AVX2
23321     word32 cpuid_flags = cpuid_get_flags();
23322 #endif
23323 
23324     (void)heap;
23325 
23326 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
23327     #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
23328     point = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 2, heap, DYNAMIC_TYPE_ECC);
23329     #else
23330     point = (sp_point_256*)XMALLOC(sizeof(sp_point_256), heap, DYNAMIC_TYPE_ECC);
23331     #endif
23332     if (point == NULL)
23333         err = MEMORY_E;
23334     if (err == MP_OKAY) {
23335         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 4, heap,
23336                                DYNAMIC_TYPE_ECC);
23337         if (k == NULL)
23338             err = MEMORY_E;
23339     }
23340 #endif
23341 
23342     if (err == MP_OKAY) {
23343     #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
23344         infinity = point + 1;
23345     #endif
23346 
23347         err = sp_256_ecc_gen_k_4(rng, k);
23348     }
23349     if (err == MP_OKAY) {
23350 #ifdef HAVE_INTEL_AVX2
23351         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
23352             err = sp_256_ecc_mulmod_base_avx2_4(point, k, 1, 1, NULL);
23353         else
23354 #endif
23355             err = sp_256_ecc_mulmod_base_4(point, k, 1, 1, NULL);
23356     }
23357 
23358 #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
23359     if (err == MP_OKAY) {
23360 #ifdef HAVE_INTEL_AVX2
23361         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
23362             err = sp_256_ecc_mulmod_avx2_4(infinity, point, p256_order, 1, 1,
23363                                                                           NULL);
23364         }
23365         else
23366 #endif
23367             err = sp_256_ecc_mulmod_4(infinity, point, p256_order, 1, 1, NULL);
23368     }
23369     if (err == MP_OKAY) {
23370         if (sp_256_iszero_4(point->x) || sp_256_iszero_4(point->y)) {
23371             err = ECC_INF_E;
23372         }
23373     }
23374 #endif
23375 
23376     if (err == MP_OKAY) {
23377         err = sp_256_to_mp(k, priv);
23378     }
23379     if (err == MP_OKAY) {
23380         err = sp_256_point_to_ecc_point_4(point, pub);
23381     }
23382 
23383 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
23384     if (k != NULL)
23385         XFREE(k, heap, DYNAMIC_TYPE_ECC);
23386     if (point != NULL) {
23387         /* point is not sensitive, so no need to zeroize */
23388         XFREE(point, heap, DYNAMIC_TYPE_ECC);
23389     }
23390 #endif
23391 
23392     return err;
23393 }
23394 
23395 #ifdef HAVE_ECC_DHE
23396 extern void sp_256_to_bin_bswap_4(sp_digit* r, byte* a);
23397 extern void sp_256_to_bin_movbe_4(sp_digit* r, byte* a);
23398 /* Write r as big endian to byte array.
23399  * Fixed length number of bytes written: 32
23400  *
23401  * r  A single precision integer.
23402  * a  Byte array.
23403  */
sp_256_to_bin_4(sp_digit * r,byte * a)23404 static void sp_256_to_bin_4(sp_digit* r, byte* a)
23405 {
23406 #ifndef NO_MOVBE_SUPPORT
23407     word32 cpuid_flags = cpuid_get_flags();
23408 
23409     if (IS_INTEL_MOVBE(cpuid_flags)) {
23410         sp_256_to_bin_movbe_4(r, a);
23411     }
23412     else
23413 #endif
23414     {
23415         sp_256_to_bin_bswap_4(r, a);
23416     }
23417 }
23418 
23419 /* Multiply the point by the scalar and serialize the X ordinate.
23420  * The number is 0 padded to maximum size on output.
23421  *
23422  * priv    Scalar to multiply the point by.
23423  * pub     Point to multiply.
23424  * out     Buffer to hold X ordinate.
23425  * outLen  On entry, size of the buffer in bytes.
23426  *         On exit, length of data in buffer in bytes.
23427  * heap    Heap to use for allocation.
23428  * returns BUFFER_E if the buffer is to small for output size,
23429  * MEMORY_E when memory allocation fails and MP_OKAY on success.
23430  */
sp_ecc_secret_gen_256(const mp_int * priv,const ecc_point * pub,byte * out,word32 * outLen,void * heap)23431 int sp_ecc_secret_gen_256(const mp_int* priv, const ecc_point* pub, byte* out,
23432                           word32* outLen, void* heap)
23433 {
23434 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
23435     sp_point_256* point = NULL;
23436     sp_digit* k = NULL;
23437 #else
23438     sp_point_256 point[1];
23439     sp_digit k[4];
23440 #endif
23441     int err = MP_OKAY;
23442 #ifdef HAVE_INTEL_AVX2
23443     word32 cpuid_flags = cpuid_get_flags();
23444 #endif
23445 
23446     if (*outLen < 32U) {
23447         err = BUFFER_E;
23448     }
23449 
23450 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
23451     if (err == MP_OKAY) {
23452         point = (sp_point_256*)XMALLOC(sizeof(sp_point_256), heap,
23453                                          DYNAMIC_TYPE_ECC);
23454         if (point == NULL)
23455             err = MEMORY_E;
23456     }
23457     if (err == MP_OKAY) {
23458         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 4, heap,
23459                                DYNAMIC_TYPE_ECC);
23460         if (k == NULL)
23461             err = MEMORY_E;
23462     }
23463 #endif
23464 
23465     if (err == MP_OKAY) {
23466         sp_256_from_mp(k, 4, priv);
23467         sp_256_point_from_ecc_point_4(point, pub);
23468 #ifdef HAVE_INTEL_AVX2
23469         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
23470             err = sp_256_ecc_mulmod_avx2_4(point, point, k, 1, 1, heap);
23471         else
23472 #endif
23473             err = sp_256_ecc_mulmod_4(point, point, k, 1, 1, heap);
23474     }
23475     if (err == MP_OKAY) {
23476         sp_256_to_bin_4(point->x, out);
23477         *outLen = 32;
23478     }
23479 
23480 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
23481     if (k != NULL)
23482         XFREE(k, heap, DYNAMIC_TYPE_ECC);
23483     if (point != NULL)
23484         XFREE(point, heap, DYNAMIC_TYPE_ECC);
23485 #endif
23486 
23487     return err;
23488 }
23489 #endif /* HAVE_ECC_DHE */
23490 
23491 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
23492 #ifdef HAVE_INTEL_AVX2
23493 extern void sp_256_mul_avx2_4(sp_digit* r, const sp_digit* a, const sp_digit* b);
23494 #endif /* HAVE_INTEL_AVX2 */
23495 #endif
23496 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
23497 extern sp_digit sp_256_sub_in_place_4(sp_digit* a, const sp_digit* b);
23498 extern void sp_256_mul_d_4(sp_digit* r, const sp_digit* a, sp_digit b);
23499 extern void sp_256_mul_d_avx2_4(sp_digit* r, const sp_digit* a, const sp_digit b);
23500 #ifdef _WIN64
23501 #if _MSC_VER < 1920
23502 extern sp_digit div_256_word_asm_4(sp_digit d1, sp_digit d0, sp_digit div);
23503 #endif /* _MSC_VER < 1920 */
23504 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
23505  *
23506  * d1   The high order half of the number to divide.
23507  * d0   The low order half of the number to divide.
23508  * div  The dividend.
23509  * returns the result of the division.
23510  */
div_256_word_4(sp_digit d1,sp_digit d0,sp_digit div)23511 static WC_INLINE sp_digit div_256_word_4(sp_digit d1, sp_digit d0,
23512         sp_digit div)
23513 {
23514     ASSERT_SAVED_VECTOR_REGISTERS();
23515 #if _MSC_VER >= 1920
23516     return _udiv128(d1, d0, div, NULL);
23517 #else
23518     return div_256_word_asm_4(d1, d0, div);
23519 #endif
23520 }
23521 #else
23522 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
23523  *
23524  * d1   The high order half of the number to divide.
23525  * d0   The low order half of the number to divide.
23526  * div  The dividend.
23527  * returns the result of the division.
23528  */
div_256_word_4(sp_digit d1,sp_digit d0,sp_digit div)23529 static WC_INLINE sp_digit div_256_word_4(sp_digit d1, sp_digit d0,
23530         sp_digit div)
23531 {
23532     ASSERT_SAVED_VECTOR_REGISTERS();
23533     register sp_digit r asm("rax");
23534     __asm__ __volatile__ (
23535         "divq %3"
23536         : "=a" (r)
23537         : "d" (d1), "a" (d0), "r" (div)
23538         :
23539     );
23540     return r;
23541 }
23542 #endif /* _WIN64 */
23543 /* AND m into each word of a and store in r.
23544  *
23545  * r  A single precision integer.
23546  * a  A single precision integer.
23547  * m  Mask to AND against each digit.
23548  */
sp_256_mask_4(sp_digit * r,const sp_digit * a,sp_digit m)23549 static void sp_256_mask_4(sp_digit* r, const sp_digit* a, sp_digit m)
23550 {
23551 #ifdef WOLFSSL_SP_SMALL
23552     int i;
23553 
23554     for (i=0; i<4; i++) {
23555         r[i] = a[i] & m;
23556     }
23557 #else
23558     r[0] = a[0] & m;
23559     r[1] = a[1] & m;
23560     r[2] = a[2] & m;
23561     r[3] = a[3] & m;
23562 #endif
23563 }
23564 
23565 /* Divide d in a and put remainder into r (m*d + r = a)
23566  * m is not calculated as it is not needed at this time.
23567  *
23568  * a  Number to be divided.
23569  * d  Number to divide with.
23570  * m  Multiplier result.
23571  * r  Remainder from the division.
23572  * returns MP_OKAY indicating success.
23573  */
sp_256_div_4(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)23574 static WC_INLINE int sp_256_div_4(const sp_digit* a, const sp_digit* d, sp_digit* m,
23575         sp_digit* r)
23576 {
23577     sp_digit t1[8];
23578     sp_digit t2[5];
23579     sp_digit div;
23580     sp_digit r1;
23581     int i;
23582 #ifdef HAVE_INTEL_AVX2
23583     word32 cpuid_flags = cpuid_get_flags();
23584 #endif
23585 
23586     ASSERT_SAVED_VECTOR_REGISTERS();
23587 
23588     (void)m;
23589 
23590     div = d[3];
23591     XMEMCPY(t1, a, sizeof(*t1) * 2 * 4);
23592     r1 = sp_256_cmp_4(&t1[4], d) >= 0;
23593 #ifdef HAVE_INTEL_AVX2
23594     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
23595         sp_256_cond_sub_avx2_4(&t1[4], &t1[4], d, (sp_digit)0 - r1);
23596     else
23597 #endif
23598         sp_256_cond_sub_4(&t1[4], &t1[4], d, (sp_digit)0 - r1);
23599     for (i=3; i>=0; i--) {
23600         sp_digit hi = t1[4 + i] - (t1[4 + i] == div);
23601         r1 = div_256_word_4(hi, t1[4 + i - 1], div);
23602 
23603 #ifdef HAVE_INTEL_AVX2
23604         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
23605             sp_256_mul_d_avx2_4(t2, d, r1);
23606         else
23607 #endif
23608             sp_256_mul_d_4(t2, d, r1);
23609         t1[4 + i] += sp_256_sub_in_place_4(&t1[i], t2);
23610         t1[4 + i] -= t2[4];
23611         sp_256_mask_4(t2, d, t1[4 + i]);
23612         t1[4 + i] += sp_256_add_4(&t1[i], &t1[i], t2);
23613         sp_256_mask_4(t2, d, t1[4 + i]);
23614         t1[4 + i] += sp_256_add_4(&t1[i], &t1[i], t2);
23615     }
23616 
23617     r1 = sp_256_cmp_4(t1, d) >= 0;
23618 #ifdef HAVE_INTEL_AVX2
23619     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
23620         sp_256_cond_sub_avx2_4(r, t1, d, (sp_digit)0 - r1);
23621     else
23622 #endif
23623         sp_256_cond_sub_4(r, t1, d, (sp_digit)0 - r1);
23624 
23625     return MP_OKAY;
23626 }
23627 
23628 /* Reduce a modulo m into r. (r = a mod m)
23629  *
23630  * r  A single precision number that is the reduced result.
23631  * a  A single precision number that is to be reduced.
23632  * m  A single precision number that is the modulus to reduce with.
23633  * returns MP_OKAY indicating success.
23634  */
sp_256_mod_4(sp_digit * r,const sp_digit * a,const sp_digit * m)23635 static WC_INLINE int sp_256_mod_4(sp_digit* r, const sp_digit* a,
23636         const sp_digit* m)
23637 {
23638     ASSERT_SAVED_VECTOR_REGISTERS();
23639     return sp_256_div_4(a, m, NULL, r);
23640 }
23641 
23642 #endif
23643 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
23644 /* Multiply two number mod the order of P256 curve. (r = a * b mod order)
23645  *
23646  * r  Result of the multiplication.
23647  * a  First operand of the multiplication.
23648  * b  Second operand of the multiplication.
23649  */
sp_256_mont_mul_order_4(sp_digit * r,const sp_digit * a,const sp_digit * b)23650 static void sp_256_mont_mul_order_4(sp_digit* r, const sp_digit* a, const sp_digit* b)
23651 {
23652     ASSERT_SAVED_VECTOR_REGISTERS();
23653     sp_256_mul_4(r, a, b);
23654     sp_256_mont_reduce_order_4(r, p256_order, p256_mp_order);
23655 }
23656 
23657 #if defined(HAVE_ECC_SIGN) || (defined(HAVE_ECC_VERIFY) && defined(WOLFSSL_SP_SMALL))
23658 #ifdef WOLFSSL_SP_SMALL
23659 /* Order-2 for the P256 curve. */
23660 static const uint64_t p256_order_minus_2[4] = {
23661     0xf3b9cac2fc63254fU,0xbce6faada7179e84U,0xffffffffffffffffU,
23662     0xffffffff00000000U
23663 };
23664 #else
23665 /* The low half of the order-2 of the P256 curve. */
23666 static const uint64_t p256_order_low[2] = {
23667     0xf3b9cac2fc63254fU,0xbce6faada7179e84U
23668 };
23669 #endif /* WOLFSSL_SP_SMALL */
23670 
23671 /* Square number mod the order of P256 curve. (r = a * a mod order)
23672  *
23673  * r  Result of the squaring.
23674  * a  Number to square.
23675  */
sp_256_mont_sqr_order_4(sp_digit * r,const sp_digit * a)23676 static void sp_256_mont_sqr_order_4(sp_digit* r, const sp_digit* a)
23677 {
23678     ASSERT_SAVED_VECTOR_REGISTERS();
23679     sp_256_sqr_4(r, a);
23680     sp_256_mont_reduce_order_4(r, p256_order, p256_mp_order);
23681 }
23682 
23683 #ifndef WOLFSSL_SP_SMALL
23684 /* Square number mod the order of P256 curve a number of times.
23685  * (r = a ^ n mod order)
23686  *
23687  * r  Result of the squaring.
23688  * a  Number to square.
23689  */
sp_256_mont_sqr_n_order_4(sp_digit * r,const sp_digit * a,int n)23690 static void sp_256_mont_sqr_n_order_4(sp_digit* r, const sp_digit* a, int n)
23691 {
23692     int i;
23693 
23694     ASSERT_SAVED_VECTOR_REGISTERS();
23695 
23696     sp_256_mont_sqr_order_4(r, a);
23697     for (i=1; i<n; i++) {
23698         sp_256_mont_sqr_order_4(r, r);
23699     }
23700 }
23701 #endif /* !WOLFSSL_SP_SMALL */
23702 
23703 #ifdef WOLFSSL_SP_NONBLOCK
23704 /* Context of non-blocking moduluar inversion with Montgomery form number. */
23705 typedef struct sp_256_mont_inv_order_4_ctx {
23706     int state;    /* State of next operation. */
23707     int i;        /* Index of bit in order. */
23708 } sp_256_mont_inv_order_4_ctx;
23709 
23710 /* Invert the number, in Montgomery form, modulo the order of the P256 curve.
23711  * (r = 1 / a mod order)
23712  *
23713  * r   Inverse result.
23714  * a   Number to invert.
23715  * td  Temporary data.
23716  */
sp_256_mont_inv_order_4_nb(sp_ecc_ctx_t * sp_ctx,sp_digit * r,const sp_digit * a,sp_digit * t)23717 static int sp_256_mont_inv_order_4_nb(sp_ecc_ctx_t* sp_ctx, sp_digit* r, const sp_digit* a,
23718         sp_digit* t)
23719 {
23720     int err = FP_WOULDBLOCK;
23721 
23722     ASSERT_SAVED_VECTOR_REGISTERS();
23723 
23724     sp_256_mont_inv_order_4_ctx* ctx = (sp_256_mont_inv_order_4_ctx*)sp_ctx;
23725 
23726     typedef char ctx_size_test[sizeof(sp_256_mont_inv_order_4_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
23727     (void)sizeof(ctx_size_test);
23728 
23729     switch (ctx->state) {
23730     case 0:
23731         XMEMCPY(t, a, sizeof(sp_digit) * 4);
23732         ctx->i = 254;
23733         ctx->state = 1;
23734         break;
23735     case 1:
23736         sp_256_mont_sqr_order_4(t, t);
23737         ctx->state = 2;
23738         break;
23739     case 2:
23740         if ((p256_order_minus_2[ctx->i / 64] & ((sp_int_digit)1 << (ctx->i % 64))) != 0) {
23741             sp_256_mont_mul_order_4(t, t, a);
23742         }
23743         ctx->i--;
23744         ctx->state = (ctx->i == 0) ? 3 : 1;
23745         break;
23746     case 3:
23747         XMEMCPY(r, t, sizeof(sp_digit) * 4U);
23748         err = MP_OKAY;
23749         break;
23750     }
23751     return err;
23752 }
23753 #endif /* WOLFSSL_SP_NONBLOCK */
23754 
23755 /* Invert the number, in Montgomery form, modulo the order of the P256 curve.
23756  * (r = 1 / a mod order)
23757  *
23758  * r   Inverse result.
23759  * a   Number to invert.
23760  * td  Temporary data.
23761  */
sp_256_mont_inv_order_4(sp_digit * r,const sp_digit * a,sp_digit * td)23762 static void sp_256_mont_inv_order_4(sp_digit* r, const sp_digit* a,
23763         sp_digit* td)
23764 {
23765 #ifdef WOLFSSL_SP_SMALL
23766     sp_digit* t = td;
23767     int i;
23768 
23769     XMEMCPY(t, a, sizeof(sp_digit) * 4);
23770     for (i=254; i>=0; i--) {
23771         sp_256_mont_sqr_order_4(t, t);
23772         if ((p256_order_minus_2[i / 64] & ((sp_int_digit)1 << (i % 64))) != 0) {
23773             sp_256_mont_mul_order_4(t, t, a);
23774         }
23775     }
23776     XMEMCPY(r, t, sizeof(sp_digit) * 4U);
23777 #else
23778     sp_digit* t = td;
23779     sp_digit* t2 = td + 2 * 4;
23780     sp_digit* t3 = td + 4 * 4;
23781     int i;
23782 
23783     ASSERT_SAVED_VECTOR_REGISTERS();
23784 
23785     /* t = a^2 */
23786     sp_256_mont_sqr_order_4(t, a);
23787     /* t = a^3 = t * a */
23788     sp_256_mont_mul_order_4(t, t, a);
23789     /* t2= a^c = t ^ 2 ^ 2 */
23790     sp_256_mont_sqr_n_order_4(t2, t, 2);
23791     /* t3= a^f = t2 * t */
23792     sp_256_mont_mul_order_4(t3, t2, t);
23793     /* t2= a^f0 = t3 ^ 2 ^ 4 */
23794     sp_256_mont_sqr_n_order_4(t2, t3, 4);
23795     /* t = a^ff = t2 * t3 */
23796     sp_256_mont_mul_order_4(t, t2, t3);
23797     /* t3= a^ff00 = t ^ 2 ^ 8 */
23798     sp_256_mont_sqr_n_order_4(t2, t, 8);
23799     /* t = a^ffff = t2 * t */
23800     sp_256_mont_mul_order_4(t, t2, t);
23801     /* t2= a^ffff0000 = t ^ 2 ^ 16 */
23802     sp_256_mont_sqr_n_order_4(t2, t, 16);
23803     /* t = a^ffffffff = t2 * t */
23804     sp_256_mont_mul_order_4(t, t2, t);
23805     /* t2= a^ffffffff0000000000000000 = t ^ 2 ^ 64  */
23806     sp_256_mont_sqr_n_order_4(t2, t, 64);
23807     /* t2= a^ffffffff00000000ffffffff = t2 * t */
23808     sp_256_mont_mul_order_4(t2, t2, t);
23809     /* t2= a^ffffffff00000000ffffffff00000000 = t2 ^ 2 ^ 32  */
23810     sp_256_mont_sqr_n_order_4(t2, t2, 32);
23811     /* t2= a^ffffffff00000000ffffffffffffffff = t2 * t */
23812     sp_256_mont_mul_order_4(t2, t2, t);
23813     /* t2= a^ffffffff00000000ffffffffffffffffbce6 */
23814     for (i=127; i>=112; i--) {
23815         sp_256_mont_sqr_order_4(t2, t2);
23816         if (((sp_digit)p256_order_low[i / 64] & ((sp_int_digit)1 << (i % 64))) != 0) {
23817             sp_256_mont_mul_order_4(t2, t2, a);
23818         }
23819     }
23820     /* t2= a^ffffffff00000000ffffffffffffffffbce6f */
23821     sp_256_mont_sqr_n_order_4(t2, t2, 4);
23822     sp_256_mont_mul_order_4(t2, t2, t3);
23823     /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84 */
23824     for (i=107; i>=64; i--) {
23825         sp_256_mont_sqr_order_4(t2, t2);
23826         if (((sp_digit)p256_order_low[i / 64] & ((sp_int_digit)1 << (i % 64))) != 0) {
23827             sp_256_mont_mul_order_4(t2, t2, a);
23828         }
23829     }
23830     /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f */
23831     sp_256_mont_sqr_n_order_4(t2, t2, 4);
23832     sp_256_mont_mul_order_4(t2, t2, t3);
23833     /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2 */
23834     for (i=59; i>=32; i--) {
23835         sp_256_mont_sqr_order_4(t2, t2);
23836         if (((sp_digit)p256_order_low[i / 64] & ((sp_int_digit)1 << (i % 64))) != 0) {
23837             sp_256_mont_mul_order_4(t2, t2, a);
23838         }
23839     }
23840     /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2f */
23841     sp_256_mont_sqr_n_order_4(t2, t2, 4);
23842     sp_256_mont_mul_order_4(t2, t2, t3);
23843     /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254 */
23844     for (i=27; i>=0; i--) {
23845         sp_256_mont_sqr_order_4(t2, t2);
23846         if (((sp_digit)p256_order_low[i / 64] & ((sp_int_digit)1 << (i % 64))) != 0) {
23847             sp_256_mont_mul_order_4(t2, t2, a);
23848         }
23849     }
23850     /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632540 */
23851     sp_256_mont_sqr_n_order_4(t2, t2, 4);
23852     /* r = a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f */
23853     sp_256_mont_mul_order_4(r, t2, t3);
23854 #endif /* WOLFSSL_SP_SMALL */
23855 }
23856 
23857 #endif /* HAVE_ECC_SIGN || (HAVE_ECC_VERIFY && WOLFSSL_SP_SMALL) */
23858 #ifdef HAVE_INTEL_AVX2
23859 extern void sp_256_mont_mul_order_avx2_4(sp_digit* r, const sp_digit* a, const sp_digit* b);
23860 #if defined(HAVE_ECC_SIGN) || (defined(HAVE_ECC_VERIFY) && defined(WOLFSSL_SP_SMALL))
23861 extern void sp_256_mont_sqr_order_avx2_4(sp_digit* r, const sp_digit* a);
23862 
23863 #ifndef WOLFSSL_SP_SMALL
23864 /* Square number mod the order of P256 curve a number of times.
23865  * (r = a ^ n mod order)
23866  *
23867  * r  Result of the squaring.
23868  * a  Number to square.
23869  */
sp_256_mont_sqr_n_order_avx2_4(sp_digit * r,const sp_digit * a,int n)23870 static void sp_256_mont_sqr_n_order_avx2_4(sp_digit* r, const sp_digit* a, int n)
23871 {
23872     int i;
23873 
23874     ASSERT_SAVED_VECTOR_REGISTERS();
23875 
23876     sp_256_mont_sqr_order_avx2_4(r, a);
23877     for (i=1; i<n; i++) {
23878         sp_256_mont_sqr_order_avx2_4(r, r);
23879     }
23880 }
23881 #endif /* !WOLFSSL_SP_SMALL */
23882 
23883 #ifdef WOLFSSL_SP_NONBLOCK
23884 /* Context of non-blocking moduluar inversion with Montgomery form number. */
23885 typedef struct sp_256_mont_inv_order_avx2_4_ctx {
23886     int state;    /* State of next operation. */
23887     int i;        /* Index of bit in order. */
23888 } sp_256_mont_inv_order_avx2_4_ctx;
23889 
23890 /* Invert the number, in Montgomery form, modulo the order of the P256 curve.
23891  * (r = 1 / a mod order)
23892  *
23893  * r   Inverse result.
23894  * a   Number to invert.
23895  * td  Temporary data.
23896  */
sp_256_mont_inv_order_avx2_4_nb(sp_ecc_ctx_t * sp_ctx,sp_digit * r,const sp_digit * a,sp_digit * t)23897 static int sp_256_mont_inv_order_avx2_4_nb(sp_ecc_ctx_t* sp_ctx, sp_digit* r, const sp_digit* a,
23898         sp_digit* t)
23899 {
23900     int err = FP_WOULDBLOCK;
23901 
23902     ASSERT_SAVED_VECTOR_REGISTERS();
23903 
23904     sp_256_mont_inv_order_avx2_4_ctx* ctx = (sp_256_mont_inv_order_avx2_4_ctx*)sp_ctx;
23905 
23906     typedef char ctx_size_test[sizeof(sp_256_mont_inv_order_avx2_4_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
23907     (void)sizeof(ctx_size_test);
23908 
23909     switch (ctx->state) {
23910     case 0:
23911         XMEMCPY(t, a, sizeof(sp_digit) * 4);
23912         ctx->i = 254;
23913         ctx->state = 1;
23914         break;
23915     case 1:
23916         sp_256_mont_sqr_order_avx2_4(t, t);
23917         ctx->state = 2;
23918         break;
23919     case 2:
23920         if ((p256_order_minus_2[ctx->i / 64] & ((sp_int_digit)1 << (ctx->i % 64))) != 0) {
23921             sp_256_mont_mul_order_avx2_4(t, t, a);
23922         }
23923         ctx->i--;
23924         ctx->state = (ctx->i == 0) ? 3 : 1;
23925         break;
23926     case 3:
23927         XMEMCPY(r, t, sizeof(sp_digit) * 4U);
23928         err = MP_OKAY;
23929         break;
23930     }
23931     return err;
23932 }
23933 #endif /* WOLFSSL_SP_NONBLOCK */
23934 
23935 /* Invert the number, in Montgomery form, modulo the order of the P256 curve.
23936  * (r = 1 / a mod order)
23937  *
23938  * r   Inverse result.
23939  * a   Number to invert.
23940  * td  Temporary data.
23941  */
sp_256_mont_inv_order_avx2_4(sp_digit * r,const sp_digit * a,sp_digit * td)23942 static void sp_256_mont_inv_order_avx2_4(sp_digit* r, const sp_digit* a,
23943         sp_digit* td)
23944 {
23945 #ifdef WOLFSSL_SP_SMALL
23946     sp_digit* t = td;
23947     int i;
23948 
23949     XMEMCPY(t, a, sizeof(sp_digit) * 4);
23950     for (i=254; i>=0; i--) {
23951         sp_256_mont_sqr_order_avx2_4(t, t);
23952         if ((p256_order_minus_2[i / 64] & ((sp_int_digit)1 << (i % 64))) != 0) {
23953             sp_256_mont_mul_order_avx2_4(t, t, a);
23954         }
23955     }
23956     XMEMCPY(r, t, sizeof(sp_digit) * 4U);
23957 #else
23958     sp_digit* t = td;
23959     sp_digit* t2 = td + 2 * 4;
23960     sp_digit* t3 = td + 4 * 4;
23961     int i;
23962 
23963     ASSERT_SAVED_VECTOR_REGISTERS();
23964 
23965     /* t = a^2 */
23966     sp_256_mont_sqr_order_avx2_4(t, a);
23967     /* t = a^3 = t * a */
23968     sp_256_mont_mul_order_avx2_4(t, t, a);
23969     /* t2= a^c = t ^ 2 ^ 2 */
23970     sp_256_mont_sqr_n_order_avx2_4(t2, t, 2);
23971     /* t3= a^f = t2 * t */
23972     sp_256_mont_mul_order_avx2_4(t3, t2, t);
23973     /* t2= a^f0 = t3 ^ 2 ^ 4 */
23974     sp_256_mont_sqr_n_order_avx2_4(t2, t3, 4);
23975     /* t = a^ff = t2 * t3 */
23976     sp_256_mont_mul_order_avx2_4(t, t2, t3);
23977     /* t3= a^ff00 = t ^ 2 ^ 8 */
23978     sp_256_mont_sqr_n_order_avx2_4(t2, t, 8);
23979     /* t = a^ffff = t2 * t */
23980     sp_256_mont_mul_order_avx2_4(t, t2, t);
23981     /* t2= a^ffff0000 = t ^ 2 ^ 16 */
23982     sp_256_mont_sqr_n_order_avx2_4(t2, t, 16);
23983     /* t = a^ffffffff = t2 * t */
23984     sp_256_mont_mul_order_avx2_4(t, t2, t);
23985     /* t2= a^ffffffff0000000000000000 = t ^ 2 ^ 64  */
23986     sp_256_mont_sqr_n_order_avx2_4(t2, t, 64);
23987     /* t2= a^ffffffff00000000ffffffff = t2 * t */
23988     sp_256_mont_mul_order_avx2_4(t2, t2, t);
23989     /* t2= a^ffffffff00000000ffffffff00000000 = t2 ^ 2 ^ 32  */
23990     sp_256_mont_sqr_n_order_avx2_4(t2, t2, 32);
23991     /* t2= a^ffffffff00000000ffffffffffffffff = t2 * t */
23992     sp_256_mont_mul_order_avx2_4(t2, t2, t);
23993     /* t2= a^ffffffff00000000ffffffffffffffffbce6 */
23994     for (i=127; i>=112; i--) {
23995         sp_256_mont_sqr_order_avx2_4(t2, t2);
23996         if (((sp_digit)p256_order_low[i / 64] & ((sp_int_digit)1 << (i % 64))) != 0) {
23997             sp_256_mont_mul_order_avx2_4(t2, t2, a);
23998         }
23999     }
24000     /* t2= a^ffffffff00000000ffffffffffffffffbce6f */
24001     sp_256_mont_sqr_n_order_avx2_4(t2, t2, 4);
24002     sp_256_mont_mul_order_avx2_4(t2, t2, t3);
24003     /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84 */
24004     for (i=107; i>=64; i--) {
24005         sp_256_mont_sqr_order_avx2_4(t2, t2);
24006         if (((sp_digit)p256_order_low[i / 64] & ((sp_int_digit)1 << (i % 64))) != 0) {
24007             sp_256_mont_mul_order_avx2_4(t2, t2, a);
24008         }
24009     }
24010     /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f */
24011     sp_256_mont_sqr_n_order_avx2_4(t2, t2, 4);
24012     sp_256_mont_mul_order_avx2_4(t2, t2, t3);
24013     /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2 */
24014     for (i=59; i>=32; i--) {
24015         sp_256_mont_sqr_order_avx2_4(t2, t2);
24016         if (((sp_digit)p256_order_low[i / 64] & ((sp_int_digit)1 << (i % 64))) != 0) {
24017             sp_256_mont_mul_order_avx2_4(t2, t2, a);
24018         }
24019     }
24020     /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2f */
24021     sp_256_mont_sqr_n_order_avx2_4(t2, t2, 4);
24022     sp_256_mont_mul_order_avx2_4(t2, t2, t3);
24023     /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254 */
24024     for (i=27; i>=0; i--) {
24025         sp_256_mont_sqr_order_avx2_4(t2, t2);
24026         if (((sp_digit)p256_order_low[i / 64] & ((sp_int_digit)1 << (i % 64))) != 0) {
24027             sp_256_mont_mul_order_avx2_4(t2, t2, a);
24028         }
24029     }
24030     /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632540 */
24031     sp_256_mont_sqr_n_order_avx2_4(t2, t2, 4);
24032     /* r = a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f */
24033     sp_256_mont_mul_order_avx2_4(r, t2, t3);
24034 #endif /* WOLFSSL_SP_SMALL */
24035 }
24036 
24037 #endif /* HAVE_ECC_SIGN || (HAVE_ECC_VERIFY && WOLFSSL_SP_SMALL) */
24038 #endif /* HAVE_INTEL_AVX2 */
24039 #endif /* HAVE_ECC_SIGN | HAVE_ECC_VERIFY */
24040 #ifdef HAVE_ECC_SIGN
24041 #ifndef SP_ECC_MAX_SIG_GEN
24042 #define SP_ECC_MAX_SIG_GEN  64
24043 #endif
24044 
24045 /* Calculate second signature value S from R, k and private value.
24046  *
24047  * s = (r * x + e) / k
24048  *
24049  * s    Signature value.
24050  * r    First signature value.
24051  * k    Ephemeral private key.
24052  * x    Private key as a number.
24053  * e    Hash of message as a number.
24054  * tmp  Temporary storage for intermediate numbers.
24055  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
24056  */
sp_256_calc_s_4(sp_digit * s,const sp_digit * r,sp_digit * k,sp_digit * x,const sp_digit * e,sp_digit * tmp)24057 static int sp_256_calc_s_4(sp_digit* s, const sp_digit* r, sp_digit* k,
24058     sp_digit* x, const sp_digit* e, sp_digit* tmp)
24059 {
24060     int err;
24061     sp_digit carry;
24062     sp_int64 c;
24063     sp_digit* kInv = k;
24064 #ifdef HAVE_INTEL_AVX2
24065     word32 cpuid_flags = cpuid_get_flags();
24066 #endif
24067 
24068     /* Conv k to Montgomery form (mod order) */
24069 #ifdef HAVE_INTEL_AVX2
24070      if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
24071         sp_256_mul_avx2_4(k, k, p256_norm_order);
24072     else
24073 #endif
24074         sp_256_mul_4(k, k, p256_norm_order);
24075     err = sp_256_mod_4(k, k, p256_order);
24076     if (err == MP_OKAY) {
24077         sp_256_norm_4(k);
24078 
24079         /* kInv = 1/k mod order */
24080 #ifdef HAVE_INTEL_AVX2
24081         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
24082             sp_256_mont_inv_order_avx2_4(kInv, k, tmp);
24083         else
24084 #endif
24085             sp_256_mont_inv_order_4(kInv, k, tmp);
24086         sp_256_norm_4(kInv);
24087 
24088         /* s = r * x + e */
24089 #ifdef HAVE_INTEL_AVX2
24090         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
24091             sp_256_mul_avx2_4(x, x, r);
24092         else
24093 #endif
24094             sp_256_mul_4(x, x, r);
24095         err = sp_256_mod_4(x, x, p256_order);
24096     }
24097     if (err == MP_OKAY) {
24098         sp_256_norm_4(x);
24099         carry = sp_256_add_4(s, e, x);
24100         sp_256_cond_sub_4(s, s, p256_order, 0 - carry);
24101         sp_256_norm_4(s);
24102         c = sp_256_cmp_4(s, p256_order);
24103         sp_256_cond_sub_4(s, s, p256_order,
24104             (sp_digit)0 - (sp_digit)(c >= 0));
24105         sp_256_norm_4(s);
24106 
24107         /* s = s * k^-1 mod order */
24108 #ifdef HAVE_INTEL_AVX2
24109         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
24110             sp_256_mont_mul_order_avx2_4(s, s, kInv);
24111         else
24112 #endif
24113             sp_256_mont_mul_order_4(s, s, kInv);
24114         sp_256_norm_4(s);
24115     }
24116 
24117     return err;
24118 }
24119 
24120 /* Sign the hash using the private key.
24121  *   e = [hash, 256 bits] from binary
24122  *   r = (k.G)->x mod order
24123  *   s = (r * x + e) / k mod order
24124  * The hash is truncated to the first 256 bits.
24125  *
24126  * hash     Hash to sign.
24127  * hashLen  Length of the hash data.
24128  * rng      Random number generator.
24129  * priv     Private part of key - scalar.
24130  * rm       First part of result as an mp_int.
24131  * sm       Sirst part of result as an mp_int.
24132  * heap     Heap to use for allocation.
24133  * returns RNG failures, MEMORY_E when memory allocation fails and
24134  * MP_OKAY on success.
24135  */
24136 #ifdef WOLFSSL_SP_NONBLOCK
24137 typedef struct sp_ecc_sign_256_ctx {
24138     int state;
24139     union {
24140         sp_256_ecc_mulmod_4_ctx mulmod_ctx;
24141         sp_256_mont_inv_order_4_ctx mont_inv_order_ctx;
24142     };
24143     sp_digit e[2*4];
24144     sp_digit x[2*4];
24145     sp_digit k[2*4];
24146     sp_digit r[2*4];
24147     sp_digit tmp[3 * 2*4];
24148     sp_point_256 point;
24149     sp_digit* s;
24150     sp_digit* kInv;
24151     int i;
24152 } sp_ecc_sign_256_ctx;
24153 
sp_ecc_sign_256_nb(sp_ecc_ctx_t * sp_ctx,const byte * hash,word32 hashLen,WC_RNG * rng,mp_int * priv,mp_int * rm,mp_int * sm,mp_int * km,void * heap)24154 int sp_ecc_sign_256_nb(sp_ecc_ctx_t* sp_ctx, const byte* hash, word32 hashLen, WC_RNG* rng,
24155     mp_int* priv, mp_int* rm, mp_int* sm, mp_int* km, void* heap)
24156 {
24157     int err = FP_WOULDBLOCK;
24158     sp_ecc_sign_256_ctx* ctx = (sp_ecc_sign_256_ctx*)sp_ctx->data;
24159 
24160     typedef char ctx_size_test[sizeof(sp_ecc_sign_256_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
24161     (void)sizeof(ctx_size_test);
24162 
24163     (void)heap;
24164 
24165     switch (ctx->state) {
24166     case 0: /* INIT */
24167         ctx->s = ctx->e;
24168         ctx->kInv = ctx->k;
24169         if (hashLen > 32U) {
24170             hashLen = 32U;
24171         }
24172 
24173         ctx->i = SP_ECC_MAX_SIG_GEN;
24174         ctx->state = 1;
24175         break;
24176     case 1: /* GEN */
24177         /* New random point. */
24178         if (km == NULL || mp_iszero(km)) {
24179             err = sp_256_ecc_gen_k_4(rng, ctx->k);
24180         }
24181         else {
24182             sp_256_from_mp(ctx->k, 4, km);
24183             mp_zero(km);
24184         }
24185         XMEMSET(&ctx->mulmod_ctx, 0, sizeof(ctx->mulmod_ctx));
24186         ctx->state = 2;
24187         break;
24188     case 2: /* MULMOD */
24189         err = sp_256_ecc_mulmod_4_nb((sp_ecc_ctx_t*)&ctx->mulmod_ctx,
24190             &ctx->point, &p256_base, ctx->k, 1, 1, heap);
24191         if (err == MP_OKAY) {
24192             ctx->state = 3;
24193         }
24194         break;
24195     case 3: /* MODORDER */
24196     {
24197         sp_int64 c;
24198         /* r = point->x mod order */
24199         XMEMCPY(ctx->r, ctx->point.x, sizeof(sp_digit) * 4U);
24200         sp_256_norm_4(ctx->r);
24201         c = sp_256_cmp_4(ctx->r, p256_order);
24202         sp_256_cond_sub_4(ctx->r, ctx->r, p256_order,
24203             (sp_digit)0 - (sp_digit)(c >= 0));
24204         sp_256_norm_4(ctx->r);
24205 
24206         sp_256_from_mp(ctx->x, 4, priv);
24207         sp_256_from_bin(ctx->e, 4, hash, (int)hashLen);
24208         ctx->state = 4;
24209         break;
24210     }
24211     case 4: /* KMODORDER */
24212         /* Conv k to Montgomery form (mod order) */
24213         sp_256_mul_4(ctx->k, ctx->k, p256_norm_order);
24214         err = sp_256_mod_4(ctx->k, ctx->k, p256_order);
24215         if (err == MP_OKAY) {
24216             sp_256_norm_4(ctx->k);
24217             XMEMSET(&ctx->mont_inv_order_ctx, 0, sizeof(ctx->mont_inv_order_ctx));
24218             ctx->state = 5;
24219         }
24220         break;
24221     case 5: /* KINV */
24222         /* kInv = 1/k mod order */
24223         err = sp_256_mont_inv_order_4_nb((sp_ecc_ctx_t*)&ctx->mont_inv_order_ctx, ctx->kInv, ctx->k, ctx->tmp);
24224         if (err == MP_OKAY) {
24225             XMEMSET(&ctx->mont_inv_order_ctx, 0, sizeof(ctx->mont_inv_order_ctx));
24226             ctx->state = 6;
24227         }
24228         break;
24229     case 6: /* KINVNORM */
24230         sp_256_norm_4(ctx->kInv);
24231         ctx->state = 7;
24232         break;
24233     case 7: /* R */
24234         /* s = r * x + e */
24235         sp_256_mul_4(ctx->x, ctx->x, ctx->r);
24236         ctx->state = 8;
24237         break;
24238     case 8: /* S1 */
24239         err = sp_256_mod_4(ctx->x, ctx->x, p256_order);
24240         if (err == MP_OKAY)
24241             ctx->state = 9;
24242         break;
24243     case 9: /* S2 */
24244     {
24245         sp_digit carry;
24246         sp_int64 c;
24247         sp_256_norm_4(ctx->x);
24248         carry = sp_256_add_4(ctx->s, ctx->e, ctx->x);
24249         sp_256_cond_sub_4(ctx->s, ctx->s,
24250             p256_order, 0 - carry);
24251         sp_256_norm_4(ctx->s);
24252         c = sp_256_cmp_4(ctx->s, p256_order);
24253         sp_256_cond_sub_4(ctx->s, ctx->s, p256_order,
24254             (sp_digit)0 - (sp_digit)(c >= 0));
24255         sp_256_norm_4(ctx->s);
24256 
24257         /* s = s * k^-1 mod order */
24258         sp_256_mont_mul_order_4(ctx->s, ctx->s, ctx->kInv);
24259         sp_256_norm_4(ctx->s);
24260 
24261         /* Check that signature is usable. */
24262         if (sp_256_iszero_4(ctx->s) == 0) {
24263             ctx->state = 10;
24264             break;
24265         }
24266     #ifdef WOLFSSL_ECDSA_SET_K_ONE_LOOP
24267         ctx->i = 1;
24268     #endif
24269 
24270         /* not usable gen, try again */
24271         ctx->i--;
24272         if (ctx->i == 0) {
24273             err = RNG_FAILURE_E;
24274         }
24275         ctx->state = 1;
24276         break;
24277     }
24278     case 10: /* RES */
24279         err = sp_256_to_mp(ctx->r, rm);
24280         if (err == MP_OKAY) {
24281             err = sp_256_to_mp(ctx->s, sm);
24282         }
24283         break;
24284     }
24285 
24286     if (err == MP_OKAY && ctx->state != 10) {
24287         err = FP_WOULDBLOCK;
24288     }
24289     if (err != FP_WOULDBLOCK) {
24290         XMEMSET(ctx->e, 0, sizeof(sp_digit) * 2U * 4U);
24291         XMEMSET(ctx->x, 0, sizeof(sp_digit) * 2U * 4U);
24292         XMEMSET(ctx->k, 0, sizeof(sp_digit) * 2U * 4U);
24293         XMEMSET(ctx->r, 0, sizeof(sp_digit) * 2U * 4U);
24294         XMEMSET(ctx->tmp, 0, sizeof(sp_digit) * 3U * 2U * 4U);
24295     }
24296 
24297     return err;
24298 }
24299 #endif /* WOLFSSL_SP_NONBLOCK */
24300 
sp_ecc_sign_256(const byte * hash,word32 hashLen,WC_RNG * rng,const mp_int * priv,mp_int * rm,mp_int * sm,mp_int * km,void * heap)24301 int sp_ecc_sign_256(const byte* hash, word32 hashLen, WC_RNG* rng,
24302     const mp_int* priv, mp_int* rm, mp_int* sm, mp_int* km, void* heap)
24303 {
24304 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
24305     sp_digit* e = NULL;
24306     sp_point_256* point = NULL;
24307 #else
24308     sp_digit e[7 * 2 * 4];
24309     sp_point_256 point[1];
24310 #endif
24311     sp_digit* x = NULL;
24312     sp_digit* k = NULL;
24313     sp_digit* r = NULL;
24314     sp_digit* tmp = NULL;
24315     sp_digit* s = NULL;
24316     sp_int64 c;
24317     int err = MP_OKAY;
24318     int i;
24319 #ifdef HAVE_INTEL_AVX2
24320     word32 cpuid_flags = cpuid_get_flags();
24321 #endif
24322 
24323     (void)heap;
24324 
24325 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
24326     if (err == MP_OKAY) {
24327         point = (sp_point_256*)XMALLOC(sizeof(sp_point_256), heap,
24328                                              DYNAMIC_TYPE_ECC);
24329         if (point == NULL)
24330             err = MEMORY_E;
24331     }
24332     if (err == MP_OKAY) {
24333         e = (sp_digit*)XMALLOC(sizeof(sp_digit) * 7 * 2 * 4, heap,
24334                                DYNAMIC_TYPE_ECC);
24335         if (e == NULL)
24336             err = MEMORY_E;
24337     }
24338 #endif
24339 
24340     if (err == MP_OKAY) {
24341         x = e + 2 * 4;
24342         k = e + 4 * 4;
24343         r = e + 6 * 4;
24344         tmp = e + 8 * 4;
24345         s = e;
24346 
24347         if (hashLen > 32U) {
24348             hashLen = 32U;
24349         }
24350     }
24351 
24352     for (i = SP_ECC_MAX_SIG_GEN; err == MP_OKAY && i > 0; i--) {
24353         /* New random point. */
24354         if (km == NULL || mp_iszero(km)) {
24355             err = sp_256_ecc_gen_k_4(rng, k);
24356         }
24357         else {
24358             sp_256_from_mp(k, 4, km);
24359             mp_zero(km);
24360         }
24361         if (err == MP_OKAY) {
24362 #ifdef HAVE_INTEL_AVX2
24363             if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
24364                 err = sp_256_ecc_mulmod_base_avx2_4(point, k, 1, 1, heap);
24365             else
24366 #endif
24367                 err = sp_256_ecc_mulmod_base_4(point, k, 1, 1, heap);
24368         }
24369 
24370         if (err == MP_OKAY) {
24371             /* r = point->x mod order */
24372             XMEMCPY(r, point->x, sizeof(sp_digit) * 4U);
24373             sp_256_norm_4(r);
24374             c = sp_256_cmp_4(r, p256_order);
24375             sp_256_cond_sub_4(r, r, p256_order,
24376                 (sp_digit)0 - (sp_digit)(c >= 0));
24377             sp_256_norm_4(r);
24378 
24379             sp_256_from_mp(x, 4, priv);
24380             sp_256_from_bin(e, 4, hash, (int)hashLen);
24381 
24382             err = sp_256_calc_s_4(s, r, k, x, e, tmp);
24383         }
24384 
24385         /* Check that signature is usable. */
24386         if ((err == MP_OKAY) && (sp_256_iszero_4(s) == 0)) {
24387             break;
24388         }
24389 #ifdef WOLFSSL_ECDSA_SET_K_ONE_LOOP
24390         i = 1;
24391 #endif
24392     }
24393 
24394     if (i == 0) {
24395         err = RNG_FAILURE_E;
24396     }
24397 
24398     if (err == MP_OKAY) {
24399         err = sp_256_to_mp(r, rm);
24400     }
24401     if (err == MP_OKAY) {
24402         err = sp_256_to_mp(s, sm);
24403     }
24404 
24405 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
24406     if (e != NULL)
24407 #endif
24408     {
24409         ForceZero(e, sizeof(sp_digit) * 7 * 2 * 4);
24410     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
24411         XFREE(e, heap, DYNAMIC_TYPE_ECC);
24412     #endif
24413     }
24414 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
24415     if (point != NULL)
24416 #endif
24417     {
24418         ForceZero(point, sizeof(sp_point_256));
24419     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
24420         XFREE(point, heap, DYNAMIC_TYPE_ECC);
24421     #endif
24422     }
24423 
24424     return err;
24425 }
24426 #endif /* HAVE_ECC_SIGN */
24427 
24428 #ifndef WOLFSSL_SP_SMALL
24429 extern void sp_256_mod_inv_4(sp_digit* r, const sp_digit* a, const sp_digit* m);
24430 extern void sp_256_mod_inv_avx2_4(sp_digit* r, const sp_digit* a, const sp_digit* m);
24431 #endif /* WOLFSSL_SP_SMALL */
24432 
24433 /* Add point p1 into point p2. Handles p1 == p2 and result at infinity.
24434  *
24435  * p1   First point to add and holds result.
24436  * p2   Second point to add.
24437  * tmp  Temporary storage for intermediate numbers.
24438  */
sp_256_add_points_4(sp_point_256 * p1,const sp_point_256 * p2,sp_digit * tmp)24439 static void sp_256_add_points_4(sp_point_256* p1, const sp_point_256* p2,
24440     sp_digit* tmp)
24441 {
24442 #ifdef HAVE_INTEL_AVX2
24443     word32 cpuid_flags = cpuid_get_flags();
24444 #endif
24445 
24446 #ifdef HAVE_INTEL_AVX2
24447     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
24448         sp_256_proj_point_add_avx2_4(p1, p1, p2, tmp);
24449     }
24450     else
24451 #endif
24452         sp_256_proj_point_add_4(p1, p1, p2, tmp);
24453     if (sp_256_iszero_4(p1->z)) {
24454         if (sp_256_iszero_4(p1->x) && sp_256_iszero_4(p1->y)) {
24455 #ifdef HAVE_INTEL_AVX2
24456             if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
24457                 sp_256_proj_point_dbl_avx2_4(p1, p2, tmp);
24458             }
24459             else
24460 #endif
24461                 sp_256_proj_point_dbl_4(p1, p2, tmp);
24462         }
24463         else {
24464             /* Y ordinate is not used from here - don't set. */
24465             p1->x[0] = 0;
24466             p1->x[1] = 0;
24467             p1->x[2] = 0;
24468             p1->x[3] = 0;
24469             XMEMCPY(p1->z, p256_norm_mod, sizeof(p256_norm_mod));
24470         }
24471     }
24472 }
24473 
24474 /* Calculate the verification point: [e/s]G + [r/s]Q
24475  *
24476  * p1    Calculated point.
24477  * p2    Public point and temporary.
24478  * s     Second part of signature as a number.
24479  * u1    Temporary number.
24480  * u2    Temproray number.
24481  * heap  Heap to use for allocation.
24482  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
24483  */
sp_256_calc_vfy_point_4(sp_point_256 * p1,sp_point_256 * p2,sp_digit * s,sp_digit * u1,sp_digit * u2,sp_digit * tmp,void * heap)24484 static int sp_256_calc_vfy_point_4(sp_point_256* p1, sp_point_256* p2,
24485     sp_digit* s, sp_digit* u1, sp_digit* u2, sp_digit* tmp, void* heap)
24486 {
24487     int err;
24488 #ifdef HAVE_INTEL_AVX2
24489     word32 cpuid_flags = cpuid_get_flags();
24490 #endif
24491 
24492 #ifndef WOLFSSL_SP_SMALL
24493 #ifdef HAVE_INTEL_AVX2
24494     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
24495         sp_256_mod_inv_avx2_4(s, s, p256_order);
24496     }
24497     else
24498 #endif
24499     {
24500         sp_256_mod_inv_4(s, s, p256_order);
24501     }
24502 #endif /* !WOLFSSL_SP_SMALL */
24503     {
24504 #ifdef HAVE_INTEL_AVX2
24505         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
24506             sp_256_mul_avx2_4(s, s, p256_norm_order);
24507         }
24508         else
24509 #endif
24510         {
24511             sp_256_mul_4(s, s, p256_norm_order);
24512         }
24513         err = sp_256_mod_4(s, s, p256_order);
24514     }
24515     if (err == MP_OKAY) {
24516         sp_256_norm_4(s);
24517 #ifdef WOLFSSL_SP_SMALL
24518 #ifdef HAVE_INTEL_AVX2
24519         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
24520             sp_256_mont_inv_order_avx2_4(s, s, tmp);
24521             sp_256_mont_mul_order_avx2_4(u1, u1, s);
24522             sp_256_mont_mul_order_avx2_4(u2, u2, s);
24523         }
24524         else
24525 #endif
24526         {
24527             sp_256_mont_inv_order_4(s, s, tmp);
24528             sp_256_mont_mul_order_4(u1, u1, s);
24529             sp_256_mont_mul_order_4(u2, u2, s);
24530         }
24531 #else
24532 #ifdef HAVE_INTEL_AVX2
24533         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
24534             sp_256_mont_mul_order_avx2_4(u1, u1, s);
24535             sp_256_mont_mul_order_avx2_4(u2, u2, s);
24536         }
24537         else
24538 #endif
24539         {
24540             sp_256_mont_mul_order_4(u1, u1, s);
24541             sp_256_mont_mul_order_4(u2, u2, s);
24542         }
24543 #endif /* WOLFSSL_SP_SMALL */
24544 #ifdef HAVE_INTEL_AVX2
24545         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
24546             err = sp_256_ecc_mulmod_base_avx2_4(p1, u1, 0, 0, heap);
24547         }
24548         else
24549 #endif
24550         {
24551             err = sp_256_ecc_mulmod_base_4(p1, u1, 0, 0, heap);
24552         }
24553     }
24554     if ((err == MP_OKAY) && sp_256_iszero_4(p1->z)) {
24555         p1->infinity = 1;
24556     }
24557     if (err == MP_OKAY) {
24558 #ifdef HAVE_INTEL_AVX2
24559         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
24560             err = sp_256_ecc_mulmod_avx2_4(p2, p2, u2, 0, 0, heap);
24561         else
24562 #endif
24563             err = sp_256_ecc_mulmod_4(p2, p2, u2, 0, 0, heap);
24564     }
24565     if ((err == MP_OKAY) && sp_256_iszero_4(p2->z)) {
24566         p2->infinity = 1;
24567     }
24568 
24569     if (err == MP_OKAY) {
24570         sp_256_add_points_4(p1, p2, tmp);
24571     }
24572 
24573     return err;
24574 }
24575 
24576 #ifdef HAVE_ECC_VERIFY
24577 /* Verify the signature values with the hash and public key.
24578  *   e = Truncate(hash, 256)
24579  *   u1 = e/s mod order
24580  *   u2 = r/s mod order
24581  *   r == (u1.G + u2.Q)->x mod order
24582  * Optimization: Leave point in projective form.
24583  *   (x, y, 1) == (x' / z'*z', y' / z'*z'*z', z' / z')
24584  *   (r + n*order).z'.z' mod prime == (u1.G + u2.Q)->x'
24585  * The hash is truncated to the first 256 bits.
24586  *
24587  * hash     Hash to sign.
24588  * hashLen  Length of the hash data.
24589  * rng      Random number generator.
24590  * priv     Private part of key - scalar.
24591  * rm       First part of result as an mp_int.
24592  * sm       Sirst part of result as an mp_int.
24593  * heap     Heap to use for allocation.
24594  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
24595  */
24596 #ifdef WOLFSSL_SP_NONBLOCK
24597 typedef struct sp_ecc_verify_256_ctx {
24598     int state;
24599     union {
24600         sp_256_ecc_mulmod_4_ctx mulmod_ctx;
24601         sp_256_mont_inv_order_4_ctx mont_inv_order_ctx;
24602         sp_256_proj_point_dbl_4_ctx dbl_ctx;
24603         sp_256_proj_point_add_4_ctx add_ctx;
24604     };
24605     sp_digit u1[2*4];
24606     sp_digit u2[2*4];
24607     sp_digit s[2*4];
24608     sp_digit tmp[2*4 * 5];
24609     sp_point_256 p1;
24610     sp_point_256 p2;
24611 } sp_ecc_verify_256_ctx;
24612 
sp_ecc_verify_256_nb(sp_ecc_ctx_t * sp_ctx,const byte * hash,word32 hashLen,const mp_int * pX,const mp_int * pY,const mp_int * pZ,const mp_int * rm,const mp_int * sm,int * res,void * heap)24613 int sp_ecc_verify_256_nb(sp_ecc_ctx_t* sp_ctx, const byte* hash,
24614     word32 hashLen, const mp_int* pX, const mp_int* pY, const mp_int* pZ,
24615     const mp_int* rm, const mp_int* sm, int* res, void* heap)
24616 {
24617     int err = FP_WOULDBLOCK;
24618     sp_ecc_verify_256_ctx* ctx = (sp_ecc_verify_256_ctx*)sp_ctx->data;
24619 
24620     typedef char ctx_size_test[sizeof(sp_ecc_verify_256_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
24621     (void)sizeof(ctx_size_test);
24622 
24623     switch (ctx->state) {
24624     case 0: /* INIT */
24625         if (hashLen > 32U) {
24626             hashLen = 32U;
24627         }
24628 
24629         sp_256_from_bin(ctx->u1, 4, hash, (int)hashLen);
24630         sp_256_from_mp(ctx->u2, 4, rm);
24631         sp_256_from_mp(ctx->s, 4, sm);
24632         sp_256_from_mp(ctx->p2.x, 4, pX);
24633         sp_256_from_mp(ctx->p2.y, 4, pY);
24634         sp_256_from_mp(ctx->p2.z, 4, pZ);
24635         ctx->state = 1;
24636         break;
24637     case 1: /* NORMS0 */
24638         sp_256_mul_4(ctx->s, ctx->s, p256_norm_order);
24639         err = sp_256_mod_4(ctx->s, ctx->s, p256_order);
24640         if (err == MP_OKAY)
24641             ctx->state = 2;
24642         break;
24643     case 2: /* NORMS1 */
24644         sp_256_norm_4(ctx->s);
24645         XMEMSET(&ctx->mont_inv_order_ctx, 0, sizeof(ctx->mont_inv_order_ctx));
24646         ctx->state = 3;
24647         break;
24648     case 3: /* NORMS2 */
24649         err = sp_256_mont_inv_order_4_nb((sp_ecc_ctx_t*)&ctx->mont_inv_order_ctx, ctx->s, ctx->s, ctx->tmp);
24650         if (err == MP_OKAY) {
24651             ctx->state = 4;
24652         }
24653         break;
24654     case 4: /* NORMS3 */
24655         sp_256_mont_mul_order_4(ctx->u1, ctx->u1, ctx->s);
24656         ctx->state = 5;
24657         break;
24658     case 5: /* NORMS4 */
24659         sp_256_mont_mul_order_4(ctx->u2, ctx->u2, ctx->s);
24660         XMEMSET(&ctx->mulmod_ctx, 0, sizeof(ctx->mulmod_ctx));
24661         ctx->state = 6;
24662         break;
24663     case 6: /* MULBASE */
24664         err = sp_256_ecc_mulmod_4_nb((sp_ecc_ctx_t*)&ctx->mulmod_ctx, &ctx->p1, &p256_base, ctx->u1, 0, 0, heap);
24665         if (err == MP_OKAY) {
24666             if (sp_256_iszero_4(ctx->p1.z)) {
24667                 ctx->p1.infinity = 1;
24668             }
24669             XMEMSET(&ctx->mulmod_ctx, 0, sizeof(ctx->mulmod_ctx));
24670             ctx->state = 7;
24671         }
24672         break;
24673     case 7: /* MULMOD */
24674         err = sp_256_ecc_mulmod_4_nb((sp_ecc_ctx_t*)&ctx->mulmod_ctx, &ctx->p2, &ctx->p2, ctx->u2, 0, 0, heap);
24675         if (err == MP_OKAY) {
24676             if (sp_256_iszero_4(ctx->p2.z)) {
24677                 ctx->p2.infinity = 1;
24678             }
24679             XMEMSET(&ctx->add_ctx, 0, sizeof(ctx->add_ctx));
24680             ctx->state = 8;
24681         }
24682         break;
24683     case 8: /* ADD */
24684         err = sp_256_proj_point_add_4_nb((sp_ecc_ctx_t*)&ctx->add_ctx, &ctx->p1, &ctx->p1, &ctx->p2, ctx->tmp);
24685         if (err == MP_OKAY)
24686             ctx->state = 9;
24687         break;
24688     case 9: /* MONT */
24689         /* (r + n*order).z'.z' mod prime == (u1.G + u2.Q)->x' */
24690         /* Reload r and convert to Montgomery form. */
24691         sp_256_from_mp(ctx->u2, 4, rm);
24692         err = sp_256_mod_mul_norm_4(ctx->u2, ctx->u2, p256_mod);
24693         if (err == MP_OKAY)
24694             ctx->state = 10;
24695         break;
24696     case 10: /* SQR */
24697         /* u1 = r.z'.z' mod prime */
24698         sp_256_mont_sqr_4(ctx->p1.z, ctx->p1.z, p256_mod, p256_mp_mod);
24699         ctx->state = 11;
24700         break;
24701     case 11: /* MUL */
24702         sp_256_mont_mul_4(ctx->u1, ctx->u2, ctx->p1.z, p256_mod, p256_mp_mod);
24703         ctx->state = 12;
24704         break;
24705     case 12: /* RES */
24706     {
24707         sp_int64 c = 0;
24708         err = MP_OKAY; /* math okay, now check result */
24709         *res = (int)(sp_256_cmp_4(ctx->p1.x, ctx->u1) == 0);
24710         if (*res == 0) {
24711             sp_digit carry;
24712 
24713             /* Reload r and add order. */
24714             sp_256_from_mp(ctx->u2, 4, rm);
24715             carry = sp_256_add_4(ctx->u2, ctx->u2, p256_order);
24716             /* Carry means result is greater than mod and is not valid. */
24717             if (carry == 0) {
24718                 sp_256_norm_4(ctx->u2);
24719 
24720                 /* Compare with mod and if greater or equal then not valid. */
24721                 c = sp_256_cmp_4(ctx->u2, p256_mod);
24722             }
24723         }
24724         if ((*res == 0) && (c < 0)) {
24725             /* Convert to Montogomery form */
24726             err = sp_256_mod_mul_norm_4(ctx->u2, ctx->u2, p256_mod);
24727             if (err == MP_OKAY) {
24728                 /* u1 = (r + 1*order).z'.z' mod prime */
24729                 sp_256_mont_mul_4(ctx->u1, ctx->u2, ctx->p1.z, p256_mod,
24730                                                             p256_mp_mod);
24731                 *res = (int)(sp_256_cmp_4(ctx->p1.x, ctx->u1) == 0);
24732             }
24733         }
24734         break;
24735     }
24736     } /* switch */
24737 
24738     if (err == MP_OKAY && ctx->state != 12) {
24739         err = FP_WOULDBLOCK;
24740     }
24741 
24742     return err;
24743 }
24744 #endif /* WOLFSSL_SP_NONBLOCK */
24745 
sp_ecc_verify_256(const byte * hash,word32 hashLen,const mp_int * pX,const mp_int * pY,const mp_int * pZ,const mp_int * rm,const mp_int * sm,int * res,void * heap)24746 int sp_ecc_verify_256(const byte* hash, word32 hashLen, const mp_int* pX,
24747     const mp_int* pY, const mp_int* pZ, const mp_int* rm, const mp_int* sm,
24748     int* res, void* heap)
24749 {
24750 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
24751     sp_digit* u1 = NULL;
24752     sp_point_256* p1 = NULL;
24753 #else
24754     sp_digit  u1[16 * 4];
24755     sp_point_256 p1[2];
24756 #endif
24757     sp_digit* u2 = NULL;
24758     sp_digit* s = NULL;
24759     sp_digit* tmp = NULL;
24760     sp_point_256* p2 = NULL;
24761     sp_digit carry;
24762     sp_int64 c = 0;
24763     int err = MP_OKAY;
24764 
24765 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
24766     if (err == MP_OKAY) {
24767         p1 = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 2, heap,
24768                                              DYNAMIC_TYPE_ECC);
24769         if (p1 == NULL)
24770             err = MEMORY_E;
24771     }
24772     if (err == MP_OKAY) {
24773         u1 = (sp_digit*)XMALLOC(sizeof(sp_digit) * 16 * 4, heap,
24774                                                               DYNAMIC_TYPE_ECC);
24775         if (u1 == NULL)
24776             err = MEMORY_E;
24777     }
24778 #endif
24779 
24780     if (err == MP_OKAY) {
24781         u2  = u1 + 2 * 4;
24782         s   = u1 + 4 * 4;
24783         tmp = u1 + 6 * 4;
24784         p2 = p1 + 1;
24785 
24786         if (hashLen > 32U) {
24787             hashLen = 32U;
24788         }
24789 
24790         sp_256_from_bin(u1, 4, hash, (int)hashLen);
24791         sp_256_from_mp(u2, 4, rm);
24792         sp_256_from_mp(s, 4, sm);
24793         sp_256_from_mp(p2->x, 4, pX);
24794         sp_256_from_mp(p2->y, 4, pY);
24795         sp_256_from_mp(p2->z, 4, pZ);
24796 
24797         err = sp_256_calc_vfy_point_4(p1, p2, s, u1, u2, tmp, heap);
24798     }
24799     if (err == MP_OKAY) {
24800         /* (r + n*order).z'.z' mod prime == (u1.G + u2.Q)->x' */
24801         /* Reload r and convert to Montgomery form. */
24802         sp_256_from_mp(u2, 4, rm);
24803         err = sp_256_mod_mul_norm_4(u2, u2, p256_mod);
24804     }
24805 
24806     if (err == MP_OKAY) {
24807         /* u1 = r.z'.z' mod prime */
24808         sp_256_mont_sqr_4(p1->z, p1->z, p256_mod, p256_mp_mod);
24809         sp_256_mont_mul_4(u1, u2, p1->z, p256_mod, p256_mp_mod);
24810         *res = (int)(sp_256_cmp_4(p1->x, u1) == 0);
24811         if (*res == 0) {
24812             /* Reload r and add order. */
24813             sp_256_from_mp(u2, 4, rm);
24814             carry = sp_256_add_4(u2, u2, p256_order);
24815             /* Carry means result is greater than mod and is not valid. */
24816             if (carry == 0) {
24817                 sp_256_norm_4(u2);
24818 
24819                 /* Compare with mod and if greater or equal then not valid. */
24820                 c = sp_256_cmp_4(u2, p256_mod);
24821             }
24822         }
24823         if ((*res == 0) && (c < 0)) {
24824             /* Convert to Montogomery form */
24825             err = sp_256_mod_mul_norm_4(u2, u2, p256_mod);
24826             if (err == MP_OKAY) {
24827                 /* u1 = (r + 1*order).z'.z' mod prime */
24828                 sp_256_mont_mul_4(u1, u2, p1->z, p256_mod,
24829                     p256_mp_mod);
24830                 *res = (sp_256_cmp_4(p1->x, u1) == 0);
24831             }
24832         }
24833     }
24834 
24835 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
24836     if (u1 != NULL)
24837         XFREE(u1, heap, DYNAMIC_TYPE_ECC);
24838     if (p1 != NULL)
24839         XFREE(p1, heap, DYNAMIC_TYPE_ECC);
24840 #endif
24841 
24842     return err;
24843 }
24844 #endif /* HAVE_ECC_VERIFY */
24845 
24846 #ifdef HAVE_ECC_CHECK_KEY
24847 /* Check that the x and y oridinates are a valid point on the curve.
24848  *
24849  * point  EC point.
24850  * heap   Heap to use if dynamically allocating.
24851  * returns MEMORY_E if dynamic memory allocation fails, MP_VAL if the point is
24852  * not on the curve and MP_OKAY otherwise.
24853  */
sp_256_ecc_is_point_4(const sp_point_256 * point,void * heap)24854 static int sp_256_ecc_is_point_4(const sp_point_256* point,
24855     void* heap)
24856 {
24857 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
24858     sp_digit* t1 = NULL;
24859 #else
24860     sp_digit t1[4 * 4];
24861 #endif
24862     sp_digit* t2 = NULL;
24863     int err = MP_OKAY;
24864 
24865 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
24866     t1 = (sp_digit*)XMALLOC(sizeof(sp_digit) * 4 * 4, heap, DYNAMIC_TYPE_ECC);
24867     if (t1 == NULL)
24868         err = MEMORY_E;
24869 #endif
24870     (void)heap;
24871 
24872     if (err == MP_OKAY) {
24873         t2 = t1 + 2 * 4;
24874 
24875         sp_256_sqr_4(t1, point->y);
24876         (void)sp_256_mod_4(t1, t1, p256_mod);
24877         sp_256_sqr_4(t2, point->x);
24878         (void)sp_256_mod_4(t2, t2, p256_mod);
24879         sp_256_mul_4(t2, t2, point->x);
24880         (void)sp_256_mod_4(t2, t2, p256_mod);
24881         (void)sp_256_sub_4(t2, p256_mod, t2);
24882         sp_256_mont_add_4(t1, t1, t2, p256_mod);
24883 
24884         sp_256_mont_add_4(t1, t1, point->x, p256_mod);
24885         sp_256_mont_add_4(t1, t1, point->x, p256_mod);
24886         sp_256_mont_add_4(t1, t1, point->x, p256_mod);
24887 
24888         if (sp_256_cmp_4(t1, p256_b) != 0) {
24889             err = MP_VAL;
24890         }
24891     }
24892 
24893 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
24894     if (t1 != NULL)
24895         XFREE(t1, heap, DYNAMIC_TYPE_ECC);
24896 #endif
24897 
24898     return err;
24899 }
24900 
24901 /* Check that the x and y oridinates are a valid point on the curve.
24902  *
24903  * pX  X ordinate of EC point.
24904  * pY  Y ordinate of EC point.
24905  * returns MEMORY_E if dynamic memory allocation fails, MP_VAL if the point is
24906  * not on the curve and MP_OKAY otherwise.
24907  */
sp_ecc_is_point_256(const mp_int * pX,const mp_int * pY)24908 int sp_ecc_is_point_256(const mp_int* pX, const mp_int* pY)
24909 {
24910 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
24911     sp_point_256* pub = NULL;
24912 #else
24913     sp_point_256 pub[1];
24914 #endif
24915     const byte one[1] = { 1 };
24916     int err = MP_OKAY;
24917 
24918 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
24919     pub = (sp_point_256*)XMALLOC(sizeof(sp_point_256), NULL,
24920                                        DYNAMIC_TYPE_ECC);
24921     if (pub == NULL)
24922         err = MEMORY_E;
24923 #endif
24924 
24925     if (err == MP_OKAY) {
24926         sp_256_from_mp(pub->x, 4, pX);
24927         sp_256_from_mp(pub->y, 4, pY);
24928         sp_256_from_bin(pub->z, 4, one, (int)sizeof(one));
24929 
24930         err = sp_256_ecc_is_point_4(pub, NULL);
24931     }
24932 
24933 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
24934     if (pub != NULL)
24935         XFREE(pub, NULL, DYNAMIC_TYPE_ECC);
24936 #endif
24937 
24938     return err;
24939 }
24940 
24941 /* Check that the private scalar generates the EC point (px, py), the point is
24942  * on the curve and the point has the correct order.
24943  *
24944  * pX     X ordinate of EC point.
24945  * pY     Y ordinate of EC point.
24946  * privm  Private scalar that generates EC point.
24947  * returns MEMORY_E if dynamic memory allocation fails, MP_VAL if the point is
24948  * not on the curve, ECC_INF_E if the point does not have the correct order,
24949  * ECC_PRIV_KEY_E when the private scalar doesn't generate the EC point and
24950  * MP_OKAY otherwise.
24951  */
sp_ecc_check_key_256(const mp_int * pX,const mp_int * pY,const mp_int * privm,void * heap)24952 int sp_ecc_check_key_256(const mp_int* pX, const mp_int* pY,
24953     const mp_int* privm, void* heap)
24954 {
24955 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
24956     sp_digit* priv = NULL;
24957     sp_point_256* pub = NULL;
24958 #else
24959     sp_digit priv[4];
24960     sp_point_256 pub[2];
24961 #endif
24962     sp_point_256* p = NULL;
24963     const byte one[1] = { 1 };
24964     int err = MP_OKAY;
24965 #ifdef HAVE_INTEL_AVX2
24966     word32 cpuid_flags = cpuid_get_flags();
24967 #endif
24968 
24969 
24970     /* Quick check the lengs of public key ordinates and private key are in
24971      * range. Proper check later.
24972      */
24973     if (((mp_count_bits(pX) > 256) ||
24974         (mp_count_bits(pY) > 256) ||
24975         ((privm != NULL) && (mp_count_bits(privm) > 256)))) {
24976         err = ECC_OUT_OF_RANGE_E;
24977     }
24978 
24979 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
24980     if (err == MP_OKAY) {
24981         pub = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 2, heap,
24982                                            DYNAMIC_TYPE_ECC);
24983         if (pub == NULL)
24984             err = MEMORY_E;
24985     }
24986     if (err == MP_OKAY && privm) {
24987         priv = (sp_digit*)XMALLOC(sizeof(sp_digit) * 4, heap,
24988                                   DYNAMIC_TYPE_ECC);
24989         if (priv == NULL)
24990             err = MEMORY_E;
24991     }
24992 #endif
24993 
24994     if (err == MP_OKAY) {
24995         p = pub + 1;
24996 
24997         sp_256_from_mp(pub->x, 4, pX);
24998         sp_256_from_mp(pub->y, 4, pY);
24999         sp_256_from_bin(pub->z, 4, one, (int)sizeof(one));
25000         if (privm)
25001             sp_256_from_mp(priv, 4, privm);
25002 
25003         /* Check point at infinitiy. */
25004         if ((sp_256_iszero_4(pub->x) != 0) &&
25005             (sp_256_iszero_4(pub->y) != 0)) {
25006             err = ECC_INF_E;
25007         }
25008     }
25009 
25010     /* Check range of X and Y */
25011     if ((err == MP_OKAY) &&
25012             ((sp_256_cmp_4(pub->x, p256_mod) >= 0) ||
25013              (sp_256_cmp_4(pub->y, p256_mod) >= 0))) {
25014         err = ECC_OUT_OF_RANGE_E;
25015     }
25016 
25017     if (err == MP_OKAY) {
25018         /* Check point is on curve */
25019         err = sp_256_ecc_is_point_4(pub, heap);
25020     }
25021 
25022     if (err == MP_OKAY) {
25023         /* Point * order = infinity */
25024 #ifdef HAVE_INTEL_AVX2
25025         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
25026             err = sp_256_ecc_mulmod_avx2_4(p, pub, p256_order, 1, 1, heap);
25027         else
25028 #endif
25029             err = sp_256_ecc_mulmod_4(p, pub, p256_order, 1, 1, heap);
25030     }
25031     /* Check result is infinity */
25032     if ((err == MP_OKAY) && ((sp_256_iszero_4(p->x) == 0) ||
25033                              (sp_256_iszero_4(p->y) == 0))) {
25034         err = ECC_INF_E;
25035     }
25036 
25037     if (privm) {
25038         if (err == MP_OKAY) {
25039             /* Base * private = point */
25040 #ifdef HAVE_INTEL_AVX2
25041             if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
25042                 err = sp_256_ecc_mulmod_base_avx2_4(p, priv, 1, 1, heap);
25043             else
25044 #endif
25045                 err = sp_256_ecc_mulmod_base_4(p, priv, 1, 1, heap);
25046         }
25047         /* Check result is public key */
25048         if ((err == MP_OKAY) &&
25049                 ((sp_256_cmp_4(p->x, pub->x) != 0) ||
25050                  (sp_256_cmp_4(p->y, pub->y) != 0))) {
25051             err = ECC_PRIV_KEY_E;
25052         }
25053     }
25054 
25055 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
25056     if (pub != NULL)
25057         XFREE(pub, heap, DYNAMIC_TYPE_ECC);
25058     if (priv != NULL)
25059         XFREE(priv, heap, DYNAMIC_TYPE_ECC);
25060 #endif
25061 
25062     return err;
25063 }
25064 #endif
25065 #ifdef WOLFSSL_PUBLIC_ECC_ADD_DBL
25066 /* Add two projective EC points together.
25067  * (pX, pY, pZ) + (qX, qY, qZ) = (rX, rY, rZ)
25068  *
25069  * pX   First EC point's X ordinate.
25070  * pY   First EC point's Y ordinate.
25071  * pZ   First EC point's Z ordinate.
25072  * qX   Second EC point's X ordinate.
25073  * qY   Second EC point's Y ordinate.
25074  * qZ   Second EC point's Z ordinate.
25075  * rX   Resultant EC point's X ordinate.
25076  * rY   Resultant EC point's Y ordinate.
25077  * rZ   Resultant EC point's Z ordinate.
25078  * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
25079  */
sp_ecc_proj_add_point_256(mp_int * pX,mp_int * pY,mp_int * pZ,mp_int * qX,mp_int * qY,mp_int * qZ,mp_int * rX,mp_int * rY,mp_int * rZ)25080 int sp_ecc_proj_add_point_256(mp_int* pX, mp_int* pY, mp_int* pZ,
25081                               mp_int* qX, mp_int* qY, mp_int* qZ,
25082                               mp_int* rX, mp_int* rY, mp_int* rZ)
25083 {
25084 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
25085     sp_digit* tmp = NULL;
25086     sp_point_256* p = NULL;
25087 #else
25088     sp_digit tmp[2 * 4 * 5];
25089     sp_point_256 p[2];
25090 #endif
25091     sp_point_256* q = NULL;
25092     int err = MP_OKAY;
25093 #ifdef HAVE_INTEL_AVX2
25094     word32 cpuid_flags = cpuid_get_flags();
25095 #endif
25096 
25097 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
25098     if (err == MP_OKAY) {
25099         p = (sp_point_256*)XMALLOC(sizeof(sp_point_256) * 2, NULL,
25100                                          DYNAMIC_TYPE_ECC);
25101         if (p == NULL)
25102             err = MEMORY_E;
25103     }
25104     if (err == MP_OKAY) {
25105         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 4 * 5, NULL,
25106                                  DYNAMIC_TYPE_ECC);
25107         if (tmp == NULL) {
25108             err = MEMORY_E;
25109         }
25110     }
25111 #endif
25112 
25113     if (err == MP_OKAY) {
25114         q = p + 1;
25115 
25116         sp_256_from_mp(p->x, 4, pX);
25117         sp_256_from_mp(p->y, 4, pY);
25118         sp_256_from_mp(p->z, 4, pZ);
25119         sp_256_from_mp(q->x, 4, qX);
25120         sp_256_from_mp(q->y, 4, qY);
25121         sp_256_from_mp(q->z, 4, qZ);
25122         p->infinity = sp_256_iszero_4(p->x) &
25123                       sp_256_iszero_4(p->y);
25124         q->infinity = sp_256_iszero_4(q->x) &
25125                       sp_256_iszero_4(q->y);
25126 
25127 #ifdef HAVE_INTEL_AVX2
25128         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
25129             sp_256_proj_point_add_avx2_4(p, p, q, tmp);
25130         else
25131 #endif
25132             sp_256_proj_point_add_4(p, p, q, tmp);
25133     }
25134 
25135     if (err == MP_OKAY) {
25136         err = sp_256_to_mp(p->x, rX);
25137     }
25138     if (err == MP_OKAY) {
25139         err = sp_256_to_mp(p->y, rY);
25140     }
25141     if (err == MP_OKAY) {
25142         err = sp_256_to_mp(p->z, rZ);
25143     }
25144 
25145 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
25146     if (tmp != NULL)
25147         XFREE(tmp, NULL, DYNAMIC_TYPE_ECC);
25148     if (p != NULL)
25149         XFREE(p, NULL, DYNAMIC_TYPE_ECC);
25150 #endif
25151 
25152     return err;
25153 }
25154 
25155 /* Double a projective EC point.
25156  * (pX, pY, pZ) + (pX, pY, pZ) = (rX, rY, rZ)
25157  *
25158  * pX   EC point's X ordinate.
25159  * pY   EC point's Y ordinate.
25160  * pZ   EC point's Z ordinate.
25161  * rX   Resultant EC point's X ordinate.
25162  * rY   Resultant EC point's Y ordinate.
25163  * rZ   Resultant EC point's Z ordinate.
25164  * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
25165  */
sp_ecc_proj_dbl_point_256(mp_int * pX,mp_int * pY,mp_int * pZ,mp_int * rX,mp_int * rY,mp_int * rZ)25166 int sp_ecc_proj_dbl_point_256(mp_int* pX, mp_int* pY, mp_int* pZ,
25167                               mp_int* rX, mp_int* rY, mp_int* rZ)
25168 {
25169 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
25170     sp_digit* tmp = NULL;
25171     sp_point_256* p = NULL;
25172 #else
25173     sp_digit tmp[2 * 4 * 2];
25174     sp_point_256 p[1];
25175 #endif
25176     int err = MP_OKAY;
25177 #ifdef HAVE_INTEL_AVX2
25178     word32 cpuid_flags = cpuid_get_flags();
25179 #endif
25180 
25181 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
25182     if (err == MP_OKAY) {
25183         p = (sp_point_256*)XMALLOC(sizeof(sp_point_256), NULL,
25184                                          DYNAMIC_TYPE_ECC);
25185         if (p == NULL)
25186             err = MEMORY_E;
25187     }
25188     if (err == MP_OKAY) {
25189         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 4 * 2, NULL,
25190                                  DYNAMIC_TYPE_ECC);
25191         if (tmp == NULL)
25192             err = MEMORY_E;
25193     }
25194 #endif
25195 
25196     if (err == MP_OKAY) {
25197         sp_256_from_mp(p->x, 4, pX);
25198         sp_256_from_mp(p->y, 4, pY);
25199         sp_256_from_mp(p->z, 4, pZ);
25200         p->infinity = sp_256_iszero_4(p->x) &
25201                       sp_256_iszero_4(p->y);
25202 
25203 #ifdef HAVE_INTEL_AVX2
25204         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
25205             sp_256_proj_point_dbl_avx2_4(p, p, tmp);
25206         else
25207 #endif
25208             sp_256_proj_point_dbl_4(p, p, tmp);
25209     }
25210 
25211     if (err == MP_OKAY) {
25212         err = sp_256_to_mp(p->x, rX);
25213     }
25214     if (err == MP_OKAY) {
25215         err = sp_256_to_mp(p->y, rY);
25216     }
25217     if (err == MP_OKAY) {
25218         err = sp_256_to_mp(p->z, rZ);
25219     }
25220 
25221 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
25222     if (tmp != NULL)
25223         XFREE(tmp, NULL, DYNAMIC_TYPE_ECC);
25224     if (p != NULL)
25225         XFREE(p, NULL, DYNAMIC_TYPE_ECC);
25226 #endif
25227 
25228     return err;
25229 }
25230 
25231 /* Map a projective EC point to affine in place.
25232  * pZ will be one.
25233  *
25234  * pX   EC point's X ordinate.
25235  * pY   EC point's Y ordinate.
25236  * pZ   EC point's Z ordinate.
25237  * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
25238  */
sp_ecc_map_256(mp_int * pX,mp_int * pY,mp_int * pZ)25239 int sp_ecc_map_256(mp_int* pX, mp_int* pY, mp_int* pZ)
25240 {
25241 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
25242     sp_digit* tmp = NULL;
25243     sp_point_256* p = NULL;
25244 #else
25245     sp_digit tmp[2 * 4 * 4];
25246     sp_point_256 p[1];
25247 #endif
25248     int err = MP_OKAY;
25249 
25250 #ifdef HAVE_INTEL_AVX2
25251     word32 cpuid_flags = cpuid_get_flags();
25252 #endif
25253 
25254 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
25255     if (err == MP_OKAY) {
25256         p = (sp_point_256*)XMALLOC(sizeof(sp_point_256), NULL,
25257                                          DYNAMIC_TYPE_ECC);
25258         if (p == NULL)
25259             err = MEMORY_E;
25260     }
25261     if (err == MP_OKAY) {
25262         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 4 * 4, NULL,
25263                                  DYNAMIC_TYPE_ECC);
25264         if (tmp == NULL)
25265             err = MEMORY_E;
25266     }
25267 #endif
25268     if (err == MP_OKAY) {
25269         sp_256_from_mp(p->x, 4, pX);
25270         sp_256_from_mp(p->y, 4, pY);
25271         sp_256_from_mp(p->z, 4, pZ);
25272         p->infinity = sp_256_iszero_4(p->x) &
25273                       sp_256_iszero_4(p->y);
25274 
25275 #ifdef HAVE_INTEL_AVX2
25276         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
25277             sp_256_map_avx2_4(point, point, tmp);
25278         else
25279 #endif
25280             sp_256_map_4(p, p, tmp);
25281     }
25282 
25283     if (err == MP_OKAY) {
25284         err = sp_256_to_mp(p->x, pX);
25285     }
25286     if (err == MP_OKAY) {
25287         err = sp_256_to_mp(p->y, pY);
25288     }
25289     if (err == MP_OKAY) {
25290         err = sp_256_to_mp(p->z, pZ);
25291     }
25292 
25293 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
25294     if (tmp != NULL)
25295         XFREE(tmp, NULL, DYNAMIC_TYPE_ECC);
25296     if (p != NULL)
25297         XFREE(p, NULL, DYNAMIC_TYPE_ECC);
25298 #endif
25299 
25300     return err;
25301 }
25302 #endif /* WOLFSSL_PUBLIC_ECC_ADD_DBL */
25303 #ifdef HAVE_COMP_KEY
25304 /* Find the square root of a number mod the prime of the curve.
25305  *
25306  * y  The number to operate on and the result.
25307  * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
25308  */
sp_256_mont_sqrt_4(sp_digit * y)25309 static int sp_256_mont_sqrt_4(sp_digit* y)
25310 {
25311 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
25312     sp_digit* t1 = NULL;
25313 #else
25314     sp_digit t1[4 * 4];
25315 #endif
25316     sp_digit* t2 = NULL;
25317     int err = MP_OKAY;
25318 #ifdef HAVE_INTEL_AVX2
25319     word32 cpuid_flags = cpuid_get_flags();
25320 #endif
25321 
25322 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
25323     t1 = (sp_digit*)XMALLOC(sizeof(sp_digit) * 4 * 4, NULL, DYNAMIC_TYPE_ECC);
25324     if (t1 == NULL) {
25325         err = MEMORY_E;
25326     }
25327 #endif
25328 
25329     if (err == MP_OKAY) {
25330         t2 = t1 + 2 * 4;
25331 
25332 #ifdef HAVE_INTEL_AVX2
25333         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
25334             /* t2 = y ^ 0x2 */
25335             sp_256_mont_sqr_avx2_4(t2, y, p256_mod, p256_mp_mod);
25336             /* t1 = y ^ 0x3 */
25337             sp_256_mont_mul_avx2_4(t1, t2, y, p256_mod, p256_mp_mod);
25338             /* t2 = y ^ 0xc */
25339             sp_256_mont_sqr_n_avx2_4(t2, t1, 2, p256_mod, p256_mp_mod);
25340             /* t1 = y ^ 0xf */
25341             sp_256_mont_mul_avx2_4(t1, t1, t2, p256_mod, p256_mp_mod);
25342             /* t2 = y ^ 0xf0 */
25343             sp_256_mont_sqr_n_avx2_4(t2, t1, 4, p256_mod, p256_mp_mod);
25344             /* t1 = y ^ 0xff */
25345             sp_256_mont_mul_avx2_4(t1, t1, t2, p256_mod, p256_mp_mod);
25346             /* t2 = y ^ 0xff00 */
25347             sp_256_mont_sqr_n_avx2_4(t2, t1, 8, p256_mod, p256_mp_mod);
25348             /* t1 = y ^ 0xffff */
25349             sp_256_mont_mul_avx2_4(t1, t1, t2, p256_mod, p256_mp_mod);
25350             /* t2 = y ^ 0xffff0000 */
25351             sp_256_mont_sqr_n_avx2_4(t2, t1, 16, p256_mod, p256_mp_mod);
25352             /* t1 = y ^ 0xffffffff */
25353             sp_256_mont_mul_avx2_4(t1, t1, t2, p256_mod, p256_mp_mod);
25354             /* t1 = y ^ 0xffffffff00000000 */
25355             sp_256_mont_sqr_n_avx2_4(t1, t1, 32, p256_mod, p256_mp_mod);
25356             /* t1 = y ^ 0xffffffff00000001 */
25357             sp_256_mont_mul_avx2_4(t1, t1, y, p256_mod, p256_mp_mod);
25358             /* t1 = y ^ 0xffffffff00000001000000000000000000000000 */
25359             sp_256_mont_sqr_n_avx2_4(t1, t1, 96, p256_mod, p256_mp_mod);
25360             /* t1 = y ^ 0xffffffff00000001000000000000000000000001 */
25361             sp_256_mont_mul_avx2_4(t1, t1, y, p256_mod, p256_mp_mod);
25362             sp_256_mont_sqr_n_avx2_4(y, t1, 94, p256_mod, p256_mp_mod);
25363         }
25364         else
25365 #endif
25366         {
25367             /* t2 = y ^ 0x2 */
25368             sp_256_mont_sqr_4(t2, y, p256_mod, p256_mp_mod);
25369             /* t1 = y ^ 0x3 */
25370             sp_256_mont_mul_4(t1, t2, y, p256_mod, p256_mp_mod);
25371             /* t2 = y ^ 0xc */
25372             sp_256_mont_sqr_n_4(t2, t1, 2, p256_mod, p256_mp_mod);
25373             /* t1 = y ^ 0xf */
25374             sp_256_mont_mul_4(t1, t1, t2, p256_mod, p256_mp_mod);
25375             /* t2 = y ^ 0xf0 */
25376             sp_256_mont_sqr_n_4(t2, t1, 4, p256_mod, p256_mp_mod);
25377             /* t1 = y ^ 0xff */
25378             sp_256_mont_mul_4(t1, t1, t2, p256_mod, p256_mp_mod);
25379             /* t2 = y ^ 0xff00 */
25380             sp_256_mont_sqr_n_4(t2, t1, 8, p256_mod, p256_mp_mod);
25381             /* t1 = y ^ 0xffff */
25382             sp_256_mont_mul_4(t1, t1, t2, p256_mod, p256_mp_mod);
25383             /* t2 = y ^ 0xffff0000 */
25384             sp_256_mont_sqr_n_4(t2, t1, 16, p256_mod, p256_mp_mod);
25385             /* t1 = y ^ 0xffffffff */
25386             sp_256_mont_mul_4(t1, t1, t2, p256_mod, p256_mp_mod);
25387             /* t1 = y ^ 0xffffffff00000000 */
25388             sp_256_mont_sqr_n_4(t1, t1, 32, p256_mod, p256_mp_mod);
25389             /* t1 = y ^ 0xffffffff00000001 */
25390             sp_256_mont_mul_4(t1, t1, y, p256_mod, p256_mp_mod);
25391             /* t1 = y ^ 0xffffffff00000001000000000000000000000000 */
25392             sp_256_mont_sqr_n_4(t1, t1, 96, p256_mod, p256_mp_mod);
25393             /* t1 = y ^ 0xffffffff00000001000000000000000000000001 */
25394             sp_256_mont_mul_4(t1, t1, y, p256_mod, p256_mp_mod);
25395             sp_256_mont_sqr_n_4(y, t1, 94, p256_mod, p256_mp_mod);
25396         }
25397     }
25398 
25399 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
25400     if (t1 != NULL)
25401         XFREE(t1, NULL, DYNAMIC_TYPE_ECC);
25402 #endif
25403 
25404     return err;
25405 }
25406 
25407 
25408 /* Uncompress the point given the X ordinate.
25409  *
25410  * xm    X ordinate.
25411  * odd   Whether the Y ordinate is odd.
25412  * ym    Calculated Y ordinate.
25413  * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
25414  */
sp_ecc_uncompress_256(mp_int * xm,int odd,mp_int * ym)25415 int sp_ecc_uncompress_256(mp_int* xm, int odd, mp_int* ym)
25416 {
25417 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
25418     sp_digit* x = NULL;
25419 #else
25420     sp_digit x[4 * 4];
25421 #endif
25422     sp_digit* y = NULL;
25423     int err = MP_OKAY;
25424 #ifdef HAVE_INTEL_AVX2
25425     word32 cpuid_flags = cpuid_get_flags();
25426 #endif
25427 
25428 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
25429     x = (sp_digit*)XMALLOC(sizeof(sp_digit) * 4 * 4, NULL, DYNAMIC_TYPE_ECC);
25430     if (x == NULL)
25431         err = MEMORY_E;
25432 #endif
25433 
25434     if (err == MP_OKAY) {
25435         y = x + 2 * 4;
25436 
25437         sp_256_from_mp(x, 4, xm);
25438         err = sp_256_mod_mul_norm_4(x, x, p256_mod);
25439     }
25440     if (err == MP_OKAY) {
25441         /* y = x^3 */
25442 #ifdef HAVE_INTEL_AVX2
25443         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
25444             sp_256_mont_sqr_avx2_4(y, x, p256_mod, p256_mp_mod);
25445             sp_256_mont_mul_avx2_4(y, y, x, p256_mod, p256_mp_mod);
25446         }
25447         else
25448 #endif
25449         {
25450             sp_256_mont_sqr_4(y, x, p256_mod, p256_mp_mod);
25451             sp_256_mont_mul_4(y, y, x, p256_mod, p256_mp_mod);
25452         }
25453         /* y = x^3 - 3x */
25454         sp_256_mont_sub_4(y, y, x, p256_mod);
25455         sp_256_mont_sub_4(y, y, x, p256_mod);
25456         sp_256_mont_sub_4(y, y, x, p256_mod);
25457         /* y = x^3 - 3x + b */
25458         err = sp_256_mod_mul_norm_4(x, p256_b, p256_mod);
25459     }
25460     if (err == MP_OKAY) {
25461         sp_256_mont_add_4(y, y, x, p256_mod);
25462         /* y = sqrt(x^3 - 3x + b) */
25463         err = sp_256_mont_sqrt_4(y);
25464     }
25465     if (err == MP_OKAY) {
25466         XMEMSET(y + 4, 0, 4U * sizeof(sp_digit));
25467         sp_256_mont_reduce_4(y, p256_mod, p256_mp_mod);
25468         if ((((word32)y[0] ^ (word32)odd) & 1U) != 0U) {
25469             sp_256_mont_sub_4(y, p256_mod, y, p256_mod);
25470         }
25471 
25472         err = sp_256_to_mp(y, ym);
25473     }
25474 
25475 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
25476     if (x != NULL)
25477         XFREE(x, NULL, DYNAMIC_TYPE_ECC);
25478 #endif
25479 
25480     return err;
25481 }
25482 #endif
25483 #endif /* !WOLFSSL_SP_NO_256 */
25484 #ifdef WOLFSSL_SP_384
25485 
25486 /* Point structure to use. */
25487 typedef struct sp_point_384 {
25488     /* X ordinate of point. */
25489     sp_digit x[2 * 6];
25490     /* Y ordinate of point. */
25491     sp_digit y[2 * 6];
25492     /* Z ordinate of point. */
25493     sp_digit z[2 * 6];
25494     /* Indicates point is at infinity. */
25495     int infinity;
25496 } sp_point_384;
25497 
25498 /* The modulus (prime) of the curve P384. */
25499 static const sp_digit p384_mod[6] = {
25500     0x00000000ffffffffL,0xffffffff00000000L,0xfffffffffffffffeL,
25501     0xffffffffffffffffL,0xffffffffffffffffL,0xffffffffffffffffL
25502 };
25503 /* The Montgomery normalizer for modulus of the curve P384. */
25504 static const sp_digit p384_norm_mod[6] = {
25505     0xffffffff00000001L,0x00000000ffffffffL,0x0000000000000001L,
25506     0x0000000000000000L,0x0000000000000000L,0x0000000000000000L
25507 };
25508 /* The Montgomery multiplier for modulus of the curve P384. */
25509 static sp_digit p384_mp_mod = 0x0000000100000001;
25510 #if defined(WOLFSSL_VALIDATE_ECC_KEYGEN) || defined(HAVE_ECC_SIGN) || \
25511                                             defined(HAVE_ECC_VERIFY)
25512 /* The order of the curve P384. */
25513 static const sp_digit p384_order[6] = {
25514     0xecec196accc52973L,0x581a0db248b0a77aL,0xc7634d81f4372ddfL,
25515     0xffffffffffffffffL,0xffffffffffffffffL,0xffffffffffffffffL
25516 };
25517 #endif
25518 /* The order of the curve P384 minus 2. */
25519 static const sp_digit p384_order2[6] = {
25520     0xecec196accc52971L,0x581a0db248b0a77aL,0xc7634d81f4372ddfL,
25521     0xffffffffffffffffL,0xffffffffffffffffL,0xffffffffffffffffL
25522 };
25523 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
25524 /* The Montgomery normalizer for order of the curve P384. */
25525 static const sp_digit p384_norm_order[6] = {
25526     0x1313e695333ad68dL,0xa7e5f24db74f5885L,0x389cb27e0bc8d220L,
25527     0x0000000000000000L,0x0000000000000000L,0x0000000000000000L
25528 };
25529 #endif
25530 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
25531 /* The Montgomery multiplier for order of the curve P384. */
25532 static sp_digit p384_mp_order = 0x6ed46089e88fdc45L;
25533 #endif
25534 #ifdef WOLFSSL_SP_SMALL
25535 /* The base point of curve P384. */
25536 static const sp_point_384 p384_base = {
25537     /* X ordinate */
25538     {
25539         0x3a545e3872760ab7L,0x5502f25dbf55296cL,0x59f741e082542a38L,
25540         0x6e1d3b628ba79b98L,0x8eb1c71ef320ad74L,0xaa87ca22be8b0537L,
25541         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
25542         (sp_digit)0
25543     },
25544     /* Y ordinate */
25545     {
25546         0x7a431d7c90ea0e5fL,0x0a60b1ce1d7e819dL,0xe9da3113b5f0b8c0L,
25547         0xf8f41dbd289a147cL,0x5d9e98bf9292dc29L,0x3617de4a96262c6fL,
25548         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
25549         (sp_digit)0
25550     },
25551     /* Z ordinate */
25552     {
25553         0x0000000000000001L,0x0000000000000000L,0x0000000000000000L,
25554         0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,
25555         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
25556         (sp_digit)0
25557     },
25558     /* infinity */
25559     0
25560 };
25561 #endif /* WOLFSSL_SP_SMALL */
25562 #if defined(HAVE_ECC_CHECK_KEY) || defined(HAVE_COMP_KEY)
25563 static const sp_digit p384_b[6] = {
25564     0x2a85c8edd3ec2aefL,0xc656398d8a2ed19dL,0x0314088f5013875aL,
25565     0x181d9c6efe814112L,0x988e056be3f82d19L,0xb3312fa7e23ee7e4L
25566 };
25567 #endif
25568 
25569 extern void sp_384_mul_6(sp_digit* r, const sp_digit* a, const sp_digit* b);
25570 extern void sp_384_sqr_6(sp_digit* r, const sp_digit* a);
25571 extern sp_digit sp_384_add_6(sp_digit* r, const sp_digit* a, const sp_digit* b);
25572 extern sp_digit sp_384_sub_6(sp_digit* r, const sp_digit* a, const sp_digit* b);
25573 /* Multiply a number by Montgomery normalizer mod modulus (prime).
25574  *
25575  * r  The resulting Montgomery form number.
25576  * a  The number to convert.
25577  * m  The modulus (prime).
25578  * returns MEMORY_E when memory allocation fails and MP_OKAY otherwise.
25579  */
sp_384_mod_mul_norm_6(sp_digit * r,const sp_digit * a,const sp_digit * m)25580 static int sp_384_mod_mul_norm_6(sp_digit* r, const sp_digit* a, const sp_digit* m)
25581 {
25582 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
25583     int64_t* t = NULL;
25584 #else
25585     int64_t t[2 * 12];
25586 #endif
25587     int64_t* a32 = NULL;
25588     int64_t o;
25589     int err = MP_OKAY;
25590 
25591     (void)m;
25592 
25593 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
25594     t = (int64_t*)XMALLOC(sizeof(int64_t) * 2 * 12, NULL, DYNAMIC_TYPE_ECC);
25595     if (t == NULL)
25596         err = MEMORY_E;
25597 #endif
25598 
25599     if (err == MP_OKAY) {
25600         a32 = t + 12;
25601 
25602         a32[0] = a[0] & 0xffffffff;
25603         a32[1] = a[0] >> 32;
25604         a32[2] = a[1] & 0xffffffff;
25605         a32[3] = a[1] >> 32;
25606         a32[4] = a[2] & 0xffffffff;
25607         a32[5] = a[2] >> 32;
25608         a32[6] = a[3] & 0xffffffff;
25609         a32[7] = a[3] >> 32;
25610         a32[8] = a[4] & 0xffffffff;
25611         a32[9] = a[4] >> 32;
25612         a32[10] = a[5] & 0xffffffff;
25613         a32[11] = a[5] >> 32;
25614 
25615         /*  1  0  0  0  0  0  0  0  1  1  0 -1 */
25616         t[0] = 0 + a32[0] + a32[8] + a32[9] - a32[11];
25617         /* -1  1  0  0  0  0  0  0 -1  0  1  1 */
25618         t[1] = 0 - a32[0] + a32[1] - a32[8] + a32[10] + a32[11];
25619         /*  0 -1  1  0  0  0  0  0  0 -1  0  1 */
25620         t[2] = 0 - a32[1] + a32[2] - a32[9] + a32[11];
25621         /*  1  0 -1  1  0  0  0  0  1  1 -1 -1 */
25622         t[3] = 0 + a32[0] - a32[2] + a32[3] + a32[8] + a32[9] - a32[10] - a32[11];
25623         /*  1  1  0 -1  1  0  0  0  1  2  1 -2 */
25624         t[4] = 0 + a32[0] + a32[1] - a32[3] + a32[4] + a32[8] + 2 * a32[9] + a32[10] -  2 * a32[11];
25625         /*  0  1  1  0 -1  1  0  0  0  1  2  1 */
25626         t[5] = 0 + a32[1] + a32[2] - a32[4] + a32[5] + a32[9] + 2 * a32[10] + a32[11];
25627         /*  0  0  1  1  0 -1  1  0  0  0  1  2 */
25628         t[6] = 0 + a32[2] + a32[3] - a32[5] + a32[6] + a32[10] + 2 * a32[11];
25629         /*  0  0  0  1  1  0 -1  1  0  0  0  1 */
25630         t[7] = 0 + a32[3] + a32[4] - a32[6] + a32[7] + a32[11];
25631         /*  0  0  0  0  1  1  0 -1  1  0  0  0 */
25632         t[8] = 0 + a32[4] + a32[5] - a32[7] + a32[8];
25633         /*  0  0  0  0  0  1  1  0 -1  1  0  0 */
25634         t[9] = 0 + a32[5] + a32[6] - a32[8] + a32[9];
25635         /*  0  0  0  0  0  0  1  1  0 -1  1  0 */
25636         t[10] = 0 + a32[6] + a32[7] - a32[9] + a32[10];
25637         /*  0  0  0  0  0  0  0  1  1  0 -1  1 */
25638         t[11] = 0 + a32[7] + a32[8] - a32[10] + a32[11];
25639 
25640         t[1] += t[0] >> 32; t[0] &= 0xffffffff;
25641         t[2] += t[1] >> 32; t[1] &= 0xffffffff;
25642         t[3] += t[2] >> 32; t[2] &= 0xffffffff;
25643         t[4] += t[3] >> 32; t[3] &= 0xffffffff;
25644         t[5] += t[4] >> 32; t[4] &= 0xffffffff;
25645         t[6] += t[5] >> 32; t[5] &= 0xffffffff;
25646         t[7] += t[6] >> 32; t[6] &= 0xffffffff;
25647         t[8] += t[7] >> 32; t[7] &= 0xffffffff;
25648         t[9] += t[8] >> 32; t[8] &= 0xffffffff;
25649         t[10] += t[9] >> 32; t[9] &= 0xffffffff;
25650         t[11] += t[10] >> 32; t[10] &= 0xffffffff;
25651         o     = t[11] >> 32; t[11] &= 0xffffffff;
25652         t[0] += o;
25653         t[1] -= o;
25654         t[3] += o;
25655         t[4] += o;
25656         t[1] += t[0] >> 32; t[0] &= 0xffffffff;
25657         t[2] += t[1] >> 32; t[1] &= 0xffffffff;
25658         t[3] += t[2] >> 32; t[2] &= 0xffffffff;
25659         t[4] += t[3] >> 32; t[3] &= 0xffffffff;
25660         t[5] += t[4] >> 32; t[4] &= 0xffffffff;
25661         t[6] += t[5] >> 32; t[5] &= 0xffffffff;
25662         t[7] += t[6] >> 32; t[6] &= 0xffffffff;
25663         t[8] += t[7] >> 32; t[7] &= 0xffffffff;
25664         t[9] += t[8] >> 32; t[8] &= 0xffffffff;
25665         t[10] += t[9] >> 32; t[9] &= 0xffffffff;
25666         t[11] += t[10] >> 32; t[10] &= 0xffffffff;
25667 
25668         r[0] = (t[1] << 32) | t[0];
25669         r[1] = (t[3] << 32) | t[2];
25670         r[2] = (t[5] << 32) | t[4];
25671         r[3] = (t[7] << 32) | t[6];
25672         r[4] = (t[9] << 32) | t[8];
25673         r[5] = (t[11] << 32) | t[10];
25674     }
25675 
25676 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
25677     if (t != NULL)
25678         XFREE(t, NULL, DYNAMIC_TYPE_ECC);
25679 #endif
25680 
25681     return err;
25682 }
25683 
25684 /* Convert an mp_int to an array of sp_digit.
25685  *
25686  * r  A single precision integer.
25687  * size  Maximum number of bytes to convert
25688  * a  A multi-precision integer.
25689  */
sp_384_from_mp(sp_digit * r,int size,const mp_int * a)25690 static void sp_384_from_mp(sp_digit* r, int size, const mp_int* a)
25691 {
25692 #if DIGIT_BIT == 64
25693     int j;
25694 
25695     XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
25696 
25697     for (j = a->used; j < size; j++) {
25698         r[j] = 0;
25699     }
25700 #elif DIGIT_BIT > 64
25701     int i;
25702     int j = 0;
25703     word32 s = 0;
25704 
25705     r[0] = 0;
25706     for (i = 0; i < a->used && j < size; i++) {
25707         r[j] |= ((sp_digit)a->dp[i] << s);
25708         r[j] &= 0xffffffffffffffffl;
25709         s = 64U - s;
25710         if (j + 1 >= size) {
25711             break;
25712         }
25713         /* lint allow cast of mismatch word32 and mp_digit */
25714         r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
25715         while ((s + 64U) <= (word32)DIGIT_BIT) {
25716             s += 64U;
25717             r[j] &= 0xffffffffffffffffl;
25718             if (j + 1 >= size) {
25719                 break;
25720             }
25721             if (s < (word32)DIGIT_BIT) {
25722                 /* lint allow cast of mismatch word32 and mp_digit */
25723                 r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
25724             }
25725             else {
25726                 r[++j] = (sp_digit)0;
25727             }
25728         }
25729         s = (word32)DIGIT_BIT - s;
25730     }
25731 
25732     for (j++; j < size; j++) {
25733         r[j] = 0;
25734     }
25735 #else
25736     int i;
25737     int j = 0;
25738     int s = 0;
25739 
25740     r[0] = 0;
25741     for (i = 0; i < a->used && j < size; i++) {
25742         r[j] |= ((sp_digit)a->dp[i]) << s;
25743         if (s + DIGIT_BIT >= 64) {
25744             r[j] &= 0xffffffffffffffffl;
25745             if (j + 1 >= size) {
25746                 break;
25747             }
25748             s = 64 - s;
25749             if (s == DIGIT_BIT) {
25750                 r[++j] = 0;
25751                 s = 0;
25752             }
25753             else {
25754                 r[++j] = a->dp[i] >> s;
25755                 s = DIGIT_BIT - s;
25756             }
25757         }
25758         else {
25759             s += DIGIT_BIT;
25760         }
25761     }
25762 
25763     for (j++; j < size; j++) {
25764         r[j] = 0;
25765     }
25766 #endif
25767 }
25768 
25769 /* Convert a point of type ecc_point to type sp_point_384.
25770  *
25771  * p   Point of type sp_point_384 (result).
25772  * pm  Point of type ecc_point.
25773  */
sp_384_point_from_ecc_point_6(sp_point_384 * p,const ecc_point * pm)25774 static void sp_384_point_from_ecc_point_6(sp_point_384* p,
25775         const ecc_point* pm)
25776 {
25777     XMEMSET(p->x, 0, sizeof(p->x));
25778     XMEMSET(p->y, 0, sizeof(p->y));
25779     XMEMSET(p->z, 0, sizeof(p->z));
25780     sp_384_from_mp(p->x, 6, pm->x);
25781     sp_384_from_mp(p->y, 6, pm->y);
25782     sp_384_from_mp(p->z, 6, pm->z);
25783     p->infinity = 0;
25784 }
25785 
25786 /* Convert an array of sp_digit to an mp_int.
25787  *
25788  * a  A single precision integer.
25789  * r  A multi-precision integer.
25790  */
sp_384_to_mp(const sp_digit * a,mp_int * r)25791 static int sp_384_to_mp(const sp_digit* a, mp_int* r)
25792 {
25793     int err;
25794 
25795     err = mp_grow(r, (384 + DIGIT_BIT - 1) / DIGIT_BIT);
25796     if (err == MP_OKAY) { /*lint !e774 case where err is always MP_OKAY*/
25797 #if DIGIT_BIT == 64
25798         XMEMCPY(r->dp, a, sizeof(sp_digit) * 6);
25799         r->used = 6;
25800         mp_clamp(r);
25801 #elif DIGIT_BIT < 64
25802         int i;
25803         int j = 0;
25804         int s = 0;
25805 
25806         r->dp[0] = 0;
25807         for (i = 0; i < 6; i++) {
25808             r->dp[j] |= (mp_digit)(a[i] << s);
25809             r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
25810             s = DIGIT_BIT - s;
25811             r->dp[++j] = (mp_digit)(a[i] >> s);
25812             while (s + DIGIT_BIT <= 64) {
25813                 s += DIGIT_BIT;
25814                 r->dp[j++] &= ((sp_digit)1 << DIGIT_BIT) - 1;
25815                 if (s == SP_WORD_SIZE) {
25816                     r->dp[j] = 0;
25817                 }
25818                 else {
25819                     r->dp[j] = (mp_digit)(a[i] >> s);
25820                 }
25821             }
25822             s = 64 - s;
25823         }
25824         r->used = (384 + DIGIT_BIT - 1) / DIGIT_BIT;
25825         mp_clamp(r);
25826 #else
25827         int i;
25828         int j = 0;
25829         int s = 0;
25830 
25831         r->dp[0] = 0;
25832         for (i = 0; i < 6; i++) {
25833             r->dp[j] |= ((mp_digit)a[i]) << s;
25834             if (s + 64 >= DIGIT_BIT) {
25835     #if DIGIT_BIT != 32 && DIGIT_BIT != 64
25836                 r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
25837     #endif
25838                 s = DIGIT_BIT - s;
25839                 r->dp[++j] = a[i] >> s;
25840                 s = 64 - s;
25841             }
25842             else {
25843                 s += 64;
25844             }
25845         }
25846         r->used = (384 + DIGIT_BIT - 1) / DIGIT_BIT;
25847         mp_clamp(r);
25848 #endif
25849     }
25850 
25851     return err;
25852 }
25853 
25854 /* Convert a point of type sp_point_384 to type ecc_point.
25855  *
25856  * p   Point of type sp_point_384.
25857  * pm  Point of type ecc_point (result).
25858  * returns MEMORY_E when allocation of memory in ecc_point fails otherwise
25859  * MP_OKAY.
25860  */
sp_384_point_to_ecc_point_6(const sp_point_384 * p,ecc_point * pm)25861 static int sp_384_point_to_ecc_point_6(const sp_point_384* p, ecc_point* pm)
25862 {
25863     int err;
25864 
25865     err = sp_384_to_mp(p->x, pm->x);
25866     if (err == MP_OKAY) {
25867         err = sp_384_to_mp(p->y, pm->y);
25868     }
25869     if (err == MP_OKAY) {
25870         err = sp_384_to_mp(p->z, pm->z);
25871     }
25872 
25873     return err;
25874 }
25875 
25876 extern void sp_384_cond_copy_6(sp_digit* r, const sp_digit* a, sp_digit m);
25877 extern sp_digit sp_384_cond_sub_6(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
25878 extern void sp_384_mont_reduce_6(sp_digit* a, const sp_digit* m, sp_digit mp);
25879 extern void sp_384_mont_reduce_order_6(sp_digit* a, const sp_digit* m, sp_digit mp);
25880 /* Multiply two Montgomery form numbers mod the modulus (prime).
25881  * (r = a * b mod m)
25882  *
25883  * r   Result of multiplication.
25884  * a   First number to multiply in Montgomery form.
25885  * b   Second number to multiply in Montgomery form.
25886  * m   Modulus (prime).
25887  * mp  Montgomery mulitplier.
25888  */
sp_384_mont_mul_6(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)25889 static void sp_384_mont_mul_6(sp_digit* r, const sp_digit* a,
25890         const sp_digit* b, const sp_digit* m, sp_digit mp)
25891 {
25892     sp_384_mul_6(r, a, b);
25893     sp_384_mont_reduce_6(r, m, mp);
25894 }
25895 
25896 /* Square the Montgomery form number. (r = a * a mod m)
25897  *
25898  * r   Result of squaring.
25899  * a   Number to square in Montgomery form.
25900  * m   Modulus (prime).
25901  * mp  Montgomery mulitplier.
25902  */
sp_384_mont_sqr_6(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)25903 static void sp_384_mont_sqr_6(sp_digit* r, const sp_digit* a,
25904         const sp_digit* m, sp_digit mp)
25905 {
25906     sp_384_sqr_6(r, a);
25907     sp_384_mont_reduce_6(r, m, mp);
25908 }
25909 
25910 #if !defined(WOLFSSL_SP_SMALL) || defined(HAVE_COMP_KEY)
25911 /* Square the Montgomery form number a number of times. (r = a ^ n mod m)
25912  *
25913  * r   Result of squaring.
25914  * a   Number to square in Montgomery form.
25915  * n   Number of times to square.
25916  * m   Modulus (prime).
25917  * mp  Montgomery mulitplier.
25918  */
sp_384_mont_sqr_n_6(sp_digit * r,const sp_digit * a,int n,const sp_digit * m,sp_digit mp)25919 static void sp_384_mont_sqr_n_6(sp_digit* r, const sp_digit* a, int n,
25920         const sp_digit* m, sp_digit mp)
25921 {
25922     sp_384_mont_sqr_6(r, a, m, mp);
25923     for (; n > 1; n--) {
25924         sp_384_mont_sqr_6(r, r, m, mp);
25925     }
25926 }
25927 
25928 #endif /* !WOLFSSL_SP_SMALL | HAVE_COMP_KEY */
25929 #ifdef WOLFSSL_SP_SMALL
25930 /* Mod-2 for the P384 curve. */
25931 static const uint64_t p384_mod_minus_2[6] = {
25932     0x00000000fffffffdU,0xffffffff00000000U,0xfffffffffffffffeU,
25933     0xffffffffffffffffU,0xffffffffffffffffU,0xffffffffffffffffU
25934 };
25935 #endif /* !WOLFSSL_SP_SMALL */
25936 
25937 /* Invert the number, in Montgomery form, modulo the modulus (prime) of the
25938  * P384 curve. (r = 1 / a mod m)
25939  *
25940  * r   Inverse result.
25941  * a   Number to invert.
25942  * td  Temporary data.
25943  */
sp_384_mont_inv_6(sp_digit * r,const sp_digit * a,sp_digit * td)25944 static void sp_384_mont_inv_6(sp_digit* r, const sp_digit* a, sp_digit* td)
25945 {
25946 #ifdef WOLFSSL_SP_SMALL
25947     sp_digit* t = td;
25948     int i;
25949 
25950     XMEMCPY(t, a, sizeof(sp_digit) * 6);
25951     for (i=382; i>=0; i--) {
25952         sp_384_mont_sqr_6(t, t, p384_mod, p384_mp_mod);
25953         if (p384_mod_minus_2[i / 64] & ((sp_digit)1 << (i % 64)))
25954             sp_384_mont_mul_6(t, t, a, p384_mod, p384_mp_mod);
25955     }
25956     XMEMCPY(r, t, sizeof(sp_digit) * 6);
25957 #else
25958     sp_digit* t1 = td;
25959     sp_digit* t2 = td + 2 * 6;
25960     sp_digit* t3 = td + 4 * 6;
25961     sp_digit* t4 = td + 6 * 6;
25962     sp_digit* t5 = td + 8 * 6;
25963 
25964     /* 0x2 */
25965     sp_384_mont_sqr_6(t1, a, p384_mod, p384_mp_mod);
25966     /* 0x3 */
25967     sp_384_mont_mul_6(t5, t1, a, p384_mod, p384_mp_mod);
25968     /* 0xc */
25969     sp_384_mont_sqr_n_6(t1, t5, 2, p384_mod, p384_mp_mod);
25970     /* 0xf */
25971     sp_384_mont_mul_6(t2, t5, t1, p384_mod, p384_mp_mod);
25972     /* 0x1e */
25973     sp_384_mont_sqr_6(t1, t2, p384_mod, p384_mp_mod);
25974     /* 0x1f */
25975     sp_384_mont_mul_6(t4, t1, a, p384_mod, p384_mp_mod);
25976     /* 0x3e0 */
25977     sp_384_mont_sqr_n_6(t1, t4, 5, p384_mod, p384_mp_mod);
25978     /* 0x3ff */
25979     sp_384_mont_mul_6(t2, t4, t1, p384_mod, p384_mp_mod);
25980     /* 0x7fe0 */
25981     sp_384_mont_sqr_n_6(t1, t2, 5, p384_mod, p384_mp_mod);
25982     /* 0x7fff */
25983     sp_384_mont_mul_6(t4, t4, t1, p384_mod, p384_mp_mod);
25984     /* 0x3fff8000 */
25985     sp_384_mont_sqr_n_6(t1, t4, 15, p384_mod, p384_mp_mod);
25986     /* 0x3fffffff */
25987     sp_384_mont_mul_6(t2, t4, t1, p384_mod, p384_mp_mod);
25988     /* 0xfffffffc */
25989     sp_384_mont_sqr_n_6(t3, t2, 2, p384_mod, p384_mp_mod);
25990     /* 0xfffffffd */
25991     sp_384_mont_mul_6(r, t3, a, p384_mod, p384_mp_mod);
25992     /* 0xffffffff */
25993     sp_384_mont_mul_6(t3, t5, t3, p384_mod, p384_mp_mod);
25994     /* 0xfffffffc0000000 */
25995     sp_384_mont_sqr_n_6(t1, t2, 30, p384_mod, p384_mp_mod);
25996     /* 0xfffffffffffffff */
25997     sp_384_mont_mul_6(t2, t2, t1, p384_mod, p384_mp_mod);
25998     /* 0xfffffffffffffff000000000000000 */
25999     sp_384_mont_sqr_n_6(t1, t2, 60, p384_mod, p384_mp_mod);
26000     /* 0xffffffffffffffffffffffffffffff */
26001     sp_384_mont_mul_6(t2, t2, t1, p384_mod, p384_mp_mod);
26002     /* 0xffffffffffffffffffffffffffffff000000000000000000000000000000 */
26003     sp_384_mont_sqr_n_6(t1, t2, 120, p384_mod, p384_mp_mod);
26004     /* 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff */
26005     sp_384_mont_mul_6(t2, t2, t1, p384_mod, p384_mp_mod);
26006     /* 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000 */
26007     sp_384_mont_sqr_n_6(t1, t2, 15, p384_mod, p384_mp_mod);
26008     /* 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff */
26009     sp_384_mont_mul_6(t2, t4, t1, p384_mod, p384_mp_mod);
26010     /* 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000 */
26011     sp_384_mont_sqr_n_6(t1, t2, 33, p384_mod, p384_mp_mod);
26012     /* 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff */
26013     sp_384_mont_mul_6(t2, t3, t1, p384_mod, p384_mp_mod);
26014     /* 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000000000000 */
26015     sp_384_mont_sqr_n_6(t1, t2, 96, p384_mod, p384_mp_mod);
26016     /* 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffd */
26017     sp_384_mont_mul_6(r, r, t1, p384_mod, p384_mp_mod);
26018 
26019 #endif /* WOLFSSL_SP_SMALL */
26020 }
26021 
26022 extern sp_int64 sp_384_cmp_6(const sp_digit* a, const sp_digit* b);
26023 /* Normalize the values in each word to 64.
26024  *
26025  * a  Array of sp_digit to normalize.
26026  */
26027 #define sp_384_norm_6(a)
26028 
26029 /* Map the Montgomery form projective coordinate point to an affine point.
26030  *
26031  * r  Resulting affine coordinate point.
26032  * p  Montgomery form projective coordinate point.
26033  * t  Temporary ordinate data.
26034  */
sp_384_map_6(sp_point_384 * r,const sp_point_384 * p,sp_digit * t)26035 static void sp_384_map_6(sp_point_384* r, const sp_point_384* p,
26036     sp_digit* t)
26037 {
26038     sp_digit* t1 = t;
26039     sp_digit* t2 = t + 2*6;
26040     sp_int64 n;
26041 
26042     sp_384_mont_inv_6(t1, p->z, t + 2*6);
26043 
26044     sp_384_mont_sqr_6(t2, t1, p384_mod, p384_mp_mod);
26045     sp_384_mont_mul_6(t1, t2, t1, p384_mod, p384_mp_mod);
26046 
26047     /* x /= z^2 */
26048     sp_384_mont_mul_6(r->x, p->x, t2, p384_mod, p384_mp_mod);
26049     XMEMSET(r->x + 6, 0, sizeof(r->x) / 2U);
26050     sp_384_mont_reduce_6(r->x, p384_mod, p384_mp_mod);
26051     /* Reduce x to less than modulus */
26052     n = sp_384_cmp_6(r->x, p384_mod);
26053     sp_384_cond_sub_6(r->x, r->x, p384_mod, 0 - ((n >= 0) ?
26054                 (sp_digit)1 : (sp_digit)0));
26055     sp_384_norm_6(r->x);
26056 
26057     /* y /= z^3 */
26058     sp_384_mont_mul_6(r->y, p->y, t1, p384_mod, p384_mp_mod);
26059     XMEMSET(r->y + 6, 0, sizeof(r->y) / 2U);
26060     sp_384_mont_reduce_6(r->y, p384_mod, p384_mp_mod);
26061     /* Reduce y to less than modulus */
26062     n = sp_384_cmp_6(r->y, p384_mod);
26063     sp_384_cond_sub_6(r->y, r->y, p384_mod, 0 - ((n >= 0) ?
26064                 (sp_digit)1 : (sp_digit)0));
26065     sp_384_norm_6(r->y);
26066 
26067     XMEMSET(r->z, 0, sizeof(r->z));
26068     r->z[0] = 1;
26069 
26070 }
26071 
26072 /* Add two Montgomery form numbers (r = a + b % m).
26073  *
26074  * r   Result of addition.
26075  * a   First number to add in Montgomery form.
26076  * b   Second number to add in Montgomery form.
26077  * m   Modulus (prime).
26078  */
sp_384_mont_add_6(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m)26079 static void sp_384_mont_add_6(sp_digit* r, const sp_digit* a, const sp_digit* b,
26080         const sp_digit* m)
26081 {
26082     sp_digit o;
26083 
26084     ASSERT_SAVED_VECTOR_REGISTERS();
26085 
26086     o = sp_384_add_6(r, a, b);
26087     sp_384_cond_sub_6(r, r, m, 0 - o);
26088 }
26089 
26090 extern sp_digit sp_384_dbl_6(sp_digit* r, const sp_digit* a);
26091 /* Double a Montgomery form number (r = a + a % m).
26092  *
26093  * r   Result of doubling.
26094  * a   Number to double in Montgomery form.
26095  * m   Modulus (prime).
26096  */
sp_384_mont_dbl_6(sp_digit * r,const sp_digit * a,const sp_digit * m)26097 static void sp_384_mont_dbl_6(sp_digit* r, const sp_digit* a, const sp_digit* m)
26098 {
26099     sp_digit o;
26100 
26101     ASSERT_SAVED_VECTOR_REGISTERS();
26102 
26103     o = sp_384_dbl_6(r, a);
26104     sp_384_cond_sub_6(r, r, m, 0 - o);
26105 }
26106 
26107 /* Triple a Montgomery form number (r = a + a + a % m).
26108  *
26109  * r   Result of Tripling.
26110  * a   Number to triple in Montgomery form.
26111  * m   Modulus (prime).
26112  */
sp_384_mont_tpl_6(sp_digit * r,const sp_digit * a,const sp_digit * m)26113 static void sp_384_mont_tpl_6(sp_digit* r, const sp_digit* a, const sp_digit* m)
26114 {
26115     sp_digit o;
26116 
26117     ASSERT_SAVED_VECTOR_REGISTERS();
26118 
26119     o = sp_384_dbl_6(r, a);
26120     sp_384_cond_sub_6(r, r, m, 0 - o);
26121     o = sp_384_add_6(r, r, a);
26122     sp_384_cond_sub_6(r, r, m, 0 - o);
26123 }
26124 
26125 extern sp_digit sp_384_cond_add_6(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
26126 /* Subtract two Montgomery form numbers (r = a - b % m).
26127  *
26128  * r   Result of subtration.
26129  * a   Number to subtract from in Montgomery form.
26130  * b   Number to subtract with in Montgomery form.
26131  * m   Modulus (prime).
26132  */
sp_384_mont_sub_6(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m)26133 static void sp_384_mont_sub_6(sp_digit* r, const sp_digit* a, const sp_digit* b,
26134         const sp_digit* m)
26135 {
26136     sp_digit o;
26137 
26138     ASSERT_SAVED_VECTOR_REGISTERS();
26139 
26140     o = sp_384_sub_6(r, a, b);
26141     sp_384_cond_add_6(r, r, m, o);
26142 }
26143 
26144 extern void sp_384_div2_6(sp_digit* r, const sp_digit* a, const sp_digit* m);
26145 /* Double the Montgomery form projective point p.
26146  *
26147  * r  Result of doubling point.
26148  * p  Point to double.
26149  * t  Temporary ordinate data.
26150  */
26151 #ifdef WOLFSSL_SP_NONBLOCK
26152 typedef struct sp_384_proj_point_dbl_6_ctx {
26153     int state;
26154     sp_digit* t1;
26155     sp_digit* t2;
26156     sp_digit* x;
26157     sp_digit* y;
26158     sp_digit* z;
26159 } sp_384_proj_point_dbl_6_ctx;
26160 
sp_384_proj_point_dbl_6_nb(sp_ecc_ctx_t * sp_ctx,sp_point_384 * r,const sp_point_384 * p,sp_digit * t)26161 static int sp_384_proj_point_dbl_6_nb(sp_ecc_ctx_t* sp_ctx, sp_point_384* r, const sp_point_384* p, sp_digit* t)
26162 {
26163     int err = FP_WOULDBLOCK;
26164     sp_384_proj_point_dbl_6_ctx* ctx = (sp_384_proj_point_dbl_6_ctx*)sp_ctx->data;
26165 
26166     typedef char ctx_size_test[sizeof(sp_384_proj_point_dbl_6_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
26167     (void)sizeof(ctx_size_test);
26168 
26169     switch (ctx->state) {
26170     case 0:
26171         ctx->t1 = t;
26172         ctx->t2 = t + 2*6;
26173         ctx->x = r->x;
26174         ctx->y = r->y;
26175         ctx->z = r->z;
26176 
26177         /* Put infinity into result. */
26178         if (r != p) {
26179             r->infinity = p->infinity;
26180         }
26181         ctx->state = 1;
26182         break;
26183     case 1:
26184         /* T1 = Z * Z */
26185         sp_384_mont_sqr_6(ctx->t1, p->z, p384_mod, p384_mp_mod);
26186         ctx->state = 2;
26187         break;
26188     case 2:
26189         /* Z = Y * Z */
26190         sp_384_mont_mul_6(ctx->z, p->y, p->z, p384_mod, p384_mp_mod);
26191         ctx->state = 3;
26192         break;
26193     case 3:
26194         /* Z = 2Z */
26195         sp_384_mont_dbl_6(ctx->z, ctx->z, p384_mod);
26196         ctx->state = 4;
26197         break;
26198     case 4:
26199         /* T2 = X - T1 */
26200         sp_384_mont_sub_6(ctx->t2, p->x, ctx->t1, p384_mod);
26201         ctx->state = 5;
26202         break;
26203     case 5:
26204         /* T1 = X + T1 */
26205         sp_384_mont_add_6(ctx->t1, p->x, ctx->t1, p384_mod);
26206         ctx->state = 6;
26207         break;
26208     case 6:
26209         /* T2 = T1 * T2 */
26210         sp_384_mont_mul_6(ctx->t2, ctx->t1, ctx->t2, p384_mod, p384_mp_mod);
26211         ctx->state = 7;
26212         break;
26213     case 7:
26214         /* T1 = 3T2 */
26215         sp_384_mont_tpl_6(ctx->t1, ctx->t2, p384_mod);
26216         ctx->state = 8;
26217         break;
26218     case 8:
26219         /* Y = 2Y */
26220         sp_384_mont_dbl_6(ctx->y, p->y, p384_mod);
26221         ctx->state = 9;
26222         break;
26223     case 9:
26224         /* Y = Y * Y */
26225         sp_384_mont_sqr_6(ctx->y, ctx->y, p384_mod, p384_mp_mod);
26226         ctx->state = 10;
26227         break;
26228     case 10:
26229         /* T2 = Y * Y */
26230         sp_384_mont_sqr_6(ctx->t2, ctx->y, p384_mod, p384_mp_mod);
26231         ctx->state = 11;
26232         break;
26233     case 11:
26234         /* T2 = T2/2 */
26235         sp_384_div2_6(ctx->t2, ctx->t2, p384_mod);
26236         ctx->state = 12;
26237         break;
26238     case 12:
26239         /* Y = Y * X */
26240         sp_384_mont_mul_6(ctx->y, ctx->y, p->x, p384_mod, p384_mp_mod);
26241         ctx->state = 13;
26242         break;
26243     case 13:
26244         /* X = T1 * T1 */
26245         sp_384_mont_sqr_6(ctx->x, ctx->t1, p384_mod, p384_mp_mod);
26246         ctx->state = 14;
26247         break;
26248     case 14:
26249         /* X = X - Y */
26250         sp_384_mont_sub_6(ctx->x, ctx->x, ctx->y, p384_mod);
26251         ctx->state = 15;
26252         break;
26253     case 15:
26254         /* X = X - Y */
26255         sp_384_mont_sub_6(ctx->x, ctx->x, ctx->y, p384_mod);
26256         ctx->state = 16;
26257         break;
26258     case 16:
26259         /* Y = Y - X */
26260         sp_384_mont_sub_6(ctx->y, ctx->y, ctx->x, p384_mod);
26261         ctx->state = 17;
26262         break;
26263     case 17:
26264         /* Y = Y * T1 */
26265         sp_384_mont_mul_6(ctx->y, ctx->y, ctx->t1, p384_mod, p384_mp_mod);
26266         ctx->state = 18;
26267         break;
26268     case 18:
26269         /* Y = Y - T2 */
26270         sp_384_mont_sub_6(ctx->y, ctx->y, ctx->t2, p384_mod);
26271         ctx->state = 19;
26272         /* fall-through */
26273     case 19:
26274         err = MP_OKAY;
26275         break;
26276     }
26277 
26278     if (err == MP_OKAY && ctx->state != 19) {
26279         err = FP_WOULDBLOCK;
26280     }
26281 
26282     return err;
26283 }
26284 #endif /* WOLFSSL_SP_NONBLOCK */
26285 
sp_384_proj_point_dbl_6(sp_point_384 * r,const sp_point_384 * p,sp_digit * t)26286 static void sp_384_proj_point_dbl_6(sp_point_384* r, const sp_point_384* p, sp_digit* t)
26287 {
26288     sp_digit* t1 = t;
26289     sp_digit* t2 = t + 2*6;
26290     sp_digit* x;
26291     sp_digit* y;
26292     sp_digit* z;
26293 
26294     x = r->x;
26295     y = r->y;
26296     z = r->z;
26297     /* Put infinity into result. */
26298     if (r != p) {
26299         r->infinity = p->infinity;
26300     }
26301 
26302     /* T1 = Z * Z */
26303     sp_384_mont_sqr_6(t1, p->z, p384_mod, p384_mp_mod);
26304     /* Z = Y * Z */
26305     sp_384_mont_mul_6(z, p->y, p->z, p384_mod, p384_mp_mod);
26306     /* Z = 2Z */
26307     sp_384_mont_dbl_6(z, z, p384_mod);
26308     /* T2 = X - T1 */
26309     sp_384_mont_sub_6(t2, p->x, t1, p384_mod);
26310     /* T1 = X + T1 */
26311     sp_384_mont_add_6(t1, p->x, t1, p384_mod);
26312     /* T2 = T1 * T2 */
26313     sp_384_mont_mul_6(t2, t1, t2, p384_mod, p384_mp_mod);
26314     /* T1 = 3T2 */
26315     sp_384_mont_tpl_6(t1, t2, p384_mod);
26316     /* Y = 2Y */
26317     sp_384_mont_dbl_6(y, p->y, p384_mod);
26318     /* Y = Y * Y */
26319     sp_384_mont_sqr_6(y, y, p384_mod, p384_mp_mod);
26320     /* T2 = Y * Y */
26321     sp_384_mont_sqr_6(t2, y, p384_mod, p384_mp_mod);
26322     /* T2 = T2/2 */
26323     sp_384_div2_6(t2, t2, p384_mod);
26324     /* Y = Y * X */
26325     sp_384_mont_mul_6(y, y, p->x, p384_mod, p384_mp_mod);
26326     /* X = T1 * T1 */
26327     sp_384_mont_sqr_6(x, t1, p384_mod, p384_mp_mod);
26328     /* X = X - Y */
26329     sp_384_mont_sub_6(x, x, y, p384_mod);
26330     /* X = X - Y */
26331     sp_384_mont_sub_6(x, x, y, p384_mod);
26332     /* Y = Y - X */
26333     sp_384_mont_sub_6(y, y, x, p384_mod);
26334     /* Y = Y * T1 */
26335     sp_384_mont_mul_6(y, y, t1, p384_mod, p384_mp_mod);
26336     /* Y = Y - T2 */
26337     sp_384_mont_sub_6(y, y, t2, p384_mod);
26338 }
26339 
26340 /* Double the Montgomery form projective point p a number of times.
26341  *
26342  * r  Result of repeated doubling of point.
26343  * p  Point to double.
26344  * n  Number of times to double
26345  * t  Temporary ordinate data.
26346  */
sp_384_proj_point_dbl_n_6(sp_point_384 * p,int n,sp_digit * t)26347 static void sp_384_proj_point_dbl_n_6(sp_point_384* p, int n,
26348     sp_digit* t)
26349 {
26350     sp_digit* w = t;
26351     sp_digit* a = t + 2*6;
26352     sp_digit* b = t + 4*6;
26353     sp_digit* t1 = t + 6*6;
26354     sp_digit* t2 = t + 8*6;
26355     sp_digit* x;
26356     sp_digit* y;
26357     sp_digit* z;
26358 
26359     x = p->x;
26360     y = p->y;
26361     z = p->z;
26362 
26363     /* Y = 2*Y */
26364     sp_384_mont_dbl_6(y, y, p384_mod);
26365     /* W = Z^4 */
26366     sp_384_mont_sqr_6(w, z, p384_mod, p384_mp_mod);
26367     sp_384_mont_sqr_6(w, w, p384_mod, p384_mp_mod);
26368 
26369 #ifndef WOLFSSL_SP_SMALL
26370     while (--n > 0)
26371 #else
26372     while (--n >= 0)
26373 #endif
26374     {
26375         /* A = 3*(X^2 - W) */
26376         sp_384_mont_sqr_6(t1, x, p384_mod, p384_mp_mod);
26377         sp_384_mont_sub_6(t1, t1, w, p384_mod);
26378         sp_384_mont_tpl_6(a, t1, p384_mod);
26379         /* B = X*Y^2 */
26380         sp_384_mont_sqr_6(t1, y, p384_mod, p384_mp_mod);
26381         sp_384_mont_mul_6(b, t1, x, p384_mod, p384_mp_mod);
26382         /* X = A^2 - 2B */
26383         sp_384_mont_sqr_6(x, a, p384_mod, p384_mp_mod);
26384         sp_384_mont_dbl_6(t2, b, p384_mod);
26385         sp_384_mont_sub_6(x, x, t2, p384_mod);
26386         /* Z = Z*Y */
26387         sp_384_mont_mul_6(z, z, y, p384_mod, p384_mp_mod);
26388         /* t2 = Y^4 */
26389         sp_384_mont_sqr_6(t1, t1, p384_mod, p384_mp_mod);
26390 #ifdef WOLFSSL_SP_SMALL
26391         if (n != 0)
26392 #endif
26393         {
26394             /* W = W*Y^4 */
26395             sp_384_mont_mul_6(w, w, t1, p384_mod, p384_mp_mod);
26396         }
26397         /* y = 2*A*(B - X) - Y^4 */
26398         sp_384_mont_sub_6(y, b, x, p384_mod);
26399         sp_384_mont_mul_6(y, y, a, p384_mod, p384_mp_mod);
26400         sp_384_mont_dbl_6(y, y, p384_mod);
26401         sp_384_mont_sub_6(y, y, t1, p384_mod);
26402     }
26403 #ifndef WOLFSSL_SP_SMALL
26404     /* A = 3*(X^2 - W) */
26405     sp_384_mont_sqr_6(t1, x, p384_mod, p384_mp_mod);
26406     sp_384_mont_sub_6(t1, t1, w, p384_mod);
26407     sp_384_mont_tpl_6(a, t1, p384_mod);
26408     /* B = X*Y^2 */
26409     sp_384_mont_sqr_6(t1, y, p384_mod, p384_mp_mod);
26410     sp_384_mont_mul_6(b, t1, x, p384_mod, p384_mp_mod);
26411     /* X = A^2 - 2B */
26412     sp_384_mont_sqr_6(x, a, p384_mod, p384_mp_mod);
26413     sp_384_mont_dbl_6(t2, b, p384_mod);
26414     sp_384_mont_sub_6(x, x, t2, p384_mod);
26415     /* Z = Z*Y */
26416     sp_384_mont_mul_6(z, z, y, p384_mod, p384_mp_mod);
26417     /* t2 = Y^4 */
26418     sp_384_mont_sqr_6(t1, t1, p384_mod, p384_mp_mod);
26419     /* y = 2*A*(B - X) - Y^4 */
26420     sp_384_mont_sub_6(y, b, x, p384_mod);
26421     sp_384_mont_mul_6(y, y, a, p384_mod, p384_mp_mod);
26422     sp_384_mont_dbl_6(y, y, p384_mod);
26423     sp_384_mont_sub_6(y, y, t1, p384_mod);
26424 #endif
26425     /* Y = Y/2 */
26426     sp_384_div2_6(y, y, p384_mod);
26427 }
26428 
26429 /* Compare two numbers to determine if they are equal.
26430  * Constant time implementation.
26431  *
26432  * a  First number to compare.
26433  * b  Second number to compare.
26434  * returns 1 when equal and 0 otherwise.
26435  */
sp_384_cmp_equal_6(const sp_digit * a,const sp_digit * b)26436 static int sp_384_cmp_equal_6(const sp_digit* a, const sp_digit* b)
26437 {
26438     return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2]) |
26439             (a[3] ^ b[3]) | (a[4] ^ b[4]) | (a[5] ^ b[5])) == 0;
26440 }
26441 
26442 /* Add two Montgomery form projective points.
26443  *
26444  * r  Result of addition.
26445  * p  First point to add.
26446  * q  Second point to add.
26447  * t  Temporary ordinate data.
26448  */
26449 
26450 #ifdef WOLFSSL_SP_NONBLOCK
26451 typedef struct sp_384_proj_point_add_6_ctx {
26452     int state;
26453     sp_384_proj_point_dbl_6_ctx dbl_ctx;
26454     const sp_point_384* ap[2];
26455     sp_point_384* rp[2];
26456     sp_digit* t1;
26457     sp_digit* t2;
26458     sp_digit* t3;
26459     sp_digit* t4;
26460     sp_digit* t5;
26461     sp_digit* x;
26462     sp_digit* y;
26463     sp_digit* z;
26464 } sp_384_proj_point_add_6_ctx;
26465 
sp_384_proj_point_add_6_nb(sp_ecc_ctx_t * sp_ctx,sp_point_384 * r,const sp_point_384 * p,const sp_point_384 * q,sp_digit * t)26466 static int sp_384_proj_point_add_6_nb(sp_ecc_ctx_t* sp_ctx, sp_point_384* r,
26467     const sp_point_384* p, const sp_point_384* q, sp_digit* t)
26468 {
26469     int err = FP_WOULDBLOCK;
26470     sp_384_proj_point_add_6_ctx* ctx = (sp_384_proj_point_add_6_ctx*)sp_ctx->data;
26471 
26472     /* Ensure only the first point is the same as the result. */
26473     if (q == r) {
26474         const sp_point_384* a = p;
26475         p = q;
26476         q = a;
26477     }
26478 
26479     typedef char ctx_size_test[sizeof(sp_384_proj_point_add_6_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
26480     (void)sizeof(ctx_size_test);
26481 
26482     switch (ctx->state) {
26483     case 0: /* INIT */
26484         ctx->t1 = t;
26485         ctx->t2 = t + 2*6;
26486         ctx->t3 = t + 4*6;
26487         ctx->t4 = t + 6*6;
26488         ctx->t5 = t + 8*6;
26489 
26490         ctx->state = 1;
26491         break;
26492     case 1:
26493         /* Check double */
26494         (void)sp_384_sub_6(ctx->t1, p384_mod, q->y);
26495         sp_384_norm_6(ctx->t1);
26496         if ((sp_384_cmp_equal_6(p->x, q->x) & sp_384_cmp_equal_6(p->z, q->z) &
26497             (sp_384_cmp_equal_6(p->y, q->y) | sp_384_cmp_equal_6(p->y, ctx->t1))) != 0)
26498         {
26499             XMEMSET(&ctx->dbl_ctx, 0, sizeof(ctx->dbl_ctx));
26500             ctx->state = 2;
26501         }
26502         else {
26503             ctx->state = 3;
26504         }
26505         break;
26506     case 2:
26507         err = sp_384_proj_point_dbl_6_nb((sp_ecc_ctx_t*)&ctx->dbl_ctx, r, p, t);
26508         if (err == MP_OKAY)
26509             ctx->state = 27; /* done */
26510         break;
26511     case 3:
26512     {
26513         int i;
26514         ctx->rp[0] = r;
26515 
26516         /*lint allow cast to different type of pointer*/
26517         ctx->rp[1] = (sp_point_384*)t; /*lint !e9087 !e740*/
26518         XMEMSET(ctx->rp[1], 0, sizeof(sp_point_384));
26519         ctx->x = ctx->rp[p->infinity | q->infinity]->x;
26520         ctx->y = ctx->rp[p->infinity | q->infinity]->y;
26521         ctx->z = ctx->rp[p->infinity | q->infinity]->z;
26522 
26523         ctx->ap[0] = p;
26524         ctx->ap[1] = q;
26525         for (i=0; i<6; i++) {
26526             r->x[i] = ctx->ap[p->infinity]->x[i];
26527         }
26528         for (i=0; i<6; i++) {
26529             r->y[i] = ctx->ap[p->infinity]->y[i];
26530         }
26531         for (i=0; i<6; i++) {
26532             r->z[i] = ctx->ap[p->infinity]->z[i];
26533         }
26534         r->infinity = ctx->ap[p->infinity]->infinity;
26535 
26536         ctx->state = 4;
26537         break;
26538     }
26539     case 4:
26540         /* U1 = X1*Z2^2 */
26541         sp_384_mont_sqr_6(ctx->t1, q->z, p384_mod, p384_mp_mod);
26542         ctx->state = 5;
26543         break;
26544     case 5:
26545         sp_384_mont_mul_6(ctx->t3, ctx->t1, q->z, p384_mod, p384_mp_mod);
26546         ctx->state = 6;
26547         break;
26548     case 6:
26549         sp_384_mont_mul_6(ctx->t1, ctx->t1, ctx->x, p384_mod, p384_mp_mod);
26550         ctx->state = 7;
26551         break;
26552     case 7:
26553         /* U2 = X2*Z1^2 */
26554         sp_384_mont_sqr_6(ctx->t2, ctx->z, p384_mod, p384_mp_mod);
26555         ctx->state = 8;
26556         break;
26557     case 8:
26558         sp_384_mont_mul_6(ctx->t4, ctx->t2, ctx->z, p384_mod, p384_mp_mod);
26559         ctx->state = 9;
26560         break;
26561     case 9:
26562         sp_384_mont_mul_6(ctx->t2, ctx->t2, q->x, p384_mod, p384_mp_mod);
26563         ctx->state = 10;
26564         break;
26565     case 10:
26566         /* S1 = Y1*Z2^3 */
26567         sp_384_mont_mul_6(ctx->t3, ctx->t3, ctx->y, p384_mod, p384_mp_mod);
26568         ctx->state = 11;
26569         break;
26570     case 11:
26571         /* S2 = Y2*Z1^3 */
26572         sp_384_mont_mul_6(ctx->t4, ctx->t4, q->y, p384_mod, p384_mp_mod);
26573         ctx->state = 12;
26574         break;
26575     case 12:
26576         /* H = U2 - U1 */
26577         sp_384_mont_sub_6(ctx->t2, ctx->t2, ctx->t1, p384_mod);
26578         ctx->state = 13;
26579         break;
26580     case 13:
26581         /* R = S2 - S1 */
26582         sp_384_mont_sub_6(ctx->t4, ctx->t4, ctx->t3, p384_mod);
26583         ctx->state = 14;
26584         break;
26585     case 14:
26586         /* Z3 = H*Z1*Z2 */
26587         sp_384_mont_mul_6(ctx->z, ctx->z, q->z, p384_mod, p384_mp_mod);
26588         ctx->state = 15;
26589         break;
26590     case 15:
26591         sp_384_mont_mul_6(ctx->z, ctx->z, ctx->t2, p384_mod, p384_mp_mod);
26592         ctx->state = 16;
26593         break;
26594     case 16:
26595         /* X3 = R^2 - H^3 - 2*U1*H^2 */
26596         sp_384_mont_sqr_6(ctx->x, ctx->t4, p384_mod, p384_mp_mod);
26597         ctx->state = 17;
26598         break;
26599     case 17:
26600         sp_384_mont_sqr_6(ctx->t5, ctx->t2, p384_mod, p384_mp_mod);
26601         ctx->state = 18;
26602         break;
26603     case 18:
26604         sp_384_mont_mul_6(ctx->y, ctx->t1, ctx->t5, p384_mod, p384_mp_mod);
26605         ctx->state = 19;
26606         break;
26607     case 19:
26608         sp_384_mont_mul_6(ctx->t5, ctx->t5, ctx->t2, p384_mod, p384_mp_mod);
26609         ctx->state = 20;
26610         break;
26611     case 20:
26612         sp_384_mont_sub_6(ctx->x, ctx->x, ctx->t5, p384_mod);
26613         ctx->state = 21;
26614         break;
26615     case 21:
26616         sp_384_mont_dbl_6(ctx->t1, ctx->y, p384_mod);
26617         ctx->state = 22;
26618         break;
26619     case 22:
26620         sp_384_mont_sub_6(ctx->x, ctx->x, ctx->t1, p384_mod);
26621         ctx->state = 23;
26622         break;
26623     case 23:
26624         /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
26625         sp_384_mont_sub_6(ctx->y, ctx->y, ctx->x, p384_mod);
26626         ctx->state = 24;
26627         break;
26628     case 24:
26629         sp_384_mont_mul_6(ctx->y, ctx->y, ctx->t4, p384_mod, p384_mp_mod);
26630         ctx->state = 25;
26631         break;
26632     case 25:
26633         sp_384_mont_mul_6(ctx->t5, ctx->t5, ctx->t3, p384_mod, p384_mp_mod);
26634         ctx->state = 26;
26635         break;
26636     case 26:
26637         sp_384_mont_sub_6(ctx->y, ctx->y, ctx->t5, p384_mod);
26638         ctx->state = 27;
26639         /* fall-through */
26640     case 27:
26641         err = MP_OKAY;
26642         break;
26643     }
26644 
26645     if (err == MP_OKAY && ctx->state != 27) {
26646         err = FP_WOULDBLOCK;
26647     }
26648     return err;
26649 }
26650 #endif /* WOLFSSL_SP_NONBLOCK */
26651 
sp_384_proj_point_add_6(sp_point_384 * r,const sp_point_384 * p,const sp_point_384 * q,sp_digit * t)26652 static void sp_384_proj_point_add_6(sp_point_384* r,
26653         const sp_point_384* p, const sp_point_384* q, sp_digit* t)
26654 {
26655     const sp_point_384* ap[2];
26656     sp_point_384* rp[2];
26657     sp_digit* t1 = t;
26658     sp_digit* t2 = t + 2*6;
26659     sp_digit* t3 = t + 4*6;
26660     sp_digit* t4 = t + 6*6;
26661     sp_digit* t5 = t + 8*6;
26662     sp_digit* x;
26663     sp_digit* y;
26664     sp_digit* z;
26665     int i;
26666 
26667     /* Ensure only the first point is the same as the result. */
26668     if (q == r) {
26669         const sp_point_384* a = p;
26670         p = q;
26671         q = a;
26672     }
26673 
26674     /* Check double */
26675     (void)sp_384_sub_6(t1, p384_mod, q->y);
26676     sp_384_norm_6(t1);
26677     if ((sp_384_cmp_equal_6(p->x, q->x) & sp_384_cmp_equal_6(p->z, q->z) &
26678         (sp_384_cmp_equal_6(p->y, q->y) | sp_384_cmp_equal_6(p->y, t1))) != 0) {
26679         sp_384_proj_point_dbl_6(r, p, t);
26680     }
26681     else {
26682         rp[0] = r;
26683 
26684         /*lint allow cast to different type of pointer*/
26685         rp[1] = (sp_point_384*)t; /*lint !e9087 !e740*/
26686         XMEMSET(rp[1], 0, sizeof(sp_point_384));
26687         x = rp[p->infinity | q->infinity]->x;
26688         y = rp[p->infinity | q->infinity]->y;
26689         z = rp[p->infinity | q->infinity]->z;
26690 
26691         ap[0] = p;
26692         ap[1] = q;
26693         for (i=0; i<6; i++) {
26694             r->x[i] = ap[p->infinity]->x[i];
26695         }
26696         for (i=0; i<6; i++) {
26697             r->y[i] = ap[p->infinity]->y[i];
26698         }
26699         for (i=0; i<6; i++) {
26700             r->z[i] = ap[p->infinity]->z[i];
26701         }
26702         r->infinity = ap[p->infinity]->infinity;
26703 
26704         /* U1 = X1*Z2^2 */
26705         sp_384_mont_sqr_6(t1, q->z, p384_mod, p384_mp_mod);
26706         sp_384_mont_mul_6(t3, t1, q->z, p384_mod, p384_mp_mod);
26707         sp_384_mont_mul_6(t1, t1, x, p384_mod, p384_mp_mod);
26708         /* U2 = X2*Z1^2 */
26709         sp_384_mont_sqr_6(t2, z, p384_mod, p384_mp_mod);
26710         sp_384_mont_mul_6(t4, t2, z, p384_mod, p384_mp_mod);
26711         sp_384_mont_mul_6(t2, t2, q->x, p384_mod, p384_mp_mod);
26712         /* S1 = Y1*Z2^3 */
26713         sp_384_mont_mul_6(t3, t3, y, p384_mod, p384_mp_mod);
26714         /* S2 = Y2*Z1^3 */
26715         sp_384_mont_mul_6(t4, t4, q->y, p384_mod, p384_mp_mod);
26716         /* H = U2 - U1 */
26717         sp_384_mont_sub_6(t2, t2, t1, p384_mod);
26718         /* R = S2 - S1 */
26719         sp_384_mont_sub_6(t4, t4, t3, p384_mod);
26720         /* Z3 = H*Z1*Z2 */
26721         sp_384_mont_mul_6(z, z, q->z, p384_mod, p384_mp_mod);
26722         sp_384_mont_mul_6(z, z, t2, p384_mod, p384_mp_mod);
26723         /* X3 = R^2 - H^3 - 2*U1*H^2 */
26724         sp_384_mont_sqr_6(x, t4, p384_mod, p384_mp_mod);
26725         sp_384_mont_sqr_6(t5, t2, p384_mod, p384_mp_mod);
26726         sp_384_mont_mul_6(y, t1, t5, p384_mod, p384_mp_mod);
26727         sp_384_mont_mul_6(t5, t5, t2, p384_mod, p384_mp_mod);
26728         sp_384_mont_sub_6(x, x, t5, p384_mod);
26729         sp_384_mont_dbl_6(t1, y, p384_mod);
26730         sp_384_mont_sub_6(x, x, t1, p384_mod);
26731         /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
26732         sp_384_mont_sub_6(y, y, x, p384_mod);
26733         sp_384_mont_mul_6(y, y, t4, p384_mod, p384_mp_mod);
26734         sp_384_mont_mul_6(t5, t5, t3, p384_mod, p384_mp_mod);
26735         sp_384_mont_sub_6(y, y, t5, p384_mod);
26736     }
26737 }
26738 
26739 /* Double the Montgomery form projective point p a number of times.
26740  *
26741  * r  Result of repeated doubling of point.
26742  * p  Point to double.
26743  * n  Number of times to double
26744  * t  Temporary ordinate data.
26745  */
sp_384_proj_point_dbl_n_store_6(sp_point_384 * r,const sp_point_384 * p,int n,int m,sp_digit * t)26746 static void sp_384_proj_point_dbl_n_store_6(sp_point_384* r,
26747         const sp_point_384* p, int n, int m, sp_digit* t)
26748 {
26749     sp_digit* w = t;
26750     sp_digit* a = t + 2*6;
26751     sp_digit* b = t + 4*6;
26752     sp_digit* t1 = t + 6*6;
26753     sp_digit* t2 = t + 8*6;
26754     sp_digit* x = r[2*m].x;
26755     sp_digit* y = r[(1<<n)*m].y;
26756     sp_digit* z = r[2*m].z;
26757     int i;
26758     int j;
26759 
26760     for (i=0; i<6; i++) {
26761         x[i] = p->x[i];
26762     }
26763     for (i=0; i<6; i++) {
26764         y[i] = p->y[i];
26765     }
26766     for (i=0; i<6; i++) {
26767         z[i] = p->z[i];
26768     }
26769 
26770     /* Y = 2*Y */
26771     sp_384_mont_dbl_6(y, y, p384_mod);
26772     /* W = Z^4 */
26773     sp_384_mont_sqr_6(w, z, p384_mod, p384_mp_mod);
26774     sp_384_mont_sqr_6(w, w, p384_mod, p384_mp_mod);
26775     j = m;
26776     for (i=1; i<=n; i++) {
26777         j *= 2;
26778 
26779         /* A = 3*(X^2 - W) */
26780         sp_384_mont_sqr_6(t1, x, p384_mod, p384_mp_mod);
26781         sp_384_mont_sub_6(t1, t1, w, p384_mod);
26782         sp_384_mont_tpl_6(a, t1, p384_mod);
26783         /* B = X*Y^2 */
26784         sp_384_mont_sqr_6(t2, y, p384_mod, p384_mp_mod);
26785         sp_384_mont_mul_6(b, t2, x, p384_mod, p384_mp_mod);
26786         x = r[j].x;
26787         /* X = A^2 - 2B */
26788         sp_384_mont_sqr_6(x, a, p384_mod, p384_mp_mod);
26789         sp_384_mont_dbl_6(t1, b, p384_mod);
26790         sp_384_mont_sub_6(x, x, t1, p384_mod);
26791         /* Z = Z*Y */
26792         sp_384_mont_mul_6(r[j].z, z, y, p384_mod, p384_mp_mod);
26793         z = r[j].z;
26794         /* t2 = Y^4 */
26795         sp_384_mont_sqr_6(t2, t2, p384_mod, p384_mp_mod);
26796         if (i != n) {
26797             /* W = W*Y^4 */
26798             sp_384_mont_mul_6(w, w, t2, p384_mod, p384_mp_mod);
26799         }
26800         /* y = 2*A*(B - X) - Y^4 */
26801         sp_384_mont_sub_6(y, b, x, p384_mod);
26802         sp_384_mont_mul_6(y, y, a, p384_mod, p384_mp_mod);
26803         sp_384_mont_dbl_6(y, y, p384_mod);
26804         sp_384_mont_sub_6(y, y, t2, p384_mod);
26805 
26806         /* Y = Y/2 */
26807         sp_384_div2_6(r[j].y, y, p384_mod);
26808         r[j].infinity = 0;
26809     }
26810 }
26811 
26812 /* Add two Montgomery form projective points.
26813  *
26814  * ra  Result of addition.
26815  * rs  Result of subtraction.
26816  * p   First point to add.
26817  * q   Second point to add.
26818  * t   Temporary ordinate data.
26819  */
sp_384_proj_point_add_sub_6(sp_point_384 * ra,sp_point_384 * rs,const sp_point_384 * p,const sp_point_384 * q,sp_digit * t)26820 static void sp_384_proj_point_add_sub_6(sp_point_384* ra,
26821         sp_point_384* rs, const sp_point_384* p, const sp_point_384* q,
26822         sp_digit* t)
26823 {
26824     sp_digit* t1 = t;
26825     sp_digit* t2 = t + 2*6;
26826     sp_digit* t3 = t + 4*6;
26827     sp_digit* t4 = t + 6*6;
26828     sp_digit* t5 = t + 8*6;
26829     sp_digit* t6 = t + 10*6;
26830     sp_digit* x = ra->x;
26831     sp_digit* y = ra->y;
26832     sp_digit* z = ra->z;
26833     sp_digit* xs = rs->x;
26834     sp_digit* ys = rs->y;
26835     sp_digit* zs = rs->z;
26836 
26837 
26838     XMEMCPY(x, p->x, sizeof(p->x) / 2);
26839     XMEMCPY(y, p->y, sizeof(p->y) / 2);
26840     XMEMCPY(z, p->z, sizeof(p->z) / 2);
26841     ra->infinity = 0;
26842     rs->infinity = 0;
26843 
26844     /* U1 = X1*Z2^2 */
26845     sp_384_mont_sqr_6(t1, q->z, p384_mod, p384_mp_mod);
26846     sp_384_mont_mul_6(t3, t1, q->z, p384_mod, p384_mp_mod);
26847     sp_384_mont_mul_6(t1, t1, x, p384_mod, p384_mp_mod);
26848     /* U2 = X2*Z1^2 */
26849     sp_384_mont_sqr_6(t2, z, p384_mod, p384_mp_mod);
26850     sp_384_mont_mul_6(t4, t2, z, p384_mod, p384_mp_mod);
26851     sp_384_mont_mul_6(t2, t2, q->x, p384_mod, p384_mp_mod);
26852     /* S1 = Y1*Z2^3 */
26853     sp_384_mont_mul_6(t3, t3, y, p384_mod, p384_mp_mod);
26854     /* S2 = Y2*Z1^3 */
26855     sp_384_mont_mul_6(t4, t4, q->y, p384_mod, p384_mp_mod);
26856     /* H = U2 - U1 */
26857     sp_384_mont_sub_6(t2, t2, t1, p384_mod);
26858     /* RS = S2 + S1 */
26859     sp_384_mont_add_6(t6, t4, t3, p384_mod);
26860     /* R = S2 - S1 */
26861     sp_384_mont_sub_6(t4, t4, t3, p384_mod);
26862     /* Z3 = H*Z1*Z2 */
26863     /* ZS = H*Z1*Z2 */
26864     sp_384_mont_mul_6(z, z, q->z, p384_mod, p384_mp_mod);
26865     sp_384_mont_mul_6(z, z, t2, p384_mod, p384_mp_mod);
26866     XMEMCPY(zs, z, sizeof(p->z)/2);
26867     /* X3 = R^2 - H^3 - 2*U1*H^2 */
26868     /* XS = RS^2 - H^3 - 2*U1*H^2 */
26869     sp_384_mont_sqr_6(x, t4, p384_mod, p384_mp_mod);
26870     sp_384_mont_sqr_6(xs, t6, p384_mod, p384_mp_mod);
26871     sp_384_mont_sqr_6(t5, t2, p384_mod, p384_mp_mod);
26872     sp_384_mont_mul_6(y, t1, t5, p384_mod, p384_mp_mod);
26873     sp_384_mont_mul_6(t5, t5, t2, p384_mod, p384_mp_mod);
26874     sp_384_mont_sub_6(x, x, t5, p384_mod);
26875     sp_384_mont_sub_6(xs, xs, t5, p384_mod);
26876     sp_384_mont_dbl_6(t1, y, p384_mod);
26877     sp_384_mont_sub_6(x, x, t1, p384_mod);
26878     sp_384_mont_sub_6(xs, xs, t1, p384_mod);
26879     /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
26880     /* YS = -RS*(U1*H^2 - XS) - S1*H^3 */
26881     sp_384_mont_sub_6(ys, y, xs, p384_mod);
26882     sp_384_mont_sub_6(y, y, x, p384_mod);
26883     sp_384_mont_mul_6(y, y, t4, p384_mod, p384_mp_mod);
26884     sp_384_sub_6(t6, p384_mod, t6);
26885     sp_384_mont_mul_6(ys, ys, t6, p384_mod, p384_mp_mod);
26886     sp_384_mont_mul_6(t5, t5, t3, p384_mod, p384_mp_mod);
26887     sp_384_mont_sub_6(y, y, t5, p384_mod);
26888     sp_384_mont_sub_6(ys, ys, t5, p384_mod);
26889 }
26890 
26891 /* Structure used to describe recoding of scalar multiplication. */
26892 typedef struct ecc_recode_384 {
26893     /* Index into pre-computation table. */
26894     uint8_t i;
26895     /* Use the negative of the point. */
26896     uint8_t neg;
26897 } ecc_recode_384;
26898 
26899 /* The index into pre-computation table to use. */
26900 static const uint8_t recode_index_6_6[66] = {
26901      0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
26902     16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
26903     32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17,
26904     16, 15, 14, 13, 12, 11, 10,  9,  8,  7,  6,  5,  4,  3,  2,  1,
26905      0,  1,
26906 };
26907 
26908 /* Whether to negate y-ordinate. */
26909 static const uint8_t recode_neg_6_6[66] = {
26910      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
26911      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
26912      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
26913      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
26914      0,  0,
26915 };
26916 
26917 /* Recode the scalar for multiplication using pre-computed values and
26918  * subtraction.
26919  *
26920  * k  Scalar to multiply by.
26921  * v  Vector of operations to perform.
26922  */
sp_384_ecc_recode_6_6(const sp_digit * k,ecc_recode_384 * v)26923 static void sp_384_ecc_recode_6_6(const sp_digit* k, ecc_recode_384* v)
26924 {
26925     int i;
26926     int j;
26927     uint8_t y;
26928     int carry = 0;
26929     int o;
26930     sp_digit n;
26931 
26932     j = 0;
26933     n = k[j];
26934     o = 0;
26935     for (i=0; i<65; i++) {
26936         y = (int8_t)n;
26937         if (o + 6 < 64) {
26938             y &= 0x3f;
26939             n >>= 6;
26940             o += 6;
26941         }
26942         else if (o + 6 == 64) {
26943             n >>= 6;
26944             if (++j < 6)
26945                 n = k[j];
26946             o = 0;
26947         }
26948         else if (++j < 6) {
26949             n = k[j];
26950             y |= (uint8_t)((n << (64 - o)) & 0x3f);
26951             o -= 58;
26952             n >>= o;
26953         }
26954 
26955         y += (uint8_t)carry;
26956         v[i].i = recode_index_6_6[y];
26957         v[i].neg = recode_neg_6_6[y];
26958         carry = (y >> 6) + v[i].neg;
26959     }
26960 }
26961 
26962 extern void sp_384_get_point_33_6(sp_point_384* r, const sp_point_384* table, int idx);
26963 extern void sp_384_get_point_33_avx2_6(sp_point_384* r, const sp_point_384* table, int idx);
26964 /* Multiply the point by the scalar and return the result.
26965  * If map is true then convert result to affine coordinates.
26966  *
26967  * Window technique of 6 bits. (Add-Sub variation.)
26968  * Calculate 0..32 times the point. Use function that adds and
26969  * subtracts the same two points.
26970  * Recode to add or subtract one of the computed points.
26971  * Double to push up.
26972  * NOT a sliding window.
26973  *
26974  * r     Resulting point.
26975  * g     Point to multiply.
26976  * k     Scalar to multiply by.
26977  * map   Indicates whether to convert result to affine.
26978  * ct    Constant time required.
26979  * heap  Heap to use for allocation.
26980  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
26981  */
sp_384_ecc_mulmod_win_add_sub_6(sp_point_384 * r,const sp_point_384 * g,const sp_digit * k,int map,int ct,void * heap)26982 static int sp_384_ecc_mulmod_win_add_sub_6(sp_point_384* r, const sp_point_384* g,
26983         const sp_digit* k, int map, int ct, void* heap)
26984 {
26985 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
26986     sp_point_384* t = NULL;
26987     sp_digit* tmp = NULL;
26988 #else
26989     sp_point_384 t[33+2];
26990     sp_digit tmp[2 * 6 * 6];
26991 #endif
26992     sp_point_384* rt = NULL;
26993     sp_point_384* p = NULL;
26994     sp_digit* negy;
26995     int i;
26996     ecc_recode_384 v[65];
26997     int err = MP_OKAY;
26998 
26999     /* Constant time used for cache attack resistance implementation. */
27000     (void)ct;
27001     (void)heap;
27002 
27003 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
27004     t = (sp_point_384*)XMALLOC(sizeof(sp_point_384) *
27005         (33+2), heap, DYNAMIC_TYPE_ECC);
27006     if (t == NULL)
27007         err = MEMORY_E;
27008     if (err == MP_OKAY) {
27009         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 6 * 6,
27010                                  heap, DYNAMIC_TYPE_ECC);
27011         if (tmp == NULL)
27012             err = MEMORY_E;
27013     }
27014 #endif
27015 
27016     if (err == MP_OKAY) {
27017         rt = t + 33;
27018         p  = t + 33+1;
27019 
27020         /* t[0] = {0, 0, 1} * norm */
27021         XMEMSET(&t[0], 0, sizeof(t[0]));
27022         t[0].infinity = 1;
27023         /* t[1] = {g->x, g->y, g->z} * norm */
27024         err = sp_384_mod_mul_norm_6(t[1].x, g->x, p384_mod);
27025     }
27026     if (err == MP_OKAY) {
27027         err = sp_384_mod_mul_norm_6(t[1].y, g->y, p384_mod);
27028     }
27029     if (err == MP_OKAY) {
27030         err = sp_384_mod_mul_norm_6(t[1].z, g->z, p384_mod);
27031     }
27032 
27033     if (err == MP_OKAY) {
27034         t[1].infinity = 0;
27035         /* t[2] ... t[32]  */
27036         sp_384_proj_point_dbl_n_store_6(t, &t[ 1], 5, 1, tmp);
27037         sp_384_proj_point_add_6(&t[ 3], &t[ 2], &t[ 1], tmp);
27038         sp_384_proj_point_dbl_6(&t[ 6], &t[ 3], tmp);
27039         sp_384_proj_point_add_sub_6(&t[ 7], &t[ 5], &t[ 6], &t[ 1], tmp);
27040         sp_384_proj_point_dbl_6(&t[10], &t[ 5], tmp);
27041         sp_384_proj_point_add_sub_6(&t[11], &t[ 9], &t[10], &t[ 1], tmp);
27042         sp_384_proj_point_dbl_6(&t[12], &t[ 6], tmp);
27043         sp_384_proj_point_dbl_6(&t[14], &t[ 7], tmp);
27044         sp_384_proj_point_add_sub_6(&t[15], &t[13], &t[14], &t[ 1], tmp);
27045         sp_384_proj_point_dbl_6(&t[18], &t[ 9], tmp);
27046         sp_384_proj_point_add_sub_6(&t[19], &t[17], &t[18], &t[ 1], tmp);
27047         sp_384_proj_point_dbl_6(&t[20], &t[10], tmp);
27048         sp_384_proj_point_dbl_6(&t[22], &t[11], tmp);
27049         sp_384_proj_point_add_sub_6(&t[23], &t[21], &t[22], &t[ 1], tmp);
27050         sp_384_proj_point_dbl_6(&t[24], &t[12], tmp);
27051         sp_384_proj_point_dbl_6(&t[26], &t[13], tmp);
27052         sp_384_proj_point_add_sub_6(&t[27], &t[25], &t[26], &t[ 1], tmp);
27053         sp_384_proj_point_dbl_6(&t[28], &t[14], tmp);
27054         sp_384_proj_point_dbl_6(&t[30], &t[15], tmp);
27055         sp_384_proj_point_add_sub_6(&t[31], &t[29], &t[30], &t[ 1], tmp);
27056 
27057         negy = t[0].y;
27058 
27059         sp_384_ecc_recode_6_6(k, v);
27060 
27061         i = 64;
27062     #ifndef WC_NO_CACHE_RESISTANT
27063         if (ct) {
27064             sp_384_get_point_33_6(rt, t, v[i].i);
27065             rt->infinity = !v[i].i;
27066         }
27067         else
27068     #endif
27069         {
27070             XMEMCPY(rt, &t[v[i].i], sizeof(sp_point_384));
27071         }
27072         for (--i; i>=0; i--) {
27073             sp_384_proj_point_dbl_n_6(rt, 6, tmp);
27074 
27075         #ifndef WC_NO_CACHE_RESISTANT
27076             if (ct) {
27077                 sp_384_get_point_33_6(p, t, v[i].i);
27078                 p->infinity = !v[i].i;
27079             }
27080             else
27081         #endif
27082             {
27083                 XMEMCPY(p, &t[v[i].i], sizeof(sp_point_384));
27084             }
27085             sp_384_sub_6(negy, p384_mod, p->y);
27086             sp_384_norm_6(negy);
27087             sp_384_cond_copy_6(p->y, negy, (sp_digit)0 - v[i].neg);
27088             sp_384_proj_point_add_6(rt, rt, p, tmp);
27089         }
27090 
27091         if (map != 0) {
27092             sp_384_map_6(r, rt, tmp);
27093         }
27094         else {
27095             XMEMCPY(r, rt, sizeof(sp_point_384));
27096         }
27097     }
27098 
27099 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
27100     if (t != NULL)
27101         XFREE(t, heap, DYNAMIC_TYPE_ECC);
27102     if (tmp != NULL)
27103         XFREE(tmp, heap, DYNAMIC_TYPE_ECC);
27104 #endif
27105 
27106     return err;
27107 }
27108 
27109 #ifdef HAVE_INTEL_AVX2
27110 #define sp_384_mod_mul_norm_avx2_6 sp_384_mod_mul_norm_6
27111 #ifdef HAVE_INTEL_AVX2
27112 extern void sp_384_mul_avx2_6(sp_digit* r, const sp_digit* a, const sp_digit* b);
27113 #define sp_384_mont_reduce_avx2_6         sp_384_mont_reduce_6
27114 extern void sp_384_mont_reduce_order_avx2_6(sp_digit* a, const sp_digit* m, sp_digit mp);
27115 /* Multiply two Montgomery form numbers mod the modulus (prime).
27116  * (r = a * b mod m)
27117  *
27118  * r   Result of multiplication.
27119  * a   First number to multiply in Montgomery form.
27120  * b   Second number to multiply in Montgomery form.
27121  * m   Modulus (prime).
27122  * mp  Montgomery mulitplier.
27123  */
sp_384_mont_mul_avx2_6(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)27124 static void sp_384_mont_mul_avx2_6(sp_digit* r, const sp_digit* a,
27125         const sp_digit* b, const sp_digit* m, sp_digit mp)
27126 {
27127     sp_384_mul_avx2_6(r, a, b);
27128     sp_384_mont_reduce_avx2_6(r, m, mp);
27129 }
27130 
27131 #endif /* HAVE_INTEL_AVX2 */
27132 #ifdef HAVE_INTEL_AVX2
27133 extern void sp_384_sqr_avx2_6(sp_digit* r, const sp_digit* a);
27134 /* Square the Montgomery form number. (r = a * a mod m)
27135  *
27136  * r   Result of squaring.
27137  * a   Number to square in Montgomery form.
27138  * m   Modulus (prime).
27139  * mp  Montgomery mulitplier.
27140  */
sp_384_mont_sqr_avx2_6(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)27141 static void sp_384_mont_sqr_avx2_6(sp_digit* r, const sp_digit* a,
27142         const sp_digit* m, sp_digit mp)
27143 {
27144     sp_384_sqr_avx2_6(r, a);
27145     sp_384_mont_reduce_avx2_6(r, m, mp);
27146 }
27147 
27148 #endif /* HAVE_INTEL_AVX2 */
27149 #if !defined(WOLFSSL_SP_SMALL) || defined(HAVE_COMP_KEY)
27150 /* Square the Montgomery form number a number of times. (r = a ^ n mod m)
27151  *
27152  * r   Result of squaring.
27153  * a   Number to square in Montgomery form.
27154  * n   Number of times to square.
27155  * m   Modulus (prime).
27156  * mp  Montgomery mulitplier.
27157  */
sp_384_mont_sqr_n_avx2_6(sp_digit * r,const sp_digit * a,int n,const sp_digit * m,sp_digit mp)27158 static void sp_384_mont_sqr_n_avx2_6(sp_digit* r, const sp_digit* a, int n,
27159         const sp_digit* m, sp_digit mp)
27160 {
27161     sp_384_mont_sqr_avx2_6(r, a, m, mp);
27162     for (; n > 1; n--) {
27163         sp_384_mont_sqr_avx2_6(r, r, m, mp);
27164     }
27165 }
27166 
27167 #endif /* !WOLFSSL_SP_SMALL | HAVE_COMP_KEY */
27168 
27169 /* Invert the number, in Montgomery form, modulo the modulus (prime) of the
27170  * P384 curve. (r = 1 / a mod m)
27171  *
27172  * r   Inverse result.
27173  * a   Number to invert.
27174  * td  Temporary data.
27175  */
sp_384_mont_inv_avx2_6(sp_digit * r,const sp_digit * a,sp_digit * td)27176 static void sp_384_mont_inv_avx2_6(sp_digit* r, const sp_digit* a, sp_digit* td)
27177 {
27178 #ifdef WOLFSSL_SP_SMALL
27179     sp_digit* t = td;
27180     int i;
27181 
27182     XMEMCPY(t, a, sizeof(sp_digit) * 6);
27183     for (i=382; i>=0; i--) {
27184         sp_384_mont_sqr_avx2_6(t, t, p384_mod, p384_mp_mod);
27185         if (p384_mod_minus_2[i / 64] & ((sp_digit)1 << (i % 64)))
27186             sp_384_mont_mul_avx2_6(t, t, a, p384_mod, p384_mp_mod);
27187     }
27188     XMEMCPY(r, t, sizeof(sp_digit) * 6);
27189 #else
27190     sp_digit* t1 = td;
27191     sp_digit* t2 = td + 2 * 6;
27192     sp_digit* t3 = td + 4 * 6;
27193     sp_digit* t4 = td + 6 * 6;
27194     sp_digit* t5 = td + 8 * 6;
27195 
27196     /* 0x2 */
27197     sp_384_mont_sqr_avx2_6(t1, a, p384_mod, p384_mp_mod);
27198     /* 0x3 */
27199     sp_384_mont_mul_avx2_6(t5, t1, a, p384_mod, p384_mp_mod);
27200     /* 0xc */
27201     sp_384_mont_sqr_n_avx2_6(t1, t5, 2, p384_mod, p384_mp_mod);
27202     /* 0xf */
27203     sp_384_mont_mul_avx2_6(t2, t5, t1, p384_mod, p384_mp_mod);
27204     /* 0x1e */
27205     sp_384_mont_sqr_avx2_6(t1, t2, p384_mod, p384_mp_mod);
27206     /* 0x1f */
27207     sp_384_mont_mul_avx2_6(t4, t1, a, p384_mod, p384_mp_mod);
27208     /* 0x3e0 */
27209     sp_384_mont_sqr_n_avx2_6(t1, t4, 5, p384_mod, p384_mp_mod);
27210     /* 0x3ff */
27211     sp_384_mont_mul_avx2_6(t2, t4, t1, p384_mod, p384_mp_mod);
27212     /* 0x7fe0 */
27213     sp_384_mont_sqr_n_avx2_6(t1, t2, 5, p384_mod, p384_mp_mod);
27214     /* 0x7fff */
27215     sp_384_mont_mul_avx2_6(t4, t4, t1, p384_mod, p384_mp_mod);
27216     /* 0x3fff8000 */
27217     sp_384_mont_sqr_n_avx2_6(t1, t4, 15, p384_mod, p384_mp_mod);
27218     /* 0x3fffffff */
27219     sp_384_mont_mul_avx2_6(t2, t4, t1, p384_mod, p384_mp_mod);
27220     /* 0xfffffffc */
27221     sp_384_mont_sqr_n_avx2_6(t3, t2, 2, p384_mod, p384_mp_mod);
27222     /* 0xfffffffd */
27223     sp_384_mont_mul_avx2_6(r, t3, a, p384_mod, p384_mp_mod);
27224     /* 0xffffffff */
27225     sp_384_mont_mul_avx2_6(t3, t5, t3, p384_mod, p384_mp_mod);
27226     /* 0xfffffffc0000000 */
27227     sp_384_mont_sqr_n_avx2_6(t1, t2, 30, p384_mod, p384_mp_mod);
27228     /* 0xfffffffffffffff */
27229     sp_384_mont_mul_avx2_6(t2, t2, t1, p384_mod, p384_mp_mod);
27230     /* 0xfffffffffffffff000000000000000 */
27231     sp_384_mont_sqr_n_avx2_6(t1, t2, 60, p384_mod, p384_mp_mod);
27232     /* 0xffffffffffffffffffffffffffffff */
27233     sp_384_mont_mul_avx2_6(t2, t2, t1, p384_mod, p384_mp_mod);
27234     /* 0xffffffffffffffffffffffffffffff000000000000000000000000000000 */
27235     sp_384_mont_sqr_n_avx2_6(t1, t2, 120, p384_mod, p384_mp_mod);
27236     /* 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff */
27237     sp_384_mont_mul_avx2_6(t2, t2, t1, p384_mod, p384_mp_mod);
27238     /* 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000 */
27239     sp_384_mont_sqr_n_avx2_6(t1, t2, 15, p384_mod, p384_mp_mod);
27240     /* 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff */
27241     sp_384_mont_mul_avx2_6(t2, t4, t1, p384_mod, p384_mp_mod);
27242     /* 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000 */
27243     sp_384_mont_sqr_n_avx2_6(t1, t2, 33, p384_mod, p384_mp_mod);
27244     /* 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff */
27245     sp_384_mont_mul_avx2_6(t2, t3, t1, p384_mod, p384_mp_mod);
27246     /* 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000000000000 */
27247     sp_384_mont_sqr_n_avx2_6(t1, t2, 96, p384_mod, p384_mp_mod);
27248     /* 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffd */
27249     sp_384_mont_mul_avx2_6(r, r, t1, p384_mod, p384_mp_mod);
27250 
27251 #endif /* WOLFSSL_SP_SMALL */
27252 }
27253 
27254 extern sp_digit sp_384_cond_sub_avx2_6(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
27255 /* Map the Montgomery form projective coordinate point to an affine point.
27256  *
27257  * r  Resulting affine coordinate point.
27258  * p  Montgomery form projective coordinate point.
27259  * t  Temporary ordinate data.
27260  */
sp_384_map_avx2_6(sp_point_384 * r,const sp_point_384 * p,sp_digit * t)27261 static void sp_384_map_avx2_6(sp_point_384* r, const sp_point_384* p,
27262     sp_digit* t)
27263 {
27264     sp_digit* t1 = t;
27265     sp_digit* t2 = t + 2*6;
27266     sp_int64 n;
27267 
27268     sp_384_mont_inv_avx2_6(t1, p->z, t + 2*6);
27269 
27270     sp_384_mont_sqr_avx2_6(t2, t1, p384_mod, p384_mp_mod);
27271     sp_384_mont_mul_avx2_6(t1, t2, t1, p384_mod, p384_mp_mod);
27272 
27273     /* x /= z^2 */
27274     sp_384_mont_mul_avx2_6(r->x, p->x, t2, p384_mod, p384_mp_mod);
27275     XMEMSET(r->x + 6, 0, sizeof(r->x) / 2U);
27276     sp_384_mont_reduce_avx2_6(r->x, p384_mod, p384_mp_mod);
27277     /* Reduce x to less than modulus */
27278     n = sp_384_cmp_6(r->x, p384_mod);
27279     sp_384_cond_sub_6(r->x, r->x, p384_mod, 0 - ((n >= 0) ?
27280                 (sp_digit)1 : (sp_digit)0));
27281     sp_384_norm_6(r->x);
27282 
27283     /* y /= z^3 */
27284     sp_384_mont_mul_avx2_6(r->y, p->y, t1, p384_mod, p384_mp_mod);
27285     XMEMSET(r->y + 6, 0, sizeof(r->y) / 2U);
27286     sp_384_mont_reduce_avx2_6(r->y, p384_mod, p384_mp_mod);
27287     /* Reduce y to less than modulus */
27288     n = sp_384_cmp_6(r->y, p384_mod);
27289     sp_384_cond_sub_avx2_6(r->y, r->y, p384_mod, 0 - ((n >= 0) ?
27290                 (sp_digit)1 : (sp_digit)0));
27291     sp_384_norm_6(r->y);
27292 
27293     XMEMSET(r->z, 0, sizeof(r->z));
27294     r->z[0] = 1;
27295 
27296 }
27297 
27298 #define sp_384_mont_add_avx2_6 sp_384_mont_add_6
27299 #define sp_384_mont_dbl_avx2_6 sp_384_mont_dbl_6
27300 #define sp_384_mont_tpl_avx2_6 sp_384_mont_tpl_6
27301 #define sp_384_mont_sub_avx2_6 sp_384_mont_sub_6
27302 extern void sp_384_div2_avx2_6(sp_digit* r, const sp_digit* a, const sp_digit* m);
27303 /* Double the Montgomery form projective point p.
27304  *
27305  * r  Result of doubling point.
27306  * p  Point to double.
27307  * t  Temporary ordinate data.
27308  */
27309 #ifdef WOLFSSL_SP_NONBLOCK
27310 typedef struct sp_384_proj_point_dbl_avx2_6_ctx {
27311     int state;
27312     sp_digit* t1;
27313     sp_digit* t2;
27314     sp_digit* x;
27315     sp_digit* y;
27316     sp_digit* z;
27317 } sp_384_proj_point_dbl_avx2_6_ctx;
27318 
sp_384_proj_point_dbl_avx2_6_nb(sp_ecc_ctx_t * sp_ctx,sp_point_384 * r,const sp_point_384 * p,sp_digit * t)27319 static int sp_384_proj_point_dbl_avx2_6_nb(sp_ecc_ctx_t* sp_ctx, sp_point_384* r, const sp_point_384* p, sp_digit* t)
27320 {
27321     int err = FP_WOULDBLOCK;
27322     sp_384_proj_point_dbl_avx2_6_ctx* ctx = (sp_384_proj_point_dbl_avx2_6_ctx*)sp_ctx->data;
27323 
27324     typedef char ctx_size_test[sizeof(sp_384_proj_point_dbl_avx2_6_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
27325     (void)sizeof(ctx_size_test);
27326 
27327     switch (ctx->state) {
27328     case 0:
27329         ctx->t1 = t;
27330         ctx->t2 = t + 2*6;
27331         ctx->x = r->x;
27332         ctx->y = r->y;
27333         ctx->z = r->z;
27334 
27335         /* Put infinity into result. */
27336         if (r != p) {
27337             r->infinity = p->infinity;
27338         }
27339         ctx->state = 1;
27340         break;
27341     case 1:
27342         /* T1 = Z * Z */
27343         sp_384_mont_sqr_avx2_6(ctx->t1, p->z, p384_mod, p384_mp_mod);
27344         ctx->state = 2;
27345         break;
27346     case 2:
27347         /* Z = Y * Z */
27348         sp_384_mont_mul_avx2_6(ctx->z, p->y, p->z, p384_mod, p384_mp_mod);
27349         ctx->state = 3;
27350         break;
27351     case 3:
27352         /* Z = 2Z */
27353         sp_384_mont_dbl_avx2_6(ctx->z, ctx->z, p384_mod);
27354         ctx->state = 4;
27355         break;
27356     case 4:
27357         /* T2 = X - T1 */
27358         sp_384_mont_sub_avx2_6(ctx->t2, p->x, ctx->t1, p384_mod);
27359         ctx->state = 5;
27360         break;
27361     case 5:
27362         /* T1 = X + T1 */
27363         sp_384_mont_add_avx2_6(ctx->t1, p->x, ctx->t1, p384_mod);
27364         ctx->state = 6;
27365         break;
27366     case 6:
27367         /* T2 = T1 * T2 */
27368         sp_384_mont_mul_avx2_6(ctx->t2, ctx->t1, ctx->t2, p384_mod, p384_mp_mod);
27369         ctx->state = 7;
27370         break;
27371     case 7:
27372         /* T1 = 3T2 */
27373         sp_384_mont_tpl_avx2_6(ctx->t1, ctx->t2, p384_mod);
27374         ctx->state = 8;
27375         break;
27376     case 8:
27377         /* Y = 2Y */
27378         sp_384_mont_dbl_avx2_6(ctx->y, p->y, p384_mod);
27379         ctx->state = 9;
27380         break;
27381     case 9:
27382         /* Y = Y * Y */
27383         sp_384_mont_sqr_avx2_6(ctx->y, ctx->y, p384_mod, p384_mp_mod);
27384         ctx->state = 10;
27385         break;
27386     case 10:
27387         /* T2 = Y * Y */
27388         sp_384_mont_sqr_avx2_6(ctx->t2, ctx->y, p384_mod, p384_mp_mod);
27389         ctx->state = 11;
27390         break;
27391     case 11:
27392         /* T2 = T2/2 */
27393         sp_384_div2_avx2_6(ctx->t2, ctx->t2, p384_mod);
27394         ctx->state = 12;
27395         break;
27396     case 12:
27397         /* Y = Y * X */
27398         sp_384_mont_mul_avx2_6(ctx->y, ctx->y, p->x, p384_mod, p384_mp_mod);
27399         ctx->state = 13;
27400         break;
27401     case 13:
27402         /* X = T1 * T1 */
27403         sp_384_mont_sqr_avx2_6(ctx->x, ctx->t1, p384_mod, p384_mp_mod);
27404         ctx->state = 14;
27405         break;
27406     case 14:
27407         /* X = X - Y */
27408         sp_384_mont_sub_avx2_6(ctx->x, ctx->x, ctx->y, p384_mod);
27409         ctx->state = 15;
27410         break;
27411     case 15:
27412         /* X = X - Y */
27413         sp_384_mont_sub_avx2_6(ctx->x, ctx->x, ctx->y, p384_mod);
27414         ctx->state = 16;
27415         break;
27416     case 16:
27417         /* Y = Y - X */
27418         sp_384_mont_sub_avx2_6(ctx->y, ctx->y, ctx->x, p384_mod);
27419         ctx->state = 17;
27420         break;
27421     case 17:
27422         /* Y = Y * T1 */
27423         sp_384_mont_mul_avx2_6(ctx->y, ctx->y, ctx->t1, p384_mod, p384_mp_mod);
27424         ctx->state = 18;
27425         break;
27426     case 18:
27427         /* Y = Y - T2 */
27428         sp_384_mont_sub_avx2_6(ctx->y, ctx->y, ctx->t2, p384_mod);
27429         ctx->state = 19;
27430         /* fall-through */
27431     case 19:
27432         err = MP_OKAY;
27433         break;
27434     }
27435 
27436     if (err == MP_OKAY && ctx->state != 19) {
27437         err = FP_WOULDBLOCK;
27438     }
27439 
27440     return err;
27441 }
27442 #endif /* WOLFSSL_SP_NONBLOCK */
27443 
sp_384_proj_point_dbl_avx2_6(sp_point_384 * r,const sp_point_384 * p,sp_digit * t)27444 static void sp_384_proj_point_dbl_avx2_6(sp_point_384* r, const sp_point_384* p, sp_digit* t)
27445 {
27446     sp_digit* t1 = t;
27447     sp_digit* t2 = t + 2*6;
27448     sp_digit* x;
27449     sp_digit* y;
27450     sp_digit* z;
27451 
27452     x = r->x;
27453     y = r->y;
27454     z = r->z;
27455     /* Put infinity into result. */
27456     if (r != p) {
27457         r->infinity = p->infinity;
27458     }
27459 
27460     /* T1 = Z * Z */
27461     sp_384_mont_sqr_avx2_6(t1, p->z, p384_mod, p384_mp_mod);
27462     /* Z = Y * Z */
27463     sp_384_mont_mul_avx2_6(z, p->y, p->z, p384_mod, p384_mp_mod);
27464     /* Z = 2Z */
27465     sp_384_mont_dbl_avx2_6(z, z, p384_mod);
27466     /* T2 = X - T1 */
27467     sp_384_mont_sub_avx2_6(t2, p->x, t1, p384_mod);
27468     /* T1 = X + T1 */
27469     sp_384_mont_add_avx2_6(t1, p->x, t1, p384_mod);
27470     /* T2 = T1 * T2 */
27471     sp_384_mont_mul_avx2_6(t2, t1, t2, p384_mod, p384_mp_mod);
27472     /* T1 = 3T2 */
27473     sp_384_mont_tpl_avx2_6(t1, t2, p384_mod);
27474     /* Y = 2Y */
27475     sp_384_mont_dbl_avx2_6(y, p->y, p384_mod);
27476     /* Y = Y * Y */
27477     sp_384_mont_sqr_avx2_6(y, y, p384_mod, p384_mp_mod);
27478     /* T2 = Y * Y */
27479     sp_384_mont_sqr_avx2_6(t2, y, p384_mod, p384_mp_mod);
27480     /* T2 = T2/2 */
27481     sp_384_div2_avx2_6(t2, t2, p384_mod);
27482     /* Y = Y * X */
27483     sp_384_mont_mul_avx2_6(y, y, p->x, p384_mod, p384_mp_mod);
27484     /* X = T1 * T1 */
27485     sp_384_mont_sqr_avx2_6(x, t1, p384_mod, p384_mp_mod);
27486     /* X = X - Y */
27487     sp_384_mont_sub_avx2_6(x, x, y, p384_mod);
27488     /* X = X - Y */
27489     sp_384_mont_sub_avx2_6(x, x, y, p384_mod);
27490     /* Y = Y - X */
27491     sp_384_mont_sub_avx2_6(y, y, x, p384_mod);
27492     /* Y = Y * T1 */
27493     sp_384_mont_mul_avx2_6(y, y, t1, p384_mod, p384_mp_mod);
27494     /* Y = Y - T2 */
27495     sp_384_mont_sub_avx2_6(y, y, t2, p384_mod);
27496 }
27497 
27498 /* Double the Montgomery form projective point p a number of times.
27499  *
27500  * r  Result of repeated doubling of point.
27501  * p  Point to double.
27502  * n  Number of times to double
27503  * t  Temporary ordinate data.
27504  */
sp_384_proj_point_dbl_n_avx2_6(sp_point_384 * p,int n,sp_digit * t)27505 static void sp_384_proj_point_dbl_n_avx2_6(sp_point_384* p, int n,
27506     sp_digit* t)
27507 {
27508     sp_digit* w = t;
27509     sp_digit* a = t + 2*6;
27510     sp_digit* b = t + 4*6;
27511     sp_digit* t1 = t + 6*6;
27512     sp_digit* t2 = t + 8*6;
27513     sp_digit* x;
27514     sp_digit* y;
27515     sp_digit* z;
27516 
27517     x = p->x;
27518     y = p->y;
27519     z = p->z;
27520 
27521     /* Y = 2*Y */
27522     sp_384_mont_dbl_avx2_6(y, y, p384_mod);
27523     /* W = Z^4 */
27524     sp_384_mont_sqr_avx2_6(w, z, p384_mod, p384_mp_mod);
27525     sp_384_mont_sqr_avx2_6(w, w, p384_mod, p384_mp_mod);
27526 
27527 #ifndef WOLFSSL_SP_SMALL
27528     while (--n > 0)
27529 #else
27530     while (--n >= 0)
27531 #endif
27532     {
27533         /* A = 3*(X^2 - W) */
27534         sp_384_mont_sqr_avx2_6(t1, x, p384_mod, p384_mp_mod);
27535         sp_384_mont_sub_avx2_6(t1, t1, w, p384_mod);
27536         sp_384_mont_tpl_avx2_6(a, t1, p384_mod);
27537         /* B = X*Y^2 */
27538         sp_384_mont_sqr_avx2_6(t1, y, p384_mod, p384_mp_mod);
27539         sp_384_mont_mul_avx2_6(b, t1, x, p384_mod, p384_mp_mod);
27540         /* X = A^2 - 2B */
27541         sp_384_mont_sqr_avx2_6(x, a, p384_mod, p384_mp_mod);
27542         sp_384_mont_dbl_avx2_6(t2, b, p384_mod);
27543         sp_384_mont_sub_avx2_6(x, x, t2, p384_mod);
27544         /* Z = Z*Y */
27545         sp_384_mont_mul_avx2_6(z, z, y, p384_mod, p384_mp_mod);
27546         /* t2 = Y^4 */
27547         sp_384_mont_sqr_avx2_6(t1, t1, p384_mod, p384_mp_mod);
27548 #ifdef WOLFSSL_SP_SMALL
27549         if (n != 0)
27550 #endif
27551         {
27552             /* W = W*Y^4 */
27553             sp_384_mont_mul_avx2_6(w, w, t1, p384_mod, p384_mp_mod);
27554         }
27555         /* y = 2*A*(B - X) - Y^4 */
27556         sp_384_mont_sub_avx2_6(y, b, x, p384_mod);
27557         sp_384_mont_mul_avx2_6(y, y, a, p384_mod, p384_mp_mod);
27558         sp_384_mont_dbl_avx2_6(y, y, p384_mod);
27559         sp_384_mont_sub_avx2_6(y, y, t1, p384_mod);
27560     }
27561 #ifndef WOLFSSL_SP_SMALL
27562     /* A = 3*(X^2 - W) */
27563     sp_384_mont_sqr_avx2_6(t1, x, p384_mod, p384_mp_mod);
27564     sp_384_mont_sub_avx2_6(t1, t1, w, p384_mod);
27565     sp_384_mont_tpl_avx2_6(a, t1, p384_mod);
27566     /* B = X*Y^2 */
27567     sp_384_mont_sqr_avx2_6(t1, y, p384_mod, p384_mp_mod);
27568     sp_384_mont_mul_avx2_6(b, t1, x, p384_mod, p384_mp_mod);
27569     /* X = A^2 - 2B */
27570     sp_384_mont_sqr_avx2_6(x, a, p384_mod, p384_mp_mod);
27571     sp_384_mont_dbl_avx2_6(t2, b, p384_mod);
27572     sp_384_mont_sub_avx2_6(x, x, t2, p384_mod);
27573     /* Z = Z*Y */
27574     sp_384_mont_mul_avx2_6(z, z, y, p384_mod, p384_mp_mod);
27575     /* t2 = Y^4 */
27576     sp_384_mont_sqr_avx2_6(t1, t1, p384_mod, p384_mp_mod);
27577     /* y = 2*A*(B - X) - Y^4 */
27578     sp_384_mont_sub_avx2_6(y, b, x, p384_mod);
27579     sp_384_mont_mul_avx2_6(y, y, a, p384_mod, p384_mp_mod);
27580     sp_384_mont_dbl_avx2_6(y, y, p384_mod);
27581     sp_384_mont_sub_avx2_6(y, y, t1, p384_mod);
27582 #endif
27583     /* Y = Y/2 */
27584     sp_384_div2_avx2_6(y, y, p384_mod);
27585 }
27586 
27587 /* Add two Montgomery form projective points.
27588  *
27589  * r  Result of addition.
27590  * p  First point to add.
27591  * q  Second point to add.
27592  * t  Temporary ordinate data.
27593  */
27594 
27595 #ifdef WOLFSSL_SP_NONBLOCK
27596 typedef struct sp_384_proj_point_add_avx2_6_ctx {
27597     int state;
27598     sp_384_proj_point_dbl_avx2_6_ctx dbl_ctx;
27599     const sp_point_384* ap[2];
27600     sp_point_384* rp[2];
27601     sp_digit* t1;
27602     sp_digit* t2;
27603     sp_digit* t3;
27604     sp_digit* t4;
27605     sp_digit* t5;
27606     sp_digit* x;
27607     sp_digit* y;
27608     sp_digit* z;
27609 } sp_384_proj_point_add_avx2_6_ctx;
27610 
sp_384_proj_point_add_avx2_6_nb(sp_ecc_ctx_t * sp_ctx,sp_point_384 * r,const sp_point_384 * p,const sp_point_384 * q,sp_digit * t)27611 static int sp_384_proj_point_add_avx2_6_nb(sp_ecc_ctx_t* sp_ctx, sp_point_384* r,
27612     const sp_point_384* p, const sp_point_384* q, sp_digit* t)
27613 {
27614     int err = FP_WOULDBLOCK;
27615     sp_384_proj_point_add_avx2_6_ctx* ctx = (sp_384_proj_point_add_avx2_6_ctx*)sp_ctx->data;
27616 
27617     /* Ensure only the first point is the same as the result. */
27618     if (q == r) {
27619         const sp_point_384* a = p;
27620         p = q;
27621         q = a;
27622     }
27623 
27624     typedef char ctx_size_test[sizeof(sp_384_proj_point_add_avx2_6_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
27625     (void)sizeof(ctx_size_test);
27626 
27627     switch (ctx->state) {
27628     case 0: /* INIT */
27629         ctx->t1 = t;
27630         ctx->t2 = t + 2*6;
27631         ctx->t3 = t + 4*6;
27632         ctx->t4 = t + 6*6;
27633         ctx->t5 = t + 8*6;
27634 
27635         ctx->state = 1;
27636         break;
27637     case 1:
27638         /* Check double */
27639         (void)sp_384_sub_avx2_6(ctx->t1, p384_mod, q->y);
27640         sp_384_norm_avx2_6(ctx->t1);
27641         if ((sp_384_cmp_equal_avx2_6(p->x, q->x) & sp_384_cmp_equal_avx2_6(p->z, q->z) &
27642             (sp_384_cmp_equal_avx2_6(p->y, q->y) | sp_384_cmp_equal_avx2_6(p->y, ctx->t1))) != 0)
27643         {
27644             XMEMSET(&ctx->dbl_ctx, 0, sizeof(ctx->dbl_ctx));
27645             ctx->state = 2;
27646         }
27647         else {
27648             ctx->state = 3;
27649         }
27650         break;
27651     case 2:
27652         err = sp_384_proj_point_dbl_avx2_6_nb((sp_ecc_ctx_t*)&ctx->dbl_ctx, r, p, t);
27653         if (err == MP_OKAY)
27654             ctx->state = 27; /* done */
27655         break;
27656     case 3:
27657     {
27658         int i;
27659         ctx->rp[0] = r;
27660 
27661         /*lint allow cast to different type of pointer*/
27662         ctx->rp[1] = (sp_point_384*)t; /*lint !e9087 !e740*/
27663         XMEMSET(ctx->rp[1], 0, sizeof(sp_point_384));
27664         ctx->x = ctx->rp[p->infinity | q->infinity]->x;
27665         ctx->y = ctx->rp[p->infinity | q->infinity]->y;
27666         ctx->z = ctx->rp[p->infinity | q->infinity]->z;
27667 
27668         ctx->ap[0] = p;
27669         ctx->ap[1] = q;
27670         for (i=0; i<6; i++) {
27671             r->x[i] = ctx->ap[p->infinity]->x[i];
27672         }
27673         for (i=0; i<6; i++) {
27674             r->y[i] = ctx->ap[p->infinity]->y[i];
27675         }
27676         for (i=0; i<6; i++) {
27677             r->z[i] = ctx->ap[p->infinity]->z[i];
27678         }
27679         r->infinity = ctx->ap[p->infinity]->infinity;
27680 
27681         ctx->state = 4;
27682         break;
27683     }
27684     case 4:
27685         /* U1 = X1*Z2^2 */
27686         sp_384_mont_sqr_avx2_6(ctx->t1, q->z, p384_mod, p384_mp_mod);
27687         ctx->state = 5;
27688         break;
27689     case 5:
27690         sp_384_mont_mul_avx2_6(ctx->t3, ctx->t1, q->z, p384_mod, p384_mp_mod);
27691         ctx->state = 6;
27692         break;
27693     case 6:
27694         sp_384_mont_mul_avx2_6(ctx->t1, ctx->t1, ctx->x, p384_mod, p384_mp_mod);
27695         ctx->state = 7;
27696         break;
27697     case 7:
27698         /* U2 = X2*Z1^2 */
27699         sp_384_mont_sqr_avx2_6(ctx->t2, ctx->z, p384_mod, p384_mp_mod);
27700         ctx->state = 8;
27701         break;
27702     case 8:
27703         sp_384_mont_mul_avx2_6(ctx->t4, ctx->t2, ctx->z, p384_mod, p384_mp_mod);
27704         ctx->state = 9;
27705         break;
27706     case 9:
27707         sp_384_mont_mul_avx2_6(ctx->t2, ctx->t2, q->x, p384_mod, p384_mp_mod);
27708         ctx->state = 10;
27709         break;
27710     case 10:
27711         /* S1 = Y1*Z2^3 */
27712         sp_384_mont_mul_avx2_6(ctx->t3, ctx->t3, ctx->y, p384_mod, p384_mp_mod);
27713         ctx->state = 11;
27714         break;
27715     case 11:
27716         /* S2 = Y2*Z1^3 */
27717         sp_384_mont_mul_avx2_6(ctx->t4, ctx->t4, q->y, p384_mod, p384_mp_mod);
27718         ctx->state = 12;
27719         break;
27720     case 12:
27721         /* H = U2 - U1 */
27722         sp_384_mont_sub_avx2_6(ctx->t2, ctx->t2, ctx->t1, p384_mod);
27723         ctx->state = 13;
27724         break;
27725     case 13:
27726         /* R = S2 - S1 */
27727         sp_384_mont_sub_avx2_6(ctx->t4, ctx->t4, ctx->t3, p384_mod);
27728         ctx->state = 14;
27729         break;
27730     case 14:
27731         /* Z3 = H*Z1*Z2 */
27732         sp_384_mont_mul_avx2_6(ctx->z, ctx->z, q->z, p384_mod, p384_mp_mod);
27733         ctx->state = 15;
27734         break;
27735     case 15:
27736         sp_384_mont_mul_avx2_6(ctx->z, ctx->z, ctx->t2, p384_mod, p384_mp_mod);
27737         ctx->state = 16;
27738         break;
27739     case 16:
27740         /* X3 = R^2 - H^3 - 2*U1*H^2 */
27741         sp_384_mont_sqr_avx2_6(ctx->x, ctx->t4, p384_mod, p384_mp_mod);
27742         ctx->state = 17;
27743         break;
27744     case 17:
27745         sp_384_mont_sqr_avx2_6(ctx->t5, ctx->t2, p384_mod, p384_mp_mod);
27746         ctx->state = 18;
27747         break;
27748     case 18:
27749         sp_384_mont_mul_avx2_6(ctx->y, ctx->t1, ctx->t5, p384_mod, p384_mp_mod);
27750         ctx->state = 19;
27751         break;
27752     case 19:
27753         sp_384_mont_mul_avx2_6(ctx->t5, ctx->t5, ctx->t2, p384_mod, p384_mp_mod);
27754         ctx->state = 20;
27755         break;
27756     case 20:
27757         sp_384_mont_sub_avx2_6(ctx->x, ctx->x, ctx->t5, p384_mod);
27758         ctx->state = 21;
27759         break;
27760     case 21:
27761         sp_384_mont_dbl_avx2_6(ctx->t1, ctx->y, p384_mod);
27762         ctx->state = 22;
27763         break;
27764     case 22:
27765         sp_384_mont_sub_avx2_6(ctx->x, ctx->x, ctx->t1, p384_mod);
27766         ctx->state = 23;
27767         break;
27768     case 23:
27769         /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
27770         sp_384_mont_sub_avx2_6(ctx->y, ctx->y, ctx->x, p384_mod);
27771         ctx->state = 24;
27772         break;
27773     case 24:
27774         sp_384_mont_mul_avx2_6(ctx->y, ctx->y, ctx->t4, p384_mod, p384_mp_mod);
27775         ctx->state = 25;
27776         break;
27777     case 25:
27778         sp_384_mont_mul_avx2_6(ctx->t5, ctx->t5, ctx->t3, p384_mod, p384_mp_mod);
27779         ctx->state = 26;
27780         break;
27781     case 26:
27782         sp_384_mont_sub_avx2_6(ctx->y, ctx->y, ctx->t5, p384_mod);
27783         ctx->state = 27;
27784         /* fall-through */
27785     case 27:
27786         err = MP_OKAY;
27787         break;
27788     }
27789 
27790     if (err == MP_OKAY && ctx->state != 27) {
27791         err = FP_WOULDBLOCK;
27792     }
27793     return err;
27794 }
27795 #endif /* WOLFSSL_SP_NONBLOCK */
27796 
sp_384_proj_point_add_avx2_6(sp_point_384 * r,const sp_point_384 * p,const sp_point_384 * q,sp_digit * t)27797 static void sp_384_proj_point_add_avx2_6(sp_point_384* r,
27798         const sp_point_384* p, const sp_point_384* q, sp_digit* t)
27799 {
27800     const sp_point_384* ap[2];
27801     sp_point_384* rp[2];
27802     sp_digit* t1 = t;
27803     sp_digit* t2 = t + 2*6;
27804     sp_digit* t3 = t + 4*6;
27805     sp_digit* t4 = t + 6*6;
27806     sp_digit* t5 = t + 8*6;
27807     sp_digit* x;
27808     sp_digit* y;
27809     sp_digit* z;
27810     int i;
27811 
27812     /* Ensure only the first point is the same as the result. */
27813     if (q == r) {
27814         const sp_point_384* a = p;
27815         p = q;
27816         q = a;
27817     }
27818 
27819     /* Check double */
27820     (void)sp_384_sub_6(t1, p384_mod, q->y);
27821     sp_384_norm_6(t1);
27822     if ((sp_384_cmp_equal_6(p->x, q->x) & sp_384_cmp_equal_6(p->z, q->z) &
27823         (sp_384_cmp_equal_6(p->y, q->y) | sp_384_cmp_equal_6(p->y, t1))) != 0) {
27824         sp_384_proj_point_dbl_avx2_6(r, p, t);
27825     }
27826     else {
27827         rp[0] = r;
27828 
27829         /*lint allow cast to different type of pointer*/
27830         rp[1] = (sp_point_384*)t; /*lint !e9087 !e740*/
27831         XMEMSET(rp[1], 0, sizeof(sp_point_384));
27832         x = rp[p->infinity | q->infinity]->x;
27833         y = rp[p->infinity | q->infinity]->y;
27834         z = rp[p->infinity | q->infinity]->z;
27835 
27836         ap[0] = p;
27837         ap[1] = q;
27838         for (i=0; i<6; i++) {
27839             r->x[i] = ap[p->infinity]->x[i];
27840         }
27841         for (i=0; i<6; i++) {
27842             r->y[i] = ap[p->infinity]->y[i];
27843         }
27844         for (i=0; i<6; i++) {
27845             r->z[i] = ap[p->infinity]->z[i];
27846         }
27847         r->infinity = ap[p->infinity]->infinity;
27848 
27849         /* U1 = X1*Z2^2 */
27850         sp_384_mont_sqr_avx2_6(t1, q->z, p384_mod, p384_mp_mod);
27851         sp_384_mont_mul_avx2_6(t3, t1, q->z, p384_mod, p384_mp_mod);
27852         sp_384_mont_mul_avx2_6(t1, t1, x, p384_mod, p384_mp_mod);
27853         /* U2 = X2*Z1^2 */
27854         sp_384_mont_sqr_avx2_6(t2, z, p384_mod, p384_mp_mod);
27855         sp_384_mont_mul_avx2_6(t4, t2, z, p384_mod, p384_mp_mod);
27856         sp_384_mont_mul_avx2_6(t2, t2, q->x, p384_mod, p384_mp_mod);
27857         /* S1 = Y1*Z2^3 */
27858         sp_384_mont_mul_avx2_6(t3, t3, y, p384_mod, p384_mp_mod);
27859         /* S2 = Y2*Z1^3 */
27860         sp_384_mont_mul_avx2_6(t4, t4, q->y, p384_mod, p384_mp_mod);
27861         /* H = U2 - U1 */
27862         sp_384_mont_sub_avx2_6(t2, t2, t1, p384_mod);
27863         /* R = S2 - S1 */
27864         sp_384_mont_sub_avx2_6(t4, t4, t3, p384_mod);
27865         /* Z3 = H*Z1*Z2 */
27866         sp_384_mont_mul_avx2_6(z, z, q->z, p384_mod, p384_mp_mod);
27867         sp_384_mont_mul_avx2_6(z, z, t2, p384_mod, p384_mp_mod);
27868         /* X3 = R^2 - H^3 - 2*U1*H^2 */
27869         sp_384_mont_sqr_avx2_6(x, t4, p384_mod, p384_mp_mod);
27870         sp_384_mont_sqr_avx2_6(t5, t2, p384_mod, p384_mp_mod);
27871         sp_384_mont_mul_avx2_6(y, t1, t5, p384_mod, p384_mp_mod);
27872         sp_384_mont_mul_avx2_6(t5, t5, t2, p384_mod, p384_mp_mod);
27873         sp_384_mont_sub_avx2_6(x, x, t5, p384_mod);
27874         sp_384_mont_dbl_avx2_6(t1, y, p384_mod);
27875         sp_384_mont_sub_avx2_6(x, x, t1, p384_mod);
27876         /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
27877         sp_384_mont_sub_avx2_6(y, y, x, p384_mod);
27878         sp_384_mont_mul_avx2_6(y, y, t4, p384_mod, p384_mp_mod);
27879         sp_384_mont_mul_avx2_6(t5, t5, t3, p384_mod, p384_mp_mod);
27880         sp_384_mont_sub_avx2_6(y, y, t5, p384_mod);
27881     }
27882 }
27883 
27884 /* Double the Montgomery form projective point p a number of times.
27885  *
27886  * r  Result of repeated doubling of point.
27887  * p  Point to double.
27888  * n  Number of times to double
27889  * t  Temporary ordinate data.
27890  */
sp_384_proj_point_dbl_n_store_avx2_6(sp_point_384 * r,const sp_point_384 * p,int n,int m,sp_digit * t)27891 static void sp_384_proj_point_dbl_n_store_avx2_6(sp_point_384* r,
27892         const sp_point_384* p, int n, int m, sp_digit* t)
27893 {
27894     sp_digit* w = t;
27895     sp_digit* a = t + 2*6;
27896     sp_digit* b = t + 4*6;
27897     sp_digit* t1 = t + 6*6;
27898     sp_digit* t2 = t + 8*6;
27899     sp_digit* x = r[2*m].x;
27900     sp_digit* y = r[(1<<n)*m].y;
27901     sp_digit* z = r[2*m].z;
27902     int i;
27903     int j;
27904 
27905     for (i=0; i<6; i++) {
27906         x[i] = p->x[i];
27907     }
27908     for (i=0; i<6; i++) {
27909         y[i] = p->y[i];
27910     }
27911     for (i=0; i<6; i++) {
27912         z[i] = p->z[i];
27913     }
27914 
27915     /* Y = 2*Y */
27916     sp_384_mont_dbl_avx2_6(y, y, p384_mod);
27917     /* W = Z^4 */
27918     sp_384_mont_sqr_avx2_6(w, z, p384_mod, p384_mp_mod);
27919     sp_384_mont_sqr_avx2_6(w, w, p384_mod, p384_mp_mod);
27920     j = m;
27921     for (i=1; i<=n; i++) {
27922         j *= 2;
27923 
27924         /* A = 3*(X^2 - W) */
27925         sp_384_mont_sqr_avx2_6(t1, x, p384_mod, p384_mp_mod);
27926         sp_384_mont_sub_avx2_6(t1, t1, w, p384_mod);
27927         sp_384_mont_tpl_avx2_6(a, t1, p384_mod);
27928         /* B = X*Y^2 */
27929         sp_384_mont_sqr_avx2_6(t2, y, p384_mod, p384_mp_mod);
27930         sp_384_mont_mul_avx2_6(b, t2, x, p384_mod, p384_mp_mod);
27931         x = r[j].x;
27932         /* X = A^2 - 2B */
27933         sp_384_mont_sqr_avx2_6(x, a, p384_mod, p384_mp_mod);
27934         sp_384_mont_dbl_avx2_6(t1, b, p384_mod);
27935         sp_384_mont_sub_avx2_6(x, x, t1, p384_mod);
27936         /* Z = Z*Y */
27937         sp_384_mont_mul_avx2_6(r[j].z, z, y, p384_mod, p384_mp_mod);
27938         z = r[j].z;
27939         /* t2 = Y^4 */
27940         sp_384_mont_sqr_avx2_6(t2, t2, p384_mod, p384_mp_mod);
27941         if (i != n) {
27942             /* W = W*Y^4 */
27943             sp_384_mont_mul_avx2_6(w, w, t2, p384_mod, p384_mp_mod);
27944         }
27945         /* y = 2*A*(B - X) - Y^4 */
27946         sp_384_mont_sub_avx2_6(y, b, x, p384_mod);
27947         sp_384_mont_mul_avx2_6(y, y, a, p384_mod, p384_mp_mod);
27948         sp_384_mont_dbl_avx2_6(y, y, p384_mod);
27949         sp_384_mont_sub_avx2_6(y, y, t2, p384_mod);
27950 
27951         /* Y = Y/2 */
27952         sp_384_div2_avx2_6(r[j].y, y, p384_mod);
27953         r[j].infinity = 0;
27954     }
27955 }
27956 
27957 /* Add two Montgomery form projective points.
27958  *
27959  * ra  Result of addition.
27960  * rs  Result of subtraction.
27961  * p   First point to add.
27962  * q   Second point to add.
27963  * t   Temporary ordinate data.
27964  */
sp_384_proj_point_add_sub_avx2_6(sp_point_384 * ra,sp_point_384 * rs,const sp_point_384 * p,const sp_point_384 * q,sp_digit * t)27965 static void sp_384_proj_point_add_sub_avx2_6(sp_point_384* ra,
27966         sp_point_384* rs, const sp_point_384* p, const sp_point_384* q,
27967         sp_digit* t)
27968 {
27969     sp_digit* t1 = t;
27970     sp_digit* t2 = t + 2*6;
27971     sp_digit* t3 = t + 4*6;
27972     sp_digit* t4 = t + 6*6;
27973     sp_digit* t5 = t + 8*6;
27974     sp_digit* t6 = t + 10*6;
27975     sp_digit* x = ra->x;
27976     sp_digit* y = ra->y;
27977     sp_digit* z = ra->z;
27978     sp_digit* xs = rs->x;
27979     sp_digit* ys = rs->y;
27980     sp_digit* zs = rs->z;
27981 
27982 
27983     XMEMCPY(x, p->x, sizeof(p->x) / 2);
27984     XMEMCPY(y, p->y, sizeof(p->y) / 2);
27985     XMEMCPY(z, p->z, sizeof(p->z) / 2);
27986     ra->infinity = 0;
27987     rs->infinity = 0;
27988 
27989     /* U1 = X1*Z2^2 */
27990     sp_384_mont_sqr_avx2_6(t1, q->z, p384_mod, p384_mp_mod);
27991     sp_384_mont_mul_avx2_6(t3, t1, q->z, p384_mod, p384_mp_mod);
27992     sp_384_mont_mul_avx2_6(t1, t1, x, p384_mod, p384_mp_mod);
27993     /* U2 = X2*Z1^2 */
27994     sp_384_mont_sqr_avx2_6(t2, z, p384_mod, p384_mp_mod);
27995     sp_384_mont_mul_avx2_6(t4, t2, z, p384_mod, p384_mp_mod);
27996     sp_384_mont_mul_avx2_6(t2, t2, q->x, p384_mod, p384_mp_mod);
27997     /* S1 = Y1*Z2^3 */
27998     sp_384_mont_mul_avx2_6(t3, t3, y, p384_mod, p384_mp_mod);
27999     /* S2 = Y2*Z1^3 */
28000     sp_384_mont_mul_avx2_6(t4, t4, q->y, p384_mod, p384_mp_mod);
28001     /* H = U2 - U1 */
28002     sp_384_mont_sub_avx2_6(t2, t2, t1, p384_mod);
28003     /* RS = S2 + S1 */
28004     sp_384_mont_add_avx2_6(t6, t4, t3, p384_mod);
28005     /* R = S2 - S1 */
28006     sp_384_mont_sub_avx2_6(t4, t4, t3, p384_mod);
28007     /* Z3 = H*Z1*Z2 */
28008     /* ZS = H*Z1*Z2 */
28009     sp_384_mont_mul_avx2_6(z, z, q->z, p384_mod, p384_mp_mod);
28010     sp_384_mont_mul_avx2_6(z, z, t2, p384_mod, p384_mp_mod);
28011     XMEMCPY(zs, z, sizeof(p->z)/2);
28012     /* X3 = R^2 - H^3 - 2*U1*H^2 */
28013     /* XS = RS^2 - H^3 - 2*U1*H^2 */
28014     sp_384_mont_sqr_avx2_6(x, t4, p384_mod, p384_mp_mod);
28015     sp_384_mont_sqr_avx2_6(xs, t6, p384_mod, p384_mp_mod);
28016     sp_384_mont_sqr_avx2_6(t5, t2, p384_mod, p384_mp_mod);
28017     sp_384_mont_mul_avx2_6(y, t1, t5, p384_mod, p384_mp_mod);
28018     sp_384_mont_mul_avx2_6(t5, t5, t2, p384_mod, p384_mp_mod);
28019     sp_384_mont_sub_avx2_6(x, x, t5, p384_mod);
28020     sp_384_mont_sub_avx2_6(xs, xs, t5, p384_mod);
28021     sp_384_mont_dbl_avx2_6(t1, y, p384_mod);
28022     sp_384_mont_sub_avx2_6(x, x, t1, p384_mod);
28023     sp_384_mont_sub_avx2_6(xs, xs, t1, p384_mod);
28024     /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
28025     /* YS = -RS*(U1*H^2 - XS) - S1*H^3 */
28026     sp_384_mont_sub_avx2_6(ys, y, xs, p384_mod);
28027     sp_384_mont_sub_avx2_6(y, y, x, p384_mod);
28028     sp_384_mont_mul_avx2_6(y, y, t4, p384_mod, p384_mp_mod);
28029     sp_384_sub_6(t6, p384_mod, t6);
28030     sp_384_mont_mul_avx2_6(ys, ys, t6, p384_mod, p384_mp_mod);
28031     sp_384_mont_mul_avx2_6(t5, t5, t3, p384_mod, p384_mp_mod);
28032     sp_384_mont_sub_avx2_6(y, y, t5, p384_mod);
28033     sp_384_mont_sub_avx2_6(ys, ys, t5, p384_mod);
28034 }
28035 
28036 /* Multiply the point by the scalar and return the result.
28037  * If map is true then convert result to affine coordinates.
28038  *
28039  * Window technique of 6 bits. (Add-Sub variation.)
28040  * Calculate 0..32 times the point. Use function that adds and
28041  * subtracts the same two points.
28042  * Recode to add or subtract one of the computed points.
28043  * Double to push up.
28044  * NOT a sliding window.
28045  *
28046  * r     Resulting point.
28047  * g     Point to multiply.
28048  * k     Scalar to multiply by.
28049  * map   Indicates whether to convert result to affine.
28050  * ct    Constant time required.
28051  * heap  Heap to use for allocation.
28052  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
28053  */
sp_384_ecc_mulmod_win_add_sub_avx2_6(sp_point_384 * r,const sp_point_384 * g,const sp_digit * k,int map,int ct,void * heap)28054 static int sp_384_ecc_mulmod_win_add_sub_avx2_6(sp_point_384* r, const sp_point_384* g,
28055         const sp_digit* k, int map, int ct, void* heap)
28056 {
28057 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
28058     sp_point_384* t = NULL;
28059     sp_digit* tmp = NULL;
28060 #else
28061     sp_point_384 t[33+2];
28062     sp_digit tmp[2 * 6 * 6];
28063 #endif
28064     sp_point_384* rt = NULL;
28065     sp_point_384* p = NULL;
28066     sp_digit* negy;
28067     int i;
28068     ecc_recode_384 v[65];
28069     int err = MP_OKAY;
28070 
28071     /* Constant time used for cache attack resistance implementation. */
28072     (void)ct;
28073     (void)heap;
28074 
28075 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
28076     t = (sp_point_384*)XMALLOC(sizeof(sp_point_384) *
28077         (33+2), heap, DYNAMIC_TYPE_ECC);
28078     if (t == NULL)
28079         err = MEMORY_E;
28080     if (err == MP_OKAY) {
28081         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 6 * 6,
28082                                  heap, DYNAMIC_TYPE_ECC);
28083         if (tmp == NULL)
28084             err = MEMORY_E;
28085     }
28086 #endif
28087 
28088     if (err == MP_OKAY) {
28089         rt = t + 33;
28090         p  = t + 33+1;
28091 
28092         /* t[0] = {0, 0, 1} * norm */
28093         XMEMSET(&t[0], 0, sizeof(t[0]));
28094         t[0].infinity = 1;
28095         /* t[1] = {g->x, g->y, g->z} * norm */
28096         err = sp_384_mod_mul_norm_avx2_6(t[1].x, g->x, p384_mod);
28097     }
28098     if (err == MP_OKAY) {
28099         err = sp_384_mod_mul_norm_avx2_6(t[1].y, g->y, p384_mod);
28100     }
28101     if (err == MP_OKAY) {
28102         err = sp_384_mod_mul_norm_avx2_6(t[1].z, g->z, p384_mod);
28103     }
28104 
28105     if (err == MP_OKAY) {
28106         t[1].infinity = 0;
28107         /* t[2] ... t[32]  */
28108         sp_384_proj_point_dbl_n_store_avx2_6(t, &t[ 1], 5, 1, tmp);
28109         sp_384_proj_point_add_avx2_6(&t[ 3], &t[ 2], &t[ 1], tmp);
28110         sp_384_proj_point_dbl_avx2_6(&t[ 6], &t[ 3], tmp);
28111         sp_384_proj_point_add_sub_avx2_6(&t[ 7], &t[ 5], &t[ 6], &t[ 1], tmp);
28112         sp_384_proj_point_dbl_avx2_6(&t[10], &t[ 5], tmp);
28113         sp_384_proj_point_add_sub_avx2_6(&t[11], &t[ 9], &t[10], &t[ 1], tmp);
28114         sp_384_proj_point_dbl_avx2_6(&t[12], &t[ 6], tmp);
28115         sp_384_proj_point_dbl_avx2_6(&t[14], &t[ 7], tmp);
28116         sp_384_proj_point_add_sub_avx2_6(&t[15], &t[13], &t[14], &t[ 1], tmp);
28117         sp_384_proj_point_dbl_avx2_6(&t[18], &t[ 9], tmp);
28118         sp_384_proj_point_add_sub_avx2_6(&t[19], &t[17], &t[18], &t[ 1], tmp);
28119         sp_384_proj_point_dbl_avx2_6(&t[20], &t[10], tmp);
28120         sp_384_proj_point_dbl_avx2_6(&t[22], &t[11], tmp);
28121         sp_384_proj_point_add_sub_avx2_6(&t[23], &t[21], &t[22], &t[ 1], tmp);
28122         sp_384_proj_point_dbl_avx2_6(&t[24], &t[12], tmp);
28123         sp_384_proj_point_dbl_avx2_6(&t[26], &t[13], tmp);
28124         sp_384_proj_point_add_sub_avx2_6(&t[27], &t[25], &t[26], &t[ 1], tmp);
28125         sp_384_proj_point_dbl_avx2_6(&t[28], &t[14], tmp);
28126         sp_384_proj_point_dbl_avx2_6(&t[30], &t[15], tmp);
28127         sp_384_proj_point_add_sub_avx2_6(&t[31], &t[29], &t[30], &t[ 1], tmp);
28128 
28129         negy = t[0].y;
28130 
28131         sp_384_ecc_recode_6_6(k, v);
28132 
28133         i = 64;
28134     #ifndef WC_NO_CACHE_RESISTANT
28135         if (ct) {
28136             sp_384_get_point_33_avx2_6(rt, t, v[i].i);
28137             rt->infinity = !v[i].i;
28138         }
28139         else
28140     #endif
28141         {
28142             XMEMCPY(rt, &t[v[i].i], sizeof(sp_point_384));
28143         }
28144         for (--i; i>=0; i--) {
28145             sp_384_proj_point_dbl_n_avx2_6(rt, 6, tmp);
28146 
28147         #ifndef WC_NO_CACHE_RESISTANT
28148             if (ct) {
28149                 sp_384_get_point_33_avx2_6(p, t, v[i].i);
28150                 p->infinity = !v[i].i;
28151             }
28152             else
28153         #endif
28154             {
28155                 XMEMCPY(p, &t[v[i].i], sizeof(sp_point_384));
28156             }
28157             sp_384_sub_6(negy, p384_mod, p->y);
28158             sp_384_norm_6(negy);
28159             sp_384_cond_copy_6(p->y, negy, (sp_digit)0 - v[i].neg);
28160             sp_384_proj_point_add_avx2_6(rt, rt, p, tmp);
28161         }
28162 
28163         if (map != 0) {
28164             sp_384_map_avx2_6(r, rt, tmp);
28165         }
28166         else {
28167             XMEMCPY(r, rt, sizeof(sp_point_384));
28168         }
28169     }
28170 
28171 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
28172     if (t != NULL)
28173         XFREE(t, heap, DYNAMIC_TYPE_ECC);
28174     if (tmp != NULL)
28175         XFREE(tmp, heap, DYNAMIC_TYPE_ECC);
28176 #endif
28177 
28178     return err;
28179 }
28180 
28181 #endif /* HAVE_INTEL_AVX2 */
28182 /* A table entry for pre-computed points. */
28183 typedef struct sp_table_entry_384 {
28184     sp_digit x[6];
28185     sp_digit y[6];
28186 } sp_table_entry_384;
28187 
28188 #if defined(FP_ECC) || defined(WOLFSSL_SP_SMALL)
28189 #endif /* FP_ECC | WOLFSSL_SP_SMALL */
28190 /* Add two Montgomery form projective points. The second point has a q value of
28191  * one.
28192  * Only the first point can be the same pointer as the result point.
28193  *
28194  * r  Result of addition.
28195  * p  First point to add.
28196  * q  Second point to add.
28197  * t  Temporary ordinate data.
28198  */
sp_384_proj_point_add_qz1_6(sp_point_384 * r,const sp_point_384 * p,const sp_point_384 * q,sp_digit * t)28199 static void sp_384_proj_point_add_qz1_6(sp_point_384* r, const sp_point_384* p,
28200         const sp_point_384* q, sp_digit* t)
28201 {
28202     const sp_point_384* ap[2];
28203     sp_point_384* rp[2];
28204     sp_digit* t1 = t;
28205     sp_digit* t2 = t + 2*6;
28206     sp_digit* t3 = t + 4*6;
28207     sp_digit* t4 = t + 6*6;
28208     sp_digit* t5 = t + 8*6;
28209     sp_digit* x;
28210     sp_digit* y;
28211     sp_digit* z;
28212     int i;
28213 
28214     /* Check double */
28215     (void)sp_384_sub_6(t1, p384_mod, q->y);
28216     sp_384_norm_6(t1);
28217     if ((sp_384_cmp_equal_6(p->x, q->x) & sp_384_cmp_equal_6(p->z, q->z) &
28218         (sp_384_cmp_equal_6(p->y, q->y) | sp_384_cmp_equal_6(p->y, t1))) != 0) {
28219         sp_384_proj_point_dbl_6(r, p, t);
28220     }
28221     else {
28222         rp[0] = r;
28223 
28224         /*lint allow cast to different type of pointer*/
28225         rp[1] = (sp_point_384*)t; /*lint !e9087 !e740*/
28226         XMEMSET(rp[1], 0, sizeof(sp_point_384));
28227         x = rp[p->infinity | q->infinity]->x;
28228         y = rp[p->infinity | q->infinity]->y;
28229         z = rp[p->infinity | q->infinity]->z;
28230 
28231         ap[0] = p;
28232         ap[1] = q;
28233         for (i=0; i<6; i++) {
28234             r->x[i] = ap[p->infinity]->x[i];
28235         }
28236         for (i=0; i<6; i++) {
28237             r->y[i] = ap[p->infinity]->y[i];
28238         }
28239         for (i=0; i<6; i++) {
28240             r->z[i] = ap[p->infinity]->z[i];
28241         }
28242         r->infinity = ap[p->infinity]->infinity;
28243 
28244         /* U2 = X2*Z1^2 */
28245         sp_384_mont_sqr_6(t2, z, p384_mod, p384_mp_mod);
28246         sp_384_mont_mul_6(t4, t2, z, p384_mod, p384_mp_mod);
28247         sp_384_mont_mul_6(t2, t2, q->x, p384_mod, p384_mp_mod);
28248         /* S2 = Y2*Z1^3 */
28249         sp_384_mont_mul_6(t4, t4, q->y, p384_mod, p384_mp_mod);
28250         /* H = U2 - X1 */
28251         sp_384_mont_sub_6(t2, t2, x, p384_mod);
28252         /* R = S2 - Y1 */
28253         sp_384_mont_sub_6(t4, t4, y, p384_mod);
28254         /* Z3 = H*Z1 */
28255         sp_384_mont_mul_6(z, z, t2, p384_mod, p384_mp_mod);
28256         /* X3 = R^2 - H^3 - 2*X1*H^2 */
28257         sp_384_mont_sqr_6(t1, t4, p384_mod, p384_mp_mod);
28258         sp_384_mont_sqr_6(t5, t2, p384_mod, p384_mp_mod);
28259         sp_384_mont_mul_6(t3, x, t5, p384_mod, p384_mp_mod);
28260         sp_384_mont_mul_6(t5, t5, t2, p384_mod, p384_mp_mod);
28261         sp_384_mont_sub_6(x, t1, t5, p384_mod);
28262         sp_384_mont_dbl_6(t1, t3, p384_mod);
28263         sp_384_mont_sub_6(x, x, t1, p384_mod);
28264         /* Y3 = R*(X1*H^2 - X3) - Y1*H^3 */
28265         sp_384_mont_sub_6(t3, t3, x, p384_mod);
28266         sp_384_mont_mul_6(t3, t3, t4, p384_mod, p384_mp_mod);
28267         sp_384_mont_mul_6(t5, t5, y, p384_mod, p384_mp_mod);
28268         sp_384_mont_sub_6(y, t3, t5, p384_mod);
28269     }
28270 }
28271 
28272 #ifdef FP_ECC
28273 /* Convert the projective point to affine.
28274  * Ordinates are in Montgomery form.
28275  *
28276  * a  Point to convert.
28277  * t  Temporary data.
28278  */
sp_384_proj_to_affine_6(sp_point_384 * a,sp_digit * t)28279 static void sp_384_proj_to_affine_6(sp_point_384* a, sp_digit* t)
28280 {
28281     sp_digit* t1 = t;
28282     sp_digit* t2 = t + 2 * 6;
28283     sp_digit* tmp = t + 4 * 6;
28284 
28285     sp_384_mont_inv_6(t1, a->z, tmp);
28286 
28287     sp_384_mont_sqr_6(t2, t1, p384_mod, p384_mp_mod);
28288     sp_384_mont_mul_6(t1, t2, t1, p384_mod, p384_mp_mod);
28289 
28290     sp_384_mont_mul_6(a->x, a->x, t2, p384_mod, p384_mp_mod);
28291     sp_384_mont_mul_6(a->y, a->y, t1, p384_mod, p384_mp_mod);
28292     XMEMCPY(a->z, p384_norm_mod, sizeof(p384_norm_mod));
28293 }
28294 
28295 /* Generate the pre-computed table of points for the base point.
28296  *
28297  * width = 6
28298  * 64 entries
28299  * 64 bits between
28300  *
28301  * a      The base point.
28302  * table  Place to store generated point data.
28303  * tmp    Temporary data.
28304  * heap  Heap to use for allocation.
28305  */
sp_384_gen_stripe_table_6(const sp_point_384 * a,sp_table_entry_384 * table,sp_digit * tmp,void * heap)28306 static int sp_384_gen_stripe_table_6(const sp_point_384* a,
28307         sp_table_entry_384* table, sp_digit* tmp, void* heap)
28308 {
28309 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
28310     sp_point_384* t = NULL;
28311 #else
28312     sp_point_384 t[3];
28313 #endif
28314     sp_point_384* s1 = NULL;
28315     sp_point_384* s2 = NULL;
28316     int i;
28317     int j;
28318     int err = MP_OKAY;
28319 
28320     (void)heap;
28321 
28322 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
28323     t = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 3, heap,
28324                                      DYNAMIC_TYPE_ECC);
28325     if (t == NULL)
28326         err = MEMORY_E;
28327 #endif
28328 
28329     if (err == MP_OKAY) {
28330         s1 = t + 1;
28331         s2 = t + 2;
28332 
28333         err = sp_384_mod_mul_norm_6(t->x, a->x, p384_mod);
28334     }
28335     if (err == MP_OKAY) {
28336         err = sp_384_mod_mul_norm_6(t->y, a->y, p384_mod);
28337     }
28338     if (err == MP_OKAY) {
28339         err = sp_384_mod_mul_norm_6(t->z, a->z, p384_mod);
28340     }
28341     if (err == MP_OKAY) {
28342         t->infinity = 0;
28343         sp_384_proj_to_affine_6(t, tmp);
28344 
28345         XMEMCPY(s1->z, p384_norm_mod, sizeof(p384_norm_mod));
28346         s1->infinity = 0;
28347         XMEMCPY(s2->z, p384_norm_mod, sizeof(p384_norm_mod));
28348         s2->infinity = 0;
28349 
28350         /* table[0] = {0, 0, infinity} */
28351         XMEMSET(&table[0], 0, sizeof(sp_table_entry_384));
28352         /* table[1] = Affine version of 'a' in Montgomery form */
28353         XMEMCPY(table[1].x, t->x, sizeof(table->x));
28354         XMEMCPY(table[1].y, t->y, sizeof(table->y));
28355 
28356         for (i=1; i<6; i++) {
28357             sp_384_proj_point_dbl_n_6(t, 64, tmp);
28358             sp_384_proj_to_affine_6(t, tmp);
28359             XMEMCPY(table[1<<i].x, t->x, sizeof(table->x));
28360             XMEMCPY(table[1<<i].y, t->y, sizeof(table->y));
28361         }
28362 
28363         for (i=1; i<6; i++) {
28364             XMEMCPY(s1->x, table[1<<i].x, sizeof(table->x));
28365             XMEMCPY(s1->y, table[1<<i].y, sizeof(table->y));
28366             for (j=(1<<i)+1; j<(1<<(i+1)); j++) {
28367                 XMEMCPY(s2->x, table[j-(1<<i)].x, sizeof(table->x));
28368                 XMEMCPY(s2->y, table[j-(1<<i)].y, sizeof(table->y));
28369                 sp_384_proj_point_add_qz1_6(t, s1, s2, tmp);
28370                 sp_384_proj_to_affine_6(t, tmp);
28371                 XMEMCPY(table[j].x, t->x, sizeof(table->x));
28372                 XMEMCPY(table[j].y, t->y, sizeof(table->y));
28373             }
28374         }
28375     }
28376 
28377 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
28378     if (t != NULL)
28379         XFREE(t, heap, DYNAMIC_TYPE_ECC);
28380 #endif
28381 
28382     return err;
28383 }
28384 
28385 #endif /* FP_ECC */
28386 #if defined(FP_ECC) || defined(WOLFSSL_SP_SMALL)
28387 extern void sp_384_get_entry_64_6(sp_point_384* r, const sp_table_entry_384* table, int idx);
28388 extern void sp_384_get_entry_64_avx2_6(sp_point_384* r, const sp_table_entry_384* table, int idx);
28389 /* Multiply the point by the scalar and return the result.
28390  * If map is true then convert result to affine coordinates.
28391  *
28392  * Stripe implementation.
28393  * Pre-generated: 2^0, 2^64, ...
28394  * Pre-generated: products of all combinations of above.
28395  * 6 doubles and adds (with qz=1)
28396  *
28397  * r      Resulting point.
28398  * k      Scalar to multiply by.
28399  * table  Pre-computed table.
28400  * map    Indicates whether to convert result to affine.
28401  * ct     Constant time required.
28402  * heap   Heap to use for allocation.
28403  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
28404  */
sp_384_ecc_mulmod_stripe_6(sp_point_384 * r,const sp_point_384 * g,const sp_table_entry_384 * table,const sp_digit * k,int map,int ct,void * heap)28405 static int sp_384_ecc_mulmod_stripe_6(sp_point_384* r, const sp_point_384* g,
28406         const sp_table_entry_384* table, const sp_digit* k, int map,
28407         int ct, void* heap)
28408 {
28409 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
28410     sp_point_384* rt = NULL;
28411     sp_digit* t = NULL;
28412 #else
28413     sp_point_384 rt[2];
28414     sp_digit t[2 * 6 * 6];
28415 #endif
28416     sp_point_384* p = NULL;
28417     int i;
28418     int j;
28419     int y;
28420     int x;
28421     int err = MP_OKAY;
28422 
28423     (void)g;
28424     /* Constant time used for cache attack resistance implementation. */
28425     (void)ct;
28426     (void)heap;
28427 
28428 
28429 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
28430     rt = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 2, heap,
28431                                       DYNAMIC_TYPE_ECC);
28432     if (rt == NULL)
28433         err = MEMORY_E;
28434     if (err == MP_OKAY) {
28435         t = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 6 * 6, heap,
28436                                DYNAMIC_TYPE_ECC);
28437         if (t == NULL)
28438             err = MEMORY_E;
28439     }
28440 #endif
28441 
28442     if (err == MP_OKAY) {
28443         p = rt + 1;
28444 
28445         XMEMCPY(p->z, p384_norm_mod, sizeof(p384_norm_mod));
28446         XMEMCPY(rt->z, p384_norm_mod, sizeof(p384_norm_mod));
28447 
28448         y = 0;
28449         x = 63;
28450         for (j=0; j<6; j++) {
28451             y |= (int)(((k[x / 64] >> (x % 64)) & 1) << j);
28452             x += 64;
28453         }
28454     #ifndef WC_NO_CACHE_RESISTANT
28455         if (ct) {
28456             sp_384_get_entry_64_6(rt, table, y);
28457         } else
28458     #endif
28459         {
28460             XMEMCPY(rt->x, table[y].x, sizeof(table[y].x));
28461             XMEMCPY(rt->y, table[y].y, sizeof(table[y].y));
28462         }
28463         rt->infinity = !y;
28464         for (i=62; i>=0; i--) {
28465             y = 0;
28466             x = i;
28467             for (j=0; j<6; j++) {
28468                 y |= (int)(((k[x / 64] >> (x % 64)) & 1) << j);
28469                 x += 64;
28470             }
28471 
28472             sp_384_proj_point_dbl_6(rt, rt, t);
28473         #ifndef WC_NO_CACHE_RESISTANT
28474             if (ct) {
28475                 sp_384_get_entry_64_6(p, table, y);
28476             }
28477             else
28478         #endif
28479             {
28480                 XMEMCPY(p->x, table[y].x, sizeof(table[y].x));
28481                 XMEMCPY(p->y, table[y].y, sizeof(table[y].y));
28482             }
28483             p->infinity = !y;
28484             sp_384_proj_point_add_qz1_6(rt, rt, p, t);
28485         }
28486 
28487         if (map != 0) {
28488             sp_384_map_6(r, rt, t);
28489         }
28490         else {
28491             XMEMCPY(r, rt, sizeof(sp_point_384));
28492         }
28493     }
28494 
28495 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
28496     if (t != NULL)
28497         XFREE(t, heap, DYNAMIC_TYPE_ECC);
28498     if (rt != NULL)
28499         XFREE(rt, heap, DYNAMIC_TYPE_ECC);
28500 #endif
28501 
28502     return err;
28503 }
28504 
28505 #endif /* FP_ECC | WOLFSSL_SP_SMALL */
28506 #ifdef FP_ECC
28507 #ifndef FP_ENTRIES
28508     #define FP_ENTRIES 16
28509 #endif
28510 
28511 /* Cache entry - holds precomputation tables for a point. */
28512 typedef struct sp_cache_384_t {
28513     /* X ordinate of point that table was generated from. */
28514     sp_digit x[6];
28515     /* Y ordinate of point that table was generated from. */
28516     sp_digit y[6];
28517     /* Precomputation table for point. */
28518     sp_table_entry_384 table[64];
28519     /* Count of entries in table. */
28520     uint32_t cnt;
28521     /* Point and table set in entry. */
28522     int set;
28523 } sp_cache_384_t;
28524 
28525 /* Cache of tables. */
28526 static THREAD_LS_T sp_cache_384_t sp_cache_384[FP_ENTRIES];
28527 /* Index of last entry in cache. */
28528 static THREAD_LS_T int sp_cache_384_last = -1;
28529 /* Cache has been initialized. */
28530 static THREAD_LS_T int sp_cache_384_inited = 0;
28531 
28532 #ifndef HAVE_THREAD_LS
28533     static volatile int initCacheMutex_384 = 0;
28534     static wolfSSL_Mutex sp_cache_384_lock;
28535 #endif
28536 
28537 /* Get the cache entry for the point.
28538  *
28539  * g      [in]   Point scalar multipling.
28540  * cache  [out]  Cache table to use.
28541  */
sp_ecc_get_cache_384(const sp_point_384 * g,sp_cache_384_t ** cache)28542 static void sp_ecc_get_cache_384(const sp_point_384* g, sp_cache_384_t** cache)
28543 {
28544     int i;
28545     int j;
28546     uint32_t least;
28547 
28548     if (sp_cache_384_inited == 0) {
28549         for (i=0; i<FP_ENTRIES; i++) {
28550             sp_cache_384[i].set = 0;
28551         }
28552         sp_cache_384_inited = 1;
28553     }
28554 
28555     /* Compare point with those in cache. */
28556     for (i=0; i<FP_ENTRIES; i++) {
28557         if (!sp_cache_384[i].set)
28558             continue;
28559 
28560         if (sp_384_cmp_equal_6(g->x, sp_cache_384[i].x) &
28561                            sp_384_cmp_equal_6(g->y, sp_cache_384[i].y)) {
28562             sp_cache_384[i].cnt++;
28563             break;
28564         }
28565     }
28566 
28567     /* No match. */
28568     if (i == FP_ENTRIES) {
28569         /* Find empty entry. */
28570         i = (sp_cache_384_last + 1) % FP_ENTRIES;
28571         for (; i != sp_cache_384_last; i=(i+1)%FP_ENTRIES) {
28572             if (!sp_cache_384[i].set) {
28573                 break;
28574             }
28575         }
28576 
28577         /* Evict least used. */
28578         if (i == sp_cache_384_last) {
28579             least = sp_cache_384[0].cnt;
28580             for (j=1; j<FP_ENTRIES; j++) {
28581                 if (sp_cache_384[j].cnt < least) {
28582                     i = j;
28583                     least = sp_cache_384[i].cnt;
28584                 }
28585             }
28586         }
28587 
28588         XMEMCPY(sp_cache_384[i].x, g->x, sizeof(sp_cache_384[i].x));
28589         XMEMCPY(sp_cache_384[i].y, g->y, sizeof(sp_cache_384[i].y));
28590         sp_cache_384[i].set = 1;
28591         sp_cache_384[i].cnt = 1;
28592     }
28593 
28594     *cache = &sp_cache_384[i];
28595     sp_cache_384_last = i;
28596 }
28597 #endif /* FP_ECC */
28598 
28599 /* Multiply the base point of P384 by the scalar and return the result.
28600  * If map is true then convert result to affine coordinates.
28601  *
28602  * r     Resulting point.
28603  * g     Point to multiply.
28604  * k     Scalar to multiply by.
28605  * map   Indicates whether to convert result to affine.
28606  * ct    Constant time required.
28607  * heap  Heap to use for allocation.
28608  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
28609  */
sp_384_ecc_mulmod_6(sp_point_384 * r,const sp_point_384 * g,const sp_digit * k,int map,int ct,void * heap)28610 static int sp_384_ecc_mulmod_6(sp_point_384* r, const sp_point_384* g, const sp_digit* k,
28611         int map, int ct, void* heap)
28612 {
28613 #ifndef FP_ECC
28614     return sp_384_ecc_mulmod_win_add_sub_6(r, g, k, map, ct, heap);
28615 #else
28616     sp_digit tmp[2 * 6 * 7];
28617     sp_cache_384_t* cache;
28618     int err = MP_OKAY;
28619 
28620 #ifndef HAVE_THREAD_LS
28621     if (initCacheMutex_384 == 0) {
28622          wc_InitMutex(&sp_cache_384_lock);
28623          initCacheMutex_384 = 1;
28624     }
28625     if (wc_LockMutex(&sp_cache_384_lock) != 0)
28626        err = BAD_MUTEX_E;
28627 #endif /* HAVE_THREAD_LS */
28628 
28629     if (err == MP_OKAY) {
28630         sp_ecc_get_cache_384(g, &cache);
28631         if (cache->cnt == 2)
28632             sp_384_gen_stripe_table_6(g, cache->table, tmp, heap);
28633 
28634 #ifndef HAVE_THREAD_LS
28635         wc_UnLockMutex(&sp_cache_384_lock);
28636 #endif /* HAVE_THREAD_LS */
28637 
28638         if (cache->cnt < 2) {
28639             err = sp_384_ecc_mulmod_win_add_sub_6(r, g, k, map, ct, heap);
28640         }
28641         else {
28642             err = sp_384_ecc_mulmod_stripe_6(r, g, cache->table, k,
28643                     map, ct, heap);
28644         }
28645     }
28646 
28647     return err;
28648 #endif
28649 }
28650 
28651 #ifdef HAVE_INTEL_AVX2
28652 #if defined(FP_ECC) || defined(WOLFSSL_SP_SMALL)
28653 #endif /* FP_ECC | WOLFSSL_SP_SMALL */
28654 /* Add two Montgomery form projective points. The second point has a q value of
28655  * one.
28656  * Only the first point can be the same pointer as the result point.
28657  *
28658  * r  Result of addition.
28659  * p  First point to add.
28660  * q  Second point to add.
28661  * t  Temporary ordinate data.
28662  */
sp_384_proj_point_add_qz1_avx2_6(sp_point_384 * r,const sp_point_384 * p,const sp_point_384 * q,sp_digit * t)28663 static void sp_384_proj_point_add_qz1_avx2_6(sp_point_384* r, const sp_point_384* p,
28664         const sp_point_384* q, sp_digit* t)
28665 {
28666     const sp_point_384* ap[2];
28667     sp_point_384* rp[2];
28668     sp_digit* t1 = t;
28669     sp_digit* t2 = t + 2*6;
28670     sp_digit* t3 = t + 4*6;
28671     sp_digit* t4 = t + 6*6;
28672     sp_digit* t5 = t + 8*6;
28673     sp_digit* x;
28674     sp_digit* y;
28675     sp_digit* z;
28676     int i;
28677 
28678     /* Check double */
28679     (void)sp_384_sub_6(t1, p384_mod, q->y);
28680     sp_384_norm_6(t1);
28681     if ((sp_384_cmp_equal_6(p->x, q->x) & sp_384_cmp_equal_6(p->z, q->z) &
28682         (sp_384_cmp_equal_6(p->y, q->y) | sp_384_cmp_equal_6(p->y, t1))) != 0) {
28683         sp_384_proj_point_dbl_avx2_6(r, p, t);
28684     }
28685     else {
28686         rp[0] = r;
28687 
28688         /*lint allow cast to different type of pointer*/
28689         rp[1] = (sp_point_384*)t; /*lint !e9087 !e740*/
28690         XMEMSET(rp[1], 0, sizeof(sp_point_384));
28691         x = rp[p->infinity | q->infinity]->x;
28692         y = rp[p->infinity | q->infinity]->y;
28693         z = rp[p->infinity | q->infinity]->z;
28694 
28695         ap[0] = p;
28696         ap[1] = q;
28697         for (i=0; i<6; i++) {
28698             r->x[i] = ap[p->infinity]->x[i];
28699         }
28700         for (i=0; i<6; i++) {
28701             r->y[i] = ap[p->infinity]->y[i];
28702         }
28703         for (i=0; i<6; i++) {
28704             r->z[i] = ap[p->infinity]->z[i];
28705         }
28706         r->infinity = ap[p->infinity]->infinity;
28707 
28708         /* U2 = X2*Z1^2 */
28709         sp_384_mont_sqr_avx2_6(t2, z, p384_mod, p384_mp_mod);
28710         sp_384_mont_mul_avx2_6(t4, t2, z, p384_mod, p384_mp_mod);
28711         sp_384_mont_mul_avx2_6(t2, t2, q->x, p384_mod, p384_mp_mod);
28712         /* S2 = Y2*Z1^3 */
28713         sp_384_mont_mul_avx2_6(t4, t4, q->y, p384_mod, p384_mp_mod);
28714         /* H = U2 - X1 */
28715         sp_384_mont_sub_avx2_6(t2, t2, x, p384_mod);
28716         /* R = S2 - Y1 */
28717         sp_384_mont_sub_avx2_6(t4, t4, y, p384_mod);
28718         /* Z3 = H*Z1 */
28719         sp_384_mont_mul_avx2_6(z, z, t2, p384_mod, p384_mp_mod);
28720         /* X3 = R^2 - H^3 - 2*X1*H^2 */
28721         sp_384_mont_sqr_avx2_6(t1, t4, p384_mod, p384_mp_mod);
28722         sp_384_mont_sqr_avx2_6(t5, t2, p384_mod, p384_mp_mod);
28723         sp_384_mont_mul_avx2_6(t3, x, t5, p384_mod, p384_mp_mod);
28724         sp_384_mont_mul_avx2_6(t5, t5, t2, p384_mod, p384_mp_mod);
28725         sp_384_mont_sub_avx2_6(x, t1, t5, p384_mod);
28726         sp_384_mont_dbl_avx2_6(t1, t3, p384_mod);
28727         sp_384_mont_sub_avx2_6(x, x, t1, p384_mod);
28728         /* Y3 = R*(X1*H^2 - X3) - Y1*H^3 */
28729         sp_384_mont_sub_avx2_6(t3, t3, x, p384_mod);
28730         sp_384_mont_mul_avx2_6(t3, t3, t4, p384_mod, p384_mp_mod);
28731         sp_384_mont_mul_avx2_6(t5, t5, y, p384_mod, p384_mp_mod);
28732         sp_384_mont_sub_avx2_6(y, t3, t5, p384_mod);
28733     }
28734 }
28735 
28736 #ifdef FP_ECC
28737 /* Convert the projective point to affine.
28738  * Ordinates are in Montgomery form.
28739  *
28740  * a  Point to convert.
28741  * t  Temporary data.
28742  */
sp_384_proj_to_affine_avx2_6(sp_point_384 * a,sp_digit * t)28743 static void sp_384_proj_to_affine_avx2_6(sp_point_384* a, sp_digit* t)
28744 {
28745     sp_digit* t1 = t;
28746     sp_digit* t2 = t + 2 * 6;
28747     sp_digit* tmp = t + 4 * 6;
28748 
28749     sp_384_mont_inv_avx2_6(t1, a->z, tmp);
28750 
28751     sp_384_mont_sqr_avx2_6(t2, t1, p384_mod, p384_mp_mod);
28752     sp_384_mont_mul_avx2_6(t1, t2, t1, p384_mod, p384_mp_mod);
28753 
28754     sp_384_mont_mul_avx2_6(a->x, a->x, t2, p384_mod, p384_mp_mod);
28755     sp_384_mont_mul_avx2_6(a->y, a->y, t1, p384_mod, p384_mp_mod);
28756     XMEMCPY(a->z, p384_norm_mod, sizeof(p384_norm_mod));
28757 }
28758 
28759 /* Generate the pre-computed table of points for the base point.
28760  *
28761  * width = 6
28762  * 64 entries
28763  * 64 bits between
28764  *
28765  * a      The base point.
28766  * table  Place to store generated point data.
28767  * tmp    Temporary data.
28768  * heap  Heap to use for allocation.
28769  */
sp_384_gen_stripe_table_avx2_6(const sp_point_384 * a,sp_table_entry_384 * table,sp_digit * tmp,void * heap)28770 static int sp_384_gen_stripe_table_avx2_6(const sp_point_384* a,
28771         sp_table_entry_384* table, sp_digit* tmp, void* heap)
28772 {
28773 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
28774     sp_point_384* t = NULL;
28775 #else
28776     sp_point_384 t[3];
28777 #endif
28778     sp_point_384* s1 = NULL;
28779     sp_point_384* s2 = NULL;
28780     int i;
28781     int j;
28782     int err = MP_OKAY;
28783 
28784     (void)heap;
28785 
28786 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
28787     t = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 3, heap,
28788                                      DYNAMIC_TYPE_ECC);
28789     if (t == NULL)
28790         err = MEMORY_E;
28791 #endif
28792 
28793     if (err == MP_OKAY) {
28794         s1 = t + 1;
28795         s2 = t + 2;
28796 
28797         err = sp_384_mod_mul_norm_avx2_6(t->x, a->x, p384_mod);
28798     }
28799     if (err == MP_OKAY) {
28800         err = sp_384_mod_mul_norm_avx2_6(t->y, a->y, p384_mod);
28801     }
28802     if (err == MP_OKAY) {
28803         err = sp_384_mod_mul_norm_avx2_6(t->z, a->z, p384_mod);
28804     }
28805     if (err == MP_OKAY) {
28806         t->infinity = 0;
28807         sp_384_proj_to_affine_avx2_6(t, tmp);
28808 
28809         XMEMCPY(s1->z, p384_norm_mod, sizeof(p384_norm_mod));
28810         s1->infinity = 0;
28811         XMEMCPY(s2->z, p384_norm_mod, sizeof(p384_norm_mod));
28812         s2->infinity = 0;
28813 
28814         /* table[0] = {0, 0, infinity} */
28815         XMEMSET(&table[0], 0, sizeof(sp_table_entry_384));
28816         /* table[1] = Affine version of 'a' in Montgomery form */
28817         XMEMCPY(table[1].x, t->x, sizeof(table->x));
28818         XMEMCPY(table[1].y, t->y, sizeof(table->y));
28819 
28820         for (i=1; i<6; i++) {
28821             sp_384_proj_point_dbl_n_avx2_6(t, 64, tmp);
28822             sp_384_proj_to_affine_avx2_6(t, tmp);
28823             XMEMCPY(table[1<<i].x, t->x, sizeof(table->x));
28824             XMEMCPY(table[1<<i].y, t->y, sizeof(table->y));
28825         }
28826 
28827         for (i=1; i<6; i++) {
28828             XMEMCPY(s1->x, table[1<<i].x, sizeof(table->x));
28829             XMEMCPY(s1->y, table[1<<i].y, sizeof(table->y));
28830             for (j=(1<<i)+1; j<(1<<(i+1)); j++) {
28831                 XMEMCPY(s2->x, table[j-(1<<i)].x, sizeof(table->x));
28832                 XMEMCPY(s2->y, table[j-(1<<i)].y, sizeof(table->y));
28833                 sp_384_proj_point_add_qz1_avx2_6(t, s1, s2, tmp);
28834                 sp_384_proj_to_affine_avx2_6(t, tmp);
28835                 XMEMCPY(table[j].x, t->x, sizeof(table->x));
28836                 XMEMCPY(table[j].y, t->y, sizeof(table->y));
28837             }
28838         }
28839     }
28840 
28841 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
28842     if (t != NULL)
28843         XFREE(t, heap, DYNAMIC_TYPE_ECC);
28844 #endif
28845 
28846     return err;
28847 }
28848 
28849 #endif /* FP_ECC */
28850 #if defined(FP_ECC) || defined(WOLFSSL_SP_SMALL)
28851 /* Multiply the point by the scalar and return the result.
28852  * If map is true then convert result to affine coordinates.
28853  *
28854  * Stripe implementation.
28855  * Pre-generated: 2^0, 2^64, ...
28856  * Pre-generated: products of all combinations of above.
28857  * 6 doubles and adds (with qz=1)
28858  *
28859  * r      Resulting point.
28860  * k      Scalar to multiply by.
28861  * table  Pre-computed table.
28862  * map    Indicates whether to convert result to affine.
28863  * ct     Constant time required.
28864  * heap   Heap to use for allocation.
28865  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
28866  */
sp_384_ecc_mulmod_stripe_avx2_6(sp_point_384 * r,const sp_point_384 * g,const sp_table_entry_384 * table,const sp_digit * k,int map,int ct,void * heap)28867 static int sp_384_ecc_mulmod_stripe_avx2_6(sp_point_384* r, const sp_point_384* g,
28868         const sp_table_entry_384* table, const sp_digit* k, int map,
28869         int ct, void* heap)
28870 {
28871 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
28872     sp_point_384* rt = NULL;
28873     sp_digit* t = NULL;
28874 #else
28875     sp_point_384 rt[2];
28876     sp_digit t[2 * 6 * 6];
28877 #endif
28878     sp_point_384* p = NULL;
28879     int i;
28880     int j;
28881     int y;
28882     int x;
28883     int err = MP_OKAY;
28884 
28885     (void)g;
28886     /* Constant time used for cache attack resistance implementation. */
28887     (void)ct;
28888     (void)heap;
28889 
28890 
28891 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
28892     rt = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 2, heap,
28893                                       DYNAMIC_TYPE_ECC);
28894     if (rt == NULL)
28895         err = MEMORY_E;
28896     if (err == MP_OKAY) {
28897         t = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 6 * 6, heap,
28898                                DYNAMIC_TYPE_ECC);
28899         if (t == NULL)
28900             err = MEMORY_E;
28901     }
28902 #endif
28903 
28904     if (err == MP_OKAY) {
28905         p = rt + 1;
28906 
28907         XMEMCPY(p->z, p384_norm_mod, sizeof(p384_norm_mod));
28908         XMEMCPY(rt->z, p384_norm_mod, sizeof(p384_norm_mod));
28909 
28910         y = 0;
28911         x = 63;
28912         for (j=0; j<6; j++) {
28913             y |= (int)(((k[x / 64] >> (x % 64)) & 1) << j);
28914             x += 64;
28915         }
28916     #ifndef WC_NO_CACHE_RESISTANT
28917         if (ct) {
28918             sp_384_get_entry_64_avx2_6(rt, table, y);
28919         } else
28920     #endif
28921         {
28922             XMEMCPY(rt->x, table[y].x, sizeof(table[y].x));
28923             XMEMCPY(rt->y, table[y].y, sizeof(table[y].y));
28924         }
28925         rt->infinity = !y;
28926         for (i=62; i>=0; i--) {
28927             y = 0;
28928             x = i;
28929             for (j=0; j<6; j++) {
28930                 y |= (int)(((k[x / 64] >> (x % 64)) & 1) << j);
28931                 x += 64;
28932             }
28933 
28934             sp_384_proj_point_dbl_avx2_6(rt, rt, t);
28935         #ifndef WC_NO_CACHE_RESISTANT
28936             if (ct) {
28937                 sp_384_get_entry_64_avx2_6(p, table, y);
28938             }
28939             else
28940         #endif
28941             {
28942                 XMEMCPY(p->x, table[y].x, sizeof(table[y].x));
28943                 XMEMCPY(p->y, table[y].y, sizeof(table[y].y));
28944             }
28945             p->infinity = !y;
28946             sp_384_proj_point_add_qz1_avx2_6(rt, rt, p, t);
28947         }
28948 
28949         if (map != 0) {
28950             sp_384_map_avx2_6(r, rt, t);
28951         }
28952         else {
28953             XMEMCPY(r, rt, sizeof(sp_point_384));
28954         }
28955     }
28956 
28957 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
28958     if (t != NULL)
28959         XFREE(t, heap, DYNAMIC_TYPE_ECC);
28960     if (rt != NULL)
28961         XFREE(rt, heap, DYNAMIC_TYPE_ECC);
28962 #endif
28963 
28964     return err;
28965 }
28966 
28967 #endif /* FP_ECC | WOLFSSL_SP_SMALL */
28968 /* Multiply the base point of P384 by the scalar and return the result.
28969  * If map is true then convert result to affine coordinates.
28970  *
28971  * r     Resulting point.
28972  * g     Point to multiply.
28973  * k     Scalar to multiply by.
28974  * map   Indicates whether to convert result to affine.
28975  * ct    Constant time required.
28976  * heap  Heap to use for allocation.
28977  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
28978  */
sp_384_ecc_mulmod_avx2_6(sp_point_384 * r,const sp_point_384 * g,const sp_digit * k,int map,int ct,void * heap)28979 static int sp_384_ecc_mulmod_avx2_6(sp_point_384* r, const sp_point_384* g, const sp_digit* k,
28980         int map, int ct, void* heap)
28981 {
28982 #ifndef FP_ECC
28983     return sp_384_ecc_mulmod_win_add_sub_avx2_6(r, g, k, map, ct, heap);
28984 #else
28985     sp_digit tmp[2 * 6 * 7];
28986     sp_cache_384_t* cache;
28987     int err = MP_OKAY;
28988 
28989 #ifndef HAVE_THREAD_LS
28990     if (initCacheMutex_384 == 0) {
28991          wc_InitMutex(&sp_cache_384_lock);
28992          initCacheMutex_384 = 1;
28993     }
28994     if (wc_LockMutex(&sp_cache_384_lock) != 0)
28995        err = BAD_MUTEX_E;
28996 #endif /* HAVE_THREAD_LS */
28997 
28998     if (err == MP_OKAY) {
28999         sp_ecc_get_cache_384(g, &cache);
29000         if (cache->cnt == 2)
29001             sp_384_gen_stripe_table_avx2_6(g, cache->table, tmp, heap);
29002 
29003 #ifndef HAVE_THREAD_LS
29004         wc_UnLockMutex(&sp_cache_384_lock);
29005 #endif /* HAVE_THREAD_LS */
29006 
29007         if (cache->cnt < 2) {
29008             err = sp_384_ecc_mulmod_win_add_sub_avx2_6(r, g, k, map, ct, heap);
29009         }
29010         else {
29011             err = sp_384_ecc_mulmod_stripe_avx2_6(r, g, cache->table, k,
29012                     map, ct, heap);
29013         }
29014     }
29015 
29016     return err;
29017 #endif
29018 }
29019 
29020 #endif /* HAVE_INTEL_AVX2 */
29021 /* Multiply the point by the scalar and return the result.
29022  * If map is true then convert result to affine coordinates.
29023  *
29024  * km    Scalar to multiply by.
29025  * p     Point to multiply.
29026  * r     Resulting point.
29027  * map   Indicates whether to convert result to affine.
29028  * heap  Heap to use for allocation.
29029  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
29030  */
sp_ecc_mulmod_384(const mp_int * km,const ecc_point * gm,ecc_point * r,int map,void * heap)29031 int sp_ecc_mulmod_384(const mp_int* km, const ecc_point* gm, ecc_point* r,
29032         int map, void* heap)
29033 {
29034 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
29035     sp_point_384* point = NULL;
29036     sp_digit* k = NULL;
29037 #else
29038     sp_point_384 point[1];
29039     sp_digit k[6];
29040 #endif
29041     int err = MP_OKAY;
29042 #ifdef HAVE_INTEL_AVX2
29043     word32 cpuid_flags = cpuid_get_flags();
29044 #endif
29045 
29046 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
29047     point = (sp_point_384*)XMALLOC(sizeof(sp_point_384), heap,
29048                                          DYNAMIC_TYPE_ECC);
29049     if (point == NULL)
29050         err = MEMORY_E;
29051     if (err == MP_OKAY) {
29052         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 6, heap,
29053                                DYNAMIC_TYPE_ECC);
29054         if (k == NULL)
29055             err = MEMORY_E;
29056     }
29057 #endif
29058 
29059     if (err == MP_OKAY) {
29060         sp_384_from_mp(k, 6, km);
29061         sp_384_point_from_ecc_point_6(point, gm);
29062 
29063 #ifdef HAVE_INTEL_AVX2
29064         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
29065             err = sp_384_ecc_mulmod_avx2_6(point, point, k, map, 1, heap);
29066         else
29067 #endif
29068             err = sp_384_ecc_mulmod_6(point, point, k, map, 1, heap);
29069     }
29070     if (err == MP_OKAY) {
29071         err = sp_384_point_to_ecc_point_6(point, r);
29072     }
29073 
29074 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
29075     if (k != NULL)
29076         XFREE(k, heap, DYNAMIC_TYPE_ECC);
29077     if (point != NULL)
29078         XFREE(point, heap, DYNAMIC_TYPE_ECC);
29079 #endif
29080 
29081     return err;
29082 }
29083 
29084 /* Multiply the point by the scalar, add point a and return the result.
29085  * If map is true then convert result to affine coordinates.
29086  *
29087  * km      Scalar to multiply by.
29088  * p       Point to multiply.
29089  * am      Point to add to scalar mulitply result.
29090  * inMont  Point to add is in montgomery form.
29091  * r       Resulting point.
29092  * map     Indicates whether to convert result to affine.
29093  * heap    Heap to use for allocation.
29094  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
29095  */
sp_ecc_mulmod_add_384(const mp_int * km,const ecc_point * gm,const ecc_point * am,int inMont,ecc_point * r,int map,void * heap)29096 int sp_ecc_mulmod_add_384(const mp_int* km, const ecc_point* gm,
29097     const ecc_point* am, int inMont, ecc_point* r, int map, void* heap)
29098 {
29099 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
29100     sp_point_384* point = NULL;
29101     sp_digit* k = NULL;
29102 #else
29103     sp_point_384 point[2];
29104     sp_digit k[6 + 6 * 2 * 6];
29105 #endif
29106     sp_point_384* addP = NULL;
29107     sp_digit* tmp = NULL;
29108     int err = MP_OKAY;
29109 #ifdef HAVE_INTEL_AVX2
29110     word32 cpuid_flags = cpuid_get_flags();
29111 #endif
29112 
29113 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
29114     point = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 2, heap,
29115                                          DYNAMIC_TYPE_ECC);
29116     if (point == NULL)
29117         err = MEMORY_E;
29118     if (err == MP_OKAY) {
29119         k = (sp_digit*)XMALLOC(
29120             sizeof(sp_digit) * (6 + 6 * 2 * 6), heap,
29121             DYNAMIC_TYPE_ECC);
29122         if (k == NULL)
29123             err = MEMORY_E;
29124     }
29125 #endif
29126 
29127     if (err == MP_OKAY) {
29128         addP = point + 1;
29129         tmp = k + 6;
29130 
29131         sp_384_from_mp(k, 6, km);
29132         sp_384_point_from_ecc_point_6(point, gm);
29133         sp_384_point_from_ecc_point_6(addP, am);
29134     }
29135     if ((err == MP_OKAY) && (!inMont)) {
29136         err = sp_384_mod_mul_norm_6(addP->x, addP->x, p384_mod);
29137     }
29138     if ((err == MP_OKAY) && (!inMont)) {
29139         err = sp_384_mod_mul_norm_6(addP->y, addP->y, p384_mod);
29140     }
29141     if ((err == MP_OKAY) && (!inMont)) {
29142         err = sp_384_mod_mul_norm_6(addP->z, addP->z, p384_mod);
29143     }
29144     if (err == MP_OKAY) {
29145 #ifdef HAVE_INTEL_AVX2
29146         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
29147             err = sp_384_ecc_mulmod_avx2_6(point, point, k, 0, 0, heap);
29148         else
29149 #endif
29150             err = sp_384_ecc_mulmod_6(point, point, k, 0, 0, heap);
29151     }
29152     if (err == MP_OKAY) {
29153 #ifdef HAVE_INTEL_AVX2
29154         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
29155             sp_384_proj_point_add_avx2_6(point, point, addP, tmp);
29156         else
29157 #endif
29158             sp_384_proj_point_add_6(point, point, addP, tmp);
29159 
29160         if (map) {
29161 #ifdef HAVE_INTEL_AVX2
29162             if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
29163                 sp_384_map_avx2_6(point, point, tmp);
29164             else
29165 #endif
29166                 sp_384_map_6(point, point, tmp);
29167         }
29168 
29169         err = sp_384_point_to_ecc_point_6(point, r);
29170     }
29171 
29172 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
29173     if (k != NULL)
29174         XFREE(k, heap, DYNAMIC_TYPE_ECC);
29175     if (point != NULL)
29176         XFREE(point, heap, DYNAMIC_TYPE_ECC);
29177 #endif
29178 
29179     return err;
29180 }
29181 
29182 #ifdef WOLFSSL_SP_SMALL
29183 /* Striping precomputation table.
29184  * 6 points combined into a table of 64 points.
29185  * Distance of 64 between points.
29186  */
29187 static const sp_table_entry_384 p384_table[64] = {
29188     /* 0 */
29189     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
29190       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
29191     /* 1 */
29192     { { 0x3dd0756649c0b528L,0x20e378e2a0d6ce38L,0x879c3afc541b4d6eL,
29193         0x6454868459a30effL,0x812ff723614ede2bL,0x4d3aadc2299e1513L },
29194       { 0x23043dad4b03a4feL,0xa1bfa8bf7bb4a9acL,0x8bade7562e83b050L,
29195         0xc6c3521968f4ffd9L,0xdd8002263969a840L,0x2b78abc25a15c5e9L } },
29196     /* 2 */
29197     { { 0xa54768dab1b43eefL,0x13e41f47e14fda22L,0x774df203faef6863L,
29198         0xf795a034bd7471b3L,0xf0958718b47de2e9L,0xc92f7888e1160cffL },
29199       { 0x86ded97b0146c790L,0x015918f5480a4b7bL,0x05588920424e8459L,
29200         0x37455914eecf8b2bL,0xe7d3df1fb968a6faL,0x07a0ffd6bad0719fL } },
29201     /* 3 */
29202     { { 0xda37cd535c54db6fL,0x0e37890a91f06c5cL,0x1730ef7be7ae7db5L,
29203         0x2b3dcd51ff045f54L,0xf5db3c3c72cc8451L,0x3165d6efcf0c185cL },
29204       { 0x177c4f6bf5958d78L,0xcb29d22f8d676a9fL,0x3bcf0068792ac96dL,
29205         0x60d1c6b719df5641L,0x426e412a68a099f8L,0xf9ca0c5c9f74d52bL } },
29206     /* 4 */
29207     { { 0xf186d6bcc88d568aL,0x872bc4c7528535ddL,0xc9e7432edfe64dc3L,
29208         0xd9fc4832d795ea57L,0xf4ffdb81c845af2bL,0x66d7e7882b670517L },
29209       { 0xa7c1be04d7b7a1c6L,0xbed88479d5b2a249L,0x62ff8aba03f2ef6dL,
29210         0x60ecaac420dc701dL,0x9f4b559f4ff10119L,0x0582c9313cd54fd0L } },
29211     /* 5 */
29212     { { 0x394fb84de86e3f64L,0xfe4a36e7ff13314eL,0xa1e44b14dc261ec2L,
29213         0x3924e50a7420408fL,0x637e330242ed7626L,0xeb657b10fd711ba4L },
29214       { 0xc16d01c5340949bbL,0x30e043267f1f42c7L,0xe7465819b056d872L,
29215         0x3386f1c6886fb3dbL,0x5be463a5be56f774L,0xa96fd3b74694e15aL } },
29216     /* 6 */
29217     { { 0x95dd5ee5a98b4254L,0xea328205aa845e67L,0x98640fb5a1e36348L,
29218         0xd1bc5c251add5ee7L,0xc3158a423d11b799L,0x5feb68ed47c83d54L },
29219       { 0x7c5a1204963a207bL,0x2f2b2c7eee4671f8L,0xb63d291cd42867a6L,
29220         0x0b073620139530f4L,0xbe149492abb05b99L,0x21417da455accd2aL } },
29221     /* 7 */
29222     { { 0x9408555e9e5eba15L,0x416250137b7572c5L,0xfa53ee50bfff6ea7L,
29223         0x3d682de1e7b178c3L,0xb3e8769dec329f53L,0x1ab8c82e9eb524f4L },
29224       { 0x5bbd538dde2f1eb9L,0x1d1b0bea2b19c51eL,0xf785f9b98cb06eeeL,
29225         0x5cff29c6f58f21d5L,0x44aaa52245cbaef3L,0xd60c19427de40246L } },
29226     /* 8 */
29227     { { 0x378205de2f9fbe67L,0xc4afcb837f728e44L,0xdbcec06c682e00f1L,
29228         0xf2a145c3114d5423L,0xa01d98747a52463eL,0xfc0935b17d717b0aL },
29229       { 0x9653bc4fd4d01f95L,0x9aa83ea89560ad34L,0xf77943dcaf8e3f3fL,
29230         0x70774a10e86fe16eL,0x6b62e6f1bf9ffdcfL,0x8a72f39e588745c9L } },
29231     /* 9 */
29232     { { 0x73ade4da2341c342L,0xdd326e54ea704422L,0x336c7d983741cef3L,
29233         0x1eafa00d59e61549L,0xcd3ed892bd9a3efdL,0x03faf26cc5c6c7e4L },
29234       { 0x087e2fcf3045f8acL,0x14a65532174f1e73L,0x2cf84f28fe0af9a7L,
29235         0xddfd7a842cdc935bL,0x4c0f117b6929c895L,0x356572d64c8bcfccL } },
29236     /* 10 */
29237     { { 0x984a6aed6420bc66L,0x6d90e0e0896a24a6L,0xe0adb93a18713003L,
29238         0xf00d424c1a8369fcL,0x636ebf14712ae802L,0xee39ff8ebe9d739aL },
29239       { 0xb330dd3e94f6d1dcL,0x6ba6780eb7731cf8L,0x4e569408198be5a2L,
29240         0x6639523b0193a22cL,0x6978cc9d91aa1455L,0x62062d8f329f9763L } },
29241     /* 11 */
29242     { { 0x7159107d80efff78L,0xf8ed5f8e8e4c39d5L,0x64a2265cc15e679cL,
29243         0xfc514e17a6d96c81L,0x59c86545f093e0a8L,0x804b0a588b5a336aL },
29244       { 0x94c32118cb9dcbcaL,0x2deb0e385d45251dL,0xd1092b0986869572L,
29245         0x073bf838fb2e9f97L,0x76b6d7d6de700fcbL,0xd2a6d110f2ddce5fL } },
29246     /* 12 */
29247     { { 0x6da7ccd0229de19eL,0x5050d45df0aa039dL,0xf9f01d68d9e7a861L,
29248         0x6d8b9f2000aa05f2L,0xae3d9698742cd4d9L,0x43e477abd560c394L },
29249       { 0x73d594991cb6dd81L,0x689162b2fac3f62eL,0xd6187ca864d1d0d5L,
29250         0xe8421a0d2f067457L,0x9b266acbea7c3a8dL,0x707e0e6e44df5cb3L } },
29251     /* 13 */
29252     { { 0x604b2a1a026511a0L,0xd4f6cf16256f4076L,0x7d823347b315a642L,
29253         0x8f805833786aa438L,0x9883df85f04bb4b3L,0x02bc10305bba6d84L },
29254       { 0xfe39a024a72c03acL,0xa980db635f2dbfd0L,0xcd53149f4f259ec6L,
29255         0xe969079b43f53f97L,0xd3849fdb42f9f27cL,0xd2cfd3f842653dc9L } },
29256     /* 14 */
29257     { { 0xbf69fe6a6abe7d80L,0x4932288192bb50e2L,0xc9e2f7fb61e8b18dL,
29258         0x24c74788f6c82421L,0xe79e5e3011c0b244L,0xd6612c70e0484571L },
29259       { 0x7863ff927ef82d17L,0x692790feb0a1b01cL,0xa2d6ffb5afe51546L,
29260         0xacdb43f26cf550c6L,0x3b3243dfaecfaf8fL,0x9557335ac233bcd9L } },
29261     /* 15 */
29262     { { 0x25e08c8faff5b387L,0x112c11e2d06208ceL,0x61031c1765234214L,
29263         0xba06f5550514764dL,0xfaacf6f39bd197d0L,0xe4b032321464a57fL },
29264       { 0x00c19adfe35dcd69L,0x81b75730a1c2646cL,0x47baa4fee0c50e32L,
29265         0xe9297832bcaddb3bL,0x1768d2f9d712c6cfL,0xfcef29fdb82e9eeaL } },
29266     /* 16 */
29267     { { 0xdbe04c3044ce3ad8L,0x995fbb1b4ce8aad5L,0xdbf8b54670911457L,
29268         0x9e683b5b3f7a1757L,0x7b89a08a9c7bd62cL,0x448865a40b3fc97eL },
29269       { 0x0ac9abfc3bb01e94L,0xa07760421e756124L,0x0aa6c335d9deed97L,
29270         0xe270580f72603e08L,0x70857a946c783bb2L,0xa0047774caa929aeL } },
29271     /* 17 */
29272     { { 0x56211190a353e889L,0x052917c3190eb198L,0xadfd85b03eee3d12L,
29273         0xde1d761779fd9c91L,0x05be51b7bf500159L,0x271f07178fcb87f1L },
29274       { 0x02673e273a75ac71L,0xb1b7246eda12da8dL,0xb25647928f5fb8c0L,
29275         0x0a22cbe1063b1d7fL,0xb0d7a7365649976eL,0x8f8e6e289e96b15dL } },
29276     /* 18 */
29277     { { 0x8fc113f98312351cL,0xe837b9e0c5eff002L,0x7cb9ef074dad72fcL,
29278         0x18a8d43eb5eb7ee3L,0x2cf3ae844925efdbL,0x376e9e857756ec6aL },
29279       { 0xf77a79c8a3e3705fL,0x2d590b7d6c5fbab3L,0xa59713e27a4766c3L,
29280         0xb5da6a6861544174L,0xadb04a8adab1fe76L,0x03b6138d375143b4L } },
29281     /* 19 */
29282     { { 0x20d88a80c1bfa043L,0x88806999672583ceL,0x195a89eaaea9b605L,
29283         0x0b9b4e8532bac07bL,0x8279965683868df6L,0x83c58afab52711a9L },
29284       { 0xb895c13d1c869283L,0x00f98d046206dde6L,0x76caaa22884bf311L,
29285         0x22b2137f995b29a5L,0x7f645809b098b07bL,0xa540c8a6050e2552L } },
29286     /* 20 */
29287     { { 0x47980509e562d904L,0xe736f89d031e112cL,0xbc6bfb0765d8ae25L,
29288         0xe9ed4cc4ca459646L,0xf540e90e2fff67ffL,0x836280eb1a314e11L },
29289       { 0xa710b25041610627L,0xefc22b1573a9f9a2L,0x60f20789456498c0L,
29290         0x417920438052f4e7L,0x5c850903d5c0e80dL,0x52df5275bf1d8815L } },
29291     /* 21 */
29292     { { 0x25539de98ece218dL,0xb36574a8dca420baL,0x9d1812680e0d07feL,
29293         0xea79a5f5ad3ed34fL,0x8b739ad57c9277cfL,0xd88659886ee9a930L },
29294       { 0xaf07bfb621591a3eL,0xe0138c6508f3524fL,0xd3128f1297ee315eL,
29295         0x67f8641e21045f63L,0x3e1a96b140c73a2dL,0x8976b70305f51122L } },
29296     /* 22 */
29297     { { 0xdeaf635731960db4L,0x680b054e5948d7f7L,0x0841e40fd272bb5cL,
29298         0x94d37db26e36117dL,0xaf2d001547f63ec8L,0x82665cdc47493309L },
29299       { 0xfe90e844abbe3851L,0x8357709afb79bc0cL,0x811a64d2b6bcc044L,
29300         0x1937c988882b3415L,0xe8b28724e267b271L,0x84d1eed0af89ed33L } },
29301     /* 23 */
29302     { { 0x52b8234f54c894a7L,0xfe54146fa2d11b70L,0x6412b5eb0aab6097L,
29303         0xa62499906a13a9daL,0xd2b1eb50adc448caL,0xe7ab51f9b115ab92L },
29304       { 0x4638ee62e76551d8L,0x74c3c1e1afe9c98dL,0x59000ad060d77322L,
29305         0x0a4b105ba06adc9aL,0xcdaeb4a496a6f616L,0x8c79c4a1864b49dcL } },
29306     /* 24 */
29307     { { 0xc09c32d1c0b1bf15L,0x005d510f88d74e44L,0x031f9a9afc2c089eL,
29308         0x08aac7294ba183f0L,0xf227a7ceaf2245ebL,0xb4ec33cbb3a864ffL },
29309       { 0xdb76decd570a24f3L,0xea59387a12283a9eL,0x81b7c569341ef9a4L,
29310         0xad7c98bd8d77833aL,0x2182133b49ca80ffL,0x1de1d456085802b7L } },
29311     /* 25 */
29312     { { 0xeead25b2e1c02860L,0xb2ae43694ff42d2eL,0x4b39a2ddfd61c1b0L,
29313         0x29c826ea968718a5L,0x877fdf15d9751a0aL,0x00b321dfb54affdfL },
29314       { 0x3c7c0778d4d5dbf7L,0x858a0fdccfc47423L,0xbd8e6544185b3063L,
29315         0xa22c3ef62da46a04L,0x5c2d84016a6c0ce1L,0x260246eddd6329aeL } },
29316     /* 26 */
29317     { { 0x71753fc00c6463f6L,0x7ec14c015c6c9e33L,0x28b9ab9441ce6153L,
29318         0x3a1ac251a6702c8dL,0x2b124bc49ed6cb1fL,0x7a11c4be4fc7383fL },
29319       { 0x1414913509fac991L,0xf7c188d3cb1ee336L,0x754bc47391c3f406L,
29320         0x71d34587cad39500L,0x213dd1a7dd0399a1L,0x8457a8f671d05899L } },
29321     /* 27 */
29322     { { 0xa921ca662e9c06d3L,0x1d8974e89ba6521fL,0xbb465c775f79f791L,
29323         0x8f983f083a3954c8L,0x8492f8398b3935dcL,0x2b87d9c290c04426L },
29324       { 0xcec76ea403e60a28L,0x648e9830aa631308L,0x7b542f791eb86b73L,
29325         0xfc8cc9a3150d854dL,0x2be86940bfcc83feL,0x2e58a13ac88c7585L } },
29326     /* 28 */
29327     { { 0x19249a8fd1bc237fL,0xdec1c6a563505555L,0xc8256977bad2a93bL,
29328         0x78533659fc598170L,0x888a6578ee7e53cbL,0x28783b0e33766db3L },
29329       { 0xcf791e56e42c28f2L,0xfbf8dde8f9c37f4cL,0xf0ffaf1712c05395L,
29330         0xd27d21e9daf2f012L,0xf90432da9a7be009L,0xa459c036a8012f28L } },
29331     /* 29 */
29332     { { 0x4d99a7cac8b1c6d4L,0x8088818825c899c0L,0xbd27e9be2ebdeb3dL,
29333         0x73c3e0aa054e77c1L,0x180c848498534ce5L,0x750d52f754ffa9cdL },
29334       { 0x5f26eeb16f702f4cL,0x427fc6e4cc76d8f4L,0x93126b8d026b631dL,
29335         0x5356b93917e145a7L,0xc79ca872c0be7c84L,0x3fca7cad4b615fb7L } },
29336     /* 30 */
29337     { { 0xed48fe78d0241021L,0x252b14a0142f7f8eL,0x19ab85c6db573a09L,
29338         0x546c3960f3df906fL,0xc688f4b22c810ea8L,0xbccf0cca5ff9e108L },
29339       { 0x34f4609e3f2cc69bL,0xf3b1efe414afe4f4L,0x5d809cef37a8ef74L,
29340         0xa8d1978a176ba328L,0x75dde11fdf59ecb9L,0x34eeeaffa9916ee2L } },
29341     /* 31 */
29342     { { 0xe7f603f248e83c85L,0xa94a539cfa581815L,0x5a61a596dba360b7L,
29343         0x6cc51dd16a77ef79L,0x4ff36ae0fdbceb9dL,0xfcff65323e8a9c07L },
29344       { 0x0ba0ce5436d4d0b8L,0x98087a452464efc2L,0xd456843bcc1a2ba7L,
29345         0x677384a53853e04cL,0x625d32d56c7971deL,0x86882509f724b331L } },
29346     /* 32 */
29347     { { 0xc20fb9111a42e5e7L,0x075a678b81d12863L,0x12bcbc6a5cc0aa89L,
29348         0x5279c6ab4fb9f01eL,0xbc8e178911ae1b89L,0xae74a706c290003cL },
29349       { 0x9949d6ec79df3f45L,0xba18e26296c8d37fL,0x68de6ee2dd2275bfL,
29350         0xa9e4fff8c419f1d5L,0xbc759ca4a52b5a40L,0xff18cbd863b0996dL } },
29351     /* 33 */
29352     { { 0x684a681892a5eeeaL,0x1f5b193242a09264L,0x30bd8695d98a2f34L,
29353         0x6e775e019a8601fcL,0x8126bdc24ca956f8L,0x149e73d9e5595daaL },
29354       { 0x876428401f851e83L,0x4b8863dbd3a7c4a0L,0xe1e43b3d8c95d7d9L,
29355         0x7f1e307ea60fd528L,0xbf2fa5d134341610L,0x11ad4a8181c502d3L } },
29356     /* 34 */
29357     { { 0xc7df022e782dd401L,0xd15aa9a9a7bcc543L,0x6aa42774b94df1d0L,
29358         0xab2660c30592a13eL,0xaf4e40809ffc40c7L,0x01152c8d9cd52b10L },
29359       { 0x649de1d99034a33aL,0x2b9d0ef0d758abfcL,0xdddd0bc2d458adddL,
29360         0xe5366ac9c09837f8L,0xa003abbb7b1ae35fL,0x880062887ab1fddeL } },
29361     /* 35 */
29362     { { 0x6b6c8f055288f1b4L,0xba05407c033738b4L,0x26cac3a941a955e3L,
29363         0x28f1692f8e0e0601L,0x2032cb36842c4887L,0x6adeba457d76b20fL },
29364       { 0xd282c2ce654c6f5cL,0x30584ca5be9ba4f1L,0x45d766a01b2c528bL,
29365         0xe918bad7c0c6f8ccL,0x1e050b2a0560f070L,0x4fc95de12d6dd010L } },
29366     /* 36 */
29367     { { 0x2bb26072150191d5L,0xea2617618108dcf6L,0x4dfa1303e6083c63L,
29368         0xfa4e0709e2876fb8L,0xf901fed0b1668763L,0xf01c53aeb82c967aL },
29369       { 0xb43e59d39ed827e8L,0xb58e157e57774eefL,0x57ee54e31b83dceeL,
29370         0x3d896f32613aa922L,0x69d40667b5c7bfc5L,0xd402b5cb77a2c0d8L } },
29371     /* 37 */
29372     { { 0xabeb70127d3c9923L,0x412ada8dd7ecb93aL,0xeb64dc910b71ae2fL,
29373         0x52ef537aa9ab061aL,0x0863970fc1b55faeL,0xfaff5fb9b1182dbdL },
29374       { 0x5551d6fed0abaa17L,0x7bb3e02072d641f6L,0x939d7793aa9d288cL,
29375         0x1450f8bf9078e2c2L,0x24ccd102a086b6aeL,0x57d1796f6a3f8a5fL } },
29376     /* 38 */
29377     { { 0x1023120683ce1f76L,0xd16d4b9f03ee406fL,0x9d39c39883caa4b7L,
29378         0x875732f5ce299b93L,0x1e6a425d2f121f4aL,0x4b1f1d835d8c3279L },
29379       { 0xe655f58856dd6a6cL,0x23f106475843fd34L,0x932b7d942bad6ce2L,
29380         0x70a0580e6772a52eL,0x3240118ac88537afL,0x9ccb2ca9d2407224L } },
29381     /* 39 */
29382     { { 0xa6a40db8710f2324L,0xb3567518c2a8a09aL,0x8816442841b5650aL,
29383         0x2a352ed27570ba50L,0x23ee46b94c85d77eL,0x643aceffd858a8c3L },
29384       { 0xe067908de3f02e82L,0x8d5869f2ffb8cf81L,0x4713f0820bc8ad7eL,
29385         0xe1ee44c780057c40L,0xb34395087d2cf34eL,0x4307b0e10336a207L } },
29386     /* 40 */
29387     { { 0xe9c1e45746e4d003L,0xa23978c394332057L,0x0e2f300829575db6L,
29388         0x50a51ff490441e9eL,0x38ce3ed0508d4a07L,0x6a997411cfd7224eL },
29389       { 0x4d147c31da6b1e1dL,0xedf604b2da8a3547L,0x7a1b8cf0d5e9ceedL,
29390         0xd74e501213544e6aL,0xcc49f8da4ad968f9L,0xfb87e604cc69ada9L } },
29391     /* 41 */
29392     { { 0xde79409bdf166882L,0xd645b836d46cc527L,0xda4a02f3b6c3eb28L,
29393         0x845e3c5900e7cf86L,0x733bdc9b604c6d80L,0xe3a1244b847acd97L },
29394       { 0x421312d6d128842cL,0x81f71feaa1c598efL,0xc619465545eaf796L,
29395         0x1ffb85121f338b6cL,0xe7aed7106632f064L,0xf8d1ffb7f5b6e510L } },
29396     /* 42 */
29397     { { 0x7d3f031f3eace851L,0xef43ab7025923624L,0xbae811881af6cdecL,
29398         0xb7e93b49ea862112L,0xe35a4fc6af23aba2L,0xc52e1fc0aecc593eL },
29399       { 0xbffa292428148b99L,0xd08040fc89e3d795L,0x7da320032db47b3aL,
29400         0xe78b44e5a0eb7aa3L,0xd1648ec8f0ec090bL,0x4048dba7740fe871L } },
29401     /* 43 */
29402     { { 0x6fddb89fa00a14acL,0x844f991508aa06e7L,0x6d5ac4a9f76aca7dL,
29403         0xfba1ba85e9fa4d51L,0x159633bbb2ea0fc7L,0xa2eb0e4b76ba2854L },
29404       { 0x8a858155c11f5398L,0x30a96e535e8ea044L,0x696210c197e05a47L,
29405         0x86e55f9415036f4bL,0x0c93ea9c6a96d9d7L,0xb7ba506179eba3daL } },
29406     /* 44 */
29407     { { 0xd305c733cd94d7b2L,0x9ea33e363e7955b2L,0x78a98855bc73812fL,
29408         0xfb1b791d48a3a9a0L,0x6e5107ee04014aafL,0x0412b2c00ea07de0L },
29409       { 0xdd3a2408ddcaca68L,0x5d18e69ae3344f29L,0x3ce65481f9017408L,
29410         0x50abb4568cbd64fbL,0x442fa5098916a9ebL,0x16b3ddc7c538c410L } },
29411     /* 45 */
29412     { { 0x6757dbfd25e331abL,0x0efde50ba3eaafbcL,0x1cd46222d531d29cL,
29413         0x1b713ca93561cb2bL,0x7d07334bfb5bc99dL,0x95dba43e885a417dL },
29414       { 0x1c9c3f3f77823a59L,0x43533ba83220cb7fL,0x1b918bc182e3e401L,
29415         0x66a039aacd3fec87L,0x1d39dbb02dad36d5L,0x554025959dc04be4L } },
29416     /* 46 */
29417     { { 0xdf39920847744933L,0x4264f7ea82524dd6L,0xdb57ec08e5182c6dL,
29418         0x2d6778e705c5e7bfL,0x3f37793f96f53ea2L,0x6472cbae05c47e48L },
29419       { 0x9e6dd60fbf78067cL,0xa2817ec2cef34088L,0xde4715b8168edde9L,
29420         0x6c57105146bf31e1L,0x98113fbbc4272bc0L,0x03bb7922cc3b90c3L } },
29421     /* 47 */
29422     { { 0xe0f23be157d88fefL,0x4125c55b0ca27a01L,0xeadf527e14a71262L,
29423         0x1f2e803ccc4e9a04L,0x32e07b47d68c4fcfL,0x1577fab79db5070bL },
29424       { 0xd786d6e57831990aL,0xf64ff4b154fbde40L,0x4bac5b034f9450aeL,
29425         0x06ae25e055116af9L,0x33d84ea2d7b4fcfcL,0x44a92e73569c3b9eL } },
29426     /* 48 */
29427     { { 0xf5bdccbabad0cb7fL,0x370f43ca958edd05L,0x3dd8232b04904a26L,
29428         0x3f8106682f4458e8L,0xdfcb67b99b3ace7eL,0x54e42f2d3e1241fcL },
29429       { 0xe30f3fb0db889300L,0x4ca0184b483e51fcL,0x5a32d097a638dac6L,
29430         0x567a2b5ec62a1db0L,0x2a756ba3c446456cL,0x6919026dd9f8d5c0L } },
29431     /* 49 */
29432     { { 0x7f6493fc4fec874aL,0x8bb8a674d47a0770L,0x90bad2a652bd4f0cL,
29433         0x16badbe2f5733b07L,0x93be07cf93a1f802L,0x1e37a01541c395f7L },
29434       { 0xfe2c0fd6216582b3L,0xdcd98bc81627180dL,0x41e037268e8c9f1eL,
29435         0x93dbc22cfe8f45afL,0x5728c8a6ff45e059L,0x4f2f15cfca4a98cdL } },
29436     /* 50 */
29437     { { 0xdbe2ec5d656e7d76L,0x84ad1b4bae2757bbL,0xc9297e7a0d4fec75L,
29438         0xfcc673eecad3ba87L,0xb0f77621dfd1671aL,0x5c386e449704a8c7L },
29439       { 0xce78f03f3e29256dL,0x0b185938c3a6ed2fL,0x7b1e2fae7824819bL,
29440         0x5a85d7f1f2d9313cL,0x238bd27973595b0fL,0x5fbf6b675c1cd2dcL } },
29441     /* 51 */
29442     { { 0x84d1ffb88a3e2412L,0xf01605926515f2feL,0x0e26ea9889905340L,
29443         0xbfd7a1b7203bd3d4L,0x5301273a88ea0bdaL,0x2f424475b28dd43eL },
29444       { 0x31014a2b33c28afaL,0xffbdea0c01e220eaL,0x681c64e8460b81d5L,
29445         0xdbe6f7286a91e1d5L,0x068bf36332619ad5L,0x4946291f27976c74L } },
29446     /* 52 */
29447     { { 0xa081a9462068e4b0L,0x1a8f5df609bfdad0L,0x5fbba5bcef28dd35L,
29448         0xa3e60d4f031ff71eL,0x2d47689b702ca18eL,0xd283f247c9b8e66bL },
29449       { 0x63e65dd7859ea140L,0x123da61f42aacdc3L,0xa8a9e893336f680cL,
29450         0x1cc4e12ac23d43acL,0x421e80d586a1fff8L,0x833d60d543deecc9L } },
29451     /* 53 */
29452     { { 0x3c25b57c29014f8fL,0xa19fcb1e35d8e122L,0x916c0e3ceda32ac8L,
29453         0x9a23d289f36b6096L,0x5099038439a39871L,0xdc5b77b661c64196L },
29454       { 0x5a7d9917942bf2b6L,0xd21853934f41cf6dL,0x90ff1016fcc45c2fL,
29455         0x9891093deb8938aaL,0xe3c49b1baac4e6e9L,0x0f21a1d1d7a8e91eL } },
29456     /* 54 */
29457     { { 0x3a808e336f364b7eL,0x6a96d1b8bfa17359L,0x3387ec8552b36545L,
29458         0x2fde350af712180cL,0x9219d6f4703a2183L,0x8ba27e0086457946L },
29459       { 0x7446bca0ed80a9afL,0xbaf78b6f7203637aL,0x0304129d497c9d0fL,
29460         0x6df1e0356a883b68L,0x93ea2bb5e8018c47L,0xc86fd77cdb46443cL } },
29461     /* 55 */
29462     { { 0x8de865d255dc2427L,0x74f7f83d6f72d126L,0xee1111786c7e665aL,
29463         0x272a8b3dddf44f12L,0xad3546449164eb4fL,0x2ffbdb586859d68fL },
29464       { 0xbefd36c509701865L,0x63c256162c983d01L,0x15a7ba0b2eb68703L,
29465         0x3318a82b5bb0fafcL,0x8e930fa9a0804f38L,0xb7459eb6be60ed1dL } },
29466     /* 56 */
29467     { { 0xace01c514260b948L,0x04a6080f49210f78L,0x0d1eef6b2241b00dL,
29468         0x85a25069ef63912aL,0xcc96c4ec13dd8bc2L,0x90f14d1140d7e234L },
29469       { 0xae33f18ca69c8dc3L,0x76921f2a9adfa431L,0x18158ccf048c9f49L,
29470         0x90bcf7fbfb8fb345L,0x0d50b4dc38b3ff5dL,0x3914ea0b59ef84a8L } },
29471     /* 57 */
29472     { { 0x4929d3f9d4e37cf3L,0x622183d1b24c24c0L,0x65cec0675f904d34L,
29473         0x65f9931a8a6f76faL,0xeed975b0e73282f2L,0xa045552a5e1625fdL },
29474       { 0xfd6b3e02f8fe8e42L,0x5f9f40256203907cL,0x8307eedb42b2c264L,
29475         0x2fb3ee719f757e92L,0x4502f2ecdc157ea8L,0xd976e7755d1cc0d5L } },
29476     /* 58 */
29477     { { 0xe46fb9a28fe1946eL,0xe91df3ed63bdde6eL,0x2e995306e9c28432L,
29478         0x7b3a6fe10988235bL,0xc55199f077f92a71L,0x47dd034853cb7950L },
29479       { 0xead52de2b727a6d1L,0xb87c9f75eea9c8daL,0xf3e2f3280d944f21L,
29480         0xce82734edd751eddL,0xfb83225ce616cedcL,0x15850e4b4a31eb49L } },
29481     /* 59 */
29482     { { 0x92c4b6d50196ad3aL,0x0205ea484e1205e4L,0x8e08a97c0afc5affL,
29483         0xda8687c6727827ebL,0x2eace83106e398aaL,0x3a086c0f6d69e4e8L },
29484       { 0x5ff9b7aaf286e62aL,0xc428503962aae55eL,0x4ebd4258d9530a3fL,
29485         0x57ea313a8afc7fcbL,0x6d30a67522c18879L,0xd3c00cc994afb659L } },
29486     /* 60 */
29487     { { 0x53ee47c5dee0d48bL,0xbd9e84ad9dfa2397L,0x2d581e12f81ba5e2L,
29488         0x26269f4f132cd325L,0x9e6224df58860a5fL,0x9306c607ff55522aL },
29489       { 0xb48af6d4146950e5L,0x09920ed00436805eL,0x3a1bc276cdce7eaeL,
29490         0x55ba728ac39a425eL,0x6a04d4e6d961d03eL,0x13891c66736e684aL } },
29491     /* 61 */
29492     { { 0x7c75175a04cd04d6L,0xb76f9bd909c27a17L,0xa0cff6d408e5fe36L,
29493         0xc9097695dcd5ef90L,0x26bea24585e28054L,0x658e03c61580f068L },
29494       { 0x0da9f75e811eed27L,0x086e5e04aca0d2eeL,0xd4c157faa53a6787L,
29495         0x2e9266d2b40a595cL,0x8f1cb52698fa0820L,0x32a74240a1aef514L } },
29496     /* 62 */
29497     { { 0xeb42e3d91ae86e7cL,0xd6956c8ce04a5026L,0x4c0b8b980f4302ebL,
29498         0xde43c938b37211fdL,0x9fa6a158e7090f80L,0x5f3c9afc73c47fb6L },
29499       { 0x2dc4f109f850a4d0L,0x56e63a4b6fd49d6aL,0x8e80a0694cbff048L,
29500         0x18d8b8cf2284afb0L,0x61dd086dc89363a1L,0x034c2202c37342a4L } },
29501     /* 63 */
29502     { { 0x1ae0c4e11c718580L,0x303f48a6bf99a0bfL,0xa5551e4491ae219fL,
29503         0xdc41d9bd55a05287L,0xd5aa73e36872b123L,0x6fd94b0ce6395bf6L },
29504       { 0xbb95fdbac00afbc1L,0x9cd96208497cac10L,0x8adbd8c1ca51afeaL,
29505         0x94fedafbf3bc5f5fL,0x29c0217bdf9f5371L,0x5c13eb4bd9024634L } },
29506 };
29507 
29508 /* Multiply the base point of P384 by the scalar and return the result.
29509  * If map is true then convert result to affine coordinates.
29510  *
29511  * Stripe implementation.
29512  * Pre-generated: 2^0, 2^64, ...
29513  * Pre-generated: products of all combinations of above.
29514  * 6 doubles and adds (with qz=1)
29515  *
29516  * r     Resulting point.
29517  * k     Scalar to multiply by.
29518  * map   Indicates whether to convert result to affine.
29519  * ct    Constant time required.
29520  * heap  Heap to use for allocation.
29521  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
29522  */
sp_384_ecc_mulmod_base_6(sp_point_384 * r,const sp_digit * k,int map,int ct,void * heap)29523 static int sp_384_ecc_mulmod_base_6(sp_point_384* r, const sp_digit* k,
29524         int map, int ct, void* heap)
29525 {
29526     return sp_384_ecc_mulmod_stripe_6(r, &p384_base, p384_table,
29527                                       k, map, ct, heap);
29528 }
29529 
29530 #ifdef HAVE_INTEL_AVX2
29531 /* Multiply the base point of P384 by the scalar and return the result.
29532  * If map is true then convert result to affine coordinates.
29533  *
29534  * Stripe implementation.
29535  * Pre-generated: 2^0, 2^64, ...
29536  * Pre-generated: products of all combinations of above.
29537  * 6 doubles and adds (with qz=1)
29538  *
29539  * r     Resulting point.
29540  * k     Scalar to multiply by.
29541  * map   Indicates whether to convert result to affine.
29542  * ct    Constant time required.
29543  * heap  Heap to use for allocation.
29544  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
29545  */
sp_384_ecc_mulmod_base_avx2_6(sp_point_384 * r,const sp_digit * k,int map,int ct,void * heap)29546 static int sp_384_ecc_mulmod_base_avx2_6(sp_point_384* r, const sp_digit* k,
29547         int map, int ct, void* heap)
29548 {
29549     return sp_384_ecc_mulmod_stripe_avx2_6(r, &p384_base, p384_table,
29550                                       k, map, ct, heap);
29551 }
29552 
29553 #endif /* HAVE_INTEL_AVX2 */
29554 #else /* WOLFSSL_SP_SMALL */
29555 /* The index into pre-computation table to use. */
29556 static const uint8_t recode_index_6_7[130] = {
29557      0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
29558     16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
29559     32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
29560     48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
29561     64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49,
29562     48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33,
29563     32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17,
29564     16, 15, 14, 13, 12, 11, 10,  9,  8,  7,  6,  5,  4,  3,  2,  1,
29565      0,  1,
29566 };
29567 
29568 /* Whether to negate y-ordinate. */
29569 static const uint8_t recode_neg_6_7[130] = {
29570      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
29571      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
29572      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
29573      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
29574      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
29575      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
29576      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
29577      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
29578      0,  0,
29579 };
29580 
29581 /* Recode the scalar for multiplication using pre-computed values and
29582  * subtraction.
29583  *
29584  * k  Scalar to multiply by.
29585  * v  Vector of operations to perform.
29586  */
sp_384_ecc_recode_7_6(const sp_digit * k,ecc_recode_384 * v)29587 static void sp_384_ecc_recode_7_6(const sp_digit* k, ecc_recode_384* v)
29588 {
29589     int i;
29590     int j;
29591     uint8_t y;
29592     int carry = 0;
29593     int o;
29594     sp_digit n;
29595 
29596     j = 0;
29597     n = k[j];
29598     o = 0;
29599     for (i=0; i<55; i++) {
29600         y = (int8_t)n;
29601         if (o + 7 < 64) {
29602             y &= 0x7f;
29603             n >>= 7;
29604             o += 7;
29605         }
29606         else if (o + 7 == 64) {
29607             n >>= 7;
29608             if (++j < 6)
29609                 n = k[j];
29610             o = 0;
29611         }
29612         else if (++j < 6) {
29613             n = k[j];
29614             y |= (uint8_t)((n << (64 - o)) & 0x7f);
29615             o -= 57;
29616             n >>= o;
29617         }
29618 
29619         y += (uint8_t)carry;
29620         v[i].i = recode_index_6_7[y];
29621         v[i].neg = recode_neg_6_7[y];
29622         carry = (y >> 7) + v[i].neg;
29623     }
29624 }
29625 
29626 extern void sp_384_get_entry_65_6(sp_point_384* r, const sp_table_entry_384* table, int idx);
29627 extern void sp_384_get_entry_65_avx2_6(sp_point_384* r, const sp_table_entry_384* table, int idx);
29628 static const sp_table_entry_384 p384_table[3575] = {
29629     /* 0 << 0 */
29630     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
29631       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
29632     /* 1 << 0 */
29633     { { 0x3dd0756649c0b528L,0x20e378e2a0d6ce38L,0x879c3afc541b4d6eL,
29634         0x6454868459a30effL,0x812ff723614ede2bL,0x4d3aadc2299e1513L },
29635       { 0x23043dad4b03a4feL,0xa1bfa8bf7bb4a9acL,0x8bade7562e83b050L,
29636         0xc6c3521968f4ffd9L,0xdd8002263969a840L,0x2b78abc25a15c5e9L } },
29637     /* 2 << 0 */
29638     { { 0xc8229e55783dde91L,0x8e6c8f2e022b53f0L,0x3504e6f0ff9d48a1L,
29639         0xda821495f0687f50L,0x9c90a4fd2de4b506L,0xdb93b776427460c3L },
29640       { 0x42ea84633140bfdaL,0xe8e8e4a8c2aaccd8L,0x15e4f18bdc588258L,
29641         0x09f1fe415172bad9L,0x070d430900b0e684L,0xe34947f7123df0c2L } },
29642     /* 3 << 0 */
29643     { { 0x05e4dbe6c1dc4073L,0xc54ea9fff04f779cL,0x6b2034e9a170ccf0L,
29644         0x3a48d732d51c6c3eL,0xe36f7e2d263aa470L,0xd283fe68e7c1c3acL },
29645       { 0x7e284821c04ee157L,0x92d789a77ae0e36dL,0x132663c04ef67446L,
29646         0x68012d5ad2e1d0b4L,0xf6db68b15102b339L,0x465465fc983292afL } },
29647     /* 4 << 0 */
29648     { { 0x0aae8477ebb68f2cL,0x30594ccbee0421e3L,0x2e4f153b0aecac46L,
29649         0x078358d4736400adL,0xfb40f647d685d979L,0xcfeee6dd34179228L },
29650       { 0x54f3e8e79b3a03b2L,0xe74bb7f17bfec97eL,0x8e3e61a34c542ad1L,
29651         0x147162d30418c693L,0xe607b9e33820017dL,0x50946875303df319L } },
29652     /* 5 << 0 */
29653     { { 0xbb595eba68f1f0dfL,0xc185c0cbcc873466L,0x7f1eb1b5293c703bL,
29654         0x60db2cf5aacc05e6L,0xc676b987e2e8e4c6L,0xe1bb26b11d178ffbL },
29655       { 0x2b694ba07073fa21L,0x22c16e2e72f34566L,0x80b61b3101c35b99L,
29656         0x4b237faf982c0411L,0xe6c5944024de236dL,0x4db1c9d6e209e4a3L } },
29657     /* 6 << 0 */
29658     { { 0x7eb5c9317d56dad8L,0xcb2454b339d3413aL,0xec52930f580d57f2L,
29659         0x2a33f6661bdf6015L,0x4f0f6a962b02d33bL,0xc482e189f0430c40L },
29660       { 0x3f62b16ea7b08203L,0x739ac69d5b3d4dceL,0x8bd4bffcb79e33b0L,
29661         0x93c9e5f61b546f05L,0x586d8ededf21559aL,0xc9962152af2a9ebaL } },
29662     /* 7 << 0 */
29663     { { 0xdf13b9d17d69222bL,0x4ce6415f874774b1L,0x731edcf8211faa95L,
29664         0x5f4215d1659753edL,0xf893db589db2df55L,0x932c9f811c89025bL },
29665       { 0x0996b2207706a61eL,0x135349d5a8641c79L,0x65aad76f50130844L,
29666         0x0ff37c0401fff780L,0xf57f238e693b0706L,0xd90a16b6af6c9b3eL } },
29667     /* 8 << 0 */
29668     { { 0x23f60a05dd9bcbbaL,0x9e336de5ae9b587aL,0x1c5c2e7193d7e30fL,
29669         0x1d9aebd64f3ddb37L,0x1c7b5fe116b66423L,0x5db4f184349cd9b1L },
29670       { 0x0d2cfe83e6655a44L,0x836dbb36b7e55e87L,0x701754bf7d8686e4L,
29671         0xe9923263a42dbba2L,0x7008d943c48ecf0eL,0x3c0c6dd70d27ef61L } },
29672     /* 9 << 0 */
29673     { { 0x2f5d200e2353b92fL,0xe35d87293fd7e4f9L,0x26094833a96d745dL,
29674         0xdc351dc13cbfff3fL,0x26d464c6dad54d6aL,0x5cab1d1d53636c6aL },
29675       { 0xf2813072b18ec0b0L,0x3777e270d742aa2fL,0x27f061c7033ca7c2L,
29676         0xa6ecaccc68ead0d8L,0x7d9429f4ee69a754L,0xe770633431e8f5c6L } },
29677     /* 10 << 0 */
29678     { { 0x845539d3c8d99c02L,0x2a15a9a6e58d6787L,0xe9f6368eab225fa3L,
29679         0x54a612d7eb32cabeL,0xc2f646025c4845ecL,0xa91a5280db1c212eL },
29680       { 0xbb971f78e67b5fceL,0x03a530eb13b9e85cL,0x592ac0ba794eabfdL,
29681         0x81961b8ccfd7fd1dL,0x3e03370a47a9b8aaL,0x6eb995bec80174e8L } },
29682     /* 11 << 0 */
29683     { { 0xc7708b19b68b8c7dL,0x4532077c44377abaL,0x0dcc67706cdad64fL,
29684         0x01b8bf56147b6602L,0xf8d89885f0561d79L,0x9c19e9fc7ba9c437L },
29685       { 0x764eb146bdc4ba25L,0x604fe46bac144b83L,0x3ce813298a77e780L,
29686         0x2e070f36fe9e682eL,0x41821d0c3a53287aL,0x9aa62f9f3533f918L } },
29687     /* 12 << 0 */
29688     { { 0x3db8477270313de0L,0xd4258cc55d970420L,0x03aced26c8edfee1L,
29689         0xf67eb42235d77d83L,0x523c40dbcf9ab45cL,0x627b415f9c35b26dL },
29690       { 0xfacc45e48be55ed8L,0x80d60af627aa651aL,0x8c79848fd0e102acL,
29691         0x40c64a4e66bed5afL,0x0329eab1f7942f0eL,0x0c6e430ef9c4af3dL } },
29692     /* 13 << 0 */
29693     { { 0x9b7aeb7e75ccbdfbL,0xb25e28c5f6749a95L,0x8a7a8e4633b7d4aeL,
29694         0xdb5203a8d9c1bd56L,0xd2657265ed22df97L,0xb51c56e18cf23c94L },
29695       { 0xf4d394596c3d812dL,0xd8e88f1a87cae0c2L,0x789a2a48cf4d0fe3L,
29696         0xb7feac2dfec38d60L,0x81fdbd1c3b490ec3L,0x4617adb7cc6979e1L } },
29697     /* 14 << 0 */
29698     { { 0x5865e5018f75244cL,0xd02225fb01ec909fL,0xca6b1af8b1f85c2aL,
29699         0x44ce05ff88957166L,0x8058994c5710c0c9L,0x46d227c432f6b1baL },
29700       { 0xbe4b4a9003cb68e5L,0x540b8b82730a99d1L,0x1ecc8585e11dbbbfL,
29701         0x72445345d9c3b691L,0x647d24db13690a74L,0x4429839ddefbadf5L } },
29702     /* 15 << 0 */
29703     { { 0x446ad8884709f4a9L,0x2b7210e2ec3dabd8L,0x83ccf19550e07b34L,
29704         0x59500917789b3075L,0x0fc01fd4eb085993L,0xfb62d26f4903026bL },
29705       { 0x2309cc9d6fe989bbL,0x61609cbd144bd586L,0x4b23d3a0de06610cL,
29706         0xdddc2866d898f470L,0x8733fc41400c5797L,0x5a68c6fed0bc2716L } },
29707     /* 16 << 0 */
29708     { { 0xda6e8a7f7c33ed91L,0x992afb5b0ecdd2d8L,0x37cf65517917652aL,
29709         0x317b63ea2887d5ffL,0x37065f5313bdc3faL,0xa10896aa435abaa1L },
29710       { 0x9b21615fefabca26L,0xeb07ddea230cf00dL,0x914871dc154d410fL,
29711         0xb333bdfbc88ee148L,0x51c305c6a72d1967L,0x659db48181ef2513L } },
29712     /* 17 << 0 */
29713     { { 0x8903e1304b4a3cd0L,0x3ea4ea4c8ff1f43eL,0xe6fc3f2af655a10dL,
29714         0x7be3737d524ffefcL,0x9f6928555330455eL,0x524f166ee475ce70L },
29715       { 0x3fcc69cd6c12f055L,0x4e23b6ffd5b9c0daL,0x49ce6993336bf183L,
29716         0xf87d6d854a54504aL,0x25eb5df1b3c2677aL,0xac37986f55b164c9L } },
29717     /* 18 << 0 */
29718     { { 0x5dfee73ce5b82700L,0x198fd3f0f38f6662L,0x3bd1c8f62edb0dbdL,
29719         0x55a96a6879909f08L,0x68a2324355671693L,0x57505d8d67497030L },
29720       { 0x8a60717f75c64513L,0x54b867b7f78aa7deL,0xc266eb8441129858L,
29721         0x6ffcfc7ca4cfd9bbL,0x9bdd6a092945a757L,0x91700b247eb1be63L } },
29722     /* 19 << 0 */
29723     { { 0x82a2ed4abaa84c08L,0x22c4cc5f41a8c912L,0xca109c3b154aad5eL,
29724         0x23891298fc38538eL,0xb3b6639c539802aeL,0xfa0f1f450390d706L },
29725       { 0x46b78e5db0dc21d0L,0xa8c72d3cc3da2eacL,0x9170b3786ff2f643L,
29726         0x3f5a799bb67f30c3L,0x15d1dc778264b672L,0xa1d47b23e9577764L } },
29727     /* 20 << 0 */
29728     { { 0xad610a2d94a70ec1L,0xcd96f20591e71d16L,0x713466708cbaffc7L,
29729         0xf78cff0cd467f03aL,0x98ca8dd42d96c936L,0x1d1cdf7b5f223465L },
29730       { 0xe27a189460d4db60L,0x25f546ab321828ffL,0x9933fb25dccd4df3L,
29731         0x422da643ffe6132bL,0x5e01b72b4718bbc7L,0xab9dd81052ebfb01L } },
29732     /* 21 << 0 */
29733     { { 0x08265e510422ce2fL,0x88e0d496dd2f9e21L,0x30128aa06177f75dL,
29734         0x2e59ab62bd9ebe69L,0x1b1a0f6c5df0e537L,0xab16c626dac012b5L },
29735       { 0x8014214b008c5de7L,0xaa740a9e38f17beaL,0x262ebb498a149098L,
29736         0xb454111e8527cd59L,0x266ad15aacea5817L,0x21824f411353ccbaL } },
29737     /* 22 << 0 */
29738     { { 0x4f595351262bb775L,0x981b788d16f325b8L,0xccd57831927ed783L,
29739         0xc382472ebe0e1fdbL,0xfd7a8b13f0681fcaL,0xe082882d69059095L },
29740       { 0x4d1c3049faa71fdcL,0xf9d62fd9c9576c69L,0x7b1ab489cbf837b7L,
29741         0xc764edf840d0fcf7L,0x50fc847215809cddL,0x671d69c98fcd8418L } },
29742     /* 23 << 0 */
29743     { { 0xd1b4e74d12e3683bL,0x990ed20b569b8ef6L,0xb9d3dd25429c0a18L,
29744         0x1c75b8ab2a351783L,0x61e4ca2b905432f0L,0x80826a69eea8f224L },
29745       { 0x7fc33a6bec52abadL,0x0bcca3f0a65e4813L,0x7ad8a132a527cebeL,
29746         0xf0138950eaf22c7eL,0x282d2437566718c1L,0x9dfccb0de2212559L } },
29747     /* 24 << 0 */
29748     { { 0x259f272cfab816a7L,0x20c1b8e0d809afcdL,0x540c045a409c930bL,
29749         0x563361909bd5c2f7L,0x38076e8fca77d74fL,0x4f13f901fc55723fL },
29750       { 0x890932d7bd3d10c3L,0x98d82ad1da247ec8L,0xdf5579fa4bea82ddL,
29751         0xe8277439a0f9ad3aL,0x1395a87966a4e904L,0x150808e625a302c9L } },
29752     /* 25 << 0 */
29753     { { 0x1e93722758ce3b83L,0xbb280dfa3cb3fb36L,0x57d0f3d2e2be174aL,
29754         0x9bd51b99208abe1eL,0x3809ab50de248024L,0xc29c6e2ca5bb7331L },
29755       { 0x9944fd2e61124f05L,0x83ccbc4e9009e391L,0x01628f059424a3ccL,
29756         0xd6a2f51dea8e4344L,0xda3e1a3d4cebc96eL,0x1fe6fb42e97809dcL } },
29757     /* 26 << 0 */
29758     { { 0x6423197d2afd473dL,0xb0391b37897b93f5L,0x6efedb8023bf0b90L,
29759         0x808497b7b0bba4a7L,0xf14b309f03fa90f2L,0x37a45bdb091cbb80L },
29760       { 0xedda4ae48a8f5dcbL,0xdb3f422d95e16d6eL,0x25c7b9146f5f24c7L,
29761         0x5d512df99d42a727L,0xbf2c0862697c08fdL,0x47d98a9df092241cL } },
29762     /* 27 << 0 */
29763     { { 0xa04482d2467d66e4L,0xcf1912934d78291dL,0x8e0d4168482396f9L,
29764         0x7228e2d5d18f14d0L,0x2f7e8d509c6a58feL,0xe8ca780e373e5aecL },
29765       { 0x42aad1d61b68e9f8L,0x58a6d7f569e2f8f4L,0xd779adfe31da1beaL,
29766         0x7d26540638c85a85L,0x67e67195d44d3cdfL,0x17820a0bc5134ed7L } },
29767     /* 28 << 0 */
29768     { { 0xc76afaa373b64643L,0x4169b4117b3c1220L,0x550e0bee8ff22c6fL,
29769         0x8fb0c597a4da3e15L,0xd8232f8b4e492aa8L,0x55be5764d37da1a2L },
29770       { 0xf1bc89b628e77f9eL,0x9ff769c4875fee0fL,0x184bd4733ad6983aL,
29771         0xc48ee6f3b033c112L,0x792377fbf8eb8319L,0x05cdca3fe7988176L } },
29772     /* 29 << 0 */
29773     { { 0x019d6ac5d3021470L,0x25846b66780443d6L,0xce3c15ed55c97647L,
29774         0x3dc22d490e3feb0fL,0x2065b7cba7df26e4L,0xc8b00ae8187cea1fL },
29775       { 0x1a5284a0865dded3L,0x293c164920c83de2L,0xab178d26cce851b3L,
29776         0x8e6db10b404505fbL,0xf6f57e7190c82033L,0x1d2a1c015977f16cL } },
29777     /* 30 << 0 */
29778     { { 0x6a7a3464d0cbcea0L,0x76aad8b813126388L,0x519b9fd50a183232L,
29779         0x15f9abe1feb6b100L,0x7002990485ba4143L,0x92cea8f4c4360dd8L },
29780       { 0xdc6c5d1dc12748a1L,0x1846eefcdd3eb156L,0x3117dd04d47a41dcL,
29781         0x96c21b29f6a167f2L,0xf569446a27555692L,0x941292e500f88cb2L } },
29782     /* 31 << 0 */
29783     { { 0xa39c89317c8906a4L,0xb6e7ecdd9e821ee6L,0x2ecf8340f0df4fe6L,
29784         0xd42f7dc953c14965L,0x1afb51a3e3ba8285L,0x6c07c4040a3305d1L },
29785       { 0xdab83288127fc1daL,0xbc0a699b374c4b08L,0x402a9bab42eb20ddL,
29786         0xd7dd464f045a7a1cL,0x5b3d0d6d36beecc4L,0x475a3e756398a19dL } },
29787     /* 32 << 0 */
29788     { { 0xad852b878c0a64a4L,0x0d784cf208f779d5L,0x1896b9fcc651b1ddL,
29789         0xba8953d612e8dc87L,0x3a9865baa631cfb0L,0x5dd2a4a0626b3d79L },
29790       { 0x1148bc72687c20bbL,0xa372dfc2f2a52bfdL,0x77315f9e9448fd08L,
29791         0x4bcb06f00a2377b6L,0x73b42725b35b4ff0L,0xc510ad93aabca99fL } },
29792     /* 33 << 0 */
29793     { { 0x61333a382fb3ba63L,0xdf330d9d5b943c86L,0xbbc7c7ee955ef3afL,
29794         0xda631fc160f09efbL,0x68af622641d5c400L,0xcc9e97a46c833e9dL },
29795       { 0x7fd73e8e3a625e76L,0x13bf6124c209e55eL,0x08467cea48b90b91L,
29796         0x8a416eb9bb6f0abaL,0x6fcc93a1b8c31072L,0xa7fd2b619057dad7L } },
29797     /* 34 << 0 */
29798     { { 0x80b309dd2ada5bf4L,0x0648c2cd2d668c41L,0x45700722abb9102fL,
29799         0x9d6ac102b4e25201L,0x7ec2bc1cd50b3e6dL,0xcdb55e6ba07b7caeL },
29800       { 0xebcbda0786da3943L,0x470ddc68f8a57f48L,0x9e1418a4554557c3L,
29801         0x02d00cfb8a76b2d6L,0x03c050a061520726L,0xa964eefbfdadd24eL } },
29802     /* 35 << 0 */
29803     { { 0x58a5b5433720ec9bL,0xbb3800d52d7c2fb4L,0x4a508620dde6bd0aL,
29804         0x65f16273a02583fdL,0x832bd8e34fc78523L,0xd6149f75e9417bc6L },
29805       { 0xfeb026e93deeb52aL,0x0ce18088a55e0956L,0x50018998988092a2L,
29806         0x22f19fab28f35eeeL,0xac8a877f52ccd35cL,0xb13a8ad830e23f26L } },
29807     /* 36 << 0 */
29808     { { 0xf216aa2531238ed0L,0x4a13260770b1b757L,0xa39180d45c2c7ce1L,
29809         0x9f82b7fbab52606cL,0x6f01faee26946e78L,0x1608643883061d37L },
29810       { 0x597edf370fb077bcL,0x1d11bc5ed6e28138L,0x10209418c167fd20L,
29811         0x6a3258ec33f55675L,0xdf33eed7b73401b1L,0xf699887b806085b7L } },
29812     /* 37 << 0 */
29813     { { 0x0202d57de44f61a3L,0x4027704bb5630ef2L,0xa129e2dff5b54a5dL,
29814         0xacb60a7597482b86L,0x9261ede87ef27114L,0x1eba28f3defc58b5L },
29815       { 0x6c91c0c98be5589eL,0x2f1643d514594beeL,0x2ea912435d2ca034L,
29816         0xb50649a894047d1fL,0x284fcbb5638ca337L,0xfa0e07b7fe85bf85L } },
29817     /* 38 << 0 */
29818     { { 0x4703cd85891f8ffeL,0x018843c01c0d7702L,0xf3d752f5ad6cbeacL,
29819         0x479ecf018173fb32L,0x6b464412bc9a48c7L,0x47ba96091da7b147L },
29820       { 0x91af26eaabc13488L,0x87c183c3e1a0e06cL,0xdae2479844956b93L,
29821         0xf300e1c648347f9aL,0x129be314974320a4L,0x1f466694520618f2L } },
29822     /* 39 << 0 */
29823     { { 0x7d894f80506e0e42L,0xd984244a8e3d2c46L,0x6d7edf642b7f006fL,
29824         0x36a1cd6dde9b6230L,0xc9985040b76c0665L,0x587df4d6b89b1fc2L },
29825       { 0x4c0638476a71ae7aL,0x7b2b0ab3e8294747L,0x345c553ab53153b8L,
29826         0xb646e453436d9fe2L,0x1a95355f1cd60340L,0x2d7bc128074968fbL } },
29827     /* 40 << 0 */
29828     { { 0x6048c6949399c38aL,0x43a53ff21beb359eL,0x86fcfe4760be3ebcL,
29829         0xae78bc3a3134216cL,0x3b021cf316d7a9adL,0x51c4b1b36a4d6e81L },
29830       { 0x54b9cd8db593d816L,0x1df8cc84a69ea3a3L,0x98ff87f7370eb744L,
29831         0x63a00a0a60e0aa2aL,0xdbb22c9ddeb46e6cL,0xdfd92b6da914bb01L } },
29832     /* 41 << 0 */
29833     { { 0xad148e87bca6d14cL,0x41dfd24d456a201eL,0x73a82933a80d68f3L,
29834         0x89746c8d852ca035L,0xe3bc778895fd71aeL,0x8764cd2cda92245dL },
29835       { 0xa2fe2c4782eb23e2L,0x5ac762e00f3c9d6eL,0x57860ce121646f31L,
29836         0xbdc9d6c34f9f589aL,0x679952c7d193272eL,0x82ea702eeb18f1c5L } },
29837     /* 42 << 0 */
29838     { { 0x18ef56cd5d76b881L,0x31b22efc5df46c66L,0x4b21c4f3eb6c7e62L,
29839         0x3fd72a308f234c86L,0xe983e169ffff96c7L,0x7438b4933c1e593cL },
29840       { 0x863a23a3a553e8e3L,0x0d959ba9796d9129L,0x25d0caaeda1eadf4L,
29841         0xe739fb61eaa67763L,0x50029568472a7175L,0xdb6829c2f002bb6eL } },
29842     /* 43 << 0 */
29843     { { 0x37fa935500846d44L,0x09112fc50578bc8cL,0xdad9f5b239c4943dL,
29844         0x7314f5f0416dbd86L,0x5cf095a901fefb56L,0x35178bad22dab393L },
29845       { 0xcf79fc1b36baf1a7L,0x1b7ee42d749e5498L,0xbce78aa9ede314bbL,
29846         0xaaf8e0f6bd0628dfL,0xa974b09415cbf948L,0x8f3f1f63c9632b78L } },
29847     /* 44 << 0 */
29848     { { 0x1c5f0e5b36a400d3L,0xae97af8bf240b30aL,0x767b4ad7f8f99b51L,
29849         0xd50a288981ea36c2L,0x04ce2a21986c5ce6L,0x9c7e7754a320d352L },
29850       { 0xc3336331bbad8346L,0x7cc82a4df1698fb2L,0xc680176505c7ad6cL,
29851         0x47678afb27dda8e5L,0xade6096d02e543aeL,0x5fb28e322a1dd73bL } },
29852     /* 45 << 0 */
29853     { { 0xd4c411564fddda5bL,0xd4af65c673ad9112L,0xffe8e0bb39eb8f59L,
29854         0xb0040c0e8d6fcf13L,0x99e1c0c61f2bb599L,0x9c94c858b2ac3405L },
29855       { 0x8f8878d76eeed85dL,0x62b2f54351fcca3fL,0xeb3b44a9e5b56918L,
29856         0x16f96676b7234e93L,0x17477722bd2af19eL,0x42eb2979db83a485L } },
29857     /* 46 << 0 */
29858     { { 0xa618d7479fc4f435L,0x9f24fba649ddd10eL,0x60976b01b472d789L,
29859         0x9266634957719f54L,0xd9c79db800541257L,0x374aa9069481ed0dL },
29860       { 0x60efb1147fdc2d7aL,0xa1590c30ecf58643L,0xd7a198a4185a849cL,
29861         0x19ab802314eb4ab9L,0xc82d5998ec090d06L,0xfc539eb3e259c7dbL } },
29862     /* 47 << 0 */
29863     { { 0x6f888f7df0c668caL,0x65c788785f0dc66cL,0xbfb185125f5b07a0L,
29864         0x780abff7d878acd0L,0x504f21b1570cf950L,0xea5b37c5da233371L },
29865       { 0x487ae8bd22437ed1L,0x9c701758249cf9b7L,0xf86562a898fb34ffL,
29866         0xdfeea1a265e0fc91L,0xeef006912e20fc23L,0xac9dfec7dfa72a8bL } },
29867     /* 48 << 0 */
29868     { { 0x3ccf806ab35bf6cfL,0x2d368d48e7f30c2bL,0x4f504e06ea52bef9L,
29869         0x40d01ff53a7d2f3cL,0x62e5c5d3e73a1bc9L,0x66e4794bae7d7400L },
29870       { 0x3d30625e5ffef312L,0x4580609da766ddf1L,0x5c3ca10d04bab985L,
29871         0x2605ca009da2a2caL,0x48eab00eb5c9462cL,0x271e42a12624a583L } },
29872     /* 49 << 0 */
29873     { { 0xfa5c3aef697136c6L,0x8ea5af63a5ea6fb8L,0xa669156542e365a4L,
29874         0x47c56c115b6e3386L,0x1197832bcea03f56L,0x0b470bb250e4ea9eL },
29875       { 0x3113c74313b25712L,0x8d6c174ed2497d48L,0xfc4486ee49c9ebe8L,
29876         0x2487edd57f82bdd3L,0x771e64415b57be2fL,0x2d1cc518e28b2bdbL } },
29877     /* 50 << 0 */
29878     { { 0xa96763d2fba32d1fL,0x172cfe4ecb5af900L,0x510bd675cb2ec3f1L,
29879         0xbeabb91ac3c90051L,0x9cbf755b46f97ac7L,0xa820e8303a5d50d1L },
29880       { 0x83a9f17e308c4545L,0xdf7dc7053048461aL,0x6124642f0f32b151L,
29881         0xc1b444139333e405L,0x6f7bfa7e13a4f7d6L,0x6f58fa8b7181c2a1L } },
29882     /* 51 << 0 */
29883     { { 0x2c4ccac72070ac8dL,0x1947c0caec4a22b8L,0xa5e0fb598c5a78d9L,
29884         0x464ae8d241a84de7L,0x3dba16e9daaabc27L,0x16634a504f35cb3cL },
29885       { 0xadc18bf9b16ec84fL,0x324d067e7359dd35L,0xdaeac0c3570543f0L,
29886         0x0b2240003c887d36L,0xc69489e2373f1a0dL,0x518b047dcbaa0d97L } },
29887     /* 52 << 0 */
29888     { { 0x8f6468656f9201b9L,0x8a944b316b326232L,0x5687d1dca6ccfd35L,
29889         0x0bedaa85e5377c00L,0x252b48f5cd8d7d77L,0x4b820d9b31d83660L },
29890       { 0xa9e5af3ccae07f15L,0x0a8930fc1208b9faL,0x6d0a166ced3c3b7aL,
29891         0x90e2aead7f78aaf8L,0x222465866e5ede76L,0xc5cc339dcba1fd4bL } },
29892     /* 53 << 0 */
29893     { { 0x3b1bddc6fbde49efL,0xdaed7c268a0915ccL,0x0b0110610f0422a2L,
29894         0xcf485c74a7c54b16L,0x642ec4e615c3aae2L,0xa8ba8f10e0f383eaL },
29895       { 0x2a2054b495618501L,0xebec6442089efa8bL,0x5786a19a4e2fa83eL,
29896         0xd2c71ad139069963L,0xadc93d9a481765e2L,0xedf2e3eb7ecc9485L } },
29897     /* 54 << 0 */
29898     { { 0x11853add834e6c54L,0xab2f15202175fbf4L,0xcff00bd23c9b5a41L,
29899         0x075134ebabd64a6aL,0x48c075daaadd6150L,0x4576a6497cb89442L },
29900       { 0x340a767034adeda3L,0x8dbb571c77fcd1f4L,0x0bf879d693b44ea6L,
29901         0x1ae1dd97d13444bbL,0x6e9e86bb7b1eb77aL,0x420eb673906a2949L } },
29902     /* 55 << 0 */
29903     { { 0xbcab5f60069f3367L,0xfd6622bc1718ec3cL,0xa4fb7867e3a142d6L,
29904         0x6078d8bf085faeb3L,0xfa5cbfda60f4554fL,0xb3fcd5d1690cd408L },
29905       { 0x4ebdee7d281f7884L,0x82af23aa180a63a7L,0x8de3107c3d079f61L,
29906         0x17c6b5cbbe2334f8L,0x6a91e73997d0fa06L,0x7460257314ceeed4L } },
29907     /* 56 << 0 */
29908     { { 0x483350a5ebb8cdadL,0xd4215b4fc7a8baa1L,0x8b6fc785e692fdd2L,
29909         0x2629ba4fd1deca25L,0xe9981ea6820da79fL,0x7772a913e6436cc1L },
29910       { 0xd141235c553fb41dL,0x28179e6cc852f64bL,0xb623a1aeeb8cc21cL,
29911         0x05826192490bb572L,0x56fefff326f349ceL,0x31ff648e0f88b82dL } },
29912     /* 57 << 0 */
29913     { { 0xb14ba61cf97f865cL,0x73bae4c1694b8b0dL,0xa14967dfac4bbf62L,
29914         0x1e9dd1509bf446e0L,0xc052f3eb1c99ceefL,0x814d7fa07a78c189L },
29915       { 0xa101a483ab74b05dL,0x7788c258a1737b65L,0x0d60bab7e809a13cL,
29916         0x8f427bc473c81d5bL,0xd2e130552952c1fcL,0x0a823b9a4b26df63L } },
29917     /* 58 << 0 */
29918     { { 0x941c5c257d0be180L,0x341cf9d9c46785afL,0xdab9dc0015b0fa13L,
29919         0xa58db4ea4f96af4fL,0x9e9520bf57acc87aL,0x104cec0666ac72e0L },
29920       { 0x9f3f7baa1929e675L,0xb8b4ac9ffa80380aL,0xb5f157aa569b57d8L,
29921         0xe11699e909fa58a1L,0xc08595e35548fbeaL,0x2b51995f794da901L } },
29922     /* 59 << 0 */
29923     { { 0xaf467ce227bf64c9L,0xdfca6897f929974cL,0x64473b595c322738L,
29924         0x96a917cf1ed0e315L,0x3703435b0de64db9L,0x9ba039679267b646L },
29925       { 0xdf0c2aae3a522fbeL,0x41bdb741b335eff0L,0xaccf2edd7b059703L,
29926         0x6fb34b3028463cceL,0x96d9ba0bd9e3ca19L,0xff336f12504655c1L } },
29927     /* 60 << 0 */
29928     { { 0xc711d5d1c425543eL,0xa61fada6fb4f60e8L,0x0402d5c4eb809f85L,
29929         0x84b7c2fed74cccd4L,0x61bba736a55b5277L,0x95bb80cece47968cL },
29930       { 0x09f92adc16eb7b95L,0xf0e0f4f7e682aa29L,0xacd70b86ad2a20fcL,
29931         0xbb45a51f948a8375L,0x29fc3b284892e676L,0x8dd21bf0b4ea4f51L } },
29932     /* 61 << 0 */
29933     { { 0x48da1fd3fc60a6e0L,0x54fb5a34222241e8L,0x6035e34f772ae080L,
29934         0x5ff77ff2332982d0L,0x2366467300fe51fdL,0xc93ea049ef6ba006L },
29935       { 0x6640f1177d381266L,0x394d32cd6ae9f4acL,0xe6a7885370d303ebL,
29936         0x0dda19ffe5275767L,0xb0a6c77201466d23L,0xc4cc11451fc69829L } },
29937     /* 62 << 0 */
29938     { { 0x49a04dc0f5acf772L,0x1e659730c1fb476eL,0x0c7d749907dbb9afL,
29939         0x03b9f1cebfec21daL,0xd194b7054b14d117L,0xcb4c0a54561fedf2L },
29940       { 0xaf623d3f21da4d42L,0x5f5e9b1fd630c145L,0x65609e59d9ff0abaL,
29941         0x3d2508922ba9239bL,0xcac324ec82c4faa7L,0x0902cc23149446b8L } },
29942     /* 63 << 0 */
29943     { { 0xc5c0e6d7aaed89c0L,0x6ce8ead6149a1896L,0x7a50f7458c949f8fL,
29944         0xcd7e35f76e2b71aaL,0xf6159e519a049f7aL,0x1c9bf0b0f1e52d1eL },
29945       { 0x3bb6c1f518202c80L,0x8d3a5f621ecd7b1aL,0x3bb034e888d17f19L,
29946         0xdc89bd4997d4048dL,0xf5af7b8e3735df22L,0x52bb3712a0a689e8L } },
29947     /* 64 << 0 */
29948     { { 0xed4de4f88e89b258L,0x957c980f297a9a37L,0xe04b3d30f8a0580dL,
29949         0xa309199dca57b7bdL,0xfc8e87cf3be44d56L,0x4f5d5ab6d1b30e5cL },
29950       { 0xb213c6a030a9325bL,0x0fd1c52df091bc01L,0xfe51bbbf1090fedeL,
29951         0x6d97cabc301fe259L,0x3ee127895ecd3fe8L,0x888b708b9404ca51L } },
29952     /* 0 << 7 */
29953     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
29954       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
29955     /* 1 << 7 */
29956     { { 0xe484fd9f8258030fL,0x0f4fa5eff21af80aL,0xc0dd449e7c1c3984L,
29957         0xf313389118eb5195L,0x0336aab8777a16d2L,0xa6661cc4c241720aL },
29958       { 0x678db970a7efacd0L,0x228968656461e382L,0x5d85a0e4a022c7a4L,
29959         0xb01f1e0434a02a6bL,0x2657eedda5791ce3L,0x239dcab2a277ac5bL } },
29960     /* 2 << 7 */
29961     { { 0x9a7a5b426ae54da1L,0xcfcadaab7040b022L,0x7539438e3d9f0e61L,
29962         0x013c6719e328c2e2L,0x7f4a706ccccbf891L,0xa335ab82735a2d28L },
29963       { 0x46694ef03d984124L,0x0e0bdfabc166b337L,0x9d54ed8b423d47e4L,
29964         0x8075a8cbf44c9180L,0xd4f5b184abe9b384L,0x424dd00b41abdc75L } },
29965     /* 3 << 7 */
29966     { { 0x99a710b1400f1d87L,0xec3ca386ee47be8bL,0x3a00dcad37168feeL,
29967         0x1a69d6741765a0dfL,0x85233afe917c4909L,0xa3aa97a4e9bd6210L },
29968       { 0x01010526310885f3L,0x21c5de3fb5007b08L,0x5df0c6efee8ddabdL,
29969         0x5d17d45a0f6dfdefL,0xb73d831a251c9f79L,0x397779e6cb1df19dL } },
29970     /* 4 << 7 */
29971     { { 0x5e2cb07fd7801edfL,0xf9fa2c0b3adc065aL,0xa296c53fd4de1f25L,
29972         0xd408060c838f7169L,0x68e19d7b2e8a6ce7L,0x2cc6e06c94b58671L },
29973       { 0x93d02a07c1cb6151L,0xa10fb4cf35003126L,0x6aa069f51aa3bc4eL,
29974         0x0e44fbf0dd09b142L,0xe264f343832e5945L,0x5dca2adc1fc166acL } },
29975     /* 5 << 7 */
29976     { { 0x5f63e391d7afb4c6L,0x85208bcd2bcb4a76L,0x10022d53c3da8fd7L,
29977         0x607538c007e50047L,0xdbdb0e7212793242L,0x8e6b9f6135eb668fL },
29978       { 0xbe5632887e1da455L,0x5e73e1a06e544e82L,0x0c28a5d29a2da4deL,
29979         0x62b30a8822326300L,0x470764f16013086eL,0xcbe2c34cd3ef5fbbL } },
29980     /* 6 << 7 */
29981     { { 0x9ee4f522b0f6c604L,0x5b8a689d52736e58L,0x0d5f396db7edb07cL,
29982         0x09b3457c2e829063L,0xf1d28188f83495daL,0xba2511e6cce559b8L },
29983       { 0x17cbaf57d8f90669L,0x3ba19a1c514eacf0L,0x298208995145b8fdL,
29984         0x92cb5da81a33b1a7L,0xca49fe334c5149e9L,0x5c499b661772b4c0L } },
29985     /* 7 << 7 */
29986     { { 0xb98266b132508180L,0xf5008b926719d49dL,0x50c513f98069ffe6L,
29987         0x99ceb828a7c6f38eL,0x375b8a8225e2a436L,0xb8197f6c416c073dL },
29988       { 0x01663a25eadf09ddL,0xfa2ca1571d7ff230L,0xf3b65b2545284aa4L,
29989         0x144dbefe648bd565L,0x6095ed8ab4c24e35L,0xe1f1fa3696ff2020L } },
29990     /* 8 << 7 */
29991     { { 0x56ad7582a0eb176aL,0x085b5a366e19aa00L,0x85f2c6ffe2c8b036L,
29992         0x55c6d357fcd7336bL,0xb1ecc56d22a46acdL,0x8e0f976736277ac7L },
29993       { 0xa4ed11e901878921L,0xd38355667f4fb650L,0x5fdaba45266158aaL,
29994         0x6f0b27fd89e0dff0L,0x32ef7ae2eb6b02d0L,0x2f145871cc1b46e1L } },
29995     /* 9 << 7 */
29996     { { 0xc7698dfd4b449cfeL,0x78aacb7bd1517720L,0xaf0f6ef574cd5f32L,
29997         0x026f1826f17954e3L,0x33ef67ab2453185bL,0x82f0fcc90a420c0fL },
29998       { 0x5b444b3645f154b1L,0xb27c4ece70d17f90L,0x6417e0d039282194L,
29999         0xebfb5fa001aa4f4fL,0x9cc5d0b573932754L,0xe8b56699704ffd85L } },
30000     /* 10 << 7 */
30001     { { 0xc112733b9d4075dcL,0x349281c187737549L,0xbb7d8e0181009785L,
30002         0x7640a3e2bfe16c4fL,0x4e34813ec1d9f810L,0x61985fbc8d2605d7L },
30003       { 0x2a544cd8e3f66442L,0x48879af56a7c9e94L,0x9e6157bacec18a7eL,
30004         0xa555fc9511b882d6L,0x4305a4dd04f86563L,0xc58ed7631d0fd96eL } },
30005     /* 11 << 7 */
30006     { { 0xaaeec0f9b726e2edL,0x243ba6614493d146L,0xd799c3408980a9fbL,
30007         0x886e4f44ed060f57L,0x52126b82c1f83f6eL,0x8b4978441df301ceL },
30008       { 0xeb2a98abcdc4e434L,0x87dec119474e2c77L,0xcbbc613092eb1528L,
30009         0xb0b0bcf7c454f37eL,0x404d97a7e1a919d3L,0x26d1baa825e62c30L } },
30010     /* 12 << 7 */
30011     { { 0xf04145e82d2696b3L,0xaffb66acf4fb2928L,0x9ffcba4e12aa299fL,
30012         0xcc5ec24991b3b517L,0x9edcd4616f81c747L,0x0a96090a77a883ebL },
30013       { 0x9b0bab58a2aa4badL,0x76359a5e8f9b84e7L,0xfe8cd81e438a9d43L,
30014         0xf40e2b5e25ca8b3cL,0x4254030067bc720cL,0x883002a46b2446a3L } },
30015     /* 13 << 7 */
30016     { { 0x4b43bd3206c3aa7bL,0x83ca2db60a470b08L,0x07c1036c06f22f37L,
30017         0x312e04d7bbb46ed2L,0x6a1d70a40193e5f6L,0xc69720e8ba8a3f38L },
30018       { 0x2c003429468a04b1L,0x885c43bfbc83fe25L,0x65a65259393e00e8L,
30019         0x7154c7ac2af17741L,0x682224d331dda744L,0x6183dd8bc80b57f5L } },
30020     /* 14 << 7 */
30021     { { 0x80e1cd16c496089aL,0x7a59f4c06ec2000fL,0x67a019d509ddce06L,
30022         0x52573e3e70c4b032L,0x16d253e14d3ba57eL,0xa43c6d42162504f7L },
30023       { 0xa237bbf952ff95e4L,0x81187e659acb7273L,0x4b13531a1f384daeL,
30024         0x39067f3398125165L,0xe98fb141672dccc1L,0x594baca0a75e27b5L } },
30025     /* 15 << 7 */
30026     { { 0x85e12293c205465bL,0x57bbcfb1b71cbe44L,0x201ed45c1bc85881L,
30027         0xccbc39d5ccbe7dacL,0xc509b77f9277f310L,0x171b603aca1b70efL },
30028       { 0x9b99605504d2dbbeL,0x986d6323451c918dL,0x75ad922f63c6fb03L,
30029         0x69e2cca49630182fL,0x1389a2b7f7b34d1fL,0xa66a80323d4f7c7fL } },
30030     /* 16 << 7 */
30031     { { 0xe65245cef6e9f82cL,0x9e234dfff6da7b5aL,0x5677c121bad2c806L,
30032         0xc52dec32060fcf24L,0x78d070675d78cccaL,0x630002ea1bc8b6fbL },
30033       { 0xc5cb86beeb2e99aeL,0xf13981e78551d16fL,0xfbb7cdf2c92a70d7L,
30034         0x5a9ff1f1f53cd2a1L,0xfdbe6b7a984f1139L,0x4403d046a470a9f1L } },
30035     /* 17 << 7 */
30036     { { 0xdf8c9325efcc63faL,0xe0d35cd966563147L,0x140b9a8bc144d7b9L,
30037         0x492bfbd70c17c75fL,0x3cbc2b644c5c4d8bL,0xfecfaf47ff8a3328L },
30038       { 0xaf341aa179b8c3d5L,0x5e72713ff04f29e6L,0x652219fb9f5b6fb6L,
30039         0x9deeba3f0764460fL,0xb8c2bfa5fa069d0fL,0x5d3e6fefe57be3e2L } },
30040     /* 18 << 7 */
30041     { { 0x52c9b94decd84cacL,0x34c2d0ad446dc59bL,0x5563701d951878ceL,
30042         0x92e2fc1c843c9b1cL,0x2309a5f13dfc7a98L,0xdaf117dc0c57a156L },
30043       { 0x5739190d359fb843L,0xd433e9bb4b88e3a8L,0x4d6bb0e2c47a1f45L,
30044         0x511eaa33d7b59627L,0x42ef82c5e389e532L,0x641a0bdcd75f4c08L } },
30045     /* 19 << 7 */
30046     { { 0x3ae32dbdc7e30cc3L,0x0c970135af5d0ea3L,0x8fc38e50bd9a0528L,
30047         0xdb0506791bfa634aL,0xf3514fbd245cb0dcL,0x3a3c8c6982319ddeL },
30048       { 0x92136baf6426632fL,0xabc3e24aabdd5641L,0x8ccae1429cc004baL,
30049         0x6c9834d8b3ee0d66L,0xa807ab63e1f7e8d7L,0xb4598e2a220aea7cL } },
30050     /* 20 << 7 */
30051     { { 0x19821469d678d1a3L,0xf9fa42e60df2f58dL,0x1177daf49f284ba0L,
30052         0x6dd2ad3d2a201dafL,0x667b0e383d427075L,0x39b76d1d4212b65aL },
30053       { 0xc6720ae0bf3612fcL,0x72559d98775f8137L,0x466e8e4476c48a09L,
30054         0xa05f8eb07fb5428aL,0x7fa1fbce5e36b7d3L,0x13bab84f8d1fdcd1L } },
30055     /* 21 << 7 */
30056     { { 0xf1876140ed6f3524L,0x47171ee5cb94b2adL,0x56d836abcb8de844L,
30057         0x346e80890d3b4271L,0x0110df1fdabf6a02L,0x6850fba1f571cb92L },
30058       { 0x490cd9af6209f064L,0x41f32d5f1cf5636cL,0x558bb7ddc328f9dcL,
30059         0x44abd0b9d32e3e4dL,0x2c42a5607fc2ff0eL,0x8b1dc5e12c9931f5L } },
30060     /* 22 << 7 */
30061     { { 0x6a35f6efdca1ce69L,0x04216d3184de3658L,0x3c3010df732f31b1L,
30062         0xe4421a872c1444b8L,0x17c987a3c59c1ccbL,0xd67159dba297df1bL },
30063       { 0xd13aa7a0bc96041dL,0x686d7b77f44c3d8fL,0x6c2e505f09b2b933L,
30064         0x8c04eb8256161b34L,0x61785cb4b344bec6L,0x60b4d06cbf8b0b45L } },
30065     /* 23 << 7 */
30066     { { 0xe5b055481883c1bcL,0xd5bc37684597b8afL,0xa71ae49adb2fae11L,
30067         0xc1ac1b3e050327f0L,0xd990b2a668f3cb1aL,0x566e5175b74a3228L },
30068       { 0x348d382957909fe3L,0xe849dd8dd03c2374L,0x4f31a278150fb5b4L,
30069         0xbfe265cf168c0798L,0x2737c156ce6a34beL,0x4478d6ae4aa6b73fL } },
30070     /* 24 << 7 */
30071     { { 0xb5b16cd48d040c69L,0xfdaba315f95a2dc4L,0xc9fef34961ce4704L,
30072         0x5fe87a0ddbb53ed6L,0x3f0ccc7973d70f93L,0x4601d1bc46724a1aL },
30073       { 0x5c4a15ae24f08565L,0x5eda1e8aaa577320L,0xe31ebb35bb32d307L,
30074         0xcdc6f13bdc770a0eL,0xbe3ae514c434c2f8L,0x57c7fdf63a0ef0d1L } },
30075     /* 25 << 7 */
30076     { { 0x85165ea2d71c01a5L,0x3935171c99a29e59L,0x2aa1b5837d326190L,
30077         0xb1d702f8e79f3959L,0x94100c65c6ddffd0L,0xd1d56d626a9c54c6L },
30078       { 0x5c93b4cf7ce12b66L,0xfc28574bb32a90caL,0xcd654a96e755969cL,
30079         0xa06f436cd1bec664L,0x9b27c110ffb6f3e6L,0x529b77d317b476c4L } },
30080     /* 26 << 7 */
30081     { { 0x04c3d9e162ccecd4L,0x6050bc1221cb59a1L,0xb33847543cbb7e07L,
30082         0xef2201ac4cf1be50L,0x99c3dda42d2ac886L,0xad19cb0ab776eff3L },
30083       { 0xd326dd7f5a3d9036L,0x9fe56af2e5b27667L,0x3d849fc072cea4d1L,
30084         0x262a0cbcd6aa9e3cL,0x8286211885401b09L,0x8ec71d4b98fe8047L } },
30085     /* 27 << 7 */
30086     { { 0x9b769cc43c6b2de7L,0x433d4c26acb13b6dL,0x52878f517530ef4fL,
30087         0xd0e7ce94b0c5354aL,0x5b094d461d92dbc1L,0x75f681449e4ffb31L },
30088       { 0xb9b9e97351b9d1e1L,0xc147ba4698661569L,0x2a06f4cb7a239309L,
30089         0xd5cb5ad420928958L,0xbde0283bd5bdf5c6L,0xb91664a082e43c18L } },
30090     /* 28 << 7 */
30091     { { 0x8fc0cfa6e51d078aL,0x431d9dd5744ca779L,0x37a4f3120e96e887L,
30092         0x9c3624fa03ea5144L,0x47d5ecda0b1127f4L,0x018ad424807cf96dL },
30093       { 0x58ba530f586b16b9L,0xec7271ed72f47883L,0x8d2918da0281ac88L,
30094         0x6d0f14ef002330c9L,0x1a90a01591dc35caL,0xeb8e71e9c81607dcL } },
30095     /* 29 << 7 */
30096     { { 0x2eab9c5ee6d01fd3L,0xe030e6d23fa77f57L,0xff41311877edc0e9L,
30097         0x7817766bb47ca351L,0x70c987e36cb15abaL,0xc3c867ace19c5aa4L },
30098       { 0xc24ec23ea05c3810L,0x3965a165c4f0f350L,0x52af99cf7c0d8e5bL,
30099         0x2d95d23c106e0b12L,0x27507b297f6d44d3L,0x33da846858b191f9L } },
30100     /* 30 << 7 */
30101     { { 0x8e5785629aa664e0L,0xf3a1cfc329a97c9bL,0x91ce3b404037bd09L,
30102         0x34c447b07f9f2482L,0xebe360164010c2a6L,0x7b8b9b3afdc0a861L },
30103       { 0x0e60c49199c4ff9fL,0xf1cf53b1053e703bL,0xabeae550dd974a16L,
30104         0x28ac5a34994ea50eL,0x9384617d27329793L,0xd04db83ddad0aec7L } },
30105     /* 31 << 7 */
30106     { { 0xcb0ec2bd4b1537bcL,0xd0de683cbac6569bL,0x0688dbee5c96afb7L,
30107         0x7c7d192f3324ab6fL,0x1455b1e6165fe655L,0x32d135a1ccfe9e1cL },
30108       { 0x05a80a2af9e1a86fL,0xdc946c70479c71f1L,0xf8b9ad985aaa0ff3L,
30109         0x78cf198ef195bbceL,0xadbc082dfcee6b59L,0xe6e1fa844cd19e25L } },
30110     /* 32 << 7 */
30111     { { 0xeb06571c0f547ebaL,0xf292c38d6246c0dcL,0xa185966726eed224L,
30112         0x8d9e56e46100e387L,0x470506b9dc6298d1L,0xb19e084cf3350ad0L },
30113       { 0x83eb62a812abd898L,0x70f152cc2222342cL,0xb089e880e1bd4a82L,
30114         0xd4d1e70fcaf3b3fcL,0xd0b1ec6395ffd65cL,0x79f27f3a9b184ebbL } },
30115     /* 33 << 7 */
30116     { { 0xb4a7435231a3e816L,0xba8a0af2fd4ada3aL,0x1622289dd8fed2e4L,
30117         0xb71e579e31d3745cL,0xb090650704a50576L,0xc98b5f20123f900fL },
30118       { 0x3799ee82d3587b21L,0xafdd6dc79d9abe55L,0x4053ee2aba64b9d7L,
30119         0xa816246657b3f258L,0xd9b5c4c4690b1169L,0x32c1d3afd091d158L } },
30120     /* 34 << 7 */
30121     { { 0xff5a9c58de97d0d7L,0xec086138feede4acL,0x55b14035ebf47cecL,
30122         0xc0b3e061c619fe18L,0x5644c092ead4ebe9L,0xa1a4f7a41e5e0a61L },
30123       { 0x8698da06d179219cL,0x86f560bc3f88f732L,0x6ad10b3f1e34a23dL,
30124         0xd4326bb71307ede6L,0xc93cd2a19b3045adL,0x5a0b733dd8a5160aL } },
30125     /* 35 << 7 */
30126     { { 0x68ef87cdeaedf10dL,0x5ce97a07bed10cb6L,0x9b8dbd896ed762c1L,
30127         0x1a72b05333c1dcd8L,0x6718eff90f97cfa6L,0x02f886e57dda698bL },
30128       { 0x9db378a8c724f4c7L,0x5b55b8383fa6548aL,0x9935a70ecb24bdf9L,
30129         0xf5da6936e9de8ae0L,0x3b3a10a79b0c4bcfL,0xe4e6a6e86361c492L } },
30130     /* 36 << 7 */
30131     { { 0xb37fc581c634a8f8L,0x06f06c93de1d01acL,0x0f2dac8452fed4ccL,
30132         0x1673c81bda53f81fL,0x963e500e61e11c94L,0xe86ff87e2144d55fL },
30133       { 0x343ddf389bbaec76L,0x16a13527806df1edL,0x1361b5ac0a9edd65L,
30134         0xf20507fe33c0124fL,0xdf64ec1e4e8e0d18L,0x3f6a42e27860a8f2L } },
30135     /* 37 << 7 */
30136     { { 0xe6db1c43d38266a7L,0x55bee1a3adec0d4dL,0xe41c403ed56d2f9dL,
30137         0x5fb703f24d3cd93cL,0x4d7ae8c53d2a7ccaL,0x65c8ac50ffa5fff2L },
30138       { 0x128814ec264dfa80L,0x08d1372ea642513fL,0xfc5ea1615343a57bL,
30139         0xc70a6f2f9a2f3f3cL,0xfe61c499df4963f1L,0x2b711eee5cea1508L } },
30140     /* 38 << 7 */
30141     { { 0xfc3e9fb252f9a4f3L,0x8bbeeff32180cd36L,0x274312dbd6438c99L,
30142         0xbd30984a55612a57L,0x344006d609381db3L,0xd9b696f62bcac509L },
30143       { 0x481e4ea3bef646d0L,0x213033d430561b68L,0xf46bf9a05453f623L,
30144         0x2af3c4a46d848d97L,0xc35e55a543efa02eL,0x8da254342462874dL } },
30145     /* 39 << 7 */
30146     { { 0x1f7fda656a12b927L,0xf628cfac876b9303L,0x1904a0b5d0d0d0b2L,
30147         0x46d486f6f2894b1dL,0xd35cb5610d243bfeL,0xe759579b851a568eL },
30148       { 0xb99572e2c1aeda5cL,0x872e16fb1c54cd1eL,0xf5ec9e42a60fdc40L,
30149         0x59b03a6201a4b019L,0x9c5e7f87e272e064L,0x6240282f24c918a2L } },
30150     /* 40 << 7 */
30151     { { 0xc2467f9ab92a9a13L,0x0c3ee8eb6add349aL,0x59250eda45e99644L,
30152         0x22ce0635c8a2df27L,0xec7b643e312e8698L,0x334ccf2eaebd1587L },
30153       { 0x0c1c68736bca2900L,0x00beb4c209826cb1L,0x12dbb586cde6b725L,
30154         0x8d7cee6c66dfed41L,0xc38deba2014de4c8L,0xa3ba6ec76248442dL } },
30155     /* 41 << 7 */
30156     { { 0x870be3ebef38abf3L,0x6e0cf541f74dc605L,0x499976bcda4bc168L,
30157         0x5513c6122548b3b8L,0x5b9a054c3f647360L,0xa47f9f8bde929154L },
30158       { 0xa2ae9ccbb8ec35b4L,0x934c5c0a4d9857e3L,0xc9dd66cc4b4f01ffL,
30159         0x42a1afa2e5b5e147L,0xc284e464f3d9b380L,0x67845404e21bbe63L } },
30160     /* 42 << 7 */
30161     { { 0x9ec1ed3342ec772dL,0xa77e1ecf5501609bL,0xb059e214a02906f8L,
30162         0x35b2ebceb28e4d14L,0xb8453ec22cf036eaL,0xe621234b2518fe75L },
30163       { 0x079d7d11f03cd158L,0x357492f91b2f011aL,0x3c2186da0661992aL,
30164         0x7adc1c0fe5df978aL,0x88d329db5300cdccL,0xd915c2444c0d644dL } },
30165     /* 43 << 7 */
30166     { { 0x1b9797a8f0ff03f6L,0x00dafe43f41c9284L,0x1e565c33f2bdc817L,
30167         0x63b77ad9784b1a5dL,0x3304540e74aa6079L,0x630524f3d7181d2bL },
30168       { 0xb4fe5fcca2804658L,0x1e48e50b9e393a6eL,0xb5bccd49397a94a5L,
30169         0x95394743eef17accL,0x4d67ba5226dd1687L,0x80965c3432349d9fL } },
30170     /* 44 << 7 */
30171     { { 0x1d70669e49f1216eL,0x8645472fa5fca474L,0x9242e8ddfc400357L,
30172         0xe7ac31548623996fL,0x37b9e68ce61aecb5L,0x7d2e10fdb997e4c9L },
30173       { 0xc0cb59a6c2086dc9L,0xb38e2032d7952172L,0x78eaecf6eebac939L,
30174         0xece490b42f5dbaaeL,0xdb17501dcdc32565L,0x59bd392ab133bf99L } },
30175     /* 45 << 7 */
30176     { { 0x71554fae07de21a7L,0x3dd66b8bcc42db25L,0x9da85c0f0636e9a4L,
30177         0x61fef273904930d8L,0xcc8f527b73369e81L,0x4207dfab7caeacd8L },
30178       { 0x99e5d1404fc763d7L,0x5cc6a3739f4e8947L,0x9ef14ec1cde33eaeL,
30179         0x25eb3aa8095872d2L,0x0db8268d7d9e6dd9L,0x38846510c2ccfe92L } },
30180     /* 46 << 7 */
30181     { { 0xce6197e822d0a502L,0x69df7f8e09d45970L,0x0274f48b7eb4718dL,
30182         0x47461334a8c22b75L,0x89cebf17bf25b9abL,0x57c042f6fdfea412L },
30183       { 0xb19c338644346b96L,0xdba17de06ba014c4L,0x6697687a5f844d69L,
30184         0xf16dee4c1a66c6faL,0x7f916e47fdafd0d7L,0x1c3842d2340f158cL } },
30185     /* 47 << 7 */
30186     { { 0x417c9ab760efab2aL,0x1745d5c2f0065f75L,0x1a7d86f2ed71b350L,
30187         0x6d4d504feee5c850L,0x4ae7ee0da657b859L,0x1f72ded53c302a3fL },
30188       { 0x08779fdae7b22e51L,0xb04c1c0446d90bfdL,0x4dc97219712f96d0L,
30189         0xb15e8c0041a6be82L,0x384a02cca3804090L,0xcea45861babd1ee5L } },
30190     /* 48 << 7 */
30191     { { 0x3c686079d42aeb95L,0xc162e5e985e3ea0fL,0x34cf58611bbb2455L,
30192         0x7650de1d8773b064L,0x3b7562c6d2bab35dL,0x83191b4433d0741bL },
30193       { 0x4b604db03a6bd9cfL,0x87cd84db074aed21L,0x02a042d2d4f91f9cL,
30194         0x5a5d52e5e42c2a67L,0x31291acd1d5f216aL,0x9c3971bccd6203c8L } },
30195     /* 49 << 7 */
30196     { { 0xec931d6599e9ec3fL,0xe9d780c64bd554d9L,0xa580534502eca45cL,
30197         0x84701f1ac1276ca3L,0xcb7ba786d5f9438bL,0xf3a27508c85f663aL },
30198       { 0x044df512118c9421L,0x1109fd431039871bL,0x7865443de2378386L,
30199         0x7a5e2d49e70297abL,0x112763ca6824d2b3L,0x8a05f2c90e84bba5L } },
30200     /* 50 << 7 */
30201     { { 0xde3bfdebff044924L,0xd7f2a5181a0458f9L,0xc03df0c00139d557L,
30202         0x7a958c60cd3ad0d4L,0xec9f2f9759a43584L,0x5e0fbba950d8b4b6L },
30203       { 0x5fbc5e3888245837L,0x17235805a267a54aL,0xdc24a508db55d65bL,
30204         0x431e4d5623c704d1L,0xb1f85b2277585f9cL,0xb288f25ed0b1c374L } },
30205     /* 51 << 7 */
30206     { { 0xd8fd5b405a37c029L,0x5c9d827fe4d37effL,0xe024d7952e046275L,
30207         0x0661277f913c55c6L,0x21ee10eb904b3679L,0x32c582e066778adfL },
30208       { 0xc353ab1fba8d17daL,0x1d4ab06b5658ea17L,0xb908cb88a2d70bb4L,
30209         0xfc215909a98daaebL,0x7aea6c8777000e24L,0x19e0acbe38446e20L } },
30210     /* 52 << 7 */
30211     { { 0x1bc3803e2f98532bL,0x39d0c3258754d142L,0xa7b035c5d739eaefL,
30212         0xd36ddeb8fbfdea2dL,0x7df72a94bdf64f2aL,0xab4ad6b880bc3c47L },
30213       { 0xdf386df3877fa482L,0x4b94260470519bc3L,0xa3399d91d20e1e04L,
30214         0x7f5208b797cf58ccL,0x528f6a2814424c00L,0x83d74730bd900d10L } },
30215     /* 53 << 7 */
30216     { { 0x501c657f34ded7f1L,0x9071027e12fa53bbL,0x395e16aedff079ccL,
30217         0xea95dc84770ac4b2L,0x4d2aa60a41355974L,0xe04effa507f12473L },
30218       { 0x38ca98385cd1c738L,0x3c067a0b683c0dbaL,0x55ad2dec67589842L,
30219         0xe51550f7dfdae3c8L,0x21a56717214d51aeL,0x75b6a4a012a0fdcdL } },
30220     /* 54 << 7 */
30221     { { 0xd63605266a4ea95bL,0x180f72d403e67090L,0x7faf4529751c8c9fL,
30222         0x1ab7b50d00e4252aL,0xc0e69adf34811274L,0x5c4c83495e99c6ccL },
30223       { 0xcc9467f29a9e02a9L,0x5402c2da5c4fc719L,0x1dff8c5d3f6d5bddL,
30224         0x88a7d27a2c653c3cL,0x067f31183a050dc7L,0xca0f7dafc4f0236eL } },
30225     /* 55 << 7 */
30226     { { 0xa09306e9ca177c3bL,0xea84f03ed0552a4dL,0x7ae9024f3c00d359L,
30227         0xe189ebc33aa619faL,0x4adeefac8354579bL,0x90168ef9699db1ebL },
30228       { 0x75319141ad87490aL,0x7b48fe7629c1bf84L,0x00ae82c7a2235f2aL,
30229         0x6292c9cf68562b59L,0x0b6500943935ca20L,0x39f22cb027f33addL } },
30230     /* 56 << 7 */
30231     { { 0x92e4c851aa1ef488L,0x4f91fc22846528a9L,0xaa2f5d2d5dc13a84L,
30232         0xba06aa68f1072d4dL,0xf4f3b17c5e3a2ba9L,0xff36a5355e4dde77L },
30233       { 0xe8ef143aae17dddcL,0xcc82631ba1fcd4ecL,0x97db807ec7d3963bL,
30234         0xe4aff04521d85ce2L,0x2d6480e674667392L,0xc8ce97f3a55d0b3fL } },
30235     /* 57 << 7 */
30236     { { 0x1a32b8457962a675L,0xd78efd71723d217dL,0x9b03d6573b41a2c5L,
30237         0x1116f33589a380b1L,0x2c0359af931ee15bL,0x8a53744f239ba4c4L },
30238       { 0x4801397dc78cdc83L,0xc43b9f0434ae4453L,0x9cc8f6cec356a35bL,
30239         0xd5a74c2a648b39e6L,0xa54d668c0d5e78fbL,0x36257047cfcb8f6aL } },
30240     /* 58 << 7 */
30241     { { 0xabeef3461549c215L,0xfec59db2ce4aee45L,0xa1743a0f5305df83L,
30242         0x9d598abdf211bacfL,0xd14609dd52a513fdL,0xd3dc446be00d4ad0L },
30243       { 0xbd8883e9b272211aL,0xe991e57757879fd6L,0x5a093d372b732171L,
30244         0xdd901071f55f18dbL,0x87f04c0034fecfd1L,0x2c07df27c94f6a5bL } },
30245     /* 59 << 7 */
30246     { { 0x518e3ced1c17df0cL,0xf8971149ff5dbc4eL,0x5fec8bfe0ac9d27cL,
30247         0x41d68852489eed7dL,0xf48ef4bf3c3c4725L,0x3b8d9eee7681eceaL },
30248       { 0x7743ededdaae4bdcL,0xb9665ef5d1bcf697L,0x9d77f535471bb958L,
30249         0xb5db5b96d752b2ddL,0x2cd3c919c368982dL,0xf8297660e9cff6d7L } },
30250     /* 60 << 7 */
30251     { { 0x39e7da1028946a2eL,0x4e628a96c3a76f7cL,0x43b8b808e9f6000aL,
30252         0x86cbd25ca48bbb79L,0x5ce825e273092951L,0x43a6031df0cbee32L },
30253       { 0x6d685a594923485dL,0x8d4483ed81a17f47L,0xf61d329bbc379719L,
30254         0x9deef7d0f6596ee8L,0x0314a572541b1222L,0xe2b34d387ea7d376L } },
30255     /* 61 << 7 */
30256     { { 0x05ff6faa31f43d37L,0xfb83f23211b801f6L,0x238792d519b223a4L,
30257         0x28edadcce004f601L,0xf77747b3bdeb7597L,0x2178dbe21e6575d4L },
30258       { 0xd48ec49842870ba2L,0x7733661d15dca6dfL,0x08212e2f83393416L,
30259         0xffa1bfe2614c545cL,0xfaf4ab8494254145L,0xd8f9eb48000d250cL } },
30260     /* 62 << 7 */
30261     { { 0x9ff4f289a66132a2L,0xc54fb8001e098994L,0x09d3cd6624cc2471L,
30262         0x6d0f74167838e14bL,0x7438cd2dc540cbdaL,0x193b16817d6fa8b4L },
30263       { 0x487a7dedab33c6f3L,0x625eb8cf02f5aa09L,0xd8039682501323bdL,
30264         0x9de122e38e216951L,0x40a8fbde0711c51aL,0xf192b5c283a474c3L } },
30265     /* 63 << 7 */
30266     { { 0x3782cbda57e04e9cL,0xec639886e41b30dfL,0x4cd14afd12d2f686L,
30267         0x0aa093ee8b768113L,0x6cfc12cdad598f9dL,0xe4a62f1194bcce0fL },
30268       { 0xd5035fab150ad4f2L,0xb3cd4871ae2e8da4L,0x49c9e78271ad9c3dL,
30269         0xdcafeb34825690cdL,0xc05fb7a38c246f85L,0xefe16be3a82cc013L } },
30270     /* 64 << 7 */
30271     { { 0xd42777314c14ee0eL,0xda8146d15e881c3fL,0x6b0746b099f1867cL,
30272         0x1ec73d72602dd4ccL,0x27fae51538081120L,0x6a677bdc2f8b2f2dL },
30273       { 0xb924af64d60544e9L,0x1439e183dcfc6b16L,0x4e88e9ae068565acL,
30274         0x8a3dbd25a9a4f146L,0xdb4a3e483f93f734L,0xb1971c058f1d33bcL } },
30275     /* 0 << 14 */
30276     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
30277       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
30278     /* 1 << 14 */
30279     { { 0x721bb8363a7f43c3L,0xab5b3108c12dca0fL,0x9cc9a78934853870L,
30280         0x78b604a7af598c4fL,0xd370375e476f27c8L,0x9f0415b80b15cba5L },
30281       { 0x2bcfd9a4d400dc1fL,0x2a6fe03b4bc62dddL,0xb05a6464a211b19fL,
30282         0xce059d419990b504L,0x011c5f87d94951d3L,0x13cec08900d9c7b0L } },
30283     /* 2 << 14 */
30284     { { 0xf365419f9b280fd9L,0x13e3b12746365672L,0x8a91c165c41880aaL,
30285         0x3eb27a97f9712fbdL,0xa6587aec76c55678L,0x7c3a04b702cd79cfL },
30286       { 0xfc878f9cda712eb8L,0x076e61170fca3e02L,0x09a184d8caf6df5eL,
30287         0xd32bf232aabcde75L,0xf601d0de03de597aL,0x85d2b5fcc5da2858L } },
30288     /* 3 << 14 */
30289     { { 0x3075a7636c888df8L,0x6305c20472e21527L,0x6b1d683e8798aad9L,
30290         0x0d09624680706369L,0x91db5e7f7b854739L,0x0e63cc6e02d72332L },
30291       { 0xe929e3ea1f7ff6ccL,0xd53a18a145595925L,0x867916cb93af8be1L,
30292         0x757e9f56c5c305eeL,0x3f9071c75c83063cL,0xccc0f92d7f6d5bb7L } },
30293     /* 4 << 14 */
30294     { { 0xb6029961ae899afaL,0x8eedd66e681b6e1bL,0x82db693b4df3e5b1L,
30295         0xb5131488a0c3e357L,0xbfb01ff3ccb2f577L,0x28ea947027a72cc3L },
30296       { 0x26170928e39e325eL,0x42d4876b84f80188L,0x0bec6a634c872d76L,
30297         0xa0a7cc90b14d9c9fL,0x8a32d2c44f6c7778L,0xe7cd346e3b889a4cL } },
30298     /* 5 << 14 */
30299     { { 0xab35a14f5a4a3753L,0x1d0d5a142bbbd563L,0x54cfffc5998d4514L,
30300         0x1c02f381a77ed59bL,0xe4a7a6ab21c9c190L,0x50059df54a9adb60L },
30301       { 0x2d0383ba34bd7008L,0x894889bedf1a4f41L,0xe541c62612ac407dL,
30302         0xcc0e417964c3b62bL,0xdb8ca1f33a0978b2L,0x4ef45a2d287e8c6cL } },
30303     /* 6 << 14 */
30304     { { 0xea95b5c9437f2efbL,0x67d3e9b58e52ce8eL,0xfb33102488ff5455L,
30305         0x883ec9fcc3101dedL,0x056218e20ca5f1f9L,0x4c9b2483bccc65d8L },
30306       { 0x13199b26123db2ecL,0xbc1d82479aff90dbL,0xc4a9311d367516f6L,
30307         0x3b40c867cb6e90d6L,0xff674ff84034415cL,0x2787db45a1821e7eL } },
30308     /* 7 << 14 */
30309     { { 0xacc263fcadeb8508L,0xb52ebcd719854c90L,0x3d54e7805f2ce0aaL,
30310         0x2fc056a97e02e760L,0x47e7173e32da5f93L,0x1d468de3fa893134L },
30311       { 0x9adc877dd73396b5L,0x430826afeeb00c82L,0xfde2c3da96a673caL,
30312         0x467575ad33e43f9cL,0xc3b2c3a1ec1df2f0L,0xf0348e6f2252a8a6L } },
30313     /* 8 << 14 */
30314     { { 0x860ef794609683acL,0xf0631ad39af1c522L,0x322c83662ee7f522L,
30315         0x58ccd95f54122af0L,0x7454880c2bbb2d80L,0xea173d8286d8d577L },
30316       { 0xd5a3057cea1cc801L,0xfd08d482bbb2a189L,0x26aac99ec3c512f8L,
30317         0xc3eac036556d891eL,0x866c3aa7bf9f6112L,0x7c4c8fb9c144f7e9L } },
30318     /* 9 << 14 */
30319     { { 0x989eef73a9109d83L,0xbe43bd378edd17dfL,0x14a63abd1b17029bL,
30320         0xfd14ae365ff76860L,0x689dd0a6b8730632L,0x01eb37f147342f9aL },
30321       { 0x619bab45e6c446a3L,0x93d26fc97abddba4L,0xda6c120486ffa4cdL,
30322         0xc608937548758279L,0xaf074ea3034a7230L,0xf220244b82ce176dL } },
30323     /* 10 << 14 */
30324     { { 0xc0c1eb0f8343f5ddL,0xa205e66a0126fa2dL,0x37530a3244fd8be4L,
30325         0x3c7af6f696ab64cfL,0x1f04305076657202L,0x2c59d31c828f3fb1L },
30326       { 0xa61cba51e7f5926eL,0xb2de427391ebeb81L,0x976f2c34bb855476L,
30327         0x0c6c02c3269e4f86L,0xc69bed8fe2e01fffL,0x19aa421c480bf7b4L } },
30328     /* 11 << 14 */
30329     { { 0xb32e8e229affa929L,0x69ebb533bb7db327L,0x10ac3360a8a8d088L,
30330         0x066cffa7c485517fL,0x2393e74c12b8eebaL,0xb3a8825a596c8412L },
30331       { 0xe2b99fc3bc8b6b92L,0xd7716da085ca802dL,0x92f6693f4de5101fL,
30332         0xe8b0442304be34eaL,0x05b44ef648324966L,0xa89d9499413df57fL } },
30333     /* 12 << 14 */
30334     { { 0xad0d24c7b617206bL,0xb8be483f9dd13f59L,0xa55134ff7655aa29L,
30335         0xa3d103857a5e217eL,0xfbb9eeb53a21b295L,0x1de71555c84a136dL },
30336       { 0x7579398e0b7487b3L,0xc6ca9575a14dce87L,0x99b32e1e46452257L,
30337         0x99d54955479d8f2cL,0xc2a8a6a1930b80efL,0x58d9db81656c850bL } },
30338     /* 13 << 14 */
30339     { { 0x0c8fe2e04d89b43aL,0xe4d923e77a04e492L,0x49ecb701617df01cL,
30340         0x6d80f249bff9a819L,0xf01e604acb7f86c1L,0xd6d3a6664b7f1455L },
30341       { 0x657801c19188fb17L,0x339d79450dc92875L,0xca798cf57ec0b757L,
30342         0xc0808852a62301c2L,0x2dda13558266c908L,0x22bcde8f5e55da21L } },
30343     /* 14 << 14 */
30344     { { 0x6c85a0eda682508cL,0x8350b515edcce6c8L,0xa84a67656f95898dL,
30345         0x55b0ae971e419847L,0x11115c6edd6a885dL,0x6f0beaf64fb174a4L },
30346       { 0xaaae44b2815af3afL,0xcf0697b9927a2c1cL,0x37639d62d7d645eeL,
30347         0x157b7eda2effec37L,0xb55e50759b9c66e6L,0x33a66a1f85f597ecL } },
30348     /* 15 << 14 */
30349     { { 0x8260c5339b49bb46L,0x3f3df9d6437cac27L,0xd0723229d972d2a8L,
30350         0xe544a216d0dd92abL,0xeea4a0f5a03588f6L,0x54006166b218dec0L },
30351       { 0x0fae2be85778113bL,0xbb9618d68d570227L,0x3ba87360297a47aaL,
30352         0x9483a8399a76dd6eL,0xa803edaf6eb061b7L,0x6790050cf8067cf4L } },
30353     /* 16 << 14 */
30354     { { 0x171898aa8f7782b6L,0x8b7a706b499b3a81L,0xbc0e835ffdb2c1baL,
30355         0x4ee30281591f5aafL,0xfd71de3bcc272c6aL,0x532800c46e93f68aL },
30356       { 0x35ee08048365c576L,0x6c2bcc94cd4c0221L,0x49f37ff5957b2ff6L,
30357         0x315d8e7e5ec029c0L,0x33230602ef324c12L,0xf5847f9b966b2578L } },
30358     /* 17 << 14 */
30359     { { 0xed88aa550bf098d0L,0xbc9888fd75f90180L,0x9040919207713428L,
30360         0x38922bbc1a1f71ddL,0xa430fb65bfbf0f55L,0xa258b9ba867c1998L },
30361       { 0xa7f69b03b7294c58L,0x2ec0c5de84dbc1e5L,0x41c9e5207dba8d62L,
30362         0x545573f1795d8285L,0x1c24a375d3075041L,0x687e1cc8fb6b88dcL } },
30363     /* 18 << 14 */
30364     { { 0xc29b123e1453b1e1L,0xefb0778820059b44L,0x15554ade9291671eL,
30365         0xeb5a1980429dea37L,0xf96dacbb6c4b867dL,0x4f5563d6abab4d68L },
30366       { 0xb5b0ecffcbe76297L,0x5a22996a51d6bd43L,0x0088ec95b7e5cfc6L,
30367         0x4863a5a1fe373e05L,0x42b7925bc244d93dL,0x85bad13540117113L } },
30368     /* 19 << 14 */
30369     { { 0x01725fbe8201fae2L,0xee4d7d382dc34bbbL,0xaddf878afd7c35bdL,
30370         0x56522d5865536719L,0x595c3dd8f772d4cfL,0xd87c5b6045af30b9L },
30371       { 0x9cc20b9de7992d5dL,0xdfd53d58d56f1964L,0xaf2947bdc7d42a68L,
30372         0x9322b73dd19e8ad3L,0xa73a9e843243a6d7L,0x9c7dc57992c203d3L } },
30373     /* 20 << 14 */
30374     { { 0x86283e21f9daa551L,0x47fd23f81f696f1bL,0x7d029b1bb9784a9aL,
30375         0x7c7798bea0c0acb5L,0x41241c716d7c682bL,0x11c6c1131d33c2b0L },
30376       { 0x5d469ca23565cf32L,0xa949f022bad4bdbfL,0x3d054cc2a13cf4cdL,
30377         0x13bd21669e3ce279L,0x01bc70e68a4beafcL,0xb39e351d8aba087eL } },
30378     /* 21 << 14 */
30379     { { 0x92efa2ebfa6cb068L,0x934209b29235050bL,0xc446ee28d5000c05L,
30380         0xd4e51912862fb7ecL,0xa53940f111193db0L,0x5f2ef2aa82a7fc57L },
30381       { 0x1a6b30ecb0210f49L,0x4ab1dac73899548aL,0xb116cc3186737a03L,
30382         0x56cb33809ebfa5b6L,0x8ac3b61fdfd918b2L,0x65867e3ca102e1feL } },
30383     /* 22 << 14 */
30384     { { 0x26072a5d82357232L,0x3762764e9f0fd2f1L,0x9c5813f60c16733eL,
30385         0xea2e0e03718951d4L,0xae195bd469e63818L,0x241a4afcfa2f9a6eL },
30386       { 0x0e97519f9165d59aL,0x416bd37358e5af1bL,0xc4e811288197b7ecL,
30387         0x4145be2c9c6ba0d0L,0xc82cb2a17d40b98aL,0xc3c28487bccfa8b8L } },
30388     /* 23 << 14 */
30389     { { 0x920949a810476d2fL,0x5b387bbe2502c026L,0xd1d61a9acd7f026bL,
30390         0x81003d7ceea9a3f8L,0x6191c15fba5b78aaL,0xacbed41e30ad7befL },
30391       { 0x1427f1fd6740f72cL,0xb4b5e7c93c475735L,0x6a374d1773029d5dL,
30392         0xc1e4bfdacd622400L,0x670b9e36c2686dccL,0x1bb236e08dd4085dL } },
30393     /* 24 << 14 */
30394     { { 0x84aa863ea4ee10a1L,0x24d805a687919ccdL,0x553f3206b5c399b2L,
30395         0x775b92173cc109bdL,0x25c01263fe384088L,0xa3c4418bd5f743cfL },
30396       { 0x3d69705ddf91f1f0L,0x547d46269ebddad1L,0x0198ab1a2626cebdL,
30397         0xaf8320f285b1afe8L,0xb9c0968ce17e6efdL,0xfedc75c290215bb6L } },
30398     /* 25 << 14 */
30399     { { 0x1d375f7dcee34c76L,0x2295f8dbaa486096L,0xd18577928285cb84L,
30400         0x53fe6bd5e8c46c3bL,0x6f6cb6c068ba071dL,0x654ab4e8964e0f1bL },
30401       { 0xc70857a9edf6aa40L,0xc313c7852fd26360L,0xd705a86a995998d9L,
30402         0x413d35efd6989c8dL,0xddc0b2070df131bbL,0x21f64be59c7d70f8L } },
30403     /* 26 << 14 */
30404     { { 0x8061d340143ff74dL,0x59e94fc6a23aa7b3L,0xf7c79a0b914c3b81L,
30405         0x5a836211702c6ae7L,0x2570d63c718123c3L,0x7e86d11ec9f5ce3cL },
30406       { 0x80f03f9717bcce3bL,0x073975b1465a7446L,0x29f66de7cb357aceL,
30407         0xe87bd12c04894fb0L,0xfc501a2651a0b5aeL,0x20a3170c02207a3bL } },
30408     /* 27 << 14 */
30409     { { 0xaab1f0fa2785a18eL,0xa50192fdb37c657aL,0xe7073b27f0c8a908L,
30410         0xf3e0451b2c82fce1L,0x8237e128c290240fL,0xc1c631621bbf66cdL },
30411       { 0x9bbcc2afb6639b7cL,0x07643d299bf0e0c6L,0xf7f070c7671c5be5L,
30412         0xb09a423a9870ac6aL,0x324503506656cda2L,0x4f404be80584abc2L } },
30413     /* 28 << 14 */
30414     { { 0x3ee52d8f5fe63bd4L,0x09f8405c7a7da77cL,0x35ce95c61881a757L,
30415         0x0a8cf9d9c13e3707L,0xe71258d548d2d3f6L,0xcf4fd6910bbe7c0dL },
30416       { 0xbd6496e1fb9479f1L,0x711c669aab8cb3a2L,0xcbe8501358cfdfb4L,
30417         0x655c902b59275b4aL,0x7e0ff05b20f722baL,0xcb00031d42b17aadL } },
30418     /* 29 << 14 */
30419     { { 0xc568cee0cef0ae1dL,0x1b3422ca7a55aae0L,0x8dcce5058bb536b8L,
30420         0x12df74bee92759c9L,0x029abaf02ef962c4L,0x5d30b4359bb1240fL },
30421       { 0xc62fe8e7d03a850eL,0x67da35b5b08dcab6L,0x6f4d4e75e8ca1131L,
30422         0x53d6fbf81bd5bf97L,0x596d850ceaa0b2c6L,0x32e918240e8d39b5L } },
30423     /* 30 << 14 */
30424     { { 0x3360ff11d54bf1a4L,0xbab994cb5c79494bL,0x953ad553757d7771L,
30425         0xf17f14f068b58ed5L,0x223615317523c422L,0xf0f05f965ebf0d49L },
30426       { 0x3386676549182267L,0xf87eccc1ad71c3ebL,0xd7708e18913d8dcaL,
30427         0x27fe27e1b193eef9L,0x33376365cc45e65dL,0x599b4778d700ac20L } },
30428     /* 31 << 14 */
30429     { { 0xb118f73509ebb3c5L,0x7299c7844d0d36efL,0x409ef9cde10b249fL,
30430         0x040f91d0156401b9L,0x6b9fa5b107467a49L,0x2ede334334415300L },
30431       { 0x0b3abc9c0edc8055L,0x58f850958ca04aa2L,0xeb0d3202e568b6a6L,
30432         0x5e57bb1a159dce4cL,0x8d3780e03b68641eL,0x78eb21a0d9f50517L } },
30433     /* 32 << 14 */
30434     { { 0xda643272ed068028L,0x86b52135a91fb87fL,0x23865a7c35b43943L,
30435         0x6ac015884606bbf2L,0x9660ab721559fb9aL,0x1fcb09e73ce2f1a5L },
30436       { 0x62af29ab793d2f0cL,0xad5aaef53aee7efcL,0xee9f29b744c11037L,
30437         0xb2a19cf1d36c2571L,0xb87d88e265b552b7L,0xd8b4f172beb253d4L } },
30438     /* 33 << 14 */
30439     { { 0x6776241470c50124L,0x157c591f57d0eb9bL,0x99e1e2d769b4bcc2L,
30440         0x81c2b923a9d94ed3L,0xbdd9294fecbf3becL,0x3825c29a4c4fb135L },
30441       { 0x431d9f26e915cc2eL,0xc4fb48afec1a4835L,0x97f426c09ada831dL,
30442         0x0be0cf81d5c48eddL,0x166ee4243d02771fL,0x810bb518b09de508L } },
30443     /* 34 << 14 */
30444     { { 0x9f4dd8185038ba67L,0x5ff1572801111ed1L,0x900d44f163de4d57L,
30445         0xa36c1a67d5db5e67L,0x2f01142e2bf5cea7L,0x1519ae1f59aefbf4L },
30446       { 0x7b963d1f6d989fcaL,0xa5bb3cb85fce44e1L,0x61087c9672fd3285L,
30447         0xfb2fc6c1c597ef26L,0x5548e25c81e70a6aL,0xa6c53d67a229d7bbL } },
30448     /* 35 << 14 */
30449     { { 0x9d11a26ab9678e36L,0x8142106fbe07b082L,0x3c31548b322fda75L,
30450         0xa87215ceb7299565L,0xb5229b119ea80113L,0x7221a40f43ae700eL },
30451       { 0x1ad48de8cc00aef7L,0xc4573660d266daa8L,0x1cb020a65761657bL,
30452         0x9e799be24588c895L,0x3d209df968561484L,0xa0fb323295fec6d8L } },
30453     /* 36 << 14 */
30454     { { 0x9292138a3acde05fL,0x7b23f51a50f9e7f0L,0x6ad891a1af59b585L,
30455         0xbd394db79654da39L,0xcb8c47315f7c6edbL,0x367bbb5d6d2d6e5aL },
30456       { 0x8df2c759f51dd55eL,0xce0924d8e6c3517dL,0x49c46188097a8072L,
30457         0x47169f40980170a7L,0x56198937b96df7ebL,0x09572534531fb3b6L } },
30458     /* 37 << 14 */
30459     { { 0x04c18873d2eef240L,0x5752cce75106879cL,0x4b7fbe6bd9736e37L,
30460         0x7c7f1de4c85990afL,0x0cda6f07a2324ca7L,0x0894eafa4d80c28eL },
30461       { 0x24bd95890ae7e6d9L,0x050d526aaba494a3L,0x4b05455ee583fb5dL,
30462         0x3b5fb27c6049bb23L,0xc7c9da6ecb5b411eL,0xc1f2528ebc38336dL } },
30463     /* 38 << 14 */
30464     { { 0x8b177119d62ff4b1L,0xb0c02e2783150269L,0xdbeee1f8428f9e51L,
30465         0x2a55661225ff00dbL,0xb4ebcf98cd0d526aL,0xc69f721fc0efa6abL },
30466       { 0x0ceeceb516e29d31L,0x0bf4510127d1c530L,0xad942f1f42a7383dL,
30467         0x2cf389eb03b8fa98L,0x1aa647651ec6acf0L,0xf7ac647c202433b9L } },
30468     /* 39 << 14 */
30469     { { 0x880bfb2caa7fcbf4L,0x18c2b739731cd693L,0xd093ada3ae39b46eL,
30470         0xd48a288796c6fb7cL,0xed7c405daf96bbfcL,0x6b63b9ee256335e4L },
30471       { 0xfd4795ec7ee8e89cL,0x4f3fa1ccb07320d6L,0xe16c594206b0078dL,
30472         0xb8c95b563a0b2914L,0x2b5b5ab42b337970L,0xcf612b4cb9f75ea9L } },
30473     /* 40 << 14 */
30474     { { 0xbfe63081596eecd6L,0x20eb6fb0a3a194fbL,0x4497ec2b8751a73eL,
30475         0xf90e9e4cf88ba0e5L,0xd5a9c5d55974eca2L,0x9fc120ade4f3e171L },
30476       { 0x9ae058a633330640L,0xbda3227855bc8aaaL,0x7851cdbc1c9688a9L,
30477         0xf68d7d9e1d950edfL,0xc89c645074e06425L,0x62406f3b6116d386L } },
30478     /* 41 << 14 */
30479     { { 0x1094390070e509fdL,0x0a8e3db09af61ad1L,0xa487a61538d7aa57L,
30480         0xa9d56bc5ed020b3bL,0x7ed2294f638b35f8L,0x53d6870dc95fb42eL },
30481       { 0x85e828494c2207d7L,0xf88831baf0556be9L,0x64a547979fe416c3L,
30482         0xd61b652e779bebaeL,0xd3f43e2f2c0ccce6L,0xd5119f341f680ab7L } },
30483     /* 42 << 14 */
30484     { { 0x466f42a1191938bdL,0x95ec31c036f1dae5L,0xa7f350d2feaa8b55L,
30485         0x66434577555c505cL,0x0c668e73f55d1ca4L,0xd6af5ba4a7bd7449L },
30486       { 0x581e14ac1a79d8c9L,0x9761d9763054e915L,0x928e7415d69220a6L,
30487         0xc5bf4bb405bc4a22L,0xad033b7c45d52313L,0x4e67962c75d66dc7L } },
30488     /* 43 << 14 */
30489     { { 0xc60e17b2e2300049L,0x731c2fa54107f308L,0x848f6db7cc2982b3L,
30490         0xf251c21085275d38L,0xf5cac5b2128c8a96L,0x3c012933405b27f0L },
30491       { 0x9b0a61520b8b15b7L,0xb1c32dc691fa4548L,0xbe7b7654f366d677L,
30492         0x7e1f33277147a660L,0x11e31a0eeae310bcL,0x3edef63c1b86b525L } },
30493     /* 44 << 14 */
30494     { { 0x6f7e7259c6334c8cL,0xe34cba49b4f2333bL,0x157bf099211d08c5L,
30495         0x9e39c5442988a4daL,0x796ed9f17a998311L,0x3f4da896d8d349e6L },
30496       { 0x8ab75656fab28acaL,0x3e215d5342d14b21L,0x50008fd7bec23301L,
30497         0xd6ee4853446e2c56L,0x203ff1c880da14bcL,0x27a4bfbbc333ba74L } },
30498     /* 45 << 14 */
30499     { { 0x745e69dfb3d54e52L,0x1ab2a03e7c405cbfL,0xda71141e0bc431b5L,
30500         0xb3a47e71aafa7c19L,0x5329594fa88a4905L,0x489b5928973aba07L },
30501       { 0xbe31a4d37350ad6dL,0x177e5285478a42a4L,0x45a101bf848eba6aL,
30502         0x4287dfd949936d31L,0xbc4c491dc82823c9L,0x87c816aaeb8b8055L } },
30503     /* 46 << 14 */
30504     { { 0x66f5337cf309ced6L,0x897cbcb9eb5ed3cbL,0xeffb601762c35fd5L,
30505         0xb4b702f081fd31f3L,0xd5203833f66f6120L,0x1d2d5ef318a84d91L },
30506       { 0x22f9fae70edb3857L,0x034197b3cef00765L,0x16d8c6b493643908L,
30507         0x90ac59e16c51708bL,0xbed18da32edffd9dL,0xc90ac893e750df1eL } },
30508     /* 47 << 14 */
30509     { { 0x4a0af827bdb07e48L,0x5588631e131f46ebL,0xda550ce1e503169dL,
30510         0x0e16b540f2cf2f14L,0xea19a70dc79930abL,0x5654aa5fa8925651L },
30511       { 0x2f1a14906104f9c7L,0x98420d6c654cf319L,0xf967467f3ca96df3L,
30512         0x6abe4e32dee1fc07L,0x913bdf2bbd07d17cL,0xf96f70eda8ef9068L } },
30513     /* 48 << 14 */
30514     { { 0xa0096d10b7f8286aL,0x493e88563015be8dL,0xa221d57c17f70125L,
30515         0x4f932f4fe425eb77L,0xf0fa00df78ddfe95L,0x68165f257866f01fL },
30516       { 0x01345af4b1693425L,0x3fc8d3a6bad5603fL,0x4269006f0bf46cf5L,
30517         0x96e3b6b77e340ce9L,0x2a4bda69df7c68b7L,0x9649d8b91b6574c2L } },
30518     /* 49 << 14 */
30519     { { 0x98f55e59112ef290L,0xa5516c3568909cdaL,0x40407393235165f1L,
30520         0x6eeeae510991970cL,0xae79ce1faaa6d26fL,0x8bc719b441d43f67L },
30521       { 0x4a7af92a39cc89a3L,0xf6d14f9a85c8ab12L,0xb9bfca97eb8d4851L,
30522         0x926b8155cd52b2f3L,0xdd17dbd48fa94f9fL,0xaf68726447cac5cbL } },
30523     /* 50 << 14 */
30524     { { 0x39d7c1729517c2c0L,0x6f795181166e2f50L,0x9f6ecb5dc0ad8b54L,
30525         0xb480afac8e75ce4bL,0xf51569203dd5ad07L,0x87c855e73799b80dL },
30526       { 0xea8c34d9538ebc9eL,0x67bebb6a957b303aL,0xc6511b7b4dfc6d7bL,
30527         0x9a40cf5885b02ee1L,0xf4fffbbdecc59a6fL,0xe85a7c115cebfbcaL } },
30528     /* 51 << 14 */
30529     { { 0xffa0118c4a33265cL,0x4c4051d583e0bb83L,0xcde22f8d7007d078L,
30530         0xae9ebbc2932cba29L,0x297c2252f7a82223L,0x662814f41a09fbdaL },
30531       { 0x3bfd965640be805aL,0xe49901e592acce09L,0x4e201930bbb6bb43L,
30532         0xfe94eb4dcc018aa2L,0x454d8c611dcf97a5L,0x11d8e3a230f1011dL } },
30533     /* 52 << 14 */
30534     { { 0xe745ee2c36cc8b1bL,0xb40c94e6e328c813L,0x4144aecd8bd107b9L,
30535         0xc35567890ea88fd2L,0x017460e30492a810L,0x0c63cd4410b8bea1L },
30536       { 0x9123e9a3c890f74cL,0x940fe6590cea499cL,0xbe306232c82e1bdeL,
30537         0x40544f6bc041d7ecL,0x46de1f3b477a7dafL,0x336551f6951f1295L } },
30538     /* 53 << 14 */
30539     { { 0x2a61217a09b3b9a1L,0x0736704635b71125L,0xfddbf1933df24d57L,
30540         0x33ddabcb4592d748L,0x2fa9ff8a25309e3aL,0xdca2dd2892a0e76aL },
30541       { 0x706350255dfbd02cL,0xe01c2553b6306b8dL,0xb14132905e91ddecL,
30542         0xf45221866f6de6fbL,0x2d48d001b440319aL,0x926e9b64fe67f843L } },
30543     /* 54 << 14 */
30544     { { 0x5580401264e2c160L,0xe154925a9a6c256bL,0xce2df32922260b79L,
30545         0x74824410c546d756L,0x2a1d0a5f79887083L,0xa2c040c5da3f7d48L },
30546       { 0x74058ecbc14f96b8L,0xe69c09d73415e476L,0xe5a93bb47a443fc0L,
30547         0xe1bb24800c31d7b0L,0x4701d669f4ab0610L,0x0ad815841eeb23e9L } },
30548     /* 55 << 14 */
30549     { { 0x823cd737d72b5925L,0xee09efb9fa38cb06L,0x6828dced4a21e81eL,
30550         0xab67b37bf365e481L,0x3995edd2b5a7c630L,0x4c24ac8806930b7cL },
30551       { 0xfd7264d36dedce0eL,0xdcab1e333e76fe1aL,0x6b40889a89a94f97L,
30552         0x7a1fd432b2a3b0e3L,0x121efaea3ffe933eL,0xa81f6c6f843c3553L } },
30553     /* 56 << 14 */
30554     { { 0x26301455e5488aceL,0xdf39099881a20dc7L,0xac7d6049ee06c7f3L,
30555         0x547e8df33f248fe7L,0x5fc4b74213743dceL,0xa97721bc4c398630L },
30556       { 0x6b7877cc258aea47L,0x1cedce562d5c28d6L,0x7e930e419428d66eL,
30557         0x42c80757b97faf54L,0x091fe5ab3812e632L,0x2c29fd42e2e359bbL } },
30558     /* 57 << 14 */
30559     { { 0x2d9e65a61d7b990aL,0x8a9ab4bee2a8a6a9L,0x8658c36985e3eea6L,
30560         0xf352787df0de0b23L,0x872db1de1161aa92L,0xf2648c972190acbfL },
30561       { 0x9a34f1d09de72e41L,0x13860f846c086516L,0x2e9211b824127c21L,
30562         0x4e1623bba3697c37L,0x41d71f1df579c733L,0x33f0ebf7ca9f68aeL } },
30563     /* 58 << 14 */
30564     { { 0x9b51f4ca9f5a40c2L,0x38b59573682e2132L,0x5765e89dc556998cL,
30565         0x102fe894698a4a8cL,0x0bbcae977c6964d6L,0x8548f2c6dd7bb12cL },
30566       { 0x32c11ed9e49848d9L,0x1ee1b525135aefc2L,0xade5d14e812a5e4bL,
30567         0x0e122e7e15bb167bL,0x321594d4ec5c3594L,0xbcea8723a7c02afeL } },
30568     /* 59 << 14 */
30569     { { 0xdbf91edcaf87c75aL,0x9710003266582706L,0xb10cb32b1133a7b3L,
30570         0x70f5d71767e068daL,0x8d937e56b8e0c9a2L,0xd8a2652ee2a9afd7L },
30571       { 0x94d6cae9cc90c6ccL,0x3512f3abe94f68ffL,0x931ea6f09331ad40L,
30572         0x71621013daa3d4f1L,0x591c40bfb668a992L,0x5494cc174c6868e5L } },
30573     /* 60 << 14 */
30574     { { 0x7981826070ececc7L,0x8cc0b6e071cfc0e1L,0x998df6590276a6bcL,
30575         0xffb5bec11a43be05L,0xb93b1543f2beb640L,0x337703d456f3719bL },
30576       { 0xce74c17cd40a7375L,0x6aef79cab1aece94L,0xc5bdfb388876d218L,
30577         0xf71ce9cccea91445L,0x471cdbd1ed6e5f5dL,0xe0cc79cf10e56c08L } },
30578     /* 61 << 14 */
30579     { { 0x2b17e181794ebe48L,0x6111c897f28cdd32L,0x4d59199062dfeee5L,
30580         0x7b9d070241b14904L,0xa1ad534d5fea4804L,0xc08915d953b16c22L },
30581       { 0xa57c883e8ac9ddedL,0x589474dcda1d1bf0L,0x31cbf32ce9aa8e7dL,
30582         0x2abe9b60f0930d84L,0x604731b0cbdd031aL,0xbc35b1e4e9e1b3c1L } },
30583     /* 62 << 14 */
30584     { { 0x39300d55efeff954L,0xa9cf57f34fe9cffdL,0xe3315321b15aebbdL,
30585         0x26354c57b840b080L,0x2c690488476abf35L,0xa7303fe6d480cf33L },
30586       { 0xa50865295706c3b1L,0x4c26034eed0b2342L,0xf08d67be9ae9c452L,
30587         0xd4dbb9f5046c7d0dL,0x4435f1a3f9e5393bL,0xf47aae68cd4d5de8L } },
30588     /* 63 << 14 */
30589     { { 0xce9e5ddc06d5f48bL,0x22c1cd3e0ef642baL,0x2ad48eb9e9b8a960L,
30590         0x330074883ce26679L,0x495e62428d2de642L,0xcba5bf37e03b1a77L },
30591       { 0x9382c92de716624dL,0x410d212350a33e4fL,0xe55ee116e953e7edL,
30592         0x27e9a0584b840616L,0x560a5e4939473bd8L,0xbc1e795b382f3a95L } },
30593     /* 64 << 14 */
30594     { { 0x31bdb48372876ae8L,0xe3325d98961ed1bfL,0x18c042469b6fc64dL,
30595         0x0dcc15fa15786b8cL,0x81acdb068e63da4aL,0xd3a4b643dada70fbL },
30596       { 0x46361afedea424ebL,0xdc2d2cae89b92970L,0xf389b61b615694e6L,
30597         0x7036def1872951d2L,0x40fd3bdad93badc7L,0x45ab6321380a68d3L } },
30598     /* 0 << 21 */
30599     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
30600       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
30601     /* 1 << 21 */
30602     { { 0xc5cf8997ce0b5b72L,0x350adde19d7154baL,0x8139681e307b254aL,
30603         0xcc87fb5775cd94d7L,0x90e7027478684954L,0xc4fdf4c095ceb991L },
30604       { 0x91bbc0ab8762c84cL,0x5e09e226ce09e8adL,0x1cb83d704b93d45fL,
30605         0xe2299024f541da1fL,0x3eef7ce14b7ffd10L,0x53ee63bbb3fc1b9aL } },
30606     /* 2 << 21 */
30607     { { 0xe5004e8003682f59L,0xccdb9cb7f642ac0fL,0x405f50d1bd869f77L,
30608         0xecffa54de7ebea2cL,0x3354dc22d87620baL,0x01bb2988b1c01ff4L },
30609       { 0xd9370076e16477fdL,0x45303d2a2e71ba4bL,0xc0de76273291e5c5L,
30610         0x5cfebd87f0a7ca55L,0xde1162809e592a30L,0xdd26e577a78ebce4L } },
30611     /* 3 << 21 */
30612     { { 0x1e9b23b9ff1735a8L,0xc3bf3d5b2b0e4b7bL,0xd4cc00fe59b7721cL,
30613         0xd5c36f9c9e2f4cebL,0xdeca06bac90af70eL,0x42676f12416ee799L },
30614       { 0x0d7afe1b6f748c6fL,0x0b7a6de539c39d55L,0x11e43d6ee6eaed18L,
30615         0x5baf8602496087e0L,0xf833634fb1a3a66eL,0x25098c8a79398677L } },
30616     /* 4 << 21 */
30617     { { 0xe141e763d4720770L,0xb9739e70ddb3b450L,0x46e6cde496131446L,
30618         0x0458a5d5cb6c2ef7L,0xb7747634532f9fd8L,0xf62d372116544457L },
30619       { 0xbfacb4ded3100854L,0x70788a31b39d3f62L,0x9b543220f22d92e4L,
30620         0xaa4590f655723258L,0xc7b6730e01ddb8bcL,0xae252cf869e1e7bdL } },
30621     /* 5 << 21 */
30622     { { 0xc618cf0ddd4b8d8dL,0x471cda8640dcfbfbL,0xba0dd7ac08882ce6L,
30623         0x58e5d2f56cd336e7L,0xcdda8301af096540L,0xf6d268463cf31600L },
30624       { 0x6150cd982197efd5L,0x4440fbfa55fb0877L,0xca31871c90757f1dL,
30625         0xc4a1faacbdd756c8L,0xc9d4ac1bcbb8421eL,0x3c0c2914b17c43beL } },
30626     /* 6 << 21 */
30627     { { 0x46fdb65caa6fe9eaL,0xe0d48e5e05494cd9L,0x5adef5704afbf837L,
30628         0xc96ba4b91c9e2cadL,0x1e8158f7054a158cL,0x47be73209e38b88dL },
30629       { 0x9b99971e6d2993ecL,0xac9b0bfadf980eccL,0x9da09642d96ca391L,
30630         0xd67105369bf4305cL,0x40cc1adfa0dfafaeL,0xe27e32f8a209699bL } },
30631     /* 7 << 21 */
30632     { { 0xeaaddeb836e87d82L,0xc12587a71ffd7210L,0xf93d2f5c731f6838L,
30633         0xb96594e8f7097a65L,0x08d6717ab016e8d3L,0x9c378de81984d825L },
30634       { 0x627d41e7cb2a0c26L,0x1f447501c697ceb1L,0x8dc40831c760550bL,
30635         0x70ad48707fac97b0L,0x5ac7f22e7021c170L,0xa6f730e4929d5931L } },
30636     /* 8 << 21 */
30637     { { 0x7d27d71fd186cb09L,0x67cb7f4e3bc213c7L,0x418cafeb6075b2cfL,
30638         0xc0d691e6d93a06f7L,0xc16a95259dd001b9L,0xa0583230026f17b9L },
30639       { 0x4c1041b07845900bL,0x2874079147a22aaeL,0x8d08efd62c1758e9L,
30640         0x9cc6f207e6c3229aL,0xec69e902082d8924L,0x9cfa1deaf331dfe7L } },
30641     /* 9 << 21 */
30642     { { 0x7b5ab2afbce81cd9L,0xd25fa34b12028b49L,0xf9d65e6b63a659beL,
30643         0x6f88f1ddfffb943cL,0x38eb0d02b871cd5fL,0x732afedc558ad949L },
30644       { 0x4093ab05367d424eL,0xf73b23ad29de1be7L,0xce1c0093e7a50181L,
30645         0x6d05cbbe1e412cb9L,0xd3c1148b773a394cL,0xe04b5fdd38e50316L } },
30646     /* 10 << 21 */
30647     { { 0x1793535b8d0ce0f4L,0xe9b054b1ab73f7daL,0xd82a3ac1ee7bc6e2L,
30648         0xb28ad846b847f39eL,0x40975fa2fc10c012L,0x8de998619aafe68eL },
30649       { 0xa73f442584878534L,0xbe3118cb7a36a0d7L,0x3763a49e8fa37fc9L,
30650         0xf3f8ef82361f32b9L,0xea66f9978c1aebc4L,0x88600d648d9d024cL } },
30651     /* 11 << 21 */
30652     { { 0x11f842ca150a3325L,0xbae115c3185a385fL,0xddf9643637561bb0L,
30653         0xecea0cd9a4115fe4L,0x297720665893a694L,0x837e6880df408cfbL },
30654       { 0xfeb8f511e0a7fb68L,0xd21869dfa062b60fL,0xe2b60f46ca6a5e72L,
30655         0x64bbec184931d188L,0xfb09c90fe3ef3378L,0x67cbeffacd767337L } },
30656     /* 12 << 21 */
30657     { { 0xd35832381b289f6eL,0x10dac54a0aeb3bcaL,0x4df1c08d6692339aL,
30658         0x2968edec20054647L,0x34072618d74235a4L,0x00b4a7ae71d6064aL },
30659       { 0x23a8900e25c23f8fL,0xda0cb7fad7d0f1b5L,0x266211c56c8ecdbbL,
30660         0x0a4351b97bc27e4dL,0x98d54c97fc234258L,0x5ba534071e1a4dfaL } },
30661     /* 13 << 21 */
30662     { { 0xf07cfcdd77f083bdL,0x89bcae29d46712c6L,0x2089c3ab0f09bb8bL,
30663         0x3ede5a2a6b9a4028L,0x27ee18fe013066deL,0xc2bebbb416fcdda3L },
30664       { 0x6b3926af3a87cd68L,0xf52f0ef9f9a7b831L,0x4a39660a1ffc01b2L,
30665         0xe98f718d91aa6719L,0x8b0626f111d48e8dL,0x4a6a2e5b2bd93db3L } },
30666     /* 14 << 21 */
30667     { { 0xc3ddb6123ef24470L,0x98b66569bb3f99edL,0xccc537153a97a015L,
30668         0x0d9a6b4d04937b8cL,0x854d081ad9a575f7L,0x347bf0c0127fbd90L },
30669       { 0x6baa47a5c30987f1L,0x164b390dbfd0b503L,0x6672d1afe6a1f565L,
30670         0x9a50ee5828d5bb14L,0x2e23ab480d0226fcL,0x33eb052365cdbdbaL } },
30671     /* 15 << 21 */
30672     { { 0xa32d1a27d904eb73L,0x6fcad8d0c43c978dL,0x8cf1e7a19c0842f5L,
30673         0x2a6fa6d800328ae2L,0xa5905f67a1e3b06dL,0x458c8badaa8df96aL },
30674       { 0xee5b20c0b0d4b89bL,0x352ae0c4815c1af8L,0x546a7d7e6dd73b70L,
30675         0xa99882225f753229L,0xa38eb5d7efde47e2L,0x8290aaed92635ab1L } },
30676     /* 16 << 21 */
30677     { { 0x8ec4335fabe7c60eL,0x01f198c10a6a9fb5L,0x3ff96de001141ab6L,
30678         0xb21acc2c2eca98a1L,0x6154849010fdf648L,0x2c01a99cd1403e8bL },
30679       { 0xf1a35f306fa509d7L,0xf7715fe3e3f08e9fL,0x89c26c077fc9a752L,
30680         0x8d2535fe420d48a0L,0x80ec5ddd52fe2e73L,0x041b8df071704f39L } },
30681     /* 17 << 21 */
30682     { { 0x96882074659a0a12L,0xdb0d63032a6bb752L,0x2a1fb2d740c2194dL,
30683         0xeb6b45ba2c184444L,0x10ee44368c179d33L,0x906d0e509391917fL },
30684       { 0x11bead88ca3bcba2L,0x25914dae4253fb99L,0x0445b31013c25404L,
30685         0x2a2eac6d515f53baL,0xa746a1d662bf0a11L,0xc7576a4c6573c4f1L } },
30686     /* 18 << 21 */
30687     { { 0xec159ed060c5bee9L,0x80282ff007746414L,0x8d53f05f40a97a54L,
30688         0xc92d8789f5d4eedeL,0x1edd798132344c09L,0x3bb9a444a92c7b36L },
30689       { 0xbf130f5cdd6c8903L,0xd270e7cf676fcab9L,0xac49744bdc5ae6f9L,
30690         0xbd0ccfcb40e39281L,0x222efa16a981b3f7L,0x92bcd2d700aeeadfL } },
30691     /* 19 << 21 */
30692     { { 0xecfdb91489c73e10L,0x83a5168becffe79cL,0x6a0d57c123e97ffbL,
30693         0x774121ca4b130cc3L,0x8556fdc5486967a6L,0x1249448d5fe4a7f5L },
30694       { 0x8c2c14440e93c114L,0xcde258573bc68985L,0x697ba7b0952758a2L,
30695         0x0d962b377aee19e3L,0xdb31fe8582c4c640L,0x6ecfaf36c89b4b85L } },
30696     /* 20 << 21 */
30697     { { 0xf1e8c5a0e06b40eeL,0xa55909fe59836af3L,0x77a13be8a3a4ed95L,
30698         0x47408650bbbcde0aL,0x95b455c2b4fba7b7L,0x4983f5ca4321117aL },
30699       { 0x37bab5d1e18d304fL,0x0edf3733f1d29206L,0xe23e4db4dab91670L,
30700         0x602a5265923ab7c4L,0x53ee98c6eb920a03L,0x1b592b626f25489cL } },
30701     /* 21 << 21 */
30702     { { 0x66c981d9d3543689L,0x20500cd7bb8f53bdL,0x807d43605179af77L,
30703         0x7280a7b27c286404L,0x75a74e630976a65fL,0x2ba9ad9df11c3bdfL },
30704       { 0x23f38f950ec6c760L,0xcad599102b858cc1L,0x4d9adb7efec23c19L,
30705         0xbabb6e45095e85c5L,0xfab66a97e5dac2e4L,0xcde4b15a08baf1f4L } },
30706     /* 22 << 21 */
30707     { { 0x148aad3207089d6aL,0x3ab5b0790303c267L,0x7d13995bc3153026L,
30708         0xeba27c192287f305L,0x5faa453367ae45bdL,0xbbb561db2f4e9488L },
30709       { 0x254d8977c8493163L,0x60d468fc5c544164L,0x0b6309a3a2758037L,
30710         0x8480e16b1f9add24L,0xf1d99fd2902ec661L,0xd32df254cb6dd6f4L } },
30711     /* 23 << 21 */
30712     { { 0x9a17f5c3610178b9L,0x75dded80bada5aadL,0x158249c23dbeb289L,
30713         0x1d0671cac300cf49L,0xa1649bd0886902f2L,0x79b0d6ed7d13be62L },
30714       { 0x78253e7549e2327aL,0x5629cc509af110ecL,0x4373a20059f8765cL,
30715         0x739f33289d9c5f3aL,0x3c7d5cfe9a5f997eL,0xf044d90d0559357eL } },
30716     /* 24 << 21 */
30717     { { 0x20aa15d97ab838e6L,0x6cefdd5a0c827ed1L,0xe2f205caef579e8fL,
30718         0xad27e38b325981bfL,0x087b8284c3438be8L,0x2095dfcf422360d9L },
30719       { 0x87cdf5ad76d096bfL,0xf1b97ce1e022adc3L,0xa71240c189104665L,
30720         0xeb5a175c9c1578e8L,0xbd66910ad150ffa2L,0xac277af811459a28L } },
30721     /* 25 << 21 */
30722     { { 0x7db4df62417fb54dL,0xf6c1e7f04dfb7c05L,0xfdcbd3777aa8ceb5L,
30723         0x0364b3bd89c24333L,0x8a721718fdd3dcafL,0x9a6015dcec2848f1L },
30724       { 0xd6571930d35ad1a9L,0x154a929199369196L,0xf3be7e228e514732L,
30725         0xfa3eef28b7fd3aacL,0x0bc3b2a69f60d298L,0xf6327920febfca58L } },
30726     /* 26 << 21 */
30727     { { 0x3b9de1baf8dc6030L,0xacc4224a2107fd1eL,0xa7d32fe86dcef0d2L,
30728         0x353d5e88dd83fb28L,0xd552c3ce50bfb0b2L,0x69bc0e686cc8ee7dL },
30729       { 0x965c0ca21d9c74d9L,0x5cd163a406ac3ecdL,0x57910a828e98b581L,
30730         0x1d0fa7523d992afbL,0x862d3184e7d12701L,0xab6a288c6c7d161aL } },
30731     /* 27 << 21 */
30732     { { 0x04caa9caf4f2b3e9L,0xcdb896141af43dd4L,0xb09444fd4e74ee8bL,
30733         0x9428849fec05d35cL,0xe29bb0e94765c0e5L,0x138c45f176d25d2eL },
30734       { 0xbf041131a0184d83L,0xaf321573991ddc4cL,0x058760a8ef31df7dL,
30735         0xe0b94b57f80dcf5fL,0x75572221850a4a6eL,0xc735580c104a4a1fL } },
30736     /* 28 << 21 */
30737     { { 0x9ba102f1a6b735daL,0xe073232edfbe7d06L,0xa8ac24ba57266a16L,
30738         0x07458ea42d5c4bb0L,0xfbdd0f0574868e1bL,0x73fa612a3921fe7aL },
30739       { 0x26f6714b0b32d8e2L,0x7a3cb2b48bceb95eL,0x756a68c6290f204aL,
30740         0x148fbb787fdf2b7eL,0x639ece6c57fe0da0L,0x315aee1e9a92b7e7L } },
30741     /* 29 << 21 */
30742     { { 0x22dc170769d10661L,0x8d89cd1c71fd40f7L,0xa22f11bfa2545040L,
30743         0x1247d019d44c2446L,0x8d17daaba08235c7L,0x7e6863b9fae7874dL },
30744       { 0x6d57431c0490d338L,0xc1459e61809d1f9aL,0x4eb14dce95b64852L,
30745         0x8d3a04e6a7b5a861L,0xfed631ee7bfa24a7L,0xf8f86f27af11723bL } },
30746     /* 30 << 21 */
30747     { { 0xb43b14146e63c833L,0x497a5f98c1ec160aL,0x112223de83eb3709L,
30748         0x293964a88d100b9bL,0x6db1d1931e3b2db3L,0x264bc83d71eced39L },
30749       { 0x8418eb43aa89c967L,0x51d41bff76f8620aL,0xa4017ee5cc416467L,
30750         0x1cc527231e216e36L,0x76ba536ce8069a6fL,0xa239b54acb77b981L } },
30751     /* 31 << 21 */
30752     { { 0xa05f2dbc37544476L,0xf18dbcd71b797f65L,0xc78131376d50cd5eL,
30753         0x2b509a4d6dee11daL,0xfc0f0584beba1b6aL,0x3282624a9d53bd6bL },
30754       { 0xa0944e5c16b7187bL,0x468a79b8aa2f99e9L,0x32e4644b38bc4ed9L,
30755         0x5bc375d7e7cf71feL,0xe18e3c0956617861L,0xbce9ccbce69255bfL } },
30756     /* 32 << 21 */
30757     { { 0x498808edc65fafceL,0x3676a7cc4e806bc3L,0x796e25f176c6b964L,
30758         0x1aced64bac474261L,0xa62470fc29a460c1L,0x77501dce5e751e48L },
30759       { 0xcc00053b6d9e3641L,0x2b5bc4ae9a3f5a0bL,0xddaccc2e3f9ca178L,
30760         0xad33f34a0b80d1b0L,0x6a76df9364642225L,0xc145f36f778e761bL } },
30761     /* 33 << 21 */
30762     { { 0x377fc5ac575e74f6L,0xfefeb2327736739fL,0x62ba076a9fc2d5c5L,
30763         0x6f3c6084baf0269aL,0xce2917688fa7c145L,0xa60bb8905b3f2333L },
30764       { 0xa811055dd900095aL,0x92d95e7b385bd4f2L,0xba54f444d33c2a43L,
30765         0xc1b131327d12754fL,0xdcdb54821556f5e3L,0x55377fc539ca4b94L } },
30766     /* 34 << 21 */
30767     { { 0x455f65d1a0cbee78L,0x554eccb566225edbL,0x306400b47a4e014fL,
30768         0xef3e02eb7b67025aL,0x7d4efbaa997a633aL,0xd43c6eb8672c90b2L },
30769       { 0x0ed2d88d7519da07L,0x864377854b9d51e8L,0xd5900a2e2e3ab57cL,
30770         0xc02f046b69bb0a39L,0x06d825a6bff12faaL,0xa12e5b0d5d3ac267L } },
30771     /* 35 << 21 */
30772     { { 0x1716be5ba10508b4L,0x8706acbe7e37fbebL,0x3881f54e44e3d127L,
30773         0x54e20622a864d77dL,0x26a194616b83325eL,0x0d57be814c15a8f4L },
30774       { 0xb10c0cd07b53b476L,0x3d016ea097d39c64L,0x4d7df7c15315bdadL,
30775         0x6fe5a1acf060cf4dL,0xd5e3d05396846b79L,0xebc878f79e3c8028L } },
30776     /* 36 << 21 */
30777     { { 0x5b849ed8d0d193acL,0xe983abf773950501L,0x5ca162770854a569L,
30778         0xb0b284d26904bdceL,0x9c769d269d4fadecL,0x98e5e9b912677284L },
30779       { 0xd9246836b557f2cfL,0xbd47433069d46374L,0xbce8b27b9b063a22L,
30780         0x08da2eca37c5ba26L,0x9e742de8d4b26479L,0x643b752c102aa36cL } },
30781     /* 37 << 21 */
30782     { { 0xb72fae566fad22d5L,0x1e921426cf2fd62bL,0x9f31293d4c225102L,
30783         0x78d43a621975afbbL,0xce2787303cfee30eL,0xb88590d77a82613eL },
30784       { 0x42f86567560b932aL,0xc2d98915a7c9ed68L,0xe70e41fb349a9750L,
30785         0x7e7fdd2c79f9582bL,0xf3d6ab07da737c0bL,0xba247c0b9f3cf823L } },
30786     /* 38 << 21 */
30787     { { 0x4bebaf153dffdbd3L,0xc37d4a04fcc967a6L,0xeabab9aca0435a65L,
30788         0xf23d1d58f9ae9c52L,0xce229a798cc8f7b6L,0x4a61e6ebf5e11e61L },
30789       { 0x770e1dc6b20f2d8bL,0x199d20e8cfb9e820L,0x9fd709c4c381a22bL,
30790         0x6f53a358b1d52a98L,0x4b1a018c66f511faL,0xc7d2d49375d3a666L } },
30791     /* 39 << 21 */
30792     { { 0x3b2db5e5550791d3L,0x034ed5665bbb686eL,0xf019f161e033e3eeL,
30793         0x33198653acd2f0b5L,0x368d89e41ee8273cL,0xa7ac3b507f26daffL },
30794       { 0x73d8d7df006c0037L,0x98b5937de73cf271L,0xc3bc340be917247dL,
30795         0x799ea890e45f37afL,0x27be0f5a25e8dd2fL,0xd70ec41c3bb16923L } },
30796     /* 40 << 21 */
30797     { { 0xd30302352679072fL,0x73dfdc0f95dad4c8L,0x53649b575c4630f1L,
30798         0x60197fc08d098d74L,0x9c295d54647f5cbcL,0xfa5f1bc6c0813efcL },
30799       { 0xf6e08007d2e49417L,0x4f7d4b3dab579569L,0x7af3e08e11d9b388L,
30800         0x073ec38a5db61c65L,0x9b480cb89db4dc4dL,0x9be2ce7e372fa82aL } },
30801     /* 41 << 21 */
30802     { { 0xd87c0b55ed1b6d83L,0x3b47443adfae29cdL,0x16c5b0e52147bfdeL,
30803         0x98812fd0663cbdbcL,0xe3cea04955ffe911L,0xfc1e9d9cc5df31caL },
30804       { 0x7ffa90f9902c4ab1L,0x2cf973c3669a857fL,0x89243cfc94b109adL,
30805         0x222d6fdb536ee544L,0xa48b1b15fd488c22L,0x7120e3f0f318ba27L } },
30806     /* 42 << 21 */
30807     { { 0xfbb8a3cd47813054L,0xa2d7255d462ac3f3L,0x341bc10babdfa7adL,
30808         0x01efa884ceb9ea50L,0x30fa0f903f5bd09cL,0x8aa309453abd108aL },
30809       { 0x0ab7fe23f9ecab6fL,0x0585f72a5ec032bcL,0x686a7d71cf9f4fcdL,
30810         0x096bbf04f769be8dL,0xa309931250b64584L,0x67be53402e216060L } },
30811     /* 43 << 21 */
30812     { { 0x4e14fa6eef252e90L,0x2ca968579b7db6f2L,0xf80772e3653f1662L,
30813         0x4f89e666cd28bb05L,0x7fa800cc77eef62eL,0xa3f6ef5963b2f3e2L },
30814       { 0x438d564bc81e600aL,0x8978912de14c1434L,0x33732892ea695891L,
30815         0xaf6aef0b1dc8caceL,0xcbf9580b7c509cb1L,0x2db9fbc11ed6fbdfL } },
30816     /* 44 << 21 */
30817     { { 0x408805a1fa7052bdL,0xe4eb27f75f825c13L,0x0a0cc8fa37ee34a7L,
30818         0x737b99a40c59156fL,0x78c2a5d8e1b55c30L,0x89d70b62bcbb2196L },
30819       { 0x07ad36911e862a0fL,0xaa1c9118c41cc693L,0x7e6f544c4e1f7359L,
30820         0xa5f4f5891bf9474fL,0xa711efd9ef56df82L,0x0428edb7e3de91fcL } },
30821     /* 45 << 21 */
30822     { { 0x67f403610905be0fL,0xffe68b80c12178bcL,0x41bef79ec6a673aeL,
30823         0x347e8ba81bc77376L,0xd49956d60e589da2L,0xadd54508fed84dabL },
30824       { 0x18868a4a462749f4L,0x2048cd88ed323e71L,0x7b27932aa28d1f02L,
30825         0x3cf6107412e4ddccL,0x0f6198631360ecc5L,0x40e5e08b1330d33bL } },
30826     /* 46 << 21 */
30827     { { 0x79b68071e3ad573bL,0xcb070412723966f5L,0xf4610fd1964b453fL,
30828         0xfdc9dbbc8bcee838L,0x3e191f3bb5ca4f20L,0x90d85084c02e0af0L },
30829       { 0x4e3f57a70ee64025L,0x63f339acdea07a5cL,0xf255b5045eb4081aL,
30830         0xe42bd241b4cbb0bbL,0xafa58985ff68c5c3L,0xd36cf7175b55e6e5L } },
30831     /* 47 << 21 */
30832     { { 0xf2b06f4b95d37e50L,0x7da1d2af3747c79eL,0x18a37dad6ad0092cL,
30833         0x9f4a6f081a8f207bL,0xeb1fd3f2cf0fed15L,0xfb9911e4384eb46bL },
30834       { 0x5f07c680b87cb035L,0xc49935d189e1531aL,0x718f6bd09ea02056L,
30835         0xadafb67b18a4ca31L,0x26cb0f368477f396L,0xec7775df62ec2172L } },
30836     /* 48 << 21 */
30837     { { 0xdffb03aec10b43aeL,0x39b1266e9433a54bL,0x4c262521b19fe0dbL,
30838         0x0ec1e54f3d5c7feeL,0x2856510b05e68e1eL,0x49382c1edc80b8a6L },
30839       { 0x80a509312471bdd5L,0xe8cde18581974aa9L,0xca6112ee28235c52L,
30840         0xd28a0eb8301f9653L,0x22b11e26e11fcdf8L,0x97e6fc5de4d735f3L } },
30841     /* 49 << 21 */
30842     { { 0x7fc264d35b253506L,0x1a11dd9cdfe2be8fL,0x2cbcf79c711185a3L,
30843         0x2208200a46806ddcL,0xf2764b6524e75d8aL,0x71a71bcdfcb43c25L },
30844       { 0xddd0cd3586a895caL,0x5ec28b469e2caf5dL,0xeb749df9f6614957L,
30845         0xdae1dd77eddd371fL,0x7ce493b556dde554L,0xc1627c06d6e5653cL } },
30846     /* 50 << 21 */
30847     { { 0x7926553cdea7472aL,0xe1e9480d3ba7f351L,0x242a641b1b6a2fe5L,
30848         0xf4af10091f790122L,0x5a2e2f95967810a0L,0xf1eaec6e2ed57598L },
30849       { 0x34a32da96b9f2421L,0xdc32daa8dd820372L,0x8b2539fc37a067ecL,
30850         0x2a495112820969ffL,0xea7c1829a699c283L,0xb4a1083dc2c58cbbL } },
30851     /* 51 << 21 */
30852     { { 0x1bcc30812e59d7a4L,0x557be0b2fac34690L,0x5b2868db673254faL,
30853         0x62e150a49e1302c3L,0xe29e9b445772138eL,0xc76bf4fd7ccb31daL },
30854       { 0x8d687bbb34c905c9L,0xf4f207030786eeb2L,0xe56a494c38deb469L,
30855         0x759e75e2cc6bbfa8L,0xb11903aaa59eb766L,0x3f6928c5c68b3bf8L } },
30856     /* 52 << 21 */
30857     { { 0x27fa09ebcdded185L,0x763b655c36d090e3L,0xbc586674dd864c93L,
30858         0xa1f84ff34c7074b8L,0xdf5261d17cf08435L,0xc57860f6fbdaff3fL },
30859       { 0xfa49af22252d7f08L,0x2367bf8c8db5f89fL,0xad6443ce6dade92dL,
30860         0xdc5265138d1af3f1L,0x62a282ecc720ce46L,0x1769b74c9808b416L } },
30861     /* 53 << 21 */
30862     { { 0x4ee11333ec598f02L,0x4613ba038c7eaad5L,0x48e0bfe61b1ccd1dL,
30863         0x6e115b6b507b705aL,0xc4d38e4992874d89L,0x30460a066dc59fc4L },
30864       { 0x75de8dcba0f7ea87L,0xba96718125101367L,0x9d7b03314a742660L,
30865         0xb4ca381d8c304133L,0xb87b896d65846055L,0x8dd96f0513d381dfL } },
30866     /* 54 << 21 */
30867     { { 0x43716f0c3e25b7b3L,0x00caad210aeb5d75L,0xbfee232559a6cb66L,
30868         0x06c1d812ad059aaaL,0x42d0af57c8bcc046L,0x37968ef70e409a85L },
30869       { 0xc5c3812ee3be328eL,0xaaa74bf166547ad7L,0xb292af92a15a0db1L,
30870         0xc0645385e5d5cdbcL,0x2dcf4ca937ec2c28L,0x3f75d089f0cb1694L } },
30871     /* 55 << 21 */
30872     { { 0x7e71fba26c0204d3L,0x6191ad249a40b4aeL,0xe2c7ab6bdda24cecL,
30873         0x5a8fc77e95b26a2dL,0xa6d8b2e43f1c7e44L,0x42d485e4e0a0e08bL },
30874       { 0x8697386ed7e3b896L,0x5b960d76ee7e58caL,0xda950e9a3fce610cL,
30875         0xb85c7842803c67dbL,0xed8a53535e62ff2aL,0xfe6b0e2c4d674e7fL } },
30876     /* 56 << 21 */
30877     { { 0x46a2a08be26d822eL,0x63537bc689d6d6deL,0x28c556a2b3df9fbcL,
30878         0x81d3161eb121d512L,0x4e27ce0b123bc86cL,0x1ebadb85bfb240d1L },
30879       { 0x86edb71a1156314dL,0xf8ac56fd113961bdL,0x2f6bc6d8067f586fL,
30880         0xf558b8833fe8e532L,0xe9433e2321a7997fL,0xb86f039c87e53b9bL } },
30881     /* 57 << 21 */
30882     { { 0xc022a16d78329681L,0xc3da7bf76b1226d5L,0x47ef18daa85c69e3L,
30883         0x4614f0ee45cecdbaL,0x9126fc2640f19d1eL,0xcdecb2693f5ca09aL },
30884       { 0xb62a831257a020e3L,0x5f9a8ddc8330d472L,0x37e58ab3eb208a24L,
30885         0xe64ed285ee4b8687L,0x752fa22a74a82625L,0xa67e24609b25fbafL } },
30886     /* 58 << 21 */
30887     { { 0x89e3d770e6b94044L,0x50f50d1675a1a8c9L,0xe73c51d95344c139L,
30888         0x97a8dd8411723e9bL,0xba0663c57de5dcf2L,0xf26eee6c3a6b588fL },
30889       { 0x6275b2a9211b989eL,0x32ab4b311608f16eL,0x9e47b2943fdde5b5L,
30890         0x63c50a50614bae9eL,0xffe4ef05e31c05e7L,0x2fea9142b7db4ba7L } },
30891     /* 59 << 21 */
30892     { { 0x27f286db0874c6f6L,0x26de6376e6ec0054L,0x56458a082ca84fc7L,
30893         0x07bcd4011fccf1b2L,0xb8548e74bae6f486L,0x0ea5857a0de2964fL },
30894       { 0x8e8df866e50fd2a4L,0x3b07d1a8710fc74aL,0x3e4cc4f5a1fe92b9L,
30895         0x7380d0836e52d244L,0x4d75e1c12796278bL,0x9eb279258d33f4d5L } },
30896     /* 60 << 21 */
30897     { { 0xce7abd1ba225f084L,0x696e1eaff803ee75L,0x66f2789989415775L,
30898         0x14df21a29eb4991eL,0x012a6413fe2a0769L,0x022cf1c8626f421cL },
30899       { 0xd4644d0460ab4299L,0xa43cc1732a8d453fL,0x7c4ab8c20ed14031L,
30900         0xd5854b98e14605f7L,0xd9a98c51fa7ff2cdL,0x7dbe8cbc46baf2c0L } },
30901     /* 61 << 21 */
30902     { { 0xf26574593c42ae9eL,0x7c3e5c13bbc289fcL,0xb815fe3fe096e7bfL,
30903         0x3eb67095da54264eL,0xbf5ca7c4ff3f8128L,0x8fc4a3f865db4dd4L },
30904       { 0x3af47b17ee382cfdL,0x8854132fd95520f4L,0x3387b11d33c5588eL,
30905         0x5d7eb66c0c662f93L,0xcad581933b18885eL,0x8d1c069a6f23c209L } },
30906     /* 62 << 21 */
30907     { { 0xa9498fb5212ee678L,0xa8824b696ade4a39L,0x422c074e0a406cc2L,
30908         0x7d38de650a2beef0L,0x482d16f81eed5bbfL,0x1c882006f18380a1L },
30909       { 0xf90f6c2bb98445e2L,0x36aa980b2c738d70L,0x4caff65b6785ad58L,
30910         0x1c282becf95863f8L,0x59ad267c5350b79fL,0x53ea042721cedec9L } },
30911     /* 63 << 21 */
30912     { { 0x5cc362909fa3481cL,0x1321acdd7292ac86L,0xcc30550378f4d6abL,
30913         0xf7917237e7d9154eL,0x591e5ba81fb39377L,0x0a387e4f7c541c76L },
30914       { 0x99685212a38570cfL,0x5cce35c8624cd61bL,0x375c68133aed79d0L,
30915         0xf72d4b068197e487L,0xcd672f7d129775c5L,0x944ef37f1cd768f6L } },
30916     /* 64 << 21 */
30917     { { 0x9c66a32becc5f6daL,0xe4ff40431719ba2cL,0x8c6cfab721e716efL,
30918         0x32c8fccb96ed74e6L,0x475890dd0b110c83L,0xdfada95f5cb4eefeL },
30919       { 0x9d7b89a693240fe1L,0x6afdb2d0210b776fL,0xc3f0b55bca7a7d52L,
30920         0xa6e56a0655d04585L,0x818e221c4257acc5L,0x05207b63fcb8d39eL } },
30921     /* 0 << 28 */
30922     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
30923       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
30924     /* 1 << 28 */
30925     { { 0x0a74da82d8ada6ccL,0xc6b98a3cbea55457L,0x896c26bb57c2f5acL,
30926         0x981e2f72845d45e4L,0xca152b877e9a7d36L,0x49666d457b582e8fL },
30927       { 0xea3b9bda49fc20b9L,0x5bcbc84a7c71f153L,0xd346fc5d5748a654L,
30928         0x7ac2f217622665eeL,0xbb5efe7fb6f16e27L,0xb1810a70644c9dc8L } },
30929     /* 2 << 28 */
30930     { { 0x98d089819bc5917bL,0x9f90885d187fac5dL,0x651b18287cfc13dbL,
30931         0x2d606e4c8655a658L,0xba64d3c563c91b71L,0x36c7d7d8b82a5090L },
30932       { 0x2d1dff02cab1d598L,0xa95788d7be78f90dL,0x1ac2ee6b0ea1fe01L,
30933         0xc100b60cd5c1273cL,0x4496084ceae603e7L,0x7fcaaf5f77c2fdfbL } },
30934     /* 3 << 28 */
30935     { { 0xa93fec0861b06e05L,0x0bebc26b7dfe6802L,0xc00b45a5cce5662fL,
30936         0x2e8a0a7f83a9a4a9L,0x6e0cdebbc0bbeb63L,0xc56a20fe63ccd80fL },
30937       { 0xfc10fa08b51f1f89L,0x4848392020ad9243L,0xfda69cc66bf53af8L,
30938         0x474b7440f10bb6c9L,0xcda9db3b1e7625e1L,0xe2f62c1e1dc7f3cbL } },
30939     /* 4 << 28 */
30940     { { 0xe8e3225a6abdd842L,0x8c85f18f3b367b02L,0xf147a4219f42edb9L,
30941         0x6d4bc00d0d411d4dL,0xa1a13a2770014bb4L,0xb896d97bfa10166fL },
30942       { 0xb2a1dfa70c302c6dL,0x0a24bd5d808a63a4L,0x8409a3a2f88c7359L,
30943         0x071f3838347726a0L,0xd18a551c27507bb9L,0xe0c4cc34b359b167L } },
30944     /* 5 << 28 */
30945     { { 0xeaaaf4602a44610fL,0x94d330b10392ac47L,0x989b9b673fe123f1L,
30946         0xe2ca56ddd8fd0129L,0x77d6d0cd624982a4L,0x55d4b2c371e1fec7L },
30947       { 0x3e9a04a0360e013cL,0x1d227ea9c9cde585L,0xac2b08e24fed8f86L,
30948         0xa1d1357ce199e8dbL,0x7cf06ec8e99cc964L,0xd9bc3a7fd85ec63bL } },
30949     /* 6 << 28 */
30950     { { 0x7d111c67017c633cL,0xadd9e9bd7d128a9cL,0x4cd8730c6db857e9L,
30951         0x3c9c03e9f4b46d12L,0xd42f0242a78472dcL,0x3fc0bcb2260841bbL },
30952       { 0x6332b11a8783f828L,0x65229d2af7be37ddL,0x402f28eee7e8944aL,
30953         0x3d1bab505ab28372L,0x6944e82cad5e1ff3L,0x65a94c0de8c75729L } },
30954     /* 7 << 28 */
30955     { { 0xa151dcbc2f7f3633L,0x4305312a98969226L,0x947afc00604d46e1L,
30956         0xc3c9d57572f3e28cL,0xce4c1cbd14b1cd1dL,0x8fe9a81df80dea45L },
30957       { 0x50920f3a9685f603L,0x51d380f00b80d89eL,0x19978ba13f798e32L,
30958         0x1294aaa6c5edde47L,0x280002c2be714a1eL,0xd998669ef212603cL } },
30959     /* 8 << 28 */
30960     { { 0xa44f6ef880e9d9f3L,0xaa7621e91d14d618L,0xcb0e4ed80eaf6671L,
30961         0x2bf485f8181514a2L,0x74670e180a2927eaL,0xe1b5461612c14645L },
30962       { 0x4068c0742a67ed61L,0xd10c7a57739063caL,0x391b651d698b2816L,
30963         0xf310d1696da14fa8L,0xa089be6bd8a578b1L,0xa314b3a844389ad7L } },
30964     /* 9 << 28 */
30965     { { 0x688ce85068fd73ecL,0x2cfb41040db1f500L,0x5d943b8d5b9bbc41L,
30966         0x861867f5403f3973L,0xc331110a2c766363L,0xb28a6bc153aaceeeL },
30967       { 0x2ab6e7aaadbee7a4L,0x316ca45c2f2b9569L,0xcac646e561d2428aL,
30968         0x6fd28dadc7cb6291L,0x2e28f68741e20ff4L,0x8cfe90eebd189d34L } },
30969     /* 10 << 28 */
30970     { { 0x09b8ed53339da6adL,0xe40727af26f54b8eL,0xc4a105979990fdb2L,
30971         0xb808656b5108236aL,0xb4411363aa4bd584L,0x19e90149288a0328L },
30972       { 0x5795d8a8fb0592f8L,0x313c68833213c929L,0x62eecb5b48f79d47L,
30973         0x3afcfdbab29ca224L,0x0072847d40075b08L,0x078eef3dd1fe0c8fL } },
30974     /* 11 << 28 */
30975     { { 0x719b51f20ca20aaeL,0x01ad630824b47b92L,0xd32460c2d3c807deL,
30976         0x8497786b0a1785f5L,0x8bd521355d714ee5L,0xc267724ed00f741eL },
30977       { 0xe5578dca9c266820L,0x97ff60085b62d484L,0x84c70e92e3bd1869L,
30978         0x412759e34dfa679fL,0x6bccc33fce497e18L,0xfb92405669056198L } },
30979     /* 12 << 28 */
30980     { { 0x664ff05368ed0760L,0xc3cdc99138fae9feL,0x3fe057aaf1f30a86L,
30981         0xbae990222d08c72aL,0x4f5faf3f6f09e13fL,0x44461a4413d26b29L },
30982       { 0xc2504c1bf95418edL,0x12766ea7db3ff26cL,0x2f956e9507a22399L,
30983         0x2716e70f5a00cdd3L,0x80c020140e9fba99L,0xbe587ac30519875dL } },
30984     /* 13 << 28 */
30985     { { 0x5e4bb6b83b23d2a1L,0x819a7c7705c9888cL,0x59e4c48ad0fec7f7L,
30986         0x4b212b21d6bb71abL,0x370cb90bcbf213f2L,0xf1ea07e0817549b0L },
30987       { 0x20e3115351a37b92L,0x30f9e70158d444c0L,0x7ac3a37b0b791ab7L,
30988         0xe456fd475265e4cfL,0x3e3f27ca29580ae8L,0x5d68a40daa2a1654L } },
30989     /* 14 << 28 */
30990     { { 0x14203d8720cbb917L,0x284e0c9db2a7424eL,0x99eb2911cefe7139L,
30991         0xa709c50f42925411L,0xa5a7543e5c79a13aL,0xe262025c6f45f023L },
30992       { 0x3966fd18828b9f40L,0xc660846913693115L,0xd7dfbcf644373027L,
30993         0x8e73fe6bbade7645L,0x88267c7b1de0dbd8L,0x1231ac99ce4e8c9eL } },
30994     /* 15 << 28 */
30995     { { 0xfd928bd90ba99806L,0x799ac97d1a864172L,0x5436a8cd129682b9L,
30996         0x4bcacda54e96fecbL,0x453af995c5db1451L,0x8fd382e07073b98fL },
30997       { 0x17165b8a644a7bbdL,0xd17d2d80b6118620L,0x2a4bf1b2c8cd1bcfL,
30998         0xdc7aad959ccc119aL,0x6d34084c3bcdbeadL,0xcbc5c5557e0663c8L } },
30999     /* 16 << 28 */
31000     { { 0xba86aec170128295L,0x83a09b65c12f35ceL,0x8978ff0789df2f80L,
31001         0x85750cfd97a773d5L,0x806bb730fc3f35f6L,0x04503422fed868c9L },
31002       { 0xdc0fcde086ffdbaeL,0x8f4297e11860f43bL,0xfefb7d028d3ad6cdL,
31003         0x5c652b5997293550L,0x32e12942ed5cfbbaL,0x06192aaf98800d22L } },
31004     /* 17 << 28 */
31005     { { 0x9bb8cf660002f389L,0x217219af51505913L,0xfea1388999ef8797L,
31006         0xad1b2383235597c4L,0x85ffabb70a3e3536L,0xd8235d9da00c725aL },
31007       { 0xfa9b0f4ba704dac0L,0x99d76ddc2f57fb9aL,0x5ed3683b18428507L,
31008         0x9e42bc54435307f2L,0x3167de67b4f36896L,0x8a0f99a0d539d713L } },
31009     /* 18 << 28 */
31010     { { 0xf0b92b8a4642d9b2L,0xce97828a3f50c883L,0xa33d62936f0b1194L,
31011         0x23417e0f3692f5b5L,0xc79b9491fb0b95bdL,0x5410e8c95e836b2aL },
31012       { 0x2b84078d29798fc7L,0xa8732e78d6628695L,0x39da93f898c766aaL,
31013         0x0797832d305e464bL,0x246069ab163f9f4bL,0xb867dcef53fb6170L } },
31014     /* 19 << 28 */
31015     { { 0x949c63730ced5c37L,0x6f8cd6e4fdb6464eL,0xbea902ae2e056dd4L,
31016         0x43871371fa0d560cL,0x162128e9e9ec2208L,0x84deda5c25060c6aL },
31017       { 0xa8a8a27c14160ed1L,0xf24bf3dda33b53cdL,0xd12038a976a6d272L,
31018         0xe64d6384ee8f2b15L,0xc404d580d3e91d69L,0x62cdb886a4888d17L } },
31019     /* 20 << 28 */
31020     { { 0xccf0fb423c9eb0caL,0x8703c6694aa03b40L,0x44c735a74001af07L,
31021         0x9616dd932e874ed1L,0x5c2e8520474ba621L,0xddf13cd3fa93d8b4L },
31022       { 0xd68c9b4575df1b67L,0x4cd242288f80d389L,0x0f1a16bcc09f47fcL,
31023         0xc414dc6a9cd4842aL,0xbb0fa94f1f353c6dL,0x405124551950d073L } },
31024     /* 21 << 28 */
31025     { { 0xbfe176f2dfb520a6L,0xf51917bced96d0abL,0x8131985078b11135L,
31026         0x6397f1288f006a55L,0x9877f30e576b5132L,0xe0cd103bec781571L },
31027       { 0xb4bf74e5bcfd5046L,0x04333aa4be9cc561L,0xc6dd1dbc1e066ca1L,
31028         0x03c926e1d3718e62L,0x13bf83d404309072L,0x79649ba0ba28ac51L } },
31029     /* 22 << 28 */
31030     { { 0xcb1a73c55abfe8a1L,0xe9e2e220deae1d92L,0x2d953d00514befaeL,
31031         0x74024df9b7940bcaL,0x9a2cad0cd13f4a3aL,0x8790b699360795fcL },
31032       { 0x63957f3b5e9982eaL,0x491bf3155b7d256eL,0x5708bd4dd23324e7L,
31033         0x9f11ddd397c4c8c2L,0x1823762f5b7f5162L,0xc45a3976cbfc9dd2L } },
31034     /* 23 << 28 */
31035     { { 0x806134cd30731f5cL,0x04522c23487c778cL,0x99b6e6a1651640a5L,
31036         0xe2d20ed87e9898d1L,0xcad25762069e56d9L,0xd4184f6e29ddfc7bL },
31037       { 0x1017badcc1aeaa34L,0x7d3700e7f3c62e08L,0x203dcf8d5e42399bL,
31038         0x05986c66b72795c7L,0x0b56ad9cc0925f02L,0x1f0e895bfe0e3bd3L } },
31039     /* 24 << 28 */
31040     { { 0x935b9e244d2edd5fL,0xfeb46fb5efb287b8L,0xa51700a3f5018b92L,
31041         0xc328beba23864e2aL,0x113b5c9a995f70c1L,0xc0b11c22da1b5d51L },
31042       { 0x9b99b907f4a360cbL,0xf4ee9995adf0b094L,0xf67c7cf2f94b3f0eL,
31043         0x664a51a1dcaf10ccL,0xa3709ccce937a669L,0xea97bace4862f098L } },
31044     /* 25 << 28 */
31045     { { 0x62c7dd9ed537ed6bL,0x8a82ae7ccc168feeL,0x96fcf8d19d00a4a9L,
31046         0xfeef6ec205096874L,0xc828c68969f4485fL,0xdc4903a6322563f0L },
31047       { 0x5339cad7d3280a32L,0x42ae434909ff15cfL,0x94cdb7790bbb6af4L,
31048         0x480f8a5515721529L,0xc2f9c4dc0ff28eb2L,0x9d2a405e1ff6e3d5L } },
31049     /* 26 << 28 */
31050     { { 0xfeebe7d29309e729L,0xd322c38aa30a4eb9L,0x18cb0ce12f4f5c8eL,
31051         0x08a073a04262105eL,0x6ca92585933f888aL,0xf4a080c903ca1489L },
31052       { 0x5e678c7949c8daf0L,0xcd6ef6ba5abfcf82L,0x61faba612a4fc564L,
31053         0x7cacb3dcee0b306eL,0x9fcfafadb5aae2a9L,0x193e841c4b8fb04bL } },
31054     /* 27 << 28 */
31055     { { 0x4db6f5f07ed99ce4L,0x1257bd9c2456059bL,0x546c764b43d3590eL,
31056         0x6d5062adebba72d6L,0x6858f04e2e8d99fcL,0x46554047b4eeee5fL },
31057       { 0xff433f63535f2da3L,0xd76777542b76d2e8L,0xeb6be9c88e838a3fL,
31058         0xb7a2d2c1145f8bf4L,0xf3ba128703bb278aL,0xd88cd51530c4a1a4L } },
31059     /* 28 << 28 */
31060     { { 0x51758334c942a3f5L,0x7cc01e8832182ba6L,0x772af25774de4fe6L,
31061         0xb1b3c448e9667bf8L,0x71cb27388079caf6L,0x48890c641d823a40L },
31062       { 0x47a5887b0e9edbdaL,0x916dfb0cbe089e5aL,0x3185090e1eb42ddfL,
31063         0x3c7eaa13b7f3af26L,0x940ed8c79e9963b2L,0xd85e77db3426ac10L } },
31064     /* 29 << 28 */
31065     { { 0xf21b47bfd7bbbfa1L,0xf757cb309ea0ea77L,0x6df7f53783b2a6dbL,
31066         0xb0808cf99eb8ed81L,0xc526bb6b64edb3b6L,0x24f1612068f72d82L },
31067       { 0x3e2e6af8f01cee94L,0xd2e01f947847ca60L,0x079dac3539e68ac2L,
31068         0xc30720b270cedeaaL,0x2f97f968fa6bf057L,0x2dba403babf6a743L } },
31069     /* 30 << 28 */
31070     { { 0xed99932452c802f1L,0x99f6864c5cb78b2eL,0x8f8a0a709b9c3693L,
31071         0x0b931016e2f598bbL,0x7edbb1b3a614fc15L,0xa0321b50e79f74c2L },
31072       { 0x834f3ee994bfa457L,0x5ffa9613006907b4L,0xa37e9b83d779b46cL,
31073         0x7a21743cf33b791eL,0x6646b89dcc28a011L,0x9b975ef8e2ba76f8L } },
31074     /* 31 << 28 */
31075     { { 0x166c7151ec72cbfcL,0x3d1f2450c9e519ceL,0xfdcc648e7efc0fa1L,
31076         0x3f5f90cf6db6d516L,0x8a5dd3df145830f8L,0x4d9938da4e5858e6L },
31077       { 0xe598f9d4dede1584L,0x2de5a26cf5c8f4e4L,0x495b750f364e20f6L,
31078         0x29291c445b718188L,0xe560d9ee3733ce27L,0x99b9d27d5b9d206cL } },
31079     /* 32 << 28 */
31080     { { 0x162cdf342efffd95L,0x92111fdad59086e8L,0x4478d114454eb977L,
31081         0x8ce403d8dea38a67L,0xd459633b7435728aL,0x3a7be4e3a63b0504L },
31082       { 0x0c74066b335dba3eL,0x4e8fb1d7c6ea6ee5L,0x3398b588a99690edL,
31083         0x4949517c3ad77562L,0xf9824f09cbbb60eeL,0x9fdcafdf85660becL } },
31084     /* 33 << 28 */
31085     { { 0x368bea127aa62889L,0x6096730506e1046fL,0xe69be05e564f219cL,
31086         0x064b9d7c01eab75cL,0xf16ccc9e0152981dL,0x708827acb178a3deL },
31087       { 0x320f6a8a93248b89L,0x532acc568084908eL,0xe494cd1f6ab586d3L,
31088         0x59c74cacabbdcde3L,0x3ccf84a62259abeeL,0x6657d1fad96bd141L } },
31089     /* 34 << 28 */
31090     { { 0x5d3a8252aa0a9dcdL,0x540e037af97fe26aL,0x4cbb768ca3f68f56L,
31091         0xf9608732652d7058L,0x5fae0f9f72cea8b9L,0x1a7edfd97d980da5L },
31092       { 0x9f00ee611791c34dL,0x6c95404c2bc25810L,0xabb1089e043a9faeL,
31093         0xe36fe9e1a7881ae0L,0xf163dc460fc04e9dL,0xb6955f2f129c7940L } },
31094     /* 35 << 28 */
31095     { { 0xa22ebfc7c23bcd94L,0xa653b119684fe9f2L,0xe469e28646b59d70L,
31096         0x0720daf3dad96b47L,0x5066df7871288c07L,0x7648d7d82905b5a2L },
31097       { 0xc6ab9c5c0a30a65aL,0xa00539f34930712aL,0x6a64738c7e894bdeL,
31098         0xd7f3a7459e8eafdfL,0x652a58ff8ce9f7b2L,0x7c9d02e4cb3782bdL } },
31099     /* 36 << 28 */
31100     { { 0xf26bd8618875d9e8L,0x22e2380dbea9c273L,0x5f15183791995508L,
31101         0xb97f40a6648aa1c6L,0x7478f5f83977d848L,0x21e876ae35b57de6L },
31102       { 0xf620b180a93fc7f6L,0xf49bd07e1b148996L,0xfb0857261c4f60e1L,
31103         0x6a6653af7ad6b84dL,0x913a2d022e05b686L,0x94746629407dda9aL } },
31104     /* 37 << 28 */
31105     { { 0xc662b0f68a97c714L,0x69fbf7d1b8fbbb02L,0xf3bb5a9c5cdff85dL,
31106         0xfade6eb036ee44f3L,0x6eb4b8266d0905c8L,0x6ab3e4a4391a34d6L },
31107       { 0xf490046478e7bdb1L,0x8bcd4bf23272c400L,0xdf9a81b78d2c9573L,
31108         0xb9a0ea166af43695L,0x3298a5d071fe768aL,0x53eeeb4333e87bd2L } },
31109     /* 38 << 28 */
31110     { { 0x87cdbfe6bb531d08L,0x384bcd0357957992L,0xc654e2c942008cffL,
31111         0xd12b50285002e06aL,0x41a34286a67db410L,0x31a109d99d6b2c01L },
31112       { 0x14d642da2ed35f38L,0xa06a846048ffd04fL,0x8291190cbdbeef68L,
31113         0xc8106239e43bb0c9L,0x4d7aa992c4bea448L,0x107b86efba3dd9b5L } },
31114     /* 39 << 28 */
31115     { { 0x3d870c3144fc1cd3L,0x34409eec0085e7b3L,0x67d5c1340d0395e6L,
31116         0x9c30dedae3f36689L,0x988ac951d268cc91L,0xdb05825bd2c9dfdfL },
31117       { 0x30ccc3b75d349fd5L,0x63383c0f60c3a79bL,0x4f45c81732c71964L,
31118         0x456679642fef028cL,0x82454c12cf4053f0L,0x7c1310fbed8077f0L } },
31119     /* 40 << 28 */
31120     { { 0xb8465d16da684157L,0xdadde1abb238faaeL,0xe2cd45e7c6b9bea8L,
31121         0x7251d4a15cf413d5L,0x615cea8baae1765bL,0x75aa831813f36885L },
31122       { 0x7d5b0bf7b8767cc1L,0xec38a8ff8022968cL,0x034805b62a07faebL,
31123         0x916f9eb033b7321eL,0x34963633c0c577ceL,0x8ee07efdabb8d3ceL } },
31124     /* 41 << 28 */
31125     { { 0x498606fc2d15a409L,0x2398e109d5fdcb60L,0x8ed8fcbc36540c3cL,
31126         0x94404e2bc1db3193L,0xe62b808b28db1c38L,0x545b60871ad1d686L },
31127       { 0xe8bf6489740f4264L,0x7ee76fe71809505cL,0xaa95b8c86f45a011L,
31128         0x9bd6111b55c715c3L,0xc5c736bc33165913L,0xf1e8cdf282f6c7a9L } },
31129     /* 42 << 28 */
31130     { { 0xeb09e7fa949d05b5L,0x49394c1b8d014014L,0x644874d73eb7abd7L,
31131         0x89c666e5679d2a01L,0x6ea98cbbd315bc8eL,0xd919142a37fa5a26L },
31132       { 0x042fbac56d0239b6L,0xbff2b086837c510fL,0x21e4d279d9883ed7L,
31133         0x6416e0239713c2b2L,0x3742c6d14ea05144L,0xff591d8fd5b00fb2L } },
31134     /* 43 << 28 */
31135     { { 0x0ae21b83c138ed42L,0xf1b0895a2ff30df8L,0x4d5d634d9559c6e1L,
31136         0xfd02f3a3098e5c4aL,0x7bc6b63152bb211dL,0x498a68fffb69f0ecL },
31137       { 0xd6fd5f443e69b479L,0x5ea1877d8c740d2eL,0xfaaff5f0ca605f02L,
31138         0xb3022f9839a03f5bL,0x3feb7c13aa253725L,0x119097a89dc33a73L } },
31139     /* 44 << 28 */
31140     { { 0xa0bd6c0da8a29345L,0xc676b6c55d7f5ef9L,0x303b6d7c20ad7259L,
31141         0x06542a19d8fe09a7L,0x5a06653ca959014aL,0xf45fd79a5bcfe0cbL },
31142       { 0x29058d984e583468L,0xf1bd25e60cd7afc0L,0x2a88246ef7dbe54cL,
31143         0x680eaff835e0ef3dL,0x5942c97f726e59b9L,0x43e971398d5c0825L } },
31144     /* 45 << 28 */
31145     { { 0x6656b318f7378bf8L,0xf9a838df182f1a29L,0x0d62dc5ede475756L,
31146         0x97564544585bcab5L,0x3e99f44c857a13cfL,0x8c3a0a940cbdde00L },
31147       { 0xa7be375833dd2d24L,0x629040f1bbb1c7eeL,0x0bb2ced27f0eab7aL,
31148         0xb86f1e1e9f474277L,0x60539a544a14ac4eL,0x9860f986aa90977fL } },
31149     /* 46 << 28 */
31150     { { 0x143fdef1fe944aacL,0xfd6700fdd24f606cL,0x5dad2e41737404a9L,
31151         0xb16c5d42953abdccL,0x132b5cd995be01c9L,0x2bf605d86fd01c6bL },
31152       { 0xed62526c8803881dL,0x3429579201788c26L,0x553f8e0f8d62ab25L,
31153         0x3b2df9cf9850ff9bL,0xb320ec40acb513b3L,0x86d61c988875dfe7L } },
31154     /* 47 << 28 */
31155     { { 0xe5fbda4daab3cc32L,0x556fcd2535d469a0L,0x414673d91c02fb7bL,
31156         0xc14ee9fd8bfe6a4cL,0x8ba0959d1133d9f3L,0x086a7c94e94338ddL },
31157       { 0x92c2f484cdd5a1b9L,0x97bb21f6ea0e0f9eL,0x99756b285411da59L,
31158         0x4b79c4663be739b3L,0x73502d3e706078fdL,0x6bb794100da7aea4L } },
31159     /* 48 << 28 */
31160     { { 0x2daddb11a406d4d7L,0xb02b5da5a2a33d81L,0xb73ce82721a6aa89L,
31161         0x10919587467506deL,0x0927724c428d8daaL,0x0ede991f7c17adfdL },
31162       { 0x8518dab1bf7ddb3dL,0x04b091c42a54e1b8L,0x5943c37f89e7a398L,
31163         0x8e63f5e8e273f6f3L,0xc6d0352b83143d22L,0x30e43182ebd1628eL } },
31164     /* 49 << 28 */
31165     { { 0x9bc5af5aedf58e50L,0x31a3beeeb0d51722L,0x5789fcf98cd467aaL,
31166         0x85d974897793faafL,0xcf09224ecc18f367L,0x4f293783ec7957b4L },
31167       { 0xb044c854c0be350cL,0x027caaf72a63996cL,0x5341b3f3cb85de2fL,
31168         0x0d261d80b106359aL,0xf63bfe7a8456af12L,0xa954c4400174c82cL } },
31169     /* 50 << 28 */
31170     { { 0xaf752854b02aceb3L,0x000c5c4222c194b3L,0x7e953b78ebd2e61aL,
31171         0x44dd61b4b9d68960L,0x282ef4216d454ed1L,0xffed862aa402ca61L },
31172       { 0x5fffddeed3e189e2L,0xf36379990daffe3dL,0x1b09a625857a8a00L,
31173         0x3e64ff63c1ced62aL,0x9acc484d10b63647L,0x5a470aef3afc8675L } },
31174     /* 51 << 28 */
31175     { { 0xe21acfec09ebdbaeL,0x512c66a729b064faL,0x15c08e1191835db7L,
31176         0x78fff5d665203a4aL,0x99259d961c73615cL,0x85b444b9f36024bbL },
31177       { 0x4909772df16932deL,0xcc4a526899a3863bL,0xe54557bd2ebff8faL,
31178         0x1a9b05b709bee4c1L,0x0d2ce396bdb2b785L,0xbd15bcec8ce7ef40L } },
31179     /* 52 << 28 */
31180     { { 0x606658a99991167eL,0xb8773e1572c4b43dL,0x6cb364cde025abceL,
31181         0xafa58e9b0c5a653eL,0xa7e35a54134a68bfL,0xcb831d42ba4d9db6L },
31182       { 0xae37348ede83ef97L,0x4ac64a6a62ddd553L,0x5feb5e0d715bb6b4L,
31183         0xf876efae043424b2L,0x7b56a291ad91a9efL,0x817c7053356f3adeL } },
31184     /* 53 << 28 */
31185     { { 0x0dbd99249e88115fL,0xecb57472bc568c61L,0xfa4f4a47c1058746L,
31186         0xb19006014d92c079L,0xe693577091026a8cL,0xebde8e65eefe8740L },
31187       { 0xe8bc6b3480a93b35L,0xc1c8fc0635518beeL,0xf7f4b448a47cdd36L,
31188         0xe4d040e0db4f3e42L,0x025fbdfb88345042L,0xfe6cc10f3fbe045dL } },
31189     /* 54 << 28 */
31190     { { 0x63ba344a1c20cb4fL,0x55f11c207e8cccf6L,0xe66e1641b5b1046cL,
31191         0x51cf6dbe758a460bL,0xe786a81e91bb5101L,0x6f4a976209cd4365L },
31192       { 0xe88b4d03fc565022L,0x46006d0ebfdf8ec6L,0x10a3e85781f4e635L,
31193         0x28ea91360a4a2e82L,0xf890ea9e757b38dcL,0x89c6789261312e2aL } },
31194     /* 55 << 28 */
31195     { { 0x8ce54e2a65d9fc54L,0x4776c1f13bfc0c09L,0x5d15fced99476b22L,
31196         0x2c5399bc1142dc7bL,0x6faef9d96c6ad87bL,0x4f238e48ca5126cbL },
31197       { 0xbc7136d607849dc2L,0xc840ccb1e30377a8L,0x30e0f0373a371bafL,
31198         0x5b8eef9bdfce4735L,0x1662184e514bb217L,0x010ebb8579e0918dL } },
31199     /* 56 << 28 */
31200     { { 0x3d6e8d6d8dff7dffL,0x6b6c194ad5be4ad1L,0x57b93f2db6fcd08bL,
31201         0x99f09948f3761f23L,0x4062f3d6ac8b018fL,0x4b58ac05a27af72cL },
31202       { 0x4abcc81504d0cdfdL,0xa50043e0bda4b02fL,0xe11297e527a9c083L,
31203         0x2b2d8d529779c5b3L,0x3de3d330dfdecfedL,0xfe2487caae7fc522L } },
31204     /* 57 << 28 */
31205     { { 0xc510bb0b7e7a66ceL,0x54a3e0111332f2c3L,0x6331badedc885f5cL,
31206         0x1a73c8aedc47d8b2L,0xc657edbb95d4e933L,0x30994aa335dc3ccdL },
31207       { 0x832d586fafe5be42L,0x3392b07ad44de522L,0x1bcea9a62982450cL,
31208         0x8237bf2b3709f75bL,0xfa4f2501ea9d03f0L,0xcf492df7bdacd276L } },
31209     /* 58 << 28 */
31210     { { 0x2d0f7f28af4ecf83L,0xc2863ae4d48229efL,0xc989ff3d7001268dL,
31211         0x7f07adb6ba225adeL,0x1564c1db450a15ddL,0x3bfea98c6524d417L },
31212       { 0xee3cd3ef2cc20833L,0x055c569dba767b1aL,0xef2eaf51351b1279L,
31213         0x4e02b1d163b809d2L,0xf0e943d00a14c115L,0x2bb3bc3f32f55210L } },
31214     /* 59 << 28 */
31215     { { 0x8f577dd79ed385ffL,0xdbcf0548a1fdcac6L,0x38555497c2352ff2L,
31216         0x33e2ed85eb9edab2L,0xbe4bd6db9e649ecbL,0xea3668f72c6e7488L },
31217       { 0x841627b8f4b91b7bL,0x2d61a0f7d487c7a7L,0x1932b198142d1dc2L,
31218         0x06dbb39a1a792783L,0x5be16e570bede1faL,0x4d3b197bdffceb55L } },
31219     /* 60 << 28 */
31220     { { 0x1c2fc5088f7a83e5L,0xa7c56233b9970c92L,0x949c71738bafa66fL,
31221         0x1e299b2d5bbb0490L,0xb9a79e7c18fcb9e8L,0xe6372ce69cb5cc50L },
31222       { 0x114fc628f465c6aaL,0xc55395208cb797f6L,0x7df94ed7a73ad211L,
31223         0x41eb8e1f8e0cd008L,0xb028725a004cbb0dL,0x1340186d372c1656L } },
31224     /* 61 << 28 */
31225     { { 0x5162886c203a829aL,0x60dbd8d464416392L,0x60589a51b5a10685L,
31226         0xa79ca259113476a8L,0xbf4f71100d7b37dcL,0x1a1b3fdf78bbb029L },
31227       { 0x2954d3454799a0bdL,0x7459eac788c256efL,0x61ac72653800707cL,
31228         0xd861f7764cc84f7dL,0x29f4e5bf84faae3aL,0x7975c9555aa1236cL } },
31229     /* 62 << 28 */
31230     { { 0x65f28419238c3c84L,0xf07d83ed90f1ecd1L,0x10307e1bf6567704L,
31231         0xa94dddb389d17845L,0xaa56f72788f39175L,0x01cf57e2a7aa55f7L },
31232       { 0x98f4340e77f21e8cL,0x8cd3e0a2adb036c0L,0x5c49ebf4af6b46ddL,
31233         0x312a2c32455f6897L,0x52fb4f488b517f06L,0xb0f373d442beff4bL } },
31234     /* 63 << 28 */
31235     { { 0xd9694bd9af44f9ceL,0xaf2cfbbc1ee29f43L,0xaf352b1c880f80ddL,
31236         0x3fdabd2142297787L,0xf5a2acc21c7916b3L,0x6154b3f2cc0d85f0L },
31237       { 0xb9ff2bea0bc58e86L,0x359eb0750561c3d1L,0xbb5a318fb93be593L,
31238         0x34af9320bff0b3b3L,0x3cbe89341d967c37L,0xd08e5f46a8e9a750L } },
31239     /* 64 << 28 */
31240     { { 0x4074ee27978029bbL,0xa9394bdabae0d0c0L,0xaa01d53972cecb4bL,
31241         0x4b0cf1279a7dd9c4L,0x3e3e3f165bc787cfL,0xdf48f7e1942de53fL },
31242       { 0x0cc69719567b9d0eL,0x631e33158d0d2750L,0x9fedc1e292314a09L,
31243         0x7547d22614a1adcbL,0x405561a48662b86aL,0x149fa2b1f5480b7dL } },
31244     /* 0 << 35 */
31245     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
31246       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
31247     /* 1 << 35 */
31248     { { 0x923d0b44bda4aaa7L,0xced14ce4fee29f7bL,0x1656be009cf5b87dL,
31249         0x13a37d0d1d61103dL,0x1d705880fb652393L,0x870a31bbed712ed8L },
31250       { 0x15ad02e6ad7c21e3L,0xf004e447c36c2831L,0x56aa376cba2b3ffdL,
31251         0xc3be2b2f9745443cL,0x47c8a870eb903660L,0x976c303e6c6c192dL } },
31252     /* 2 << 35 */
31253     { { 0x148bd39cf4fb80d4L,0x469b208cfff04e65L,0xf397fbe2ce548415L,
31254         0x441e5c2c87fdde9fL,0x6366b49ffee9c179L,0x38d02bd32938dc71L },
31255       { 0x26d450fac49c5444L,0x4569f95d2b23d3d7L,0x5f68bf4d298fd876L,
31256         0xe86df047544768b6L,0x40b69a32f8491267L,0xcbf3adf9f917c71aL } },
31257     /* 3 << 35 */
31258     { { 0x32498d4d8125489cL,0x965e8d07a5a46ae0L,0x6cea5e47e96a7e29L,
31259         0xf78293a4668039ffL,0x62548a96f63edd32L,0xe8e6af95a83e8256L },
31260       { 0x76e60c3b0db6263bL,0xa1ee4b0621b3d668L,0xa17dbf8b9e49b0b5L,
31261         0x4b29ba127eb366fdL,0x5e0ed781d29b565fL,0x8cb50d53199b36f9L } },
31262     /* 4 << 35 */
31263     { { 0xa66c703529aa3150L,0xd038a5ab479e61fcL,0xdee33e96b5ab5410L,
31264         0xd068929c7c57d123L,0x0839a208f1d6ad37L,0x8f523dab123f8178L },
31265       { 0xb3e5e524a67d3840L,0x88bda75e52eb59dfL,0x513a0ab7389f2dd3L,
31266         0x3197a145890bba6fL,0x61add75b6f66bf09L,0x5c9dfc154eef1722L } },
31267     /* 5 << 35 */
31268     { { 0x66dc285007769b1bL,0xe07fb7414d71fac4L,0x5ae688a6c2abbe60L,
31269         0x08ae92fadcbfd296L,0xbc291256b43044d1L,0x0e1d71ed9fcdf213L },
31270       { 0xf0c5b28102485685L,0x5d3f9302e3f68f42L,0xbbbfac50ffe4f036L,
31271         0xb5b5f26174fdba44L,0x4ebe1d070d746760L,0xbb0f7812c37f04b7L } },
31272     /* 6 << 35 */
31273     { { 0x810b6ab36df1199dL,0xc229308bb4f293b7L,0x3cf838dd89897750L,
31274         0x3e391e4e7a336c9aL,0x70148337176f89c0L,0x54b15bacbc4f1e22L },
31275       { 0x32b104f92c0f2885L,0x2c39cefa67034f2aL,0xb8310437bf178ac1L,
31276         0x722299f5c99370d5L,0x0a493cf0332b93a8L,0x00e0ab41a420f719L } },
31277     /* 7 << 35 */
31278     { { 0xf25925434cab24daL,0x52be9bbce7c3b9c5L,0xaab7a8b64660d1a0L,
31279         0x09738b819a9600f4L,0x58f0c86637de9e3cL,0x0aea5cc15db31f4fL },
31280       { 0xe480406f499868beL,0x0d8fc7f0f6913a44L,0x7282364435f2e14eL,
31281         0xb147b31045e37a93L,0xb1e7aa5bf15c1af7L,0xa8685068b03e7713L } },
31282     /* 8 << 35 */
31283     { { 0x21feb7fc21c34c2bL,0xab6a553addb0140eL,0x03a6557624b04e6fL,
31284         0x2531f186342cb0adL,0x088c4d54a24f6426L,0x9a0ee15c06a873eaL },
31285       { 0xdbe0253fd33bc748L,0xdad3339f5db8ac9eL,0xeaaf368173e65901L,
31286         0x71f1fab2ccbfa504L,0xb7b845224b0e163eL,0xe0fca8373c779f3bL } },
31287     /* 9 << 35 */
31288     { { 0x710988eb46baf373L,0x8cceb935b57d5018L,0x1864603fa45fdf17L,
31289         0x3dcaae73ef48e6d0L,0xadd9420b590322c5L,0x947783e39b135f67L },
31290       { 0xfde763688bf5049fL,0xf00e4c182caa4023L,0x4d3b0f23d355b3d6L,
31291         0x181fabcc20d5799dL,0x29499b40ab2ad0afL,0xf6e66328f9a938aaL } },
31292     /* 10 << 35 */
31293     { { 0xcd7b3c42bcbe922dL,0x2fe02b3b95dd1a5cL,0xeb66bcbd24ef5c38L,
31294         0x7edcc21ce579c309L,0x7b19d49116f6c900L,0x36019ecdb6317c2cL },
31295       { 0x554ba55391d9001cL,0xa5e30b9814f31e44L,0x3d1fe33bffda4032L,
31296         0x5dfec4782306675cL,0xbe59305e000c91e7L,0x3c4e52a325a6b879L } },
31297     /* 11 << 35 */
31298     { { 0x02fcc14ec5ea88acL,0xca29bb6d56d093b6L,0x876aeda90e6fe94dL,
31299         0xfa11a142d7225a9dL,0xfea3ca053d03fed8L,0x435854c6c54d5962L },
31300       { 0xd770737454a6dfd5L,0xb8960017a3e55d02L,0xd4015a0c04d65c3eL,
31301         0x397f93d1e98a1204L,0xb0efa2e55f3ed850L,0x18f244698a3ec67bL } },
31302     /* 12 << 35 */
31303     { { 0xa35802f5d62cd9f9L,0x0ca9c15d4148436eL,0x261a991d472b9d21L,
31304         0xd81a1ed6a2f8e875L,0x942f213a699b6d63L,0x041a12fc0ae57758L },
31305       { 0x61191c82bd70aabbL,0x3776eb8bee4c23b3L,0xabe23e8652511222L,
31306         0x66dd967d30dabb91L,0x77650c597ed27424L,0x08ea2ebdab25a050L } },
31307     /* 13 << 35 */
31308     { { 0xa410ba3ab6cb5a02L,0x6eb40d15d07c5c6bL,0x0de81e9107dcc811L,
31309         0x996f46eb2631b7afL,0x5a350ba75b7a22f3L,0xf42b24e7634159afL },
31310       { 0x07bae0abc30952fdL,0x3488cda2d644e0b0L,0x23ae40d0e2111e12L,
31311         0x650af54ec80cdb56L,0x0f33a30b7d4aa2a8L,0x4e8d3e98442a00e8L } },
31312     /* 14 << 35 */
31313     { { 0xa624ab3759a8bc95L,0x4b7e3fa61c971228L,0xe8229c4273aa694bL,
31314         0x0cc31029779288abL,0xf8eff30f57575e0eL,0xee5e01947d52803eL },
31315       { 0x32d87e558a78f632L,0x48a06031e454904eL,0xaa2cb8dd16c6e626L,
31316         0xadd098ac2c140452L,0xd25f285d2d3031b1L,0xfb5fbbe175b59543L } },
31317     /* 15 << 35 */
31318     { { 0x2297041fd7a21503L,0xfe7738c2657f03f0L,0x994a8deb168fa34aL,
31319         0x0c772e02a53c4fdbL,0x67f835d150124cd3L,0x0e0d26356993cbbeL },
31320       { 0x9857ed845257f11dL,0xdc23a728ac556942L,0xf0e1bb29deb32a7fL,
31321         0xb8c3c43fee0d70f4L,0xc294b0efc60ad214L,0xa4d438dc679067caL } },
31322     /* 16 << 35 */
31323     { { 0x520b0bb905c755e4L,0xa2c2c59bf89f0048L,0x85c1c73a73c23975L,
31324         0x6e4dec49783aabbaL,0x69f0c69bb0463155L,0x61a42b949c97b17bL },
31325       { 0x55af24a945d331a3L,0x4b0e63f8f5fe81fdL,0x4034283d708671c4L,
31326         0x200ddab35fd9001aL,0xe45f28e4342eaf3bL,0x3e8375b41ba936c4L } },
31327     /* 17 << 35 */
31328     { { 0xcde014bbc613b1faL,0x5ad97babcdf992c2L,0x9fe05b9fea13e2d8L,
31329         0x93b553e290c4031fL,0xd62bc0818c727bebL,0x284fb61f888306caL },
31330       { 0xa63f8dcd1101abd6L,0xfe02dc120e962b27L,0xab169958115301e7L,
31331         0x8822f954462209baL,0xb3ba3e721198428aL,0x9a73ed38d74c88f8L } },
31332     /* 18 << 35 */
31333     { { 0x7db497e17da2f887L,0x0995648b683f3507L,0x50e3ff74f5935bd2L,
31334         0xdec083e2708c88dcL,0xbcc3bc3125129bccL,0x7a3fd7a80a407b41L },
31335       { 0x46ab826c25e0ab93L,0x28e891ec54944cfcL,0x637be168f55c6cbfL,
31336         0xfa34e9942a65216eL,0xd23e99afe3a43c84L,0x6d09d189e6fd958bL } },
31337     /* 19 << 35 */
31338     { { 0x8aa6ca1381bbd283L,0x3a0633f4ee167a15L,0x7f297c8b9e3b18e6L,
31339         0xbead8a50c71fea64L,0xa11b2fdd457aebbfL,0xd7fc286f85bc7bd2L },
31340       { 0x2922ae5bad1c9d9dL,0xa07741c2ef9ac174L,0x24dab2d457fa8f9fL,
31341         0xd7078d946116a870L,0x4b45107834117a37L,0x19a4dd21c73c857dL } },
31342     /* 20 << 35 */
31343     { { 0xa2f9b4e4bac5d14bL,0x9f904a3eb8699164L,0x63585978fec79b4fL,
31344         0xbcc9b60ebff45cd8L,0x2e515592a5d63de5L,0xc47a048c3bcc637aL },
31345       { 0x0523810643aba777L,0xf6818e4c77e67aacL,0x9d5827d238f962b3L,
31346         0x28a904c6a003988dL,0xc06bc833551f4575L,0x61f6bcc2221cffefL } },
31347     /* 21 << 35 */
31348     { { 0xf7cfbbe5055a5623L,0x1f8af775e66d2a5bL,0x0cac440268831d8cL,
31349         0xd25185890d0e6f2fL,0xf17838a3182f90f1L,0xefdf6f20737f163dL },
31350       { 0xc3198af0542242e9L,0xf77c3d28209efb0bL,0x1df6d0da8de7be08L,
31351         0x22ef7367901a6590L,0xfa9b4af44b776d27L,0xdc49102c88ace4f6L } },
31352     /* 22 << 35 */
31353     { { 0x60c7d148bafa9cc9L,0x0afc5fe2516b87fbL,0x02e20acff795ff60L,
31354         0xd1ba069151f32975L,0x8547e7f757be2399L,0x4bdf6abfa0d1b33eL },
31355       { 0xc793832fa06077f9L,0xad55cccb2d874993L,0x5e217b27314387d8L,
31356         0x744d7b06e7f2ec4cL,0x761aa86d24fa58b1L,0x41400d9657dd313dL } },
31357     /* 23 << 35 */
31358     { { 0xd17f68da759d20f0L,0xc141ca6827b7eaa7L,0x3796db8bdaff5c66L,
31359         0x067119dca1e5220bL,0x174f11777158ddbbL,0xa80365d8cf8bf75eL },
31360       { 0x0a79f74933567f05L,0x8c2826123c99bb4fL,0xe448c2bdcd6ae726L,
31361         0x1ae05aac2ad4b0e0L,0xf90dddcb16442420L,0x37465a1ea75c28e3L } },
31362     /* 24 << 35 */
31363     { { 0xf58e05c53178468fL,0xa17c8b868328a2efL,0x1bb22cb44ce0c2f8L,
31364         0x1ab807b51aab9089L,0x2aafa8c91e76fafdL,0x58cdf95fb4801546L },
31365       { 0x2c1e4ef8d5d699f1L,0x1583a2aa4cd433bdL,0x571dcaec7f4f9b10L,
31366         0xf62b696b27156c5eL,0x77d2443448820bb9L,0x94e4cfcc11dd3e55L } },
31367     /* 25 << 35 */
31368     { { 0xc3fd1feac00e6c7fL,0xf4e42ddabd322507L,0x1ce3e0da023469ebL,
31369         0xf81769d2d788b1c2L,0x505cec4c62353342L,0xd4049907ba759922L },
31370       { 0x9ff98f06618ee939L,0xfa63b3606bd55f31L,0x3fcce488cc4d2515L,
31371         0xeb6e92e91d629e19L,0xcae4190bff892af7L,0x3e7b780dca80cb44L } },
31372     /* 26 << 35 */
31373     { { 0xbc923fdfaf54b58bL,0x2aef31d88767acdeL,0xfbebb8f07f28a3d4L,
31374         0xce5feafe694fe977L,0x606afb0ac9da1ee5L,0x559866a0b74f7c42L },
31375       { 0xd935191fdc85f22cL,0x5c3002d7c8ce3240L,0xecd278c198452214L,
31376         0x665b3176821a3606L,0xce05a914baf26fb7L,0xa178860b60e4e8b8L } },
31377     /* 27 << 35 */
31378     { { 0x135c82b55000cc19L,0x34537edf8b2c55b4L,0xfcb6aac2b37acc8cL,
31379         0xa882e25e8ce8d7f5L,0x531756e98c7ff1eeL,0xdcdaced9ad6312b0L },
31380       { 0x309a469b7f3aef9dL,0xf306e32588d8772fL,0xe7e6f3abd4dc0d90L,
31381         0x816b01ae49878940L,0x1cb084e84ba5e2c8L,0x395af25b005d08b3L } },
31382     /* 28 << 35 */
31383     { { 0x3832cfd59093efcaL,0x3fda8380ed8b34d7L,0x874ec122e2bd4004L,
31384         0x3761e9c44270b9ccL,0x6eb2fb1166e640d5L,0x2a45ad23e6dfd0fdL },
31385       { 0xdcb3272bf8dd082cL,0x7d84341f17486485L,0x0f46b1fda4ca2644L,
31386         0x81a1ab1e82baf37dL,0xbb1d72713b322f65L,0x1571e326f4038252L } },
31387     /* 29 << 35 */
31388     { { 0x4e00aa41d9acdec7L,0xb2b701bf9f80dff4L,0xc366ce97d5e71e0eL,
31389         0x28c2b4e9ed09255bL,0xef54a1a535086ba6L,0xee2e43f2a1c8b39eL },
31390       { 0x346f22f5d9143a78L,0x71fc5c06f1053377L,0x1789f7644737b5bfL,
31391         0xc9f83ee8b0df2648L,0xf91a29e9073ee793L,0x18eb801e3ab450a1L } },
31392     /* 30 << 35 */
31393     { { 0x1c3df0914085f0b6L,0xc60c47f5cede211bL,0x7bdead8650b6e857L,
31394         0xc68645be2cf9aad6L,0x8d970a94d01540f6L,0x9346f253782ec6a1L },
31395       { 0x3da31263c1b23981L,0x53076158dbabfb68L,0x22947b9f743dfba4L,
31396         0x872e60061c56f47aL,0xe973d81c2b3b8417L,0xb98216184b1fed56L } },
31397     /* 31 << 35 */
31398     { { 0x29fa699b8873de48L,0x64f9e1124932447fL,0x4fb0e009e4c20d43L,
31399         0x748a0cdf78016262L,0x4891badb7bd23ea8L,0xf1300a437f56368cL },
31400       { 0x178efa9de8f1f8bbL,0xc31cdb4098a31dd6L,0xc2d5bfbad2c43f9cL,
31401         0xf377e2cc8678d990L,0xd42d274808d19833L,0x2d72fd4de5ad5e63L } },
31402     /* 32 << 35 */
31403     { { 0xb083ba6aec074aeaL,0x46fac5ef7f0b505bL,0x95367a21fc82dc03L,
31404         0x227be26a9d3679d8L,0xc70f6d6c7e9724c0L,0xcd68c757f9ebec0fL },
31405       { 0x29dde03e8ff321b2L,0xf84ad7bb031939dcL,0xdaf590c90f602f4bL,
31406         0x17c5288849722bc4L,0xa8df99f0089b22b6L,0xc21bc5d4e59b9b90L } },
31407     /* 33 << 35 */
31408     { { 0x44e6089f006e422dL,0xb4a99bc45b029c6eL,0xd14bd00e6f289edcL,
31409         0x8ebbedfa25c50773L,0x5bdad80851d3ade5L,0xe4e70c3094727960L },
31410       { 0x29b759e863ab2622L,0xe20ad36b134d5982L,0x27c8387f4070e06eL,
31411         0x9fae222556593896L,0x299a0f0c3b199172L,0x476fe70977a39ca4L } },
31412     /* 34 << 35 */
31413     { { 0xc91a3d2ef4d0d8a4L,0x450193a819e05a78L,0x0e59e0b89eec69eeL,
31414         0x2ba20f00138fbf46L,0x5c9fea780e8ae694L,0x62c81c8cc6b73372L },
31415       { 0x2a1df446ff0997a2L,0x929364ab692bb930L,0x4c4a956436cb618cL,
31416         0xc55020a0526be5dbL,0x151f18a02c64c026L,0x2ec5becd61724143L } },
31417     /* 35 << 35 */
31418     { { 0x139c7d788713439bL,0x46f7bd4b1e19b1caL,0x74259a28b47977d7L,
31419         0x89a912cb8ab1817aL,0x4428e45f06419142L,0x11b9c4836b34a2d5L },
31420       { 0xb613563a29487118L,0x81f4502ab6249a60L,0xe28685843d4ddecfL,
31421         0x138c97297bd250dfL,0x733f2201aaac4593L,0xee6b85ad5d061887L } },
31422     /* 36 << 35 */
31423     { { 0xbff288ed74006fd8L,0x388c5a34ded657eeL,0x47d400a2d61a2995L,
31424         0x54c684af1eba1f65L,0xd1ba6975b1b4452bL,0xb23dda26f2f8283aL },
31425       { 0x6bff7acf86803147L,0x839571e5e8ea5923L,0xc89e1048dbc4ccc5L,
31426         0x1fa0221120102232L,0xbf7b8f902d4e4406L,0x14c5de43576aba0eL } },
31427     /* 37 << 35 */
31428     { { 0x6c55807bfd2f9b11L,0xb01d9f7239e338efL,0x94f6531135628879L,
31429         0xae51cf0b0ec6f5b4L,0x387223cfd36b9719L,0xeeb02cc6f2fb192cL },
31430       { 0x867611ec43c9e89cL,0x5b15785f97930887L,0xb792b88b57ab078bL,
31431         0x0c54de110bdc03cdL,0x5785811a30d0eee3L,0xb73bb98436b88b00L } },
31432     /* 38 << 35 */
31433     { { 0x0d0ba3c06fba6f94L,0x7f7e0f5cf29713c2L,0xa8cce53ba6b94d6cL,
31434         0xbea99382df40fd27L,0xb3ff1c56bcd4f8b2L,0x19124644418f108fL },
31435       { 0x6fc5260727c26f18L,0xbc5e23d682c7c8f9L,0x12aa5e8e099b8cb3L,
31436         0x9d94d88614c579f9L,0x5c629d7a47395f32L,0x9cd280633efbbea0L } },
31437     /* 39 << 35 */
31438     { { 0xf0bbf8e88edb7b56L,0x9a76ad71adeb43ccL,0xd99a92528643e982L,
31439         0x6468ff05cf17f5b5L,0xe6589476d56b985eL,0xdca4273cbe446b3dL },
31440       { 0xd430e3a47b9dbac1L,0xe075c00f4cfe735dL,0x3ba43fef12395845L,
31441         0x6895f0c3dcb49ce9L,0xd868006aa92843dbL,0x968a8ceec0d5bc9eL } },
31442     /* 40 << 35 */
31443     { { 0xc0387b57f440fe92L,0xce8bad38e291c443L,0x022052e5f9e88be0L,
31444         0x6f949fe261615c9cL,0xf4874e2d84725fc1L,0x06fb244b73a394ebL },
31445       { 0xb70553c678208bd8L,0xab1829c028704d28L,0x1453ee1a807b160bL,
31446         0xa1da80c34649d33aL,0x072e02e056c32ee1L,0x79baa98f3f590646L } },
31447     /* 41 << 35 */
31448     { { 0x1613a710b0fef3f2L,0x9ae438012edeec54L,0x07824d08579c3130L,
31449         0xc2beaf806ba2b1fbL,0x7df3c459fc9e85e5L,0x8debf613dbd63acbL },
31450       { 0x2774ab78f04f3526L,0x36e7ff55a5285219L,0xf2adccaf4ab04c77L,
31451         0x14add3d8aa43fbfeL,0x387e4965e3026ac4L,0x154801a1c77391ddL } },
31452     /* 42 << 35 */
31453     { { 0x28687291933bc404L,0x6a13b0cc9ba35fa8L,0xd3d1746931c5d126L,
31454         0x1c81ce5df9727cfbL,0x14f66be860b464eaL,0x0bbdefb8c10ea9f6L },
31455       { 0x5679a0e5e8d06c95L,0x380161d83dbfd6e3L,0x6cdd31f20523e6d1L,
31456         0x2ff419e0c4b4c439L,0xc7439153e217782cL,0xb1b74383f6dc5d95L } },
31457     /* 43 << 35 */
31458     { { 0xcf0d1d2d03746e38L,0x8476c982916e077eL,0x93de41516dfdc6d3L,
31459         0x15010d26b78cf13fL,0xbab5a5de97cb08c0L,0x37f0673014a31939L },
31460       { 0x777c709f6819b0f4L,0xe3c2d2f7114a32e7L,0xf0227e19ec047092L,
31461         0xe1416f34b817e1e1L,0x4d7db41419c6c3f6L,0xf12a13a9d01aecb1L } },
31462     /* 44 << 35 */
31463     { { 0xa09e68e61f023abeL,0xbc432449aae2d6c8L,0x61e22f727cb683dfL,
31464         0x0b5bbc0fd81a0e89L,0x18ea4e774581f128L,0x28df9961cd70a12aL },
31465       { 0xb0d3b19f8b8bc10bL,0x0805d1439844e7f8L,0xe3ed3d40675ab6a9L,
31466         0x026d1200f75e2859L,0x1802457b8bb10969L,0xf94c62b3eadab8caL } },
31467     /* 45 << 35 */
31468     { { 0x518e9c4220d03ce7L,0x6c44676187811010L,0x07ff38f99d9be611L,
31469         0x5c2bac105cf0cfd2L,0x4e5cc677d5881c2dL,0x02dc395f08e39281L },
31470       { 0xc3ef99142044f4e9L,0x0203508c20c8c831L,0xd1276c030e0524c9L,
31471         0x5525c0af5402f999L,0x5c9a43aa49c2371bL,0x6d7b6700d28cbb59L } },
31472     /* 46 << 35 */
31473     { { 0xdec3ab0f7bae55e1L,0x6bae4baf56152625L,0x1d597c0c839b5d6aL,
31474         0x243692a966b3b169L,0x37f2ca8eb01c6d34L,0x5baa355aae5c05baL },
31475       { 0xe0b84c28af384b13L,0x6a2c9386667cd513L,0xc361a75d78319608L,
31476         0x0c317ac596ca528dL,0xe243aa8672f0a5e0L,0xedcf9f5fa1d1677eL } },
31477     /* 47 << 35 */
31478     { { 0x88e5cf3f74a0a7d2L,0xa25a3883cac23d4fL,0x7be2fc2ba6eb3d72L,
31479         0x188be28d391326cdL,0xeca6aa726f3db24fL,0x237cd6f70b9a11a1L },
31480       { 0xafeca5436fecffeaL,0xa32291510e6d18f3L,0x46699e2500dd8b76L,
31481         0x5edb4b1a331eaa12L,0xecf6d8a472ce0658L,0xd91af8da6b80e9e2L } },
31482     /* 48 << 35 */
31483     { { 0x7af5da7b63ec62d4L,0x74dc387261dbdee2L,0x7d08dbd360b519a4L,
31484         0x4e785f79459ef257L,0xe3e7d5a485fa9e7fL,0xea60c815e9b5665fL },
31485       { 0x2e570d18c209caf9L,0x7bae108371818d1eL,0x5db42a0a398d749aL,
31486         0x149740ff4f555604L,0x72e4f06bbcee0abdL,0x0ecc0cb581ad0830L } },
31487     /* 49 << 35 */
31488     { { 0x43550eea0a34451dL,0x8b0b97e9c3aa33e3L,0xdd974528da22dbdeL,
31489         0x0337c64dabff3ed2L,0xb50da9e9230cc211L,0x931f891c004d17d0L },
31490       { 0x8b7f9ccbff366019L,0x5483938033d76a4bL,0x52fceec1950ef740L,
31491         0x5b19b50cd18125d1L,0xbbb661f55b9011c7L,0xfbf0ec747beda7fdL } },
31492     /* 50 << 35 */
31493     { { 0xebca6bbec047276bL,0xcda078e05c3018c5L,0x4620dedda223af10L,
31494         0x962f389ad02fd60cL,0x901fab93baab3894L,0x5ecbbd7506eab11eL },
31495       { 0x865dc95e62203b9cL,0x04a599844acf85edL,0x877e94647607236eL,
31496         0x09592a5684609563L,0x6535176ace76d699L,0x44f2d997ce8812e9L } },
31497     /* 51 << 35 */
31498     { { 0xa09c9ab62285b330L,0x6058d94a9b145627L,0x7b4b4141da3c3571L,
31499         0xc9347a16033b665cL,0x95e9b4f01a33d052L,0x35520f3cd46c67b1L },
31500       { 0x24938cb136042a9aL,0x5eeaec9de73b7354L,0xed47914931f08616L,
31501         0xb0187b2b713a2114L,0x03c49947e3b76d73L,0x79b5778a2e94fc7eL } },
31502     /* 52 << 35 */
31503     { { 0x6bb19d2162de1ccfL,0x3810bdb3339162c2L,0xeb56c72b6aa09df6L,
31504         0xac66c58d1d415050L,0x922cd7e74ad9cc85L,0x09e3585f91168090L },
31505       { 0xffc9a98d31b918a6L,0xc273e186c73c7513L,0xd506753f12a77342L,
31506         0xe288a471e5edd613L,0x0f358d310cacf05eL,0xfbadfa2d9a63fcfcL } },
31507     /* 53 << 35 */
31508     { { 0x020e282989cf155bL,0xa1fa6eaac7f481edL,0xba422e09c5c89724L,
31509         0x43da4df7cad8186eL,0x1bea459cba3ca738L,0xe9f0afdd0c64bc9bL },
31510       { 0x4c3b3b8e3592686eL,0x7e6938a7b43ea3f7L,0x8e01a54e7ba7dad8L,
31511         0x33ecd36ea9c68839L,0x1abd6e125e7e993bL,0x29947e126531feb6L } },
31512     /* 54 << 35 */
31513     { { 0xb0fe9b7912a193a0L,0xfa19ad4be4bbd264L,0xd5bf0e5409918851L,
31514         0xd07d8e5729cf45b0L,0x228e67cc7744259dL,0x786ea24843ed0fc4L },
31515       { 0x7f700231873cd08dL,0x394db4a70ef49109L,0x699047c06a8197f7L,
31516         0xf5b168443021ff8fL,0x4c8bb55026621cabL,0x6f28b013065208f1L } },
31517     /* 55 << 35 */
31518     { { 0x2fb3a7601f809545L,0x8006902ae93849c6L,0x37cc848c9bd9e1bcL,
31519         0xf4cd31559d0f6340L,0x357772ac4baef442L,0x0f46d0f77d533f1bL },
31520       { 0x4121411fd9c12bd0L,0x304083dedb70e364L,0xff6b7a1ccecbeb3dL,
31521         0xb444b5972aadc899L,0x29ec79bfdb8b3731L,0x864d8d917fbd8982L } },
31522     /* 56 << 35 */
31523     { { 0xa79feacac241c5bfL,0xc86df4c017861e6dL,0xaecd1722a699282eL,
31524         0xcce5e345a0464190L,0x0a79c23deca4f6d4L,0x64603ff16a6e7967L },
31525       { 0x02e24234aa7312c2L,0xa9e1fc7791a1b587L,0x1daef29f94526a4bL,
31526         0xa7db710a62ead861L,0xb387fec78869446bL,0xee2171015db19f08L } },
31527     /* 57 << 35 */
31528     { { 0x79a0feabe64fb245L,0x5799eea096a4e94cL,0x2592e7a333b063a6L,
31529         0x2cac3c2ef1063574L,0xb9cea04a7f4755d4L,0xb8e40abaa0bf858dL },
31530       { 0xe1723d963ffa32a3L,0x6547b4402701eb1eL,0x16ec552a4da9b337L,
31531         0x75f7f4a8fe0555eeL,0xf97e465014f1c2b2L,0x5495fce3d9ccf8a2L } },
31532     /* 58 << 35 */
31533     { { 0xffd160fb62c1b457L,0x62efe01fc4d91f7fL,0xc54f75b5208dd413L,
31534         0x089514d3e78124d0L,0x752a9ae8c2945054L,0x466636fbdbffa78bL },
31535       { 0x32936281a265949eL,0xd657c0f084b4d11fL,0x199d8641af455a47L,
31536         0x1eb24cc7dbd9852aL,0xd2ce80f856bfbbafL,0x1b31b23ceb862890L } },
31537     /* 59 << 35 */
31538     { { 0xc866d2a5fcd5aaf4L,0x4ac2b7f57e21250eL,0xa78cd3cbc50b4a92L,
31539         0x2485c3435a5c541bL,0x555db4dc7ef371eeL,0xcd9d6d9c1304f782L },
31540       { 0xae86a22974b4d57aL,0x68c93bc8dd4cdd8fL,0x7b95411098b9fd49L,
31541         0x0dd480b9399d8d4bL,0x0e27be29f2665c52L,0xce8a1ef9d920a5c8L } },
31542     /* 60 << 35 */
31543     { { 0x10a6bd0cfc0395b9L,0xe30bf6d06a5e8107L,0xc8aa2483167930d4L,
31544         0xee75885006e7e1c2L,0x4ee64cfcedcb7788L,0x9498e9bbf2f1d7ecL },
31545       { 0x084d2350ae0fcdb4L,0x4398ee677f4d25ccL,0xc1ddca395db85bfaL,
31546         0xefd4819747961197L,0xbd16037f2265195cL,0x1c61a6fc56daae6dL } },
31547     /* 61 << 35 */
31548     { { 0x640cf6b17f7c8c50L,0xdffddf2209d44051L,0x837275314e3c038eL,
31549         0x3164d1875aa8d8a1L,0xb37590bcfceb1066L,0x5e4fab4200d489f6L },
31550       { 0xc1e5dca3f8105ea2L,0xfdd1b0751c7f8679L,0x571d7dd14f14ac54L,
31551         0x84cc453155cfb741L,0x49d0b1be48823448L,0x8365f1f3f798b5d9L } },
31552     /* 62 << 35 */
31553     { { 0x9f2409cb6a564a3cL,0x9266799ae5134e54L,0x39aa3697fac47921L,
31554         0xdf3db1f32c0b4dbdL,0xfa37a085f096ec03L,0xb99cfe05afaa0f3fL },
31555       { 0xc9e00e43df458860L,0xbeb7e60ace2bb0b0L,0xdfe2be57cac8d7e0L,
31556         0x6ec03d799162b2ffL,0xdfe3a6225d1122dcL,0x9f04dcc8b6014310L } },
31557     /* 63 << 35 */
31558     { { 0x30471bf9b42ba5c0L,0x19073fd0c9d26763L,0x92817e8059c1017cL,
31559         0x29248f743da195b3L,0x029d7e7be928767bL,0xf1a3a08a049a0080L },
31560       { 0x8ec4f3e6e20c1d68L,0xae815a11f3ad30feL,0xdd0a6083f76f43afL,
31561         0x197d29fe49465bebL,0xf1a40ae996316f4bL,0xec47d65e59bafbc0L } },
31562     /* 64 << 35 */
31563     { { 0x6f57752951c2bb65L,0x4a0c1c284b874bdbL,0x19a1842778b96c6dL,
31564         0xa674f9922f593505L,0x5abeeec46b7209d6L,0x42d15d0147cf5fffL },
31565       { 0xe24509b7b49e3b4eL,0x81be939c639ee6e8L,0x7f7daf595761e8e3L,
31566         0xed5cfcb8d420a288L,0x365b29eb7a0ff696L,0x7d14680599a1ac8fL } },
31567     /* 0 << 42 */
31568     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
31569       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
31570     /* 1 << 42 */
31571     { { 0x9ee1ec3aadcdaa68L,0xd98c498fdcbb6548L,0x32b9737588102ac0L,
31572         0xdd296cf9c08527f4L,0xb74f8145fae3dfbeL,0x84131eb96cd7cc4fL },
31573       { 0xa0f2fe7a927ff15bL,0x6b0ade4deee1a4b4L,0x6e7df2d40eeb90a7L,
31574         0xe2f46e20be4de684L,0xcd28feba3fdd06bcL,0x8e4205aee6d6d9f6L } },
31575     /* 2 << 42 */
31576     { { 0x35d47426f78d33efL,0x4af25db28440c42cL,0xbd6a15e22e91bf5eL,
31577         0xe366a84cc08b6b1aL,0x759c122f55b97de8L,0xecec558f08a03f29L },
31578       { 0xdcc9fca2ea9d2060L,0xb3e49b8e9f361fe1L,0xdeae39029b59cd04L,
31579         0xf532ede06f5e5bd4L,0x84fbeeb936099f4dL,0x73576b1f088d2052L } },
31580     /* 3 << 42 */
31581     { { 0xee43828c6b512bc6L,0xf73dc9f550b91e60L,0x68f23f30f5dbde6bL,
31582         0xaf2fe9e3ddd15e00L,0xfbf34dae86578d49L,0x689796556c130010L },
31583       { 0x137a5fc309942897L,0xff1f0bfe9959f06dL,0x2dd0a04abd7ee14bL,
31584         0x59c46072e54e2161L,0xf470bdaeea7518adL,0xce556e4340c471cdL } },
31585     /* 4 << 42 */
31586     { { 0x2ba8c79022b25f2eL,0xf4670a511af0f4a8L,0x6842f36a2fc2451eL,
31587         0xfc5c9558bb91e1e3L,0x035d1dfcc3ead762L,0x3d0721cb031e5556L },
31588       { 0x3af0cc813af18a2eL,0x7888cee2bd11a363L,0x80c3de0a6ade1d12L,
31589         0xe8c3a5bd93b2dcb5L,0xe3adbd7c90a2214dL,0xfe8646d51192948dL } },
31590     /* 5 << 42 */
31591     { { 0x9214cd4bf1c7ed94L,0x4887c7c63738f386L,0xa72ba72bf623e542L,
31592         0x3c52a464f67d6004L,0xcdb6171d09b9a4ffL,0xe5eb77d160aba627L },
31593       { 0x7aa9836f39d6afdcL,0xa3fa3a520e0a1e18L,0xe90bd925dee3a4c4L,
31594         0x47e8eeafd9a94dcfL,0x34302a4921e16feaL,0xe32a62eb8ae23949L } },
31595     /* 6 << 42 */
31596     { { 0xd1d70db31df1d1f2L,0x22ebc9bd9fec1f42L,0xde5ac585d11d3205L,
31597         0x0e4584ab282d4d6eL,0xc87607928f78b85bL,0x48a85682af1fbb6dL },
31598       { 0x64d012ceae0947bfL,0xab792bbf25e22366L,0x250d40d4a3a030deL,
31599         0xe9b49f0877e26b9cL,0xe7d30c828c0f2249L,0x2b77b40b97c676a2L } },
31600     /* 7 << 42 */
31601     { { 0xa89144b89efc8fe2L,0x23625c36e13b79c9L,0x4fdea1d3a047ad35L,
31602         0xd0b0ee0d4ae78e01L,0xc224b3f3eac4e606L,0x4360e8acfa41bd81L },
31603       { 0xb2c69238062437e7L,0x86ce8de0decd1245L,0x2ce4be3dfa9d07bdL,
31604         0xfd09aa853d268d06L,0x4cd874264a162aafL,0x1b28f72e9d45e849L } },
31605     /* 8 << 42 */
31606     { { 0x65026297ba958101L,0xbeb4adf98eef151dL,0x623763a460c8bbf7L,
31607         0xfa8f5ad78b2a7120L,0xfd744bdf085497e7L,0xf9b6f97e2ba35618L },
31608       { 0x0cebfe9df8a15e86L,0x47a6d01329576088L,0x655817a3fcf19627L,
31609         0x30ab44f7c2f11261L,0xbb001c9dddf2c850L,0xb45c7eff073260c3L } },
31610     /* 9 << 42 */
31611     { { 0x609a02d031716f88L,0xdff6246c45421ce4L,0x544f3162142838d9L,
31612         0x8842dcbe36b57d38L,0x2818919c57f561e2L,0x87f5acca318373aeL },
31613       { 0x42773fb72edf1501L,0xff92c38648e9d8a3L,0x21a81668ccd5a860L,
31614         0xbac5cf837328cee1L,0x7441f749ddc53a05L,0x987d3a1cb5abe243L } },
31615     /* 10 << 42 */
31616     { { 0x3b7c44f8fb90e50fL,0xeafeda047cc384fbL,0x9a33e377de65e34eL,
31617         0x303f568095094a58L,0x4c0f2e932292809cL,0x920c9c12160b30f2L },
31618       { 0x31d14e1414b268d4L,0x9964173f1eadb1dcL,0x8e22b362eccb0f39L,
31619         0x81dccdf83bf9ece1L,0x8e2fda43a40503b1L,0xdb647ac13e112199L } },
31620     /* 11 << 42 */
31621     { { 0x9c23216f096c21adL,0xae259a6d41fa37f2L,0xefe0a8c9efe96f6aL,
31622         0x5631701dd6a27744L,0xed8d0219b3017563L,0xbe2723bca0867a0cL },
31623       { 0xe02bcb56687b62cfL,0xf26c0f77b96f66a9L,0x43e46251fd16fa3bL,
31624         0x206a180a44033302L,0xcfa96b556121888eL,0x50567a7789dabe7fL } },
31625     /* 12 << 42 */
31626     { { 0xb08fb1175cf3e702L,0x7379b1978023df0aL,0x73aefc7b6f954966L,
31627         0xc0fb886f76bd243cL,0x871eacc5ce09d5a8L,0x9f55b0a4e773f049L },
31628       { 0x92945c84415d725dL,0xcd57391f0112ad84L,0x4762bc1d0509d73fL,
31629         0x15cf97f10f1af175L,0x1f855695328c160fL,0x32cb87263b439f0cL } },
31630     /* 13 << 42 */
31631     { { 0xb27e344ae6361abdL,0xa53690eb474027a8L,0x500db02d683a8ef4L,
31632         0x547ecd17819df66cL,0xc35cd4cc91360e21L,0x6ea003a16026dfedL },
31633       { 0x45e77cda22395207L,0x1e8e103f91264683L,0x130f2d2b3bd6328eL,
31634         0x6ae25c819af8973dL,0x6b0f90a0d32d7134L,0x0280a95755c62195L } },
31635     /* 14 << 42 */
31636     { { 0x23781958cd8bb5aeL,0xe3d30c5417dd827aL,0xf974e0076bedf762L,
31637         0xd8154b6273264accL,0xf10fd9bb167b9396L,0x967c5acbe9652a0cL },
31638       { 0x46775025a28fa76cL,0x17ac7cb32ece9d3cL,0x5fd8968ce04a833eL,
31639         0x96ed5b49fcd20a43L,0x1d209e85289f9c68L,0x4d7473518ce51950L } },
31640     /* 15 << 42 */
31641     { { 0x6f5c8f3475214c1eL,0x3d5560bae192d11eL,0xd8a63ff0d7af2e6fL,
31642         0x5fb858be9069fe09L,0x83956dcd8cc663f9L,0x52d30c3b838bce30L },
31643       { 0xf354f6d75569122aL,0xfcef54d1fa68f566L,0xc75b01e79020dfe9L,
31644         0xaac66895774b952bL,0xb2a58a299468cebeL,0xa994a3b487c81a42L } },
31645     /* 16 << 42 */
31646     { { 0xfa7d1236e2319f38L,0x9ba1a1c0a551d3feL,0x9ea27288beb1282bL,
31647         0x1c069efa07fee8a9L,0x5749c7b55870fee9L,0xbedca76fafcec6faL },
31648       { 0xa3f8f1b14c63c5e2L,0xaa1bb15694758ac3L,0x753329a9b59dc06eL,
31649         0xfa8e5f5b98a92c38L,0x6b6f46fd3c2b4662L,0x716f41a1ec04c6c6L } },
31650     /* 17 << 42 */
31651     { { 0xa882aa6389201dffL,0x3441fde55bfcde3fL,0x220cca60cb543f54L,
31652         0x2af1cb29d764d74bL,0x47ae56d0517617c6L,0x05b98dee0342bf55L },
31653       { 0x214f4b11b4e28cfaL,0xa6ebcdf5093691ffL,0xe49ca185f61d29acL,
31654         0xd304ac40fd8c9018L,0x196161a0f889b7c7L,0x3b704d52dcfc6c91L } },
31655     /* 18 << 42 */
31656     { { 0xb405aff88886500aL,0xd88008bebeeabe24L,0x9457cdf30bc931b2L,
31657         0x8e5fd378f4c5aac1L,0xdec408107bc2bb98L,0xf86424c598b16f6eL },
31658       { 0xb6af27b634df75d8L,0x1bd3082125943a31L,0x51176cfcec993c24L,
31659         0xcfc1433accbd192dL,0x324a5e1e2993be83L,0x34169fc1d06215adL } },
31660     /* 19 << 42 */
31661     { { 0x41aa181ad260133aL,0x627dbe0346e236d2L,0x717fba9cfb8cc72bL,
31662         0x6e21d03d69bbc9e7L,0xd903e845241abdecL,0xd17879fa3c20cb6eL },
31663       { 0xe6141bd463a360b8L,0xa784a651e86cdcb9L,0x80fe8dd11f9147fdL,
31664         0x641241c6de155420L,0x1caef32ba71f3546L,0x28c3a51a79fdf82aL } },
31665     /* 20 << 42 */
31666     { { 0xaa16c27a84a3d033L,0xc207a4990c11c9caL,0x7ae2d193aae87c9cL,
31667         0x125ab459916d634eL,0x02ded714cfa65b4bL,0x6efe84944e212e22L },
31668       { 0x97c48a1888766168L,0x663ccc9dd9c85b9aL,0x6fe8b77b2652f501L,
31669         0x1daa602d078efd38L,0x35885364dbcb8299L,0x25bd1826b8240626L } },
31670     /* 21 << 42 */
31671     { { 0x6621d504af748cb6L,0x3940e5e08dacbf89L,0x9fdd8eeaf546daffL,
31672         0x18fc70d4b42f9507L,0x09bc4af9a3fcc42cL,0x9199b08f4165304cL },
31673       { 0x039d45bed3d0e9eaL,0x0963ede2a6464c2bL,0x77f47a62b5215830L,
31674         0x3a0ce54c3e540cdeL,0x34cf6031b2be8f77L,0xeb143e60201083efL } },
31675     /* 22 << 42 */
31676     { { 0x21404da5442467a1L,0xe73047597f7023e0L,0x836439a8213ff492L,
31677         0x105fe0e37ca0fc37L,0x73835ac85b303c34L,0xe29d830e0057ac8cL },
31678       { 0x457d083e3b5f41bdL,0x228b26c357341890L,0x8e8f194c4109bf9dL,
31679         0xd032cf2b6e4a39e3L,0x012e9515d88f9292L,0xd1a4cd32e957e163L } },
31680     /* 23 << 42 */
31681     { { 0xec56b72f4ab23680L,0x7cb58e727f22217eL,0x6e98647bd045d18dL,
31682         0x2b7c9caa9a73b956L,0xc414eabef120122aL,0x45d9036bb6e1b134L },
31683       { 0xe963c88388abd93fL,0x257f3b619180cb9aL,0x915fee5cb6ca7abdL,
31684         0x2166402cdb7b1bb1L,0x636f85f6541614e4L,0x81f91a1849d9e527L } },
31685     /* 24 << 42 */
31686     { { 0x0430af7759b11c7aL,0xf71cc5b1d4f47acaL,0xe1a7905f12e9190fL,
31687         0x1c689b7012db9e14L,0x6bdd3dc90abaeeacL,0x97f1c244504f0319L },
31688       { 0x874afd61a7a54b51L,0xd4604ecbe3d979b8L,0x0d33eee1ebf4aab1L,
31689         0xa3631cac1aa49fe6L,0x0d8340fbf2217cfdL,0xf6373284423b7e77L } },
31690     /* 25 << 42 */
31691     { { 0xc6cdb5ba6f7972d7L,0x7ac7d438907d281eL,0x9160a8f5c01044ddL,
31692         0x3d74d7eac19ba8f9L,0xf7c7f93f112433e5L,0x2ab355a2012236d3L },
31693       { 0x1168ce913009447eL,0xbefde8dba26e3458L,0x6f9837db49ec8169L,
31694         0xb4d1e35c86782931L,0x41440a76d711e5f4L,0x8fc7a5aeacb5cd89L } },
31695     /* 26 << 42 */
31696     { { 0x73719fe8286e8aa5L,0xff8663419982a4a4L,0x684511702fb2db95L,
31697         0x4f1c0eab01d80ea1L,0x2bc50da5530af14eL,0x00d1d5b506071a95L },
31698       { 0xdb618990a6b374b1L,0x06ad90084e79ebe5L,0x281d01a424a63b70L,
31699         0x87dbd6d5348625fbL,0xdc90f0bef576b1a9L,0x1a9ef270987747a3L } },
31700     /* 27 << 42 */
31701     { { 0x135e416ed651b9b0L,0xe55f7f104a5e7979L,0xe55df2550f0729d2L,
31702         0x666f2744e33ada22L,0x4968bb982cbcb4a8L,0x7ad4e7811028dd81L },
31703       { 0x0e59f0dcd7ca8b60L,0xd71628cdd2a600b2L,0x7eaf6d308b0af99cL,
31704         0x6224b6452900105cL,0xe0513f4388650f12L,0x2a63822a6f6c5234L } },
31705     /* 28 << 42 */
31706     { { 0xf8c07373078a045eL,0x998b2d52a81724d2L,0x2b97faf1a6305a28L,
31707         0x5bc61f67f3e0f93dL,0x7238583cd7aeb8c1L,0x851ecc4b39f5f24bL },
31708       { 0x1cc8b4689992c20cL,0x73168a863c8553dbL,0x1b9a5f95ba2641adL,
31709         0x87a0c362ce9d565bL,0x07fb51b2e1eedc62L,0xdb300ac6a973903dL } },
31710     /* 29 << 42 */
31711     { { 0x789ca390f33e8516L,0x6a7f594cdee7f1caL,0xb4b6b9ca988005a6L,
31712         0x14f7b4806cad024bL,0x682a86285a576b68L,0xf188c74e40e1984dL },
31713       { 0x3584b5e6bf6f19c6L,0xa350b1d2b7467bf3L,0x3b3bb966aa3d1266L,
31714         0xebbd2c782804d8a3L,0x91a272d36a9caf4eL,0x553ada4158fa7041L } },
31715     /* 30 << 42 */
31716     { { 0xb564a0d9807e30a8L,0xaba07b1534a637ccL,0x010e76c5840d8e37L,
31717         0xb6dcb9ac95f6765eL,0x2f5f8fe103b3ec08L,0x10c5a24fb48363efL },
31718       { 0x5ddacb2709c4dc1eL,0x8e2884b1e03bafc5L,0x84d56df3cfc2d599L,
31719         0xc8e2da84ab78ec0dL,0xace4663f900084c6L,0x98d9a1df5d49f42eL } },
31720     /* 31 << 42 */
31721     { { 0xb10ca6eea690d9c8L,0x0b8b39efd5e0d490L,0x2685d320e63807d4L,
31722         0xca40d0ee83116ce2L,0xe1e1434fca51b48dL,0x178a91afeddde4a9L },
31723       { 0x64f59e3fd0dace59L,0x57b33c26278b1820L,0x2ca13b041550875aL,
31724         0xb21f675a4e0db4aaL,0x2bbb3edb0216d3c8L,0x7f39955b96ec8017L } },
31725     /* 32 << 42 */
31726     { { 0x78a53b5a9563e3bbL,0x19c75eb286af355cL,0x3520f427019a6f8eL,
31727         0xde6fcad6dc3ad0baL,0xfec96e4f79745b7cL,0x5e566bbdb133f2dcL },
31728       { 0x50088a2b26561be7L,0x16275b4cc5fddfc7L,0xf21332ff23ae4b9dL,
31729         0x8cbc659e85246712L,0x27fa9c8df50b515eL,0x25ecf745494ac8b7L } },
31730     /* 33 << 42 */
31731     { { 0x7cb130e0837ab43fL,0x8a1f00127b9f6c17L,0xbf827f6d17fa5e12L,
31732         0xc181b1264914a231L,0x8ce70fb6986288a8L,0x9832863fcd1c276eL },
31733       { 0x738e99819622ecd1L,0xdfc1b43cb73807abL,0x7254b4cf1b673290L,
31734         0x2d689f38fb20f902L,0x86460de83c34960eL,0x8453896aed8f62e0L } },
31735     /* 34 << 42 */
31736     { { 0x9f74efc606f4904cL,0xa280e4c26d3bc556L,0x974f9bdb75975ee2L,
31737         0x1bc0e7fb6dacde9fL,0x2a110d4c49649375L,0x045432c09090d834L },
31738       { 0x84295a20195083cbL,0x92ea17cac7dcf71bL,0x3acced0be70be8c7L,
31739         0x3703dfc007e28816L,0x37fbf2d1e869fb8eL,0x8c6b0bbef9c35ff8L } },
31740     /* 35 << 42 */
31741     { { 0x04a991812f1d2778L,0x0d78573685b91ae0L,0x8c32d6046a5252a0L,
31742         0x12b043131a0df85eL,0x40c4db631ee669b6L,0x0f499408f18f5f9cL },
31743       { 0x0dcdefabbfe9a187L,0xbd371c45ca650d7dL,0x33819eb00a36748bL,
31744         0x82d1af1f29034844L,0x301f906d96257b2fL,0x862728ea9395c666L } },
31745     /* 36 << 42 */
31746     { { 0x33a2194f40175152L,0x0f7ddc1dbb13f08bL,0x7c08860850b54274L,
31747         0x7ebb2c11e41f0795L,0xf915683fbe20d37fL,0xcbcc14889daacec5L },
31748       { 0xfb02c20fea459050L,0xe964d76ad5815aa3L,0x0e009be9496bbf2dL,
31749         0x8233690eb42d0f7fL,0x98ee83d49168eb0eL,0x34c3b6f3621fa292L } },
31750     /* 37 << 42 */
31751     { { 0x29555d79b0221994L,0x1dd689dd4c9e8f29L,0xcb83ed2c853f5261L,
31752         0x04b1475e0d9b0670L,0xa28b15e7df2ec34eL,0x094409b5e60a168eL },
31753       { 0xe4b9fd0e16ed42fdL,0x02f97e84a138f2f6L,0x91dc216ce13520dfL,
31754         0x59564eda7a245e5dL,0x825278be8478befaL,0x69daadd20328c4d1L } },
31755     /* 38 << 42 */
31756     { { 0x6ffade389995db43L,0x88974055790f4b92L,0x082e5add525d19e1L,
31757         0x002c414897bd9931L,0x3f093b3b5461cff7L,0xafc95b0042b8d3f2L },
31758       { 0x0a8f7687a993155dL,0x1edfdf616c2bb58aL,0xb5be2d4fc44049e4L,
31759         0x6fd505bb8dfdf4e7L,0x5386f02a41af5871L,0x8178817569121027L } },
31760     /* 39 << 42 */
31761     { { 0x1deada722706171eL,0x1baf4c9aee773c6cL,0x458efac06977d673L,
31762         0x1f2c2f38646e29b5L,0x36ece91a53323300L,0xab51a49bc4d598e8L },
31763       { 0x7802760ed8e41d8aL,0x2996f790587425a5L,0x227165b73ca21bedL,
31764         0x0d9e5c5283536ec3L,0x6232f2e089701806L,0xc55e80a2894e2577L } },
31765     /* 40 << 42 */
31766     { { 0x437b7224641e3bd1L,0x84e39f7980a58460L,0x68e5292709759523L,
31767         0x0176a3ace77f5904L,0xde92fb15e151e242L,0x79965c9aeb1438d4L },
31768       { 0x318a810a596700b9L,0xa8a6ec57c2198cbeL,0xd7709aaabf030fd2L,
31769         0xb432023472f5d326L,0xc9945214b03bce50L,0x0bc06d9bd4ecba09L } },
31770     /* 41 << 42 */
31771     { { 0x30630eefaadf21b4L,0x94896f68042fb57aL,0xe678fc3eb312e7daL,
31772         0x325cd2bc5c94c991L,0xd4eece20bea4e518L,0x9d9d65e925eab2abL },
31773       { 0x5439c348676454e8L,0x9eb68953be1e48ccL,0xbeea9da27b625a31L,
31774         0xbd82c6ee48cc200eL,0xba9fc94444b9dc77L,0xb31bdebe1eb9283aL } },
31775     /* 42 << 42 */
31776     { { 0x1ac1a09d07abf58bL,0x7372e532b5770f9dL,0xe1716687c12fe180L,
31777         0xd91f4d36c715009eL,0x5d8885cfd6fe1cd3L,0xc0ab5a13aea65e52L },
31778       { 0xa5fe05a0838e5e05L,0x590cc325971fb33fL,0x3bd8234a4653bf57L,
31779         0xb83300373708c1aaL,0x27453d3b0e84e8fdL,0x9dd3f05399cf918fL } },
31780     /* 43 << 42 */
31781     { { 0xaf6f26c3a36468a3L,0xcab875f28d9fc8deL,0x0209b1ad52f4479dL,
31782         0xc9941cb5459542cdL,0x91603260a0212b68L,0x98018317345673edL },
31783       { 0x2b02a35ef98b810fL,0x15953f78b714fb32L,0xf9f9c61eb71a4b4aL,
31784         0x959b1473a8505b7aL,0x331d32cb4c6ec97cL,0xb1d2dd44e49f189aL } },
31785     /* 44 << 42 */
31786     { { 0xdfb0508345c0a2acL,0xd13790035eacfb2fL,0xe9872d766a2e126cL,
31787         0xd2a89cbd39a02d27L,0xf45baf72d754b7c2L,0x37985ef8c6c61bafL },
31788       { 0xbbcd3ef2da1c46b1L,0x5af5dda43a355d83L,0x9f7ce4281d67a984L,
31789         0xf19526926fa33654L,0x2abccb55567b3b71L,0x1b3704f3300cf29fL } },
31790     /* 45 << 42 */
31791     { { 0x9dcfaf21712af69cL,0x26de8fb05291cd70L,0xc778294742072171L,
31792         0x889b9fbc8c617e24L,0x5971e60cc2926862L,0xdd8e70bddc022533L },
31793       { 0xc783e1e30a369db0L,0x37f562ab07b2bb92L,0x5043f3d40c060f44L,
31794         0xa9650f47a3e17ac4L,0x3b8cd7ad18010ceaL,0xeed5de39969849e7L } },
31795     /* 46 << 42 */
31796     { { 0xf93c3ccb6044ade6L,0xd14a13f8fd376746L,0x1fc20e6fd718a98eL,
31797         0x9f63c6673e31573eL,0xe99b7693a8e0c66cL,0xdad4615c1e5b5f5dL },
31798       { 0xcbdb7200ac98f5a3L,0x31414469668ab045L,0x82e92df9bacf0ac7L,
31799         0xa61f4e8371bfdf94L,0xce8cb699d1bc5deeL,0x42da8ac72f2f837cL } },
31800     /* 47 << 42 */
31801     { { 0x0b6252fc32a4e8a0L,0xac1e457dd7170402L,0x76faaffeb121e40fL,
31802         0xd2dc3cb84ddebd9aL,0x303e47cf362348a1L,0xe37e824a829d9806L },
31803       { 0x419cc2cc7c2ec135L,0x3eab37024cecfdceL,0xf0c9f19088403d18L,
31804         0x73c8984daf61b6a3L,0xa2d44d9e00c232a1L,0x61fdf4883cf1cecdL } },
31805     /* 48 << 42 */
31806     { { 0xa1972c2196fffb94L,0xbe04093099d7633bL,0xb116ff407e23d66eL,
31807         0xcb12b2bb949a19f1L,0x75df10ee79e49e91L,0xa3bf90764890bcf4L },
31808       { 0xcbaa76a609a30252L,0x17c224a90ee5728eL,0xcbc56e5cf4f3f4cbL,
31809         0x8a07110f4fe868a5L,0x23289f2125e110a2L,0x0289c12bd7693c45L } },
31810     /* 49 << 42 */
31811     { { 0x4a9c6f8bea96a0f4L,0x78262a3499e3aaa3L,0x513a8e2028b2634bL,
31812         0x5ba40287d85d74b0L,0x5702d11d440fcbbfL,0x1933c88a0df91fbdL },
31813       { 0x642247909a0aff2aL,0x85dc2ca13734398cL,0x1009884fd7aa787aL,
31814         0xc666a62a0e73f4f5L,0x491bb941cce66210L,0xda8e896bcd173443L } },
31815     /* 50 << 42 */
31816     { { 0xdc9b37a7c6e32022L,0x158cd4bb342a148aL,0xd62d371cf06287a0L,
31817         0xba027eb6e9fe0a01L,0x8e7c6f5372017d09L,0x13c5d6ce9381d9c7L },
31818       { 0xbd0bc2d46e32f045L,0x52cf0f2554ab7f2aL,0x2e674e50085643f2L,
31819         0x77bc15aef1662819L,0x57f9e3c4f2ebe66eL,0x839aaebadd284956L } },
31820     /* 51 << 42 */
31821     { { 0x752bc171ed9d735cL,0x76d96d3419ad5c26L,0x9549ad3e25c1d83aL,
31822         0x8f6fed53cd460d20L,0x04504f7c7b619b69L,0x68265559c566f393L },
31823       { 0x5e39e108804598edL,0xace859b01f4538edL,0x4b8503070c85e5daL,
31824         0x9f087821abcd4ecaL,0x126d3850c8d0def4L,0x66971fe5263457b2L } },
31825     /* 52 << 42 */
31826     { { 0xa82ac9983a4bc15bL,0x28697435c930e4f1L,0x191ebdb6b0c9cef3L,
31827         0xff05f8e875748872L,0x5b86940237343b20L,0xa7bce94beedfe44fL },
31828       { 0xfc271e2778f4e1fdL,0x652c5a187734db66L,0x108f61c87efc9a9cL,
31829         0x01db328970ed1dc1L,0x2bc509afd249f61cL,0x0d2e6b4cfeed393dL } },
31830     /* 53 << 42 */
31831     { { 0x691199d77a477295L,0x1f0679a661746b75L,0xf3a51493c9f936d7L,
31832         0x1fcb336a445af5f6L,0x9880cdebb94ce08fL,0x784fa04a22a6b57aL },
31833       { 0xc85fe18caa97c3bbL,0x27294a3baabe9b50L,0x9418a5b7b673c915L,
31834         0x686cd97a15dceed5L,0x6d1c9dc70f22ae6aL,0xed88e02dc02212d3L } },
31835     /* 54 << 42 */
31836     { { 0xa62c358dcf616234L,0x85402ffad40aae7cL,0x315ce9f151a7614aL,
31837         0x6f7e796f5d0c7d7dL,0x73bf57faf3444d22L,0xb5e71e7a224b77c0L },
31838       { 0x94c40681541ee741L,0x40c97253d6837e1bL,0x1058fe7bb1f1c742L,
31839         0x3206256f9b24d65cL,0x0abb12a78169ba8dL,0x01fcdb7beae85db9L } },
31840     /* 55 << 42 */
31841     { { 0x868f294309fdbd8aL,0xd9c11e7ebdd6c274L,0x3be4d8e7fdcb4fb7L,
31842         0xcd8c40ad17305d10L,0xf12c97642abde5eaL,0xc9e16d8256776e80L },
31843       { 0x279c0248df05235cL,0x4bdd8b136d8e4b89L,0xab8bbe8d7c47d2c5L,
31844         0x12ba8b9e255c665cL,0xd585ce64d140a518L,0x55947e69eb4d353dL } },
31845     /* 56 << 42 */
31846     { { 0x06ba6db1f184c91fL,0x3c0a348a45fd0382L,0x0d535b6e4434b527L,
31847         0x7bbfa2c8692bae0bL,0x5c59a08ebe7fe51cL,0xbaa7d2be36e80cb8L },
31848       { 0x8a42d8d1bed3cae8L,0xd9e0bc0d15ff4962L,0xe51fce93644c75ffL,
31849         0x40222561b9392d63L,0x8ab1d286023b4787L,0xfa85c220a1b3190dL } },
31850     /* 57 << 42 */
31851     { { 0x294845c28ed1d81eL,0xc0402af2dbe7fdbaL,0xbb56d86d67abe6a1L,
31852         0x2e61f65b2ed330e4L,0x2893eaebffdf0fd1L,0x06cff97a75fb77dcL },
31853       { 0x2911ebac1c90fe64L,0xd9c40d77e5ee3458L,0xf5b8b1d4b355f191L,
31854         0x5be71a4ef365bc6bL,0xe2db432f5277b244L,0x3272a28327235b87L } },
31855     /* 58 << 42 */
31856     { { 0xe5105755e6b16cbfL,0xba9fb47b536a49f0L,0x03ac0c10c75ad751L,
31857         0x9090bc328a2d65a0L,0xcecc7202852b3d23L,0xd214f70128f67958L },
31858       { 0x379899b1f3695cabL,0x8f3d02e9bd3342c2L,0x9870a7f9e24e7bc1L,
31859         0x7277e115f723893eL,0x6932ceef0f6f1936L,0xd0bf06dde171306dL } },
31860     /* 59 << 42 */
31861     { { 0x815cabeb17832ce7L,0x65afc856a2a4864cL,0x9fe4ae1aa4939a4dL,
31862         0x7005cbd90729a3c0L,0x887f0cca791e8ad6L,0x55cad97a85aca45aL },
31863       { 0x3e89d294493c7dcfL,0xf4ae5277ae8ed154L,0x507a3fd0a08fbcdbL,
31864         0x4df3c552f86677fdL,0x6529f9ace3a82131L,0x09efe1fba53a7c67L } },
31865     /* 60 << 42 */
31866     { { 0xbbcfa42d21fe8f67L,0x82983012de2be980L,0x88bb9704aa8e17a0L,
31867         0x100ad5e784772203L,0x2867168965479d29L,0x0334f9c5c2d9d5d3L },
31868       { 0x49032c1a83a6cf83L,0xc257b0901dad479aL,0xf64177dea7e3636cL,
31869         0xb2b5747874a315abL,0x210b11cda170ccbcL,0x80509b7480d80177L } },
31870     /* 61 << 42 */
31871     { { 0xe98ad30696993a74L,0xa7dc8330f0484940L,0xc30319fdd61b83d0L,
31872         0x76e2755809873771L,0x33f4f43ecaedda98L,0x68d5ffe3639c8d3eL },
31873       { 0xe3cf3b850059b2d9L,0x7f3ecb2f6a3d057eL,0xb569c24b9b8b7466L,
31874         0xeed92f2ac38ccd58L,0xc16a4e8ce765a2f7L,0xa3a7b6552de9cb38L } },
31875     /* 62 << 42 */
31876     { { 0x496de6fa0640df83L,0xa4e500a36c77c97dL,0x45609036947aed3cL,
31877         0x0edb9422423fc5d8L,0xd0c01b2e68f70746L,0xae44ae0e6d77f3a3L },
31878       { 0x7cc7e90635adba9cL,0x107a3b46a8413303L,0x9e3eeab98916817eL,
31879         0x1a99dab86fb74601L,0xb4e8466c1064b039L,0x249149146fcbadeeL } },
31880     /* 63 << 42 */
31881     { { 0x89643fa624798452L,0x179b3bd76ee52833L,0x343096e54430c6b3L,
31882         0x589dba3323461536L,0x59073225c3433575L,0x540f9ce317d80d42L },
31883       { 0xcd04b14d3aea6c82L,0x9be179b0efc9f455L,0x0ad6fb0791e57cbaL,
31884         0x33894fa262706b10L,0x2cbc270886bf6926L,0x2cf067e64ea48c6bL } },
31885     /* 64 << 42 */
31886     { { 0x298647532b0c535bL,0x90dd695370506296L,0x038cd6b4216ab9acL,
31887         0x3df9b7b7be12d76aL,0x13f4d9785f347bdbL,0x222c5c9c13e94489L },
31888       { 0x5f8e796f2680dc64L,0x120e7cb758352417L,0x254b5d8ad10740b8L,
31889         0xc38b8efb5337dee6L,0xf688c2e194f02247L,0x7b5c75f36c25bc4cL } },
31890     /* 0 << 49 */
31891     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
31892       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
31893     /* 1 << 49 */
31894     { { 0x36c9dbbefda8520eL,0x573507ce6ae3ea98L,0x1ab38db696a8f9f1L,
31895         0xe031d2356b01e6bcL,0x10466ae68afc4adaL,0x3b35df41ed9c44e4L },
31896       { 0x61272c12c7bd99e8L,0x6a4ae7b4805afd79L,0xf4c47a910ecc49ebL,
31897         0xeb95dfeccbe84d5cL,0x43f3b71c8ee497d7L,0x2547af524c6fece4L } },
31898     /* 2 << 49 */
31899     { { 0xe323ed0cced45039L,0x04ce0b67a90aa713L,0x9c092f06e8d68e4eL,
31900         0xd8f5555ad0742e5dL,0xe2d175bf00d3df92L,0x8ca55f154f71aeabL },
31901       { 0xd1762d72642d391dL,0x0dfdd3c2aec466bdL,0x2caacb4c6281f2a7L,
31902         0x635ba4703603e53aL,0x94a9811d49fecf29L,0x3a42cf09466bf361L } },
31903     /* 3 << 49 */
31904     { { 0xe63fbb10b5356889L,0x5995a0a92e73aba2L,0x5cea30677afd4bf7L,
31905         0x4494e39dfd37120dL,0x8c572c7249d718a7L,0xfe159c275fa305fbL },
31906       { 0x751c217fc276c40fL,0x44d0643c45e40857L,0x9a996e6efe7a6486L,
31907         0x1a4f6d10f53b0e47L,0x651390ecd15fd593L,0xe0c1181d739ee9eeL } },
31908     /* 4 << 49 */
31909     { { 0x0f05710b11bccf2fL,0x7113085a7aec1bc6L,0x137da67a46b8d0e2L,
31910         0x454b89fc698b78ccL,0xf2a6e1de258a9393L,0x5f1804e716488e69L },
31911       { 0x7c6c550215b3bf35L,0x3b0e09a5b05c2ec1L,0x4b9de30e92f15247L,
31912         0x09d4ca9327e70a0aL,0x9c8b16340d149363L,0x54a8287cce642137L } },
31913     /* 5 << 49 */
31914     { { 0x3a05e7d5ca2af43fL,0x068953f975009801L,0xd6c8a76c06740141L,
31915         0x7e1df1038a831fa9L,0xfe06e2bae39046f3L,0xda5264a0e1807c29L },
31916       { 0x1be4ffedff5d4808L,0x299d6537c52be83cL,0x1b38adba11834a9cL,
31917         0x6074a60b1248fd42L,0xd9a0bd2e041b5430L,0xf222ba84a7b76b03L } },
31918     /* 6 << 49 */
31919     { { 0x49ecd6f3346a764eL,0xe46847f14105e657L,0xce9cb2b57550f608L,
31920         0x45f1a1f7f4cf062eL,0xcdb19a112c27d38aL,0x36d375b284e50b19L },
31921       { 0xf43691540dba6405L,0x4c9dc863040354dcL,0x7229e70ea24d09cfL,
31922         0xe72aa86c7cf6831bL,0x487fb68425392838L,0xe88bed04430b9b47L } },
31923     /* 7 << 49 */
31924     { { 0x9f77b8c5d1164788L,0x45bcd4c1d7b5c5dcL,0xed22ecf3d88c2357L,
31925         0x330272ad07de1cf8L,0xd9749f7f4ca13a48L,0x4964ce5d1383ce08L },
31926       { 0xc033d516b0d0dbb3L,0x056ae73bf51943c3L,0x495cf7e057105e88L,
31927         0x08ced52e56462560L,0xe9578aa713ca1a7dL,0xe9b045c5a9717f7eL } },
31928     /* 8 << 49 */
31929     { { 0xf8a8499b666fa8a8L,0xd0f9401571bba84aL,0xb85e1b1d515e1328L,
31930         0x88a2636ba941e788L,0xa045241d2b5dd8d8L,0x161be476332f0350L },
31931       { 0x96c4b205a18fac6bL,0x5cbe8d5e73fc5337L,0x6fc33fc6d00b6029L,
31932         0x07a914ee89aa3b79L,0x35353eb7a4d4dd00L,0xc026bdc0673e8956L } },
31933     /* 9 << 49 */
31934     { { 0x1e551f9bce0b6f8cL,0x1fe7ea4618495e1dL,0x3f6f28742dc0e878L,
31935         0xb778c12844c43f20L,0xbddc28eb8a250230L,0xd8571a4aac6c3d17L },
31936       { 0xb9dcaec9730c8a1eL,0x512cee9993fbcf87L,0x0df3a1379bafe001L,
31937         0x8530e501e2a2b9bbL,0x6d38ba8995ebf91fL,0x704b81a7792cef7aL } },
31938     /* 10 << 49 */
31939     { { 0xccda372167103852L,0xf78d22470c54de53L,0xebd16036afa44aa5L,
31940         0x7b88024864a24ab9L,0x86b38e961c2bc78eL,0xd0aa0d058d63b295L },
31941       { 0x24912955c62fcbf1L,0x77a68156b9ac435cL,0x432401c71b360b26L,
31942         0x091f19f34c58ef8cL,0x3a4a61f483d46c9dL,0xad0e5c72e8d616cdL } },
31943     /* 11 << 49 */
31944     { { 0x668d598ad1666826L,0x6ffed334fba0ba63L,0xe71e3359d7cddc30L,
31945         0xa9c15c2d9fb9998eL,0x6966d350612230b9L,0xbca3ed23ae4fe0edL },
31946       { 0x537cac1b3caa3edfL,0x4f4a737ef33c180cL,0xf8d8f796f8807a7bL,
31947         0x5c7cf072d1aab3e2L,0x7f0ccb9dfff736e4L,0x71bf0732ef11266aL } },
31948     /* 12 << 49 */
31949     { { 0x33b029bccdaa6831L,0x2548552d4c1f9cedL,0x35f1a002dece1c8cL,
31950         0xc6b87fd7acc23aa5L,0x0b8bb275bab029a4L,0xf07bc06730bfb42dL },
31951       { 0x1688ff5d1f69ce9dL,0xeedb7b5edb10585eL,0xb7a88cf0d432c197L,
31952         0x20731bdd015a350aL,0x5fa1835463223f5cL,0xe392e1318024693fL } },
31953     /* 13 << 49 */
31954     { { 0x61ada737c3449cb3L,0x071062504ca876ffL,0xcd98a39001d1403eL,
31955         0x197c845096ded881L,0xd060160568cacebbL,0x7e1b37d1dc3ddff4L },
31956       { 0xfdc1bcb5d1725e92L,0x11cbe941bf0856d2L,0x63fd35d050199657L,
31957         0x208a1047b9790d10L,0x52790ce61af4301dL,0x75e6d83beff28b69L } },
31958     /* 14 << 49 */
31959     { { 0xdfaeea0a0154731eL,0x9e53419de15a0388L,0x2ad6a83c25a992c8L,
31960         0xa2ba020fe125501aL,0x894ebaf8d4dd04dcL,0xd48cb95850765559L },
31961       { 0xf9b58d0980dec92bL,0x2a0e11659da299d7L,0x3c081853efe9cb11L,
31962         0xb9f3b702a511c5e0L,0xa8f7a25f70486180L,0xc0358b25591b3e2fL } },
31963     /* 15 << 49 */
31964     { { 0x00333fa6fa806947L,0x7e4dcfb3504b3e19L,0x8326b0acad4a5dfdL,
31965         0x9ffc65eac7b12e49L,0xed3b7c0258d16eeeL,0x79fccfb434a4222eL },
31966       { 0x4a8070a0e556357fL,0x554fe2c9ec97769eL,0xcc405a57da691714L,
31967         0x12927897856f590eL,0xd4805b93ba198dcbL,0x2649be2e4b18444bL } },
31968     /* 16 << 49 */
31969     { { 0xf36e8398eaddf274L,0xe41553a16a5e4ddbL,0x36ab07464efc5b0cL,
31970         0xb211e59ad316c434L,0x2515ec9f16ccf839L,0x6ecb746503dc6a07L },
31971       { 0x842b7275c65c1b07L,0xf7ceeec535750ab6L,0x967d711ccef5255dL,
31972         0xcd3bfb075108cb92L,0xe50c0d8aec1b9740L,0x9e8d56611a9e6308L } },
31973     /* 17 << 49 */
31974     { { 0xfcb12ba3aae18c46L,0xb55e959c6e21d463L,0xf720d19f4a4f6f21L,
31975         0x1c2ff60ed4320c5fL,0x4ce5e1ac1a1b40b8L,0xfdebfb81ff6fb9a0L },
31976       { 0xd6c37d8a9c67c07eL,0x55167952012fc09fL,0x5dc722b52c306c4dL,
31977         0x1efad8d2bc1f65e1L,0xa1478f3da52556ecL,0x54cbfb884a795dd5L } },
31978     /* 18 << 49 */
31979     { { 0x84f8ea13ccb8a36aL,0x5f7aeeffa05709a2L,0x4942d04e60574f37L,
31980         0x855b13e9e048b400L,0x747e4067a6b59c09L,0xc349fb05074d3990L },
31981       { 0x398e6afaec2c7e03L,0xce361865ec2d5a4cL,0xfc04bf8eb6f57d22L,
31982         0xf0e0b84c759ce6c6L,0xb65141235ee7e528L,0x8ca144bdf5c0f9b9L } },
31983     /* 19 << 49 */
31984     { { 0x5868449bc6e0124eL,0xdd65ffc1e68ad5eaL,0xe126665f4f577466L,
31985         0x8ade5cee2defe8deL,0x7c1cf7f07beddf87L,0x0e0e066a362c5956L },
31986       { 0xac2aff4e15563b47L,0xa28ab875620d1299L,0x91f67b3fd8caa497L,
31987         0x91bef53394fc08a3L,0x0fa27d9cd99918f5L,0x205b6c1f60b67bd9L } },
31988     /* 20 << 49 */
31989     { { 0xc1370daef6a58536L,0x6f2e5b37c56b0ae9L,0x5511d68292f6b6a3L,
31990         0x2e9e5034ae575249L,0x3e5a32f81d14bed7L,0xa346a86f75efd17aL },
31991       { 0x4f2510a60309fd7aL,0x689ecd74d0b1425eL,0x9e9bebe19f771e24L,
31992         0x20188045adc5b48cL,0xe49811b6b845230bL,0x420855ec5a8687f8L } },
31993     /* 21 << 49 */
31994     { { 0x705a9ab30aa1a423L,0xcb01466fb49830c4L,0x1db1768581a75897L,
31995         0xcaacb855e341f157L,0x9b13cd497a0d3c38L,0x119b4d47e177fcb3L },
31996       { 0x0d8f7c2639788712L,0xbda0f3180642bd4aL,0xdd4bd88bd4616239L,
31997         0x9a3ecf978df1b895L,0xd0d54caf4a6dc07fL,0xa7ed6bfb31810203L } },
31998     /* 22 << 49 */
31999     { { 0xe650e49abae1b94dL,0xb6b162e6e3199794L,0xdc706859b4ec0480L,
32000         0x28b618c24b1a06caL,0x0929a001403acdc2L,0x796dfd972da3aefdL },
32001       { 0x16389072ef4c1673L,0x600d8bd7fc94a4f5L,0xf003214de5f386a9L,
32002         0xa7af0499e62cbb48L,0x750a3b00de82bad5L,0x6c615b838e7dc8eeL } },
32003     /* 23 << 49 */
32004     { { 0xe1916cb4eae432e5L,0x81f3e48acc193889L,0x54d58685ba922a4fL,
32005         0xeffcc528bf11b76bL,0x2f70d38f8171c971L,0x547ce8ccb3a5669aL },
32006       { 0x3acd91b878e6d0beL,0x372dbf2c689c2913L,0x9fceb5bbd0aae543L,
32007         0xc601f9622830a977L,0xd55e74509f874dffL,0x77ff8ab4822878caL } },
32008     /* 24 << 49 */
32009     { { 0x283eec26d71543a6L,0x98fa08bea7627841L,0x269a83b827ad302dL,
32010         0x225f2f12bde3fdd0L,0x046fcf380130b3a6L,0xea733c1ac3ed9043L },
32011       { 0xf870f14d70aa08d1L,0x643d18b834391e0bL,0xf3e1d5f4847be772L,
32012         0xa9498223d0ed73a0L,0x6933ccf014b3babbL,0xc2439ae437f08f70L } },
32013     /* 25 << 49 */
32014     { { 0x503414d0f2cb5475L,0x51b9497cb24cbf9eL,0x57359dee2f4c7746L,
32015         0xee7125c3f3118a94L,0x2f0db706e4ea33d6L,0x885e8c3eddff7f63L },
32016       { 0x752f594b628432f0L,0xcfadea7779852e2bL,0x4f733b8ba2ba4b7fL,
32017         0x163c8c2e530f763eL,0xf95a7b57ff05a7e9L,0xd4768d242d7be01fL } },
32018     /* 26 << 49 */
32019     { { 0xb643f4e0f88d049bL,0x5e0ac1fb12682fcfL,0xeaf7874d9f981c8fL,
32020         0x9c2adfd2b1af779dL,0x9a7abeaddaa8c275L,0x09ad552124cacec4L },
32021       { 0x069cd5c40ead1646L,0x5186bf190a6157d1L,0xcc222a9396503506L,
32022         0xfeaa7bdebd29686eL,0xb0d65b0da7257c8dL,0xc31c0a8898aa227fL } },
32023     /* 27 << 49 */
32024     { { 0x5495f21c9fe88a48L,0x01f580ac590c1966L,0x1ad433ba39810166L,
32025         0xecbc67003a5187f6L,0x38d36c3bd4216887L,0x49653585e27b615cL },
32026       { 0x2a70a1d9e773db7eL,0xe36d967a63c1c048L,0x51cba60d26d15862L,
32027         0xb633839fd5a6b746L,0xa6a756a2ec1fc364L,0x37fef8d24cfccb6fL } },
32028     /* 28 << 49 */
32029     { { 0xb4b7651f5be1d45bL,0x0425200a7f0cf680L,0x200d12b48960be95L,
32030         0x02fdd1a14945b193L,0xedd70e3e27d046d8L,0xc1cc086a83f14e12L },
32031       { 0x1580e72b2629396eL,0xc87439dbf9ed73c1L,0x5debdf30a90c5128L,
32032         0x0b6c020e9fbe14efL,0x168da56a0149a0b0L,0xc66a4dbd79c58ac6L } },
32033     /* 29 << 49 */
32034     { { 0x6ecd9c41596b8890L,0xd25172fe210d9613L,0x1ce8abf872b97aa5L,
32035         0x355899d610faa675L,0x003b69adf4ddf011L,0x6736cd40ec2d1af9L },
32036       { 0x8069a0ad4f85ac72L,0x5c31d68b5836cfd3L,0x8e9486eaa5ec1473L,
32037         0x8e175c4a1468cebdL,0x58b3d2b1ffaf2f77L,0x4fd21681a17a3e00L } },
32038     /* 30 << 49 */
32039     { { 0x800aec84330b8e2eL,0x1a2c033e335837bfL,0xf1a91551fe6f6dd9L,
32040         0x326c42b21de7360aL,0x300e740b7b66f9d5L,0x53bcc70068ce95d4L },
32041       { 0xc9e225ac3d80f228L,0x64b2ad4e6977dfdbL,0xac863b0801f23221L,
32042         0x0517a648df11e5f7L,0xbf7aedcb68d11050L,0x2607e33777b3029cL } },
32043     /* 31 << 49 */
32044     { { 0xcb1955e44f4706b2L,0x0821d4663acaed1fL,0xbe822db07f8b43deL,
32045         0x3d11573f9b1c83a1L,0x6c052118201eab83L,0x294c5060dfe340d7L },
32046       { 0x994a4bde0644005bL,0xf1519f3258fa0552L,0x9077bf5bd4d0d39bL,
32047         0xebde1ff0e6204ea0L,0x58a68e09829130a7L,0xda64eb8596961bb6L } },
32048     /* 32 << 49 */
32049     { { 0x1afa6aa6206add5dL,0x66cfbbae150ea4c9L,0x07fb920b5d36da4fL,
32050         0x144d51f9291e774fL,0x26c2c134f40d87a8L,0xc8cf3524a932f1a0L },
32051       { 0x35bb2a425aeb0bdeL,0x5cfcc1dac4be960aL,0x5c40cabfaa1838edL,
32052         0xea0c05ffe2855f1fL,0x931ebb02fd525934L,0x31a7b78f16246fd4L } },
32053     /* 33 << 49 */
32054     { { 0xbe055fead42b36aeL,0x733a05ed819ddf8eL,0xa00fa0a15c9a6102L,
32055         0x0ed363273c0af634L,0x5b5a62b4d5970a32L,0x9d7557dfca954cd8L },
32056       { 0x30314f0c6daf871bL,0xaa7c42a96267b2abL,0xc5d1f0d6132bc62dL,
32057         0x77ac94df7ed26084L,0x0d256fdada34e1f6L,0xf0259d1caa4b4dd6L } },
32058     /* 34 << 49 */
32059     { { 0xf576c69e86ccb00bL,0xc870c07f5781803eL,0x91d4c0c6b1869e56L,
32060         0x9c2729397d940416L,0xdad33f73c4d0269bL,0xe2baf5b8838c9198L },
32061       { 0xd8bb9613218414e4L,0x5e9f7b67c980ca07L,0x1e2d4e63165079fbL,
32062         0x6ae5b17f983b3fadL,0x1e66b8380c24e22dL,0x80cdaec2136e0be8L } },
32063     /* 35 << 49 */
32064     { { 0x98cb12d93fc277f4L,0x81def3ee160b8743L,0xa1f07ebb11711fb6L,
32065         0xba17dd15a95b3ba0L,0xb25f1c78bc158f33L,0x1bb83cf27841e8bcL },
32066       { 0x57ad928abf49233cL,0xc94fd746bdad3f2aL,0xf7c716ae4a4c6600L,
32067         0xdd0e3117060a78b4L,0x85e8851a860764b0L,0x3342d974bce0d787L } },
32068     /* 36 << 49 */
32069     { { 0x2bc4e37a719793feL,0x1543af2aa68ceea3L,0xc99cb391aabdea45L,
32070         0xc890e546f0b8eea7L,0x8b75b91feb4173d7L,0x9d52d04bef46f637L },
32071       { 0x0929f25d878ff734L,0x7377235fb6c43342L,0x657835cf6eca900cL,
32072         0x7b752665098bb5e2L,0x320d09b6b8a61442L,0xec4f8182cf5b8023L } },
32073     /* 37 << 49 */
32074     { { 0xfc5f8feffc788160L,0x7d552625f73f48a3L,0x4eea435145c02498L,
32075         0xb5f5de5bf8f8af26L,0x78f1c499067b1610L,0x6e0d1b14eac18a29L },
32076       { 0xf8be2f6c052af916L,0xd8cee5668876af81L,0x99a27ec31577bd90L,
32077         0x3ac529d242919f4fL,0x1215428c7fc05dd4L,0x99ef01e450f67e87L } },
32078     /* 38 << 49 */
32079     { { 0x145902629d671094L,0x7fef49c166ce858bL,0x2a7ea540c2f21eadL,
32080         0x1226b04fc1d5a636L,0x4fb54e4e535efb9bL,0x6c51cdb91d72bed3L },
32081       { 0x94162e44938efaf6L,0x166013cfaf6f5697L,0xfa9495bddf95f9c6L,
32082         0xc05441cb0d7f8406L,0x7e5c89763a233ca6L,0xbc75dc6493fe8e42L } },
32083     /* 39 << 49 */
32084     { { 0xe1885cf128ed669eL,0x6e9f40dfb428b3cdL,0x412388a61626f8d0L,
32085         0xb8201f047cbcd192L,0x642ecfad70ba644bL,0xd43be1cb43c76bb7L },
32086       { 0xafafffc388f4bd51L,0x8c40e2787052eea6L,0xc1a84e866a4c8776L,
32087         0xf0201f292fe7075dL,0x132f80e4576af421L,0xe0831b7f4731dddbL } },
32088     /* 40 << 49 */
32089     { { 0xecfabd2742dbb68aL,0xad43a2c43eb546d1L,0xcf4e64ccfe2691c9L,
32090         0xe3889e258347566aL,0x48da354885b8c733L,0xcb7fe0679d9c9f57L },
32091       { 0x8c26a8d668223280L,0xc1e8ff623065705aL,0x181ca70a3f8db9f8L,
32092         0x25aa6450e758213eL,0xa4898f9169b2653eL,0x5e5c9fb4ccd8303aL } },
32093     /* 41 << 49 */
32094     { { 0x640b6946b03aa213L,0x6b99e84d00c068f7L,0xed4f1d2d99c5c461L,
32095         0xcec88724b20eaffaL,0xdf2b79a95dbbc32cL,0x2f7397054f3a1c5bL },
32096       { 0x1594a54946eb52edL,0x55f11aad39c4c43eL,0x0fcdb331f46500f2L,
32097         0x0d66be885ceb8dbfL,0x4d977349886dbbf1L,0x238f4617797d1b41L } },
32098     /* 42 << 49 */
32099     { { 0xfc8c7320721034d4L,0x48b389db60264280L,0xac246988649cbd88L,
32100         0xb7f52891a50bb658L,0xc0a812e50a7f279dL,0x6593175967fb2cffL },
32101       { 0xd31a77c6661ab439L,0xabadcea00ceb4aceL,0x201d98f6a3702dddL,
32102         0xcec1e83e7c9463aeL,0xc64e44fbc55e6856L,0x421f3e3148aa0d81L } },
32103     /* 43 << 49 */
32104     { { 0x4f0b251871a07c6dL,0xbfe652edaf3a2fbdL,0x5f68dc667bc2053fL,
32105         0x445df84f6040a7cdL,0xbdda2132180dc0a9L,0xd8627401d6c7a92fL },
32106       { 0xba350cb190cd2c73L,0xaf4c1e5929886ab4L,0xee8fdff2d677399cL,
32107         0x3ce35c6edaecf83fL,0x44df0a300f114062L,0x1b633b4647f29868L } },
32108     /* 44 << 49 */
32109     { { 0x48483f6af58ae2c1L,0x70ba34635e1cce49L,0x5f7a1c6d33907532L,
32110         0xa0fab701875a5f3fL,0xf2e8b0ff85d387e1L,0x0076aa68ff349689L },
32111       { 0x6e392b02747e2fffL,0x5e1ea320e788d577L,0xba705bd7713a0b03L,
32112         0x04ef192f2dc2cbc5L,0xa5a14eed38aef8a2L,0xf9682bbe30a268faL } },
32113     /* 45 << 49 */
32114     { { 0xc04f2cf540244a00L,0x00c90c3bb8dc0ad2L,0xac5b1060601d76f6L,
32115         0xad97c5c1a7ff84ecL,0x7919a06dd2328101L,0x62d5b7a4ca8a69c5L },
32116       { 0x75607148de5a2cc9L,0x1afff7f79a75fd24L,0xe62efc8083a22367L,
32117         0xad08258a10e05e36L,0x22666e06c0e4b549L,0x15f62c613f4c48c2L } },
32118     /* 46 << 49 */
32119     { { 0x751affadc7b8da09L,0xc052109dbd8e45d5L,0x7d11aaad87c14560L,
32120         0xa0410b2a6b690121L,0xcabad9853e10a103L,0x4d19bd3e785f1bfeL },
32121       { 0x8f32c6b84b6167a4L,0xb21d4ec297b4f546L,0x2e26df99c008f7c7L,
32122         0x63825597eb347720L,0x6a05b375afe39fc8L,0x19790b92131201a3L } },
32123     /* 47 << 49 */
32124     { { 0x149347ff7780729eL,0x076b4edc62e2dd48L,0xbf0de9d7cdcec866L,
32125         0x9d75deab8fa1e18cL,0x10931716eecb1f4fL,0xa8765dd3a385eb7fL },
32126       { 0xfd26f39c4d70651cL,0xc501caf48834c723L,0x1d263a83a65e5093L,
32127         0x57ee2fb96f709deaL,0xdae3dcc645091321L,0xba0665a906a60a48L } },
32128     /* 48 << 49 */
32129     { { 0x517d13b1784d0621L,0x2db4ef27d77b84beL,0x6e2e26866d752aaaL,
32130         0x95da9fa1cab02667L,0xbe8d91ad423163c3L,0x8f3d59dba69953c9L },
32131       { 0xf728b1d2d6e635aeL,0x5c4c177deeea663eL,0x97a900a82e75d9c2L,
32132         0x136c6b1e3ad09defL,0x4bab14a6dd8a2be8L,0xa4ee903025cf1447L } },
32133     /* 49 << 49 */
32134     { { 0x05f93697a5235c12L,0x434f91026943a0d0L,0x92696b701a4d3169L,
32135         0x0a9da44b8c3b1ee5L,0x327f9f79d295521bL,0xf605cb83afd8aa40L },
32136       { 0xe3bd4ab5d365fb37L,0x6c6a470ce984ea2dL,0x7ad01e6b392af60dL,
32137         0xbef2dffd5ff8ee6bL,0x4e56deb722efc2ebL,0x1b90570ae14ff270L } },
32138     /* 50 << 49 */
32139     { { 0x70718d8e333cd9e2L,0x858c880c6b03a371L,0x5b7f69a5926a3dd4L,
32140         0xedbed135572f420fL,0x740a21e6332aaa09L,0x665aff63fecf1e3dL },
32141       { 0xd884a3c1214490e9L,0xed70c29a63cdab1fL,0xc92dfa58786e274bL,
32142         0xa5395591d7fd529dL,0xacdf81ac3b95b61fL,0x07f801df40cb45a0L } },
32143     /* 51 << 49 */
32144     { { 0x4f863ad59230d44fL,0xd176d2764a099825L,0x4a6868745a43a7d8L,
32145         0xbcab3548fff3e8dfL,0x15028cfccab2c7e6L,0xad077a8874a91fb2L },
32146       { 0x015700d39eee3e32L,0x524ef9c7386e489aL,0x3be1771b60285f8bL,
32147         0xe4a5353cf9c33beeL,0x0aa0f2ab244ad683L,0x04e846f98a4c0ed6L } },
32148     /* 52 << 49 */
32149     { { 0x326a204790f55f13L,0x194d24db53017b29L,0xa26db785cd4368c3L,
32150         0xd58943e8238d7518L,0x8e06f8cc3527387eL,0xebc6dc9e071846d4L },
32151       { 0xbfc08dccc541e098L,0x3dcf0713e4fbc9a4L,0x44e9ba7869fedb43L,
32152         0xd867cf784fa012a0L,0xc618b2b88733ddf2L,0x4149fd48a737fd5cL } },
32153     /* 53 << 49 */
32154     { { 0x5c4c2183179b1928L,0xc54d315d0439876cL,0x07d22792f7495bceL,
32155         0xd378185e3bc32c4aL,0x8539aab65b31c5c9L,0xc72b1ac640dffb35L },
32156       { 0x46bb918a2e8d6ae2L,0x102c49f9e8a1d7a1L,0x7c622793cd2764d3L,
32157         0x5bbc6f023c7aafcaL,0xa41f383bcff71b4dL,0xc8a0e1a9aa99bf83L } },
32158     /* 54 << 49 */
32159     { { 0x323aad4991d6b8f3L,0x91b678c0f3d9154eL,0xc141e2424ce74f67L,
32160         0xb7c38aef65659ca0L,0x5b5f89b174a937e1L,0x739fad71abc55012L },
32161       { 0x315ed44ccee5f4fbL,0xb0731455360a61eaL,0x39235ff0ee93ce5aL,
32162         0x6352556fd203baf9L,0x3c22dc6a0ea06b93L,0x195638cb591bbfa0L } },
32163     /* 55 << 49 */
32164     { { 0x8bd5a15359ad0688L,0x827e82d8a7323070L,0x9ea55b3af70686e5L,
32165         0x511c8c3f34c2d054L,0x9364d28aa14a3c61L,0xc4dff9c461374139L },
32166       { 0x947c3ec9a39c01c0L,0xead11d42108440bbL,0xcc6d893569677f79L,
32167         0xb1d632710b9b4823L,0x2cec325e63b154e0L,0x45e97c3814a85b9cL } },
32168     /* 56 << 49 */
32169     { { 0x11b59f3e92acd14cL,0x188c1bb1d7aea098L,0x5cadf0a19365958fL,
32170         0x8fef04fcca0b1b0eL,0xbcb4d9fb0c274a5eL,0xe97eb41cba78427eL },
32171       { 0xc49f0bc55cf06378L,0x2681f12a281b669dL,0x200e9e583f796b81L,
32172         0x5bbea92b17964262L,0x86b3c15756db0039L,0xe4477c5eead482baL } },
32173     /* 57 << 49 */
32174     { { 0x1340e22c050fc1faL,0xd5cc5445bd062615L,0x03ad31601f494b03L,
32175         0x612919142af1b95eL,0xdb31a06d53705ac5L,0xf590433ad07ae464L },
32176       { 0xed52363421bbbd72L,0x1f032ad2f1cc7842L,0x212b1d5536a7164aL,
32177         0xc2cedab7dd973183L,0x29aeeee05e74ada3L,0x579984d8bb666836L } },
32178     /* 58 << 49 */
32179     { { 0xbbe5db83e13d34d3L,0xbae5ae959a8a3344L,0x55d2f0ac797d6e35L,
32180         0x75e78c017cd0abb0L,0xb757f72cbad96294L,0xe52493895d556f25L },
32181       { 0xc02293538e7675dbL,0xc363c5255c8beec5L,0x7ac23c0b7c87ee00L,
32182         0x9c5f22b4a7de93f8L,0xc6f0ea64d9644b5fL,0x3fa718d4d161f87eL } },
32183     /* 59 << 49 */
32184     { { 0xe8496c463f356cf8L,0x25b5b8742da1b81cL,0xa35ec06330efa9c9L,
32185         0x7497d85ffdaeb348L,0x312ad677e83f49d7L,0xcb5c346cfe8aece3L },
32186       { 0x19d7332d61cd4ebcL,0xb03dece0d0967141L,0x47dcb81af5455addL,
32187         0xbef0e70389ca68d4L,0xf7abbeb9c987400fL,0xbda81c65a1521da1L } },
32188     /* 60 << 49 */
32189     { { 0x535f3e4b86882341L,0x5af1c6322e22600fL,0x0403b6e0584a13abL,
32190         0xa64de86661f59ce9L,0xd22106f738501b92L,0x2932f808ab6ffd04L },
32191       { 0x8da4cc6e232967f2L,0x4b8fdd9ef3644670L,0xe8cb6ef31e0c51bcL,
32192         0x20b7b734230c6897L,0x5009176453d9339aL,0x5f5c8c67ca637277L } },
32193     /* 61 << 49 */
32194     { { 0x23e333d467232358L,0x3c2807bdea037380L,0x9439cc4626f1dc2fL,
32195         0x8c87dde53ac29173L,0x601b7245766897a1L,0x9e0b1a4559350e3cL },
32196       { 0x0818b6cb301db407L,0xbdc4584676b6fbf3L,0xeeca553431bdd954L,
32197         0x1dfabc033f9be3bfL,0xdf0415dc68851bd8L,0x33be32a67aa9dfa8L } },
32198     /* 62 << 49 */
32199     { { 0x8c9017dd4b4e4b5eL,0x02f435dd7b892b2eL,0xe9af9efd292e0f2dL,
32200         0xa32124c75c4d315dL,0x5c6fde76b31a390dL,0xf1fdcefaa6e46d3eL },
32201       { 0x5f39dbfe9e9e84b6L,0x574d647d19aab6b7L,0xd5a234cdad1a2987L,
32202         0xeab841c7dab59c81L,0x5155898db3137b90L,0xc52e9ddd06db2fd0L } },
32203     /* 63 << 49 */
32204     { { 0x8617f0d490660ff7L,0x00d73d108b35743eL,0x433e42d68a6ca67eL,
32205         0x575ecb9beab5cff6L,0x4c64bcddf258960aL,0xb8ffb7f32c23405dL },
32206       { 0xa98c06691261b0c7L,0xf2701f4a6b9bf7c6L,0x3abe44c41c68efc3L,
32207         0xdb5ac9cbf12c7a25L,0xf5b4616651120981L,0xf8058f7074d518f3L } },
32208     /* 64 << 49 */
32209     { { 0xcd92906c6d6ae962L,0x628356159807d881L,0x0d6929781fdc1915L,
32210         0x45d01a8c269d611eL,0xe7bd1e709665b00aL,0x086385349bcaa388L },
32211       { 0x8f189e882dd24299L,0x5f643392b82fb270L,0xca65bf16c633b111L,
32212         0xc6adc9c9d6f1dac8L,0x0df2c293a3c3381dL,0xdd6ae97d8388cd12L } },
32213     /* 0 << 56 */
32214     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
32215       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
32216     /* 1 << 56 */
32217     { { 0xffdbd0eb3863db02L,0x8b8256832f57e10fL,0xc11acead35e7a3a2L,
32218         0x4998cf8c67833028L,0x8f3a346b844c7976L,0x0a9d872cdb9b1a1cL },
32219       { 0x8735dabcb98d445dL,0x93790d80305fa0a9L,0x7c0add49d267a01aL,
32220         0x2b46c913ffa20d11L,0xf2acef26d8ab2d4aL,0x71b701b93d926080L } },
32221     /* 2 << 56 */
32222     { { 0xe9d2a98a5133de8eL,0x37083b60b81b8b00L,0xf399325dceaf86aeL,
32223         0x03b17c888f161525L,0xd8ac35c984211b9dL,0x220837849050ca48L },
32224       { 0xa818c44bc9fab832L,0x8882bccee5aea7daL,0x633aaf35f8715b04L,
32225         0x5463e1b99d8829a9L,0xb18df52d84a820f1L,0x9d5ef891d096675dL } },
32226     /* 3 << 56 */
32227     { { 0xd54e2c7cac60496dL,0xc06d5e5d04cd50a4L,0xcb4105e8e60f7f59L,
32228         0x705db308427483adL,0xf73ba98bf2bff383L,0xa945611a0220e6e9L },
32229       { 0xc01c46b8d957e12bL,0x458897b7acb1f371L,0xf738dc0bfa3403e6L,
32230         0x098bc687d2202896L,0xec0c217a5f882e5eL,0x8f25af77a1f4eb13L } },
32231     /* 4 << 56 */
32232     { { 0x2615c78259ee4124L,0x4dc2824c76532b4bL,0x9c3b1d771c84a04bL,
32233         0xb6fc203fcb9f9e34L,0xbed65464c64f7846L,0x04f520a2eb004248L },
32234       { 0x5c0177274a58fd22L,0x25958482c10d9472L,0xb78c6666aceb0e3aL,
32235         0x18d3c188fc046f0aL,0x7f3e2f301baa9595L,0xa574f8cd8a2844e8L } },
32236     /* 5 << 56 */
32237     { { 0xc899eba381c2d81fL,0xb27267d6f3f0a431L,0x607c8629da55568eL,
32238         0x6b5472282b1dc1d9L,0x23232311c9c001ffL,0x207a2eb2488f8b85L },
32239       { 0x3867ac9adac37a28L,0xa36d14d32584a5f0L,0x7398c647a74488ffL,
32240         0xf6ed920fbe087640L,0x72beddc76319a571L,0x55c2cd826a244aebL } },
32241     /* 6 << 56 */
32242     { { 0xb7da79c625f8a53bL,0x6b950bdfd331ad8eL,0x3481b7b54aa36d18L,
32243         0x6efeaf88ed0e3091L,0xeb017bddc993074cL,0x8431a6d6529dd654L },
32244       { 0xf5177231bd069585L,0x6d753b103ce85096L,0x194d82d34ca26741L,
32245         0xeaeffe15adcd1650L,0x4dcec3d9af7758b7L,0xf5fdf6664cc2c819L } },
32246     /* 7 << 56 */
32247     { { 0x94bdc7f4a9810744L,0x464195daf045d859L,0x27e2dab0d654cb57L,
32248         0x1d4e1e537a491956L,0xa1ef570c31d5d099L,0x01cd21ee295f3de7L },
32249       { 0x8681b00db8249038L,0x17c31bce93781b71L,0x4324e90c6a1b5748L,
32250         0x44f9324c1222e554L,0xe30ba10fffd53dd0L,0x2e5817a8b48eeef0L } },
32251     /* 8 << 56 */
32252     { { 0xa349bb66c8fccaa9L,0x7888755f31a53ee7L,0xa6e1d891c18d3750L,
32253         0x9985aa4dae8d2bfbL,0x8baec9ae31b33078L,0xee68295a98750e94L },
32254       { 0x0d834bf8d6ddf305L,0xab33dff39762126cL,0x0c22faaa0c51d098L,
32255         0x32404042b887a10fL,0x31f6a614248bed32L,0x311f86301ce0d662L } },
32256     /* 9 << 56 */
32257     { { 0x5c95cf080d844b0dL,0xe09a8352c98650c9L,0xc1b106c5d089058eL,
32258         0x2b3cf101eb0c6107L,0x1993fdba3ce6ee18L,0x7234eb6425fc4d24L },
32259       { 0x8345acfe05f46dfeL,0x07fccf68a2d87d38L,0x14494cea85da7852L,
32260         0x8737500acecdd9f1L,0x72b1490ca39068ffL,0xce28271acfa4469aL } },
32261     /* 10 << 56 */
32262     { { 0xc872326f55c6c00aL,0x6a5f0fa3f912decaL,0xf4ef0ca5a7d1bdb1L,
32263         0x1dee685b37dc6bebL,0xdad4cf52f1b09b88L,0xc7199f0277f1db84L },
32264       { 0x7099ef00a3f00491L,0xd8fbbbfa6d8804e3L,0x2a00b8e50ae1e360L,
32265         0x8a8c9d03fe9be5dfL,0x06e0585b8b1faf6fL,0x19542ee7ae29c502L } },
32266     /* 11 << 56 */
32267     { { 0x36cad867e2aa1c5eL,0x7ef21e51317f9078L,0x68efbb84c82e925fL,
32268         0x973b36769fe751e0L,0x09c4e0c1177d36a7L,0x9c0b7e048a753c5eL },
32269       { 0x8414cdab15ccad5cL,0xeea2134ed50c1678L,0xd9c1dae8f6585d5fL,
32270         0x82fd04ab4e5c3d96L,0x868cddf7da3812d3L,0x32a65aeafda07e68L } },
32271     /* 12 << 56 */
32272     { { 0x73292e6a60720858L,0xe046a79953160855L,0xf74d56c9ed3b94c1L,
32273         0x0e371167c67863e1L,0x19b3a9f43f6636cfL,0xe624798d898a25b0L },
32274       { 0x2ed1fc4dfde2cd6eL,0xd9a7ab519fd15ee5L,0xb6b8d551c487b1cdL,
32275         0x9fec705ae8936c54L,0x4b779dde1a50e094L,0xfb5100c2c3a4ef5bL } },
32276     /* 13 << 56 */
32277     { { 0xb35a7b102704c525L,0x8a77fa5b44276cbcL,0xb4a9cd235ff1a12cL,
32278         0xc74a017c88a37997L,0x84e26eea9af37476L,0x8a6b8c0e7bbf737bL },
32279       { 0x90ab7c948f05bd3eL,0x31749075464f3a2cL,0x32f7873c1dcfbd25L,
32280         0xc0af73d343bc2054L,0x556c4798171d825eL,0x2c84b5b6081542f8L } },
32281     /* 14 << 56 */
32282     { { 0xa5907e5c59ab2507L,0x12b86e04cf7df60eL,0x0a14bed18af4bc50L,
32283         0x462863b20c11bac5L,0x98dde284126958dcL,0x8877e7695625eb29L },
32284       { 0x869f7214f4fe19e5L,0x29867e51ec0f8c1aL,0xbf498bc078b85f03L,
32285         0x9dda400e8973a94eL,0x8d8b998ae6e51b1aL,0xedb0957c557ac00eL } },
32286     /* 15 << 56 */
32287     { { 0x84b6d5143b7d43f2L,0xcb84c823afb7a2b9L,0x892e8c4c56d2b161L,
32288         0x52ea7426214fdc0aL,0x07f3d57679763557L,0x9f95fd585a828bb3L },
32289       { 0x2c7f03d550e14019L,0xab723de7d7eae7b3L,0x4c08189317f4ea6eL,
32290         0x64cc5bc0ec367246L,0x73077b5ddf11c3b7L,0xfa34b540e08eb4bbL } },
32291     /* 16 << 56 */
32292     { { 0xac6dbdf6edc9ce62L,0xa58f5b440f9c006eL,0x16694de3dc28e1b0L,
32293         0x2d039cf2a6647711L,0xa13bbe6fc5b08b4bL,0xe44da93010ebd8ceL },
32294       { 0xcd47208719649a16L,0xe18f4e44683e5df1L,0xb3f66303929bfa28L,
32295         0x7c378e43818249bfL,0x76068c80847f7cd9L,0xee3db6d1987eba16L } },
32296     /* 17 << 56 */
32297     { { 0x254ed267050f46f1L,0x36786ff864daa83cL,0xb4a89efc802a3ae6L,
32298         0xe0027b3486b77d59L,0xb7147905f48d0de6L,0x00733ca710cf7c60L },
32299       { 0x87efbe387b3ab776L,0x3db10898de9730f4L,0x61f21e1386b7a40dL,
32300         0x5541873648455b6aL,0x0de378f9a88587deL,0x42dead7a766d18f1L } },
32301     /* 18 << 56 */
32302     { { 0x42b8ef51e15ad876L,0x498886e5082e110aL,0x3144e8c964edbd73L,
32303         0x4b08cf86f79e6724L,0x42d06d53ddfdb6a5L,0x4c9dce336d8b1f33L },
32304       { 0xbb8913ae4be29e97L,0xe944c922166fdcc4L,0x83913b963c494e9bL,
32305         0x529d57ac633a0018L,0x632a7cfd242e7d9cL,0xf0e2434dd9b51d08L } },
32306     /* 19 << 56 */
32307     { { 0x74768ab044ff52cdL,0xa590ac7eead09902L,0xdc408c53f52c0f5fL,
32308         0x614a22d6f853efbfL,0x61f391c425126427L,0xb61adcfcbf462fbbL },
32309       { 0x7b753aaaaffdbe78L,0xce12b2247bea939dL,0xca21f73e95baf09bL,
32310         0x2a82915e43ca9ebeL,0x67ba04f57936a38cL,0x1c1964f1616b0b87L } },
32311     /* 20 << 56 */
32312     { { 0x4dc628c67cb2ec48L,0xc896f99c0cb1e9d2L,0x399ac2e85cc6134bL,
32313         0x5ac36de184ba73d0L,0x66a334a3e1803832L,0x394af7ea59b770c1L },
32314       { 0x3df19e55b46f793eL,0x97aaec84bf770a95L,0xf52068b8f8c54408L,
32315         0xb6f7649f49e05f0fL,0x54d8db0583360826L,0x24748fdf71af722fL } },
32316     /* 21 << 56 */
32317     { { 0x68f4dd4956c29111L,0x391ac9910dac9352L,0xb0a8a54206dc9d58L,
32318         0xb5058ed8fbe70330L,0x8b5e9d4076b593bfL,0x769fb99cd7f2b261L },
32319       { 0xcdcbb60ec67cce8aL,0xe01a5d5d75da36dfL,0x7e831d0ef7c6e5cbL,
32320         0x0f6bf54bccdeef00L,0xed49ad3998ba4d8dL,0x8d512c83614d70c2L } },
32321     /* 22 << 56 */
32322     { { 0xc1910b2545b4f6e5L,0x54c6ee8489fb712dL,0x80b6fd47f5747ba2L,
32323         0x3d81e7efd6d4f856L,0x8b9e87418031f1bdL,0xc591d451f2327316L },
32324       { 0x4830d9971e0f1c1fL,0xeabe29bd86e92024L,0x2f2053a1b8c68d7eL,
32325         0xff4eb9e879d00ad6L,0xa0c93249f4b4cd89L,0xe127d9d3cb9e0761L } },
32326     /* 23 << 56 */
32327     { { 0xeb947df3492d73ebL,0x5474817b0d32c2ddL,0xeb01bef7a9440e93L,
32328         0xf604581d8085d1f8L,0xf69daa189f69ec8aL,0xc79ac48e71748716L },
32329       { 0x5141c75ad4beef28L,0xf7dfaf89901c44a6L,0x7bcbe4812e81ed85L,
32330         0x57ed0e6f0c5a4423L,0x7cf189651cec85a5L,0x8ddfe8a5beef12b0L } },
32331     /* 24 << 56 */
32332     { { 0x60ee08b46bc0b979L,0xa31cfd961aba7f4eL,0x66c05a6358bedf51L,
32333         0x2ae6ec3854df9266L,0xe7dbda332771b08aL,0x44455d312a09fb28L },
32334       { 0xaaba39171cec98a5L,0x9b2b12258cb543d0L,0xf47a9cd16af6495aL,
32335         0xe207f3aac6cd8a16L,0xf98952878ae828b6L,0x37e2475725844053L } },
32336     /* 25 << 56 */
32337     { { 0x7c8137d8f93723a2L,0x78fa2e03cf552846L,0x3becd2627d11977eL,
32338         0xdbc8e9b34e9a700eL,0xb2c7798d20decdccL,0xecae57179523bb6dL },
32339       { 0xc0fec0677fa2f633L,0xe270b10702aab6a8L,0xda280b374dcc797bL,
32340         0x50a163b86c42945dL,0x4a3fd6bd363e44ceL,0x0aa7e33d38bca4e6L } },
32341     /* 26 << 56 */
32342     { { 0x19c7f098a693d0aaL,0xb79d84244bd22a29L,0x19d91d12a9b3c2ebL,
32343         0x2ae96bfdde735665L,0x2f9c9a773d8a85bcL,0xa74bdd46cbab80f5L },
32344       { 0x25a2486cdd9f70f0L,0xada155c9754513d5L,0x8aecd7db4c3e9494L,
32345         0x9c3951ad2cf6665eL,0xd35780d44a9ec29eL,0x064983964cfd7821L } },
32346     /* 27 << 56 */
32347     { { 0x23407aac0834f890L,0xad7b7b5599bb065fL,0x3254aa7e4ba2b4ccL,
32348         0x37f37fd1663f9213L,0x0c72c3111c5a51d4L,0x6e6df84b9989820bL },
32349       { 0x576a320e1ae2f321L,0xa5fc617c3c62888eL,0xc4f1be4df6c40362L,
32350         0x01b21892dbfaa5b3L,0x6fc0442390b9a5e3L,0x22a70c8791495c30L } },
32351     /* 28 << 56 */
32352     { { 0x365e1382183aee81L,0xe9f2245275d289c8L,0x543cb5c7b70962e2L,
32353         0x853971711cea2e37L,0x8b31cf530adfc82cL,0xf9a458bf3b67c705L },
32354       { 0x13b1cb3334a9b3a8L,0xa4325b403732f6b5L,0x39e997ba04e9df8eL,
32355         0x24c0d6ebf1d542f8L,0x9cb3f1abd82901bbL,0xbbaef37a4cb34763L } },
32356     /* 29 << 56 */
32357     { { 0xc4881080b08dd648L,0x21869be8f1fe4e15L,0x63e158b112501ea3L,
32358         0x48a909ce32408693L,0x77fd2cf062b24495L,0xf7d1e134db9322a5L },
32359       { 0x4c02c8bcbdb19eedL,0xe03cd00e8a20b335L,0xe04271c530632562L,
32360         0x549e5dba603e1681L,0xf01b38f95503b61fL,0x244c81920b3fb785L } },
32361     /* 30 << 56 */
32362     { { 0xb423030c4b0c7247L,0x242d409f149f8cbcL,0x6094885e9c1f518eL,
32363         0x6d299dffe04d97ebL,0x152d05bb09903069L,0xf5656895fe235dddL },
32364       { 0x801e7f736b22ac0eL,0x73aa6df46ba6dc97L,0xba498bc0d66e5d8cL,
32365         0x8054e17d36b8c78eL,0x241bd2e21137fdf1L,0x8e79a943b97dec15L } },
32366     /* 31 << 56 */
32367     { { 0x94e617abeb64269eL,0x39aef936b410ae02L,0xdbb744c325fcc976L,
32368         0x5072bfab38a5b366L,0x3998aefea3f5d715L,0x0bdbf555a74e281dL },
32369       { 0x50d2feece24dd239L,0x835925ef46324c5cL,0x53c4eece7a4dad08L,
32370         0x340fef207c358d83L,0x9e2189da30f04396L,0x2bc748d727e322cfL } },
32371     /* 32 << 56 */
32372     { { 0x1238e097ae658422L,0xb4631ddb568df55fL,0x451254e7f74c5c50L,
32373         0x238b16d28805813bL,0x23987b28925e7a6eL,0x93b72e2d2a1a10bcL },
32374       { 0x944c784d05e44b7fL,0x7d70fd098c8e3120L,0x6bf1ab2aead45716L,
32375         0xd5f8f0e631c04205L,0xac062526a10b8881L,0xa1a83cf0fe5505a8L } },
32376     /* 33 << 56 */
32377     { { 0xe1e05ff89ea47326L,0x88219a1ffbfc7f61L,0x9cbd0b387dcd3008L,
32378         0x751d03847671a68eL,0xd73ed70d28e0387fL,0xf66f9cfea9485256L },
32379       { 0xac68aae1ae153e0cL,0x92eb6542e81b1282L,0x9617d45464541adfL,
32380         0x81b4d94a9d489e95L,0xafd5cd4620f31ba0L,0x35700392e5a38941L } },
32381     /* 34 << 56 */
32382     { { 0x52296be3b71ea9c4L,0x82b05a43424cadf9L,0xb6d329e8842699e3L,
32383         0x9dfb91bf9370f2c1L,0x0188b738994ecc71L,0xa9a7b03b5ce8b100L },
32384       { 0x99198b2a25c33035L,0x772795a7e21895d5L,0x37dafa4c42173e01L,
32385         0xd37f03933ab27d91L,0xf3500a7d2afad1f3L,0xa433b5fd87eac06eL } },
32386     /* 35 << 56 */
32387     { { 0xdc193cb5243a97bfL,0xe367f27ff5715184L,0xc4bb95c6fd9120c6L,
32388         0xd2bd176bbc5f7ba2L,0xf2c0f86de966c1deL,0xc69ab26e811e70cfL },
32389       { 0x95756460e87c55f0L,0x6b62ab136a59c832L,0x6e971c6c128448a0L,
32390         0xca72482e91ea44a3L,0x2602d4795dca0f8bL,0x8dadd3e25519433bL } },
32391     /* 36 << 56 */
32392     { { 0xfe0553be23246f68L,0xccc1d774d8ad4128L,0xbec668d8cc155edaL,
32393         0x7a80e9b44231506cL,0x579cb5f42aa1740aL,0x3a61b84fd8b35a2bL },
32394       { 0x0478c05ba3b519f8L,0xf518ac09acfe39aeL,0xabc15e9076c956e6L,
32395         0xff35db67dd55d268L,0xbe066679bdbba89fL,0xf7385df12062b845L } },
32396     /* 37 << 56 */
32397     { { 0x279d7ffdfc12078dL,0xeb14155eb8f302e9L,0x5f1b11e165b3c14dL,
32398         0x08510b461bd36b3fL,0xa7f5b2ffc9d73b4fL,0xe5e831557aa09e40L },
32399       { 0xbed67135cc3d88d8L,0x7b2775f7017a43d2L,0x9ce22ff24c58cb64L,
32400         0xab88d04849ede1eeL,0xcac13762da63daa8L,0x70662331b1dbfc4eL } },
32401     /* 38 << 56 */
32402     { { 0xe4f7022200a8a9adL,0x8d1bbab7d42fffcbL,0xe024970e368ad5edL,
32403         0x231ef631b4c0c9f8L,0xb47ca0386760b411L,0xe1f297ff179e6d44L },
32404       { 0x2e5ec77d3e071736L,0x90e20be915b29c93L,0x33961b6dbb7e7237L,
32405         0xa854df5b42176851L,0x67d223e4a8f4bac8L,0x5464a46f0dee39fcL } },
32406     /* 39 << 56 */
32407     { { 0x525a553b32230b65L,0x7bbde6b816bb6a4eL,0x2f5bc6d229f12292L,
32408         0x5d86858045fbcff9L,0x6ce4fb249f932964L,0xd7cd175098e05ef6L },
32409       { 0x794b0248e1366d8eL,0xa37afa66332098a0L,0x2dcc1888d9aac70cL,
32410         0xa01ba83ec15b9fb8L,0xd34ddf851df4b59cL,0x92289e954f829510L } },
32411     /* 40 << 56 */
32412     { { 0xdec879d51c9d09f1L,0xdfa9e7d61b371576L,0x8c705c7937fb3410L,
32413         0xd770153e1f2a02bfL,0x208fc8f18043ba69L,0x58aebe6e25aa3453L },
32414       { 0x191b69e512941f03L,0x27dbb050d7966e0eL,0xa5196bb7d16bc20bL,
32415         0x5b6bae47f22b30b2L,0xbddcabda8ce7b419L,0x6e3cfd373b9f5a39L } },
32416     /* 41 << 56 */
32417     { { 0x605d4b83330c07f8L,0x4dbe47646a0ed45fL,0x1e715823d7e4163dL,
32418         0xe337a67dcea3306dL,0x55abf0684f18a604L,0xaaf69d5ea9f57370L },
32419       { 0xddd09e8129784840L,0x17fd42b9a4fff5e9L,0xe99859e55acee616L,
32420         0x41d691203b927ed5L,0x35cc99675168f505L,0xfc311c24431d7d60L } },
32421     /* 42 << 56 */
32422     { { 0x415f7f0da581c54dL,0x67c678244509f31fL,0x36fb92eb988f449dL,
32423         0x22d41b1a94181fe4L,0xacc68410df896026L,0x4a10e46f9ccc4df6L },
32424       { 0xf805a1191969cf2dL,0x7230a26b32ad355cL,0x9d200562e9abd845L,
32425         0x2db90c3b5cb55349L,0x80b59daa29bcc42cL,0x81272ebc53d32149L } },
32426     /* 43 << 56 */
32427     { { 0x6aaf15f27756bcffL,0x5391bc009b645589L,0x46cc4480a6fc61a0L,
32428         0x6fde9d53293d676dL,0xd6c35628d7618399L,0xdda13a0853daac23L },
32429       { 0xb6e6c20c0fe7995dL,0x32eb3468d8d41d55L,0x8927d508c19c5995L,
32430         0x3907eeed3c229e66L,0x509af79f27972057L,0x8a7f44f750e2f170L } },
32431     /* 44 << 56 */
32432     { { 0xb91ffd21c87b3fe1L,0x0fe8389b34fe2825L,0xe22d45d74bf4c8cdL,
32433         0xb575ae4cd6d8308aL,0xa7fa552e82994ba8L,0xfb67a86fecb08870L },
32434       { 0xc3bebdf8e6dabcb1L,0xef18b357b5bcf114L,0xed518499a4b8eca5L,
32435         0x0fec83c5df16ed99L,0x5d353a5856b5649eL,0xc858c1d1cec900e0L } },
32436     /* 45 << 56 */
32437     { { 0x7a65d2660d85e627L,0x96170bb90bc010a3L,0xaa6e0055da030ad9L,
32438         0xa75ab280ff4e4a8fL,0xec14e68c0be864a3L,0x05424b9cc17723b6L },
32439       { 0x9ed54bb218ca85d6L,0x035edc14b78b34bbL,0xc116914929617416L,
32440         0x0a00e0086cb0d801L,0xba40f1207d4a638fL,0x54b1e8cc9d8bd0e9L } },
32441     /* 46 << 56 */
32442     { { 0xbbab4ab54c88db57L,0x68dbee6f9ee9558aL,0x31b988e140da802fL,
32443         0x9d117c37e90b2221L,0x443ae099025b66c7L,0x8568bd6f2538a654L },
32444       { 0xf806d8636720df01L,0xe390adf2b649ad8fL,0x7851f8e039d1c315L,
32445         0x8185ae1a5e650f1bL,0x3dccfc4c9b562532L,0xae99ae835f427c40L } },
32446     /* 47 << 56 */
32447     { { 0x99542ca7564c7ad5L,0x682eace49a96f25dL,0x2d01b2488d933a6cL,
32448         0xf96916ddb8604277L,0xad3259d12e4d7419L,0x9085251fc26981e5L },
32449       { 0x848219363d2ec970L,0x723ea6a5392351c7L,0x3fae69a55e5448c8L,
32450         0xf6eee650dfb03d49L,0xe2e1df1ef8c58715L,0xc603b61f1a369206L } },
32451     /* 48 << 56 */
32452     { { 0xcbbd8576c42a2f52L,0x9acc6f709d2b06bbL,0xe5cb56202e6b72a4L,
32453         0x5738ea0e7c024443L,0x8ed06170b55368f3L,0xe54c99bb1aeed44fL },
32454       { 0x3d90a6b2e2e0d8b2L,0x21718977cf7b2856L,0x089093dcc5612aecL,
32455         0xc272ef6f99c1baccL,0x47db3b43dc43eaadL,0x730f30e40832d891L } },
32456     /* 49 << 56 */
32457     { { 0x7f3a3e5f4447ed08L,0xa6302f7bf94d49d0L,0x94fd2ad33b2abc46L,
32458         0x98ffc01fe4249c1dL,0x6f3a53bf8db4549fL,0xfbae12df25566cceL },
32459       { 0x63fc92d3c2e84d15L,0xc355b46c4f5abdebL,0xb50b43a05678d0cfL,
32460         0xf4d4b0b15681d628L,0xc9f11d63fb3bac7dL,0x444b748cda461eb1L } },
32461     /* 50 << 56 */
32462     { { 0xafe9adafc9845a07L,0x484a9eb9df6a1305L,0xec32f0bdb0f111dbL,
32463         0x742b41cddc7b100cL,0x5a7ea89d23c5f849L,0x1ea8801fa298aa82L },
32464       { 0x183e1750cb001f26L,0x66ec5daa49da5bbbL,0x8071ff322d05ab57L,
32465         0xaea9e694e1944e0eL,0xc993754437b85438L,0x2c2467b4faaf4f22L } },
32466     /* 51 << 56 */
32467     { { 0x38f87acce602c278L,0x72c79590515854dfL,0x9d466a765e7e2f6dL,
32468         0xe5f6704772081935L,0xb4b56288ad958812L,0x7f4d9e1395b08242L },
32469       { 0xb38d0ddb962f0f6bL,0x969d4327e5f76463L,0xf7c7c799f6ac01f8L,
32470         0x494066673e6ff230L,0xa81fa10dc7e9c1b6L,0x2fcf26bf8093c2d3L } },
32471     /* 52 << 56 */
32472     { { 0xcca6e9cfa754256bL,0xfdd79280347723f7L,0x8179d6f52d69c6bdL,
32473         0x156a53fa94cc8567L,0xb819d70324655f28L,0xf86872e2ebfb198bL },
32474       { 0xb158e73939ccd668L,0x655db8248de67826L,0x54399a79c621cf3aL,
32475         0xc55900d498a09c9dL,0x5423edbf20278b3aL,0x06a625b280ba89cbL } },
32476     /* 53 << 56 */
32477     { { 0x0f152d69869c4f68L,0x0ed4205a9f0068fcL,0xda68af4f25d4490eL,
32478         0x715fcc60745c00afL,0x70ab559aad63dff1L,0x7d0a7b6a9b8a37ebL },
32479       { 0x82ab7a068bca8498L,0x4f012fb4297d954aL,0x8b139e6ed5f6a4b7L,
32480         0x597316e4b856ac26L,0xeb64b5894387367aL,0xcc92eeabbacb7e74L } },
32481     /* 54 << 56 */
32482     { { 0xb53560e968fdcf87L,0x4ed638bd3cbd0887L,0x57f3f38f6080d1cdL,
32483         0x50370e0c1e4e3ae8L,0x14c87fad184a1ecfL,0x3d06f78d0af7b2ceL },
32484       { 0xd9370e24fd595621L,0x1e462483c9fbb559L,0x1ee5d81ca0aa5c0aL,
32485         0xdb2524557419564dL,0x782ba91b57585be7L,0xb2d14bcc5c431c72L } },
32486     /* 55 << 56 */
32487     { { 0x9cb9de6fd62ebed6L,0xb7f23b1916c6d571L,0x69b4a8dfa8b307b5L,
32488         0x78a7f74e19dc7e39L,0x423405152f47c94bL,0xf1c2a5bc31ff2d82L },
32489       { 0x98c1c3f7b145387eL,0xdd9d24d885e635ccL,0xeaaececa07397bc4L,
32490         0x6bf6a8469b0cd4c6L,0x68052950680dbd05L,0x81a071b60ce07df9L } },
32491     /* 56 << 56 */
32492     { { 0xf3fa8bec0c61d5a5L,0x98f772fc0dedaa77L,0x45a382161146d42bL,
32493         0xebef5d4a58821ebdL,0x21498af30c1f0e6aL,0x3d8699144758014aL },
32494       { 0x6f2276ecb625c7e0L,0x68d6a144fb55d708L,0x0bc836e0ad56b494L,
32495         0x72b6d8850f58ef70L,0x0e0be2887bd7c1d1L,0x70549a879c277d39L } },
32496     /* 57 << 56 */
32497     { { 0x39a445d2dbb2bb75L,0xda2a211b1ac42cd1L,0x934bee9a8e4cf8f9L,
32498         0x5d0dde6a24801bc1L,0xb2d4261d23da4ea7L,0x5fa9059a7187cde8L },
32499       { 0x49298bb651f05f9aL,0xff0c4a0422a7bee4L,0xf466232da6a29be3L,
32500         0xff2e157a995c1904L,0x3a4ee4537b31bdffL,0xb4a736d7e41f6eeaL } },
32501     /* 58 << 56 */
32502     { { 0xaed55c123fa96c0eL,0x8f90803f6e08adf2L,0x349e5807015b7cb4L,
32503         0xdb3f05e314656b3cL,0x9289bbecde8b2d9aL,0x3cad12e0c7f28356L },
32504       { 0x7a68fa54959fe89aL,0x2e7135d0a77f956fL,0xa0285cbabbe35884L,
32505         0xc547ffe7131ab269L,0x82a902bebe33b425L,0x5a793a790c71b02aL } },
32506     /* 59 << 56 */
32507     { { 0x2bb2a929c645c6eeL,0xfc6cbd471e651728L,0x4ec3f630c07af98fL,
32508         0x118231588e4a8ad5L,0x99a2b5de1303f68aL,0xcc280b182ec9b8f7L },
32509       { 0x3d7b406ad7298d55L,0x63941bceb9f83957L,0xfeeb132c463a64c6L,
32510         0x243a2e2bf76a6c8bL,0xae72bf2fdad18d64L,0x774423431987a4caL } },
32511     /* 60 << 56 */
32512     { { 0x06de549d78dc1526L,0xa27fc0c1f52c5766L,0xee5ff3d8e9485b1eL,
32513         0x7af2fbc64bc530dbL,0xa266d6c810f9dc58L,0x866abeed8bfa4d74L },
32514       { 0x50356d7fcb7c7018L,0x4ae502e07c962af2L,0xb98b449cf011990cL,
32515         0xfcc8446b59e8535fL,0x25964ab0088776ebL,0x3848aba2ab6cfe8eL } },
32516     /* 61 << 56 */
32517     { { 0x9f2c62cbe14a2c5dL,0xcd182e386b113f03L,0x2275ad4f525a15aaL,
32518         0xd5b7d1d9eb373133L,0xd3c47b9b07929822L,0x60b043cd8fa8e8e0L },
32519       { 0x603a3403d3958f57L,0xefa36ad67b79c263L,0xfe33dd9f3742ac39L,
32520         0x30f40b3bb249f9bbL,0x9d2902d20a3b2e7fL,0x173f7d1a899684f0L } },
32521     /* 62 << 56 */
32522     { { 0xdcbeff5bf33bdff0L,0x963ae65ee9684a3bL,0xe03586882bcd272bL,
32523         0x756695068942f107L,0x14319d19262e422fL,0x5c0ef45a2265b294L },
32524       { 0xeb897bd8a9f64203L,0xa3b259d742b1640bL,0xdc34ee2dce66355cL,
32525         0x2fab125eb4e13438L,0x1b93a820443420b7L,0x79c46f97b4ba8382L } },
32526     /* 63 << 56 */
32527     { { 0xafd8cb2006e55b9cL,0xc88f38ea2530a11aL,0x628d10bfe4efe221L,
32528         0x00df0da42a8d983fL,0xed45860508a2fce0L,0xcd7882b86a01efecL },
32529       { 0x93ebd86c7efcbf7bL,0x578f9fe7e3db504aL,0x3c584008aa5e83e8L,
32530         0x5bf38b4ca8368754L,0xcb4a9cf905c05ca7L,0xf77ab684c634f28fL } },
32531     /* 64 << 56 */
32532     { { 0xac92ee1537d83369L,0xc968c187fecec65cL,0x29a7ca876e7a3265L,
32533         0x0f2b7e7a8456c9afL,0x7471824e9754326fL,0x498687bf364d2ec8L },
32534       { 0x86d8aacd3c6ee351L,0x01ee6823f6f41e85L,0x9805fc881d79f7ebL,
32535         0x377ac3a40040547dL,0xd39215d461b4e90bL,0x2547416e4c5fd81bL } },
32536     /* 0 << 63 */
32537     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
32538       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
32539     /* 1 << 63 */
32540     { { 0xa10292b907a6fbf8L,0x292c1a203fa6235bL,0x7a36f18f73ad7a1fL,
32541         0x8b2c7b0c5897b11fL,0xf7b9a272cb664c61L,0xb6d366af8f81e22cL },
32542       { 0x3b99b2118e342bbaL,0x03ce158bb06ced2bL,0x3af1175d001db74bL,
32543         0x526f08467159cb8aL,0x6a3c6e1febde4601L,0xfad5963b8c232eacL } },
32544     /* 2 << 63 */
32545     { { 0xa54768dab1b43eefL,0x13e41f47e14fda22L,0x774df203faef6863L,
32546         0xf795a034bd7471b3L,0xf0958718b47de2e9L,0xc92f7888e1160cffL },
32547       { 0x86ded97b0146c790L,0x015918f5480a4b7bL,0x05588920424e8459L,
32548         0x37455914eecf8b2bL,0xe7d3df1fb968a6faL,0x07a0ffd6bad0719fL } },
32549     /* 3 << 63 */
32550     { { 0xf13f55e619f6ebccL,0x63720df2a266b368L,0xdbcc937f3bf1a890L,
32551         0xd3faff625f326fa4L,0x8b33bae9019730d0L,0x7879782af9961795L },
32552       { 0xec7e75bc93735e44L,0xfbbf6d225d5702d0L,0x26b6e1d53bc2ddc5L,
32553         0x00345bf714941d10L,0xdd719676a745c77cL,0x2869b11881c523dbL } },
32554     /* 4 << 63 */
32555     { { 0x2566021f98d23f6fL,0xfb883e1234ca97caL,0x34e047a5d9f51b69L,
32556         0x0b50d91df8efa646L,0xc2bbcbb2971f584fL,0x4136f0e40907c91cL },
32557       { 0xa7ebeb0de735cc48L,0xa7d1bedce113c8faL,0xc04d9a073f5c962aL,
32558         0x95c155e53ff74a2fL,0x923c65a53df0749dL,0x10d5f81227ae35d0L } },
32559     /* 5 << 63 */
32560     { { 0xc08cf7a1a128747dL,0xeb34a1c02eca6776L,0xff6e7cdfb596491aL,
32561         0x17024305eddd8bbcL,0xab92b54cf3c46414L,0x2a995b7759134eb8L },
32562       { 0x97525904e48cb259L,0xeac065ed1e1da01aL,0x16cab74a14c5bf38L,
32563         0xcd3e2516c14eda8fL,0x3ff38094a8de7a9eL,0xb7340214359d653eL } },
32564     /* 6 << 63 */
32565     { { 0x4d37c2663e7a369aL,0x092dc32c3ae62c55L,0x566da2e928ca9d67L,
32566         0xa9771c1a79beb236L,0xaf6b97a976f801e7L,0x3afd62e771259358L },
32567       { 0xc23a5e32cd541e77L,0xae4c90a301660ff9L,0x3f3a233b1911ccf2L,
32568         0x93e4664cfa3b3aceL,0x4bdc14832d4c5f5cL,0xfe03d3c36abf13c0L } },
32569     /* 7 << 63 */
32570     { { 0x9649468631b26990L,0x55222e9fe3fd62f4L,0xc8eaba742ee74b8eL,
32571         0xfa43617834d198efL,0x475b688e892748f5L,0xc6eb426541b9822dL },
32572       { 0x535695bebdae951fL,0x45e69033e909cce4L,0x40354e72b1829154L,
32573         0x1005ee6d5c56c3cfL,0x61b36a754a3fec51L,0xae644f3872f2f56eL } },
32574     /* 8 << 63 */
32575     { { 0xd5469c7becee6e87L,0x056180bc33a4c917L,0xf881ca21a16caa7aL,
32576         0x221de182e6cc7f39L,0x10d61ab531378723L,0xfb763bd9520c9660L },
32577       { 0x145214cd0d6b1541L,0xd9f7ff2dd70223e7L,0x9fce59e30cb1fe69L,
32578         0x2e6e77fa3e299fe7L,0x3a0cf652d5af78cfL,0x50cc42c53e852159L } },
32579     /* 9 << 63 */
32580     { { 0xd2536452b8da85a2L,0x5c15dabe331197daL,0xf5a89366aecccec9L,
32581         0x8f998baf2d8352fdL,0xb10e6c80f56159d2L,0xf61ceff379eb9affL },
32582       { 0x05bcb93d1c4283a2L,0x4e1abc521d8cd941L,0x898c9a49b46b343dL,
32583         0xcf352f3c6e423ae6L,0xb1db207f6fd42c89L,0x08f36a1edab295b4L } },
32584     /* 10 << 63 */
32585     { { 0xebbe18b7ed31fabaL,0x046e248dd74971d3L,0x3ddf5a2a0b24f97bL,
32586         0xf9a400c262fc6124L,0x9ad9b0bc6b03b73aL,0x9fa97c56153c8fdeL },
32587       { 0x1b6477da00b73ea7L,0xec59f64a21b2f3f3L,0x4428712895306955L,
32588         0x4b5db01db9e77579L,0x237edf0bde05e0d1L,0xac904b01855332f5L } },
32589     /* 11 << 63 */
32590     { { 0x6a37fc505cf708c5L,0x8de4dd7c30497ceaL,0x6978648161b8bf39L,
32591         0x3cb303375d7362eeL,0x0e24d09237ed25e6L,0xd474f3dc2f69ce20L },
32592       { 0xe15d98a0edb40541L,0x5e4a87c91466f464L,0xc3cefc9eb68923cbL,
32593         0x66f10920f22c9de2L,0x3c18f9ea9a51b3f2L,0x706237bef40e6204L } },
32594     /* 12 << 63 */
32595     { { 0x0791dfa1df764716L,0x31bf68768c66da07L,0x49f25b77ccedf4f3L,
32596         0x05170ccd5d965c05L,0x37d9521bd49e6727L,0x1548251286a00176L },
32597       { 0xdab444936c00eb48L,0x102c6b95e00c5c5dL,0x43660c3e4c2506baL,
32598         0xb2fb26165ec6f132L,0xccc4221a99ac7691L,0x05b29758a576deb5L } },
32599     /* 13 << 63 */
32600     { { 0xee84fe05a5731e27L,0x3251ded005713149L,0xbfeeaf3c7c5e7260L,
32601         0x3db0b6b2f048907aL,0x38728debb4a6b923L,0x853997d9d1142e10L },
32602       { 0xc636e3874b641cd1L,0x69b10f43c629f4f7L,0x6f10a95c7deddd0fL,
32603         0x85b5a7a317f56374L,0x28cd59435c329333L,0xb37621f7d1e476a1L } },
32604     /* 14 << 63 */
32605     { { 0x3a17f86d48341ba2L,0x558ef6e8ba6375bcL,0xa86ea3f0927935e2L,
32606         0x2f43742ac04d4fb0L,0x32a30bce38769421L,0x5a6d6a62d8d3912fL },
32607       { 0x34154b19c20e3fd9L,0xe95d3843fc85f907L,0x26cfbe0f9f7a13c0L,
32608         0x50d50b3a531736e5L,0x81849773b2cfa2c2L,0xc81523e63ba8ae5fL } },
32609     /* 15 << 63 */
32610     { { 0xac9b0573c2f899caL,0xd9c4fc1ff747ef78L,0xbc205571c7714e62L,
32611         0x726bbf311919f8c8L,0xfff68adaaedc0450L,0x9f4bc0b9f4001089L },
32612       { 0x5d10a660fc5dcfeeL,0x1ea644fbaa9f25adL,0x4f5cf102e5a144d4L,
32613         0x4275b6021521f249L,0x9c62750522d8bcdeL,0x3ebbfc5bb7df57afL } },
32614     /* 16 << 63 */
32615     { { 0x4a873076ad8c49b7L,0x891598ce7146575fL,0xc1d3042f427ea198L,
32616         0xdc592111ed259219L,0x0abdbd16234850caL,0x26b9412643b6fe8dL },
32617       { 0xd3c79d1736a1cfe9L,0x576386219a2b3bafL,0xa736535d5a98bf65L,
32618         0xacb3b7ddab2cdb2bL,0x37d3743adaaf89eeL,0xf19d9aba0b348532L } },
32619     /* 17 << 63 */
32620     { { 0x013b49753e09dc4bL,0xe548f7bc2d034deaL,0x65ffcd710b861c72L,
32621         0x80f4d7a2e07dac01L,0xd1889dcf56c1a8b1L,0x14ad62d4789b133bL },
32622       { 0x082e3c082e80532bL,0x0562a7d80b9d17e2L,0x4f8613095d57e2a7L,
32623         0x79f21d7255f93514L,0x22c4f68c595c0f33L,0x91d9bd5ba22c0c33L } },
32624     /* 18 << 63 */
32625     { { 0x30539655b29eff74L,0x7ba206ebe723167cL,0xe20c3ce488110a02L,
32626         0x52b406b97c124481L,0x050111c68c74a728L,0x3d594a6bc57cd9feL },
32627       { 0xd4b2a271e5f952d9L,0x7e52d63b080da0c9L,0xa6463d65f53a6cffL,
32628         0x9ebcffcfcc678e26L,0xa657f27b2f2b9424L,0x850bd2b871da5c9aL } },
32629     /* 19 << 63 */
32630     { { 0x9f3c395b7d4e1a14L,0x2f99aa23bd7301efL,0x50eee34e3017f166L,
32631         0x88c951ff4c9cbb4dL,0x90c0422ad8dda2f4L,0xe8361775d49cae19L },
32632       { 0x654db0d250da6138L,0xe4ada30ee03c34a3L,0xde0d3787832ccf4bL,
32633         0xd1bf435641b94c86L,0x347531c37db87eb5L,0x6942e7e30fb51863L } },
32634     /* 20 << 63 */
32635     { { 0xafad01a0d93c54b2L,0x659bff9695536c49L,0x7b91aac2b9734c15L,
32636         0x55c7f08224e02f59L,0xebcb71e73a26e551L,0x5b7225f76c6343ebL },
32637       { 0x021c48fb17d5e775L,0x57536a42bd859c87L,0x24852cc0ae2b63e9L,
32638         0x21515020c0ce0ef1L,0x2ac7336c8fed825eL,0x4bc87feea0152819L } },
32639     /* 21 << 63 */
32640     { { 0x7f9813e94b82bbd5L,0xc01f14624e697d08L,0xf02d9eb293de010eL,
32641         0x290c503c50db5ea8L,0x339341f033edb639L,0x962abf5f7cd7f6c1L },
32642       { 0xbb1041ae95fb9e8cL,0xb8c9f9d6dbd8525fL,0x8658a54f0f5244b2L,
32643         0xe9326e455b84eea8L,0x9ebdfe4f54f11de8L,0x3c90b0cedc740440L } },
32644     /* 22 << 63 */
32645     { { 0xde6973e22683ad60L,0x35fe4650eebceb58L,0xbcdbbabf7c719a33L,
32646         0x8bce8111c076ca95L,0x8f7176deeb6bd711L,0xd04e9769d240a56fL },
32647       { 0xdef7d8fac8e218daL,0x04cff5976df28152L,0x2a1af6e24bd1cca2L,
32648         0x9397014edcb911e2L,0xa251339038677b96L,0x0dc48a8fb61b462dL } },
32649     /* 23 << 63 */
32650     { { 0x42eab6610197a8d2L,0xdc4a557ade082468L,0x4cf68d6090495f66L,
32651         0x6dba8de79032929eL,0x304b38cc827b5d7bL,0x8e57275cf32f5063L },
32652       { 0x4b555a0337280c95L,0x49c1e532ef8ddd18L,0xa2d8eed45459adc1L,
32653         0x2b353217bba3cf41L,0x11f3c90cefe8f005L,0xb3367fa0d55916c4L } },
32654     /* 24 << 63 */
32655     { { 0xe7c396d64654712cL,0x1fa5ea507a26e994L,0xaa98768709012b83L,
32656         0xf1ef9792e9b17e98L,0x2c22bcb06dc2db10L,0xae42ddf6ed4be80eL },
32657       { 0x672080f62e743405L,0xa15a7f975b7821d1L,0x0cd912f247adbf07L,
32658         0x6919c0dcb6c4ae8fL,0x62b13edd14c6253cL,0x66f35919f8032287L } },
32659     /* 25 << 63 */
32660     { { 0xc992f6fe05f3b31fL,0xcdcf59b56a3d4522L,0x69901b3815df24b8L,
32661         0x4b9874029f6153b3L,0xeb09cbc1bca86176L,0xbe78cd7d446289c4L },
32662       { 0xd4aced42b933fd58L,0xe0dc6f306a326de3L,0x4bef32960542a5f8L,
32663         0x3eb8d14106f537c3L,0xbb45a994b6f0d0a9L,0x340c025d3f4a01b8L } },
32664     /* 26 << 63 */
32665     { { 0xdfcb3255fa371ffbL,0x3fb4a22c92bb6b01L,0xd96efc1605396353L,
32666         0x2ce2228ce5d2bc25L,0x59483843212c7eecL,0xdca7173882996047L },
32667       { 0x44dad56d8de87b1dL,0x622f88910b6222d5L,0x1abbc501d5d3a9ccL,
32668         0xdbed73a5ebe52e80L,0xa7f785b1c98c56efL,0xa32471d3d343aeacL } },
32669     /* 27 << 63 */
32670     { { 0x65d39f8ae510cee9L,0xcc60cd118dc5e825L,0x3b6ac6627ed7198aL,
32671         0x5d7fc001f33edc87L,0x0218ffc453e978eaL,0xecb762e57bdfcf16L },
32672       { 0x8e7122047966b202L,0x1c502404e6b99602L,0x0acb73f1131cc36dL,
32673         0x81d1132ed4369a1eL,0xbca89fe8377271a4L,0x1353a883262a2e18L } },
32674     /* 28 << 63 */
32675     { { 0x2713b58c9d628e1dL,0x3729960afaa8ba1eL,0xc3438130ab53bc93L,
32676         0xcef9eda5e9c165e7L,0x9bacd1c3fd02650bL,0xbb300334540ece72L },
32677       { 0x21f5a5d3d9c4f0edL,0x1ba32e4ff7c19269L,0x8f073beb2cf320fbL,
32678         0xb49766c45599646fL,0x68180d6649e4f200L,0x8203d8aeeaeddb36L } },
32679     /* 29 << 63 */
32680     { { 0x7b19780fdbbbf57eL,0xc094d6d9c2207635L,0x241898ac6bb652d6L,
32681         0xb61b25724923ce29L,0x26ecd97508000048L,0xd08c54e5f5f96b8fL },
32682       { 0x19019968c1604cc5L,0xa9940e9edc3f31b9L,0xbad2d245c3614a9aL,
32683         0x7d3cdb2d411e63b3L,0x88d842c3223638ffL,0xbc5427d0cfba2b48L } },
32684     /* 30 << 63 */
32685     { { 0xe6d78b7f60085b20L,0x0aa1d62bf318d226L,0xaaa4391df6461e64L,
32686         0xb15ee4a7213c949bL,0x183f043be4bd3dbbL,0xa1a87996ca49f456L },
32687       { 0x6030ed2ef6ed22bbL,0xa2002784fab7f7a2L,0xfc40914dd850cdbaL,
32688         0xe63edc4c7df80ba3L,0x8fa35ab57b27ddfbL,0x3bdaec795096ea04L } },
32689     /* 31 << 63 */
32690     { { 0xf33cc5ee452881ddL,0x89c144a38966d47fL,0xbfa8395149156a93L,
32691         0x0069bff358707b05L,0x2caf814cca12a0b5L,0x1ea71ce71794450aL },
32692       { 0x08fd2b1c63d22a26L,0xdb08594eb3876737L,0xf459049a57b3669bL,
32693         0xf64ecaeefee0d4ccL,0x9da2177c63f233a4L,0x042fcca84e54f053L } },
32694     /* 32 << 63 */
32695     { { 0xa68295da2caf088bL,0x23d6439a5c8709feL,0x8deba0cffe0c3df0L,
32696         0x5b4d037b3cd00a1aL,0xe9edc429aa0f9088L,0x6f5827e35847def7L },
32697       { 0x9739d03d306ad966L,0x7c6b18afaed51d04L,0xdc3d34ff1759060aL,
32698         0x029e9aa9a7e94dbbL,0x2a3cdfa0f7e8b7f3L,0x42f87bf0bbd8f6f4L } },
32699     /* 33 << 63 */
32700     { { 0xe36941004ef8cf5dL,0xcb4dbddf4d8bb768L,0x0610858e828c717eL,
32701         0xb4cf22cb2bf53239L,0x938e49f16a3e7a71L,0x1dbbb837e73c7a10L },
32702       { 0x26ea3108db1b58d0L,0x1ca340abad2929faL,0x1d4601938ecb1f6aL,
32703         0x060543510424fd93L,0xdbfc403f0303dc50L,0x142ad48dfc0f4007L } },
32704     /* 34 << 63 */
32705     { { 0x8a8258eee6a52970L,0xf2d13a33a3882954L,0xd312768c38d48e32L,
32706         0x78a70e03e9369eb8L,0x02ba8d2b69228d48L,0x7f957a33b3bfeb28L },
32707       { 0xafb22cd20ab2d0bfL,0x335304ccf8cd44d9L,0x0587a6f256009a3dL,
32708         0xc0bc7278023b2530L,0xe85f2ec5f37c6727L,0x045f156003f5a081L } },
32709     /* 35 << 63 */
32710     { { 0x6d71a45274ec55c2L,0x0d064bdfed33da75L,0x1aa4d77ab503afc6L,
32711         0xec08340c5cb136e7L,0xf096fed6ed11d9faL,0xf232d1b82f81e148L },
32712       { 0x71cc9b78ae9b3374L,0xd80ce28668bcc1baL,0xe8f4bd170274926cL,
32713         0xa7ac120f100da329L,0x9f071c6352a482f2L,0x76d85a8e842d6ef1L } },
32714     /* 36 << 63 */
32715     { { 0x516f138bed210253L,0x5ec2fa324433461aL,0x0dbe2c66cdaf1280L,
32716         0x086b91e59fbf3318L,0xfb0223ee399a1ca6L,0xd6f86d9b0db5b20fL },
32717       { 0xec02bca25752d618L,0x952fafcaaf69f3f1L,0xf304cb7533c4d294L,
32718         0x78085727dac65608L,0x22f302ef840a4466L,0x33fb889dc371c31fL } },
32719     /* 37 << 63 */
32720     { { 0x4aa2f1c36abdcdf4L,0x80963f8251da8d8cL,0x5647a356ac008cf0L,
32721         0x40a78c45fc10452fL,0x2a3b9da1ca2d6a31L,0xa4d177760f0db94fL },
32722       { 0xcfd600d9939941acL,0x256e44c142c3fd25L,0x85bccd42ab3f9d41L,
32723         0x83e93e44d018298cL,0x569f54d474a5fb37L,0xad2c613af2ffcf8dL } },
32724     /* 38 << 63 */
32725     { { 0xc63e6f7c22d515abL,0x3fabfef42ad30174L,0xf13a0126b1c65411L,
32726         0xe269e956dce87183L,0x44136834a83e0249L,0x554e731831958850L },
32727       { 0xd287755696569aeeL,0x5af275e9274bf4dfL,0x7056f958197dbfdfL,
32728         0x699f5a672169811cL,0xd9a857d92c1c7c3aL,0x62cf7431843bdac1L } },
32729     /* 39 << 63 */
32730     { { 0x974fcf5529d0c948L,0x104d7df0693c5379L,0x4f851c397dadfb28L,
32731         0xcd5bc87c233c02c8L,0xf7fa16e82c8c1c04L,0xed42de484dc18a19L },
32732       { 0x213db3a5b4366736L,0xf6eb5c9517da3d1dL,0x4d04ef1213b304ecL,
32733         0xba7bd9afaf74e164L,0x956a5f7bab319f50L,0xe733891ce2a4932dL } },
32734     /* 40 << 63 */
32735     { { 0xaa4711f54f890542L,0x862421d9eba822c4L,0x2f667179848280fcL,
32736         0x4de16d87c201ed75L,0xd20e1399c5e61b5dL,0x3f7114b49ed67ec7L },
32737       { 0x561fd4979b5a88f9L,0xb202eb86d84db2c1L,0x67d8fb90c8637d3dL,
32738         0x3d1d78a1032b1853L,0xe07bf775ef1af9acL,0x691e1deea57d6adaL } },
32739     /* 41 << 63 */
32740     { { 0xe236e42b2a6045fcL,0x4a6b7be7613f1c5eL,0x14136ccbf57b1aefL,
32741         0xc3a8a6b9c7b34813L,0x63b0998c5f5cee69L,0x311bfe2c3481a229L },
32742       { 0x4dd2325ff0aba408L,0x1b8a3f739a2fdff6L,0x4845cde0dbafe0d2L,
32743         0xd092bb22cd37b02dL,0x35436f9d600fe0efL,0x63c580cb065f379eL } },
32744     /* 42 << 63 */
32745     { { 0x38f98360f48948b5L,0x1a1d67a97ae3ad67L,0x79966318ab91b44aL,
32746         0xb69a75b8dfea0b1eL,0xbb18e5fa05d4d71dL,0x80a14dfe03b1280aL },
32747       { 0xe549c8f14c17cf7fL,0x91da31098969b5c4L,0x1e3e8f08ccfc1732L,
32748         0xf1cfb3ad0c85444eL,0x6854b52a628bebbeL,0x8a5e2d85075f04d3L } },
32749     /* 43 << 63 */
32750     { { 0xd428f75c5aaa1da4L,0xf192162dd224691bL,0xc30f5ccfd3a50718L,
32751         0x82e2b585e9e0f738L,0xc7fb4dc15cf3fd23L,0x8a52eb37e4e2b37dL },
32752       { 0xd5bb892bf1702cd4L,0x64b8ccd056b92a51L,0x98ab053f8988e2e6L,
32753         0xd56b34022f104643L,0xf09017be073886d7L,0x0283e9eebf6eaea0L } },
32754     /* 44 << 63 */
32755     { { 0x834701da3801c65dL,0x5bb35c48955aa27dL,0x0ef0f375db7ad387L,
32756         0xd25e337f06cd1d53L,0x757a1f9d90cd91deL,0x1604f153d61bbd60L },
32757       { 0x6a01e8cf8bb95dc4L,0x34b7be6275bbdb13L,0x0a96b3a121e9b029L,
32758         0x25615c3b2946df44L,0x5eda7d1919d04842L,0x08317975fba84668L } },
32759     /* 45 << 63 */
32760     { { 0x4a4dd7bf2bb5fba0L,0x0ebc07f3c84c2304L,0x054f2e448daa5099L,
32761         0xbf8949da3ec362f1L,0x2e4a677c1d7d73f5L,0x405e3ad24dc70fbeL },
32762       { 0x2958e956c7e46fb3L,0x34e0d7f1b2522e5dL,0xc44b95e25e371e3dL,
32763         0x62e348a4d91baea4L,0x8d9e89e24c09e110L,0x8cb886f6b1c1e356L } },
32764     /* 46 << 63 */
32765     { { 0x66b16f6033e8683dL,0x3435ab2560b41c5eL,0xd5b89f51d452e049L,
32766         0x4b5253a73aac0092L,0x01cae436f9d2e2c2L,0x789de14637e8ce97L },
32767       { 0x8f50541701a1c2e8L,0x8c77dbdd798a8404L,0x5a264906b6e91e68L,
32768         0x36761ccc3c6aafe2L,0x5809baa37e50f9e7L,0x0b50904e28fac969L } },
32769     /* 47 << 63 */
32770     { { 0xb6360372308785eeL,0x0c9913a68cf10e55L,0xe82b0f470e67c99aL,
32771         0x0bf2d24825399082L,0x7aa3edfca86fe16eL,0xf534ec4e731a4956L },
32772       { 0xb71d5d4eff26e993L,0x320eb7ac7bd58ef3L,0xe5e4c5f30cafd658L,
32773         0xeb6b8e0a21a06cedL,0x037d0faf6f76acb1L,0x39c76a6ed6f13f81L } },
32774     /* 48 << 63 */
32775     { { 0x12474bd8a55a3a4dL,0xe326aaf19e471af4L,0xf201a9308caadaa6L,
32776         0x546821f835304341L,0x7fe452c3088353e1L,0x8f1ff628fc82566aL },
32777       { 0x49526f46d99f8967L,0xb19c80c0a4009690L,0xeccf97591cbc0716L,
32778         0x2e13ae2caf4cbc8bL,0x12b0df13f32e29adL,0xa2005d6e0b1565f0L } },
32779     /* 49 << 63 */
32780     { { 0x9260321bde788968L,0x4aaf1752886ccc74L,0xf94ae636c06b1d9bL,
32781         0xf0c858854954ae43L,0xaaa735866c42a104L,0xcab59d914e782db7L },
32782       { 0xfd12f9ee01ff3a1fL,0x35eb6104b546d3c5L,0x97d839e075ca1425L,
32783         0xa77712f452428003L,0xf5dda4e8bd9f30e2L,0x0c3ab97091d6f540L } },
32784     /* 50 << 63 */
32785     { { 0x58734b3ca68716ccL,0xacdcfdd2acfb5719L,0x97074bac7084cf23L,
32786         0xf8d4f285d0c81b66L,0x5ea926e2ef541e44L,0x65a8e25da2c04e0fL },
32787       { 0x67e2380f06258485L,0xdc00f2ed9691a57dL,0xd37b23fd6b80274eL,
32788         0x57f1604f2fe10aecL,0xcc21a4aeffb33ceaL,0xf33a344bf75eaa02L } },
32789     /* 51 << 63 */
32790     { { 0x24ca6fc56969f55cL,0x6fe18be29a7a9753L,0x5e9a7ed36af8da90L,
32791         0xf6c261b7ed493388L,0xbe9ac24beef2b77fL,0x0357ab559f244e49L },
32792       { 0x5f7953375f1b5b9bL,0x27dfdecaa9bc503dL,0x0b2091b55c0e3ee9L,
32793         0x1f4f7866d68cb87fL,0x336c2c127a442a9cL,0x88267fd1d3f2ab78L } },
32794     /* 52 << 63 */
32795     { { 0xdb891eedd06014e0L,0x69685d6103e9970aL,0x3a612db402838113L,
32796         0xc1cd7b3adcdef0b0L,0x612b299da41d6c1eL,0x982161ed0ed386a0L },
32797       { 0xb36bbe2f3ea1bf1eL,0x0d8c3752ceb2a5ecL,0xc02cd7f6ec03bdddL,
32798         0xa87977c152631d9eL,0x7b546cc37e398d7eL,0x5b1218a804845671L } },
32799     /* 53 << 63 */
32800     { { 0x52cd86c68a62f0a0L,0xc437c2af4d29c896L,0x722a337a45aebfe3L,
32801         0x03b13844d8a9de8bL,0x41a005bb8510aae9L,0xf42399ffc63af92cL },
32802       { 0x004d29cfcd93390eL,0x472de98741dcfa34L,0x2c71ae744e7cdcc4L,
32803         0x11a5c2f8409816ccL,0x320ca246a96cef60L,0x72de4287f3d57621L } },
32804     /* 54 << 63 */
32805     { { 0xe3e7a3eb3771a0aeL,0x781156e9b6dd5304L,0xbaee3a8323e31e6aL,
32806         0x66d1569a08985bf0L,0x56161e202d75cba3L,0xf9c23c102a944de4L },
32807       { 0x27ac8f454e129ea5L,0x8b991ba788050aaaL,0x600c96ffa5d052f6L,
32808         0x0fbe944df244984bL,0x3801026fa204c36aL,0xc4bfa1994d55a584L } },
32809     /* 55 << 63 */
32810     { { 0x11b200c6a32f5c81L,0xc4ab4cf43eabe341L,0xa21468f06f339f5aL,
32811         0xf20c2c5a729438aeL,0x3e68031e3a067c3dL,0x3962a92f062c8371L },
32812       { 0x389b22835b000f3dL,0x98f3b679250b8666L,0xe283c2b4eea91464L,
32813         0xd35b14de1e1f4c08L,0x9ae72567d79d8683L,0x2c37b162a3b2a840L } },
32814     /* 56 << 63 */
32815     { { 0xfa3e43e56cb173d1L,0x2502258d4591b5a5L,0xae8c4b558ca9682aL,
32816         0x8cb1ffb4ec81a288L,0xd11ae888bfc84fd1L,0xa3b083a0d774577cL },
32817       { 0x119b41c11da9afc5L,0x44bc77622934e22bL,0xa04694f37c639d6cL,
32818         0xd5e1ce5732c5b8eaL,0xd507c39b9749e8b6L,0x16cc0b5755255b63L } },
32819     /* 57 << 63 */
32820     { { 0x66fe7a39c4955e7aL,0x25b0b3e5bb11a1baL,0xb82c2cdefc573bf3L,
32821         0xed33c0e8281a3927L,0xd068c8901ad799d4L,0x052801ec9cbc73edL },
32822       { 0x614e4aba0faf5c5dL,0x50d7b0a89f66d391L,0x7bdfbf5fc18e88a8L,
32823         0x1fc93e1f4380d2a2L,0x8241dd5f27d952d0L,0x44944d9c3a3f79d5L } },
32824     /* 58 << 63 */
32825     { { 0x808e2693c0edcf36L,0x4725b5aa87c254c0L,0xd1e464644d317973L,
32826         0x3e59efc2393049d2L,0xa4c9f340d3e0d17dL,0x69b40727abdf3022L },
32827       { 0xa1d85395317058c8L,0x2cec2a040cfa7c13L,0xe3c16f7634236cd1L,
32828         0x566b403a3e52fe3eL,0xfd6065bdd6923cb6L,0xe769a89a5019f94eL } },
32829     /* 59 << 63 */
32830     { { 0x9b1f6e9042a1cce9L,0xc6c870270511f865L,0xc924caa72a3c29f6L,
32831         0xcb674fb068e604f8L,0xe997b0b8330c2dedL,0xf5b315a04ddab219L },
32832       { 0x6fa1dde6575d3ac3L,0x32ad27f735e65e56L,0xfe723ec2e81b1ce4L,
32833         0x149983f8985d7286L,0xa1d350a0492ecc9aL,0x12a51f8c36a0707aL } },
32834     /* 60 << 63 */
32835     { { 0x71e5df78614f6f37L,0x5cf0e08da0b80beeL,0x1f8dae171e32051fL,
32836         0x54ae365d83bc233bL,0x97ea005b1b84aaa6L,0xf4766d9264c75139L },
32837       { 0x9b93bbf241215701L,0xb18f042d8cf8a865L,0x5dfb96dd0867556fL,
32838         0xe9fafbb8597fd6a1L,0x729b2f50fe48bbc6L,0x2cf85f6b7f37ff9bL } },
32839     /* 61 << 63 */
32840     { { 0x3e7c871024d197f2L,0xb635595bafe9c29cL,0x302f4fff194e084cL,
32841         0xd497ce7c18edf332L,0x4081c7aa062672a4L,0xe886a5b28afa97daL },
32842       { 0xa7e922b5786e1bfeL,0xabd9a18bbd7ffb7aL,0x1f4f5b9356341b58L,
32843         0x1726484344969ab1L,0xc4a0b557e668a479L,0x5ad1c062bf4f3343L } },
32844     /* 62 << 63 */
32845     { { 0x4ff86eb693d2b958L,0x4513fe1b784f628bL,0x45f4712573b5bb80L,
32846         0x25aa3d36c987bb15L,0x12b1e65bb48163f0L,0x9d0cb4aa9801592bL },
32847       { 0x02c0c2aa3718bc98L,0x79b03df99c306353L,0x097d8d8daee5144cL,
32848         0xebed60774621d7abL,0xa8edf06e4b52e72cL,0x40c86f181dbca7d2L } },
32849     /* 63 << 63 */
32850     { { 0x65c7144a5e84482aL,0xba6f92644d4f7553L,0xf4dfe807d9c2524eL,
32851         0x1333dd7c054403b1L,0x44557e880156451fL,0x5dbda4d80824c813L },
32852       { 0x59e204959857fec6L,0x42f4068f1b1eeb99L,0x067c3aa21d59bde9L,
32853         0xa9c4c3eeef27419aL,0x99fc994b2ec87652L,0x4f1607581578a996L } },
32854     /* 64 << 63 */
32855     { { 0xcd8c2ec9378ef62bL,0x7f4a3c5491a7c4b9L,0xe12386d4db83e1abL,
32856         0x9a792032bb549bb5L,0xaf81cba62807c0f1L,0xd4ad7d87abf2008eL },
32857       { 0x9d7a72307e9ad6cdL,0xb30636b08b517b2aL,0x47c324daec900516L,
32858         0x408cd0d37193eb30L,0x8f0bcce2d315c655L,0x540ad4e0869d6c22L } },
32859     /* 0 << 70 */
32860     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
32861       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
32862     /* 1 << 70 */
32863     { { 0x4b5e753ddae0ff8bL,0xe55c83e4da3d97b5L,0x4034d75f42fa905bL,
32864         0x89b85edac33e462bL,0x31f413c3058de3bbL,0x66c01c806ba75391L },
32865       { 0x3f500202373e28deL,0x5090b33b4b9be739L,0x7297aa10efa2adddL,
32866         0x3e8ccdbe1a6566aaL,0x4dfda07fd7b4f214L,0xa659bd1e7cb1cae7L } },
32867     /* 2 << 70 */
32868     { { 0x31796c2387d11691L,0x02991ea2a9de506cL,0x4ff0cb716cb0c301L,
32869         0xdd0cdbd7d1702ca9L,0x470a26c8e1a02a90L,0xb705b7bad7054625L },
32870       { 0xfadc2e86d4a1a268L,0x0fd9764668e9f923L,0x042b5ebb2951a8feL,
32871         0xe4af9d0364197a76L,0xdd2c6bb3249c1b5dL,0x60af89bdf01932b1L } },
32872     /* 3 << 70 */
32873     { { 0x4374145d41afcd64L,0x98b72d6049d21198L,0xc0ff394bdfde8a41L,
32874         0xed1112e5ee1ff7a5L,0x87a920e8cb5036fcL,0x437123f62deb225eL },
32875       { 0x37e527afb9ad8c58L,0x3e3c9998abfaef38L,0xb656bcc550b2b4e2L,
32876         0xfacc8a193bf5699dL,0x98cec74fe616307aL,0x34af333dd3ef8babL } },
32877     /* 4 << 70 */
32878     { { 0x9ded9b0d744ec273L,0x5bdfe5472e79e4d5L,0x94f3aaf539393728L,
32879         0x22136862a438413eL,0x449286da373c7de3L,0xa709d85d29aa1540L },
32880       { 0x1bd13e410284a4f6L,0x37b54d69f0799c8bL,0xd43b558f6bcd0cb2L,
32881         0xf5757c0e9e610369L,0x15c80b23c16e0651L,0xacb2cf64001820aaL } },
32882     /* 5 << 70 */
32883     { { 0x0629e4ddeec37f48L,0x3f7556a2da7de716L,0xcacd8f27661662bcL,
32884         0x65d8bc2ceaf01690L,0x83ac66477c39c893L,0x353f60dbf59440e1L },
32885       { 0x2597b0d6852c575aL,0x410885f73a40c2b3L,0x953ab3472fcc2488L,
32886         0x9f753e5eef4cc6d8L,0xfc32bb4d97f69e63L,0x461c1b0c87e8c264L } },
32887     /* 6 << 70 */
32888     { { 0x2bea7e75ac4b62f5L,0xcf255dcdc6297871L,0xdd88db8781b25c72L,
32889         0x77ad90b3b617dc04L,0x65ee13820ed4a7d6L,0x4c08df9cd9644c8fL },
32890       { 0x072d3784525a023fL,0x1aef69cefce399fbL,0xb07fd78ed7f29044L,
32891         0xa3754e1443043fa7L,0x97bdae92ff9fe4d9L,0xad63ba6a700fe6b8L } },
32892     /* 7 << 70 */
32893     { { 0xa571929ba1ca17dbL,0xce7a12f545e146b8L,0x39df1446d9eb426dL,
32894         0x1e48b3f8dc27f268L,0xa2d7dfa1ff548455L,0x750068b86ef1cc82L },
32895       { 0x4d699306667fce62L,0x98540b9d131c5412L,0xf8a62cd347c580b0L,
32896         0x2b55460f73795005L,0x3206c0257b8db337L,0x2280934bd0dda5a2L } },
32897     /* 8 << 70 */
32898     { { 0x10a8aabd2352478cL,0x599d9dfa1364c40fL,0xa009df1a076945a2L,
32899         0xf869152c03861f02L,0xc405226e9f866a3cL,0x93bd737d8b41ecbbL },
32900       { 0xb5c9ed1033901eedL,0x90e4ce8f99312b80L,0x1a9ef22e57589279L,
32901         0x83ef607d7fe2d6aaL,0xf2da84543473dbfaL,0x14f36d3a57879066L } },
32902     /* 9 << 70 */
32903     { { 0x2c780f220ea3ce34L,0x240a211e4b8aac72L,0x7a266e5dc2625a99L,
32904         0x1cb15d3e3b30c878L,0x8cd8ccab0e1b21d3L,0x53c64279adc1a6b3L },
32905       { 0xe60d15b960bf708dL,0x6e431c1b0cb5ad4bL,0xec874c3e82033111L,
32906         0x88054a1d9141eae5L,0x98438a5addf53a28L,0x168f0b0ffa12c657L } },
32907     /* 10 << 70 */
32908     { { 0xd621ce26629d7a57L,0xbf571de7cc1f8af1L,0x2c5cfaf9304adaa3L,
32909         0x950addbd3f283b49L,0x622dc27cee6d1cd1L,0x26d920041f0863fbL },
32910       { 0xe243b2a2a41ec585L,0x0dbd9adf2bea6235L,0xcb083c4d6f0820f5L,
32911         0x809ecbafd5493931L,0x9647067414b7ffa8L,0x2cdfe22e53fc2224L } },
32912     /* 11 << 70 */
32913     { { 0xc8b1333c7cd74a06L,0x7d5ac4dc271006bfL,0xe9377d9fc14e0e56L,
32914         0xaa8651db7a92ab1fL,0x77cee8145fc11fb5L,0x1e7c5ca027870b14L },
32915       { 0xdeef4b3f6f959698L,0x7c59f26e5daa9bdaL,0x4d0d5aecfd312368L,
32916         0x5247a6f3b738de68L,0x1c4e8ba990c04807L,0x0554b41bcce126caL } },
32917     /* 12 << 70 */
32918     { { 0x3df98ea9a81cc26aL,0x982ed56883b2c6f3L,0xc9cbd1b5ea6d6976L,
32919         0x3f9f23197e25ffbcL,0xbca8e0567da6280eL,0x7abd316635cda713L },
32920       { 0x46ef321d740ae011L,0xb17f6c75db214a33L,0x37b73b4b51de4044L,
32921         0x5bccf3ccccd9ba8dL,0xa2ca080dd0f7045bL,0x79caf90668cf4dccL } },
32922     /* 13 << 70 */
32923     { { 0xcc3605a9a7b07d22L,0x4370eb18b4ebe4e7L,0xbe393039248867c1L,
32924         0xc8e4851ecb1a75ffL,0x215f3fbe39cb6da4L,0x6f2102eee41f9a34L },
32925       { 0x61d484abdfae7c27L,0xf5143bd26f1260fcL,0xa70b6c067514bcccL,
32926         0xe71ca833d23506f5L,0xe2f50ba8eae03a8eL,0x2ac3b50883c33359L } },
32927     /* 14 << 70 */
32928     { { 0xe94b930f3655cabdL,0x6ef6aac4a342443cL,0x2feb8005bae255daL,
32929         0x4625a15cac6e2095L,0x75c6311d0ec76c1eL,0x896a07409b81c6f2L },
32930       { 0xbad3e2f9073378bbL,0x2984a10629266ec0L,0xa68a5351a788010aL,
32931         0x321aa113017cd052L,0xecfb61752f34db5cL,0xfe080cedca2b51dfL } },
32932     /* 15 << 70 */
32933     { { 0xba29690803360c88L,0x3fb087c036311812L,0xec5fb10ad9ff6a48L,
32934         0x52f7077f207dd8e1L,0x8e65cfb844c02fbcL,0x4f4fcde2fbf4bfd5L },
32935       { 0xd1ff54156cc74320L,0xf989d544f68b036aL,0xafedc2db973bd9beL,
32936         0x7bdc35694785e26aL,0x0df36796751ae9baL,0xfebde691ccdabd95L } },
32937     /* 16 << 70 */
32938     { { 0x3499b44bc77488ccL,0xde000e01aa8f3c10L,0x30140406c1f517d7L,
32939         0xd4b3c8eb82a174e8L,0xc8835b13af2c9b3aL,0x2cd7626e443716f4L },
32940       { 0x336c4f4b9c22de71L,0x9dd2b277f2529f60L,0x6ffba2dc828c34d3L,
32941         0x257a345c34d0d1f7L,0xbc1eff056ca4fbceL,0x05b335620768349fL } },
32942     /* 17 << 70 */
32943     { { 0xb142febb692e076aL,0x10cfaa6b9a654721L,0x5b7ba30c8d4917c1L,
32944         0x44be3089dfe4056bL,0xb7530ae6ae6307f4L,0x47c519c45b5f381fL },
32945       { 0xa80648d8c3078009L,0xfde72e30dcb021b4L,0x8a89a51bdc2659e8L,
32946         0xb9e0efa6306adefcL,0xc671c060c754a7bfL,0x703c698e18f14248L } },
32947     /* 18 << 70 */
32948     { { 0x25c86ad43c47783aL,0xb1f94a9650f85a4dL,0xb9472e3ac023a02fL,
32949         0x91033d1b26f0fcdfL,0x95d775c1ab7b4ee3L,0xbe17daffdf3a5cb7L },
32950       { 0xaeaecd2ce78395f6L,0x0e3abb0953b5da8cL,0x5f729f858ee774afL,
32951         0x1acccfb3aeca7a6eL,0xd066fccb37e4af11L,0x24c832ab84fc3259L } },
32952     /* 19 << 70 */
32953     { { 0xca547b680ca4864eL,0xea40fe17c7d49f27L,0xb5e68bab87227475L,
32954         0x6ba2bfaf8ce485f7L,0x4d2747acb72684f4L,0x5fabffc670aa6087L },
32955       { 0x2d4ded5679c67c9dL,0xaf3b4eedc8a4f22fL,0xbef6128ebfa6ca86L,
32956         0x7ce412bbd4381632L,0x518e6ecfe670d99fL,0xaba6518dfa5f426bL } },
32957     /* 20 << 70 */
32958     { { 0x5ebdc79cd41b2401L,0xf0cd8598c498e0f1L,0x93f6efe79c8b7f7dL,
32959         0xb2f1e40ac469aa57L,0x882f0e943433c455L,0x0add72adaea0712aL },
32960       { 0xb13578c399af96d0L,0x43c28dc621177663L,0x83aca2d854e09133L,
32961         0xae03943cc6ad8532L,0xce0a61917104f75cL,0x7dec8786f9838c37L } },
32962     /* 21 << 70 */
32963     { { 0xb0b41b8ec5abaef9L,0x43f59aee8ff5d1f2L,0xe58f78c9234d3d34L,
32964         0x0e1948d029a7f49eL,0x722f8e54c6cd8941L,0x75a4ebcfbaf24424L },
32965       { 0xec8954982d7dc6d9L,0x8df2feee5261e4e2L,0xdf2820b825dfb96eL,
32966         0x4b89c4dcff651949L,0x27c871a527bacbe1L,0xfdc70cf7329a52bcL } },
32967     /* 22 << 70 */
32968     { { 0x37d58766fdb3f3fbL,0x49d9a762ad64fa66L,0xf80423918cfdbbc2L,
32969         0x22e60ca36400f7eeL,0xfab8ea7568210629L,0x91267753963e5b6fL },
32970       { 0x5988d7f56b8e7ec9L,0xe43e762a5899e718L,0x842dbdcc40ae8b99L,
32971         0xa7ced3f19869739fL,0x1ccc1e8a6d54b9f5L,0xaa3a91adbd32e710L } },
32972     /* 23 << 70 */
32973     { { 0x306d662c6d4c255fL,0xf32aa48101fa367cL,0x29a71e02f16b3197L,
32974         0x653f7d88513a6079L,0xde93d6e74541b4adL,0x4d284acd8c54d3b1L },
32975       { 0xfc9d462be106ed07L,0x6e3818d07e355468L,0x2ad523859400c515L,
32976         0x287af41d5ecd3b52L,0x1162162351e1fb02L,0xd696d01f17bd4584L } },
32977     /* 24 << 70 */
32978     { { 0x9db114e3715aa8daL,0x596c2dc25c2fee22L,0x04df016bd2f3080eL,
32979         0x0cb3f7cfb9b72037L,0xadb877c7814fe2abL,0xb2d5ec5c37761ec1L },
32980       { 0xb5d6068e55d45831L,0x5fab1dffb7c52c04L,0x39b4aa5457d36d41L,
32981         0xec1de467423cc8cbL,0x280e02dafda6566dL,0xc70c3c383ca55f55L } },
32982     /* 25 << 70 */
32983     { { 0x27a866e7c6b03391L,0x980b0a42bfa32fc0L,0xd27856910c105df7L,
32984         0xf3def8c77103a2b3L,0x6c4ff04bdffea913L,0x57b1003e121140ddL },
32985       { 0xf47bb2826d0e3170L,0xa44d6ab1e6abdfedL,0x67114b8a2a4b69d1L,
32986         0x7605714d52d7c65cL,0x3734795ef60b81deL,0x277f9816ebf91959L } },
32987     /* 26 << 70 */
32988     { { 0xe57c2ed902b3b70bL,0xcec67da99dbc076aL,0xcaf66725b0644881L,
32989         0xdea4f6608a3a3f96L,0x5215f097609df5ceL,0x6d828267010193e3L },
32990       { 0x5971ff31a156565bL,0x44f7e4037b64e465L,0x2145ea9ab5486d75L,
32991         0x47b04066758e7ec5L,0xc181833a9c93cbe9L,0xcac07a9fe8443292L } },
32992     /* 27 << 70 */
32993     { { 0xead7cd3d041326e8L,0x721785f26092e605L,0x760864024ba91a6fL,
32994         0xb7b9b9fa335e8522L,0x6ba9c85387bb3ea9L,0x9c9f1f6f89b2ae0fL },
32995       { 0x952bb995aae2014dL,0xf8e74d80c538cfa1L,0xb21ca840b55b7e72L,
32996         0x22565ec4ad982191L,0xf9547aa1f569c537L,0x8d3cb14648596bcaL } },
32997     /* 28 << 70 */
32998     { { 0x340d77c2f3b6cbc6L,0xe09ae22c80f4f690L,0x3e915b028b74d32cL,
32999         0xae7101ca3cc1117eL,0x3c36152b526c5939L,0xdad8aedbd3ec0caaL },
33000       { 0x34de058e351bde13L,0x2fa75fd4582726d1L,0x27c030efc214ac0eL,
33001         0x2a216d1cc7100acbL,0x3b730043309097b7L,0x162ada747afd8aafL } },
33002     /* 29 << 70 */
33003     { { 0x43893d328c216eacL,0x475a3466349d7334L,0xf9f259866114fbc4L,
33004         0x96a22d2f0410b54eL,0xc60b69a53f3d951aL,0x152416e7fb400ddeL },
33005       { 0x3904dd2e8f682dbfL,0x5459272368383eeaL,0x0092554ee8c998faL,
33006         0xc80f28512c602ce9L,0xab2f8533b197386fL,0x8c302dbc91094b32L } },
33007     /* 30 << 70 */
33008     { { 0x853d994eea2026d9L,0x18734b04a1b927d7L,0xd4815747ce88d009L,
33009         0x0265742f01b856bfL,0x05fd8b1e205d4e15L,0x0f4c8be0f1da4808L },
33010       { 0x2652b76c456d62abL,0x0d3d1a29cbb8d818L,0xf350487453048509L,
33011         0xe393ef54e89ae4a5L,0x19ed8f0cc4b1306cL,0xfd72388da1aabd6dL } },
33012     /* 31 << 70 */
33013     { { 0x8a7e1494289e6aa7L,0xc69223e65c955385L,0x2bcbad5c087b8c7aL,
33014         0xc08008a531fed020L,0x9d38f5b2dc117c3bL,0xd84158bee4ad6b36L },
33015       { 0x2c2583eb92fe5b21L,0xebc847bf557ce949L,0x4c1b54ff4fc0fd57L,
33016         0xe437eba325ff2f8cL,0x79a4c3cb383caa3dL,0x38a34856e08356edL } },
33017     /* 32 << 70 */
33018     { { 0x5d7afe9a10fa53ceL,0xe2415b501ff49021L,0xe39a067dc6523492L,
33019         0x3458527527557f5dL,0x756b8d86930e9f9dL,0x88df6219040d52d8L },
33020       { 0x606eb60b5362b045L,0xd179818c9e383cbeL,0xa6215748e068d293L,
33021         0x73fbdca22fce158dL,0x9cfee07dcb183c8fL,0xc0bf2beba5e03c98L } },
33022     /* 33 << 70 */
33023     { { 0x36702d091bf9acc2L,0x1efceaebc9c9dddfL,0x31f9f5599b9afc1aL,
33024         0x359d4ff33e61a0e4L,0x33b3a707f3772327L,0xd990af318ac1c7ceL },
33025       { 0x5ee060b7e736ad45L,0x83dbe8b2f653ac2aL,0x30a1e38b407f054bL,
33026         0x0ec6c70bd9326ac9L,0xeb37ad09d7358ab4L,0xaf36143030551ef3L } },
33027     /* 34 << 70 */
33028     { { 0x7b05d8e56edd5c74L,0x268edfac5443acbdL,0x73e0d693ce1ee52cL,
33029         0x67c67914120a1270L,0x54a897cb6f1c5007L,0xe817914a8d540dbaL },
33030       { 0x85c1fa1958fc091bL,0x4f4989f4cf2698feL,0xbb2d5091168c08b4L,
33031         0xa6143388768cdd46L,0x69ec7a265e62ddc5L,0xc08749ae2654f4b2L } },
33032     /* 35 << 70 */
33033     { { 0x0a9882b37409bdbeL,0xfad3899cf8b6543eL,0x01c183f9f7e9893fL,
33034         0xe6438cf708ac9a25L,0xec22dc81aa0f2794L,0x3b641c02aa277a09L },
33035       { 0x686b1fbd0975c891L,0x4f7e1b680070ce2bL,0xdc343dd7487e3f1dL,
33036         0x8825d9c230f35abaL,0xda5a77a413b91384L,0xf09d958459e405faL } },
33037     /* 36 << 70 */
33038     { { 0x76b242b31cf2ab8eL,0xceb190e697edb12bL,0xd39b41b7089fc439L,
33039         0x6ee54e750892be51L,0x128fbcfcde414849L,0x4462539007fce5faL },
33040       { 0x9d12e04513709b9bL,0xc2c49737d95b22a3L,0x0bcd670be4b34d6cL,
33041         0x78d7b8cd768d7c8aL,0x7cf9382e16a0f402L,0x9b84311d17238fa2L } },
33042     /* 37 << 70 */
33043     { { 0x6b7faaf8c19b849bL,0x24aa5d54a5bec317L,0x991aeb14e7c06172L,
33044         0x52dc7da883e65aebL,0xda8998497696dd56L,0x3844a54e94cea131L },
33045       { 0xc9fb72ac55f69169L,0xe2f7bfc821893ab6L,0x44220c2edc4057f9L,
33046         0x9f4f0c3812d5fedeL,0x5725b2b05c913be6L,0xfa08c56c02d8668fL } },
33047     /* 38 << 70 */
33048     { { 0x9aff9f0c009b3e1dL,0xed7936d97a3c8c8fL,0x0bc8e46fdefbd340L,
33049         0x7b508ef231540ba4L,0x9bcd9108005388f2L,0xa25cfa07c089f35dL },
33050       { 0x9ec7cf81733bccfcL,0xf8a1993a249006d6L,0x1e68981a96d81923L,
33051         0x27b6199adce834d6L,0x2ddccfcfacffb035L,0xf62d7a534fe0126cL } },
33052     /* 39 << 70 */
33053     { { 0xc800c1d5af76895bL,0xc86db45c43f2a94eL,0xf77322fbdbb144cbL,
33054         0xb2607dc8f7da8df6L,0xaf666055b6cc1047L,0xf1db6416375619d4L },
33055       { 0xf6103c8c4b0fbd9eL,0xea8e979fb4f5b85aL,0xb0307d41fd16f61eL,
33056         0x26bf96c58cadf61eL,0xb56c53a3bd348a61L,0xd1a5aa4f8a01388dL } },
33057     /* 40 << 70 */
33058     { { 0xa29d231edda802baL,0xde8d0d510ec3c1e2L,0x0ee56eae117033bdL,
33059         0x4dc9491998bf860cL,0xa08919cd775cd56fL,0x609a30dc1332bfc2L },
33060       { 0x2c337f181a41db0dL,0x27fb0072c974824bL,0x34292c1bfaf28976L,
33061         0x242fcd73ef8c4fccL,0x553723b27473c603L,0xb2191ee9a06a0bc1L } },
33062     /* 41 << 70 */
33063     { { 0xd10b7b7c10bf3427L,0x16f9ebc505321572L,0x057692f6db5fde44L,
33064         0xf45d4d268f047704L,0xe3f8784e25584db0L,0x753764cb9f548980L },
33065       { 0x4239bd4858f5360dL,0x9dc993da98296063L,0x0fbb0c419ffd05b9L,
33066         0xa6a87d50610c3493L,0x99f5669df10f18abL,0x5a03f02ba4224a18L } },
33067     /* 42 << 70 */
33068     { { 0x3c6839e5bf733207L,0xc2f380899c6d106bL,0x43155630e39a7559L,
33069         0x28d6cb546f2b8d34L,0x19738cdf09183c75L,0xa71ec595dcee5a08L },
33070       { 0x8e9c1cc3c70db659L,0x1333d7b38beff6a6L,0xb263d91e036a5aa8L,
33071         0x72728714ee4f858bL,0xd65fcffbb885ceecL,0x08193f585aaaac96L } },
33072     /* 43 << 70 */
33073     { { 0x264006e1b53b4c8dL,0xd3748c0bdea2f9ceL,0x019408d34e580011L,
33074         0x381bcc70b1342807L,0xb904a17191eb1a0aL,0x13ddf3af6151a1cdL },
33075       { 0x13827129bc228909L,0x3378b4834cdbebd9L,0x25806f7ed56635c1L,
33076         0xd1a3fb1c54327e55L,0xb2b8895c69d94817L,0x0779752d7150c16cL } },
33077     /* 44 << 70 */
33078     { { 0x228437506ce71a1fL,0x39c6fd9abf0956a5L,0xd34a4be8c8d29ce5L,
33079         0x41dc15356fbf8fb0L,0xdce277034c950de0L,0x1ad7192f90c75c28L },
33080       { 0x5b3df71e27766767L,0xba85ec629ca80b5fL,0xfadae6e5095938d8L,
33081         0x5ce3ffc24d286159L,0x60f771fdc7b977e5L,0x7a764991b38c0c70L } },
33082     /* 45 << 70 */
33083     { { 0x3e4440b7469f6406L,0xdba02dea247657bcL,0xa551a570a46227e5L,
33084         0x278bd5a06e58b15cL,0xbbc5f8edc53eb694L,0x50e6bf5b855a2c7cL },
33085       { 0xa80af271d231f3b9L,0x6c22008bc139b010L,0x04e9a337ba1e27e1L,
33086         0xcfb75909677a28ccL,0x95c59b55f967af35L,0x70d24fe88d3c6ddbL } },
33087     /* 46 << 70 */
33088     { { 0x0117cabbaedcb5a3L,0xb70a95d52e7bc67aL,0xdc2e07d1ad7e7cffL,
33089         0xf507941825b9a6b4L,0xf953a962bc8b2f61L,0x390a630d181fda94L },
33090       { 0xc833598d1fbdd233L,0x0213e633ac4763dfL,0xe822febbcabd2713L,
33091         0x522864e71d2a409eL,0x49d778a81f904f3aL,0x0dd980e15912be0aL } },
33092     /* 47 << 70 */
33093     { { 0x97f993f46621ff1cL,0x3bdcc1ea7d30ef87L,0x931c624585386384L,
33094         0xd17a7b6a8cb593e3L,0x1b25176da0912f55L,0x323cf7ac2faa4d72L },
33095       { 0xababa6c58683a7f8L,0xa99ebbda4a71606cL,0xb5375f6b0cd8fd0cL,
33096         0xce43e2e08ae372b7L,0x957af3cb9e69c105L,0x167c4fca772d0c74L } },
33097     /* 48 << 70 */
33098     { { 0x0934812574503f05L,0xcd6a64b217bf8ab4L,0x791e72fa1fd4057dL,
33099         0x033abed8f0697964L,0x1085ac930d58690cL,0x8acd49d69c8874cfL },
33100       { 0x929e4c39ff1a5286L,0x9704e80ff28395abL,0xfa69fce54c3d9f8dL,
33101         0xdeb56555fc83a6c4L,0xd375fa037dc04c5eL,0xab2f12f156a58cdcL } },
33102     /* 49 << 70 */
33103     { { 0x381d144f8119fa7dL,0xda3aa4a73c6cf64eL,0x3db4cf0a74cc1520L,
33104         0xe8148941c1cf3514L,0xbc6c7398a22977daL,0x75e26d4982bbdc63L },
33105       { 0x17a626a4c9594c3cL,0x766fc21a60d71273L,0x547331241c7653a3L,
33106         0xdbe3a9f1502617a8L,0xe41acd19a33d622dL,0x4d24cbd5e15d69d6L } },
33107     /* 50 << 70 */
33108     { { 0xdde0a062dbbb9d08L,0xb5676d14153211e7L,0x747247f6f97b1468L,
33109         0x93a6de79b2ada501L,0xf9d4e652518ce913L,0xefb0de76702b82fcL },
33110       { 0x2c54ffd9d68961fbL,0xa6a2d1a384f04f81L,0x88167488d74b91adL,
33111         0xf20bba56a7d73a78L,0x9af1df5ae1afc672L,0xd79ded4543c26afeL } },
33112     /* 51 << 70 */
33113     { { 0x24011535a223c19bL,0x38b55f0a19c719f3L,0x369f86b4d343ce98L,
33114         0x6516fca318288db7L,0xad32d4699e4aa0a4L,0xb6c80dd50480429cL },
33115       { 0x890d73f3b659b787L,0x2d1f888be15362aeL,0xd26a84bf7a9d8c3bL,
33116         0xd79b764460bc6435L,0xecd0272f07b0abadL,0x3ab2390382d7c63cL } },
33117     /* 52 << 70 */
33118     { { 0x3ec1874496d87afbL,0xb02425b5aeea74b1L,0x47cfacea954bb89eL,
33119         0xd8d6ff40cd26918aL,0xf2dbcbb19fd4dea6L,0xc481a4fe370fea30L },
33120       { 0x60df9f99a334a5a1L,0xeacebd61e6fbc823L,0x21932e6ba0140a5cL,
33121         0x6504deb051206cceL,0xaa4b43a350560eecL,0xaf965e7b6535123bL } },
33122     /* 53 << 70 */
33123     { { 0x25ce17e7be01690fL,0x82bd07fc216f7549L,0x26f98cddac6e021cL,
33124         0x815367ff3403972eL,0x01b1cf87cd89d71dL,0xe777db14ae24f544L },
33125       { 0x8081a692f628a076L,0x663adf4498b98423L,0x4a31e0bfbfb25b73L,
33126         0x5b42f193427be5b2L,0x24b1369118ae7408L,0xf13654a6e9998e84L } },
33127     /* 54 << 70 */
33128     { { 0xf8ec0a9e1b64a70aL,0xa1042bbb45fc54dcL,0x3ac4a936b7cbec0bL,
33129         0x0c2db54708eb7d93L,0x3f16e7c961ae36d2L,0xde25381b4611083aL },
33130       { 0xc1680ae3cf5edeb7L,0x7c86d74ce2b3398eL,0xa3ec4cde9945710dL,
33131         0x303d28ce864e3b4fL,0xd5b9730012956ac7L,0x9ad973be3c0763b2L } },
33132     /* 55 << 70 */
33133     { { 0x526c03ba1979515aL,0xe6492299cde06e58L,0x2215e3fb93ec91d0L,
33134         0xa086161bf783b7caL,0x89e39ff44ef0015eL,0x42c6ccc595e90587L },
33135       { 0x7577d689a81ec775L,0x272e4578daf4d896L,0x6d43c717cf01d7aaL,
33136         0x583814cffd5253d6L,0xee692f0666f7a3b9L,0x54048fe4e99bc633L } },
33137     /* 56 << 70 */
33138     { { 0x2afba531c0b9171aL,0x687dbe4cf2d75c55L,0x7c1c73f7fa17ba3dL,
33139         0x7886dd45063787eaL,0x14f59a18abd0a109L,0x1819df3c873bb66cL },
33140       { 0x76c969dfe01183f5L,0x486a120b1a78b6bcL,0xdfd702fac5686aa4L,
33141         0x2f74157bf3457569L,0x66c8c73e01964800L,0x0a2f6114def25ca0L } },
33142     /* 57 << 70 */
33143     { { 0x841838a8227220dfL,0x39eb77e2cd45ff3bL,0x7140aa47f5a060cdL,
33144         0x9fae5937b55bc3a6L,0x243390ea09b711c4L,0x69db2ace867a3eedL },
33145       { 0x14ee853a152860b0L,0xe3389c4edae0dae9L,0x4fa55ed1248a496aL,
33146         0xda6803e00ef304bbL,0xd19f48bcd04c2823L,0xe76b8d82a61773d1L } },
33147     /* 58 << 70 */
33148     { { 0x2e3a6332f7ae9a8aL,0x89f1576f78a12a00L,0x9597b2b245ab254dL,
33149         0x2017d6306309a625L,0x0385c02719adbe9fL,0x26c84f2014606336L },
33150       { 0x3808a31a3584dd47L,0x0fd2bd1b4e1da791L,0x70c2827fb894be27L,
33151         0xac97e84547d1faecL,0xa63c56fe9b01c835L,0x19c3b18067ca7507L } },
33152     /* 59 << 70 */
33153     { { 0x975dbe423a07930bL,0xf03fc9da8f7975f3L,0x94209a2522662e65L,
33154         0xf5b20e6b9619dcdbL,0xa95e2188ed5ee020L,0x2301e35abe7fb828L },
33155       { 0x4216b05b9caa0bceL,0x0534eef625cdec7bL,0x81f5c5f8613aa24bL,
33156         0x8705662951451a5fL,0xffafb623df15645dL,0xe19276fe79c497c5L } },
33157     /* 60 << 70 */
33158     { { 0x461bb6e1d118ef5cL,0x277e378d1f4bf653L,0x3b4138849ccaab1cL,
33159         0xa5979a3ecea9c61fL,0xdc2a23c09dbfe67dL,0x5f7e32f5335cb2d7L },
33160       { 0xeefe71a87accbd69L,0x65d961341df58e12L,0x17bafa56538145d8L,
33161         0x2a723472695df807L,0x132b5320394ec082L,0x96219e617d0ed426L } },
33162     /* 61 << 70 */
33163     { { 0xf08ee7071ec12e08L,0xb9a51fc40c4917aaL,0x1aa9b778aa085b77L,
33164         0x3b3e40d72e62193aL,0x3700217fdc211bb4L,0xed03eaf4fbea2fdcL },
33165       { 0x82e00364c55111e0L,0x3be15019e3cbc07cL,0xf142d230055b597bL,
33166         0xf68837b1a063deb9L,0xf1368df622e72e40L,0xfc712c67ab522f37L } },
33167     /* 62 << 70 */
33168     { { 0x02ca4c0dc3c8ee2fL,0x1962366a0d75f552L,0x6354ab90a43c43e7L,
33169         0x9f46429f7668d14eL,0x70ffaa6d0ca59472L,0x231fdb485a95ad7eL },
33170       { 0x82ae5f0acb2ebd5dL,0x2dc8417ce51b1d3bL,0x5052133a2fb456dfL,
33171         0xad3b4cf2bad61a16L,0x59f283a48d76344dL,0x5f15465772b18fdcL } },
33172     /* 63 << 70 */
33173     { { 0xe0ef0c3cc73a7131L,0x8a4e0cdd43ea81fdL,0xceb5fcb8d6d6ce6eL,
33174         0x941179893535781dL,0x20f5e952b37d4531L,0x5e77f33364c25699L },
33175       { 0xb6645e8fa6d3ff57L,0x6dac30cb5b9bfdc0L,0xb29648e73ebb655aL,
33176         0xe1bf3f4005ebc1d1L,0x1b12288514025fdcL,0xe15fab026c5adaabL } },
33177     /* 64 << 70 */
33178     { { 0x86230934f14a99d9L,0x1cf9c66e97c1c092L,0x01e186ba6f595ed3L,
33179         0xd3291c3de2284a58L,0x03dee2311b9e5e25L,0xf2e9b4ad15cc9f53L },
33180       { 0x4fba15679770c29dL,0xbf7d673650c4ae2fL,0x86901eb92532d015L,
33181         0x4396fd784e7455deL,0x2fbcea8fbcf811c9L,0x3981ad15ae952b37L } },
33182     /* 0 << 77 */
33183     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
33184       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
33185     /* 1 << 77 */
33186     { { 0x6bd2c54d4cb89afaL,0xe78c8bfa36527751L,0x27f52654e3eee747L,
33187         0x56f205839598d907L,0x5f91c2d027cb3712L,0xc501819fa3e33c5bL },
33188       { 0x248490aa4eded738L,0xde7ac94427789065L,0x20138b3d74f7d38bL,
33189         0xae791f602fb60214L,0x6b4fb300bd033d4eL,0xc69c25d9bdfd1f17L } },
33190     /* 2 << 77 */
33191     { { 0x0c3d2056be21a890L,0x1c1ffbfb8fcfba99L,0x1b68a98b1fbf56caL,
33192         0x56fd85ff396e31cdL,0xd2ca58444382c03bL,0xc442030a7d3ef917L },
33193       { 0x4129a731426afafaL,0xacff17ff5eaae9c6L,0x9e854180653f3b23L,
33194         0xe65a1a149ee066bdL,0x3420084e362ea5feL,0x6fe58801c7911e2eL } },
33195     /* 3 << 77 */
33196     { { 0x43f0ae676c4be6a0L,0xabc6a17a504bffebL,0xd5be6c25dbb4492eL,
33197         0x7efc9ee884bff97fL,0x54fbd9d7062da2e2L,0x1befeb61c6d2ac32L },
33198       { 0x14cf6dc0cbafef5bL,0x8e640e4771d12192L,0xd0566543d9a16800L,
33199         0x9cc2ade9beb1e28dL,0xcbfeb45038e65833L,0x3852eaacd0f5acb2L } },
33200     /* 4 << 77 */
33201     { { 0x5e930d65c4650b85L,0xbe96b2ae6350da54L,0xcfac4f7efa08bd49L,
33202         0x277e8456a6e10f64L,0x41be3067407ac162L,0xcfd1d03252a9b68bL },
33203       { 0x8d8d216a9c337e0bL,0xace044dc4e1b9cf5L,0xad9a4102c60d54c3L,
33204         0xb09420f028815187L,0x881179c60b3b8e59L,0x872685ed5b09aba1L } },
33205     /* 5 << 77 */
33206     { { 0x26d43085ee64924eL,0x5eb54d1c4bd6a77fL,0x69a69ccfd1ca022fL,
33207         0xaad92723a3342720L,0x51e27b54421d836cL,0x15e83917fc72a1adL },
33208       { 0x183e75d14ddea73eL,0x73fe3b9fbafcecfeL,0x0197e0925daefd64L,
33209         0x2fa89f60f85b8249L,0x95411aafd23cd465L,0xb7dbe7485d9a459eL } },
33210     /* 6 << 77 */
33211     { { 0xab146c207dfc66eeL,0xa7250dcebb6869efL,0xaeba44439d7ad5f8L,
33212         0x919f877ec48059f0L,0x780ecd232c6b5c11L,0x586daa8e38625f8dL },
33213       { 0x46a46c789911c031L,0xf56f74fc65303d34L,0x825bb06d4f384eabL,
33214         0xd147719ad6aa2bc2L,0x745fd7460750e1acL,0x2ef411494b3ec757L } },
33215     /* 7 << 77 */
33216     { { 0xdb24cd1af10ea702L,0xf393de57461f8ebdL,0xf56f414e5cfaefecL,
33217         0x758c8d854690230cL,0x6740c974433d2594L,0x69d92a620aa6bb20L },
33218       { 0x17be342e9b0bb191L,0xc1cd309fdbf5c97bL,0x089134df8998140aL,
33219         0x33809a7e82afcb85L,0x409d2a481db47b21L,0x1d54e86ccdb1bccfL } },
33220     /* 8 << 77 */
33221     { { 0x22313dee5852b59bL,0x6f56c8e8b6a0b37fL,0x43d6eeaea76ec380L,
33222         0xa16551360275ad36L,0xe5c1b65adf095bdaL,0xbd1ffa8d367c44b0L },
33223       { 0xe2b419c26b48af2bL,0x57bbbd973da194c8L,0xb5fbe51fa2baff05L,
33224         0xa0594d706269b5d0L,0x0b07b70523e8d667L,0xae1976b563e016e7L } },
33225     /* 9 << 77 */
33226     { { 0x47de66da62a200a6L,0x67b0ce0d65186fb7L,0x8e8f0248238d23a2L,
33227         0x5a44a886c1114a6eL,0x36383e5be8ec166bL,0xd36077d8ca7d2e43L },
33228       { 0x332f98267c45e8c6L,0xcec2ba1355d968faL,0xdca664a84a56f7abL,
33229         0x954652467b03621aL,0x471f66259b6e55d4L,0x401a6a5efb0714e4L } },
33230     /* 10 << 77 */
33231     { { 0x2fee0c6d6046896eL,0xde64c4e0466a90efL,0xb0c9755a55395f3aL,
33232         0xdfe2dfd6ae3879d6L,0x979853c2d656c53dL,0x58bb6121757f381fL },
33233       { 0xdfae5707980db8b8L,0x6d4c7cd7d7752f7fL,0xdfb77382c5dacfccL,
33234         0xd0fca93104177fbbL,0x9ef6d3e4b67891ffL,0xb599dfcb26024609L } },
33235     /* 11 << 77 */
33236     { { 0x79bf86761cc06935L,0x6bbc2d3fd44fe6bdL,0x092678c486f9f728L,
33237         0x05631aaf54c3fe18L,0x217adbbe95eec92fL,0xdcdbfdfb955bcba3L },
33238       { 0xf938779c01bafb04L,0x67f599e73ab755e0L,0x793b591fb00c1315L,
33239         0x7ea2dbae3f2d0909L,0x05436dce46614955L,0x02b988888060d145L } },
33240     /* 12 << 77 */
33241     { { 0x795df21ba1ebf7c0L,0xa98f2466681b5da4L,0xea18a2ab413b507dL,
33242         0x9243326688324aa8L,0x2b91dcc2f74d83edL,0x95054b471f411a13L },
33243       { 0x50869778e3c621f2L,0xb950f3a9427faf54L,0x8949bf7dae29f080L,
33244         0x7c16cd020ef3a3c8L,0x7883c719b122cd0aL,0xa2cad71fc03bd749L } },
33245     /* 13 << 77 */
33246     { { 0x60c794125b3ad53bL,0x91c62ac783981a98L,0xa6f30f473dcd7196L,
33247         0x55417e7598b4c589L,0x2ce067cb345b89bbL,0x4787f0db71936e38L },
33248       { 0x208cb360331d7de3L,0x4b0347aa15022254L,0xc66e58865e8af235L,
33249         0xdefed4c591a68080L,0x0b8dbd336eeb47a1L,0xb6d44d36f732c8d2L } },
33250     /* 14 << 77 */
33251     { { 0xce0b1700d3aa7741L,0x13cc58a90df0cefcL,0xa96149c7da3a1816L,
33252         0xd387d361561277fbL,0x2294f77cf2c363c6L,0xc8d19d51355a8a93L },
33253       { 0x926dd80092affccbL,0x70c59253686afd1eL,0xe4826f2370c4d8b5L,
33254         0x948d43dba2226c34L,0x6ffed99e2a097aaeL,0x80e7a99a2ce18037L } },
33255     /* 15 << 77 */
33256     { { 0x070c3f39b7f01551L,0x21b249434512844eL,0x46e33e16e2e2a68cL,
33257         0xd79daf0ca549dcb0L,0x634fa53966a7b9bfL,0xe856d0a8702990f4L },
33258       { 0x246e5858e466abdbL,0x3f3ad441edfc851eL,0x9ab3db2c2e397554L,
33259         0x6c5b1a39b5cabd32L,0x695649b2427c5cefL,0x6179fa0f82ab4f68L } },
33260     /* 16 << 77 */
33261     { { 0x022aa09d236b71dcL,0xb1ce6a0ea65a7640L,0x317344c5b38b417aL,
33262         0x29a74cdb436451ecL,0xd898eb6ca8b1c876L,0xf0134f99b74eeffdL },
33263       { 0x0d9eab64225d71f7L,0x9679b453ceb3cc2dL,0x37c894ce14dbff2fL,
33264         0x3704d34927065280L,0x9ee435d8ba29a0cdL,0x675bea1409c11c4fL } },
33265     /* 17 << 77 */
33266     { { 0xa8454e2b63263ee1L,0xf4c8a384cc42ffc3L,0xb260754916bf086cL,
33267         0x610d299cfa46a481L,0x21777897ce41a4d1L,0xdfc04bb321573cdeL },
33268       { 0xac7d9433ced06177L,0xfdce0356a281b9ceL,0x22abd67970d48fc7L,
33269         0x1e4ebf7750514178L,0x7f0869ef21a255c8L,0x80ae565c29bf477cL } },
33270     /* 18 << 77 */
33271     { { 0x607cfaa1a38a18a2L,0xb29ae9c760bd3f91L,0x4991432d76a4c22dL,
33272         0x4fe8dcd380e75452L,0x7aeea8150925ed79L,0xa0cc6823b7abca08L },
33273       { 0x647b164fb0a555dbL,0x60545cd3d6076f3bL,0x7e801133807a2045L,
33274         0x74b2200743ac7e22L,0xdfb58fd1716d3e5dL,0x369ad09947772c45L } },
33275     /* 19 << 77 */
33276     { { 0xb6c5dc0635ba2007L,0x6543c6307921115fL,0xa7e5a662eb6c493cL,
33277         0x728159f54a0b8d6dL,0x8cb07ef1b943fa72L,0x4a2c5cc923c46a98L },
33278       { 0xea078b478c26221eL,0x68ef5015ce2be601L,0x3048b5de5239f8d2L,
33279         0x00a98cd419bbe0e5L,0x0a34161caa94a375L,0x879a9a7aac8a411aL } },
33280     /* 20 << 77 */
33281     { { 0x2d968968e3f6217fL,0x60b781ad1fb91fc9L,0x44ce23514a84e6ecL,
33282         0xe8f5627d00a3d089L,0x45211a094a980480L,0x11029b7263274860L },
33283       { 0x44601cfcae0477aaL,0xa05a67df269ca043L,0x9dc3938fb758fbd0L,
33284         0x43d5d89abaa35f8cL,0xa38dfa1f2ab3436aL,0xa29653bc529b7061L } },
33285     /* 21 << 77 */
33286     { { 0x6ab2e32b982cd162L,0xdd690ed7794d6da0L,0x8fee0b461862f33eL,
33287         0xbf9aeee210d244fdL,0xe485aac27dbb57d7L,0x7f7ee4bc0ff23849L },
33288       { 0xfb3c6255171ba49eL,0x089b9986133e45deL,0xb6c033106d04b924L,
33289         0x216af9223ea88efcL,0xe646a49b5fd52347L,0xbb495d2ee404b86bL } },
33290     /* 22 << 77 */
33291     { { 0xe24934ba07fd5fcfL,0x4840e1a6a1027598L,0x4c2294d245eead89L,
33292         0x7717bb604fda652dL,0xe809c21878370655L,0x417853499151e578L },
33293       { 0x8bfe121cede554c7L,0x96037a33952c153cL,0x80458ed86a5b30f0L,
33294         0xba331cf9ca28472aL,0x31b5f463e6c177aaL,0x68c5dc9183ec14fcL } },
33295     /* 23 << 77 */
33296     { { 0x8b78d2bff13dc6a5L,0xacd7e0902285c2a2L,0x6aa7866cb47e9427L,
33297         0x7c2483474d9fa3f2L,0x2e668396f0661aafL,0xf491cd6d08cacae4L },
33298       { 0x772a131158f9a617L,0xf372dcd6b2011823L,0x790a5ae54e6bd2a9L,
33299         0x035ff238fee0c8c9L,0xcbbe828cb0b8c53dL,0x9edba1a40af83ca1L } },
33300     /* 24 << 77 */
33301     { { 0x2fde4893fbecaaaeL,0x444346de30332229L,0x157b8a5b09456ed5L,
33302         0x73606a7925797c6cL,0xa9d0f47c33c14c06L,0x7bc8962cfaf971caL },
33303       { 0x6e763c5165909dfdL,0x1bbbe41b14a9bf42L,0xd95b7ecbc49e9efcL,
33304         0x0c317927b38f2b59L,0x97912b53b3c397dbL,0xcb3879aa45c7abc7L } },
33305     /* 25 << 77 */
33306     { { 0x62ecc0cc429bdc1fL,0x6a8000add447c01bL,0xc2dd42354f23e5d2L,
33307         0xe6c1790a01b4a0dcL,0x2497e53c24393079L,0x0a113afeb2a00faaL },
33308       { 0x96c1bd5011151480L,0xded805425aad86dbL,0x639f24cb76720e92L,
33309         0xf17703b7d825eb92L,0x10f8924e82d2657eL,0x6edc843c627c5236L } },
33310     /* 26 << 77 */
33311     { { 0x472226adf80911c2L,0xfb50c3a5e087a3d8L,0xb194551441848a6fL,
33312         0x61f4fbba9f17504bL,0x8c59b2c48e33924bL,0xa7641127ac7a8608L },
33313       { 0x79feb7fc164a2330L,0x9e0fd67253a44e7aL,0x9c5c973081953c30L,
33314         0x25d6932c3f6342f8L,0x29e8b7664b574a69L,0x02f90a46a5de3639L } },
33315     /* 27 << 77 */
33316     { { 0xe2d1e2a3465ab77bL,0x2ca0f6a3cf45823cL,0xa1b12306dbdce9d8L,
33317         0x820470e7b4b39ca0L,0xe48956c76e847681L,0xc8ed8fc8fbf6970dL },
33318       { 0x52cb109419ba40aaL,0x08136d091efbaaa2L,0x99dd1ad27d71e1c4L,
33319         0x10001f97a3a59a3bL,0x79d229e460e4cad9L,0x6d443d8756732312L } },
33320     /* 28 << 77 */
33321     { { 0x8d6b28b4d7cfe9f0L,0x6ee5407a4dce4904L,0x7acee5e7ba0b67f6L,
33322         0xd4cf6bd2abf447aeL,0xc085e8e2e7330268L,0x23edbd5a145689d8L },
33323       { 0xd2ae9bd21d7b0e7bL,0x3196410ec4fe6ecbL,0x964bef26ec2cd59dL,
33324         0x09c6d07dd5e0bf03L,0x379f131ea65b646bL,0x0439c37964849830L } },
33325     /* 29 << 77 */
33326     { { 0x8afc9a5eae562537L,0xde81bbaab2d4172aL,0xa272c6d53db07247L,
33327         0x08b903ffd86ec6f8L,0x3373041f835aa84aL,0x02e8ecfdc8f18f48L },
33328       { 0xed6b2784ccc11e64L,0x03e45e15842a8292L,0xfcfcc54b653b86efL,
33329         0x9678fe7ed9ea2f91L,0xee5bf4584efceafdL,0x188e49d59fcc4be9L } },
33330     /* 30 << 77 */
33331     { { 0xeb0098cf67a224f8L,0x14e486c90991108dL,0x0dad68314b397687L,
33332         0xf2a4f6cb9d089000L,0x3fcc8803509f7376L,0xdbdf06dddb5d6f8fL },
33333       { 0x2cbf342806ef3e46L,0x4a4bd5eee432ca41L,0xdcb8bdb70e2d391dL,
33334         0x941b9a4ec1710ac3L,0x25cea4333d62c34aL,0x9136e5cd881a70b7L } },
33335     /* 31 << 77 */
33336     { { 0x9bfdb9b310c3ed1eL,0xc9a225ec0cd146c3L,0x1fec4316573c4414L,
33337         0xe11a408f2fa8323cL,0x198c760ac3e988bcL,0x3f8a5a1caf0fda3cL },
33338       { 0x91e89f11f6e78264L,0x3cee0165264eebfdL,0xf9412b049898eaa0L,
33339         0x3c67991a382e46e3L,0x8d833d7a80acd219L,0x746a696c9d233f20L } },
33340     /* 32 << 77 */
33341     { { 0x8b3269a2714a10e8L,0x64cef040a4a2727eL,0xbc5ac714e428865cL,
33342         0x531dd17ffdaba094L,0x86d2405718d657f2L,0xe807b0d92f99dbbfL },
33343       { 0xc428a80f6848ef88L,0xb3ef0709d0b73ce5L,0xa752691922a5d255L,
33344         0xbfe6392318a18586L,0x28a0c772fcf633b3L,0xad22b4ec3f3c5298L } },
33345     /* 33 << 77 */
33346     { { 0x8b6a2f1ae6c40f85L,0xf0f44c54f44cf3f0L,0xda635b687b25d4b6L,
33347         0xee59c00f8cdc9d5dL,0x36509f58cc4876afL,0xe37564484e2c550cL },
33348       { 0x20f965b565974809L,0x26481694e3fe3a63L,0x6778b20becd272eeL,
33349         0x9b6bbf39c9072853L,0x4f61f192b0436bdeL,0x98bf7dafd0221263L } },
33350     /* 34 << 77 */
33351     { { 0xa06a4b56e0442513L,0x6537e117dd513547L,0x89e38ccd2a654224L,
33352         0x2fe734bd005ee292L,0x54d6933498cfece0L,0x85de5c9d85a79bf2L },
33353       { 0x21e072bdcd3da6a9L,0x7a5d707b8c16b8a1L,0x43654d0142d04cd4L,
33354         0x07d589b94a88c151L,0x5bfe9ea2df726b52L,0x877c46ffcf728e4eL } },
33355     /* 35 << 77 */
33356     { { 0xe338f606fa009c33L,0xce596aafa351fe32L,0x8ae0e06123968387L,
33357         0xcdaaaa9465c98e2dL,0xec6b8a818acb9355L,0xc2c67e7facbee162L },
33358       { 0x7068df85517df4beL,0xc34a6ecb7c5c076aL,0xf4193aab6250f0baL,
33359         0xe0cd2f3fa6c9ea47L,0x23a57ccc6488135aL,0x044d73e6c12b842eL } },
33360     /* 36 << 77 */
33361     { { 0x9d8a78808078c8bdL,0x6ea07982076d44f1L,0xc58fc94eeb3bfda0L,
33362         0x0b9e72200dd11b13L,0x8bd58e3aa74a005dL,0x7a30aeda115b7d33L },
33363       { 0xeb0037e6ef2491ffL,0x0fa2d1a7fb39ecbcL,0xb75aac645ac598f7L,
33364         0x2c3c103341f61b42L,0x5a330bf01f7eb885L,0x1c96124d33d5e27bL } },
33365     /* 37 << 77 */
33366     { { 0x3f157ea1b28d1640L,0xa41c98f2c96806ecL,0xef261c3bb099566bL,
33367         0x11d88be30aa23f1eL,0x9a721a2c47ed1540L,0x214cb5b0e4431563L },
33368       { 0x36a95c20250f6b19L,0x6b44f01d30eb0249L,0x141777dc5c67e2beL,
33369         0x6926b32ebbe7bb63L,0xb72fd3bf756cbae7L,0x226661a279dfb835L } },
33370     /* 38 << 77 */
33371     { { 0xc25a44e3300b8f91L,0x08aa9d5691ad1a78L,0x130c561ffdd2a064L,
33372         0x36f0b4608c05f94eL,0x748166e158a351b3L,0xe408976147d40ed6L },
33373       { 0xa0ba5e5d1b2e3400L,0x94aea3b6687f6492L,0xf4975167ea262235L,
33374         0x8014e81143e800d6L,0x635a3c516e5df6dcL,0x71207caf2eb20366L } },
33375     /* 39 << 77 */
33376     { { 0xc00364013638e940L,0x24baf83bbb70e3cfL,0xc08a99b865dca079L,
33377         0xc070152e0d40622bL,0x44880b191697468aL,0xcf95519bfebc1644L },
33378       { 0x7bdc41d7911a74efL,0xb88180314ad83219L,0x53c523185ad49f95L,
33379         0x4e59a29f6d112b66L,0xb2707b9c7515de9eL,0x8322492c150c9bdbL } },
33380     /* 40 << 77 */
33381     { { 0xcd81bdcf24359b81L,0x6fd326e2db4c321cL,0x4cb0228bf8ebe39cL,
33382         0x496a9dceb2cdd852L,0x0f115a1ad0e9b3afL,0xaa08bf36d8eeef8aL },
33383       { 0x5232a51506e5e739L,0x21fae9d58407a551L,0x289d18b08994b4e8L,
33384         0xb4e346a809097a52L,0xc641510f324621d0L,0xc567fd4a95a41ab8L } },
33385     /* 41 << 77 */
33386     { { 0x966f961d46ff607bL,0x7e52ad9bb29278c3L,0x5b9b84b9bc6835b8L,
33387         0x00e4a35ad834701fL,0x53aa139866b8f484L,0xc397f087de063112L },
33388       { 0xb811a9a24e81b980L,0x8d9c38ef8d680c4eL,0x0a7e66ef1c8db33aL,
33389         0x1c7e636bf4e17483L,0x25c0a690ae9acf11L,0x5b0a435985966d63L } },
33390     /* 42 << 77 */
33391     { { 0x3d4a4ee0a3bb186fL,0x84de7765082c283bL,0x499bf10a8fc8baddL,
33392         0x85191faa2db59e7bL,0xc5964c20ccc587a2L,0xfa59313b9cf52cfeL },
33393       { 0xe614ce878da8cf4eL,0x7d8aa381d60e91b6L,0x054dfc4a0d5c0a8dL,
33394         0xbcd89aef28a15c79L,0x2af1121efecbc916L,0x6aa49bcb44f30755L } },
33395     /* 43 << 77 */
33396     { { 0x7953c7ec7b7dc4cdL,0xb709542edbdd99baL,0x7a2afc3eb30b5c70L,
33397         0x7669020fcd0cc804L,0xb57c1d949fade8f7L,0x5ae7d78cb2eef81bL },
33398       { 0xdd5457edca354c1bL,0xa531d85c8f5ac058L,0x5fdca829009e0aabL,
33399         0x8df732f6f2bced0fL,0x3ee658627faf57d5L,0xf7a265735c2f3bc2L } },
33400     /* 44 << 77 */
33401     { { 0xe1ce7f3725a64849L,0x760847744da790f0L,0x4638f287cf5f319fL,
33402         0xe36f3c5308c3786fL,0x07042ce1985513cbL,0xfb955cbf73d9cf3aL },
33403       { 0x3e68a2cacde0774bL,0x321f49b76dc2c816L,0x9bfed81fd76c4d3bL,
33404         0x985b34fefd49fa62L,0x2a3de945ebb8fa9fL,0xcaa616f0405da5afL } },
33405     /* 45 << 77 */
33406     { { 0xf3fa1924bc6d86f1L,0xbcf9d3cbb41dde67L,0xf96431168057ef19L,
33407         0x09315fc52177ef64L,0x1ae99958fcf594a7L,0x7c4baeefaa4dd788L },
33408       { 0xff1ed168a2bb1bf3L,0x9c697d19b4a651c5L,0x5fe29bcc0df8c999L,
33409         0x16446aa446c45428L,0x3a51398061700e83L,0xf34133593f034bc9L } },
33410     /* 46 << 77 */
33411     { { 0x9cc126b8cbf28cbfL,0xf3f8aa7c1e6d63ffL,0x533e48d2b7f80225L,
33412         0x8fea0d204749d781L,0xd8ea614b326f8185L,0x9cf3e07753c541abL },
33413       { 0x09040b60d95c9367L,0xc1b19940f5eabd9dL,0x80b0793cd8f8bd1eL,
33414         0x95fafd6fadff120cL,0x071b1841ce155f8bL,0xa85dfc8cd29d9d9aL } },
33415     /* 47 << 77 */
33416     { { 0xf38e0fdea761048aL,0xd9d5a22c88a93773L,0xbd58470841a99bddL,
33417         0xa31ef1edebb412e0L,0xd5c4fd5a0274ea16L,0xaaf215f380c1f0f8L },
33418       { 0xe842a4537d3dfd08L,0xb5c877ae5a904548L,0x3dadd2eb9c6ddbebL,
33419         0x7f97c541e84e54d9L,0x6183b6ce1b8d8829L,0x2a20c212f50534a5L } },
33420     /* 48 << 77 */
33421     { { 0xc8c9b0ae7176dd90L,0xa95604542917d487L,0xb03b7946e62c508eL,
33422         0x60425926e9fe2321L,0x73b10bba80c1d136L,0xc30a847d9d218c9cL },
33423       { 0x6ed0c8ef2073859fL,0xa176eabf432dd97fL,0x3078096ab9e96167L,
33424         0xb28f0e6cc473e377L,0xb44e4995683a3bc8L,0x483512eed3523796L } },
33425     /* 49 << 77 */
33426     { { 0x7ff5827f22adab31L,0xa7e859ad43ee005aL,0xfc2387f402c9629eL,
33427         0x6f39e84add12b107L,0xd1378037c097d3daL,0xc677b554d70d107fL },
33428       { 0xec15469fe4943084L,0x1f0b13b19d412b76L,0x3b3b49b48a265a31L,
33429         0x45f28cc7dbe97ff2L,0x33f0e31f4efa0f0aL,0x6b22b99e37a5591bL } },
33430     /* 50 << 77 */
33431     { { 0x0a751d3eae0538e1L,0xd51b039af14135e9L,0x92eae0f6e8bdf562L,
33432         0xf253bd5c66557b17L,0xc1ff9054ef26b81bL,0x9d586d39eafd711eL },
33433       { 0xd2b05d3d4f431502L,0x847d727f5823cfe5L,0x2c4e236a8e99840dL,
33434         0xa407e2d87c5981c6L,0x989dd28c69ca34b5L,0x2e8ec6b09fe586e7L } },
33435     /* 51 << 77 */
33436     { { 0x43161b5c40bda312L,0x8fd476b8a10fbb2fL,0x84cbf7579e5d9a4bL,
33437         0x19bb5926a9a31956L,0x66ed993aea9db48aL,0xd7897780ffb0361eL },
33438       { 0xb031e035adfa3661L,0x1be83caf2296b4d8L,0x8802c98b0024cc48L,
33439         0x73adb0c0bac1aa5eL,0x17df92e1bef75b41L,0xd753e99903d800bbL } },
33440     /* 52 << 77 */
33441     { { 0x24940b868733c1c1L,0xf5dd77ce2ac072e1L,0xc248ad6bf7bdb8d2L,
33442         0x423e0cc9d9a8b926L,0x4318d600e6da05dcL,0x3e557e08ca27dfc9L },
33443       { 0x8dc551cdc5dc822bL,0x160da94cbc8fb392L,0x4ffebd2aa6d4d363L,
33444         0x8190c17db1ce15a6L,0x1abcd1361e9dc500L,0xae3a477c9ee52a47L } },
33445     /* 53 << 77 */
33446     { { 0x67ab01575ed80bdfL,0xc77067b69aeb4a86L,0xe6e26abdf7880a93L,
33447         0x782248db1e43049cL,0xa902c41016d78616L,0xc6fa899fbf309f15L },
33448       { 0x81e1532d672d951bL,0x84280ba386556a0dL,0x83190bfb55199078L,
33449         0xbc11e8c25a1c4691L,0x8ac60c7f21152509L,0x4211923ec775dcd0L } },
33450     /* 54 << 77 */
33451     { { 0xa63b33f6746418acL,0x62085e0eb7359443L,0x3b43ea7b5fb598dbL,
33452         0xf4a0f4442b365528L,0x7f4d2ff3eb55a5ddL,0x012cd591f189eadeL },
33453       { 0x3fbdad99f58c8f84L,0x71dc1b0093bf34dfL,0xfb63f09ce062a588L,
33454         0xd5f0f0ad6f24b66fL,0x940e23c91813cd9dL,0xeff8580b55f241dcL } },
33455     /* 55 << 77 */
33456     { { 0xb30719d8b7fb5f3aL,0x8f74305b43275030L,0x2fdb613bf23628bbL,
33457         0x75d9868ad945ccdcL,0xbfae46f4f0b73348L,0x48ad8bafe26679b3L },
33458       { 0x3aeb4743d0b389bdL,0xd2463ca37916297eL,0x3a6f37c820f52fd1L,
33459         0x7bfade4495ffa348L,0x1e3f6282a25cb79cL,0xac3320d5229bd2a3L } },
33460     /* 56 << 77 */
33461     { { 0x261578c7d57c8de9L,0xb9bc491f3836c5c8L,0x993266b414c8038fL,
33462         0xbacad755faa7cc39L,0x418c4defd69b7e27L,0x53fdc5cdae751533L },
33463       { 0x6f3bd329c3eea63aL,0xa7a22091e53dd29eL,0xb7164f73dc4c54ecL,
33464         0xca66290d44d3d74eL,0xf77c62424c9ea511L,0x34337f551f714c49L } },
33465     /* 57 << 77 */
33466     { { 0xd1f879197700d61cL,0x21728fe49a89dc22L,0xdd3a475be6d93642L,
33467         0x3f8554d6e095363fL,0x4b8b712463e1bb11L,0x75db57e6c6da541dL },
33468       { 0xfdeb9e46ac8342fdL,0x8ab4875114905993L,0x48150a06b2efd023L,
33469         0x9f5f513df415bff5L,0x39b1234eee9d7915L,0x735570a7dda66da5L } },
33470     /* 58 << 77 */
33471     { { 0x3a79a1756e3d4ec1L,0xde0ee6c79936b689L,0x37a7d9ec7fb84ee0L,
33472         0xe82810d38fe1f44fL,0xbe433c7253049e9eL,0xe72ef4f5fb49e274L },
33473       { 0x525b72094b4ad28dL,0x37bfb857164f5f0cL,0x60327e31ac68d566L,
33474         0xdb027619bb71f137L,0x8abc8026abb6e829L,0x99702ff15e838117L } },
33475     /* 59 << 77 */
33476     { { 0x974be1d30696f1a5L,0xf884616dd3832430L,0x6997c37ce9dce1acL,
33477         0xf4bad00e2e5cfbc4L,0x7727adf8e327a9a4L,0x15315bf16aeeb305L },
33478       { 0xe697c0af09fbffceL,0xe4291f7589f86a5fL,0x765f1904487b12f9L,
33479         0x752c58a5b7f8ca88L,0x9f9563d473716bf7L,0x48803cdbfd032783L } },
33480     /* 60 << 77 */
33481     { { 0xa0d935ce9050c5cdL,0xc1e062d03e9b902aL,0x212d0e5dc3054c00L,
33482         0xdc9c3f2de70ad96bL,0xa2182ffbc2742144L,0x4680d472a716993fL },
33483       { 0x9852bb00677f3756L,0x2bb3d78435e6213fL,0xadfdbfe07377fdc7L,
33484         0x41db795d708afddfL,0x6848cef57727ed86L,0xb24e416aa6c1dd1aL } },
33485     /* 61 << 77 */
33486     { { 0x36d76f2f2edc95c2L,0xbdf2a67810b0670fL,0x49fc8c43b63877a1L,
33487         0x23182ed3a87c8615L,0x94c21da96c011a44L,0x3bc0b86860d3c162L },
33488       { 0xca6a158244815192L,0x4bd1ce04fd97b78bL,0x1d0074cddc750023L,
33489         0x40cf8233cdfb0c7cL,0xe4e28aa8bbbfbf3dL,0x72656155b6eec7d2L } },
33490     /* 62 << 77 */
33491     { { 0x5b1be65b912b364dL,0xe6369ca1e0335426L,0x249740d58420e7daL,
33492         0xff13a26f1ac1acf4L,0x0ecee744b9634fb2L,0xbaa77d57d664ceb1L },
33493       { 0xadfa7625914f3f7eL,0x17c75e99bbcffe16L,0xcf557911d64aedb0L,
33494         0x8a4b7b49c3644ba0L,0x115240401eb7bb97L,0xb823c21a70fc7b5eL } },
33495     /* 63 << 77 */
33496     { { 0x45db2c038727c0fcL,0xf5aeeb7bbae2c896L,0xfad1cc32eed15b82L,
33497         0x65d4440a8609b00eL,0x35698d956b4dbd25L,0x861615bd0f6cda68L },
33498       { 0x578efdaa8aec1e99L,0x87ddae76fcf67480L,0x5ff5a1304669ccb0L,
33499         0x5fd2f31a0b98ee60L,0xccad491a3cc4c003L,0x6dcf25bbccbc46e0L } },
33500     /* 64 << 77 */
33501     { { 0x93a62e7cfa43699cL,0xdad738901bc422d9L,0x265e3cbb10cc9544L,
33502         0x28cceb062f37154cL,0x6b79b0713bf2e08bL,0x88e025df3ab39091L },
33503       { 0x50a8d04d126522bdL,0xeabbc1b7b779bacfL,0x3db4336ac21cc62eL,
33504         0x4747f0a36fc00450L,0x067cbf1c544b2d95L,0x2480b7d8fd2be7a7L } },
33505     /* 0 << 84 */
33506     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
33507       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
33508     /* 1 << 84 */
33509     { { 0x0233e423d52eb122L,0xc28483521154b0c9L,0x2ca09cef6349e35bL,
33510         0x3b70afc3ded2ec54L,0xc813474d52dded3dL,0x2d3f21bf12f00ee0L },
33511       { 0xa0908f7692f215c6L,0xb97d60e94e9c0440L,0x84ad10c134b6a8e0L,
33512         0x6f37fd956e7c163eL,0x7caae8c8d057e0c3L,0x534f52c2553721a2L } },
33513     /* 2 << 84 */
33514     { { 0xa354c1de72a041b2L,0xe83df25929d1330aL,0x676610999d532bbdL,
33515         0xb7c2f4cf52011751L,0x6945d34ff659e35eL,0x6217d20ba1303b7bL },
33516       { 0xa200ddba25751badL,0xa74a729001d3566dL,0x3018445faa82b46fL,
33517         0xc3e6a3acfccedc1bL,0xe86ae8703353e29fL,0x1c8085bbfd7e8547L } },
33518     /* 3 << 84 */
33519     { { 0x728c8e145d1a678fL,0xf944da572ac89a2dL,0x3016c2da4796df72L,
33520         0xf6d79e4e00a55efcL,0x4fced269526b1cb8L,0x4a93e47791f165a9L },
33521       { 0x528b8572f84f90d3L,0x3b30376e5e725561L,0x4f903520e07bb990L,
33522         0x07ddb97f4ea8ae6bL,0x29c01e70b3b735bbL,0x825c7f6e5000dd4aL } },
33523     /* 4 << 84 */
33524     { { 0x306b63e3b4dcea78L,0x4b10209213636935L,0x36bb68898bdeddeaL,
33525         0x9331655d67a329acL,0x14c7fe26ba92ccceL,0x4e7d6929be0519b4L },
33526       { 0x0dc39dbd164d50e2L,0xd4c430a0b1679cc5L,0xc7f78818fa8682baL,
33527         0x43396eadb60aad97L,0x751784d7ff2c64ccL,0xd37928be866af43eL } },
33528     /* 5 << 84 */
33529     { { 0x3742b61e0475f547L,0x48b2a2c2477722acL,0xf52c6787abce3401L,
33530         0x4749711ea4cb41b4L,0x7ce0dfb03fca817eL,0x1c1e3bf996e85048L },
33531       { 0xcd65250e40faa8e9L,0xa8edce7017d9b93aL,0x73523cb2b4dd5619L,
33532         0x15ba773abb5379f5L,0xcc5e62d6c0a847baL,0x7efe5c7c04d852deL } },
33533     /* 6 << 84 */
33534     { { 0xf0a69e685a91c9aaL,0x0304d20105c13197L,0x773a3ab7cd14af1dL,
33535         0xc0b88edd558d555dL,0xeb12d197d2e63dd6L,0x4a8e849fbcd9cdb3L },
33536       { 0x06432985965eaa14L,0x453d93861a5a6f43L,0xbd28f6164171b9bcL,
33537         0x37781639bbfcf90aL,0x1f93898f3a36084dL,0x1fefd8b7dd00ca75L } },
33538     /* 7 << 84 */
33539     { { 0x3b8d8e495e456124L,0x967ed511967c17b7L,0x1d72430c2aad8c67L,
33540         0xe8c5d506b82c1673L,0x989978868a0fb41dL,0xa9d478f70f81234fL },
33541       { 0xa0c941cf44cc0614L,0xc033c99024ad30f5L,0xaa7de296101f89aeL,
33542         0x4cadd8e3ca6a3227L,0x3b4db51f2764ec0cL,0xcbfe70fc09256db4L } },
33543     /* 8 << 84 */
33544     { { 0xb9207dbc2b2f1bccL,0x6afd6871a3e83ef7L,0x49924e5534ba150bL,
33545         0x2935ebf1dfec9972L,0x34bf5e94b76f870dL,0x22d0f32b4c20385cL },
33546       { 0xc78ac1728ccc8e72L,0x7b45b8220ccecb0aL,0x76c67ee4cfb4b8baL,
33547         0xecfaefb2cd8724b6L,0xe9bc3d67340bc1efL,0xed40b2b9ca5541b5L } },
33548     /* 9 << 84 */
33549     { { 0x5d1bd16518f8e17dL,0x754986b7405f822bL,0x420b1b24d8753fafL,
33550         0xab038e0608ff680cL,0x33621a0fa3649f49L,0xe24b84db78918eb6L },
33551       { 0x0e669672c8bf4168L,0xcb7fab33171eab20L,0xa097d2cc4808be42L,
33552         0x4f4e395f5842b80bL,0xddcb1e51a579145cL,0xa635d0cdf330ae0cL } },
33553     /* 10 << 84 */
33554     { { 0x9b8a3eb3069e6432L,0x43aaa7fc721397f7L,0x46e23c6ca7e83a71L,
33555         0x71b261d593fa3c25L,0x4a47a1050f523a72L,0x31919e898dcad752L },
33556       { 0x4c8b06e70c5dd2adL,0x677ec5f38bdc55e7L,0x4372d55dcb1b5828L,
33557         0x7bf054c1f04dd321L,0x4e8c1a992e44584eL,0x6807803751d35d78L } },
33558     /* 11 << 84 */
33559     { { 0xa6d78a3d754377feL,0xcc17c26ac72ae5e6L,0x2f0ab93b1c05fc24L,
33560         0x1645c369d64c9d40L,0x7c37b12c563e7e9bL,0xb70d292d58b477cbL },
33561       { 0xc283aca993a2d5a6L,0x759e9118354c183fL,0x8a031f6fdd8f4125L,
33562         0xfa8b17ad56edbe3aL,0x6e0f96eb63c651ffL,0x40361942b5085541L } },
33563     /* 12 << 84 */
33564     { { 0x25ae349981d311b3L,0x8640f52a3b16037bL,0xac0839941d947065L,
33565         0x3723c75ee2e693d2L,0x65040a51b66f429eL,0x7f582b0b035a3a53L },
33566       { 0x20eca9e10a166da6L,0x45b37e202c4cc565L,0xeab882957a8a96e3L,
33567         0x99e771dab60a1a1bL,0x2cdd778c23b03965L,0x8d4d7a7291052478L } },
33568     /* 13 << 84 */
33569     { { 0xb57b345e4ff33506L,0xc1a3092a31d23fc3L,0xc16b501e905e1f58L,
33570         0xa36a3b1f29067b85L,0x7cfabd23c214dd5aL,0xbd5f7ab726ad949eL },
33571       { 0x8f64595987363816L,0x49c1a3e679d12d59L,0xcc8f3e2c32d771abL,
33572         0x008d900e6bde16d1L,0x60428a0f60165966L,0xd4f8d9eda7383ab9L } },
33573     /* 14 << 84 */
33574     { { 0xa52d3c2d7e8f73b5L,0x86d8063351842657L,0x58f01253b3949ebaL,
33575         0x97689f15e79367d0L,0x918bf9a30d820328L,0x2d4bc99441c959dfL },
33576       { 0x37392f6e8c16ee54L,0x9f726d58e6f0849bL,0x497de1e4b8208f08L,
33577         0x60c51233d51a29b3L,0x0f61fb03c9e1d465L,0x09494bd0fbe2613cL } },
33578     /* 15 << 84 */
33579     { { 0x100ef5d0a2bd7bd4L,0x89efecf5f45e2a66L,0x63bc210b653786bbL,
33580         0xc7748dba0a0e47c4L,0xaf8122ae110d1ba0L,0x6695bfbf797c78bfL },
33581       { 0x9b0e6fb1d7dbff69L,0x106799703f53040eL,0x22d9ed52fcaf4ed1L,
33582         0x1e27bafdcc1b2d4cL,0x839f9c019f1c88e6L,0x1112fe541321ad66L } },
33583     /* 16 << 84 */
33584     { { 0x4f293478154d0f99L,0x1b82320dd07a24b3L,0x1bf7c94f64d55f6fL,
33585         0x4489b57d725c5125L,0x3aa4d43ab1b6a091L,0x054842bdcf7a60faL },
33586       { 0xaa918a4d2aeb4cb6L,0xcbdaff99ac7d317bL,0xed0e00a16812a03cL,
33587         0xb09acf270b0a1e4bL,0xc73a41f7ac28386bL,0x43134dbdf4cd1321L } },
33588     /* 17 << 84 */
33589     { { 0xe5f746af6e001a20L,0xdc975b02d6a9925fL,0x6d13e266e57f9100L,
33590         0xe013661396a9c4c9L,0xb483162850a66d45L,0xe3b0f96d4ee8439aL },
33591       { 0xf2a2c08d3e074501L,0x987b2b6b2be498e4L,0x605aad24a15b815aL,
33592         0x5bf2186f8529ad68L,0x1413b3d7885ad25dL,0x3de23959807efaabL } },
33593     /* 18 << 84 */
33594     { { 0x08336ffed8c33924L,0x15b56cbf5140b253L,0x38dcd310306caedbL,
33595         0x04ecd49647944afdL,0x1280d23f68a48f95L,0xf414220434363c6eL },
33596       { 0xd0a397eacaa8717fL,0xb51a1669c3994b80L,0xa02eed916c56808bL,
33597         0xc3ab55c583545c3cL,0x8b835820fd26114aL,0xe0cfa4a6ffff324cL } },
33598     /* 19 << 84 */
33599     { { 0x4db4bfb788b45f19L,0x130252bbe0d5fd16L,0xe44c97b22808bff6L,
33600         0x885e4555b03405caL,0x3b7ce036be9af81eL,0xebe17cf58c552276L },
33601       { 0x6eb946c977f4158fL,0x36c23a9c74a5e642L,0x466ff55f2e70a453L,
33602         0x327fd5fd28ea7af7L,0xc96bfbec6e658256L,0xaf194fe8c0a3b932L } },
33603     /* 20 << 84 */
33604     { { 0xcf63d27951c0d95eL,0x3b170a0bac86a014L,0xc21eaaa9881095e1L,
33605         0xed2fda116069a3ebL,0x536264b9bd2f1c5aL,0x819e1cffde312c2cL },
33606       { 0x6c30f983dfd6ce38L,0x2f32cc4c980b439eL,0x9fab10b63b9c03b2L,
33607         0xdfebe34e011ab74aL,0x587360e3b80963f6L,0x3db1f6108692e352L } },
33608     /* 21 << 84 */
33609     { { 0xf262f2379765908aL,0x76f8d0017d03cdcbL,0xdbcadfb22f35de21L,
33610         0x88d5bf592a73815aL,0xc4f4e3b02b1bab82L,0xf5cce885b9635dcbL },
33611       { 0x110a785875a416dbL,0xfe7e6c360adb01feL,0xa02642c01374d779L,
33612         0x9010758753bb5898L,0x0c764ed2a363fcf2L,0x24a2a5541700e551L } },
33613     /* 22 << 84 */
33614     { { 0x63a094c5fe3d070bL,0xf769b91988515eb1L,0xafe86e1450d1131dL,
33615         0x6bf277886774d3d4L,0x7231d699ffd805d0L,0x05132e5b6304116eL },
33616       { 0x3d5e255be34ce5bcL,0xfd9c3bd0c95e3089L,0x22a24023b83cbac9L,
33617         0xfb6d2b6fb0b3b98aL,0x74af1115f7e36fcdL,0xcfe15eaff9da3bf0L } },
33618     /* 23 << 84 */
33619     { { 0xb242ffd61da39f60L,0xd0ed946320cac1b3L,0x9ebd5e46e25f809fL,
33620         0xc7df7e5a07f5aa4eL,0x5eea38d791a5f85dL,0x6240f01d6080442fL },
33621       { 0x72ec0a5e251d866fL,0xd3e4acbebf2c0037L,0x0d4f47c90fd962d7L,
33622         0xece7c047b8de2dfbL,0x841050b96df17f0fL,0x567c3df7e933a4d5L } },
33623     /* 24 << 84 */
33624     { { 0x266d2c1cbb2fcdaeL,0xb538d4a252be93f2L,0x774c88ba73bd0094L,
33625         0x65283a9b81a7e042L,0xe1438bbfd0381625L,0x450e1f644d0db206L },
33626       { 0xb38ae9ef4e60fc4aL,0x14ce87e112719817L,0x831d41ec570303f0L,
33627         0x7172917028850444L,0x2077ea32ccd609f5L,0x091d1166cd273fdcL } },
33628     /* 25 << 84 */
33629     { { 0xaf5916f49412edcbL,0x9ccc0dc08f01b2d9L,0xbed1fdd42dd737c8L,
33630         0x29d26cab95a21501L,0xff38bf18c70f1364L,0x0bdb055876879b06L },
33631       { 0x706031e2a14164d8L,0xe229fce1fc39648bL,0x5ebc640878e97c8bL,
33632         0x26039bda822de18fL,0xab992da4b9f090d7L,0xf409432d53eb438eL } },
33633     /* 26 << 84 */
33634     { { 0xdf216dd84b2ca517L,0xb3eec4b9c6b74c4dL,0xf564e6c81c14e77bL,
33635         0xcde25f1c2c2c9395L,0x7e31f7a5049fcc83L,0x6913707b9284c753L },
33636       { 0xb92a6f2458e6eb5fL,0x85b0cab595148292L,0xeaad036d7449be92L,
33637         0x2f6a2888eb94a702L,0xd7d8773d47d59fb0L,0x612d257303c0bf25L } },
33638     /* 27 << 84 */
33639     { { 0x805ece910ea742f6L,0x54486a6ffb5dba94L,0xaceb0eebbae52f76L,
33640         0x2200fd85e98794f0L,0x44bd993ef305af19L,0x28f256738eb8baceL },
33641       { 0x5d3fabbadc5f9c18L,0x4338f79c1b003ed1L,0xaf4b0566bc20c65aL,
33642         0xded9407c3045d1bbL,0xe8713d7506391eb2L,0x557d62c971307365L } },
33643     /* 28 << 84 */
33644     { { 0xb872a10584d2c3bbL,0x44bca57139196026L,0x857327d84e352e5dL,
33645         0xa6c6004ad925f99fL,0x48aaf266bab79eadL,0x213ad923adab2a3fL },
33646       { 0x3be29b6df371cc48L,0xe732b9062385c9f4L,0x562e0be123f0a84eL,
33647         0xbb6b017228c4b0dbL,0x71a93ae5f4c6d8beL,0x76b8bb16551f1fe9L } },
33648     /* 29 << 84 */
33649     { { 0xd028d9b5242002c2L,0xea105054823783caL,0x01cf8a491d45c34fL,
33650         0x1035835e42457869L,0x0a95049661cc1e05L,0x9dce5bd3b439afc2L },
33651       { 0x8552f02003b18e4fL,0x4973e3bde6144805L,0x29fb98d8d8514c4eL,
33652         0x0ce0e8d83ca27b39L,0x7aaf3f5284bbc6caL,0x0572bf40d78c7c5bL } },
33653     /* 30 << 84 */
33654     { { 0xbbfaaa94c39926a8L,0xb9a59fdb60a138aaL,0x217a1aa2947e30e9L,
33655         0xcac988c9c52c9fffL,0x5676473a3bae3c39L,0x7d84b353857f04c9L },
33656       { 0xdeded30cdd324e24L,0xf07c678a9c242899L,0x956d05538cb64f3bL,
33657         0x9d34e2f5502cb2b0L,0x99e1054a51dd03b3L,0x86b8bfa54d60a593L } },
33658     /* 31 << 84 */
33659     { { 0x3dcd2df9c8870c4eL,0x7cfdd05f1699cd0fL,0x19e9ccf027e79e0fL,
33660         0x56e997027b85d75eL,0x407b5b74ccadcf9cL,0xc961a336297dda7aL },
33661       { 0x350c34d56d12d17bL,0xe37de9a93bc6afe9L,0xd2c7339e0d641d3fL,
33662         0x2700f39cf7dfa063L,0x2916f9ad8ddef077L,0xffec6230547cdbebL } },
33663     /* 32 << 84 */
33664     { { 0x10a53b90754d15e9L,0x6cde9a0c5f4c7218L,0x740d513fabef2b96L,
33665         0xff6cc47cd3f802fdL,0x1be6825beb0627afL,0xdb21ede55886c2dcL },
33666       { 0xb6cfb2c6f5daaed7L,0x68b61aa8fae29a9cL,0x7a1e16f53a5a485bL,
33667         0x16b60b92e7b2223eL,0x332f33d836a13a9bL,0x4567c313876cd1a2L } },
33668     /* 33 << 84 */
33669     { { 0x7663402de62014a2L,0xbffe1e7fc4efd224L,0x2080eb02c38f766dL,
33670         0x6c95529ba9641db9L,0x24dc13a5c68de8e5L,0xca219b3fbbc3016bL },
33671       { 0xb83450e310b634e0L,0x8cd26d775b097a34L,0xb912c34564c9884fL,
33672         0x3d1f28be5bd75f1eL,0xdcba2b479466ea59L,0x4077e017ca9948e3L } },
33673     /* 34 << 84 */
33674     { { 0xb4b2c65df91c7972L,0xabe915496b689013L,0x4eb7afa8d506333bL,
33675         0xc2f2ac1d648e7c0aL,0xc6bc96b1213cc243L,0x0b827c2189e44025L },
33676       { 0x2e866601cadee87dL,0x8ee85356b4719ce3L,0xefda7427b4fc0081L,
33677         0x0d5c33c4c802c92dL,0x4c8635ab58515f01L,0x9d7ed87edd0ab04fL } },
33678     /* 35 << 84 */
33679     { { 0x9a660794cda4cadfL,0x70784fff2484a3b3L,0x8ed664ad2de7de13L,
33680         0xbaff5937030d906eL,0x884407034ab43a4fL,0x86dfdd53ee09795bL },
33681       { 0xcffa6852fb0e889cL,0xd94373e1e8c9fb95L,0xecc0ea249b0e3ac1L,
33682         0xe88eda6eaa89e492L,0xbb049803da19207cL,0xfbb0c3874bbb5be6L } },
33683     /* 36 << 84 */
33684     { { 0x3e2bdd9b5a5f6b4dL,0x30cf4762ab005a55L,0x8736f5188bacd78cL,
33685         0x8a5a647b09dc21fdL,0xfba40c38ca06c1fcL,0x63d53fb64a4e1524L },
33686       { 0xe77d07a19a2bd706L,0x54144ea7bbe30e86L,0x8eb606220bd955a4L,
33687         0xf689cc80b3c26cafL,0xc70fe95c9fefcbbfL,0x67f9e8e2495b5bdeL } },
33688     /* 37 << 84 */
33689     { { 0x04361e6b2e4d2cf9L,0xdbd3cc13ade11ba7L,0x93dc1d1df47d8ae0L,
33690         0x7d46bba6fbb2d65dL,0x797ea0df92e97abdL,0x09eb3975a712e8cdL },
33691       { 0x9ab3a54e0380cf8fL,0xcd1a9574c96710b1L,0x6abcd1a1dc13dbfaL,
33692         0x1be0db71c2ee67f9L,0xee8ec8d0c2ac89a5L,0xbc363f407da201f5L } },
33693     /* 38 << 84 */
33694     { { 0xc86c049bbbef377cL,0x43df6f3703de56a7L,0x01eced2b558e516fL,
33695         0x18fca0bdb43c1cc0L,0xd8c6f7ff62121c68L,0xb2f1f1ac36f90713L },
33696       { 0x5f876328ea1bbd95L,0x9f22dd535ac4ce8cL,0x7e052acc7df88002L,
33697         0xedf21fb7068d46a4L,0x349130a21d7d0220L,0xcccc79beaaa68eebL } },
33698     /* 39 << 84 */
33699     { { 0x9c955b5eb4100632L,0x8d6dd2d3ccd99a0eL,0x700f827c265dd397L,
33700         0x5540bc0cfc85a2c1L,0x6d4b8e7adfb81661L,0xfbfe1ebe1d5c1485L },
33701       { 0x322c2883c9dc1b6cL,0xc7c897cdfd7e0f34L,0xe70b0586030e41aeL,
33702         0x4263e06e26a728b7L,0x0ee2b93392387542L,0xae708ccaf6220511L } },
33703     /* 40 << 84 */
33704     { { 0x05ff8b9cbc15ae37L,0x94dc2e85d06d62edL,0xea1d1c8b4b02607dL,
33705         0x1fc202a224da757cL,0xbd5180bb35440e69L,0x0263dd51698ee7a5L },
33706       { 0xbe93f27654013d74L,0xa7c041c464e81695L,0xbb170ac13ba5336fL,
33707         0x1aadf302af84dfa1L,0xeda58747c960788fL,0xb456070e5eefc35eL } },
33708     /* 41 << 84 */
33709     { { 0xa905d421800ed69aL,0xdb8a643813622898L,0xd003affbdaab0769L,
33710         0x467bc051f0aed9d3L,0xed1e6951b11085d3L,0x7a1d1152d3f54fc5L },
33711       { 0x8cb243b6dc8dd008L,0xf9c690d1f409210dL,0x9a3195399461aee0L,
33712         0xf580724dbc2e4de0L,0x52f648e4e759556fL,0x235a79f2697885d6L } },
33713     /* 42 << 84 */
33714     { { 0xb293d3fe8220ceb2L,0xace20e7e049a33a9L,0xa584ad52af4198d6L,
33715         0x49c5cde64aa0a5c6L,0xc4f7877ecee2e664L,0xe1557968bb98ed87L },
33716       { 0x69b0cd713066000dL,0x1af188cbc7399f29L,0x5b88b85c306188a3L,
33717         0xcffa28eb4097182dL,0xdb01149ec80d0aa9L,0x9f8e6d59402bc397L } },
33718     /* 43 << 84 */
33719     { { 0xa646077bd5b97d37L,0x618df84461cfbd95L,0x3a9fe2f447c62894L,
33720         0x7f2760eb4e0f1612L,0x50c08fdb36e5acf1L,0xac799584675d2aabL },
33721       { 0x3eba6f54917dd606L,0xf585fa5075119ed9L,0xb047abfca32016bcL,
33722         0x61c03e51aca118f0L,0xef9fcc526dc13766L,0xd849eca5e8a3fb72L } },
33723     /* 44 << 84 */
33724     { { 0x11ac1ff4147faf46L,0x5dd8913882b818f4L,0xe439f66fb15fe5a2L,
33725         0xadf913a5fe8fb45aL,0x3dc708404a6bbdb0L,0xe8e1204da4af4ac5L },
33726       { 0x4be549318ba70502L,0x945d9a765883b39bL,0x99cb1c721a76198bL,
33727         0x96fbed479a7949e2L,0x30ee96ebf0299bc4L,0xb7dc5e76d3dd160cL } },
33728     /* 45 << 84 */
33729     { { 0x85eca39b0c88d5feL,0x96000863af9e0158L,0xbb13f99c4509590eL,
33730         0x50033c18034e2499L,0x1e9346f87b86cb33L,0x917d88b4aca548e0L },
33731       { 0x0c422c2e9e2a7e15L,0x6751c95c5e37fb06L,0x631361b8c40d21b7L,
33732         0xe231858ec9958deeL,0xae86abc54d9936e3L,0x60c78d1137bf9213L } },
33733     /* 46 << 84 */
33734     { { 0xa0bcb7c6283190a9L,0x36c884ffc53fe76eL,0x071d4acab23f0865L,
33735         0xd44e3c20e14a82f5L,0x704dadd8968d28bbL,0xb40d2b948e88ad61L },
33736       { 0x4a29142ff3de62f8L,0xdd071910bd7292a8L,0x5b12c32d5b3571c9L,
33737         0xe9886262943c6aecL,0xc49b7506cb1e0a33L,0x87f6c2d3de95886cL } },
33738     /* 47 << 84 */
33739     { { 0x44ba232e010f465cL,0xb82486c69ac91d38L,0xcd1a6bf75de743f5L,
33740         0xe050232838acbc4bL,0x8de9c29631fb87b5L,0x9c8029250450c4efL },
33741       { 0x19ee1607635e64a6L,0xeff5478c69ed7f8eL,0x311201a027001c21L,
33742         0xfc0382a78beb55ecL,0x494b623ce9dea7f8L,0x926a3f756767f769L } },
33743     /* 48 << 84 */
33744     { { 0x802f495cee46f99bL,0x0f3ad0ee43b91cbbL,0xeaf3b294e9b3f0f6L,
33745         0x82cc760033cbdcd1L,0x1a5642278e83fce5L,0xcf1b2edaffa0e4ccL },
33746       { 0x7d93e9769b1f5706L,0xe4eb843cf873d68eL,0xcb53dd79eafe5f35L,
33747         0xcbbed8f0fcaafabbL,0x570472705f053efeL,0x2c71a95f1ebfeb7aL } },
33748     /* 49 << 84 */
33749     { { 0x02d4717ddd7a5499L,0x3bc8bdcb9966236bL,0x13f08015fd27be15L,
33750         0xe05236f6baaff392L,0xf73bab3f7b4cc522L,0x8ad26d4552ccc027L },
33751       { 0x79f8e79e9e9ccd7fL,0x8011b92aab2f22d9L,0x6aef576e729662e5L,
33752         0x7d5194d05e568f55L,0x2947d63a1a40860bL,0xe9890f1440305b54L } },
33753     /* 50 << 84 */
33754     { { 0x8085614c0fa9602eL,0x9ee1b9b26651c4ffL,0x65dd9c94ec048f1bL,
33755         0x10b4a62f6d6c0fd7L,0x61469fb7d391dcd2L,0xdf751399edc3d431L },
33756       { 0xe3901315c913acbbL,0x31581d7a90976644L,0xf20809634aee5cecL,
33757         0xaa716eafe5408c5dL,0x9e356989b9a60ad7L,0x2d6e7733a6a3c977L } },
33758     /* 51 << 84 */
33759     { { 0xd6d99f54f19b8464L,0x3322a0b8a0be5c3bL,0x6cff730557e98725L,
33760         0x786709c7953a357dL,0x3864d278a1013652L,0xf7471f111738f6e6L },
33761       { 0x0377a923984c465aL,0x4a24b9e14ba970e2L,0xe53dd9f21c01d248L,
33762         0xf422b754fbffc0d5L,0xae25dc0ec6a956b0L,0x3c3fef96ce806445L } },
33763     /* 52 << 84 */
33764     { { 0x6a69d207b5906d71L,0xf3c757ed8964e1b1L,0xdae255af5f98821fL,
33765         0x6c801ed4db1af96aL,0xd12430343d109b86L,0x4b2aa65fa091f98dL },
33766       { 0xd9bb4c2132dcb5f9L,0xe5a5979bf190a1e0L,0x0861e5de40117a91L,
33767         0x8753c9adc39120e4L,0xfdcb09f4aeb4a18fL,0xdbda38746bd1fd08L } },
33768     /* 53 << 84 */
33769     { { 0x1bd8e8c0304f7045L,0x8ffcf24eedbd2dd0L,0x13c9441de6ae4dadL,
33770         0x5efb70aab418c02dL,0x9d0fede1b8cf6949L,0x613545cf41f5aec0L },
33771       { 0x4e3342244b98bddeL,0x7d0c11110fd8aaf9L,0x30c2bedcdfb8643cL,
33772         0x875d386aa83e493fL,0x85b32632d6cd0825L,0x9f1ef3a01445507dL } },
33773     /* 54 << 84 */
33774     { { 0x2b70440e54f6b8d9L,0x355e692430eddda5L,0x354e7cfbc9199910L,
33775         0x7e8933bfdc7de946L,0xc5692fa981b9eaabL,0x2eb58fff98cf5f21L },
33776       { 0xd0d8f9bb96b19d59L,0x779aad414d1a6285L,0x0cee1a9b5eb87c49L,
33777         0x676e36ff786c4c81L,0x6618c8f112d34964L,0x2061186dd03e9562L } },
33778     /* 55 << 84 */
33779     { { 0xa5ae40977da39b54L,0x98e4d1d9f1d40635L,0x40d97af126154fc6L,
33780         0xf18041d4e9ae28c3L,0xdca9487555978c61L,0x4aaddec43638b9b6L },
33781       { 0x1e615a2eab925f91L,0x5cfbbe9ded8a50faL,0x0f26d3ffb2034aa1L,
33782         0xb2f9cee2c4813646L,0x2195af47957b6709L,0xa55dac537e7fc45fL } },
33783     /* 56 << 84 */
33784     { { 0xe44a8ed7630816b2L,0x5fb9b643cca34310L,0x07826148a3b5d2e2L,
33785         0x0f890db16e65c2efL,0xe9feebe288283844L,0x8e56c6760368a9f4L },
33786       { 0x8f0cc9c93e4ce874L,0x646ede9b09f1beffL,0xe92d6bda014e3d19L,
33787         0x27e620c5520c921fL,0xfd9b2ae1eed78555L,0x68684615816a603eL } },
33788     /* 57 << 84 */
33789     { { 0xcf54e9e89ded00c7L,0x8dff0130abbf7765L,0xf12773fb10c5f8d0L,
33790         0x7435ac767382e4eaL,0x93092b16f61d443fL,0xc1554fa846eb45cdL },
33791       { 0x0896852c30957ca5L,0xc0d91e3effe60944L,0xce8aee57a1b7c75eL,
33792         0x4d24f07007cd1a9eL,0x3d8e381094456b11L,0xed6fba6b9dbc9d0dL } },
33793     /* 58 << 84 */
33794     { { 0x1b1de3ed8b5b8f82L,0xf542399d64252363L,0x23f34cccd206f26fL,
33795         0x54c48d9fbd941d6fL,0x3859eb56202e757bL,0xedcb4729ae0eaf7aL },
33796       { 0xf08753c512360fceL,0xf37ece765f697cd4L,0x073cae01c98a7c8bL,
33797         0x6e298559df664bdaL,0xe8cefd27194b103cL,0x56301e2a811f6a71L } },
33798     /* 59 << 84 */
33799     { { 0x8103c6053d3fe586L,0x472885b3999bb4caL,0x3759d2d492a2834aL,
33800         0xaa4eb3acd46cca1bL,0xcb99aaba633e579dL,0xf9369b033d6dc569L },
33801       { 0x55fdb1fe8398c067L,0xd7aab8b47e6826ceL,0x7f5497bd8b525561L,
33802         0x2e0e1e9c2cd0e3beL,0x3142a6e2c47caf5aL,0xe78cb1840f4b802fL } },
33803     /* 60 << 84 */
33804     { { 0x0a1577baf455f6bcL,0xaeeea79094df32b3L,0x1af3ba0f6bbb15ceL,
33805         0xaab92a74e8522659L,0x84087a8f7efa0a4fL,0x83c6991b84596065L },
33806       { 0x11f7829d29fbb626L,0x32b04b2f86031974L,0xf3a5b8722c1291deL,
33807         0x2ffcc97e8bd2be43L,0x575400d10a206f7cL,0xbb4583de0befbce6L } },
33808     /* 61 << 84 */
33809     { { 0xd448eafaab983fd7L,0x2622336c7a18a7e0L,0x36632e221c274b3cL,
33810         0xe64e8f89bf086fcfL,0x1dced08fef72ebd9L,0x61249c25ea295d31L },
33811       { 0x7433743d3755632aL,0x9d766243ff32ed08L,0xc36e816a977b1d9aL,
33812         0x1069fc0820ccec81L,0xbd4af7bef65a0cd8L,0xd04127fc92e31836L } },
33813     /* 62 << 84 */
33814     { { 0x39560937ea57ca46L,0xe1f2b7198229d346L,0x462b28d4dd02dcbfL,
33815         0x510fce98a333d609L,0x795fbd38fefa05beL,0xd6e34c231bcb029dL },
33816       { 0xf33291fc838f7ec3L,0x2a01a1f5f16e7247L,0xf9737722c0bcb3cdL,
33817         0xc53ef57ecc8a6c77L,0x219372afc750f1a7L,0x3e6a97c3d14e60bcL } },
33818     /* 63 << 84 */
33819     { { 0x87278f062db3d752L,0x64c65f5cd106b7a8L,0x04ccc14d41ee7aebL,
33820         0x72d1189e71952b60L,0x2e88f851080e9ea8L,0x625a6d32913e8df4L },
33821       { 0xd943de73900ee95dL,0x6c12b3b3ecb8b3a0L,0x6209daf2c9b141e8L,
33822         0x81c02f71412da959L,0x222d17b747278f65L,0xaa338805789138e1L } },
33823     /* 64 << 84 */
33824     { { 0xa896d28e4aea3fa2L,0xc6137a456db06ee9L,0x1bbafe8c06fb15ccL,
33825         0x2daab2961cdffdadL,0x984defc8e1119b3aL,0x9cd44c3cde2a25a3L },
33826       { 0xa7f54ece54ed6d73L,0xd283017f50907054L,0x69130efc6a3b9442L,
33827         0x5d17f1276785163bL,0xc019911b172b1d0aL,0xa19c745f7e3e093cL } },
33828     /* 0 << 91 */
33829     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
33830       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
33831     /* 1 << 91 */
33832     { { 0xe185bdc2ab83d932L,0x0a75845dd7c4e754L,0x1f6f3397c3fe5695L,
33833         0x6c9f3a5f61f6a04fL,0x3c0f9d4bb390a92bL,0x9e3336b74793b454L },
33834       { 0x91ad0c341472f06bL,0x4110047a892cbdd7L,0xfa24d90565d53c83L,
33835         0xd63e58334176007dL,0x741089fd2cd1623cL,0x6b3d92022685d345L } },
33836     /* 2 << 91 */
33837     { { 0x1d510157c9cb7f6dL,0x532a077346ab7372L,0x2ea07e2fc6dde9e2L,
33838         0xceed9ad937d5bb1fL,0x3121994b98cc6e28L,0x67d2fbb567ad8fc4L },
33839       { 0x34707fb3dc9f195dL,0x6a601f481fd5a013L,0xfe939b8d81ef6cb5L,
33840         0x5c51e8ab1223a9a1L,0x8f6d7993db74cf37L,0x0b81c5b7972808e1L } },
33841     /* 3 << 91 */
33842     { { 0xcb4e85123bf921afL,0x28fc6332532e81d3L,0x682d8637f69f907dL,
33843         0xbd9fa8f45f759a16L,0x091ea9fa51f03716L,0xd685a14132c630e9L },
33844       { 0x7600c9ac3d249cf4L,0x687e2022002cd2b5L,0x7ec205ab55334058L,
33845         0x9d0d86b13ecf1368L,0xb3fc17a7fc7baf6dL,0x57939961361c91cdL } },
33846     /* 4 << 91 */
33847     { { 0x0db33228010c0754L,0x10635ffa8eca7c59L,0x6efd85380e8a38faL,
33848         0xc1812ea5769360d8L,0x505723dc76f27ef5L,0xd0358e02f35af2e8L },
33849       { 0x9f7bb7fed99419eeL,0x87c66e83430a0e2dL,0x01187549773eaf7fL,
33850         0x05bbbba489d51bdaL,0x52cabb06640ccde6L,0x0d5cb557e7ff387dL } },
33851     /* 5 << 91 */
33852     { { 0x709d61ca10e06f1aL,0xaa1e9fc578eba75cL,0xf85d062f914b2cfcL,
33853         0xe73b3baf9089d85cL,0x4ac05feac4a284b9L,0x92c78a433acb7268L },
33854       { 0x7b5586f8ee45bb4dL,0xc39a0d0e6ac0a9e7L,0xe4bbe3d54d6f9ab8L,
33855         0x1489463f1fd46a08L,0x3ba3182529dba364L,0x94f000d68138511bL } },
33856     /* 6 << 91 */
33857     { { 0x70187dfbc39c1cefL,0xa785216e0c50c71eL,0x30188b816a6c0d60L,
33858         0xeaeda67d6a27e97bL,0x4a5192826ba389aaL,0xb96c7c7ea2bf1273L },
33859       { 0x8ff10657267fe714L,0xdff4a271996d91b7L,0xe34ba3e11dc7aed4L,
33860         0xc457048b38853d61L,0xe89825db1ccbf658L,0x68c7b4556b255eddL } },
33861     /* 7 << 91 */
33862     { { 0xdc14cb2a74871e18L,0x017b1340fcb8974aL,0xea5cb0546e93c20fL,
33863         0xa7c078ada9e2ad1fL,0xa37207d4beb26838L,0xcd8b3b25de7ee8eeL },
33864       { 0xdca6606a2801a7ffL,0xad2fedcf0f8af3faL,0xf27d30b49b530c05L,
33865         0x071fc1c36b2a4613L,0x363aaa99b72cea9fL,0x7a33ed8f3d350374L } },
33866     /* 8 << 91 */
33867     { { 0xc377b373bb20fabfL,0x68d3aa52f986b847L,0xd9c2f2adf39b6894L,
33868         0x1bbff106bd6da22eL,0x3f7e5b8e7e09678eL,0xad6a87897ed3ee78L },
33869       { 0x689e6b31af9807b9L,0xeca87778bd1f6ef2L,0x17d3277edda78c54L,
33870         0xe686caccefb65cb7L,0x758aa1ab19a30f0cL,0xb40df97fb11f071eL } },
33871     /* 9 << 91 */
33872     { { 0x43b379f71a54cd32L,0xd61fe6c948817fa8L,0x6d7b0acc49ab7a6cL,
33873         0xee23b4a0eb6bb45fL,0x340da1f1a2bda931L,0xfdff68411750ea8dL },
33874       { 0x890346b8a96c7df8L,0x551993aed4fafc31L,0x2830b98890de711fL,
33875         0x4d23863cfb5b5286L,0x327161a0d636d67cL,0xf99dded9733e1725L } },
33876     /* 10 << 91 */
33877     { { 0x0bef2d2517da64c9L,0xb94dfc85470bbc15L,0x2c2417cedd4af7aeL,
33878         0x52b5b3bbc8e88ca4L,0xc00328c44f20d154L,0x024290f730af5d4bL },
33879       { 0xe8bacbebeefc7350L,0x89eed6ebb72abd15L,0xb67d1da61d9e7030L,
33880         0x2ddefcbc0e70a331L,0x7d09bc6d61e32577L,0xc2073cc95b52e979L } },
33881     /* 11 << 91 */
33882     { { 0x585939298b806bfaL,0x608ddfbfbce6a08aL,0x674545a08eb27b54L,
33883         0x4b57a947c8fba762L,0xcf960113cbd8c683L,0x7b5a479a4fef1937L },
33884       { 0xe26eb960450e97f1L,0xf04b36b9d8605a37L,0xb208c832ee5af2b3L,
33885         0x3578d3a71fa337e3L,0x22547fca93509939L,0xd93dcb50e848508aL } },
33886     /* 12 << 91 */
33887     { { 0xd40f36e6276f2576L,0xd37455c46405cfe4L,0xe34094d7cc51dbaeL,
33888         0x20f93f0f0edf8bf9L,0x534b75aa23b5e165L,0x438e4dd1dc1b73a8L },
33889       { 0x9dd48c413bddb435L,0xc49867a0996b4932L,0x4212f8a2a9ffa0daL,
33890         0x8d5236c4d94ed9bdL,0x81bec489f169cb19L,0x71cc1d7e6104edfcL } },
33891     /* 13 << 91 */
33892     { { 0x31a94a7f22771941L,0xa277284b39867dc3L,0xc66bd88b1a52f0f1L,
33893         0xd2e2707b1aa21ee8L,0x78e4f280248d61e2L,0x33df48c7596a31f9L },
33894       { 0xb9bf2baab1bb1e89L,0xe1bbcdb4038f10e2L,0x81f674a877b89305L,
33895         0x8b2ec6ee16f08a86L,0xa07239c29db97ceaL,0x9f4ae6647ef8ecbcL } },
33896     /* 14 << 91 */
33897     { { 0x9cb21b57012eaba3L,0xcfce54821347a83aL,0xe3f3a67100d7b34bL,
33898         0xd4bcb3d1a6c1b0c3L,0x6ebd26fb9f3c3e31L,0xd01746532dc79be8L },
33899       { 0xe7cf9a0ad4156cfdL,0x2757cb0416face21L,0x8b0e320e69e1f08bL,
33900         0x2a8caf9b946f83d7L,0x6daff0ba98a399adL,0xb4dfea0938ed6086L } },
33901     /* 15 << 91 */
33902     { { 0x90ed8b41e2bcf8ceL,0xa464972be8dcc1a6L,0x5a3d0b80ba496081L,
33903         0xb636435569f85ac8L,0x0a2765b1a25bdd8aL,0x87a6c18f0d1516bcL },
33904       { 0x9344081ae3b01522L,0xcef8e12e608f0145L,0x6f3566a52155e7deL,
33905         0xcfc1be9c4d033a3eL,0xfc836eeaab97bf98L,0xbdf53718ba7dd059L } },
33906     /* 16 << 91 */
33907     { { 0x16f3708b953b9223L,0x0d3780f8770e7cf3L,0x97a615b227bb71a8L,
33908         0xa8b9a864162f8b55L,0x80ee8362d91e3fb9L,0xb2009a09f83a4ff6L },
33909       { 0x07a7873ac1696281L,0x17ff00c223095ddcL,0x427f683d860d60baL,
33910         0xea9959271f87d32aL,0xb2ac69faa050319dL,0x30c362b9d2d0b9ceL } },
33911     /* 17 << 91 */
33912     { { 0xe05c6a88783508b6L,0xa5569c8ee1779a78L,0xa1e0ca30cc1e84ceL,
33913         0x12ecb540337cca76L,0xafb5e2fb344d729fL,0x558db4e132c8f80bL },
33914       { 0x5aa3c39523128383L,0x9f04757cee1ee2fbL,0x41132bd215356deaL,
33915         0x4e9af313ae07ca78L,0xdfc14c0100c6b589L,0x54fdb4f3dc16a1f1L } },
33916     /* 18 << 91 */
33917     { { 0x71e663c234938279L,0x9a8f5ccdb05630f4L,0xd91ead12aad70096L,
33918         0x2b19b27e9e46cf72L,0x93348c7038e3932dL,0xeab6c03a5c7617b4L },
33919       { 0x57c13a97538eab27L,0x2624d17b2f5872f7L,0x77b63d9104b00f8eL,
33920         0x2e0582473c89db0fL,0x5d367277937d0d8aL,0x28c19068df60c252L } },
33921     /* 19 << 91 */
33922     { { 0x9867bc3d38cd6020L,0x5f341d8c5986f76cL,0x108a3c0d0dab2e32L,
33923         0xd127a7f989ab3654L,0x9d5018f468505cecL,0x51204da0a8fc94a4L },
33924       { 0x1751f30cf6da9840L,0xafe6a8d955ed1f74L,0x270a5d1180165ac5L,
33925         0x739f63e05de1e17bL,0xaa95f30735d2b566L,0xf20dd093650236a9L } },
33926     /* 20 << 91 */
33927     { { 0xd648dd79ee45d4b1L,0x0ceeaa64c2bc2f0aL,0x695f3a3f491a2862L,
33928         0x4c07e2e0ce497e3dL,0x5c53879969c766c2L,0x3f856a2e4c4a7c14L },
33929       { 0xbf8a6d81038032a9L,0xbeaadd7f45b7c960L,0x78b22e85d50b9d26L,
33930         0xac1c56fa7eaefe26L,0x21fbce54fc69f13dL,0x37be1b47512a3708L } },
33931     /* 21 << 91 */
33932     { { 0x12845d55689429afL,0x7e20f0f9082c8ac8L,0xe1615340249773b6L,
33933         0xf66c39638d0f35afL,0x4a20ce6d67d27093L,0x1d462f08e55802caL },
33934       { 0x66f209849ff4dd67L,0x6b86f8d8271c57b3L,0x8701a5cde766b85bL,
33935         0x50737ac2eea5fbfaL,0xb46ebb42a702f3d6L,0xf853091d999258bcL } },
33936     /* 22 << 91 */
33937     { { 0x0ce992198c9e7869L,0x653006be525c4adaL,0x783620e4330c402dL,
33938         0x185a6ac833b728b5L,0xa297c4a99d390886L,0x547d1db5db4b8123L },
33939       { 0xccf12f071acdb039L,0xe89c5866078ddc28L,0x3460cbb1e52c383fL,
33940         0x7a4d1beaad25b82cL,0x21e243fdb429be1bL,0x5aa85c25bdc0d798L } },
33941     /* 23 << 91 */
33942     { { 0x76cf73b9c0db9d16L,0x45e57cdc1970ace6L,0x3c6f5314c54a109aL,
33943         0xe32306f7da47cbfbL,0xb3787bdf93e76516L,0x68aa80084c6d4e22L },
33944       { 0xd9246ddcb3d37be7L,0x6de2bb4d7000f1abL,0xda02568b67e4751dL,
33945         0x3ed7a5615c7f88f4L,0x5f05c828ca5116caL,0x139cc5772a2ebb9aL } },
33946     /* 24 << 91 */
33947     { { 0xc983afb64cb8d897L,0x7f05e954b14cc152L,0x587fe71e0f4d02f5L,
33948         0xaaa43167531b0cd8L,0xf69452727a26def9L,0x7ecf1e563bab50e2L },
33949       { 0x04b6f5c94c6f20abL,0xbc6cec2b893b497bL,0x79e89567c9dc548aL,
33950         0xa39a0a567a40b749L,0xf1531e2644bd4efaL,0x14cdd759057c7c70L } },
33951     /* 25 << 91 */
33952     { { 0x30c49847d6d51bbbL,0x70b744feecdc6aeaL,0x38cdf36fe8671744L,
33953         0x5834286b8cf6461fL,0xf3414f7b2c09d632L,0x58425e4d5debb923L },
33954       { 0x8bd79117a6b96c6bL,0xecf9802680f56fa8L,0x5ae917d7e6dcbbf8L,
33955         0xf2d80fb169240a4bL,0x005ac47596e3aa3aL,0xe5196a3463536aa9L } },
33956     /* 26 << 91 */
33957     { { 0x5fb02929811d42bdL,0xd7d1b956289929b4L,0xfd3546947e531627L,
33958         0xa37c9b1e58c2b2e2L,0xf30ed0f902bf499bL,0x3fe80d240eb6df36L },
33959       { 0xf96270e57b148672L,0x47362483647f48d8L,0xc279ece6c29bc59cL,
33960         0xc05c1d9ffdd7e628L,0xef8fc92e17568a7eL,0xd65fe5a9ec0e7f00L } },
33961     /* 27 << 91 */
33962     { { 0x0ad31de68c93f010L,0x151b1405945ec54cL,0x325d132c3db6997cL,
33963         0xbed9cb3a335531e7L,0xa83932c34a578610L,0xd905abbf6f721147L },
33964       { 0x6dd45af086d1d919L,0x2b2ee3090195e91bL,0x3dc30d5edb70d257L,
33965         0xfb04b014481bde1aL,0xc2ac3ec82de2debeL,0xc9f161e090db691eL } },
33966     /* 28 << 91 */
33967     { { 0x8041f112afefdee1L,0x8cab3c86b891f668L,0x1f18774e2b61e754L,
33968         0xf0d81b2459df567cL,0x2cc25da41c95e1ecL,0x315b1b1ac735d39eL },
33969       { 0xd0a9b9fb010734cfL,0xeefc0398c79386daL,0x49ce859b11fb1917L,
33970         0x3d66fd6baf167239L,0x2522b0ef1fea6175L,0x1a27657d3ec4a52dL } },
33971     /* 29 << 91 */
33972     { { 0x89ec003abb2ca05dL,0x2290b5f403195ec6L,0x9989bd925f6b95b5L,
33973         0x1d6e6b2fad409cd9L,0x41f9b9ce3bfe7364L,0xb240f89570ec096cL },
33974       { 0xf8725a58b8d5a5d6L,0x3bfec6f1c581930dL,0xc93e290356235c98L,
33975         0x82af4269c7cdcb5cL,0xeb13fa40eea6fe91L,0x9247050097c80acdL } },
33976     /* 30 << 91 */
33977     { { 0x48dc23534ded5b58L,0x1b69590756e707caL,0xbbcb73927ec7794fL,
33978         0x3714dfa6e50dbcc8L,0x4f8083c8f27ec5d7L,0x6358d2273bc8c3e4L },
33979       { 0xe0c2a0e7656cf184L,0x3996e0a24244d801L,0xa46767b54e543c01L,
33980         0xbf55776d965f1e2fL,0xeb66845e6bc872eeL,0x6a73fef1b441895cL } },
33981     /* 31 << 91 */
33982     { { 0x21602e432b26bbf2L,0x6092d570d1bfd7e2L,0x2b48d74a30b38d1fL,
33983         0x4aab113c67c53791L,0xa6acbd3df57be611L,0x53b6509ebd3aae7eL },
33984       { 0x047e5ab4d8751f49L,0x978ed11b0cf25652L,0x763553d2153619c7L,
33985         0xc7e85e93d824d943L,0xb82cc9781048a7ebL,0x7beb9166e39cc777L } },
33986     /* 32 << 91 */
33987     { { 0x24480c57f26feef9L,0xc31a26943a0e1240L,0x735002c3273e2bc7L,
33988         0x8c42e9c53ef1ed4cL,0x028babf67f4948e8L,0x6a502f438a978632L },
33989       { 0xf5f13a46b74536feL,0x1d218babd8a9f0ebL,0x30f36bcc37232768L,
33990         0xc5317b31576e8c18L,0xef1d57a69bbcb766L,0x917c4930b3e3d4dcL } },
33991     /* 33 << 91 */
33992     { { 0xf6625ac0b9a038e8L,0x954056eb2a921e56L,0x7135295aeac07bc6L,
33993         0xedde9c39f1ba0ea8L,0x628324026b592655L,0x4603177aefb8aa66L },
33994       { 0x63e5ea16406a6c28L,0x5897fdee1c758382L,0x515e49fd415533c9L,
33995         0x0a0dd627d6701b21L,0xd7c06db1c93a312eL,0x4fe95e3da33d8df7L } },
33996     /* 34 << 91 */
33997     { { 0xf113d92c3336edc5L,0x0a201f3e8ce47278L,0x57492feb5c52562fL,
33998         0x18b73800f29da837L,0x2262089f649a1ee8L,0x076b07657c99bf48L },
33999       { 0xa95050bc09bfad20L,0x5aeaa9088c7e713cL,0x264283ed3cda06ccL,
34000         0x5d574b116079b43dL,0x0071495cced10a84L,0x97441fb0570d3063L } },
34001     /* 35 << 91 */
34002     { { 0x340831072b228335L,0x84ea0aba50fbd43dL,0xafde6098b3ec91e4L,
34003         0x4fd293ca1091ad93L,0xee085e23552a785bL,0x437d799ed7057200L },
34004       { 0x41f735628a611ff4L,0x707a7cb5d2ef6254L,0xa9a8f00092a30686L,
34005         0x901cc8e60cea8d1dL,0x1fbc9ca6d6da2ddcL,0x61bcee2176489604L } },
34006     /* 36 << 91 */
34007     { { 0x5f6ef134781a7f53L,0xbac4cf47b10a9d16L,0x48148ba110e69f4eL,
34008         0x40594360a9c615f0L,0x3141817ddfb3fc58L,0xb9579a9263c38d83L },
34009       { 0x0544b1bb6373b9aeL,0x718a5fb7007c8185L,0x48d4a4f77cfa392aL,
34010         0x9c16cb825d44ba38L,0xc83d2df42a8fa83fL,0x835aacccc08fef0cL } },
34011     /* 37 << 91 */
34012     { { 0x09ce1818af09fefdL,0xd1d2f95f5dd9d687L,0x94ed08b5495c4eaaL,
34013         0xd1afff464a0b95d2L,0xd51ba2b455347a75L,0x413126295e3866edL },
34014       { 0xeef2d7e3cdd37660L,0x50e6fbdfec2fe50dL,0x9d071e18a664e2eeL,
34015         0xe70e1d9ed6a8f467L,0x576d0cc4e13afc19L,0x67ced86da0efc220L } },
34016     /* 38 << 91 */
34017     { { 0xa26968cb26a963daL,0x461d1ab5cecbd96bL,0x8eaa1834b3e38516L,
34018         0x1e92730f05d2cd2bL,0x91112026b07cbf92L,0x26eb815062374314L },
34019       { 0xa904f1d08ab1b9d1L,0x52006594692b1905L,0xc9cc90ca6ba4717dL,
34020         0x4bd7300aaad1c74fL,0x67ba07a4c21c5832L,0xdebfd810fa56a1a8L } },
34021     /* 39 << 91 */
34022     { { 0x3bc5aaf484539b6bL,0x6ca9ac0c0d1249aeL,0xb59da22db4ee30c8L,
34023         0x6e62553e57149c9cL,0x46db0089786333cdL,0xe1e2ae523e4c12ceL },
34024       { 0xf828d2b537b3fd82L,0x31844a9d03af654cL,0x85dd8daaea5a4677L,
34025         0x0db99b8f3432e82fL,0x99383b874866e1b6L,0x52310054e325b0c2L } },
34026     /* 40 << 91 */
34027     { { 0x737cd387044854f9L,0x488b2fd667eb29c2L,0xe71d9bb7258c5a80L,
34028         0x21afb486ac71048eL,0x0252b540d4d39296L,0xe3e52cb87839d8fdL },
34029       { 0x5cb1100667ea0afbL,0x207637d1de82b12bL,0x77920933e93bcfcdL,
34030         0x65197f5df32f636dL,0x82179527b6c41411L,0x7696a479f410c989L } },
34031     /* 41 << 91 */
34032     { { 0x78307cd80e8d576cL,0x10d3b950fd9d6044L,0x2c2f9e2bf4b20445L,
34033         0x961343c72c5c7ea7L,0x931c52a0af640e61L,0x45557391470d420bL },
34034       { 0x4096a997317f4d26L,0x15210801cceb9be5L,0x228102195ff0759dL,
34035         0xc388a2d21d265932L,0xceb79d01e86dd99bL,0x23e8fc7b3311dcb3L } },
34036     /* 42 << 91 */
34037     { { 0x1a7d0e091d7743eeL,0x18720797d53e4a8dL,0x78465f1ea04dbaa1L,
34038         0xd4f064da9ce65723L,0xc0e7c035b496e8d4L,0x25657d2e6bb2f9ebL },
34039       { 0x45576ab49f4b6cb5L,0x83983c70ba33d6dfL,0xf699e84d1eca62a4L,
34040         0x35528636a13f5c31L,0x6a1b56b01f6b1739L,0x7906eccc6ea87942L } },
34041     /* 43 << 91 */
34042     { { 0x4e584a4fec1204a5L,0xd96b00e845a5b311L,0xea11fb03030badccL,
34043         0x9b2141b2a825a89aL,0x18bbc30bf8b2450dL,0x87bd93916513b2cdL },
34044       { 0xb3dbde552f0b304dL,0x762f3dd7c3c4817bL,0xe51e1733edd3fdd8L,
34045         0xddad4c515d8219a2L,0xf5a8c0b8796b6877L,0x34563a8989bf65c8L } },
34046     /* 44 << 91 */
34047     { { 0x93e2e3a2881c106eL,0xa227cc49fe82afd8L,0x6fee74a4748e81f3L,
34048         0xb212e8eaa5dd966cL,0x68d270efdc7d8883L,0xef2f3966fe757e9eL },
34049       { 0x0340098b7466881eL,0x7ab98a0575884bbfL,0x24783467a472f62fL,
34050         0xc73cb49f988637d9L,0x2b5e9d27dfb710c9L,0x503f9a2f788fcb18L } },
34051     /* 45 << 91 */
34052     { { 0xcba6f4631a52b729L,0x8874582cc8be34cfL,0x98a08e246a9a1eaaL,
34053         0x77094319d5693f71L,0x575a0938a8504e5cL,0x3f59910c226f888eL },
34054       { 0x5c3587990aeeb1f1L,0x7c32821d3613bbc5L,0x66f288e7cc17db95L,
34055         0x6f3221998724ac94L,0x4e3fa38981db3751L,0xa6e798c8420403baL } },
34056     /* 46 << 91 */
34057     { { 0x56672f2e2cbea2e8L,0xd1a02df9128bd636L,0xff6a3bc6d47a0025L,
34058         0x24124f30d38d0b42L,0x89ac3b8dda63df29L,0xf26d72994d0b6458L },
34059       { 0xfff0445f7d6880bcL,0xface90f52be76351L,0xbf10c6b8ebffb74fL,
34060         0x0e53c533a1fba003L,0x037baf09112f4980L,0xb8ae6312be960954L } },
34061     /* 47 << 91 */
34062     { { 0x8397b60917270d4aL,0xb4d0c38700e4caeaL,0x69c52bb3f4c58f86L,
34063         0x06e0e01157b1fd41L,0xc5dc2f25627873a2L,0x9af848ca0ae53974L },
34064       { 0xb5c957c06ad18335L,0x93b564154ef09e7bL,0xb5ba282450e2c5ccL,
34065         0x63f003a567d7b68bL,0x0bcb0dc820bcbca3L,0x8803b1ffe3d4296aL } },
34066     /* 48 << 91 */
34067     { { 0xff41d51faae4bfd4L,0xcf50b14117c44facL,0x078b808e657a1ea4L,
34068         0xc5aac1a893c00c55L,0xcb99cfd0cc4d1c0fL,0x1d1048933fa123a6L },
34069       { 0x49646059023ca92fL,0x5833e326f3982134L,0x2e0d4bc9c5781cddL,
34070         0x5f7f84ed8d5e75f5L,0xb6655f1fe1e8a383L,0xcc18514c296e4943L } },
34071     /* 49 << 91 */
34072     { { 0x5d3e5f8d8a407ff0L,0x9c713c8c7b42b11cL,0x7433a9921e387806L,
34073         0x5272b92a98cb43acL,0x6261dfc1b1018149L,0x229d2ba5d3b4adf4L },
34074       { 0x1f52e72989f0905fL,0x965e062925d4c79cL,0x42edaeeb33e6c016L,
34075         0x5ec492e8af1709adL,0xaad39616c5763619L,0x85a659098c666860L } },
34076     /* 50 << 91 */
34077     { { 0xec8fe7dc86009df6L,0x42dd3c37871b20a6L,0xe4388c920db643e4L,
34078         0xcc5dfdd481e06dbdL,0x3f1a3c6458ca7500L,0x987d7caa22c04e9dL },
34079       { 0xd0c91072bc5717e2L,0x3f605fd2e77e5509L,0xa1cc1404c0c3e95eL,
34080         0x4afaa9fdc6d0edd0L,0x2f3aba4e0d7d882dL,0x3f1f0349796c5ac0L } },
34081     /* 51 << 91 */
34082     { { 0x5dac93982eeb82e8L,0x2fe5ffb57536ce1eL,0x2bb120ac6926cfceL,
34083         0xe54ff20f2236dbf0L,0xaaf0d31edf8c5a87L,0x5262fb9fc8f5df7aL },
34084       { 0x0f833760467092bcL,0x50fa223d0a8dc0afL,0xd6a4847d35406966L,
34085         0xd17d6ce003b7f56bL,0x8067d8e2ee2d64bdL,0xe33e51bb9fa4fe9bL } },
34086     /* 52 << 91 */
34087     { { 0x52aa210770248e4eL,0x30cf7e773b6bf709L,0x36961c7b788e1836L,
34088         0xbe49de5f7595af2bL,0x86b49b619cbcba78L,0x1947db3790cf1117L },
34089       { 0x7d3f599de14b4287L,0x14546993f0ca62ebL,0x0f6c8872d0abde7aL,
34090         0x1531ceeaafe2260fL,0x36449624ae5ecf96L,0x6cfa12a5840bdc19L } },
34091     /* 53 << 91 */
34092     { { 0xb092ad68c1d612b5L,0x9f6052507af5c37dL,0xf48aa7c6c702b673L,
34093         0x380144215cd29c3bL,0x7b09e407121867ecL,0xf71443d391e59047L },
34094       { 0xea51e1a6b6d16a51L,0x041fa7650f33e2ccL,0x3a6d50c73750dce3L,
34095         0xeebf5c2e97cb7a7dL,0x2530de228f39e771L,0x9af217c18f37f863L } },
34096     /* 54 << 91 */
34097     { { 0x38793fd0c683085cL,0x49cc5934dc436d16L,0x94c708e4175e770eL,
34098         0x41bfb65d059c2682L,0xf6b83eb75f004ddeL,0xe1881929f6864410L },
34099       { 0xfaa77fe0b438f937L,0x97a856069997e90dL,0x78366a9108de889aL,
34100         0x6c28ef64553229cdL,0xfce82c2fe9381854L,0xae98117146f70bb1L } },
34101     /* 55 << 91 */
34102     { { 0x3f77410e9aacedd8L,0x0e34bd7d453813e4L,0xc5818436825d6b0dL,
34103         0x0e30f037b4d0ac73L,0x70f6bc9b69b559c5L,0x68d3d71eaed15484L },
34104       { 0xd0254e5414fbae1eL,0x6ddaad42ae0d3df6L,0xefb91a545a6e98d0L,
34105         0xde3fcefc854ee5fdL,0xb2f0f3a1dfa2a8a0L,0xb656f97ad00ded3aL } },
34106     /* 56 << 91 */
34107     { { 0x01acfa7e0a90e37fL,0xf47e5946366d0ba0L,0x8e37db7b54c11845L,
34108         0x5742d8bd50a62064L,0x27dc9a33ed6d096cL,0x2246d73016deb724L },
34109       { 0x203c08da2c8f1a85L,0x210cda3a56fea379L,0xea6b1bbf2bf9ed67L,
34110         0xe5a1e5552395cc4bL,0x458a7e19de2d6b2fL,0xa7199a86734942a3L } },
34111     /* 57 << 91 */
34112     { { 0x53684c23d44cad85L,0xd23613f8940779a5L,0xf485c7a3940bd34cL,
34113         0x64c66a1f3f673b5eL,0xec29c76f1d6dd63cL,0xe10f56272f191435L },
34114       { 0xc054f9a7325d5759L,0xe6740d3f974edaf5L,0x2723ac6103f3b640L,
34115         0x0a2315a4576e0bbeL,0xf8156e1e4a3ec903L,0xa307bc249bbc8c52L } },
34116     /* 58 << 91 */
34117     { { 0x78579ca212a1687aL,0x208b7494268a02a2L,0x61708a002c1c5243L,
34118         0xca366915a760461eL,0x0e9038fe3ca1e167L,0x2cfd6fe3a58e2c57L },
34119       { 0x97c16e34fe79a49cL,0x1575244ef08e4037L,0xc1407fa08e2283edL,
34120         0x38ae77621b057919L,0xcec574a5e68a366dL,0xafdfdce03eff00d4L } },
34121     /* 59 << 91 */
34122     { { 0xdad0dca9162d80c6L,0x554141f8b888ea0fL,0x1e471b24d4036218L,
34123         0xafca22cfb36102d0L,0x437c51bff280dfa8L,0xc2c8bc8b50c9c30cL },
34124       { 0xe7bacc372a9fdf6dL,0xd01dc65cf0472f2dL,0xaca59cf983d7be3eL,
34125         0xf7c935425d9ec484L,0xc22046c6015a08a1L,0xa71b3c64cecdf816L } },
34126     /* 60 << 91 */
34127     { { 0x4b7d0b277abe7856L,0xe566f4567acdb39cL,0x70c6cdf20047ae7dL,
34128         0xd27f831233ed0392L,0x498f0ad0358a429dL,0xed97c4668e6ee95dL },
34129       { 0x3d11cd69f3018515L,0xedd460344c1b367bL,0xd75660e3b3ac8ec6L,
34130         0xc80dfc0fa541e6e1L,0x80026f005c091a6eL,0x62b86784c426f2bbL } },
34131     /* 61 << 91 */
34132     { { 0x417408e529ee8eb4L,0xe92f18c2917f9951L,0x1f471f0eb38b6210L,
34133         0x53cb14264df240f3L,0xeaf7fc0067c29b25L,0xbbf46fd3d99cb613L },
34134       { 0x05cd552eb465b50dL,0x136b8e675e136733L,0xd7d50f61ccf61776L,
34135         0x90187ec5a32b01f4L,0x21548ec523ba232aL,0x6c8266c0748e558aL } },
34136     /* 62 << 91 */
34137     { { 0x762f413d7650470dL,0x9b4af5d018c9ad5dL,0x85fe90460ea625a0L,
34138         0x4af4511b2200cadbL,0x4c16980defec2921L,0x42ae5d5d60dbe1a0L },
34139       { 0x0785260bbb2ceb1bL,0xd181ea3242f1fb7bL,0xc34f02b13a47672bL,
34140         0xb0bc79f770e58634L,0x6e7967098a8509aaL,0x05870e6f3c3e6d44L } },
34141     /* 63 << 91 */
34142     { { 0x46d4fef752f7c595L,0x5f35083a8a07819cL,0xbba477ca591233ddL,
34143         0x4e66309358e307deL,0x65c3e2b9ef827537L,0xcf7b7adb09ee9adaL },
34144       { 0x00a82d4b5f5e1434L,0xd6aecb8032e50afcL,0xffdce7ce6b034271L,
34145         0xa95d96ae036d5058L,0x61582ae24cb7d60bL,0x6a10577474139c1bL } },
34146     /* 64 << 91 */
34147     { { 0x53ebbaaeb475d8f3L,0x3d6ea31cff76bedaL,0x3c15f25d340986b4L,
34148         0xc5925d2e3365312aL,0xc35d3ee251641f96L,0x11eb2f75984128e4L },
34149       { 0xb41a21a83d04bc99L,0xf2d286006436c3d0L,0x4ffcf4c0faf5663cL,
34150         0x889d285a0a62c9dcL,0x0908665acb2d60c5L,0xe2f19c590a131be5L } },
34151     /* 0 << 98 */
34152     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
34153       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
34154     /* 1 << 98 */
34155     { { 0xc0de60f5091354ffL,0xd7cc38bba1bd1975L,0xf4122aa8e734e2dfL,
34156         0x08f40f63ef773db6L,0x0a7e9484ce2d71c5L,0xcc79173378a3f825L },
34157       { 0x0cac7a5bb47beec9L,0x1cbea0e4a3f7b5b6L,0xecf19a90d3e18145L,
34158         0x0d1b062a0aadf689L,0x42299f1ff3f0acf7L,0x63a645395ac252b9L } },
34159     /* 2 << 98 */
34160     { { 0x44bfd1665c1d4586L,0x46434e198d1d86d6L,0xe50fcf81c3936683L,
34161         0xc9b4eb068b08680fL,0xf90882c52832aab0L,0x42823cefecbf5ddaL },
34162       { 0xfd4d51c744ae08f0L,0xb54a08f1bbd21c1cL,0xb72953dbfb187c34L,
34163         0x166f7f26f8ed037fL,0xd2b1077a097bad45L,0x47794cdc790dd808L } },
34164     /* 3 << 98 */
34165     { { 0xfadb2ac4bac8b691L,0xf0c5a0361579c4d1L,0xa192474f79019224L,
34166         0x8c7a64574117a323L,0xe58122dd84d970a9L,0xc475893c0bf77208L },
34167       { 0x9518412f1bd45c95L,0x75bd0a72283f7a3bL,0xa9e871605fb7e6f1L,
34168         0x14d3c944df67acedL,0xbceea947d0348c22L,0x5331c192d021aba4L } },
34169     /* 4 << 98 */
34170     { { 0xa05c751cd1d1b007L,0x016c213b0213e478L,0x9c56e26cf4c98feeL,
34171         0x6084f8b9e7b3a7c7L,0xa0b042f6decc1646L,0x4a6f3c1afbf3a0bcL },
34172       { 0x94524c2c51c9f909L,0xf3b3ad403a6d3748L,0x18792d6e7ce1f9f5L,
34173         0x8ebc2fd7fc0c34faL,0x032a9f41780a1693L,0x34f9801e56a60019L } },
34174     /* 5 << 98 */
34175     { { 0x35df68ae1a504405L,0xe41d69508fc755b9L,0x420dc1cda6297243L,
34176         0x3011646b913fb68fL,0xc4b630465e141a27L,0x943b3b3bbd91fe5fL },
34177       { 0x3ca17d6b50c31708L,0xce88b5e74ffa8c71L,0x8b60038f4dacd2bcL,
34178         0xdf654d723c13cf9bL,0xb5353e281d871b40L,0xc2d27919226663d3L } },
34179     /* 6 << 98 */
34180     { { 0xa028d2fa9b87715fL,0x7cdd9b4a453625bdL,0xc8afb1890be3dacfL,
34181         0x40289a3a274c4e2eL,0x7f5f9f7677c6bbadL,0x577c0935bdfeaccaL },
34182       { 0x5f838f0404281989L,0x8650a974ebfa410dL,0x414fab6dcd56dea6L,
34183         0x6995cae292eed440L,0x3b474d27ab146e15L,0xe24262b2e9938f84L } },
34184     /* 7 << 98 */
34185     { { 0x649e18fba34fb18bL,0xa4883af898cc69d3L,0xff46285f3fd56e37L,
34186         0x2e28ccc4557c0c04L,0x8388dee821a9b46bL,0x0fd4fb807ba3a6deL },
34187       { 0x1d8e9da7c62bb315L,0xfa7bd70d06e44230L,0x2840122063320438L,
34188         0xeefabd47d06c0654L,0xf4387b08d4c8c10fL,0x8f2694624ff2142cL } },
34189     /* 8 << 98 */
34190     { { 0xa4b957d262c36887L,0xaf15a485fc24cff8L,0x11575e80a271d9e0L,
34191         0x0fff68d44b9367e5L,0xf55ba6732279779fL,0x9d72cca6d4d68f68L },
34192       { 0x01474ab1590ffe4cL,0xd20f44e1074d634bL,0x63903a8336111d25L,
34193         0x37342a5fab531cefL,0xd3c93fe7702ed867L,0x05d143696279f7e1L } },
34194     /* 9 << 98 */
34195     { { 0xcddf64873e942b27L,0x9e29835a2bc21472L,0x924c2bfb2d2195e3L,
34196         0xdf4a3cd38eca6d9bL,0x7fe6acd1c5be60c3L,0xa3abee9cfc38025fL },
34197       { 0x014f0d992f449934L,0x8d72657a78860127L,0x92514cb948d84cfcL,
34198         0x8bd4ac503aadd70cL,0x3c96ee00136620d7L,0xa0caeeb54efc5e57L } },
34199     /* 10 << 98 */
34200     { { 0x7a65cdf5bd200ed6L,0x72dc1b5f0e4b1c68L,0x9c09576a6ddf540bL,
34201         0x358dcd122b169da2L,0x6466f0e81639b734L,0xa1429a6ef14c6eb6L },
34202       { 0x4b3d781943221168L,0xfe3d2fdaf3b74fceL,0xb22bcec2ae26014bL,
34203         0xa8900e7ace7e789cL,0x9db9af67220bce88L,0x1f86d2e4fb8ee34dL } },
34204     /* 11 << 98 */
34205     { { 0x6f8e1c0bf8c65293L,0x66f44ea04d7a5dfbL,0x2c3cacac741fdc1fL,
34206         0x72e58aae239f5f16L,0x50dbaf192f72d8c8L,0x24ee526628c97b95L },
34207       { 0xdb5f7827ab3ecb17L,0x2c567337669b05c5L,0x78c97eb8ff76ccdcL,
34208         0x1de1b4a3f8d2c990L,0x5b183974e6138df5L,0x61b74177aa1a1019L } },
34209     /* 12 << 98 */
34210     { { 0xb398290cf0db3751L,0x01170580ba42c976L,0x3e71aa2956560b89L,
34211         0x80817aac50e6647bL,0x35c833ada0be42daL,0xfa3c6148f1baba4eL },
34212       { 0xc57be645cd8f6253L,0x77cee46bc657ad0dL,0x830077310defd908L,
34213         0x92fe9bce899cba56L,0x48450ec4bceffb5aL,0xe615148df2f5f4bfL } },
34214     /* 13 << 98 */
34215     { { 0xcc14267f6be1860dL,0x3de7f48b4ffedea1L,0x8252694e5b776b87L,
34216         0x478c877890dd427fL,0x913e19a675a21357L,0x882f2d5ac078bd79L },
34217       { 0xf442752184c565dcL,0xd772147e3ac3ed26L,0xf21abc752fa216b6L,
34218         0xab1804ad305ff0dfL,0x10d89a07920c977bL,0x0a2240dc4fda6075L } },
34219     /* 14 << 98 */
34220     { { 0x7068e6b98653bfadL,0x16b0da9b8f4397e8L,0x77b953b4946bb9c6L,
34221         0x08366ad749b036f5L,0xd219117b26a3913dL,0xbe3607949a5460d2L },
34222       { 0x1a4acf6dfadd462eL,0x1f7de879c32f3550L,0x11117132669c9b2eL,
34223         0x1deea7d1c87ca216L,0xa88c90c748a058d2L,0x0d8e6afff403ef36L } },
34224     /* 15 << 98 */
34225     { { 0x21f6c96c1ad77f33L,0xb5da9d34992e7807L,0x17fc994ba7192adfL,
34226         0x59f204fcbcc3f8b2L,0x3f4a970f10bd22f5L,0x42936bfcbaa1188dL },
34227       { 0x6239fea5eb985837L,0x5fde15e0b33d1158L,0xe0bbe9b800cf90b2L,
34228         0xf2c6d8b16b2b68a8L,0x58c331cd0f3a2341L,0xe951c48910dab1a4L } },
34229     /* 16 << 98 */
34230     { { 0xdccf68bccbaf4685L,0xb333e464270a2bccL,0xe43ae199254dd3e3L,
34231         0xe8526e26ddce5c84L,0x52bad815ea0b4258L,0x67c12c1b094574c4L },
34232       { 0xa5362fcb861545b7L,0x3e904c35c2b2eb62L,0x0f9312b5eeffc2cdL,
34233         0x5475657b14de4e5bL,0x746e67d4f0233fa5L,0xb5157d7f35471ec2L } },
34234     /* 17 << 98 */
34235     { { 0xcbaf92265315e83aL,0xcc6e9a972f15ff37L,0xcac446dde8c87fb1L,
34236         0x5fa37a5c672d7f92L,0xe66efc07b1380425L,0x2d8ed2e32c8e59ebL },
34237       { 0x8e3ab80461743725L,0xe59a87f825493349L,0xf6995fe16062fe7eL,
34238         0x5d7f8a646e8de27cL,0x4a5ecbbbebe084f2L,0x99fc5ea93f863156L } },
34239     /* 18 << 98 */
34240     { { 0x1ddede1b495fdc2eL,0x3dfcf56b039d6339L,0x54c423806a56c492L,
34241         0xe6bfd184def6446fL,0xfaa2fa123ac841beL,0x503e319a4f9330a4L },
34242       { 0xd9305d4654ad427eL,0x68d23497d95dfcc8L,0x2d935aad1e9602f5L,
34243         0xd7e74bf2e33174a9L,0xc8e4a0b17225e2b5L,0x5db7187cbcda5221L } },
34244     /* 19 << 98 */
34245     { { 0x9a0e0908b0ec0b27L,0x28894b2edd759131L,0x0107bb592b9d6f02L,
34246         0x318921deeea022f7L,0xa1a00f5882c73390L,0x877833129551b381L },
34247       { 0xff866039a3a9dd22L,0xa59235ffdf0fc09eL,0x530c2fe61ca647f4L,
34248         0x77b1ea2860f9428bL,0xeef2a9e6bba4bbabL,0xdbdbe037204f5ea3L } },
34249     /* 20 << 98 */
34250     { { 0xf55edabb90b86166L,0x27f7d784075430a2L,0xf53e822b9bf17161L,
34251         0x4a5b3b93afe808dcL,0x590bbbded7272f55L,0x233d63faeaea79a1L },
34252       { 0xd7042beafe1eba07L,0xd2b9aea010750d7eL,0xd8d1e69031078aa5L,
34253         0x9e837f187e37bc8bL,0x9558ff4f85008975L,0x93edb837421fe867L } },
34254     /* 21 << 98 */
34255     { { 0xf87a92375b2e5fa6L,0x88571e4452a3a605L,0xf85e9a330c8f5f55L,
34256         0xf99886c599dc2c97L,0x5866329d065261daL,0x9011f13912dd434cL },
34257       { 0x0cc67d535284c555L,0xf8f715274a4032caL,0x4b002683a9524bcaL,
34258         0x3c3c12910f63a7baL,0xd19e173e9124eb8cL,0x3431c51c54b7d85aL } },
34259     /* 22 << 98 */
34260     { { 0x7103ab4ae11cc85bL,0x2064ca41789cf87eL,0x592850ead5f13a08L,
34261         0x56b9ff066212e096L,0xa106455d6efa7445L,0x3e62aac92343c5efL },
34262       { 0x7edbf70dcb8ddf7dL,0x27f00a4a5f2687e4L,0x7d4ce32e44a08d11L,
34263         0xe97f0910890a57f1L,0x792597fb912cb027L,0x1fa7a1d2ad3492dfL } },
34264     /* 23 << 98 */
34265     { { 0xbf4e161c3cfad317L,0xda4e6bffa1998bc8L,0x6534ef622e890b99L,
34266         0xd10a3b24d272cc42L,0x3f81b0e5f1194dabL,0x8919caefec549c5cL },
34267       { 0x847ef47f68f5633dL,0x01cd59975468f4afL,0xc38bce29b6727408L,
34268         0x56a1cd1ea4c84268L,0x31a493f406b81088L,0x4461ce8531b37e73L } },
34269     /* 24 << 98 */
34270     { { 0x3503d9371f23a0d8L,0x64c598a8c321dde0L,0x67f101ef5b52e0f0L,
34271         0xb6b5b4c2f955b5faL,0xb5f03d53880e0569L,0x121c3ac1c99393efL },
34272       { 0x90755bd657330666L,0x70ae5793d4d71d3dL,0x326ffd519e9ce792L,
34273         0x1b772d7396ccfa14L,0x652710f4874a22deL,0x72768469db210342L } },
34274     /* 25 << 98 */
34275     { { 0xb2d85722b3413d7fL,0x4e41362092e55ea5L,0xad1a20c7ff7b3409L,
34276         0x743b31c0c6f98cbeL,0x1b5b0b5adab3810aL,0x628d9b212cea0428L },
34277       { 0xa3e24294b0335ba0L,0xa9c0e139487530a7L,0x54199640072e70eeL,
34278         0x0977586e64c0d563L,0x393878451c5cce35L,0x57acd85631ce1eeeL } },
34279     /* 26 << 98 */
34280     { { 0x63081bcf9b8d9f3aL,0xb09fe52b6f94e3e9L,0xc232e5d1e39c092bL,
34281         0xd61ddcccf5f072e4L,0xcdb3b4189a26a93cL,0x0c010c048de6f5c9L },
34282       { 0xad2473a5d238e823L,0x4120ab3632029ca0L,0xd6632edb639bb8ddL,
34283         0x3383f077a8b32fe4L,0x8afcbce5eacfbe80L,0xe28236212d2fff74L } },
34284     /* 27 << 98 */
34285     { { 0xccf2a24a0eb3829bL,0xdd8fe4421eae0751L,0xb685b073c9598d91L,
34286         0x025214ce8b308785L,0x11c3fb11d6433acdL,0xe40cf39c81794024L },
34287       { 0xa167651b1c0b1f54L,0x350cf3eb0bbde983L,0x69c93dd0b2a88c48L,
34288         0xf13afc37bee80b26L,0x0be7d05d776345e2L,0x1ccbc8ba7645b02bL } },
34289     /* 28 << 98 */
34290     { { 0xaa6489df83d55b5aL,0xea092e4986bf27f7L,0x4d8943a95fa2efecL,
34291         0xc9baae53720e1a8cL,0xc055444b95a4f8a3L,0x93bd01e8a7c1206bL },
34292       { 0xd97765b6714a27dfL,0xd622d954193f1b16L,0x115cc35af1503b15L,
34293         0x1dd5359fa9fa21f8L,0x197c32996dfed1f1L,0xdee8b7c9f77f2679L } },
34294     /* 29 << 98 */
34295     { { 0x2aa349975442c668L,0x4c5137130cd74444L,0x4f87be0f449300ecL,
34296         0x13e07b552bae04fdL,0x6aa575d11f75acf6L,0x4502e9e9852848a9L },
34297       { 0x3c246d38889666fcL,0xb6c0292b7c100867L,0x618f234aa2a280e0L,
34298         0xf983c834669afe62L,0xc51a15105d900a1fL,0x7d7ce31bc952f419L } },
34299     /* 30 << 98 */
34300     { { 0xe3dbb7483c3388dfL,0xc26a7d042c32f139L,0xc1b48180ed938dcdL,
34301         0x785b964d42e4c01cL,0x507cd16aa1f75e28L,0xfaabff8d1f323caaL },
34302       { 0xc6bc47ceadd5b649L,0x997dc0ee3c0aed28L,0xcef0c89bf3666cfeL,
34303         0xd8d7dfb426482ea7L,0x5f00e432d2348484L,0x09549b5a1dc66aa6L } },
34304     /* 31 << 98 */
34305     { { 0x702e450ef8464b1eL,0x52d20765a061c4c6L,0xe1c930b26519bfc6L,
34306         0xa9c0c8c6d17ea02dL,0x52bfc60ddac62461L,0xc325568f7c5f9a55L },
34307       { 0xe7413df9eb44b9d7L,0x461682265837e0d1L,0xfcb9628c15aa0c89L,
34308         0x83d6d0eebb57c6a3L,0x17bb82a56829c9fbL,0x342fe91c496861e0L } },
34309     /* 32 << 98 */
34310     { { 0x58d6998e171c1439L,0xfd4a98f401feedecL,0x420b2a0165739fceL,
34311         0x5c5db30822f7a073L,0x016c547805042f00L,0x5fc73ce2a12413d9L },
34312       { 0x8ceb2d70e932aa17L,0xb4d66b670537afafL,0x2638d012339c146bL,
34313         0x02fbb7b628ac0555L,0x7fcb0c8162d46e63L,0xeaa9ff4f066d088eL } },
34314     /* 33 << 98 */
34315     { { 0x45f53090b8b22c29L,0x155b8f8111e70d5aL,0x5ec118b25d3a7d83L,
34316         0xfe4c7eb39c4ddd1aL,0x8cdfb753f226d869L,0x20bb870779fc646bL },
34317       { 0x3c8c1d7a25d1308cL,0x5a976ae47116f347L,0x6af949a60faf9690L,
34318         0x7e6718fc07f3472fL,0x16ec7b45267b17cbL,0x80744641cebe1bd7L } },
34319     /* 34 << 98 */
34320     { { 0x45eded7ab2a5c8e3L,0x4308485969a0681bL,0x89b7510d90910e8bL,
34321         0x1c622d04d2066d92L,0xdc3b434bcd2f0d7cL,0x98bcb83b476ea5a3L },
34322       { 0x9195431d3dbf2be5L,0xfec7efd969275ac5L,0x6a4364f556a7da4dL,
34323         0xaf701bc579c177ccL,0xb77ef33e9ffc2a47L,0x2bc59331cc23c4e4L } },
34324     /* 35 << 98 */
34325     { { 0xedf4a85b9d43c51fL,0xc0afbcb6b59a7244L,0x3ede2f25626e0ca8L,
34326         0x45836582270f674dL,0x83c47048bf06d267L,0xbb1e994f3c68314eL },
34327       { 0x50d79cb4f2fe6c8fL,0x1a1d8aecdf7600f5L,0x216f5d2bef4e4857L,
34328         0x41361a90bdffb9e9L,0x8040f5c173d2f9caL,0xe6665f0dd1e9be4dL } },
34329     /* 36 << 98 */
34330     { { 0x5405179f394fd855L,0xc9d6e24449fdfb33L,0x70ebcab4bd903393L,
34331         0x0d3a3899a2c56780L,0x012c7256683d1a0aL,0xc688fc8880a48f3bL },
34332       { 0x180957546f7df527L,0x9e339b4b71315d16L,0x90560c28a956bb12L,
34333         0x2becea60d42eee8dL,0x82aeb9a750632653L,0xed34353edfa5cd6aL } },
34334     /* 37 << 98 */
34335     { { 0xb112fd7b36386e2dL,0x358e974a6a634bd7L,0x509814737faf640aL,
34336         0x1036bdacef39b3aeL,0x410c6448db5aceb0L,0x914671305bbebe92L },
34337       { 0x83fabd54e9e009e4L,0xb2da8eea9994d16cL,0x9d73da6356997acdL,
34338         0xea9158b97ec1b844L,0x8e6a6e3129714795L,0x23e98f57131243f9L } },
34339     /* 38 << 98 */
34340     { { 0x7105f727552664dcL,0x97cbfb6c5c589c8cL,0x1a7b110a70fc59b3L,
34341         0x46c39f2cc754c69dL,0xcda0e2c067b1f17cL,0x35fe45fab7ede210L },
34342       { 0x6b3ecb7d82e78b40L,0xa90eed4fdbc07241L,0xa73797895aacd533L,
34343         0x28120ba5f4fa89a2L,0x9c1fc09ee3055006L,0x71e665efc51653a4L } },
34344     /* 39 << 98 */
34345     { { 0xcf782247d28b5059L,0x15bef4cb1b89eb06L,0xbc182ed6bcb4afeaL,
34346         0xcf5b6dfde0e32b77L,0xeb61aff9d9446052L,0x5846f171c4bfc0abL },
34347       { 0x61d5ae1c6fc68422L,0xa282c56846e870afL,0xdb4859d16bca8fbdL,
34348         0xd4cd416e97caf135L,0x11217fa9c3debd59L,0x27702da6370758ddL } },
34349     /* 40 << 98 */
34350     { { 0x8273db992d189057L,0x4d1b05fce1b5f8ccL,0x5fec7c830a7c32d1L,
34351         0x28ddaf28ea9b4d45L,0xb6bb62aca2fc58beL,0xfc65b7aa4a41852dL },
34352       { 0x6e7651941c9e6045L,0x3acabf28fc116257L,0xc9d5e8054b5a4ba8L,
34353         0x9a072259cbdcf1ebL,0xc67cf643439fc8fcL,0x917ef6f8b4333aa8L } },
34354     /* 41 << 98 */
34355     { { 0xee6123cca6411227L,0x91372d080ee882bcL,0x2c30a840a638a4faL,
34356         0x1867421321e83d4fL,0xc6afa4cfc3fb9925L,0x19aec276e4fdc73fL },
34357       { 0x1ffec4510cf4e610L,0xac57292ede22d429L,0x62844d78e6cacbc1L,
34358         0x0eafcc554d2e497cL,0x39f1acc8e780f600L,0xfcf8d914fcff8c6aL } },
34359     /* 42 << 98 */
34360     { { 0x0734ab43ff2152d0L,0xe52c5dee930fea54L,0x9cac7efe940bddbfL,
34361         0x30d2610ddbd43391L,0x4beeb865921c124dL,0xa19fe6a4fca219fcL },
34362       { 0x588395628755cc47L,0xa7f301241324f2d1L,0x4fe38ee3b1ec5aacL,
34363         0x3583542eb16413ceL,0xfa92e2191733b7eeL,0xc0f30ba32b2001a4L } },
34364     /* 43 << 98 */
34365     { { 0x706b02c3febc7968L,0x6e45dc90c96a6b64L,0x34e5f890f95aa4c7L,
34366         0x8ae64d487683b855L,0x0fbb9c4a62e03ebaL,0xb32a965ce2cab115L },
34367       { 0x4a7084a8b33102b4L,0xe7fd9db3ebd1bd6aL,0x2fcb233cc7f32b61L,
34368         0x365896d5f2549734L,0xa3f18bfd25c7a1c4L,0x382950ef212b8daeL } },
34369     /* 44 << 98 */
34370     { { 0x82154d2c91aecce4L,0x312c60705041887fL,0xecf589f3fb9fbd71L,
34371         0x67660a7db524bde4L,0xe99b029d724acf23L,0xdf06e4af6d1cd891L },
34372       { 0x07806cb580ee304dL,0x0c70bb9f7443a8f8L,0x01ec341408b0830aL,
34373         0xfd7b63c35a81510bL,0xe90a0a39453b5f93L,0xab700f8f9bc71725L } },
34374     /* 45 << 98 */
34375     { { 0xee2b773e4ed17990L,0x499e83623faab7feL,0xa3925e2f71abb9efL,
34376         0xfee50406ce3b4a69L,0x71a15070bc10f803L,0x5b01e4a2c7bab10aL },
34377       { 0x806c590d99e51e36L,0x34adbaf6a7f88d5aL,0xd4a93ce9f6b30ac3L,
34378         0x39d2cf40dc33fdfbL,0x13e676f1d5e4e7ddL,0xbaa72ab9199690fbL } },
34379     /* 46 << 98 */
34380     { { 0x85017690e51b47daL,0x25919b58a2b476ceL,0x6f692de103ec5d55L,
34381         0xd6cf8ee5d022dcebL,0xaf3225238ba7076eL,0x917b373728c902d5L },
34382       { 0xac75fddc3fdf8590L,0xe83d9bbb64fc304cL,0x13550de2971f659aL,
34383         0x70bee07ee12b7bebL,0x9989d2fa0a855646L,0x8b6043aca576b3a1L } },
34384     /* 47 << 98 */
34385     { { 0x1bfd4f92fadf9017L,0x1e4509aa737bc67cL,0x88278c3699af1ffaL,
34386         0xbc47536f4678e22bL,0x69914cdb1b07c823L,0x56fc28ab97277358L },
34387       { 0x092d28efe752d2f7L,0x6a8286a691da62c5L,0x86b702778033c632L,
34388         0x57ef284e7672f41fL,0x9101ed302e54007bL,0x53e94cfed25d8d19L } },
34389     /* 48 << 98 */
34390     { { 0x311ebba2fc37efedL,0x8a6a42d660cfd6bcL,0xb4051b3af2a4871eL,
34391         0x66ce77b8c2f0ebf0L,0x84abc9480ad28477L,0xc82e5c6263d9d11aL },
34392       { 0x99ffc70c007dcf93L,0x5e974edfd964c822L,0x0fee3572513085e3L,
34393         0xbe67a88046ce8444L,0x136ceeb806d17129L,0x0da512ae662d86fdL } },
34394     /* 49 << 98 */
34395     { { 0xeae827d989e687ddL,0xb025f0723bdbdd9dL,0xfbddcecec3a575aaL,
34396         0x3fab33c1f80d12cbL,0xd0232142b32f0381L,0xf00e74bd3b6c3132L },
34397       { 0xb7c1311e0e44deffL,0xf3d790ae29b04d6bL,0x3d3744b846f72957L,
34398         0xc0890fb6ab2f13e6L,0xa669a34324461f0cL,0x35c9677ddd72fcb7L } },
34399     /* 50 << 98 */
34400     { { 0xc257ed518060a28fL,0x3a9d7e1cc72fafebL,0xa304a5e8332f435aL,
34401         0x96969bc234ccf343L,0x2aae4d8e7702ba84L,0x37f15631f203a7eaL },
34402       { 0xc0000f24c9666405L,0xa98eb834a537fb89L,0x8c0564cf7e36dd1aL,
34403         0xb5ca507b4e89615cL,0x9bfa209a9d80ef92L,0xe2ec1879a83f02e8L } },
34404     /* 51 << 98 */
34405     { { 0x73b4573c11dfdea9L,0xe5f208ee5c8cc81fL,0x5c240d3c769adf12L,
34406         0xbd3f8f33550c53acL,0x98171d16bb4f43acL,0xaf19d5fe84db9e13L },
34407       { 0xc589be0d2e53345eL,0x3184b540f114f6f3L,0xa35ed77e4946090fL,
34408         0x427b860afd3108fcL,0x7d0848c3867df76bL,0x353539e2a32ec485L } },
34409     /* 52 << 98 */
34410     { { 0x9401aec2b9f00793L,0x064ec4f4b997f0bfL,0xdc0cc1fd849240c8L,
34411         0x39a75f37b6e92d72L,0xaa43ca5d0224a4abL,0x9c4d632554614c47L },
34412       { 0x1767366fc6709da3L,0xa6b482d123479232L,0x54dc6ddc84d63e85L,
34413         0x0accb5adc99d3b9eL,0x211716bbe8aa3abfL,0xd0fe25ad69ec6406L } },
34414     /* 53 << 98 */
34415     { { 0xee174af2df740edcL,0x1bd8382c09233f0aL,0x34a7450e7d343006L,
34416         0x92259ddd3d463e61L,0xcd0bfe6fedbc3af2L,0x39627c4cfc8770f4L },
34417       { 0x7b7c688ddbabdf2bL,0xf459f0e64bef3558L,0xfa0e87becc88f7c8L,
34418         0x67beabac5fcc80feL,0xbdae52bfadeba16fL,0x4751724c5af5c9bbL } },
34419     /* 54 << 98 */
34420     { { 0x5627e0d016332364L,0x33839376fc57f01bL,0xe7fc2c489528e434L,
34421         0xa0ee39acb52b3757L,0xe49e383ee42e4832L,0xabfefdbb31359afbL },
34422       { 0x5dedb6f3b99ee196L,0x38abe58bc16aac17L,0xa300a1333ec06a07L,
34423         0x00e68eadc90d4659L,0x60412e8a8000a773L,0x6099b6a6a5830c94L } },
34424     /* 55 << 98 */
34425     { { 0x85364bd10d340c80L,0x14b89462be64bc9fL,0x16429134b542faa0L,
34426         0x0d4cf3ce73683e2bL,0xf9a3e443cb73ab7bL,0xa4c2d0afbb156b0dL },
34427       { 0x826123921bc77675L,0xaf2aad4a5f26c238L,0x6f6f5d9aef4656bdL,
34428         0x0e20425f90901f3eL,0x0e30bfef9943a673L,0x6cefc62847415a28L } },
34429     /* 56 << 98 */
34430     { { 0xe7acaa8457e0105dL,0x3c06d3bd3851fd57L,0x23cf3c612a9c631bL,
34431         0x13888aaa33863bf8L,0xf2396355717783eeL,0xf21e1a4836b300e1L },
34432       { 0xa734cb3b9d27b4cbL,0x0a7effed796e34b6L,0xfc5864773615cc7aL,
34433         0x1f98ed7788844a21L,0xd6e289407ad4c7bdL,0xa00d64ebe9331c7eL } },
34434     /* 57 << 98 */
34435     { { 0xcc6ce7dee1c1e159L,0x77982e4f03df6b56L,0xbd8307d1b82b5ebfL,
34436         0x43e25358ed881b82L,0xddba4f418e0eb034L,0xbe326c36f919800cL },
34437       { 0x97d03da7af52dfaeL,0x153bb17af4bf81c5L,0x29bbb9bed7ff322cL,
34438         0x7a7bd8c7232cca47L,0x7474c199c2830f03L,0x9f464a06f0065fc4L } },
34439     /* 58 << 98 */
34440     { { 0xca505cb553b876bfL,0x6fc27f553662cb5fL,0x891cbef432cb1636L,
34441         0x339743f16e27e2d9L,0xde76538f21dc4837L,0x9cea05020efe241cL },
34442       { 0x97b8deb65888d9acL,0x4d3c28cba4b6cc56L,0x88ca828f840910b3L,
34443         0x2e5727cfbfde6793L,0x05a4138302bbae6cL,0x2e72fd653fa8e23bL } },
34444     /* 59 << 98 */
34445     { { 0x5b88c5ae6d17fe02L,0xc9b14810d6dbe104L,0x170b8659873be863L,
34446         0xdc5946a6ae9111b4L,0x4cfa5f022819a4cdL,0x7653d06ae213bb7dL },
34447       { 0x324c41baabd7ee74L,0x4219968cdd1608f1L,0xa5e104704adc1561L,
34448         0x964a53ea5e16d818L,0x00ebd1d4980f4bd2L,0x23cbb80d3518144dL } },
34449     /* 60 << 98 */
34450     { { 0x0d5c1769df85c705L,0x7086c93da409dcd1L,0x9710839d0e8d75d8L,
34451         0x17b7db75ebdd4177L,0xaf69eb58f649a809L,0x6ef19ea28a84e220L },
34452       { 0x36eb5c6665c278b2L,0xd2a1512881ea9d65L,0x4fcba840769300adL,
34453         0xc2052ccdc8e536e5L,0x9caee014ac263b8fL,0x56f7ed7af9239663L } },
34454     /* 61 << 98 */
34455     { { 0xe6ece4b5dae76820L,0xd428354e95feec03L,0x43517722f8871f7bL,
34456         0x313fde11e84d0b7cL,0x7f02824b1cae0a45L,0xf9f560c1d6646bc4L },
34457       { 0x124d88bc903a0608L,0x950e8320370c7ff2L,0x29e6da714090a72dL,
34458         0xbc5a108c54547d89L,0x809330cd3e484deaL,0x1b04a8088bb00f0cL } },
34459     /* 62 << 98 */
34460     { { 0x2425c59c03e0a528L,0x49de96f425c2be3aL,0x30b52686fff4b610L,
34461         0x2ce573b0f2e5f7b1L,0x4ec05f07b606f0e6L,0xf2040886366ecbf4L },
34462       { 0xc7fd993460d404d3L,0x8a064992fc12227dL,0x9c6d64ec215492b1L,
34463         0x2793bd0903463ec1L,0x49523ebab7376e80L,0xb138dfbd35b14fd6L } },
34464     /* 63 << 98 */
34465     { { 0x5ed097b0df7363adL,0x21319edba5696d91L,0x17c46519c5d5313dL,
34466         0x341d46576c6cccedL,0x60d80713692bc704L,0x9477b6e907fb8e13L },
34467       { 0x2965720b532e0c6dL,0x2767b4ee87831d79L,0x3e2e67abd4b5ef14L,
34468         0x45ee89b5d2598521L,0xfc8f1e3ee6441648L,0x75c4db57567ed090L } },
34469     /* 64 << 98 */
34470     { { 0x17e3d0b8713b8541L,0xf372b048c6b5e839L,0xf8ef0261d0bb1848L,
34471         0x9b804ceec71a3bbeL,0x00b7d171542a88aeL,0xf2b8ed10e9097b9eL },
34472       { 0xdbad9f122c0a009aL,0x245fc1e9205fb1bfL,0xa8a4834fb83debf5L,
34473         0xc3ee226d637e449bL,0xe3070d93cab82664L,0x24b8094db37320e8L } },
34474     /* 0 << 105 */
34475     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
34476       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
34477     /* 1 << 105 */
34478     { { 0xb506b7b925059699L,0x349fd83f01ab02e5L,0x64b729ad3789281eL,
34479         0x69ae8f81f9af4561L,0x007befe156f91860L,0xb578c566edc250fbL },
34480       { 0x1c16d75a67ae4801L,0x04c35a7ea1d3f592L,0x5dc97da936881f89L,
34481         0xaddb603103a5b1eaL,0x7eb515b13e153a0fL,0xdc3a92192b4a1ee2L } },
34482     /* 2 << 105 */
34483     { { 0xe7365f9e512cc92aL,0x9efdcf8b5172a654L,0xbfb389ac8e611fc3L,
34484         0xce778fd5699c227dL,0xdc1f47b63ff2ef17L,0x2ae0f68302672ed4L },
34485       { 0x51c63806a8e879cbL,0xd3dfecf03909f526L,0x375b3d13e00e12a2L,
34486         0x91f9f750bf8df325L,0xf1ea0e421df5f21aL,0xaed73e7f32c60584L } },
34487     /* 3 << 105 */
34488     { { 0x03b07fb5e0728e6dL,0x9e0469201012234eL,0x272e644935637644L,
34489         0x2b6ad1c2a55bcadfL,0x86c527765c71c6afL,0xa25bd60bc1678806L },
34490       { 0x0cae829476bb32f8L,0x389ce4e633e03cb2L,0x504df8337513dfb6L,
34491         0x4260ee8e1b351ddaL,0xa473c5d9dbaf7cd0L,0x22cb7cb471e390fdL } },
34492     /* 4 << 105 */
34493     { { 0x1d9aa9fa26caebd8L,0x6b64686926b7a673L,0x7ebed6a17f167b47L,
34494         0x324c13f85bd9153dL,0xe9ea5b734c682ba6L,0x2961da7d7e3ff6e2L },
34495       { 0x1ed2b05001a83dadL,0xb232951dc4a2f60aL,0xafcea5d3d68b8ec6L,
34496         0x21dc058d1c6ce0d2L,0x0043de75e719410cL,0x4edd792ce15cf534L } },
34497     /* 5 << 105 */
34498     { { 0x0f45245f3babe09eL,0x0959326fa9f2fac5L,0x7629e7fb5cc136e5L,
34499         0x208bd5a6e48b7eb0L,0x637891d6b75a85cbL,0xf0ad9d8d9f27b57eL },
34500       { 0x437b6944e0454b05L,0x022c51d702ed3592L,0x0f79e2bd0dc0a769L,
34501         0x54ace1fdd9b81f9bL,0x38611d66f95ea8dcL,0x52443ca8f0e6147bL } },
34502     /* 6 << 105 */
34503     { { 0x857d68558bc272d0L,0x4583eeeeb5be2485L,0xb83586dafe0152ecL,
34504         0x8b0eb223e830294aL,0x757582b6a5b0e880L,0x5140c0169cca7fffL },
34505       { 0x07a00782e9228f12L,0xb96e2b5dd4973080L,0x3cceb9a6e88efbe6L,
34506         0x9955b63073fcdd25L,0x04f26ab02805d470L,0x90b38299424da086L } },
34507     /* 7 << 105 */
34508     { { 0x73f1ae48f4f6c5b4L,0xee5af13d4a477f01L,0x274614a2ddb93d52L,
34509         0x90b0c563c320aaf5L,0xee2303c8ef990b0bL,0x00d028e73061f140L },
34510       { 0xff705011cb3d8eafL,0xae1d990862594f4cL,0x22a27cecdafea438L,
34511         0xa78e12d5c5962ea9L,0x5bbe9d878e65f9cfL,0xa222580cf47cefa6L } },
34512     /* 8 << 105 */
34513     { { 0xf7aaa732959abb9eL,0x1222ad0a2ebf80b9L,0xa1a417372e0c286eL,
34514         0x3b6685025da3472dL,0xbc0d116b7576f2a2L,0xfdbcad95a36a27d4L },
34515       { 0xcdb3f4749d54f7eeL,0xe2e0f5f98a5643a3L,0xc70d11b969d4f171L,
34516         0xdf96d1366cca4ef7L,0x570693db2fc6afdfL,0x5059e67b567504daL } },
34517     /* 9 << 105 */
34518     { { 0x2c8107d47fe632a2L,0xfc46c745ede7bff8L,0x2d3b12864650025bL,
34519         0x815ef3cbe74cd65fL,0x5431b01ba256f01cL,0xe832ff1139915cfaL },
34520       { 0x2c106de607d7af84L,0x67303b786d4753e7L,0x5f886ffa6d75c8deL,
34521         0x932a6c20967131cfL,0x5bc94a9170aebbb0L,0xa85b3044fd56e06dL } },
34522     /* 10 << 105 */
34523     { { 0xc904558ae7eba799L,0x46b6031bb2fa7331L,0x6620e2b50653675cL,
34524         0xd1373a357d2218f7L,0x0f4b3ca3af55a5e7L,0x50774160714e70c2L },
34525       { 0xacc63d1469188455L,0x89a795fe043b8b30L,0xac2fd66ce1e4b9cfL,
34526         0xac7927021bf67f26L,0xb9513f0d1143d437L,0x02198050811f2931L } },
34527     /* 11 << 105 */
34528     { { 0x6d4acdba7b480776L,0x8b518cd466dffeb5L,0x8826c99451918859L,
34529         0xd2b6a7a038fad835L,0xd315417a6929a870L,0x05d85252c5a769e1L },
34530       { 0x2fa06335ec0d091eL,0xb0cc337287768c88L,0xacbda5ba58a2eb9dL,
34531         0x2a404fc976b7b057L,0x073abb71838c6135L,0xbdf89b135cfc4f3cL } },
34532     /* 12 << 105 */
34533     { { 0xd00eb9c53508675fL,0x92ec76a4a117dc95L,0xf58d6f85334ca15cL,
34534         0xeeb522169cee0544L,0x3eb9847ff21457c2L,0x547908bc5524c60dL },
34535       { 0xb5b49d225198709bL,0x718abce6324abc67L,0xdab8ff2f4abd54baL,
34536         0x98be59e67184d444L,0x45b74b54babeb4b0L,0xd8d8bb30ff71a5acL } },
34537     /* 13 << 105 */
34538     { { 0x8aedf7e28ec13e6fL,0x8b952620d950792dL,0x36e9dac204918f59L,
34539         0x5e49a5a2d3dd47edL,0xb17455bee863c2bdL,0x8caac6a9326a0d66L },
34540       { 0xb6c3f5e427bb72e1L,0x17566c9dee5fe09bL,0xfd6bbcc25e3db64dL,
34541         0xd437d07a3189319cL,0xad00dfc4cd3166a5L,0xab75927b0bd63003L } },
34542     /* 14 << 105 */
34543     { { 0xa7672a39afc43be8L,0xefc49015c72f97aaL,0x81c63c050e48f2edL,
34544         0x62f39f32833a22ccL,0xf7a3480172c0c0c4L,0x4711cd41a4158538L },
34545       { 0xa3c99a4d1d15f2f3L,0x4b82c1c17bee1b47L,0xc7d60b489d199f10L,
34546         0xd1d1f03d5f16fa95L,0x96c780c932fbeaf2L,0x0662e250376ff106L } },
34547     /* 15 << 105 */
34548     { { 0x728e334678571c8fL,0xd0a886b56cb339d3L,0xf4ea33380a5671baL,
34549         0x43823401a64850a4L,0xa7729cd533117b9dL,0x4dd457602b78cffbL },
34550       { 0xbe0571115a67d812L,0x7ec6cf925105a3fcL,0x5dbcb4bc0ccafeecL,
34551         0xa7587f15803092f8L,0x67ee61d5a884efadL,0xd4ced554ca47d9caL } },
34552     /* 16 << 105 */
34553     { { 0x02c6b6083b03dcbcL,0x2b20149e3b9d868aL,0xaf5ab01d4f57eb0cL,
34554         0x59935b94d750e515L,0x32721b408f89ad68L,0x673bd755a7e3ceffL },
34555       { 0xbd462fd8ef3b3393L,0x991422640e59a120L,0x4162da619263fa61L,
34556         0x2ed1f2deb6488eb3L,0xb0bd37a8725680c4L,0x17218bf029ec27b0L } },
34557     /* 17 << 105 */
34558     { { 0x444071ff84ff1ebcL,0x4b4171e87f789cbdL,0x4a832cca2db4e8daL,
34559         0xe229ffb6dc209c05L,0x9efbfd7eb5f0b3f4L,0x65e07fe774fbbe6bL },
34560       { 0x2892c8ac627b9d41L,0x01a20eb94297e7a9L,0x2f54e88646f29860L,
34561         0xc425accc188798ecL,0x6137251c85c80580L,0x6cc0f9c4f386581eL } },
34562     /* 18 << 105 */
34563     { { 0xf677bdd11cb61a7bL,0xfca1faf8932d6113L,0x1d5bbf97a531bbe2L,
34564         0x3d5e4860c849fc47L,0x388943cd95fe4da2L,0xffb7d5e073add43fL },
34565       { 0xc3166ae828fcc058L,0x89dc7faae0d6f6e4L,0xe6daf1a6f527ca01L,
34566         0x500a703a56ef1d8dL,0x3573d0a3fc914df4L,0xd780e745ef8dc2a4L } },
34567     /* 19 << 105 */
34568     { { 0x90a8f3380500afbcL,0x8c303270838ccf6fL,0x82cbdc98458254c6L,
34569         0xc2f24d03b367ddbcL,0x5d3daa0d6c882354L,0x824d313d376599d0L },
34570       { 0x6e5075df7b9dd1b6L,0x6871a3d4d69c9828L,0x8b3762f59cffa148L,
34571         0xf2184f67eef8c656L,0x437630c296a1537eL,0x92a0667c4cbf8249L } },
34572     /* 20 << 105 */
34573     { { 0x6e929912ef619478L,0xe7ddaf255ffc5939L,0xb71133cf96dbbca5L,
34574         0xee8bd53f17da5104L,0x7601ce6adc49be68L,0xa1ca3b3cc63f2a87L },
34575       { 0xebf388c2a0de1668L,0xa0f6c38dd0ec6bd7L,0xc8e0875ddac451ddL,
34576         0x179fbbe5a5afce85L,0x0727095673bfb06bL,0x992afcd047622925L } },
34577     /* 21 << 105 */
34578     { { 0xe3b0122624f262c3L,0xaa7a0925dae30b22L,0x36104c95a96a18f9L,
34579         0xdc6090f5539b6740L,0xd70270ba11040a88L,0x53997b57ea3342feL },
34580       { 0xaaf1d47d63393e4fL,0x9db8aa3fe8a99625L,0xed571a32c3926e1cL,
34581         0xd6e898526e565346L,0xb3984bbd873b2589L,0xaeb7bf3f3f5f68e1L } },
34582     /* 22 << 105 */
34583     { { 0x75a4a19a79ded4a8L,0x1368e269f688177dL,0xa24d67118581e23aL,
34584         0xae63d5a6746b3830L,0x0c68d3e314017304L,0x521a5e7de4d45dc9L },
34585       { 0x69d9adfaf77ca616L,0x1f8d37f4bfda67f3L,0xa2833ba1027e771dL,
34586         0xae49b00367141a63L,0x04e6f282ed6f1968L,0x65d7d88f060f9157L } },
34587     /* 23 << 105 */
34588     { { 0x5dc3137b512e4026L,0x43e189595d6ac980L,0xdb7dfef39eac06a4L,
34589         0xa8f3e2aea09b0650L,0x80a8594c575e047aL,0x9eba41bcf0c58bf3L },
34590       { 0xdc04cc7679812341L,0x716050eaeed1be66L,0xe559782099b77be8L,
34591         0xe543aef055183ad5L,0xbbddfb814c08a959L,0x6e54d86eb5368e8bL } },
34592     /* 24 << 105 */
34593     { { 0x170f8a74e7aba263L,0x6b4e1d7b986b151aL,0x5f65bd224b08921aL,
34594         0x1017ae3de6caca3aL,0x613f36b626cb9d5bL,0x8a1e2f2ded19d99bL },
34595       { 0x52c915a5c3c519c2L,0x3c9a33305902fa08L,0x2cd7f7c206a51a12L,
34596         0xfed60db66e0197ceL,0x4e5b2bb7d971b04cL,0xebebeebf2f45ab13L } },
34597     /* 25 << 105 */
34598     { { 0x43b10a0673220e06L,0xdf93af67777cf022L,0x830195efbeea9ed4L,
34599         0x0a36b71812353c9bL,0x520e2e8d1ec8c488L,0xdc985ffaadac5e16L },
34600       { 0x0ebac566f3f58ed7L,0xc7747562a2cd13a2L,0x6a5b4cbce3901864L,
34601         0x66634acaa374b634L,0x45e000877f4680dcL,0xb783d01f9fdbe92aL } },
34602     /* 26 << 105 */
34603     { { 0xcf6d51be36e1c05bL,0xf59b6665e1da0ad8L,0xaa8bfb9d727a701bL,
34604         0xb1680942e26e268bL,0x09d41407e518661bL,0x8b0dfbfb3757a993L },
34605       { 0x34ecb09f6cb33380L,0xfcd77efede342bf6L,0x9f8fa6c6e476c5eaL,
34606         0xde30410fb6257416L,0x416ea101bbd47b91L,0x86ebd19e4aeede80L } },
34607     /* 27 << 105 */
34608     { { 0xfe7562e00818226bL,0x922d8fe662b46275L,0x6216698b491adc2eL,
34609         0x5bdf7a59f6a38f2eL,0xc0640bf937710dfcL,0x06ad30a9df687f48L },
34610       { 0xc561dc7d3eb66e6dL,0x7444ac83d08616c3L,0xebfcccee84984618L,
34611         0x35a03bafbb15eb51L,0x7c907f9fc17a5de2L,0x2e48ddb5814634dfL } },
34612     /* 28 << 105 */
34613     { { 0xe466d7a7ea51a37aL,0x5203e990cdf97186L,0xf700953096c84ba0L,
34614         0x4e32fbe65f89d1adL,0xe530349aa9be221eL,0x0f7f9c2e50b31508L },
34615       { 0xa6796f5c3af5a574L,0xe220f6daa2a2df89L,0x99ec4811d8b65510L,
34616         0x4dfdac69ed373b27L,0x663f46b1bb55114cL,0x44236350d167e032L } },
34617     /* 29 << 105 */
34618     { { 0x1382e90ba65f6a57L,0x3557ab88e5c903e1L,0xcc0cc77f032067beL,
34619         0xdd8da09f67797328L,0xeb2979d45114c09bL,0xaaca95bcc4eb598eL },
34620       { 0x651a7ce5a2b776fbL,0xc20fe9315312ffc1L,0x842957357dcf479fL,
34621         0x022ba6e2ee5cc0a7L,0x6d27e37185b0ba5cL,0xe6f212bdbcd5f2c1L } },
34622     /* 30 << 105 */
34623     { { 0xb0c2ce87a9088f95L,0x47ec07e0acb11d2fL,0xfe84fba0d30ad231L,
34624         0xaa98e35f18a08eb1L,0x36adc3f2f6a27510L,0x622d202751fac4fcL },
34625       { 0x4be765cabb9b6ffcL,0x934193571cbfcbeaL,0x83542d9cbef14402L,
34626         0xf27504954612b4b4L,0x91aff597bb988ba6L,0x229031e51d61f6f9L } },
34627     /* 31 << 105 */
34628     { { 0x6b04a446ea29e65cL,0x9b6247a696c48a99L,0x95aa162f60c83930L,
34629         0xe387f544e30821eaL,0xbe1cdab306c51b7eL,0x40175d151fc7b8f8L },
34630       { 0x89df5ff36384d331L,0x02eb9aa4fe1aaf5eL,0xf24155f789675704L,
34631         0xbd2e8cdd87f72f4cL,0x2856b3c46de30f01L,0x2356f0a3ecf8af25L } },
34632     /* 32 << 105 */
34633     { { 0xfb09e7564bd044efL,0xdbc9fcdfbb964fb3L,0x451c5b01cdb1f4f5L,
34634         0xb02f9068f1dd1cf0L,0xd4765e7c0c687e41L,0x89b64981d1967bd3L },
34635       { 0x06a0e4ecf0439d65L,0x564c387da5abbcecL,0xc1e9d01ac651d806L,
34636         0x5e6ebd830618a96cL,0x9ce1aacec54ad8ceL,0xe5248a089953f90fL } },
34637     /* 33 << 105 */
34638     { { 0xd65f3b909b6ab239L,0xbc259a6d9ea8bf80L,0xc10d5c235944f964L,
34639         0xbd6b3f6f61eeac6fL,0xc4ef2d8383e92858L,0xb80d5ab0a3736bfeL },
34640       { 0x27bebd1176695c40L,0x4de92348ea4f5720L,0xd70d93e6070b892aL,
34641         0xfce03d0be626d5abL,0x2525e8ea81014bedL,0x6fa3df16a70e2799L } },
34642     /* 34 << 105 */
34643     { { 0x42b8350a7bbc41caL,0xd7861ad49af59bc9L,0x2453d07c5644d328L,
34644         0x2b92643ad7c8ec43L,0x7c14d3c7cd5f1fd2L,0xcee050463d373c7fL },
34645       { 0x17ff60bd0ab2b35bL,0x473925e0dbb7f655L,0xdbaa015aff3ee023L,
34646         0xbc1ff6d6087ecfbfL,0xc44e1c8c5fc66ca2L,0xc60a193850d6b257L } },
34647     /* 35 << 105 */
34648     { { 0x5ff44f3ed8f0983cL,0x9de50da0bb82cc15L,0x504f82ec94757c44L,
34649         0x72a4fc9dc8a07028L,0xd4d6e4cec3d5e64cL,0xc6148fe780008568L },
34650       { 0x71ba3fc525ef66d6L,0x969cc8694f6589f6L,0x5016c8c2d934ab25L,
34651         0xa78382f6959e8881L,0x28bcb8bea20eee18L,0x055ba80b37edd7c8L } },
34652     /* 36 << 105 */
34653     { { 0xbe389fef9c98ca3cL,0xdc3ab23b910370e5L,0x866cb37d5e8eb20dL,
34654         0x2f951ca9c1e32fc8L,0x54ef6ab15fe24e6cL,0x6038b5efcfcb8cfbL },
34655       { 0x362e076b6eec196dL,0x47bb3aefd398b505L,0x9f3128eb343711ccL,
34656         0x8dda2fa8d28e3269L,0x908c52c7eda48846L,0x65fb3a05d53b0917L } },
34657     /* 37 << 105 */
34658     { { 0xeae35c02ed711239L,0x16ab943fa97db2d7L,0x9770bb578f3b0599L,
34659         0xa88ffb95956d04f3L,0x3b937af5f4dcf6ffL,0x311ef2cc0bc41f56L },
34660       { 0x00e9214a2860ea2aL,0x2a64b18a7bd12d8fL,0x20a5b9da6a2b9dbcL,
34661         0x5c16a412fe1b8edaL,0x6fc306af7b9db98bL,0x964c35de25dc9363L } },
34662     /* 38 << 105 */
34663     { { 0x81f4739e6df16589L,0x2ea2fff11f8b8ac4L,0x3baff03d33e02c36L,
34664         0x7f07526874d77660L,0xa442d7fa758eed7dL,0x584cbe9866625864L },
34665       { 0xeed35d579d167ff6L,0x56627c2e3c7bf84fL,0x908df5aedd011153L,
34666         0x2694e54d242fc055L,0x25beed9a2f2d60c3L,0x29d3f22fe2ee5293L } },
34667     /* 39 << 105 */
34668     { { 0x14940dbc178f9859L,0x6e6e35b7329ec4a2L,0xd1f198096707db4aL,
34669         0x6eb310b79fe4233aL,0x8f92556eb41e1d8cL,0x2ab28e231d7ce522L },
34670       { 0xc5d0f5dfdd5c4d68L,0x3f5146d825101083L,0x3a04aa53de9ee4cfL,
34671         0xcf36f1e3d9357f64L,0x05a1896444889f68L,0x1096c87aa96a4137L } },
34672     /* 40 << 105 */
34673     { { 0xfa4b6697a8352657L,0xf5696452cad6ec30L,0x10aaba60986c84ffL,
34674         0x49bdfff4dae014e1L,0xe2a810bd0abc0e46L,0x1dc5b81462d1dd5fL },
34675       { 0x15d2f2c723bb4561L,0x5ac7b6421818e30cL,0x40c6b6f94c545f5bL,
34676         0x5875b6b2f99241e8L,0xfa3e88a9d6708293L,0x1c936920ad6d9344L } },
34677     /* 41 << 105 */
34678     { { 0x6516f6210e18ec42L,0xb967eb43df8c26bdL,0x624ee27e69addc2aL,
34679         0x34019d6339063252L,0xb317fdd3dcd99d7aL,0xc3d566825d314caaL },
34680       { 0x04992df3367506b8L,0x13e4ab2e547262b7L,0x35f130352e287d3eL,
34681         0x92e0a276211304d9L,0x94e7129417133d22L,0xb35302275fd71a28L } },
34682     /* 42 << 105 */
34683     { { 0xe1d9273c9ae60111L,0xe86aeac3d01243ecL,0xc7257b27fa5989f5L,
34684         0x57737dc89807d3ccL,0xe1ef78526937551aL,0x74ab9edb15dd2d58L },
34685       { 0xbc47b23cc59962fbL,0x376ff30fd3bba76dL,0xaf0035872788ab98L,
34686         0x1e475c68619b472cL,0xd79984c89c6a9835L,0x5ceafba510219a94L } },
34687     /* 43 << 105 */
34688     { { 0xc25ae81155d238d9L,0xf2a21fce4ba4456fL,0x4ebe44d0bd1a440cL,
34689         0xe821687f83d958beL,0xb4ce63423ba09f9dL,0xf271435d139048bcL },
34690       { 0x2a3db37c99c6412eL,0x50cba09ccb36dbd0L,0x9e5231aef6e65cf8L,
34691         0x48e9105d90118a6bL,0x2d58d372368144cbL,0x48702d59928575baL } },
34692     /* 44 << 105 */
34693     { { 0xc71ce040d1c9204cL,0x8ad09d7373f7686eL,0xbcc6d88dc6fcf31dL,
34694         0x22a0b71aaf428ad3L,0x7767944847721255L,0x2b720c7e316b808fL },
34695       { 0x3128a7cc5ed45b8bL,0x9744c6c0f79fa1c7L,0x738e94efd22728d7L,
34696         0x8a652496fff8f874L,0x0e4a5ade566c9751L,0xfcde62db64e3199bL } },
34697     /* 45 << 105 */
34698     { { 0xb068ec91aa63f5fcL,0x547e7e471a29ddfbL,0xe3e5de42b17b8e5dL,
34699         0xb5c84f27264d1361L,0xa68d10a426432715L,0x4f31e81c23e48e1dL },
34700       { 0xe32bea6116dbe185L,0xfaeab7256d1d34feL,0x0ee437cef3a8ca7bL,
34701         0x2b8657a2f458446bL,0x8779a3d4c52e3dcaL,0x243d7d0e71654165L } },
34702     /* 46 << 105 */
34703     { { 0xc4a346b2de23afe2L,0xf8e00f790fac7ba4L,0x22393604ab76b7d8L,
34704         0x109233d7a06efba8L,0x5bf89334c7bf56a4L,0x27ed4a28135d4cabL },
34705       { 0x07851ad2e32ca02fL,0x41b7ffa630c97f29L,0x383b3716e4457ccdL,
34706         0x6ce8645b0b43a50fL,0x73c82018fc5b907bL,0x79a1467381bbcf0dL } },
34707     /* 47 << 105 */
34708     { { 0xcf5331d35e092e41L,0x7e0b9fdeb43e3c15L,0x842a971182841f82L,
34709         0x2d837c810cb9d1ecL,0x6aff6d6873095ddeL,0x2a7f6f40c9478ef3L },
34710       { 0xb6e8ac80a9976e39L,0x3853fa5474e40024L,0x664b159a6d87c1d9L,
34711         0xaaedf4b4b20b5d11L,0x8a1ac277c5819de1L,0xf10276dc6450b97eL } },
34712     /* 48 << 105 */
34713     { { 0xa8d7901c7c16c09bL,0x628ff3be42e1948bL,0xb905d7c504e4bce1L,
34714         0xdfbf9c4e5ab0696fL,0x0f4e6e2ab6db9cd5L,0x4857e570482e40feL },
34715       { 0x5ccd9b421c3beed4L,0x171b085fae51a947L,0xcebe0dbe59065754L,
34716         0x4d052d3a461c1620L,0x396bac422fe541a7L,0x8e714cdb70bf32d8L } },
34717     /* 49 << 105 */
34718     { { 0xed82f15e6ca1cdcbL,0xc5ae5cde51b9a9cbL,0x3b2f78cec70c475eL,
34719         0x0f22d10b4243c675L,0x1db96885facac4c6L,0x2fb7884817df2f2cL },
34720       { 0x25fb9f4e990f3104L,0x1416733ecefa14f7L,0x3a33828384a5dc24L,
34721         0x6d75d3d02564288cL,0xf7bea8b69b93e62aL,0xa5ea8695349f1740L } },
34722     /* 50 << 105 */
34723     { { 0x38feea7115e711b8L,0x129aea564accd3eaL,0xc53e54c412b23539L,
34724         0xb15bf11a2b280c59L,0x5ea76f5782d44df5L,0xea79f833d4ac1af8L },
34725       { 0xe547deba08330c6dL,0xbaa89422663ef402L,0x17263762d215a5f5L,
34726         0xb9509a19c02b5f9eL,0x9bb99fcb025caaccL,0x43f4494b25f24089L } },
34727     /* 51 << 105 */
34728     { { 0xe55e592c98563c70L,0x4e62ace5d013c82aL,0xb6025ac16fcf7380L,
34729         0xac4a8157cfdff8b9L,0x1fa181344497acf6L,0xdcdf05c0ef09d3e9L },
34730       { 0x7a65490d83d8e716L,0x2aee0b35e98c46feL,0xe62381dc7d6d4035L,
34731         0xc7162b78203975c0L,0x1079d8b6aad2c021L,0xe3e1cb4370c98838L } },
34732     /* 52 << 105 */
34733     { { 0x3ca01799f04dd97aL,0xd6d1d41d3f9e03f3L,0xac2713eda55fa375L,
34734         0x2bd440556a89a5e5L,0x8582d98458f5c269L,0x7f9b3527fb31fc27L },
34735       { 0x23f91951d810580dL,0x99303919360a3debL,0xfaf10326b5e1eea8L,
34736         0xf96feb4838ba5ac8L,0x1508b1002a639622L,0x0766a1019dc93c78L } },
34737     /* 53 << 105 */
34738     { { 0x0c79d40679a0290cL,0xc09bca0c57eb7a00L,0xf7274ffc163c1dcdL,
34739         0xd64ec461bb2c83c4L,0xff3b83efe9ee350bL,0xa490157d01882c72L },
34740       { 0x626e1f3d3312310bL,0xd2097e03cdd5d62cL,0x705c3fcadbf659c5L,
34741         0x2dc1d7cc810fa413L,0x6313192ad67d58a8L,0x6e1e5bc3597f63a6L } },
34742     /* 54 << 105 */
34743     { { 0x6100535ea0d42639L,0xb126e939d921369dL,0x2d4c826e4999e42cL,
34744         0x159063c6f62f77e7L,0x063c42914e632555L,0x8d3ee387b35d8220L },
34745       { 0xbd951cff9b2bac3eL,0xd9b943f1bc248755L,0xeee7017ad3a6074cL,
34746         0xbcb9e0e6b0872a21L,0x26d80e0949dff656L,0x2ad7d4e335fbf620L } },
34747     /* 55 << 105 */
34748     { { 0x6ce5840df7f9503fL,0xb96f82996abf4f6bL,0xf71f33853ab55fcdL,
34749         0xe347e891e83a8109L,0x12c5dcdeeb48f0faL,0xb0f02553cd7183a9L },
34750       { 0xa7d74862c414f01fL,0xbea40c5cae369360L,0xbe9785e5022d5192L,
34751         0x1a3224a50d318251L,0x4d7200093fcbceebL,0x1fd71167c2976f6dL } },
34752     /* 56 << 105 */
34753     { { 0x03c88a8566d2ee47L,0xee8e5c34455ee428L,0xd90a3d393870d90eL,
34754         0x2fd78d14f2fdb976L,0x9472a6066a312a30L,0xea68e2283484af2fL },
34755       { 0x7cf25951ac9e5cf2L,0x024f07ee37a28e95L,0x5d479379e563a2bdL,
34756         0xe87b50a4b46e93d8L,0x9128fc11f137285cL,0xe46efdf77c67d7e6L } },
34757     /* 57 << 105 */
34758     { { 0x4050036c7cb0b9a1L,0x8560750c1161d7fdL,0x4d293a521b247ba9L,
34759         0x4b25e54c8f1b9d31L,0x91c89139c5baa0aaL,0xa2f75f9f2202b7e2L },
34760       { 0x6c0915dd4d2d1388L,0x575d90f703717fd7L,0xd90c059b03e0626dL,
34761         0x7004305ba4239e8cL,0x39fb4e2e989775e6L,0x20c31fc8d8a239c6L } },
34762     /* 58 << 105 */
34763     { { 0x4de318054ab51b84L,0x4a68443c6aa00707L,0x2c3637f05b317f3bL,
34764         0xb8ea6f87c0fc14a7L,0xcd0cb4fca2cc6af8L,0x6b5fc899317083fbL },
34765       { 0x1b8f160956e6dfa1L,0x698299ed92b77d20L,0xdb84ab7f14fc3fc1L,
34766         0x944666a35d5fe625L,0xe9a3448d7e064ab0L,0x53f62fa01abe1440L } },
34767     /* 59 << 105 */
34768     { { 0x04bc8a2bc8c676b8L,0x502a73144a577562L,0x494d01f11ff01f9dL,
34769         0xfe648df164d98f70L,0x80bed0d849719dd3L,0xb77a8f09c231e190L },
34770       { 0xc8aa8daecc011818L,0xf313be4f5918814eL,0xf28fcb74488b5bfeL,
34771         0x71e23b19b3345c98L,0x1cfb7c0596eba9beL,0xa88e73b941c61971L } },
34772     /* 60 << 105 */
34773     { { 0xdc7050459cfd4295L,0x1cc9648eedeea59eL,0x88f4af1c0e9ca92dL,
34774         0x45d0b53f69689317L,0xa122a6dd41c04186L,0x9df54c3a277fba1aL },
34775       { 0x1efc55a5017eb9ccL,0xb253f7b661d1ecd4L,0xd03f8ec6acfb7854L,
34776         0xf641e5f49f338dbaL,0x6b6a680a3a3addbcL,0xe80babb5b5cd058eL } },
34777     /* 61 << 105 */
34778     { { 0xb48da67307873319L,0x53309cdf3bf5db9bL,0x1bc510e64ee9dd11L,
34779         0xbb8e529a7388950aL,0xc9c0ce3c7f6e6175L,0xd75753f88a290784L },
34780       { 0xfebdd94ba80acc08L,0x942cdfebdc846b30L,0xbb64799f6ca7099fL,
34781         0x40f03362d1326fa8L,0x95b2d9db97b62e9eL,0x5ad9ce165301d9aaL } },
34782     /* 62 << 105 */
34783     { { 0xaa5fead9dfc59ef1L,0xc1348e98b2cc1e9aL,0x83dd617e77bda968L,
34784         0x0fdcc0837c8997dfL,0x9206ae234cc62b01L,0x88aec92f417678dfL },
34785       { 0x9d399af791fb8920L,0x399eebd13e8a22a0L,0x32f3bba735bebdf3L,
34786         0x354c1c5004c2f32aL,0xc2d6b5514052c926L,0x16a1f71f656a7eebL } },
34787     /* 63 << 105 */
34788     { { 0xd7a755bc14a8c57bL,0xa97b901341ebec55L,0x88b88459143a1a9bL,
34789         0x7aa178cc7e19e3e0L,0xb8359634635dfb65L,0x63fd26c7c169e28aL },
34790       { 0x89d9090d953272f5L,0x63e571196383845aL,0x0e26c0cf886a1f1fL,
34791         0xda56332db7057a29L,0x6b5d303f7a459c6fL,0x3c351b771bb704c3L } },
34792     /* 64 << 105 */
34793     { { 0xda2b0725bb296c27L,0x1f22ffa4d341171bL,0xc721e35a5b132756L,
34794         0xe5695e84fadb6907L,0xbc5a3bf4c283f546L,0x9182cb3edde128aeL },
34795       { 0x179c7fa66592e05eL,0x1e604790f38e8586L,0xaf7e83bea16bad55L,
34796         0x6f41231e9137ecd8L,0xac87543d8f30d1abL,0x630a9d87b1ee0ee8L } },
34797     /* 0 << 112 */
34798     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
34799       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
34800     /* 1 << 112 */
34801     { { 0x359cbfa05e4f1914L,0x6992cd48d922176aL,0x2fd5e90f630cbcb5L,
34802         0x2b0f61306ddbf238L,0x5070970a3af753e6L,0x433d009441727016L },
34803       { 0x2eb15b3b9dca97e2L,0x3a7379cd00d96875L,0x0d4374aee930a75cL,
34804         0x3cd36046849e7727L,0x9ac3117e336a19ffL,0x2d1373c9433ddc04L } },
34805     /* 2 << 112 */
34806     { { 0x985dcb43e4362d67L,0xecb860c2a939bea4L,0x40597f3055fbf1d5L,
34807         0xb6d166bf43fcd98aL,0x5932570915ec99caL,0xe05ae3b9c5bdd370L },
34808       { 0xc18f78270c7b943bL,0x84bde9c64dd572ccL,0x5d50a89df478e56bL,
34809         0x242c2f4864d29053L,0xcda12c6161cf7e0eL,0xf8b6890eac8d1d40L } },
34810     /* 3 << 112 */
34811     { { 0x7a9a9dd7b6b11af8L,0xac4c50dd16a42f8fL,0x1550267b6726c324L,
34812         0x12cfb2fd7f841afbL,0xa41b19052f046430L,0x8f5f5373b7d786cbL },
34813       { 0x7b61b39c729e09fbL,0x07a5415f2626da4cL,0x65d6efb84a348905L,
34814         0xf377862cf2e864b9L,0x3c94000dab96cdb2L,0x2176321a8efef0f6L } },
34815     /* 4 << 112 */
34816     { { 0x8c558000c1c1bc68L,0x9e48a67a83fd6ca6L,0xacf0d75ceb7a35cbL,
34817         0x0fbdce4cf0a93110L,0x82b2d13a9cc50c85L,0x696fd259cef70d6fL },
34818       { 0x1cc9be2e457b88c2L,0x0d58b34b1f04c0bcL,0x52bd479f195a532bL,
34819         0x769fe6ca1ab3605cL,0xba6a63e48a24c1e0L,0x86dea46299da5d7aL } },
34820     /* 5 << 112 */
34821     { { 0xdf2a6cecd24790f3L,0x37bfbba7b87ca06dL,0x7c8a7e4c0de8a6aaL,
34822         0x5c806b94be7b8f5dL,0xccca1c714fda3e7eL,0x3c1cbaf9cff788e5L },
34823       { 0x17a081a9565d0464L,0xc4eb995713ed1b82L,0x0d7c90549e4cfac7L,
34824         0x6fb74c629d53a200L,0x65b9ed6d5f977a8bL,0xe2279cec0ba2e7c4L } },
34825     /* 6 << 112 */
34826     { { 0x8435e2962d4412dcL,0xa36cbfef972350d8L,0xe2fe6e6fece5cb15L,
34827         0x6f249b095336f7ffL,0x5801feb9908ee267L,0x7649a837fc8f217bL },
34828       { 0xfc1adc3ea0ebc808L,0x1ef06bec94f08075L,0x4afb5404cc1d9b72L,
34829         0x75cabd61a1f2c5a4L,0x2bd797e1cd08f195L,0x4f1b5cdecbea0f49L } },
34830     /* 7 << 112 */
34831     { { 0xe9759aa9e7aa87e2L,0x2d54a5fbe5909f55L,0xe49a59aa2c80bb61L,
34832         0xdb89e21230c9b328L,0xf42b9adb004ebffcL,0x4471b983479678e4L },
34833       { 0x0dde5b0e97709e2dL,0x2f35c653a12bdb85L,0x9f8d7a5cd8c8285cL,
34834         0xd7cde5971d156206L,0xdbe765d7a8e126bcL,0x2e645b6de3f4e60bL } },
34835     /* 8 << 112 */
34836     { { 0x509abccb65682820L,0xfbfa1d094ff86137L,0x1ae371bd640bc2f6L,
34837         0xa155c2978f546c68L,0x8858cadcc08b8cbfL,0xafac5b0a1d96948bL },
34838       { 0x919cb22682e25016L,0xd147df4ab064ffc3L,0x25dd0f1ab4abe560L,
34839         0xc6bbe6369cb75bd1L,0xbb367cf947a778e4L,0x5714aa4dbde524b3L } },
34840     /* 9 << 112 */
34841     { { 0xce3c8218e61b1439L,0x8be5a9cb67f79d28L,0xb1bd1386d5164b35L,
34842         0x0bc24d96b9adbac7L,0xbcee4f0ec7482414L,0xac15b5b66ca5d49dL },
34843       { 0x79caa999f20f9a50L,0x89bfd652a911308cL,0x972fe26d15245a7dL,
34844         0xd44d0f6e1d0d2939L,0x6749beaedd439057L,0x02627a6ad4b6f416L } },
34845     /* 10 << 112 */
34846     { { 0x7e882e8cb437b791L,0x9afde25afbe334cfL,0x60184381da52f9fbL,
34847         0x935d33a1001df73cL,0x38f303df080682e5L,0xd9cf2c1f4e9a29b2L },
34848       { 0x889d265e00d9208eL,0xfc1cc2221fd8e817L,0xdd14f1a2ec71428aL,
34849         0xe81cc4f9d9e973aaL,0x26a154963696468cL,0x0620fe6409d546acL } },
34850     /* 11 << 112 */
34851     { { 0x06ed3e64166be92fL,0xe1da6e27c51ea53eL,0x784f2514acb2b245L,
34852         0xc544e50f8e24077fL,0xad449938c5c01787L,0x5d9ef8d527d41dd7L },
34853       { 0x37114064e15d4a96L,0x7f0c92aa1dd45321L,0xc1f11d56b9c72ee5L,
34854         0x91f3b3f7a78e6d3aL,0x0cf440b0c9488cf7L,0x14d3defd93df403aL } },
34855     /* 12 << 112 */
34856     { { 0x3fa4ea0225aa1d44L,0x22c68e17f74a6a3aL,0x351bcb80f489e72dL,
34857         0xdabdf118be0268edL,0xa3bf9e1984d2cd16L,0x318506a2d67393a4L },
34858       { 0xb0c6b2d8615ed517L,0x42ac507c3dcba0f9L,0x60570dfb51235e30L,
34859         0xc677628dedb033e4L,0x0290c22766e61f76L,0x1d8450d09888943fL } },
34860     /* 13 << 112 */
34861     { { 0x1b8f5ed7155a3daeL,0xc9d2433aa46ed72bL,0xe99c7fe38ca361fbL,
34862         0x606b08c19626fe7bL,0xe6447257c0ea792aL,0x5839e2c62e1156f3L },
34863       { 0xb73135dd5eab6d41L,0x200f2e488ef63584L,0x4c73885ddda1c49eL,
34864         0x8d606a75b5428ee9L,0x2a73cc7aa62699dcL,0x484a58941c6c8de5L } },
34865     /* 14 << 112 */
34866     { { 0x2365b4150decae0cL,0x9c8567ece8583741L,0x35d6cfae6d8842a7L,
34867         0x4e6c98e6dd0db8e4L,0x584524e767b34d02L,0x786ea52f554c6117L },
34868       { 0x8952ce169320725fL,0x8eb7f91854c4c8f2L,0xdd34f77afc799251L,
34869         0x76b8c3173e05d37fL,0x664cbddcebb4d365L,0x31ba98b90dfa1a98L } },
34870     /* 15 << 112 */
34871     { { 0xf113a7bd651c186fL,0x417bd7373737a50aL,0xddb40d201b858249L,
34872         0x62a60745345f5b45L,0xf0a03f5c2d4e221eL,0xcafde67cc64621a2L },
34873       { 0xbbbfaebcbc3c06c3L,0xadaf9a16b8383dc0L,0xcd21aa308f343ea2L,
34874         0x64cefec0d890128dL,0x2ed9b8f763b44054L,0xc0a49e2917c0ffcfL } },
34875     /* 16 << 112 */
34876     { { 0xc6307399166915dfL,0xb35545bc5da8a26eL,0x8e0126aae3a99321L,
34877         0x0fbfdf76da9308d1L,0x2163ed6b6168e505L,0x71f3d0087500d8bdL },
34878       { 0xf57159605ac13f65L,0xc1cd9a6755172d5bL,0x6b225f7e53d84c65L,
34879         0x9c031269025029daL,0x54c1edfa17d89aedL,0x5b0238786b435150L } },
34880     /* 17 << 112 */
34881     { { 0x96d69db1146abf28L,0xc924454924d221dbL,0x7881951c137bdfe1L,
34882         0xde2d490dda51f789L,0x6033c2c34b0a1e0aL,0xbe214d8c08dac13eL },
34883       { 0x3d5abfa9a5a1d055L,0x3433060f6fe02a62L,0x88608c7ba37f2833L,
34884         0xfd2da6f0e74dd6c1L,0x27c22c17fe000000L,0x04a1f15bcfbde005L } },
34885     /* 18 << 112 */
34886     { { 0x01204485f340b522L,0x588a9e1c9367a099L,0xb3d1a4b466005913L,
34887         0x522ac504d55cc36fL,0xa6c80e511b72eabaL,0x15025a7acaaa89b5L },
34888       { 0xc9166912bec1a986L,0xe78e9642f19044cfL,0x230d51ab4756908aL,
34889         0x6795942aac04cb90L,0xcd2cc9eca2a92818L,0xfccead967cf52961L } },
34890     /* 19 << 112 */
34891     { { 0x32fa291d52ccf481L,0xbb137ef901ac0eafL,0x13ce2183011746abL,
34892         0x7e64248677bfea0aL,0x67cbba0e5e7e5032L,0xc900998a1f2b69fbL },
34893       { 0x62ddd91aab3256afL,0x1f0f216911d7996fL,0xab2f2d540e4dd4feL,
34894         0x05b577a92ec64ec3L,0x8071e88708ef233aL,0x9be1f8d60e649a5cL } },
34895     /* 20 << 112 */
34896     { { 0x5f78334137732664L,0x625b85dc840b6f8eL,0x7dcb3d256cdf0959L,
34897         0x87a5ae19d4ce1845L,0x43bf0721b0dc016aL,0x6569ad52f6a5f6f3L },
34898       { 0xa2697f15560ab87aL,0x4c6fd1a0060dcd57L,0x652a7732c3167f56L,
34899         0xe355fef05294a5e0L,0xf7b3177dcc59c562L,0x511c96dddccf4b1fL } },
34900     /* 21 << 112 */
34901     { { 0xec768f587622c0b9L,0x7c9eb5490416afe7L,0x3c3d87f55795433eL,
34902         0x74eff3cba4611446L,0xb2c79249dc7037d3L,0x70062ebd8bb1fc42L },
34903       { 0xbd0d3532a4ad91c8L,0x42411c139f5ee0c3L,0x11c4ee91132470cbL,
34904         0x496438979fb2a135L,0x4c1df7e0ce2ec891L,0x689cda57e16f7413L } },
34905     /* 22 << 112 */
34906     { { 0x3b42838a2a0030a1L,0x3f37587ae05ba56eL,0x6382a86f44c16650L,
34907         0x6c1bc67da6f9f136L,0x7d152d907ada0f41L,0x9115319d5c40c0f5L },
34908       { 0x1143028632f58e3aL,0x5dcf7ec7eda5c5a2L,0xf04404a9f334a0b2L,
34909         0x75e0b4a84ec2cbd5L,0x86e89728d079dbf0L,0x796700799a99c605L } },
34910     /* 23 << 112 */
34911     { { 0x98456a79b1d2a3fdL,0x4e8ba91e6dd789e9L,0x8e0bfa33a435226eL,
34912         0x42bea2f48cfea5ccL,0x5ca5fb0321b14602L,0x73faac5826877b13L },
34913       { 0x0ddb6ea203905ebbL,0x67bc35f1698cd7abL,0x24da47d85d9af735L,
34914         0x1a2a7c1dd786000eL,0xb35fb29e23ccaceaL,0x1c063466bf1f51a7L } },
34915     /* 24 << 112 */
34916     { { 0x1e7ae1601e94d949L,0x177dc53ee78e6221L,0x8af29d8f7aeb9882L,
34917         0x2d9a60fd9e3f3906L,0x6979fcd6df962156L,0xdd2fe5887e1e54b8L },
34918       { 0x9cccf31076643453L,0x94ece1a84e0643d0L,0x745449cbc111d8cfL,
34919         0x872afa4ae6cfbd97L,0x5c27b7ca10dfb34eL,0x505e62bc533480feL } },
34920     /* 25 << 112 */
34921     { { 0x6dd2007363141676L,0xdb099810c5c4c657L,0x2bbbcbaf8c369f32L,
34922         0x339e3ded08794178L,0xcc362a32315c4cd7L,0x5d288ff37dbce794L },
34923       { 0xafd05d104d0cb6c6L,0x3a6dcee9d386c7dfL,0xa207dc17e311ee74L,
34924         0xc5794286abdc751cL,0xf45136e5d889b985L,0xb25e84638d8f32a3L } },
34925     /* 26 << 112 */
34926     { { 0x8711ebfd1dc32f77L,0xfc0e851f3933d758L,0x90b679fd64a859f3L,
34927         0x0914a975ef37a81eL,0xcef80495d675c502L,0x862d3b65be18c403L },
34928       { 0x0d53f957305b4aa2L,0xe404f2570e5bcb47L,0x833a8644854b6b63L,
34929         0x5709f53b99f8d3d9L,0xc400dc1f13893effL,0x75ca01714c65086eL } },
34930     /* 27 << 112 */
34931     { { 0xdaaf8e76eeceb904L,0xbce9ca54b9e31f92L,0x4442d0c88d06a58fL,
34932         0x5966e1e5eda0ee34L,0x043125f058edc555L,0x44d0311749cf0931L },
34933       { 0x292aea12a99ae5c2L,0x1e9be1702a2bade4L,0x003ec2826b21b444L,
34934         0xc158f3cffc41d601L,0x25a839f4c4b3f4c7L,0x4a36bec399e64264L } },
34935     /* 28 << 112 */
34936     { { 0x829bbe7e04e6bda7L,0xc52b64ded3e667dbL,0x98aa40ecaa2fc128L,
34937         0x2c6997d011fbef94L,0x70ca76aa97c8167eL,0x558f8ce7b1083886L },
34938       { 0x5c621e35d250f064L,0x757710f8f535b2c7L,0x5d118d8faa69ee95L,
34939         0x02ffe667b27cd9deL,0x65711ac7d13e51fcL,0xdbbf16278cb1a1c7L } },
34940     /* 29 << 112 */
34941     { { 0x3c2fcbceeab0bb77L,0x569d6c7e4e1b17adL,0x22e06899b0518730L,
34942         0xf8466d9d19f809e9L,0x372e254288359d10L,0x8074483532d5bb82L },
34943       { 0xc88727d566060945L,0x08e9246572a0d38fL,0x84ca145c9f84a861L,
34944         0x8363463c1c004212L,0x9debab72bd3ad87eL,0xce68c150a988e65dL } },
34945     /* 30 << 112 */
34946     { { 0x1c172e5ea71dbae0L,0xf7794eb19b80bf40L,0x3007c5705d7d2829L,
34947         0xa8d44d6fcc97cf00L,0x093a9784f6abea6bL,0x2ac4a67564cca46fL },
34948       { 0x14fcc56350d8fc8bL,0x53133983a11ccd07L,0x7cf09bf68e6b8f26L,
34949         0x49f864d57b06e3adL,0xd526a765c373fc6dL,0x7af297c6151305d5L } },
34950     /* 31 << 112 */
34951     { { 0x18f941bfcf7c1eb5L,0xda10720a130163b7L,0x3c4894f46bd9bb34L,
34952         0x7575087bc8ca64f1L,0x68c424852c8f3798L,0x986214eecf0e5839L },
34953       { 0x3723b713df2b0b90L,0xd81560d5d229bf8aL,0x0204ae5ff993078eL,
34954         0x55206d9186a14833L,0x8c7d09181557fc96L,0xe2cd5dcdddba9705L } },
34955     /* 32 << 112 */
34956     { { 0x009ef80aae238fa1L,0xb41d9b24486af6b5L,0xab4455ed685add95L,
34957         0x18f323f672c7dac8L,0xe7009790e372f168L,0x4d5bcba6067bea99L },
34958       { 0xf15bdbcc51a2a9a9L,0xde7e4f742fac9169L,0x2fd62c304bdbec36L,
34959         0x8b3ea93d1b3ac6c7L,0xce1c8e5c9c293889L,0x19664dda11564f8bL } },
34960     /* 33 << 112 */
34961     { { 0x207a738245406afaL,0x7c1c398d1675bc91L,0x2ae99d8ba1bb7a43L,
34962         0x63f134e8c5e176e5L,0x4a624a1c48364268L,0x471974f1de65c5deL },
34963       { 0x44932063ea90b0cfL,0x13ba5019d8fd7e30L,0x6281f71348510422L,
34964         0xdaba3f14bc1a523aL,0x333e5eff924cc5cdL,0x861ab150e9113d1dL } },
34965     /* 34 << 112 */
34966     { { 0x332d308dd9b9461cL,0x3e9b4a95b7014261L,0xc557f608c2beeb5cL,
34967         0x9ee927187c8531d6L,0x55ff3dfcc0002ff0L,0xed96119eccd9b325L },
34968       { 0xd779ba03fb92416bL,0x63b75d351416be79L,0x793cb1fbfc9ad27fL,
34969         0xcc762a5b87f1bc59L,0x6e7a23389bbb07d8L,0x99b6e278aa7bfa44L } },
34970     /* 35 << 112 */
34971     { { 0xeb142de02bcce03eL,0xcac04711577565e2L,0xa949c7350ab07328L,
34972         0x8f15874cd7d347ebL,0xade8c67a696dc9f3L,0x039e6b7c66a7bcadL },
34973       { 0x1260bd4acb8cb9d2L,0xdbf05496d4801bcfL,0x6b37a4d30ffb845eL,
34974         0xc3968fe150b50889L,0x261e82f4525c6a7dL,0x539f634912aad50bL } },
34975     /* 36 << 112 */
34976     { { 0xcb1a9d2ceae4d774L,0xfdec2ca998a0775cL,0xa538acbd0eab9e25L,
34977         0x6901ebfd04dd34b0L,0x998ab679ed4c6409L,0x69b1d7ee0235b865L },
34978       { 0x4f2e6e5723ac3be6L,0x2b2072aed4a00479L,0x5c12fcdc2ce2f059L,
34979         0xfc688c45ac329db8L,0x16d377a51f539427L,0xebe4e2cfa08ed9aeL } },
34980     /* 37 << 112 */
34981     { { 0xb394214715d60238L,0x60d8909bbe9d4febL,0x013827b78654e16cL,
34982         0x465b3078824fc55aL,0x361e6523e3fcd6c0L,0x2ef44d80ef88b307L },
34983       { 0xdca7809fbeb2db77L,0xe649d591da97468aL,0xad6079b77c28ff0aL,
34984         0x6a21ce1ac4897775L,0xde876f7b5a592fd5L,0xced421a585a1dd36L } },
34985     /* 38 << 112 */
34986     { { 0x9793bdf6a045a442L,0xdb3c60472713ed37L,0x9929d32261344a0bL,
34987         0xfb48c2dc831af45cL,0x730226df53a8a077L,0x3a5baf8a18876559L },
34988       { 0x99736e7d8e11f9edL,0x3e7663dd0c09dddfL,0x368a29ed89b8a23dL,
34989         0x5443d7f5d3a68663L,0x0b84b464c6302455L,0x235c6eb5cf088847L } },
34990     /* 39 << 112 */
34991     { { 0x13307013b8de0a3aL,0xfb10e919f592fd9eL,0xd09e5b2571401ec7L,
34992         0x6e8091c11d94cf0aL,0xb7d79fc74193b129L,0xb842a3695f2c05e5L },
34993       { 0xcf6fc6cbccdc7614L,0x77d6408180102a3aL,0xde4b9304f30c3488L,
34994         0x4fd9f8d89bd08e48L,0x58ac01245963b063L,0x1f11335c747fac66L } },
34995     /* 40 << 112 */
34996     { { 0x5f266f13175418b2L,0x6bd7a86903a626f9L,0xc7b532304a6f11caL,
34997         0xa216b056bfc8ccedL,0xa274d5d8b288cb7cL,0x6fc4a35d924897adL },
34998       { 0x1ea532eb81fc6940L,0x2fcd817e2acbbc45L,0x45eee93f67814fa3L,
34999         0x3b3da48c1229e035L,0xd049a976efd8e3d7L,0x8087dff7bf81f314L } },
35000     /* 41 << 112 */
35001     { { 0x9ccd802fbddea807L,0x08a64e86d93b97f6L,0x422c0f5602f04e3cL,
35002         0x25aecab133900990L,0xcdb2c5c15d4b4d2fL,0x849a6b1f5f43e42eL },
35003       { 0x4689b815446e7361L,0x49abaf6ca681fba0L,0x304d84b18289a564L,
35004         0xa6529d430b779df3L,0xca926da67b51b195L,0x3640dde5c829ae84L } },
35005     /* 42 << 112 */
35006     { { 0x747235495424e1d0L,0x3861ae65c85af64fL,0xc56ff12baab902c2L,
35007         0x9aeb9e154fbf264eL,0x14e3c13942ca40d2L,0x6c26da41c1ba0250L },
35008       { 0x97a6031df51a0967L,0x88fea7710e623393L,0xcafae4c778574eefL,
35009         0x2c4c281198119f28L,0xd190fc749276d971L,0x843f4baf9273f01cL } },
35010     /* 43 << 112 */
35011     { { 0x1b2d643de50ad79dL,0x1ceaee7ed3075486L,0x13a003f3ec287aabL,
35012         0x09a4a825e8c7aeddL,0x93babe5ad1d4c05cL,0x8115bfec95ab084cL },
35013       { 0x629e8e0a289ebb8aL,0x923167a9bd992f77L,0x440edf75ae16ce72L,
35014         0xa67dd37b0a0019d4L,0x174b341978b0df8dL,0x010746a5ad6e4c60L } },
35015     /* 44 << 112 */
35016     { { 0xed05e4bf8342da4aL,0x36d881f3b565f0f2L,0x3fbd04e1411e627fL,
35017         0x40ac13cb0411889aL,0x9f6006cab5b25fd6L,0x0e79d377e31404ccL },
35018       { 0x9fd6474a5af3ea01L,0x89d7ddcb2a27d905L,0x2c1beebada12e71dL,
35019         0x3ecb11e1833eb7deL,0xa348b2f6600eb1faL,0xc227192183f2657fL } },
35020     /* 45 << 112 */
35021     { { 0x2cfaf519e32ba792L,0xa99113d7f929b512L,0xd347f7d18f554e19L,
35022         0x18f0374f098a2ad8L,0x073855acc174e0b9L,0xf155c6c009324c23L },
35023       { 0x3388c39605d1e427L,0x144356a9d39221d1L,0xe3d4ffed492a84adL,
35024         0x519c65e6d1e53c29L,0x334f470a2813c717L,0x69aa0a1de0a400e7L } },
35025     /* 46 << 112 */
35026     { { 0xd8689c9c39e70b62L,0x2b87157e6cd86fe6L,0x53d55de887c0f35dL,
35027         0xb2d7141de09aa44bL,0x3499553084fe7c21L,0x4550096c16b19be0L },
35028       { 0xb0a8ce05b856dac0L,0x570223450e211887L,0x8d4a7431aca17401L,
35029         0x96bf439857400a0eL,0x1e849d365ffd5f34L,0x7e70f6253a6d23acL } },
35030     /* 47 << 112 */
35031     { { 0x511ad0024b4ecd64L,0xd2287a28f37bf796L,0x801d2c2dcbc1f22dL,
35032         0xf0d3a6944df568c8L,0xa7fec550af6836b0L,0xa27dd6e887a426c7L },
35033       { 0x2f730e5b59c6b695L,0x9df438ee93ee2b36L,0xc4def9eaf2cfc4c6L,
35034         0x82ddcca0a209814bL,0xb2e1de4f6dc916d3L,0xc6798e7453f81a55L } },
35035     /* 48 << 112 */
35036     { { 0x77faac22bd366155L,0x13cc4038282f11b5L,0x31ad1dd45fbd35abL,
35037         0x7e0de9da45d6d40eL,0xa16c5f1939749ef6L,0x761cd6cf85691cf2L },
35038       { 0x156536ad4d59b802L,0xee98dc4187c4b11dL,0x165a1eacd35088fcL,
35039         0xce8a733538fb995cL,0x34d0d3313293b3a5L,0xfcf548ca8b570e79L } },
35040     /* 49 << 112 */
35041     { { 0x4c4bddca99e8cb05L,0x2b900ed017c5be91L,0x0ba0201b40adbfc1L,
35042         0xb5098cf8534595ecL,0x356e23ff80f56f69L,0x8b3fa12e748555a0L },
35043       { 0x9063437677b8ebdbL,0xe3eb33fdf040b6a8L,0xcc5b699539b611ceL,
35044         0x20171523c693be7eL,0x5c4364d760849cf0L,0x30f3376372c4d303L } },
35045     /* 50 << 112 */
35046     { { 0x0757295022a8c8e0L,0x6e05715866ca81ecL,0x7e8e36890f804bc9L,
35047         0xcba813a191b99207L,0x3f11f7abe50ab65fL,0xaefe5479b6d05954L },
35048       { 0x48dd59a1eff5cf18L,0xa623b738bda11ecdL,0x586e755818870f08L,
35049         0xb2c471a50e38ba1aL,0x5b21c42c69ce8032L,0xaf040e6c7943d78eL } },
35050     /* 51 << 112 */
35051     { { 0x6364714c4852f979L,0x7ed7aa310700cd35L,0x9021e46d9376733cL,
35052         0xf2b65ed3b6de8d03L,0x0e3d00c16652346cL,0x6630fcb75d27e2d0L },
35053       { 0x69cc20ded79a1c20L,0xa6d77163be3745e6L,0xab36946379aacf14L,
35054         0x8bdffbf1b935a1daL,0xda8eb343b63096f6L,0xf61988f13c966345L } },
35055     /* 52 << 112 */
35056     { { 0x06f684ffd31f390eL,0xa1467be560ec98a8L,0x7cbdd03eaa80fddeL,
35057         0x0ae4d114e204ded1L,0xb8ebeb29a004c3e2L,0xd93cd70726009581L },
35058       { 0x3ff2ee49f1b9d3ccL,0x0e69e5ac753526ccL,0x8cb2243e8b13f47bL,
35059         0xe2c5ae8d7fbfc5aeL,0x8e9af723394a45d8L,0x0b1114dbd92ab8d0L } },
35060     /* 53 << 112 */
35061     { { 0x937d9d2a73f9ff5bL,0x07c8c147de0fd740L,0x3880ead73639b680L,
35062         0x879d6f836558cc89L,0xf32e14b975bc8c84L,0x278ea5e4bcf6f8cdL },
35063       { 0xd9f25ea94baca6cbL,0x676e4bdd44d0ceb2L,0x98042ac190868974L,
35064         0xdf227f370711b658L,0xcd6d29b46ef0e4f8L,0xd04f5bf88f817e92L } },
35065     /* 54 << 112 */
35066     { { 0xc7d62be78354f4ffL,0xd6fd9d590ac4d9b6L,0x13fbed772b50ab82L,
35067         0xc4c5be374362b766L,0x5d67bfdd6c59d059L,0x10c93cceac02f34cL },
35068       { 0x3bec1f3b72e35ca4L,0xb1cfade159f4820bL,0x679edbcf80fae051L,
35069         0x6762f5ba6671737cL,0x28b425db3fe77970L,0x4bd6d2ebe778aaaeL } },
35070     /* 55 << 112 */
35071     { { 0xdcbe0018aecd5ae8L,0x7f178b7aedb2a7b0L,0xedb5c805b427179cL,
35072         0x25fb6a084ba080fbL,0xeb6365165f1b263dL,0x814c520092acb04aL },
35073       { 0x936f97a988d94b88L,0x6d54f1768b45e4b7L,0x6321e3bdb0cc515cL,
35074         0x9118d0318eb5be13L,0x5be9188a8c574e96L,0xcdad43f3f281f19dL } },
35075     /* 56 << 112 */
35076     { { 0x7be5946ea85af34aL,0x420593c9da6fb0e0L,0x40b83c00987f9246L,
35077         0xac35f4e9a15d192bL,0x1979bd33776a678cL,0x0a7d973e8f6068d3L },
35078       { 0x71d322e87e6298feL,0xbb23a29936af9b65L,0x14e2b9706644c50cL,
35079         0x5f7f207373570bd3L,0x40215c569055538bL,0x91372e64365500c9L } },
35080     /* 57 << 112 */
35081     { { 0x2763961a303ef488L,0xc357c32fbf865ec3L,0x32ca1a943663e409L,
35082         0x9d9040217de506a9L,0x1f56e144249028bcL,0xd76402e61c5c7cecL },
35083       { 0x98dcac65b0dd9d4fL,0x887f6e97532facf6L,0xc0d5d2a123c2cfbeL,
35084         0x0566bd59d18d8b1aL,0x67404eb1297a071eL,0x10f24d9b26529285L } },
35085     /* 58 << 112 */
35086     { { 0x34808f5ca479ef4eL,0x60effdea9ff10abfL,0x471a077cdae34e0eL,
35087         0xf34df9562f9d1408L,0x4f8bbffbe46961b7L,0x6a80b0276336a6f4L },
35088       { 0x28e57309ca92e5dbL,0x27fbb139ce31cb10L,0xcea87ae28d24334bL,
35089         0x3781f438de6db765L,0x3328fc09edaf054bL,0xa8acdbcfa94396f8L } },
35090     /* 59 << 112 */
35091     { { 0xa05b72aa83a79820L,0x3210863ccdeeaedcL,0x192d5fdcb76fdabbL,
35092         0x25ec4568f10c17a7L,0xbd51e31fca556920L,0x8ab534f26a7e40f7L },
35093       { 0x2ecb28c041145d5bL,0x4e95843df9038557L,0x65605d17d783699cL,
35094         0xf728cb1178bddf7aL,0x2d823ae8bee2a60cL,0x02030edb8eb48325L } },
35095     /* 60 << 112 */
35096     { { 0xfe517758aa04facfL,0xa5216df44c421615L,0x4d87767d4f133b52L,
35097         0xdae81b7699757264L,0x53c1a0e3e3ad4323L,0x2c565bbd53b401bcL },
35098       { 0x94d2354fcd54a0e1L,0xf43d0f053f1a02a7L,0x52e7ee4af660b949L,
35099         0x563ec009bc208df4L,0x58c0b975bf21c4b1L,0x29a8e5adeb029e52L } },
35100     /* 61 << 112 */
35101     { { 0x4c07b3e4283bdd75L,0xcd94d2a385dd6177L,0xc1ab8a5cab097530L,
35102         0x90301468a5fd9ff7L,0x2a3e5b4064d0932dL,0x77e3b67e435e1c0fL },
35103       { 0x3b5d261c14f7bb4dL,0x1d67a760bab7bfc9L,0x507aad46d799621bL,
35104         0xf44567b5f4f3c3b9L,0xfaa97a3eae2bb6b2L,0x7d373b163594e2c9L } },
35105     /* 62 << 112 */
35106     { { 0x29ef2da9a15e6ea0L,0xf411e20dcd168689L,0x34944975049a4b24L,
35107         0x0effc2dfe035cd24L,0x5d77178b0a954cf7L,0x3504bc357ab2d8c0L },
35108       { 0xc3405000ec32219cL,0x00442630421a5a3cL,0x0548505c7f49819aL,
35109         0x6bdb281fc805d0e8L,0x03cb57ac97484e09L,0xcf0926da58a14cc1L } },
35110     /* 63 << 112 */
35111     { { 0x0715055cc85610a7L,0xd2642935fa6ca505L,0x87ef95128c361749L,
35112         0x89cd669a8c8156d2L,0x5cdcd266ed60d7ceL,0x99ccc96df59fb53fL },
35113       { 0x82400f4655df7f73L,0x2b6aa1d9af34f742L,0xa6cbca79c398aa8eL,
35114         0x7697bdea02b7325eL,0x1cb036b94fde4a79L,0xfe11ff96307fb964L } },
35115     /* 64 << 112 */
35116     { { 0x6a3a23279af0a75cL,0xf832a8159f1f250dL,0x17030c3322a82d3fL,
35117         0x24bf18ea14cbc835L,0x319dc4cab2da2727L,0x481df3606d020d4aL },
35118       { 0xaeebdd8a7fc22ba5L,0xbd0515c6a91e28abL,0xfc8a2978595f361dL,
35119         0xe60dd96c1ae8fa3cL,0x19c2109aa5341575L,0xfd6e92bb06a0ee48L } },
35120     /* 0 << 119 */
35121     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
35122       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
35123     /* 1 << 119 */
35124     { { 0x2e32f896cde5e785L,0xcd55ae7ab9db8f31L,0x278db1ad8f832885L,
35125         0x271d9078adcbd933L,0x2208fae34a64f863L,0x974046e039c89365L },
35126       { 0xcb46f272b3cd0cd3L,0x31f34e1a74e59edcL,0x3421d316edd50418L,
35127         0xb1d8a064cabe36edL,0xdb13e560362efcdaL,0x567c2b6cc71eb3eeL } },
35128     /* 2 << 119 */
35129     { { 0x2af8ed8170d4d7bcL,0xabc3e15fb632435cL,0x4c0e726f78219356L,
35130         0x8c1962a1b87254c4L,0x30796a71c9e7691aL,0xd453ef19a75a12eeL },
35131       { 0x535f42c213ae4964L,0x86831c3c0da9586aL,0xb7f1ef35e39a7a58L,
35132         0xa2789ae2d459b91aL,0xeadbca7f02fd429dL,0x94f215d465290f57L } },
35133     /* 3 << 119 */
35134     { { 0x94c3938b4c9324feL,0x0dea07003fe78a0eL,0x57ab9daa019e7dc6L,
35135         0xb0d7b14a9925b79fL,0x3c9a638b937a5daaL,0x3b14fd0de62943adL },
35136       { 0xbaafb635ed3ae4b5L,0x3060a090b2bcfaa2L,0x389d9e7f7aa8f217L,
35137         0xd7f987c6e9310a65L,0xec0927f993b69c0aL,0x9335e9102381a247L } },
35138     /* 4 << 119 */
35139     { { 0xc08550024b950889L,0xee99dbfe8ce24da0L,0xdda71d964318e860L,
35140         0x01d3d39604fe9b85L,0xda4bc065e25e7e20L,0xd3a50b87e076c81cL },
35141       { 0x5b9f821931e5f494L,0x6a140527a6a1b821L,0xf52683e4d8dd159bL,
35142         0xca9c888720b18043L,0x73c040fa08a0d8f5L,0x92e482e8179525c4L } },
35143     /* 5 << 119 */
35144     { { 0x8b9f650f3e776590L,0x41ba807f47703a5dL,0x8cc1a550fe907078L,
35145         0xd70cb76c8f00b84bL,0xcaee21566f3e6780L,0xfd6a51f595c2d03eL },
35146       { 0x2c897c5556ffa08fL,0x08589a6563d13d54L,0x6a1eed4287bbacf7L,
35147         0x66aed4f5ee709d78L,0x67c925bf1178ecabL,0x6870f4c8a29cf747L } },
35148     /* 6 << 119 */
35149     { { 0x37ed2be51cfb79acL,0x801946f3e7af84c3L,0xb061ad8ae77c2f00L,
35150         0xe87e1a9a44de16a8L,0xdf4f57c87ee490ffL,0x4e793b49005993edL },
35151       { 0xe1036387bccb593fL,0xf174941195e09b80L,0x59cb20d15ab42f91L,
35152         0xa738a18dac0ff033L,0xda501a2e2ac1e7f4L,0x1b67eda084d8a6e0L } },
35153     /* 7 << 119 */
35154     { { 0xe3a67b2d5e12e708L,0x3a4772e2ce48f234L,0x78f9dbc334794271L,
35155         0x9880053a3e6a61e7L,0x031c30b87c0f6e59L,0x8113df6cf7b972f8L },
35156       { 0x3625bdce18ee148cL,0x72c2b8efdb885158L,0x4c73c80c9a7f0df3L,
35157         0xbc2dd8a507b92470L,0x5a33e4dfdb005677L,0xc699cf5ea5ca9dd3L } },
35158     /* 8 << 119 */
35159     { { 0x3a828904a4d2313eL,0xbf4946b192e66888L,0xc574898ae5fa19d2L,
35160         0x0b13dbb65e1c5fa4L,0xf11343ba7c390fc2L,0x35b1418fd7d32187L },
35161       { 0xc92cb1bb83e7fe7bL,0x0b969455d78365c4L,0xda69dfe5672f2af7L,
35162         0x9c62d7b430932441L,0x165672ad94af02d6L,0xd2cc734dcde81c22L } },
35163     /* 9 << 119 */
35164     { { 0x6353420218d07dd6L,0xc7c0c8f128a3cb4eL,0xa41d4c55d7929131L,
35165         0xf1aaab3445d21f63L,0xd69a59545ec3e9feL,0x209732c1b8ddea2fL },
35166       { 0x368b9c59e1936916L,0xb011c662ab1f8585L,0xcce30a25474e57b4L,
35167         0xb79c76df7049c61dL,0x984739950ccf165bL,0x7c6f4ab40ce897baL } },
35168     /* 10 << 119 */
35169     { { 0x1d27efce1080e90bL,0xa28152463fd01dc6L,0x99a3fb83caa26d18L,
35170         0xd27e6133b82babbeL,0x61030dfdd783dd60L,0x295a291373c78cb8L },
35171       { 0x8707a2cf68be6a92L,0xc9c2fb98eeb3474aL,0x7c3fd412a2b176b8L,
35172         0xd5b52e2fc7202101L,0x24a63030f0a6d536L,0x05842de304648ec0L } },
35173     /* 11 << 119 */
35174     { { 0x907d88035a8432bdL,0x89232a5a2638fe30L,0xa120eecbe2089014L,
35175         0x3a5208cb5a2c9e97L,0xe163d29a3449eb4eL,0x3df984530eaba88fL },
35176       { 0x55d3b9afa1547443L,0x316aae18f2a60ceeL,0x64d0fd30d6e11a5aL,
35177         0x65de345808ef6002L,0xcede56fab4a3d1deL,0xa5bfa8d9a4bc1588L } },
35178     /* 12 << 119 */
35179     { { 0xd45e350133f4d416L,0xbb40233a4bf9131eL,0x1532a088e302483aL,
35180         0x3475e8b82c2485c0L,0x08f9ea56969cdbe6L,0x31928645253cd738L },
35181       { 0x1cf323a4ac9836beL,0xdf647ccf02b6e4deL,0x9a31e84fc06f3d09L,
35182         0xd326b86e39efe6d9L,0x77e3e1df14ac4decL,0xf2d5917af3e0c582L } },
35183     /* 13 << 119 */
35184     { { 0xf88238f1376216b2L,0x8c7522db7d15f653L,0x50aa7a74a21f74d8L,
35185         0xf7a964c8bc9e1a0cL,0x33ea64251387ca6bL,0xda84fe74e7be16a6L },
35186       { 0xdf0462d727867aaaL,0xeb7f0ab8ae6be1b3L,0x21abe5a5d9bdec8bL,
35187         0xdbb99199ac4bed1bL,0xf65c19d935d13c0dL,0xf966e22e4df74056L } },
35188     /* 14 << 119 */
35189     { { 0x67477cdc30577ac9L,0x51dd9775244f92a8L,0x31fd60b9917eec66L,
35190         0xacd95bd4d66c5c1dL,0x2e0551f3bf9508baL,0x121168e1688cb243L },
35191       { 0x8c0397404540d230L,0xc4ed3cf6009ecdf9L,0x191825e144db62afL,
35192         0x3ee8acabc4a030daL,0x8ab154a894081504L,0x1fe09e4b486c9cd0L } },
35193     /* 15 << 119 */
35194     { { 0x7b4e65ebae4219adL,0x2e424c441184a0d3L,0x10eeb898d32e179bL,
35195         0xadf05e2d8afa9a6dL,0xecd6c18bbeccd5f1L,0xe592115c39ac53e8L },
35196       { 0x9ccf231ac8c7b9b6L,0x1848b4fe678774bcL,0x2050856386782b91L,
35197         0xb7caf7cc74dc6018L,0xe80805485cf9273aL,0x9609897b246b4851L } },
35198     /* 16 << 119 */
35199     { { 0xe92b56c002cf37fdL,0xa75bbcb0f71b34deL,0x7754d0ef50f5c482L,
35200         0x850a9ef611fa89feL,0x97d74b1bba4ea7d8L,0xfc757c25aab7ba2eL },
35201       { 0x06f30ab0f2a67fddL,0xb10aba1412e72af8L,0x47580bca7a2e053dL,
35202         0x85795598dcf0e14cL,0xc3596781d6f55310L,0x8ab251b74c9b7e18L } },
35203     /* 17 << 119 */
35204     { { 0xdc56cff85279e5cfL,0xa33a6765fdbdf1adL,0xc122c0eee5077a4bL,
35205         0x44c3b190a98ab643L,0x334a6868b991d197L,0x598bbf185d6a0488L },
35206       { 0xd028bfdc5a0e6f96L,0xfd1a37f5e11c57b6L,0xe1240a3003f82183L,
35207         0x6afae98c390d8536L,0x554a42dcc244b181L,0xa3d422d75f4cb4b6L } },
35208     /* 18 << 119 */
35209     { { 0x512f82f9d113450bL,0x5878c9012dbc9197L,0xdb87412be13f355bL,
35210         0x0a0a4a9b935b8a5eL,0x818587bdf25a5351L,0xe807931031e3d9c7L },
35211       { 0x8b1d47c7611bc1b1L,0x51722b5872a823f2L,0x6f97ee8a53b36b3eL,
35212         0x6e085aac946dd453L,0x2ec5057de65e6533L,0xf82d9d714bb18801L } },
35213     /* 19 << 119 */
35214     { { 0xf113abe17d48bfe7L,0x51d77fa5213facecL,0x27bb373f21269089L,
35215         0x31e9850e7b188989L,0xd20a15f41d50a1c6L,0xb4887ed9d9746367L },
35216       { 0x8920a7e2325f19c5L,0x691352358ad74492L,0x713d1471d19a76a2L,
35217         0x952cb9e5873ab310L,0x5b359d1ffa8eb8cfL,0x55aab5ad8b9c9e7cL } },
35218     /* 20 << 119 */
35219     { { 0x4ab138504dbb8798L,0x0e7980d772d04cd2L,0x1755c5660b3271c6L,
35220         0x8414efb09d9d1468L,0x61a586301795ce66L,0xb6a8b393232924a1L },
35221       { 0xa992f0ceae031bd6L,0x6747fb5f2915acc1L,0x03daa26693e9c0d2L,
35222         0xc18fa3645400d554L,0xaf04ff8d9497e895L,0x86c3cfc250b6b339L } },
35223     /* 21 << 119 */
35224     { { 0xdf26f6605b26122cL,0xeb6c188c4d6b80ccL,0xae2efe59ccec172bL,
35225         0x5cdcd958f3f7d693L,0xa2ac2594c5f993f0L,0xb96ad8cf3f7cb591L },
35226       { 0x7e2f88f8446abbabL,0x3d1a5eb6f6051f2bL,0x7d882e82ad6f49daL,
35227         0xe32918e3c4e7bbffL,0x442a32789be81150L,0xa1d34da1bd14557eL } },
35228     /* 22 << 119 */
35229     { { 0xad81fa938ba5aa8eL,0x723e628e8f7aa69eL,0x0ba7c2deef35937cL,
35230         0x83a43ec56decfb40L,0xf520f849e60c4f2dL,0x8260e8ae457e3b5eL },
35231       { 0x7ce874f0bf1d9ed7L,0x5fde35537f1a5466L,0x5a63777c0c162dbbL,
35232         0x0fd04f8cdad87289L,0xca2d9e0e640761d5L,0x4615cff838501adbL } },
35233     /* 23 << 119 */
35234     { { 0x60c7e16cdf66a95cL,0x25b1078d5d0bd644L,0x77f8d872bd933e31L,
35235         0x5c4c382de2e1536cL,0x5b3b37c09295ee0dL,0xf94698d4ecce42b6L },
35236       { 0x947ef80c4db8f2c7L,0x34661f7dc70dd82fL,0x17b288a7f2311006L,
35237         0x1f1171a66815e1caL,0x0f71f66ce80d6235L,0x858c665a87fa5a59L } },
35238     /* 24 << 119 */
35239     { { 0x376b2a7f04e1e6e3L,0xea0dcb70a31774b4L,0xfc7fe4cc5cbdec2eL,
35240         0x8568499df03f459eL,0xe9fd8fb28b78900eL,0xd33c6e30e431bf97L },
35241       { 0xd904b8f5c896e766L,0xa8f577cf82748cefL,0x93dd921b87e044b3L,
35242         0x23d79837f76eebe9L,0x5e0a7493e569feebL,0xd0797549414dddb6L } },
35243     /* 25 << 119 */
35244     { { 0x9bf04f567781556aL,0x30be1e8953ebf7c6L,0x6f4899cf713fe432L,
35245         0x4f641fb7c9ef741fL,0x03560819002cc010L,0xfa51f8f7b4bbd339L },
35246       { 0xe09c5ef77f1dea5cL,0x39cb20d97255fec5L,0x407746862ea38859L,
35247         0x68ca598ecd7a29f3L,0xb8025dd67a9db4d9L,0x4feaeeaed9dfe491L } },
35248     /* 26 << 119 */
35249     { { 0x9422789b110b4a25L,0x5c26779f70ad8cc1L,0x4ee6a748ec4f1e14L,
35250         0xfb584a0d5c7ab5e0L,0xed1dcb0bfb21ee66L,0xdbed1f0011c6863cL },
35251       { 0xd2969269b1b1d187L,0xf7d0c3f2afe964e6L,0xe05ee93f12bb865eL,
35252         0x1afb7beeed79118eL,0x220af1380f0fe453L,0x1463aa1a52782ab9L } },
35253     /* 27 << 119 */
35254     { { 0x8cf42aa26b99ca6aL,0x696850242f091dbaL,0x9d887e6ad7d3270aL,
35255         0x627754fd5c9b735eL,0x3b8735a811d95df6L,0x74debd8b52443251L },
35256       { 0x1f8dd5b66181583eL,0xbd0ca92c8b570a9cL,0xc373a61a71ae3274L,
35257         0xf4b2c88d1c4c16cdL,0xd3e6ec3baf33efabL,0x8c54d2721bf6f0d0L } },
35258     /* 28 << 119 */
35259     { { 0xfd9e3542bfe5b1a7L,0xb42d2a4175938ceaL,0x74688a153befb760L,
35260         0x8daeeaa22e33dbe7L,0xc9c1ea083e677801L,0x68ecf4e434effe1eL },
35261       { 0x927700ccd294c321L,0x9e2e723de940afc5L,0xbcfac07a7cf6cd43L,
35262         0xa009ef94d1006bc3L,0xa02016b0373d13e3L,0x4e097adbabae5822L } },
35263     /* 29 << 119 */
35264     { { 0x7535175d48752720L,0xf51086ee850bdf07L,0xce322c33cb4c3f4dL,
35265         0xd863f7edb28965fbL,0xfe46a4e9885e4afaL,0x58b5c871136d7ddaL },
35266       { 0x126eddaf6ed07824L,0x084ce962844fcbb8L,0x9ac0787157dfb4c5L,
35267         0x97451fcc4d6b5910L,0x9f14b1ce0843c9c6L,0xf737f6c0a0e18596L } },
35268     /* 30 << 119 */
35269     { { 0x7c139d56d7dbe5f9L,0xfc16e6110b83685bL,0xfa723c029018463cL,
35270         0xc472458c840bf5d7L,0x4d8093590af07591L,0x418d88303308dfd9L },
35271       { 0x9b381e040c365ae3L,0x3780bf33f8190fd1L,0x45397418dd03e854L,
35272         0xa95d030f4e51e491L,0x87c8c686e3286ceaL,0x01c773bf900b5f83L } },
35273     /* 31 << 119 */
35274     { { 0x0028dcae855a0b90L,0x74c1e36026f0d718L,0x34f80e3ca059f144L,
35275         0x85b5d8e3f2bfe1b4L,0xe124601f453de099L,0x8b164ad6221b3efdL },
35276       { 0x636f45ebbe004ab0L,0xa23093e99f231a8aL,0x48e05e8e2287b992L,
35277         0xefec5e5b4477cb8bL,0x45a65afa8ba0231bL,0x92d38bd88b1af6baL } },
35278     /* 32 << 119 */
35279     { { 0x8db8b78cc898b8bcL,0x686896da502940cdL,0x67e50f022dde2e3cL,
35280         0x2e2461f38cbf406cL,0x32182781e1f7ff60L,0x26934b05e30e2688L },
35281       { 0x95adc204fc4494f6L,0x4c7f30c5161b7499L,0xd5caf060b7341737L,
35282         0xed93187fd128d46cL,0x3f2819cb20fc1e04L,0x48c4086f2b7f70a1L } },
35283     /* 33 << 119 */
35284     { { 0x45693c00a92ca9faL,0x046b218d63bd525dL,0x40f1d6cc6b1d6a68L,
35285         0xfc5807c5c54dc1f0L,0x2875d4d98b5690f6L,0x7a753543d0f72a83L },
35286       { 0x01f2c35ae28b5309L,0x38fb5f121bcef323L,0xd6ea6896256a9bffL,
35287         0x4380fb2c44d65badL,0xb587d641c3556fb6L,0x74c5ec1905167f32L } },
35288     /* 34 << 119 */
35289     { { 0xdabe347578673b02L,0x4f0f25cef6e7395eL,0x3117abb9d181ad45L,
35290         0x4b559f88aa13de0bL,0xfd8efe78ea7c9745L,0x080600475dd21682L },
35291       { 0xc0f5de4bd4c86ffcL,0x4bb14b1ef21ab6a2L,0xacb53a6cf50c1d12L,
35292         0x46aac4505cc9162eL,0x049c51e02de240b6L,0xbb2dc016e383c3b0L } },
35293     /* 35 << 119 */
35294     { { 0xa1e3cb2255b7f121L,0xc9183b13dd01db7dL,0xfe26aa801469dae6L,
35295         0x7318df7fd9ecfe2bL,0xade0a24d56dd4acfL,0x6e521c2222d1ba14L },
35296       { 0xa039800a40afa1deL,0x9c7da49d5c6af72aL,0xf7ae921cd3fcc7c6L,
35297         0x76af2407dcab63e2L,0xdc1618dbb6dd49ceL,0xebc65c4d362cc88bL } },
35298     /* 36 << 119 */
35299     { { 0xd847939132202bd3L,0x1dacde87d6631ac1L,0x99d2e71f905a94f4L,
35300         0xd3c21f5a7e67dd7fL,0x3605c28e3c43cf23L,0xb6cd5ac74d3b3070L },
35301       { 0x8bf748ba246298d7L,0x9e939fbd0f053664L,0x3bb3e7b8cc303783L,
35302         0x359bd3e56189c417L,0x299d0ce1f609ae34L,0xd7221cc7b9ca801dL } },
35303     /* 37 << 119 */
35304     { { 0xb7c823506b73c5a6L,0x7fea0d95fefee640L,0x6d5dd775f68b6be6L,
35305         0x4a5576147cbfa333L,0x6cad79c2fcd9b17dL,0x49aec3d405c4dd35L },
35306       { 0x3b1f3754c3792470L,0x351ef2ccbe00cffcL,0x44a248916a71f45eL,
35307         0x1e7a6013b8640d08L,0xf0f476154efcd556L,0xc82171444fe15dd3L } },
35308     /* 38 << 119 */
35309     { { 0xa3c56ad28e438c92L,0x7c43f98fb2ceaf1aL,0x397c44f7e2150778L,
35310         0x48d17ab771a24131L,0xcc5138631e2acda9L,0x2c76a55ef0c9bac9L },
35311       { 0x4d74cdce7ea4bb7bL,0x834bd5bfb1b3c2baL,0x46e2911eccc310a4L,
35312         0xd3de84aa0fc1bf13L,0x27f2892f80a03ad3L,0x85b476203bd2f08bL } },
35313     /* 39 << 119 */
35314     { { 0x85f9b301218642acL,0xb3f3b36f8728ef66L,0x4a833bea2ebb8181L,
35315         0x7d3bca9d8541a662L,0xd3be6d0ac5a0ecffL,0xaf52a2a9528da950L },
35316       { 0x4b431910131f72caL,0xe2708d36933d5550L,0x195340a469abf146L,
35317         0x84ca66e4e4e2e131L,0xd9402ca7e16c39bfL,0x5beedce343ca6041L } },
35318     /* 40 << 119 */
35319     { { 0x87c5915395523a22L,0x56686f525ac5146eL,0x9ec69ec718ccf766L,
35320         0x13f36d4ff6e21a4aL,0xa0841e94098691f4L,0xbd9d52d2bd91dd2eL },
35321       { 0xa8765981b3fa43eaL,0xb0cd17cd600b9761L,0x02dd9d71b5abe842L,
35322         0x63df33a63689a53bL,0xab4b85bb9d9baad7L,0xce2d31c1eb74e549L } },
35323     /* 41 << 119 */
35324     { { 0x8d69a654f2472426L,0x91a4b6a3ff7aeff0L,0x51dd8e76fdcc7cb4L,
35325         0x5f7d42a273731cd7L,0xc127401aa99c9d9aL,0x8ede9330c92561d7L },
35326       { 0x86057a56784c3cf2L,0x8afcf32cb5a7755eL,0xa0a5b561c71cd3d9L,
35327         0x0a5d805e36d3f5a4L,0x25a39acd7432a384L,0xd574a6b7b226e9ecL } },
35328     /* 42 << 119 */
35329     { { 0xab1cb818567af533L,0x273b4537bac2705aL,0x133066c422c84ab6L,
35330         0xc3590de64830bfc1L,0xea2978695e4742d0L,0xf6d8c6944f3164c0L },
35331       { 0x09e85f3dc1249588L,0x6c2bb05d4ec64df7L,0xd267115e8b78000fL,
35332         0x07c5d7aec7e4a316L,0xcb1187ba4619e5bdL,0x57b1d4efa43f7eeeL } },
35333     /* 43 << 119 */
35334     { { 0x886e3f30b29f5916L,0xa419d2c6625f29a0L,0xb4f89fc49bf07dc4L,
35335         0x86c137a1a165ed88L,0x6fa241a9e5d6280dL,0x08be9b0cd11576f2L },
35336       { 0x5735aeb7e376b03dL,0xf4639e6d182ce9b9L,0xb6948499cc688f57L,
35337         0xfde146636552009eL,0x3eeeae350a2e8553L,0x50447f1b659dfe2eL } },
35338     /* 44 << 119 */
35339     { { 0xefccd67ed15c33c0L,0x33393846146d5e96L,0x015e97da9ca7354eL,
35340         0x729b69bac143e795L,0xd4440ecfd4c5d0e2L,0x78c042bb697a80e7L },
35341       { 0x9361ad1d08602f75L,0xaa354166af489794L,0xe60e5a274966d3cdL,
35342         0x8346995e2394f9f3L,0x2de33256590f6a15L,0xb14427bb43298ac1L } },
35343     /* 45 << 119 */
35344     { { 0x38fee83a74680d2cL,0xd8019e5c0e700c8dL,0xcfaf5614475da1b8L,
35345         0x11893fc58f0159e3L,0x4c101127553813c2L,0xd273055208f82a6aL },
35346       { 0x8728834c74a3ce9aL,0x66b939a891906488L,0x42ac7c07b88d36bcL,
35347         0x663d7411d989bb72L,0x650e5d6eb284c066L,0x052b7f6710d8f124L } },
35348     /* 46 << 119 */
35349     { { 0x3618891fc8176a96L,0x62c4b084e5808b97L,0xde5585464dd95d6eL,
35350         0x27a8133e730b2ea4L,0xe07ceec36af318a0L,0x0acc1286ce24fd2cL },
35351       { 0x8a48fe4add4d307cL,0x71a9ba9c18cde0daL,0x655e2b66d5d79747L,
35352         0x409fe856a79aedc7L,0xc5a9f244d287e5cfL,0xcce103844e82ec39L } },
35353     /* 47 << 119 */
35354     { { 0x2a8cb0a56ad833c5L,0xe8fab8b844962dd6L,0x31166fd63ee1dfefL,
35355         0x3aba85a1e1230449L,0xf9f8da66bd1f502eL,0xe4a72d82e3c17ccaL },
35356       { 0xfa3d661d6070d587L,0x51d10b73c33ed08aL,0x3b0f515cb29f2d0bL,
35357         0xd82a11d7e1986e91L,0xcf24f81a2201f05bL,0xa94ec1e0d25f8417L } },
35358     /* 48 << 119 */
35359     { { 0xc7807daa081ed51dL,0xb7dfabf0e5d2d963L,0x3f78ae2e80d386d0L,
35360         0xd66275254bbfd04bL,0x238c8eb76d074f92L,0xfe51ec8a5bc5f9b5L },
35361       { 0x6ba47430cc03177bL,0xe72efda6400b29e0L,0xb905701becbffe88L,
35362         0x5c61bdb47cf89933L,0xf1eb3084c914aa6aL,0xa3ead71e8245998bL } },
35363     /* 49 << 119 */
35364     { { 0xc58ee3013c7eb5a9L,0x02c177220a1172baL,0x8620118394c7c5b3L,
35365         0x66292bc4e1668debL,0xf51b48f4caf39937L,0x9cca60f43eaea578L },
35366       { 0xf8e8004a5c2adccaL,0xce7ceeb1ebf49ac7L,0x36346357371d1c54L,
35367         0x8799e408d99ff07dL,0x3226181d8c3b2cbfL,0x3b4ff42ba437c2c6L } },
35368     /* 50 << 119 */
35369     { { 0x00675ba7f25d364cL,0x7a7f162968d36bdfL,0x35ec468aa9e23f29L,
35370         0xf797ac502d926e6cL,0x639ba4534b4f4376L,0xd71b430f51ff9519L },
35371       { 0xb8c439ec2cf5635cL,0x0ce4c8d181980393L,0x4c5362a964123b15L,
35372         0x6e0421e0ffdcf096L,0x624a855f10d1f914L,0x7d8f3ab7614dcd29L } },
35373     /* 51 << 119 */
35374     { { 0x235ba8b565868390L,0x853c9346ea936e81L,0x967ff132700bb25aL,
35375         0xb26d9778561a136cL,0x8b775c4fe3f7e41dL,0xae8f6b2ebd390b2cL },
35376       { 0x80959adc4fc7224dL,0xd9c913c12eaccf8cL,0xa9a278c79e96f769L,
35377         0xbc6be3038f26856dL,0xb039caf295d04cdeL,0x42ba0510a91bf5dcL } },
35378     /* 52 << 119 */
35379     { { 0x77870665cfbe0653L,0xab84c4b3523d814dL,0x72839d8897cd2bc0L,
35380         0xb966e521d25b1476L,0x4255d18451fd86a0L,0xadaf9b76dd54be7aL },
35381       { 0xada6ff627f285e0bL,0xb76e26f46d42400bL,0x1d9fe676958bee25L,
35382         0xfcd7be9edb59965cL,0x897a90834bcf6e75L,0x64b26f02aabd21e8L } },
35383     /* 53 << 119 */
35384     { { 0xee46626beb1a8ce6L,0x2de20371b672fc49L,0xa0fb11b8bd2d9256L,
35385         0x5b49f70ac2a8dcd4L,0x98935fc9e5dc0ee3L,0xaddbae423bc00993L },
35386       { 0xbd0bd9e19207f0e9L,0xe86c5365b393bcdcL,0x32184c832d0a9282L,
35387         0x8fe996d1df34532eL,0x3b33f151c6f45172L,0xd9def9a7b84545e4L } },
35388     /* 54 << 119 */
35389     { { 0xd9219adab3493ce0L,0x971b243a52f09ae5L,0xc16c9bf8e24e3674L,
35390         0x026d408dce68c7cdL,0xf9b33dd9358209e3L,0x02d0595df3b2a206L },
35391       { 0xbf99427160d15640L,0x6da7a04e15b5466aL,0x03aa4ed81cadb50dL,
35392         0x1548f029129a4253L,0x41741f7eb842865aL,0x859fe0a4a3f88c98L } },
35393     /* 55 << 119 */
35394     { { 0x66bb66f5f56b17ccL,0xdce0bf2cba8958f8L,0xd814318f9ff85781L,
35395         0x41dce823edd1ad96L,0x71bb754bb59c6580L,0x9c5efb70de594c3bL },
35396       { 0xf7b4ce5eb0053788L,0x9c26b0342770b6deL,0xe6967b1c8d131e8fL,
35397         0xfda0efdccf21bf28L,0x2366d47e09cbeeacL,0x62e9ee556629680eL } },
35398     /* 56 << 119 */
35399     { { 0xdaff980ff8e06359L,0xb4e0c9e2ead8a883L,0xe3e262023da6e94fL,
35400         0x37410ed03303c9d6L,0xc044d77b91fb5d82L,0x3559d9ac9ea34d26L },
35401       { 0xf51a120be21beda5L,0xdd2eef8a3f7befa4L,0x46a26ccd8c79fca1L,
35402         0x3fb21a682a046572L,0x3624a47adad7c7c9L,0xb9b77ffd4b4174f5L } },
35403     /* 57 << 119 */
35404     { { 0xae19a097c9f8c462L,0x477be49917a9d8a9L,0x4a0c41c9d2154c45L,
35405         0x39313aba1b0d985bL,0x3a70f65cc051b643L,0x0725dabf2d0be160L },
35406       { 0x29eefc94a69867d4L,0x6acc4cd49d02bce2L,0x0606ab725d4dca50L,
35407         0xcce81133bfecdcbaL,0x604df3def23b2239L,0xa644b430d20a7529L } },
35408     /* 58 << 119 */
35409     { { 0x80de085a05fd7553L,0x4a4ab91eb897566bL,0x33bcd4752f1c173fL,
35410         0x4e238896c100c013L,0x1c88500dd614b34bL,0x0401c5f6c3ba9e23L },
35411       { 0x8e8003c4d0af0de5L,0x19b1dfb59d0dcbb9L,0x4a3640a9ebef7ab6L,
35412         0xedafd65b959b15f6L,0x8092ef7f7fb95821L,0xab8dd52ece2e45d1L } },
35413     /* 59 << 119 */
35414     { { 0x43f9a415259ac609L,0xcd6c7aaa0ff5722cL,0xb4689e75b29973caL,
35415         0x78a43571b690c0acL,0x90dc4ac0a6d3ba1fL,0x38af00a2b773932aL },
35416       { 0xc13aebdda5e2c9edL,0xfab3a128cf3fed2dL,0xb3b7d29d32eb8ccfL,
35417         0x9ae1430b6986db5cL,0x35d18edf5365c21eL,0x88f8356e038471ccL } },
35418     /* 60 << 119 */
35419     { { 0x45587a7c0794dad2L,0x660833899e9c1cdcL,0x60e7ae4ad242a6b9L,
35420         0xb5f96b521009df3cL,0xc2d405092e30445aL,0xfa53ba4ec250a29eL },
35421       { 0xf6a247855d98c6ceL,0xf873653c207dd110L,0x2aebc3c6c634cbd0L,
35422         0x84b8016ce5cdbafeL,0xbda81fcace00b206L,0x837dc69484b55f2cL } },
35423     /* 61 << 119 */
35424     { { 0x61bdc5cab308f1f0L,0x7763c97d8898d3c2L,0xc02324e60434de23L,
35425         0x7f5c565e4ba696e9L,0x06f27a3e66914b66L,0x64a975ee05052cf5L },
35426       { 0x98b2f703bb38b14eL,0xbacbd113371e495cL,0xe54451acdd14cc9dL,
35427         0x8575cfdf87d141b3L,0xbd183a03d0996091L,0x947555579360264cL } },
35428     /* 62 << 119 */
35429     { { 0xd1f2d6b8b9cfe6bfL,0x6358810b00073f6fL,0x5fce5993d712106eL,
35430         0x5ee6b2711c024c91L,0xd0248ff5453db663L,0xd6d81cb2adb835e8L },
35431       { 0x8696cfecfdfcb4c7L,0x696b7fcb53bc9045L,0xab4d3807dda56981L,
35432         0x2f9980521e4b943bL,0x8aa76adb166b7f18L,0x6393430152a2d7edL } },
35433     /* 63 << 119 */
35434     { { 0xc89db4eb4595ca55L,0x48921c735f1a73a2L,0xfc513c904afe7cbaL,
35435         0x6d3f988bff8322eeL,0x17d0d4f0e59b7cdcL,0x292f4757f4bb5588L },
35436       { 0x3037e11151c14623L,0x3e113343dce98277L,0x0be229341e20dc8fL,
35437         0x0ebd1fbfcd6ff82aL,0x304bd69ed01fa90fL,0x402a457577f1862fL } },
35438     /* 64 << 119 */
35439     { { 0xd74d09c10ece13aeL,0x5e59d9e057a6bd95L,0xdb1ccfdce132b940L,
35440         0xa0e5309c843d3c66L,0x1fbd03a5f9cb3ef4L,0xcdc9ef0a00ea5177L },
35441       { 0x1ebf5a15cb784a6bL,0xa67382af8a0d109aL,0x3256c37aa0d34d15L,
35442         0xee40efa50fca43afL,0xc299bbd4b9841bdeL,0x6df68f603bef4a0bL } },
35443     /* 0 << 126 */
35444     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
35445       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
35446     /* 1 << 126 */
35447     { { 0xe01295fdd9d7c50aL,0xaf31b4ea67f8ef0dL,0x2ec9689f9eaf8eb7L,
35448         0x327b96c5c622acc5L,0xae918f81b2757f2aL,0x74927d684fd6606eL },
35449       { 0x09bb7fce18574215L,0xfea383bce8e68b72L,0xdf2a6f125fb47511L,
35450         0xbe88faa18e399520L,0x0166d57e3fb1c3a2L,0x5907ef2fe525f81fL } },
35451     /* 2 << 126 */
35452     { { 0xdefe3a7b8a37f660L,0x7898db8c858f5765L,0x7366c26a73d1f9b4L,
35453         0x35d5d718237ae8b7L,0x3efb20feb4478259L,0xccd0fed7aa545ee3L },
35454       { 0x750edd05ed22d152L,0x4f8020f9ee20d4c6L,0x16e60f370a9e29dcL,
35455         0x9cf0a136bfbec7f6L,0xb430a34b2e47e143L,0x2e2560bbc6cdd1a9L } },
35456     /* 3 << 126 */
35457     { { 0x799352dae4161a65L,0xe5cf7ad856253ce6L,0xf606bf796de32775L,
35458         0xddc0f3a357fce8dbL,0x1075fc2316cf4a47L,0x078f0e04b27c5ad8L },
35459       { 0x9fc477953f7100aaL,0x3ac489254673ffa2L,0xb8263f42f9cd8348L,
35460         0x5bdfde3068cc92d5L,0x2250927b1ac37f9cL,0x26ec8328b33da359L } },
35461     /* 4 << 126 */
35462     { { 0xf186d6bcc88d568aL,0x872bc4c7528535ddL,0xc9e7432edfe64dc3L,
35463         0xd9fc4832d795ea57L,0xf4ffdb81c845af2bL,0x66d7e7882b670517L },
35464       { 0xa7c1be04d7b7a1c6L,0xbed88479d5b2a249L,0x62ff8aba03f2ef6dL,
35465         0x60ecaac420dc701dL,0x9f4b559f4ff10119L,0x0582c9313cd54fd0L } },
35466     /* 5 << 126 */
35467     { { 0xea9da8f012bbaeb6L,0x3fba06b18c9f8360L,0xc11bd7abb28c0ac3L,
35468         0x1e05af2faa8a01bdL,0xae1e99c5f000b1c3L,0x93ee806453d79930L },
35469       { 0x5728089e4c4f5513L,0x755351f3b1f70b76L,0x187ac651675f77efL,
35470         0x5cf7bfb553067d84L,0x629290838174b5c0L,0x720e20798d5be74dL } },
35471     /* 6 << 126 */
35472     { { 0xab8cc09ff5eb9ad1L,0x97a4de76132edbfeL,0xa2e11c548baf6347L,
35473         0xcee54229683cfcf6L,0xe1e993b8dcfc6555L,0x333bf16abe9df066L },
35474       { 0x5207e093060d62dfL,0xfa32324d69b0f5faL,0xef16fbcfd3243d2dL,
35475         0x540a2e59f04f8e45L,0xb5e70f9c48317bbaL,0x00dbe9b25b35baa1L } },
35476     /* 7 << 126 */
35477     { { 0x0eaed675ebb512eeL,0x347e0756058efbd5L,0xadf792ca296d3d47L,
35478         0x57f00c0a4654d012L,0xa1e08a04bccc5803L,0x610677f05b2f11d1L },
35479       { 0x0d9393d7b81acfd2L,0xb258e1570587c219L,0x372a1857b4ceba47L,
35480         0xe1ce8bb53ecc1c5dL,0x7efdf301922cecd0L,0xcab8cb170d8aa653L } },
35481     /* 8 << 126 */
35482     { { 0x31954a5679d05497L,0xc12520b6fe76d4d8L,0x8c433ec5e37ef1d2L,
35483         0xcd0f203575bc3b66L,0x3723f145249cd98bL,0x1356e0d2ea3b42a3L },
35484       { 0xf607fee0f174c7b5L,0x318afc5e0127be39L,0xd47b5d74cea5417fL,
35485         0x6891940a10fca22bL,0x5cea41332b635e8bL,0x93db2ed6b5934fefL } },
35486     /* 9 << 126 */
35487     { { 0xf87cfaaac8972b7dL,0x2b8f9874e090800fL,0xdb88cd4f52efde36L,
35488         0x7b977f6e80776de8L,0xd047fc8ffb4b19c4L,0x33f3e43578b8135fL },
35489       { 0xb4cdb352da33eff8L,0x217f9e2deb89d325L,0x1bb5a004c99feec5L,
35490         0x98ce5a7fdb45c845L,0x458904681d87e964L,0xb9253873d151ad80L } },
35491     /* 10 << 126 */
35492     { { 0x5d7c767de39edca9L,0xe4a700e7a7f8de0cL,0x5816e1f93c9eec33L,
35493         0xa975c933d32fe465L,0x979beff968466a5eL,0xe308c135cc067721L },
35494       { 0xe0e733b41839b88dL,0xda3e3e6c298dc2ebL,0x414c3f0e8fb70e3eL,
35495         0x5ebaefa7ed7ca91cL,0x5c283310ae3b0f3eL,0x20353d5df3b1d44eL } },
35496     /* 11 << 126 */
35497     { { 0xd50767a9790325feL,0xe2ceddb9358c50eeL,0x60be64bdbbf03ae5L,
35498         0xe70c7e90f053328fL,0x6ba6af9e51543f0aL,0x470941f3b413e069L },
35499       { 0x0b569fd4ddf63d13L,0xf94b22634a2125d6L,0xaa45ab62a5c1acedL,
35500         0x2b797175defa5a30L,0x3eb30067ead1d440L,0xcadb54e90b691af2L } },
35501     /* 12 << 126 */
35502     { { 0x365a4a431630b133L,0x9ecef631068d7863L,0xa330c8b4b7205a6fL,
35503         0x4858eab357df815cL,0x6e522afaf1a92674L,0xa7cff3d9f41365d7L },
35504       { 0x00dd34615a0e4626L,0xa695feff48f9d094L,0xf427103f7c082301L,
35505         0x14a2a1876b092b71L,0x210f632130037a33L,0x21cca09639340e14L } },
35506     /* 13 << 126 */
35507     { { 0x58355ba0f60ad6c1L,0xc63fbcff56022afaL,0xa6a770d54e7ef19fL,
35508         0xf42b2024a09e9378L,0x153aa3200330f774L,0x268aaee55dc02c97L },
35509       { 0xa7e13b42828f7ab7L,0xc0ccce09c303bfcaL,0x23169daae3ccb6ddL,
35510         0xf7f763fd786774e9L,0xb15a5ef150021488L,0x52f408fd5f3ea885L } },
35511     /* 14 << 126 */
35512     { { 0x53e84021177346c2L,0x4ee451dde20af475L,0xd7642453c14f393eL,
35513         0x7eaa215331662516L,0x1217a1b4c1d486c9L,0x7d32427569860f20L },
35514       { 0x3813c95f14c2837eL,0xb8f0713d4e0c056aL,0x398c218cf6dec37bL,
35515         0x5bfa2eefa4ad1eedL,0x53cb0fd29f97a05dL,0x59fa132f6a9f492bL } },
35516     /* 15 << 126 */
35517     { { 0x6d5dff381fc2c16aL,0x5dec7ae2b1fe149eL,0xa9eed62c85088ceaL,
35518         0x5878fdf7996174baL,0x2cf65bb935517a73L,0x80844bcacff96d13L },
35519       { 0x0f55c8bfed53f49dL,0x35815fb0fbd8cec6L,0x23e7d5c53b6fa7d9L,
35520         0x3ee04c0146ce1733L,0x180e25553f5c4a27L,0x61263ea7280e6363L } },
35521     /* 16 << 126 */
35522     { { 0xb1f4fead41b959b5L,0x6edb53a9e71890c0L,0x48b47efe2e28aa2aL,
35523         0x70dad2e9b3151d67L,0x87a8178b436a3460L,0x0f86f9f5801f7af7L },
35524       { 0xfab462e3a982fc14L,0xe29126bacb03e978L,0xb4696b3fe6681282L,
35525         0x3bd9910a6a3fdc1dL,0x4409128449e37dacL,0x3b4bfabccf605fb3L } },
35526     /* 17 << 126 */
35527     { { 0x605fae7ece9d1372L,0xb2623a79f9b7e06eL,0xfab9b2742d37357eL,
35528         0xffdf9246461417f3L,0xc04b15d7bdd0e922L,0x767bcee54b2dbc0eL },
35529       { 0x74c4ea4ed45efc88L,0x32d3d85491a534a8L,0x88967078554b2691L,
35530         0xe8256015e336a410L,0x166469624b9f978bL,0xb433f06ca104f01fL } },
35531     /* 18 << 126 */
35532     { { 0x8906d815457e1e82L,0x96abb1aa4c8a2c68L,0x2e63f37927ab2fb1L,
35533         0xe092e15f5446dfaaL,0xa3a3f0926615c65cL,0x8b31116747c3f259L },
35534       { 0xfe2038782e5c658cL,0x38903cf526215773L,0x0039fca7237f1bd4L,
35535         0x75dbcc016058ff17L,0x67ee6226a65aeb9eL,0x96999fa75cedcba5L } },
35536     /* 19 << 126 */
35537     { { 0x04c6fd475ac4d191L,0x0067e474c825a897L,0x4a37c931404810c5L,
35538         0x072d30e5c4a56380L,0xbaf3428dc897ba23L,0x9899935b53724382L },
35539       { 0xda5cc13ff4d41a62L,0x063047a0c6271baaL,0x49790bdc5cf48302L,
35540         0xd8c34e5384c5a9abL,0x6cf28e83db5bc36aL,0x430dbb1497da9d42L } },
35541     /* 20 << 126 */
35542     { { 0x59470e49c37acc2eL,0xc9e0f73611b85596L,0x47613c1e0fb30eccL,
35543         0x1fbeffa3b62892f1L,0xddfeef49f8eefa16L,0x6f82acd9daeff719L },
35544       { 0xff1872cdacb41007L,0x06fe556c82d64c6dL,0x52a63a387695218aL,
35545         0xa0d413a720802b88L,0x233f1f3118f4a473L,0x22ef7d6fc9d7da4aL } },
35546     /* 21 << 126 */
35547     { { 0xeba1db6910dad9abL,0xddb62dacde3a5a42L,0x209c472cfdf5ad86L,
35548         0x14a7ee4b37214540L,0xcaf70ce08339c9dfL,0xa95744554eb9189bL },
35549       { 0x90d7f241e9b39189L,0xf5edfd09af7f3eddL,0xc9a3444deb7ed52aL,
35550         0x30d9e2f80085d9d1L,0xeb412daa4dc24fefL,0x55c0000b27786649L } },
35551     /* 22 << 126 */
35552     { { 0xa9f34fa9518118e5L,0x430db0a51a22e790L,0x64b443a5d5a16ca1L,
35553         0xaa3b64f4d8adbe45L,0xb49435fae0f0873aL,0xb8d67ce4a635d1e3L },
35554       { 0xad843f8a8a612b29L,0xa416ec7fd84a210aL,0x8b4dc6930984b23fL,
35555         0x29a1b71b24640dcfL,0x8f2d7507911892adL,0x0ce384105bd4d518L } },
35556     /* 23 << 126 */
35557     { { 0x1e1bef926c42e1bcL,0x91259dd60e04d449L,0xc029961e8875d346L,
35558         0xfde51012a9e38f43L,0xdeaa1dc18892643aL,0x67e3b913217e08d8L },
35559       { 0x889a28c269b92b7eL,0x004c0f87b7446c21L,0xea812f67a2f98e77L,
35560         0x42fc7bbe22c40b8cL,0x5e7f5f5a8722e381L,0xf8f209d932099e41L } },
35561     /* 24 << 126 */
35562     { { 0x867379134a2965f5L,0x34724dcde67b3546L,0x2efe185ee92c712dL,
35563         0x8b908f86c201e327L,0x3ab5528894f6b078L,0xb9b2b784ce0a5bf3L },
35564       { 0x5eab37ac879f6a41L,0x74271f672f2360f3L,0xf3a3edff304f1cf9L,
35565         0x8992ecd8f6fd3e90L,0xff24d7c69f16e5edL,0x0844ab25def9a5c4L } },
35566     /* 25 << 126 */
35567     { { 0x35cbf2191e14f235L,0x9ef33f3c4cdc1b46L,0xfd5cedd0299f7f13L,
35568         0xf57b9bbf99379e17L,0xae25d3e3cd3d59a8L,0x72f9fc84f58cb31eL },
35569       { 0x87950fd84c94b63bL,0x15b52b4f7a4560a8L,0x382d36ec943e44baL,
35570         0x567ce2e9337b0f11L,0x8136e9ce2fa44901L,0x7e43a7289b15eeaeL } },
35571     /* 26 << 126 */
35572     { { 0xd1c8ed8814fb95f4L,0xc302e0aa29602659L,0x67abcce005cd67baL,
35573         0x7a234cc022f8ae25L,0x7074face39f44e4fL,0x84a08afc7a9d3fb2L },
35574       { 0xfd149c88f56c1f32L,0x5b12cc15219e494aL,0x242fc50c9ea3c0e3L,
35575         0x196cdba555b23034L,0xfd8cfa5e87b75206L,0x915e706488d55f47L } },
35576     /* 27 << 126 */
35577     { { 0xb59480ba876145beL,0xd8f8fbbe8e1075ddL,0x0ba10292b5d9baf0L,
35578         0x3a4b7f65e39a8754L,0x1b3a044c0f3c6520L,0x6b8b3397b1dff4f8L },
35579       { 0x40cef2285c182eb3L,0xbef82aec1b1cb92fL,0x5c4d2bfc2a97c5dfL,
35580         0x41d2a046536ad077L,0x94ef34a8c497505dL,0x14e9aef48e0b35ffL } },
35581     /* 28 << 126 */
35582     { { 0x2edaaaaaacaf1f3fL,0x9e3af72c80ebcc10L,0x3542fc42bcb1618fL,
35583         0x6c04ec246709d851L,0x5fe9768ea9af4ce0L,0xe739d50eeb6ebe2eL },
35584       { 0x7b7da4ac876586e0L,0xb0869f1d64f5f956L,0x7f691c51fd563c80L,
35585         0xea990d6926c775e1L,0x2cd96f1321b58889L,0xbc8074720f1aac2cL } },
35586     /* 29 << 126 */
35587     { { 0x8e1fa5f8eb3283cdL,0x0107a3ba20e69342L,0xf99a511cb045b8dfL,
35588         0x172d0c8933b51876L,0xb11efc2b9636d0f9L,0x16b2197c41570483L },
35589       { 0x49df27edacfdfd1aL,0xd9d2cedc366b9b28L,0x0289a75cab028c0fL,
35590         0x522f567a4879464fL,0x3313728225f64030L,0xfa28cb1558d6753fL } },
35591     /* 30 << 126 */
35592     { { 0xe5252210c6cd33f0L,0x6ba7f51f3f085202L,0xd2a87fb38f52e312L,
35593         0xa5e082cff25f35efL,0x786a93c2b9df2f20L,0x68c7e1299a19bf27L },
35594       { 0x13a971ab8d710915L,0x3ca4f8c6939443c6L,0x8554699c70522446L,
35595         0xdf42b7768e14e6bcL,0xc7969fa5f7f3dadeL,0x135b6b77350ded88L } },
35596     /* 31 << 126 */
35597     { { 0x39e54aa472546076L,0xc0003f7f13e312beL,0x71106a4ffea91274L,
35598         0x3868f957819851cfL,0x713b96e75c85bbc6L,0xfda8c2df610403a8L },
35599       { 0x0ea806c3a008cf78L,0x0ef9708353c0d1bdL,0x536950211e592838L,
35600         0xea3773d5e9023982L,0x6eee3c0d4195754cL,0x95df7b568c4bead3L } },
35601     /* 32 << 126 */
35602     { { 0x57edf71edf9a9f18L,0xbf834240627a0b79L,0xb37aba1aa6934160L,
35603         0xd45b3d2c5e639a54L,0x62c6b9ad70bce957L,0x16bc35a75d7e87f3L },
35604       { 0xb021698266b4a982L,0xb56050dd0e51c9bcL,0x15aa692b478e4b91L,
35605         0xdd67cf29be3fe25aL,0xf1ef75b006bdd4a8L,0xf71a285b41df627aL } },
35606     /* 33 << 126 */
35607     { { 0xba6be58993032120L,0xea6dd691db99740eL,0xad8679463154648dL,
35608         0xd1a36f4c28c0668cL,0x09a28c234dd76e88L,0x93fef0c7dc665bb7L },
35609       { 0xa78dfeb4860a0016L,0x06d2f868e21a9e02L,0x333a25a38486ade7L,
35610         0x12aa13130e398a80L,0x04a44a5848d5b3e3L,0xe59293d47a7ec12eL } },
35611     /* 34 << 126 */
35612     { { 0x6cdfb5faea2c1632L,0x6799cfcd7865f931L,0x4e1e5d25bf420a7cL,
35613         0x7d4597db05d22ddaL,0x7548db12fceda1e1L,0xb4523ccdcb473578L },
35614       { 0x3d8dbad0ff889f03L,0xc591bb1118a9a222L,0xfac2b914a2cfcc57L,
35615         0xbb67601abec9d9bfL,0x18dff42ceb55218dL,0xb36ef9ba7d2b6320L } },
35616     /* 35 << 126 */
35617     { { 0x5b007ad1f3edf67dL,0xfaee9cada25fcfafL,0x18fc784a4d62e5c2L,
35618         0x98deda878acb5f8eL,0xe9cfd10a6f888d8fL,0xbb0d729b053db2efL },
35619       { 0x7b09fa4f2aecece4L,0x3f72187cd4c44cc3L,0xf646aba05b8175a5L,
35620         0xf213caeba5686ca7L,0xf5ce777badc5d40dL,0x15ff85d660eb9357L } },
35621     /* 36 << 126 */
35622     { { 0xcdd18aee24e6df19L,0xa08ab968bbb3303eL,0xd5eb039cbab4f1a3L,
35623         0x040d03a8fa7a48d1L,0x767c0ed23d66628bL,0x0c6bd388b1a6809aL },
35624       { 0x793aff3f029eeb91L,0x6db32d13bca798a8L,0x6aef5c1cc3816cf7L,
35625         0xcfb25ea45fd2cd2aL,0x0715a7899f8e3312L,0x4a9ad4782a6b1a6bL } },
35626     /* 37 << 126 */
35627     { { 0xa9f360a5d134c919L,0x10dba223dcfd0715L,0x7444b191dc9b4394L,
35628         0x9a16a971e2f288e0L,0x0d05c511f6a49999L,0xca34eae26b65e956L },
35629       { 0x692febc418a83b76L,0xf3468c7b0b5f3511L,0xd8d3ce48b8e1ed80L,
35630         0xbe8c5c302a6de231L,0x9c0468b74e680d8bL,0x773ebb63f57b88d3L } },
35631     /* 38 << 126 */
35632     { { 0x9c2c33a5b726729dL,0xa86ab4ea5db2af56L,0xe987c5e3b0a36ffeL,
35633         0xa6dba84da5fe8bdaL,0xe1fefa4b8ff617a5L,0x561cdb88a91ad714L },
35634       { 0xeb58f7fce145ddc0L,0x7b0e560a29c5ad50L,0xf8d6626593da0e76L,
35635         0x7769b479db39fb92L,0x9149f1e3a3c49033L,0xb706057f3ac49c35L } },
35636     /* 39 << 126 */
35637     { { 0xa678ba3fa527d157L,0x922aab268856a8b2L,0x936d3e85690b4771L,
35638         0xed78dccee114e472L,0x9694ccb1d315fbc1L,0x8b1cf4482822d968L },
35639       { 0x336e670c4aca5441L,0xece24fb58f0e2824L,0x28d1578d05b758adL,
35640         0x0a1be96a40c3f019L,0xed1586e30b659cd6L,0xdef180009f860dd6L } },
35641     /* 40 << 126 */
35642     { { 0xc2885af90fe0f372L,0x2c756bef5fa6b808L,0x52b7f7b6068926bfL,
35643         0xc9399c1ddb143b68L,0x0e77c689e4c61211L,0x7d01e37f15ad7fa0L },
35644       { 0x712fc61f188b2a01L,0x103685ec55a4100eL,0x721f9c02e5fdce96L,
35645         0x61c8a0c5e784397bL,0x34d478351c686ed2L,0xc697c89cd155bbe9L } },
35646     /* 41 << 126 */
35647     { { 0xc26dbc34f06a2cffL,0x4f10297631a80712L,0x758e33eda7c54effL,
35648         0x44b5e4ff3682d103L,0xef05034722a05e6cL,0x9170365c48ff372fL },
35649       { 0xee49b61d66a15a71L,0xb5fd487995c2045dL,0x5940487160ad67caL,
35650         0xdcd2d5f586388c40L,0x0b41a8e54cbd1f71L,0x8152c17040236ae0L } },
35651     /* 42 << 126 */
35652     { { 0xf05b99d0995e9809L,0x036248a70295fceaL,0x7b70cf8f558e6ec4L,
35653         0xe882639c7c48ce34L,0x4cc86feaf4f47d38L,0x976799cf6d81aef1L },
35654       { 0xdb202bfe8043cb43L,0x4c761cc5cef4f017L,0xe124bbc161f0c89eL,
35655         0x77d1cbf55b5a3d20L,0x26e549fcff346940L,0xc6040a4c2325466bL } },
35656     /* 43 << 126 */
35657     { { 0x1ed4d238e940e32aL,0x29d99c20139efcd6L,0x4cb7ef50c172b412L,
35658         0x8a9c438931957225L,0x5d8872af60be4612L,0x7bffbb1be7e79e0eL },
35659       { 0x75bd89c1fc7d4e66L,0x723f9ae86bcc0379L,0x88f673b599c1b827L,
35660         0x8d45d139ecf5148fL,0xf12e605ff97ad1e0L,0x567dec052f09c370L } },
35661     /* 44 << 126 */
35662     { { 0xfb33b987b0be5055L,0x9864f903bcce94dbL,0x99b8da36aea9d09bL,
35663         0x19e326113b622d3dL,0x6abde501dc38f903L,0xb1fe3f1867cb2161L },
35664       { 0xb053ec831e08cd7cL,0xba503b563298d32fL,0x220e98c8c2a79e86L,
35665         0x66ac99511e1cba68L,0xf9520e1e644ab527L,0x3f222b9b4eb8abf3L } },
35666     /* 45 << 126 */
35667     { { 0xae0cf2ff705cfc45L,0xf9d5dfb65a0449b1L,0xd0300b2cd4697fe0L,
35668         0x4ac80d7e4dc665b0L,0x84fbd38d72c1677cL,0xea8306f08e683a0cL },
35669       { 0xe2381e65a469e337L,0x36b565d0b3ec173fL,0xc67689c700f3007aL,
35670         0x9f0108992abcc81fL,0x867a5f8dbb9bf584L,0xef789cdd5a436b38L } },
35671     /* 46 << 126 */
35672     { { 0xf8cdc9ecee11fa1bL,0xa78c73ed4c90edb9L,0xf6703453bbbddb82L,
35673         0xd268b4e23020e294L,0x214cdd54958eb8cdL,0x2acbd31d4d7214e5L },
35674       { 0xf7c60c89cc733351L,0xb8c5cc642fa201fdL,0xaae1ca7f4c2acb10L,
35675         0xf7e33be56d7f598fL,0x982c012fd920c3c8L,0xaa98a69b86751ef1L } },
35676     /* 47 << 126 */
35677     { { 0xf5f548eb915ed5cdL,0x657ca09ce30f448bL,0x8750c4a44a30850dL,
35678         0x1b329c4108edb075L,0x8c261df8ccbcdaeeL,0xa81720bbedd44638L },
35679       { 0x602fc21f0b91ee05L,0x6241265db7e8bc28L,0x1daefe5b106ac444L,
35680         0x93fe5bd42c9deae2L,0xedc229e17f1ba35cL,0xd99244977e0da1f9L } },
35681     /* 48 << 126 */
35682     { { 0x3176a43ab7a3ce87L,0x9fa09e975f130e73L,0x971cc37b9368e156L,
35683         0x2cabf535b8981792L,0xaec2862e4d0f0bc0L,0xa1a48c183ce8c100L },
35684       { 0x288f4e694af2eae9L,0x778845f21f9339bdL,0x1ef5fdfd17dfaa6aL,
35685         0xc784117e3483a6fcL,0xe8c82f05f3c5c19eL,0xf39b3c1d1da87ab6L } },
35686     /* 49 << 126 */
35687     { { 0xa2539d4cc4ac73e9L,0x0308f91891488ba1L,0xa3e72f4459fae934L,
35688         0xb6bbcc37f8c9c402L,0x345a2debc6edee3eL,0x0352f023b0df87b5L },
35689       { 0x67c9e7b8818c4f8dL,0x3a8714cc70f44977L,0x37b96e1295066bfaL,
35690         0x617d9737c95d7f70L,0x60bb06ef759a360aL,0x97689b3f34f59fe1L } },
35691     /* 50 << 126 */
35692     { { 0x17d0667fb2dd1febL,0xbfb92fe48862b2ccL,0xcfa0c8e9d5438a69L,
35693         0x7bdbd4b1d9cf9ef5L,0x7616acddf373c87eL,0x0603d2b0cf8fd5b6L },
35694       { 0x6a80f25d46e31aacL,0xea8c0ad0fd424755L,0x9e2e5a5b3ffd5a2fL,
35695         0x8882d271f3b143caL,0xe6fc9ad7904e1740L,0x98d1620af428ad20L } },
35696     /* 51 << 126 */
35697     { { 0xc8c991a63292054aL,0xc90b11618ce93455L,0xdfa32238e200d1c6L,
35698         0xa9c578d5303004b3L,0x9dd2c3881609e5f8L,0x068ec35d24b69108L },
35699       { 0x47e8183b2d1a3b7fL,0x6200d70efe3db580L,0x76012f3fafc089b0L,
35700         0xba06dbf4bddea8a2L,0xd83b4af5da01a49bL,0xa3d4334ce16e87e6L } },
35701     /* 52 << 126 */
35702     { { 0xb2fff4035b43e58fL,0xe80bd5740727be41L,0x048a59cbf9b52541L,
35703         0xb79084e7f38d0b47L,0x763b0c95938935d7L,0x7cfc6180336b8735L },
35704       { 0x118d2a6f929b0200L,0x7e5789775a31948cL,0x9085999326009509L,
35705         0x330533a33ad633c6L,0x28bdb910733f4c3eL,0x82c88f148fdca27cL } },
35706     /* 53 << 126 */
35707     { { 0x1c346bb04ef444e7L,0x40a50060e6c22e57L,0x5eb02aa6c7a773b4L,
35708         0xd748a0a0d23b190eL,0xb6ff7f02cfedb7dfL,0x3f8fb35b30f8bb4aL },
35709       { 0x245b1c232dc31174L,0xa1e156579af25f59L,0x1ad1a2315e2393daL,
35710         0x9430ed2dfd7c7073L,0xc4161d4f580fbc0fL,0xa2bebd3fa0f1dadcL } },
35711     /* 54 << 126 */
35712     { { 0xace743b6baff35ebL,0x84ac3ce8ac6f38f8L,0x81d41297106b44f5L,
35713         0x33f6bbbbaed20aa3L,0xae4dd66ceb420ee5L,0x87553aac994f0777L },
35714       { 0x26275ebff1e3647dL,0x3b574c4fd9eeb474L,0x58fe2a16929721c5L,
35715         0x748480df932030d0L,0x3a30032641bb5f68L,0x0797fad92c06d1adL } },
35716     /* 55 << 126 */
35717     { { 0x65356242c7caa811L,0x780fe23f4506bbd7L,0xa741a51042407c02L,
35718         0xb8ccd27f5ef9eac3L,0x137f4a573ecf5766L,0xd495be0d15936fdbL },
35719       { 0x5a419656109c93f3L,0xd2f7b65dcb12affdL,0x2305a070ff830421L,
35720         0x6d00f1e9684d5a6fL,0x3de9d1de91aa391fL,0x0b5148c10acb6de9L } },
35721     /* 56 << 126 */
35722     { { 0x209fa6e68ca7ec95L,0x17808b0c107a1047L,0x99bbeb5edfd270cbL,
35723         0xe3d57c1dc25e2d6eL,0xb90b0c107ba1237aL,0xa7e1b8dc4a0d6856L },
35724       { 0x97d5b46136a9a07eL,0x931251e9125ea29cL,0x4177fd10fc8868a8L,
35725         0x1d3538b7b7cdcdf4L,0x889008c8ed3ff9dfL,0x30573ad2229b9413L } },
35726     /* 57 << 126 */
35727     { { 0x11596662924d413fL,0xe797d0a70e5d7bf1L,0xaa05dcd28452ee62L,
35728         0x6e10e77f5d5ddf1cL,0x46b72cda5fbd184aL,0x3adc1edb5b25c0c6L },
35729       { 0x640de5b05c732e3aL,0xa7d4f0f5c6739747L,0xbc11978d1426527cL,
35730         0x979276eccbee0053L,0xc44347a7304e8811L,0x016c01e11f5ececdL } },
35731     /* 58 << 126 */
35732     { { 0x78b2f1a15ee57666L,0x28060d1576a2c09eL,0xaf0cb38df632a5deL,
35733         0x93ce93eea284cd43L,0xe3670d0af35dc1f5L,0x3b8deea527971072L },
35734       { 0x3b88b1158eea4303L,0x43ff3b22aabde038L,0x8d69e180c813d623L,
35735         0x218f5b853aa7a08eL,0x6ee1544adf74f239L,0x0d7abf20fb8772f7L } },
35736     /* 59 << 126 */
35737     { { 0x1d881d4eb7716840L,0xdf83a03b86bdef07L,0xd534c4e4dc7ee69bL,
35738         0x1169f1cc6e264c79L,0x85c812d1b7690d17L,0xcc3164adec5f2ed1L },
35739       { 0xb91a14180674e87eL,0x5dfaa279969188fbL,0x434acad5e242b969L,
35740         0xa51b5c63751c4e51L,0xaa9089b7874f9aa2L,0x8758f9e51b8397e5L } },
35741     /* 60 << 126 */
35742     { { 0x422ad88e57fd35feL,0xd4564b96b99a11cbL,0x78939992238baebbL,
35743         0xe66ddcaf4b30a709L,0x00873d5f7812ea50L,0x7317f9dc6784aabcL },
35744       { 0xf94afbdbe0608ba4L,0xfff893618896d745L,0xa3348af5cad62808L,
35745         0x13ed4507f349f51bL,0xa73d4bec1186324eL,0xf0b48189a20022d2L } },
35746     /* 61 << 126 */
35747     { { 0x87d117858b8efa4cL,0x724439d6e9c2ee6aL,0x33ab2a03606fa0c8L,
35748         0x6ede5b55f9779d87L,0x858b7dd0759445cdL,0x33683c817a5ef23aL },
35749       { 0x0f093175221c3443L,0xedcf2aaf889195a5L,0x9f189ebc814abec7L,
35750         0x6a64999c40235b9eL,0xf98dc212984438ebL,0x97e2d102ba86e7caL } },
35751     /* 62 << 126 */
35752     { { 0x337b9cbce3db0718L,0x1f2f55833d1796feL,0xa522b76f68c2a69dL,
35753         0x4c1da7cf5375cb22L,0x690a2e7f50bb0d7fL,0xa734d4756689b6eaL },
35754       { 0x918592d5867ca0a3L,0x64d1c147c4d15e28L,0x4d8c3e22656f8219L,
35755         0x5e028bb2170f59c3L,0x41e8b84449875858L,0x1d928cc90c599178L } },
35756     /* 63 << 126 */
35757     { { 0x736dee2cf44db09cL,0xfb5035c07257b4e5L,0x3e3a7bf6bf0b702aL,
35758         0x4910a0165f257c0fL,0xd80b891d98437b4eL,0xf9e55d55076d8587L },
35759       { 0x4e4ed7a79b4fcf4cL,0xaaf417f5581acfe3L,0xb1ae2a7ca3b3f920L,
35760         0xa666bb6263ee4781L,0x2fba297e63684f04L,0xd6e662658d83bd6bL } },
35761     /* 64 << 126 */
35762     { { 0xa58a27c58a541be6L,0xaf66949954fd7683L,0x2431826600079a25L,
35763         0x113f6fcf2606caf5L,0xf6ff2be316cb28c8L,0x8f7fc60e3c17caa6L },
35764       { 0x8ea577e07d35e26cL,0xc3e744c0f0628903L,0x4b28eff4592a57eeL,
35765         0x76e1f87c5e3f67b2L,0x40d7a676fb008902L,0x68a9dc764b6e6b7eL } },
35766     /* 0 << 133 */
35767     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
35768       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
35769     /* 1 << 133 */
35770     { { 0x76e2751a12575913L,0x2c6059914a5f8c4aL,0x58322dfb71fba662L,
35771         0x228aec085e0886afL,0x8d83b6276aee544cL,0x338f5fb6e29f9639L },
35772       { 0x1ba4cfe0bf5e19faL,0x2eea84c5b9e4f8f6L,0x7e0eed58cee95d92L,
35773         0x2d29282abe535540L,0x866638b607a9a1f4L,0x915999776ab8dc82L } },
35774     /* 2 << 133 */
35775     { { 0xa16c79cfaf4d260bL,0xfe853f6cfab3c3c8L,0xb8bd6aa0c2f47e68L,
35776         0x277d590f2c9b4914L,0xb6d1c810097242a8L,0xcf2f3d8e45f75512L },
35777       { 0x2176162b74a20c3bL,0xeee8bcb82b2bcddaL,0xfcf8c0d1a503aee7L,
35778         0x5d1f94a57af4dd78L,0x8f0bc1a62ab43be4L,0xd22dbf16ba9e071bL } },
35779     /* 3 << 133 */
35780     { { 0xbf87f30e3790b47cL,0xd3d3f1e25ab52ae8L,0xd5fd32bd50ec0ba3L,
35781         0x7de8fe0ae60d1e72L,0x52d77fe0e14ff2d3L,0x9b6937db55ca47e4L },
35782       { 0x39e3d19f53e94fa3L,0x8d962a4fbd7827e4L,0x3bd70c7afe92c6cfL,
35783         0xa3fbc06869a82904L,0xe263f00ed96d1d9eL,0xe6c9781f75c0c24bL } },
35784     /* 4 << 133 */
35785     { { 0x705bfe37b4e814b3L,0x22f0de61702013c6L,0x811e77a9bc456797L,
35786         0x4f52c4e617081a2fL,0x87405d819fe1640eL,0x53fa82b7707711d7L },
35787       { 0xdc6fff830ee4aea6L,0x8413e22ffd60373dL,0x0ecb66bea9cf3eadL,
35788         0x7418372e87139b8bL,0x6aaccf295e42b4d7L,0xb6dc592531fc932eL } },
35789     /* 5 << 133 */
35790     { { 0xf1c8d00de460fe00L,0x5692bfee528da7c6L,0x9e4dd700ac8620dfL,
35791         0xcc43e73d9d6fe740L,0xc94060d3e76dcba2L,0xfcdf8ba6d398914fL },
35792       { 0x540942e7502f8587L,0x5def85040de058fbL,0x63e0c7855292b0c8L,
35793         0xe90405282e558983L,0xe25727a16baf4a31L,0xb9bf28f0acf64d7cL } },
35794     /* 6 << 133 */
35795     { { 0xc7c8364f09d26382L,0xe16988737bf32d9fL,0x97bac2feb726391cL,
35796         0x521426364a7c0b57L,0xe3e596482cdec222L,0x4ee7238cf44e0a98L },
35797       { 0xa6d05a21f61cfea8L,0xa1059fb7efe6a26fL,0x482a65b342416fa4L,
35798         0xdc5727e1c71e7a94L,0xe6b0fb6ec4767f1eL,0x3d0d626d6510599eL } },
35799     /* 7 << 133 */
35800     { { 0x59f5df1b2a8f9f78L,0x6bb161d992257e60L,0x2cf060beb7b2eb14L,
35801         0x98e72799aec169b0L,0xdde683927045fdb9L,0xee5e0aaf461b27e8L },
35802       { 0x80250c744c0ee047L,0xdd3881f597f0677bL,0x0ea56921a4459b6cL,
35803         0xf7793cee26df8d7dL,0x33bfa09be42d1913L,0x9f0636f74ccf5139L } },
35804     /* 8 << 133 */
35805     { { 0xfa3b4c8eb88ee8f9L,0x1f288e60b521ab57L,0x06aa39562e8c4d8cL,
35806         0x4981c3e5cf89935bL,0xbdbd0c4745fa071eL,0xa78f831c496073beL },
35807       { 0x09a72986a4e5c001L,0xac527731709cb728L,0x9a64b5b3988f2781L,
35808         0x6ac9440d73b1719dL,0x58ad54c7e3d2e807L,0x1c1574488f06742bL } },
35809     /* 9 << 133 */
35810     { { 0x3220a099a5e437e6L,0x11a1b1734dc5bdaeL,0x1ad9e736b64c9b8bL,
35811         0x82b6a3d4ce40acadL,0x54e1eef8915aaa8aL,0xff19be481f3a1f54L },
35812       { 0xadc4c5250b64a2b6L,0x6637bc8e12caf63dL,0x970d08b01206a661L,
35813         0x97c9b9bde57cf6c2L,0x228ee4712b89b7b7L,0xfeed19ca837cb79fL } },
35814     /* 10 << 133 */
35815     { { 0xcd36c981a816f4d4L,0xc99316c27712a72bL,0xd32cb20339e671aeL,
35816         0x79ff1889f67f6215L,0xf9fe7448cd08e91eL,0xdc9b277776f3e605L },
35817       { 0x8af30c2e7c1609a6L,0xed3224a3e54cdd0bL,0xe73f56ded1dea6acL,
35818         0xb836eb783e37a390L,0x9f0dcdb2c78a0510L,0xc37e67a39e6109f0L } },
35819     /* 11 << 133 */
35820     { { 0xab419eb852e0d552L,0x86c76ef8ae3d06ebL,0x219662b4f7c6342fL,
35821         0x2820299e548f6717L,0xc4d0d47a8a2aeebaL,0x4c98069895536593L },
35822       { 0x3644e55ff42cd505L,0xe109b64ae47e0b0bL,0x91f520a6c89788aeL,
35823         0x35f6dc577699087aL,0x3484f5b6b77deb8dL,0xc22a63a47f3c09e6L } },
35824     /* 12 << 133 */
35825     { { 0x6b5b7b2a75c953b2L,0x927ed77ca7f1cd5bL,0x2e8c53994cba0e5eL,
35826         0x03aeb14a3f4a941bL,0xedbad9a0a1385c8aL,0x925a49c167fd2258L },
35827       { 0xe7e368ee3365ffedL,0xcc4aad2dd106eb87L,0x4ce908daa980b53bL,
35828         0xd3f4954016929ac8L,0x613c804dd5c05c32L,0xa42290ccd7973344L } },
35829     /* 13 << 133 */
35830     { { 0xe7437974c464c24fL,0x70c04156d36bdfecL,0xd94c80fcb2d5d96fL,
35831         0x4a1fcf19d2cfea9cL,0x443478592f6df796L,0x0c908d0159743bd2L },
35832       { 0x78949087d165a62bL,0x6c3f9021632f4e1cL,0x3917b925a94bb004L,
35833         0xe153ef092b3f87e3L,0x6aee1027ea706338L,0x953ab2959733bd02L } },
35834     /* 14 << 133 */
35835     { { 0xad49cad49855d008L,0x23442cf94b273d85L,0x3a3c8752e3dd8f65L,
35836         0x0ca5d24bedf84ed0L,0x3d0580938b4f8f96L,0x1cea59acf9b9ae03L },
35837       { 0xf17cbbe23a06567eL,0x49cf5294f090338fL,0xcf8cbe0da93562c1L,
35838         0x66683f21b986b71cL,0x3c96750cc87c9e10L,0x38e62db63dcf2f32L } },
35839     /* 15 << 133 */
35840     { { 0x807a519047f99946L,0x49e03dcf01615a37L,0xe813287c99590bf6L,
35841         0xc9caf30ddb62835cL,0x0733c49d4df78781L,0x4fde30fd4815d3adL },
35842       { 0x2809b853f9a2610dL,0xf2b139b9dc050142L,0x52a40a413c23a4edL,
35843         0x9333086b0a104df2L,0x04a90c11e2a65950L,0x4c6a15c4dc24341aL } },
35844     /* 16 << 133 */
35845     { { 0x33952177a98cf218L,0x841d9e1f579ee53aL,0x1084d61e0a285bd5L,
35846         0x3935a84e71171b1cL,0x8ac2433cf29b29f9L,0x5dd868b56dd1e9bdL },
35847       { 0x88da04788d102390L,0x1140735a657400d1L,0xa792a25f9d5b19e1L,
35848         0x9ee015cb6a27fa79L,0xea3bf8b57ba16a8eL,0xc5f0cc26c15fde67L } },
35849     /* 17 << 133 */
35850     { { 0x033708d2e02e9feaL,0x2b588d1e222f437dL,0x998442d6c6b47013L,
35851         0x4033d62fb8ac1fc6L,0x9b8fd348877c726cL,0x1a2125fa5bea5a49L },
35852       { 0x04a2c1d680b8afd9L,0x3d52c9d2a40195c1L,0x56b204e6655c0b30L,
35853         0x55ee14ef520b3464L,0x23fc52e6b5bdd96bL,0x445cfd7a56f4b269L } },
35854     /* 18 << 133 */
35855     { { 0xc8985c2c5fee6426L,0x8be749496bb7bb8dL,0x12967576659363b4L,
35856         0xd1b6ded9b969b221L,0x586f28929819fc04L,0xec6b03e5addd6307L },
35857       { 0x3f0e96cad4da6627L,0xc866c95c14860d00L,0xb038867c9725f9a8L,
35858         0x60cd3afa1caf2547L,0x6f2cc04411dddfafL,0x49551f249d0af0faL } },
35859     /* 19 << 133 */
35860     { { 0x04a68337177e2e7cL,0xe20b21c0adb79464L,0x9b30d3437e42ae4dL,
35861         0xac7a01d7f86c5767L,0x3ea34e385381db5cL,0x3005a0c39235f5bcL },
35862       { 0x853eb43167b4a5c5L,0x92f26a35584e4b8aL,0xa3d25e5879bb470fL,
35863         0x7963d90a5eacbb13L,0x08ca7969212e3aefL,0xb5ec6582df92bfffL } },
35864     /* 20 << 133 */
35865     { { 0x2e152d95ee2c3290L,0x8437df2e4a9ceda4L,0x4151754e3c7ebfd1L,
35866         0x556c59a888f80aeaL,0x8d099c5d8de44dbcL,0x9ecce7fc77abeeccL },
35867       { 0x5e0a0f383aa311cfL,0x99ff1eecb8f2bff5L,0x5ae0b483b5dcf488L,
35868         0x11212c4591483a02L,0x99fe0738312134a1L,0x3b855db0a72745efL } },
35869     /* 21 << 133 */
35870     { { 0xb70bf73230261470L,0x8c9b7c4bc74a180fL,0x4c648aef88a9d9acL,
35871         0x3d9f7540a10f98bfL,0x8ec2a3a3120d55f5L,0x1707c1b0baa5a600L },
35872       { 0xacba8da9103f2f0bL,0x96926dc0c7194236L,0x00358df7584499dcL,
35873         0x74c27d0e538c0a15L,0xc675d079de960a77L,0x575b042e89f41f6bL } },
35874     /* 22 << 133 */
35875     { { 0xd17d99529703d919L,0xb25ecc411477faebL,0xa5c66a58a9aea2fcL,
35876         0x83754d683accb00cL,0x6a9ae76a25901044L,0xe437981b2565e035L },
35877       { 0x441ec0d96f45fa01L,0x35e40d126a697636L,0xba2fbab59bb3c2fcL,
35878         0xc038be03e94b245fL,0x366b4bcc0c1672eeL,0xa14a2c10f1ce6d55L } },
35879     /* 23 << 133 */
35880     { { 0xef32d94febe1dfe2L,0xdbf53d4271494ea6L,0x72dc5fad24cf0c2dL,
35881         0xa9247adc66dbc21bL,0xe31ff66ab130da59L,0x8cb97c09e86ab63aL },
35882       { 0x204020e2f59ebb80L,0x56f6d8b7cfd0f965L,0x7522a692b1518dadL,
35883         0x8e7c999f5f231e2eL,0x2eff5904b4406177L,0x8440cee87bfe2363L } },
35884     /* 24 << 133 */
35885     { { 0x37f50e43892c8eecL,0xf06a2f047d85a7e2L,0x3916af85e1d11150L,
35886         0xf56e852f6785ae1cL,0xbf8c72adae6ada8cL,0x1fcd53e3e13285b2L },
35887       { 0x5327920cbd56d348L,0x82a394fb445658a8L,0xa71328573caf3792L,
35888         0xb15ab34b550ffe1cL,0x818980666a5d4e4fL,0x0bda153b2f854f9dL } },
35889     /* 25 << 133 */
35890     { { 0xf664f44407aa3d00L,0xcf8901664704e2d6L,0x1802f662f8c2fc8dL,
35891         0xd52496b8a47f0da6L,0x37f71d8c75001c8eL,0x7ad8e8c29cad3ba7L },
35892       { 0x666afc25825515f7L,0x3a871c76a729e498L,0x5dc21f1108479e3eL,
35893         0x78ff145966c4331eL,0x8d01e2352dd3deb2L,0xc68445e9dbc91fc3L } },
35894     /* 26 << 133 */
35895     { { 0x8f2d9aae98ea13f6L,0x3e75ba40ab97bfb0L,0x14dd24e635e1fe35L,
35896         0x14abb0735f88d9b9L,0x74b2c6a801d4fcd6L,0x4905dfe7744a09bbL },
35897       { 0x349348c077cd538aL,0xdec247f5f7b6d035L,0x737e248dc455d417L,
35898         0x608a5529b6fe5d92L,0xce0ba0bccd7dca64L,0x022bcb18c21175c6L } },
35899     /* 27 << 133 */
35900     { { 0x79fe5372881b120aL,0x4878428aae98aeeaL,0x5c6a7f7d09511acbL,
35901         0xb7be08de3b046481L,0xfb91990b8b35f13bL,0xab734f604ebdd374L },
35902       { 0x3d4955f1197690e1L,0xfc82767c7b376dc4L,0x7cf3db85b8c659c7L,
35903         0x4cfb6f4b03202723L,0x8b79311746141d27L,0x94c6ee67867292c4L } },
35904     /* 28 << 133 */
35905     { { 0x77a31009722730feL,0x93707ac4d5cdd297L,0xa290be39d3811e8cL,
35906         0x831a9b9592a5cdb7L,0xc74cda84e7342270L,0x964661903f48affcL },
35907       { 0xb0496cca5520b0f0L,0xc8742cd9bae930ffL,0x3a30737aeaea703aL,
35908         0x0a8e6fb7fb758854L,0x9ab9523e6796f4d1L,0x36e6c05dfdf7140fL } },
35909     /* 29 << 133 */
35910     { { 0x4c8ec1a3ccedff1fL,0x8fc58987ca74bd5fL,0x70a6b71cf768abcdL,
35911         0xb9971cf5ed60a02dL,0xbb2aedc8af2f9a41L,0x4ebf90c76032c98aL },
35912       { 0x8e69b4c4d3752262L,0x350f201474ba8e8aL,0x7a164f6724d0052dL,
35913         0x5aeb80db61d7eee0L,0x626a6c9da63583bdL,0x6246637fc3f2196dL } },
35914     /* 30 << 133 */
35915     { { 0x2077dfa1817d444bL,0xdda9c7fcdf855b15L,0x577603be04b31d38L,
35916         0xc6beacae7a140cabL,0x8cd9dc019ecbed91L,0x6ea8591295ae114eL },
35917       { 0x6fb29a33fd47f1b5L,0x6203bca6223cb96aL,0x2459d85a7c1a3580L,
35918         0xbab5922d6410a3c0L,0x543be274cc7750f8L,0x1a653e1c42baea3aL } },
35919     /* 31 << 133 */
35920     { { 0x616abd271dbeeea7L,0x0684c14fe2189d8aL,0x0d2bf3687354d862L,
35921         0x8b0cfc06a8bdcb0bL,0x187147b49661e548L,0x07509bc358edde6dL },
35922       { 0x7b2a33bca78c2782L,0x5f41b8379ec5fa24L,0xa6df5de574539201L,
35923         0x3510f650093f8f7eL,0xe4d1c06ed14aaa71L,0x4d1b1ca2b0470581L } },
35924     /* 32 << 133 */
35925     { { 0x3b62315064ef6a95L,0x97645381aaa5b792L,0x4bc2c31c56471100L,
35926         0x4a0e73bb1bae8d2aL,0xbfc0770a8df1f76aL,0x5089916fa7bb16caL },
35927       { 0x2afe5b1cf31fe82eL,0x0b06831df0119977L,0x97caa333a1af2a82L,
35928         0x93cb92c5dafed6cdL,0x09553e7e92c3b2e3L,0x3d9c4b7d61af2956L } },
35929     /* 33 << 133 */
35930     { { 0xe56c89b06910185fL,0x1cd06d19ac47667cL,0xb35e6ae5fe41a4ffL,
35931         0xdc2fbaf959e8be08L,0xa9e6df08f8cec40bL,0xcab91f8ffe63ad2cL },
35932       { 0x1e3bd193ca2cc678L,0xe1830cae06bb40f2L,0x3b8b33d6d69985abL,
35933         0xb6b7e8433895d8a8L,0xec3882909fbf6b31L,0x012bec2ac37d64cfL } },
35934     /* 34 << 133 */
35935     { { 0xff2e88fd33941b4bL,0xa2d9730a8d85cccaL,0xa23f8cfa16f7d7a1L,
35936         0x82013193d39a250eL,0x3b119882ca0fd8a8L,0xcff642ac1a438706L },
35937       { 0xe4a3a95f65e5688cL,0xb2a6c836c31243d2L,0x1b7ec5d2194d1f42L,
35938         0x51ab34f814e4f7a2L,0xa3e3f135d3583ca0L,0xbca6ecbade9b91f2L } },
35939     /* 35 << 133 */
35940     { { 0xc85820c3002f07caL,0x090365320e00dca7L,0x0f3b3166f4e4d8c2L,
35941         0xe694eb4479460f00L,0x50d0ed14c15e04ecL,0x8c9998abcc86e3bcL },
35942       { 0xb82581624aefa561L,0x6351aca610050c0eL,0x4e60399acc8d2342L,
35943         0x96da3af7f633dc88L,0x1af763ec09202348L,0x76b0e49d3f0d5f76L } },
35944     /* 36 << 133 */
35945     { { 0xd83f574a08f84746L,0x48fc9715ca07f5f8L,0xb3d5d0d2dcc51638L,
35946         0xc2a5e3356153bdcdL,0x8242cd9a8aa4ef74L,0xe71ba25b0bdaa0d0L },
35947       { 0x4342d4bba4ff172dL,0x81db10dffc1341a2L,0xdd93dd877dacb140L,
35948         0x6f8a4e81d12d347fL,0x0d4e7e461bc369beL,0x3ce10a771fafd0c5L } },
35949     /* 37 << 133 */
35950     { { 0x2fdaa3bb8cb896a3L,0x2fb82dfd913bb303L,0x5d814a50ba9ca09aL,
35951         0xc3de6aa426112215L,0xd0d5c98b25a0c9fdL,0x54004b3e0eaae4a8L },
35952       { 0x410e2cc209358663L,0xf7e3d08a501c4ef5L,0x3d86434dd334aa19L,
35953         0xf70ea577772fc0cdL,0xa0eded5aa607c4f2L,0xba0bf1bc36222b2dL } },
35954     /* 38 << 133 */
35955     { { 0x8d901e759632c4d6L,0x0ed9a7ebbbd94698L,0xfd2169dbbf7bcbc1L,
35956         0x2b4d168d5b302c66L,0xd42f9dd73e65f24dL,0x73e0c22c0eed0022L },
35957       { 0xf9091588f5d2dcfbL,0x81c7c01eb8715b78L,0x2be06165dde6a9d6L,
35958         0x64b5902dcacd6ca2L,0xdcd510d70159d3bcL,0x5b71995b42b5e30aL } },
35959     /* 39 << 133 */
35960     { { 0xa9c474eae7a211edL,0xc7bcdd20d8170f76L,0xd9aa8d9734a15487L,
35961         0x26235292933c16b6L,0x289d47d5d8238fc0L,0x39f10fb3ae27ca16L },
35962       { 0x822e187f1c016ae1L,0x8e93b15f2be46859L,0xe2ba61a60b0a055bL,
35963         0xd8f33ddecb8de893L,0x016652d6379657efL,0xf4eb08f9e7d9eab8L } },
35964     /* 40 << 133 */
35965     { { 0x5559dd31e67145b6L,0xf2d905b45b2427e7L,0x0d840fabcaf57d0cL,
35966         0x9625866578742ab6L,0xc85482ad409c1c8eL,0xdca2a058adaa6167L },
35967       { 0xec26ad9a0c8885fdL,0x1b93b8a22a600cb2L,0x340aa7fc2539986bL,
35968         0xd7674876a23dee41L,0xa948a9292e1a9837L,0x9ae67d2a71438da9L } },
35969     /* 41 << 133 */
35970     { { 0xe753114a8d6a98f5L,0xb2d7d1e1f6ad93e4L,0xfbcfe0cf1935714dL,
35971         0x9dc2d293e859e729L,0x674c170889a703f2L,0x87744b0252063099L },
35972       { 0xa1721de04b25966bL,0x059292573a285fcaL,0x5b02ca39e8ce75e0L,
35973         0xbfdf0fb939e57da4L,0x554378cd6388a964L,0xc53fc5c8f853d7faL } },
35974     /* 42 << 133 */
35975     { { 0xcd3b60e352f51554L,0x6292fafab44ad7eeL,0x670561c79513741fL,
35976         0x95defdf3b9ba16a7L,0x6c0beac1adae36cdL,0xef05c24a3e8aabd6L },
35977       { 0x74208a02b23efc25L,0x71930e02c22172d1L,0xbdb1f1c6f5ccbffbL,
35978         0x358b483c504d9cb3L,0x48b5887a9a48a4baL,0x289256b4e48f09e7L } },
35979     /* 43 << 133 */
35980     { { 0x671bf1eebc2f256aL,0x530faa653984ca7eL,0x0a6d18955c05da6eL,
35981         0x219de918118fe96cL,0x289b9645bb7eded4L,0xe905c4729588f006L },
35982       { 0x56d0cd9ac9d61133L,0x8879550079a4f743L,0xd05e910199c2aff3L,
35983         0x7e91f7c985e52c8bL,0x7fd02f83b5c5d473L,0x4b43b6453c59330aL } },
35984     /* 44 << 133 */
35985     { { 0xeac6f447d56bdf1fL,0xb22e8425c2b502ffL,0xe1cc9d3dfca5a501L,
35986         0x8192bc29b64baf39L,0xeb2c901a52ce849eL,0x7f5f38b11dd506f1L },
35987       { 0xfb3684b10f0a1d68L,0x16c4aacde9240ff8L,0xffa682435a4d8995L,
35988         0x27264ab554e4c95dL,0x9aa40cdc4f34ffaaL,0xcb8a30a35fd818eeL } },
35989     /* 45 << 133 */
35990     { { 0x912f0a7dfa88792fL,0x2ad9249f5090716eL,0x4b828a6fb96e6e31L,
35991         0xe805f0588d7f2095L,0x72e95cb956e00978L,0xc95354667651815fL },
35992       { 0xc877181a08df5b53L,0xae055dd8779c3302L,0x3f9e6dd90b4e68d2L,
35993         0xdeb15f1308fbb2f8L,0x5f129c1cc5802a96L,0x7482e4af3cc51022L } },
35994     /* 46 << 133 */
35995     { { 0x98904777ab695f56L,0x6dc472c18989e518L,0x6749d25c82031d40L,
35996         0x5c465922c36202f1L,0xb3b5b9aff31fe542L,0x855263bdf98bc09dL },
35997       { 0x40ee01747eb4789fL,0xd64ae0d4de4e92bcL,0xbaea76a38995e69fL,
35998         0x3f22b2e3d972751eL,0x5a197daa2461f1b4L,0xbd15682a5097b93eL } },
35999     /* 47 << 133 */
36000     { { 0x7f251143534f8547L,0x213baf14222a161aL,0xae993737ad1e6005L,
36001         0xdc70867ff8b1cc7eL,0x41e880f3bb22e11bL,0xe36f54cbd2d6bc45L },
36002       { 0xa42e819d4d65ae97L,0xdc57be4de8592604L,0x8a89777fabe73b50L,
36003         0x435fedec72e26f5bL,0xe8d3cd8251ec79f0L,0x9574d6ea67f407b0L } },
36004     /* 48 << 133 */
36005     { { 0x39038863f7f35053L,0x421a17f3328787d2L,0x38aa682ef3d8310fL,
36006         0xb52d41e8f4123153L,0x4fbef3dd7026310bL,0x0c6bd7adf6ff5692L },
36007       { 0x3831c6b2a9be5d0cL,0xb5c9ae85e8d328b8L,0x76d26abc6516bba4L,
36008         0xc237f9a5446d35a8L,0xb2b16c0ff012a8d0L,0xddf2b7fe0ee0315bL } },
36009     /* 49 << 133 */
36010     { { 0xf401366a7dd4243fL,0x7db92881f434ba76L,0x5b5bacd737ffc502L,
36011         0xa53fe0e802cb994eL,0xf6db539ffb00cb96L,0x0bb288b379878966L },
36012       { 0x275c108c0c3d4b7fL,0xe57222d267236ba2L,0xc754d31890683aa1L,
36013         0x883a41ef2345460fL,0x8e6b7ce8b572fd14L,0x7649c29237d21925L } },
36014     /* 50 << 133 */
36015     { { 0x46302515c4af281fL,0xe2a9633c3513ea87L,0x1175276fb3e96864L,
36016         0xda377e32f4ed1228L,0xacf223a1fa6be904L,0xf442c41abc01057bL },
36017       { 0x83d766c38a69db33L,0x933dd0974cef397cL,0x094b21b575fe43cdL,
36018         0xf16ee57ab3141dd5L,0x4a8d0d6cb981d196L,0x6bd246c3730075deL } },
36019     /* 51 << 133 */
36020     { { 0xd9ae9faa91eab3f7L,0x8520bebba2bcdfc1L,0xc681d5a0ee94353aL,
36021         0x980871dd316ee7acL,0x7d70b82bcb401c4eL,0x150706c1bc6885efL },
36022       { 0x11709bbed3d8663aL,0xad69df943ace1806L,0xf889daef1a36f12cL,
36023         0x6ba376b2560bb749L,0x5342cd7a0d95f8b9L,0x5d14201273b4554aL } },
36024     /* 52 << 133 */
36025     { { 0xbb85b640056ad6c2L,0x7c51ef96ac074372L,0x1c7ce31cf10b43fcL,
36026         0x08e4101b26f4d3a4L,0xd18511c43968459fL,0x00e20c3fd6d07839L },
36027       { 0xd5bcd598e4fcdc11L,0x99e9a4d0c877f6a2L,0x9c5dd9d0bd491646L,
36028         0x83918f609bfd7a1aL,0x4bc130cd7e2b95a3L,0x668825fbfbc31c83L } },
36029     /* 53 << 133 */
36030     { { 0x7e8947bd5568b75cL,0x43419ecbdab8f822L,0xeb52a83a7b8fa996L,
36031         0xbc674ff32d1a32c6L,0xdc086f84ce405eeaL,0xebe3e087f8918ddfL },
36032       { 0x476099ecdb152bc4L,0x0cb491c52d3718c3L,0xa7c49cd69da8517fL,
36033         0xc736fcf51ab8fbadL,0xa00b403ba24fe115L,0x01f6e5bfd976f549L } },
36034     /* 54 << 133 */
36035     { { 0xef8e12edf15ad86eL,0x216be9828c20441dL,0x10ccd4f85c45e821L,
36036         0x8a12f6037c9745e9L,0x56212b09da6f1b2fL,0x5a81d69338115f05L },
36037       { 0x5aead3330a4405a8L,0x7024a76c03221eddL,0x9c101d0250e6a610L,
36038         0x6bcb22ffc1b6d54aL,0xf96cef62cf787e89L,0x9c9bde7b79341d83L } },
36039     /* 55 << 133 */
36040     { { 0xe9c61fa744058dc9L,0x59efcc8f1581d690L,0x1ea73467513aba4bL,
36041         0xf0fda8a69d03d72aL,0xcc1f3f22c6f30a01L,0xb632daa3ddf8dea8L },
36042       { 0x58563188fe8e2f89L,0xf053b9f67b45cf5eL,0x1ab51b07f9bda4b1L,
36043         0x37850e9789dc0050L,0x1bf5e41e8f6a1daaL,0x4abb4f82d94c0fd8L } },
36044     /* 56 << 133 */
36045     { { 0x817d77b106a9ad54L,0x3a999d7d89a25ecaL,0xd3ac4107da68b768L,
36046         0x6904bcddbebc4c4dL,0xb0d2103ca53d39e9L,0xdba86bd230a5e950L },
36047       { 0xb09256804f52208eL,0x37c3156a28495b2cL,0x2389ab34c15855aeL,
36048         0xc14dfd963017194fL,0x420e07191146b838L,0x1a9f909b8fb4b6fcL } },
36049     /* 57 << 133 */
36050     { { 0x73af3d1fa24985f4L,0x4fa27db444a1f9a8L,0x6deb02455cfbfa45L,
36051         0x4803e0342813c996L,0x24715fe80e4116ddL,0xa2e8258d38d8e902L },
36052       { 0x3321e112dd7d8ebfL,0xab8d5b2b272ee6a4L,0x2994fac34eb10fd9L,
36053         0xe007d0a4a9c611ccL,0x29db5aa974d194e3L,0x9e76e3ddcf7409b9L } },
36054     /* 58 << 133 */
36055     { { 0xf12a3eeab577f6b9L,0xe666e002b6db2206L,0x95aa0d03375229b4L,
36056         0xebd05140ef0772beL,0x9d5b5e9e48580b17L,0x960906b3a77ceceeL },
36057       { 0xca869663e50422f8L,0x150e844199d481b2L,0xadd97d7c3418b00dL,
36058         0x9908a23e68244f02L,0x5357ea61d3eac131L,0x0af5423d9778902dL } },
36059     /* 59 << 133 */
36060     { { 0x11aa3582d8e62251L,0x108ec170aa1560a5L,0x8423663e2b5b6ea9L,
36061         0x3f4ad292d8718329L,0xf8e3e7bd04f8daadL,0xed310c3a11b81211L },
36062       { 0x718db302edac9282L,0x7866f1c1e434544bL,0x1052133c568b195aL,
36063         0x8ca61965c0e37cbbL,0xdd28fbd32cfac1c2L,0xf4062b33dce29660L } },
36064     /* 60 << 133 */
36065     { { 0x2926ef17dd63404dL,0x0e89c4d41399cc68L,0x6507fedef7ec20b8L,
36066         0x1ac084ff88c751d6L,0x31bc08bedefe29e6L,0xd42199714f0692c5L },
36067       { 0x4d6ee74236069bc0L,0x3868ef6aff80f3d7L,0x6df02d7c5a9c6f4bL,
36068         0x2c3096bb101abf69L,0x0c2b01ec8eaacaebL,0x65914c20eb2e687aL } },
36069     /* 61 << 133 */
36070     { { 0x78d5ab7b34a8173eL,0xa34b72ac9230c3b2L,0x379453e13538b39dL,
36071         0x1764c4420f3789b0L,0x5b4bbe77a3f2ba4eL,0x3bd35b796f86338dL },
36072       { 0xf2fcdf04f02fa7e3L,0x6b4522f420d23feaL,0x966fb8fa01be16a5L,
36073         0xf2a56e96e0d705feL,0x494aa4553872e429L,0x68432d9181921587L } },
36074     /* 62 << 133 */
36075     { { 0x0ae47d1e3dba277aL,0x54607ac99832d90cL,0xd4cec32eecbcdeacL,
36076         0xe54b3033b9ccdfa9L,0x5b3a8a56fb920449L,0x831ec8f955eefd3aL },
36077       { 0x59ba32a3a02dca96L,0xb421e4b01decf837L,0x52e70a88a88636d2L,
36078         0x3b75ed073086667eL,0x7a4a46b3b877cd6bL,0x3825c80b59c99207L } },
36079     /* 63 << 133 */
36080     { { 0x3bc3f0e069bdc53fL,0x7e0bd730d9d7def4L,0x71a577e6844ede6bL,
36081         0x06d47f4981705712L,0x83bdb1a6ef108ea6L,0x853a3ce0c8a8ff41L },
36082       { 0xa6f114b8f408ec44L,0xe0ce4267e2d72d33L,0x405f6ddda2a0b613L,
36083         0x22ce3daa8d253ad3L,0x2fd738094aa1de25L,0x28a2001b27363597L } },
36084     /* 64 << 133 */
36085     { { 0x13722ab079ed523aL,0x33b29bec249d5624L,0xd3d0f467f76fdaf7L,
36086         0x7ce072f912ddfd9aL,0xce918a5747bdefd3L,0x14d38ab4750e5315L },
36087       { 0x08bbb20e3346f647L,0x428b917f05b26894L,0xc8fb5c21ca865ba6L,
36088         0xee6e41e02e6e8e6fL,0xd00ae6214c608b60L,0x659756396ff685cdL } },
36089     /* 0 << 140 */
36090     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
36091       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
36092     /* 1 << 140 */
36093     { { 0xbbccce39a368eff6L,0xd8caabdf8ceb5c43L,0x9eae35a5d2252fdaL,
36094         0xa8f4f20954e7dd49L,0xa56d72a6295100fdL,0x20fc1fe856767727L },
36095       { 0xbf60b2480bbaa5abL,0xa4f3ce5a313911f2L,0xc2a67ad4b93dab9cL,
36096         0x18cd0ed022d71f39L,0x04380c425f304db2L,0x26420cbb6729c821L } },
36097     /* 2 << 140 */
36098     { { 0xca07923c0eb008c8L,0xab79402d9985912eL,0x41e379e83cb02510L,
36099         0xfabac005beb383efL,0x24d12d9a1076dd0dL,0x95afd46fb208f127L },
36100       { 0x9cc38a60b1031e46L,0x93e21e977009f6bcL,0x6f6360d98ac219efL,
36101         0x1edaab3faf284c80L,0x9c3b5281019e366aL,0x6475c579bc9e9726L } },
36102     /* 3 << 140 */
36103     { { 0x26bd07d6bdfbcae8L,0x10b5173fdf01a80aL,0xd831c5466798b96cL,
36104         0x1d6b41081d3f3859L,0x501d38ec991b9ec7L,0x26319283d78431a9L },
36105       { 0x8b85baf7118b343cL,0x4696cddd58def7d0L,0xefc7c1107acdcf58L,
36106         0xd9af415c848d5842L,0x6b5a06bc0ac7fdacL,0x7d623e0da344319bL } },
36107     /* 4 << 140 */
36108     { { 0x8410d8298d85a25aL,0x48ee01354af81a14L,0xae460d0d18c25348L,
36109         0x5d0279a07eb035a3L,0x87e7c1289a114414L,0x17c08a8ec0744f79L },
36110       { 0xb7b2b4f1025cdbe3L,0x9a74f15d82d1af60L,0x124a7395b51ee685L,
36111         0xf2937c4bf6122422L,0xb4ec133207f1a7ffL,0xad801112f886032eL } },
36112     /* 5 << 140 */
36113     { { 0x4c0d78060c9d3547L,0x993f048dcf2aed47L,0x5217c453e4b57e22L,
36114         0xb4669e35f4172b28L,0x509a3cd049f999f8L,0xd19f863287c69d41L },
36115       { 0xe14d01e84c8fded0L,0x342880fdeafd9e1cL,0x0e17bff270dc2bf0L,
36116         0x46560b7bc0186400L,0xe28c7b9c49a4dd34L,0x182119160f325d06L } },
36117     /* 6 << 140 */
36118     { { 0xdd4eb3d07bb5346eL,0x9a46ad01382e7db7L,0x1200285ddc1973c7L,
36119         0xfd342beaa0046b98L,0xd19173491219a7fcL,0x5383d319b7caffe5L },
36120       { 0xea5a0c4e2e0fa118L,0x1cc2de3ca5457b28L,0x5b2a16dc6046eeeaL,
36121         0x1755e1fecc8e64b1L,0x51e4946e9e7faddaL,0xf805422ffcbf4ec2L } },
36122     /* 7 << 140 */
36123     { { 0x46d70888d7e02e18L,0x7c806954d9f11fd9L,0xe4948fca4fbea271L,
36124         0x7d6c7765bd80a9dfL,0x1b470ea6f3871c71L,0xd62de2448330a570L },
36125       { 0xdaecddc1c659c3a7L,0x8621e513077f7afcL,0x56c7cd84caeeef13L,
36126         0xc60c910fc685a356L,0xe68bc5c59dd93ddcL,0xd904e89ffeb64895L } },
36127     /* 8 << 140 */
36128     { { 0xf877e8c6bd08ffafL,0x24718fefaf23012fL,0x19ff269f2b004cfeL,
36129         0x8adc5d7795450f8bL,0x688ce8bce2a7d458L,0x74d7445b97bd7fdcL },
36130       { 0x1b9f4ad641e6abadL,0x6652ed05f00e4bf5L,0xabee1f7e71d83d86L,
36131         0xe693c76d25ffc219L,0x1c9a84afc873f553L,0x84d2718766d77a55L } },
36132     /* 9 << 140 */
36133     { { 0x75d874fb8ba7917aL,0x18fa7f53fd043bd4L,0x212a0ad71fc3979eL,
36134         0x5703a7d95d6eac0eL,0x222f7188017dead5L,0x1ec687b70f6c1817L },
36135       { 0x23412fc3238bacb6L,0xb85d70e954ced154L,0xd4e06722bda674d0L,
36136         0x3ea5f17836f5a0c2L,0x7e7d79cff5c6d2caL,0x1fff94643dbb3c73L } },
36137     /* 10 << 140 */
36138     { { 0xe566dc057e5f7121L,0xccac74e22ed07bc3L,0xaabfdfcdc70401b4L,
36139         0xac9fc4496254e0dbL,0x358d885f11c7de05L,0xb8e6a4a9d60772b4L },
36140       { 0x884272a5cfe917ceL,0xdfbe98689a3d347aL,0x06b90848c9d1baccL,
36141         0xc4ccedb6db8c6288L,0x892878b979e5683eL,0x1b521829243273e3L } },
36142     /* 11 << 140 */
36143     { { 0x916e19d0f163e4a8L,0x1e6740e71489df17L,0x1eaf9723339f3a47L,
36144         0x22f0ed1a124b8dadL,0x39c9166c49c3dd04L,0x628e7fd4ce1e9accL },
36145       { 0x124ddf2740031676L,0x002569391eddb9beL,0xd39e25e7d360b0daL,
36146         0x6e3015a84aa6c4c9L,0xc6a2f643623eda09L,0xbeff2d1250aa99fbL } },
36147     /* 12 << 140 */
36148     { { 0x099369c4bf0c6fbeL,0x976f78b2fe7d5727L,0x32feb503d18267a9L,
36149         0x162c41501a7dd0feL,0x3141e37726b8e969L,0x50497a643b53a94aL },
36150       { 0x96159f41607b4cfcL,0x1999b7042f111babL,0x3254987c760f2eaeL,
36151         0x5308075b841014faL,0xc634127e4e7adad8L,0x32a70a6059ffbfe6L } },
36152     /* 13 << 140 */
36153     { { 0x1feef7ce93ee8089L,0xc6b180bc252dd7bdL,0xa16fb20b1788f051L,
36154         0xd86fd392e046ed39L,0xda0a36119378ce1dL,0x121ef3e7a5f7a61dL },
36155       { 0x94d2206192d13caeL,0x5076046a77c72e08L,0xf18bc2337d2308b9L,
36156         0x004db3c517f977b1L,0xd05ae3990471c11dL,0x86a2a55785cd1726L } },
36157     /* 14 << 140 */
36158     { { 0x7279c369a1f857e6L,0x029d30ef27fb373aL,0xe82cbc806827358bL,
36159         0x2bfe09aaa18f57abL,0x63bf3145e5503492L,0x7ea15beafb28ee43L },
36160       { 0x8e6d428f5eec91b8L,0x215e03e9611b1799L,0xb995737161d476deL,
36161         0x2320c764e76726a5L,0xc5de88178e5e26f5L,0x24aae0699161e0b7L } },
36162     /* 15 << 140 */
36163     { { 0xb8d9b28672107804L,0xb5a7c4133303b79bL,0x927eef785fa37dedL,
36164         0xa1c5cf1ead67dabaL,0xaa5e3fb27360e7c7L,0x8354e61a0a0c0993L },
36165       { 0x2ec73af97f5458ccL,0xde4cb48848474325L,0x2dd134c77209bc69L,
36166         0xb70c5567451a2abeL,0x2cd1b2008e293018L,0x15f8da7ad33c0d72L } },
36167     /* 16 << 140 */
36168     { { 0x5584cbb3893b9a2dL,0x820c660b00850c5dL,0x4126d8267df2d43dL,
36169         0xdd5bbbf00109e801L,0x85b92ee338172f1cL,0x609d4f93f31430d9L },
36170       { 0x1e059a07eadaf9d6L,0x70e6536c0f125fb0L,0xd6220751560f20e7L,
36171         0xa59489ae7aaf3a9aL,0x7b70e2f664bae14eL,0x0dd0370176d08249L } },
36172     /* 17 << 140 */
36173     { { 0x5dc386d0a8790657L,0xa4fdf676bc4d88bbL,0x1b21f38f48bc6c49L,
36174         0xcdcc7faa543a7003L,0xea97e7aa8c9cf72cL,0xa6b883f450d938a8L },
36175       { 0x51936f3aa3a10f27L,0x0170785fdecc76bfL,0x7539ece1908c578aL,
36176         0x5d9c8a8e0f3e8c25L,0x8681b43b9e4717a7L,0x94f42507a9d83e39L } },
36177     /* 18 << 140 */
36178     { { 0xaeac64c96f089b59L,0xecfdc92b65f9d762L,0xddde5024f750daffL,
36179         0x82c01c1c0f707e73L,0xc70aa9d4ee20adb5L,0x27f6799dbeb0e60fL },
36180       { 0x918ad262520aa514L,0x2bb1362f8d13eae0L,0x21b60b46a9d1d43bL,
36181         0xf449e2d4767ab86eL,0xf42b09948a5a496eL,0x3b26006b853f2a3bL } },
36182     /* 19 << 140 */
36183     { { 0xbbe11ca8a55adde7L,0x39e6f5cf3bc0896bL,0x1447314e1d2d8d94L,
36184         0x45b481255b012f8aL,0x41ad23fa08ad5283L,0x837243e241d13774L },
36185       { 0x1fc0bd9dbadcaa46L,0x8df164ed26e84caeL,0x8ff70ec041017176L,
36186         0x23ad4bce5c848ba7L,0x89246fde97a19cbbL,0xa5ef987b78397991L } },
36187     /* 20 << 140 */
36188     { { 0x364d5dfda6140b89L,0x30e4a48efdc9105dL,0x13f6276018a47151L,
36189         0x18ad84cfa17a2853L,0x5f315c93988cb37bL,0x90f9cb701af64ce3L },
36190       { 0x020c67db029b6ffdL,0x8989ccc62ce3528dL,0x9bb4f9844d00ee63L,
36191         0x0b052413a70b4ca9L,0x7dee36dcc96b4a07L,0x226db70ea7888508L } },
36192     /* 21 << 140 */
36193     { { 0x111af1b74757964dL,0x1d25d351ddbbf258L,0x4161e7767d2b06d6L,
36194         0x6efd26911cac0c5bL,0x633b95db211bfaebL,0x9bedfa5ae2bdf701L },
36195       { 0xadac2b0b73e099c8L,0x436f0023bfb16bffL,0xb91b100230f55854L,
36196         0xaf6a2097f4c6c8b7L,0x3ff65ced3ad7b3d9L,0x6fa2626f330e56dfL } },
36197     /* 22 << 140 */
36198     { { 0xcd9b76b6a92f4e61L,0xa464f5225a00d902L,0xb64774e68a583f92L,
36199         0xc7dc2030bee842a8L,0x594743ea5d2f27ddL,0x4c0ed28ef3c54609L },
36200       { 0xd763346d4b1dfb93L,0x8ea291dde1bed2eeL,0xf26d4adbd6d34ae1L,
36201         0x74b8d24e54ea3529L,0xe20490e150062077L,0xf67b7a9092d6c19cL } },
36202     /* 23 << 140 */
36203     { { 0x3d28bf2dffccfd07L,0x0514f6ffd989603bL,0xb95196295514787aL,
36204         0xa1848121c3db4e9cL,0x47fe2e392a3d4595L,0x506f5d8211b73ed4L },
36205       { 0xa2257ae7a600d8bbL,0xd659dbd10f9f122cL,0xdb0fdc6764df160fL,
36206         0xff3793397cb19690L,0xdf4366b898e72ec1L,0x97e72becdf437eb8L } },
36207     /* 24 << 140 */
36208     { { 0x67bf4c98e11df408L,0x8e105c66d299b156L,0xfde3922e901b63c7L,
36209         0x7fd57218c184ac91L,0x6dd2ea5cebcdc105L,0x1c4956c0aef7653fL },
36210       { 0xd6fac6429c1c11a1L,0xeda44f663d230d5dL,0xecca2241e6902ccbL,
36211         0x85962a1f2700870fL,0xc5ca32c97864a291L,0xe55e974af6c8d3d9L } },
36212     /* 25 << 140 */
36213     { { 0x81dcea271c81e5d9L,0x7e1b6cda6717fc49L,0xaa36b3b511eae80dL,
36214         0x1306687c3cd7cbb3L,0xed670235c4e89064L,0x9d3b000958a94760L },
36215       { 0x5a64e158e6a6333cL,0x1a8b4a3649453203L,0xf1cad7241f77cc21L,
36216         0x693ebb4b70518ef7L,0xfb47bd810f39c91aL,0xcfe63da2fa4bc64bL } },
36217     /* 26 << 140 */
36218     { { 0x0af51a2025f7b355L,0x35fc45d58d8081bfL,0x0cf3036d0ab30d16L,
36219         0x2bd47f919109cf76L,0x8be09360ec7f12beL,0x99fc291be8dcdca9L },
36220       { 0x385b89868135b12fL,0x272ac288f4ec52dcL,0xe7ca370cce09b043L,
36221         0x94655816251f4c4eL,0x5c1dea972d40a755L,0xe8977234a4b10406L } },
36222     /* 27 << 140 */
36223     { { 0x82c1c684eaa66108L,0xe32262184cfe79fcL,0x3f28b72b849c720eL,
36224         0x137fb3558fee1ca8L,0x4d18a9cde4f90c4eL,0xc0344227cc3e46faL },
36225       { 0x4fd5c08e79cda392L,0x65db20db8adc87b5L,0x86f95d5b916c1b84L,
36226         0x7eda387117bb2b7cL,0x18ccf7e7669a533bL,0x5e92421cecad0e06L } },
36227     /* 28 << 140 */
36228     { { 0x240fde37b21b2632L,0x6b878ae68ca0f16fL,0x072d9ded0bc32ebeL,
36229         0x8c2552bc29840743L,0xb58327b003b34f8aL,0xa51598ea71dabbfdL },
36230       { 0x337361f7d4f461c6L,0xae88972dda1de4b2L,0x9ec86d7ade7e8c2eL,
36231         0x607de383f23f19e0L,0x0cb144c27d234103L,0x00878a228f0c3411L } },
36232     /* 29 << 140 */
36233     { { 0x26063e124174b08bL,0xe621d9be70de8e4dL,0xaea0fd0f5ecdf350L,
36234         0x0d9f69e49c20e5c9L,0xd3dadeb90bbe2918L,0xd7b9b5db58aa2f71L },
36235       { 0x7a971dd73364caf8L,0x702616a3c25d4be4L,0xa30f0fa1a9e30071L,
36236         0x98ab24385573bc69L,0xcbc63cdf6fec2e22L,0x965f90edcc901b9bL } },
36237     /* 30 << 140 */
36238     { { 0x265f7236e22b29caL,0xe36c3c3daa62691aL,0x73410e6ed2e1bad1L,
36239         0xa182a579a5743cecL,0x2ca67274c22b0453L,0xc698fe35546e52e6L },
36240       { 0x60b3a519890e9155L,0x24312c3c2b91dbc3L,0xa6d45050282911d9L,
36241         0x3781933efd249e1eL,0x2e0cbb93e26d023aL,0xfb479267bf27687aL } },
36242     /* 31 << 140 */
36243     { { 0xd53b592d71e15bb3L,0x1f03c0e98820e0d0L,0xce93947d3cccb726L,
36244         0x2790fee01d547590L,0x4401d847c59cdd7aL,0x72d69120a926dd9dL },
36245       { 0x38b8f21d4229f289L,0x9f412e407fe978afL,0xae07901bcdb59af1L,
36246         0x1e6be5ebd1d4715eL,0x3715bd8b18c96befL,0x4b71f6e6e11b3798L } },
36247     /* 32 << 140 */
36248     { { 0xaff4782231cb94c9L,0xf1b5a0b7803c1af4L,0xbeb85f8d2ef696a9L,
36249         0x8ce5baab4fa94fcaL,0x0a32f96200d41a43L,0x0f69ad5774f6e772L },
36250       { 0xbe0221af6ccb5157L,0xcb83969a2a4f91ffL,0x78ff85d6a7e49f39L,
36251         0x63006589cb5d3c63L,0xe8e4383596eb65f5L,0x79f59da9ff8adbdfL } },
36252     /* 33 << 140 */
36253     { { 0x3cc0df125df9b6ecL,0x3c18f44e286d6ef1L,0x55a3939e517d0f7dL,
36254         0x42626a32607e97bbL,0x6168e7b2e26ad78aL,0xdcf8e74b9145583aL },
36255       { 0xa7c541a52db84a71L,0x680532c7119210a6L,0x3252035d0a3315e5L,
36256         0x06dc2d5befe7c8b6L,0x940175894e720570L,0xb16e635f2f6a3ec6L } },
36257     /* 34 << 140 */
36258     { { 0x0bd0ed3803e13ce1L,0x44a148bb5868069cL,0x2a79ab57aa5095e6L,
36259         0x943416faffffcf22L,0x98434e8756a1365cL,0x2493315d196dc354L },
36260       { 0x1f89d911b79a3a1eL,0x937140a841dfdd23L,0x05ad36e43b220b8bL,
36261         0xff5e810333594e3aL,0x3119775f893edb80L,0x1fad811627eee584L } },
36262     /* 35 << 140 */
36263     { { 0x55c4377e204f30b9L,0x63550549a1ebd2bdL,0xdd86ee0c5e44f5f1L,
36264         0x8b9d1d9b5d84d999L,0x9ea95a58dda7a075L,0xa465b4a50977e81fL },
36265       { 0xcb491e5558421fadL,0x4617f31c280709d6L,0x5e2751c382e0195dL,
36266         0x698155856f8eefd1L,0x6702166cd16dc160L,0xfc14545c84c85b2fL } },
36267     /* 36 << 140 */
36268     { { 0x27c961f6e8fc35abL,0x1e0c26923a596fe7L,0xc75c7cb804351be8L,
36269         0xfb92bfeb1c425d80L,0xb01d1c909f0bde61L,0x273d1f0c512f7817L },
36270       { 0x4375000df0d71796L,0xc1655874cf53d529L,0xe157b358abddc21cL,
36271         0xb0f91e3e40cedc30L,0x48e26c7272260452L,0x9794a6bf0713f667L } },
36272     /* 37 << 140 */
36273     { { 0x78befaede72c6f0dL,0xc80584210bb2a3ceL,0xcee67a5d52748e21L,
36274         0x08d4a9e8de8ed124L,0xc0393271b5fb9514L,0x39b1df6b20942000L },
36275       { 0x831fd8cfc3d961afL,0x1bb097e3e752daceL,0x279b3924cf2c8143L,
36276         0xa9f8a939b8f5cad9L,0x2b566813bfb8009cL,0xab37ee1df58f0927L } },
36277     /* 38 << 140 */
36278     { { 0xc17f21f5134d8bd8L,0xc75fc638a90a9a1aL,0x032a6f382a22527bL,
36279         0x3c77a72bd20fefb2L,0x559d8a52196e2921L,0x760a3a2c9afcb6caL },
36280       { 0xa3bf5802f162d871L,0xb6b367a5c594d2adL,0x4d440c523daa48dbL,
36281         0xb2a8acafd5b2c18aL,0x50d85d6adc349ddaL,0x3c2e67718a707475L } },
36282     /* 39 << 140 */
36283     { { 0x8254a39d5e1656cdL,0xff457dcaa595e153L,0xf0ddc1936bf62398L,
36284         0x45e1f91a558f9337L,0x8a424d9d91480b33L,0x019f0a412bf61189L },
36285       { 0x66badaa6d49e7b98L,0xb0674512dad636faL,0xc767eceff4c49695L,
36286         0xbe16e6b5ddc80ea0L,0x2bd0bb87febd1ba6L,0x69c9f485fe60eb32L } },
36287     /* 40 << 140 */
36288     { { 0x08cf7d82bff4b684L,0x6abbf429ac4a9329L,0x2454c15ab0c8e0ffL,
36289         0x4782035a70bdb03dL,0x89ff6a41448199cdL,0x07969c9ffd0bf1e5L },
36290       { 0x19d1cc6a83406dc9L,0x4054cab9b4980267L,0xf0f5594e1887d258L,
36291         0x039249e4e09dd987L,0x2b0cd4f9857ddb1eL,0x54ceb29fd8418075L } },
36292     /* 41 << 140 */
36293     { { 0x562693d30843729fL,0xd703202122648488L,0xd7c40e82ec6d0799L,
36294         0x8eacb2496eb6fb6bL,0xddf7074885a5ec47L,0xd70524bf891d5de5L },
36295       { 0x4d17c237c4d01055L,0x4793c6e4b4203cc0L,0xf247d0df1d1bf37aL,
36296         0x406994fa93b007feL,0x4062c29902940092L,0xedc0d949f558c1e8L } },
36297     /* 42 << 140 */
36298     { { 0x9fb3630606ab1fc5L,0x2726c1acc0de4e26L,0x8b2fb5130ec7b070L,
36299         0xf3581a6907bacd4aL,0x97db622c164bf5a5L,0x8103517962327e3eL },
36300       { 0xad3637b0b1d635c2L,0xb894adf949832ec3L,0x0ab5381725685b12L,
36301         0x73ceb46069720ce8L,0xdbd1b68ef5e445dfL,0x57659059c8961eb8L } },
36302     /* 43 << 140 */
36303     { { 0xbd1272a5f73a7cfcL,0x30d3c078de0828e1L,0x5dc0244e1a8f36a1L,
36304         0x87c80cdf585ec2acL,0x46c88d277944584cL,0x588d14d8b2dbe1a9L },
36305       { 0xb42327a7afe7d55aL,0x58add8f98775409eL,0xa45db2fd10590c68L,
36306         0xb98e10bca972b84dL,0xbf5c0ee0a737aeb6L,0x26424f3def199fa1L } },
36307     /* 44 << 140 */
36308     { { 0xb7bb774603c4cd27L,0x5bfe638ad9723678L,0x47d8b4c24a04d064L,
36309         0xdba309383faa45d7L,0xb0fb4308b39dd043L,0x5eeaa33f23ebfa1dL },
36310       { 0xaa5a0ce0ba100837L,0xae025cf6d7667d17L,0x610baf5df480cf99L,
36311         0x8ba0039ead025771L,0x0ff4f75174785f24L,0x910736ef8b7c30b7L } },
36312     /* 45 << 140 */
36313     { { 0x0496b77ac04b7e7fL,0x6f7ea5bbdf8163a1L,0x87a8e8f18f415876L,
36314         0x6e5b6f2e3ee22085L,0x5ae860ca6f529471L,0xc54c8667eb624447L },
36315       { 0xdd06be3de1c7766aL,0x8a8e48ecd2189d23L,0xa4076d3564245444L,
36316         0xc4973a5deb651a4bL,0x3b3e2fd52c4f2747L,0xe9a16a24abde2ecbL } },
36317     /* 46 << 140 */
36318     { { 0xb7f146b890973714L,0x2277873f288ed67fL,0xe6da9d9ee5182317L,
36319         0xa446f9d3562475b3L,0xc5291f9756755d91L,0xe762c5f3c104c2b6L },
36320       { 0x542f90b3dde83d53L,0x758aaddddace5f42L,0x1c8b9775e673f002L,
36321         0x8899c11f74ec42bdL,0xfd9e300a2dbc0dedL,0x6de1c8e4d281f6adL } },
36322     /* 47 << 140 */
36323     { { 0x5ddafb1b2a2f98cbL,0x8dc2bdc429ec504fL,0x27c51b3cc9f43826L,
36324         0xcfd609fccacf5becL,0x642ff85c30dd9f71L,0xcab498e5b6b00ffdL },
36325       { 0x9c7ef286652ca743L,0xda291ae0ab95d7aeL,0xe6f4d2badfbff466L,
36326         0x34afffef9835d482L,0x41a2cfc050db295cL,0x51a08859e6ee400eL } },
36327     /* 48 << 140 */
36328     { { 0xf6fd26cc487925bdL,0xd9b751eef5ef44e9L,0x694a788be372817eL,
36329         0x85f3dc1ae8c90c31L,0x8c90c6bf15aa0ce5L,0xb52a5d83f01bb223L },
36330       { 0xbdae01dddf9c3315L,0x941fa6b663ddfc56L,0x50ddff4ec2548f24L,
36331         0x54a49868d12802a7L,0xcd922fb6404d9240L,0x88d7f41f957f6d1aL } },
36332     /* 49 << 140 */
36333     { { 0xbfd0a17e4c4c87cdL,0xc6c76ebb10b614bfL,0x721d8b4fd1c594a9L,
36334         0x1ff70b2daff65d09L,0x2698f57ce50ad026L,0xf4ac3f5627a92e38L },
36335       { 0x1114d3392c143ba0L,0x7fafa6b97f8e9b0bL,0x506f11edd82a2500L,
36336         0x4df1087fe0ad9ca2L,0x85509ad9fdfecaa2L,0x733c4f8293bd022dL } },
36337     /* 50 << 140 */
36338     { { 0x3b9de3494233d6cdL,0x9a360917a8f55d63L,0xbe79cdfd90662136L,
36339         0xbb3d8fd7cbf3f02aL,0x5d0d4eb81d61e485L,0x85b485215484cd65L },
36340       { 0x77580c810fc5cbb1L,0x4b36441bd8e70ff2L,0x50ccdec1b2107a8bL,
36341         0x6b7f97c945a45893L,0xb818859b9572a173L,0x864dc632d94bd9beL } },
36342     /* 51 << 140 */
36343     { { 0x13bb6b113fee0074L,0x4c02520ed1059617L,0x5beb793ccf71f07aL,
36344         0x15a8d28d46d4c54bL,0x9889a8948b89fab6L,0xd00fdcb492623b75L },
36345       { 0x1c7963572939a84cL,0x4b85d94d6221a244L,0xcc66b5bad1fd506dL,
36346         0x866271042a06ca91L,0x4295fc6a49bb18c1L,0x05a81eea341d93e4L } },
36347     /* 52 << 140 */
36348     { { 0x895dbf20df8111ccL,0xec8297be2906fb2aL,0x4ddd6f22b94c3f53L,
36349         0xec55cc738ecbd552L,0x549d3145ef343a0bL,0x9b19220c3b4858d8L },
36350       { 0xd5bbf954bd0c2f11L,0x9cacae0cce8c221fL,0x87e6cbc1f6a3dbc5L,
36351         0x7ce5c9b6e37ebcb2L,0x654339ef50eb3c8fL,0xeac7f343f3674f55L } },
36352     /* 53 << 140 */
36353     { { 0x723969a3dd8d5580L,0x4f6dd5c4a30edd79L,0x5b29f3f5a4d7ed53L,
36354         0xe17a12bd11869af9L,0x63d01e02dc4c4c1cL,0xb43b904466a691e9L },
36355       { 0xab58d45ad1bbbcbeL,0x1e9b166322e8a57bL,0x88b6d3bb6684cdd9L,
36356         0xb944dee1ddaf3976L,0x70a4a121c347c41fL,0x7e93fa26fd1c217fL } },
36357     /* 54 << 140 */
36358     { { 0x5df68a1b584da350L,0xf378c367d72cd093L,0x5908ac0033dc31a6L,
36359         0x89bb976b7ca65b9cL,0xefdadfe237dcf670L,0xce22b5ba0011f3e7L },
36360       { 0x94d2c115b7d27bc7L,0x2e6763498761afbfL,0x3c0477829eb8185fL,
36361         0x634c8c5531f7635fL,0xf8fb5494d4d0fc53L,0x5a905615530ee2c3L } },
36362     /* 55 << 140 */
36363     { { 0xd28e59a0940c9809L,0xc208ae4f01b9f39fL,0xae1cb420b3630002L,
36364         0x739950501289d72bL,0xec24392805fcbd8eL,0x5b592df51f843891L },
36365       { 0x0d7602303f59f374L,0x32b6e643cae9f3ecL,0x94a25696e3dcc436L,
36366         0x657ae6aa8a059dadL,0x0df91017edd1505eL,0xfb1ae06f7b518d81L } },
36367     /* 56 << 140 */
36368     { { 0xf5bd119ad84c8a53L,0x36c5410f26928a6dL,0xf340f2bc0eb42b83L,
36369         0x8d93a66cffeffe84L,0xff59141d64310b9eL,0x2d509d7aaf69e00fL },
36370       { 0xf0f034ae1390628dL,0xf9089c720c38b563L,0x7462988e4e8df0daL,
36371         0xe6041dcaa7985905L,0x86295326d3b7274cL,0x5c8bf249075aa31aL } },
36372     /* 57 << 140 */
36373     { { 0xb08d098b9e423b93L,0x8ae94622029d192bL,0x05335f68fd67f1c4L,
36374         0xf3cb831f6e8c1e57L,0xf84a7a54a50a776bL,0x99930a48dc49c28bL },
36375       { 0xdac2ef8f1b833418L,0x87a4ca7829fda2f2L,0xf47f23079c0e9e7bL,
36376         0xebc1c2de46aeb3c7L,0x544f76836408bfc4L,0xa01b094b86c6cd44L } },
36377     /* 58 << 140 */
36378     { { 0x8e81bd1c06841f10L,0x3fc24a346c045063L,0xbb2be2dc85bc7ebfL,
36379         0x32523efbc341fe12L,0x1ac9f6b116508a41L,0xb6b7fa1df6ac4426L },
36380       { 0x2614c995fb685157L,0xe452b94dace46bbcL,0xccda1adabc453b4aL,
36381         0x32d32574fb4fac48L,0x7e43920c9d7d90fdL,0x9d6e959417a08456L } },
36382     /* 59 << 140 */
36383     { { 0x2c90f95bdb1f005dL,0x801089a2e16444a3L,0x2f2944ed7a724ad8L,
36384         0x0dfdd065de135e95L,0x510ab3eaafed3817L,0xdba075380855fbb5L },
36385       { 0x905f78bda10dde49L,0x63786348956a4057L,0x3d420ff0441530aeL,
36386         0x7a9968bfd1488ff0L,0x97479bfbca4dce2eL,0xf371985356f76255L } },
36387     /* 60 << 140 */
36388     { { 0x8102fa85bbda55a7L,0x6cbafe0de96c5eb3L,0x517720eb26aa52c7L,
36389         0x0ee110a98c030e47L,0x5a058569d4afe2c1L,0x29965b44262bbc0dL },
36390       { 0xda017ec04996daf5L,0x1781e7b84dfb810cL,0xdbe148350c8a5cf6L,
36391         0xd151055dd92ff62eL,0x5e4f48ba2932a708L,0x77e163d95f28bb43L } },
36392     /* 61 << 140 */
36393     { { 0xf6c5998c48bc9bc9L,0xb25ae99e2db132d7L,0x17f29131fb934e7dL,
36394         0x31b96a79d7fb5430L,0x3fad00391971cabaL,0x7f809e56cf3d5e33L },
36395       { 0x1a4f705a9ede6055L,0x3cab6c6149c2d054L,0xb616adc47945b589L,
36396         0x842b8652f342ee03L,0xa22fc6a67bc36a4eL,0xffdfee262c89a4fbL } },
36397     /* 62 << 140 */
36398     { { 0xac6b2727dab13b10L,0x8b4fa7807351ac35L,0x48243c245692808aL,
36399         0x724897f01fbc5d24L,0xb635fe5e2c69bd93L,0xab26453338d5d5b2L },
36400       { 0x368b2c07bc578c97L,0x94e02c9226fecf25L,0x768de4d41f473908L,
36401         0x58feaadee445d405L,0x1f1380d6e42a2218L,0x2904b4542154dd5eL } },
36402     /* 63 << 140 */
36403     { { 0x4e28b938ca2ec0f3L,0xd4af48d795b1c113L,0x33ffb9c222f2275aL,
36404         0x2a734af97b57b2e0L,0x1555ba38d08a45d3L,0xd0cae6c57a05837cL },
36405       { 0xed04c869c4e78884L,0xa7ba74726f3d56d3L,0xdb7b831ef6d68485L,
36406         0x225798677e7d0a4dL,0xd2d702a94c3eef8cL,0xdaba503869a83e29L } },
36407     /* 64 << 140 */
36408     { { 0x082ea61d10eeed24L,0x7c9d5ade143fd59dL,0x7d33df962e54f5cfL,
36409         0x340b0d36e39dc6abL,0xd97a8b848d179b13L,0x88184bb0288d388cL },
36410       { 0x2237e507e116ae6dL,0x3e97b063211b2cf0L,0x645f8bcb42be7459L,
36411         0xce2b0f54de2176b6L,0xaf570a09d1e2f09cL,0x110adf5657fdc001L } },
36412     /* 0 << 147 */
36413     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
36414       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
36415     /* 1 << 147 */
36416     { { 0x158bfe27bcb6db29L,0x967212410054d963L,0xf07b153b8e71aca1L,
36417         0x5e67698171b11643L,0x77b7dd7dd04e2f90L,0x07814aa6f0dcf109L },
36418       { 0xd3bab2a4fe1d0b1eL,0x50abba31be69e691L,0x54fe99afc6f53cd9L,
36419         0x071f2a4f628039e4L,0xf1f44181b183aa16L,0xdf0138e05010f6f9L } },
36420     /* 2 << 147 */
36421     { { 0xb1e365019c77ca60L,0xfe084a2301018e14L,0xbf451d2ca4bfdcecL,
36422         0xd210892fb29cdcfeL,0x5b12bcd894514871L,0xd03ca18c1809b1e3L },
36423       { 0x09b243115858e4eaL,0x37b30d50e57524b4L,0xcef0a16b5de334b5L,
36424         0xfe0bd1e20b116076L,0x54e4b48289ae2bf4L,0xfbcc5e1a68c8a937L } },
36425     /* 3 << 147 */
36426     { { 0xa5023e1364be0f56L,0x6a7310e00046f45cL,0xe0af09aeec8700d3L,
36427         0xdea5fb7ceb2d38f0L,0xc038eae6859852e6L,0xd515fb4c8c34f04cL },
36428       { 0x546b778e1488c207L,0x8cf4f1146258d8baL,0x474e60d85182c96cL,
36429         0xcd0387303dbde757L,0x387232f876ab01ffL,0x277614f628231392L } },
36430     /* 4 << 147 */
36431     { { 0x309b1eb33ef5a413L,0xa7607981a81f43fbL,0x87c2b81ebf8a894cL,
36432         0x27a40bce0d293293L,0x7f4c315be4bf3714L,0x03fdc14e01236895L },
36433       { 0x319c88f8dff053feL,0x146bb448ea3fa121L,0xfcc2a05df0dd1380L,
36434         0xc8d55b024acba9faL,0x871358de5927313eL,0xfd1d81d317ce294aL } },
36435     /* 5 << 147 */
36436     { { 0xa135970c7361138aL,0xd67eddb5b7d50260L,0x313c6e9bc4d5311bL,
36437         0x4f503bf28423e5b4L,0x17dc4b6f44f3fe83L,0x15b7bdb9ccf1bbcdL },
36438       { 0x0ce4d64ea11b9896L,0x050b0edebbb6b0eaL,0x85531293bf5db990L,
36439         0x9db3b964520d095eL,0xb45ec235bd2d4e88L,0xf88a9e6215ee5ba1L } },
36440     /* 6 << 147 */
36441     { { 0x10777189c1a21254L,0x7d8d3966ca593a6cL,0x261ab515120380e6L,
36442         0x453c858fe13577d1L,0xb1f6bb58f3862db1L,0xf8ff48b8b9529e1cL },
36443       { 0x03f63a417b60b400L,0xdc248d96bba66b3bL,0x8423048b756e5af2L,
36444         0x4d978ed31c984befL,0xa06242995ba00f3eL,0x0bed7b454f4d19e7L } },
36445     /* 7 << 147 */
36446     { { 0x9ef52e3d6524f389L,0xc5b157c5f6ac19eeL,0xdca7a72ab5d42f7aL,
36447         0x2d2e8d72fa0051dbL,0x3a6ff9243f4a4f60L,0x0ae997af340e7977L },
36448       { 0x33dd395e269db4e9L,0xf95c3683616b9dc3L,0xb86a066122d516a7L,
36449         0xd50c582cad913df8L,0xac8b8efef550afbfL,0xf34fcab01d88728cL } },
36450     /* 8 << 147 */
36451     { { 0xd3797831ff63ae69L,0xa753de02ce4c7eafL,0x2ff7a6a611a4e339L,
36452         0x904f86f05328043aL,0xe29d31c012e9f7ddL,0x8825a639c0a51904L },
36453       { 0x070c2696ebfc2cc7L,0xc03ce643c5f7a943L,0x5b970d0c12c8a1f5L,
36454         0x572aaaa1ab352a83L,0x63df45a90c5eb0c7L,0x95c951e1d4977599L } },
36455     /* 9 << 147 */
36456     { { 0xf5aefd5572ba3741L,0x7ab81965f5fe816dL,0x597d15d546752cefL,
36457         0xaa79a0822a3c142bL,0x038ddfdd3af5dfe9L,0x9f4dc166755c9e07L },
36458       { 0xf34224dfb9165297L,0x96e7ff6e4e3fd907L,0x5d7f3c821727beb6L,
36459         0x7098493dd6af73ceL,0x6b9358fbe00dfa4dL,0xefb2634a96e74870L } },
36460     /* 10 << 147 */
36461     { { 0xe35daffe2e4c6299L,0x1f9e33935915cd16L,0x93f05a40f009a48aL,
36462         0xa4a801fd308a81c6L,0x75e5dc467e885426L,0xf0bc7d5d4629ff05L },
36463       { 0x356b879bdbd812c2L,0xdb5eb60001629849L,0x11c9856eec2dd55aL,
36464         0x20f0443880f0c804L,0xc0b5e3e21801b217L,0x7ceba67d6ea097b8L } },
36465     /* 11 << 147 */
36466     { { 0x7a1bc5d85d08d3f0L,0x9ecce2a8385ef3a8L,0xae93d42b3c1b2927L,
36467         0x81a3a60719ce9447L,0x8d6b2d3d0eda597cL,0x5baabad60eea6dc5L },
36468       { 0x2cb372642741608aL,0x3b1148d6f0202a01L,0x6e85272f52931f5dL,
36469         0x49bf47596a2e601aL,0x5ec0418443279ddcL,0x7d052cac6ec080ddL } },
36470     /* 12 << 147 */
36471     { { 0x01c2df8d3bb02d0eL,0x874e43afe26f388dL,0xe198341c8360fa6aL,
36472         0xe67f8092c52bb2d6L,0xf944dc63a02efba5L,0x9a9c02d92c12332aL },
36473       { 0x39684f6ca8cb6bd5L,0xbcc1828e26bc9535L,0xb7fb8eb646594725L,
36474         0xbb4f5f05793c32ddL,0x3ef3c33845f94b55L,0x228e0e7d09eac277L } },
36475     /* 13 << 147 */
36476     { { 0x80d9bd388aeae732L,0x2be676dccbeb6443L,0xef4d056bded9ad31L,
36477         0xc4fea44f349e5d0eL,0xb66c35d28d95db86L,0x210c3d4aae9f5d3aL },
36478       { 0x5c0c5b9c1582982bL,0x50a529be93aed9a4L,0x88f769a384c77818L,
36479         0xc0970b4269776a3eL,0xbf3e5ee022a1cad4L,0x705c0b29b80187eeL } },
36480     /* 14 << 147 */
36481     { { 0xefd26dca727cacdeL,0x6290fedb5fcdb147L,0x9f108a89e1830a96L,
36482         0x7e8e36813e039a02L,0x1747b3e9256fbb3bL,0x5aa0ebffabb3b2f1L },
36483       { 0xcac5818c9fbb9b49L,0x037d66114a94b74eL,0x4081fd4d7a548536L,
36484         0xfe2d8e79aa364507L,0xe86ce00ea81a5f81L,0x77b95e9477a9bdb4L } },
36485     /* 15 << 147 */
36486     { { 0x3eadfde5bf06a49eL,0xca88828b33787c62L,0xde6f765022070f63L,
36487         0xcb4e54dc438f649aL,0x24957c77169727d0L,0xa2e7781cdd2a92a3L },
36488       { 0x17a1d7ddc38885f4L,0xb75716717605c408L,0xfdbbcffc8a2323f5L,
36489         0x11666bd2c955456cL,0xf8b94fa2517f27f5L,0xe101927fee002499L } },
36490     /* 16 << 147 */
36491     { { 0x2c5b0e42bca07a42L,0xbe57f3597a0dffa1L,0xace485959aa90727L,
36492         0x32be886af658699bL,0xce75d6c6da3b18e6L,0x9d563e4f69caf667L },
36493       { 0xc17c66cf065eb772L,0xfbe123814df9f6efL,0xceb80041623db4efL,
36494         0xe75615b2c74762e1L,0xade8a5438671c52fL,0xb713c401cacaf2ecL } },
36495     /* 17 << 147 */
36496     { { 0xc740669ab01b20dcL,0xd873f3f1abecc3f3L,0x0d8290402db73d1cL,
36497         0x147aaafb99198d33L,0xca66e755d4e7d7e4L,0x8747298cb2cb752bL },
36498       { 0xd9d58d29c43762aaL,0xa3801a4a15e45d57L,0xa747fa3f454eaf2aL,
36499         0x26c79cdd0c067c77L,0xf15404cea24fe6b4L,0xe2add5ec77fec1c9L } },
36500     /* 18 << 147 */
36501     { { 0xc45064dbd71a7744L,0x1900bb8f04a6f3cbL,0xd592585a76c2dd6cL,
36502         0xabbbd6d862b95d26L,0xb0db482b1d2e180aL,0xf459430184c9dea5L },
36503       { 0xd30b162a6e5ec460L,0x90838e57e4b35476L,0xab4b7c80f9356687L,
36504         0x72c2c009719f347aL,0xd5d01fcf920d187dL,0x47426f1e0afe06abL } },
36505     /* 19 << 147 */
36506     { { 0xe6473aeaafb2f584L,0xd5395475c44ab7a2L,0xcba2c240bc27e864L,
36507         0x201735cc742c1c9bL,0x8cb4886951263febL,0xb52706ba4fd2cd5bL },
36508       { 0x028445755a2dec94L,0x978e79d6a4be7b6dL,0x5a68d8103c4742f8L,
36509         0x9c917f48b301ad64L,0xa6a7d5bd684a6ea6L,0x251d61327c978749L } },
36510     /* 20 << 147 */
36511     { { 0xdc7e39ee0ae2a7caL,0xcdd3c235e6b7dee9L,0xf9624c299368c8a3L,
36512         0x2086bc904b21951fL,0xf7990a1f57e0e6a3L,0xf170dd75e686da8cL },
36513       { 0x4a82719a06da9714L,0x3a78e35e24274685L,0x1c3965e1c67712f8L,
36514         0xc6c26eb62f164e3aL,0x1129a467381fb91fL,0x896022108443ffddL } },
36515     /* 21 << 147 */
36516     { { 0x25e561bd808c4ff9L,0x08c9f2758c0cf1c7L,0x9af6165b59599115L,
36517         0x59f06a4bb4b415f7L,0x3a9d8ca5236e2650L,0xc8fa3bc61b48ebdfL },
36518       { 0x5e1896193404846eL,0x6d1d803b378a5a46L,0x672fe2bab812d5dfL,
36519         0x3ec27a7f04c6ddc1L,0x9c5ff08c0cee3357L,0x9f465babae8d37d3L } },
36520     /* 22 << 147 */
36521     { { 0x0057f60756a0b6bbL,0x46a6e9949c1e24daL,0x1c283f859baaf618L,
36522         0xd75e731be878a354L,0xf9db13388bf2ca71L,0x0f14adeea9022f59L },
36523       { 0x309f04aa6c14666fL,0xe6cec2aa552d2da7L,0x9f27eaba218d8659L,
36524         0x9b3165d3c268561eL,0xc7e3afcb90ae19efL,0xb840170bcb329e68L } },
36525     /* 23 << 147 */
36526     { { 0xf6b9a32fab95aa95L,0x1a1e06c387e1c3c5L,0xcfb7ecc5317f1c2bL,
36527         0x12953ce7999d2bcdL,0xcaf5f0229e3c5a01L,0x0c9db571305ac94cL },
36528       { 0xa423d26cafbc860aL,0x82fbbd3dfe98409dL,0x455aa9926652ac17L,
36529         0x6916e7d6f9428029L,0xdcfbd65099822714L,0x5de152a13f3c72d2L } },
36530     /* 24 << 147 */
36531     { { 0xe6d039ef467eb167L,0xa7e0959d74696cf9L,0xf3a19b9d7078d8a0L,
36532         0x5d4ec99c07cdc6f6L,0x4842d0f98386eed8L,0x48f5ab80545fc0d5L },
36533       { 0x8906fc626d39c2f7L,0x1c050d691bf5366aL,0xac506c579f54d0d6L,
36534         0x9a356a6ef9e4b94cL,0x62632c5108a75e61L,0xfc1b9fa5c6951dc2L } },
36535     /* 25 << 147 */
36536     { { 0x84ba4069d034ec62L,0xd55b42f6f169349eL,0x78dce88d17de2b22L,
36537         0xdadae679204ec730L,0xfad5ec6b5357f5e5L,0x330bba18ccc0d0afL },
36538       { 0x8419755c4a566c71L,0x29c56c5fbfe57083L,0xe42a7c52598cad77L,
36539         0x9d81623f5fcf1dc0L,0x978eb12864615869L,0xc837262a9c2a6f35L } },
36540     /* 26 << 147 */
36541     { { 0x917747f99ee0628bL,0x5d711303566cf048L,0x206d53f15b77f58dL,
36542         0xe104bc12667a86ddL,0x158f8d253505380fL,0xf5b32ad4616e821eL },
36543       { 0xdb67191a3cdfe797L,0x61b58589147e1756L,0xb7927e12625d0efcL,
36544         0x48d999d008bca937L,0x335c6f5b7b02689bL,0x4f0994a9d8149b7eL } },
36545     /* 27 << 147 */
36546     { { 0xe7ba0870df6ae3beL,0x661373f0166cd7d9L,0x369d361d8627f3fcL,
36547         0xca06d544cf6ceb36L,0xc819e0ea34b5d425L,0x80c1ab716ffd2827L },
36548       { 0x3fb8c0b520b4161cL,0x3647e67b3734b87eL,0x9c3a14b203e6c9cbL,
36549         0x320ed1c1c3620486L,0x6d77d46b5286a22fL,0xbd6036c1bc74a266L } },
36550     /* 28 << 147 */
36551     { { 0x125951a52e6d5433L,0x7d672aee6a6013d4L,0x6ed23f2560831997L,
36552         0xb0e219ae438c75c3L,0x6851dd4bace91d00L,0x84704f7d30f19991L },
36553       { 0xd744cb32d0107170L,0x15f51a63b0cb6796L,0xe14712cf5a5807d8L,
36554         0xff89f0c5dbfd612cL,0x0c314718bd021483L,0xf9ccd3b11b4b76d5L } },
36555     /* 29 << 147 */
36556     { { 0x36121d0909b6398fL,0xd9ad591369069016L,0xd3a08c8469cdcfebL,
36557         0xd92ae9b2b03e1e4cL,0x1620c549e9b6284bL,0x5860431227ab9432L },
36558       { 0x4e1d3134aa314da8L,0x89207aad70910cbcL,0xacee236badff9190L,
36559         0xe6390f7cf6eb6df2L,0x0dfc5a5cffa91d75L,0x3474104aa0e7f48dL } },
36560     /* 30 << 147 */
36561     { { 0x00b75b851871749cL,0x063b748ea00faa20L,0xa516e09f90257503L,
36562         0x9ffc43981c800098L,0x49f011f871b00fa1L,0x6fc80517443268bfL },
36563       { 0x2802e2bf24a24acaL,0x96fdc71edde88ab9L,0xe3eff1f997e661a4L,
36564         0xae5c34e13cb321f8L,0xf863263e301c8ba0L,0x3c3eeb7b093e186cL } },
36565     /* 31 << 147 */
36566     { { 0xc0f51229e7aa3325L,0x3abde561fa93ec80L,0xd7e5317f4e6df2b2L,
36567         0x4eefcc76bc832652L,0x9dce52905d054a1dL,0xee2939da2a6f52e2L },
36568       { 0x8faa1d3e092b5422L,0x77f55f7f9ca6338cL,0x6dadad8f6546d37aL,
36569         0x0ef4922ef3bf7cb1L,0xfcf41c23200ccc57L,0x591e208362aa0372L } },
36570     /* 32 << 147 */
36571     { { 0xa933aaf7a4886619L,0x9ec1915f4af13c7fL,0x25a9dff8854de496L,
36572         0xa8b31d9b247bec15L,0x468a25c84661e58dL,0x8989c046786a0707L },
36573       { 0x282db8cabb66922eL,0x73bf240d45ca29ffL,0xa2c40faaeaeda06eL,
36574         0x69632929add94b47L,0xc72354f6b0069076L,0x8d197fbf7878e92cL } },
36575     /* 33 << 147 */
36576     { { 0x7bd8195662267b63L,0x9352be73894a4ed8L,0x62568211d0bfdfdbL,
36577         0x7974999285698b05L,0x897ccd584412ea21L,0xe4cc4ddcb2f25225L },
36578       { 0x808539bdb4a1d924L,0x619fee34bdebf750L,0x47ed5b3473aea42aL,
36579         0x91e07a9b94ba376aL,0x218f6885edb27e08L,0x4feb09e6c4214344L } },
36580     /* 34 << 147 */
36581     { { 0x24bf9fbbf3e4bc93L,0x8973b72471151bfcL,0x8e33b753a85eb707L,
36582         0x13eba76e50adc461L,0xe445e8e144dd9d2fL,0x8729ec22b1592a0fL },
36583       { 0x9a13bf315ec24808L,0xe6ae840c2e95cabbL,0x634f3416e28cdf4aL,
36584         0x34d3349b9278cd7bL,0xd74990c542b912b5L,0xaf94b104b2430c71L } },
36585     /* 35 << 147 */
36586     { { 0x6d26cd01580b15a5L,0x5af25c06dcd849aaL,0x05b00800ffef39f8L,
36587         0x8cc59e06f9e0208bL,0x920f69540bc19bf9L,0xc06c4df97faa5ddeL },
36588       { 0x9a26a3f4770351d4L,0xda015bd3443f40d9L,0x1afd829c740f1942L,
36589         0xb108a8a6566e6158L,0x118e50a9a35e5d37L,0x94cac90eab72a3b3L } },
36590     /* 36 << 147 */
36591     { { 0x01f7968e60cb465cL,0x4efeffb796e0af3aL,0x6f9016e7066ad6aaL,
36592         0xa8ae30e88743aa97L,0x7b77d3e0b7d55766L,0xe1773661c6b3fadeL },
36593       { 0xa52fa7bc88f5270bL,0x4de08cb39f7f811cL,0x6021536f9bc34254L,
36594         0x47bd18cf4068e3d2L,0xc91bc312ce16889dL,0x468659ea929b71f5L } },
36595     /* 37 << 147 */
36596     { { 0xa5a2a3b3225b532aL,0x5ed77864167f7874L,0x2b5d475037ae42d7L,
36597         0x9bd62f14433b243fL,0xe8dca1b2eea90992L,0x1ce44e53ef5e0624L },
36598       { 0xd92c7bf61d3d7173L,0x83c1e65424c19a94L,0x59dce036eafe8941L,
36599         0x23478c50d81014b0L,0xb89214bbe65a18e9L,0xf9fd325ea05d9fb6L } },
36600     /* 38 << 147 */
36601     { { 0x2c4bbee73965ed81L,0x58b6a8766c1a47beL,0x7c8d94f71a67dfabL,
36602         0x865c9e42ac6ae9e4L,0xa63a0e42a3114c18L,0x7432c6c92bcf8169L },
36603       { 0x1927723c7532bd7aL,0x20b75c7201e5781eL,0x1963e16919d57f9cL,
36604         0x05427a3cb10e3798L,0x31bbc661cebc82a9L,0xdd88383ac3862997L } },
36605     /* 39 << 147 */
36606     { { 0xa0ef513d4adce457L,0x942aea7df9f906d8L,0xe52a2bb5fe22c5a3L,
36607         0xfd9fff1f8dec9ca1L,0x19b0e7a27913f99aL,0x58c45dd205660e97L },
36608       { 0x6722c47ff06d3c2dL,0xe4927a002a4d127fL,0xdc647c1ef40f46a1L,
36609         0x538c8cda7ab7a21bL,0x90227d6cc8015ae8L,0xe62f52dc2d4ec8a5L } },
36610     /* 40 << 147 */
36611     { { 0x69a9ebd8a83bbb88L,0xcbab0b5a29f98875L,0x325e487e4e7611f0L,
36612         0x90aa24b1d955cc3bL,0x840e70a13c264d53L,0x15bcf88bad7f4f81L },
36613       { 0xe47552cc2cf0df0aL,0xcb99973379205ea9L,0x25dc58bd10d5ca45L,
36614         0x0947d7151228b978L,0x9a0204da4f2c7c4aL,0x4377ea4a4690052cL } },
36615     /* 41 << 147 */
36616     { { 0x35da16d16bc7d7afL,0x098c4b0271de4ac2L,0xdaa2407c3655dd94L,
36617         0x5136884c90380d70L,0x3f47052e762f61abL,0xf715107a8dcd6ddfL },
36618       { 0x862a4a6e5d76615aL,0x2b546e1b2128a6f9L,0x5297a3cf40490672L,
36619         0xef2cbdf1b9c765a6L,0x52e71cb4426562baL,0x34d0e3237a84f9b1L } },
36620     /* 42 << 147 */
36621     { { 0x6cd4098d74e7c67bL,0x3bf4193123d2b418L,0x598710ad682135ccL,
36622         0x26ccbfe0172d648cL,0x0c4918c5d84dc9afL,0x346e8b6385065417L },
36623       { 0xcbc7f2efd353219fL,0x93637eea3c4e4863L,0xb18fc69c2dbbd39bL,
36624         0x20614dd45a4b5b0cL,0xcdac0383547adce3L,0xedcdd64842ac8be3L } },
36625     /* 43 << 147 */
36626     { { 0x76ac6c94b4559439L,0x09090af620319667L,0xef433d73a742e3beL,
36627         0xb7ec99eb7cbd7090L,0xcde2579dcb782be1L,0x2a2fb807e75552fcL },
36628       { 0x083f9e982f1eee15L,0xe20f65c167779c98L,0x73c044ff5f23e998L,
36629         0x5fce594269488208L,0x3e4ca86ccace7ba3L,0x5e3f43b8f32c1acaL } },
36630     /* 44 << 147 */
36631     { { 0x3ab171a237b42b60L,0x6501afcc4f20e50dL,0x4f9e22413e3a4298L,
36632         0x3c5834d9be3b3d3cL,0x9607b8cb9be25af0L,0xcc5f6b6f81c723a5L },
36633       { 0x11b9b5d199227bacL,0x2bc5dd9f322cc499L,0x0c3884a0cdbc3a55L,
36634         0x018a8ebefd4f004aL,0xa858ee7ce08741d9L,0xb5bbfa2b5d69b3ffL } },
36635     /* 45 << 147 */
36636     { { 0x57069b4a1b0611b3L,0x24b5421c89da55d7L,0x6433c29dcf9b2fb2L,
36637         0xda9382c67869a1cdL,0x67fbb7a343514903L,0xb3429e35e8b224f8L },
36638       { 0x4058ef1e7ac51191L,0x56283b0cfd4e6114L,0x4eff0caca16fadd1L,
36639         0xe6088db7b6ee634eL,0x94e68bd0ca7bd1b7L,0x0e98796b965ff86eL } },
36640     /* 46 << 147 */
36641     { { 0xf3176014bbd74a95L,0x5dfe36b51bc6c763L,0x4c463aa27d3d0366L,
36642         0xcbd7106cff3b113bL,0x2d660f5a0b6edee3L,0x92d79c864db04c30L },
36643       { 0xfd1067cfd2236e55L,0x1ae21f2d90925a83L,0x8419072ca952c451L,
36644         0x2f268b473d946980L,0x04831991b709ab5aL,0x0d622a70bf72efd6L } },
36645     /* 47 << 147 */
36646     { { 0xec468aecf0440b85L,0xaae6041369cea78eL,0x5a88145d12a30f40L,
36647         0x438c6e3f37a52bfcL,0x41bf603894749b6eL,0x3d38b86267edc2d1L },
36648       { 0xe379125a020a32abL,0x68a6b13a198c3944L,0xed1fb3258be252d2L,
36649         0x76dc8df6e15c37cfL,0x5a6592cb6453b542L,0x372b1998b3347c65L } },
36650     /* 48 << 147 */
36651     { { 0x015c325eb8e79179L,0xf4fc61335b57dce6L,0x27a51e5d78d6858fL,
36652         0x13babcab4dd5f180L,0xfaa19cb1847e499eL,0xe2688ae608aaea61L },
36653       { 0xe20d7edce86100d5L,0xa9b0d46bed2fedacL,0x5e99cc0c1d357dedL,
36654         0x4c1263ab723cac89L,0xad5f3e6ff15e22f4L,0xf25f3950d77dae65L } },
36655     /* 49 << 147 */
36656     { { 0xf3814fdba1c6fb06L,0xbfde395d8d71559aL,0x6e4b2b1c07e00f72L,
36657         0xac0d1aef1e12b111L,0xa4041ea0387dc52cL,0x8004ef4893c80d7dL },
36658       { 0xb311b5c29a770d6eL,0xd4a340bbaf41a540L,0xe96d1dbd9a5391ccL,
36659         0xcd4b19fb45ebf6ffL,0x142556a5dcb6dbe8L,0xf68968ff092f898aL } },
36660     /* 50 << 147 */
36661     { { 0x540a2e35c854356eL,0x6d0eab45f5002153L,0xb8f542bd9a6c488cL,
36662         0xd572d282c6201f12L,0x260bc62781a3eedaL,0x508621af06eaa5beL },
36663       { 0x754eeb205eadc8d5L,0xfe33248f42d4b0dbL,0xf44a1c7ac5529222L,
36664         0x9079ccb574396eeeL,0x6c4bc87db9cbdc41L,0x1ee8982431ee3f18L } },
36665     /* 51 << 147 */
36666     { { 0xb64fc90ed811f25aL,0x310214a2c82c8f68L,0xee559209b5052420L,
36667         0x6055c5b45c1bf95eL,0x414f7c8dedce3bc7L,0xd3438b8a66d3cfb4L },
36668       { 0x687b9f70d3935eeeL,0x553b15ddd3e179f1L,0xccc9961e21ff232bL,
36669         0x3729ac207d322041L,0xf1537630094907c9L,0x3e87f4f903153dccL } },
36670     /* 52 << 147 */
36671     { { 0x2c21e48c7dae4b17L,0xe842930a07ca1575L,0x3a3d6d361cc47ab4L,
36672         0x749dba405fcd07bcL,0x55a538a6f306a498L,0xe85c60be633d42bcL },
36673       { 0x777595f2dafa94a7L,0x1c690529a0400ef6L,0x41485f886bfa23bbL,
36674         0xdead14a1256d9204L,0x74f1a820bbda2f9fL,0xc86554f65fe54284L } },
36675     /* 53 << 147 */
36676     { { 0x03ee764b978ad2dbL,0xec253b0f01c9282dL,0x028e7873fb26c425L,
36677         0x3e1da0436504ba10L,0x68369881531961f1L,0x0365ea56ee435146L },
36678       { 0xf5505ae80c00a6b4L,0xc1ac097403f34fe3L,0x7327b391b5922f68L,
36679         0xe561cedd1845ef9bL,0xaa82258c6a44b29dL,0x23e39cedc4d56159L } },
36680     /* 54 << 147 */
36681     { { 0xf5a07dedd14a3ce3L,0xeda454ec9c47615fL,0x01d6b1562775730fL,
36682         0x3ec02f95fe4d93f4L,0x335806e4dcbd0ceaL,0x3f498d1b51a19d96L },
36683       { 0x9949c853374b7210L,0xb255d34b25980320L,0x3b681db4307b513eL,
36684         0x4137053add10a78aL,0xd9c0f2728dcaae0cL,0xcbeb6b7216031955L } },
36685     /* 55 << 147 */
36686     { { 0xd1b13e72c709af4cL,0xb4b99796c12f27fcL,0x9e56569a05e2c06eL,
36687         0xd8c880631212ba12L,0x8da1a6704e7f8fe4L,0x3bbb314f875bb39eL },
36688       { 0xc56ef7088fbc8a3fL,0x39b3cef2300d21bbL,0x5e755398458e347eL,
36689         0x9f7b84b16c1b2162L,0x278ffd26b08d0c52L,0x7c8a442a9ec7febfL } },
36690     /* 56 << 147 */
36691     { { 0x3c0e2b9737e8e6b2L,0xa2037913575da8b7L,0xeedf0a75b925cbb2L,
36692         0x4f28ec1bc561b405L,0x368fb2742901931cL,0x52b54eee2f26221fL },
36693       { 0x381845b6247812a9L,0xf9bcc9619115a0dfL,0xef127dfecb84d25bL,
36694         0x4256afe5fa10e0a7L,0x0c08a532353a15ebL,0xbbd15b176a91e61eL } },
36695     /* 57 << 147 */
36696     { { 0x3c573b2655574ae4L,0xd3f12e8f2c0be823L,0x5954b69fde9ce60eL,
36697         0xc433991bcedfd1eaL,0x35696716718e950bL,0xce4318664e9cc107L },
36698       { 0xee16b6347359991cL,0x8f05851b1818a113L,0x257a228c3b494b59L,
36699         0x4239f98e156f91f6L,0x2382157c72efdcc4L,0xc82b652cff7b7ac1L } },
36700     /* 58 << 147 */
36701     { { 0x072eee036b7a9a38L,0x42a680cbaef9b327L,0x67311eb8b56fb35eL,
36702         0xf320acf3c7de3776L,0x09c89cc3ed15e895L,0x368501713232345cL },
36703       { 0x5a5fe1104822f90eL,0x64f7ef18c6077b89L,0xbbc5748c8bdfb971L,
36704         0xdf5488334b6209deL,0x02268bf676e7f595L,0x1c7971b447779e75L } },
36705     /* 59 << 147 */
36706     { { 0x90d308b495c9497fL,0x277535b782c903f6L,0x443cd37fc5d7b4c3L,
36707         0x48ebf0acfcaff8a7L,0x8ee8c79e579f25f6L,0xb825ccd8360ffd90L },
36708       { 0x6327be1599fe4be2L,0xc94c68cf59ec2909L,0x0dbf8d4456660ce7L,
36709         0xbb31989b5d510edaL,0x43c8c365c4a2e601L,0x100de78314dcf793L } },
36710     /* 60 << 147 */
36711     { { 0x635ee0f3d33ac52aL,0x609c328dd1970e1aL,0xf28ddf0a09426902L,
36712         0x2a94d4decbbcbbe8L,0x15890cf4ab7ecf5cL,0xb14a405df2dd4135L },
36713       { 0x64659a4fa6d01554L,0x1d1b2c43cc966f9bL,0xb02ee871df0e48b3L,
36714         0x0bd13e47f4dc3ebaL,0xb4763547bb4fc529L,0x868650044068ab72L } },
36715     /* 61 << 147 */
36716     { { 0xe3d60dfac22bda56L,0x021411ba6be2f502L,0xc1dd4d55b35e750fL,
36717         0x708b62cd4d5e1648L,0x234a80c6347b8b8dL,0x53b6fa80f3ba912dL },
36718       { 0x4041b8007b92c92bL,0x636c12524b6dbceaL,0x4ea250d08a1aa141L,
36719         0x9ffa7e35a2ae7be0L,0x765c809cd2844e61L,0x5bcabd922d56de12L } },
36720     /* 62 << 147 */
36721     { { 0x48d594e522205fbdL,0x79c78f1c0862eb11L,0x02a3becdf7798099L,
36722         0xbfe574a8b1ef2ae5L,0x1bfb7779c4781f34L,0x7211dfcf044da23cL },
36723       { 0xe4c3fd7dc3686ef9L,0x14c6e5b5e74210f7L,0xc40a0a0275ab746fL,
36724         0xd2033594621f6369L,0x6bdbbe3d66241d44L,0x014b089ee47f00e9L } },
36725     /* 63 << 147 */
36726     { { 0x93e3a89108e65849L,0xf90a376ba1a712fcL,0x6555d6dff1a48fcdL,
36727         0x984ec5c86a763e90L,0x7a7fe565e55d6b14L,0x12550fe809b2e8b7L },
36728       { 0x21736c048e41210eL,0x72ae44d448ce08f6L,0x02755a2871fecc50L,
36729         0x379da24beb485ee5L,0x394cb7ba66d7b659L,0x49fc9d60ab638c33L } },
36730     /* 64 << 147 */
36731     { { 0x854b05846150771aL,0x35fdd9b4d9ca9868L,0xec8293894c32fc71L,
36732         0x882fad4c9ec8f90dL,0x2d39990dc6c7b9c0L,0x7fbc201bd71a25e5L },
36733       { 0x6b852e655166da7dL,0xc6bde23a3d8c6e36L,0x370011545857f048L,
36734         0x746621fc1ccb9bc8L,0x97e44e63612bb853L,0xabc3b450758da4edL } },
36735     /* 0 << 154 */
36736     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
36737       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
36738     /* 1 << 154 */
36739     { { 0xd25f650804926a41L,0x7236b475514045daL,0x0b36031108b9b08bL,
36740         0x16477aff3fe92e91L,0x6e5f6cb103189ddcL,0x81ff008ec698a38fL },
36741       { 0x02a09218c93adb23L,0x71fcecd3445d8faeL,0x55a15eac8fd6b76cL,
36742         0x1e37ec3611ef96b4L,0xd1b3b3fc30e433b5L,0x4951873351d174c3L } },
36743     /* 2 << 154 */
36744     { { 0x7914213db8c9f82eL,0x7a3e4e38fc038e90L,0x6edae5a126a34238L,
36745         0xe566bf50701ce8c7L,0x3562e87555656e02L,0x48325ebfb4e8efbfL },
36746       { 0x5f10a50466505ec3L,0xd8b9834b8da78aecL,0x49d1fc25cc2f2e40L,
36747         0xe973bb1caf5718c1L,0x9b8825dad2d6b890L,0x7de7885ee2f00f12L } },
36748     /* 3 << 154 */
36749     { { 0xfb0fa0e6494fe64fL,0x4ea468b59a907f37L,0x9bb6d672cbabb7ccL,
36750         0x523c7c6ea5be2b38L,0x4065adbb361c2e41L,0xffa1299925c13172L },
36751       { 0x0eb29793f80d5e2dL,0x862fe1ae8e4efeffL,0xd485483e948895c4L,
36752         0x513977300d80d5bfL,0xb4731ffc348782f2L,0x42543c76e1a7f6aaL } },
36753     /* 4 << 154 */
36754     { { 0xe37211be7ef79898L,0xa810387721344d16L,0xfdcd7e26a1b9f8b4L,
36755         0x5641e45d7d7f72d5L,0x5377c1bec449c920L,0xd3edcb0cefc7b2a1L },
36756       { 0xc657a9ffe14b42fcL,0xc8f858c800831b07L,0x6bfcd1bcd020eaa8L,
36757         0x17534b0a3f6860c7L,0x8ce5722284c7c806L,0xa1d40eaf2bd7456bL } },
36758     /* 5 << 154 */
36759     { { 0x28b88cbb1a7093caL,0x09275152080a85ebL,0x0bee7d979c1dcc32L,
36760         0x43698f5f5ed033a5L,0x4f142867b0f0acc1L,0x6e6202ecf62960deL },
36761       { 0xe95a607ff005b671L,0xfeee8ea060cae478L,0x456bb6e90e8ec6e5L,
36762         0xc1c0319a9d088a59L,0x29c6898bbe3d2379L,0xd7049b2af8a8628fL } },
36763     /* 6 << 154 */
36764     { { 0xe0c93007c9aa57eeL,0xebb2d47b8895a604L,0xb8aebc49c4fd6ffeL,
36765         0x2c06e1e573f300b6L,0xa019070d81628b8bL,0x2db1690bbaf8c1eaL },
36766       { 0xb3fce6c8cc94ccd2L,0xf301463885bcdf4fL,0xb1e62616e2f82c32L,
36767         0x85581e2468295a54L,0x0f2e2ff5bf51f8faL,0x940716f1155c1f6fL } },
36768     /* 7 << 154 */
36769     { { 0x15b2dd270c6bd5f1L,0x07b5bd91eb086d0eL,0xe701742e97c5f5caL,
36770         0x3ce5f3f6eea06ea6L,0x51a81a6aa9cee784L,0x2bd404c1c7182fa7L },
36771       { 0x27deca74d5b8bde4L,0x2c1931c595385e4aL,0x04fcb34e3a79d65fL,
36772         0xdf3357edad1babceL,0x8bc628ffa31af476L,0x42ce1d91e5cc9e78L } },
36773     /* 8 << 154 */
36774     { { 0xaed02b6b4e623856L,0x7a6d2bef3e1d74cbL,0x82226ec4654e7c30L,
36775         0x008ac003e7034bfdL,0xe343c5407fd6b555L,0xca1b29071b429d44L },
36776       { 0xe0702a339c3ceea2L,0x48079aa9732694c3L,0x7e6d72f6d4652401L,
36777         0xd92655ed35f60043L,0xa0dbaac6273e8cc4L,0x0bb8f0f93c3ffb40L } },
36778     /* 9 << 154 */
36779     { { 0xc3134781a91940b2L,0x37579fc9e9b90620L,0xa506227a08acd6f1L,
36780         0x603ecce0270da73cL,0x8a53b67d7fdd70cfL,0xe29b7df299640bd6L },
36781       { 0x7bb4fa877569105dL,0x6ee80ae8567bb5e9L,0xf394bd02baccabefL,
36782         0xe854b3a6309c944fL,0x1271a131f06246e9L,0xbc1c205531580147L } },
36783     /* 10 << 154 */
36784     { { 0xb41b87b6c95cd23bL,0xb99714ba55e371a4L,0xb138ee8f6f571cebL,
36785         0x09c42be480146ec7L,0x275ee21eee9aa125L,0x0cef4d6f3a878b59L },
36786       { 0xd436eb1ca801068dL,0xe2c5448c762b8a80L,0x243beee1f3640ecaL,
36787         0xf979458b32bbba7aL,0x6bc26cfea63407d3L,0xd3b6e132392dd1d3L } },
36788     /* 11 << 154 */
36789     { { 0x123ae65005d0072fL,0x9f101624f0656bbeL,0x762bd4f4344e283fL,
36790         0xd1f70d5161b6863bL,0xcd99382592ef9a38L,0x53aaa0c3ac2bf9bbL },
36791       { 0x13904fb521ef9a43L,0x0470a8ba2beb8f44L,0xf3733943fcfe9ecdL,
36792         0x10b8881a79d776dcL,0x89b94c67b82b7139L,0x7af5147aeb962922L } },
36793     /* 12 << 154 */
36794     { { 0xbc06ecab3de4ba2eL,0xf51ca0639e491bcdL,0xa6fc6fa0453c94beL,
36795         0x5460f943ed1a6731L,0xeb11656a4ec3f1fbL,0x2fcb2cabff1e7d4eL },
36796       { 0x595264678fea2286L,0x838117a34e0bee38L,0x7bdf588824fd2ce5L,
36797         0x13df0c839f2c2925L,0x1bf621e6dee97f30L,0xb43b2558ebea6641L } },
36798     /* 13 << 154 */
36799     { { 0xf49a97d80a33b97cL,0x4e68d71512ab9bcaL,0xc0d361c04bdb65a3L,
36800         0x5fba9fb86cfb0cafL,0x222e12ca2a716589L,0xaea01502731f5099L },
36801       { 0xf322ddf7e97b37f1L,0x050e82a5e55c844dL,0x01ef972ba11d664bL,
36802         0xab30502882c737b6L,0x43aa811185e39769L,0x766a9350937c1456L } },
36803     /* 14 << 154 */
36804     { { 0x246c86608e729329L,0x39fcc41dd693dac8L,0x48a65b54c062a6c0L,
36805         0x368a57706a5a3101L,0xd143600f47ed1988L,0x48466d92a764ce3dL },
36806       { 0xb05006135a22cb6bL,0xf1d77247edea070cL,0xb1ddd151617f2464L,
36807         0x7905069828b83fd9L,0x021abb26d70bf93eL,0x590b3c42ab5a5e1eL } },
36808     /* 15 << 154 */
36809     { { 0xe86c737b728b8438L,0x21f45a22acf1dd66L,0x6f29f2d7abd4de3cL,
36810         0xa223154576d4435eL,0xad902927f5fcafadL,0x272cceeb04f30557L },
36811       { 0xc2e4e0017ebbb2d6L,0x73954580bb873ec3L,0xadf5ec7ac7fa9088L,
36812         0xc036da0464006dd7L,0x9c3545b5e8274f69L,0x6e153c2552325f50L } },
36813     /* 16 << 154 */
36814     { { 0x5906a35c1cfb991fL,0xb62a4f80740a7744L,0x65c8ac9136f84763L,
36815         0xf73b3debbe0f1dd3L,0x40358868a2d26c21L,0xd907e90a76792ae7L },
36816       { 0x3ecea167668c3d5fL,0x731068f26754b49cL,0x6db891090e006243L,
36817         0xd29106e6dd94681bL,0xb40b8694a85a3de2L,0xc80c7bf1936b86ccL } },
36818     /* 17 << 154 */
36819     { { 0xd735de6b91f7c76aL,0xd89aa1d4b054837aL,0x47c1a397271e94c4L,
36820         0x8d91f3f9dcb7c071L,0x4cf9be2db4cc209dL,0x4fb6842ec08190d4L },
36821       { 0x926423a1d7b2aaedL,0x5bbfc08957a1cb44L,0x44438c56021defb3L,
36822         0x8b9a2b1ba09863cfL,0xc9d5c170e37e339fL,0xa8994d5dabb18c7aL } },
36823     /* 18 << 154 */
36824     { { 0x003d45d011913575L,0x866cb2dd87e1186bL,0x692f630146b69a22L,
36825         0xd296a55c8174c1d1L,0x77ef6fbe9f17af00L,0x6b588be93aa922e1L },
36826       { 0x99ecb44f033e6dd7L,0x32edea2c1d22b7cdL,0x3122b027ba7006f3L,
36827         0x8950054bbb6ebc5cL,0x4f6d606182dab805L,0xc12055181bae5f1bL } },
36828     /* 19 << 154 */
36829     { { 0xeca71515ad7edd2dL,0x3f9c330e9bf56567L,0xd0b62d6749104bb1L,
36830         0xde92596410cc8d89L,0xc7a083f4287fc898L,0x8ba176e712d15d2bL },
36831       { 0x2cee62f7b4c8c4c1L,0xc15966c2ef79aeb2L,0x9b449522427c11a6L,
36832         0xcc850028eb49b2fcL,0x0966a06d3a22720dL,0xfd511944a1e78c8dL } },
36833     /* 20 << 154 */
36834     { { 0x28d33e79e08c180fL,0x768c7794f6aec9ceL,0x5a749f3bce683c5bL,
36835         0x717629d98371fe75L,0x5e828fc057712c1dL,0xb46c6ed17e4c61aaL },
36836       { 0x5d927bad5bccf95cL,0x55d6fc80d72f68ecL,0x560a99a398591dc2L,
36837         0xc885fe8a4836664cL,0xd18acd4226d79298L,0x05e4cd17185df1d7L } },
36838     /* 21 << 154 */
36839     { { 0x9c1e5db3ab34fbbeL,0x0d4b1e742f7eaa94L,0x106b0b5c86de1289L,
36840         0xd2c6c1aab691a830L,0x2e55cff9b9717593L,0x4522b37d075e5e95L },
36841       { 0xc6ee67ea3abfeb96L,0x35844bbd890b04eaL,0x0246545a55d6f65bL,
36842         0xc66bad2b13594e25L,0xaff4c6b35d6aa7d1L,0xebb7d2b5a3f42a84L } },
36843     /* 22 << 154 */
36844     { { 0xebc60e21fcc83355L,0xc94dbc02d9119b77L,0xceb05a312f18ae9aL,
36845         0xa8462962b8f69016L,0x58dde5a48f67b5f4L,0xb8bdf9c9af3c234dL },
36846       { 0xe95c069f80e85df8L,0x9d525e1bab3aa0e5L,0x73c8a92f76276d8bL,
36847         0x7feb4abd163530efL,0x8ca949b35ef5ad73L,0xe129431e2e3d057bL } },
36848     /* 23 << 154 */
36849     { { 0xa263d726c129d188L,0x89da948e9d526adbL,0xc7319a5a6b8a9149L,
36850         0xd85d382d8816f421L,0xfad69eb1844032eaL,0xf668901a4233122fL },
36851       { 0x246cc0de210ddea0L,0x26d8ccb70bc07dbaL,0xfc1b558470e6708cL,
36852         0x853802b775fa0b44L,0x215ccb88bb75a5b2L,0xff50f0cf24e60054L } },
36853     /* 24 << 154 */
36854     { { 0x9d8a925b60dec308L,0xb72e3efa6b3ea363L,0x4f53ca6ddfb534b8L,
36855         0x4e64874c6dd78a32L,0x336e5b46c2a146d5L,0x07c76d6398395201L },
36856       { 0xa4c095228fe3e815L,0x887e659d3221cc26L,0x0ff92f64c36286ecL,
36857         0x57b1b903c3ebb08cL,0xc6bdc9b665f00c30L,0x826242269a46d36eL } },
36858     /* 25 << 154 */
36859     { { 0xe054597768bbf4f6L,0x17bb77edb6e2cc19L,0x0cc551d89ae950f7L,
36860         0x3490778d761763a4L,0x1c36044a32647ceeL,0xa6e083223f9d2938L },
36861       { 0xea392a153a656a51L,0x4d51161ba083cb54L,0x15c01e792c690757L,
36862         0xc7bf5d7c5cc62636L,0x1b00cddab2ccd76aL,0x68f49fa995313f8cL } },
36863     /* 26 << 154 */
36864     { { 0xc782c16c1a0b619aL,0x8643d42bbe316086L,0x49d2966bc0daa421L,
36865         0x080b1cafb7b487e0L,0x1d33bb53144de273L,0x8bafce2d6faf7ed9L },
36866       { 0xdafbe3cf408d4636L,0xf10527df7ee8835bL,0xe1123f3ee2e75522L,
36867         0xb388c64bebe27d60L,0x2cb38dc1e3f1f55eL,0x57ff8e43e34524d8L } },
36868     /* 27 << 154 */
36869     { { 0x557dc1cbea28398bL,0x34d5709a208996b9L,0x94470993e97a3306L,
36870         0x0343320772b117f3L,0x66c4e442f056525fL,0x27753c526d11dd35L },
36871       { 0xf0aa7658b26a70d7L,0x95608b19543cd7ebL,0x618b2e17bac19156L,
36872         0xe7e42948cae64ba1L,0x2016a9d59657ec93L,0xa38f67e03d7ea46cL } },
36873     /* 28 << 154 */
36874     { { 0xd67dc92b85653dc8L,0x8e0970af0bc93ab9L,0xb6f09baa8b87c0afL,
36875         0x5a8a903052760ef4L,0x2e2ae7561047bf85L,0xd049078f85bd4e74L },
36876       { 0xced11ff83729f708L,0xdd21cbebd91068a6L,0x83d488ff24b3e911L,
36877         0x6e166fda1afd2196L,0x66a912114f0d2128L,0xd11078ed05c9f39cL } },
36878     /* 29 << 154 */
36879     { { 0x69aef6f919c64bddL,0xe7d4f909598ab592L,0x48952e280e55124fL,
36880         0x637693f6290b558bL,0x3afb2e7b421e60e9L,0x00d1dbac79aac8a9L },
36881       { 0x45156c5cc08563d5L,0x8cc201be4519c881L,0x2e36c0d7bd616581L,
36882         0x595fe0164ee16dffL,0xeebec40ae4889c65L,0x23b6dfd7d35b94e7L } },
36883     /* 30 << 154 */
36884     { { 0xd87003d3bdbdf0cfL,0xe9750b5b56c298f1L,0xc256c3a2b73ad05dL,
36885         0xe0779a192ee94279L,0x31d8b3c6279626a3L,0x469056bb90163bc8L },
36886       { 0xe6aeabc623755853L,0x9fffdfe2896a6f4cL,0x15c1ce78a36cf41bL,
36887         0xd4c8c025eee41941L,0xf7a917ee7653be9dL,0xfa3cba9659d52222L } },
36888     /* 31 << 154 */
36889     { { 0xa02f08586d8c610fL,0x9819c563ad4af3cfL,0x085d4439b95d17eaL,
36890         0x9df256ea616f532aL,0x5e9c5419cebd249cL,0xdd5ffbf451062a22L },
36891       { 0xb8910ea5c8b33577L,0x5e8b7ff7ff8e63d7L,0x5e4f3926b24e230dL,
36892         0x163eb51eacd851d7L,0x9bda95f2ea2aef8eL,0x3d6887755aefa290L } },
36893     /* 32 << 154 */
36894     { { 0x913f92075f8ab132L,0xd5b6792c5c14080fL,0xefab4e2c787c3594L,
36895         0xa55d465fe7b7b7ddL,0x921aaad834e28e6aL,0xc4f3a35e12d6a7bcL },
36896       { 0x109803c46115a5aeL,0xc023098ce709f9a1L,0x1a8c8bdb99c5bb66L,
36897         0x1cd1c2b6bc7c2da7L,0x50189c975f927eefL,0x493823d1229f9410L } },
36898     /* 33 << 154 */
36899     { { 0x34ec4dc840dedfb0L,0x1109ddb93aa89063L,0x93d9db278c218bb9L,
36900         0x07131b6e0b6007ddL,0xf90570ddcc4690f0L,0xa6a9a634afa26a59L },
36901       { 0xbd0c25194292e2b7L,0x92b99706a6d44b7eL,0x89481adf4942c03bL,
36902         0xff5e56b98a0c30d5L,0xdfd8939591c80fafL,0xed9d140840663594L } },
36903     /* 34 << 154 */
36904     { { 0xcc22db55c41e42fcL,0xc90ec77e4c9f2411L,0x419b9f46e4c02557L,
36905         0x156ed30ccee45c60L,0xf2c1340a72e4a938L,0x4a9cda8a204775a8L },
36906       { 0x900fd58713952b75L,0xa82ec2b812461145L,0x9f1875d41db68028L,
36907         0xaaa6af31308475acL,0xa11f379442d4b884L,0x1f1fcbe3d087882aL } },
36908     /* 35 << 154 */
36909     { { 0xa32d5a80a292fbecL,0xe0b10099d7091eabL,0xcb99bf7b4bfe6956L,
36910         0xfd806d4c61955461L,0x7124b1bf931066fdL,0x29fad019649ccbf7L },
36911       { 0xd1fe7911049609e7L,0xb568e167592f93c1L,0xabe7d10398ba066cL,
36912         0x0cd22c9668d7ac2cL,0x0ccd0c21427522d3L,0x97ba199ba503b4a4L } },
36913     /* 36 << 154 */
36914     { { 0xa0f2da0c78a2cbf7L,0xd1611acbd163d80dL,0x1af6ee1bf2cd3795L,
36915         0xc4993e08307d6105L,0x84c3b8f8560b5f12L,0x4f52c56347869733L },
36916       { 0x8fd9e3f728d28bc6L,0xdbf34576e5d44bd9L,0xf7e3a6da10d14cb5L,
36917         0xb93870990fe051ffL,0xf6363a48f15d43d5L,0x4bc358fcf434d1acL } },
36918     /* 37 << 154 */
36919     { { 0x35bac9471eae6dacL,0x4244697e39d6fe97L,0x16ec7f64fe017230L,
36920         0x393856d10493823cL,0x0782fbb55b7cbbfeL,0x4c399e3f5820f9f9L },
36921       { 0x86311cd9c08fe816L,0x057d4cbbc3ac958bL,0x63f09d484bdb0531L,
36922         0xab0b582b0b89ea02L,0x19c52243beb30331L,0xafa64f25ca87ff6dL } },
36923     /* 38 << 154 */
36924     { { 0x0d28a67859b1f4aaL,0x79b04589c52d40f4L,0x443b7fa5219303d9L,
36925         0x5be78d9663972eceL,0x0ccb969e7d984869L,0x7d8738077f81916fL },
36926       { 0x3502b3e426d9f292L,0xda1de7a82c90b612L,0x5605f5dc434f27c0L,
36927         0xa50d3328df89c616L,0x5a80cf84e7082731L,0x2c89e4b6f7ce953aL } },
36928     /* 39 << 154 */
36929     { { 0x7a46cd0d01fdf1e6L,0x86868e74e8690fbeL,0xf038771d8a8fc3b2L,
36930         0x30135b3084303d90L,0xa7ecb9ded562d20bL,0x7a6d1f37884cd233L },
36931       { 0xa30ca0bb07dfad3bL,0x1690d6018e09fa7fL,0xe582449f6c744551L,
36932         0x0b0030a21b935d17L,0x6b46681272bdb78cL,0xe40d4e5f56d4f328L } },
36933     /* 40 << 154 */
36934     { { 0xa29978fc62a8b8b4L,0x4cc216310fa130a9L,0xe4b51c6bf15e04c8L,
36935         0x453cf4d23f815420L,0x1257c751c6282b9dL,0xcd15b03c8af1af36L },
36936       { 0xe3596240514ef6e8L,0x72a6691708ab83d9L,0xca0a62d710e44b2dL,
36937         0xcde068128a9b8a8dL,0xd492b261ba470875L,0x5c7ea67cc6d7aeb8L } },
36938     /* 41 << 154 */
36939     { { 0x6acd945fc0995487L,0x06d5b2e47abac4fbL,0x42cddd75aaf3d12bL,
36940         0xca7d2363de1b9632L,0xbb1a1990dfbbb30fL,0xb0beb43139fd7bd4L },
36941       { 0x9ceb36884fa796e7L,0xb4d2bc4ba3266ab8L,0x79bda9d6e02df012L,
36942         0x414636bbf6faf7c4L,0x0a6603b9d1ab23f9L,0x2bc60c848db14f7bL } },
36943     /* 42 << 154 */
36944     { { 0x1b36ef27007ff90fL,0x394fe8095111399dL,0xaf4f246cb758e748L,
36945         0x794e4b151a7139a2L,0x40869a49eb527db3L,0xf2e15106f46d1b34L },
36946       { 0x46619f0352ac96e6L,0x40f556de49caf0c4L,0xa36b11d693072befL,
36947         0x871919b4ab2dad50L,0xf44b8084792dcefdL,0xe051823dbc31b021L } },
36948     /* 43 << 154 */
36949     { { 0x56293d8dcfd7432bL,0xdedf8dfd1d5f72c4L,0x743f4a71ae604fb4L,
36950         0xfb35ab43730caf7fL,0xcaacce6b20fc2167L,0x21ec3a0daa8ac71aL },
36951       { 0x4fdf5890c21ac9baL,0xbdc41ecfd6149328L,0xb1ac4d519b381c55L,
36952         0xc4cc08fd63f10a98L,0x2b9f0d3a4913a671L,0x9ce9949cbc36a952L } },
36953     /* 44 << 154 */
36954     { { 0x5049a7d3f758b1b2L,0x60beb74f14ab97b8L,0xdfc47828a9ff8ad3L,
36955         0x303a0cde8bb99766L,0x53f4b45a43b9a7a6L,0xe467aec8ca6e8c43L },
36956       { 0xb8e7db7b3f573855L,0x5fee5a5481e760f1L,0xe928b23385b0fed4L,
36957         0x72f02728ebae0b7cL,0xe32abf70bb5897d3L,0x103e8b859c572995L } },
36958     /* 45 << 154 */
36959     { { 0xf321278c2dc1a02cL,0x06ca03865dd09f91L,0x3c28640b7bac9e7aL,
36960         0xe3a7f9b527b1a011L,0x9137ad0407ccedd3L,0x3a2976a8cb6b447aL },
36961       { 0xab1c39248225c1ecL,0x30703f108f9022a8L,0x212f0f1bb0b2a64bL,
36962         0x76ad924b3e73862fL,0x47253a5c84842ac8L,0x33a03a17755af95eL } },
36963     /* 46 << 154 */
36964     { { 0x97c371fc5a274b61L,0xc7362cdbb14c680bL,0xa8cdd929efbd49afL,
36965         0xdfb2d5f075325f06L,0xf62d10e2b905531bL,0xbdfbfd8462ed0c3aL },
36966       { 0x252061599d07d2daL,0x1376775152491224L,0x165637057413313cL,
36967         0x642a7911a2b88eb1L,0x42d9dc6806ffe363L,0xe81d3403017bcc9fL } },
36968     /* 47 << 154 */
36969     { { 0xa68ce9db93d57f06L,0x4d1fa86a31dba07dL,0xf11603178c4822abL,
36970         0xc2243680633c26f5L,0x6b4e91cd10f1da80L,0x4358155734827d78L },
36971       { 0xbf54e87400c19817L,0xf52b94c4f2bad957L,0xcc85de8144e71756L,
36972         0x4f7d8ca365b7a8c2L,0xff76efa579d7c36eL,0x50a444025952932aL } },
36973     /* 48 << 154 */
36974     { { 0x87c0ef84172784bdL,0x023128267a5f2d07L,0xeae5c0cec9901fa3L,
36975         0x6ea74133a11144e5L,0x740c3d2ed8e89beeL,0x88e06131f9bb1801L },
36976       { 0x47f253754356fd51L,0x8e2ca6ce38e45ea1L,0xf0afe990c2ef8066L,
36977         0x91b7263d8ea03d0fL,0x37b01664880ca591L,0x61306f09790c8ed7L } },
36978     /* 49 << 154 */
36979     { { 0x084c4f92b24a5736L,0xf3d01da90a3c3859L,0xd37c47ed7468b812L,
36980         0xeb539a939567c798L,0xd852f502acfdc072L,0xd8e5454996245975L },
36981       { 0x42ec3948db5e323dL,0xdbebd1c7002d3fadL,0x9cc5db55d7c62d0aL,
36982         0x22af02388afa4c07L,0xbdcb68fc6979eb74L,0x33763dd544dc11baL } },
36983     /* 50 << 154 */
36984     { { 0x4734465f87c2e496L,0xbafe4fb4eb7d82c4L,0x940b168521837f17L,
36985         0x790d7041345a66c3L,0xe9973cfd65ea596cL,0x45fc95df058b3350L },
36986       { 0xc63bf91405d08638L,0x36e6af6476465a92L,0x7fe09193f1eb3701L,
36987         0x364f64f06468e2aaL,0x83108431f7129cc9L,0x3ac117205606bf94L } },
36988     /* 51 << 154 */
36989     { { 0xe6a85c7d34dcecd9L,0xc14437fe338cdc1aL,0xa5eeb471b3a9233eL,
36990         0xf230947c71349a62L,0xe704a95686308ebbL,0x0ef4d4da4a362a8dL },
36991       { 0xae9be4394b634c67L,0xf736c07c569f0039L,0x7356f3010f5f07d9L,
36992         0xc86c4000823c9cecL,0xc43b3489951ab5faL,0xa7a3b3a6b46bb659L } },
36993     /* 52 << 154 */
36994     { { 0xb1d6cb737337af87L,0x09a59a6908638c3cL,0x4ecc3fd25d94c727L,
36995         0xa7b57269e274ba87L,0x909cd824a61a0590L,0xcbe63cfe3c11751dL },
36996       { 0x9574de8347c46efaL,0xee334cda539b7e03L,0x245bc6a2e3ef3599L,
36997         0x13a570fee88d0da7L,0x88ede26d90ef4a21L,0xa0c5953b01fccebcL } },
36998     /* 53 << 154 */
36999     { { 0x855ff0f7657121c2L,0x18754814f94c7402L,0x720f1e3c32ce8340L,
37000         0x7ecd080ee8e49d3dL,0x2838e642f0bee412L,0x69cad618209f8e60L },
37001       { 0x5730f2dba983a4cbL,0x74957697f43896a1L,0x68de04373dc55d4aL,
37002         0xa2fbb915628698bbL,0xc8279c975cace19dL,0x7df557465fd52bc0L } },
37003     /* 54 << 154 */
37004     { { 0x1cb1c2f378c3f521L,0xa425f99b63116c7dL,0xc86b48c36f7c0e71L,
37005         0x9e92e82dc76a73ddL,0x8c0414657e7d6df8L,0x99e7884d38c02d8eL },
37006       { 0x6c53c0cfb78a7e50L,0xcbcb5114481d60ebL,0x1eed68ed035b4441L,
37007         0xdc95269f755f18efL,0x3ad7f32a3fe51f12L,0x981782d017296245L } },
37008     /* 55 << 154 */
37009     { { 0x7743ef2655fcd15eL,0xa73944a4d07f3cc0L,0x3161d6a32438cf14L,
37010         0xad193a9b14e8938aL,0xe1de190e872dac01L,0xb165da2fc4795b10L },
37011       { 0x1eb89d519e155bfeL,0xc8b97d94c9c552d5L,0xea7d3edb108c4c82L,
37012         0xafb60b29c10acbb5L,0x331b316b82c7b642L,0xa53c4b3d719fa342L } },
37013     /* 56 << 154 */
37014     { { 0xc8dc34f36b3bcbdfL,0x952d337b24d72806L,0x28b8ec817e56e8c8L,
37015         0x98e78abdbe861aebL,0x521773ddcf3bd040L,0x582ffcb2b7ca45d2L },
37016       { 0x70962c0a04202ac8L,0x31b6ac909f29381fL,0x3b4cd403355715a7L,
37017         0xffbbd1a7399a071cL,0xac669b08e50f02d7L,0x0f568c89b2cf0565L } },
37018     /* 57 << 154 */
37019     { { 0x2d2afc2daae7e637L,0x840e47c782a818efL,0xfe26a67c879f2451L,
37020         0xd41d289810f54247L,0x36040f4877119f14L,0x741859a983f240ccL },
37021       { 0x15f9607a8fa720c8L,0x8eb70f6df7b8e32dL,0x755394229b98d670L,
37022         0x80a4a127750c4e62L,0xbe88d03195ca3a50L,0xfadeb53dc6411eb6L } },
37023     /* 58 << 154 */
37024     { { 0x19f29da06b824028L,0xa5cfd12b7bd354a7L,0x1cb5d74caeb59b3aL,
37025         0xec9a8ccc47211999L,0xd7f2a1c17852f167L,0x134629209a1859cdL },
37026       { 0xdd65f7ac9e3a339fL,0xccaa968075437831L,0x25772f9b7f502bb0L,
37027         0xa64cd12f6fa0aa66L,0xd2f46ac62af2c3d4L,0x58433d963f262a2fL } },
37028     /* 59 << 154 */
37029     { { 0x747757c6715ba7e6L,0xc01b73c1f9cbefd2L,0xf1d96de501bbc017L,
37030         0xad554e91a1087f55L,0xd9b74be65a6cc716L,0xad2f2c0320317019L },
37031       { 0x42ef19c207893532L,0x7f3624c40858fdc1L,0xc104bde7078936c6L,
37032         0x99af706682b5f95eL,0xa40e02625a13a9a0L,0x6c0251c40a318574L } },
37033     /* 60 << 154 */
37034     { { 0xedb3abb1fe36eed2L,0xbb2cc1e6a038298aL,0xfa0ac06fe5adc3beL,
37035         0x7cbcef3eae73ebe1L,0x41596590cd676b87L,0x6cc8c0ae214391d7L },
37036       { 0x826e2e16fcb3f244L,0x1ed7837e1be22058L,0x83052d0d1a9912b3L,
37037         0xa2cb410c8ac3dbf5L,0x279d555a7faa6bc7L,0x870e7132f52b439cL } },
37038     /* 61 << 154 */
37039     { { 0x5957428e385308d3L,0x49ba20b3bfdae187L,0x4e1281c3adb44defL,
37040         0xebe93dc4e75c6cf9L,0x81d1d1cff675fc6eL,0xbe01bcecfe0e371cL },
37041       { 0x713f294d336bc7caL,0x1beb1508e26a1903L,0xbb5feab4b6819961L,
37042         0x28bede2741bfc7efL,0xb0a5108bb3365719L,0x81a8c9255ccd21a3L } },
37043     /* 62 << 154 */
37044     { { 0x4f3d90af2bea6870L,0xfebb0de2ca26ca46L,0x109d96e5d58bd9d2L,
37045         0x4b42928cd9882c8aL,0x5238cb7a8c73adcaL,0x9d79d72a4adfc913L },
37046       { 0xba58929d1f0bf201L,0x0b7790a505f52baeL,0x361949aae45fda0bL,
37047         0x21b2d006af3f732cL,0x1ed05dc33aa84bf8L,0x2322b7f72405980cL } },
37048     /* 63 << 154 */
37049     { { 0x4a38b5b2c7151e42L,0x1d5dd94894550168L,0xf2adeb5b7b3d1d93L,
37050         0xe15c42fa36661a89L,0x7d55a3f27a3aee90L,0xbe1b5c39d9d350a4L },
37051       { 0x9c4d6fa2610f16b8L,0x7b96051da60fb18eL,0x539762fa496c018bL,
37052         0x048ffa39168a8f22L,0x33486ccada1c0a58L,0xe216d6be9fd687a1L } },
37053     /* 64 << 154 */
37054     { { 0x11a8fde5f0ce2df4L,0xbc70ca3efa8d26dfL,0x6818c275c74dfe82L,
37055         0x2b0294ac38373a50L,0x584c4061e8e5f88fL,0x1c05c1ca7342383aL },
37056       { 0x263895b3911430ecL,0xef9b0032a5171453L,0x144359da84da7f0cL,
37057         0x76e3095a924a09f2L,0x612986e3d69ad835L,0x70e03ada392122afL } },
37058     /* 0 << 161 */
37059     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
37060       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
37061     /* 1 << 161 */
37062     { { 0x3ee0a31c6754f492L,0x02636c6b96769ff5L,0x90a64f4ff0fbfa96L,
37063         0x513f054efafea65aL,0x796ba7479cf4b9f9L,0x3198c068932a9590L },
37064       { 0x93af8a65549ee095L,0xb8b6f72ca212760fL,0x23bc71e9c1a46c8fL,
37065         0x000643af4c9bca72L,0xb6d967c7848cea30L,0xe06b6b4e73312ec2L } },
37066     /* 2 << 161 */
37067     { { 0x52ec99561d85a725L,0x0f9be000f3208012L,0xe881337c6dcc7816L,
37068         0xe4e7b6d9791f7cf1L,0xfaa717aa59885a42L,0xb1bbb5c7f9c01e41L },
37069       { 0xcf208d58a0361880L,0x24426e4020afa350L,0x7261871b264ce04aL,
37070         0x66be4a86cd42026aL,0xc5397b77829f99feL,0xffe4a6bc24578e2bL } },
37071     /* 3 << 161 */
37072     { { 0x0733667af822d5f9L,0xd7f81b9e18339700L,0x7ca29b27a7bc265fL,
37073         0x9fefa698eb4f0c7aL,0x7b6f351301f27630L,0x72f0f152fcfb1133L },
37074       { 0x9928d9d05c81eb14L,0xa16ac36bed8ff6cbL,0x7fbd1acbe041bef3L,
37075         0x7d25159af8d99854L,0x2ec3a7d8db5a0dc5L,0xd86fc4cc87e3e933L } },
37076     /* 4 << 161 */
37077     { { 0xba8418f34c20e15fL,0x7eed2494fb54404eL,0x4e6438d7bce1e82dL,
37078         0x9e489b3eb397915bL,0xa9baea9ffb4cf659L,0x8bc5b2ba42ef4affL },
37079       { 0xae3fb5337e62a188L,0xcd648493496e8e35L,0x89728e28defe047bL,
37080         0x63a8c679d24e60feL,0xadacbf92470f710cL,0xd470aeb95e198d3cL } },
37081     /* 5 << 161 */
37082     { { 0x8e3807dd7a3e874aL,0xc4edb45b89ac3a99L,0x9ba9cdaf4bfd77d2L,
37083         0x31d33f59b540fffcL,0x404c87790c60028bL,0x7f89da7189688c81L },
37084       { 0xdd3390e5504b862bL,0xdf1e721be937efe3L,0x5833d0df63e6036fL,
37085         0x7712527a385fbab4L,0x6347236bd210c0d4L,0x12d7733c8d238e2dL } },
37086     /* 6 << 161 */
37087     { { 0x0ecb0723302e943fL,0xd180ca1e4a443e78L,0x39e7891123dd2c9eL,
37088         0xfa2a440401fe50bbL,0x4678e7ed154d39d1L,0x64ddaee1af513e01L },
37089       { 0x6d4c615a634904daL,0x937c6326ba5c900cL,0x70658f5feb6c8582L,
37090         0x2a04fd51f3d65166L,0xcefe7472b676eb47L,0xd3565a71f597d887L } },
37091     /* 7 << 161 */
37092     { { 0x299520f4e5dcba80L,0x522ad4b52b758045L,0x54eabe27193b36d4L,
37093         0xda4d3bff45e9e442L,0x44cb9252637311f3L,0x4cd620a971338ebfL },
37094       { 0xec908157cc9524fbL,0x2731a11ba8c955d7L,0x72a5e0545cb94009L,
37095         0x7eee8f3b9126cfe8L,0xc71e29203dd5d5ceL,0xe886f91a22069494L } },
37096     /* 8 << 161 */
37097     { { 0x294d29550db962c0L,0xd6994ef46d523ab0L,0xfa1a7f9158f95037L,
37098         0xb137981164420c94L,0x2b686e1e093caea8L,0xdef10944f9e1c340L },
37099       { 0xcd1beecf611d9bf5L,0x34696c50a1b5267bL,0xcecbc7192dfc2b16L,
37100         0x2cdb955dcee7e854L,0x9fefc321f2635cc8L,0x276d2e4f2936f7d3L } },
37101     /* 9 << 161 */
37102     { { 0xa9de8b87d38e86b2L,0xe0c2f232780d2fb9L,0x742d7fe9449e78b1L,
37103         0xc6946b7ef29efe3bL,0xbd59bcf985de7456L,0xb070ebfadb492e64L },
37104       { 0x5cda7ac8a0ff7c15L,0x6e0c0062c4f435c9L,0x4d8e5395974d4be8L,
37105         0xa0a0c5984e6d1681L,0x5debadbea14cbda0L,0xe176a772ae30b167L } },
37106     /* 10 << 161 */
37107     { { 0x25df81bce7b19019L,0x3058081aa6f45519L,0xccafbccabb3de1d7L,
37108         0x2b794710c515b1b0L,0x74b81bf87168d9ddL,0x92d5e462ec00571eL },
37109       { 0x865e29efdc670943L,0x2350537c7f6299c0L,0x9fdf787ea947c6f8L,
37110         0x9601cb21cabe0f8bL,0x2899d5f49313b000L,0x4873bc9f66a9e8e2L } },
37111     /* 11 << 161 */
37112     { { 0x2829add72f163a26L,0xf96dd91156909488L,0xc16d185f769ccb59L,
37113         0x13c4b566e9c6da4fL,0xfd68110bc423ac34L,0x64911819cfaa9fb6L },
37114       { 0xad7c7d2b12dd07e5L,0xbf7eea90abc19a50L,0x1db70ed108d6c57aL,
37115         0x01da2b41446deeabL,0x163a5a5fa4f6a367L,0xca9f4bcca10c8a53L } },
37116     /* 12 << 161 */
37117     { { 0x2132c32e68206a00L,0x20bc1bb483bab6d9L,0x99fa3be2bc4ef156L,
37118         0xe515cd05ebbd6c33L,0x9c06d7670d2c8ebcL,0x2fa7f3b68a79c884L },
37119       { 0xa4dad16a9137df25L,0xc4da20f833598c21L,0x32f5d9e3867cb117L,
37120         0x8f00fb54da7cf533L,0x428cf9e3870ef3b4L,0xa8b6c754521b8428L } },
37121     /* 13 << 161 */
37122     { { 0xe9b297be7be5e610L,0xd09f63c304b49303L,0x9110a9b381ebb814L,
37123         0xc32af8986bf19586L,0x5c4939571da2280fL,0x89e85cb41becc5f5L },
37124       { 0x1068cb528f1a396eL,0x49dde483440a6144L,0x51280400b5d6aaf0L,
37125         0x0e8ac4a53e8ea21aL,0x32f4a91d92582420L,0x5eb09649bc35e408L } },
37126     /* 14 << 161 */
37127     { { 0xea3a2f0c32f235f8L,0x8281bfe5bf4a8256L,0xf44e1319577b9e1fL,
37128         0x31732d1bab2d9ac7L,0x6e7682eff375c5cdL,0x7069fbaf0913ed09L },
37129       { 0x693257dcf690cb94L,0x576a85b2dfa6e07bL,0x72e00515447fe4e4L,
37130         0x00af617509a2cd8bL,0x05a61365902ae75fL,0x8310b16db5ecb690L } },
37131     /* 15 << 161 */
37132     { { 0x4d22c79cb00fd8f5L,0x432b09844c9ed8b2L,0x43da93b2a85b3f0aL,
37133         0x0522df2ac4163655L,0x2ea7210b77214019L,0x8280099b7051a9a3L },
37134       { 0xcd0a829bb11b9e80L,0x9bda76c7246ee656L,0x1ece801bad70a0faL,
37135         0x4f8162f096721d79L,0x341faae58e7c3b0aL,0x6914420b12e57cf4L } },
37136     /* 16 << 161 */
37137     { { 0x4962c02167141724L,0x5f81eabeabe7762fL,0x78549a79dd189c3fL,
37138         0x47675cdd6ce517a7L,0x5102294e32d6bb97L,0xb19500c66ed1a029L },
37139       { 0x3efb54e8b16a206cL,0x7dbdcc250dc135b8L,0x955bc2948967fb04L,
37140         0x373615c9be04e909L,0xf1fcf820111efad6L,0x8530f97d6fd2e97aL } },
37141     /* 17 << 161 */
37142     { { 0xdfff3aceb3b513d3L,0x569f9d42fdaed4c5L,0x8615a9cf71cdec34L,
37143         0x2e700c34ceeedc56L,0x9047d770a48d0682L,0x3fc845780ee5893fL },
37144       { 0xaaaf3d90ab5b432bL,0xc846365184cb412cL,0xd215030d928ec9bdL,
37145         0x237a710045b97accL,0x0f533045ff791353L,0x093a0d21a1899bf6L } },
37146     /* 18 << 161 */
37147     { { 0x5da20568b4bcee44L,0x878025840f5bd27dL,0xc76b965c1c06dbccL,
37148         0x89ea2cceb1492616L,0xaefc8746b460c4bdL,0x679e6edb994d1756L },
37149       { 0x4ff93a4a271f3218L,0xae496faf3b970a74L,0x062df3a7ba6c44f2L,
37150         0x1ede93021990ede1L,0xa797899af9a1e2adL,0x9b1bcf6d82599120L } },
37151     /* 19 << 161 */
37152     { { 0x63a38a51bd04f6ffL,0x2ddc958bffafb91aL,0x198895cdb19b2b08L,
37153         0x1bb494246f65b797L,0xf75df140f157b79eL,0xa188dc873d599990L },
37154       { 0x8b926eecaeac83c2L,0x55fe56f03b82900fL,0x10eb6dd33b11d061L,
37155         0x8b44c14c3aec5877L,0x294b83e8b486e651L,0x469e552f79524b3fL } },
37156     /* 20 << 161 */
37157     { { 0x69386f451a746ed1L,0x4319649bcc14bac3L,0x006292b3b647cefcL,
37158         0xc771b7cda20e2a37L,0x838714d2396bf329L,0xf263e66759c0823dL },
37159       { 0x7ee258f0725e3ecbL,0x37638f9934218254L,0x4d57db246fc6d0f6L,
37160         0x8c85ad7322c2dd47L,0x2300a9129c59cf13L,0x63971b0bee08c1bcL } },
37161     /* 21 << 161 */
37162     { { 0x180032d98c2e7698L,0x07d4d364a851f2faL,0x0070bbdeb50b5986L,
37163         0xba05ee28274eee7dL,0x28843675b0f482e5L,0xdcc9c09ff82b2229L },
37164       { 0xae0273e7f061df73L,0xa3856b6644e3a740L,0x4b13b141527b80ceL,
37165         0xfd83b7f0e1b7dabdL,0xa3b5a2f1536c04c3L,0xfd09c77bb29e2bf3L } },
37166     /* 22 << 161 */
37167     { { 0x05fe64c5436e7c2dL,0x5b9f0b83ebb1ee26L,0x13dcbfed2977d6f5L,
37168         0xbd16c6b7db552375L,0xaaeacc2342da342dL,0xe427d2ee0cfec89dL },
37169       { 0x3097ac7b038b280cL,0xa2b79d623aab3c43L,0x9771fff4a40f585aL,
37170         0xf50974e0b15aa16cL,0x114e51137a847284L,0x574ba8efb4fbe083L } },
37171     /* 23 << 161 */
37172     { { 0x3c8dfa3b05e37e4aL,0xeaf691b47408352aL,0x2e1ce9863c9a8610L,
37173         0x8d024a814acfb35fL,0x3766aa2184ba6baaL,0xc336f82eb91f5a27L },
37174       { 0xe2d46985412ab7b4L,0x397f0411ded6de53L,0x067241c3544768fdL,
37175         0x9206d3839b71e023L,0x8571fe1e3f51c3c9L,0x0abdb52e3ba345abL } },
37176     /* 24 << 161 */
37177     { { 0x85e1e4abd5281f9bL,0xc7e517ddc653b0c8L,0xc0b84da1a717e034L,
37178         0xf1a63b280f1bf3dfL,0x47b74201aba6fd41L,0x9cf3da633518fcabL },
37179       { 0xe12511fb23bb6e77L,0x13b2cb4438679d79L,0x20e0fb10db5665c0L,
37180         0xb5448a33b99f4d5aL,0xcb1847ad46b7dbceL,0x41f156b8fdcadb87L } },
37181     /* 25 << 161 */
37182     { { 0xd09b746793c8b2a8L,0x36c760204357f251L,0xa965d1771ac04cf1L,
37183         0xca49d59427740f18L,0xbba973ed76c53b33L,0x7f8c2d264c17d867L },
37184       { 0x389afbbb00966b80L,0x92f2097a55988387L,0x316a85393a47c746L,
37185         0x259ae094ac3a3a30L,0x337f1d3f0d61ee3cL,0x02d5a60ca9d928ebL } },
37186     /* 26 << 161 */
37187     { { 0xd9f370e42af77d78L,0xf9cb8d588bfa692fL,0xdc8a4c24fc9203d5L,
37188         0x499b6fda3b8138f4L,0x051a61f19118d3b8L,0x89207fa2cb251fb6L },
37189       { 0x32247676bbb0e12dL,0xaa1c59822900bce2L,0xe7beff9c7df4f6c1L,
37190         0x595fd551757c1449L,0x2fe91299650e8961L,0x2db30033f480bf30L } },
37191     /* 27 << 161 */
37192     { { 0xe796c05d110c4d7fL,0x12f87395d4af6817L,0x849cd9e6b5512cb8L,
37193         0x23b8d0a4adb71290L,0x28cc808bee64339fL,0x3072d46fcc27fd1cL },
37194       { 0x8d9183af47f675d2L,0x9959aa9102c84561L,0xdff7591708216e03L,
37195         0x868c237abd01b2f0L,0x4c00c229a53e639fL,0x2c0667fb07d69862L } },
37196     /* 28 << 161 */
37197     { { 0xb4d2324f9470e571L,0x3af515979ca353e5L,0x479a3a796ae5778bL,
37198         0x387958a7fb1d9c91L,0x4e606558cf91edc6L,0x428384ca495a3b00L },
37199       { 0xa49f67da10f7146fL,0xbda553e08e25f80fL,0x21b034c4cb919bc6L,
37200         0x1fb454bfa7930462L,0x1fb2ac9b255d7fd8L,0x491cceff8b197e6aL } },
37201     /* 29 << 161 */
37202     { { 0x0a0e0cd91f5a179fL,0x699d872713841e78L,0xfa93f774fc47f9cfL,
37203         0x8fd0019c02933131L,0x128efed95aa46834L,0xe20226fdf080cb8dL },
37204       { 0xf7b05fc3000445dcL,0xcc818da1f52f5ddbL,0x0fa803d07299267aL,
37205         0x99cf0ab4f9f172a0L,0xb5dd3c36b08d03a3L,0xfafa550ea1c2f73dL } },
37206     /* 30 << 161 */
37207     { { 0xdda52c89d2da4e36L,0x0348948d5c333386L,0xe3a5be8b37917590L,
37208         0x42488ae238e4aaacL,0xa6ecb5be7a44eb6aL,0x3bfd640ea9b27b56L },
37209       { 0x23b8d107bd05946aL,0x01018c45bb8034bdL,0x1ffc958cd2e058fbL,
37210         0xeadc93953fd43516L,0x0659b83ea0491dbcL,0xc36115008cdee521L } },
37211     /* 31 << 161 */
37212     { { 0xc0f3761c034b0a6eL,0x2c4ce5481fb66b85L,0x7a5d3143410698abL,
37213         0x4bc07a795d59e8c5L,0x176a10eb4d19ba85L,0xa8a68c5526dae045L },
37214       { 0x7eed57fb21625985L,0x33ef04ae16c62e63L,0x78d0acd4562454bcL,
37215         0x5878d7f2a44a1608L,0xa51a423a0cf11971L,0x1934e3f2f21fd6ecL } },
37216     /* 32 << 161 */
37217     { { 0x3f2b5bd4b4805410L,0x201ca7a9f96c5ee7L,0x532ef2db94256fe1L,
37218         0xacbfc459318ddb03L,0x2375f9fd5f24c8e1L,0xd27c479b370783dbL },
37219       { 0x1bd461e856541ae6L,0x78f054a77f7ea49aL,0xc9f8777d8845f315L,
37220         0x81aed29697fc92c7L,0x9f2f8d7949929540L,0x7531e78bff5ebfe0L } },
37221     /* 33 << 161 */
37222     { { 0xd4710d5a16ba6a11L,0xb172d8a0e056d27aL,0x01879d2b8301e5c0L,
37223         0x100c3e706f6a3396L,0x4a33d4a4e4e1cab1L,0x48016f0f08017d74L },
37224       { 0xbde9e0f18cec4fb8L,0xd8604899eb15c26dL,0x17ac5d884a21f615L,
37225         0xb8f1e7060cb0cddfL,0x0ead85644a0d51c2L,0x7bff69bdfd6bafa5L } },
37226     /* 34 << 161 */
37227     { { 0x028acd1cb6b73820L,0xc931f4bc815047a8L,0x22c6159f1ede2c60L,
37228         0x571dd40c99a4820fL,0xbaf08be0b450f472L,0x6475536aeb5bb639L },
37229       { 0x033568e4d984d0c7L,0x2ab7dd4885e910d4L,0xb0d76698d0c632ebL,
37230         0x954d00f3e3c34a46L,0x53e8772de651bc5eL,0x4910b07b6e3564f6L } },
37231     /* 35 << 161 */
37232     { { 0xe1550b37e758fcf6L,0xfea2446f763120abL,0x5db50b38124f80e6L,
37233         0x5cc28a7830c3301aL,0xa935846fd950d5b9L,0xae3e87f2ce43ebe3L },
37234       { 0xf033b25b7d0776a5L,0x941d186e882c5916L,0x0430c4503d6d4f7dL,
37235         0x4e0641c0726f30ccL,0xdfcdbd1626c66c27L,0x43c4590ceb00e495L } },
37236     /* 36 << 161 */
37237     { { 0xd8cbdd8b70435ca2L,0xede7fb3675af3a63L,0x6c1fa971090b36bcL,
37238         0xdd2292eb85455ed2L,0xf9c3889c7fbe5041L,0x2ec87c15506d605fL },
37239       { 0x2691b0a28b099c25L,0x27961c8b89944e21L,0x8e9e18a5147f5304L,
37240         0x6a82e35baf7dce25L,0x6745339c32a4bbc4L,0xe0bf0e0ee026676aL } },
37241     /* 37 << 161 */
37242     { { 0x3c6fd1ab352a43fbL,0xe57e7f8cbd68dbffL,0xa4a5b74e9ea30f41L,
37243         0xacea695d2d5a3a34L,0x183be19adc8fe4d3L,0x22fce6281b9f9d1cL },
37244       { 0x8b1ae75da5d35bc9L,0x213face52c673f82L,0xa879851d6568d549L,
37245         0x327c59937f8d8112L,0x56b982e2a7869b71L,0xc77afa6110bb8086L } },
37246     /* 38 << 161 */
37247     { { 0x1dcd57541ccadbe8L,0xd2d8c36512b37773L,0xc1a7a5b7d50e8680L,
37248         0xab1a00b3e19d155eL,0x58f4bcce7a9776b8L,0x1c02df3320d9d7aaL },
37249       { 0x24f00d31db8cea6fL,0x2680b029d4aa0785L,0xf3db2889c48587f5L,
37250         0x1811dd2521a7fabaL,0x5836964bbf820746L,0x3b118bab97aca83eL } },
37251     /* 39 << 161 */
37252     { { 0x14babe6321d76845L,0xf7b4c662c60f5934L,0xbf212c4434de5b23L,
37253         0x57c478a35bdf0a35L,0xddecc21535dc8714L,0x1609b7401571e91aL },
37254       { 0x41998697ba45b40aL,0x6ef382d468cf383aL,0x77a24c1488c0ec9cL,
37255         0x0a5e245297b377a4L,0x2b9d72bf18f9804bL,0xa4c21326f51ddaacL } },
37256     /* 40 << 161 */
37257     { { 0x397049f4c785c7baL,0xa87db27da1decf9dL,0xce6d5ec1e7862c0cL,
37258         0x17a98db834350bf1L,0x6ceccd8030ec8d74L,0x4790cc07bcab4aa8L },
37259       { 0x4378b1feb4f771a8L,0x3c54588b404dfcbbL,0xbddf0faa8d60f86dL,
37260         0x987583da3573271aL,0xb0afe4ec4b8f8032L,0xb5c44605b69d03f6L } },
37261     /* 41 << 161 */
37262     { { 0x7f69e8bfed7d4230L,0xfe54dca7d8ee8cbeL,0x6ec2b75f71b72d99L,
37263         0x97e2b30f8dd8338fL,0x9916dcdbbc75bf05L,0x22f4291aad5c114cL },
37264       { 0xb6af2e86f9ba5c98L,0xdd7d738dfd6fc5d8L,0xce7af7d544649034L,
37265         0x2979be5cd163b098L,0x5acd51858db8d84cL,0x82b0e4a5ca64d1c0L } },
37266     /* 42 << 161 */
37267     { { 0xf27f5f4f480ef46dL,0x2f49f44fcba811f7L,0xef40508d43961b6cL,
37268         0x0f6778e8df9fb37fL,0x97aff7e8446864b5L,0x29aeb86d4d264e1eL },
37269       { 0x48baa1984901daacL,0x91ade9db02b483cdL,0x00952a61cdb6abc4L,
37270         0xa1a51250de7f22c9L,0xe6adfaacc19ec8d5L,0xa7d2f066fc39838dL } },
37271     /* 43 << 161 */
37272     { { 0xfbe20a8e270bcf2fL,0x9882e7a0c35c60f9L,0x74d8e63f560e716aL,
37273         0xdc689649bae281e2L,0xd454571036d9b680L,0x0a0f1c681740ca0bL },
37274       { 0x228dd692dadf3782L,0x6ab0bede632d6e56L,0xae2f5535e1b7add3L,
37275         0x2ce1c6fece308fa6L,0x7a11b255db881355L,0x903007107bee5bb7L } },
37276     /* 44 << 161 */
37277     { { 0xdd55c21a9f1a57d6L,0xc9e1dcf9f6043ee3L,0x0385e3f36747e2baL,
37278         0x6511555a932e55b5L,0x7f4053b3700e73f6L,0x23adf65d992916a2L },
37279       { 0x4664bf231bfc40a3L,0x8400e8f27974d63fL,0xb70f104dcff08198L,
37280         0x4c44382f4d1710afL,0x5593a751374ec807L,0x6af17e84462c6112L } },
37281     /* 45 << 161 */
37282     { { 0xc1ad3eb7b8f1f38dL,0x74bb37c88d462e67L,0xd127b6e6246b0388L,
37283         0x3054aaf0824defffL,0x4e981d2e487809aeL,0xba76b7b805ead528L },
37284       { 0x0a167834a7a32c6dL,0x3451ee930268c370L,0xab4da0971b625d09L,
37285         0xdb94f9aa304e60b4L,0xf3bea685ab50c663L,0x8d929a0142d4c11eL } },
37286     /* 46 << 161 */
37287     { { 0xfce03e6eaa911497L,0x32cba5cf546ab5ecL,0x631123d0b1a71e10L,
37288         0x49f3a80906bcdeafL,0x783373bcfc538ca5L,0x3590890ee4b47edaL },
37289       { 0xb5c84fff39ab2df0L,0xf681be9ac737b24fL,0xf37bbc68b2b0052cL,
37290         0xd9f03cf6fde04d93L,0x23171bc2e43803e3L,0xeda51460040de801L } },
37291     /* 47 << 161 */
37292     { { 0x0e09a74d0bccf0d7L,0xfb429a675b58037aL,0x1f2660d2200b89ccL,
37293         0x489b332e04efc617L,0xb53d4f65f38ceeb4L,0xeaaf759546c4aa4aL },
37294       { 0xc6cff1fa714b9f97L,0x6a647072ec0dd5b7L,0xcbf59eb1637384bcL,
37295         0x043003cd2240993cL,0x134cab640497f9afL,0xcdb44a4ca9fcc655L } },
37296     /* 48 << 161 */
37297     { { 0xbd9a66d6543b3e41L,0x2948c0a62ae73774L,0xa75151dfef38e9b3L,
37298         0xa3348ae5754fb3fbL,0x1218fa8f13069b72L,0x532bb0510835dfafL },
37299       { 0x2121a98edf2be3c6L,0x85980de69e5199bcL,0x1b23a4be1a1eb6eeL,
37300         0xb5c48b92adeb3ae5L,0xeebd305dedea2b45L,0x20543f04c37198eaL } },
37301     /* 49 << 161 */
37302     { { 0x9eb2d599fa727a5dL,0x27cce415105643ccL,0x2face9e8c06035deL,
37303         0x967f70e4c5d916cfL,0x477224ece7cdc451L,0x70a3de4ea9a34198L },
37304       { 0x84ebd23a62628f21L,0x517cbb6097f55e75L,0xa4dc8d8ccbfaa795L,
37305         0x821d53c1a9c17b12L,0x04e94aea5124d5a4L,0xc72432c083efbc58L } },
37306     /* 50 << 161 */
37307     { { 0xb7a2090999f73a42L,0x019bf3a630db0901L,0xcf0c2a7281cfde4fL,
37308         0xf656a2117b0b04f8L,0x88cedc1896043e90L,0x4482c3786ae4c551L },
37309       { 0x169f25d3dc70c774L,0x0f8cc86cb552fbe4L,0x17d0556b88d2f3eeL,
37310         0xf5af9d6ff864ba64L,0xcd509d82f93dbf7fL,0xf00c76f51b98df35L } },
37311     /* 51 << 161 */
37312     { { 0x19fbeb37856e35a3L,0x1788055c88f36390L,0x9da657f165361c9fL,
37313         0xc9f327b7e35a36b1L,0xdc388bcb04b9174fL,0xa79bf7d3349a87c8L },
37314       { 0x865958b202289b24L,0x4096845ecebc4686L,0x1127085b42ce096dL,
37315         0x56f31d12735241bfL,0xe2239ab543b89a15L,0x477cc5b3a6a1f0f2L } },
37316     /* 52 << 161 */
37317     { { 0xc44c81525d54607fL,0xe742a6f35c9ab491L,0x50df96d9be8c2ed5L,
37318         0x3aa8c9b4e7f5cc4fL,0x577d534c3f12e8b5L,0x03f9573da33a57b1L },
37319       { 0x9172e1aec5c0c895L,0x64fa9822a2e19442L,0x17db2388178a10d5L,
37320         0xe75a6bdc2755ed55L,0x6a6d9dc3f9188333L,0xdd93a3b83eda0c41L } },
37321     /* 53 << 161 */
37322     { { 0x353d1f4bad0d960fL,0x6fbf4355846e07dcL,0x2156ae3c3a1bb429L,
37323         0xfa95a260442e6e21L,0x659a856ac2b31d7dL,0x9b56cd6563ecb2d0L },
37324       { 0xac9ec96823a787b7L,0x4102d82e320742deL,0x470ee0ea50a422a2L,
37325         0xd3ca8414af386491L,0x28d8994b1a0d8192L,0xe601e4e2b3f117dfL } },
37326     /* 54 << 161 */
37327     { { 0x906c071c4e9ab844L,0xeb1a5806f085a058L,0x2f14c3ac176e2f59L,
37328         0xfc1a3020bd19f909L,0x5e67d789ac060e45L,0x75dd23a7b707084eL },
37329       { 0xb9dec51a07e89974L,0x50c9cd0b38f97f3dL,0x368b0f53e14cd6fcL,
37330         0xea4c7f8b81ab93b2L,0x774ca31d1b7aeb66L,0x94c14607288f51a9L } },
37331     /* 55 << 161 */
37332     { { 0x18c41b62fe32b90aL,0x2e11c7e6be96e1aaL,0x72832e8c428b9d81L,
37333         0x93f63cc0058ca451L,0x603f18af7cc827f1L,0x31c8b8fee038eb26L },
37334       { 0x21158b24411cb335L,0x48dbbed70d9e953dL,0x445e244e4d62615cL,
37335         0x2f5309ac28ef4922L,0x12ee44c60d4dc305L,0x7dc0363f56f7677aL } },
37336     /* 56 << 161 */
37337     { { 0xf73471b5ef349ec5L,0x014dae75565aa6c7L,0x57cb497dae082cefL,
37338         0xdfcbf2b5c3e563bcL,0x22149c0fd1125f95L,0x529f419b425bc019L },
37339       { 0x049476deaee2094cL,0x3490c0490cbbb583L,0x56c5c62d1256424fL,
37340         0x0a118ee541bc66faL,0x0d8e9ff8296ada14L,0x34356e8b0134f8c5L } },
37341     /* 57 << 161 */
37342     { { 0x5e41ebd6eb28f97cL,0xe054a055d6a393f8L,0xc0a19e38db6555e3L,
37343         0x1b40c80fbabf4f9bL,0xfca17ae2780d5107L,0x89ae096f379701feL },
37344       { 0xd79be295b53ebb0cL,0x3112d3a5942b2247L,0x6c1f44d30de10f30L,
37345         0x2a17fffb0041f800L,0x13082de044552d55L,0x319aa9c0cd11c85aL } },
37346     /* 58 << 161 */
37347     { { 0x63ea1a6ae760373bL,0x00f2addd11742d8cL,0x46b17c9cafdd38eaL,
37348         0xf4121c5a4c7e78d7L,0xbeb70ef90048e4f0L,0x0b60c2b6bf7f7348L },
37349       { 0x4bbadf7632969689L,0xcb6a8a20e12708e4L,0xc43ad55b5638eb7aL,
37350         0x4a72b02b3d27bf7aL,0xecc95d92e5a54c30L,0xae52514bacc45d53L } },
37351     /* 59 << 161 */
37352     { { 0xbf5a2b5132d1f651L,0x6a2a74116e438838L,0xfa6353dd6c067d61L,
37353         0xf6918622b96ba12fL,0xf0fa254d45f595f3L,0xa0f0cb4b92f680a0L },
37354       { 0xf13ba734463e3f27L,0x7e3d4eb1a32d7f9aL,0x348baaf26f6502dfL,
37355         0x8021a9977b830e5eL,0x503f38ca55caf601L,0x27dde9e8f4bb74b6L } },
37356     /* 60 << 161 */
37357     { { 0xfd5a49310eb63b3cL,0xdb9f1a1510175713L,0x044d42c23e11c321L,
37358         0x5561f2e9b7961e8fL,0x70b3f7557ec7c597L,0x5dd9671235aed561L },
37359       { 0xc6cdc78ee1bcc2b1L,0xebcf6f87f1117aa5L,0xef470e0ae3669f78L,
37360         0x87b13e0fd38e0fe8L,0x01bff01439c755c7L,0xa66f2521c37529f8L } },
37361     /* 61 << 161 */
37362     { { 0xac56a8b223f78e49L,0x908c4be58708f0b5L,0xa63aa4191536f6b0L,
37363         0x8c08578fe5a95771L,0x5d2d1d6b9c2ae8daL,0xf3e4ef12f1527cc4L },
37364       { 0x46c1ac13920a90bcL,0xc0bc661d28ba758fL,0x9114e016585ef450L,
37365         0x8ab6a1f6e899a032L,0x57d4089606b658baL,0x2ef87621eb83235fL } },
37366     /* 62 << 161 */
37367     { { 0x033a4d4c4ebdc925L,0xff239a3efe1b346cL,0xd7ab2fb388d03949L,
37368         0x56ce2e41bd6e8e4dL,0x3826aff0e55da68dL,0xc9c7ba7451267f98L },
37369       { 0x5264a48ae6710c7cL,0x3635f1d4e7605975L,0x53a1849a94be903cL,
37370         0xe4fc3617128d5859L,0x7686804d7e4dd785L,0x6f04942d2dbcfe4fL } },
37371     /* 63 << 161 */
37372     { { 0xe80b7f5562927d6eL,0x92b98c350c0cc89fL,0x9522896d15117facL,
37373         0x7a224db5fdd3ffcdL,0x9502ecd8fbfc8908L,0x4e1dc71ac593105eL },
37374       { 0x052aade62f0536dfL,0x0c7cc371f324268aL,0xe7c62f2ccd843bb4L,
37375         0x77d48fa36df2c231L,0xb2c29803cb8f68c4L,0xad7ccf519bb9fddeL } },
37376     /* 64 << 161 */
37377     { { 0xd0960bd80fab968cL,0x6899e4faae028db0L,0x975ccc77a9850916L,
37378         0xb41bd531e5f81554L,0xbdf8ab57c8cff2c8L,0xea306a01f5822be3L },
37379       { 0x1f0ac0e7befbdbbeL,0x72f4b0e960519f87L,0x22bd8b82e3cc86abL,
37380         0xc43bde8d2b2beaeeL,0x8168781e412617ffL,0xc5610627b7ee7096L } },
37381     /* 0 << 168 */
37382     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
37383       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
37384     /* 1 << 168 */
37385     { { 0x0869457a01a8eb44L,0x522239857a7bedd7L,0x2c04b0c600057505L,
37386         0x468be6e80b09adebL,0x2f3bf32b6f81474fL,0xf54f949da712ccceL },
37387       { 0x292cee424cdd8f2aL,0x3d9fdf6b9c221be1L,0xe54da66156f47b2aL,
37388         0x2ca76835840b5d1bL,0xb52adb6a8a6e8cf6L,0x8b416a6bdade153eL } },
37389     /* 2 << 168 */
37390     { { 0x65f7d2c18565afc9L,0x764c897170fa7b82L,0xe268634c986436f2L,
37391         0x6334d8d133356165L,0xf17164269ec7957dL,0xae834331b8093983L },
37392       { 0xedb1fe5cd2dfcce7L,0x6195b86368463e5cL,0x746e5f4da691b665L,
37393         0x61171291e1e2727eL,0xbb4aa8f16f27b029L,0x1037657d7f42c197L } },
37394     /* 3 << 168 */
37395     { { 0x2af8bdfa970f96adL,0x19d09a6dd0c86e6dL,0xd57fd5ced7046d2eL,
37396         0x5ea025f7d545fd33L,0xe2ccb6f43161ffd7L,0x3ca5286209406242L },
37397       { 0xf3536d60b5c90905L,0xd086e3b9d5b290f6L,0xfd15b06a5cc55444L,
37398         0x61b0febf9a9e2a66L,0xdc3c0576653dfd02L,0x357774230a8ab51fL } },
37399     /* 4 << 168 */
37400     { { 0xfe19901b0d5b855aL,0x5facb9552f745022L,0x92fd012556c4ce5cL,
37401         0x23172d65938c89abL,0xa71f8a33aaa587b1L,0x511a3745b55c9c50L },
37402       { 0xec005f6a7185086eL,0x6dfc2761f894c6abL,0x98a4d67f9e26361fL,
37403         0x7f0a2b2321389c25L,0xd158820795ffbceeL,0x4d6b29ab9f36a888L } },
37404     /* 5 << 168 */
37405     { { 0x5ffec1d78c04bc6eL,0x35f052d16ca0dde2L,0xfbe3844c649c850bL,
37406         0x450263e610fa337dL,0x44f7c8f40280773dL,0x27de5d3ce896966cL },
37407       { 0x2587f47598d0378dL,0xbd49c97f4e4f6e49L,0x9e902f667071543aL,
37408         0x03398aae06577b74L,0x030926d6910bee13L,0x5576575bffa92cecL } },
37409     /* 6 << 168 */
37410     { { 0xe4ee33460562cd7eL,0xd1d385a3f01ba45eL,0xd817ca667ce11848L,
37411         0xda222cddcb69c7eaL,0x74ac74709d680afeL,0x3770357cd9596ca8L },
37412       { 0xdff57da7f7759bd6L,0x090426be20d5c726L,0x71c0ba28b7fbc1b0L,
37413         0x60faab1c13d4ed0fL,0x6fbe3567ea3a2ef2L,0x0dd3835c4e577dffL } },
37414     /* 7 << 168 */
37415     { { 0x9b758b512ce27e38L,0xe4148475a39855e3L,0x4669b3c39ee88a77L,
37416         0x3f36a671105e1ec0L,0xd0f30e5d9e88ea13L,0x6346df15baecbaadL },
37417       { 0xec65be65cf4c6510L,0x843efca194e1989fL,0xf7195d29942ce52bL,
37418         0x12201877d3ce28d4L,0x9c962aa1a97fc904L,0xc4fedb3465c5a55eL } },
37419     /* 8 << 168 */
37420     { { 0xeccb421ed0a701a5L,0xad4cb9a5b60cd286L,0xd344da9e05a53972L,
37421         0x3a8035e07bc99feaL,0xe0214485c0f77bf5L,0x50ada30ee54df78aL },
37422       { 0xdef45af64ec2d576L,0xa05d61845f9a8678L,0xa9b17db1c337e017L,
37423         0x026a4f66b84671d5L,0x606142343b7d696dL,0x71ed9aaf81cfd22aL } },
37424     /* 9 << 168 */
37425     { { 0x62805305695a3f30L,0x6ce27626e28e8fe0L,0x507386af6a54f410L,
37426         0xf8c5f738cd5c7effL,0x3ab2db9e347e85d7L,0xf5b635b0b2161b68L },
37427       { 0x99009791be2e80caL,0x6dff3030c13910ddL,0x2beeca057ee8700aL,
37428         0x12616fb11ac7e09dL,0x38c9ef9f9037c2e4L,0x39181fbf9c140344L } },
37429     /* 10 << 168 */
37430     { { 0xcdd6aee47aa54433L,0xf5ecb432b80336f5L,0x690bb949a1380829L,
37431         0x219d659ca9c9d720L,0x74abf2dd7e5a3260L,0x405ee136025c55d1L },
37432       { 0xc5c592cb1cc878a8L,0x119a38be88b31ecfL,0x4fb00f82e94e39e7L,
37433         0x66bf72e59412c068L,0x9337c8f30821142aL,0x477216340c24ab67L } },
37434     /* 11 << 168 */
37435     { { 0xa6c7953457fe953eL,0xd70d3d2f3c76ae58L,0xe1e047b52c531c84L,
37436         0xc71f3a9973735602L,0xd70bdb0f7ba0628eL,0x280fdd4e0e3e3c0cL },
37437       { 0xb5a3f5823e414e26L,0x55b2eda8f44dee7eL,0x8e1d024b2f5dd828L,
37438         0x21f054eb3b1bfdf9L,0x3d3ae74cc554e1cfL,0xa0a5863ffc42ec16L } },
37439     /* 12 << 168 */
37440     { { 0x1b76a3c5439ada39L,0x818829cf89236ae5L,0x2277cb7a750f8129L,
37441         0x44aa462a4d46502bL,0x7a12e1e164f06dc8L,0xb9a3300dba5630cfL },
37442       { 0xd2cc8d9c55b05f4bL,0x6d0b0b88a700be7aL,0xa7be99699617500cL,
37443         0x2b5b8deac03f8a50L,0x712f703e785b3dfdL,0x96a5a60accf93950L } },
37444     /* 13 << 168 */
37445     { { 0x9838155fbf9f72c6L,0x3ab3cb602c10e57dL,0x7ac228ef14bcd75eL,
37446         0x2c167e15027923fcL,0x678869d1267471c7L,0xeba35e857ec3582cL },
37447       { 0x22d290a9a3478eb3L,0x542092ca1309aa14L,0x8bb5c69be2e5d3acL,
37448         0xf83c5a0a81652736L,0x9cc576227280cd6dL,0x6653436f3b0f49a1L } },
37449     /* 14 << 168 */
37450     { { 0x7ad1f1bab497d900L,0x9d0512236c9dd5d7L,0x0ed27e5bffed3df8L,
37451         0x659028a775d2fa72L,0x69bd68154581f377L,0x142c2088e2faf671L },
37452       { 0xf9c1b8a499b000ffL,0xf31d01b18f408d3aL,0xa7aa142f42b9d35bL,
37453         0xeb8aa74ba0495da2L,0x824cc32a59a1da45L,0x3f1fbe0ff5173374L } },
37454     /* 15 << 168 */
37455     { { 0xec9071a634238c30L,0x6dd6c38b88a0f423L,0x3adace72992e7977L,
37456         0xc90b941b1ae5166eL,0x052aa3e9e3e43a68L,0xe9b1976da733a950L },
37457       { 0x0e1ca28e5ff6c9dbL,0xd1bd4350387409a2L,0x5943cc7089155117L,
37458         0x8e85794f5feae20cL,0x0d118fd669768ccbL,0xc647179d53120895L } },
37459     /* 16 << 168 */
37460     { { 0xfeb984b3ee828fbaL,0x8273f830e2bd188cL,0x177ef97e3ca0a99fL,
37461         0x76d4796dacc000acL,0xbad0fa6eb140f51aL,0xb275656706ebc810L },
37462       { 0xf89eb78fa18cb32fL,0xcfc37eaea65285b0L,0xe2b29cfbb25e9d1bL,
37463         0x9388ea8fb4e7aef3L,0xee606c12e267e845L,0x6b103c549f5806d7L } },
37464     /* 17 << 168 */
37465     { { 0xb9a40e78e31fd643L,0x648cc34a97950a34L,0x85c5ca405900be55L,
37466         0x2e519cf12abb843bL,0x6f9d0a7f27436edcL,0x2f569c9d6694f363L },
37467       { 0xf6d1b325f6f1bd24L,0x01103c0d4044b353L,0x2d3ce56f3138b549L,
37468         0x5379bcf71c28bc5bL,0x6768220d08ac00d1L,0x973f92ff0152746cL } },
37469     /* 18 << 168 */
37470     { { 0x5e992944b37b0486L,0x0a334b92001fa124L,0x6653cded9c9ab466L,
37471         0xd512612fabac4da9L,0x636bf431c502b860L,0xfca1c0c2c3d20db2L },
37472       { 0x7073f293f85c40c3L,0xfaabc77acfba9eddL,0x58842eb97f9b570dL,
37473         0xe8cd4f53702aec24L,0x8975f4e6e08113a1L,0xcc0d7f17767bedd6L } },
37474     /* 19 << 168 */
37475     { { 0x5163bb51ae315a65L,0xf82ec4cdbe405348L,0xffd381a46b1801a4L,
37476         0x33f9b8ad2f6ba570L,0xd88c58a58ecc0000L,0xc0b9a639cfdad25eL },
37477       { 0xc78cb70fe3bd808aL,0xf54b86e573ce5eadL,0x111208ed5610a761L,
37478         0xba3579b0e3c8e27aL,0xbadd918c63b85bb7L,0x9e10da0b71bcd972L } },
37479     /* 20 << 168 */
37480     { { 0xf418e3f63766f2aeL,0x4a3ad3c8053ef1c1L,0xd01e5b5b560db262L,
37481         0xa583edc7c02bf4c3L,0x7c9f706052f318d3L,0x0852556f1f5e1ffeL },
37482       { 0xe1c70aa7feb0e63cL,0x59f0a3f989a8c058L,0x4aa4cf021ffc0adeL,
37483         0xbb880e4138a78632L,0x35b0f7596f28f096L,0xf9c4fe17d5757d7dL } },
37484     /* 21 << 168 */
37485     { { 0x160303ded896adf7L,0x19a46b6c6beb8930L,0x33dfd962f010f74bL,
37486         0x03b699cc00e5610fL,0x17487b7595078dfeL,0x63bc614253f3479cL },
37487       { 0x43f3d994858d5b8bL,0x383349349483c0ffL,0x47c917a67977142bL,
37488         0xdc50fb80df7eead4L,0x4e3a1d3fb5b82be1L,0x091af8796d7317b7L } },
37489     /* 22 << 168 */
37490     { { 0x783e5066af151a9aL,0xec0a9c175466df17L,0xdecd12310174b0adL,
37491         0x654af66a3b2aaa45L,0x849d64e5b1fcdd11L,0x7e8e2ae6d05af56cL },
37492       { 0x12e887b7318a6184L,0x42d1445554ed59d8L,0x2eafeb48ee54ddc5L,
37493         0xd1f9e6b980c94a8eL,0x5ea691e3263696c0L,0x7f42f3796e03eed3L } },
37494     /* 23 << 168 */
37495     { { 0xeeb8accfd69b82b9L,0xb4c4988ae0b61d73L,0xb78becf19df9b59eL,
37496         0x13274f6236440c93L,0x33d287f5697d5a77L,0x391fe6129af4053eL },
37497       { 0x986c42b21c16e858L,0x23f5d1dffe04125aL,0x2f57ccb3af9541ffL,
37498         0xe5b4eec70f1a8bafL,0xaad23ce7646c1b6fL,0x69495ee5a6ff96abL } },
37499     /* 24 << 168 */
37500     { { 0x78b8879cfd6376ebL,0x22a76461c01e1edbL,0x6a44be39369cf0c4L,
37501         0x6653670d5ae54539L,0x257bd7516fb43ad0L,0xb3ac371512baffddL },
37502       { 0x48659d617548eabbL,0xd8f931f80cd468cbL,0x98f0241549e3b531L,
37503         0x90b0d71670df011fL,0x26d73c54ab98f066L,0x06591ec988475d5eL } },
37504     /* 25 << 168 */
37505     { { 0x6fa72e3518f18e71L,0x6c04fe2d8123ff14L,0xc48cb53a197481a9L,
37506         0xf059db349860e48cL,0x35e8341ace46ca7dL,0x880f4ea4b0400f7dL },
37507       { 0xb4c5ea9acc9cc40aL,0x6522c768e2555fa3L,0x95207f39ea2c32e6L,
37508         0x7b6fc09fa8be60e1L,0x772b829f29902652L,0xb7936b90af6a48dcL } },
37509     /* 26 << 168 */
37510     { { 0x409e3b1109758457L,0x59dd0a8c1dea73d9L,0x528906a58fb18a01L,
37511         0x6fa55967a17ffb33L,0x9523cc3d50edbcb2L,0x35600b3e44d43541L },
37512       { 0xc3a7d22c8f87dbc0L,0x5514c967c1b225abL,0x78e5701988304a74L,
37513         0xe9b417ba35f3b54dL,0xb72a243c48eea230L,0x4e173eaf291ee52dL } },
37514     /* 27 << 168 */
37515     { { 0x79b854ca2127c795L,0xd9457d8f86657844L,0xf8c9e6ef186668e8L,
37516         0x84c8855df913c2f6L,0xf207d36ad641cc12L,0x7be9b5736105ce0aL },
37517       { 0xe72cce1974ec078dL,0xc4f47413d09950c3L,0x640bf6eb3974554eL,
37518         0xf880dcfb844497baL,0x3744626999bbcfacL,0xcf1712f4316f4d64L } },
37519     /* 28 << 168 */
37520     { { 0x627f6328412b84c3L,0xd427e977a04545d2L,0x5b0145bc104f25c2L,
37521         0xa6931c4f2ac7ad62L,0x407611431f8d42f5L,0xfda5a76be7f8a0b3L },
37522       { 0x4f1ca5cffe0946b9L,0x6def7b9fbeb2d427L,0x984bd4bbc9a0d136L,
37523         0xb9a778235b3af1c1L,0x04ee66ae38ac2087L,0x63374ed926d9dbb9L } },
37524     /* 29 << 168 */
37525     { { 0x68088e9c3983deb9L,0x2c95ecaa2ed99988L,0x371af002917f200dL,
37526         0xff33aa5dbb4ff0dcL,0x1dd5fcf2e47bbd6eL,0x1624b973e75f73ecL },
37527       { 0xf6ce0e9db9722af3L,0x8bde5b8818226fcbL,0x243753fc5b5da478L,
37528         0x3b53e0e3bdf88daeL,0x59f8c86f325cedb2L,0xabd4076d70fb9681L } },
37529     /* 30 << 168 */
37530     { { 0x1996761db8759af1L,0xfb85cdd8e4a705f5L,0x2ea7aa0b35111725L,
37531         0x23245d4157a17f4bL,0xcbdb650e0d00eb9dL,0xb40823d9e23a4a3cL },
37532       { 0x041bfb67229163f8L,0x020ad3c16d47b83dL,0x3bc8975d344c8ebfL,
37533         0x287efd06d91ff408L,0x1ca5d75a2059106bL,0x4ff27af3b90c5d66L } },
37534     /* 31 << 168 */
37535     { { 0x416b7c61ded914e8L,0x1aeee7d007ad4237L,0x59d5852476c2b7a4L,
37536         0x427a102c98665f29L,0x8504aa8d2a1aefe4L,0xef2dbeadc183a736L },
37537       { 0x5cb5f222f533358cL,0xf2ebb47d36b0d678L,0x1de4a0e7f2c2cf99L,
37538         0x62613994ea95a161L,0x68a86f4012d66ed4L,0xeb12fe75b2af52f3L } },
37539     /* 32 << 168 */
37540     { { 0xcf947c0644ba39e6L,0xf5d5216cedfe78d7L,0xd00115c05f1835c9L,
37541         0xdf084152d8c79d90L,0xc0c3a6846db5f791L,0x40514451749b18cdL },
37542       { 0xd314b7d5734df3f1L,0xbccdd3f07f541415L,0x97ed5af06855a942L,
37543         0xea84ae9ee9d02ab9L,0xb87e90343238a5d0L,0xd12d25c3650a0eabL } },
37544     /* 33 << 168 */
37545     { { 0xc3747c584f9d2c34L,0x493a0adc95429c92L,0xf9b5916238a679ebL,
37546         0x04d500a16bac07f7L,0x8938f4f96a809676L,0x44ecbbf0c5b25a4dL },
37547       { 0x3b68705504768400L,0x6a432e14b4db3907L,0xff82fb56ad375d2bL,
37548         0x87f59f97944210c2L,0x2b680b2051445242L,0x1e0986466cd75962L } },
37549     /* 34 << 168 */
37550     { { 0xdd2eea82672e5a4cL,0xb05ef9ebccc68d94L,0x626ce368a3fa4215L,
37551         0x6e376f67fe46bd46L,0xaed7a0bc33c4f169L,0x4a92c6093af5c4fdL },
37552       { 0x6615245fa690fb49L,0x571d2d870d64f04dL,0x6a45df34641ce79bL,
37553         0x045ddbd02655d316L,0x2b6c574db4fbc42aL,0x41545fbc5b2dbbb8L } },
37554     /* 35 << 168 */
37555     { { 0x484996b97d8f1eb7L,0xf72f3a8110bd1585L,0x418e00e7b67eb27fL,
37556         0x354e56c97877c18fL,0x7f11f5040a8b37f9L,0x66591146ff58764dL },
37557       { 0x816ac849ed0bfc38L,0x85eaa6350a50a99eL,0x7fa62d9c5bf4995aL,
37558         0x77840d5003413385L,0xe4f023bde83f9fa1L,0x2c5f8e1d9cfa7578L } },
37559     /* 36 << 168 */
37560     { { 0x1473b55b86a515a9L,0xa9e3230a3b337c64L,0x7e8bf9049db668f1L,
37561         0x1db2c25ef27f9fc9L,0x0c1086072d9e467eL,0x4505579aa3f00d52L },
37562       { 0xe2ad661b240400a7L,0x8022294c11af4874L,0x29e9037078bba8e8L,
37563         0xbf0fbf08f6baca04L,0x2e46d2b74101fab0L,0x66065490c61089e6L } },
37564     /* 37 << 168 */
37565     { { 0x18b01aa935dde51dL,0xa7496997a7d044b8L,0xcd9c467f44c23d2dL,
37566         0x96211b86659e4a5bL,0xa2a9000f3e17b717L,0x7af9c312dd90459aL },
37567       { 0xf0d6c24394547203L,0xa76a23dbd77cc691L,0xe1b7fce10ef364deL,
37568         0xe08c1d0bb689c810L,0xb75bfacb0a43ca02L,0x1b7afea5408ac99aL } },
37569     /* 38 << 168 */
37570     { { 0x3b1abdb85a4a8a23L,0x8f52060c4d68bcf2L,0x7408306a00ab3146L,
37571         0x652ae3064b86b775L,0x276a14a0b0695b00L,0xcf8af11f1b771254L },
37572       { 0x3fafcc63b91118b3L,0x6c49000a73bacebcL,0x53852d084e3f3d6eL,
37573         0x78977e91fdfccca1L,0xe843cbca6ae9ea5eL,0xa99831896bb8271bL } },
37574     /* 39 << 168 */
37575     { { 0xf77b0a7387534a6cL,0xfff419f2f5b0c6dfL,0xde3c3b33357205eeL,
37576         0x867eb3a23c8ec9d6L,0xd28bed3263a99b18L,0xf5fc17e4c1573146L },
37577       { 0x30cf41e5821641feL,0x84b1970e225ab57fL,0x6bf707325a1e8ba0L,
37578         0x7bfb3bbce3cf38d6L,0x9f362787a661e876L,0x6d9137c86c0a16fdL } },
37579     /* 40 << 168 */
37580     { { 0x2131ce5b09f8a1cbL,0x7b373ed28ab129e2L,0x463cc8d677c1292aL,
37581         0xa9b7cf6594ffe9c5L,0x129125ceb99bfc4fL,0x819b42849820d323L },
37582       { 0x3f70976376541a41L,0xfd679ae5e32c7a7bL,0xc39a208df65b6b3cL,
37583         0x1c22ebc050002745L,0x268f19dde2bcd202L,0xfeac809c9c3d4266L } },
37584     /* 41 << 168 */
37585     { { 0xc5ad8903af14f8a1L,0xdfcd207c3993c99cL,0xf65f8260c7c1fd57L,
37586         0xa1573b3d41be66fdL,0xeeeb9ea476690f79L,0x6a6338437129849dL },
37587       { 0x22eeb38623a7bfcfL,0x258fc0743393e894L,0x008efb477ce9602aL,
37588         0x4bf127b699c7b279L,0x150da482fa1bfd7fL,0x7b84744d293754dbL } },
37589     /* 42 << 168 */
37590     { { 0x3af9919db2183277L,0x7f5990fb4f6182ccL,0x17603db034f716d2L,
37591         0x6b79f6538f135ad5L,0xad9189e68092d128L,0xa5f3ab8efc6628c1L },
37592       { 0xa36b978e84b6d30fL,0xf2a7e1c64c001f26L,0x2acbdfd676e79beeL,
37593         0x71b5faec86f6d6c6L,0x23d9b7c849b0e5d7L,0x36ea518212fd4cccL } },
37594     /* 43 << 168 */
37595     { { 0x14a4af0f59df1cf9L,0x37f8641dfd7cd2b4L,0xfb6aa5d0244434b2L,
37596         0xb85f8c8b5d5bbd63L,0x833e76baedb92f97L,0xbcd9d7b50d7a2dc2L },
37597       { 0xb233f07ff0e0f06cL,0x453f10c4fcc06efcL,0xa4e8f306128a167dL,
37598         0xbd6df4690d0c09cbL,0x2b5db66b7168ecc6L,0x7ec02c77f29bcecfL } },
37599     /* 44 << 168 */
37600     { { 0x0746783787dcdbdbL,0x4cce33be320493d8L,0x9ab08cbe713c7746L,
37601         0xd6f0c1de9c6dc5cbL,0x194005382ac03761L,0x3fc11f38d0547be5L },
37602       { 0x66b378ce819fe3fdL,0x6a590acc3700fe7eL,0x4c976a728924b396L,
37603         0xa5006d8d70b9b250L,0x2fdce1b212b85f9cL,0x5858f7ce495f8f1cL } },
37604     /* 45 << 168 */
37605     { { 0x3f2b5e295de2948eL,0x84554eaae1a4a962L,0xb4e55f1293db9addL,
37606         0x9260e3eb61b22484L,0x22a898997b1a6d10L,0x571bcd3af58d1ce3L },
37607       { 0xd62db0edecc88a76L,0x88352f634af2cf53L,0x8d279316b61c73adL,
37608         0x7f898e09ec74d6abL,0x39b2b0c05412a81bL,0x623a5ea30644b6a4L } },
37609     /* 46 << 168 */
37610     { { 0xe876b53bdb0f6565L,0xd0dc323c4650204bL,0x0e4af31b0201643fL,
37611         0x486173207e8a0e6cL,0xe09183d457643a1cL,0x3c55bcb5ae8359b1L },
37612       { 0xa06078cb7b467835L,0x4d3a35d901b6bb3cL,0xd4f1d8233963fd31L,
37613         0x9c1b06093d4cce05L,0x55e368d5da550340L,0x50c3feee12c4b7b3L } },
37614     /* 47 << 168 */
37615     { { 0x6de0fcdaf0f97e84L,0x1f225d818dfbc0ebL,0xe27a42efcd2c51d9L,
37616         0xeff56879c0cb033cL,0xe700cb87c82e38d4L,0xc89a02d589d244caL },
37617       { 0x0b464846ad9c718bL,0xf8d5ee1f8de96d61L,0x2cc33c3dfbfd0960L,
37618         0x3ef549f0e199b6fbL,0x29f83f686c1597b3L,0x54ca37a3731712ffL } },
37619     /* 48 << 168 */
37620     { { 0x357540ab903ff177L,0x225280b8276af514L,0x33d273ac14d7fed3L,
37621         0xfef6b9ffd186ee3dL,0xa94c207101a7b1d9L,0x4ea3627450bc8bc2L },
37622       { 0xc68959c9fa98a918L,0x8f5ecceec7bdc262L,0x7a73a4fce6861310L,
37623         0x19bcac90c828330fL,0x73e3b66f7ef74fdbL,0x60f7698352d8f2f4L } },
37624     /* 49 << 168 */
37625     { { 0xda57f1a65645cb9bL,0x3d5d3190f0840240L,0x6a0c6ab101bce275L,
37626         0x38993676ad23128aL,0x54f7b5d7ea0da248L,0xfee930b38b04ccb8L },
37627       { 0xadb9034e2cf3bf1aL,0x0488b71ae9b608daL,0xa3e51e303bd1172cL,
37628         0x56dffa5844993c1bL,0x6b3211fa4cdcaf10L,0x223b2a43834d4e17L } },
37629     /* 50 << 168 */
37630     { { 0xb31f934134e43ed1L,0x895c99973c6b7f58L,0x360021084c465126L,
37631         0x7eb0bf6b095df89fL,0xde3b2fa3ac534af6L,0xd9dd9f55c22477caL },
37632       { 0xf52cfffc2092e355L,0x4ba071ac8d8bffc6L,0xafb61137abefe750L,
37633         0x2887d0e4cb62210bL,0x0eb2be515f4fc157L,0x8c993039438fa2f7L } },
37634     /* 51 << 168 */
37635     { { 0xfd2a61093efae008L,0x60fa269552f57cafL,0x3591e64f481c36c1L,
37636         0xdc2b9993c908a87aL,0x76bd4dea5bffb50dL,0x913a0458f70fb0f5L },
37637       { 0x45ea6c4c097bbfc3L,0x3ebe29d3fa9e90c1L,0xc69532426479c087L,
37638         0xdd1d24509abc7a4eL,0xa497b072d0fc7791L,0x477d71f9388ab90cL } },
37639     /* 52 << 168 */
37640     { { 0xab3578047e03a14eL,0x0f4f28688caf673fL,0x919e661e66530425L,
37641         0x28da445c91ba47c5L,0xd6d0537566c394feL,0xfe1864a302e8ae91L },
37642       { 0xd34baca2a753aec4L,0x43b7ffe7a2c8d292L,0x496659eb04efb8f1L,
37643         0x310ec2a9e0252dfdL,0x98173d2f9168a80eL,0xa3e018d631497255L } },
37644     /* 53 << 168 */
37645     { { 0x39ee6439ddfa0ffcL,0xaea6f882c1d1d54dL,0x688feff654a65059L,
37646         0x17ee5aaa37f25ebaL,0x6c9b4f2932b345f2L,0xb883c0c75b4d62ebL },
37647       { 0xaf33e4ae3135aa7eL,0x28a7572c924146a2L,0x67dc5dd37e77ae8bL,
37648         0xe11cd9c5ff39b601L,0xa86f090b5e6f364aL,0x76f7517500b84247L } },
37649     /* 54 << 168 */
37650     { { 0x26d3a3e3fbae20ddL,0x5e9b73cee1dd2b25L,0x7008aefb0235d5b0L,
37651         0xa92af4ed2aaf208dL,0xab786c9bb1132040L,0x43250e6c9a91269dL },
37652       { 0x00a15294c9be00ceL,0x2d5782df1698dd42L,0x3f980bbe76e3d6e3L,
37653         0x5b602647496650fbL,0x461edc3271aca61bL,0x2516ab6c9805a01bL } },
37654     /* 55 << 168 */
37655     { { 0xb468fcf2967e2216L,0x97b840679ae47d05L,0xfcafaebc5cc15209L,
37656         0xaf7f6c8ccc83c3d4L,0xa74d4cd5cfa47e0fL,0xd8a51615474cb8b1L },
37657       { 0x4815ef52591462a6L,0x9c5b2cf74deb41ddL,0x39cb450b7e99d620L,
37658         0xfe8cacbaa7772019L,0x98b98210577dc69dL,0x5e02b90072423a96L } },
37659     /* 56 << 168 */
37660     { { 0x3266c887d9d9284aL,0x690f818b73646ab7L,0x67315ec6af7fc33bL,
37661         0x181e61abc30b1ccbL,0x1b81e6cd105a9e1cL,0x62a15daf5078b9bbL },
37662       { 0x74f9840f6fa8cc65L,0x356b777443388573L,0xba0f7d0506b3fd46L,
37663         0xb0ac864c92b4fdadL,0xcdeac253ef192cdeL,0x0c24810bc313b4a7L } },
37664     /* 57 << 168 */
37665     { { 0xfbcd4f77e748de9bL,0xb7d28cdfc25dcc94L,0x32f937a92e033c43L,
37666         0xb6289636d9da1f7aL,0xd774e97dd287865fL,0x8d013739e6243bf8L },
37667       { 0xee7ec1f856b9601dL,0x429017666afc90caL,0xc42d960ad2bef9afL,
37668         0x654ece7f5b430bf6L,0x02878c7f221440f4L,0xe575aa6474a4e1a5L } },
37669     /* 58 << 168 */
37670     { { 0xc96e763e71a449f9L,0xdeda66311a349fb0L,0x6f896aef3c4e8f44L,
37671         0x71ffe2d2e9eb36a3L,0xcbee21ab8f908a29L,0xaeb695f85be98708L },
37672       { 0xb6023803de61e1a9L,0x59f1ec96065ecca3L,0x2a1229f3637d0741L,
37673         0x5a9bca2c69441afeL,0xfc6daedbbbeaeed6L,0x950034954e2e31e0L } },
37674     /* 59 << 168 */
37675     { { 0xe59a827339859da4L,0x8720429fa7431a84L,0xfcab26e17ee3457cL,
37676         0xc13c1125da3b7833L,0x0bb1043fbc0b0da1L,0xdc2726ea84b526e8L },
37677       { 0x34049278a213a188L,0x400bb4a00a1a2553L,0x00e3eb25c92df398L,
37678         0xc0b7113f9c36a6ddL,0x719d185001e274bdL,0x86f08f2dcde338aaL } },
37679     /* 60 << 168 */
37680     { { 0xef8c40bf1adb09b7L,0x2efeb49c0b74992aL,0x3f0f8a412b79957fL,
37681         0x08927bfe87a06873L,0x1f63a4109288cb9aL,0x8c66fb70df2b373aL },
37682       { 0x98da4712980facaeL,0x15ce5b17d819d026L,0x097571a5749a671aL,
37683         0x85a40804894dd269L,0x3e89c13c34cb6797L,0x2d19d5e4d07119a4L } },
37684     /* 61 << 168 */
37685     { { 0x903eee85d90da9a7L,0x67723582de5ddbf9L,0xacf6898ad394eeeeL,
37686         0xa700fb8fabdb94f3L,0x1bcc4f947ac5624fL,0xee5cccff7e3b8ec5L },
37687       { 0x87d64d4d98e5a1baL,0x78727fc1ad9c4409L,0x55b4159b82310db7L,
37688         0xaff4eecea58d10efL,0x6d2ec94c11c958afL,0xf129bd1043db33faL } },
37689     /* 62 << 168 */
37690     { { 0xe1f6d71ed42eebf8L,0x46f825b9541ac0b2L,0xb01031b693ae2ab1L,
37691         0xfa4e1c357c589556L,0x65fb2504d273d1bbL,0x589d735447642bddL },
37692       { 0x7a5776adcf5e2d53L,0xab5c3544e5feda7eL,0x48e8442d32dea96cL,
37693         0x5f3e9c9e64d293daL,0x3f2df6a16b972a00L,0xfba58f5fa273832fL } },
37694     /* 63 << 168 */
37695     { { 0x5c9fe89240e9ce34L,0xfd9fb296633495d7L,0x0ae3c18a8c76cd7aL,
37696         0xb5ede1e3a6b77012L,0x5ac7a9d5a285822dL,0xe41de7da71ffe07bL },
37697       { 0x585f7e101b1bb4c5L,0x482794be74153077L,0x66f1c9d5a3e2a34bL,
37698         0x491d48f7c749830fL,0x3c0f3bcd5416d2bdL,0xaa3baada90b04986L } },
37699     /* 64 << 168 */
37700     { { 0x58225208ecbafb80L,0x4f212035aa73d6deL,0x1224e45562fe86dbL,
37701         0xa8c8a4782dc5b2f1L,0x8a957b8dc3096555L,0x6a3248b0b1591452L },
37702       { 0x1e563c58cb604c18L,0x32808cb59bf1045eL,0xf8f62de99462e7a2L,
37703         0x6b3dfe91c2489214L,0x6c1d8fc42174639cL,0xdfca11b8ef88d4b5L } },
37704     /* 0 << 175 */
37705     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
37706       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
37707     /* 1 << 175 */
37708     { { 0x5a4a5ce418690ad0L,0xd0f788e0fe27f51aL,0xd459388e4efe9a30L,
37709         0x3a45c11aef9d074bL,0xf68ab50b93ab9cb0L,0x62fbc397ecd9a566L },
37710       { 0xbfb79b7fcc587a7eL,0xfcf4d66f92870baeL,0x4f31aa21877390f0L,
37711         0x2de0c645e314cfb5L,0x56d904f6238eab12L,0x4d104a42ccb4d4f6L } },
37712     /* 2 << 175 */
37713     { { 0x3eb83a8729358cd3L,0xad741295b9c6d430L,0x57b8c77a53abe4e9L,
37714         0x0a14673ebb9feb82L,0xc0a6cbf7f26f922eL,0x213de299a32e526cL },
37715       { 0xca417e677b6ca858L,0x8d6ae0f7fc2e0900L,0x2bae0e7a62e135ddL,
37716         0x962bdcaea7ee82c7L,0x573d7f6ae5776c74L,0x9c4de6496ffbefebL } },
37717     /* 3 << 175 */
37718     { { 0x8c962fc809335d38L,0x26d1bc81eb38d176L,0xe1aeb295c47711edL,
37719         0x0812b9926cbe3e4eL,0xeecacaf90ab9805dL,0x82fefbaa3521a0adL },
37720       { 0x3a6948c0e2c31b9dL,0xb7d3905be82daf2bL,0xbd3ac90e25a34c37L,
37721         0x55afd99b61453063L,0x56d87cd190b99303L,0xc9bf82dd97ddb0a3L } },
37722     /* 4 << 175 */
37723     { { 0xcbc0bb1968916917L,0x0bbb9f921094bf88L,0xf62cb350d3806442L,
37724         0xe4d2f1cc397a7602L,0xa54bd48e43987d82L,0x77b6f8314f0a19faL },
37725       { 0xfa0c9a456e766443L,0x995ae0fff51ba70bL,0x8e242c5b9cbd8d33L,
37726         0x1671eb0813d97956L,0xccae388f40da55faL,0x97cc48faf376dce5L } },
37727     /* 5 << 175 */
37728     { { 0x1c2919bbe8c91718L,0x9dbb727a5097bde3L,0x23f87ae7f8ea2fb2L,
37729         0xe1bfffdcba310121L,0x5938c50c75329669L,0x716c63e00549855cL },
37730       { 0xe091b0c9654814f0L,0xa20535d10e43daeeL,0x16ce68b2593ddd04L,
37731         0x7813a49af59900bdL,0xef0d3eecd3e5d232L,0xe7d12cc40ee3fd4dL } },
37732     /* 6 << 175 */
37733     { { 0xe54d92cdef01fc5fL,0xc46c2ab8dda2e25aL,0x7c907fd2849f6142L,
37734         0xbb11dd2dacd0202dL,0xa4913a701d92d19aL,0xe9a26ae0cf610677L },
37735       { 0xfff1e1d5538943c5L,0x5943dcc4a47b2204L,0xcafcf33a92cabf71L,
37736         0xd571e13ce329d1adL,0x7626ad237a9a0e4cL,0xf0aa0d9f130d7f86L } },
37737     /* 7 << 175 */
37738     { { 0x09df3a4419e6aa7eL,0xe27ad0475841b1cdL,0x02d2a69fbde75934L,
37739         0xb0e05e53fd9ba435L,0x4732d88ae008c16eL,0xdebc4777ea72110dL },
37740       { 0xccb7d9932e3143adL,0x674f3753ea8cd06aL,0x56012a7a051562cfL,
37741         0x961df68425f74cd6L,0x26630e71214d8a95L,0x584e8d6365d92f84L } },
37742     /* 8 << 175 */
37743     { { 0x8a89daefebc5557cL,0x7ca71403275e1649L,0x48d923775b80bb4aL,
37744         0x0a587c52a45b3626L,0xdaff503cc75bfe91L,0xd845d3e6116d07d7L },
37745       { 0x6b5a4715a51eeca2L,0x34ac02bd74481991L,0x8f076cfc595abf8dL,
37746         0xc9de4ce9ed0391ceL,0xaaaad03ae1fcabd3L,0x8d48ec0087b199edL } },
37747     /* 9 << 175 */
37748     { { 0xbd0f2653ae5dd482L,0x59f968dd060032dcL,0x6bea33e067283310L,
37749         0xccce88cc012aa50cL,0xbb6d7f2f66838f46L,0xb764c95f05ec9bcbL },
37750       { 0xd097b60451477ccaL,0xc2fbda7b82b20a85L,0x75fe07a424e9ca8dL,
37751         0xfc4fa8240cc40d01L,0x0b17d5f90c0e95f7L,0x285e6e8a6e1e46dcL } },
37752     /* 10 << 175 */
37753     { { 0xb0641d09bc9b2654L,0xf9fcc2e68aa8fa35L,0xd12a5b4b00d5ec6eL,
37754         0x9be1a1115569d89aL,0x9c0566deffac7208L,0x7a9fd4ff7034edf1L },
37755       { 0x636aeb6b9571c375L,0x60d05aec55cdf187L,0xf4e2f898734e9d2fL,
37756         0xdaf742195ccdc6bcL,0x9d39249f608a4f28L,0xb5f1bb5e8820e2c3L } },
37757     /* 11 << 175 */
37758     { { 0xd02e9936d9589548L,0x8f1bf5755341402fL,0x1535a443057300aaL,
37759         0x3062478e65d29324L,0x4203351fc656a3f3L,0xbeb21b516569c4ffL },
37760       { 0x8113ce70e1f0f263L,0x59d1293903f9320cL,0x95061255d08f8936L,
37761         0x8be3c0f997d4b705L,0x0259742e827837c2L,0xf55ea28d95c65cdaL } },
37762     /* 12 << 175 */
37763     { { 0x62024812603dc3dcL,0x25dc5337efd67b57L,0x86b3eb38d7f033fdL,
37764         0xee3226b232646d6fL,0x8c4825f6f1dae596L,0xd2303055a5bcb8e5L },
37765       { 0x904a53493c0baa76L,0xe60f6125e08646a7L,0xaf6a329f21d45f89L,
37766         0xf20ad88a06605546L,0xcf7a0e9619a93d14L,0xf1eabcc891c97174L } },
37767     /* 13 << 175 */
37768     { { 0x72b76e9e8f02af51L,0xac94cbf1d580f95aL,0x2e9cd74801d854a4L,
37769         0x4ed4e9061f08a1bcL,0x0a2b28419d2bd936L,0xbf86350051c89ddaL },
37770       { 0x9407b0e7e3f00bf5L,0x6b1f71ff28b57ac1L,0xc1dfe03fcd28801fL,
37771         0xf3d83d64afa55309L,0x47aafba28af8f76fL,0x54eed45f6604b2e9L } },
37772     /* 14 << 175 */
37773     { { 0x59edd2640f3e541fL,0x318674b582b76ba8L,0xbf4a0d304e7f0716L,
37774         0x36fc0e4119b88200L,0x91db560240da801eL,0x638371ad2c72c2c7L },
37775       { 0xfe960c25d5822da7L,0x7a7571d14a7415e1L,0x5a6480febccc1576L,
37776         0x72f4e5e5c3c88f47L,0x224e7e749a7bd8ecL,0x3ebbf52c7631455eL } },
37777     /* 15 << 175 */
37778     { { 0xae3c2bc08608ab37L,0x35e3da8c39f336b6L,0x7413664281f44511L,
37779         0x21ce7c511d8506e7L,0x9b6718b3846165f1L,0x9e455007f5cabf6aL },
37780       { 0xec582a0e02611073L,0x269aa18d83bf042eL,0x7c54fb7c86306757L,
37781         0x453336021b948fafL,0xd3a5c508b7025d73L,0xcd6e555b428471e4L } },
37782     /* 16 << 175 */
37783     { { 0x42c9fad511a224e6L,0x6b6aeb8b69b2ac26L,0x0cf4c7fdb149854bL,
37784         0x4a7d90002fc359ebL,0x9ff0c3ea29ec8603L,0x157ae7859b24ee14L },
37785       { 0x638c809a8979e9bbL,0x347dfb2e7869d8c5L,0x2fb1e0f8a07ea547L,
37786         0x1e580d32aecdec3fL,0xbbf895730f74025bL,0xeb94d71bdd529164L } },
37787     /* 17 << 175 */
37788     { { 0x8670812a35d03250L,0x2f68343f1984cd59L,0x5fe890caf1ff97ecL,
37789         0xd47fff536f764b2aL,0x70fa44a4f8f7077bL,0x7b287efcb2c7fe02L },
37790       { 0x0718e70806dedcdeL,0x37193c827172c0f6L,0x47ad55f67b7f28a5L,
37791         0xaf83c4fe9c71a96fL,0x2d6075587c490626L,0xe647de1b933e9033L } },
37792     /* 18 << 175 */
37793     { { 0xdc5909e3f1687d4cL,0x4fe3be46d431c5a7L,0x28c41a035f9807beL,
37794         0x2c4203fd12f1f8daL,0x13f12da450a19620L,0xc32f881eae2e9835L },
37795       { 0x56328ef7622587d0L,0xcf785f038f209f66L,0xb562ea70a2697748L,
37796         0xa762289055598769L,0x9842bfa8fbf41fd3L,0x304c3057fa401ba0L } },
37797     /* 19 << 175 */
37798     { { 0xb8d685d1c56bc716L,0x1eceb18f1fccc358L,0xf94bedc82034cabdL,
37799         0xa9acaf11ad003472L,0x6fea0a55ad0786c6L,0x60f7f9a9581f6f52L },
37800       { 0xc4736494400bcca5L,0x221d8f8a3606b047L,0x533756fb6339c7fdL,
37801         0x1e068e987510c1a4L,0x9bf9abb6ededfa09L,0x96895ce548d54775L } },
37802     /* 20 << 175 */
37803     { { 0xc995b0171552c477L,0x6f92a95252351781L,0xa9d4bb6c4da25dafL,
37804         0x2b02828e3cf6aab7L,0x5f4febed11fa4d0bL,0x42f0e61ea12d9d37L },
37805       { 0x1ceef875d24610d0L,0xa7c85c485d4eeceeL,0x33fcfa3b79340a49L,
37806         0x3671e563b00b3491L,0x871f74e493eade0fL,0x1ed095182c546f3eL } },
37807     /* 21 << 175 */
37808     { { 0xc003b709a9a5c68eL,0x9441e7b26c84310aL,0x7ec3b652dd90f7c5L,
37809         0x17e601685b526324L,0xc5f77fee479573aeL,0xe89beed18453fe7eL },
37810       { 0x259a2b0364540cadL,0x8c2f13322b9a8053L,0x1db53ab7304940edL,
37811         0xcf780c5d1612763dL,0x2edd7285e19b62f9L,0x20ddc9874abdd7a5L } },
37812     /* 22 << 175 */
37813     { { 0xa70aa6781250954bL,0xe4a2f7cf2930f3edL,0x3e3dd26666fd719aL,
37814         0x500166cf792ff463L,0xeccd32cd75cf00a6L,0xb65f46a5c4526e56L },
37815       { 0xfc3a99c360aa8cd7L,0xe04a18b31290b20fL,0x957139a218cb9326L,
37816         0xf6b352ce11fc04a5L,0x9314b80778534e64L,0xd4a265c52d8f5015L } },
37817     /* 23 << 175 */
37818     { { 0x7078b4820dca1fd5L,0xec3192daeed504baL,0x144183332d06a63eL,
37819         0xaff9f7bd69c01ac1L,0xc5fb50475b74308fL,0x37846eeaa67e7ef4L },
37820       { 0x0fcea663976b931bL,0xd3407d42bb345b71L,0x925afc36a2deb11bL,
37821         0x12c271092207db49L,0x237500002e1c8fbeL,0x41427e0763f771cfL } },
37822     /* 24 << 175 */
37823     { { 0x9dafbe96491ddae9L,0x92c60b897741da5fL,0x1185b001b866ab14L,
37824         0x7a43b9cfca7f2f81L,0xaaeb5efc6ee8fdfcL,0x1f7cc70022beba9dL },
37825       { 0xa212724722e3e7cfL,0xb98dde1e9e723477L,0x87832183ac89706bL,
37826         0xdfb92ac1ff72f1d5L,0x5877fe6daade3804L,0x7ddde4a79170b9acL } },
37827     /* 25 << 175 */
37828     { { 0xdb147da0b7df600fL,0xbef5374660a8b100L,0xb4c7e404a1330d14L,
37829         0x152c6ae754f96693L,0x08884fecb25fd94dL,0x8ec186048ba59001L },
37830       { 0xdc245c0c9f8e77fcL,0x2be5aaebc0f0a83dL,0xd15bdecd1fd13525L,
37831         0x46b603f0821c9224L,0x6b335a7daf6dc128L,0x4cead4f94dc6b5bbL } },
37832     /* 26 << 175 */
37833     { { 0x239cccd8179fac91L,0xffa076063829d42eL,0x75b8589cbd42a0ecL,
37834         0x012f5e80d7f2292cL,0xdcee7efd99c14665L,0x4925256d23650737L },
37835       { 0x847c86ecf3cc64afL,0xdd34a75feabc04fcL,0xc2f73b3ac6a1f710L,
37836         0xe16e317565cbf6fcL,0x9cccffee351461d9L,0xe3d635543b4fe4b9L } },
37837     /* 27 << 175 */
37838     { { 0x6e27de1176ece8f1L,0x3ca873a79d5a3cb7L,0x7d65cdff7e424482L,
37839         0x023e5bcf69372216L,0xae601c2f2ffeb5a6L,0x8c8888cbde130b33L },
37840       { 0xcb8309485700ecc4L,0x5a1902ef9dfe1891L,0xe01f5fc558198380L,
37841         0x9d5d1c476c59f973L,0xacc64c98e34cc41fL,0x057d81f03065d870L } },
37842     /* 28 << 175 */
37843     { { 0xf3a1a9797aeefd73L,0x3fb166a09537abf7L,0x39e8c469d4c37607L,
37844         0x3efc85650e3f034eL,0xc955c2dff9c25655L,0xd6ce96ec260fa449L },
37845       { 0x5383a8b831d8e6d4L,0x3aed2e761a3595dbL,0xbd269c39e22a0f45L,
37846         0x4c82238694a7a83cL,0x362f08055731bd0cL,0x7dc1e7ee0527be95L } },
37847     /* 29 << 175 */
37848     { { 0x606ffedfd41ce228L,0xb87608d0ceb21740L,0x6fa23c0794a4354aL,
37849         0x587a7c54d5061d84L,0x75678bdb16b823ccL,0x2d2163c94ec818afL },
37850       { 0xa80b1e4e22c6fcaeL,0xc07cebee4d2a4b65L,0x64f303c7a895e2c9L,
37851         0x750079f5a768a2e6L,0x0665502c2d423133L,0xaf33176715135cdcL } },
37852     /* 30 << 175 */
37853     { { 0xda8f7878c715abf4L,0xc62292a5a5830c4dL,0xfcd30f7e4b46acb9L,
37854         0xb931f1ee39a73db2L,0xf838a5c84ee1afb0L,0x15609b57c202a921L },
37855       { 0x2e21871620bbba58L,0xe1d2fa14ae2615cdL,0x0a4dcf3543946185L,
37856         0x2e80d804730d2490L,0x5e43dc17794246b6L,0x7b3588c8dcb3be9bL } },
37857     /* 31 << 175 */
37858     { { 0x3e74f09c1bb8e6e2L,0xac587847584dba0dL,0x926415593f843324L,
37859         0x0033257729f3ed18L,0x4b7164e5d0089537L,0xc50542793e54c9a0L },
37860       { 0xbae7ff9808e58162L,0xc0707d03c1aa2fd9L,0x43524f717714dca8L,
37861         0xa202a0707255b169L,0x0a7867ab4249b2e0L,0x03f748656d6ec5e9L } },
37862     /* 32 << 175 */
37863     { { 0xfa2db51a8d688e31L,0x225b696ca09c88d4L,0x9f88af1d6059171fL,
37864         0x1c5fea5e782a0993L,0xe0fb15884ec710d3L,0xfaf372e5d32ce365L },
37865       { 0xd9f896ab26506f45L,0x8d3503388373c724L,0x1b76992dca6e7342L,
37866         0x76338fca6fd0c08bL,0xc3ea4c65a00f5c23L,0xdfab29b3b316b35bL } },
37867     /* 33 << 175 */
37868     { { 0xd2437a52eddd4b72L,0xe2cec2abf051b831L,0x845af98e482a4ea4L,
37869         0x75758ccfa43cae82L,0xa76733429260ea35L,0x77845b02b1dd602aL },
37870       { 0xb78bc4c047d5c450L,0xcb1f444550ad371bL,0x6bc01293d71cc417L,
37871         0x8538f638c1fcb367L,0x5d01d35919b313f3L,0xcd6b55bfcf67f6acL } },
37872     /* 34 << 175 */
37873     { { 0xc28000d6e3b03290L,0x4dd5064a5f2ddbcdL,0x4916f830338a1414L,
37874         0x3ffb8381aca74c22L,0xec073ee8e680f548L,0xa34e0693a0430cc3L },
37875       { 0xc6baf20dca03e6e7L,0x2a30df6e835fb88dL,0xbf3c9e9cc2092d6bL,
37876         0x391cb25c17bc2433L,0x9b7de7126c205c0aL,0xf25e1494cd2a5e62L } },
37877     /* 35 << 175 */
37878     { { 0x05ae44e9d21fdc9aL,0xc520657fce40ebbaL,0x6b8e25431270cb59L,
37879         0x24e6f9bff7f096d0L,0xc6ded76a3ed81f52L,0x729d05e75f7df798L },
37880       { 0x99e2636fe5468eb1L,0x6f3abd4c00419facL,0xfc61117a9cc41e09L,
37881         0xb16f106baa399a51L,0x05603bc845e52713L,0x612658aca5c36107L } },
37882     /* 36 << 175 */
37883     { { 0x107573b96defe8f4L,0x9a9edf0570545313L,0x5df43df0e54e8272L,
37884         0xac91bae8eeb4ae90L,0x241d54bd26006ab1L,0x0ba118a6c031de7dL },
37885       { 0x376214671f500d4fL,0xbbd6b318bc3596e4L,0x4b5532c85992277aL,
37886         0xb15165da16a4728bL,0xbd7986d45140abdfL,0xf4fe16df7386f38aL } },
37887     /* 37 << 175 */
37888     { { 0x8c5d305696aeee65L,0xe52e500ea79991dcL,0x3af4a3ef343fdde9L,
37889         0xc6d0389b248ad10cL,0xc3dbdb3f5014de53L,0x606b1352310a0cd8L },
37890       { 0x65af3f8479bde08fL,0xa6c7d968d82ab682L,0x7262c07d202a6508L,
37891         0xd0231bb64cd75fe0L,0x58a34ca5dcb1f7fbL,0xcc8b21b21b8cf7a1L } },
37892     /* 38 << 175 */
37893     { { 0x4cd6e61be824653dL,0xfa02c0c9f253dd65L,0xab198e41b1e84cedL,
37894         0x89ce6aff1928be7cL,0xf2a83f4895afb956L,0x5b5f195ddc73f3a5L },
37895       { 0x44220ff79328317bL,0x03d62cb7f5239616L,0x0e908d34b5d49415L,
37896         0x050b7651c1f7e665L,0x3610167089e1a98bL,0x564abb3418eb7644L } },
37897     /* 39 << 175 */
37898     { { 0x400b363b2eecacf6L,0xe2ae5bee1ed9fb9aL,0x23374b11831e99c6L,
37899         0x0a8382d82cb9de95L,0xf95b8e052dc02291L,0x63b05a0d2f752257L },
37900       { 0x9ec16f84b60d9df4L,0x6ed683ac3bda5171L,0x7206450813acca39L,
37901         0x6024af3cf8871ba1L,0xbf88040e2f9a4d56L,0x001054149fb100e5L } },
37902     /* 40 << 175 */
37903     { { 0xd52c606375ccd2e3L,0x4fa8e4df56ce654aL,0xcd905c9bce581d23L,
37904         0x51ce0eab24ff75eaL,0x1c1c0831432c6e5fL,0xb83307aec02f0e86L },
37905       { 0x0b7a0274fe2ee821L,0xae7dd7729c3d69faL,0x54745da5931ed75fL,
37906         0xc276d96f18caba13L,0x142571dd26dd9792L,0xc522dac16c0e3167L } },
37907     /* 41 << 175 */
37908     { { 0xa86fa630197b5b97L,0x749ea479fa21c176L,0x520c0e4871ce7101L,
37909         0x5c53d9ebe30a0b0aL,0xdc71b629ceb570feL,0xa30fc3d11fa3699eL },
37910       { 0x741321b579cbbfa4L,0x205ea0aae8d18119L,0x94556e92fc62e0eeL,
37911         0x5ba78d4e042b9c3cL,0x14de84103fa24a56L,0x6e57a9fbd6557bceL } },
37912     /* 42 << 175 */
37913     { { 0x2a5e716ff103d9c9L,0xda2f7e5cb9cd27ecL,0x317f74b8e047e5cbL,
37914         0xf1f496d33a4413feL,0x1a480a9cb8cc9fdeL,0x502b52d7575208d4L },
37915       { 0xf14fe00cd19c49a3L,0xf5c2367b269be5a9L,0x966a524f12d42690L,
37916         0x2786ff714dd03b95L,0x6fa1f891d69bf68dL,0x0f3d77579f67b3bfL } },
37917     /* 43 << 175 */
37918     { { 0x230c8d00c966c638L,0xde5c9e8e54673305L,0x618b0dd561bc99faL,
37919         0x669618048f3cb5c0L,0x7c653ca507141ba5L,0x454d54ff32ba155aL },
37920       { 0x82665a307df3e39fL,0x15eb1a65ca19cbb7L,0x4e7632a617330ab3L,
37921         0xc69235295a3221b4L,0xe23ee9382eb58e9dL,0xb320aa8e23bcf88cL } },
37922     /* 44 << 175 */
37923     { { 0x6ba15fe607a7ecf8L,0x93127926f831cc91L,0xfde2dbf41ff6264fL,
37924         0xdf7f22018413fdb2L,0xdd81d11487f66260L,0x87907f0e4a87133dL },
37925       { 0xeac1032cb1d47e23L,0xe2603119125a0918L,0xba680392f2259208L,
37926         0xb7c7f8ebf9bf06b7L,0x875a380fa56ba57cL,0x05a88a97460c939cL } },
37927     /* 45 << 175 */
37928     { { 0xfb2871b7d0dc771eL,0xd12b21fcbaf358c9L,0x30dbd412df616c16L,
37929         0x291bd90f9345e16bL,0x92f7534b8ee6bb6dL,0x7ebc5b0eb1c901a0L },
37930       { 0xc9e9c76151e1881aL,0x5ca52152756bfecbL,0xb0a9f5cb6affd506L,
37931         0x4c12f965669feb3eL,0x01d84b9ea6f1c529L,0x3870fa27e8433c92L } },
37932     /* 46 << 175 */
37933     { { 0xe4e9e72495bb5db0L,0x86babe3ffd616958L,0xc1520c280f93c1cbL,
37934         0xe393ded539cab777L,0x031a2af3e86a6ca3L,0xb26a19101e8466eeL },
37935       { 0xb16b746dbb64fd81L,0x4e96f0b65a97d50eL,0x7a12a611a793fac2L,
37936         0x8d729847db6482aeL,0xdd050ce812e72ce5L,0x915041366c54299aL } },
37937     /* 47 << 175 */
37938     { { 0x9e8018c06b63c4beL,0x49dde0c8fce47904L,0x1668de9c9bae36cdL,
37939         0x8dfb0d5f80ed18aeL,0xfd6739a791e1949dL,0x80353c9f8053d7d6L },
37940       { 0xa611699bdea54710L,0x5eacf16e6c6c1f5bL,0x5212fbd3c920323eL,
37941         0xaf75db75848d085fL,0xb58564b1babb45b8L,0xefa1958938bc491dL } },
37942     /* 48 << 175 */
37943     { { 0x0a43a76c2f95a081L,0x27eaf2bc38b1c395L,0x6ba3222c63da1d80L,
37944         0xd95ae17e6a78ce09L,0xa72d9812508f03b3L,0x9f36d02efa8ed359L },
37945       { 0x1716d1dcd5118f96L,0xd116339f489bbc53L,0x272153ef6f7e1d3dL,
37946         0xcb4a9e739e308d22L,0xcfa9d88b615a3646L,0x8b69bd6cde454569L } },
37947     /* 49 << 175 */
37948     { { 0x33ae0fec2b8f41feL,0xc45aac500762c46bL,0xa03bc6ddf228ec44L,
37949         0x82cb78cfea3d48c2L,0xbe7a02ed27126795L,0x1a44d1f830b3e3ddL },
37950       { 0xb414edc73be7b58cL,0xb3e6c7ce331bcbc9L,0x9f6fd0f2903b3508L,
37951         0x260c8b5736cc2930L,0x8581a05d0d59278dL,0xfac1817b189b3005L } },
37952     /* 50 << 175 */
37953     { { 0xbf4d4640cc9a69c3L,0x07b39b5d67d262dfL,0xcd4a6a4579526d6cL,
37954         0x4a04c430538143caL,0x6c3341b86639e3b0L,0xd490cab5ab7216d4L },
37955       { 0xedda2b64a2a93161L,0x04e309de644a06f3L,0x7cad728a8c4495fbL,
37956         0xe1744f3871dd61f4L,0x39cbd782e3201618L,0xbd66e1850ca18ab4L } },
37957     /* 51 << 175 */
37958     { { 0x69d8237f87dcb8beL,0x3f9a485b090e0237L,0x535371e1f117a1c5L,
37959         0x0d5ef52675430c29L,0xcb9c150898fdd18dL,0xc7c1a7b4108d9383L },
37960       { 0x6ba9fb4d98064eedL,0x07d205a9a3df31c8L,0x7a0be62e9be5da37L,
37961         0x03b21b1255a9e2c2L,0x3f4792263de80449L,0xb0160ee1ae3bf31cL } },
37962     /* 52 << 175 */
37963     { { 0xa22c084a7a3f8c5eL,0xeb7fe23f3ef30511L,0x161ca862819fa38aL,
37964         0xe5f014156d45762aL,0x37da6bb95718b789L,0xfcb682bbd837f453L },
37965       { 0xc49c7397275e5974L,0xbe908df5a1ed0925L,0x3dcd694615a13ea0L,
37966         0xdbe652e32596fa76L,0x6a3bcc93c55d376cL,0xa2f7611933a0f02bL } },
37967     /* 53 << 175 */
37968     { { 0xdfff9b9c6ed061ffL,0xa36aef2dec32b16cL,0x9f3b7ab6da61572dL,
37969         0x96e72a027ac2dac9L,0xb0e36e023aaf4fcdL,0x5f32a620503004cfL },
37970       { 0x6c91dacbadcd649aL,0xb25deea21ac02a32L,0x211a421ffb914c2cL,
37971         0x1ddbd60e149fde1dL,0x91c4cc0d7ce86ad3L,0x8be6f031b9ed909cL } },
37972     /* 54 << 175 */
37973     { { 0x62e773c4a0cb50ffL,0xe54fdbdd2e903681L,0xed2bce9e21c12ca9L,
37974         0x13aa4748c072bae6L,0xb290c0ad475f290eL,0xcbbc3f9b56698a85L },
37975       { 0xfb37611b1b7fff76L,0xe62a842260bc2e36L,0xb6a36c783bb20fd4L,
37976         0xdec045418dd69509L,0x67648b7798a1ad2aL,0x4fa2005d078fdea3L } },
37977     /* 55 << 175 */
37978     { { 0x757f249416307553L,0x865af9d0de6bcb49L,0x3943031a07b0104cL,
37979         0xe5fdb46168da2d33L,0x4937d614b5432b48L,0xb3fbbf2c0a29a5e5L },
37980       { 0xe7d3b12b8de89887L,0xc1a43c24e41258c3L,0x91ac7eabf7d9efe4L,
37981         0xfd90de0088385cb3L,0xead102e37674c39fL,0x7b9a2cc4fff118c5L } },
37982     /* 56 << 175 */
37983     { { 0x11f92678a1e598f5L,0xde8052491fbb882aL,0x3730b3261154d0aaL,
37984         0x0e279827da521670L,0xa03c8c702336f8c0L,0xae50e64ff0bd66d6L },
37985       { 0xfbfd665f7af4f681L,0x237a4f4e5c8d5680L,0x6527611ba409064fL,
37986         0x1f4eff6a99db9a94L,0x4a55d96ae53ba177L,0xd9dec234f002368aL } },
37987     /* 57 << 175 */
37988     { { 0xbb837d0ad193ebc0L,0xab1e3eccd09b24caL,0x229f36d81d848777L,
37989         0xee895edf0ab68c98L,0x67fc65f4dce31b92L,0x777ebe585db96c26L },
37990       { 0xca0893ae6047d0d6L,0x71a2ca0b550d6905L,0x35426866eac4c2e3L,
37991         0xb4d7e78e0c1b8eb0L,0x03cb0a9a84b384e4L,0xd8a99a5c7f7115b6L } },
37992     /* 58 << 175 */
37993     { { 0x07db8bfa5f25a74eL,0x97dd568a3dd8e706L,0xcf4c02a32fb59efaL,
37994         0xe2ae502616b291e4L,0x5499f3b20f9c10cfL,0x59abdcf5a7297ec7L },
37995       { 0xcec282671f4a3646L,0xc10ae0971e065cb1L,0x172f886319dbbaebL,
37996         0xb0c27f7d73dd068aL,0x764d185495086ceaL,0xb89923c732de9a97L } },
37997     /* 59 << 175 */
37998     { { 0xacd499ca093345e2L,0xfbdb3895f3c23800L,0x2584f8ca02f0fadbL,
37999         0x9f5dc96ec2f35eddL,0x4dd102ca1ba0266dL,0x13ee9c8aa9f26fabL },
38000       { 0x9e7467fa2a1e61daL,0x999764b6850191c5L,0xd053a575b70dd8dcL,
38001         0x697b856fd7065eb7L,0x9d5bb6aa695b4914L,0xc5cdd170e65001f1L } },
38002     /* 60 << 175 */
38003     { { 0xe87cf622e93495f0L,0x347b09c6bb43a802L,0x2a38f3b7a4e3ac34L,
38004         0x13353b959751c1c4L,0x753ec3ecb3947985L,0x3bf856dc12d3fa90L },
38005       { 0xbf4f6fa5ec35dbe0L,0xd099a15bf3b4fcf2L,0xb348462fbfe7245bL,
38006         0x508324b352a2d4f4L,0xec4bae05feee1315L,0x468fa9e404496618L } },
38007     /* 61 << 175 */
38008     { { 0xc57673257d5e7a94L,0x40c05da604cefc01L,0xba1fd6c6b921c681L,
38009         0x0d3e09f9c104cedfL,0x4b7cd83cc6586416L,0xb747d7f9adfa7bfaL },
38010       { 0x833f8e24a42be782L,0xd5f0421d06b2471fL,0xac87b17c22e4b84eL,
38011         0x85af6b063a10c7bbL,0x4e557cbf66e88e2aL,0xaff21b66d3751e40L } },
38012     /* 62 << 175 */
38013     { { 0xdbab25f4c4464538L,0x3c36560ba93d7f74L,0x8b9b15d39f86f410L,
38014         0x1237e35b0a1db237L,0xc9dad97994f49677L,0x390a3d8f15dff99eL },
38015       { 0x0a74dfaef82c19edL,0x3f8e958589c2dc55L,0x763448ce94a8e729L,
38016         0xc6349398625f0517L,0x1ca5f9e7523dd700L,0x45aa25317fe638dbL } },
38017     /* 63 << 175 */
38018     { { 0xe91af601aad04ed7L,0x6f86f323e897df2eL,0xf8c259564c7a0ab8L,
38019         0x6e793f3633845d15L,0x08937ef5e583d043L,0x92dafa5824d1fd96L },
38020       { 0x6458ae2a86c9aedbL,0x271823a026a4252fL,0xb119fe4c5a57ef16L,
38021         0xf41e13943a507289L,0x0cbf1da6bd1aa499L,0xa177ac9dc2465a51L } },
38022     /* 64 << 175 */
38023     { { 0x14f962e404a8313dL,0xc6e3e7c45f1f5a26L,0x2c0e11c079e777beL,
38024         0xa1705efb4657c31bL,0x02688fd23c494de3L,0x75664a84412a8718L },
38025       { 0x878fc7ad7a422f8aL,0xe5d581df7419bd0aL,0x7c813c4c704b70c0L,
38026         0x98553da87323c008L,0x4f63cec663089f1aL,0x9626d6fa9655d291L } },
38027     /* 0 << 182 */
38028     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
38029       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
38030     /* 1 << 182 */
38031     { { 0x10586ea7507f8b27L,0x1510deb9a261f7d7L,0xa42fc4d7dfbfa352L,
38032         0xbf38c3821e1c2291L,0x46e40ef60e11760aL,0xc24f6061dcb974d7L },
38033       { 0x755b105ba7619027L,0x8004bf09b8ffa759L,0xa630d0b00945db60L,
38034         0xa160ac9cf2809e1cL,0x38fc1113dc6c95c5L,0x01f540985d52574fL } },
38035     /* 2 << 182 */
38036     { { 0xcda68a7e698ee21cL,0xc7414d196a5e725eL,0x483be2dadce20b91L,
38037         0x7de1601cfc69dca6L,0x4bec17aaac4f9891L,0xe8741dd18d479a56L },
38038       { 0xc623cb8dac23a286L,0xe20a96b5166133f0L,0xda9bb7c030dcde61L,
38039         0xf84ea3273a1733fdL,0xd7afb6c3e82fac31L,0x37ea7d35d3897449L } },
38040     /* 3 << 182 */
38041     { { 0x120649b20370327bL,0x0e76555acd48cdc6L,0x4ed54decca01db03L,
38042         0x7be21319ac601d22L,0xf711661901b6576eL,0x7839fa064e73537fL },
38043       { 0x169d43ace46e860aL,0xde6d658c3078eed9L,0x8df731395032142bL,
38044         0x6be199b09b3c76c7L,0xc2f385f6f8bbffe5L,0x848df7f3d5ffd28cL } },
38045     /* 4 << 182 */
38046     { { 0xa189f30fc6a6d6d1L,0xdd674d3669665ab8L,0x307c9ec37d8da76dL,
38047         0xb3e1d006c1ea7c10L,0xc15e20b3b88c62d4L,0xb0000ec50bff3b3aL },
38048       { 0x9e330eb19ff9aa5cL,0x8663f9fddf578877L,0x157d3cb002e1eb2aL,
38049         0x638f297bf525e4d4L,0xa20f833234a3dff1L,0x748ea86b45a9c051L } },
38050     /* 5 << 182 */
38051     { { 0x978ed3abe664c066L,0x3f4a8e0d668361eaL,0x0ba610c753a25231L,
38052         0xa8b5b864189143c6L,0x0d7ccefca2841fc2L,0xa80dd8f3f8fea1e1L },
38053       { 0x2c24af232e19028cL,0x0e332b77919decaeL,0x44eae977f6089c76L,
38054         0x25e04dae53722e9aL,0xdd6f8b1f71ac4db0L,0x7c5b6ffd075e7bc4L } },
38055     /* 6 << 182 */
38056     { { 0x4c6299a7a1de1cc7L,0x362d293c02d9445bL,0x08f24df0399a9494L,
38057         0x33307792e37a1851L,0x1cc5e448760f680dL,0x70a6a8164a2efbefL },
38058       { 0xee939681246fc671L,0xfa7a26d1f70a9c14L,0xfae5ca89b826aab5L,
38059         0x6b8932c7e48176f9L,0x379f89bd9841c8e1L,0x46141d2fdb674190L } },
38060     /* 7 << 182 */
38061     { { 0xf4408485b4619d3aL,0x34b4f18160b4f44eL,0x369edc1b3532caf0L,
38062         0x2d0471ec6771abc2L,0xca4129311013266dL,0x02e636af617e2024L },
38063       { 0x1f93d60d3c69696cL,0x6aba7f2a1b99a172L,0x896873e1bf435ce6L,
38064         0x9649f08215b71e40L,0x730bedcfa02b024fL,0xb17e9cbd8df60bfbL } },
38065     /* 8 << 182 */
38066     { { 0xfe9fdde8bc266ee3L,0x91668688ba18e6c7L,0xa65349acddde6f6eL,
38067         0xc53c29c97e54356cL,0xee15ad945709f73cL,0x033b3940e5429277L },
38068       { 0xf52035cdd0c3475aL,0x9c5bef4d93f1f1f0L,0x26e0b0ceca319bd4L,
38069         0x4e7eb67b6951fd8dL,0xac3a6f4395c34d6fL,0x1f2769e600f60b59L } },
38070     /* 9 << 182 */
38071     { { 0x95188c136c4d0bedL,0x377a04901b5271e7L,0x60db30226a540165L,
38072         0x4be61fda3310c5b9L,0xbbb4fbe93f8bbf16L,0x5232fb46ac12f77fL },
38073       { 0x8d6f75ab255b569cL,0x09cc854d3bd39650L,0xec17a6e74b557c3eL,
38074         0xd6949f9d5c3d149fL,0x9a17a440494b18b2L,0xc10cb9d5d4a024acL } },
38075     /* 10 << 182 */
38076     { { 0x4520be6b8eddc97bL,0xeb8f2c317391f948L,0x18fcbbd772369418L,
38077         0xb8950ee217246882L,0x6b1e4b7a382e82c2L,0x9e2bb1eb7ea4c447L },
38078       { 0x5202d913c3c5bc54L,0x53ea78cd21352716L,0x7bd53ffb36e6b4ecL,
38079         0x8325bdf817387196L,0x33b2cd8af94d6a73L,0x206bdec5e13db4bcL } },
38080     /* 11 << 182 */
38081     { { 0x6e27ce2609c98c86L,0x8f87ec4c958002c2L,0x00b6897064ab26edL,
38082         0xd2b4037282e5e129L,0xbeae654c78c48327L,0xc0632b4341a54107L },
38083       { 0x7b1fc7f001562313L,0x01cd1b5c1fd6a56cL,0xa199a69835e71626L,
38084         0xb02b2692635fbcffL,0x1c0c4200a0632386L,0x637164f8d6c670e7L } },
38085     /* 12 << 182 */
38086     { { 0x2c47010d18e30ee3L,0xb7d4b1dbfdd5f040L,0x5c8abe509d930f6dL,
38087         0x6bcf875d5f56cf04L,0x1f6456c0062f1fc1L,0xc79597805304d710L },
38088       { 0xd76452e4db85dcecL,0xd531f73fa0cbf90cL,0xb5ae9fc89021bde6L,
38089         0x505c6b9f4babfae0L,0x99d943c17ea61fd6L,0x6ef4766159bf125aL } },
38090     /* 13 << 182 */
38091     { { 0x3a48020daa0b0a5dL,0x4a32d4d658bad0dfL,0xe013dbde2e4340ecL,
38092         0x99efac69a5fc51f3L,0x26acf7a669ee64c6L,0x36672d6566fdc9f2L },
38093       { 0x77426caedcb879feL,0x0166194676e3be96L,0xb6fe4709b2dac331L,
38094         0x1f3d8a63678ff3ebL,0x711c0ea447bd5865L,0x5fbe38e87c080adeL } },
38095     /* 14 << 182 */
38096     { { 0xd0891b2df4e61379L,0xea2c7ceb9941c391L,0x1441a2d099677e8aL,
38097         0xc29d88c8abcb3669L,0xecb1a21a06ce9bd9L,0x0663fa7cf5b11fc6L },
38098       { 0x440a5a1c0c44c2c8L,0x08d71bc39fdded3cL,0x62b53ca512d33d2eL,
38099         0x3fb8640e005e8adfL,0x2a9acaefaa2673a5L,0x356ae6f6695f8448L } },
38100     /* 15 << 182 */
38101     { { 0xcf3c9b318496d935L,0x7e849aff8ceefc78L,0xfc06a46e7a5d692dL,
38102         0x87248699e89463afL,0x4dc55e5e8e17af3cL,0x3378832fe41ec54cL },
38103       { 0x7578d6192816f87dL,0x505845612806d3cdL,0x7354f1022754c3d7L,
38104         0x61ca6cac08d64863L,0xecde4969eb9954ecL,0xe0c211b4a1a5dae0L } },
38105     /* 16 << 182 */
38106     { { 0xbd10b8bffb787270L,0x4f0b1566e43aaab6L,0x9a18be5ec0c90781L,
38107         0x3677f4c71ad167ceL,0xccb254e2a68c1c56L,0x392493e6e2c4d275L },
38108       { 0x44958cb1d5b63617L,0x178f141a4caa4e7cL,0x7445a767a2ffdbd5L,
38109         0x0e789c99b0b6c22dL,0x3ff8b6565dc92b2eL,0x1623e5c3eca98782L } },
38110     /* 17 << 182 */
38111     { { 0xcb013ff62c5c50daL,0x5e5550b70b256dd6L,0x38249ee1bfd47036L,
38112         0x984daee275379fbfL,0xfb35304588c6bc7fL,0x32379c955f9683aeL },
38113       { 0xbcb4ac531b5a8626L,0x1057d2a3bbaa0deaL,0x114ef8a7ffa8efb7L,
38114         0x553a34566da90cbaL,0xa2ced0b21a365fe6L,0xcec4d64bb1ccdb57L } },
38115     /* 18 << 182 */
38116     { { 0xe0312b66b81fe0eeL,0x11e0493b892c7b21L,0xb6a1d76e624ce73bL,
38117         0x38768ec0cd75cb6aL,0x425b091f2032c271L,0xa88d39f55b5d8338L },
38118       { 0x1496b9ed1916be43L,0x14468e3054549f3cL,0xd429c2c47248e206L,
38119         0x21a1c212fc9e892aL,0x0feb5822640c984dL,0x0cabfb472b7c0c66L } },
38120     /* 19 << 182 */
38121     { { 0xcda1c4cd1cc5a20fL,0x33d66a893f67814bL,0xbba50d5360ce82edL,
38122         0x9d34dc4d70553a53L,0xc926f498a8a1442fL,0x9dfe3cbccbb43feaL },
38123       { 0xd25887434fd3e4efL,0x7443a9a9a371d894L,0xb53e6afaa22bb4f9L,
38124         0xcef3fa347dfc9da4L,0xd079ded047403836L,0xc6c97c36d39aa93bL } },
38125     /* 20 << 182 */
38126     { { 0x6618fcae534f6370L,0x1635580da1a864a2L,0x90ad39947d7ce552L,
38127         0xbf8c45895257f24bL,0x5a9499202098768cL,0xec1eb621bb6d8830L },
38128       { 0xfae8f161f1f9ac16L,0xfc9184ca35704c99L,0xa72b1ea9139ea04fL,
38129         0x82229a912e39e1d8L,0x4153bf3e479c7bc2L,0x83325be4c5541825L } },
38130     /* 21 << 182 */
38131     { { 0x358a91badbea81d1L,0x4d1947d7c669c7a9L,0x4ca6d8f18eedbfcaL,
38132         0xf9eda237069b3b93L,0x9e1217e5a35ea963L,0xb7e16f08ab960c77L },
38133       { 0xf440d825fb313db7L,0x804c5262101c5424L,0xd236a0edab3c4f7aL,
38134         0xf8bdb2b1c2682459L,0xfaa7aacaf46c4d70L,0xcf6ce4adae83dd7cL } },
38135     /* 22 << 182 */
38136     { { 0x2c7756bcbd452842L,0x2c47593cd1783fd8L,0xa4f41583a7527697L,
38137         0x2fddafbbd1049934L,0xc087f3db6c71063fL,0x8f5a85c4c9b3ef6cL },
38138       { 0xbe178bc966a975d0L,0x2e2d825b94066514L,0x061dd919e0d42ba4L,
38139         0x964fdcfb227ca011L,0xcb915b2973d7ba7aL,0xaa7f2fa72af8338aL } },
38140     /* 23 << 182 */
38141     { { 0xbdbb3440734e8984L,0x8b9b7acb3d6f547aL,0xfc4f48ea0e76a07cL,
38142         0x49758a9f97da0c23L,0x13f4254a26958261L,0xdf1fdca2adb3ef57L },
38143       { 0xfafba40d699460e6L,0x71b2de39cd5c94c4L,0x52d76b76c21cdf0eL,
38144         0xbe75960760f3dfa3L,0x519d4fcb7078f5e0L,0x4bd8ca7f5191e1b3L } },
38145     /* 24 << 182 */
38146     { { 0xfadf9be978207cefL,0x97d5ba569cb5718eL,0xcbad24ec2f995393L,
38147         0x6236a26861203303L,0xe4bafc336589a4beL,0x6cba77185e23fa82L },
38148       { 0x8ccbc5774583e65aL,0xe5d88bca4bc2f415L,0xe6bc2d5841df8dd1L,
38149         0xec24e1d914d31fcdL,0xacaaf13efc26010bL,0x7e1da447e01b92f3L } },
38150     /* 25 << 182 */
38151     { { 0x2b3477ec1a29de39L,0x30a5c2190a8720eaL,0xf593ec729775bad0L,
38152         0xaaf607792af7dbbeL,0xaace90d4c7cc7b59L,0x6eadf21d40509cf4L },
38153       { 0xb9a5f138096d00fcL,0x3896d42625b206a0L,0x0f28f0f09dcaa5dcL,
38154         0x2ef6f9f9a8186106L,0xd212710fe25b4d04L,0x0cc6d2878b9847b2L } },
38155     /* 26 << 182 */
38156     { { 0xe7407327cdfb2baeL,0x06745198510c3039L,0x8a913ba74da758e9L,
38157         0xc882e7bb1a4797abL,0x0f0d8eb5dd7b375dL,0x90ac5223dcff3f3fL },
38158       { 0x8443b7cabbe341a3L,0xa7cba7f22f173bbcL,0x04669ff830e5c327L,
38159         0x0edd0eac09b777fcL,0x2a70898bd71e0cb2L,0x881c48929bd983bfL } },
38160     /* 27 << 182 */
38161     { { 0xe4847c654e7603f4L,0x826cd33c0bbea366L,0x95727caf2c4ced28L,
38162         0x580313dedb8ac1e8L,0x6745673701363cb0L,0x540c35ec0ff13cc9L },
38163       { 0x878c86fe3c4fc263L,0x4d81f8aed14e7c78L,0x6f7cf97e8355ef22L,
38164         0xa2aadbc848a0aef8L,0xe0200ecf4fc3c61bL,0x7e58e6e0c8094ab1L } },
38165     /* 28 << 182 */
38166     { { 0xc52789bbf2d3bdc6L,0xd38673fc3b23d7a0L,0x8b6df95aacafbbfaL,
38167         0x37afdcbdc7f6eb6dL,0x57775bdd6cb4c9d7L,0xc34e5a2711007453L },
38168       { 0x903e5ba1b5faf98eL,0x811e142a9d4a8a45L,0x046d18932d7ac9e4L,
38169         0xe2fe9d1543ce66a8L,0x44b5beb4d4956410L,0x7c5f1b9ebb147f72L } },
38170     /* 29 << 182 */
38171     { { 0xd51033f48312b074L,0xc98fe29456f898d7L,0xa8d6433be8eeebbaL,
38172         0x50bf170976fdbb84L,0xdd95f89d43c14baeL,0x13f9c7366307bca5L },
38173       { 0x3cd12e2855e7bc8fL,0xe2d7482c3a52581cL,0x12a2c6c7b59eeb8cL,
38174         0xf98f79124ae87ffcL,0x41eb808e80d7bf65L,0x589970f2015e20adL } },
38175     /* 30 << 182 */
38176     { { 0x200a764a6333b070L,0xa0acd8ecdf0d20d7L,0xbc1c589953269941L,
38177         0xed7c9192b439eca8L,0x057c50eeb789f0cdL,0x31dc2d36a9c794a3L },
38178       { 0xe3f2d38dd58ef984L,0xdb250da69235b084L,0xc2ff1b49da05b500L,
38179         0xf2ea6cc50387c539L,0x8250353a3d1004cfL,0x69103201aed0bf97L } },
38180     /* 31 << 182 */
38181     { { 0x495cd7fc878e97f8L,0x6397fa8b61120b1dL,0x20b9afddc8708907L,
38182         0x84f55bb97be2ee80L,0x996fcb9d8d075b5dL,0x2e94d95ead858627L },
38183       { 0xf786143e77113ebaL,0x6fec684f7b3fdb28L,0x4be44fb211d10d07L,
38184         0x4b3478e2372f16b6L,0xec8d61614697ca58L,0x097d241c3a45f335L } },
38185     /* 32 << 182 */
38186     { { 0x6f6a6104899ef333L,0x95496f6d39067165L,0x42fd9a6ab51989e5L,
38187         0x1b60ce0f68f5b168L,0x97324d8756f7fe67L,0x443812f7676815a8L },
38188       { 0x265ee994685a7260L,0x342c7b2f6c6515f0L,0xe909232334b4adb0L,
38189         0xddcd233e1e5a8d18L,0x3dc5b27c5f4f6456L,0x9664533a7f421d9bL } },
38190     /* 33 << 182 */
38191     { { 0xa55e8ab09a35f4aeL,0xf908fb35ebbadf5dL,0xf885d61b35fee31aL,
38192         0xb8047f4f82728fdbL,0xa6fe454d33c5bc34L,0xdc5266332ef52e54L },
38193       { 0xb2f524a931581251L,0xb9eeec91aba760f4L,0xa95d396624a9b423L,
38194         0xfd52f4d29d3d75acL,0x82719e78834d4c33L,0xeeca71fb3840ca62L } },
38195     /* 34 << 182 */
38196     { { 0x984658940f4c60e0L,0x3929d4c645ce7c0cL,0x7846d6c19c4f9b89L,
38197         0x2c38a9b20fbc695bL,0xeeb4799ad73d4bb2L,0x7c16e5ba4e3b5520L },
38198       { 0x11ce92e51cf310d2L,0x0910dcc91e037725L,0x159fcef85fc5af9fL,
38199         0x4944f8ee1dcb3ca5L,0xf5d9f8c0b9a4516fL,0x452f0fa2f1cfa6e0L } },
38200     /* 35 << 182 */
38201     { { 0x59b15b61c634aab2L,0xcca0742a620df0b6L,0x791d95720d345276L,
38202         0xb775b790cd3854baL,0x944e591a256c26fbL,0xc5fda2d0b8fe17d9L },
38203       { 0x7dba5830c0aff69dL,0x46f7164b0f7c6d60L,0xd767cd58549eeb83L,
38204         0x4498b4f51ff2da7cL,0xeef2caf8fc594b0eL,0x88dc39ec5f0a95b1L } },
38205     /* 36 << 182 */
38206     { { 0x1a57d3e1b3fe597eL,0x1a3ad06d18d1b6f0L,0xf70f27b32e4a4617L,
38207         0x55e8a0479a75b4adL,0x0b24d5beede15d86L,0x2b3c41d0fb2f56b5L },
38208       { 0xf6cf36aab1d36456L,0x418a72fe1d8ff434L,0x64149a0d156746bbL,
38209         0xae65897c4e3a26d6L,0xb75e87d21e68eefdL,0x5b81e0b01cb27c91L } },
38210     /* 37 << 182 */
38211     { { 0x2c3fa19b34b90671L,0x369c9e9aa7c9aae3L,0xd89dc03f3d236ad0L,
38212         0x280c47b9588ace95L,0x0ad071be57f25a96L,0x36ce641d8296279cL },
38213       { 0x321778128595511dL,0x51878842b52cb227L,0x720df7ab4156b413L,
38214         0xccc71e10fed25819L,0xc878554e3fde679bL,0x9c50ecbe3b565d48L } },
38215     /* 38 << 182 */
38216     { { 0xb2d66f1ffe23ba35L,0x82339e2914b273a4L,0x454a5f0b58c2be97L,
38217         0x0ebadaa68488ac1fL,0x3c635442517e9af1L,0xa87044c3a5b9fe2bL },
38218       { 0xb8214dbdb505ae0bL,0x05a9bfad60bf4393L,0xb7b64b42428a49ceL,
38219         0xcad71866bd2283f1L,0x5bcfe7fce33a3a22L,0x018a2121fd6c73c3L } },
38220     /* 39 << 182 */
38221     { { 0xc4471fb02510a1c7L,0x542e73bd2c1c35c1L,0x0bc8bcc4f028a46aL,
38222         0xdf87cd2bb5610f25L,0x0845e4d1df42b41fL,0xc0523e3593aba84dL },
38223       { 0xc9161e8ed14887b0L,0xa96f9b3aa68c235dL,0xba1427a46f94d5b5L,
38224         0x6a5fdbbc858e00f3L,0x8170bad6abfaf661L,0xb4b9dc0ec9f4abedL } },
38225     /* 40 << 182 */
38226     { { 0xc48bc829ff7543c0L,0xc0bda14c4d72bfaaL,0x2f470ec703be0af1L,
38227         0xc70f1e8e92d37eb4L,0x08abdd98418f410fL,0xe38c74ab35386176L },
38228       { 0x9c07cfdd8c00426cL,0xba74c310a998f1adL,0x76b45140b7d2dda8L,
38229         0xa52b5e584948330eL,0x9b7332348d8efb26L,0x5d1763735d19a312L } },
38230     /* 41 << 182 */
38231     { { 0x46950a441d38ade1L,0x377fdf593058c7a2L,0x5e2fa1681aa129f6L,
38232         0x2eae63dbc5fe1745L,0x9616fee275545475L,0x4073a79c8627b2cbL },
38233       { 0xf1ec69ea9a5198e4L,0xe9a906aebd2821d5L,0x193a9387bc22625bL,
38234         0xca468d717b6c67ccL,0xb4d11cb360f17a73L,0xcd801a0e3df1cabbL } },
38235     /* 42 << 182 */
38236     { { 0x1b80b9c386cf5a12L,0xa5bcd3a016349cfdL,0xcee36e8f00d1edb5L,
38237         0x9566e10a5b7bf29bL,0xd0db98cfd4ff0a0cL,0xb516605e7fe427d0L },
38238       { 0x099066c18e614e25L,0x63537fbbabe78647L,0x5601a8b420117e1aL,
38239         0xfd125e2f06df05acL,0xa7fcbd420948daeaL,0x55ad4ee28ff03220L } },
38240     /* 43 << 182 */
38241     { { 0x18d71671da2c6332L,0xb38bf94f98ee4e23L,0x9b90bf72ecc579e8L,
38242         0x5af93aab1bf6b8c5L,0xdad6e7909342613eL,0x5a1d49dc710ad0ccL },
38243       { 0x2013ed8801468036L,0xb8bd31cf2f0f6f9fL,0xf025eb2aaac961a6L,
38244         0x1e201f659e1adb43L,0x2755f3aeac7e5132L,0x72d8e1d0f5205d31L } },
38245     /* 44 << 182 */
38246     { { 0x80bba9170319fec4L,0x4ba44600aaef6debL,0x83285b613594f325L,
38247         0x8879183753b5765aL,0x651b4c6adaf1b02dL,0xccc17578825f609aL },
38248       { 0x0b4076b39fddc6ffL,0x286e2daddf2fa874L,0x46c45233c413b648L,
38249         0x4fa46969b7cfe0abL,0x835786f3e04f5e5bL,0x526292a90ce3f707L } },
38250     /* 45 << 182 */
38251     { { 0x9928e9eb83f17723L,0xc38d5de26c2306aaL,0x3dd3f371558b3989L,
38252         0xfa4b194877154d39L,0x89f437e4b89f5448L,0xd5531444a6437c9bL },
38253       { 0x65a6874092537cd4L,0x5f6d72281246fb09L,0x0db0b3be58539e37L,
38254         0x1f0dd43df50f4143L,0x1aa12daec215aab3L,0xf82820fb7fe7b225L } },
38255     /* 46 << 182 */
38256     { { 0x32c6bf5e56cb520dL,0x74dc46c41569fa1aL,0xcbee46391ba52541L,
38257         0x5e2f511a50ec4575L,0x90165e35032b6f53L,0x2b8f1f8a5544c780L },
38258       { 0x95baef65c6b50147L,0x4e9db41946b7fde6L,0xe2463226f7afa6feL,
38259         0x4d70932235409eb4L,0x8faad8937c20aa0aL,0xc8c95a85abc1ab65L } },
38260     /* 47 << 182 */
38261     { { 0xd5f54ce676d1f996L,0x55957500e595a0eaL,0x9b62e1fd92c72af4L,
38262         0xb4803bc3069bf052L,0xb7cdf59c686ebd16L,0x2d1fa780655ac6d2L },
38263       { 0x6c306d3edca404f5L,0x24e9d7a9a7b5fa9aL,0xe4c080ddc533c701L,
38264         0x71d16b63425e29e3L,0x81c00db32d993e49L,0xb59f87f577902ecaL } },
38265     /* 48 << 182 */
38266     { { 0x43b58def987cf64aL,0xc95b16c63d4bcd4eL,0x5d1b1373bcd9b923L,
38267         0xaf560542522e052bL,0xc2ff8f7583800352L,0x11723aa17fe2a4eaL },
38268       { 0x28de7668e94bd9bdL,0x0ce80e0f874018a5L,0x0fe3755d8d43e726L,
38269         0xa78296acf9b075c5L,0x76d58d9882207423L,0x5c5bc6971db99205L } },
38270     /* 49 << 182 */
38271     { { 0x9cbecc969e2aea70L,0x1a3fd38d7e4f2a84L,0xdc35e3c84b95e560L,
38272         0xd5e912a5aa21d2e2L,0x037866628d8cd601L,0x4b726855f2bb35e6L },
38273       { 0xa45a827a0d763ea2L,0x17d6e5ea057bceecL,0xdab2381d09a2a2a0L,
38274         0xf1880617e9aa76dbL,0xb86444dbb184c5ecL,0x23a0e4b767da7c23L } },
38275     /* 50 << 182 */
38276     { { 0x2d94a6f030df736bL,0xd1ce20050b3be2bdL,0x201352b55e288cc1L,
38277         0xdbd3dc57779644a7L,0x9f258b16d191db2bL,0xd83c827fd1c123efL },
38278       { 0x74c5126e17f04f0aL,0x06008f14966e620fL,0xa4406ba80aaa9e37L,
38279         0x27323f797faf87eeL,0x43380a672b1206a1L,0xab1ed1cfaf15ebedL } },
38280     /* 51 << 182 */
38281     { { 0xa3d2bad9bb22cc74L,0xfe6591a80e2b9221L,0x8c94c974d3cb4eefL,
38282         0x772694266beb6451L,0x2942737a010986e4L,0x920c9dda59c1ace3L },
38283       { 0xd31af336da61e1d3L,0x973997a118021018L,0x50a6c8425710575dL,
38284         0xd61d47c9ade9d8a0L,0x90abe8f8a85f458fL,0x23cc28a3ac4d474bL } },
38285     /* 52 << 182 */
38286     { { 0x283d5bb63e052e69L,0x149ac3d01bd300e4L,0xb4c7b96ce0582ccaL,
38287         0x66102883428cb7d7L,0xd3eea16b500958dfL,0xe1b6a74f74674893L },
38288       { 0xe3b284be3fb0522bL,0x74b0fe2dea983a60L,0xd4328e5c81e465d8L,
38289         0xecb534c7403173b3L,0x1721e22774144d34L,0xb7273c6aa88a5141L } },
38290     /* 53 << 182 */
38291     { { 0x0ea24ac64018877dL,0x265cbfe42acf249aL,0x811c17e61837d63aL,
38292         0xff453f5d6b3adf1aL,0x7add0621a3031529L,0x62105dc838af1d27L },
38293       { 0x2cd31a899b56ec62L,0x5f524be5ede7bbceL,0xc485b2ff66a044f5L,
38294         0xae28f5dc87a7b274L,0xd41989a93415b6c5L,0x3051ca44c9c43ad1L } },
38295     /* 54 << 182 */
38296     { { 0xc22046bcfb50bf2eL,0xee22fb7b78f7c548L,0x5c41c6bc2b5b4563L,
38297         0x56da674a8bf9259cL,0x3732f77433d8d4c7L,0xa90bf0472741046aL },
38298       { 0x5ee7f4396288c2e0L,0xa7a1fec99ae621c6L,0x523c0569b76e955cL,
38299         0xda0c2b378d1e8601L,0x9010bc349559b56dL,0x8d2fab0917b8d9b8L } },
38300     /* 55 << 182 */
38301     { { 0xb2caf938281b021cL,0xc61f3abf1404b0abL,0x24203e1cea26d902L,
38302         0xc84f07e10d34906fL,0x8ba3d589f0cf7520L,0x86b54f6d9a2a90caL },
38303       { 0x9f87234f3d77a667L,0x328941966e3fa8d0L,0x0921b4a6e994d49aL,
38304         0xe77e9f8b8b3495cbL,0x9e5b74798da1fe56L,0xcbc09ce7b070591eL } },
38305     /* 56 << 182 */
38306     { { 0x583ee7dfe3b7e746L,0x0b6659e4a4fab3a8L,0x34ee02751946db5dL,
38307         0x5ae3c0ba1a12eecaL,0x36756ed44ccb83e7L,0x973b0861a80eaf3aL },
38308       { 0x969e38f46982ca90L,0x9a9bcd10018d01fcL,0xb540e9533272476aL,
38309         0xcf91dd0a75ab7002L,0x2c7d363f39ceb983L,0x4369c221974747c7L } },
38310     /* 57 << 182 */
38311     { { 0x32c5b289642be172L,0xe5cc452e697e6a30L,0x344935e10aa6841fL,
38312         0x9eb2dc4faad907a7L,0xaf77d029e121d0c0L,0x2bcddeb08bb073b8L },
38313       { 0x3584dee5e40653fdL,0xe853b6337605f214L,0x4723f0add4bab900L,
38314         0x16dddd27fbf91322L,0x1f96d7e610c525b2L,0xdfba535200c998abL } },
38315     /* 58 << 182 */
38316     { { 0x701e8ab819df9ed7L,0x1a6d74c13e2159d1L,0xe82127e0fc61a470L,
38317         0xaa2e5f33dd15316fL,0x92b6ea927c42c081L,0xfd470a298522aef4L },
38318       { 0x0c54a067e5ccf152L,0x60c113eda1a079b5L,0xdd501a8389d6e6b9L,
38319         0x3dbf20d219792456L,0x633cd2b710bf70edL,0xace5327a0aa8e5e8L } },
38320     /* 59 << 182 */
38321     { { 0xed79a2de3b2a8a4aL,0x02851125cbf095c4L,0x6817ecd1880fd3bbL,
38322         0x72acb6ff066adfe0L,0x04fd696d66ce8257L,0xb644f098dc81958fL },
38323       { 0xcab55d1525218005L,0x1184b0a64de70465L,0x6248e1157aa96b53L,
38324         0xe30958630516ac32L,0x19f80cc0d07084ceL,0xfdf7ca2efde86c28L } },
38325     /* 60 << 182 */
38326     { { 0x9a8857568bc1783eL,0xb373e5a0a7cf2ee3L,0xdeb162fde46cc503L,
38327         0xd5d334601074ef35L,0x0030f98eea159a90L,0xc5ffbdde64e50d98L },
38328       { 0x85a6486a48195b26L,0xdbf56597b1b9f2d6L,0x5df2352ab8613aebL,
38329         0xc425807ebd0189a9L,0xcf5a34d4fa1f4f7bL,0x233e26c7628fd2ceL } },
38330     /* 61 << 182 */
38331     { { 0x6c4dd28313a1e482L,0x24bfc23bf803f1ceL,0xb8e795b2f426832fL,
38332         0x636d2d63b13fcb5fL,0x2dbca0b214a508ecL,0x1948c957c1ff2b70L },
38333       { 0xc9d7cd4ae3135c7aL,0x1bf41de75d7cfe18L,0xfff9428f2f6cd5fbL,
38334         0xa25d3e8294d640edL,0xecdea1583e4fec66L,0xff3b2b1555530798L } },
38335     /* 62 << 182 */
38336     { { 0x483565313178cbc6L,0x085a31143f3a1ff0L,0xee2a58b11dc7054eL,
38337         0xa9ce7c113287d5e6L,0xd283d22c8fa263a1L,0x9160bb8be77ff147L },
38338       { 0x21dabddf918caf34L,0x6921e987ad1a9f13L,0x47e45c7d3ba0ad41L,
38339         0xeaac63192bd18585L,0xb88881060818034aL,0x2d8e9c1b60be0a45L } },
38340     /* 63 << 182 */
38341     { { 0xad3e46af32f4625aL,0x5c2f95dd88371d5fL,0xfc7a9adef2415ac6L,
38342         0x77a23c424ad85440L,0xce7c63712f4dd730L,0xd65bdc45a5c9f380L },
38343       { 0x763d3990cf11ee6eL,0x7b2a927a9ffc522aL,0x65ccf351deead5c5L,
38344         0xef1fa99cce4d076bL,0xdb6f5cca6708ba8fL,0x361525a0f3bac7ffL } },
38345     /* 64 << 182 */
38346     { { 0xbfc40c30f893a2caL,0xdf96980e0623bad1L,0x4fd7b54dc027511cL,
38347         0xf4799284cf3484ceL,0x655ab811069beea5L,0x52588bc87392e280L },
38348       { 0x522e7b404f0c17cbL,0xc0d88acac705e9b2L,0x9cf1b95877f3913fL,
38349         0x3e06b9267dd52514L,0x992e920e2908cbcaL,0x13baced26d6ed529L } },
38350     /* 0 << 189 */
38351     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
38352       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
38353     /* 1 << 189 */
38354     { { 0x8a46c911bfc6c637L,0x8dc3d699e4fa4fe6L,0xd4ba64f15cf8e4c9L,
38355         0x01b3908a01cb3488L,0x69b1fa5d38bd7dedL,0x92ad483818b2eae1L },
38356       { 0x619324beb33955b6L,0xc7f373355c8a6df7L,0xa397f42e925b3f69L,
38357         0x32169a495f7e4d11L,0xc0fa9a548d0d9f01L,0xf52a1f2289d8f2e5L } },
38358     /* 2 << 189 */
38359     { { 0x9c0d5231ba8e0a52L,0x94d0509e93e465d7L,0x67df90dd98515454L,
38360         0x223e8b9c8dbfb46aL,0xf39529a36d757ce3L,0xffec9175b4648296L },
38361       { 0x330749e8f78aae7bL,0x19e5549645f93cc3L,0x8c320b3494083aa8L,
38362         0x1161f5a321e321c6L,0x0980deedde3e7892L,0x605aa9196ad76cccL } },
38363     /* 3 << 189 */
38364     { { 0x71191262062312e3L,0x84c82a94691f46faL,0xad4b344bdda57f44L,
38365         0x674b758ac4f0cfd2L,0x3bc058a077543efdL,0x3d7c765756618d06L },
38366       { 0x95107c744dba9e44L,0xe59c3180cfdf1923L,0x5dbeaf35e3f1d63cL,
38367         0x012029c643ab8726L,0x4f588a4ea256c6fdL,0x14a01b7a3e5d2e30L } },
38368     /* 4 << 189 */
38369     { { 0x73fa3508180660f7L,0x4cae013e2d24936fL,0xf64a549f58493d98L,
38370         0xd9ceae0adc79f602L,0x6569e37bd1512b84L,0x11e4c022151c9151L },
38371       { 0x075678c2b55c5813L,0xb26cdb5809d3cb16L,0x6334dca3a57fb969L,
38372         0x0ed90820223dc3ceL,0x74f9c3aebd11e277L,0xaeefed3679c0b8e2L } },
38373     /* 5 << 189 */
38374     { { 0x22195e48e57ac6a0L,0xba77c58214bd1913L,0x265f96b4323349b5L,
38375         0xc183196ea124d497L,0x99f1f78d2466d82eL,0x185a18bfc6263afcL },
38376       { 0x29a3d5b686cf8908L,0x81f3bc00f680511dL,0x5f6ffc81661d015aL,
38377         0x31c2ff64cd5eb082L,0xc3c37ad672776042L,0x49438769d9c6ac75L } },
38378     /* 6 << 189 */
38379     { { 0x0e2fc74c2a24c385L,0x836a474034679278L,0x25518f16817e2c41L,
38380         0x8b573a8eb4b7d3c1L,0x012797f94ab56adfL,0x9e0e56d0fa2ab690L },
38381       { 0x009ba1ee1c9f6f08L,0x8ebf4aac2f412e9eL,0xb143122a1cfb4e02L,
38382         0x988cf0eccbf2b783L,0x44a7ed9657f5be97L,0xbdcad87251804147L } },
38383     /* 7 << 189 */
38384     { { 0x969fcd982f60d1a0L,0xf0f4c9b2ef06b3ebL,0x8c6438cb49ec8f92L,
38385         0x746107773f1653daL,0xf7cbc899b574576aL,0x758de9008494795cL },
38386       { 0x73045065ab22cf9fL,0x9893653c9ff13e98L,0x6e8860264a58d64dL,
38387         0x387d6cc34e3bf554L,0x82a49da4a42b0008L,0xb28bd9b71b0b1c47L } },
38388     /* 8 << 189 */
38389     { { 0x378205de2f9fbe67L,0xc4afcb837f728e44L,0xdbcec06c682e00f1L,
38390         0xf2a145c3114d5423L,0xa01d98747a52463eL,0xfc0935b17d717b0aL },
38391       { 0x9653bc4fd4d01f95L,0x9aa83ea89560ad34L,0xf77943dcaf8e3f3fL,
38392         0x70774a10e86fe16eL,0x6b62e6f1bf9ffdcfL,0x8a72f39e588745c9L } },
38393     /* 9 << 189 */
38394     { { 0x97e6400574103b65L,0xdad518d6db50ac66L,0xaf96065961077d1bL,
38395         0x1335de0a5baab1f5L,0xd404db749e444a1cL,0xd3124c5027d5fe2fL },
38396       { 0x1f20c68a0bd49e9dL,0x44405e6aad6a1654L,0x287d565193c362a9L,
38397         0x301ec6a2e76661bfL,0x4900f9b54c6f9927L,0xca3dbc3464bf3909L } },
38398     /* 10 << 189 */
38399     { { 0xa96955b9b1bafbc4L,0x8dcb55a7646ece39L,0x2b62784feb00e541L,
38400         0x462f9d7d2693249bL,0x8b264697794c189dL,0xded6ff5563354e69L },
38401       { 0x7c8ea441eed1089fL,0xe355f75c1462f461L,0x87b691f61210fd5bL,
38402         0x7291bffb6983cb27L,0x9ed83afc92800095L,0x307a3dc81f24d923L } },
38403     /* 11 << 189 */
38404     { { 0x9f79814a45faaa0cL,0xc64a7ac93bb1b07eL,0xaad6ff897f2ad506L,
38405         0x43da948300b83699L,0x6a702b8d6617956dL,0xfcb1035a7981052bL },
38406       { 0x094acd48cb230926L,0x3c3249d05da96800L,0x934088079d7208c8L,
38407         0xe4f04014d738a48dL,0x49bc5f0bf18b06c2L,0xf854285f596b9befL } },
38408     /* 12 << 189 */
38409     { { 0x7cec60ead7804b2fL,0x0064464345c11441L,0x3c6de88b769cd685L,
38410         0x34709186c7f01232L,0xd9eef41eedd2bd0dL,0x3bafcccde427faa9L },
38411       { 0x33e5350ec07e701aL,0x9cb2eb47a87c1fd1L,0x9fa9a7790d5f5b28L,
38412         0xa2e7076b07ea2e53L,0x72f4da325c169cf4L,0xb7f192947e751588L } },
38413     /* 13 << 189 */
38414     { { 0x1a3b217d2f6d700dL,0xcbbe9349ed335d55L,0x428adbfb53ff169aL,
38415         0xbd74385214793b47L,0x2224e2569d9460a2L,0x8408600809982ac0L },
38416       { 0xae6c6f9934447242L,0x63c78b2b9b51fb67L,0x381c948a389593d4L,
38417         0xf4cdd09f6e79ee72L,0xc658428ba185a0b6L,0xcd7562a786fe4c6fL } },
38418     /* 14 << 189 */
38419     { { 0x47eb133532dd7a30L,0x9d058169a9db654dL,0x375c59df6e7a2b1aL,
38420         0x55d37c677a35f29fL,0xc78a3678493c4cdeL,0xe5f0e2d68d83e31bL },
38421       { 0xf7927002e9777bf9L,0xdd559324a5afdfc7L,0x077c6c48b81c08ccL,
38422         0xba1c98ccaa2ef694L,0x06c6c9544c02dd46L,0x211e50f37dd3145eL } },
38423     /* 15 << 189 */
38424     { { 0x7f985fa8a96aea53L,0x811f94dc480b38d4L,0x91fdd510f3d40c68L,
38425         0xc156312ccd763693L,0x24b544c3640057dbL,0xd7d5d4f5ad3b5a1bL },
38426       { 0x5e235a1e26cda8a4L,0x0cf7b7cd1d2c6f17L,0x17b1ccf0908d3107L,
38427         0xf32f2a06f555eb5cL,0x274f7c2cb3c278c6L,0xcf1eaf296af1b44dL } },
38428     /* 16 << 189 */
38429     { { 0x2a5f8ecf06616d0dL,0xca9b1cb8c7deb373L,0x9de31cedc59c4301L,
38430         0x1e0f40b10111d998L,0xd29d229f960d5b95L,0x10563249d1dabab8L },
38431       { 0x7b225cc9a05ecac9L,0xb02e689678f3b8a0L,0x009b52a1f5fb06b2L,
38432         0x8a575d3f842b9081L,0xfddb48afe9272512L,0xd39b8f1d0b452cb7L } },
38433     /* 17 << 189 */
38434     { { 0xb6efc7e167ba9cd3L,0x5a642c288e4f62a6L,0x214a63da364378edL,
38435         0x582c59944121c53cL,0x840277facc9a728fL,0xc6db3529f8f72d39L },
38436       { 0x9c5cc2760aca9955L,0x8558a58db8b6dcd6L,0x709226acf0701f24L,
38437         0x6ce95b21ed248b40L,0x32ea565b5487934aL,0xa75a688496f9ddd1L } },
38438     /* 18 << 189 */
38439     { { 0x0d6b9c7c67e09987L,0x261a564d0761ad52L,0xec4621749f60925bL,
38440         0x83ee0c1218529b03L,0x72972467fbcfff74L,0x37fc074c6abc4bfbL },
38441       { 0x8b6015bd54e65e89L,0xde8583eb991583cbL,0x379548e1b4d2c62aL,
38442         0x88024a9a9b24a5e5L,0x633aa869fc03abfcL,0xa27657b98fa35283L } },
38443     /* 19 << 189 */
38444     { { 0xb340993c5727e344L,0x2379f51d4f3295d5L,0xa5de3efce2929734L,
38445         0x7d2e2c82d8717e3eL,0x8f24abb67180db1fL,0xa5060d648a4ed876L },
38446       { 0x8d39e3a2761110d6L,0x38d30c93a3bb5b66L,0x07774ac3c12fb741L,
38447         0x7d4ae5a55f4425beL,0xb9848a2afa704922L,0xed9ab68c4cd00812L } },
38448     /* 20 << 189 */
38449     { { 0xde9703b461d9e770L,0x02d4091def4653efL,0xefd229aa576eb5e1L,
38450         0xc0b0b243f77eb987L,0xb11309b2eefe8f71L,0xfeeacf2f68478044L },
38451       { 0x8dfd8e8643ac3dd7L,0xc0a24181b07f95c3L,0x551ca09624be161cL,
38452         0x6cb2c1d4b098cdc3L,0xbfc74e9be74f84f8L,0xe58e14d9067e3388L } },
38453     /* 21 << 189 */
38454     { { 0xda121aae0ef98506L,0x435f28c6328e636eL,0x64b2170a720d40a3L,
38455         0x3ddb0e61cd24a844L,0x111442478797c7adL,0x624e7f73d589dd37L },
38456       { 0x3e7e0ed0a8efdd25L,0x8de031f116509a5aL,0x1330cff5873488c2L,
38457         0xa80c60b3342ecf75L,0x9d3742c8e62550ceL,0x8ec9b229e46475f9L } },
38458     /* 22 << 189 */
38459     { { 0x9eca6f94f025baa6L,0xb2db0741bcf9c741L,0xf8e2aab590bb8f56L,
38460         0x4772903208762829L,0x067a0c5ae2a266c8L,0x22b104c771b7d7d0L },
38461       { 0x4a48cd6953e406dbL,0xb85e44d524f0070bL,0x6168262fe10133ffL,
38462         0xdfc02315e4874e8fL,0x20dba2d7ca317e3bL,0x441c56d2e1d2c0c3L } },
38463     /* 23 << 189 */
38464     { { 0x9ebd10d6c444a2fcL,0xda7683e3f18ac11aL,0xdd42ed990fe8e59fL,
38465         0x9c867debee068909L,0x32df043fccc77aa3L,0x377423ce4aaa45acL },
38466       { 0x960940524a90c535L,0x48bfe83347d1799cL,0xe8cd1a55ccabd174L,
38467         0x2ee0a276682145c3L,0x4249297e8d606c00L,0x22021ce2fd7af6d3L } },
38468     /* 24 << 189 */
38469     { { 0xae10069e808dc4b1L,0x64df30e18fb3ba73L,0xbbe4caf27ebaad0bL,
38470         0x5907bf373dd6119cL,0x0a723dff9dfceefeL,0x59bff4ddf7cffc7eL },
38471       { 0x7bc95fa26a6f43c2L,0x9001d1d53ca0e2b3L,0x316a7ecd27b3335bL,
38472         0xbf08e6727b8d7d49L,0x4b209f93c619058fL,0x4c0ca01e59d8f9eaL } },
38473     /* 25 << 189 */
38474     { { 0x3c1e7f45bad772b1L,0x20f6f1732544af67L,0x14f491f9a7d6544dL,
38475         0x1451cc8e6acea162L,0x20c8ffa5d234ab89L,0x4b59bce1f5cd1002L },
38476       { 0x99da4c0ee63027acL,0x6290cb963fc1f75eL,0x3a51774524c4d85cL,
38477         0x3bf9929c1fd144e7L,0x9bcb97467068294bL,0xcb0b3e5d2e61a022L } },
38478     /* 26 << 189 */
38479     { { 0x18c452c4cae69c3bL,0xf45690acef0f00faL,0x3b363aa04f66a5ccL,
38480         0x9dd41c0a47718c52L,0xfa219d7e7e5cd370L,0x5d384db7b2196dfbL },
38481       { 0x5e14749b90b4d46bL,0x55796656d9db9481L,0x3bf13d0ac8cf353eL,
38482         0xb89a28a6a95c485aL,0x568fa3d05da29783L,0x4aa008eed182b1a4L } },
38483     /* 27 << 189 */
38484     { { 0x4f38667a179639e1L,0xca492d50ba7c7a16L,0x191e4a3478fe9dcdL,
38485         0xa3cddb2f03fc70b8L,0x57d90a90a751ec9fL,0xcf88357457a50cd6L },
38486       { 0x69abd86d7cc58687L,0xc73a00408466bc6cL,0xfbb99c755c495208L,
38487         0xdd5f1ab9c13347b8L,0x9ae6fb92060b93efL,0xd6bb56a3588e5369L } },
38488     /* 28 << 189 */
38489     { { 0xf7e1ed3bb09fa8f3L,0xbb4fe6f71da5be9eL,0xcbab0e01f4d1ba21L,
38490         0xb732741076a5f326L,0xd94d2349206092afL,0x739f3cd0728e0e4dL },
38491       { 0x568644aaf81fd823L,0x510cff6b6110e2f6L,0xef4cf1ac566c3598L,
38492         0x2c26f17162aae69bL,0x1e4360468964a2a5L,0x83c0bbf63e472c50L } },
38493     /* 29 << 189 */
38494     { { 0xc198c07064b2955aL,0xc32d41e1d8d43284L,0xfb6f0e2c9f4fc13eL,
38495         0xf4d5b60b41c61889L,0x5c79f500beb36946L,0x328b22408ca4beabL },
38496       { 0x64058e916697617eL,0x6bdf7409f43f7390L,0xf2afd208f5bd8512L,
38497         0xc0000aa0bd1ad6d6L,0x38b8e03bd9f6c1c2L,0x0a34680d665a2d06L } },
38498     /* 30 << 189 */
38499     { { 0x79c04804aabd965aL,0x9581aab443d0b660L,0x59bff0035ba71d23L,
38500         0x212ecd58b6a0cd80L,0x29bdcd33bf1ea5d6L,0x59fd2ff477a002e1L },
38501       { 0x3c9d21308d9cd247L,0x790e9dbcb1786da3L,0x967ee5e714464d04L,
38502         0xd6f7ebbd2b5373afL,0x1c0b22d539768d40L,0xdfb54983913f6cc3L } },
38503     /* 31 << 189 */
38504     { { 0x5c9808b78a42e002L,0x5cdb2b070f732854L,0xdc92b1676d6d4579L,
38505         0x789dbb8ebcc22c54L,0xd76b2d40716eb28fL,0x5cbaadea004affd8L },
38506       { 0x5d4d84dd08fcfe12L,0xd0f1d7ee20d4b893L,0xc98d77dfbbb90db6L,
38507         0xbce9a5a2b1e29a22L,0x71a6835d0b54e100L,0x0199594a55b1ac68L } },
38508     /* 32 << 189 */
38509     { { 0x167ec88a51b3f1ceL,0x19756ee0420024c8L,0x10f2e2443877e634L,
38510         0x6321bf2603462cb3L,0x1dbd10ee9d3afceeL,0x0726f5f22ca17dcdL },
38511       { 0x094652660bacf018L,0xc92a9f2de1feb969L,0x0043b0f95e1c5912L,
38512         0xa09b94d1757d3a63L,0x533956529fdef1e0L,0x9826886cd4fedd41L } },
38513     /* 33 << 189 */
38514     { { 0xd22bcbee51964ceeL,0x3ed80af3b0eea46eL,0x263cfa026b854aafL,
38515         0xfa4ad481b9ca3b51L,0xf8c569a0b4451297L,0xeafb78f8f48059a3L },
38516       { 0x86a9e3c037093acbL,0xcfb3bb63275ef52eL,0xc4672d3c7c924f03L,
38517         0xa87350871691be3bL,0xf124f3a52be289b7L,0xf45052dc6b80b6c1L } },
38518     /* 34 << 189 */
38519     { { 0x79c99f99a010db6dL,0xe83088a74ee93fc2L,0x76e8376d836b1a7dL,
38520         0x8cab091c4e24e127L,0x5c98a00f7283cd21L,0x1beaf4a084997647L },
38521       { 0x2cfb55b8d934088dL,0xca24052cee724d5fL,0x5d6e9db5bba84289L,
38522         0x133414b26fb26d72L,0x3e844eb9cb12a503L,0x5eac12dab53d6496L } },
38523     /* 35 << 189 */
38524     { { 0x79a098812cc6698bL,0x6d44e7577f383e02L,0x1969f93785b5f732L,
38525         0x3061f62792acecccL,0xa9428d60cc2a4752L,0x69a472af2cf58626L },
38526       { 0x63fde53cabd347d7L,0x138b5b6a1aed4fd3L,0xd93fce1f2bd48519L,
38527         0x957fe302e49cc436L,0x9b51657a2e21ad5fL,0x3b5c4cb6acbd3af6L } },
38528     /* 36 << 189 */
38529     { { 0xdcfa78b096dda000L,0x5b60dfe5be2303bdL,0x7a6bbd34c7c6ad6fL,
38530         0xd45c9cb57012b97dL,0x9a049e36812e1662L,0x723bc0b66a5483aeL },
38531       { 0x7fc03b6ad1c82e81L,0x02ddd6d2b23f6818L,0xe8914b2d30dae39aL,
38532         0xf4f0ae392f692056L,0x198a31bd45f1390eL,0x917ce4f4f542565eL } },
38533     /* 37 << 189 */
38534     { { 0xde39a4e6ca447864L,0x95a028f9f0b131ccL,0xba77ac314a39c4f7L,
38535         0x0c24d09614857939L,0xdeea56edfbfaa0fbL,0x79aa342f4c920bf1L },
38536       { 0x50228f48c7e9dc62L,0x0fd9d1dee0f0fba3L,0x3fc03993cd703f6bL,
38537         0x229a3bf4c5ff39fcL,0xa7456aa484f9cb20L,0xb01bb5a7d12fd7d9L } },
38538     /* 38 << 189 */
38539     { { 0xfb390be4539519d7L,0xbaa98a2a6ad44d22L,0xafd19a75ef89de1fL,
38540         0x1afaef2971e27781L,0x18b297d79887739fL,0x8fcff6048e6da42eL },
38541       { 0x17bfc1717e861a36L,0x1467800537a8843bL,0x2bc47afdeb16065dL,
38542         0xcc038e2fbab7b4fdL,0x9d8fc42a3eb9be7cL,0xfc2f0b295928da63L } },
38543     /* 39 << 189 */
38544     { { 0xa4e33ca261c14fbdL,0xebafe73fc0a87f99L,0x22fdf1d1f5abf7f4L,
38545         0xfc1da26549a6b956L,0xfd8c48e5be25dd72L,0x9fd6520ad31a25aaL },
38546       { 0xe0167d4ffd14dbbaL,0x8838d2ba7370153cL,0xe5f7d69b133fdda1L,
38547         0x31acbf8de1749b60L,0xc14ec9e2107558dbL,0xb06d0252b99553acL } },
38548     /* 40 << 189 */
38549     { { 0x34590975ed424438L,0x7c03ce744d11a200L,0xcc939a286ec406eeL,
38550         0x8d214276fee5454dL,0x66a0e1a56b257f70L,0x93761a8a006fb85eL },
38551       { 0xc44f9df2aa70b65aL,0x1dac524f91d9e2e8L,0x5894a8224fca1a81L,
38552         0x8586e418f3ed85bfL,0xd494dfb202899b5bL,0x7ea9f222ecb8e371L } },
38553     /* 41 << 189 */
38554     { { 0xd93ee716b0958516L,0xa91f39db3eb86888L,0xb472c1e2ac92105eL,
38555         0x4d88a307429ca094L,0xd3fd88027a8e87e1L,0x40c4cd50126a2cf2L },
38556       { 0x046ce3bf11cf2046L,0x412678ee05691999L,0xea0c78168d3a2921L,
38557         0xd24ae89924f3c66eL,0x2c4457f00bd144e9L,0x82005b4fd7a52270L } },
38558     /* 42 << 189 */
38559     { { 0xf1b3ec32924340e0L,0xe5430ea3b33a05abL,0xbf43b031807629b7L,
38560         0x53c9407d57014039L,0x6e67b52f2f195ce2L,0xc8cc645f1e48d8c1L },
38561       { 0xf2234275c08f2122L,0x9cfe3c74c2f233e0L,0x235e6b349c4e0af9L,
38562         0xb4e8ef5770de39d8L,0xba573a727f73d0a9L,0xe12c506a18587ed2L } },
38563     /* 43 << 189 */
38564     { { 0x6b9669c59cf3e4f6L,0xa472d5dbff677559L,0xde845b0c877e5590L,
38565         0x9f7ef5802d0e2350L,0x87ea99d4e78c1096L,0x213243e9abb68028L },
38566       { 0x0172c81595e71abaL,0xc2592a762ca34c65L,0x50749aee9dc286dcL,
38567         0xe37d10884055de3eL,0x3e5a93bb90d652baL,0x0cbb7a08c32aa3e6L } },
38568     /* 44 << 189 */
38569     { { 0xe0bf3d8a026c43cfL,0x091956cfeb702508L,0xfcd486c9a6b3203aL,
38570         0x94a6d52f365460ceL,0xefeb5400563bec77L,0xbe6baa9619b2659cL },
38571       { 0x116f71c34bf21a00L,0x83d1c99a86d21871L,0xff1ba96aca0bd547L,
38572         0x5eb0acf741b94afbL,0x1be5d66fb1aaad14L,0xb8ececc5e6cd6d4fL } },
38573     /* 45 << 189 */
38574     { { 0x65f6e29dec7d4de8L,0x082fa0560e938c79L,0x4cda3fc925a02f04L,
38575         0x77dbcf0d3bac5cadL,0x625f9bd859145bdbL,0x98b7fd64553a11f3L },
38576       { 0x621bfbe387dd8a45L,0x6519421d1c35176bL,0x89eabac6d5ead4c7L,
38577         0x45c68bfe54acfbd5L,0x87cd244a84f30b68L,0x83b5f6b27b39275cL } },
38578     /* 46 << 189 */
38579     { { 0xd43b1d3c0ed0ade8L,0xd60b1ae7640e7d37L,0x965489e6f88e06e5L,
38580         0x35398ac89653417dL,0xed1e89ac02cfcfc5L,0xd127f68dbb6f2bfeL },
38581       { 0xa569c59fe22bb079L,0x7933f14e4ca8e9deL,0x68b4964a30033c3eL,
38582         0xab438cf88f069045L,0xa64f3a1516163059L,0xf40499c14576fe42L } },
38583     /* 47 << 189 */
38584     { { 0x361c28da052567f7L,0x8a2c6aafe0db84b6L,0xa79eb10cabbc87d3L,
38585         0xeaf7bfff4141b3acL,0x90bba4a953aacaf8L,0xda577661c35f9564L },
38586       { 0xb2550d0dd4487a5fL,0x69d43c5199638269L,0x6d16973f7a1f8ac6L,
38587         0x3dfb2253c71e4a4aL,0xafd836aefa36168cL,0xba72fd1faae6dacdL } },
38588     /* 48 << 189 */
38589     { { 0x690c0cfeb449d1e2L,0x4a5e150b1b8e1577L,0x22508042204d98a6L,
38590         0xc87a97f5bad2eb08L,0xd307c59ed25823eeL,0x6ed083580df8b3f6L },
38591       { 0x280ae344314e7016L,0x6a55be876ef4e889L,0xea930e5a24d04e38L,
38592         0x0269d9a7309830fcL,0x41dc8f0ae4afeebcL,0xfd1bc660f14ee02dL } },
38593     /* 49 << 189 */
38594     { { 0xf81cc943631da366L,0x2e821eb85ab1a2caL,0x339e9e4765433883L,
38595         0x3dc14370e1f60c71L,0xbd6c79bebc25b506L,0x2bd3ad51a8a639f0L },
38596       { 0x7c168f13c700a293L,0x64fef4fc28b4ce88L,0x3ccdc3080c329c6aL,
38597         0xbfd78932b76a9452L,0xf0c123fbc684f4b5L,0x8bfad06432305ed6L } },
38598     /* 50 << 189 */
38599     { { 0x208a668feea1a9ddL,0x8af75caeab903f09L,0x356208b449265292L,
38600         0x57b24ebe53faced4L,0x9c8aaa7303694920L,0x1c06ef5ad2f90179L },
38601       { 0x794ead99df92de87L,0xad900c4e7a73fe9aL,0xdb66b9ae715d9f66L,
38602         0xd19dc46db1bc2950L,0xb0a5af5c24c82c0aL,0x7d83f950371d0ec7L } },
38603     /* 51 << 189 */
38604     { { 0x716071e3abd37656L,0xaa22858be6cab564L,0x6793a66f5aec00ccL,
38605         0xe2ea5401e025da6dL,0x3998ea5d2eb0059cL,0x4ff6f442e39abb77L },
38606       { 0x703eabdabdb6e0f9L,0xa33e6deb38522433L,0xe23c13f6ca83c2acL,
38607         0xcfb8e57c0cac836fL,0xd0f84bde7692714cL,0xb4fc3b01f3f41d29L } },
38608     /* 52 << 189 */
38609     { { 0x67842ab4d8f358a5L,0x70cab57540e2fb69L,0xdebc3046e5c458e4L,
38610         0xc3574cf47eb004d5L,0xbac261a1c86f20f9L,0xc1bcb661deccf7fcL },
38611       { 0x5b3b96dec5574e9dL,0x07b878b3e151fb0fL,0x2f2d126cd38bd5f2L,
38612         0x06c951e8319597c9L,0x5529be4424ed0027L,0x82dcacc2ba8d7acbL } },
38613     /* 53 << 189 */
38614     { { 0xc37eef0149311e82L,0x3d07aaad401d010cL,0x934e039e53417831L,
38615         0x70775653da895ec3L,0x206b80af625cbe49L,0x9e2a4ee1e53ccb36L },
38616       { 0xebeace45c8ca6ff7L,0xadb19bd9925302deL,0x951bfcc497dee154L,
38617         0xd09882da79b60e1fL,0xb1e9cf0cda5f2516L,0xc2b697295e4def97L } },
38618     /* 54 << 189 */
38619     { { 0x74ce542d04f860e6L,0xdc8adf8fa3c48075L,0xe19852232063f76fL,
38620         0xf651c9fd5cd9ff61L,0xd4cbea69bab39ea0L,0xb6d4749b28fe3443L },
38621       { 0xaa7747ec65e960ebL,0x1a1b7b65e132a213L,0xfa52901f402a50d4L,
38622         0x3e4d2da68d43700fL,0xbfc7322937d45181L,0x68a812f9008bb845L } },
38623     /* 55 << 189 */
38624     { { 0x226d4d233e4cbf5dL,0x36359f52576243e8L,0x032af38a39a1999eL,
38625         0x9b59120a687eb228L,0x85c56b78e68e1498L,0xa7a14bd4849d03d1L },
38626       { 0x9e7177b345c4c3f1L,0xad7e4975183bd846L,0x42418d9a42f69dc2L,
38627         0x218e8f8e4f52cac6L,0xafafa7649f1f3214L,0x32f6f72b747f7592L } },
38628     /* 56 << 189 */
38629     { { 0xefca7f7ba6c53c1bL,0xcb4bb33c524457a0L,0xc9eab87fe57d08dfL,
38630         0x48c01c2a7d9a1967L,0x11c97ed97dc27492L,0xd8c644861cf1f639L },
38631       { 0x541f8c0d8156576cL,0xdf5c8dff2384e299L,0x9806935ba6be190dL,
38632         0xec6c5de764494b4eL,0xf04e2d4cb83c00b6L,0x379af438c0b84f15L } },
38633     /* 57 << 189 */
38634     { { 0x64e6289d92bbc1f8L,0xe88b78c5a0620121L,0xd01bac79a0fbc373L,
38635         0xa2e7986af098f07cL,0xfcac4dbcc5911218L,0x2e2bf56db337ed26L },
38636       { 0x878d9819e89a73c6L,0xa7df4f5768df46d2L,0x74bf7e2f4b3c9568L,
38637         0x2f2b187aebcce535L,0x544f18139a4c2be3L,0x3a5fe300a5938f0eL } },
38638     /* 58 << 189 */
38639     { { 0x901a14cd70aa91aaL,0xf0b6e1ec7f0b0a70L,0x6fd1ee0156a8bf9cL,
38640         0xe7e53c6693fbdadbL,0x18ebae68e17de706L,0xf4107457ebecf636L },
38641       { 0x77a85ea4a9f6c696L,0x3ea193e17dd9e3adL,0x9497e0a9f151c8abL,
38642         0xcc9237497a1dbf14L,0x2e36740e8f9be59fL,0x1b1c7d7c4a249e51L } },
38643     /* 59 << 189 */
38644     { { 0x7a45af2242cdcc53L,0x3061d91b8682832dL,0x85e080f6c375030fL,
38645         0x3ea6dcd1418440c7L,0xe0559870d14b6537L,0x36619215d178b45eL },
38646       { 0x48a4b452dcb85a34L,0x79cf4529bd5504bdL,0x506215e9e9c34c8eL,
38647         0x961f74b6dbd00e2fL,0x473d1397cbc84ddbL,0x6c64f870a8d67cb5L } },
38648     /* 60 << 189 */
38649     { { 0x519a6edb91a9b99eL,0xc0ea29e0f19221eeL,0xde83e0f77dc193b2L,
38650         0xa7b33b6044be16f6L,0x7edcb49406c8e8d7L,0x9f9dbb86392c0ef6L },
38651       { 0x09aefe035726bd5eL,0x782d8350c4e80b7cL,0x14e41a49186b80e9L,
38652         0x9af13703499ef97fL,0x5752877f2cbcc336L,0xdd0f8583d2df624dL } },
38653     /* 61 << 189 */
38654     { { 0x1cd2be3f32f6b0a4L,0xfd5da4a90114bca5L,0xc322a6a198a39a66L,
38655         0xca411eeb10d64384L,0x7c5d3ed0c72d8b6eL,0xf20c76697481309fL },
38656       { 0xaa4e45dca155872dL,0x66e41d54b87c1e51L,0xbe2fe5e6a6bfe6b6L,
38657         0xf60ca33a08a4d3e7L,0x45c1ec8c7211b48cL,0xdf44d3b573b78f7bL } },
38658     /* 62 << 189 */
38659     { { 0x21eda67429a1e6acL,0x33118990422ce5aaL,0x236aa9ec27326810L,
38660         0xc42dff9e3be7b318L,0xbe4601281690755fL,0xa395509d8c1c60c6L },
38661       { 0xa36de79d05b991d2L,0x55f516a3632882d4L,0x4c8c5a4296d1d493L,
38662         0x56199648533cda6dL,0xf9c6897a603bbfeeL,0xae835160f9857cc4L } },
38663     /* 63 << 189 */
38664     { { 0x700bad58d6aa9618L,0x2ad7069c05d54c73L,0x7f3ff5992f6a8495L,
38665         0x39de751ee26e6720L,0x39126d97d4cecf54L,0x353e00e21523aca4L },
38666       { 0xee905af017a33178L,0xa30173d31daf2642L,0x24cbbcc728f9169dL,
38667         0x4e65bb13a7039e69L,0x004a11859121e44eL,0xd4efa5b91c1e60beL } },
38668     /* 64 << 189 */
38669     { { 0x2e75a26eec65b53eL,0xfeb630b270552fb3L,0x53dfd057ee7d8e4aL,
38670         0xb959110d8994f449L,0xb4a16596bb538367L,0xa70917bdef82f29cL },
38671       { 0x5a76430043bba6aeL,0xee207476cfbc194aL,0xc7eab23803a4184bL,
38672         0x60c67ef20f7fcd62L,0x41e05799dfa8a0c6L,0x5d7d05e604d352b0L } },
38673     /* 0 << 196 */
38674     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
38675       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
38676     /* 1 << 196 */
38677     { { 0xc97c01eb436b59f5L,0x1d15aca7ef1848abL,0xdba1ce807fa7d3c2L,
38678         0x69e6f96e81060874L,0x6e3e0df74d7eeeadL,0x8a3b5e85b0c87f3dL },
38679       { 0xc55ae3dbc8a23914L,0x5cdc2a92bf6d27d9L,0xa6008c591de7860aL,
38680         0x8202f8b66e546731L,0x652f2d07aa1e45d4L,0x146f214f6df5415aL } },
38681     /* 2 << 196 */
38682     { { 0x041c706cce5fb4d9L,0xddc78cb3b22a79a7L,0x7dc4cd27839e9d5aL,
38683         0xdfc9db83bf3c4c06L,0x85b8094138b7bd22L,0x1007dea2d0f4c2daL },
38684       { 0xd7b34006c633fba0L,0xa8880acf4476e55fL,0xa340b2c275236685L,
38685         0x5ddd05510113a85fL,0x7dfc7ab29cb32704L,0x9a334a33dabf22ffL } },
38686     /* 3 << 196 */
38687     { { 0x2fbce9bed7d1146bL,0xcec9e5d8b3980bd2L,0x48ea45939f4cbaf0L,
38688         0x56c540092574a3bdL,0x84a39630e792c39aL,0xe5c690f8eef81343L },
38689       { 0xf996760f17655bc9L,0x6009c2156c0c191cL,0xa0ca12e6966d7027L,
38690         0x92a6d5d52e6f7c63L,0x46809d269bd13eadL,0x3c11fa7967aac681L } },
38691     /* 4 << 196 */
38692     { { 0x3fc9b3cfabe2cc87L,0xfd8d64e3514e77feL,0x2003a58afe1ad535L,
38693         0xcec4be38cb39149fL,0x4d578c99bdedf470L,0xcd35d7a33a356519L },
38694       { 0x7a762f278b078d6bL,0x3b6891ed31ae2701L,0xdc0e817f270c508eL,
38695         0x5a7be2049fdb29c8L,0xfa1a0be3cb2711d3L,0x5865f55f3786a0c2L } },
38696     /* 5 << 196 */
38697     { { 0x1d0af6b52f641cffL,0xa932adeb3648c4a0L,0x67641951b1ea8fc4L,
38698         0xc0b90064b1fae482L,0x7012642f6623477bL,0x1cddc0245bf019ceL },
38699       { 0xca1f4675c2c32737L,0x11525a5e97d6b18cL,0x9c034ef2d3868de9L,
38700         0x0533d921044e0c18L,0xba6cf14ecb5e38c3L,0x438309f3509d7053L } },
38701     /* 6 << 196 */
38702     { { 0xe164268ec4ff9f0bL,0x6c8e9349e6c36e63L,0x734f979478ab17f3L,
38703         0x46d468de0179ed0eL,0x7e68f006dfa26867L,0xe4d4a85de3d0485dL },
38704       { 0x0913a1d7f84c0f8fL,0x4095c8c025a9c9cdL,0xeeb1a79e49eadd08L,
38705         0x433f5e417dd8f954L,0x70a6281430bb26d0L,0xad94d8f6ff5e8e29L } },
38706     /* 7 << 196 */
38707     { { 0x6a352b579e32c0a4L,0x5274a08277ec7a40L,0xee1f7c7a240e6dc5L,
38708         0x85d5be62d313b4a9L,0x1522c5d25c01a405L,0xcfa08aab960afd5aL },
38709       { 0xa3cb77f38e8a93dcL,0xaacb16766d1c98c7L,0x84090c7d3b93fa9dL,
38710         0xc77f1ee13c0383adL,0x461c93b776f7a220L,0x66d63a1d04ac0bfcL } },
38711     /* 8 << 196 */
38712     { { 0x3c7d6b644751207fL,0x65e1f96ae440c1a2L,0x8ed15d20aa0eaa1eL,
38713         0xe944ad2fc0eab490L,0x71525aa1f6d9f260L,0x5cd14c8816146ba3L },
38714       { 0xf940190814a41275L,0x3bb7ea742288618dL,0x6a4e1c37cab1060aL,
38715         0x357fe4d0c8cac96fL,0x97a8b8ab6a2466ecL,0xb6e83fdb9c01be70L } },
38716     /* 9 << 196 */
38717     { { 0xa55a7142cb09a69cL,0x0a39fa12896a9c24L,0xa7131a001f6c9c82L,
38718         0xdacbfae97509c912L,0x3793d4ef4232eb57L,0xb63d9fc0da02ac15L },
38719       { 0xf1ce48a09ab37492L,0xa388dbb5cf9ddedbL,0x7224ef47fd7b2aa4L,
38720         0xdfe18be82fd35ae0L,0x2286ae7b90a2e98dL,0xd06cfd71e0d3c2daL } },
38721     /* 10 << 196 */
38722     { { 0x7825df5c948663a4L,0xc8c093adeb4ec9ddL,0x677c51ebc1505989L,
38723         0x8c28421524041f43L,0x0f63f15ac9ef610bL,0xcb98841d257678c5L },
38724       { 0xc0560066c52c64acL,0xaf7417db954180e4L,0x935c08876fe1f0e7L,
38725         0x8fe556ba46d03a88L,0xec44271484a0c4a7L,0x431f8e8395be9544L } },
38726     /* 11 << 196 */
38727     { { 0xc1fc18cb3101ce6cL,0xff753902048e52fcL,0x768299554e58e21eL,
38728         0xac990acc32856d44L,0xaac4d5dc9f8a9da8L,0xca1740fdd4be9e8aL },
38729       { 0x59250846892d8bdaL,0x45f45cad19c97c71L,0xf29e2724e6ba5c87L,
38730         0xe441134473f6a778L,0x9f4f9027a0f278faL,0x11bb7ce02bdcef71L } },
38731     /* 12 << 196 */
38732     { { 0x0cc553bb9b3fd7ceL,0x2e0ff43ce103b562L,0x96c01f0328222a3fL,
38733         0x7dcc5593c10171c0L,0xc677366a4b3e5858L,0x872d4396bde4eebdL },
38734       { 0x5d0c5f3a7f83c0b6L,0xbf4274dcf7ba33d9L,0x1df6e4811a635f83L,
38735         0x24e2e8347d807292L,0x792203a8eee1e676L,0x20475f907ef4e8a4L } },
38736     /* 13 << 196 */
38737     { { 0x1b4db0579e37cd0dL,0x61b95bc9ebccdf79L,0x7d98d8537a57d7adL,
38738         0x58a3d639709b0194L,0x45fbd4417ce5bc31L,0x7684b71b5b3c856aL },
38739       { 0xb311f8f85bb6bd1aL,0xaeb8e44711eda59bL,0x1ad5b35fbf269cffL,
38740         0xc69651b4a0e2a640L,0x3713803bd83ad8b2L,0x613ca3af0e4b353cL } },
38741     /* 14 << 196 */
38742     { { 0x3ac59b1fff8cf495L,0x3f3726866b04c4dcL,0x2cdddf90da325f0cL,
38743         0x3ae79666444cabe5L,0x8222f6d6c7484b1fL,0x61fb08929ae328b9L },
38744       { 0x279aae392c575c0eL,0xac694019948508bfL,0x4931cc55b84056f1L,
38745         0x75927a688b50ad1dL,0x47ba72e945584371L,0xbea7e62ea79fe5e5L } },
38746     /* 15 << 196 */
38747     { { 0x990a6767faddc25dL,0xcd7650eb114eaf17L,0xf9d1d6409a44cda3L,
38748         0x70996b6871fb091aL,0x630ae9754ff80816L,0x59a9dc2f987b20e7L },
38749       { 0x9a39588ef65fbbc7L,0x71f4c8e598e7c78cL,0xad2f5a0138cd40acL,
38750         0x3c68fe575a837332L,0x7af44087155e6b4aL,0xd66f4cf8e99e31f2L } },
38751     /* 16 << 196 */
38752     { { 0x5b0b5d692a7aecedL,0x4c03450c01dc545fL,0x72ad0a4a404a3458L,
38753         0x1de8e2559f467b60L,0xa4b3570590634809L,0x76f30205706f0178L },
38754       { 0x588d21ab4454f0e5L,0xd22df54964134928L,0xf4e7e73d241bcd90L,
38755         0xb8d8a1d22facc7ccL,0x483c35a71d25d2a0L,0x7f8d25451ef9f608L } },
38756     /* 17 << 196 */
38757     { { 0x81e304c903b37e31L,0x21781e57925a6491L,0x4ecbad144b9250d9L,
38758         0xb395914345cae8feL,0xb894a39dbf775d4fL,0x8a2c1090d307e272L },
38759       { 0x49dfcee9408bf3cdL,0x08f0f33195b573dfL,0x23eb8a0b214bcd3bL,
38760         0x425e1cde7ccc4d82L,0x53f64095ac113d2bL,0x377a6cb3d88e0761L } },
38761     /* 18 << 196 */
38762     { { 0x9cd08431d360ae16L,0xbf5a73d211281e82L,0xfe25aadfcc34ff33L,
38763         0x8874984b84e3af16L,0x8dd38b596a65a2a7L,0x6c91112c68a26926L },
38764       { 0xb765168637554f46L,0x79558f04c78bf29bL,0x8bb14b1f03012b9dL,
38765         0xed7d03f9a0886ba3L,0x9a436ec3c2a93baaL,0x601babb740db0c78L } },
38766     /* 19 << 196 */
38767     { { 0xa7395eef391821d0L,0xb299378fc8b7b1e2L,0x53a37e3b7f3a58d4L,
38768         0x7d06fa4e3188c5adL,0xe65a94c063dd7462L,0x4daf74f39cfde2b0L },
38769       { 0x98f986b4fbe7198dL,0x8e96b1ee88176bffL,0x5f309f64eb91641eL,
38770         0x46bfe3352ffdca19L,0x1ea1bbe7ac8fbc08L,0xde8ca618b00f88eeL } },
38771     /* 20 << 196 */
38772     { { 0x0757ee852005631fL,0x60f484ea9d70cc3bL,0xaf131d246b011041L,
38773         0xe40711a1062e2e17L,0x05ccf1b94c27e2c2L,0x29e9910e43d43758L },
38774       { 0x54daa550ed000e45L,0xf00a312295d3674cL,0xdb006fe743ec424eL,
38775         0xbddf5473536162d2L,0x7b8a24b579d433bdL,0x3127a46f282297d3L } },
38776     /* 21 << 196 */
38777     { { 0xcd964573cd0585a7L,0x9c2fd35605b684aeL,0x7f600f4de4a47ec5L,
38778         0xcb4bcdf085fdd4feL,0x5b292292b4dcf5d1L,0x923c4331df33a2b8L },
38779       { 0x0fe13edfd6c1e73aL,0x0b35adc6c370821bL,0xa70061b08d405282L,
38780         0x98efb3fc6457af81L,0x8806ee7136e1041dL,0x8b56657faaaf0731L } },
38781     /* 22 << 196 */
38782     { { 0xe68b669189cb38d1L,0x250f59233456ed5dL,0x8928f1fe16188290L,
38783         0x8b24b1f734a837d4L,0x268c8c57d945d0b1L,0xa4190ceae002b3abL },
38784       { 0x4596e76e56dd74b1L,0x647c17871c307789L,0x0b945c7243b13a6cL,
38785         0x4904669552a58ee2L,0x7547a6b46e25b7e4L,0x8bc26f49e2b1b140L } },
38786     /* 23 << 196 */
38787     { { 0x95b3f4e75196d614L,0xc075bcfd5ea18aadL,0x15dc9dd41ae71f42L,
38788         0x75a769f289543f86L,0x06032d9ec392b4c4L,0xd6cc5c717d4df83bL },
38789       { 0x111fc63427ad6680L,0x770dfe7f781bda48L,0xabacb082fc0afb5cL,
38790         0xe3a463e771dca197L,0x390f21a89635b275L,0x3d3474b24ae094a6L } },
38791     /* 24 << 196 */
38792     { { 0x48f5588853666241L,0xb9fee3d39e6a068dL,0x8c50e3af0275e82dL,
38793         0xd490cf2dcab34005L,0x20b11f86bf0584c8L,0xd49714c18179e559L },
38794       { 0x89647b178ded6686L,0x6c4bac8cf16c93d4L,0x5401e4f8076ff71bL,
38795         0x577e73acb1ef9b0cL,0xa1b87e0ea46e7880L,0xab8d8bbb54fd28a7L } },
38796     /* 25 << 196 */
38797     { { 0x220161f0741396fcL,0xae14ce5817da16ecL,0x766e415bb828b19aL,
38798         0x1b3b239e610c7aabL,0xf1c7df4992d53419L,0x57e4cee59442c6cbL },
38799       { 0x546f73b5f85d33d3L,0x195116c74e041703L,0x5a71a96a5d668df5L,
38800         0x0adb7b16fe56c658L,0xf6be923deb563532L,0xa65ed113f2d45f4dL } },
38801     /* 26 << 196 */
38802     { { 0x8c6742e5bccd3be6L,0x5f0f7fdd378de702L,0x41236fec334aabb8L,
38803         0x4b15815b7e9d8aa9L,0xbb816e46e1c235bbL,0x8591cc45176c2fe0L },
38804       { 0xef00e3981d7104b1L,0x761d2c244012398bL,0xe4984f4ae81af247L,
38805         0xf923bb80c144dc64L,0xd51f27dd83988de3L,0x0ad5438d995dbbddL } },
38806     /* 27 << 196 */
38807     { { 0x0532790bd148314dL,0xb4862d9d5b6b4ad1L,0xab65bfc45beb3ac6L,
38808         0x72eac92d99331822L,0x2e09a69a6127632cL,0xaa1eaf0791ef9141L },
38809       { 0x79b923fe754ff12aL,0x19395a97f9a467ffL,0x7dcc91d49ef5cc4eL,
38810         0xb9019ff198a84090L,0x62616ed6d5bfd083L,0x95cbf9442b328615L } },
38811     /* 28 << 196 */
38812     { { 0x22ef6f606374afbeL,0x70e19fad26348f5cL,0x8bcd51a845f98ac6L,
38813         0xeeef7f7026b7ba04L,0x33aa0644544edcb9L,0x22d89a1244974c71L },
38814       { 0xecd08f5d0f8d90a5L,0x495a0403cf03513bL,0xe924feea27953ba9L,
38815         0xdfbe1f93eb5e7975L,0xd3c105a1285865dfL,0x87b8b6360886fc87L } },
38816     /* 29 << 196 */
38817     { { 0xc2da6d7a219d44f8L,0xe66364c555a9d970L,0xfb0936258611738aL,
38818         0x916fbfa844f7f35dL,0x7a4e0451774b1e2bL,0x7adaab9e80375e65L },
38819       { 0x2272b95c8ffdfda9L,0x41644b619ad42b25L,0x157026817f0c98fdL,
38820         0x25d4a00fffba1d85L,0x52e684c6c6c5545aL,0xba85bf2adabb7df5L } },
38821     /* 30 << 196 */
38822     { { 0x89a5b69dd282b12fL,0x63864e7ba7d28277L,0x36ac74d08c21f920L,
38823         0x7cfd291713a2f8d3L,0x50b63122c2ef5022L,0x23d454328ed33339L },
38824       { 0xf8696b2dc4880048L,0xb9605bd5792dcb6cL,0x4cdb5fc26fdeeb9bL,
38825         0x58ee2837f1a7f35eL,0x8956359ae2985ccfL,0x0cc6c4ab2c94cb32L } },
38826     /* 31 << 196 */
38827     { { 0x2fcac7d161a8254aL,0xc396583a05389aceL,0xc6f069cc3872ee52L,
38828         0x76f0e5b407180f5fL,0xc8b23b7a2dee0d6fL,0xc77b242613bf8fb2L },
38829       { 0xa8c625e66d5ae411L,0xc0c40a75b0723adfL,0xdee0ba8f380d9c67L,
38830         0x38b86a3b19920f24L,0xff2191b7d910e9cdL,0x8d01786734181894L } },
38831     /* 32 << 196 */
38832     { { 0xa704016022ec7eddL,0x19124972cc9c8ee8L,0x697f301f2ccb9417L,
38833         0x3ee877646f00d8aaL,0x2b5afaf88138a017L,0xf152b14c832d7543L },
38834       { 0x27c27ce2383052f9L,0x4746c5b5e1dae11bL,0x92dc5ac75b752008L,
38835         0xcf382e01e84fe5f1L,0x90e034197d5929ceL,0xafee3abb15ca3ffaL } },
38836     /* 33 << 196 */
38837     { { 0x299e0c5507f0e3a7L,0x75dac5c46cdebb44L,0x340b5479183c7e42L,
38838         0xfb1b03dd702672d4L,0x68f7222ec07cf89dL,0x67a471e422e7a8a4L },
38839       { 0x79dd4627b9ada93aL,0x774c53771c8ecca5L,0x95191e1a59db2e65L,
38840         0x3f6947f270abeeceL,0xb4934fe0885e4e00L,0xd082e49901728c2aL } },
38841     /* 34 << 196 */
38842     { { 0x86cd8083aaa82329L,0x74f0c5786e579dfcL,0xc2b68c4e3b436545L,
38843         0x8e66c648469d4a81L,0x4c5b05c5bef62bb0L,0xe558ff020bb6f865L },
38844       { 0x9f8ccb16f356a124L,0x1bb28d7c1279f8f4L,0x9b885f0ca8fc4e08L,
38845         0x2ec4cf69859d90eeL,0x9bef3c4d86d3b9d1L,0x5a98ce73eaad8d53L } },
38846     /* 35 << 196 */
38847     { { 0x6c716b179711b5d2L,0x396a4a4cb386c1d0L,0x5845f6861c157c12L,
38848         0xdcad516262c15d4eL,0xb6e0a6a02dadb218L,0xe4f6d5e5a342e785L },
38849       { 0x1eeea548c78980e9L,0x363c31be00a32adaL,0x01481fb7e660b445L,
38850         0xcbb61552999c1f5cL,0x20a73942f361d12aL,0x67fb89a11b8b4b3eL } },
38851     /* 36 << 196 */
38852     { { 0x1d57d639eb00e26fL,0xbeb198906985c10bL,0x38cd95a337b9b76aL,
38853         0x3b1d12e30304c87dL,0xdf42dc6f4734e191L,0x1ed1d9e397841989L },
38854       { 0xfb60e333859b577bL,0xfb026d16ed3db987L,0xa216b0e46f7855c8L,
38855         0x9501bae3539ebdf6L,0xd95a4a32dc8a1f6fL,0x76cb0b6b45307deaL } },
38856     /* 37 << 196 */
38857     { { 0x5607ab62a844b579L,0x8d3ed3db94f67d9fL,0x95390de8a9929b04L,
38858         0x4a6f6f7cc85397f3L,0xec5b73eff26eab04L,0x2543190b045699f9L },
38859       { 0x9a4896138cdbb723L,0x0e081e5b7a1c638bL,0x20f292c6596a7b1dL,
38860         0xa14d849794477dd3L,0xeeeca98064b0de1dL,0x75fdbae92c5135dcL } },
38861     /* 38 << 196 */
38862     { { 0x1202b5752b076f5bL,0x5ca1247edbd6c420L,0xb45ff9bfd8ccc5c6L,
38863         0x680fcfb28e061baaL,0x5a6e6342122a4212L,0x0ad12abc312fea8aL },
38864       { 0xd1dd8ae5665dc7b1L,0x30494dfdd9a22454L,0xc8aa9bc9da55ed09L,
38865         0x6ec643031b74b119L,0xf54574716b604639L,0xe2a214e59f8d83ceL } },
38866     /* 39 << 196 */
38867     { { 0xca698de5f5c96e8aL,0x352c89a3fd941919L,0x0e3de0a909812f23L,
38868         0xa74ba91667702fefL,0x6acfaa5a3863d479L,0x28d8932bb6bb15cbL },
38869       { 0xc62155704ba9718dL,0xc67a3eafa1edd692L,0xc86eeedaab31aa74L,
38870         0x2064ea632deb79c3L,0x813b84f51ff01adbL,0x994b9437458a1835L } },
38871     /* 40 << 196 */
38872     { { 0x1013c4f4fde3f7ccL,0xbad5415a838699b6L,0x2a8b4eac64cacc78L,
38873         0x3d10f949bf75d233L,0x5a9f7782fc84e55eL,0x209a18345ea7b274L },
38874       { 0xa66cb6d4f9e8d374L,0xf898d9479a20080eL,0xe7e4b91b1272df4cL,
38875         0x5b8507cc5dd136bbL,0xbe4b5262372a8e05L,0xa0cb170c2aa4a47bL } },
38876     /* 41 << 196 */
38877     { { 0x469180a38378217fL,0xd960bdde85ef6d61L,0xcc4e737d6654aa84L,
38878         0x28d440016ae51d69L,0xf13a0d9ac6187196L,0xe60851b392160f65L },
38879       { 0x41d98cf61cac48d1L,0xf37f003d1b57f2cbL,0x4829c60bce272603L,
38880         0x45991d4adcbdddc1L,0x17e591fe74601bf3L,0xf8a36b4fb3fe856cL } },
38881     /* 42 << 196 */
38882     { { 0x4410b773fe480323L,0x42ae32e3ea2f8b57L,0x6578a64b2886b9d9L,
38883         0xafcfa5fe4241ec91L,0xa7fa5afc16b4ef24L,0x4a6594bbbc16b610L },
38884       { 0xcb5845515e264fb6L,0x4b89955e2b9c3c70L,0x530426be21e11c1eL,
38885         0xb707abe9c9dab34dL,0xb5aab0bf5931cd78L,0xab6a2585f0ccfcdaL } },
38886     /* 43 << 196 */
38887     { { 0xe75761f716afd216L,0x8ff1cea3b8a4f008L,0x04b8b65e69889d77L,
38888         0x679bf7a586ad9fb5L,0xbe49be0b4c22b86bL,0xcc8905a16c026c1dL },
38889       { 0x17464e7e59ec1983L,0x50cb62832a03afe0L,0x8dadaf456ce4df91L,
38890         0x26cf59d1e0df6fddL,0x6ecc66119adaec45L,0x1be42e744ef67dacL } },
38891     /* 44 << 196 */
38892     { { 0xa01cb3bacb1957b9L,0x053693ccf50694c9L,0xf8a887ad527f3aedL,
38893         0x2f1a80ece9bf06f0L,0x74baeaa57d0eec9fL,0xce8e8b9ab0641cabL },
38894       { 0x91d1e84d128a1804L,0xbdcfcaec2d5fa43cL,0xfc5cff124106fa6dL,
38895         0x2ae3ffab01588ac1L,0xe9dcc9b44c067052L,0xd8e3d74bafa7d4c3L } },
38896     /* 45 << 196 */
38897     { { 0x64a134296d7b277bL,0x487080d8e9a50637L,0x02e5fe901c6c061bL,
38898         0x8fdaafc8ecabeb11L,0xb1e3960110720b13L,0xe7304bf77081f41eL },
38899       { 0x78a10af8c26f5cf8L,0xf52cbc155c032c15L,0x95a3c4558c0c2091L,
38900         0x1797b407abba6f79L,0x87c0cd05a96a3062L,0xdf75e2805f04a7e2L } },
38901     /* 46 << 196 */
38902     { { 0x47161e1f82779cd6L,0xa95afa08c8158458L,0x2cbefdbc40a80742L,
38903         0xd86e0bfaca420c9fL,0x08f5f8c29c79427eL,0xe8f88361da4d0d9eL },
38904       { 0x2195174d3eb78d14L,0x889b32c9ed6caecfL,0x1e679749c3c83ed3L,
38905         0xc27a8c84eddf8a29L,0x4a21af3af8e09f40L,0xf4b9797f1eb3b9b3L } },
38906     /* 47 << 196 */
38907     { { 0x58c2405baa44f11dL,0x86ffaa37ac0f7257L,0x373623cc4070f6e3L,
38908         0x142e62f9a36c73b3L,0x43bab2dd36a143fbL,0x4fbeb0b7aa50375cL },
38909       { 0xf9cc2e7b1f862294L,0x95a9be3c0abdcaa8L,0x70f050225cda074eL,
38910         0x152659db43e6bc89L,0x1790148727c6e01aL,0x544069354e083c21L } },
38911     /* 48 << 196 */
38912     { { 0xcb51f03954ebc926L,0xe235d356b8d4a7bbL,0x93c8fafab41fe1a6L,
38913         0x6297701da719f254L,0x6e9165bc644f5cdeL,0x6506329d0c11c542L },
38914       { 0xa2564809a92b4250L,0x0e9ac173889c2e3eL,0x286a592622b1d1beL,
38915         0x86a3d7526ecdd041L,0x4b867e0a649f9524L,0x1fe7d95a0629cb0fL } },
38916     /* 49 << 196 */
38917     { { 0x028bc25096c54946L,0xace5e7ad0f5fb7eeL,0xc820d7513350ab02L,
38918         0x4ae1f6d99c8d7635L,0x03d1f83a98e1ed80L,0xf014d45d5ad14550L },
38919       { 0xeb8f2c328cd6d0b6L,0x090a8f71770f586fL,0x1a8219f93eb7d3b7L,
38920         0x0d610d9febfc26dcL,0xfdb49980aa330297L,0x6396f218d81b3fbbL } },
38921     /* 50 << 196 */
38922     { { 0xb4ea3102eacb7b9bL,0x4aefb43d72af1d6eL,0x9a1a912d249a51d6L,
38923         0xddd0a5744d5e3a1fL,0xe252114708aa1f69L,0x4b235efe9de89d5dL },
38924       { 0x6fae47420d7f1aa7L,0x0434ae2ff200e13aL,0x75143dc192508b57L,
38925         0xc441a768055e177aL,0x84cd7adf2f142b2dL,0x56484f4161d9ad5aL } },
38926     /* 51 << 196 */
38927     { { 0xe3e9d0881beecd14L,0x4bd12b179093ab18L,0xa6908ddbc925d5dbL,
38928         0xfdc5f740832d1474L,0x1a35623696f831afL,0x0e39086808cde8c9L },
38929       { 0xab1c7cbda2206b32L,0x84d299c8b93ccf1fL,0x380fa432dabb6542L,
38930         0x59f01b5177c2cb3dL,0x9785c47b6e56c4bbL,0x047acc813a3f2b1aL } },
38931     /* 52 << 196 */
38932     { { 0x724210e61e42b4a7L,0xa8d536afe2dd968cL,0xc69936e683582c60L,
38933         0xd031f1abdd5d7f68L,0x7d31dcae8c4180d4L,0x117985f622bca188L },
38934       { 0x3b0a982537e38dc2L,0x1663fdc5896fe4b4L,0x55d18cc7fd707372L,
38935         0xfac2d7a40d2d8470L,0x994763391b04b1f6L,0x87cfbb5ee0bd72e4L } },
38936     /* 53 << 196 */
38937     { { 0xeac6a72ad5dd2841L,0xf1aa32524277e152L,0xe6c44e9b6ef7e947L,
38938         0xd03309fc54095378L,0x6fc5fb9ccdd06947L,0x10ed0e76d1e9a968L },
38939       { 0x42d5ab02dfb77b17L,0x4c54c381a53de8ccL,0x5fb4c256f2b1b5d8L,
38940         0x17d5ab28e12ed054L,0xd7c96ce1139da42aL,0xb32f63859919f459L } },
38941     /* 54 << 196 */
38942     { { 0x4bf5788312f4b0b3L,0xcd69d82ef46735faL,0xc397c8f9a1baa0efL,
38943         0xfce184c0fd1be398L,0x15021775fa54580eL,0x10bc85468f54397cL },
38944       { 0x6009a691eaa9d711L,0xc9c6a42fb7846417L,0xe9c305685627817dL,
38945         0xa1be66ff92abd5daL,0x9317838fcdea11c0L,0xace94ddcc85e7aa5L } },
38946     /* 55 << 196 */
38947     { { 0x3ef37821d4079bf4L,0xff78abebfcbdc3d0L,0x117414bc4733ea34L,
38948         0x7f181a3b9f50d0feL,0x9ea5f94eda897ea7L,0x01a996ceee8314ceL },
38949       { 0x0cac3c8b420e988dL,0x7ad66ac4bed3294aL,0x6bbf6dd800b62445L,
38950         0x590a57017a2fb4fdL,0xbf3b4e529ac11d81L,0x1bd453020d60c710L } },
38951     /* 56 << 196 */
38952     { { 0x8a43bba0902c32d8L,0xd8c69b74a3955e42L,0x413bf25d79c64afbL,
38953         0x3c39837584ac94cdL,0xfbfa9c53a08ccf5aL,0x9d8ac945e9d791d4L },
38954       { 0xfb9bb89e5e7a2553L,0x1442612bb039dd24L,0x8250ffe0a2e2344aL,
38955         0x5eae8b396426b985L,0xa1657768484741deL,0x05e52d4ac73cdf8cL } },
38956     /* 57 << 196 */
38957     { { 0x61c2417995c5e767L,0x7456380c3bdfef62L,0x62763f43d206cbb1L,
38958         0x1996e2c657871e44L,0xd0dbd290f220c06dL,0x6778e1e5d87743eaL },
38959       { 0x40e54caf16b8f046L,0xe834a1cb6bed77daL,0x7240befa3e9457c4L,
38960         0xd1b638dbac96cedcL,0xd1d7e814c9c0cd8cL,0xc73beaf14d38258eL } },
38961     /* 58 << 196 */
38962     { { 0xf1a6d776c05f40feL,0xb98c19b1c21ce471L,0x700b0bab7f9689eaL,
38963         0x861513a56f1d2e6eL,0xb7558b2292fe4456L,0x2d8f860704c66a25L },
38964       { 0x10ba7d6a7998347dL,0x72bf56093983b98dL,0x8d873c4f89238292L,
38965         0x5db0dca9a5e3c944L,0xf81fe37e0925aef0L,0xed6a13a4e4daae25L } },
38966     /* 59 << 196 */
38967     { { 0x49e2372711c3a930L,0xbf2ede34f5293b8eL,0x0abeeb3ca8e1cc9aL,
38968         0xb1db299440205cbcL,0x3252d29e52fb01d4L,0xa0b080c57dc91095L },
38969       { 0xb56fdae622a9ceb9L,0x6c3c3463b31f6f27L,0xcb510ec2ae3bd22aL,
38970         0x1efcd77b0b3db475L,0x1094bcc5ca766f9cL,0x688e940dfea48297L } },
38971     /* 60 << 196 */
38972     { { 0x3d95d26a99cde27aL,0xed608a89b99344f4L,0x7a70a8f09c0ab25cL,
38973         0x7740953c496552d8L,0x4da4ca0f4a366adcL,0xbf475c1b33274d4fL },
38974       { 0x5ac1d8288811b869L,0xed62e7b4d23446d4L,0x67d78571a0eab287L,
38975         0xa74ae3e98b0acc4dL,0xa63f91d64077c236L,0xe2c3f82a818a6889L } },
38976     /* 61 << 196 */
38977     { { 0x2bde7037b1d5fbeeL,0x477a4b51a80b92f2L,0x195ae0e06606b504L,
38978         0x7aaf3de57497785aL,0xb5581ee9290c5ef9L,0xcb303c30360c8ec2L },
38979       { 0xfb056f901b1fb602L,0xa38bc9f59931b7ceL,0xb0b74aeab2f453a8L,
38980         0x9a0e2ebf668cd68aL,0x8b7e0d73d7db7842L,0x21f29b74d1fa5433L } },
38981     /* 62 << 196 */
38982     { { 0x38321d7c4e11f824L,0x04dcd3a3e4a816e9L,0x382968ed07e09612L,
38983         0x6f7b2dbfa370e1d1L,0x5a8472348675d730L,0x88d974b0e59e984fL },
38984       { 0x89f7e2bce3f9e429L,0xd478eacfe3aebac2L,0x8df9f281ebef3488L,
38985         0xcbcb9fbeab5543b3L,0x2c8d19b0203f59e2L,0xbb98e4495287b0fcL } },
38986     /* 63 << 196 */
38987     { { 0x16c45f709aab81d7L,0x0f1310851795a4b7L,0x3c63d43af0ecd732L,
38988         0x22e2d1988628b683L,0x7d7482bab641d6d4L,0x6baef4a2ab69891aL },
38989       { 0x10989097e63c00d2L,0xbfd42ab0d93794ccL,0x9a1935f3e4165a41L,
38990         0x359701b35b600ca7L,0xbe7d69f983d1b54bL,0x99b0f35e3729bd4aL } },
38991     /* 64 << 196 */
38992     { { 0x11dd860e1c6d03b0L,0x30c1700809eec660L,0xd4f8aff635c0192fL,
38993         0x96a727b1e3a4a900L,0x1426daffde78c8baL,0xfacaa9bd8d1527c4L },
38994       { 0x0c0d5234cd072989L,0x1936c20d918550b5L,0x4828bee43d914fb3L,
38995         0x8324ea38f3ba26a6L,0x027590f3a94eb26fL,0xfd354295acd957bfL } },
38996     /* 0 << 203 */
38997     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
38998       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
38999     /* 1 << 203 */
39000     { { 0x3ede2484da756624L,0xb22da2ab73b13062L,0x56069e93962a667bL,
39001         0xc931266b130f2ceaL,0x4bd6a6fca7366a66L,0x23f30563aa5ac3b1L },
39002       { 0xa025d0efd7c2b26fL,0x597ce7d862129bc7L,0x4809927f2b3057f2L,
39003         0xb001c10a1499f884L,0x309d141c30b9a653L,0xadddce7dbf659d05L } },
39004     /* 2 << 203 */
39005     { { 0xa6c32900af2825c1L,0xb37c46c1d223a04eL,0x691e7d39063de7eaL,
39006         0x998df4e710daf9bdL,0xc7085b9e718b5d7aL,0xd41abcc816b3d4b8L },
39007       { 0x4dfce693f9bc4041L,0x383677ed659ec7a8L,0x2c1904bf4491fb34L,
39008         0x7c1bf1114552451cL,0x6562cc2c3c5e5e40L,0x1ecaa2a1fe0e4372L } },
39009     /* 3 << 203 */
39010     { { 0x9657d08ca9cb9ecbL,0xf69662363b75be69L,0x396a9344a31c2b8cL,
39011         0x1c50b1269767bc1fL,0x597223d0d1417e03L,0xe165ed5a12137153L },
39012       { 0x8bce29f926a24098L,0xc428a1fbe99e7bf8L,0x6fd4c906eea7f1d9L,
39013         0x94275713fceb2e05L,0x3555448b741dbd94L,0xc50e85459faffd4dL } },
39014     /* 4 << 203 */
39015     { { 0x84c3630bf3087bc8L,0x152691e674be6e26L,0x5abd125ff61af001L,
39016         0x69bca56fbfea3525L,0x384af19900e0cb6eL,0xb0b13cfed00475a6L },
39017       { 0xedafde495e394049L,0xd988b558daf2add6L,0xf14cf97a6c8ffcc9L,
39018         0x4d6cec23e5a9cc5cL,0xb0d678f88a104e05L,0x80a7fcba9fb527c1L } },
39019     /* 5 << 203 */
39020     { { 0x9ae12b902af1ffceL,0x082f30b95a30521dL,0x974099bdc304014bL,
39021         0xab1e27e444ccb6e5L,0x72db8f42290387a1L,0x3d1a461040f3ce18L },
39022       { 0xe939a3f2634ba10fL,0xe70a9cf517254c56L,0xd0f8692fa08ec3c5L,
39023         0x77edefcc7a7cbdf8L,0x04c4b18ebdf90f0bL,0xa890436a8aa36a59L } },
39024     /* 6 << 203 */
39025     { { 0x8618ffa79e30f8a0L,0x9961390cd12699bbL,0x5b1b0d744f61edfeL,
39026         0x33df67d9eb7a476fL,0x7f1a767ea92ee99bL,0xfab400e32223a2ccL },
39027       { 0x16f376f2f534dc3dL,0x6f36eaefcec17905L,0x8dc1516ca58765deL,
39028         0x893408262260ed6bL,0x060eb0afcf4b29baL,0x9cd0a9f11d252bbaL } },
39029     /* 7 << 203 */
39030     { { 0xd3c2a6a8ca413693L,0xcc56a8e932d5714cL,0xc72b73683c0da165L,
39031         0x5d236660db44e616L,0xa83b2ecce5c73667L,0x9d292f298aea900cL },
39032       { 0x67121215aaa2a7eaL,0x57dae96abf889191L,0x63bf7a81d296ae68L,
39033         0x9bf518758fd496c4L,0x5b4382fbc2f7308cL,0xf1215dfc9632aad7L } },
39034     /* 8 << 203 */
39035     { { 0x0d6cadbfc22137d2L,0xb5db59d3628a3298L,0x3b433c734ab19507L,
39036         0x4fc53405660086b3L,0x770ae903a1eb0f43L,0x31b5857ef6b5b58dL },
39037       { 0xe206e141d392868eL,0x8be6956f4b31de04L,0xcfbfca2f47449e07L,
39038         0xebaef25639fef8e1L,0x959e37b8c16fc80cL,0x8bb4bdd2e911d61bL } },
39039     /* 9 << 203 */
39040     { { 0xecfb851380fc41f3L,0xb0dc8823931843c4L,0x59decd6c1b93df03L,
39041         0x954103b72511e252L,0xe372f86a0f759de1L,0x04f5afd38f6f9ef3L },
39042       { 0xbd8e60affcba2e7cL,0x9b1cb1ed092315b0L,0x5f9e20a03fd05e36L,
39043         0xfcdcc44ded95f25eL,0x6baf401b6ac79cb5L,0xfe1a5a856894f651L } },
39044     /* 10 << 203 */
39045     { { 0x014a0907e51c6673L,0x28118ccd3e6e6a91L,0xdbbb7c4dc999acc0L,
39046         0x01b771075e7ab1e3L,0xa33fefbfcd8fb11eL,0x1df5b61fc0b8a5c2L },
39047       { 0x774dc2674478c5c6L,0xbfe1add422fb91a1L,0x5ac4dc694d9c8461L,
39048         0xbf6e002a1e772c5fL,0x4922120e0b83fe91L,0xa7747f4b3efbadceL } },
39049     /* 11 << 203 */
39050     { { 0x4b955beaddaf2e82L,0x3775ecde90fdc68aL,0x579c34f91713e763L,
39051         0x6c27f504fa509d74L,0xef6df04a3f8dbf4bL,0xc39f2e28b3ad7104L },
39052       { 0xe54042b3a5973cffL,0x4e594427f111f3d9L,0x53c7a2ba155fce57L,
39053         0x7b3c1c60e6e1d21fL,0x5e12db8d308ddf4dL,0x2c3c5e77a00e8976L } },
39054     /* 12 << 203 */
39055     { { 0xc483d4b24343bbf8L,0x42aca2e18a0fc95eL,0x5165df6fcbab1fb0L,
39056         0xeb284370f6cdfc0cL,0xab565c00994320fcL,0xc0d157fd62133e80L },
39057       { 0x7850cda55b69644aL,0xe37ae76a806ec8b8L,0xd14b805cc2c82eddL,
39058         0xcb5468b6cf244539L,0x97d43ee825dbe92dL,0x1442243689fb8f1eL } },
39059     /* 13 << 203 */
39060     { { 0xcfc8a945f361dc08L,0x383a5336491dc3abL,0x77580587c35cd376L,
39061         0x6604248ae2426904L,0x47c56025ffeb9d26L,0xc301edd8bae5d983L },
39062       { 0x7c6511a9e2e5cf33L,0xdc52c1dd221d41acL,0xdbdc8acada47503bL,
39063         0x01b406864bcedbbaL,0xca9cb9fd2d5496d5L,0x5768e0edb17e8400L } },
39064     /* 14 << 203 */
39065     { { 0x421afbe0431cb760L,0x9ae9ff985203e69bL,0x56cacf4db1a2705aL,
39066         0x6a3a4136d128bcd5L,0x2411c4b866191ad8L,0x39f26e1a15b45d24L },
39067       { 0x4cc82459c64ed153L,0x5c7a0dd58195b452L,0x9c88bb1c69f6298dL,
39068         0xfe567b031933fdb5L,0x8a6aea71881308c3L,0xc1268b55a2f0adfaL } },
39069     /* 15 << 203 */
39070     { { 0x312b777c1231c557L,0x3984f71be9971115L,0x0266b58294cc2d4bL,
39071         0xc3058419cdf5e5c1L,0xab3a1ae477bbf0d8L,0x7c2173a6d21603daL },
39072       { 0x61cca8cc747b092bL,0x70f77a53e376506aL,0x742c20692f1ccc85L,
39073         0xb1f2ceca2dc8844bL,0x5a73cff83a096c10L,0x28acb67d5c19cd11L } },
39074     /* 16 << 203 */
39075     { { 0xd7bf2ac6a0a85236L,0x2921b55c7194c46dL,0x162fabaa9afa9762L,
39076         0x7b7f1664b62b36abL,0x77b9f797296a84e9L,0xfcc1ad657dbd843dL },
39077       { 0xc6e9c1e1cd77b7f6L,0x9cf0e272917067c9L,0xfa7fa93d3bfa90bfL,
39078         0x55846fe9d050e46aL,0x473b9a0d35c56256L,0xadd29e332b656a65L } },
39079     /* 17 << 203 */
39080     { { 0x4698137f46fb8ae3L,0xb11a595f7b1c062dL,0x4a043b99ff023ef7L,
39081         0x2836d64d8ef0fa4dL,0x4067dbee8ea44a98L,0x9d1739c9f00ff4e1L },
39082       { 0xcbcf12fe133d2703L,0xd2923424016037cfL,0xda7543d68be5f666L,
39083         0x587d1920ac5e1847L,0x14662476f79e3462L,0x0120a1d8c810a1f3L } },
39084     /* 18 << 203 */
39085     { { 0xa4fc828ab18f9bb1L,0x06de4c9da27a787aL,0xfbb7c7d7b1b3a12bL,
39086         0xa7052b94b8583128L,0x173ec2d2e7b02fd8L,0x4b724682c776c664L },
39087       { 0x46ed9be5673183e5L,0x312191e83bd17c60L,0xe3ed6326efd56a9eL,
39088         0xb3ebc44c943a2278L,0x7ef62ba9ec9cf589L,0x754be6d389832cd7L } },
39089     /* 19 << 203 */
39090     { { 0xccb4b369dc992b32L,0x0ef84cc0922cee22L,0xda0058f1fc56e9e1L,
39091         0x208c57943f23632bL,0x3589a7338f77a82bL,0xee6cfa2c76ee99bdL },
39092       { 0x88cffafc418f7993L,0x0dde3f05f4be56d6L,0x5d088382a0472bf5L,
39093         0x872ca5aabd58d05dL,0x9c467c62e8f91f17L,0x38ab1b348c6b91ffL } },
39094     /* 20 << 203 */
39095     { { 0x926c2552ebc69b0bL,0x953a850fd4c7432eL,0x0ee85e14b9359035L,
39096         0x8b10b01abde090a5L,0xb2878dcaec423943L,0x2571a178f70bde20L },
39097       { 0x24ed159af5ebeee5L,0x60c202af043f6539L,0xdaaa76f4c8d4ffc3L,
39098         0x2fc1f1ba06eda10fL,0xddf159ee88ded556L,0xcfa71782e67b1ec4L } },
39099     /* 21 << 203 */
39100     { { 0x2596ee7409d3ed60L,0xd42551f474a46e37L,0x2e46a92e21061c90L,
39101         0x236299fa73ad22eaL,0xacdccd5214393ac2L,0x9a572130b56b4d5bL },
39102       { 0xddfc31781835e70bL,0x5dac0671d542048dL,0x2b0768d7a6dce17cL,
39103         0x6d447d4206c55342L,0x6b55b21525548478L,0x24e6483518d5310dL } },
39104     /* 22 << 203 */
39105     { { 0x3c58c5ea9b037c66L,0x08d0648e0d5c6ec5L,0x1bf90c53a4fa3f5aL,
39106         0x660cf61740381205L,0x63fd03081d44af3fL,0xe22b9c1a77175de7L },
39107       { 0x0b6044fc3556fc9dL,0xaefb6804fb55318eL,0x77045bce5c46e1ebL,
39108         0x29c4a3bc76e8f93aL,0xdf8aec699d697f5dL,0x5bd9552845a89080L } },
39109     /* 23 << 203 */
39110     { { 0x1bd61fbdc5756910L,0xcfcc6d5adeaca40dL,0x292867885dd80ac1L,
39111         0x7effe328d621c0a6L,0xc64ebb91ab22a2b5L,0x8954ab330c44a456L },
39112       { 0x7552a0b460e26218L,0x2e81d3a94136adbaL,0x96dc2451610d665eL,
39113         0x30859c62ab04e03fL,0xdb3726fd4c31fa3fL,0xbf4954d1d962a7c4L } },
39114     /* 24 << 203 */
39115     { { 0x31521f66d5d826b0L,0x0a63695240787844L,0xc0a3bd059c8f934eL,
39116         0x12c57dd42f0ce835L,0x847f6a9967064213L,0x1c9e1a7aa88bd71aL },
39117       { 0xc4060eb2171e8407L,0xdf78d8dfed106780L,0xa3d28ceb0d704729L,
39118         0x4f8e523246ca3912L,0x09e9f852017791f4L,0x594006631e6ea97dL } },
39119     /* 25 << 203 */
39120     { { 0xdd26fb79444827feL,0xbf78e076d3f5fa6bL,0x46d486e81a5475b5L,
39121         0x43e325a5faabc3f8L,0x1fef6b6ba6795d0cL,0x40e040666644d631L },
39122       { 0x16207bb9676c3322L,0x677c1c235811706bL,0xb686252e994e2a95L,
39123         0xa359e2a51b6f6a3eL,0x6d8f06cfb124f019L,0x3bcf778246266c42L } },
39124     /* 26 << 203 */
39125     { { 0xeaa3426b8eb929aaL,0x090924f2327bb35dL,0x4d23ba1276da394fL,
39126         0x05d98e56adecd43fL,0x83c7169f6b4af795L,0xc22560a7c8f26ae8L },
39127       { 0xb43aecc2d01ab5d8L,0xe7bcdc1f7257d7d1L,0x6f32d77650de3318L,
39128         0x6d736b279bf02c0aL,0x9534fa5865319235L,0x5a6a38493cfbeb3cL } },
39129     /* 27 << 203 */
39130     { { 0x3ddcb65828c50956L,0xb335f336bf1bdb4cL,0x7c18d2d0ac3b6194L,
39131         0x8748654bca324d11L,0x7c9c58dac2e85f94L,0xf1930a56d4f4f957L },
39132       { 0x9cacbdbbe410fee8L,0x0e292c2178e1312aL,0x6845b293906a6270L,
39133         0x842ded0f00c5401eL,0x747cd08f35e3ff9bL,0x8405540af48227feL } },
39134     /* 28 << 203 */
39135     { { 0x547b0d9583939224L,0x3a0823ff1e026769L,0x6016671525bd43acL,
39136         0xb6cf475e18ba5f64L,0xa22f9c92c8b6d09dL,0x730553683ccf50abL },
39137       { 0xa6de248eee6deefeL,0x32aaf8b2acc3ca20L,0x0e254c5bad44e674L,
39138         0x8aa73e6535f95f98L,0xe622600160a2dc1eL,0xdf9482109109020aL } },
39139     /* 29 << 203 */
39140     { { 0x7b24d7b056190aafL,0x0115cbdd0563b377L,0x5688526ca7ba4975L,
39141         0xd2971e28aee3100dL,0x57a6ff8a6fa24f61L,0x9cb571c4d8603be7L },
39142       { 0x09c01564a2cce6d5L,0x14f0902b89884939L,0xd71a5ff8a072ffecL,
39143         0xee7848b8fefeab69L,0x7b52a9577e40895aL,0xd1576be7e8c61be2L } },
39144     /* 30 << 203 */
39145     { { 0x4c4d454849d77b8eL,0x431f942f6a4c982dL,0xc8633d051cb39ce8L,
39146         0x23421f8caf516f9bL,0xc9db25d2aac876fbL,0x9f2669c5d882760eL },
39147       { 0x59dc4bf4c47d4bfaL,0x99ed0024c475f93cL,0x269d1ca4ebe07d37L,
39148         0x49ce3bdbbf88b1faL,0x515044053361e4ccL,0x207f0048735b3c96L } },
39149     /* 31 << 203 */
39150     { { 0x835fe90b5a516e82L,0x26f1f2a7abfcb383L,0x3dae65a8609c4ac0L,
39151         0x70b01d6e91f4054eL,0x22da015b581e3159L,0x2ad34f99329d1ebfL },
39152       { 0x7385aad60d09b845L,0x4cbafb0b0adf42f7L,0xd8727d26c02398cdL,
39153         0x58c261f590549db5L,0xd49b12e48ea70310L,0xb31eea047ef89773L } },
39154     /* 32 << 203 */
39155     { { 0x372798f02893f2f7L,0x4f62bfac9e5030caL,0x5e64f9a98a1e2567L,
39156         0x5870254ce70391c8L,0x2def81a341f02458L,0x25d4e4dc1d087bedL },
39157       { 0x3557d07d4fe24a13L,0x6da49186dc3112bcL,0x08c8c5675f73ba50L,
39158         0x5309050b9c7c6706L,0x2ab67da3bd985072L,0x9bafa8b1e5df4e96L } },
39159     /* 33 << 203 */
39160     { { 0x5acdcd216f77738eL,0x340710746cb67a3eL,0xd68c55cf4bf76bf7L,
39161         0x64c159200b4deda8L,0x1021d38ae242b1e0L,0x615f1f033bd3d95bL },
39162       { 0x2ae0245cc300c9c5L,0x3549605ba88d63e2L,0xfe0dd65ad5038849L,
39163         0xe67abfec63c6e4aeL,0xccd08ba528153bdfL,0x9be9f5bced4d76bbL } },
39164     /* 34 << 203 */
39165     { { 0x30fe00bb6e8423deL,0xe16ce94784e4d005L,0xaf0f8c283fed764cL,
39166         0x05ef9bf67d92b1efL,0xbf6570d4eb481da7L,0x39349e30468494ebL },
39167       { 0xe32b99a63fb36907L,0xd92386da2d35e71bL,0x74af8b79166a973dL,
39168         0xa0a177f94f72de6bL,0xfff3e19d5dd6c660L,0x15310d4d4b0d54f0L } },
39169     /* 35 << 203 */
39170     { { 0x692a561f15c15a11L,0x25abe85f26ca3ddbL,0x50fef4444caffa5fL,
39171         0x58472cfbed3f4aadL,0x7e9178f0092d2b83L,0x3afd364ff8dfaaa7L },
39172       { 0x4686ee5cbbf813a8L,0x6a62687d937cbae4L,0x56f22558a9b7b6c9L,
39173         0x9af1beae9c189e25L,0xfac4ad9f4d41f79eL,0xdecb57431f9c7a40L } },
39174     /* 36 << 203 */
39175     { { 0x3ac662895c02f173L,0x6a110e3876d566e5L,0xd9cc14e2b9577e26L,
39176         0x6f3d5df9fdfe617eL,0x8fac740f352bb2caL,0x50bc8a0cc28e6310L },
39177       { 0x6e572fc477ac93f7L,0x56277377605bb8e9L,0xad6d0637402b8c55L,
39178         0xdab377914509eda7L,0xae770abc0854e91bL,0x523bd278742b3de8L } },
39179     /* 37 << 203 */
39180     { { 0x8ede0eea2aa0da2eL,0x7015ee6e90cfeb90L,0xef33f3efd6b3227aL,
39181         0x6e332f1712ef9f4bL,0xcaa089898e7f9fe9L,0x001482ef8fa71529L },
39182       { 0x2522637907a5019aL,0x807faf01bed40fc9L,0x426002ab56710e12L,
39183         0xcdfffbc18d3949e6L,0xcc03f27861284379L,0xcd7dc2026d5edc82L } },
39184     /* 38 << 203 */
39185     { { 0x94f84d57cff31148L,0x9c567c7f6bf2a313L,0xc82e62353149ad8fL,
39186         0x81f69703c2a5d513L,0xb54e6fc756eea9acL,0x6799c7957c3aae62L },
39187       { 0x78e89c1edb280515L,0x3c5693066ac42925L,0xd984c86dab063cc4L,
39188         0x61754b5151d44ae3L,0x23af8ec0cebeef0fL,0xff67170bc618fe8aL } },
39189     /* 39 << 203 */
39190     { { 0x123b567195b58447L,0x7397316ad43aabd2L,0xcb65d69d9ddc7979L,
39191         0xf98be7bd91150e08L,0xa5388c79fc0ae5c7L,0xb115690215ed9074L },
39192       { 0xc2d01b9227e9afdeL,0x80d705ec2095a6ebL,0xbea901c7fab23079L,
39193         0xced8b2772346d712L,0xad5c45a92542a0ffL,0x87b2e4ac0455e90fL } },
39194     /* 40 << 203 */
39195     { { 0xc2cbd64417fecb90L,0x61616eb3b32dffdbL,0xdc4485a29f5d2095L,
39196         0xf78911246553371bL,0x4f06ba18bf9b20afL,0x136d4f291a2c4df1L },
39197       { 0xc04aca34fb8b685fL,0xeec83c20f2b657bbL,0x4da5d70a5925a36aL,
39198         0x8060874172ff2965L,0x2e0dd9ff9f352620L,0x5f0afa6746d1a7a8L } },
39199     /* 41 << 203 */
39200     { { 0xb76c722762c1e582L,0xbce1eb164ffefd05L,0xa574a9fe169e53fbL,
39201         0x77bf92b0c001628eL,0xd998172c04d60440L,0x62f35199ceae6bf7L },
39202       { 0xd81a563e93f1ff84L,0x5a7a0b4211598ad0L,0x884f2ca5ff11f3f8L,
39203         0x99f5aac2f3ac66cbL,0x58497c01f489c5afL,0x11277bc39566521cL } },
39204     /* 42 << 203 */
39205     { { 0xfb9670c26a770385L,0x5da887e1e9682174L,0x31fa9d6bedf922f3L,
39206         0x8de8814cf7a98d1eL,0x3935b9b27a019f08L,0x1f59d6f3ea6173caL },
39207       { 0x8732f39d5c638a66L,0x981a1b7a3d48d3e5L,0xea451b381ee0ab37L,
39208         0x31a8e9abf2708356L,0xa491944ee86cbfc1L,0xd747a885a97ddfcaL } },
39209     /* 43 << 203 */
39210     { { 0xa3460236aefd304aL,0xaac80f43c58719a0L,0x7d635c17d3ca5b1aL,
39211         0x986ac0a62119976aL,0x0d8a6e39f2538d36L,0x6a02af2f31849d5dL },
39212       { 0xecb6ef8f6719d4deL,0x6dd71ab674ff8880L,0x0d40ec0e9d225d93L,
39213         0x304cd88adf381d24L,0x2d6787380c5571fbL,0x03c23f547c03af94L } },
39214     /* 44 << 203 */
39215     { { 0xa995a95bf46aace5L,0x44ede5379eaa630aL,0x421f3b3500336e3bL,
39216         0xbf897478cf47c9edL,0xf360ae32259e0827L,0x04e0e3e82e6a9f6bL },
39217       { 0xb26eae5fa9136702L,0xd6cb15a1853674b4L,0xf81276e2748bcbc9L,
39218         0x7fc02e220a4ca1d7L,0xf650f48ecd82f330L,0xf4ea7c1dabaa8859L } },
39219     /* 45 << 203 */
39220     { { 0xe9f090b935caae35L,0xe04dff188dcf1e6bL,0x81b7de5eb8032e04L,
39221         0xba0d0b4e4b1e8070L,0xaa82dc8ad1a2aeb3L,0x5855ed1ded26f229L },
39222       { 0x8bce967ed1955233L,0xe6ed07f356ac7532L,0x4227c7fdbf0eff2dL,
39223         0xb1f4785fa5e213e4L,0xeedad0733ac30f4bL,0x503619889cf1e686L } },
39224     /* 46 << 203 */
39225     { { 0xeb252116ba5da79eL,0x51cc937edb691345L,0x1d5fec14077458c1L,
39226         0xaa304f7ba0808e6fL,0x4bed89f5abec4c09L,0xc67293cbd1a3b798L },
39227       { 0x0905f7d342122672L,0x83675b2da0d3a277L,0x7f422b7024bf5bcaL,
39228         0xe2144c6910495acfL,0xdac1c357a6a6ab5eL,0xd1a3b951c8b1d472L } },
39229     /* 47 << 203 */
39230     { { 0x0821017d60c0c248L,0xa17ce97a8540bdc8L,0xe0576ea986e6f45eL,
39231         0x1453268bf152c6eeL,0x1ea1937138edbed5L,0x970ad9c002343c23L },
39232       { 0x3a08a859af8a97afL,0x20caf7cab570d738L,0x6d82d863e2a89455L,
39233         0x30eb8d0724c76844L,0xb31d58c8d32b79f1L,0xe5df7cb9fe63e93cL } },
39234     /* 48 << 203 */
39235     { { 0x1ccd44ff95c746ecL,0xe18914b510405763L,0x50ed644321a3a927L,
39236         0x4f96a1b143ef8e8fL,0x7f5645e577952bf8L,0x4bc5c7ab66dbdf15L },
39237       { 0xacc1612623930a08L,0xbf5ed482504cf9b6L,0xdeb7a798d71ecbd7L,
39238         0xf62e63b14a4dd859L,0x668809a7daf714d9L,0xdd836382f3a4329eL } },
39239     /* 49 << 203 */
39240     { { 0xac0ef2cf383e038bL,0x848e3c1f91135098L,0x19e5a3ee3f15b241L,
39241         0x2d01f1a2dbea2ad2L,0x44ec32a799cb0bdfL,0x3e66fed4eab4d856L },
39242       { 0x3162a75af45c8656L,0x53ab74245a37ca4fL,0x1b81f1dc360bb395L,
39243         0xa7eb222e2b8a5267L,0x163bb0c804b0bcaaL,0x1cac5bc0ef5c417dL } },
39244     /* 50 << 203 */
39245     { { 0xb95e2d85e81d9e43L,0x8a92acdd1418f6d8L,0x5429140110ee43d7L,
39246         0x32a2933c625838dfL,0x801d57dd3d485868L,0x33bba67258af765dL },
39247       { 0x545fe2583f520eecL,0x900ed51a32d71974L,0xf21fefe6df3ed77cL,
39248         0x2f0df28c9deb2d81L,0x90898dd780856fb7L,0xeba82159bbba4771L } },
39249     /* 51 << 203 */
39250     { { 0x83ecc8f374df3780L,0x432e9807d3a89728L,0x3461c5297b5cb6e0L,
39251         0xee307c19030c25cbL,0xd72b60c7391ee616L,0x0c07bf462e9b4384L },
39252       { 0x9d791b0bd44acd49L,0xf3b3411c9f3b33caL,0x1bf55cb97f9b455fL,
39253         0x77e01607600f0a91L,0xdab95bf26bb7e977L,0x30d0f591fe4633e5L } },
39254     /* 52 << 203 */
39255     { { 0x894bdbd9c48f3ad5L,0x687ff8de09e167f6L,0xf06104a930371c43L,
39256         0x82fd34b7ce84dd10L,0xae122deb66ce5abdL,0x31f041d2fc4a90b2L },
39257       { 0x2589535c9a01c607L,0x231bcc85695bd7abL,0xc67c306262e3a31dL,
39258         0x31be44757af3e186L,0x1a2077a388efa7f1L,0xffe53e22815fad1aL } },
39259     /* 53 << 203 */
39260     { { 0x4ce41f69a3ee310bL,0x38fb07d09bf311ddL,0x5fd284d660985bd4L,
39261         0x2fe99a19e04d3dffL,0x21a352520b3ad853L,0xb0808a89012aa69cL },
39262       { 0x98219cf718c7c301L,0x429e08fc91254db8L,0xface2e53c41d54d0L,
39263         0x180651242decb2d7L,0xa9f65e3f26a9191cL,0x1dadd3deed42831cL } },
39264     /* 54 << 203 */
39265     { { 0x81ce91dd6327460aL,0x4cc880a0e2f22af0L,0x81aa9bb46a6d36f3L,
39266         0x8ad516741dd10657L,0x212267854253b30aL,0x530d1f6a8f161dd6L },
39267       { 0xe7eeb4c7e9ab63aeL,0x84f225bfb72d250eL,0xc81cb984458a8dc7L,
39268         0x39fbbe3bda68c1afL,0x8c6c99b3083cafd9L,0x4700ba37eb07d40bL } },
39269     /* 55 << 203 */
39270     { { 0x8980dd7cd8dcc7b4L,0x0179e9bc7ad18f8dL,0xa9e4fa6a08c60f0aL,
39271         0x4f0d76fa3cc7dd36L,0x53339e4c51a0e67eL,0x1acdaf24cebd80cbL },
39272       { 0x5aaebffcb5264b96L,0x3ebebb22858df87aL,0xb2f4c1cb092a95a1L,
39273         0x34932d51841b1a63L,0xe0631aab49074a2fL,0x71525c4fe3b7fd61L } },
39274     /* 56 << 203 */
39275     { { 0xdd15591366229776L,0x84093730f7882064L,0x6dddcb14e50ee337L,
39276         0xa8e6ec597a1f7e81L,0x8467f998f3738a6aL,0x70fcc6bcad3f1840L },
39277       { 0xf82eb4be723b3f4bL,0xf0f3935406beec1bL,0x1b181ea37ddcb539L,
39278         0x9c82c4faad6a81b9L,0xcc5ea5435c612c2bL,0x63ce7571bb258d6fL } },
39279     /* 57 << 203 */
39280     { { 0xc6c110ecd3b9416aL,0x254403ea024f63e5L,0x92d2965b68aa4a66L,
39281         0xa08bfaafbaed92aaL,0xe2194cd701ad3eb4L,0x7ba66e1da7552847L },
39282       { 0xf68c90ee44eb9bbbL,0xabe38c5c5f6438daL,0xe16d4aa68c38a6a1L,
39283         0xc2f8691bf6294db4L,0x9248492fba64da6fL,0x850c6a6865a3d6b7L } },
39284     /* 58 << 203 */
39285     { { 0xa794308d2599a1f7L,0x06bbefce3e72b328L,0x24f2c6f5420f6ae1L,
39286         0xedf67defaae894c0L,0xf66396eb2e8e9821L,0x21fbf5f7a701c8ceL },
39287       { 0x7fbb192401732f26L,0x3d0063a944f57696L,0xd6bcb1c3513dd8f7L,
39288         0x1fbb11b2c9f8c033L,0x122f94b17b57b3eaL,0x08edce19d24626c0L } },
39289     /* 59 << 203 */
39290     { { 0x06aa75398c3a1e9cL,0x3512ec3c1a08c7caL,0xfad0dddac5a92e6aL,
39291         0xa98059ee3b9022fdL,0xd67b6723103fbda5L,0xc1df32904762c170L },
39292       { 0xfd99ee58c734f81dL,0xa8de2a4b478b8a4fL,0x9e3ed58fb4b557c6L,
39293         0x14d353c571abd10cL,0x10ea798fe3fd4475L,0x157e16f97627f4d5L } },
39294     /* 60 << 203 */
39295     { { 0x1b5888550b96547fL,0x4539c9c065d1a59dL,0xd6c95fea26e15084L,
39296         0xf84ad9e286b96242L,0x92f57d6d451a5486L,0x0215cfcb06a9e87eL },
39297       { 0xe05b10eaf66e46f3L,0xe7b0e72f655a0642L,0x035032677b117f43L,
39298         0xf5b78105779ea4a1L,0x28ee00faa4adac77L,0x1ea67d716a93a2b1L } },
39299     /* 61 << 203 */
39300     { { 0x4b68a01cd6b3387eL,0xc79582a9e7c4c99aL,0xa4ad6429029fc3bcL,
39301         0xf260ad946b83c7adL,0x81360618b09c3b8eL,0xf66e00ccc661ba2bL },
39302       { 0xd064537de29a69e7L,0xe2764d389bb4095bL,0xa3f57eb0f2efdea7L,
39303         0x72c214f27ed3ac00L,0xf8cfa59de392e32bL,0xa5d995124ad99928L } },
39304     /* 62 << 203 */
39305     { { 0xd069a9971dec038dL,0x64401a3fd0b59bf0L,0x33eff74ce7ec5e85L,
39306         0xfef5a1c50d35b207L,0x731cfc17e766bc43L,0xf994c0d01328b6cbL },
39307       { 0x4f2a5eaa2d3cc024L,0x7f83c57036a6fa14L,0x915a126d65f71dbdL,
39308         0x588fdd68acfb54ebL,0x7de9d37b7f57b2afL,0xca52d27170e071ebL } },
39309     /* 63 << 203 */
39310     { { 0x9b9211ada283322cL,0x30c6fa27b7124c9fL,0xda8f88a7474cbf5fL,
39311         0xc2414ee338203749L,0xe5c65cc26b767731L,0x8bdb52952753781cL },
39312       { 0xc8fe770be051cd30L,0x6370ecc4f046aa97L,0x03c83c1cfa287e66L,
39313         0x935bd2052bccef4dL,0x87b2a49646012036L,0xbce6a91de3e6d6aeL } },
39314     /* 64 << 203 */
39315     { { 0x7be81fb126882c6cL,0xe2d5a251ecd25498L,0xbb3d40e27a8d1678L,
39316         0x1806c67ad520811eL,0xadd4bb6686f65d23L,0x3a62b1b3e20e23d7L },
39317       { 0x208b47006548b3ebL,0x0497f09ab7ec2809L,0xbd3964f8121c37e2L,
39318         0xd35ef301a598efbbL,0xbd76a276c5eef966L,0x64700a7f0af64e46L } },
39319     /* 0 << 210 */
39320     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
39321       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
39322     /* 1 << 210 */
39323     { { 0x169474a2d3812087L,0x9de300da6698ca7aL,0x8589de922ede425bL,
39324         0x50e03fea6df8a890L,0x0d8a5c1c4ba8b8e3L,0xf273aa673fffb91aL },
39325       { 0x21cf054475fc8236L,0x6ceafacf9799c242L,0xc3237eaed0962c81L,
39326         0x43d6ac34213f6004L,0x45e619b2d4148b6bL,0xfafa18b5ea5fb80aL } },
39327     /* 2 << 210 */
39328     { { 0x9a8580aa2f063b51L,0xa83c8ff71c216613L,0xb4da0970be07f781L,
39329         0x0ac2a260712f7b7cL,0xc9b8ee84436a7b97L,0xd758c20d11fb2f62L },
39330       { 0x5daabed9f170b799L,0x018d2fddc46bc387L,0x82d6b5b7d96cfb8eL,
39331         0x4d7d0d9344d9e843L,0xfa2a9ea991e7da3cL,0x8230c1a3d531b253L } },
39332     /* 3 << 210 */
39333     { { 0x82412f525ec31754L,0x42f462c89d32e890L,0x1e7b58cece897ff2L,
39334         0xcfef785241164628L,0x34ee0422d8bb22efL,0x6e0d44ac7d32f01bL },
39335       { 0x968251655a3cc196L,0xa26724dc99eb23d3L,0xdb575fafa75f7252L,
39336         0x778e333062a3e5b1L,0x8689884e84cccc80L,0x9883cd19b645502dL } },
39337     /* 4 << 210 */
39338     { { 0x4cc41f2834220e26L,0xb5937c6da49749c4L,0x705366640fa1ca24L,
39339         0xeeb40f3b91e5edafL,0xcdf98235f1d3de14L,0xa65e5b7eff018c43L },
39340       { 0xaa3228e7acee3a6eL,0xb63a6289e08f4ff1L,0x90e90425650b2daaL,
39341         0xe4a8cad26d875f17L,0xc212029c9ce8a46eL,0xce0512835ed7cfb5L } },
39342     /* 5 << 210 */
39343     { { 0xb0df226159b79436L,0x82bd0dafa195be26L,0xbc99a94b3398c317L,
39344         0xbeb44c903c96ee31L,0x3c39ad81664d2e46L,0x081787520a3e0585L },
39345       { 0x9a054b6b413e269aL,0xbe58891d98c3b62eL,0xe7fa4c4de5734974L,
39346         0x8ac535f4d0a846a8L,0xea0f95f1a651339cL,0xa255274fd96aa239L } },
39347     /* 6 << 210 */
39348     { { 0xe23b7b229534047eL,0xbd70aea83a3bd625L,0xf44b05fe238db60bL,
39349         0x9c46fb140293abcfL,0x12cab5d3bfd8875bL,0x1f38d4aa12dd0c65L },
39350       { 0x4bed41572adf9805L,0x3f87da928a56609dL,0x10b93363da02c903L,
39351         0x7ecc726621ce4786L,0x8ae366851e3da5bfL,0x196040ffd3edee12L } },
39352     /* 7 << 210 */
39353     { { 0x4805841fe81508e8L,0xe2a578d3a4808642L,0x6bbf10accd0b2555L,
39354         0xc5071effaf5cde28L,0x665e75439a7124a9L,0x157c11edc1437981L },
39355       { 0x2019367d7aeddd8bL,0x74a1e104386e3b8aL,0xe72d429bfbe09a42L,
39356         0xaca96fd9061b862eL,0xbb2d2bc8122595f8L,0xc90c6503c509d644L } },
39357     /* 8 << 210 */
39358     { { 0xadb5966fcff05adaL,0x8ed26c025c57284eL,0xa76e73e244693a95L,
39359         0x14da74355982bbd3L,0x46e982cd5d2ca132L,0x8f39074024938e76L },
39360       { 0x749206b30a89b09aL,0x429653c793b4a1e5L,0xbee3d1567025bb7cL,
39361         0xe23f0e1e19555c9eL,0x0dec3837751639baL,0xb36cb84405d43bd0L } },
39362     /* 9 << 210 */
39363     { { 0xae76a96e74f90b6eL,0x5fa8e94824c6789cL,0x2b3584bb03abbb81L,
39364         0xe19ce47c5c451f72L,0x35792fbad619ac7aL,0xfa0282a250059bf4L },
39365       { 0x562bfd14dabe692fL,0x1aaf542c47eeb6c2L,0x392d5bba045d0360L,
39366         0x4e7bb31bd80fe998L,0x08f62ef31111e14dL,0x4de917b04e9ee1b8L } },
39367     /* 10 << 210 */
39368     { { 0x8b9d2d5867166271L,0x658db4ea142bab7cL,0xdf84932fa4ad2849L,
39369         0x04b113355f6f86a7L,0x2de6b29c50cfcea7L,0x46d8f68a9be6a3a3L },
39370       { 0xfb88cda7af0204afL,0x3ece449126029d72L,0x69fef1e23f946dfdL,
39371         0x708532fb01ef7bb5L,0x78d5053deb3795a2L,0x819a63206b36d57bL } },
39372     /* 11 << 210 */
39373     { { 0xca07e0c1e509d19eL,0x6c7e42c39f6281b1L,0x0e2ff43977b66728L,
39374         0x1d740e7880e76251L,0x6bfae4c631a0eb23L,0xd78ca917aa9b0b3bL },
39375       { 0xe140c662991e1781L,0x6e396b5f0dd3cfeeL,0xf0a1d1976ce7f6c7L,
39376         0xbe10f8efd5b01564L,0x865cbd54101a5194L,0xf665885266861dedL } },
39377     /* 12 << 210 */
39378     { { 0xe4e52e865b28f7daL,0xeb43a6809a58683fL,0x73b951bfb49f2b38L,
39379         0x7b6cb7db3f8097cfL,0x9dfb8d0b328fbf05L,0x491635a5ebce6211L },
39380       { 0xa31a152390fdd577L,0x334120df1cd2f39cL,0x1d22834e6b563876L,
39381         0xfd91b30d10ee5a28L,0x3d7a282d59aee4eaL,0x36814c6b73300a76L } },
39382     /* 13 << 210 */
39383     { { 0x7b584add6621c251L,0x98da669d4233aba3L,0x4d652b7933aa2065L,
39384         0x901bcfb8df7b4ed4L,0xb2ce587948012f81L,0xc18e2cd63cb71b88L },
39385       { 0xadb0f2bdff86279dL,0x46d9e5d65bd15866L,0x11b1fb3ec635a4c0L,
39386         0x8bcd0ad201b1006aL,0x0f6f7502cbab210bL,0xd6cc3e560d6b3995L } },
39387     /* 14 << 210 */
39388     { { 0xa54a6420137264c5L,0xa6ef0e78f9c2e45eL,0xba8b5a73d58d850cL,
39389         0xc0209ed86ef6fc3eL,0xe39dd0f391f7518aL,0x74697b8942b3eda6L },
39390       { 0x2dccac36abfc9150L,0x80e4fba298b2f5a5L,0xe0e56fd2771018d5L,
39391         0xa31fd1684c22bb94L,0x8b0998f71a66ef21L,0xed483e55b5a53ddbL } },
39392     /* 15 << 210 */
39393     { { 0x95db1c0ef23978ebL,0x80ad1612f04011f4L,0xe76bd1824d7ae83dL,
39394         0x841d6e668fc3bd60L,0xb68e80796875e2d0L,0xe3965efcd5d9dee7L },
39395       { 0xc488bb7e58930931L,0x52f4de19a907aa24L,0x39aebbdd321cc197L,
39396         0xd2f5b1f967de5c66L,0x60f1a8c28efe3e76L,0xf40604a0af988831L } },
39397     /* 16 << 210 */
39398     { { 0x78b5c14c0acb5935L,0xd9ec715c4311d3beL,0xffa22ab209e1759eL,
39399         0x5a86263db4b2f68cL,0x71e77c516b5be7f4L,0xfb5bea3a19844f6dL },
39400       { 0x2519d0060890ffabL,0x426a03f0f0329ef0L,0x2c6d74a685b3c2a9L,
39401         0x9306f68fc294f449L,0x552e77c22c69fb46L,0x7c7337ad10bb9886L } },
39402     /* 17 << 210 */
39403     { { 0x61f8a505d2b9f25bL,0x1d33aafe4c8645ffL,0x26f3fab7bcd333e5L,
39404         0x8ff4fc51be95e40fL,0x11cd52c6b55bdd5aL,0xf2b4782a22d43de8L },
39405       { 0xfe66e399a4c0e1c4L,0x26c6d7fc17954032L,0x44c700f97f20d2caL,
39406         0xdf67c3927187cdc7L,0xe11a98f9da36414cL,0x0bc5763a04052276L } },
39407     /* 18 << 210 */
39408     { { 0xe75b564bcf95451bL,0xd5ed760cc01aac32L,0xccf14dc5980d2c06L,
39409         0x235b5034ce2a5c0cL,0x64dc86aa05fa6780L,0x1d2ea4877385590dL },
39410       { 0xb18696f636c3174eL,0xf530487b608215b4L,0xa073d0750a123172L,
39411         0x8ca24b5afde8666aL,0xd6dd589a9b716dc1L,0xcab7ea504a721d4aL } },
39412     /* 19 << 210 */
39413     { { 0x34dee42c1592ebceL,0x5b0eba2e417636d3L,0xba178703a97d7356L,
39414         0x16f6119f4123e8cfL,0xd2906a53ef179fa6L,0xac5530606b7ed572L },
39415       { 0x82a25857b600f5c8L,0xb1dc1309973d516aL,0x6d53a967245c6e34L,
39416         0x7ce90bf4f670b879L,0x727ad4129732b6ebL,0xf00fb0054411dfd5L } },
39417     /* 20 << 210 */
39418     { { 0xeba7daad2b14da6fL,0x8274d1a8cee90515L,0x985c18f885bdbc82L,
39419         0x86555ff094d43909L,0xb0b1b2b6539e108bL,0xa4f32c66c0bf1313L },
39420       { 0xbd4777c162080e0bL,0x73039da8dadfb23dL,0x85bc57374a27f1ddL,
39421         0x9a8ae24eeaaa58abL,0x161cb2f5e876fac2L,0x54d457e46636e377L } },
39422     /* 21 << 210 */
39423     { { 0x409b17487bece8c3L,0xee36a1d3b49f5c90L,0x8ed9eb2a619ecefcL,
39424         0xc50a917798ab7bb1L,0x1eb247cceee2ccffL,0x07a9566f084a0f69L },
39425       { 0x59bda805a7cbee61L,0xf588124ca4e7ecd7L,0x0f7d8c3dde5eed54L,
39426         0xd98894ddefcb791fL,0x2fd80439ab309d7dL,0x0c8bf15d3e6cf756L } },
39427     /* 22 << 210 */
39428     { { 0x076a19c70e68a69dL,0x4d01c94b24b3854fL,0x9f38c5eeea8a85b8L,
39429         0xea80422d9a56f9c3L,0x10d9ceec9ad36735L,0x42194df742261173L },
39430       { 0xc7332e70c285d22dL,0xf3a3d4be592ff9b0L,0x2fe712f7f59846abL,
39431         0xd6de5201e4362677L,0x16ce8f1d4f30006bL,0x1f3c324d11dba5edL } },
39432     /* 23 << 210 */
39433     { { 0xa5af9e1c0cb4335cL,0x00a46bc0f3d0dbe5L,0x852a18c99d734817L,
39434         0xc12d54a9986c0102L,0x184b407063ffe60dL,0xe05182437d99d723L },
39435       { 0x8d3886cb20ef7647L,0x7e9c618017b1ce8fL,0x194baf260f176141L,
39436         0x978015d3b4694945L,0x2603be2f1c135e8eL,0xbc0f5e72ba074e0aL } },
39437     /* 24 << 210 */
39438     { { 0x1674b959cfe7bcebL,0x62e1279fe7b66a28L,0x3962a32dc67c3648L,
39439         0x4949617368d720a6L,0x4e81df85a957a5b2L,0x28b5c45753123c0fL },
39440       { 0x5091dd347e239c67L,0x10b9c3f6160ef925L,0x5e7720f52c119dbeL,
39441         0xd584ae76c94d609aL,0x476c63ba86dccd1fL,0x70103a1a32508c6eL } },
39442     /* 25 << 210 */
39443     { { 0x64f4f4ee90a17a16L,0x31165bee7cb22fb7L,0x31da800b924825b0L,
39444         0xc2c169db0551e47cL,0xf9ca5e0e0d583789L,0x5e4fbdb53cd42f2cL },
39445       { 0x6ade1fce1d81000bL,0xa105df391d6603e5L,0xd659094da3139f95L,
39446         0x363a882851d01444L,0x13cd7cbb2dece086L,0xaeea2aa96ab9020aL } },
39447     /* 26 << 210 */
39448     { { 0xdcb31a931081405fL,0x200090dcf1326ecbL,0x773fe49cde99f0ddL,
39449         0xf6a7cb67fac2c511L,0x95c93429b40b014dL,0x967708d4198dd723L },
39450       { 0x74591cc184b90062L,0x2539ef20691d2550L,0x7d7290765a5d86c7L,
39451         0xa81f085475c6fdacL,0x103186d1c0f0d5cfL,0x5ae582e07eb3b8d9L } },
39452     /* 27 << 210 */
39453     { { 0x7df39eb2f9f3456cL,0x1e7ad4587be12020L,0xaee54df11fedfb79L,
39454         0x98f3a0879bf1dfe6L,0xdf958d371d13fb71L,0xa745249717dc809dL },
39455       { 0x9f2ec9dd02d4eb90L,0x9db5686e48b0c7a0L,0x7d064cbf72532eb0L,
39456         0xe204d56593a71a9cL,0x0c912346f1aecdecL,0x894224a3d25d243dL } },
39457     /* 28 << 210 */
39458     { { 0x6bbf77cb5a508291L,0x2af81442d35db82cL,0x357feb1a2b9febf8L,
39459         0x74240a81a25330ceL,0x7a9ab575b4917998L,0xa60288d5eda3ef5cL },
39460       { 0x360410d30aea9569L,0xef66acb5b9bf8c16L,0x7baeb466cc381b57L,
39461         0x024a98b8247a4904L,0x6e70b4c3e3c58130L,0x276e2420ae8a56d2L } },
39462     /* 29 << 210 */
39463     { { 0x3b4a25222c57f1f3L,0xf43d352ba8d1f53bL,0x169fb3cce198b03cL,
39464         0x92172ca923235a6eL,0x90b5953683f996e5L,0x32b1a34cb5ab11a0L },
39465       { 0xb944e4b7b9001351L,0x1084de3d28ab5cb2L,0x60f1dc93c70ec63dL,
39466         0x790e1d496cfa10f9L,0x79bcc2277c3cd865L,0x95007ac24fd31fd0L } },
39467     /* 30 << 210 */
39468     { { 0x6b5d8db5f75e17b5L,0xc5ab42961b45a230L,0x586f097b7486832aL,
39469         0x1ec456c14f289757L,0xd11773bb57b04a20L,0xc84dfacd0821d3dfL },
39470       { 0x580da8cd586e399cL,0x58c1355ae3bbec57L,0x0a476934d594a2e5L,
39471         0x0490ffd537e99427L,0xd41348386a4d8c4eL,0xd62cccb3c83d6e28L } },
39472     /* 31 << 210 */
39473     { { 0xe6071a3d57c9e219L,0x88728c47a93f38dbL,0x0426848b50eb1a01L,
39474         0x9df36972cada9a09L,0xf2ad4a2d4f494ec4L,0xae26577de1f34993L },
39475       { 0x72ec08cde3618d7aL,0xd1fb89013ea90c46L,0x915936173b94f996L,
39476         0x8703357705387745L,0xf1961ff818fd5199L,0x7f0b58d34c2aeed1L } },
39477     /* 32 << 210 */
39478     { { 0x3313a9d544b133d9L,0xdb85c25d2da910ddL,0xc0fdef915e4dd5cdL,
39479         0x902a2a93c565dd67L,0xd8eba4dc7fed05acL,0xd453995ce157dae9L },
39480       { 0xd655d0b3f250cb55L,0x4194a09e86119222L,0x5b7e525a0652872bL,
39481         0xaf7968efe68c0ddbL,0x2ec02930f51cb31cL,0x237f3ae4f2be071eL } },
39482     /* 33 << 210 */
39483     { { 0x696d84910dc943a1L,0x1f24fd7d9fe1d7d5L,0xea38c9e349413ad7L,
39484         0xe223996607c1cecaL,0x62094496ea7bd8dcL,0x9aba5bc7236dd525L },
39485       { 0xa138ed5851631b6fL,0xed724f20902f109aL,0x3ab594cccb28f1e8L,
39486         0x3424213b5916dae7L,0x07e5a6df18479651L,0x4c51f2e1c5b48e29L } },
39487     /* 34 << 210 */
39488     { { 0x6306564b6591a811L,0x734b2619fd463a13L,0xa795d0569d8019d8L,
39489         0x103d85004ffe5858L,0xe1962c31adab8484L,0x326b3351b2015dccL },
39490       { 0x2ad52b852ff36c73L,0x5874652308682fcaL,0xf544e162ea37824eL,
39491         0xd4a6b45ec208ce7cL,0x52d09045d2559ef2L,0xde1dfbbe57ebca65L } },
39492     /* 35 << 210 */
39493     { { 0x3a94aec3bb793f9aL,0xd0af44d4b5352511L,0x1d3f1c130b8930cdL,
39494         0x016cab225a729e0cL,0x092a7c11e31b549aL,0x80c462ed90ebfea4L },
39495       { 0x3dcb9606e5e4ae09L,0xad150903ab59a450L,0x1b58210c6c944727L,
39496         0x26599f6024572a80L,0xfce0ad40c0445075L,0xedca1ada54c4037dL } },
39497     /* 36 << 210 */
39498     { { 0x794593303801b021L,0xb19bb405c9a4cde4L,0xe20091667f9cdee9L,
39499         0x762c684f7636d30eL,0xbf2b29f20c215831L,0x4c0d1b651853fe90L },
39500       { 0x196ccb3157defc94L,0x9f3d66b7f6b9cc44L,0xb2328a0eea439deeL,
39501         0x82b3808d7b140e5bL,0x986210dd88e4a35cL,0x9b171fc838a2b7a7L } },
39502     /* 37 << 210 */
39503     { { 0xdc80e3ae91517233L,0xa219f65dc6f20d29L,0xd348a3d8be093f56L,
39504         0x63c233774d33113bL,0x587fd56257f2ce9bL,0x82cf3e3a4e9061c0L },
39505       { 0x0e41f59bee8dd928L,0x7a5641be8aaef52dL,0xa852a171984ff476L,
39506         0x3c37fd1c047457b6L,0x7f00d665972d4793L,0x29dab0fd97b27966L } },
39507     /* 38 << 210 */
39508     { { 0xb1d119c91e9d07c0L,0x2f973a09432c86afL,0x3505b6f05ded5546L,
39509         0x21814b958687f973L,0xc104d7fad3794ae9L,0x81614d707ea91311L },
39510       { 0xb7f3e6b600677961L,0x53fceb8bc0e6a90dL,0xa3a7485699ed4fb6L,
39511         0x07ad488421d4807bL,0x527b1ae6004e0c03L,0x437f306215146393L } },
39512     /* 39 << 210 */
39513     { { 0x917b4cf463e12603L,0x79e0b7363f838ecdL,0x57de4b3328b4f37eL,
39514         0x3085e4887f58fcfaL,0xb9301c4e958a3bc6L,0xef8d10578b044eddL },
39515       { 0x2123d284d6391459L,0xdfcc2be5e196d765L,0xb58216268184b993L,
39516         0x13e21d03937c6048L,0x39eb3d38460d11fdL,0xf8ef123e5bb23c30L } },
39517     /* 40 << 210 */
39518     { { 0xa6f8b354666eb2f0L,0x7fbf6d91f9c7b16eL,0x9b360814161b5e0bL,
39519         0x13726fbd921511a4L,0x37aa1b8013833a11L,0x53f01183407b9889L },
39520       { 0x8a83ea3fd147da9fL,0x25279241db0ad0b1L,0x78353bccd1a8d9aeL,
39521         0x1e33c10e271f7f0eL,0x136d9e7e9e67adc5L,0x11dcef95cc56ff8dL } },
39522     /* 41 << 210 */
39523     { { 0xae530580d84ba919L,0xac2e43ceb6d3ecd5L,0xf97b1afda4bc6a2dL,
39524         0x180d66d5bdfa96a0L,0x935b8a7d1ca12bf5L,0x1d4409a79e678225L },
39525       { 0xdd85bf4b19a2163cL,0xe34197bcddeeb22bL,0x1e33fc3e1210cde9L,
39526         0xc96212a98b9b5d0aL,0xa3ae81f303e4a12bL,0x531a7148ea262807L } },
39527     /* 42 << 210 */
39528     { { 0xf11ac5fd4ace8006L,0x898a388133c499a5L,0xcf27ab9f1d3368ffL,
39529         0xfb6019606cbd6e54L,0x5373c2a901fb58b6L,0x1489f5037cd1b888L },
39530       { 0xb3f0e0b85a238131L,0xd0e11e6e670858bdL,0x897f1584b65768f8L,
39531         0x9252aa72013b1f2dL,0x185842af0a1a5f8bL,0x49a978373d681a70L } },
39532     /* 43 << 210 */
39533     { { 0x8b65c6d23396eaf3L,0x2191764e50b9392fL,0x7a2363b72dcf6d0aL,
39534         0xa6a52402f0591553L,0xfaba81cd5ff7a071L,0xd6be926ae43e37aeL },
39535       { 0x7b34c578ccaacef2L,0x2bc5d248d5eec9b1L,0x9447aab3014c0048L,
39536         0x767309a3c02d54d0L,0x408c6eee1f92297dL,0xf7ad95f40072a2d4L } },
39537     /* 44 << 210 */
39538     { { 0xd0051ab940ee5098L,0x4861b2461d8311deL,0x6b7796e0f31e860fL,
39539         0xde8b243acfd543e3L,0xef9d0957a0161843L,0x70fd43ecefefcbaeL },
39540       { 0xd47392541931a5a6L,0x42e253300342623aL,0x90b33edd52ffbf5fL,
39541         0x0affda4ca015a550L,0x8716376b77e59672L,0x39d84b33fc0e9448L } },
39542     /* 45 << 210 */
39543     { { 0x71b55e7ea0415173L,0x5d0b5e01b10f3cd5L,0x0c35a1b63e3f9d84L,
39544         0x3c68cb5db794ba37L,0xa73356f0dfd6c999L,0xc59ed0650e5e221aL },
39545       { 0xc59443a90cd7d577L,0xa354296e283015a8L,0x202aee3ba7477107L,
39546         0x59f361392ee80330L,0xc52bdfaae875a886L,0x8ca39d9d07637e97L } },
39547     /* 46 << 210 */
39548     { { 0x95be10b8f3a1611dL,0x6db370f0d1f992c1L,0xb964029de8124b40L,
39549         0x618b26aadfc90473L,0xac65c9916f6d5553L,0x10d5b0f0a0a6fde8L },
39550       { 0x4bff23122d164911L,0x876db39d1f7293b1L,0xa2d3cd549de47789L,
39551         0xd8ca4f6eabc9a28eL,0x0bb3145fca7b5467L,0x4dce66338b37bf62L } },
39552     /* 47 << 210 */
39553     { { 0xcdd8ec4dec1b8d36L,0xf76258d888003e0cL,0x35a114e7262723f9L,
39554         0x12933142abb34bcaL,0xf55b84514c188a3bL,0xa0cfdb2c0ada78b6L },
39555       { 0xaf0b62f6ed36781cL,0x0c619486ea7e1ca1L,0x11fae38689162fc3L,
39556         0xe9bd7ae694828e92L,0x081c3acda84cedb9L,0xb34ceca8787a67e0L } },
39557     /* 48 << 210 */
39558     { { 0xd1b2af2f2bca651bL,0x2211e4f97404bc78L,0x787b1cc8fc5068f2L,
39559         0x73d6da299fcbb3f5L,0x6867fb7707d2142fL,0x36f277ae116ad6bdL },
39560       { 0x81c86073a7534943L,0x67188488c4033c7aL,0x13a8415ccc568123L,
39561         0xbc01db07f3f475deL,0x90b8af2e3aaeee1aL,0x320c4880175fa55bL } },
39562     /* 49 << 210 */
39563     { { 0x263afd7d2fcafc9aL,0x9b0c30ebcc9405d6L,0x713fdd27d6720896L,
39564         0xb07f8ec5f7df4a02L,0x05d62e5147ddd4e1L,0x6278227b8ae3b80aL },
39565       { 0x2ef5c81b0d4ab658L,0xe6ad5925016a434bL,0x6c0e30a2b85d8037L,
39566         0x254830037a9cd869L,0x78da543b2cc48c8aL,0x3a65b54e3edca4dbL } },
39567     /* 50 << 210 */
39568     { { 0xaf2a06c3d54b0072L,0x81621ebfaf0310c5L,0x6bd1fe41a8a7a9ecL,
39569         0x942cf6ba03e74289L,0x2a25f0f59f9822e8L,0x16654b13062edd3eL },
39570       { 0x2345a0b19de373cdL,0x425a59f80c0744acL,0xc6738fe96f0d620aL,
39571         0xaa479ef8ed67c1a9L,0x52540af87765b194L,0x17a3bd3bf2b96455L } },
39572     /* 51 << 210 */
39573     { { 0x5b1a1f075f01e608L,0x3c696f4e87b821c5L,0x4358a5243129700fL,
39574         0xfc9816a14be9d001L,0x905de48166744b96L,0x2ca5f8d8eeda3945L },
39575       { 0xb30eeb1aad207f4eL,0xbd113b2dbc66e6f7L,0x1b6c5c6cebaef81dL,
39576         0x6b3863998bfaf32bL,0x5f9f2a2432a83dffL,0xe8cc190e26ea39d1L } },
39577     /* 52 << 210 */
39578     { { 0x51e05f7d450535fbL,0xa5f5181effbe389fL,0xdf178fffaa2d5514L,
39579         0x89358810e51da035L,0x206e324f664d399cL,0xc148ae74c4477d4eL },
39580       { 0xe0c8d4377d6f38d5L,0x327aad6d8c8133e9L,0xa685a889d21cac4dL,
39581         0x1217c68d0ceb5770L,0xa4a09612d21f1d50L,0xab64b4dd889676afL } },
39582     /* 53 << 210 */
39583     { { 0xf263062aee202007L,0x95e90bbda2359019L,0x57740eb39f34e691L,
39584         0xa5f4fd0f355bef37L,0x484b97fb439f091dL,0x642776fe53ac871dL },
39585       { 0x5c8f9b1e494e0eddL,0xbc62c971ae25a6d7L,0x01981994a7d90290L,
39586         0x3cec43524602cdc1L,0x4bd29f5a14403ae2L,0xafaef08b921328d2L } },
39587     /* 54 << 210 */
39588     { { 0xd33e754a53ef149dL,0x82243def548034e6L,0x99c29a9b23ea2dcfL,
39589         0x724e4b5d214848afL,0xe43d4438dcf85b9aL,0xaf7241ea9d7b20dfL },
39590       { 0x60a10c30069edb1bL,0x1aaddd5e9874f484L,0xfc784ac073085538L,
39591         0xc998afe54d69703aL,0xb71f6fd7bf52139fL,0x28f994c46a45b089L } },
39592     /* 55 << 210 */
39593     { { 0x85084ec2eebd9e0bL,0x73e489c6cb9f1929L,0x91e47fd7ebe10e55L,
39594         0xeed6a3a1486a2704L,0xf63deae7e124d6e2L,0xca958204b48b3834L },
39595       { 0xe69cb5bb13185b44L,0x56be0e05868d97d0L,0xc48cb1e50181e64dL,
39596         0xfaa012ddfc7827cdL,0xf535b1c83488352fL,0xd1cce04e9fbf42d4L } },
39597     /* 56 << 210 */
39598     { { 0xa54436b6ba3403ffL,0x1fe4b1ecdcbc4822L,0xb3b351004c6846e2L,
39599         0x360278048d1cac7cL,0x9eff87327e86d5d1L,0x7f435326ba21993aL },
39600       { 0xb51a9da5adc24224L,0x111c19fcc8c14a71L,0x05aa2c86ab77e011L,
39601         0x81edc338ce72744dL,0x20fa8f528d882bc3L,0xc61c3e639d1696f3L } },
39602     /* 57 << 210 */
39603     { { 0xa66674ca0f41637cL,0xa01d08ac418487daL,0x2ce4258b6b593194L,
39604         0xd755220645024db4L,0xffb3366f626732ceL,0x802878f370ba2f1aL },
39605       { 0x80a3f41659b77372L,0xfbb411631a04b19cL,0x7d575112a346d265L,
39606         0x6c30421ffff87d4fL,0x1b62b93fdcb05f02L,0x98ba4397b72649e3L } },
39607     /* 58 << 210 */
39608     { { 0xcca45c1d135a7eb5L,0x2623e629b048126bL,0xada7326e926980f0L,
39609         0x64f334c276bf796eL,0xf0751596b4a562a8L,0x0baa14486f9d0079L },
39610       { 0x6c394aa32205ea70L,0x635b9d2d556172e9L,0xf418fe0cfd37b53bL,
39611         0xcf5fe2ac56b9791cL,0x9d855e67911c68ddL,0x9e40f75f734b57d8L } },
39612     /* 59 << 210 */
39613     { { 0x32c42482b5b8f846L,0xdefec599b61cc3cfL,0x4c3460996506a9b5L,
39614         0x0d9475a0263a6142L,0x1753cd92c80a6713L,0xc015412f420cf67eL },
39615       { 0x1c33f01b6a88d12bL,0xa49f038ef522f7d0L,0x232343decd25f260L,
39616         0x479bc742d6a833c3L,0x2f2ab294cee07b83L,0x02e69a143dec38b3L } },
39617     /* 60 << 210 */
39618     { { 0xbf7fea3aee1fee16L,0x31fb342ce0cde85bL,0x9a232ea51575924bL,
39619         0xc3132e6cbcc4cf26L,0xbc5b7a7102499a58L,0x3064a3b904d99836L },
39620       { 0x6f17475ff8b3bad1L,0xaeeb90c429271790L,0x7f442a13f8eca53dL,
39621         0x6d641eea08882274L,0x8dff43bf88ffaebaL,0xaa92827f5840b198L } },
39622     /* 61 << 210 */
39623     { { 0xf5ce3fca26d803acL,0x6927ddd9d4e1b6b5L,0xb509b5c609f48bc0L,
39624         0x2bc5d1749e35975aL,0xfba3024af570c98bL,0xeba15980aa27d6b0L },
39625       { 0x95abc07290abd2daL,0xd0e30e99232035cfL,0x3dc4e1bcd3f0ecb1L,
39626         0xa5a8c6e556de9d17L,0x878c7403ab73bd18L,0x5cce39260c474b0aL } },
39627     /* 62 << 210 */
39628     { { 0x86a3f001e93b6ee6L,0xa28984474fb3203aL,0xbca0d71e9b3550adL,
39629         0xc225759d0396d796L,0x208b9a02cbd949d8L,0x15b21ec9a550d2ddL },
39630       { 0x64aaed6a2a7dcffaL,0xb8cc7575ed5b6b47L,0x2b4a3aff022dbce3L,
39631         0xe85d690b86f51861L,0xe26a6c3d578f4d5fL,0x706d770a70e7ae76L } },
39632     /* 63 << 210 */
39633     { { 0x822467eb579c91a6L,0xe98a471531599272L,0x7baf0e9f1078d497L,
39634         0xd13f270e25fe439cL,0xae9d58adc0d95395L,0xc3beb60827693037L },
39635       { 0x4d9c4cf397f797e5L,0x4e26167db26d2e9dL,0x06092d5e86a167efL,
39636         0x9827a21128dceb29L,0x30423344552a55ccL,0xae07b37f3fa437afL } },
39637     /* 64 << 210 */
39638     { { 0x9b23ab4e94d0864fL,0x46356266009c9fc1L,0xdbe99e51e798edf9L,
39639         0x38547449307675c7L,0x23ffaf55628c0fb6L,0x56ccd2a31698c372L },
39640       { 0x39f45a578347ce95L,0xe0aaec744f2c6118L,0x2a89079e4af138fcL,
39641         0xb86371ea2ee4ecc0L,0x076d256a06bbf92fL,0x9073adb8ae3c4c51L } },
39642     /* 0 << 217 */
39643     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
39644       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
39645     /* 1 << 217 */
39646     { { 0xba2e9543743c15d9L,0x7d5812db1c99c984L,0xf94db95145bdc19eL,
39647         0x951d00ae382e77bdL,0x9940a5fbb220b29aL,0x6908d50e58fc91f1L },
39648       { 0x682e42eadd0940feL,0x2124e23aa1d32009L,0xbe15810016294d05L,
39649         0xaea13fe32e326d68L,0xc0dfe1ef15e64fceL,0x32dbc0b5b8237a8aL } },
39650     /* 2 << 217 */
39651     { { 0x6ee65a08c36d3f25L,0x7b6c811fe393e4d4L,0xc4a2cc382876e523L,
39652         0xab7aba26d3bf53aaL,0x5bf00871db7f290cL,0x3cb1cd131ee6d5bdL },
39653       { 0x4cafb218de998adaL,0xa1ecf36af6319101L,0xa1fe785520b281ccL,
39654         0xe457198e64d9c65eL,0xa3d1a6d0c5a0e67bL,0x69ddbc3290cc468aL } },
39655     /* 3 << 217 */
39656     { { 0xd4ee3f7f6dadc46fL,0xa1f3dc925d7febd6L,0x4c0bee1363ebab5bL,
39657         0x70e32d77005ec237L,0x302fc73dc52fb006L,0x1af84c0a8f159899L },
39658       { 0x42a5478f0686232aL,0xb4fc56348a308687L,0x042c4970c8378f0dL,
39659         0x70c195758e2c86c5L,0x61a95e6884c7c767L,0xd96a8216d6fb43a8L } },
39660     /* 4 << 217 */
39661     { { 0x0c62fd2d543c1255L,0x71ea9c6fef361a27L,0x76b0933dcef3f9e3L,
39662         0x51b1ec2d9889ffa2L,0x9e84b2ba9a3c88d2L,0xc8996b961913e52fL },
39663       { 0xbafc5e94cee43e36L,0xd9898d2470c658b7L,0x4e9bcc41bed17108L,
39664         0x0db5b7336c7a41c8L,0xd4be07a7795369cdL,0xb899f92f7bd3a934L } },
39665     /* 5 << 217 */
39666     { { 0x1fffcbc010e15fafL,0x8447bdb8910245acL,0x857d521e86476901L,
39667         0xcd1d5f87369ccfe9L,0x560b3277b3f1dbf1L,0x4ac02a1a47ea4266L },
39668       { 0x29ac98b6a8a929eeL,0x020ec6db5e5e70c0L,0xb0be38ba21291be6L,
39669         0xcbe9d362bdba40deL,0xc585450571535a89L,0xc21839de3d7a3235L } },
39670     /* 6 << 217 */
39671     { { 0x831541b39805497aL,0x2ceb5ac879c414cbL,0x86601fa616d2eb82L,
39672         0x373d19079338ce8eL,0x98151a90c1f5c87aL,0x966ebde6048a538cL },
39673       { 0x5c4a8c5ae180ff7cL,0x6d9065dff996d994L,0x4e0dd86e2460ab91L,
39674         0xfbe8b3ff309a8f5eL,0x33d7cb35856f7218L,0x62b2200a1ac59f2aL } },
39675     /* 7 << 217 */
39676     { { 0xb36ad750a460e53fL,0x727006d60df0f7b0L,0x6ca3ac348ee96a11L,
39677         0xb04f6ae930e75d1bL,0x9957738a3a24e9eeL,0xc0117a7d16521e18L },
39678       { 0x79fcea8872ad7e27L,0xcbe2c2d37281e3b5L,0x31915f1cc391fc60L,
39679         0x1c1c0082a13a92e1L,0x362663cc7ddca7acL,0x8021aad689689d35L } },
39680     /* 8 << 217 */
39681     { { 0x3f2eff53de1e4e55L,0x6b749943e4d3ecc4L,0xaf10b18a0dde190dL,
39682         0xf491b98da26b0409L,0x66080782a2b1d944L,0x59277dc697e8c541L },
39683       { 0xfdbfc5f6006f18aaL,0x435d165bfadd8be1L,0x8e5d263857645ef4L,
39684         0x31bcfda6a0258363L,0xf5330ab8d35d2503L,0xb71369f0c7cab285L } },
39685     /* 9 << 217 */
39686     { { 0xc19db6f05890e1cbL,0xc21587edfcac8d05L,0xa9e88798d86730edL,
39687         0xee3e6ee2c27441cfL,0xadb2c63ea23af57fL,0xb524b7da29ff5977L },
39688       { 0xab1ed847d3e4739dL,0x6592a0131cbfb581L,0x1f519c6ea1798195L,
39689         0xfe837a814c324a4dL,0x74fec4a85c813abcL,0x7b3b5351dce539b0L } },
39690     /* 10 << 217 */
39691     { { 0xb886a0c50c99e321L,0x4063d19576e924e9L,0xc03cca041a659dcbL,
39692         0x1e01abbc1bd3dab0L,0x9d7cf04fe9141cd8L,0x5f87dfa73ef58d85L },
39693       { 0xa579e76388d764b8L,0x381dec6a74b9e5b3L,0x354221f99a4c9a67L,
39694         0x8c2556d33f529346L,0xced3642bb4349eb7L,0x1527cec7fef5c92cL } },
39695     /* 11 << 217 */
39696     { { 0xf2e42ef7785ecd51L,0xca3438cf33d9c0d2L,0xeef9ec08c1c097f3L,
39697         0x9e438fa746682aa7L,0x53d0144531a7eefbL,0x04431241e6998a0bL },
39698       { 0x2c1bb2bd55bc7febL,0xed99e7afb44d4943L,0x7f37bc4a3c77d21eL,
39699         0x866c0978398e3997L,0xed7462305bde12b8L,0x24796f7c7194fd1fL } },
39700     /* 12 << 217 */
39701     { { 0x7e4450cd5e83d570L,0x0113cab242b394e7L,0xdf4062a08ee24413L,
39702         0xf8a0fd4931227510L,0x06b798f4b80f0d23L,0x33f17673b72bffa8L },
39703       { 0x4638602b5de9f490L,0xbe3a65834d905654L,0x446e0afaf406772cL,
39704         0xef68dfd7b4ec908aL,0xa6be004966ab5ebfL,0x56049360ff376531L } },
39705     /* 13 << 217 */
39706     { { 0xb47202b760b6ce82L,0x8129c1befe05e9faL,0xcb70cbdde861de07L,
39707         0xcf35fbc5af16b6d9L,0x60071beec9916116L,0x3aaa496ed057e63cL },
39708       { 0x1cb0bb12c356f065L,0x12dccccef4de0d26L,0xe3f59cf67ccc0d48L,
39709         0xd66f10b3d9569e26L,0x95f4d7e79d1853ccL,0x10313dfdbf651d5aL } },
39710     /* 14 << 217 */
39711     { { 0x779b55062a3d9774L,0x3785db08e0554291L,0x9b3a4eb8546c69dcL,
39712         0xfe36824dd22d8fc8L,0x037d9ac9471132a1L,0xc895e332a01e1c28L },
39713       { 0xe535ede71b5e2845L,0xdc90cd7c568743deL,0x3292b40b4691d367L,
39714         0x911fad21b4f16a4bL,0xb3c5f0eb455d018dL,0x2eb2def669033748L } },
39715     /* 15 << 217 */
39716     { { 0xfd1297a4307aa8fbL,0x021f242177952146L,0x17cc2d6f0ba72feeL,
39717         0xa265095d01a3a733L,0x2e12c2e7a07d5f8bL,0x27bb60341202224cL },
39718       { 0xb58b3fab8185dc12L,0x83467b977700f166L,0x98242e227ff9e1ccL,
39719         0x96b2a4d9f4b28f1dL,0x64113c3865ed82eaL,0x7dc9ab732ee160e8L } },
39720     /* 16 << 217 */
39721     { { 0xf16938f514c5969bL,0xde2e3cf0944b2271L,0x2d5095530b6490d6L,
39722         0x8432fef1a28a296aL,0x6f254dd08d26415cL,0x3780eeadd50c2865L },
39723       { 0x4f5bc455665b8794L,0xef31fb9e56cb7018L,0xbab8dd6e65e59340L,
39724         0x676baca2a56dc2eaL,0x38eea06beaa90e05L,0x26e64224174bada0L } },
39725     /* 17 << 217 */
39726     { { 0x309e9fbe109cdb79L,0xc2ed3566977d0e4eL,0x2891f30be6b944aeL,
39727         0x514bd4cf5022e070L,0xae9a22a98726a661L,0x1114a0c8c1916b06L },
39728       { 0xe1b4f8339795adecL,0xcc0f3824ed4dbf8cL,0x432c93c878096a66L,
39729         0xb9450e9da7d2ad83L,0x294b0c192c1e35ebL,0x791427038be5a953L } },
39730     /* 18 << 217 */
39731     { { 0x4d215132881faf35L,0x52171a5ceec736a8L,0x4788813e1ba561d5L,
39732         0x9ca022a7d35e399cL,0xbfcaab926c4b8d7eL,0xde62b2c007c7ec40L },
39733       { 0x7b46c2d96bb54e10L,0x2ce02e5a7d31e85aL,0xb757b699cd776c12L,
39734         0x08f122552c81b71bL,0xaca91e058aa6b02aL,0x35cf7bd37209279dL } },
39735     /* 19 << 217 */
39736     { { 0x24b5bc7086a04b9aL,0xd4d4c640612e0fbcL,0xb19ea7fcf732589aL,
39737         0xa18b6f4081fc63cbL,0xddd7211d84d88fe2L,0x7e8db6f72963130cL },
39738       { 0x8772908c500c491fL,0xa3bf747783fd8a41L,0xca54d0d34e3e9fe9L,
39739         0x9969471866b030d5L,0xc2f5fb98b1fd6736L,0x58d5a851d103fa45L } },
39740     /* 20 << 217 */
39741     { { 0xe4c16fcda97a5decL,0xcc4333092f1dd4b8L,0x8cac9da985d334dcL,
39742         0xb4deff204cda5a0cL,0x59eea4c9be70b1b9L,0x161e73a2ec5b7b58L },
39743       { 0x584c5e098b7fb4a6L,0x697fb795a3f7dd08L,0xc9e15f754bd4ba2cL,
39744         0x66d04f47c83df783L,0x0c03c2452efedf63L,0xa76a08c94a87dbb4L } },
39745     /* 21 << 217 */
39746     { { 0xde4e18c2da669a50L,0x0629350a480fb520L,0x84b3e68b7cac0748L,
39747         0xab718a12da3e1e9eL,0x3f5c5489cc26aed3L,0x81c6b6d42a57ab3bL },
39748       { 0xc4ded8ce15d23825L,0x2d753e6a20c6eb43L,0xbaa120ec555f3a83L,
39749         0xc72f9d3877e93abaL,0x4ce297d0373317cfL,0xf42b3e954845bc1fL } },
39750     /* 22 << 217 */
39751     { { 0xbf162c19d7480e46L,0xa7f45ea76403bf0fL,0x250e936c6c51cef8L,
39752         0x97ba086f1cd24b64L,0x271a22364cfb2889L,0x2685c98804dc4b48L },
39753       { 0x843bb75ac877f6a1L,0xe10cd5c799d5c7bcL,0xbe65eea1db60606aL,
39754         0x9019a9a7a10d0d74L,0x5614c0b987c62e5eL,0xaab2308d38240d05L } },
39755     /* 23 << 217 */
39756     { { 0xc908c6929a772e03L,0x73441df703928ce9L,0x36141b5bcf111c12L,
39757         0xf6b9e2f16c7c3e5dL,0x1f245a77722c5b57L,0x07e3f364635f65e0L },
39758       { 0x1aab7abf272597d8L,0x03954428d4fe8e71L,0x7dd58036ecae1b5cL,
39759         0x9b97c2f28c85b0f0L,0x68ed3dc6ace011e9L,0x8e4ab5ca1744a774L } },
39760     /* 24 << 217 */
39761     { { 0xe6a19dcc40acc5a8L,0x1c3a1ff1dbc6dbf8L,0xb4d89b9fc6455613L,
39762         0x6cb0fe44a7390d0eL,0xade197a459ea135aL,0xda6aa86520680982L },
39763       { 0x03db9be95a442c1bL,0x221a2d732bfb93f2L,0x44dee8d4753c196cL,
39764         0x59adcc700b7c6ff5L,0xc6260ec24ca1b142L,0x4c3cb5c646cbd4f2L } },
39765     /* 25 << 217 */
39766     { { 0x37daf7fd5a96d915L,0x1bba82e6d16a1332L,0x7558b642ce1135d0L,
39767         0xc9fcd6ce3abc5915L,0xc3762a20b93ad4d3L,0xef0cdb45e4e74f82L },
39768       { 0x809b91dcd26fbab6L,0x1264f72ea9b53697L,0x264699ffd7c827f1L,
39769         0x16d4f094d8c4976fL,0x244c90cd997df2caL,0x58eb3b1c76f77b3cL } },
39770     /* 26 << 217 */
39771     { { 0xb99e2dde1ed04268L,0x94247d202497b83fL,0x0c6c21d1fb833507L,
39772         0xa01e682fafab9c39L,0x4938108f4d84c3d5L,0x70b68c75347652d1L },
39773       { 0x458e814740e17747L,0xca752a14c3f8bb03L,0xaa537b4d8598d044L,
39774         0xeec3febb7ff102e0L,0x10ef3cad247fe4baL,0xe4de5b1b5673ac39L } },
39775     /* 27 << 217 */
39776     { { 0xbca2931378d0bb1aL,0xfcc237068e5c3fe4L,0x0f9d6b11dd0d67a3L,
39777         0x9aec22faae14bbd8L,0x75f8d86e5bda7184L,0x6bcad95759aeb4c1L },
39778       { 0xbb1224a5990a9309L,0x00edc04ef7193f45L,0x870c1647c17cbff7L,
39779         0x9855513c65031caeL,0xe5a2e2ded852b607L,0x540a4141e5671e25L } },
39780     /* 28 << 217 */
39781     { { 0xfb0e2f2e4d5efff4L,0xbf3b96e73a143fd6L,0xa18a037f18579946L,
39782         0xae02fd4ce48c8a51L,0x1cb139288745c177L,0x4991594a28c47832L },
39783       { 0xdce3b1d2fd51c1a2L,0x4e707213314cb09dL,0x5312de95ee323449L,
39784         0x4925c4e789389866L,0x2438fd9e28ca17acL,0x58fd2aad872dc0acL } },
39785     /* 29 << 217 */
39786     { { 0x75bcf0ef54ddedaeL,0x3cc75fc6f9077493L,0xc91b78df60f6b874L,
39787         0x7687a1d0622634c1L,0x57fdef4f82cabf32L,0x544819218e2671e5L },
39788       { 0x526cbb27a3c37afbL,0xe0db88340d1aec76L,0xa034badb73cdef1cL,
39789         0x165cdfad6281f26bL,0x5c90d4d1ce24a71aL,0xc404af1125f297a7L } },
39790     /* 30 << 217 */
39791     { { 0x6b21a0ea2fd5df44L,0x2da8dc6cb36e5b1dL,0xa683e08ac3688655L,
39792         0xfc5fbad3454bf878L,0x9d2fb9f12f73b749L,0x4612cf42f920b37dL },
39793       { 0x23da6b697035794dL,0x2763828adff7c198L,0xd320660522dd7eedL,
39794         0x6829994cd1316e68L,0xd732bc8f62831ed9L,0x69c6972c9303d789L } },
39795     /* 31 << 217 */
39796     { { 0xf5901854b0dcc28aL,0x81c92c1fcd18e579L,0x91a412ebc4b8e1cdL,
39797         0x35f00725891d6ab8L,0x10d6bad8ad7aa63dL,0x8cda809d09df2b47L },
39798       { 0xe856cfbfa489c233L,0x7ea921addf1ecf5aL,0x884cc717fd724c37L,
39799         0xe278f2457377136bL,0x240b142d9f3dc9ecL,0x80a384961139a645L } },
39800     /* 32 << 217 */
39801     { { 0xa35e411c2cb40964L,0xdd7d4f4cc331a3d6L,0x7c7c859e89a66f2bL,
39802         0x9908c37e0def8ecdL,0x8274124e344947b7L,0x0d279f7b568b0ce8L },
39803       { 0xe5291961866091ecL,0xb056e3bf3a08acc7L,0x60fb39e156bd3a7dL,
39804         0xe56a34d6268f8562L,0xb3a1fe1613fd8293L,0x6a41e1a967537fcbL } },
39805     /* 33 << 217 */
39806     { { 0x95c2bbfe021fc932L,0xc7e3399db2af7e0cL,0x1224bf06122670f7L,
39807         0xc9e4513ffcc1fe85L,0x8c82371ddb50fa7eL,0x017c5498bb76e4b5L },
39808       { 0x5467926c7fa89f61L,0xa4a65606f3a1204cL,0x22133acfa64b2e59L,
39809         0xab7896bce1247662L,0x75d35fb661780c9eL,0x99199644a91b33faL } },
39810     /* 34 << 217 */
39811     { { 0xf799c4638471104eL,0x43c122dd8b91c351L,0x9db6498616dc06f7L,
39812         0xf7e534410ebcf250L,0xa702c0f18373f9bbL,0x6ed8d39a1024e14eL },
39813       { 0x92913e436cabd9c4L,0xba906ef40dde6283L,0x06835e914a3972d8L,
39814         0xfbba3c7dfd99c4feL,0xf843e6f1b950909aL,0x7ec9866df5160b4eL } },
39815     /* 35 << 217 */
39816     { { 0x68f75bab06722bd4L,0xdeca718813066eeeL,0x4d658fa11152b8c6L,
39817         0xfae01e657257c9e2L,0x999445f923e4189cL,0x2cbe272cef6f0b1aL },
39818       { 0x5f60d9d735fff303L,0x4ca7a54696235360L,0xf506201598758f1fL,
39819         0xba81e7ad1dbaecbfL,0xd326e063c687425dL,0x8c46fa4b193484c5L } },
39820     /* 36 << 217 */
39821     { { 0xa97149cf3c1f5f12L,0x17b04a3d143d72b6L,0x174195ff17449a22L,
39822         0x851803960b136adfL,0x8d87d21f9a7adb22L,0xf9c9fc85a8f46d49L },
39823       { 0x7839f453a7ed1b7dL,0xe19d80ace9067ba5L,0xc387a6a0e41b8d6eL,
39824         0xd11611e1241d287aL,0x2561ed02636240beL,0x3bd8c57df0fba033L } },
39825     /* 37 << 217 */
39826     { { 0x7b5caacd3ea8ec1cL,0x221770e944624802L,0xafb1a4df5a32468aL,
39827         0xdec20eb62e295525L,0xe1cd4fb9e309c92dL,0x0331b9c0e7256005L },
39828       { 0x987d4c55246f2fddL,0xa392d27367f70f8fL,0xccba11994e214e5fL,
39829         0x789f0e4c9943562cL,0xf502ec237235c86bL,0x67403523987746d6L } },
39830     /* 38 << 217 */
39831     { { 0xdd02ced216c97e7cL,0x578d6912dc3347baL,0x760260da2134e993L,
39832         0xf96643dff34fb26aL,0xec214b767ea3285dL,0x19b135d4117733d1L },
39833       { 0x29a0e0636b037168L,0xb5df2bb95d1285eaL,0x5a2d3297796f0cc4L,
39834         0xfcee639f2090e0b9L,0xba11e8a4d93c091dL,0x5b6fc501492250e5L } },
39835     /* 39 << 217 */
39836     { { 0x6019d207263929d8L,0x9821d6e81f164aa2L,0x8f1b33f8d4924236L,
39837         0x389e482fb72de1b1L,0x398785a862554c10L,0xed31cf8408469265L },
39838       { 0xf9b99e158a09f334L,0x9ddfd4eba83df391L,0x28a5cdf4caa4f7d5L,
39839         0x32b9e3c68f68fd49L,0xbce64b93b6f52209L,0x72649c6fea7c4bdfL } },
39840     /* 40 << 217 */
39841     { { 0x8a15d6fea417111fL,0xfe4a16bd71d93fccL,0x7a7ee38c55bbe732L,
39842         0xeff146a51ff94a9dL,0xe572d13edd585ab5L,0xd879790e06491a5dL },
39843       { 0x9c84e1c52a58cb2eL,0xd79d13746c938630L,0xdb12cd9b385f06c7L,
39844         0x0c93eb977a7759c3L,0xf1f5b0fe683bd706L,0x541e4f7285ec3d50L } },
39845     /* 41 << 217 */
39846     { { 0x73bc200cfdd5504eL,0x73322fbf3825b0c3L,0xbf8bf1edd35c24d2L,
39847         0x54eba9f52e2bc29eL,0x80ffb5fff3aa841bL,0xbc676f62cc188be9L },
39848       { 0x2e2f79290383f0dcL,0x886c647e0d42059bL,0x673f0ea113eb7019L,
39849         0x630da63f3f9cd771L,0x2597592b3a0a42b2L,0xfd21fb21b83b8673L } },
39850     /* 42 << 217 */
39851     { { 0xd39ebb9fd2b34df5L,0x622bd0c3db873666L,0x546cc7f77b52738fL,
39852         0x0323cdd1c156c52eL,0x78b00818b5950f19L,0x8065a86a562bec17L },
39853       { 0x0b42eb1427ca5a49L,0x1791eaf1a457ac04L,0x3a2c93a6b2631402L,
39854         0x28b9cd6fcacec5dcL,0x6a0a8826d4535a3dL,0xeb08a884a83fcdcbL } },
39855     /* 43 << 217 */
39856     { { 0x16bae8925a940b6dL,0xfec394c1789562f0L,0x54349605ea412ea1L,
39857         0xccd57783cd18e2cbL,0x394bea1a1c813e61L,0xf11c566ff249dd67L },
39858       { 0x2cd679c112207f37L,0x7780918e83d16012L,0xe8bdbef4646c9987L,
39859         0x6e1882e5082dbbffL,0x811dd74777abe4acL,0x5bbbb740668380adL } },
39860     /* 44 << 217 */
39861     { { 0x0969263a7321c39dL,0xbd13b28bab7aefcaL,0x10e431f205377165L,
39862         0xbbb2a7d009442c57L,0xf935bc2d9cd156b7L,0x66c3d55e42406686L },
39863       { 0x4c529b76d20bdc50L,0x112e0f004d1c9f24L,0x414f1c65ed38dbc3L,
39864         0x63ade49c4eea65caL,0xbefd8af5fab697e8L,0x727bd3b45cc3b209L } },
39865     /* 45 << 217 */
39866     { { 0xb89d450a957925f4L,0xcb39b69c6e1e60f3L,0x55396e61ae3fffa3L,
39867         0xe89d97962986fdceL,0x5521d6b787fcd037L,0x6c20b2b0ec718024L },
39868       { 0xb1e0964bad6529c9L,0xe1bdaba3bc38493bL,0x6a9cf9d6f19b4690L,
39869         0xa2d035f7054466dcL,0x37df7fc07fa65c9fL,0x045b0b36106ef822L } },
39870     /* 46 << 217 */
39871     { { 0xe4fc833eda5c9577L,0x22afb5addfbbca7cL,0x215de02eb902e8d9L,
39872         0x215e4c900f1a6cb5L,0xf6d7e4a9d59e146cL,0xcd0c6c6e4912eb8cL },
39873       { 0xe0616976eae22897L,0xe2279d9f5d809d19L,0x2da1b7b3e282b2e5L,
39874         0x19327068ebf058b7L,0x9b23df0f5934492eL,0xabeb464fb1752d68L } },
39875     /* 47 << 217 */
39876     { { 0x6e754efc00d03f9bL,0x64aed0bd38b94393L,0x9d084ba16df2f6dfL,
39877         0xfe383a56c6abe8f3L,0xd23c6ca2bc7bac13L,0xde8ef161e326b691L },
39878       { 0xbb4e853342f96925L,0x1391974f6601dc73L,0x3a545ffb700480cdL,
39879         0x4d379c538884e214L,0x0fe40f66f713e900L,0xc7f202cbfff783ffL } },
39880     /* 48 << 217 */
39881     { { 0x89e48d8bc6bb5e5fL,0x0880ede01ea95a10L,0x60f033d7302c0daaL,
39882         0x15e4578a048eefe3L,0xfd6dec89b0a72244L,0x1f7cd75e309489cdL },
39883       { 0x7cdcc2a0e9aba7fdL,0xd18dc5c7f28ba00fL,0xa6300a455812b55fL,
39884         0x8fa5c4152ca31d8cL,0x36aa3c234f3a5b5aL,0xd128739ec86cf4e0L } },
39885     /* 49 << 217 */
39886     { { 0x7ac4712f660598aaL,0xe3f00c28aaba6261L,0xb71ac42e1a9b639bL,
39887         0x19674c28f69958d0L,0x3983abfec4e5c60fL,0x67f4583a5de58f9fL },
39888       { 0x83e0bbbaf7278c06L,0xd1883aaa19c5f96bL,0x8ec0f2848b3128afL,
39889         0xc88e07f49166e04cL,0xa515a9e44e3995c9L,0x0680a306b757ec2bL } },
39890     /* 50 << 217 */
39891     { { 0x5673b61e6d6f3aedL,0xcd1275e29524fd2dL,0xa8844f08cde12134L,
39892         0xeca3eb27b8366e0cL,0x5ce49d498bbe04b4L,0x0b7ab7a02882b056L },
39893       { 0x12fddcb840fee142L,0x99b7920b2895df5fL,0x35dd8d5a5829bb19L,
39894         0x271c6a4c46ee8dfbL,0xae09ba7536b594e4L,0x45502d0e1ae12c22L } },
39895     /* 51 << 217 */
39896     { { 0xa9e1b19ad95e0110L,0x6a419f8b2383280dL,0x6c35e8e16eb602a6L,
39897         0x966e0f44d71beeeeL,0xfc5cbdc0c8915585L,0xdce1c36583133b89L },
39898       { 0x3fbdd24289e6a35cL,0x8cd24d1760ff9dc3L,0xb9708c2729dd493fL,
39899         0xabbf39803cf807caL,0x62689ffe5410c80aL,0xf133928be8b31d13L } },
39900     /* 52 << 217 */
39901     { { 0x3645a1910d4bfc83L,0xa564ac85f2114b63L,0xf0647034cc6d9314L,
39902         0xb58e96d331d80285L,0x8b8222d9e269c964L,0xdee12adcd204b214L },
39903       { 0x82d2bfbae1d0a6e6L,0x4fd69d2e9da964eaL,0x1605d9e3200b3ac0L,
39904         0x5ab2886266d133eeL,0x938411c9f72f5353L,0x9fcdcb3a7d40dee7L } },
39905     /* 53 << 217 */
39906     { { 0xd65c1d6c501eb835L,0x37374dd14a0e5861L,0xa13f1070505f1fdeL,
39907         0xedd76943d1351805L,0x0f9501953673091dL,0x0dec24e308aa62f2L },
39908       { 0xec4962e7f50efefeL,0x0acccbdc9d227293L,0xc6c95d29d84fd828L,
39909         0xa4b214c540578ca4L,0x06963d3ba4d41991L,0xeb8c14c2fde0034cL } },
39910     /* 54 << 217 */
39911     { { 0x3d46a2317460e00fL,0xedce1c7dacce513cL,0x3d7b6f388cfdce74L,
39912         0x870082baacfa61deL,0xa86efef862ff847dL,0xc146218368c11d11L },
39913       { 0xb296eede9d21be2aL,0x9dc54e9e761451cfL,0xed1bb1fd53107f7bL,
39914         0x41f9efdb676bfbe4L,0xcdf43b904feb9a1eL,0xe81fcb6409d98782L } },
39915     /* 55 << 217 */
39916     { { 0x00639fa8642789c3L,0xf8e893a03c101e43L,0xc55439302730e33bL,
39917         0xe2967d30460970e2L,0xb33f1976ceacc128L,0x9bb0f896235e8c4cL },
39918       { 0x523f7bbb2fbbbc97L,0x127728a5dab215c1L,0x95dd23ca7ed6ab74L,
39919         0x69f1219feacf4ba8L,0x5ed12355e875dd6fL,0x7aa732dc95565bdeL } },
39920     /* 56 << 217 */
39921     { { 0x9a0e153581833608L,0x5cce871e6e2833acL,0xc17059eafb29777cL,
39922         0x7e40e5fae354cafdL,0x9cf594054d07c371L,0x64ce36b2a71c3945L },
39923       { 0x69309e9656caf487L,0x3d719e9f1ae3454bL,0xf2164070e25823b6L,
39924         0xead851bd0bc27359L,0x3d21bfe8b0925094L,0xa783b1e934a97f4eL } },
39925     /* 57 << 217 */
39926     { { 0x0a700190a5e41f7bL,0x2173e68dae9045b6L,0x28e9ac53f1669974L,
39927         0xcb00ff99d4b9fd98L,0x09c7b907ebe90d1bL,0xbf401f20385744c1L },
39928       { 0x0bb7ea7ae1292c18L,0x82aa43120b58f171L,0x5aa97bb2e3102d77L,
39929         0x1a71e7c570178b35L,0x9bbb9ade6ab76f59L,0x32da60c9dea7bcacL } },
39930     /* 58 << 217 */
39931     { { 0x3c3f113ab3726680L,0x27be1c406f5b5ab2L,0x5f51f684f6864a39L,
39932         0xfaf84229a60c4f39L,0xa788612d01df18c9L,0x65c9fd14951d5ea3L },
39933       { 0x4b2153cdaeeaf44fL,0x6b9e977ba567781fL,0x4dbca3609dbf3e39L,
39934         0x1ad43ad4fc65d7ddL,0x70a7a5e13d8dcf0cL,0xc11b1f4688b91e4dL } },
39935     /* 59 << 217 */
39936     { { 0x1ef5695b0868ad28L,0x09c9c06c2e3a9176L,0x2f2c19672c358e86L,
39937         0x4ff1af54da22d7e7L,0x5ea6716840fa2270L,0xd164b6874d31a3e9L },
39938       { 0xec036bb4345103d9L,0x6c6a130f26e17156L,0x2c491063d872b0d6L,
39939         0xa66be18c4123d04cL,0x8593de34a33fa919L,0x620d2970f025b880L } },
39940     /* 60 << 217 */
39941     { { 0xc194cc1664baf040L,0x8038f31fcc01f35cL,0xfcc82fa0ed2079c7L,
39942         0x1eb7571190d39b9cL,0xf1a89043c108e069L,0x10633334c020880fL },
39943       { 0x492a494086e262f8L,0xaa0208173383f1a7L,0xfbb4e5ba6d99cc07L,
39944         0xd6ccdc5cbde40478L,0x9e0b9d5867ee92c7L,0x5204bab7653eb14bL } },
39945     /* 61 << 217 */
39946     { { 0x721f44f0ef90c9bcL,0x6ebbecd8d55e653bL,0x9af325df6ccc5d5dL,
39947         0x265f0f6d827bd1aaL,0xb82453213487ea4bL,0x1642be42af6ba8d0L },
39948       { 0xb8c4168d4140e5f8L,0xdf5e32c13545d107L,0xf1301b9c2db68318L,
39949         0xb22e20472bf3c067L,0xf40af49ee56ba514L,0xf4090e795575f363L } },
39950     /* 62 << 217 */
39951     { { 0x980de58b1746f6bdL,0xa9e1f0089eb9511cL,0x8f53c6fd1bbdba34L,
39952         0xe6a867a6a1a41706L,0xd4cc48a5d2e48256L,0xd580559e05cb19d6L },
39953       { 0xc8983311e6466ae0L,0xeab62080174df01dL,0x710ebd184a0441d1L,
39954         0x0af69d9a9f653d0eL,0xef3a2510d789c932L,0xb5959cb992fbd39aL } },
39955     /* 63 << 217 */
39956     { { 0xdbbdd5fdccb1cc9bL,0x660110b98a26d874L,0xfa80d8b60fb9ff2cL,
39957         0xfeb5cd6b95040da7L,0xb526ae0c7366cf25L,0xf49d85fce3566146L },
39958       { 0x3b4107e699f505e5L,0x3c2d618f4302bbaeL,0xdaa09d150b199866L,
39959         0x3b65cb88c395abf5L,0xd2af1dedbd5ac4eaL,0x0586f5a5276533d1L } },
39960     /* 64 << 217 */
39961     { { 0xd927283013575004L,0x01a330d620b2275eL,0x58b9207f450db713L,
39962         0xae95338423e16d95L,0x4f10c6d4e60e349cL,0x541d03ecfeb122bcL },
39963       { 0x22548cd22c648211L,0x5c2dc84cd01354f5L,0xa1c6f912b6167b3cL,
39964         0x6967bab27902d2baL,0xebbe0b0836de34baL,0x6985b33a4b79625eL } },
39965     /* 0 << 224 */
39966     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
39967       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
39968     /* 1 << 224 */
39969     { { 0x9e857f33771560abL,0x4ae1ba22250f109dL,0xf8538d68ff4f6566L,
39970         0x35380f15ac339148L,0xfef0bfdd5ddfc12fL,0xf706c6bf1387d93eL },
39971       { 0x618ce77d5357e131L,0xf0921744236478c4L,0x24eaf06e00dc0da5L,
39972         0x049113be07603cc7L,0x5cf489088f6963c7L,0xbe5eb9e6ede4a300L } },
39973     /* 2 << 224 */
39974     { { 0x77e486f85d066c15L,0x0c05b6c24ed5307dL,0x322b28ab7df36628L,
39975         0x2d14d1316704dcd6L,0xd359977af29a3567L,0xc29bb132ec96d3b6L },
39976       { 0xfd6e400ae6bfa701L,0x03db99244c7e5101L,0x62d81c7d9b8533afL,
39977         0xefa638c28de66eb8L,0x7405a9d7e86784eeL,0xafaa74efa6c22223L } },
39978     /* 3 << 224 */
39979     { { 0x6909994f0572e536L,0x9d22f9157fed8954L,0x1505ca05884aaca9L,
39980         0xe4b6530996995a98L,0x30e00a5ed02c000eL,0xb9032350236e7b09L },
39981       { 0xe696f09e14f6c7bfL,0x2126b6277dc18d06L,0xa9ada7b401e1e2a4L,
39982         0x9630acb69d2d025aL,0x9fab2c6ed84ffeb1L,0xc1d0db26ab7584f6L } },
39983     /* 4 << 224 */
39984     { { 0xf9b2dba4b9d36e91L,0x5fb4f6cefda9b2c4L,0x7692a4f33b8104eeL,
39985         0x5da885b0e4e1896eL,0xc2a30fec73d2aa36L,0x7d06e6af86f60bcaL },
39986       { 0xbc8bf16d87287887L,0x6c3dd86a3d701becL,0x8e79e2f37e35610aL,
39987         0x981139f482f9d71cL,0xf8997ec424e62733L,0x330d989aa3518061L } },
39988     /* 5 << 224 */
39989     { { 0x6cf0e6ef9b7e3cc9L,0xb465be6b0320acbdL,0x02777783856111dcL,
39990         0x3a1d36f0c0e9f2b0L,0xfcf4f6365e7fe507L,0x36bf41827fa7c8f1L },
39991       { 0x09a02de8b0f4ce56L,0xa0bbf65ca9cdb353L,0x7211a9654b7f4e35L,
39992         0xa6b2ba79805b58bdL,0x418302c20957860cL,0x3c17ec02f99f9d58L } },
39993     /* 6 << 224 */
39994     { { 0x4e6ef410ca89fbadL,0xe0fc53ba53933b78L,0xa4f03403fd41d143L,
39995         0x3a507177e0774c37L,0x078e8c568ec7484aL,0xfb73c6b6fbb3f66bL },
39996       { 0x169c94753bfbdff6L,0x44d286060a232243L,0x3e8e968508303114L,
39997         0x7a9797b8fad0def2L,0x0ad14404efc1c8daL,0x6daae4e921ced721L } },
39998     /* 7 << 224 */
39999     { { 0xfde0d1b4cbfd18abL,0xa3c9917595850f83L,0x16d3ad79c9eb9de3L,
40000         0x2707ec8b0ffbcdacL,0xd7e6750fa220287cL,0xe51baf059c2e155aL },
40001       { 0x3018c309871e10faL,0x074f08e3f23221c2L,0x1aa323aecf15a4afL,
40002         0xf085d69cc1b8cca0L,0x47a3eaccb143a969L,0x56a04522f3a98430L } },
40003     /* 8 << 224 */
40004     { { 0xc7e9ddef88dd2dc2L,0x2c21a99819a0c0b5L,0x6bc0746db239bb82L,
40005         0xc811a8eb28ea1341L,0x5f714ca71d1309b0L,0x79eabd20d4eb9b34L },
40006       { 0xe0e5afdcdf0fb30fL,0x1b01a16d8c0814c6L,0x670e1e7b84334366L,
40007         0xc8c38f9a0eed1116L,0xf914fae2619bbd50L,0x1ed062cb51c1995aL } },
40008     /* 9 << 224 */
40009     { { 0xce64d065b711b4e9L,0x32760c2eefc4d25eL,0x9e5916caa6292c7bL,
40010         0xa90d40bff2a47deeL,0x90dc6681604933d2L,0x707270c60115cf42L },
40011       { 0x55b601ff6fe583abL,0xdd2fe842a039dafeL,0x602d8de34c2d3357L,
40012         0x7cc979bca7ab9014L,0x4b8dcf7e60118797L,0x7f1f2a04cbfaad32L } },
40013     /* 10 << 224 */
40014     { { 0xd4e60e15cb583422L,0xc6b1ef90320f296fL,0x0714bad0d9bfc834L,
40015         0x5ee2ca8c9050e2c2L,0x074a8ca824f7cf1dL,0xb975024910df8516L },
40016       { 0xecee8ab7c2636d2cL,0x308e5af13b4b7bbdL,0xfed4f27eee2ae021L,
40017         0x7cd4bb192065253bL,0x6b21a3f84de525b4L,0x0f10e7bdac27fddbL } },
40018     /* 11 << 224 */
40019     { { 0xb4f02d9dbb3bf37aL,0x69590395978aacc1L,0xdf99b1309c3def3fL,
40020         0x5c66391e12be0bceL,0x30ab382cb5eaf100L,0x9b84b2b4e0352249L },
40021       { 0x0c22e4e1af14e85aL,0xc29d3c592286ea0cL,0x6c7f8b6a40758aebL,
40022         0x7a91adccde68fd0bL,0x4d8554fec8e8fd4aL,0x9fa863d5bb5621e5L } },
40023     /* 12 << 224 */
40024     { { 0xd5068487870e29cbL,0xf9420b85fc52d5cbL,0x50c3265a496d000dL,
40025         0xe605414a166bd6b4L,0x4de8d724c62b2a6cL,0x16af06f2a1a11048L },
40026       { 0x5406bde945f43c4cL,0x5e15bf6c751ad18eL,0xa846e665b6a59587L,
40027         0xcdb28a7d1816ac55L,0x899b3551819b73f8L,0x2d46297bbc848d08L } },
40028     /* 13 << 224 */
40029     { { 0x76f5aedd44af60a1L,0xf7bd3b4651d1efd8L,0xdfbf3c6439a9721eL,
40030         0xf927fbf0ee9d2ab3L,0x628e9258c7e0779dL,0x062cb2fe4cf1dccfL },
40031       { 0xb2ff57dde2278f00L,0x3f0e140a2d199ca3L,0xe7161304342c0a9cL,
40032         0xe7ca734f0bdbe131L,0x7d070270870057d8L,0xf6f1a65daaa55860L } },
40033     /* 14 << 224 */
40034     { { 0xdc4cc720299127beL,0x5b34e762faab8165L,0x2289b2f7b39c120dL,
40035         0x687a78d06e52b913L,0xd2a091dd2a3ea6a5L,0xc61eced638eab329L },
40036       { 0x652231ea7887ff2bL,0x77a568750479db4eL,0x1ef471c8d43c5722L,
40037         0xf82bf436f3764c34L,0x962af4050445cafeL,0xed8b227f5ff47259L } },
40038     /* 15 << 224 */
40039     { { 0x30e045f4a73c3da0L,0x13d2527df36c6346L,0x3dffe56d3836fb9bL,
40040         0x9518276617c5d2bfL,0xa0ef38724dd0b240L,0xb45e19ebc39c675aL },
40041       { 0x65202bc603e95445L,0x41e2f0d19a2ec9dcL,0x51c719cf2a0d762bL,
40042         0x3bfb9729ecc6b9f8L,0xda8271705a261640L,0x65c2bbbcaeee5f3fL } },
40043     /* 16 << 224 */
40044     { { 0xde849cd1d89594abL,0x00e2d2b10ec4fb3aL,0x3fbd9e3dabe92fbaL,
40045         0x785414d43324900aL,0xdaead1abde20904eL,0xb493e121aa5f1ba8L },
40046       { 0xd60a4f2d6eaea0dcL,0x394746b56fca8596L,0x163dc78934efa243L,
40047         0x3067dccf216a8d8cL,0x116b6534a901617bL,0x8c4bd099bbabe51eL } },
40048     /* 17 << 224 */
40049     { { 0xbb9eb22a97ebad53L,0x791d4f90666f1428L,0xa3a896e06c5d5569L,
40050         0x322d566fdefbc26cL,0xaa581a083c039c26L,0x82d899be62790f0bL },
40051       { 0xeff4bb9a43a0c2f7L,0x60515c10a01df2c4L,0xdd1455a849312160L,
40052         0xc8a15052c4292265L,0xdb2970f97f68d081L,0x29c825b892594c4dL } },
40053     /* 18 << 224 */
40054     { { 0xc8c2df45ac3a082cL,0xc353d074c8d4c40eL,0xb214f9c05a3c2de7L,
40055         0x504bc42cf86b0214L,0xc82df5cbd1922a58L,0x40887948a5bc3267L },
40056       { 0x04bcd21788ba8bb2L,0xe21b3e7f046fd401L,0x8419c338616af5cfL,
40057         0x7f24760baedfce9dL,0xded8035bddbd519aL,0x1f1fb0d71693faabL } },
40058     /* 19 << 224 */
40059     { { 0x7a88376766117f71L,0x8d4e37815d261599L,0xc900e6dff770b193L,
40060         0xb7d1c06b12e9dda7L,0xa86d173a717cb0faL,0xa138b7ba51dfbeacL },
40061       { 0xe84468c57360a27cL,0x4acf8b412e9b82a2L,0x85fa386cb121d6faL,
40062         0xc794d9f283e6169cL,0x7b4cd3fc8c9293acL,0x3096ad868d082719L } },
40063     /* 20 << 224 */
40064     { { 0xbb067b49d02ffcf6L,0x7cedf8f93e657299L,0xc3829961406bbfe3L,
40065         0xefe4b5aa37c12472L,0x7dc01cf9fec7dee8L,0x70a9db2389472f50L },
40066       { 0x29c269f8b31bf737L,0xa26deac3ae3fa7dbL,0x0046e91233caca41L,
40067         0x3bf4bc8ab6e78b55L,0xca83bc6cd9eb5ef1L,0x73f25c62c0c5deffL } },
40068     /* 21 << 224 */
40069     { { 0x117bb83d3ff7d803L,0xe91098c539c56c0aL,0x7bf72fe91e347fa0L,
40070         0xa66201a31e174941L,0x1d069d4d6846a06bL,0x721cdbbdcda59bcfL },
40071       { 0x17d6683a17652893L,0xee1b28f505be2530L,0x2e70558697a69062L,
40072         0xd4b5798682b56c36L,0x1ccc5be09082e781L,0x42e0e429d6b05e30L } },
40073     /* 22 << 224 */
40074     { { 0x697dc47d44b4aae8L,0xb3525cc0782c331cL,0xff71cca40bd7c78cL,
40075         0x5f3d776610c0ab69L,0xbdc10267e2ba07e3L,0xc656f75ce6373f6eL },
40076       { 0x9e2938b4b5607b62L,0xa65017d410b0a0f7L,0x8dad31195cc6ac25L,
40077         0x00f8f2d18ba5d1e6L,0x608137bc43305aefL,0xddad34bbdcb81cb1L } },
40078     /* 23 << 224 */
40079     { { 0x9e46b17c20c78a64L,0x28db365d5c48e678L,0xbe4c3b8eac6ba470L,
40080         0xee737236b6617b28L,0x81c5b94a4f3422bcL,0x4d44c33076faa922L },
40081       { 0xd7a09a719be38835L,0x99d024e1410b382dL,0x103b67c36b15012eL,
40082         0x02b6e094d9808da4L,0x4f5d938a0a7f2fcdL,0xa43058b7e4c5073bL } },
40083     /* 24 << 224 */
40084     { { 0xe133d941b1f82ca5L,0x2af8b98bfdf115bfL,0xdc6179c857aaa6f3L,
40085         0xabaa83e9130ade06L,0x7836b6fb0e8bffd1L,0xc479751ffa103703L },
40086       { 0x0ff3c1299c89963bL,0xe64072560b84c24fL,0xa92a4ea2f34f6bc9L,
40087         0xba45b3053197989bL,0xd12b5a0199243aabL,0x3015772c442af625L } },
40088     /* 25 << 224 */
40089     { { 0x5362ac737e0a5c36L,0xc731132a8c4fbc07L,0x0ef7468d7ca0d4d0L,
40090         0xc43afef835d25de0L,0x096bde6a3fa1209bL,0x21f57eb566846236L },
40091       { 0x878b585cf04d23d7L,0x737f7e527315ed56L,0xb716462c811afdd1L,
40092         0x4d223734a571a3cbL,0x56460e2fa7db2c60L,0x0684d72c61f97485L } },
40093     /* 26 << 224 */
40094     { { 0xd95fca81e6f065c5L,0x45e886d5fc8655deL,0x3580957727cff79eL,
40095         0x92a39a34625877d9L,0xdda02684dfee17eeL,0x6354f871986f635bL },
40096       { 0xb3a6e9edd409c182L,0xf0b1c8d9c4fbbb3aL,0x28721c019b77adedL,
40097         0x3c356df1bf94f028L,0xff221bd229a81f1aL,0x20edf2e856b20b0dL } },
40098     /* 27 << 224 */
40099     { { 0xb8c636db31ac60c2L,0xf3830e72bd987402L,0xfe63957c30e6b969L,
40100         0x3508e67989eb2bc4L,0xc0837f8c9a987e3bL,0xd1d0ce7b3f9b2ef4L },
40101       { 0x08d8f99441fe62baL,0xe73f79d7e17669d4L,0x8801fabaee6d68feL,
40102         0x4ef814891a508a88L,0xcc851bb71fbc4512L,0x69f728704680b88aL } },
40103     /* 28 << 224 */
40104     { { 0x97fff124835fda9eL,0xa79ceb2f0bc68512L,0x70ba93d1a2fc3995L,
40105         0x62bd28ab9e51c5eeL,0xb95fa624d5bbbaa9L,0x0654dc458c1f571eL },
40106       { 0xb9a4edc665a45ed6L,0xbf5ed1bc21ad0612L,0x74adc1a1b1a3551bL,
40107         0x3dfa3dc8dbbd6cefL,0xce5dd40b2fa3afd2L,0x14894e0f30a746caL } },
40108     /* 29 << 224 */
40109     { { 0xe4544006ada9bf7dL,0x9e123b709b75770dL,0x903628d557cea95aL,
40110         0x6429e00c9e8cef6bL,0xafa2cce77b1adaa2L,0xf2f5771e15e488daL },
40111       { 0xda44962269820874L,0x5b20ef1b6e0fef81L,0x3150a8699507b4faL,
40112         0x901897add191de20L,0xf459da31c41dbb2dL,0xc2516dd077146754L } },
40113     /* 30 << 224 */
40114     { { 0x7e729c58b8ca2a2cL,0x0f32ea1ecaac04afL,0x47267f13bdd549e3L,
40115         0x35b9440690be3b50L,0xad0f2bb14b27f670L,0xd7e5874e92341803L },
40116       { 0x7dc841cf1f9ec462L,0xebeff994512b2a42L,0x22998a7f320dc858L,
40117         0xf08eb5c719946f59L,0x228c8dcda68ea75eL,0x40dc6dc37b20dee5L } },
40118     /* 31 << 224 */
40119     { { 0x23f40e331dd722adL,0x0a441bf4c54fc48fL,0xed6c026548b75f84L,
40120         0xc2d3972f3e0fff2bL,0x889b44c4db09b7d9L,0xeb6ccc6541a6a562L },
40121       { 0x5ef1162e8f04e03aL,0x25e2ea895d8102c5L,0x37b71631154644d5L,
40122         0xa9a1a8320446b1bbL,0xe3f58daefb342b20L,0xc6d19decb6d292c3L } },
40123     /* 32 << 224 */
40124     { { 0x929454f6b3952db4L,0x412142ec4d3f69f5L,0xf5b0a7c5ee25c0b0L,
40125         0x7d3372ff2e752295L,0xd6dadc7d6eacac68L,0x5f0076cca96a8e3cL },
40126       { 0xea831db671725b3aL,0x4a286c89c29ab454L,0x5ff817e572e3c00cL,
40127         0xb022e25d2a5fb6baL,0xb611c5bcbb392476L,0x062c14dc190485a0L } },
40128     /* 33 << 224 */
40129     { { 0x44730047ffdc9a7eL,0x44949bdcf078d5bbL,0x8c1a3e4bc486e2b1L,
40130         0x53088ba20801402cL,0x6e20a7cfeac83daeL,0x4407ea8436ec5443L },
40131       { 0x564fb733853f79d8L,0x59ea819afe809670L,0x1ac62174f1ec7e91L,
40132         0x0d7e065566a0b8c9L,0x0c4d072482958221L,0x80db0297a60f984eL } },
40133     /* 34 << 224 */
40134     { { 0x380823e7f3359d47L,0x8a60fb05f5efd39cL,0x78a940669425487dL,
40135         0x1da6abc3f199c67cL,0x7df00b2165f0a6b1L,0xdc0dea58017b1231L },
40136       { 0x9c529db079f4f22fL,0xc7043be3e5dd92b5L,0x10153ffb43661331L,
40137         0x51c459bf6ff02e8fL,0x451483bfa43aa005L,0x3313f903199cd1baL } },
40138     /* 35 << 224 */
40139     { { 0x2f66587e62e1ef1bL,0x942d4c739e3ae33fL,0x4a27ead5c0ab9c1eL,
40140         0x368d8dd89ca91b06L,0xb3f0cf92c4b6ed34L,0x28cc332673e62557L },
40141       { 0x2649e5527910986bL,0x635dcf9cdda049abL,0xbbde12f625d3f201L,
40142         0x5200c3d0a9384443L,0xd996573d51eb3c10L,0xb093c1792b8cd7e5L } },
40143     /* 36 << 224 */
40144     { { 0x15cd1d1cc3fe6fa4L,0xf260a739e2c3c686L,0xf7c2270eb08c65dbL,
40145         0x9ada2cb6ff69d971L,0x65fbbcac212bff0cL,0x40157d075646a735L },
40146       { 0x101d2b7d55de9e45L,0x0db580e83118b763L,0x3203baca8322a9cdL,
40147         0x2a3137ef22cac14dL,0xcc9092e291a14128L,0xbb269f6d98cc368fL } },
40148     /* 37 << 224 */
40149     { { 0x7c8946002ad7f66fL,0x6a8328bb99b438a7L,0x86d06fbbdb440d86L,
40150         0xb74ffe2d20ac5a42L,0xc3a6f01d91b1c82bL,0x606f8ce71d5efbddL },
40151       { 0x8c49c43a6338c99fL,0x50657f7216da7cb7L,0x7f204c8b84f22d9bL,
40152         0xa2612d80ca76978dL,0x80080d868a3e8e96L,0xd8841a1ac0bff9afL } },
40153     /* 38 << 224 */
40154     { { 0xc2a734cb962fa060L,0x2baa26c580a17874L,0xe27b21110b44efe6L,
40155         0xdc1244e531d2154cL,0xfcd86d4116c7742bL,0xf45230df32503138L },
40156       { 0x94a790f4812cf0afL,0x0ab2df23da3f24d7L,0x0c764df181571d54L,
40157         0x989ff71c68d68f74L,0x9896fe62cda535b3L,0xfe0502e05f4fa41bL } },
40158     /* 39 << 224 */
40159     { { 0xf1ffe852c2f58cf6L,0x2ec46d2546d64576L,0x95bfec93d602c51aL,
40160         0x349c58bf3907b766L,0x59cb12bb9b94bdfbL,0xfa95da9515dfcd87L },
40161       { 0x731a8535e1543bfbL,0x14844aeeca14187cL,0x0d73e58aba1f4928L,
40162         0xbb71009fc6bb67f2L,0x5e7c0e988b4142b9L,0x4866b5095f08f58bL } },
40163     /* 40 << 224 */
40164     { { 0xc8295c2fa234de87L,0x1cd7f3fd878e77dbL,0x309c1fefa2155b6cL,
40165         0x2a9bcfd9484afddeL,0x87ef7a56cc999775L,0x34336cb1970aa188L },
40166       { 0xd45eb83cc3e16ba1L,0xf9d72c72b9c1695bL,0xff117458cb980742L,
40167         0x438a7fcb67af836aL,0x5ffad086eb9a6c40L,0xdbd3e518513922a3L } },
40168     /* 41 << 224 */
40169     { { 0xde241983e42021b7L,0xaa70e834542873c1L,0x99c9d35f9daf2b99L,
40170         0x0bf712d549b40780L,0x202d9969d9ab6e97L,0x7f3382dac4932106L },
40171       { 0x1eb5f5d40849e319L,0xc1bdd1179f659546L,0x628ddd3d2329f977L,
40172         0x5944611d363ee601L,0x7b7a631463d5bd4dL,0xaf6c51a5631d21ecL } },
40173     /* 42 << 224 */
40174     { { 0x2d8f9e1db4100182L,0xa08ae2fe4f3d2c03L,0x7548c430589e99f8L,
40175         0x0f5ccee2aede8af9L,0xa21ace3343b34b25L,0xb120c569dee102e6L },
40176       { 0x1cb103ed36f13699L,0xf71ff0dfc91e8cb4L,0x88f141079b22460dL,
40177         0x050af75af509366aL,0xeec8a310fb179bc6L,0x069e7331c26efef6L } },
40178     /* 43 << 224 */
40179     { { 0x3e2a9c713be9cdabL,0x8f235d6f73ac08e6L,0x3de28a6b28832dabL,
40180         0x7d08b9f31ee82d6dL,0x67c3b88f915ddda9L,0xba8f18cc0f7c81a3L },
40181       { 0x38cebc31ca3c0936L,0x745f71aa7816a6e3L,0x00cb85a91a95fcd3L,
40182         0xb92742c6577dc22cL,0x1afdaab592029cbeL,0x0bb43c91278d3f7cL } },
40183     /* 44 << 224 */
40184     { { 0x3d77059d3ba02d27L,0x58e28671440b2d3dL,0xe2d4235726636fbcL,
40185         0xcc448a52c54605d5L,0x73c2902efc0269a6L,0x28a15ed57ea8c26bL },
40186       { 0xf666587a0cfc1a34L,0x8374f2cc1ae0377cL,0x5dca6ae828417437L,
40187         0x15a6d54c94bc87ffL,0x5bf187bbb344796cL,0xc629c14889574b2dL } },
40188     /* 45 << 224 */
40189     { { 0x06d43c6d87748b63L,0x2489a957a7f232edL,0x7aa9174afa407c3fL,
40190         0x8c8b8fd933a762e0L,0xe2e8f1e7adbe94a3L,0xd1e0c8c2bb723045L },
40191       { 0xcafd8f483df092d8L,0xbc89caebb174025cL,0x97595c5649f20c98L,
40192         0x6e520a968a77acefL,0xc3dbd3107a52a4e6L,0xf51db5a91284ff27L } },
40193     /* 46 << 224 */
40194     { { 0x406465742c74cb2cL,0x44eeb9e546c33df0L,0xd2a9f16ecb4c50b2L,
40195         0x68f912a01906a6ccL,0x2b81296d95211e94L,0xddb2988ec8575839L },
40196       { 0xb74d990d33b180c0L,0x290185567d319c48L,0xd3d2e40dac8de56fL,
40197         0x9ad42a60461f30e6L,0x265e4715292a0faaL,0x56c2626c8ac3b2a5L } },
40198     /* 47 << 224 */
40199     { { 0xb7580f2fd468adb8L,0x8e1fbf0388a6a587L,0x1b8c40ed8f4f6cddL,
40200         0x337414f56817b2b1L,0xd877ebafb744d563L,0x59eed3c6df5e18b2L },
40201       { 0x365e148dd33afa01L,0x82e70adc665702cdL,0xccd77955a5e390ebL,
40202         0xd86c343accc90cb2L,0x23bd948d6cd8a33bL,0xb1fc140cdc43a8cbL } },
40203     /* 48 << 224 */
40204     { { 0xefda99d9ce11b02eL,0x9017bd4a3f820083L,0x8b9e6cd1ad14ac6fL,
40205         0x1239ee331f413880L,0xd98e93d993dd7fb9L,0xc280d252894fcb12L },
40206       { 0x33a9201a5230b5eeL,0xc6aeee256e41de26L,0x845051280d0a320aL,
40207         0xc20551db4b607b53L,0x6e63c766ea228c2eL,0x883321aeac48f25cL } },
40208     /* 49 << 224 */
40209     { { 0xa5173910e15a530aL,0xaa2c88b83ac38ab2L,0xcbfbd31ec6a6ba9eL,
40210         0x0fa126cb49ed182dL,0xd6b38897cfc53c85L,0x98d5f6bacb9c2f41L },
40211       { 0x6694e8e5cbd150e9L,0xd470ef226a1fc551L,0x57a63765d5ea1c0aL,
40212         0x95f5eb4318078139L,0xbeaba00585d3e0dbL,0x6bbf010fd314dec7L } },
40213     /* 50 << 224 */
40214     { { 0x5941229729ee46d3L,0x39e5aaa0e66bdfabL,0x9ff1575001c815e1L,
40215         0x709706211f2de195L,0xaac904a968aa571aL,0x9cbefacd8f7625f9L },
40216       { 0xadfd215dfce3a501L,0xc04d09ddf20651b4L,0x688c1421d17b25f2L,
40217         0x3efde5d40073247cL,0x999b7f3a7432c699L,0x33c76487703fea50L } },
40218     /* 51 << 224 */
40219     { { 0xc720aeb10af6e1faL,0x1564b8d8e8771dc6L,0x5983eb44673d8ef2L,
40220         0x5dabb2070679ac65L,0x51a854cdbcdb681eL,0xe2b186a9364a3cb1L },
40221       { 0xfa189eff7222208bL,0xf7161d86477666f9L,0x0ffcc3e6192d1df5L,
40222         0x1523508e39cf5a4cL,0xf5e98687c43ecce8L,0xbf17b63261450309L } },
40223     /* 52 << 224 */
40224     { { 0x63293cb8adfbde28L,0x5df78fb3c6b18ec4L,0xad10da4ffd27e50dL,
40225         0x60202b357ade5c9aL,0x67b9d253c6c8c8b5L,0xdbacffefbc2b30bdL },
40226       { 0x508ff8a67494b1edL,0x87ef48be3769728fL,0x74d4f180ef98d036L,
40227         0xc5d9ef531799e8a9L,0x726d22206e850162L,0xd86d3414239f6b38L } },
40228     /* 53 << 224 */
40229     { { 0xfdde327b3e1f1b96L,0xb6272e94bb58615dL,0x2881350cfc2d8a47L,
40230         0xfcbe87031142ab9bL,0xaa5fccd0f48c7f97L,0x606be6ed29a74ba0L },
40231       { 0x545409ba3afc598bL,0x4779f54aa7d23f5dL,0x2811c0829d68e38eL,
40232         0x5b4646bd3f9c5842L,0xbcd3aa492586219aL,0x7345799313642e3fL } },
40233     /* 54 << 224 */
40234     { { 0x9a61f240ab638788L,0x519742162b0a8449L,0x9a5ec31d43b2abfbL,
40235         0x6f3075740563c9c9L,0xe465f7793ffa198fL,0x8876c5772957418eL },
40236       { 0x10e3d09c976e5875L,0xd66d334e592c2409L,0x3f0d5727b39b7897L,
40237         0x17ca7ad1e37fd300L,0x221d8436da530871L,0x4df38e4179d6b350L } },
40238     /* 55 << 224 */
40239     { { 0xe805096338b7a2cdL,0x9874cc734b8f05cdL,0xfc0821791b74a790L,
40240         0xe18a92f3293049a6L,0xabd525694dfdc13aL,0xb928cc300d843466L },
40241       { 0x12750aec348dc7c0L,0x3c8e205d87f12dbcL,0xa2c71091e0bdbd81L,
40242         0x895b56a0c1c1871cL,0x68dd7414b4c850f9L,0x45a948ecbe806596L } },
40243     /* 56 << 224 */
40244     { { 0xa88dbfe0f4fe35f4L,0x32de3a1c84283011L,0x8a3777bc39caea33L,
40245         0x673630dee4d49959L,0xf3ef842c59070317L,0x33e4bb031fab88a9L },
40246       { 0x88e4538e98ce8bc2L,0x870c2eb81a235c6bL,0x71f62c5640df0e92L,
40247         0xdb43b853f9627486L,0xfde9fcaa95cc473bL,0xe4c5b4bb4b677b11L } },
40248     /* 57 << 224 */
40249     { { 0xa6ebd946dd4091f8L,0xf0e11886dcf0741bL,0xd6267674d9533601L,
40250         0x571926506f74e49cL,0x18269c2f891d6717L,0x350a7869b45ddb53L },
40251       { 0x79ea6a4ac8f62777L,0xbad33c4cae7edec9L,0x14bed149ad7e5578L,
40252         0xb2f4190ba91af4fcL,0xbbd6f68be71dfd3bL,0x23fd3dc8f2fb7a21L } },
40253     /* 58 << 224 */
40254     { { 0x5e0f89e598fd044dL,0xb77180d97cc30e97L,0x64fbfb747f82a12dL,
40255         0xbeebb9ca77629636L,0xe164549feba83845L,0xe65a964a7079519dL },
40256       { 0x8b1bcc08ca88157cL,0x466399c3f7483338L,0x6e2726414b9efdc6L,
40257         0xff8c7027be922e96L,0x9baebf7d48374f59L,0x2a84a23ac18ee18bL } },
40258     /* 59 << 224 */
40259     { { 0x337484e0dca4b3b3L,0x82137cb9f5b27d3fL,0x12ae1d11bbf4c806L,
40260         0xa1e2873f2880c078L,0x9e6bd909058b9a0fL,0xacc5656d2dba5fb9L },
40261       { 0x7fe5467853fd2ce3L,0x2aa4af35452439efL,0x329989a5904ffc67L,
40262         0x007ea4c8520fd31bL,0x58988e2551816b44L,0x644f2469d8f186eaL } },
40263     /* 60 << 224 */
40264     { { 0xcd4d1a9e8890722fL,0xfa0b826b74142916L,0xa494dfa817ba8041L,
40265         0x3fb73e736de2b6c2L,0x156a6cf4344b57a7L,0xb197c8621e205448L },
40266       { 0xf453e348c214acf7L,0x665d7083e9061a73L,0x5ed59ec5ce9868a3L,
40267         0x9bab305f6ad777faL,0x752c490b35315de8L,0xabcfa35b5d5aaf26L } },
40268     /* 61 << 224 */
40269     { { 0x4059fc2f914d618dL,0x88e55ce6108380fdL,0x0c22b21bee61a4c1L,
40270         0x435ecbdb04788627L,0x3f8a5ec7a9f72788L,0xa31eff8a732d5d97L },
40271       { 0x119b6bf9d48d0af9L,0xde6d1de5af70a043L,0xac075ffd3368db4aL,
40272         0x23a33ec94a58603dL,0xd43ad120fe181a89L,0x386b90ed42f0b006L } },
40273     /* 62 << 224 */
40274     { { 0x8096824bf9bf1a24L,0xcdf69abc8260ebd7L,0xaf93b34de9ab190bL,
40275         0x676351ff841cbba0L,0x3db704d3eb6d6c60L,0x3b1b893fc09aebfdL },
40276       { 0xc06b9bfdbfc69f15L,0x28b1ffb8e9c688c6L,0x1607bc68d3c16455L,
40277         0x07d56bcc6d16d937L,0xac28e69f318afd9aL,0x7f4afeb7e77263b6L } },
40278     /* 63 << 224 */
40279     { { 0x796a530ab935875aL,0xd6700ec89dd1e51cL,0xc30301df4d9320e4L,
40280         0xe23090f357157f87L,0xdd3f68a74029113eL,0x566afc6de2709936L },
40281       { 0x830f952edbff8926L,0xe207eae5c7a39d27L,0x9210b3dfd9494592L,
40282         0x3be25582d8460831L,0xec2496575d58edd9L,0xebe8426fefd24738L } },
40283     /* 64 << 224 */
40284     { { 0x0372678dc419b0aaL,0xf95031d8c13fdf17L,0xebaebca4b79594c3L,
40285         0xe587850baf3b75cfL,0x534183ac2c1e09c6L,0x3f5b0bfdc08204cdL },
40286       { 0xdac2cf06e297cc77L,0x5e47d9c6d0487084L,0xf6f509f490b0f6c2L,
40287         0x3ffc3cd6c2c62207L,0xbb21eb1132ff1887L,0x2116a023e62ccc6fL } },
40288     /* 0 << 231 */
40289     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
40290       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
40291     /* 1 << 231 */
40292     { { 0x406a7e2116960728L,0xd03923f85597d8c4L,0xd4402eff020748eeL,
40293         0x7827442af39b58dbL,0x77e3f2768d8cfb04L,0xf6eb49c8e45a978fL },
40294       { 0x9db0829949247f6aL,0xce71a74706669fe5L,0xe434ce47b82775f5L,
40295         0xe84995ef63910016L,0xa35e8b971e47792fL,0xc779cb3d7c6aaeb9L } },
40296     /* 2 << 231 */
40297     { { 0x1fa064cfaf31ea1dL,0x2a9547a848e8d974L,0xda8102a1fa9d9453L,
40298         0x786aecabdc6bd7eaL,0xcaf91e3bca2f6044L,0x67d86ea78573f208L },
40299       { 0xd309fce9c505ae24L,0x67ddc5b17f86eb8eL,0x57791ae0f3d53056L,
40300         0x26b053f00d1fd61eL,0x91c962c0045ebfa6L,0xe95246de076ed979L } },
40301     /* 3 << 231 */
40302     { { 0x156eaf570746d174L,0xa2d4a83dcda35250L,0x60a9f48c0290fa02L,
40303         0x9855d26d5c33b4acL,0x06e379c697eb1c30L,0x4f2e2dbe6e219664L },
40304       { 0x6b7448f829006065L,0x237a1f31115062a9L,0x5c635a90ad92cb24L,
40305         0x2e857f8c2eed977eL,0x3d512df7856dc88aL,0xbde85263e597a27bL } },
40306     /* 4 << 231 */
40307     { { 0x49f24994e7c03ce4L,0x274a8c132aed9ba3L,0x897b9103d5e91bc0L,
40308         0x63db1efbcb404f68L,0x70efd9d842f7fc02L,0xd6e02921c6a230afL },
40309       { 0x8d5b199f11ae0a56L,0xc98287dece33da6aL,0xde583d34504dd889L,
40310         0x03756001f823686fL,0xf19ab86f95fc73dcL,0x300406c693f12f42L } },
40311     /* 5 << 231 */
40312     { { 0x2f73595f7759701cL,0x8dc2069a6fe0e0d9L,0xb7de7114c286a65dL,
40313         0xfecc429e84c0e487L,0x51061a2c14344c07L,0x4d70972596869e37L },
40314       { 0x8b02781f2be9403bL,0x6cb6aa02de3ab5d9L,0xb013508eff6bdc9aL,
40315         0x568d2e84e5438c58L,0x7b35a979e4206c3bL,0x0bb793c0b17a8bc7L } },
40316     /* 6 << 231 */
40317     { { 0x3f896ca9fa4dd561L,0x4b9a98abd2de2ecbL,0xd0741632600e4e2aL,
40318         0x87c7db5f69e702d5L,0x1f5a3b8053e0df2bL,0xe1e24b49f443dfbaL },
40319       { 0xeb90e2305eef3a1dL,0x8f3fc8a6d38f73fcL,0xfb1e8299a5aa335aL,
40320         0xd78504cd4197b32aL,0x0e7a79cc6755918eL,0xc7c98ae2883b1c72L } },
40321     /* 7 << 231 */
40322     { { 0x1a12727c03d2beccL,0x810a37dfc6741372L,0x44ac483fb7049f39L,
40323         0xab73e5e7a36fc614L,0x298d453feeff8aebL,0x2127dd167e1b586bL },
40324       { 0xeadc5c54e07bd60cL,0x67cdae00f5e2d2e2L,0x03fe0446c9d2f10aL,
40325         0x0784098795e38ed2L,0x5d348a7ce1a6306eL,0x4903f1b6562f5463L } },
40326     /* 8 << 231 */
40327     { { 0xbf66baa5b44b1d0cL,0xbbed18eda44f8edaL,0x80bc32abeaaa466cL,
40328         0x605b7897e5f2733bL,0xe9e7e3a1a2531afaL,0x25d66db33deb8369L },
40329       { 0x36212ea3b2f25d10L,0x52d6b3f4a08d303eL,0xefa54b31444e9e9fL,
40330         0x9c2229a169530c1bL,0x68feb9854b79bdd1L,0xd570e84f8b984cc3L } },
40331     /* 9 << 231 */
40332     { { 0xe141b86bde0560a3L,0x858bf4cdb2264bd1L,0x526fb104fabe5359L,
40333         0x95f9c43f185b8a70L,0xf8e3a3eb2d1f75e9L,0x71826067d93bc6b9L },
40334       { 0xf360e01799692f49L,0x00f4fd16c2dc3dd5L,0xeb7f40498b9454d3L,
40335         0x5cb0f3c426c3b393L,0xe8ab4e4357bdc4d7L,0x9abe36b00c123d67L } },
40336     /* 10 << 231 */
40337     { { 0x1df8d98c57b168fdL,0x042fd731b45da94eL,0xa54d64f91703e143L,
40338         0xa12198be9de0ab4cL,0x160e06241ddc4e0fL,0x15cae64a6695891fL },
40339       { 0x808565e70c2b2081L,0x6de4a393cc65040cL,0x6682cd934bac1768L,
40340         0x62e7ac2ca5be965fL,0xd33f6f8ad7a38e90L,0x9cafc4635b8b516eL } },
40341     /* 11 << 231 */
40342     { { 0x0541a391b685c547L,0xe86d35e091765999L,0x65aa03c51db4a2ecL,
40343         0xba53470e6b1c4784L,0x4f848cc8cceca1faL,0x89d0db0b8b18e350L },
40344       { 0xd03e452a7840d734L,0x6cebfa790ca24215L,0x288b4569e8f1d9e8L,
40345         0x18e405af8927ce0cL,0x5aad57e51abfb4c8L,0xbbd99091a197ed1eL } },
40346     /* 12 << 231 */
40347     { { 0xf041e421aa44f3e2L,0x47ed9e8eae6fd2b7L,0x4fea93751128ed62L,
40348         0x041a1c1acec6eae6L,0x1f32359415a65daeL,0x741fea0a0154e8e8L },
40349       { 0x309e9f289c32e224L,0x457d4ffa902ce57bL,0x7bb54dd5692420c2L,
40350         0x193a41aec4fa1a6aL,0x35f5f3b43d779e77L,0x31e84371046ebb8cL } },
40351     /* 13 << 231 */
40352     { { 0xe75a7c1d9d7e5551L,0xb73c987611635e3bL,0x3b07a071e09d29b3L,
40353         0x0a3cc0acc623023cL,0x15ec4a7a1e2ceb33L,0x09a01968c70eb27fL },
40354       { 0x2e5bb53c369d145aL,0x4c93330d9b7fb506L,0xbb10a2f358013308L,
40355         0x3d9da0c4e0b85fd4L,0x8b39c992ce0dc79bL,0x7e6d18b0bec905faL } },
40356     /* 14 << 231 */
40357     { { 0x3a5a366ea1554376L,0x0e1687c052a6ed9dL,0x3e16e4aafe5355beL,
40358         0x6d8bac03ced67666L,0x403eb33ed9344003L,0xd7b9ec0d333ab20cL },
40359       { 0x9fce1986d64c272cL,0x9d52d64bb1e23843L,0x8e689611921a58e5L,
40360         0x8f5f115620d5c61aL,0xb17f612fadc81b4eL,0x36e2db30e562f779L } },
40361     /* 15 << 231 */
40362     { { 0x98d0bcead01f8634L,0x6e9ba675bc5f825eL,0xfac2d3aa05e938c1L,
40363         0x434b712fb9c66adfL,0x81c29163a9a61d36L,0x80eade933be8eea9L },
40364       { 0x10fc6d75c04c45a8L,0xa2c9aa58fb9e8702L,0x9142afaeb200428bL,
40365         0x4fa28c8520eccf38L,0x3b5f63308209b3e7L,0xf74206ca8cd74accL } },
40366     /* 16 << 231 */
40367     { { 0xd6a4d25c845f26e4L,0x71e554ce1b039dffL,0x942059731cdedfc0L,
40368         0x0c4e385603d6502fL,0x981a4fc5e15ce8c8L,0x85d1b0f17aca30b7L },
40369       { 0xf2037ef777bb9e43L,0xc52804f4e87ae187L,0x9c98a23c71f3e4e3L,
40370         0xa73c8b89f47b504bL,0xb9e33f54023233aaL,0xf2bcfc17f92c9f68L } },
40371     /* 17 << 231 */
40372     { { 0xb3c1bc26707fc6ebL,0x0bb585b75ef6dac6L,0x70af297f5f707063L,
40373         0x3d86a8fa967a0ad8L,0x510dae4d4f956cc6L,0x1dbcb2e883c01ad0L },
40374       { 0x0e480cd28bfbb5edL,0x76498f813025fca2L,0xc015064ec5446cadL,
40375         0x4ddfe2af3616f51aL,0x76b0d690e6750b31L,0xc4502c050073f263L } },
40376     /* 18 << 231 */
40377     { { 0x9120912bb3081e59L,0x6c73c4a2f908b364L,0x408af8c94de763d6L,
40378         0x3d9e83084000add2L,0x65d197fddcb5a5a2L,0xbfd29f0b2bd82bb0L },
40379       { 0xa1243e63bdfe09e7L,0x91d90b54d556188cL,0x977dd4a18bc872fcL,
40380         0xa8e6e7bef4ea7805L,0x12c53bd80a467365L,0x9d7abca493b7f0a4L } },
40381     /* 19 << 231 */
40382     { { 0x5faf453a40eeb93eL,0x6801e0d1f1fe9307L,0xe92505d39ea9b800L,
40383         0x7e911f8108eb58c8L,0x5da7ffcc098143eeL,0xe023262056876057L },
40384       { 0x5354045bbfa99a91L,0xee660bbebb346841L,0x1dbf5c7cecb3099fL,
40385         0xe79c78d6a125d753L,0x2a356f10706fc013L,0xe50c50b725f88ebdL } },
40386     /* 20 << 231 */
40387     { { 0x663ca92723ca903aL,0x8a64a4dec7681937L,0xe3ec0966a2baa42fL,
40388         0x688328d7a2906226L,0xc2821e9c94790fd8L,0x7a295b62157501cdL },
40389       { 0x032cd57d3675c2f3L,0x91d66a57f42e6f95L,0xd75056961e97dcd0L,
40390         0x7e8ba3ed7d8b6f52L,0x8ddb72c420b0dccaL,0xe09e53bb6aea2d55L } },
40391     /* 21 << 231 */
40392     { { 0x3815b1028a009f19L,0x4f76d609f5418c34L,0x7a35cb332a9eabd9L,
40393         0x018d6c54ce89e886L,0xe00b99e859c9fab6L,0x4f10a0d9aaf6e7b8L },
40394       { 0xee51f8f0e722fce1L,0x03e8b63179bccac0L,0x66e540c26f327d2fL,
40395         0x31df4a35d22377e4L,0xba5b0029d5c71cedL,0x6a3e20553ed6aeeaL } },
40396     /* 22 << 231 */
40397     { { 0xe932d1aaaffc47ebL,0x75c9d4d8513f85a3L,0x50886fcdf9419cb0L,
40398         0x756a7d7d49081e9eL,0xe45fff1fe14aff77L,0x022b4ac339846230L },
40399       { 0xefc3e8dbe89adc78L,0x921bb1538c09ccecL,0xe4dc6aa17826d461L,
40400         0xa53aa6cefac8f0f4L,0x5d4e4d53954192c5L,0xda721828c722780fL } },
40401     /* 23 << 231 */
40402     { { 0x978609c67e4933daL,0x49fd5c5d2539c807L,0x072a911c6330373fL,
40403         0x40cfa61838177579L,0xf9a7aa4c81c51596L,0x7ba8e7a5b346724dL },
40404       { 0x79298c06d26ee66dL,0x243323702a9c2792L,0x585e8b9eb6aab53eL,
40405         0xa39596c6e14bee4eL,0x89b2758828a76dbfL,0x889fba0aa00dc1adL } },
40406     /* 24 << 231 */
40407     { { 0xd55a3eaf0a9a8ba4L,0x13b1406b2a8cd215L,0xcb44589a93943e1aL,
40408         0x91b5e3493a671a47L,0x488654f8efbe0256L,0x448bee4b392ba5e8L },
40409       { 0x228f478137e762caL,0xe21a2ca7e71b6c47L,0x0e809fe94900fcefL,
40410         0xb05e1db2815f6c76L,0x8cdf28815fa6fa0cL,0x2ed55c1c586fec8fL } },
40411     /* 25 << 231 */
40412     { { 0x7c3842eba210d4d9L,0xd656154e5f69a69bL,0x9e11c6db1f3a0483L,
40413         0xb0314a5e5a217444L,0xe17a274e34f4e54fL,0x6e41c20a9f79d6abL },
40414       { 0xd010d789dffef6dfL,0x704937f17e8915f0L,0x5072bf063d3460fbL,
40415         0xa30814ed5f08429dL,0xe5faf476207d2708L,0x46e56e14af448339L } },
40416     /* 26 << 231 */
40417     { { 0x5a049c8f94af3a35L,0x9ae89160d8b75bbcL,0x8b026d867ff40c5eL,
40418         0x90e54aa4fbddfd06L,0xc85349e7ee418640L,0xbf71e454beb7801bL },
40419       { 0x63f5e068ad912e83L,0x6252a4a4ada5341bL,0x25114b87b44529abL,
40420         0x9b80bea9eadb4f13L,0x7f071c0cfe050052L,0x4c9cd33418612061L } },
40421     /* 27 << 231 */
40422     { { 0xc6f50ed03c768ff6L,0x5b994b58b6de126aL,0x807ad19e2a1ac05aL,
40423         0x012fcb9ddfc66ad7L,0xf8706d5fefeb7d07L,0x132aa6697bfc5337L },
40424       { 0x56bd874310e28d18L,0x33bc53d96e9f8e26L,0x5885b63b152758edL,
40425         0xb8b1bd5e757e1471L,0xdbc689458c0d406cL,0xa664de3bfc605a11L } },
40426     /* 28 << 231 */
40427     { { 0x04df415ea6d4b6c2L,0xb8e33e71d254d2d4L,0x179df4f48b84c588L,
40428         0x8a2a0683d435793aL,0x6147a5a911eecec0L,0x0b8389793a0196ccL },
40429       { 0x855059ce81805693L,0x37babf9f3b27872fL,0xa2ac78b1769be5c3L,
40430         0x16260f0c0a8d267bL,0x31f48c42388266c1L,0x58fee495ead1f238L } },
40431     /* 29 << 231 */
40432     { { 0x5753ee0fc048300dL,0x307dfd57e048abc4L,0xc18bdfeca3ba6c56L,
40433         0xfb2d8daf10495489L,0xd93aebd4e0fd2d13L,0x4736efaf0518a5faL },
40434       { 0xa8ee4995eaa9fc77L,0x2620f08e008adc03L,0xf03981839f06991aL,
40435         0xd47b1eabe25a4f4cL,0x669cf09c79f95484L,0xf30191584a0f8b96L } },
40436     /* 30 << 231 */
40437     { { 0x047b0f0124b240a1L,0x959915dd46cecf58L,0xedf2e74b72980ca1L,
40438         0x6b7b7b4ef2cad32aL,0xf9f01c9d0b9ded1cL,0x009d3a5825e77e0aL },
40439       { 0x62314ab411a39c1cL,0xb3b0c5b2ad557b74L,0x6dbb75dd961619fcL,
40440         0xb8f2d198c934e1e0L,0x4401507542eb7fd5L,0x3a8552efea1be435L } },
40441     /* 31 << 231 */
40442     { { 0x08e3f0e2217de9abL,0x6bdec27bb6b4f789L,0x5b160334685af8e0L,
40443         0x31e651cc61738f6fL,0x37224bc4631989c0L,0x2dc8006ad39f9c4dL },
40444       { 0x2a5d585056c3d84eL,0xb2ef06cc5cc79193L,0x246d92869eaa50e7L,
40445         0x8cacbf7cea6a7cadL,0x109bddc629465ce6L,0xad2f492fb5744947L } },
40446     /* 32 << 231 */
40447     { { 0xba03ba3b7b3b336dL,0xe57ce50928c9c55dL,0xf96b8cfe4f0f60b2L,
40448         0xb908d77e6fcccd96L,0x7208ef7de79dd17aL,0x739095333ec3d048L },
40449       { 0x9c5ad2da1163fe78L,0x4e2a8685cd4a15c2L,0xac999449470eb938L,
40450         0xfaaf27fbee7d772fL,0xfbe402abd0b7ad09L,0x704d4f0e57db00a9L } },
40451     /* 33 << 231 */
40452     { { 0x8f2f736c6330607fL,0xaf4acf66c975432bL,0x838fd8cabd1dec99L,
40453         0x347088aa7c3d0499L,0x28008757e835ea86L,0x43e2fb30c03e1aa1L },
40454       { 0x06c66dabf0d10da1L,0x25d7aa1867321158L,0x215e483811dc063fL,
40455         0xd52dee1e288362f2L,0x790989a1fe300a0aL,0xe0452fa5f163e1ccL } },
40456     /* 34 << 231 */
40457     { { 0xd3eab3ae25e7c044L,0xa3712d11b6d22325L,0x5e3835999e8237ddL,
40458         0x2549047c9dc93a5fL,0x24b07617b546a113L,0xa50359ed2e7b82fdL },
40459       { 0xbbc3eb5889964effL,0x93d490b60d7ae172L,0x68cd6b3f774ac0e6L,
40460         0xf98f1df035e02fc6L,0xfd2625c560857c16L,0xd68f25e845dd06f6L } },
40461     /* 35 << 231 */
40462     { { 0x40dcb41018c1b3d8L,0x8af9a0bf954cc170L,0x9c40a17d5af27d6dL,
40463         0x6b20fa7d7137d35aL,0x7c46f6aaf07f5adfL,0x7caa6e3cafc2f780L },
40464       { 0xef03332694dfb637L,0xd8f330b38d0ac73cL,0xacbf571255d40a9fL,
40465         0x1b4ffafa3f4fde0eL,0xa17488e09fe6b04fL,0xd27808a103957cfcL } },
40466     /* 36 << 231 */
40467     { { 0x85e1de1e96569e6dL,0xc9545920d7ae52f9L,0x04ebc797bcd62008L,
40468         0xe142d0bc04a24db0L,0x5ed44b0d40e9fa80L,0x39fd679a48ddaba3L },
40469       { 0x91aba967ce7ee095L,0x76de8d3a0e97d0f4L,0x92e7a107a221785fL,
40470         0xb028f67e734283ffL,0x987f644168af2f42L,0x0ad882369d7f7102L } },
40471     /* 37 << 231 */
40472     { { 0xc5289301642f7d3cL,0x53ea584de508c45aL,0x86eb66e949337336L,
40473         0xa56d59d668fbc13aL,0x44c464ffe9e51562L,0xe5280ecd8200a27fL },
40474       { 0x92e2a9334cc73f23L,0xf59780325e7b858cL,0x399bd41e90d4b2efL,
40475         0x4faecb8bd0ead86aL,0x6ead9c530ce48b14L,0x941b4807ef74700cL } },
40476     /* 38 << 231 */
40477     { { 0xea281be94d522b69L,0xb6855d45694a08bcL,0x7c47ddc7aa7f4d28L,
40478         0x2028e22b6c36bba5L,0x206b63430c2dee0aL,0xfeb0b3dae68fdcd8L },
40479       { 0x6dda02a44603db5cL,0xa705d0defd786a39L,0xd356f6a426aadd38L,
40480         0xd34acb7d95ef6a00L,0x073ea16e14846402L,0x2cf7a82ab2df8bc5L } },
40481     /* 39 << 231 */
40482     { { 0x8fdcd309bffd7240L,0x6843dd76386e459bL,0x222fa67c0dee5740L,
40483         0xa3801343620d7d83L,0x96dfdbffe21b4af3L,0x017bd3d3dadd04beL },
40484       { 0x1b6adba2bca18337L,0x191b86f1300ed35aL,0x103a380cd73bbadaL,
40485         0xc2f3172f36f95dacL,0xa01a10e220767bf4L,0xda882ca6989ad766L } },
40486     /* 40 << 231 */
40487     { { 0x5bbc748b9cc47708L,0x16d796054026c772L,0xefc3ce3ea053df6bL,
40488         0x30ea7eab0713752fL,0x15b491b9dfd524b7L,0xa751d82010bcd34cL },
40489       { 0xf30c708abbd5da72L,0xf0c55aa86d16bd51L,0x1754060ba6215d84L,
40490         0x3a48d2cbb863542bL,0x992e8340261d8c45L,0x4096f65be8fd2113L } },
40491     /* 41 << 231 */
40492     { { 0x5532411e1045d8cfL,0x2d2f8d6b52bea60fL,0xa850b61825c556c2L,
40493         0x6547892fe8965d13L,0xa7bd4527184d0cffL,0x0e7f7daec25ba558L },
40494       { 0xfcfaf7b234343889L,0x9d6a23aeb82ba1d7L,0x2859023b60514faeL,
40495         0x4d51aeddc82da6b7L,0x6a060dc38273cd00L,0xf2f8923d78478c29L } },
40496     /* 42 << 231 */
40497     { { 0x0baa35154f08b278L,0x26baf331e57297c8L,0x3fef65cc04e27c13L,
40498         0x0f910ee0ca8430b6L,0xa27c5f5c2c445251L,0xc780142dccf3c637L },
40499       { 0x47dc4192e0f3fbbbL,0xf4d12bd6f2a91a33L,0xc1eb18b206352685L,
40500         0x111cc07f5b3db096L,0xbce0cddbcb95c815L,0x6b0bae7e14d28563L } },
40501     /* 43 << 231 */
40502     { { 0x40d16b7705897177L,0x4772a643953915adL,0xc6cfc1d23cabc7a9L,
40503         0x0641e96df80536c3L,0x6c297cd6be4c5454L,0x509a837c9c00216aL },
40504       { 0x17455153c01ce9a5L,0xee76da8a40b825e8L,0x1757a59cd23a37acL,
40505         0x5adcfbd10958248aL,0x043314525d01549bL,0x831f725ab0c42176L } },
40506     /* 44 << 231 */
40507     { { 0x28704bdcdf7d537bL,0xbcae2c15fa88f42cL,0xab32eecd3866ac4fL,
40508         0x446754a2128c4a7fL,0xc69309c1739ef781L,0x216e9f43bd160d81L },
40509       { 0xe0efa3ec6fefc0aeL,0xd179225086a604f5L,0xe43e13e260418c0fL,
40510         0x6f605146f100b9b7L,0x6c39828a6e994093L,0x99558f4706c019e9L } },
40511     /* 45 << 231 */
40512     { { 0xf541b3cd28df49eeL,0x0be75ef5cec2660fL,0xe73d18bb620c81f1L,
40513         0x42e81fef3c775c53L,0xd0a9dcdcbc012ed7L,0x570f5a1b8f292a58L },
40514       { 0x51f302e74c030819L,0x42e1903f50bb8a5bL,0x6d8105a98536e7d0L,
40515         0x66e2fdf1c1ca766dL,0xecaf4a316c5927fdL,0x347803cf96a14565L } },
40516     /* 46 << 231 */
40517     { { 0x794d90ab425d3a7fL,0xcae9008d93ecbe48L,0x211e38c3bd5f11b3L,
40518         0x6020ed2a6db1c1d7L,0xaa5695064437f020L,0xb2b93424235f4d6fL },
40519       { 0xa84a3c1d66ab2a3eL,0x171f9325712a14e0L,0x4a43cd6744d958d0L,
40520         0x53bea85ee95dc3cbL,0x1fba008769f2009dL,0xf0fbc48f31c13eb4L } },
40521     /* 47 << 231 */
40522     { { 0xefa3dea85fb2227aL,0x0160b031e098a97bL,0x92a554e3553377b1L,
40523         0x7b58c26258ccaac8L,0x666400171c3e0a47L,0x40e45f90ae2d7d8aL },
40524       { 0x660df3441ee18103L,0x5515cd66e9b64e55L,0xede93c59de059b3aL,
40525         0x874a0c90ca0e7acaL,0x840188abc8b1daa0L,0x9d49a02601e148a7L } },
40526     /* 48 << 231 */
40527     { { 0xe93ee31ae12b4e64L,0x2ab8e378662d17f4L,0x2544bd9969516582L,
40528         0x7bf80e4b2e1e5485L,0xf30f0b14729d9361L,0xb3ffb5d18268d40fL },
40529       { 0x34605055ac193a63L,0x9e5ca9a9f8e04d69L,0xcbbeebc1085ecbb2L,
40530         0xda03b75bf340eac4L,0x3bf9468a84436462L,0xdfa8b4c80f26f20cL } },
40531     /* 49 << 231 */
40532     { { 0x2e6520714aa497e2L,0x2b9358fd7ecd223cL,0x96efcbdc4f828e86L,
40533         0xa0f76679d2f096c9L,0x3887bef70690b78aL,0x2e7d9cae1a01b10dL },
40534       { 0x8b0cdf0e5656e5d0L,0x0a6ca92d48d3ec2cL,0xdcacbdd3b49e2ab8L,
40535         0x4d087ee0d7485e87L,0x4987078292cc57a7L,0xa1776bd47bb38b8aL } },
40536     /* 50 << 231 */
40537     { { 0x60c113bdb711e087L,0x28694ff4e257e115L,0xf81d5e054c18d716L,
40538         0xd1c04b67eb0af843L,0x16e6e46e40d8907dL,0xb73c3de91dd34d22L },
40539       { 0x9d7f282519825f92L,0xdf5d33edba486ce6L,0x288fafac21c223d3L,
40540         0x21c4df016d05007fL,0xccd9626b197c5badL,0x3a91743902c91b36L } },
40541     /* 51 << 231 */
40542     { { 0x6f950922340ebed2L,0x9e796894beddf06bL,0x5a8ea337cd9d7a07L,
40543         0x1c5dee115bd182ddL,0xba87dd1ae0c79b9dL,0xb16169f3b9002931L },
40544       { 0x68098da138c62518L,0xea7bf413417fdc6fL,0xa500a320b6fdf768L,
40545         0x7870c71c4550c202L,0x0874fd9f6121afb2L,0x49f0fd0cab7d0b6fL } },
40546     /* 52 << 231 */
40547     { { 0x7af3de47f6b7fedaL,0x19b8a51ba30b2296L,0x16886446150a0af8L,
40548         0xdada5aeeb2a4ecbbL,0x77105de8e8de3888L,0xc54d352c7d763f77L },
40549       { 0x754984ae72ff499aL,0x3de4b2785a5a25f4L,0x5df75ece818512a4L,
40550         0xd4fc8093ca7ccf3dL,0xff9bdf544a49f4fdL,0x45d23e77de0a5840L } },
40551     /* 53 << 231 */
40552     { { 0x8ef88682ca85a586L,0x12038785bff64885L,0x99670d8ac98cf695L,
40553         0xf7dc3dca6c3d5832L,0x1e836a59fd3e64d1L,0x8dbb13addd426c1aL },
40554       { 0x21867f0690f59314L,0x7adb6f707da5ce5dL,0x662422ae0da28987L,
40555         0x75a1486466766a41L,0x2d42bede6c8937b6L,0x559e168dff0c474cL } },
40556     /* 54 << 231 */
40557     { { 0xa07fdaa25af635feL,0x01d67fb36a0c8fd9L,0xa226f8dac9eb8d8aL,
40558         0x0795c27ce7fcfd0dL,0x84556c0553578294L,0x92b30a84b3e57574L },
40559       { 0xc8eb6ac0ca5dc890L,0x061a0a195c8b7d8aL,0x60f3351923177c06L,
40560         0x780755917d01bf6cL,0x63ec8a4421f48422L,0xddfcb2c0d804c7b0L } },
40561     /* 55 << 231 */
40562     { { 0xb186daffdb2e385aL,0x7589c9cd43aac848L,0x9b474a411fb053d7L,
40563         0x2f79556be1ada6c8L,0x694badc54d7d9ce8L,0x31ac06a84921f546L },
40564       { 0xacaf91c165666233L,0x6ea97c8ee45b62b3L,0x9c8f3fa66f0096c6L,
40565         0x2db7da39ac68f8baL,0x0ad2da0f19a3d1b2L,0x08c96b0ff80d426eL } },
40566     /* 56 << 231 */
40567     { { 0x07d63f07257d20b5L,0x25475a304e8c62caL,0x2469d661789ac15cL,
40568         0xd0d2ba1b3aae86a4L,0xc716202a4458dab6L,0xa011ca5ec4d5f90cL },
40569       { 0x53ce0273ca2430c9L,0x61040ecf96da6946L,0x6847dd034247c99cL,
40570         0x0c500b4519defda5L,0x263316db365796d4L,0xff9b99e7b982d89cL } },
40571     /* 57 << 231 */
40572     { { 0x725fc8f911591738L,0xe6c16db3f4030f65L,0x66c7622d441b6b17L,
40573         0xad8e4b9c69d93786L,0x732d597473093a4dL,0xa2136d85228f103bL },
40574       { 0x84f1d9397bcf76e0L,0x971a4c55e2531411L,0x9816371d15920fa7L,
40575         0x5515cbc594bbc17cL,0x8b8c76e859d52722L,0x3bfe618e9a240652L } },
40576     /* 58 << 231 */
40577     { { 0x18981da25cd1f7c3L,0x198a91bb09b22c3eL,0x48d11aafb23d71ebL,
40578         0xddaa6e071d31782aL,0xca7b812a39125babL,0xd89dcd825d963539L },
40579       { 0xc7012ed9e5a89eafL,0xbcf0d4c4af0ce61fL,0x6f65a246e6a9f404L,
40580         0xae6a489d51c1302bL,0xab43a2bcfc5ea651L,0xfdb73470293b1e58L } },
40581     /* 59 << 231 */
40582     { { 0x8e860629f5c9d835L,0xf91a0b5d04efe37dL,0xaa2acb55b1956d3dL,
40583         0xe295b30fb5bb48ddL,0xdfad64a7e8275e6fL,0x1e203bb7d41beeaaL },
40584       { 0x4aa2fd5836e64f60L,0xfb0b92a706e01818L,0x68e386d60d29ff89L,
40585         0x617981bc1802840aL,0x6d68ccf7ceb124f5L,0x19193c483b120ddaL } },
40586     /* 60 << 231 */
40587     { { 0x4d02098b8b5d9d67L,0xecb580503148dc75L,0x561545107d898600L,
40588         0x0213ef782d8be728L,0x4123671b1f11d90bL,0x8b9ff1b654c291beL },
40589       { 0x139ba95e52db185bL,0x83be41d0997b3eb4L,0x4a950c9a41e2e288L,
40590         0xdca0290c48916145L,0xf1eb9327cd073e77L,0x384ec5ddbd4f4ccbL } },
40591     /* 61 << 231 */
40592     { { 0x7e538f9036f4b7b0L,0xeb54e9e4ca25008eL,0x0054a07bf8af6eb2L,
40593         0xd96b712f5e3f61e9L,0xf01da03e29aa496dL,0xedbbc2d7d00faf95L },
40594       { 0x178c5bbd104f4dd3L,0x5cbd4783aa11b0d0L,0x4433fe6156eecea2L,
40595         0xdcc01bdcada7991aL,0x89ca41ba1addfa5bL,0xad64ee097a65ee64L } },
40596     /* 62 << 231 */
40597     { { 0x05a8a58d7e276915L,0xee28f77bf1582bf6L,0x6f308349285bd210L,
40598         0xb8b8ec47ab877186L,0x0436930e0ddb857fL,0x20a9973e5346b800L },
40599       { 0x756ab9b5848dd5b9L,0x33a220cfa12370ebL,0xdbd87c391f3d0386L,
40600         0x90c6879075429844L,0x5cc1a9736193f021L,0xf0b80f6543d46e24L } },
40601     /* 63 << 231 */
40602     { { 0x45e5f57bf79f5116L,0x14f02b229bcd30ecL,0xd989ee5426a39a1dL,
40603         0x497ad3c3d5854b85L,0xb61c15e50154364fL,0x5979941f502107d5L },
40604       { 0x0b99f087195934f6L,0x1f852baa605fbf71L,0x68ec80e47206f65bL,
40605         0x0392af1cea5bc3c0L,0xcebe56f81cb1d6bdL,0xdc6279d90f80b6b9L } },
40606     /* 64 << 231 */
40607     { { 0x10c082a63fc14a85L,0x59389ebc1c0b14c4L,0x785d935b4cb291a7L,
40608         0xfc2ae15313e9ce08L,0x3146fabf4df6f1c4L,0xa2a4a457c87dd24cL },
40609       { 0x85fdd8771deb49bbL,0x2b7843709b055934L,0xc81d05013e7e0297L,
40610         0xb56ddd1fb92df904L,0x4612df9f295ddccbL,0xc24bd4cf0e27cf1dL } },
40611     /* 0 << 238 */
40612     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
40613       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
40614     /* 1 << 238 */
40615     { { 0x7830460fd1944d1bL,0xc56f08e784350af2L,0x73bee2aa307d9c78L,
40616         0x1b02af1b5aad8b6cL,0x5e31882703848db5L,0x4785958bf230f476L },
40617       { 0x4ea6535d4f80e25dL,0x9958c9c7d23c7f72L,0x4c197b332fd33cabL,
40618         0x24c7b0b1c566914fL,0x956ce3c371952d3bL,0x8735694bfabae5f2L } },
40619     /* 2 << 238 */
40620     { { 0xca9872e1597bd10eL,0x6725cc9a4aed951fL,0x96b17cb84e05b280L,
40621         0x97987146fa234d45L,0xba78949ebb35a7d8L,0xb82e9b9f6fc59384L },
40622       { 0xa303e54a70f165c7L,0xfd6bb0dcb9c2cad9L,0xe57e2de8ee722045L,
40623         0xa05c106563e27035L,0xaa38e86602d2fe6fL,0x78e02fa8ee2f6aadL } },
40624     /* 3 << 238 */
40625     { { 0xd6256e7c62c627c2L,0x5571edfc3cbb10dfL,0xfedec45771cca8f4L,
40626         0x2e26ac5f8483eed6L,0x8e8c0671173508c2L,0xfd9f25d50f39bf76L },
40627       { 0x1cb080c3094cc1b1L,0xd367ca8c113e6552L,0x4ae2ca36bedb511cL,
40628         0x0de0c3e34707eeb6L,0x204cc610239d3097L,0xb235dbf0adb00383L } },
40629     /* 4 << 238 */
40630     { { 0xc0426b775e3c647bL,0xbfcbd9398cf05348L,0x31d312e3172c0d3dL,
40631         0x5f49fde6ee754737L,0x895530f06da7ee61L,0xcf281b0ae8b3a5fbL },
40632       { 0xfd14973541b8a543L,0x41a625a73080dd30L,0xe2baae07653908cfL,
40633         0xc3d01436ba02a278L,0xa0d0222e7b21b8f8L,0xfdc270e9d7ec1297L } },
40634     /* 5 << 238 */
40635     { { 0x9704cdc6a9c26f4fL,0x96808107908a6756L,0x73be47d40f1def2bL,
40636         0xd32c11d619215394L,0x1a59b9541842c2f2L,0xd64a70bb52c94807L },
40637       { 0x32b08c3e9dd262b3L,0x54d2cdc4440315a0L,0x671b3139425ace14L,
40638         0xd418542f2c7518e4L,0xce5e1712cc1bbdaaL,0xb3268403131f98adL } },
40639     /* 6 << 238 */
40640     { { 0xce4b39874e39e87dL,0x8e60a901966f4603L,0x1b95e4fd73c4a679L,
40641         0xae87f845b004310eL,0xcd50aedf815684c5L,0xa56805d343c77e38L },
40642       { 0x9a429abcf0588403L,0x77dd1a02009e699dL,0x27ad38fb52a417d6L,
40643         0x62591579fd8f6d00L,0xccb12126ea58f822L,0x3a009e76760a3ccfL } },
40644     /* 7 << 238 */
40645     { { 0x17688d3410023b42L,0x9bc8bd6f7cfadb6eL,0xe4cdf89f460aa255L,
40646         0xf709740a99eb21f8L,0x1ea8115cbd460bacL,0xbf7bafe8ac7e6629L },
40647       { 0xf8dc02bb096de741L,0x982f7becd2f6a583L,0xd971589a0f92bfeaL,
40648         0x662793afc02acbaaL,0x1b0f7d5eb771574eL,0xd9f71c4c66985cdaL } },
40649     /* 8 << 238 */
40650     { { 0x4f120aa7e2a07891L,0x9158bab3a25d3225L,0xc96bac5ecfe5f7a8L,
40651         0xd4e73d59bbf3cec6L,0xed8d233560361cd5L,0x9b1a252c562f444cL },
40652       { 0xbd37d3cfc70f23c2L,0xf13b3b6ea52ea19eL,0x7e35535a3d2f41edL,
40653         0x0353b52ee8b1743eL,0x31d89dfd7b5a2765L,0x2b7ac6848d9ea8b8L } },
40654     /* 9 << 238 */
40655     { { 0x3613afb361bd36b3L,0x85171aef3e0339eaL,0xdaf0c280c833abe6L,
40656         0xde566372e4500f09L,0x487dbef84a5bda73L,0x5cc00564e6e3f324L },
40657       { 0xbdf148cfb96abd01L,0xf8dbeda5ba9306ffL,0x05774d1a5ac0b828L,
40658         0x73ddc3248cf4a56dL,0xabc5af5232dc6125L,0x15ad6d2573294d7bL } },
40659     /* 10 << 238 */
40660     { { 0x7b5bbe51bd6086deL,0x7fbc95303816cee6L,0x60ac14fab3354bf6L,
40661         0x2b2abe43c9a6e793L,0x6ffae7342e19664bL,0x1d0e38b90064bd95L },
40662       { 0xc1303ba3fa9f23beL,0x6d5f4ea5d8f0a46cL,0xf8f472517a270649L,
40663         0x126c13ae723a5a0dL,0xe4d0a19e5e21273eL,0x18076170e83abb8cL } },
40664     /* 11 << 238 */
40665     { { 0xc21dc6946b771809L,0x2501f25600f85b8aL,0xb3a21dc347382df8L,
40666         0x25ede3c239dee18dL,0x39709b9db29b770cL,0x6eb314d510fa9c5aL },
40667       { 0x79140b1f508f5e59L,0xcce9f7cedeff2816L,0xa153c050400bc8a1L,
40668         0x052e03c4ff2c127fL,0xf8ffff1f841a03adL,0xc0c2626345896fb5L } },
40669     /* 12 << 238 */
40670     { { 0x06a67bd29f101e64L,0xcb6e0ac7e1733a4aL,0xee0b5d5197bc62d2L,
40671         0x52b1703924c51874L,0xfed1f42382a1a0d5L,0x55d90569db6270acL },
40672       { 0x36be4a9c5d73d533L,0xbe9266d6976ed4d5L,0xc17436d3b8f8074bL,
40673         0x3bb4d399718545c6L,0x8e1ea3555c757d21L,0xf7edbc978c474366L } },
40674     /* 13 << 238 */
40675     { { 0x905ad4bf3023ec1eL,0x8cc101ca16081c1eL,0xe0d47ec79cb74127L,
40676         0x1be5f86725da2dd4L,0xcba2ee4507ebac2eL,0xcee26667e22d87d1L },
40677       { 0xfc339af1c7c409ecL,0x112af9b47b7ef32fL,0xcc3e07898b821999L,
40678         0x4234433c222b3478L,0x55bcc87ddbce50c0L,0xcb6141cd7816f642L } },
40679     /* 14 << 238 */
40680     { { 0x8ae24e6b67f38eecL,0x61adae20ea14bc0dL,0x32737584c480c3fcL,
40681         0x44f61b79812ee744L,0xc8f607d5fe06d5d2L,0xfeaeb2bcea45267eL },
40682       { 0xe004522bb92c909eL,0x5171fe360ab3e854L,0x659936fe63ebc481L,
40683         0xdde6dbbff76649d4L,0xb38c160fe2295d0eL,0xba608b7e1e8f5c1bL } },
40684     /* 15 << 238 */
40685     { { 0x55616c4c86c2cb9cL,0xcfa8b484173526faL,0x096a09d90039a4c9L,
40686         0x6ccb4964f300a73bL,0x42dd78ac66819855L,0xa7c532c10941599cL },
40687       { 0xd15905f0b630220bL,0x9f4893ca5637e103L,0x768c09bf8a2115abL,
40688         0x5091f4399c52755bL,0x4ad1c0f6d38e7c50L,0xf6e6b2d054eb4439L } },
40689     /* 16 << 238 */
40690     { { 0x73457010c46db855L,0xccb68c43dd579fb8L,0x705b0e8c9c25fe5bL,
40691         0x40f36ea182dd0485L,0x3d55bc8527ac2805L,0x15177c6fad921b92L },
40692       { 0x51586cd55ab18cabL,0xf51b5296cbb4488cL,0xbb4e605e84f0abcaL,
40693         0x354ef8e3772dd0daL,0x7f1a8f795e4e1d41L,0x93461f09de5d8491L } },
40694     /* 17 << 238 */
40695     { { 0xe186b0b09cd7d54aL,0x0451cb0dd4303760L,0x90a8b0f84b38f082L,
40696         0x2357f03700b04fffL,0x8a4669f86d81dbd3L,0x2a5cb6f6bd94842aL },
40697       { 0xa13d19c4c498a572L,0xb7b8fe10cd937a76L,0xf8df355ed9842244L,
40698         0x64fc9d62b077c8feL,0xd4b2c3cce9dd337eL,0x7c63799ad3784edaL } },
40699     /* 18 << 238 */
40700     { { 0x39fe6673a780fd38L,0x8bc8d026a4b4cfa8L,0xcc339850801c44bcL,
40701         0xb5d80c4bc2dca07dL,0x745ffb5d91f1408bL,0xb55588f89017d1e7L },
40702       { 0xafef3cf1c3d76a1eL,0xe3a6e8058e1367ebL,0xd09ea1e2a642d2bbL,
40703         0xf303c613216e63e5L,0xe699e51cc98908e6L,0x835d4cefafeac3c2L } },
40704     /* 19 << 238 */
40705     { { 0xd1cbe55ee5000eceL,0xc1a074b01ff0f474L,0xc6681f48d7ffb89bL,
40706         0x7c68011d48d0bb4dL,0xf305627bdcef5e07L,0x0f0e0c36323ee3fbL },
40707       { 0xc5c6b61355f5f185L,0x6e4de5af52d6cc84L,0xa64ea548889fe8bfL,
40708         0xc4c5e4104d28350eL,0xef944a8f7dd3072dL,0x7ed579fa13356185L } },
40709     /* 20 << 238 */
40710     { { 0xec72c6506ea83242L,0xf7de7be51b2d237fL,0x3c5e22001819efb0L,
40711         0xdf5ab6d68cdde870L,0x75a44e9d92a87aeeL,0xbddc46f4bcf77f19L },
40712       { 0x8191efbd669b674dL,0x52884df9ed71768fL,0xe62be58265cf242cL,
40713         0xae99a3b180b1d17bL,0x48cbb44692de59a9L,0xd3c226cf2dcb3ce2L } },
40714     /* 21 << 238 */
40715     { { 0xe646281876ba99afL,0x1d53bd27818b5992L,0xc55e135d67e1d81bL,
40716         0x32b9e37023e211feL,0x91ea63dc130b1176L,0xd7e1cc51a34fbb3cL },
40717       { 0x5363fd962fee934dL,0xd19c50ba0b8fd289L,0x21257825a11c27b6L,
40718         0x19159a966792c1ccL,0x0ccc3cac39a08fbaL,0x841cb58a45512d8eL } },
40719     /* 22 << 238 */
40720     { { 0xae8532c3224ab492L,0x8bc92c85f6acd0ddL,0xc071ba92b796d21dL,
40721         0x1290162943797a3bL,0x8f4c5fb5ec950329L,0xfab6f950cf0578e3L },
40722       { 0xb7b8d211bb6aa75cL,0xb06279dc3d1147f9L,0x060db1a7591820cdL,
40723         0x0e691a412830f356L,0xac00664224b8bc33L,0x579f9c052f17441eL } },
40724     /* 23 << 238 */
40725     { { 0xd8b9dcd50c4cb7edL,0x2f59d64c7619cdf4L,0x7e83d18e284bc6f9L,
40726         0x49af25123e415166L,0x90388976ccd64d11L,0x4708fffdfe2580b6L },
40727       { 0x7a8d25ff17dd4d8bL,0xba7785fefd71355bL,0x7cceb111b9789cc6L,
40728         0xa8fd782ee98d6b78L,0x8d1b7fb66135d4a2L,0x78c2267d35e382beL } },
40729     /* 24 << 238 */
40730     { { 0xf38995589311182cL,0x1bee4c4bb657a7b7L,0x0b1c4fd32df8d1a7L,
40731         0xf16bcc2376d3fbbfL,0xd5888916f4fd52bcL,0x3de6cfb4d5cde1f0L },
40732       { 0x764ffffdd4a07dfdL,0x5e674426e2642182L,0x34f64762ccd57b85L,
40733         0x2233a4c329351062L,0xdf076095d9c642f3L,0xac917a2c59f0df34L } },
40734     /* 25 << 238 */
40735     { { 0xe588d5a8cf2f7d4dL,0xb45923ee86798c14L,0xffefd323f0623572L,
40736         0x24dd7019005f605aL,0xb9e833053a6edaecL,0x039ed04949923a44L },
40737       { 0x0f83a74360789fd2L,0xb4f91a8e9b001515L,0x37b856664261ad9eL,
40738         0xc291caa68b92b7afL,0xfa0f8a5e67ba28e0L,0x362a6808c5eefb98L } },
40739     /* 26 << 238 */
40740     { { 0x8aee939cc64e4ab3L,0x3baac0a844621bb2L,0x9094a09629da9bc3L,
40741         0xa92dc70806d2314fL,0x45c1cd0e34235918L,0x51aeb007c34021a4L },
40742       { 0x58267735a3492237L,0xe8d494bd375eb21bL,0x664dacf5a395bf8bL,
40743         0x2ef1feb612cec40eL,0x90c5f43fa7141e5bL,0x93e80dd03855169fL } },
40744     /* 27 << 238 */
40745     { { 0x2e550006211b2fb3L,0x8c82e59d6cab73baL,0x011bb2fb2bd326b9L,
40746         0xfbd519ff1e0efd69L,0x0fb2f266320cec7fL,0x879e28c03518fac3L },
40747       { 0xd0887775e01294eaL,0xf6e60efd1df5bb0aL,0xb2a5d3a404d04a96L,
40748         0x915eaa29a4f3500fL,0xcb6c03f70db6bde4L,0xfee081a405f30cc1L } },
40749     /* 28 << 238 */
40750     { { 0x9580cdfb9fd94ec4L,0xed273a6c28631ad9L,0x5d3d5f77c327f3e7L,
40751         0x05d5339c35353c5fL,0xc56fb5fe5c258eb1L,0xeff8425eedce1f79L },
40752       { 0xab7aa141cf83cf9cL,0xbd2a690a207d6d4fL,0xe1241491458d9e52L,
40753         0xdd2448ccaa7f0f31L,0xec58d3c7f0fda7abL,0x7b6e122dc91bba4dL } },
40754     /* 29 << 238 */
40755     { { 0x24e2801364ca563dL,0x6f06fde270f8f91eL,0x9abcca1bd2a65c0fL,
40756         0xc5728ffca5aa1e40L,0x654f0f56eb9d3e45L,0xe04ada2394161a0cL },
40757       { 0x001b25626ddbc960L,0x253b447aef93504dL,0x895ce21e2d6dc894L,
40758         0xefb987381c1b63deL,0x6adb6eecde8b806aL,0x9ea3884e0240e7bfL } },
40759     /* 30 << 238 */
40760     { { 0xe8387f68411ad563L,0x98a962eacc5f157bL,0x8093a8d296090321L,
40761         0x240a73083790052dL,0x6cb4a7382e7dcedfL,0xda65bf8481a60e8cL },
40762       { 0x420ce478c66c70aaL,0x0e7959ec42da3021L,0x44bc9d3c7e35aa20L,
40763         0x36e49d764e9df39bL,0x7281073a9b286287L,0xd9a068422524b62dL } },
40764     /* 31 << 238 */
40765     { { 0x00d6e0312546247eL,0xcc2851020fdaebdaL,0xb8a453f15601006fL,
40766         0x0afaa3f138be7068L,0xc87acb442c6cd9f1L,0x10dd5d031ffd5fbcL },
40767       { 0xbae0b62fddacbbd0L,0x1daadc18446bf2e2L,0xaeaf15317ef0facdL,
40768         0xe7b92b76c941808fL,0xda59af2ae6d0dffeL,0x1c09b783e612b888L } },
40769     /* 32 << 238 */
40770     { { 0x3bd258d8775f516fL,0x4bedebd5c715927fL,0x5b432512e3f966a0L,
40771         0x338bfca7709d0c2dL,0xd142cc1049658259L,0xfabc6138636b8023L },
40772       { 0xa9ef94014d4ef14dL,0xd5917ac1c54c570cL,0xfd2f63c55cb64487L,
40773         0xbae949b11cea475bL,0xa45446031e67a25fL,0xa547abc1dc6a7a6aL } },
40774     /* 33 << 238 */
40775     { { 0x6c7b4cf344b880b0L,0x29da87760a388eaeL,0xf434d173fe9617c9L,
40776         0xaf67cc2ea47abf28L,0xe211ad37249d0eb4L,0x88d156e538bce76fL },
40777       { 0x60320c6dd58fa585L,0x7b352c39ebf09a7bL,0x9305dae8a31ce734L,
40778         0x70c35be89361cc3bL,0x6b8b71f8bcd14255L,0xd1b7963572a457a7L } },
40779     /* 34 << 238 */
40780     { { 0xd8d04787ef8849e1L,0x58adf044148375e5L,0x5b613ac476623232L,
40781         0xbd274d2f95d7e359L,0xd97acbd271576bb6L,0xd20bb2c34c7fc4b7L },
40782       { 0xe15465315f837664L,0xddac59b5fb4ce79aL,0x33fef5214fb36e08L,
40783         0x0467811045108b22L,0x0de6c7766dbe57bfL,0x456d765a25fea77bL } },
40784     /* 35 << 238 */
40785     { { 0x4d9838a32922b715L,0x3cd9fc0a6a7bb3a7L,0xb1bf28fc2247e916L,
40786         0x92dd22006f206a16L,0x8ea87d67b51256caL,0x2c535730b5a4bf17L },
40787       { 0x34da42505f584954L,0x72326fb8fefca748L,0x40fd9d09da2844a2L,
40788         0xaadaf71c412da037L,0xa62329a9aa6f884aL,0x1b6165e6726a8f8cL } },
40789     /* 36 << 238 */
40790     { { 0x2a2dedafb1b48156L,0xa0a2c63abb93db87L,0xc655907808acd99eL,
40791         0x03ea42affe4ac331L,0x43d2c14aeb180ed6L,0xc2f293ddb1156a1aL },
40792       { 0x1fafabf5a9d81249L,0x39addead9a8eee87L,0x21e206f2119e2e92L,
40793         0xbc5dcc2ed74dceb6L,0x86647fa30a73a358L,0xead8bea42f53f642L } },
40794     /* 37 << 238 */
40795     { { 0x39de72e225e62213L,0xd885c406a03a58adL,0xa63964b527e76458L,
40796         0x93f83239637c0becL,0x8c9e29b4ba556e65L,0x7d746448a6183182L },
40797       { 0x6dee01aa09a8eb37L,0x97289f2e757ffa96L,0x367ec50fb4785102L,
40798         0x200f77cdb3d07cd8L,0xadc7c000a581946eL,0xa2dba5e52c0b32aeL } },
40799     /* 38 << 238 */
40800     { { 0x95a5a7f0b203f75fL,0x9b574cfcb5df11f0L,0xbf5fe3f2dba4b4e6L,
40801         0x347a7bd7d0987125L,0x858dea6b09377a2aL,0x87cb1e66eea85d5fL },
40802       { 0xe7619b666146a0c6L,0x0012585a8a0bc101L,0x738e6589ea0ce92aL,
40803         0xf23547979a39b3f0L,0x666f3f5d6dc81167L,0xe569cc82fb06b0b3L } },
40804     /* 39 << 238 */
40805     { { 0xef0e64399c7677d5L,0x052bf027efc398c2L,0xa5d253cc515e4198L,
40806         0x7b915f07a71ce047L,0x56880ea2e177dbf6L,0x735dc74f0b5741d9L },
40807       { 0xa108632f0161a0acL,0x0c68765705e7e09eL,0x694e651e211709e0L,
40808         0x334e15e51d879a41L,0x6191d34260c2a603L,0x3a8ce0e6224234d7L } },
40809     /* 40 << 238 */
40810     { { 0x158d814db12c4bb1L,0xe52f75d22f0cf4faL,0xf106023e6141b59cL,
40811         0x5eb8b8ebbeb9d941L,0x1dd3972990cf579cL,0xb273252e69ee6efaL },
40812       { 0xe43a3c593e9947a0L,0xd605124f6c19dd01L,0x8090fdbd05c578b0L,
40813         0x8e6c535a622ff18cL,0x3600b0c257d12071L,0x6d026e5c78d001d7L } },
40814     /* 41 << 238 */
40815     { { 0x6e515f3608e33ad5L,0x3e320c5283512d9bL,0x171ab26a5ca1c452L,
40816         0xfb3061e874c97139L,0x7944644c9cacf3aaL,0xedc724f03687cfceL },
40817       { 0x7252d7590db9b5beL,0x625f17ed0eeaf1d4L,0x6b0b4e5e82e3c58bL,
40818         0xf03d7bcef0f2ecc3L,0x4cbaa878139a7580L,0x982e471672203e07L } },
40819     /* 42 << 238 */
40820     { { 0xa533f574e335d60dL,0x102b66fb2aa6855fL,0x7a57420c49946287L,
40821         0xe3bb702286f393c2L,0x1892642d04a41c49L,0x2c47ba38d44969feL },
40822       { 0x9068650444388ef1L,0xd94f6f131eaf6b54L,0xf81d8782f0b872e8L,
40823         0x7ced5924d013f6eaL,0x76ef63d307cd721cL,0x888646b36cba783fL } },
40824     /* 43 << 238 */
40825     { { 0xd2c858157ec1660cL,0x6c8988a3ee73763cL,0xd6cc562d5e80aaeaL,
40826         0x48f399d975768c58L,0x3189bf68af50c1c3L,0xa3f8d2df27dc372fL },
40827       { 0x99d6b416b8c7c529L,0x531707944406b1e6L,0xafb57933e3ac044fL,
40828         0x530ad3bab2548505L,0x791a290a977590caL,0xb0d07228646fd1fbL } },
40829     /* 44 << 238 */
40830     { { 0x636225f591c09091L,0xccf5070a71bdcfdfL,0x0ef8d625b9668ee2L,
40831         0x57bdf6cdb5e04e4fL,0xfc6ab0a67c75ea43L,0xeb6b8afbf7fd6ef3L },
40832       { 0x5b2aeef02a3df404L,0x31fd3b48b9823197L,0x56226db683a7eb23L,
40833         0x3772c21e5bb1ed2fL,0x3e833624cd1aba6aL,0xbae58ffaac672dadL } },
40834     /* 45 << 238 */
40835     { { 0x86d2f71530cf85afL,0x8e1b053cf7e634e0L,0xe79592f43a4e466dL,
40836         0x26752e8506985331L,0xfd098e83dff73363L,0xaa158e2c505ffbc0L },
40837       { 0xe45fa1cba0fe759cL,0x6e2f5989bc0d1491L,0x4a804eacae7210a9L,
40838         0x0e252f758a63f67bL,0x0d7600cf362a7df7L,0x795069bf6d5b2b18L } },
40839     /* 46 << 238 */
40840     { { 0x25f9f0fc0649613bL,0x109521f05d3005d9L,0xcce1c5b41feba4c2L,
40841         0x6a27cfafacda6021L,0x37ff83303ab6382eL,0x53c7ccb715ca79f3L },
40842       { 0xdffa6c9633611dd4L,0x7555cfd4352d3916L,0x2354bec62cbd44f7L,
40843         0xaf0044c54b0b500cL,0xe4835df7ce9aade1L,0x14e57f6bcb218644L } },
40844     /* 47 << 238 */
40845     { { 0xb5e26899b1c22bd8L,0xde12b0b51aaf3460L,0xc269595c31ee049fL,
40846         0x8c7513c88a73ed74L,0x8273018450cd009eL,0xb2cd2dec4d130b5fL },
40847       { 0x1a9015521971a189L,0x6ce23544c6f39bc3L,0xd76133aa9467badeL,
40848         0xf91173cc071ee7a4L,0xe54d8f44b8267c73L,0x5725e0676dc9aee6L } },
40849     /* 48 << 238 */
40850     { { 0x00e0a003daff1807L,0xcb9d155992c94fd0L,0x3c2b5c3dcebbf905L,
40851         0x9c799ec7d338afa9L,0x60b9908c4e2cfcccL,0x4bfe1a57ae3c6f92L },
40852       { 0x480d310efb116150L,0xa1ed6c31e3e7888eL,0x841a11d9720b5196L,
40853         0xcc337d178adff37dL,0x08c668265faa86c5L,0x945c90d49dfcc7adL } },
40854     /* 49 << 238 */
40855     { { 0x0fcc0854f2b3622fL,0x3a9e218ab6833f04L,0x209125d4ee8fc062L,
40856         0x98b2c628a3c3bf2eL,0x7e051fda83ca6a6eL,0x81afd3933d87981cL },
40857       { 0x8f3beaff4baf556eL,0x0f1b27fdcc7e66c7L,0xbf0b08f59f4a4461L,
40858         0x8eb739fa141985e5L,0xdb5b46112da43947L,0x63bf81cbe5cabfddL } },
40859     /* 50 << 238 */
40860     { { 0x355e40d398ff85afL,0x19f2f3c2b08f836bL,0x0a62d254737cb5f7L,
40861         0x5d0ef7d9f8c50d82L,0x773a399ebbd70eb7L,0xac357974a70bea8bL },
40862       { 0x1de5a45cb3b5d794L,0x67c58b52a48b55b7L,0x724f56f4b02ebc8bL,
40863         0x03dc71e3154ad508L,0x9bcd3939cc84428aL,0x7fdba978158c4a0eL } },
40864     /* 51 << 238 */
40865     { { 0xac08e06e65b93d44L,0x2397625a5358c691L,0xfbc9285a8516e31aL,
40866         0x38ce0d3544ffe25eL,0x13381dd16414072bL,0xf782fddc170ecb4eL },
40867       { 0x78c71a716f815259L,0xb725870573659a85L,0xd37678008712d968L,
40868         0x153d8aee3eda5006L,0xda4fd94818f1439eL,0x6384135352dbfdf8L } },
40869     /* 52 << 238 */
40870     { { 0xce92224d31ba1705L,0x022c6ed2f0197f63L,0x21f18d99a4dc1113L,
40871         0x5cd04de803616bf1L,0x6f9006799ff12e08L,0xf59a331548e61ddfL },
40872       { 0x9474d42cb51bd024L,0x11a0a4139051e49dL,0x79c92705dce70edbL,
40873         0x113ce27834198426L,0x8978396fea8616d2L,0x9a2a14d0ea894c36L } },
40874     /* 53 << 238 */
40875     { { 0x06d57f2920514206L,0x61394b863a2cc1ebL,0x0ffdf49a86c7b2c1L,
40876         0x65334e9349f58f13L,0x180b10b8c08dfb05L,0xec352adef6c95b7aL },
40877       { 0xf9801dc0c4bde0faL,0x428c77f0dabf0c66L,0x2a7d1bb0c2eb80d4L,
40878         0x81774172fdb56fabL,0x7507481f1d965515L,0xee0693bb8ebfadebL } },
40879     /* 54 << 238 */
40880     { { 0xf4589418ac56a031L,0x21f3dec6f2718a10L,0x0ed08d9690f28b6fL,
40881         0x2624bd7a35c3a6a3L,0x1b3f02e8bba795f2L,0xe629b5aa3977fd17L },
40882       { 0x66c8cd7691e8df1aL,0xf36c4e2c1b2b5542L,0x7f6b742f7dff66a7L,
40883         0x00bc68b8242e0fc2L,0xdff5c73360119d9bL,0xe726260fb5c4dddfL } },
40884     /* 55 << 238 */
40885     { { 0x0242fa358eeaa549L,0x2d081bcf8abc93c6L,0xaa31813c55551d40L,
40886         0x1cf21c1271db3aecL,0x5a6dede7203880d9L,0x389c63cabe4aaa9aL },
40887       { 0xff4db7d4bf28086fL,0xd89c039b33146844L,0xc2b32bf06df6f790L,
40888         0x7f4e836b9f22fecaL,0x3f64d0fa0af51572L,0x681a1f5bc67aa565L } },
40889     /* 56 << 238 */
40890     { { 0x9f9ac9608e2941a6L,0x43e7ff902fc4fe1eL,0x5ec413596033e041L,
40891         0x5ce791c46f6ff0f3L,0x8d134b899d907343L,0x7bd15c7786304df2L },
40892       { 0x2cd2ebc777c4a913L,0xcd86a39d45f07153L,0xe7e12d2e88bc423bL,
40893         0x478e814b0b3163f4L,0x78bd9c8abe8ec766L,0x6a5763e87709ce48L } },
40894     /* 57 << 238 */
40895     { { 0xb503ac624329d7f4L,0x3a900374488e3ce4L,0x8a11addab0d8dc97L,
40896         0xbea3ea2c0873bdf8L,0x0f57130115bc7adeL,0xbc98d2070b2b69a0L },
40897       { 0xaefc4047639d182dL,0x0e6db26feb3c44eeL,0xaf0f8b392a68a48dL,
40898         0xde65a6b36bf1e593L,0xe48f8fc989dbd38aL,0xad18a43bd8d285b3L } },
40899     /* 58 << 238 */
40900     { { 0x249d86007e9d48c8L,0xec6109ba109a54bbL,0x64f688af5ac65ad4L,
40901         0xb12c85b4be1796baL,0xcc258d31c9940da0L,0x59590853ff2f151bL },
40902       { 0x9e9edc4d401c5d1dL,0xdd9ad117f230b458L,0xc2c752ac962334b6L,
40903         0x3fab66ce27327e6cL,0xa363d3643816a47eL,0xa6fc57bec180bbdeL } },
40904     /* 59 << 238 */
40905     { { 0xd72dd5893ff345d5L,0xf87c17ae41e1d287L,0xadadbf525964d55fL,
40906         0xecc7f27af8b07db1L,0xa2dacfce6f2aa320L,0xc7936da72aa3f228L },
40907       { 0x2e9e6058fa504b87L,0xf2df43279d0f0634L,0x90d5ee22a4b768c5L,
40908         0x1ea9bf0b5b46ea84L,0x792370f45cc41770L,0xfd17823176c1a3f5L } },
40909     /* 60 << 238 */
40910     { { 0x4f1e1254604f6e4aL,0x4513b0880187d585L,0x9022f25719e0f482L,
40911         0x51fb2a80e2239dbfL,0x49940d9e998ed9d5L,0x0583d2416c932c5dL },
40912       { 0x1188cec8f25b73f7L,0xa28788cb3b3d06cdL,0xdea194eca083db5aL,
40913         0xd93a4f7e22df4272L,0x8d84e4bf6a009c49L,0x893d8dd93e3e4a9eL } },
40914     /* 61 << 238 */
40915     { { 0x4c124a904190257aL,0x09002f52347e517bL,0x2e9b69a1e5760993L,
40916         0xbaa49e53e26672bcL,0x9468fc3bf7820190L,0x637bccfe1f955328L },
40917       { 0x16fd33f26e0aa088L,0x9391550757b2b2adL,0x85e98842e9a0ace2L,
40918         0x8e2bd52b4fa787afL,0x8a86bd85644aeeacL,0x63490956c2814734L } },
40919     /* 62 << 238 */
40920     { { 0x5e902fb3063b3517L,0x0cd006cae5a65212L,0x597bd7804591c4bcL,
40921         0xd853d81be17c1d3dL,0xbc4bf68156e5d24fL,0xbc801615d26b5ce5L },
40922       { 0x1ffa5cd5caeecbe7L,0x16ec32a4b0203156L,0xaaad43269a857672L,
40923         0x0606ebf9189c6f6dL,0xb90730bd57e476f2L,0xed8d82b1d492fb05L } },
40924     /* 63 << 238 */
40925     { { 0x69a2a9b6ff824814L,0xe7b716e7c35c5da3L,0xb6781a5e9a5fde1aL,
40926         0x08bf695dc072e1b5L,0xaadf71462590a817L,0x490297f9c755c83aL },
40927       { 0xbd9fad6191c29990L,0x87b3abc226b6cb9dL,0x6975d59865fd0b64L,
40928         0x0fdc5267f4257158L,0x9f3e10585877bbdeL,0xb7f4cfb04297a2d1L } },
40929     /* 64 << 238 */
40930     { { 0xd699ea2d8d095606L,0x3cd080c51e0ddd3aL,0x46604bad66a8b35bL,
40931         0x0c779b624233fccbL,0x578458acbfd3cf0cL,0x6820f66596bf57afL },
40932       { 0xa9724245bf1f302cL,0xbbde24da277a6c3eL,0x0980a5b8c6be8c14L,
40933         0x6230e3ec774d62c4L,0xda1467d84fbde24bL,0xd9d68d07cc862204L } },
40934     /* 0 << 245 */
40935     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
40936       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
40937     /* 1 << 245 */
40938     { { 0x67c516347378f90dL,0xbc201a7966647082L,0x77fcc8dc9ee450cfL,
40939         0x8dd2b318b41a3e2fL,0xdf6a935e93bf0689L,0x75edabf3a92e5464L },
40940       { 0x49afcd9f604d208aL,0x372f0ea7d465ca48L,0xcdbd8ad2c7ea7810L,
40941         0xfe61571e550822b2L,0x744a4f9386606adcL,0x6beb3c9cd9d4e110L } },
40942     /* 2 << 245 */
40943     { { 0x1fef389ce700b9f2L,0x63029466425bc8abL,0xbd770a1437f04a33L,
40944         0xc7438e29d0169369L,0x6b265742e2377cc3L,0xdf24bf96c369fa4fL },
40945       { 0xdfdbcf470ad94e08L,0xd101b8617f75a7dcL,0x5574a0b82a9c483cL,
40946         0x0563fe942de43228L,0x58ca0e8aead1fabeL,0xdc3d9a8466023966L } },
40947     /* 3 << 245 */
40948     { { 0x383bda07c3fd20e5L,0x9619b1df5c29449bL,0x6f3c717d369f39bfL,
40949         0x1bb593d11a5a3900L,0xd0f07ecc2aec6c2bL,0x9d72eb2a4240b202L },
40950       { 0x35342f6cc50e4a0cL,0x701b46626b93bf61L,0xfcd6eb09ccb6a888L,
40951         0xabb7a6f785aa42c5L,0x952f8824aa4e5895L,0x49860db85c406582L } },
40952     /* 4 << 245 */
40953     { { 0x3667a7203955812bL,0x0d73483b284d1dacL,0xe084535efc62f791L,
40954         0x5bc1652b389faf7fL,0x40cf51683a71b7f6L,0x8a4b19fad4f39703L },
40955       { 0x823e754a2a8eff13L,0xf01b2021bffa5afcL,0x5639ee027225b319L,
40956         0x7533bc86fc282f16L,0x710009d2c69f61aeL,0xe30c499dbf65e803L } },
40957     /* 5 << 245 */
40958     { { 0x0da7ac1b734b4ec3L,0xf47fc1d012a2afbeL,0xbbbc99be87dce4a2L,
40959         0xf7264b4edd5c6378L,0xe9409305f618ffdcL,0xafadda9bd1846ac1L },
40960       { 0xe734f9d0a21850d4L,0x199cb44f8722a316L,0xcfe8704b38cae89fL,
40961         0x2db1e56b6b151b57L,0x116ca5cf69ce7b2cL,0xe9b8625f57de97c8L } },
40962     /* 6 << 245 */
40963     { { 0x18811bd5af247c49L,0xbc180793e124dbdaL,0xed978d3a21234fc4L,
40964         0x516dd9a70616ae15L,0x8f80677774e430b8L,0x9094256906e8fc49L },
40965       { 0x4ca03fb5a4e61235L,0xb91de709b617f361L,0x0898d82d0ed08bc3L,
40966         0x2bd712368cb08146L,0x45b92d45e213176dL,0x05894791f2bf5b9cL } },
40967     /* 7 << 245 */
40968     { { 0x0d79cb892695ea2bL,0x2cb0f8dfc88e538aL,0xc1b8dc3da80f36feL,
40969         0xd756fa6684f00cc2L,0xa6f1cdec9cb9efb2L,0x5c3f15a8a6a21818L },
40970       { 0x9a7ee3516995d09fL,0x88885463d70434bfL,0x18cecc6d4f7d5d33L,
40971         0x3f0138866b353bd1L,0x53bf798b0d9ad368L,0xeffd465a28dbc3eeL } },
40972     /* 8 << 245 */
40973     { { 0xeb29e44cb5d98ac1L,0xe47e57f80e227a4fL,0xd09c04943d2bf688L,
40974         0x3ab7799a47428dd2L,0xdc558d6be9aafac8L,0xc042c4cd87f9f6e0L },
40975       { 0x93842bcd89fb4693L,0x62dbc82f7068fbf7L,0x164552687e6d47b5L,
40976         0xab304b7a4c37eeeeL,0xdbb3d4e13fc412ceL,0x4f65dad0a726a2c8L } },
40977     /* 9 << 245 */
40978     { { 0xb25e01b2605cdaeeL,0x74abec55bc57969dL,0x9c57bfabcdd9d41aL,
40979         0xa3330e3f4a9e32a3L,0x5929a0d8e5792fd8L,0x830b4ea271ea2cdeL },
40980       { 0x80065ac1fd06d246L,0xa2b416e632e64a25L,0x3950bde7c0c927a9L,
40981         0x9951f3bd679d9b8cL,0xc235a274651b6855L,0xbfe5e08e5ad97bc1L } },
40982     /* 10 << 245 */
40983     { { 0x4409a5b6744ae145L,0x5e83fa0b7f620908L,0xfc489bec2e140aa0L,
40984         0x5805a462e3cae337L,0xe56e9ff7c2211c21L,0xb722f2b40c955362L },
40985       { 0xb098a32f41371f33L,0xe6cceceabb4923d6L,0x1cfbe2b3d82a311cL,
40986         0xcf9428936b98f917L,0xd60dc62492ef848cL,0x34af446e5adb5228L } },
40987     /* 11 << 245 */
40988     { { 0x0eb7e743796ce1caL,0x138653e5d851377cL,0x69c7c86f2b11c8e0L,
40989         0x878ec1decdf2b205L,0x03e6688aae0e8562L,0x20810666935a36a8L },
40990       { 0xc8ab7c7f26635c50L,0xe75cdb06744a21dbL,0x4e26f32fd720e198L,
40991         0xa1c6395ad8cded81L,0xb75dc6ea6ce4fc04L,0x71750b33004623b5L } },
40992     /* 12 << 245 */
40993     { { 0xbdef84077e60c447L,0x88570f712a65accaL,0xef3d4a400bb6aa79L,
40994         0x5c9d189060212976L,0x80179ea21d96c43cL,0x3f002e6d53d2948eL },
40995       { 0x14b2cc9149d78183L,0x7a549c71b496c279L,0xf4beac3f44995f6dL,
40996         0x5a34239800bc78feL,0xa874dc1b60e42da0L,0x3a984010cf5824d5L } },
40997     /* 13 << 245 */
40998     { { 0xe514ee06dfb9760cL,0xb8862d7577b8951fL,0x0144676ef8ee1141L,
40999         0x49561a3002eb3e82L,0xb3541c154ff9f897L,0x1670edf0a7a99791L },
41000       { 0xd41d603564aea7f9L,0xf66ffd092b3463b4L,0x0784e015c3b26fb6L,
41001         0x88edce33ec46f8c8L,0x1b1e25a3b6381011L,0xbfaadc03ff95ab97L } },
41002     /* 14 << 245 */
41003     { { 0x727a59fe0c7be4e1L,0x75a7d5e3f58ced15L,0x146fc0d990f569e7L,
41004         0x94dbccd2b7f1dc54L,0x0df1ef90b75bf232L,0x2943a082a2568190L },
41005       { 0x75f2f80d67837b06L,0x07e3506f24b44b6eL,0x7c30829ad0d2231bL,
41006         0x9ce577ca93277abfL,0xa19d1868b17549ecL,0x0ad6ff5525e8c4d7L } },
41007     /* 15 << 245 */
41008     { { 0x16b38dfe1c24d075L,0x3acd4c36992959f6L,0xdaf2fe88ac2da7abL,
41009         0x76e8ff0e89644935L,0xb8547c26e85f7076L,0x9f149faa1cdea7ceL },
41010       { 0x181a60729e125d84L,0xc4aef9fa18751ce6L,0x451c84660e00f00aL,
41011         0x662b3e7ac4e3e6b8L,0x57b7114ec6b64507L,0x07aeb1980b37fb70L } },
41012     /* 16 << 245 */
41013     { { 0x79d88e004516234aL,0x98dd3cb931f9cedaL,0xb528000fce7d606eL,
41014         0xc773557e2fa27fd3L,0x55b53dd3e19436afL,0x675084b3e10b64c7L },
41015       { 0xe583266556d56374L,0xf8f7fd2a307e2e60L,0x7b93bf537af3e3dcL,
41016         0x94fafa2cf47d298cL,0x94c2ff9a21121369L,0xa41de95f33468ff6L } },
41017     /* 17 << 245 */
41018     { { 0xebbafd4720f25aa7L,0xe2becad71ac444bfL,0x323356a092a944b8L,
41019         0x32feccc0c9a3cec9L,0x15ec3aaf5f9e96c1L,0x852142b5c12c8e62L },
41020       { 0x098ffcbf2b6865f1L,0xcca470e8733d7741L,0x0f8c0f5271945bf5L,
41021         0xfb654f6a08068827L,0x3a9e7d742a0e2829L,0xb90742b04b687763L } },
41022     /* 18 << 245 */
41023     { { 0x145afb651fdb2a7bL,0x93315b684eff5eadL,0x0cad1d20e40ca999L,
41024         0xda9b517a379a8173L,0xacb665780ca018cdL,0x1e9d919f481969b4L },
41025       { 0x5c9a058d68130364L,0x872e26620a62ce5dL,0xca598848acaabe54L,
41026         0xdabfcee18aa048a0L,0x16198d034ac52a57L,0x72eb5ec632b6d102L } },
41027     /* 19 << 245 */
41028     { { 0x13f2e1726a0c96e0L,0x55aed9e02d6b6f05L,0x3c919ba3bdce76c0L,
41029         0x647a525ffdda39aaL,0x5c0dbecc01a9011fL,0xa537ba8d9fd9dcefL },
41030       { 0x8472e375cff62467L,0x57672311ed5adf05L,0xd1e178dc6a423de3L,
41031         0x3ebcfe18d3ad3ca4L,0xb8f341d7ae802c11L,0x3f14c424ecdfdb7bL } },
41032     /* 20 << 245 */
41033     { { 0x381e0a136e4d2e42L,0x2f2a4ee183c0d752L,0x50d4647fc8e6532eL,
41034         0x7e210aeeb4e7495dL,0xfd147710bcd142a6L,0xddddb07b06429213L },
41035       { 0x63e06fc64548a6b8L,0x05d9b825904f92a6L,0x4b63fdbf9988ee79L,
41036         0x6cfa412f9b3366bdL,0x0dd5fe3dc8c61f51L,0x3ec77027be8e047eL } },
41037     /* 21 << 245 */
41038     { { 0xea7d01cfc7d81791L,0xfa6c0fe6e2264afdL,0x53c7eea363651291L,
41039         0xe58f8411f2d90f92L,0x4919b4c61faf0e14L,0x0c7dcd07148e98a0L },
41040       { 0xf9ef44cebc8bd43dL,0x3acfb6686f83cfb4L,0x34130e18f883693cL,
41041         0xda9ed2ae2d236c3eL,0xf54da64cc75cabdfL,0x1c3df906cc01722bL } },
41042     /* 22 << 245 */
41043     { { 0x686796c68d8f2286L,0xe0efaf9334d7cd1aL,0x84f9237c93b23708L,
41044         0xcb50cc8ee47f5161L,0x498b81e71f597821L,0x3c3f33e1a491079fL },
41045       { 0xee300c6dc69d1bc8L,0x279760e734778389L,0xe00ac0eb2bb8ed78L,
41046         0x9bf9a10e765c8b5dL,0xc7e95c0cf8c1e909L,0x3721300ae6e63ea5L } },
41047     /* 23 << 245 */
41048     { { 0xc03ad784d8dfd7aaL,0x671384a64b065a2eL,0x9b21e9e7bed74e87L,
41049         0x153b606cf889f75bL,0x7345c62a2aab6562L,0x270e4f445960cb4cL },
41050       { 0x515909fb885f0f88L,0xe43ee4f7067a7928L,0x5f906fc8fc182e56L,
41051         0x297ad5770641d0d1L,0xdcc45aa1d1b188b4L,0x8c817fb2ef062a39L } },
41052     /* 24 << 245 */
41053     { { 0x91e8c992044637f0L,0x01f7838827ee8e8fL,0x7c5e3f6dd095f5b9L,
41054         0xed7522fcddf3cad2L,0x80bb87056c57aacfL,0x495480b00cc5ff51L },
41055       { 0x964def7f04da2565L,0x8b0d0fe3afa72140L,0xcc75192584de66a1L,
41056         0x9acaf7fe075f07c5L,0x6505c2f81eeade93L,0xa2f35aa00e3cf58fL } },
41057     /* 25 << 245 */
41058     { { 0x1ad38a2d80548b22L,0x4d6120df47a37b3aL,0x6d64ef8c23e33cb7L,
41059         0xa1b5f51723c14ca6L,0xd2cdd425039a8e83L,0xa0a359ae229dd2dbL },
41060       { 0xde0788166c2779afL,0xd960453362d2abc2L,0xc5c48b20707c0e4dL,
41061         0xe452debd691c5407L,0x35c37ca882b0a299L,0x5b263014da3cde7bL } },
41062     /* 26 << 245 */
41063     { { 0xde34fa4586330487L,0x8391248153f61e6bL,0xd3f8fe742d04958dL,
41064         0xdade250f6df77d09L,0x3a3a16175649d9ebL,0xf9b77847a23abc74L },
41065       { 0x31d45db63b2e2c8aL,0x311ecc24f61a7bf4L,0x206029f9c56eab17L,
41066         0xb9d9ff35878c672eL,0x0d268c160fbf2d91L,0x2474b527a45f58d0L } },
41067     /* 27 << 245 */
41068     { { 0xad8e84be8436beaaL,0x8f07eee4209eb5d3L,0x47cba1d83ee61bddL,
41069         0xa081f21f72018544L,0x5dffddf493d88d16L,0x539a79efcac3952aL },
41070       { 0x990af57791bc452eL,0xb139d7d5012f5c6aL,0xf818c9f3fb180417L,
41071         0xeeb2d08475566152L,0x287571253f5d4ec9L,0x5a26505daa959798L } },
41072     /* 28 << 245 */
41073     { { 0x6536834e11b0f7b6L,0xcaa5271aad46c10cL,0xb5b6ead1fab43763L,
41074         0x25bf402ff7f7d8fdL,0xf33fb223e19374b4L,0x183ae9b75f348172L },
41075       { 0x1783c235078862a0L,0x9981a6c33cd368fcL,0xf58d2274fd627f9fL,
41076         0x37ac9c265c5e71cfL,0x167c8d047b0f157eL,0x24f522f8eefc7d85L } },
41077     /* 29 << 245 */
41078     { { 0xd25aeab3926cc973L,0xb3e2cffbdfc2cfbeL,0xdd259ed1de742b6cL,
41079         0x9d77c94e7b98bf81L,0x90f9067cb0ead3d1L,0x148f2a192a93fec1L },
41080       { 0xbae3c543c2850153L,0x0d330d758910422eL,0x06f80a9efa670474L,
41081         0xac6cee9f038431a3L,0x4900d17f5c22ee99L,0x62de04aa275a9774L } },
41082     /* 30 << 245 */
41083     { { 0xb6eefcc55f87fb35L,0x9766873b4371415aL,0x308337bd16b058bbL,
41084         0x6d5b1ddae1ac3884L,0x9307aa0835c4630aL,0x22cfcc0c23e91988L },
41085       { 0xbeb3814c37db0207L,0x19ab212fc4bbaf5bL,0x0801a1cf21abf22dL,
41086         0x9e6862cb3bd07332L,0xaa12ba0e4319929aL,0x0da45831f540f97dL } },
41087     /* 31 << 245 */
41088     { { 0x67d8ac9484bbf927L,0x7dd04e4e4ea01d33L,0x24ea6386f13def66L,
41089         0xa8a1acbe28f7f5f0L,0x5f578ffecc84c93bL,0xda8fe295f4ad116aL },
41090       { 0x4b610ae48483347dL,0xcac5c5596255f9e4L,0x19a0e043abcfe47bL,
41091         0xcd0cc9493966784eL,0xcc59a36743279291L,0xaa504087802961b6L } },
41092     /* 32 << 245 */
41093     { { 0xbe45d81a1b270599L,0x50696e7d97d6c603L,0x63c5a516b078ea89L,
41094         0x9f3efe41b4464764L,0x84580e24101e5232L,0x00850a1ac8ae8220L },
41095       { 0xbff4077ded55c404L,0xd74de734f2e7bf50L,0x4df4eef207e1c03dL,
41096         0x4ab3d0396e654d58L,0xb20056cd086f1596L,0xe4d08a278acd7cd5L } },
41097     /* 33 << 245 */
41098     { { 0x5510cebfe354510aL,0x48925b9349998c9bL,0xa05fc961e6d707a0L,
41099         0x85bf38f866ebc93bL,0xea637045254e615dL,0xae25e2e740d8459aL },
41100       { 0xa98583176efafd1dL,0x863931fd5a51c4b6L,0x3810d732d4221708L,
41101         0x959a2f70762a30f3L,0x7bdbaff9420ad3acL,0xba41b20bebdfe90eL } },
41102     /* 34 << 245 */
41103     { { 0x5e4d3280d3171eb9L,0x3fb715851bc65c5bL,0x6558962a901a899cL,
41104         0x78b7cd3e7851462bL,0x21228419ca8f6495L,0xfd8d8f9b2d8be765L },
41105       { 0xe5e90b92bc562144L,0x4f1f7ca1ae3243edL,0xd20178cd0985f4e4L,
41106         0xe5be263304253cbdL,0x1e34141c0d348fadL,0x0073fa0dad0eef45L } },
41107     /* 35 << 245 */
41108     { { 0x922ddb84d403f20fL,0xf7bccbb54681def7L,0x81a1200f6b580442L,
41109         0x64901025dc2f9884L,0x3746675aabe78edaL,0x3e750369aa6f005aL },
41110       { 0x140477ceeb00658fL,0xc76a320ccf89be62L,0x00761f21658c127fL,
41111         0x669186dfb8b6b03cL,0xbcdf1c36dcb26a2aL,0x94a7aba5da876a56L } },
41112     /* 36 << 245 */
41113     { { 0x1872f65c26163265L,0x9fbaf44fda52ad9cL,0xbec7addeeda47d38L,
41114         0x6a04dc3078094f9cL,0x2c73b8f15f4498e1L,0x504909efd4fcfcb4L },
41115       { 0x747efbc6b6b3a63bL,0x856e276de0dadd96L,0xa22459aaae3be3a4L,
41116         0x9ef59e732294a854L,0x0717d4e5d0e36205L,0x5a6afa3eb734cdf4L } },
41117     /* 37 << 245 */
41118     { { 0x6bd8fd330e938950L,0x8b26d7fa0f20c4f3L,0xd29a1121e0604d4eL,
41119         0x23d1cae60711c191L,0x460af39d51914cb2L,0x9cd04208547463c1L },
41120       { 0xeb80d70e493b7a0bL,0x182568869171652bL,0x9f3007ad76ca8b21L,
41121         0xf9bdeb4664ac10c4L,0xdaddd584284ae80cL,0x5c7ea28a0022abfbL } },
41122     /* 38 << 245 */
41123     { { 0xaef75aa7dc3c897eL,0x98bab5852e6432a8L,0x522b383d83fb0ee5L,
41124         0xe0d8620f056a8589L,0xd63525dd39352633L,0x74362bbfaeb985dbL },
41125       { 0x11419f4e8c0f17feL,0x3ca918b0494ba972L,0x39f2bc3c6e074e25L,
41126         0x3bb66618fbbf0d60L,0xee60c8f88579fecbL,0x916f3fe92a9b905fL } },
41127     /* 39 << 245 */
41128     { { 0x14ed31b6482b668dL,0x8e3e10db5b65978bL,0x72ff92eee8011bafL,
41129         0x5183d0bde1143531L,0xdb628188f9c740d1L,0xd23cb9c57570e3d2L },
41130       { 0x9e893cacd2745832L,0x49762940ef4a2b31L,0x02f6f892324361bfL,
41131         0x332e089dd7a881bfL,0xe9303153f788f52dL,0xcd6d15564e7f1bd7L } },
41132     /* 40 << 245 */
41133     { { 0x8caa623d408b62b7L,0xa58aa0b0c0272b41L,0x089af856ee285bfdL,
41134         0x77b461f6d0674ecdL,0xbaa9d9b38d6f6612L,0xa8f26e12590669f8L },
41135       { 0xb164340c5ebb5e28L,0xfdc11f7401ea89a8L,0x73c03b9176e4346eL,
41136         0x6a678eb17caad5fcL,0x103ff0790a87803dL,0x25d6fd2af7430a94L } },
41137     /* 41 << 245 */
41138     { { 0x72cc0aba66116d84L,0x642c88681039c0fcL,0xaeded9e6d96a7423L,
41139         0x4ff4163ccc5fea03L,0x180e4d3616483ec5L,0xefde910a7f6332c1L },
41140       { 0x8042696283367060L,0x4edce3e8c28af356L,0x2452e4de965139daL,
41141         0x15129fd9547477a1L,0x7f628b5ed80998cdL,0x7c56d44541054b54L } },
41142     /* 42 << 245 */
41143     { { 0x4c3f81184d3d9da9L,0x332072f9e1e71487L,0x8cbf7284759ef371L,
41144         0x3d13d85cb98ce007L,0x507b467f980f4fd5L,0x9853b98bc74fdfdaL },
41145       { 0x94b81534993f5e19L,0x316b761beeca71adL,0x09820a2331c04080L,
41146         0xc71a9bd4420e3114L,0x569f813822ea67ddL,0xe3ec5d2b3a41b079L } },
41147     /* 43 << 245 */
41148     { { 0x6085b24a19bb6f27L,0xc2f18e8f64dcb82dL,0x8ff89ed91fd3888dL,
41149         0x9fbe31db0e525a5bL,0xd52dfb5df0527573L,0x90288a3f703193c3L },
41150       { 0x87bb5d30bb1ce380L,0xb6c9a4c9f0dcf59aL,0xcbc52966aeb86e7aL,
41151         0xd151178a9a1636eeL,0x48342994e4b48c74L,0xe5bced925af80bc2L } },
41152     /* 44 << 245 */
41153     { { 0x106882534918179cL,0xdeb69dde08143b36L,0xfb3c527b992363faL,
41154         0x11d05e93e9393832L,0xe3249558383a0f59L,0x2d0f3e11c234ab5dL },
41155       { 0xd50a30d95c599ae7L,0x6d7abc6ce9f98316L,0x3d190629060ab6ddL,
41156         0xfd58473c81d69afcL,0x841193d24b782d62L,0x4f72696da771226bL } },
41157     /* 45 << 245 */
41158     { { 0x288895d056e467a5L,0x78166a95e025a5b3L,0x89df640e895835dfL,
41159         0xdc2b61f483dcbc50L,0xbeaa7363110dd6a0L,0x2346a2a5e7fdbe3fL },
41160       { 0x379ae5fb6947a9c4L,0x9dcf01956370a372L,0x34c3c6c3d70d9a24L,
41161         0x98ee14b7fe6a3d0aL,0xdd37708bba8ce5baL,0x785adb86a15c3672L } },
41162     /* 46 << 245 */
41163     { { 0x4c93de89c5ff194aL,0x56aef366fdc94109L,0xc8cb2a0c5b0b23d4L,
41164         0xd73f1cef587ada16L,0x7138315a364b1463L,0x43940ef59f6bd411L },
41165       { 0xad068e490f4a533fL,0xe8a772a33c7dac91L,0x74b815fc107998b8L,
41166         0x4b8fa9db92699ee7L,0xfb2de4bf4cbb023dL,0xe5833a390f67c29cL } },
41167     /* 47 << 245 */
41168     { { 0xe985acae7fc4fa91L,0x7730e38ec66c4282L,0x4b971449f4bda67dL,
41169         0x55261be02b001f47L,0xccde0c7126d0d8e6L,0xa7ac56fd701f6febL },
41170       { 0x2488b28552642a53L,0xeada397c58fcfabbL,0xa3fc0452b679b0e3L,
41171         0xd0ef09ffec2e921aL,0x9fcfd991575fb70aL,0xf4adcbbb366cb10dL } },
41172     /* 48 << 245 */
41173     { { 0x517075af5faa0cb7L,0x400a22c1efaf68f4L,0x320ce9493b86f639L,
41174         0x511565717f296bf4L,0x0919607a96108276L,0x4fcc39a02f035900L },
41175       { 0x5d13de7cefb73f3fL,0x19d725c5081c38e3L,0xf1b28089c0f58697L,
41176         0x2adcd1a30ca7ca20L,0x96c07f42c21e1be5L,0x94d28cacbaa0aba0L } },
41177     /* 49 << 245 */
41178     { { 0x0ff4983fd64cfa4bL,0x2c49c4918c55942cL,0x6093eb7f98eb20baL,
41179         0x1b33296a060497baL,0x32776a53c92d7b47L,0xf367e6b25241de3dL },
41180       { 0x711119813b65228eL,0x2e5dc541e1394451L,0x940a4a0f98ef33e5L,
41181         0x1a395be32cd4315dL,0x4d49469f3c2e20e1L,0x5384f4b95c314f95L } },
41182     /* 50 << 245 */
41183     { { 0xdda2f3a0a256813fL,0x4363d190ee6cbae0L,0x61f4d607930d0094L,
41184         0x6767ff4817021739L,0x8450091bd2c5fadbL,0x144d02fe870710a8L },
41185       { 0x73f45d9035524b7bL,0xccc7856b04615373L,0x0eb5cd436f081dfcL,
41186         0x9c433cbfe3a70d59L,0x9ee70f509818349aL,0x16de27347241c634L } },
41187     /* 51 << 245 */
41188     { { 0x02a24c5cc47f7db6L,0x519242cd33d60e1cL,0x543f39cf7244a636L,
41189         0x4ae15d698deb181eL,0xbaec81ef44261806L,0xe5cb18bb5fbf13abL },
41190       { 0x7534787a032158e7L,0x770e1e34da0d9a6aL,0x251bfa7158f9baccL,
41191         0x12663214c8d39905L,0xb7bfa81b39c3d64aL,0xd6d439ffe3ee296cL } },
41192     /* 52 << 245 */
41193     { { 0x192ecf72d0aa048fL,0x23af774063e40c0fL,0xe4d98e41d804d367L,
41194         0xd868cc885405bfc3L,0x96909a5b6f6ece88L,0x16b05ad2bae60dabL },
41195       { 0x7382a1dbde621949L,0x569bb6c9c47cf6dcL,0x892da43e1f2d098bL,
41196         0x6bd959b9bfa25649L,0x90617c419cb48f9eL,0x36059b73f110b22dL } },
41197     /* 53 << 245 */
41198     { { 0x1817b140791af82aL,0xf4a44cde042870c5L,0x60b8414ab5c0405aL,
41199         0x3b00f5ddf4dc4a9cL,0xa61aa0cfea81dd5bL,0xd43c37422554907dL },
41200       { 0x3fa264a620569ecdL,0x2cc69c2ba5a46190L,0xecd4f6d3dddd072eL,
41201         0x41083b72dda8de01L,0x4bc047f110d6f156L,0x7164b432cac3203aL } },
41202     /* 54 << 245 */
41203     { { 0x7e7e08f401d45bfeL,0x04f9c9ed0e2d17e2L,0x3213556fa55bc148L,
41204         0xc58983c734449f0eL,0x463217afaf2bb219L,0xe08a51a2f8fba72dL },
41205       { 0x2f44991e974d51f0L,0x15f2171f3f12af56L,0xbcc919de24cf01f3L,
41206         0x9ea371f269399bd0L,0xae8a8eca3ccf4574L,0xf0535b83ae499429L } },
41207     /* 55 << 245 */
41208     { { 0xe9ad8928f72305e3L,0x4144b6b9fce1295cL,0x672732a0c3487eb9L,
41209         0xf19d09a6147f70b8L,0xf45f6a11362a7684L,0x84ce4f25adfbbdadL },
41210       { 0x31e4bb0ac3403b48L,0xefc861b9b478ab38L,0x3323df44a8320c49L,
41211         0xa2838aa1ed4f14abL,0xc80e30cc63bf7df7L,0xdd2d5ef9f15ec5ffL } },
41212     /* 56 << 245 */
41213     { { 0x3027c1698d6f8572L,0x89326850111e64d7L,0xe6eb6cd31b8b0179L,
41214         0x0d2d27ea6dd5a4a7L,0x41682c0007c82f11L,0x5a01c54c81075022L },
41215       { 0xf3903f51fe7220d0L,0x75daeaba1f8e66b2L,0x1b625eed470bd3b2L,
41216         0xa46398a7e85a6293L,0x8ff6ef8c805ad640L,0xb3430f6795bfa3a5L } },
41217     /* 57 << 245 */
41218     { { 0x55d31765bc9341b7L,0x6530526ba312d125L,0x57ad29c02e9eb238L,
41219         0x31658a8282292155L,0x4d3417b169301639L,0xb38d6199e48c3d1bL },
41220       { 0x4399d5ddcc5202eeL,0x4b1c293a5076cc08L,0xa46e87f5824171b0L,
41221         0x16f75919e4cb40e9L,0xd086562dac35d85bL,0xc2b41ad532713f5dL } },
41222     /* 58 << 245 */
41223     { { 0x2da6d2ca3248f02aL,0xae49d2fc675de73dL,0x4abb1a65cfbfee63L,
41224         0xc6cea22cf1246350L,0xdd510cf82d3faec5L,0x8b7d1b0865e7460bL },
41225       { 0xc5b39c802737b182L,0xeee61e0d8963c709L,0x9cf9da61793e7179L,
41226         0x630637e52a295ba6L,0x18b85c9fa3881ba2L,0xca091a9464a94fe2L } },
41227     /* 59 << 245 */
41228     { { 0xcb68739f0bdec121L,0xf4907b3cd3811dabL,0xcf1b079b8c5d7707L,
41229         0x9ef9002d2fc6a56bL,0xc4c9d069809e8b64L,0xaf86a3db90d0eef4L },
41230       { 0x30a52f994b24a04aL,0x03bcd7a958574ed0L,0x330ce8a1a5b52b8bL,
41231         0x632b3c2d5e6a8ed9L,0x7b080a2c18369382L,0x12173e5f65187ce1L } },
41232     /* 60 << 245 */
41233     { { 0x027f654feabe8ef1L,0xd9d327e481a51834L,0x9215df61980faa43L,
41234         0x76b4f8003ba045c1L,0x8f3ce587f400732cL,0x0abe1f34f133a3caL },
41235       { 0x2ec690526de4f504L,0xa297cee4cb7ff026L,0xa31a76e3cadaefe1L,
41236         0xb701391e1173a958L,0x0a4279b08c8768f1L,0xd58927c12f8ede03L } },
41237     /* 61 << 245 */
41238     { { 0x71ea38454e630b0aL,0x4f696b59119263abL,0x9e7cb293f9cbab69L,
41239         0xa448d591c60ea8d2L,0x5021d4ef7d89eb52L,0x1a1ea5e3787663b1L },
41240       { 0xa95af4eb05bedc8eL,0xfe72effcc2fba411L,0xa88b79bb19a2c6bdL,
41241         0xbed948fac84c78eeL,0x022dcf3d5ee7455eL,0x0c39c3689f56accbL } },
41242     /* 62 << 245 */
41243     { { 0xe0e818a8b77c9de2L,0x0dbaea885e07f77fL,0x6ece83b97b1f96f0L,
41244         0x3c02e59631733a5dL,0x44bcdfcdd14828ffL,0x2791ca54b66f6107L },
41245       { 0x1a051c5a6198f24dL,0x9cd5f09a17627301L,0x64323392004a0cb1L,
41246         0x75d6819b3cc13e05L,0xf5cab2874a58768cL,0xbe090e83e3ca9332L } },
41247     /* 63 << 245 */
41248     { { 0xd639e0f3ab9b278dL,0x57f3f8cafa2407b4L,0x6720549f6c11f6abL,
41249         0x6ad1c608e784308bL,0x62c31e4a196babbbL,0x764b4deed1d36447L },
41250       { 0xf44efcefaf4407bcL,0x7c1f45dbb3ca82a3L,0xf43e4a8773b952b3L,
41251         0x145cd2d6ff478bbeL,0x11ef2df450c8e708L,0xa2af06f044491734L } },
41252     /* 64 << 245 */
41253     { { 0x8cd6c9f7c90b13f5L,0xec0c187d52a9d469L,0x9c0db0f589b8ad2bL,
41254         0x692a8db70d9c999dL,0xa407fd03c9f84ab4L,0xa5742fd1cc9a906cL },
41255       { 0x4813a765c8e72867L,0x9c65943de2e9a10fL,0xca6bf2934fa0a23eL,
41256         0x1dfa3af7cb1f8d7aL,0x28036f5498d10c53L,0x7bfbcaf20e012c13L } },
41257     /* 0 << 252 */
41258     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
41259       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
41260     /* 1 << 252 */
41261     { { 0xa53f1a104ec177f6L,0x4a2ef9aa3faa5ca8L,0x30efed8532976d13L,
41262         0xcf5ada165ee692d1L,0x3ceda69d259e7cc1L,0x2aae29e99baab472L },
41263       { 0x7ee5baef737cc8bcL,0x1717af747fe68dedL,0x9e5c8ddacfdaff63L,
41264         0x575c8db9cec07693L,0x9afc8ae0fdfb509dL,0x27836d3685651697L } },
41265     /* 2 << 252 */
41266     { { 0xa7342f9517eb9264L,0x9264a6a00a8a6eefL,0x50e48bf07471c384L,
41267         0x729e5ab130827f34L,0x17199191ea779c23L,0xd13ab8539fa9fd58L },
41268       { 0x7d5799373b1d773eL,0x65f8e7c6d196c3dfL,0x253f7d51e8541725L,
41269         0x107a793dec720355L,0x1c14d0566aa16268L,0x9dc5fca38bbb231bL } },
41270     /* 3 << 252 */
41271     { { 0xf5689c5e12b09f53L,0xc1da32e19e87ff7dL,0x1af879d012eaa533L,
41272         0xdba775e6d9271e94L,0x60f8507310e63c34L,0x445f3e21a686a24bL },
41273       { 0xed5ca8fa15bc277eL,0x9839198a364ab7abL,0xe2ee39426d90a7d4L,
41274         0xe5b3e4cbccd37e76L,0x9013bd08f1412e0fL,0x82f5c532ce999048L } },
41275     /* 4 << 252 */
41276     { { 0x61d0e01bf3fe3441L,0x674e52332af47609L,0xd4a4e224b362902dL,
41277         0x45923c129e0a5d16L,0x4fc2bdd495e580e9L,0x6d1d974ca8c3d954L },
41278       { 0xaeff1135d0bbeaaaL,0x013ab5b31baafc9eL,0x80907d3eab8f9f31L,
41279         0xaf2c12166d566c15L,0x0082daba952e6fa7L,0xa46710032df9e03aL } },
41280     /* 5 << 252 */
41281     { { 0x91b379c63223d561L,0x8cb7b8cce203417cL,0xd0f44208176b3b81L,
41282         0xd18c2118aaba5cd3L,0x4aed5c9770794f9fL,0xfc540dc4f4c33894L },
41283       { 0xb8e6798a0153a8a8L,0x6537dcdf43c4b0c0L,0x1b7eef39ab557397L,
41284         0x175e3934b7103105L,0x943abf4a82ac89e4L,0xeb1a61f957ffcdb8L } },
41285     /* 6 << 252 */
41286     { { 0x99c2b4cd66476227L,0x576a4b0662850cd3L,0x067bb66b5a352b7aL,
41287         0x3c7d6fc43ec757edL,0x2f69291cb9d36adcL,0xc7c0f3257c9143a4L },
41288       { 0x768c3c400627fee2L,0xc214d81da8fde577L,0xd86e4b025299ea1aL,
41289         0xbe46b7e91a2d4005L,0xaf865a169317fa60L,0xfbc3268fcdce2fbeL } },
41290     /* 7 << 252 */
41291     { { 0x66fcba52d8fbe900L,0x9f16434c861b3e33L,0xa371b97241b4305fL,
41292         0xb2d858ce25b6af89L,0xbab07d53275f9e8cL,0x3b5951f8d525bef8L },
41293       { 0xebf79e3ca1755b0aL,0x4e6256e7b467b1c2L,0x7dbd8b66cba1a659L,
41294         0x88ea40138b1eb8b6L,0x210ac1b38fa6436aL,0xe93e22c23df40e33L } },
41295     /* 8 << 252 */
41296     { { 0x5f79f0df1fd64063L,0xd2d39dd381e118ecL,0xd631a68e11571c5bL,
41297         0x6d072b4e2474faf7L,0x5e043a6d862a924aL,0xcae58bd8b0fc8d7aL },
41298       { 0xf54bb7f3b1351f28L,0x4588b6280413275eL,0x81459f4c5909ec04L,
41299         0xd28cda25abd16460L,0xbb676d018db1c69eL,0xc0056e2dac5036f4L } },
41300     /* 9 << 252 */
41301     { { 0x1ce187bf323169baL,0x1dfaef8661ab5073L,0x1893dc7b2ae468b5L,
41302         0x0748ec86123848d4L,0x0d2877b46a96eb12L,0xb6063e75e9322495L },
41303       { 0x1cb17189d7d1828fL,0xde41f11944d1b318L,0x7ce0f87610f0b74dL,
41304         0x2c7c91ee7a98f86bL,0xb641418e750f3ea1L,0xae2cd2e280094054L } },
41305     /* 10 << 252 */
41306     { { 0x9f6c6ed598d8e086L,0xa9ad63ca2d3fad85L,0x055b8323fe016926L,
41307         0x039fbe287b3a8d68L,0x544a8bf5fb6b315aL,0x04b122fb647fed85L },
41308       { 0x1e9807fa98085b1aL,0xb78a36a771c12696L,0x4ccc1a2cdc22f95bL,
41309         0x6ff4997d54d1e818L,0xecb5bdc2f08c22dcL,0x6e07e2c146a27762L } },
41310     /* 11 << 252 */
41311     { { 0x602077aceaaec565L,0x9dacf68224568aeeL,0xa490fc1e9cfcce26L,
41312         0xb2ac94b3303218baL,0xc0208604ab33f9aeL,0x801663b6e39a6668L },
41313       { 0x1defbb42961b0927L,0x688b445e83e318b3L,0x34fe2830c11648e8L,
41314         0xed56e99360066dfaL,0xa5f30f9a07671eccL,0x02c40260a3222e8dL } },
41315     /* 12 << 252 */
41316     { { 0xfb2a11b4ea347db9L,0x2360667e03350681L,0x1aa6e720a02a1261L,
41317         0xac2bd2eba110bb21L,0x8ab2f9063c9b4568L,0x5f46263d5ace1f17L },
41318       { 0x97067801eae704c8L,0x35d2637ea715d313L,0x24cdc3d0c77573daL,
41319         0x6f97cd07e2562b2aL,0x27bcd62d5afb29e4L,0xc38ac1c55d29f5d3L } },
41320     /* 13 << 252 */
41321     { { 0xd9c38ba47c88f46aL,0xdd07c4d79946ebe4L,0x908731dcce0e5417L,
41322         0x43088d11e145839bL,0x9d37419d07b61543L,0x440cdbcd2c3c7c4cL },
41323       { 0xa6a6fed673216db4L,0x15ce171a198cd32bL,0x198c256974e6a085L,
41324         0x5fec853f3dc2a714L,0x329250bdd5923068L,0x1d82373c9f6195caL } },
41325     /* 14 << 252 */
41326     { { 0xa8e17be53777b2aeL,0x534e3a3bcc284224L,0x7f34ce458192cfa1L,
41327         0x0009a72966d0e03aL,0xc42053ba524ce1fcL,0x834e98fe6d092e58L },
41328       { 0x400c65a1c8b0f751L,0x268bfe6f107965ebL,0x0f141c0332e0bc69L,
41329         0x33bc6e64597a2264L,0x039a4ae9454a0d6bL,0x2cb0bf550b07ddaaL } },
41330     /* 15 << 252 */
41331     { { 0x69056cbe63769bb3L,0x710a67d385044d35L,0x971ccbdeea855332L,
41332         0xd655163a0fd0d210L,0x619c3f9adbb8a8b9L,0xd156f73d49a014e2L },
41333       { 0xd04ea0a5a129a598L,0xc9c04da6fa2f12eaL,0xc0ed654ae98b3187L,
41334         0xa254eef6a82f9ec4L,0xe537695fa386a72fL,0x170f1ed4a74eb453L } },
41335     /* 16 << 252 */
41336     { { 0xdbe04c3044ce3ad8L,0x995fbb1b4ce8aad5L,0xdbf8b54670911457L,
41337         0x9e683b5b3f7a1757L,0x7b89a08a9c7bd62cL,0x448865a40b3fc97eL },
41338       { 0x0ac9abfc3bb01e94L,0xa07760421e756124L,0x0aa6c335d9deed97L,
41339         0xe270580f72603e08L,0x70857a946c783bb2L,0xa0047774caa929aeL } },
41340     /* 17 << 252 */
41341     { { 0xf99a63c5e8c4a440L,0xc7fd1d1419d65168L,0xfb6c21d696d5e80bL,
41342         0xa4a7304944b833beL,0x093728d5127b1599L,0x9046cbe2c89e7195L },
41343       { 0x21e2863c146a80d3L,0xb1ac7e1bdd559c13L,0xbe5ba65c72c39063L,
41344         0x7da5feb87722cbc7L,0x122615d0f17c02c5L,0xd44f477179e5fcb6L } },
41345     /* 18 << 252 */
41346     { { 0x0d913830e2d28da9L,0x0465920a8a164385L,0x79959ce1b0ad65d5L,
41347         0x6c94690759a966d6L,0x4ccb0e5e832c24feL,0xa8c5bee5d6af2a10L },
41348       { 0x264dcc118c5791fdL,0x719f23ac5b58ce85L,0xfbff8a2f8e54b029L,
41349         0x0c9240be864e959cL,0x8f7c21733c37c665L,0xfda848d9f164d354L } },
41350     /* 19 << 252 */
41351     { { 0x203ea731f35d11f6L,0x90610383f9f9001bL,0xb9d3c302ed97e6f2L,
41352         0x4c529736c9a67e6cL,0x2e440b1781f6597dL,0xcc798f5616aabf20L },
41353       { 0x490f50642832ffc5L,0x585e462a7a19b125L,0x99d73e391b06d98bL,
41354         0xb817e97aab696d7bL,0x9df2f65ac28dffeaL,0xa48dad47045fddd7L } },
41355     /* 20 << 252 */
41356     { { 0x2878c20d62e5fc09L,0x419ed2ece7f012abL,0x3bbc853fbaa21e7eL,
41357         0x412bc3c54844c009L,0xc4b150508b012199L,0x9d160f4c310d5fbfL },
41358       { 0xcb61b69214f60becL,0x436348c064092943L,0xce8c136e3185cde0L,
41359         0x97b034f68be5dd85L,0x7697adf92701631aL,0x2ddd86361fa6e8a0L } },
41360     /* 21 << 252 */
41361     { { 0xde8c2c963e9ff7faL,0xfdf1e25d8b75bbeaL,0x28ba3be59c146264L,
41362         0xfc1df52e81fcb0c9L,0xf9341c43af3ba66aL,0xe81c22470d72188eL },
41363       { 0x2ff00f1069c62b9dL,0x1077962e71498d24L,0xdf35b17ecc34ece7L,
41364         0x3516c33687eab2daL,0xe71cf7ddc72b7911L,0x6c9233d92c286c56L } },
41365     /* 22 << 252 */
41366     { { 0x7ce6389d162754d7L,0x8f03eff514e0d8e5L,0x9fd2c896ef402e31L,
41367         0x4a4bf70a2195b0e6L,0xe6043a383c8d82dcL,0xd86b647e8bed7c65L },
41368       { 0x21bc56f4a4c87660L,0x8c99d6270c05564cL,0xd6b82e9014050ee2L,
41369         0x09bf6a3eb6b11f0bL,0x9704b36731dcd6b1L,0x871c85c85e3d44caL } },
41370     /* 23 << 252 */
41371     { { 0x93024430e5236badL,0x4c5872728b883d1aL,0xc265b94bba68d3bbL,
41372         0x7d8fc82a648d9b7eL,0x57086e6e75ac264cL,0x4b8a157102fc9ec8L },
41373       { 0x83ae238e86849a9bL,0x2eaad9b8a69acccfL,0x2d82c029d44eaa39L,
41374         0x8f5b9ed833d7a556L,0x05c83328eea8b609L,0x537069efc3c96005L } },
41375     /* 24 << 252 */
41376     { { 0x292f8874b25c4d4aL,0x54961fd87e79f526L,0x949a1fae008c6ec9L,
41377         0x6ae82f0d525524fdL,0xd1f6f4ef2edbcb1aL,0x41617a6d977ddffbL },
41378       { 0x6ae38fb71baf0668L,0xa79ea228d538ab3cL,0x70babb05fc44e273L,
41379         0x247384fbbca85910L,0xdc0e069b6a564959L,0x37a9c5521a7438adL } },
41380     /* 25 << 252 */
41381     { { 0xaf2c87828a4b7251L,0xcb5ebfd3c1bc7f72L,0x160b77e560579615L,
41382         0x297412e3c10f067cL,0x5ad0681ef7df86c8L,0x2e8c63529b3e3afbL },
41383       { 0x32372cc74cfd3266L,0xb7abc8baa820f8b5L,0x857d545519f34baeL,
41384         0x5c055ce920ed65beL,0x1d8a59ca537ad6b7L,0x1135adcf7ad88633L } },
41385     /* 26 << 252 */
41386     { { 0x47e6ed9530034df1L,0x1839f488321bed8dL,0xb6b67d452ac8a9f9L,
41387         0x2fe1efc6182e4a63L,0x2da34bde0c1185c7L,0x6e5d1621edfdf9aeL },
41388       { 0x3bae9db77120804cL,0xf094b0676d986ef3L,0x029c9246853e24ceL,
41389         0x3abacb1b25a82463L,0x58777e1389c5616aL,0xaedd003b5aeed714L } },
41390     /* 27 << 252 */
41391     { { 0x7494e4319da5fb0dL,0xc684d74bee3fd6f3L,0x12fc899403a87d91L,
41392         0xc4c55e692d6e3931L,0x63e1255896336788L,0x36c297a5f78371fdL },
41393       { 0x4cd3f9c4a63b313eL,0xd2825e17c543e507L,0xd37e36d06a4e64d0L,
41394         0xab9559ec11872774L,0xaf168b34880a5d00L,0xb0c916a10c0c3f42L } },
41395     /* 28 << 252 */
41396     { { 0xd389397c834eaa9fL,0x2271ea0d2a5532aeL,0x5e59a23ae1f92e9eL,
41397         0x9f179b8c1f7b91f5L,0x2a1c10028de2dc8bL,0x6ac83e58787a276dL },
41398       { 0x0facd4756d9d1571L,0xcceaae5e4bf118e2L,0x4e8008b7620fbecbL,
41399         0xff633fef7a1474cbL,0xfbefea80ce377357L,0xebb9a9460feb7724L } },
41400     /* 29 << 252 */
41401     { { 0x0bab441ae9803b71L,0x309ef14684e2e21eL,0x17ccd5b6851b6519L,
41402         0x8b5e7e300126f470L,0x0560cb9d847eca03L,0xc45850bf11ade256L },
41403       { 0x08603f5c3c33dbbdL,0x21887bc9708ae545L,0x3bd25ad480014ffcL,
41404         0x5eb0f89fd3a64409L,0xbca2726b4c3dd83dL,0x611afd2fe4259797L } },
41405     /* 30 << 252 */
41406     { { 0xd9cb4233c4f4e0e5L,0xcfc0576818e49029L,0x8e9c8360526f05a1L,
41407         0x8e83037aa56d6c3dL,0x33507065c47e6742L,0x5ca2c8d8788b5da3L },
41408       { 0xf355cee9cfb0b6feL,0x0e86fd73973ddafdL,0x27fc6c56d44fd889L,
41409         0xc9ab416ff7d93f3cL,0x778c3f160d063d62L,0x175e5d920b5085ddL } },
41410     /* 31 << 252 */
41411     { { 0xd62406873be63d8cL,0xe8c93b93b80059a6L,0x33bba7dfe065854fL,
41412         0xcb26543f36b34e45L,0xc17ee58dd2d0c3d5L,0x69752f49bae1bcadL },
41413       { 0x87e31b429b20106aL,0xc520424b06734eb5L,0x993240afa896d17eL,
41414         0x5238851bc2762a62L,0xce399f9d506d7dbfL,0xa4822d23040cc7d4L } },
41415     /* 32 << 252 */
41416     { { 0xf071c9878fa06859L,0x0083e5311a52390bL,0x845eb12a61483bc2L,
41417         0x17471d801caf6dd6L,0x7b603616ddc21b92L,0xd38fe0f6b992536dL },
41418       { 0x433f0652297c25a4L,0x03d4d8fcb1c4bf41L,0xdf617386a9adf49bL,
41419         0x4bfeb3992cb2944fL,0xbf288427b3d9c076L,0x17818c3e965b4576L } },
41420     /* 33 << 252 */
41421     { { 0xfbcff79f6df360c9L,0x342f9ded2bd94c22L,0x2dc5f999283f2300L,
41422         0xbea18d9893cc3330L,0xc197176269a7da4eL,0x72de17ee93ce69a3L },
41423       { 0x6c354a6184170a91L,0x031ce0debe47ef92L,0xbf256fd418658739L,
41424         0x0395088a0d037d9aL,0x61179c42c5a05970L,0x0d5a9f7db8b6ab64L } },
41425     /* 34 << 252 */
41426     { { 0x18be1d605a44a8dcL,0xb512d945f1d18ee0L,0xd2e1f6623af39ec0L,
41427         0x440469136c223676L,0xe7a860836a60a4d8L,0xaefcfc2dc7e09d3bL },
41428       { 0x175817fad685c9b7L,0xe20b6c9e4b9d0557L,0x9212e7bb51fe560dL,
41429         0x748aafb7608b53c4L,0x86186d4fd9b06850L,0x4cc6041376512c08L } },
41430     /* 35 << 252 */
41431     { { 0x2d5be3b00c127e46L,0x8c6f38fad9b04e47L,0x49c444098736f31bL,
41432         0x5469ae47f53aa908L,0xd84856f3492fd120L,0xd04b1fa20725e199L },
41433       { 0x50c2e80a8e7056f2L,0x415db04c9ba2e259L,0x8e4c56ae2eb201e0L,
41434         0x449e4d9e5082ce94L,0xb5ff077a7345459dL,0x96d10f1e07330e72L } },
41435     /* 36 << 252 */
41436     { { 0xac77126e3b3094b7L,0x7c1e7673bdcb616fL,0x90491f8176993114L,
41437         0xf17c08a8cc8da63bL,0x972a3bffaa050364L,0xdef45b7f65a9cd57L },
41438       { 0x105ec5ba2b9b889eL,0x7066821150f7a61eL,0x11daa9dbb1d63a40L,
41439         0x6065451007790568L,0xfaa219cebc2b6d2aL,0xb1b8ace93e5163dcL } },
41440     /* 37 << 252 */
41441     { { 0xf8042ae2859b0f22L,0xd8a5d3a200d8bb8cL,0xe85c596189faae14L,
41442         0xb7d636f906611c0aL,0x35b68bbdd2bc8957L,0xc86f5be5b7cf558cL },
41443       { 0xb602a00369c17e74L,0xc39479cfd8a1fc01L,0x6dca5c81f733237eL,
41444         0x9c8cefd41b2e2cccL,0x2e32a323caacb4b8L,0xf7406874ad639090L } },
41445     /* 38 << 252 */
41446     { { 0xea3a358e24c1bbfdL,0xfd32af33571400aaL,0x2ec3d44da413949aL,
41447         0xa0d8594a7bd121f8L,0xb32997a1d6b6153fL,0xa0f48d98b9469c6eL },
41448       { 0x236b7a18fba15481L,0x49dee3bd98ff970fL,0xbc27ac7a7ee97875L,
41449         0xd1acf2be28ac6279L,0x92e7ef02514c8328L,0xb2d7a8304f48b497L } },
41450     /* 39 << 252 */
41451     { { 0xcaad0554d95946a9L,0x992268c973ed1281L,0x6c0b1edf7b1b25e1L,
41452         0x4de2d9f81d6e73dbL,0xe12a4f1c5a2950a9L,0xe0cdf7af36ac18fdL },
41453       { 0x16e7332d1abcc9f5L,0x4dccc1505bac1c75L,0x1b48bbc141f8c231L,
41454         0x3702cc2693692a4aL,0x9e9e53dd311c5dabL,0x27bc006cfe5d9fd3L } },
41455     /* 40 << 252 */
41456     { { 0x2bb798ff689f43efL,0x5813e4415f26ec54L,0x51f64c495005c929L,
41457         0x60e213a54b42e417L,0xc152844262cc3734L,0x6ecd6c3b09d994e1L },
41458       { 0xa6e72f7183dd047fL,0x3836f663b0019803L,0xbcf1265b257493cbL,
41459         0x59b15ff09e62d78bL,0xaac5ed5b6cb92ecfL,0x37e6ad7d9662651cL } },
41460     /* 41 << 252 */
41461     { { 0x04743bf8b224f6c9L,0xec04b641ae33b1caL,0x6301f51623a76fccL,
41462         0xf1aa954675e15fe9L,0x878c64ecd95c1972L,0x033df5ee3ba7578aL },
41463       { 0xe5e9ff7c47f4721fL,0x9b3d93fa03eef7e9L,0xcd0be6ad573deaa6L,
41464         0xf377570f3bbc8a16L,0xffdc04c161c37393L,0xd9eee46dd26d659dL } },
41465     /* 42 << 252 */
41466     { { 0x33f933604d4b7317L,0xee44b3e02fe482ebL,0x5a96870480f1fde5L,
41467         0xdfd6293b5510952fL,0x2abdc1989cc0af6aL,0xe608e2769ff45aedL },
41468       { 0xf408670e3247e796L,0x3144153535fe07c4L,0xa941f96e2870053dL,
41469         0xbe908795ef6383adL,0x82b620a63560fdf0L,0x2c1cc1ae135de5c8L } },
41470     /* 43 << 252 */
41471     { { 0xa829397c727e5988L,0x305659bac6239b1bL,0x9b13701200392cb0L,
41472         0x4eb1ddf376091862L,0x68b64b19202bdd8aL,0x56c427c5228071e4L },
41473       { 0x354b1beac3375accL,0x94a45b4e54e1194bL,0xf528df0178095edbL,
41474         0x6fb0867146fb9ec8L,0x977efc84c555bd48L,0x8230d6f7c268a20dL } },
41475     /* 44 << 252 */
41476     { { 0x003d4004b8d81c0bL,0xd3d5048f4168a407L,0x7748ecacc6675bd9L,
41477         0x9dba4539e2612cf4L,0xa5ebbccfd8770b8fL,0x206b4a9aadd90558L },
41478       { 0xe446ed9c81b5c103L,0xcd2434184d2199dcL,0x0840f6eacb0d70d5L,
41479         0x6fbbf1b43107367bL,0xde9444f7d29335c8L,0x33ef004c66252eb6L } },
41480     /* 45 << 252 */
41481     { { 0x10eac97aa5a6546aL,0x6129392fe231f95cL,0xfd41bda100e2aae3L,
41482         0x5b1f93299d8c6288L,0xf1d2fc9246b7df40L,0xbc6fbacfc5df62bbL },
41483       { 0x64885d924b5af011L,0xe4f3ade883461896L,0x644ce7a7a4a62e43L,
41484         0x74c9d145337b2730L,0x69d714840f83222aL,0xbfbc594ec27c0fdbL } },
41485     /* 46 << 252 */
41486     { { 0x3263c0517ed92916L,0xc039b94884e3f519L,0x54aa433ede89de6dL,
41487         0x92f76292c0971a03L,0x8457b2312550a2e8L,0x46ab1f0f11cfcd9aL },
41488       { 0xd97b95c1c6d53077L,0xe8db11d159550599L,0x2092c81385ea4b32L,
41489         0x149b6b2cb7ced408L,0x2ada6fa482b9b22fL,0x53a5576a25877963L } },
41490     /* 47 << 252 */
41491     { { 0xa1e2c2a8195ad455L,0x65e90a3de7f61038L,0xb01eaa52ec623680L,
41492         0xfad0f9f110302efaL,0x9e544b5449274409L,0xfc9037de8c3a0925L },
41493       { 0xbcf196fcfd139cdaL,0x0a1f747c4f6a2cdcL,0x580a9abab879fe3eL,
41494         0x08a20f1c5ee74778L,0x7c9be7de464c5271L,0xa4a1972918e85a09L } },
41495     /* 48 << 252 */
41496     { { 0xce23a19aa17e560cL,0x6491b95f62550e2bL,0xc72000121d15a005L,
41497         0x15fde735f4355a1fL,0x3849761f607f7807L,0xcbe322d018204691L },
41498       { 0x75756e4ea95e8e91L,0x365959fe817a9b8eL,0x631232763d4ce3dcL,
41499         0xa769d2fef1d66e00L,0x8624ddbac28829e6L,0x03274297d2df06efL } },
41500     /* 49 << 252 */
41501     { { 0x2ad21bdadf3b1368L,0xf4f9d5270b3001abL,0x10182c5557ecb528L,
41502         0xe00db71565372a5bL,0x2018e0ed74f2bd83L,0xa11b47066175efb4L },
41503       { 0x3172264722d565cfL,0xb20c27ab2f0faac9L,0x4ca2982a6260f995L,
41504         0x3850ef89b7085c6fL,0x5b4a6e235f0d45a3L,0xde562df9b7523682L } },
41505     /* 50 << 252 */
41506     { { 0xb34ecab233bb63f6L,0xe6cd56a202944c4cL,0x2690cc39489a8d88L,
41507         0xcdfe368a4fe612dbL,0x23069ca5e9e9f7adL,0x7b87105cc07d742bL },
41508       { 0x5114645a8b58ea8eL,0xd31fb4821829e8aeL,0x5e235d95c4b28520L,
41509         0x2a1cda885c2292d2L,0x95d77447ee925b6aL,0xeec419a3df18845dL } },
41510     /* 51 << 252 */
41511     { { 0xb8903f10be9ffa75L,0x8bf7fc786432dcc3L,0xcf3f7cf15d028549L,
41512         0x7684baf29846f2d9L,0x4c580edbe9e063deL,0x0ac5c3edf2d70321L },
41513       { 0xb9ba10e184c5d96dL,0xbb854b39d7aaabafL,0xe29d66964793c87aL,
41514         0x7b0fe1d448285ae5L,0xa143454df0121733L,0xa286eb043aa5ddc8L } },
41515     /* 52 << 252 */
41516     { { 0x8e4dcfc88c93bc5fL,0x9f96d60a1b233295L,0xae5262e91d447dcbL,
41517         0xafe58396541d46c4L,0x3e733c2636ff8f80L,0xcb36a37748b81037L },
41518       { 0x9bcbfa9fc406ef17L,0x57a6e28006fb128aL,0xd86b44db9a771eb1L,
41519         0xc7ce106e62545a4dL,0xec6818a6b254c908L,0x4b8d3fc550feb342L } },
41520     /* 53 << 252 */
41521     { { 0x8faa39c8b609ef4cL,0x0209b3a7d8225cceL,0x11254c211feffc0fL,
41522         0x64930dcdc1e42ad3L,0xf5b058eb1cbb39fcL,0x2f870e3341cb5065L },
41523       { 0x61b3611cf7663f95L,0x981890b637941996L,0x00c42b0908dd6854L,
41524         0xac42af5de17da075L,0xaf3a394c282b8d53L,0xb53b3b245d8bab96L } },
41525     /* 54 << 252 */
41526     { { 0xe17c9d98d90f0c83L,0xdd4aa8ac6d984408L,0x94b6fc50f71aef46L,
41527         0x2e6b5d24f0a2009eL,0xcb9d9cd17d8d75e4L,0x5e732a5b962a1708L },
41528       { 0x9d774f1c7fd01089L,0x56bc35aded95094bL,0x6844220bb9c797d4L,
41529         0x40021d8e90ace48fL,0xddc769c5701baad0L,0xe23e8f9e333ac2deL } },
41530     /* 55 << 252 */
41531     { { 0x6cf6faf6e92e42bdL,0x759dc78b0d1e6a0eL,0x18fd55ff11532759L,
41532         0x04a306d7e9af0c07L,0xd7febf615ef7f82eL,0xaa04f1dca65cae01L },
41533       { 0xb084407c16442bc2L,0x17ab4f74f874f10aL,0x236368d40fb6cea7L,
41534         0x451ea8206f66813dL,0x4a61097b1760e6ecL,0xa8655cfba01bdd2aL } },
41535     /* 56 << 252 */
41536     { { 0x52fced3116f01d7bL,0x88c6b172daf046aaL,0x1a189403fe7a338eL,
41537         0x39741ecd61798b1eL,0x6a47b0712934b879L,0x3b1a5dd1828d1e9dL },
41538       { 0xd4bd48487f35a7efL,0x71774b5bc1eebaf8L,0xa86471e5d55344baL,
41539         0xfbf145f17b8a483aL,0x70f9b214aa53802cL,0x995af93010b066e1L } },
41540     /* 57 << 252 */
41541     { { 0xd2714b97aadf25ceL,0xb95c54162a7643f1L,0xae7dc619ba2f1939L,
41542         0x30e5d013b0db537eL,0xfcd1a456753f0813L,0x19f7117cef62925cL },
41543       { 0x40a22e35423d3c56L,0xb0271e9926a5534dL,0xc19f703cc76c9a1eL,
41544         0x9b8fe585560bee08L,0x48c7797d3cc772aeL,0xabd2148e10bd6393L } },
41545     /* 58 << 252 */
41546     { { 0x046fb36cc34a7ba2L,0xd42e56d42a61a8a6L,0x16b8fd2d3d4b1184L,
41547         0x6f9e85a26da29888L,0x1ff7324bdd683c49L,0xdb3746db27bb8e2aL },
41548       { 0xa7e586e684be7f99L,0xfbd0c0ee61740d6bL,0xb80509bab2071320L,
41549         0xb5bf09fea3f03641L,0xe872cd854971e39fL,0x9bed91c0ce2b2db2L } },
41550     /* 59 << 252 */
41551     { { 0x85177e7ca6bad7b2L,0xd5b1f0901425b611L,0x6b5f16223c4bfa24L,
41552         0xde34a692def66d8aL,0x96c0663ee8a1b7a0L,0x43eb91ed459c8bbbL },
41553       { 0x6cc7e78b7d3d8b92L,0x3c9da7efe0338ba8L,0x18d7ab00e21360b4L,
41554         0x0785ca897f9df01aL,0x5bcfb8302220f1efL,0x8c61a3bfa52bbf42L } },
41555     /* 60 << 252 */
41556     { { 0x4dcc3b82196c21d2L,0xef0e0e1e61071fd8L,0xa2a28c3b35a013f7L,
41557         0x7550d3d7f6b58f80L,0x0f1fc9d58101742bL,0x027874f055982d5dL },
41558       { 0x5a10b98c629bc409L,0xa28a1b2baf494679L,0x84afdbe1b96578d8L,
41559         0x201a8062d427238bL,0xe321ee2d89fffdb0L,0x0b304de4fb89f171L } },
41560     /* 61 << 252 */
41561     { { 0x5d8e16c0d7700dfdL,0x336e30fa24260211L,0x7ba72067ad557ce2L,
41562         0xcb388c3169621e0dL,0xcf6b7d813dbf7ba3L,0x7bfe43a91cbd216aL },
41563       { 0x6c40516adcffe0b5L,0xe77507f083b7ea33L,0x5b5cda074ba1fc8eL,
41564         0x46860dd296c6d2c6L,0x4716114f0eb5013cL,0x05bd136898c3642cL } },
41565     /* 62 << 252 */
41566     { { 0x7fac263852ca5d3bL,0x35e5d8d0f5a2a596L,0x4c7129210011a394L,
41567         0x400168f7a9c417e0L,0x220994b447b77b44L,0x01a7580af548c0adL },
41568       { 0x59870c2afe292ad7L,0xdda35a1a2abf8e7cL,0xa3082dc4f16d0c7cL,
41569         0xd4dcd5f38557c9e8L,0x38d45cc6ba7f0f99L,0xdefc0b1da7c18157L } },
41570     /* 63 << 252 */
41571     { { 0x5db2ed891c43e426L,0xeed247709adf4a50L,0x0b5e19765c8b90e1L,
41572         0xe9db695ffa18542dL,0xc16d3bfb8d043dc5L,0x5c5feb44f11d3430L },
41573       { 0xd44e3d57365593c0L,0x1338f26c8796edb5L,0x789b325e051ca644L,
41574         0xaa93b75d1579c2bbL,0xa39a8ec57842c0b2L,0x84225134550ddf11L } },
41575     /* 64 << 252 */
41576     { { 0x9ec1159727a28f9dL,0x96f2c44bb847cd83L,0xacf794e131fca111L,
41577         0x438b917896076f45L,0xad71035b51732588L,0x2db32f32a5d910daL },
41578       { 0xefaad0e8fe1cc184L,0x6f0360b52e00bbedL,0x99402426474ce326L,
41579         0xd53b687a2aa270daL,0x96c8bb78d78fa6ebL,0xd07f3bba6e699411L } },
41580     /* 0 << 259 */
41581     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
41582       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
41583     /* 1 << 259 */
41584     { { 0xfe1f11ad389283baL,0xc87e20b60cd91b22L,0x99d0015a3c5babf8L,
41585         0x7e795b4d5929ea0aL,0xc9cf68331dfb7b7eL,0xc1c07346a64992e8L },
41586       { 0x0b7e0dd89889746dL,0xa89d7b461c43ea4aL,0x64023cf034f02b96L,
41587         0xf7dd410a5662f0c8L,0xa3bb6088a1058ccaL,0xedb25dc34e7801edL } },
41588     /* 2 << 259 */
41589     { { 0x140a0f9fdd93d50aL,0x4799ffde83b7abacL,0x78ff7c2304a1f742L,
41590         0xc0568f51195ba34eL,0xe97183603b7f78b4L,0x9cfd1ff1f9efaa53L },
41591       { 0xe924d2c5bb06022eL,0x9987fa86faa2af6dL,0x4b12e73f6ee37e0fL,
41592         0x1836fdfa5e5a1ddeL,0x7f1b92259dcd6416L,0xcb2c1b4d677544d8L } },
41593     /* 3 << 259 */
41594     { { 0xb6f8d615a033cccdL,0x6aabb87cad75e31fL,0x30a03029a4646d1bL,
41595         0xfad497e6e6547805L,0x4b9d45c3ba291f12L,0x0f74909bca059918L },
41596       { 0xdece1fb0b5a181b7L,0x973f74413be1f21bL,0xcc919af36b06839aL,
41597         0x14427886ad57101fL,0xc63a79882bbc8022L,0x04cf807426742ccaL } },
41598     /* 4 << 259 */
41599     { { 0x279fd119da1c29abL,0xbd0688022b30d40cL,0xd8f57da4da44105dL,
41600         0xb1814b7a28223fe1L,0xcf2fd241e06f2d2eL,0x99003a0201dfde06L },
41601       { 0x876a31affded7e4bL,0x1efaf8272f725094L,0x5117d608493a6a0aL,
41602         0xdcec8088a88c03e7L,0xeae1d352ea916897L,0x8cdc28106e8b2c57L } },
41603     /* 5 << 259 */
41604     { { 0x52fb8e6f7041b903L,0xd7fc4b5b2ad368a3L,0xf16c61d2f890136fL,
41605         0xeee859dfbb52a90bL,0x1651b16b3f8396cdL,0xfbced93eb6462918L },
41606       { 0x1cb3126c4b6bfaa0L,0x65dfc76cc7c8fd16L,0x225b9c21bb46a3c9L,
41607         0x6c3457577f64f9ffL,0x6f65fadd57c297ecL,0x72a630eae5c5bbbdL } },
41608     /* 6 << 259 */
41609     { { 0x0254486d9c213d95L,0x68a9db56cb2f6e94L,0xfb5858ba000f5491L,
41610         0x1315bdd934009fb6L,0xb18a8e0ac42bde30L,0xfdcf93d1f1070358L },
41611       { 0xbeb1db753022937eL,0x9b9eca7acac20db4L,0x152214d4e4122b20L,
41612         0xd3e673f2aabccc7bL,0x94c50f64aed07571L,0xd767059ae66b4f17L } },
41613     /* 7 << 259 */
41614     { { 0x25cb1f44f4fefeeeL,0xe1a6b6c8bce660c7L,0xd25459a00d2118e4L,
41615         0x716532dafedf8f98L,0xaeff37d492cfb480L,0x45919f7da1453c41L },
41616       { 0x5100afe08d8836a6L,0x2ec20fd7b35d4fe0L,0xce8eefd1c00b7d66L,
41617         0x922d535d6b82c7ccL,0x5eb38f3fddd8d80aL,0x7eae5305213ae465L } },
41618     /* 8 << 259 */
41619     { { 0x09f8bb0654e93c1eL,0xb0045884ad81e27cL,0x26ebc7b6076e13ebL,
41620         0xbda0b5535d5ac07fL,0xbcb8132248ab69e6L,0xd3847d2e1c0f21faL },
41621       { 0x7a466528c834d740L,0x6c67a79ae0823ff2L,0x85dd11864c1d7cb8L,
41622         0x096f849f2d081301L,0xb4f503dd8a5ea0f0L,0x71ee0889d1bf69b2L } },
41623     /* 9 << 259 */
41624     { { 0xd7a5f9feaa074b9eL,0xbeda44032fd2468bL,0xca3956309c35ffcaL,
41625         0xb02a1f592de68348L,0x946b0250903b35c7L,0xe9984f24634e9c91L },
41626       { 0x4f70d22fe7303041L,0xf8a05d7fb68b0051L,0x0ce7af4fab5006afL,
41627         0x1011d1644a6bb502L,0xdf959199da4ad1a6L,0xc468cddf1e146f24L } },
41628     /* 10 << 259 */
41629     { { 0x40336b12dcd6d14bL,0xf6bcff5de3b4919cL,0xc337048d9c841f0cL,
41630         0x4ce6d0251d617f50L,0x00fef2198117d379L,0x18b7c4e9f95be243L },
41631       { 0x98de119e38df08ffL,0xdfd803bd8d772d20L,0x94125b720f9678bdL,
41632         0xfc5b57cd334ace30L,0x09486527b7e86e04L,0xfe9f8bcc6e552039L } },
41633     /* 11 << 259 */
41634     { { 0xffd4fd775b5c7501L,0xc43e409ee0600e93L,0xd2a18cba7d522993L,
41635         0xbc2e14dc17c84d1cL,0xe84deb43c1eee29dL,0xe65326f08d691cbfL },
41636       { 0x89760cdd77b726afL,0xb91c302a577b30acL,0xc6a742906e145891L,
41637         0x95bf3e913be85cc7L,0x2ec0285b9815e0edL,0x5b4be6da8aa3ec95L } },
41638     /* 12 << 259 */
41639     { { 0x4ab7a22c02a2d1e6L,0x967e19a31371d5a4L,0x20f59f95078de336L,
41640         0xfd28fa36f7869245L,0x1de42581cbf1d96fL,0x2e0127d7366e1f0fL },
41641       { 0xbc65fa9d2258c741L,0x1f2f3356dd6d65f8L,0x06384f3a4a0822a9L,
41642         0x1c81332bfd05a0aaL,0xbfb12361d95ee3ceL,0x180aaf0642016d00L } },
41643     /* 13 << 259 */
41644     { { 0x329ff57bf08c171eL,0x6cd8122a543af2a9L,0x5209a3d65b2f8d96L,
41645         0x0285b128ba90c881L,0xeb5971ef61b43c8fL,0xf1ec473ccfd759b8L },
41646       { 0xd2a79fb712d58e1eL,0x695f4877fdb6497bL,0x8bf5a4251f1a0f24L,
41647         0x3e79a0dea5c8a189L,0x9c8ada35908b7ae3L,0xd8b8622c5000f772L } },
41648     /* 14 << 259 */
41649     { { 0x3b75c45bd6f5a10eL,0xfd4680f4c1c35f38L,0x5450227df8e0a113L,
41650         0x5e69f1ae73ddba24L,0x2007b80e57f24645L,0xc63695dc3d159741L },
41651       { 0xcbe54d294530f623L,0x986ad5732869586bL,0xe19f70594cc39f73L,
41652         0x80f00ab32b1b8da9L,0xb765aaf973f68d26L,0xbc79a394e993f829L } },
41653     /* 15 << 259 */
41654     { { 0xdd01a72b6024f09fL,0x192c8254378d12e1L,0x03ec536bf5d8b8d0L,
41655         0xb0c4c01873806514L,0x7d3c5f5614d202b6L,0x7c2a7c5c6febb3e2L },
41656       { 0xf2fa07d4f9f2b562L,0x6f717b003ba2a4faL,0x1ff95d598f452226L,
41657         0xe4b3f6ba867c1cf1L,0x907a648a5d0944ecL,0x1ed480007f64f9b9L } },
41658     /* 16 << 259 */
41659     { { 0x0a159f6295b3287dL,0xb18f875948cecad0L,0x6d1ab8ee1661a23fL,
41660         0xcae7f40ec95c41b3L,0xbc3d20407c51eb56L,0xa7527283e8754250L },
41661       { 0x815610561f9e668aL,0xb8aa7296900f5912L,0xabdbc1bf6af2a00cL,
41662         0xe9a942542d0a56c0L,0x4774a7b77bc8959eL,0x0a837ff019cef2f3L } },
41663     /* 17 << 259 */
41664     { { 0xd9c3f4ea3c696c76L,0x3aff88caea5878bbL,0x2b01171b09dda122L,
41665         0xa61d5ca0f599cad4L,0xba0c19bef49772c7L,0x8ee9acc25001f977L },
41666       { 0x15fd3a172549a25aL,0x8f1a25d82263bc97L,0x372b88434db4af00L,
41667         0xa613b31f4f912925L,0x7d83041a0b64efd9L,0x897c521ca7d5f6a8L } },
41668     /* 18 << 259 */
41669     { { 0x9c441043f310d2a0L,0x2865ee58dc5eb106L,0x71a959229cb8065cL,
41670         0x8eb3a733a052af0fL,0x56009f42b09d716eL,0xa7f923c5abcbe6adL },
41671       { 0x263b7669fa375c01L,0x641c47e521ef27a2L,0xa89b474eb08ffd25L,
41672         0x5be8ec3ff0a239f3L,0x0e79957a242a6c5aL,0x1dfb26d00c6c75f5L } },
41673     /* 19 << 259 */
41674     { { 0x04c6a90ae75c82afL,0xe9183100f2488abdL,0xef4b378b111a46baL,
41675         0x77ad9ef502eaa62eL,0x61229a6205e81570L,0x06e26a2db474c367L },
41676       { 0x0bb2ea7e7113f2d4L,0x8ddc6f887f101386L,0x93fe2d7ef4de63abL,
41677         0xc3d038278f44e271L,0xe9f9f48ea94e641aL,0xb84b817b4962467dL } },
41678     /* 20 << 259 */
41679     { { 0x36f3a3d8a084fae6L,0x759835899a9b0d95L,0x70722186cc80fcb6L,
41680         0xf28ed0c796d84c04L,0x95a32263ffb63f90L,0xdd7d60a098766034L },
41681       { 0xe193a31f1d5c387cL,0x6c5eca7eb8310f8bL,0xfe61d523c083ff47L,
41682         0x90c832dbcb2944e9L,0xa9f3f293593334b7L,0xe6cde2e12d7d1c33L } },
41683     /* 21 << 259 */
41684     { { 0x5637d16b065096b9L,0xee3a2ad04770d39eL,0xae605cb56aa94587L,
41685         0xc2d71dae9b600c6eL,0x672ef30d76a87e0aL,0x74d5bebe567e0817L },
41686       { 0x38f591310eb8ca48L,0x92b74866031e099fL,0x654858ca785f77eeL,
41687         0x264b6b7b830be443L,0xb167203d57103903L,0xa73d5d545ce2b21aL } },
41688     /* 22 << 259 */
41689     { { 0x2fd97b9b9dfbf22aL,0xdec16cc85643532dL,0xdf0e6e3960fee7c3L,
41690         0xd09ad7b6545860c8L,0xcc16e98473fc3b7cL,0x6ce734c10d4e1555L },
41691       { 0xc6efe68b4b5f6032L,0x3a64f34c14f54073L,0x25da689cac44dc95L,
41692         0x990c477e5358ad8aL,0x00e958a5f36da7deL,0x902b7360c9b6f161L } },
41693     /* 23 << 259 */
41694     { { 0x5e8eb8f0636a77efL,0xe14290f8970c3a7fL,0xfe6f6acdfa1784c0L,
41695         0x98671d33de6a46b3L,0xe7fd88722ae5a76eL,0xed971ecbae4f7d60L },
41696       { 0x1d90dbd88461b895L,0x3f979ab4bfaaac13L,0xe06ccba1dbd3379aL,
41697         0xb53b04ba108c4487L,0xe42609dd38d2730dL,0x0638fe82e81c4594L } },
41698     /* 24 << 259 */
41699     { { 0xbd079cf1f144b6ccL,0x7f86e29bb4f4a764L,0x5b08b290f21f9cbfL,
41700         0xada0c85b75e3aeb9L,0xd0789f8b6666c2dfL,0xcf5d8a8cd71ec2ecL },
41701       { 0x6f7780c3e7e4364bL,0xdd9a652985d2eb75L,0x8222f66bd952a38eL,
41702         0x9dd5f7eb27260a29L,0xce49b34457947178L,0xaa215f82cdda7e39L } },
41703     /* 25 << 259 */
41704     { { 0xcb91619d1419a50fL,0x44a22eac65dc4c84L,0xc199f93701a92405L,
41705         0x3749a33198045324L,0xf1676e8abc57764dL,0x922f9460a00c33eeL },
41706       { 0xfde98e63d3766db4L,0xae08a82efd5ffb6aL,0x6a9834537c0c6ae7L,
41707         0x0e9a919a54f34cdbL,0xf37a95e8fd88d765L,0x927427d4228a1affL } },
41708     /* 26 << 259 */
41709     { { 0x454ab42c9347b90aL,0xcaebe64aa698b02bL,0x119cdc69fb86fa40L,
41710         0x2e5cb7adc3109281L,0x67bb1ec5cd0c3d00L,0x5d430bc783f25bbfL },
41711       { 0x69fd84a85cde0abbL,0x69da263e9816b688L,0xe52d93df0e53cbb8L,
41712         0x42cf6f25add2d5a7L,0x227ba59dc87ca88fL,0x7a1ca876da738554L } },
41713     /* 27 << 259 */
41714     { { 0x277c833f57c7bf99L,0xbbb84d1d0b301f02L,0x11435cb20713a92bL,
41715         0x8ae509702d02862bL,0x4edc66bdaa7b0660L,0x5bc0d893d6382c91L },
41716       { 0x7992c5d3b94a6343L,0x1cfee04147b19345L,0x57963034964ed646L,
41717         0xd7af0cac3de7b0e9L,0x5123dd8d481b940aL,0xe1d23ad8ad7d3567L } },
41718     /* 28 << 259 */
41719     { { 0xaa44b2863004db31L,0x86f43d7ad43e4430L,0xdc4874cdb0b0240dL,
41720         0x79986a23adc45a06L,0xbb275b443cee4631L,0x21daee8a63a217aaL },
41721       { 0x1e7c5397d7b25c02L,0xe677d3cbc5e668faL,0xc7c84e28ed51b4bfL,
41722         0x7ca19e99923e5408L,0xc6f8a595c3f832e7L,0x2d0a789c5fb049a3L } },
41723     /* 29 << 259 */
41724     { { 0x49702e622b82b466L,0x365d4f6afb8fe508L,0x2f5234e044884733L,
41725         0xcd527f345dd0a3d5L,0x371b02544bf4033eL,0x7d84ad677e3212e0L },
41726       { 0xaf48fd79e69d6b81L,0xd126f83a7a44bfc6L,0xbb8d2b57b2cc4e93L,
41727         0x5f62a3d5eb60ec5fL,0x7b37da33aa76c824L,0x7593d06b89a682dbL } },
41728     /* 30 << 259 */
41729     { { 0x3fa5c1051cac82c4L,0x23c760878a78c9beL,0xe98cdad61c5cfa42L,
41730         0x09c302520a6c0421L,0x149bac7c42fc61b9L,0x3a1c22ac3004a3e2L },
41731       { 0xde6b0d6e202c7fedL,0xb2457377e7e63052L,0x31725fd43706b3efL,
41732         0xe16a347d2b1afdbfL,0xbe4850c48c29cf66L,0x8f51cc4d2939f23cL } },
41733     /* 31 << 259 */
41734     { { 0xc342ed50dd305573L,0xe3055013de86c6c8L,0x0ae84d9776deedc4L,
41735         0xe8e70cbfd1274b52L,0x4bb51dce32e87f7fL,0x32de3672f3748177L },
41736       { 0x528af91681722d55L,0x459af071a5f2ce91L,0xf6883bbdc685a670L,
41737         0x398657f9eeb836b8L,0xa08a793eb9278bd7L,0xe786426bcc09e408L } },
41738     /* 32 << 259 */
41739     { { 0x114a25c844922386L,0xdd084d446d4e8b57L,0xc49b68411e7bd7deL,
41740         0x5b0359fad6da54dbL,0xa6e6e5f93f0da321L,0xb65ec55cd640a87eL },
41741       { 0xc1a4f6ceae64020eL,0x91e29cd2088e1337L,0xf44ceb8e3c0a631cL,
41742         0x0205b11db756445fL,0x04844e845bc8880eL,0xb630ddc0b85e00d3L } },
41743     /* 33 << 259 */
41744     { { 0xac512659c6ee46b6L,0x0c92e402ca82b384L,0x81d79049194fba3aL,
41745         0x9b68376c36b42b32L,0x6dc1c80cf6b410b0L,0x509fbe9196b2b328L },
41746       { 0x988fedd6fdc783b1L,0x9f34cd87436ed055L,0x29f243648bb8809fL,
41747         0x6962ca24b8dc8b68L,0x076cb7b931963ff9L,0xb609ad792b915093L } },
41748     /* 34 << 259 */
41749     { { 0x169e025b219ae6c1L,0x55ff526f116e1ca1L,0x01b810a3b191f55dL,
41750         0x2d98127229588a69L,0x53c9377048b92199L,0x8c7dd84e8a85236fL },
41751       { 0x293d48b6caacf958L,0x1f084acb43572b30L,0x628bfa2dfad91f28L,
41752         0x8d627b11829386afL,0x3ec1dd00d44a77beL,0x8d3b0d08649ac7f0L } },
41753     /* 35 << 259 */
41754     { { 0x4aeb3f870af947c6L,0x9ac9ff2791d090c1L,0xeaaa7e0fcf698277L,
41755         0x737ccc2ff09d6155L,0xd5d4bde86753cc31L,0x3b9063477146d4a3L },
41756       { 0x75106d8959e32369L,0x7a8ee281645999b3L,0x9184fb5cfc3f675aL,
41757         0xaeebd0423ad4e239L,0xcff8f73e12f449d1L,0x2771bec17339eb4bL } },
41758     /* 36 << 259 */
41759     { { 0xf783db44e6674091L,0x57d0eed31e12a3b7L,0x62d2762af3474f91L,
41760         0x3d122edf0562af71L,0xaf78dbf77f4bbcbbL,0x8fbbbd97e55f0654L },
41761       { 0x77e117b004bac36eL,0xbbf6bd463ec582aeL,0x553acd10017eb463L,
41762         0xfc521187fdfd820bL,0x73211103089b6829L,0x9d3fe7ad7e01e5c0L } },
41763     /* 37 << 259 */
41764     { { 0x12a8b7ac04c6babfL,0x7b23210557d2cf63L,0xe03831868f21ad0dL,
41765         0xd14c2b95acdc2184L,0xe7bd19fcadc9bae1L,0xe2dbabf2edea5c71L },
41766       { 0x009a3ab78f3f4266L,0x159691e17f8ff74fL,0x5ae666aa22f40f41L,
41767         0x72fcdc88512387bbL,0xa74e8fb841516c92L,0xd9cee7833b15bf07L } },
41768     /* 38 << 259 */
41769     { { 0x00a93daa177513bfL,0x2ef0b96f42ad79e1L,0x81f5aaf1a07129d9L,
41770         0xfc04b7ef923f2449L,0x855da79560cdb1b7L,0xb1eb5dabad5d61d4L },
41771       { 0xd2cef1ae353fd028L,0xc21d54399ee94847L,0x9ed552bb0380c1a8L,
41772         0xb156fe7a2bac328fL,0xbb7e01967213c6a4L,0x36002a331701ed5bL } },
41773     /* 39 << 259 */
41774     { { 0xd76b43661c8bd222L,0x041c2b87b97e5b19L,0x7b80f8d7b47c4282L,
41775         0xfec3d476d0dbc7d3L,0x84aa69712753a830L,0xe5f336079ec85e26L },
41776       { 0xa425d60cfe2374b3L,0xf88b90f14d953af2L,0x80370e7857ca6c43L,
41777         0xe07d07176f4d6d7eL,0xe60639401e61ab85L,0x171a2bf632a4c829L } },
41778     /* 40 << 259 */
41779     { { 0x38e4168d4f8b5073L,0xf1ddc53fc521849cL,0xd2bf515bab917df1L,
41780         0xab76b71a697d45c1L,0x20fdc6c7cb566a9dL,0x3843bf838a031cf4L },
41781       { 0x9a2d89a58a028b04L,0x52f3cb1922a908cdL,0xb5df9c2b7b8723baL,
41782         0x5142f51060374a3dL,0x949b719800bd9f30L,0x4b7cda16c9b86959L } },
41783     /* 41 << 259 */
41784     { { 0x22a32c50d154fc49L,0xe12242de66357eb7L,0x67571eb89f19ef9fL,
41785         0x2ed01f28b92b20e1L,0xd4fd6efb6cd439c0L,0xc4036cfc03b057fbL },
41786       { 0x605fab271cc48da5L,0x3cbd7a071416a3e7L,0x9cfe7161714bf173L,
41787         0xbd03d786a77eb0f8L,0x1423516678b8f5ccL,0xecc56e02f0523f3fL } },
41788     /* 42 << 259 */
41789     { { 0x20b1632addc9ef4dL,0x2a35ff4c272d082bL,0x30d39923f6cc9bd3L,
41790         0x6d879bc2e65c9d08L,0xce8274e16fa9983cL,0x652371e80eb7424fL },
41791       { 0x32b77503c5c35282L,0xd7306333c885a931L,0x8a16d71972955aa8L,
41792         0x5548f1637d51f882L,0xb311dc66baba59efL,0x773d54480db8f627L } },
41793     /* 43 << 259 */
41794     { { 0x2be2f1d67d64ddbbL,0x3afc2fad6edd7e04L,0x9a57c16d9e797442L,
41795         0x1efecfde9c16769bL,0x86523c3571b2940aL,0x1a9b30035825d17cL },
41796       { 0xa25e99beeefc4d7cL,0x8521b49fb50df9eaL,0x10bd2309bd8f3b06L,
41797         0x1f892e95ea82e80cL,0xf741621c93585741L,0x95687594f5e5087aL } },
41798     /* 44 << 259 */
41799     { { 0xbcdd3a3146f684c5L,0xbc8be436f700b0cdL,0x33005e370de75b7dL,
41800         0x527a8a2c3bd820caL,0x5e44854446997e4cL,0x40921fd93c3dafb0L },
41801       { 0xf3873a8ab7390d9bL,0x30999855495ba2fbL,0x005164f0813c8c76L,
41802         0x05bb04d7fe8da60cL,0xee7c38d503224ad1L,0x172018d615785ce5L } },
41803     /* 45 << 259 */
41804     { { 0xaaf786c0f6442534L,0x3f1344c1e56b44a5L,0x31199702ed073a36L,
41805         0x1f8ba0ec3df17e33L,0xf3e7b63493ceee0aL,0x568bdf39490fc4beL },
41806       { 0x364bdd11b1e1c439L,0xa1aa317ae5a63c82L,0xb12697034c02ee46L,
41807         0x0bc6d92e7eb64374L,0x87538fe740ed83f1L,0x862450abda74892aL } },
41808     /* 46 << 259 */
41809     { { 0x59b1b1347a62eb3bL,0x0f8ce157cceefb34L,0x3fe842a8a798cb2bL,
41810         0xd01bc6260bf4161dL,0x55ef6e554d016fdbL,0xcb561503b242b201L },
41811       { 0x076ebc73af4199c1L,0x39dedcbb697244f7L,0x9d184733040162bcL,
41812         0x902992c17f6b5fa6L,0xad1de754bb4952b5L,0x7acf1b93a121f6c8L } },
41813     /* 47 << 259 */
41814     { { 0x293ff71acc51318fL,0x69437a2e614149cfL,0xb12ea4613b48b348L,
41815         0x2f58020321f6cf90L,0x2e865f77178b53fbL,0xf4774d29231909a8L },
41816       { 0x0433e66bc4d8b703L,0x4fb6256b907097cfL,0x44a2a7fe004470f7L,
41817         0x7d3ebbb46dc5f10aL,0xe9b3af288f5526b4L,0x4bc0d9db1107bd75L } },
41818     /* 48 << 259 */
41819     { { 0x4865c0ffc0391d0bL,0x70d31470176740ffL,0xf44ca9a1ed506d00L,
41820         0xfaac86f6c981153aL,0x713ddaf4e3f86940L,0x64ec27093fc39de9L },
41821       { 0x04d413acac9a26b5L,0xde2052eebb21664bL,0xa6e04de8957b4f20L,
41822         0xd185b640d5487618L,0x1668b6a46fed1707L,0xeed37894c435ac3dL } },
41823     /* 49 << 259 */
41824     { { 0x1fa08a16f69cdfbbL,0xabba54dd0bf735a1L,0x37848c6a68a5cc20L,
41825         0x08e23c52a969298bL,0x48240306f965bddeL,0x48492deaf90bcff5L },
41826       { 0x416b9005bd994e22L,0xa6ce214ce6429f16L,0x5aaeec21f43f86d4L,
41827         0x202db9b7a0b1979fL,0xb2d97b4fdd7ae6d5L,0x4fedb6b9e12f04a1L } },
41828     /* 50 << 259 */
41829     { { 0x7a56867c325c9b9aL,0x1a143999f3dc3d6aL,0xce10959003f5bcb8L,
41830         0x034e9035d6eee5b7L,0x2afa81c8495df1bcL,0x5eab52dc08924d02L },
41831       { 0xee6aa014aa181904L,0xe62def09310ad621L,0x6c9792fcc7538a03L,
41832         0xa89d3e883e41d789L,0xd60fa11c9f94ae83L,0x5e16a8c2e0d6234aL } },
41833     /* 51 << 259 */
41834     { { 0x9c8e64869c85df60L,0xa84692a681e26100L,0x0350e1209c739462L,
41835         0xb6da4ebf99fa1f63L,0x857b534055e2bcd4L,0x7f4001dbdb209cf7L },
41836       { 0xbfa320378757800cL,0x2d56821fa6a562b5L,0xe56d810b6c3e775cL,
41837         0xeba244a6ba757f86L,0xb7ca8dbf80a17cb3L,0x8cbff4a22b7db57cL } },
41838     /* 52 << 259 */
41839     { { 0x650c31da9dff967dL,0xecd1e0f77ed949dbL,0xa7ff9becb20196fdL,
41840         0x5085c68d1e6259aaL,0x5759a166871a71e9L,0xba15e24c2b4d3bd2L },
41841       { 0x22c4f75912c51998L,0x6038fb0a7c8a9400L,0x64827d9c09625dacL,
41842         0xd8ce10c96ec4fb64L,0xe417ac30095686ccL,0x1e624aa88c723f44L } },
41843     /* 53 << 259 */
41844     { { 0x872d3dc953387fbaL,0xaaa0e1b4317ec17bL,0xa12b45519efb728cL,
41845         0x0b43907d45a3491eL,0xb7fa83befa4a239dL,0xbecdae00b59a4f3cL },
41846       { 0xe4e4c7c393407d23L,0x8278f336cf1d3cd8L,0x73dc9356610570a3L,
41847         0x5579653d688d933fL,0x208b96be5881d760L,0x4752a645d12f57bbL } },
41848     /* 54 << 259 */
41849     { { 0x87ec053da9242f3bL,0x99544637f0e03545L,0xea0633ff6b7019e9L,
41850         0x8cb8ae0768dddb5bL,0x892e7c841a811ac7L,0xc7ef19eb73664249L },
41851       { 0xd1b5819acd1489e3L,0xf9c80fb0de45d24aL,0x045c21a683bb7491L,
41852         0xa65325be73f7a47dL,0x08d09f0e9c394f0cL,0xe7fb21c6268d4f08L } },
41853     /* 55 << 259 */
41854     { { 0xe02aca87d4bba3cbL,0xd40ac486652fb181L,0xa1dcfe7ffaa3f999L,
41855         0x116323e0e9eded09L,0xaa3a0f0f07629d4fL,0x9f8e49f5e0dc53adL },
41856       { 0xbae96096742af22bL,0x6d7e24dd518862dbL,0x5c91ba30bb333cd7L,
41857         0xda8df051e65319b0L,0x2b9305ce9b3e43dbL,0xbf1d0e98fe783571L } },
41858     /* 56 << 259 */
41859     { { 0xf629fb233809aa31L,0xb3b66d77650bd2b8L,0xcb643126bd325d57L,
41860         0x29f46272ed41fa03L,0x374e734f406ef56cL,0xbb9ecd36da7428eeL },
41861       { 0x069694a61c06325aL,0x852b2912e40b9e8cL,0x6504bc90cc3d9695L,
41862         0xf1af43587e38707aL,0x552127dc239a0781L,0x0d1b3a6e8fe76173L } },
41863     /* 57 << 259 */
41864     { { 0x207e41f31d681018L,0x8883a6e417a7d540L,0xffc48332bc983c31L,
41865         0x729c4110c6b3de67L,0x5ef4680ad69a2499L,0x4544b58fe7afb2e7L },
41866       { 0xf5a2fb13480e063dL,0x8797357382054197L,0x5dd38cf7131d2df7L,
41867         0x635e91b8a9366742L,0xbd87a407e0d703c5L,0x6cc37be247251f16L } },
41868     /* 58 << 259 */
41869     { { 0xc4ccab956ca95c18L,0x563ffd56bc42e040L,0xfa3c64d8e701c604L,
41870         0xc88d4426b0abafeeL,0x1a353e5e8542e4c3L,0x9a2d8b7ced726186L },
41871       { 0xd61ce19042d097faL,0x6a63e280799a748bL,0x0f48d0633225486bL,
41872         0x848f8fe142a3c443L,0x2ccde2508493cef4L,0x5450a50845e77e7cL } },
41873     /* 59 << 259 */
41874     { { 0xaa129c0ddc428c57L,0xfe619b75aea19047L,0xd6287ecf12ea77aeL,
41875         0x4e6d070fdf7ce104L,0xd0df6788f097c79cL,0xd1c1f8a6ad8b1d07L },
41876       { 0x53eceba296519e66L,0x71670de3d6274109L,0xd2f21ea03f7a82b8L,
41877         0x41efbe939c8e45a5L,0xb5b153436ada3edfL,0x32ba22aca90038f8L } },
41878     /* 60 << 259 */
41879     { { 0xe1d195fad0cbe947L,0xd1fe0c4ef2ef1b72L,0x1451a0b206003fffL,
41880         0xda653fa08239341cL,0x5f834372f2508d75L,0xaeb245f507faeac3L },
41881       { 0x3eb3285b65fdf4ddL,0xfb335c0e84085970L,0x600ad6cae5efc0deL,
41882         0xc9c9f8910cf83e82L,0xf880ff84ad8cc14cL,0x54816725a016aae6L } },
41883     /* 61 << 259 */
41884     { { 0x22ce565ce1124375L,0x30ff1dc5edd968c9L,0x62d74c54e9148534L,
41885         0xf003f0d35de42774L,0xaf9448e6e57f8842L,0x55d5c9a3c5ff761bL },
41886       { 0x7da9398cc4c5edd8L,0x9643424e4ea0e099L,0x497eed480634fcb4L,
41887         0x09ffe2d07dea57cfL,0x30673ba73530a094L,0xfdbf8f24a251cff3L } },
41888     /* 62 << 259 */
41889     { { 0xd0f4e24803112816L,0xfcad9ddbccbe9e16L,0x177999bf5ae01ea0L,
41890         0xd20c78b9ce832dceL,0x3cc694fb50c8c646L,0x24d75968c93d4887L },
41891       { 0x9f06366a87bc08afL,0x59fab50e7fd0df2aL,0x5ffcc7f76c4cc234L,
41892         0x87198dd765f52d86L,0x5b9c94b0a855df04L,0xd8ba6c738a067ad7L } },
41893     /* 63 << 259 */
41894     { { 0xf9ae5fcedb877020L,0xd84ad42f703e5d09L,0xa6a5cc1fbfaed17eL,
41895         0x2099409829362fe9L,0x9f863bb0dd299c2dL,0x82bd3f61fa632197L },
41896       { 0xd3b14097ebe7ff51L,0x7c9e6ec4c719a6bcL,0xd3b46f3d70a51db6L,
41897         0xc8fa2f0692eb8243L,0x68e1f56e02155139L,0x0c35d135fd3b893dL } },
41898     /* 64 << 259 */
41899     { { 0xe76894c3ae7ce296L,0x87737ee2a6cafc34L,0x566dfcfbe55cd1e6L,
41900         0x5421a9f23a7ad5b9L,0xa005838a4687a4efL,0x3837219a23a2c423L },
41901       { 0x4b7800128a82cd1bL,0x401c07bec728b588L,0x2b5f69e937ced8f3L,
41902         0x306b621d8c1e1eaaL,0x8acbbe71d389cc4dL,0x922fa665f4ab7774L } },
41903     /* 0 << 266 */
41904     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
41905       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
41906     /* 1 << 266 */
41907     { { 0x2df6f242d35c2d80L,0xf65a99a93493ce97L,0x9e80232b372bcc87L,
41908         0x26ba13b86e428cc5L,0x2526ef1f13a1b763L,0xcef3edcddc97c5f3L },
41909       { 0x4954867fbde16b73L,0x9817813d368ff6cbL,0x7e39fa69be143027L,
41910         0x12329463cf54f28bL,0xcf0991dc7597c2daL,0x0cda396952e07099L } },
41911     /* 2 << 266 */
41912     { { 0x412f64a3f303955dL,0xe92bdca9bd692593L,0xfbe6cdc2c2e964e0L,
41913         0xe9a3b1fd0011cb01L,0x6c30762dcf228f23L,0x1270b84abe9199a1L },
41914       { 0x732711dfe3c9cbb1L,0xa3aabe37d91d9513L,0x8ee08ba0c6eceba7L,
41915         0xb1711531f3c3d31dL,0x65060b633c716948L,0x046b4ea12ff2caddL } },
41916     /* 3 << 266 */
41917     { { 0x25d1124fbab220c6L,0xcd1423c861524e3eL,0x75e4f45f0434fb51L,
41918         0xb5180a8f5180ab2bL,0x144e214e5b22e388L,0x6b16dad192263054L },
41919       { 0x3ea7590740863566L,0x372d5abddada3b46L,0xb3ff5a3a893d210fL,
41920         0x39f8d1ce5e29f3dcL,0x559186ce68200e82L,0xf48764541202cb66L } },
41921     /* 4 << 266 */
41922     { { 0x6f178dbf8b540904L,0x0264bccd8720472aL,0xa6e8b4b459b46611L,
41923         0xafce8267c72b4a58L,0x21142175a45985adL,0xd23401dfe649d733L },
41924       { 0x6bf42fe085dc7720L,0xc5c8ab9440e3f2f5L,0xb0c8a58acd029197L,
41925         0xa73ff329215492e1L,0x895c545eb1b5a5f0L,0x6dbc24456fcaf49bL } },
41926     /* 5 << 266 */
41927     { { 0x25ef32d60f2d76a3L,0x540650b9af4a7d46L,0x8979a4b8d991d7f4L,
41928         0xdaa706c299202400L,0x8a729680f19d281dL,0xde25bdc44ec44de2L },
41929       { 0x0fc50832c2054496L,0xfee72fb60aaf2941L,0xc8263e64b82ed4f0L,
41930         0x91a8cb736f49055cL,0xb7585458f2bb515cL,0x03d2b23ab855e6c6L } },
41931     /* 6 << 266 */
41932     { { 0x09ec1e3dcfd3f182L,0x1f1c30b5adae7af9L,0xf3a33f7c6b454164L,
41933         0x0318926f94647c4fL,0x8e37bdd787db14ecL,0x811cbd342ab364d3L },
41934       { 0x1dd1e5077c2b369dL,0x7a57bc46a28056bdL,0xfca5be4b089efe44L,
41935         0xb3bd84d76dc1290eL,0x40d7af098793e6aeL,0x4e08e11fa3723942L } },
41936     /* 7 << 266 */
41937     { { 0xca3709ad899ffebbL,0x1a87377877c00602L,0x5ff40c2aa99b4af0L,
41938         0x680464e5a80e870cL,0xd2f7f04494e10b1dL,0xee9b206c4e9aa1a7L },
41939       { 0xb536d67596cbe950L,0x841856899e8305f3L,0xae1b669c369fa255L,
41940         0x62e260267233e1eaL,0xac05c5136aa60c24L,0xdfc6814fd2691677L } },
41941     /* 8 << 266 */
41942     { { 0x8baef5df0a02b0fbL,0x58a2b06bc2b92b02L,0x268558d754c8267aL,
41943         0xf924f795ccf70393L,0xe3763f30f68ee021L,0xc1e856f05c01ba4bL },
41944       { 0xcc01a3e9722b6bffL,0xd2be4623ed5b3b02L,0x1ab3512e6c45e33fL,
41945         0xa978fe484ef433f6L,0x23e2ea018e21f5afL,0x49647d8811524a40L } },
41946     /* 9 << 266 */
41947     { { 0xd50abc94f5d3f437L,0xbf2ffcc546b7b738L,0x0bf53571f80edda5L,
41948         0x167908d4ab90ba5fL,0xad445b102303cf00L,0x9b537d4fb9e59406L },
41949       { 0xfac5e27cf43049a8L,0x05ccb32ebf9db100L,0xe662eeac4d1b535fL,
41950         0xbf21d6d78d27ca90L,0xb960bf652a684981L,0xe16bdaee49236475L } },
41951     /* 10 << 266 */
41952     { { 0x47a5958f92ad4720L,0x12c33193da3bf809L,0xf16493147da6d32cL,
41953         0x42eb4e687102deebL,0x0f8c4ce283088c86L,0xedf91c3bd693c9a2L },
41954       { 0x8a18a4761e8c310cL,0x5e8757c5dc3db0e8L,0xc48b820ef76a0affL,
41955         0x690d788d5c71e596L,0x2b0a00857cfe770dL,0x440ba06bd46505f0L } },
41956     /* 11 << 266 */
41957     { { 0x503f77906087d4d0L,0xc7243aeda1ebfb04L,0x203f0563ad8f14bdL,
41958         0xc20013b7cad73fcaL,0xbace8b323741a708L,0x0b376ff731bdeb56L },
41959       { 0x820b7f1282c22e57L,0x0c08133117830562L,0x306d178a8d0d30c2L,
41960         0x36a6efd1467a1510L,0x558fea1af55b7b97L,0x1e9152b784e546eeL } },
41961     /* 12 << 266 */
41962     { { 0x92a7fbcdac3ce531L,0xeb85f7f059498d99L,0x8e45db2d02a8feb5L,
41963         0x176c0cb2728cecbeL,0x33fcfbb0d1837662L,0x426e192dd6f2882cL },
41964       { 0x75a0f3450a2c9899L,0xd815dc6066148f9dL,0xf4ea90cefa0453afL,
41965         0x5108858ff54c96fbL,0x86b46b5731f77afcL,0x59df021f6bf7e2fcL } },
41966     /* 13 << 266 */
41967     { { 0x48d67f73dab6c0f4L,0x70cfc26cf0d49ef3L,0x25c95a68a65cce7bL,
41968         0x29a05632cf6ad228L,0xbcc2fb5a1a8128f5L,0x360d82a48c9defe0L },
41969       { 0x1c5c5d628d1531d8L,0x58fc4b9a149f6b4cL,0x8097cf56a3b625adL,
41970         0x8821ead7fd8e0e35L,0xb96c2b880d9e1df0L,0xfbf55ba72a243accL } },
41971     /* 14 << 266 */
41972     { { 0xef32e94d70e0d8fcL,0x33ec93dc6d63e65fL,0x134532fb1dc7156fL,
41973         0x98fb5b0c0e8d85b4L,0x05c28df9b64f7861L,0xa7e73afa4160e1a2L },
41974       { 0xbfe60a9b785f6e4bL,0xfcf998f12fec9ec5L,0xf673b8d15c12a44aL,
41975         0x85df3bc736d189a5L,0x4480a189dd83f6e0L,0x3216317ef3d3ab44L } },
41976     /* 15 << 266 */
41977     { { 0x221c1b7ffd3d7532L,0x40939c318bb4e719L,0x75182ce602f8f74eL,
41978         0xf508d6415395f9d8L,0x88fc89ea1fc81977L,0x861d8d0bcc8dc7d3L },
41979       { 0xd76e4f0cec07b0e2L,0xb0a4e2aa5819b99bL,0xa67bed0366a9c935L,
41980         0xce7c8241d2781f91L,0xe7c5c22512af0abdL,0xd1067dbcfde7de16L } },
41981     /* 16 << 266 */
41982     { { 0xe1d42d94d087b788L,0xfbfb221aba0e176aL,0x5f6698e783686966L,
41983         0xbb5e159474a30dbfL,0xef86bb5bcfd20230L,0xf055a1c5403b8f8bL },
41984       { 0xf249aac8d9d85ea7L,0x7318f7bc3d200198L,0x3b80960cefca9a90L,
41985         0xf28e33888f449c4bL,0x0cdfc61bf0cfe09eL,0x3b169c638b22cd26L } },
41986     /* 17 << 266 */
41987     { { 0xf4f13a49b81b45b0L,0xb77a67be3003fe1bL,0x70e648a318d52c97L,
41988         0x701ba8a1ee17ce93L,0x58a0ce0cf672226aL,0x2fcad147cebc3294L },
41989       { 0xf5cd118a104e8f68L,0x0015bc0bd15358e6L,0x75f0d28f1c662df4L,
41990         0xcd54f443a3e038f4L,0xa83507610804c717L,0x5fce0ce3f03bad08L } },
41991     /* 18 << 266 */
41992     { { 0x4c2e2bffa180a71cL,0x067f3e3baff551b9L,0x007610f1afa43e12L,
41993         0xe8a9ae79ef7b9a1cL,0xa558ef6cf9d3b397L,0x8d5229884f172f34L },
41994       { 0xafa906332d425e05L,0xc62c3914207b0bd8L,0xc84d197c059f7d66L,
41995         0x6cc1d8ce421a9172L,0x1d44a46929a7ebe3L,0x96ca4d0171c3c8b1L } },
41996     /* 19 << 266 */
41997     { { 0x31302e094d369fd6L,0x62fe210cf1b62d27L,0x496ac173bb37578cL,
41998         0xb4d3d065aa0907e0L,0x02317db27c822875L,0x60a01580f241ebc7L },
41999       { 0x81a5d5244e4f37d0L,0x5286f7289c3f2555L,0x14c8c7549a73ff08L,
42000         0xd8236689ff478877L,0xf62d426b08e09f00L,0x2ba1833c67a96517L } },
42001     /* 20 << 266 */
42002     { { 0x7013d596831f464aL,0xe57185fdd3cf6ca2L,0xbba7898e35915f51L,
42003         0x9fbe5f139fd967d4L,0x0aba8344d173558fL,0x4c0dd30dffeb6beaL },
42004       { 0x928f68cc5110e40fL,0x1589a327a58b6d60L,0x09b5c4e06abb0ac9L,
42005         0x01ef3f8a68957627L,0x55dbe9f79f4045a4L,0x91976aeeef178ac3L } },
42006     /* 21 << 266 */
42007     { { 0xd9c20a69b85e46d9L,0x1bda1163cdbda686L,0x5c0717f6c02427a9L,
42008         0x2a976c104d2a48afL,0xea276b15921a02e5L,0xf055b980ddb6315cL },
42009       { 0x0ab85663825f00efL,0x95377fd42053a392L,0xc51c245e23f463e8L,
42010         0xe1ae1e5da24c981fL,0xd6a0b44d9f5cfdbaL,0x1205754023c16002L } },
42011     /* 22 << 266 */
42012     { { 0xfe464ce116ac9150L,0xfd629551173ee9e8L,0xd0623ab1781696cfL,
42013         0x7a07cedd58529fa9L,0x831b4a9d449c33a0L,0xb7b7b72417b171a8L },
42014       { 0x0e1ff931f5a9aa41L,0xd43f33dfe356ba47L,0xd2abfc77f003b5d2L,
42015         0xc2909150882c0313L,0x83823f6c7ee111a6L,0x9d7a2d82f59cb72dL } },
42016     /* 23 << 266 */
42017     { { 0x52e712549b33f6fdL,0xd4d9b73f5c414babL,0x9834943177e93a9bL,
42018         0x848b53c99f283fc9L,0x86e48b6234c787efL,0x8b498e1cb3166045L },
42019       { 0xb2259559e5e456ddL,0x0316069fa2c2ca8cL,0x9a70e29ef6524ecfL,
42020         0x2477ffc9bfff600dL,0x80a9a5e081869e1cL,0x84f887e70a78f6a0L } },
42021     /* 24 << 266 */
42022     { { 0x7f89c2c40c9f23eaL,0x8fb025d4d6ec2b2aL,0xbe70e48b12d9f811L,
42023         0x703ac1bdc7a43dd0L,0xa4309a2c2118ca3aL,0x5a95d7b301943012L },
42024       { 0xd9597d87811f6c73L,0xf82e801596079992L,0xfcf8760df1561aa9L,
42025         0xe1e0306e2d91ee39L,0x99979031e0bbcb6dL,0x49259e54cfcc8746L } },
42026     /* 25 << 266 */
42027     { { 0x0de49373a38fb6dbL,0xda9e9036d6bf0a7dL,0xc99fe05fcba221c4L,
42028         0x45b51edd4cb730f8L,0x312670a3b064e142L,0x60dd1edecddb9ddeL },
42029       { 0x94be613b9291d75dL,0xbc49861ca00b9831L,0xccec7a08230320bdL,
42030         0xd1de7bd80ff967b1L,0x5a1164f105fda7e3L,0x864cfc4ce3004538L } },
42031     /* 26 << 266 */
42032     { { 0x06f76165385095a7L,0x3c73ac918514b2e0L,0x8ac1120a04b2dac0L,
42033         0xed6a74174382d5b3L,0x852a5a7864a32d50L,0x7ef5b84bbdc721acL },
42034       { 0x73dd18980480d271L,0x755b23e04ab0b11dL,0x2e78238982391e5aL,
42035         0x4957b5c948923446L,0x4ab9318f6921c1fdL,0x8e455abd3e46607bL } },
42036     /* 27 << 266 */
42037     { { 0x5c41aafbaf25d6b6L,0xe351f1df916b63f6L,0xe28e9ba98a6efd65L,
42038         0xcbca736356afe7b0L,0xa77d6077f7384e6aL,0xcc9ad74a738a90abL },
42039       { 0xe1071caa2333dc2cL,0x4415691000dfc2cbL,0x0ce43c16afd89eefL,
42040         0x0cfbb8767b812045L,0xe6da40fa6d916fc7L,0xe404b3436302af21L } },
42041     /* 28 << 266 */
42042     { { 0x4073f246d9915433L,0xc0149d5672e06203L,0x0abb06c18fcec6a1L,
42043         0x3a7d1295d75a73f1L,0x65fd8700f18c9488L,0xc3cc0b27732f7741L },
42044       { 0xd15d8c8025a261caL,0x518233510dc1fee5L,0x981607c7120e1266L,
42045         0x0e486b11f42cc9fdL,0xe606c16c01a888cfL,0x079dd0b31ea23249L } },
42046     /* 29 << 266 */
42047     { { 0x19c62d3c58624305L,0x44974c41b73eae15L,0x2df48b6dd023231aL,
42048         0x6a82c197c6fad2d0L,0x55758764c623fdceL,0x29f533fbadcebd90L },
42049       { 0xcfbe4155cfff7336L,0xb18415c7bfb609fcL,0xc23395ad8d411a6cL,
42050         0x25aebbcf0c92de60L,0xf4d3b1ebc5ccf268L,0x9646b4a79ac85de3L } },
42051     /* 30 << 266 */
42052     { { 0x0f423f3013d6cb61L,0x239b2baa66674aceL,0xa6f2ba39eda69340L,
42053         0xdbbd20eb43e6918cL,0xe6ce84a3e5e7248cL,0xd9184bb5e04c580cL },
42054       { 0xe4b76d96a0738aedL,0x98662b6090d480a8L,0xfb14bec72610b6c5L,
42055         0xdfcb01f6bb65837cL,0xd7f0b6ad4a97fb21L,0xe6d84f4bad59b2ceL } },
42056     /* 31 << 266 */
42057     { { 0xa79085eb1f7e921aL,0xe2737a08d0aeb41fL,0xa96d7e8169ead959L,
42058         0xbed1731b733b7c6aL,0x7768e32df508a48aL,0x6f73a08651ccc97aL },
42059       { 0xb7f94a4b9122db73L,0x1cd17ca257ec947eL,0x7c83fe278f8445f1L,
42060         0x661f5d82b520fe34L,0x495354942233d364L,0x0bf7abe663925ca2L } },
42061     /* 32 << 266 */
42062     { { 0x923e948c203bb368L,0x58e37a2b231a80e0L,0x345a011a6df27debL,
42063         0xba6784c1d57f4ca2L,0xf01b3703114196e9L,0x981a63eb1aab426dL },
42064       { 0x2ffdc97851770c1cL,0xddd19da6efa722fcL,0x5ca1c01216f09c1eL,
42065         0x612021de5b9cc0b6L,0x910e10e95e150569L,0xacace9dce2ab93eaL } },
42066     /* 33 << 266 */
42067     { { 0xf66601a7aae13423L,0x940bcd2882cf3308L,0x55de590974f632bdL,
42068         0xf677d9d4f183faeaL,0x54026b2828ab364cL,0x2a5353dc743469edL },
42069       { 0x15f02aadd46871d5L,0x4b3ec89b5a2100d1L,0xca85c3681eb9c381L,
42070         0x145cc7fd50e78466L,0x75fdac98c4b4cdf3L,0xb7cb9170796136f4L } },
42071     /* 34 << 266 */
42072     { { 0x6e89c0df54827957L,0xafb26b6d05805250L,0x0c0dc4ea37343465L,
42073         0x2d3c8b873daca876L,0x733b23d9554a2cd8L,0xd4f2936a6a04d38dL },
42074       { 0x0937611686f90d9aL,0xcd854d3211425591L,0xbaf9d4cab55b4bf3L,
42075         0x47259b95144676c2L,0x765cc4b55d7d2835L,0x36e47a8882b2cbafL } },
42076     /* 35 << 266 */
42077     { { 0x2070db373af8c96dL,0x4c2db2623b70e976L,0x7ed4d1e9c01f404aL,
42078         0x04a52764b39d2e07L,0x06e4a7984ebe3ac3L,0x35c9c1f68d7645a7L },
42079       { 0x2e0b48c75e9c295dL,0x5d44fafaf78e0717L,0x2fc27eba04213067L,
42080         0x9f3fb2ff2ab0f0e6L,0x374b32fd0c730af6L,0x06ec846129583945L } },
42081     /* 36 << 266 */
42082     { { 0x583a3272230be37eL,0x4d3298951c55f593L,0x3b3a2d8a350f0334L,
42083         0xec830170b25498abL,0xd65847d9b3a01571L,0x4605e739663f86fcL },
42084       { 0x971b8e115c4bf502L,0x651d179571a892b0L,0x57930832d2d1a4f9L,
42085         0xf97010745b09a4c4L,0x76b023e55ec2d1a6L,0x8648b8bcf49e1329L } },
42086     /* 37 << 266 */
42087     { { 0xc5a8884d6d5c7411L,0xad32aa97d098e2f2L,0xf99569e945d8ad00L,
42088         0x35801c1c0a232776L,0xe426fd65fb1a2cb2L,0x874b559ecb26ae10L },
42089       { 0xfa67c2ddf44461b8L,0xc58f8d229418e17cL,0x5998197169908eddL,
42090         0x8a4a14b8a1f78300L,0x4814c36e61f7fbc5L,0x0389dcc716a1c7adL } },
42091     /* 38 << 266 */
42092     { { 0x777e308fc072cf71L,0x4a2d66928c807ed5L,0xa4fe074124842689L,
42093         0xa3c2a867151ed7b1L,0x52ef24f24d22ee35L,0xe684ac76499053ddL },
42094       { 0x0b7c223b0582cb86L,0xa6c18539bb81f713L,0xb472da7f66d2aab9L,
42095         0x3592ab7b7916d4e5L,0xed651a05770c49a1L,0x7b879da1c0256420L } },
42096     /* 39 << 266 */
42097     { { 0x82eeaa1496f83e29L,0x586f3e8de5cae8eaL,0xb671eddbb298eb5aL,
42098         0x41efea86dd0da080L,0xfe9af019564a382eL,0xb2f370463027693bL },
42099       { 0x65466e5018789c0fL,0x5b0870ac2ebfe89eL,0x9093f416a59f3a53L,
42100         0xab0cd17251864c77L,0x8e3aa9864481457bL,0x46cfd207896346a5L } },
42101     /* 40 << 266 */
42102     { { 0x473bdac887cb6ae0L,0xbd3001b3f155c32bL,0x109643c20026e8a5L,
42103         0xc4f5f6cc188a568eL,0x630aecf64d2758e0L,0x4549949955b91872L },
42104       { 0xb10f19d4b6a09df6L,0xc537a4bb37f26d01L,0xd29f505c4d19a293L,
42105         0xf388a5d2cbb09b17L,0x462efffc6811a49bL,0x8a1cbc40b2f3aef2L } },
42106     /* 41 << 266 */
42107     { { 0xf7d94342b7b42998L,0xcdfd6e43629089abL,0x622e8d3cf7932661L,
42108         0x4818adca0b14b257L,0xcc1dcd1ccdb486bbL,0x58b6cb7ecce8b358L },
42109       { 0xca36c0b4e640cebeL,0xcc5598942d25f742L,0xdf4f2a9ed754d3eaL,
42110         0x072eb5e5f44a8604L,0xfa7b1a03cd5ca1c5L,0x6b6b4967d4779eceL } },
42111     /* 42 << 266 */
42112     { { 0x0f0233df8665f6f2L,0x8cd887463bd40f39L,0x23a41596eedf8d3aL,
42113         0x3f50e3f0b5ef5455L,0x935b24e0a50cd358L,0xfdd0e940d362a9a7L },
42114       { 0x6b00a6d154371aabL,0x2e707c4e1204bcf8L,0xb4d2d2dc30233f88L,
42115         0x470c3201783e58efL,0xf53987865ac21a16L,0x278487d626c3513eL } },
42116     /* 43 << 266 */
42117     { { 0xab5ac4df7d40427aL,0x0c4fb23b66ebdcedL,0xb02f8632b87df612L,
42118         0xebbd2e7f1801700cL,0xdd11de725b675e5bL,0x2adfb20662d7210fL },
42119       { 0xe3ba7c0e28667b70L,0x3e190a438fe31c22L,0x57908f2bc3390733L,
42120         0xe9e8714ccb6fefbbL,0xabba506dfd51c513L,0xd50f979f6b798860L } },
42121     /* 44 << 266 */
42122     { { 0xdf224cea1eed2b0bL,0x10205f438814572bL,0x8b99d85c02eb9b6cL,
42123         0x7a8a3d146c63a672L,0xc8822c6c96f45695L,0x0530f619c7f532f5L },
42124       { 0xb981e182310f8355L,0x49318290f201444cL,0xeaa4c406f9b76d19L,
42125         0x960fa2c7534a91c1L,0xf98966d1522b7d9dL,0x66912542c757dbd6L } },
42126     /* 45 << 266 */
42127     { { 0xe265972e1fe73a1aL,0x77e234c2987a1a34L,0x1814bdfe8c5789c0L,
42128         0x908f55c7df2ca0d7L,0xec207eb2a6a50ceeL,0x63cfeaffee916760L },
42129       { 0x808a758bf466a1b8L,0x2a48112d8383b0afL,0x5238922ef1a4ca6aL,
42130         0x5c422786778de666L,0xf5a8c6b5d2f549ecL,0xcac5d0c5242bbc9bL } },
42131     /* 46 << 266 */
42132     { { 0x33e0e005b34dbf06L,0x7bbdbe1e1fb341dbL,0x443fde882bab5425L,
42133         0x9db5bf1a86b57cdfL,0x72c535c309a93848L,0xf7aa9432b5f216ceL },
42134       { 0xc17dc7ae0242308dL,0xf1cb5dc5db0e4c0cL,0xb9d16d58a2b7112eL,
42135         0x486cda07ee4494b5L,0xeb46ab545d431adbL,0x3261dc5181ab565aL } },
42136     /* 47 << 266 */
42137     { { 0x476a4bfaa2a8a081L,0x43c5f841394f851bL,0x659baa591f5b22ddL,
42138         0x49a786aa65f680efL,0x091bd21608fcb9d8L,0x13f6953d984fe1f1L },
42139       { 0x7b5d9f4b6d6d40a3L,0x2f135dcf0d458d54L,0x2da18c3d3a71204aL,
42140         0x3d93edb97a3486d6L,0x026fec7261846af9L,0xa62197bcd5200dcdL } },
42141     /* 48 << 266 */
42142     { { 0x0cdd83725070e0a9L,0x7c5ad562ec550783L,0x9652b8474f3b8d2bL,
42143         0xfdd60d93e6e98d73L,0xd51cae2ca3479d0bL,0x11b93b6dee05c006L },
42144       { 0x9d72b82d8a3b40d5L,0xc6e996fea7d24855L,0x420672f7398603deL,
42145         0xd551b34a9a1af2ceL,0xdeb8c1d913bdce0cL,0x56ca926debbeba7aL } },
42146     /* 49 << 266 */
42147     { { 0xf63ec096bb85ca8aL,0xc149664173bc52f2L,0xba792560c02fc808L,
42148         0x9a6043e3533c6523L,0xa9d78f0aa8564390L,0x7fef67e494614bc7L },
42149       { 0xb4091b8fd389234dL,0x5913368e82db1d08L,0x178f7df0981cc6caL,
42150         0x19b1f2be725ec048L,0x852aad85012f9c44L,0xb07cac0dc894e777L } },
42151     /* 50 << 266 */
42152     { { 0x1c1709d02c7e0767L,0xec1013234d70b117L,0x95c57e678beb8e05L,
42153         0xdbf29e2e1133fa4aL,0x917f4a6c5139e020L,0xcf0be5098399735dL },
42154       { 0x83014c169c878b4aL,0xe0c14d2cf789b84fL,0x222aba39165a4aafL,
42155         0xe135f2b384441391L,0xb6f1cf7e19c3ee07L,0x2f918da9f810499eL } },
42156     /* 51 << 266 */
42157     { { 0x026ee35816bb2bddL,0x8c8953f8566d8470L,0xf0cd746d0fc63932L,
42158         0xddf3e54f060a07a3L,0x8da877a643b4e92dL,0x7ffd839dfdc9e34aL },
42159       { 0x5c3527445df04d9aL,0x3c5eb576b69f84e0L,0xf73cae300848d993L,
42160         0x3438f2bea0fe7fdbL,0xd4e7511f0eaf0168L,0xa7ffd167c768386aL } },
42161     /* 52 << 266 */
42162     { { 0xbb91877acfc74bb0L,0xbe742182a060a71eL,0x116e5a626ed7786cL,
42163         0x0a496b1bea669e56L,0x3a012174b8f02e6eL,0x6add760c106174f4L },
42164       { 0xaf2606e05e0292cbL,0x7800a495c7b7bad0L,0xca02c9320a1c5954L,
42165         0x904f23c6b245ad57L,0x28d6cc2172934de5L,0xbb7ed903283752cdL } },
42166     /* 53 << 266 */
42167     { { 0xc80288125e58122dL,0x7a5c65f1c4b089caL,0x4ddfd3663b980faaL,
42168         0xe8129f7f96a909a0L,0xc177aa042221ffacL,0xaf444ef78ff46e81L },
42169       { 0xa627f3d76b154996L,0x0f06fa7b115e2a5dL,0x2532b85d43fdb775L,
42170         0xb6d96b32eaacfb58L,0x898766304f834382L,0xfd2ffde9d5636b92L } },
42171     /* 54 << 266 */
42172     { { 0x318cf974973757d0L,0x12882d0a94ac73a2L,0x1fb74a53bc250843L,
42173         0xc612569eccd8d47dL,0x74cff8789d5f7c8cL,0x54e0e475375a7366L },
42174       { 0xe8322d23d0f57cd4L,0xb6ec5666d95a6e0fL,0xc8374b254a4bd084L,
42175         0x9459181b349d93ebL,0x7011f0a61368b9a8L,0xed57a19137eb2833L } },
42176     /* 55 << 266 */
42177     { { 0xd245d180fa5f79acL,0x44c331f35b41fcb3L,0x13188b6e27ee6c0eL,
42178         0x54ce984b23fdc742L,0x66d4e1303c81c213L,0x432174030ecb6fd8L },
42179       { 0xbbeb09fe111ae08bL,0xb22ca6b42e2df05cL,0x0e9d01dd0fec9be9L,
42180         0x9ac4523dfd2fc4abL,0x3d9e98c8fdc059f5L,0xd52e6dfb2d2cbde7L } },
42181     /* 56 << 266 */
42182     { { 0x80d7ef8598100f17L,0xb9795c7112db3f3aL,0x44473659296a7c44L,
42183         0xa46810f21e5bf539L,0x5621241814ee1e3bL,0xea8284e209931822L },
42184       { 0x424c613e42ac1e42L,0xe84a80afbccf9466L,0x21a8cdcc45132204L,
42185         0x9505a4148d58da62L,0x773e09837b3f47aaL,0x0ad0cc91e109bc6dL } },
42186     /* 57 << 266 */
42187     { { 0x98e2509bb527b250L,0x2dd30c824a9c762bL,0x54025da4cb2a00a2L,
42188         0x88ed00ff04d8e0e9L,0x5699890219ab1fadL,0x92fffc41697b0226L },
42189       { 0xb481d1ee7d08a39bL,0xea773f7f82be0803L,0x967e848a6de8ec6dL,
42190         0x6ea1e46380293472L,0x941cded72e988de3L,0x85f96b23399da6b5L } },
42191     /* 58 << 266 */
42192     { { 0xabd86572f1a62473L,0x9ec25d0bec274738L,0xd27d1a8c2052d4ccL,
42193         0x1f2a2a9ba95de3f0L,0xe3b8652ea2c91bcaL,0x1a4f6900822175deL },
42194       { 0xd9405d4662475a44L,0x4ecbe06cfe55c587L,0x30f8d199a4ac2f35L,
42195         0x2a5defd8d3c12844L,0x6d0fd9d673fe9b7eL,0xb0ae1019adf1a196L } },
42196     /* 59 << 266 */
42197     { { 0x6c9a378c30734f5eL,0xdf04359f6aaf7b42L,0x244422fc16f87409L,
42198         0x81dfb15b08bcd67cL,0x24b7d083a5e4a8e0L,0x557183410431786fL },
42199       { 0xc8feeb8c33f3ec2eL,0x360098cb2be371a0L,0xf4f3d992bdb874ceL,
42200         0x47b432ed87af8471L,0x5c4b1dbdf87535deL,0x6bb6d6dd8301f660L } },
42201     /* 60 << 266 */
42202     { { 0xafa9338759769f77L,0xe6c710cb49e502b3L,0xe6fd7b8d1514da98L,
42203         0xb5924c63aedf93caL,0x4cc36795c112b37bL,0x0ee30ce3231def42L },
42204       { 0xe1f436e7daf8a37eL,0xed54b7f56efa184aL,0x09ad65752c0dfe63L,
42205         0x5ed9da43ca530b38L,0xea2fa192ae156274L,0xbf096c54a4429edaL } },
42206     /* 61 << 266 */
42207     { { 0x41401b98f54490cfL,0x361a24a143b21183L,0xf0176431b6570f0cL,
42208         0x851bfe9d05c8bd3aL,0xe44f4ba74611e1b9L,0x587677dc28bf2c27L },
42209       { 0x3e3b67886d85341fL,0xad65a69468aa381bL,0xd269dc711aecf19bL,
42210         0xb94b64a2d98e6a2cL,0x6004b569a94661a0L,0x81713a8e689181d5L } },
42211     /* 62 << 266 */
42212     { { 0x55b1901d3649638eL,0x2e9929c416abaf64L,0x2d2b160ee9cd0090L,
42213         0xb5ef6525f55f13ccL,0x447aacbe11c3e8a5L,0x2c54e602630cf4c4L },
42214       { 0x3f6d99fc641d8eb3L,0x35386c1384877912L,0x7195db8973f31b6fL,
42215         0x63297cb2d3a22085L,0xa627593833fe97cbL,0x2f9a6f0da1eaef0aL } },
42216     /* 63 << 266 */
42217     { { 0xb70d7683c63d6dd3L,0x60ea781084acedf1L,0x7646260c40d62cd0L,
42218         0x687000b456142a6aL,0xce3c4728ccb9177bL,0x45377d059928c509L },
42219       { 0x75cc40bb1a78af0dL,0x43a1661cc69e59fdL,0xf9bbcbf8044a943cL,
42220         0x934fd40d7c372080L,0xb6edae96cb2eb940L,0xa02bb5fd6e063cc9L } },
42221     /* 64 << 266 */
42222     { { 0xac58c9e09db9ca19L,0xd308ea5d390054d0L,0x32ef4afc2cc42529L,
42223         0x08bd48b397c2bdf9L,0xac8a7803a849e19aL,0xcd51c0da75c31496L },
42224       { 0x733dc7def0e2d49fL,0x7c9caad1b44b8cc5L,0x6d9c5b0847be21a8L,
42225         0xfab0fdc55ebf426fL,0xd60748caf94e9e5bL,0x3072e59269366089L } },
42226     /* 0 << 273 */
42227     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
42228       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
42229     /* 1 << 273 */
42230     { { 0xb06c17a3f0ef77c5L,0xc144e7846df6bf59L,0x2440ae990038aeb2L,
42231         0x83bf711b58b402caL,0xb8763e00b577732aL,0x509e91eff651a932L },
42232       { 0xbe02ab9d00ac109eL,0xfbcb426c8dfd78f1L,0x7ed272f64283f80fL,
42233         0x098cf0572365da5eL,0xd90e6f1805dc6bebL,0x09ef177fcf7b9d72L } },
42234     /* 2 << 273 */
42235     { { 0x6f101762eeb791c4L,0x0d942184df261effL,0x2c58e2aaac1dc827L,
42236         0x51410e89f835a1b6L,0x981333a7629915a4L,0x371891b60c14148dL },
42237       { 0x4d20b3d3c0904446L,0xdda7ecc8949776d8L,0xa664b68c2a2645f7L,
42238         0x7a6bc857add082eaL,0xe7467dc63e5ff206L,0x40a6c34004e2dfccL } },
42239     /* 3 << 273 */
42240     { { 0x3d0efae3106ba1a1L,0x9c717ca192d7be5aL,0xa5cb5a253f00eeeeL,
42241         0xc2f9258cd86161ceL,0xd2b0865f5c4a389aL,0x8c06d7689b1f2159L },
42242       { 0x5a758a612753107fL,0x5ab6449d0a539c19L,0x88655a4949d301c8L,
42243         0x129647e61c4bb89bL,0x06f0665ec360259cL,0xcdba2f0b066197d1L } },
42244     /* 4 << 273 */
42245     { { 0xa235456903744726L,0xd2169e6dd8d275acL,0xab0c247b132c5689L,
42246         0x129a5c9dcc4760bbL,0x03eba46726ae821bL,0x67a33fda3df1cf83L },
42247       { 0x010813cfb8421b7aL,0x7b0f507098cd6d76L,0x907320b31fe4b600L,
42248         0xda3bfeb398dd3239L,0x23f1ed1641abb34cL,0x01b30f29946f85f1L } },
42249     /* 5 << 273 */
42250     { { 0x97c5f1c7d3970d9fL,0xd051c518ac8e6227L,0x3f67b3958e87edacL,
42251         0x3a5cbd287b9e4c17L,0x58c009e65671841dL,0x7bc5bddb518b3b39L },
42252       { 0xe7a8a6335e74a614L,0xf92e4c226ed89a92L,0xd0d6e80a118e663dL,
42253         0x33dba4f9dcbb4aecL,0x1d4cb3141f917417L,0xd8b17bfa3b0c5859L } },
42254     /* 6 << 273 */
42255     { { 0xc0fa0d21a093c3e0L,0xad34c41439e902a2L,0x81c8cd7599bc928bL,
42256         0xf7f8be14cdbbe4d8L,0xe46268b5c2339529L,0xcdc54e348283ba7dL },
42257       { 0x4c5cf62778904fe1L,0x056678c11b45e4d2L,0xb555ad6ad265abc2L,
42258         0xb8f8ca3f830306efL,0x48c8764681c20e1dL,0x5bb0a529737a7944L } },
42259     /* 7 << 273 */
42260     { { 0xbd4c2bfc9cf6fc5fL,0x888885140577af66L,0xb5aa2f05f9e3f7c5L,
42261         0xbd477bae64de6007L,0x1da5dcc9747e1224L,0xc2293d1732a15f5dL },
42262       { 0x4dd9daed029d6cbaL,0xf51362d62cf299c7L,0xe1a4b5c4279cd1e1L,
42263         0x4b129a5ea89acfffL,0x8292228ece1c8744L,0x5a440fa04fd12c86L } },
42264     /* 8 << 273 */
42265     { { 0x285248309666f8eaL,0xd579b3dfeff6502bL,0x3a66fa9900e4f78aL,
42266         0xfd8a65bb54a3f7a3L,0x505d3f631965a79aL,0x9524972c1891469aL },
42267       { 0x78367cbc3354da3aL,0xbfe1fe3de4941c6eL,0xe41bb3f6f5af173eL,
42268         0x57cb03ca5ca36597L,0x27f86cb87b99f795L,0x5cae6514ad4dcef1L } },
42269     /* 9 << 273 */
42270     { { 0x4b43f0aef1743346L,0x1700581944324c46L,0x86c77197e3603fcaL,
42271         0x230d516f4a6858aaL,0xee965b4ee7c56f7fL,0x4f4ed301dcefb75aL },
42272       { 0x610b138c4a740b23L,0xda3996a83ffc3599L,0x930698fcb2d1c304L,
42273         0xd55bdcd3702bf80dL,0xdf767c419e334726L,0x975352a9d0e819b6L } },
42274     /* 10 << 273 */
42275     { { 0xc117353b5e816653L,0x0c87bebe820641d5L,0xee588c6d9ecd29a1L,
42276         0xacdfe622c70edf9bL,0xe8b8024cebae414bL,0xd0c426dc9bd7ceccL },
42277       { 0x715cbc2efe735ce7L,0x8376edebc5e7017aL,0xe9b37efc07990dd5L,
42278         0xc89e384ed8d75238L,0xbc594d218438ffb3L,0xbe77e4d4d3628473L } },
42279     /* 11 << 273 */
42280     { { 0xc53720cdd1b4f3baL,0xb8ac3b4fadf2a330L,0xcef037f5fe179e70L,
42281         0x2743b382589d9147L,0x77a094d624423d58L,0x9e34c2e62a23d372L },
42282       { 0x641ea760983a5893L,0x2211e6a49a81548eL,0x56578a1a48735310L,
42283         0xedb91e03a57faa83L,0x4e14d5649b133629L,0x341f3ef957e82ff7L } },
42284     /* 12 << 273 */
42285     { { 0x4952a350d87a86c9L,0x08ed7da7034f45f9L,0x1e9ff8272bd716d0L,
42286         0x2471fd15f1d9331fL,0x0c708362d7370b75L,0xaddedde6fc1a1051L },
42287       { 0xf4475288db27b186L,0x5be4d46b3760bc11L,0xe44435d906d47ee1L,
42288         0x865cf7c8d0b7c8a2L,0xdb412be08d31a252L,0x4b90a9322f24d71cL } },
42289     /* 13 << 273 */
42290     { { 0x71b84eed8f7a3ab9L,0xf41d7edb2dc18004L,0xe408156dcc4a02cfL,
42291         0x0be155a25cd906caL,0xbf4b0f6991516399L,0x2ea85d434a7ff94dL },
42292       { 0xf199b31da26e9974L,0xc584df250b805ae3L,0xd4e7e8597a3634daL,
42293         0xf553f07770db4be9L,0x1cb1056fbf0dafa3L,0x235281b2a817d6edL } },
42294     /* 14 << 273 */
42295     { { 0xc3304e9260d2b80bL,0xab24dac9a38753bdL,0x40373d04cc1ebbf8L,
42296         0xa5a162d3437e68d2L,0xc8018b1257e8db12L,0x0c99c6de9bb52643L },
42297       { 0xafef0ff6ee24e63bL,0x329c46264bea9a14L,0x1b17d2e6effae4f9L,
42298         0xd25b93aaee300afdL,0xe83bfdcba0d62da4L,0x5e919538fd787740L } },
42299     /* 15 << 273 */
42300     { { 0xf5bbb4fe196c38e7L,0xe0011deca5c75baaL,0x2e29fe59b835aa49L,
42301         0xee22e2864230f17fL,0x8774214ff94c1060L,0x35bcca38e6d4c126L },
42302       { 0x18d984dbb7c9d255L,0xb1d5515c9b63dc4fL,0x425360f12a0cb854L,
42303         0x038c7f2317a1e286L,0x5e6b12ce951f18b2L,0xabfbde5ea65b1de3L } },
42304     /* 16 << 273 */
42305     { { 0x38a49bf555f0ad9fL,0x1a84c6b8f3618639L,0x5f709eca01b2f7c2L,
42306         0xc479a6505be8359fL,0x6b6a22bfd6646b3fL,0xcce78878cc5b711bL },
42307       { 0x8e7dbc63b446cc63L,0x231bd027218f800fL,0x2d3a7e04030271ebL,
42308         0xb08b5978e22fb3c7L,0x860d62789be0d46cL,0x253a31c21d49a915L } },
42309     /* 17 << 273 */
42310     { { 0xab4dbdf36ebc28e5L,0x56d5fec527be58b5L,0x6e9375d3cf3fd509L,
42311         0xfffea897ca4ddf48L,0x0a9542ae6a3757c5L,0xb9069a2e7d93911dL },
42312       { 0x3e74ac5f3dc967b8L,0x99c38796ea8f5a21L,0x27797b97a6ddea53L,
42313         0x9501e1c561dfcc1bL,0x568d3abe448e95c5L,0x021f8f4c0e7c186bL } },
42314     /* 18 << 273 */
42315     { { 0x98aa1f7a6e44f63dL,0x6451b170cb597ec9L,0xc0f6ee8721e13b78L,
42316         0x36c3b9c751cfd003L,0xc31718ed2f610040L,0xdddabc6688c48009L },
42317       { 0x5626f090a8369e4fL,0x0eccb1c06004a968L,0x2f0448035da2f1a4L,
42318         0x5390b6dd3846a726L,0x5c4caffea24f3083L,0x3c9baac8c4842995L } },
42319     /* 19 << 273 */
42320     { { 0x58c5fd1205c7a75dL,0xa98007fd10866935L,0x91369e874acd567eL,
42321         0xb7e05dc322c6145aL,0x24c949b4d949d8b2L,0xc5c574a590a6a437L },
42322       { 0x4306f0334798d1d5L,0x82af09f4520e01b3L,0x53fab41b81247f00L,
42323         0x3096ccf44ea93cbfL,0x9665e039f13ff09eL,0xb623f8b158e036d9L } },
42324     /* 20 << 273 */
42325     { { 0xbad6b669376bdc3fL,0xc4a8e7bc23a9ff38L,0x3f54d8c4555fb0a3L,
42326         0xfb3d5e1d2b23db1bL,0x6379f78af0d7eba9L,0x36004febfa0beffaL },
42327       { 0xdf0a373c334ff01aL,0x10314749dff12a1cL,0x1d52ddc7f184c1b3L,
42328         0x79431663ab02d404L,0x1a6488c17f4d3795L,0x3363660f7cca9102L } },
42329     /* 21 << 273 */
42330     { { 0x1e4595c6db3e57d9L,0x49e3d3d9bfb94ec5L,0x4c720de1a4f12881L,
42331         0x91a08340b06c64e6L,0x8e5c72f0ef0857deL,0x2c9b4cbc09bb76fcL },
42332       { 0xd4262fe4b0bba8bfL,0x64c5fa1439fcd07bL,0x518da4de62904ceeL,
42333         0x626182ebae4c9717L,0x900fe9f806351622L,0xf74aaa2241f9e4d7L } },
42334     /* 22 << 273 */
42335     { { 0x9d2c02839fabb29bL,0xb27ac46e172348cfL,0xddc6fb63de1f64b2L,
42336         0x532dc953bb097c87L,0xc7f5180cdaa34e27L,0xf96e4ad755438893L },
42337       { 0xc0b2eba324f54a0bL,0xeba396ce5b50d12eL,0x80b3a7f699772783L,
42338         0xe2fa82ff3ff7df4aL,0x55375369a2359baaL,0xa28388ed856c05bbL } },
42339     /* 23 << 273 */
42340     { { 0x4432fe8495a2d064L,0x4c6380747fec6057L,0xc33705bb33cfb533L,
42341         0x5e7fb7c976991cfeL,0x73d249bdb3ac1b6eL,0x963964c896aeddccL },
42342       { 0x8c1abe0e56b71636L,0x6ebb841f38693cd1L,0x00ef6a7b60e7cf67L,
42343         0x29ecded2c258bcb9L,0xb2d566a5e40fd26aL,0xa2910f4ed512abffL } },
42344     /* 24 << 273 */
42345     { { 0x56d6515604dc109cL,0xcd740cc809c1d307L,0xef9e049f10dfaeadL,
42346         0x19750b3ae30b70b8L,0x11ed860015c6a562L,0x53bdf97e12097026L },
42347       { 0x79559d056c0d908fL,0x8f1d75bab506d527L,0xd6fd7323ae8fb3c4L,
42348         0x834639c9a4111f88L,0xfc69a029a310a683L,0xa4467bbb255f2e9aL } },
42349     /* 25 << 273 */
42350     { { 0xa809a063e9e3953fL,0x09242dc960dc53fdL,0xa48f52d00080c436L,
42351         0x762a585dad2eb70dL,0xc6d52f047a3c6aa2L,0x1b6979dcbe60899cL },
42352       { 0x7a07af246d760794L,0xa5b1f912ef5c1118L,0x36367e4375bb329eL,
42353         0x594f349029e6bddbL,0x13cdc4aaa4a4f1edL,0xa7c3ff97b687a69dL } },
42354     /* 26 << 273 */
42355     { { 0x1e79881146f7c4c0L,0x25730855946abf8eL,0x1741fdeeaac2031eL,
42356         0xef34715b72ea60b6L,0x378eb680350ddcfbL,0xe72ac880ec237141L },
42357       { 0xb173251fff125bf8L,0x37ffb0cf4999b6daL,0x9eeb91a8817779f6L,
42358         0xa9edff0ae93ed1f3L,0x31f2ca241d7772d6L,0xd25c3f3b97f67b92L } },
42359     /* 27 << 273 */
42360     { { 0xb6c4144381478e46L,0x7b53d46350cf8795L,0xe96e7cb9ca5bf2d2L,
42361         0xc8fa39c695ac9ba6L,0x8ab037d12efc83d1L,0x0ccacbcc94bc2536L },
42362       { 0x45e7c7c774038e13L,0x47d5b7292f5e344eL,0x2e0ffb2cb1eed282L,
42363         0xfe88d3a88d5d0b37L,0x804b612e2487d971L,0x6f316d66c95d08faL } },
42364     /* 28 << 273 */
42365     { { 0x5f0a58a8a3526fecL,0x849c171b02f028c1L,0x34d77ce856a5d3b5L,
42366         0x9701621754d5a92bL,0x0cce35c12cc5b70bL,0xd9d5a00ae83f1f4aL },
42367       { 0x064223f826a0368bL,0x328a9f6940e16452L,0x3a6ac093d305ad2cL,
42368         0x759d9a16beba7c44L,0x86021de7637ce7c8L,0x276bed61cc80c1ccL } },
42369     /* 29 << 273 */
42370     { { 0x5d4a529ef9822e60L,0xc6f2702006edd801L,0xb2511d84efa3d8d6L,
42371         0x38cfba656a4c6598L,0x31a5779765c067a9L,0xcee558f387d2ca0aL },
42372       { 0xf22345cff844260aL,0x29b6352a63d2ae75L,0x59dad0ab6cc9f2bdL,
42373         0x615ad3599ae1bcb3L,0x3a29a237f692f42bL,0x543771c40f26163aL } },
42374     /* 30 << 273 */
42375     { { 0x427437e7d722576cL,0xc9d7ac7abb548ef5L,0x72f00f28c331a9e0L,
42376         0x5d9327b564949b48L,0xea75f3b54e2bb808L,0x28acdea068678f8bL },
42377       { 0xe9e787b20878223fL,0x213f47ff7e7b0a11L,0x5e967d39f277a3f7L,
42378         0xe6651015d2006de4L,0x49b87e4bc44eb1e0L,0xf461bb76222cd3a2L } },
42379     /* 31 << 273 */
42380     { { 0xd6b9341fde60d963L,0xb1a8dd0d5319a930L,0xc4f18dc0aa6b20b5L,
42381         0x787de2e7f23f4401L,0xc15b38eb28047029L,0x0bffc0b55c99d51aL },
42382       { 0xf0310f39740b5798L,0xf69ea1064ed8d3bfL,0x545a54d79f6722aaL,
42383         0xe5a9dee3af4017c2L,0x45efa2ec4a659592L,0xc5d64bedbed4e245L } },
42384     /* 32 << 273 */
42385     { { 0x66797f56bbe4bddaL,0xb92a369eda51b1a2L,0x18eef4a531adb034L,
42386         0xcf1cb5ee5d185cfcL,0xf596a59bbd53c27bL,0x1e1dd6f569002569L },
42387       { 0xd9433e797687e48aL,0x7d8d24c20cbcb9ceL,0x233cd7ed65d68ecdL,
42388         0x201bbe09fb2aded8L,0x987f4975ac9b750eL,0x949da385337f7f25L } },
42389     /* 33 << 273 */
42390     { { 0x31439e35b95fd11dL,0xf97e8fa4b691fb77L,0xcfdc02956d4ac378L,
42391         0xd31bc3b0d1a617c8L,0xd857098204bd015bL,0x30cca6efd6198f0dL },
42392       { 0x6a52650a805964edL,0xb656d7abd060eeb3L,0x5267f37ed38a9218L,
42393         0x5f28a2ecd3d6a193L,0xb7dc6e916d0d9c9eL,0xa7f84e4b219d45c6L } },
42394     /* 34 << 273 */
42395     { { 0x550ef2713398c3dfL,0xfe184954307631a8L,0x02cef50606e5cde4L,
42396         0x9687a39c10f11703L,0x02c35937acb10b97L,0x835b00fd13e3d219L },
42397       { 0x5828678b584d1abaL,0xbe55fb9cc9b40568L,0xe5a4a90e8fe19e84L,
42398         0x91e24c9248989b77L,0x094f9e7ae3d5f4fcL,0xfe9bdfb9759029b5L } },
42399     /* 35 << 273 */
42400     { { 0x43b1f8b9c1de72e9L,0xcbc8e0d4a3bdb164L,0x5c45d3dfbcc2e5bdL,
42401         0xb5137b69247bef53L,0x6d889f5673794e3cL,0x43e2fc9b1e2dfdc1L },
42402       { 0xda15dc5da995d3adL,0xa0db9f5ec43d86e0L,0xc42a144bcaac3bbfL,
42403         0x3c855fb174c43eddL,0x0731f33152688272L,0xc1f23e5643d7762aL } },
42404     /* 36 << 273 */
42405     { { 0x00c2ee1c9c7de99fL,0x28a7461d15e50391L,0x1bdc0e32a1c77952L,
42406         0xe98242c4d53d640dL,0x1a4724d2cf153c7dL,0x194e5dccba477d46L },
42407       { 0x871c8cfe3a0d4ccdL,0x62010af09af451fbL,0x9b354f9e6ddec75cL,
42408         0xe5db0a5d680e3511L,0x183d1270d247745bL,0x9910867aeecf52dcL } },
42409     /* 37 << 273 */
42410     { { 0xa970903e8bc2003aL,0x0f8bcfa4a3cf29bcL,0x7054f69e683a7ddaL,
42411         0x53928bf1ece30167L,0x2588bdf1ffffea87L,0x01683b5ed7172ad4L },
42412       { 0xa0ac85379de7e713L,0x217bcdfe9b0442bcL,0xba46b8f64d4adb3eL,
42413         0x320580990a9f8ecdL,0x0173b7bea504bdc5L,0x15321aeb82b1606fL } },
42414     /* 38 << 273 */
42415     { { 0x4f349e5f6e39d625L,0x37cbd935b80760d6L,0xb8657ee14b1e84c2L,
42416         0x502954064cb84bdeL,0x66d678cce8d23ef5L,0xcba173713ec3b79cL },
42417       { 0xed7ab3e526e3cee5L,0x34c68c516c44ef0cL,0xd704e724f8fdd226L,
42418         0x2fa0d2dd3a9b40a7L,0x373c5c70a23be590L,0x0beb611bda9f7f7dL } },
42419     /* 39 << 273 */
42420     { { 0xef506531913bc31bL,0x31210c5f8c320074L,0xb42faf19b861acc1L,
42421         0x26f09b89e041e774L,0x23fec89822f84c93L,0x9f8b9d708ec590bfL },
42422       { 0x604d7d2952644790L,0xb77e3136a2339c53L,0x17f1d7a920f2fc09L,
42423         0x8c6435d9e6bb96eaL,0x5cafeb5f3711b8a7L,0x1ec6c4edfa23ca24L } },
42424     /* 40 << 273 */
42425     { { 0x6fb6b7bc0410ca0bL,0x0e16eed2b3c13935L,0x98ad89d8316ff531L,
42426         0x4800ee179894d65fL,0x034ea3c448280170L,0x8126d12dc30be537L },
42427       { 0x43c2d27e5120e525L,0x96a5d498ee65df90L,0x654540105eaef29aL,
42428         0x1d8f07a17b678fc7L,0x54bc6f737b301270L,0xe58a8102e9473365L } },
42429     /* 41 << 273 */
42430     { { 0x1fa3a458aaaf79f6L,0x1d14ff613a1b7c64L,0x32c7da68f22ddb3cL,
42431         0x7b2345ac58cff63fL,0x214e6d9dce3c3af9L,0x36fba0b78b6691deL },
42432       { 0x69fd813cee1a30abL,0x50daffe91adf6215L,0x55b34de692871a84L,
42433         0x437f1b4b7ff3ea1aL,0xc3258ca580ff1c23L,0xdc220ffbc6d0b822L } },
42434     /* 42 << 273 */
42435     { { 0x93e56b47ad910b37L,0x8cbce4815d20d236L,0x25b50cac5872d763L,
42436         0xb50aa752d8505696L,0x02075e6d6f42b533L,0xf0b34a178f8d8352L },
42437       { 0x59f2feda5234531bL,0xb23e1da1751127c8L,0xe1f65e08b6759ccdL,
42438         0x47d8631c352e9500L,0xab10d299c13feb16L,0xf9e916a3e5c6a220L } },
42439     /* 43 << 273 */
42440     { { 0x55899ffdc06f1b65L,0x4f9ec6e011899630L,0x0df97edc50a29319L,
42441         0x5c4a10ea5e66f0adL,0xea7b4497aa3d14e9L,0x484d8f64d22cc470L },
42442       { 0xd7fd252240a61a0bL,0xebd9f49d42d04a79L,0xf18ba2ec312ddb99L,
42443         0x687273ec2dce1351L,0x68d8b052d0220e57L,0x2c0ecd6b05a7e3dcL } },
42444     /* 44 << 273 */
42445     { { 0x460c29904ac6cf02L,0x01482cfa420a35b7L,0xf793933a34680972L,
42446         0x2cd1f50017e2367bL,0x2411c3523944f060L,0x3d58b97411c06b05L },
42447       { 0x4552e369cddebb3bL,0xe1c38aec009aeab9L,0x9d34737c353b6e4fL,
42448         0xf2c99e2cb16d7b0cL,0x57029fa47bbba6a2L,0x0565d1bcd13ef64dL } },
42449     /* 45 << 273 */
42450     { { 0x93a50cc7eb0112a9L,0xa0d4419984a59bdbL,0x04b9538c82d01160L,
42451         0xdb1d33e163a8d5a3L,0xa710beff08d3effeL,0xc2f37326f9bf02f4L },
42452       { 0x606b6b5555d26856L,0xf528d22a427fe3d7L,0x31b20fac84fb5086L,
42453         0x27129aa592f7e7bcL,0xd88f0d4f44171b33L,0x9b045c897915ede1L } },
42454     /* 46 << 273 */
42455     { { 0x0b15ebebcbe014d6L,0xa4f1504e68d24086L,0xbcf475c979d7c8b6L,
42456         0xd61b92a8d00a6890L,0x78e096742ee24533L,0x6fe9fe6099656101L },
42457       { 0xc9542f53e5e63e28L,0x59ec39e12edf3a80L,0x8fe57ffe24ad9280L,
42458         0xbae0671bf4b9b024L,0x76e36c14d5816ae9L,0xe53256d4805f8688L } },
42459     /* 47 << 273 */
42460     { { 0x006956bfcf9e545bL,0x7829ed13e8fa2ee4L,0x1b108d77d4dd6f85L,
42461         0xf51217bb17045f1aL,0x48c4802986141bd6L,0x8d59b995f8820213L },
42462       { 0x8439949ffc298a9eL,0x967fdcb278188d77L,0x5bbdfd296f35c711L,
42463         0x25b37e5df8e62607L,0x18f5c4251795cccaL,0x260f075af0e35ff5L } },
42464     /* 48 << 273 */
42465     { { 0x3561b3fea329deb1L,0xfdca0e34f1c3c3e4L,0x4374831347fb79d6L,
42466         0xa7f497e1c48002edL,0x86221cce2c44dcb0L,0x65e3f04643785e06L },
42467       { 0x9ee9061fdf4cf461L,0xc7479e8cf022d27aL,0x1d8de85b76f7f52bL,
42468         0x39a713c90fd6c65fL,0xf74ca067711f8a39L,0xad1119ad8ebc640aL } },
42469     /* 49 << 273 */
42470     { { 0x43d9bcba57ec124eL,0xbce6aed98cc29801L,0x1dbb88c72632e757L,
42471         0xe88f49e891f550e5L,0x056f67da7b6e1b05L,0xa503271082a027bbL },
42472       { 0x8471fa55c91844a9L,0x882f25b628479daaL,0x96f606dfa9c23504L,
42473         0x6a42d307fb7fa83dL,0x531c8a5cea310e34L,0x7e2d20565b2e42f0L } },
42474     /* 50 << 273 */
42475     { { 0x547047862e8c467eL,0x26f5efc690e52377L,0x762d8f767f6e71afL,
42476         0x5fc1bd13917ff587L,0x487f6c63fb696a60L,0x889a1dcc3afd2aebL },
42477       { 0x7407d0a0adcf4b35L,0x8f6c9aef91024ecfL,0x3384f1c03e5d9da0L,
42478         0xf87acb00b846d122L,0x6d86aebddceb383aL,0x6a5a90cda8f2d076L } },
42479     /* 51 << 273 */
42480     { { 0xddff7aa3feb71de1L,0x431e106be44644a9L,0xafe96f8ed5190b4bL,
42481         0x31a4dfe40ab42a27L,0x0e2d0cc435762eccL,0x7c928cd91fefb256L },
42482       { 0x5f33c775daeb94f9L,0xa7a91f8894c239b7L,0x6bf418fb4deda3c9L,
42483         0x91ad6e99eefd4f99L,0x7aae05559c25448fL,0xfb7ed9df487b4deaL } },
42484     /* 52 << 273 */
42485     { { 0x59753bf68ba85dffL,0xec8b82efd1c89bceL,0xd7f1a651b8b6a683L,
42486         0x9c329bf36f84416dL,0xaecbf4b9e68db225L,0x94ec3b0f5a614d23L },
42487       { 0xbcb6672593a9543dL,0x90c46c46f19132edL,0x4767c73c950b080fL,
42488         0x0b9b143e971fd9e5L,0xbce6886f8ec8c68dL,0x167b0f8ad47f512eL } },
42489     /* 53 << 273 */
42490     { { 0x51517f9481819dd9L,0x2c2640a0fdd7cef9L,0x59283faabf98b8ffL,
42491         0x39713768a46ad877L,0x13d9c0e6834dcf0cL,0x38c85473cc7acaddL },
42492       { 0x7b58c7666971a512L,0xbe46a58c2a38e57eL,0x3d26d0a06972e213L,
42493         0x2341769b63cd0aabL,0x4a293dd0e86307eeL,0x8d1e338d264c81a1L } },
42494     /* 54 << 273 */
42495     { { 0x66eb8beab2d5b430L,0x50b4af4382136220L,0x6644e673e79d0b5bL,
42496         0xe64cdf10f9fa7610L,0xf1dea591132ff33dL,0x07791ab6b926c725L },
42497       { 0x6c41b4f383f60e02L,0x54bc9049977519c3L,0x618a6f3c2aef73a4L,
42498         0x42cfc9d26fa4ca2bL,0x2784db71a39a215dL,0x378071655cc85253L } },
42499     /* 55 << 273 */
42500     { { 0x9cc3ada3554a7f23L,0xa822f9f21c3d0003L,0xb1654da7303123f7L,
42501         0xbe33e388f0d8c4a1L,0xd8919c79be4366e8L,0x5a41c92cfe292117L },
42502       { 0xc4b02d0678c325c2L,0x89eaf4356d511c4aL,0x726fb6d65fda70a0L,
42503         0xaf7949a0183abdf1L,0x3410915d26f8f929L,0x36b3aeb281f0f83dL } },
42504     /* 56 << 273 */
42505     { { 0x1942c2ffcd74009dL,0x71c4d5f5e9c286a4L,0xf3c152b5771a5972L,
42506         0x4cfb1e74363c2048L,0xcd2ce8249ddb8da2L,0x5d97c8e0a5ee443dL },
42507       { 0x6fa84b3d68d7b3d5L,0x97eaa76d9ce14ec3L,0x2e4571368e13869dL,
42508         0x39ac6a0c96f0f8a1L,0xe24458ac42d93dc0L,0x7eb3689d5f60bec9L } },
42509     /* 57 << 273 */
42510     { { 0x75592736bce6ebe3L,0x84001a886777bd90L,0xe82739774a31ca6bL,
42511         0x6906baf0a8e0dd38L,0x92af56d0848d0c92L,0x7ae700c6501326d0L },
42512       { 0xce418817470339a9L,0x4354d7928e448dfeL,0xc8f593afa48e3148L,
42513         0xdd5fee34db1a96b2L,0x5974e81e357960c2L,0x7326bf016306fdabL } },
42514     /* 58 << 273 */
42515     { { 0x74183618de017cd9L,0x939c7975dcfe6dbfL,0xcad9f8a108ec41e5L,
42516         0xd9edb91d391afcddL,0xadf1f18c7c4a3f03L,0x0566d3e8ab477304L },
42517       { 0x32ae20464c19c62cL,0xfa15fdcb252c8c4eL,0x2ed4767e91de2794L,
42518         0x622e4f38507f8067L,0xd647242bc68ac330L,0x0650e0a9fc1ccf29L } },
42519     /* 59 << 273 */
42520     { { 0x6ecd68a086085cc3L,0xb463f4c165c0cc54L,0x3182cc5c480bc57dL,
42521         0x8f16f2038e6d9267L,0x8c92e446df0d0ee9L,0x7da6001ba4d09789L },
42522       { 0x596390ff976ee9d0L,0x12b8f9dee4c0fd5fL,0xad08673f297b10f2L,
42523         0xc8e9097c7b524a51L,0xd494f0d3009cf47cL,0xf535c07abcdd1b68L } },
42524     /* 60 << 273 */
42525     { { 0x29544fe8588360ecL,0xa1aa9b9fffb550eaL,0xe1f6cf994af4d28dL,
42526         0x723d48b00c6fd477L,0xf51f1b2f5c81b252L,0x88ec11c04f5a33eeL },
42527       { 0x7747f0432cd72de4L,0xcca69b0ad71c92c1L,0x9455d86e4e8cc763L,
42528         0xc9e0aa1bc08444e0L,0x93803b68e8fffa63L,0xc296af292d781b7dL } },
42529     /* 61 << 273 */
42530     { { 0xb1891a2b17329e31L,0x87c2a49056e36717L,0x8c2a50fafd26d8b3L,
42531         0x017e4e417e3c5a5fL,0xbeb4fad0506c382eL,0x5d3e8b16fc281ec9L },
42532       { 0x407f7598890e57a0L,0xda855e8b340cd6d6L,0xb9393129ff388d54L,
42533         0x41113ffdcf355d9eL,0x31d3bb09b357c28dL,0x975bdf00fd39e481L } },
42534     /* 62 << 273 */
42535     { { 0xbfb0c87e10a1b4f2L,0xfaf51153dc2fcc04L,0xd2588e39d6b98d81L,
42536         0x5de5b0eb4953133dL,0x6b65d8135b959ed6L,0x864511dc02eb45bdL },
42537       { 0xb1dcb4d3d7ce20bdL,0x917bcd0987587230L,0x0935790f83a79453L,
42538         0xdc65862e54b35d76L,0x4cd2332ba6d1eeeaL,0x0706fcd030d315b5L } },
42539     /* 63 << 273 */
42540     { { 0x7c91adb3adf2d8d1L,0xfe1549c24a212fd3L,0x8a7cc285c33213b3L,
42541         0x26643cfd3e56d17bL,0xcc007c15684c872fL,0x485643e009e554f3L },
42542       { 0x7f5e9a6ec6569206L,0x252b5393c2f596d6L,0xf7eef1dbbf9cdea5L,
42543         0x611ee7334dffab46L,0x8d93802a805e976cL,0xd07c0ac6f85c939cL } },
42544     /* 64 << 273 */
42545     { { 0x514cc1dcb08d2d0eL,0x4e6b379e30e93536L,0xf0e422ac2fc9230fL,
42546         0xaa50a1ad92e23e21L,0x70ac46d8676d1ac0L,0x698b9991f9f54493L },
42547       { 0x59a6b86a8649519fL,0xc1f11ad6e3511da4L,0xd3d9cff13192968cL,
42548         0x13e700b40b342dd8L,0xfd5dc7bb3b1da441L,0x02426e7c2c883760L } },
42549     /* 0 << 280 */
42550     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
42551       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
42552     /* 1 << 280 */
42553     { { 0x9e9af3151c4c9d90L,0x8665c5a9d12e0a89L,0x204abd9258286493L,
42554         0x79959889b2e09205L,0x0c727a3dfe56b101L,0xf366244c8b657f26L },
42555       { 0xde35d954cca65be2L,0x52ee1230b0fd41ceL,0xfa03261f36019feeL,
42556         0xafda42d966511d8fL,0xf63211dd821148b9L,0x7b56af7e6f13a3e1L } },
42557     /* 2 << 280 */
42558     { { 0x3997900ecc8998d6L,0x8fa564b7baa60da1L,0x71bf5b0a661f3c57L,
42559         0x44b13388aab1292bL,0xcbe80cb9d4d993f2L,0x0b19b4c92203f966L },
42560       { 0xbc82a6520080f259L,0x870ebc08ad96dea3L,0xa388c7e7502f0003L,
42561         0x9c704ef056a38f73L,0x93cde8a73487d9b0L,0x5e9148b0ec11a1f3L } },
42562     /* 3 << 280 */
42563     { { 0x47fe47995913e184L,0x5bbe584c82145900L,0xb76cfa8b9a867173L,
42564         0x9bc87bf0514bf471L,0x37392dce71dcf1fcL,0xec3efae03ad1efa8L },
42565       { 0xbbea5a3414876451L,0x96e5f5436217090fL,0x5b3d4ecd9b1665a9L,
42566         0xe7b0df26e329df22L,0x18fb438e0baa808dL,0x90757ebfdd516fafL } },
42567     /* 4 << 280 */
42568     { { 0x63f27a25a748b8f5L,0x68c8f3ec2cd246c4L,0x5d317cd965f9ce38L,
42569         0x162c92e0635ba300L,0x5259f64ffe343662L,0x4a6b2b668e614ac8L },
42570       { 0x97fb55bb01177c3bL,0xfb586c21a705cb01L,0xa57e732578061824L,
42571         0x892f6b386c1e6306L,0xf12e4c072367b14cL,0x580d5fe2c83a48c5L } },
42572     /* 5 << 280 */
42573     { { 0x1e6f9a95d5a98d68L,0x759ea7df849da828L,0x365d56256e8b4198L,
42574         0xe1b9c53b7a4a53f9L,0x55dc1d50e32b9b16L,0xa4657ebbbb6d5701L },
42575       { 0x4c270249eacc76e2L,0xbe49ec75162b1cc7L,0x19a95b610689902bL,
42576         0xdd5706bfa4cfc5a8L,0xd33bdb7314e5b424L,0x21311bd1e69eba87L } },
42577     /* 6 << 280 */
42578     { { 0x6897401cea2bafb3L,0x7b96ecc215c56fe4L,0xe511b32939e2b43bL,
42579         0x39522861bf809331L,0x815f6c1dc958f8f4L,0x2abbdf6bc213e727L },
42580       { 0xeb09ae59c39bc01fL,0xffe3b831676b56a5L,0x8f4815a2a20f86c6L,
42581         0x748a17669aa30807L,0xf1f46a211b758878L,0xbd421fe76f6fc3d7L } },
42582     /* 7 << 280 */
42583     { { 0x75ba2f9b72a21accL,0x356688d4a28edb4cL,0x3c339e0b610d080fL,
42584         0x614ac29333a99c2fL,0xa5e23af2aa580affL,0xa6bcb860e1fdba3aL },
42585       { 0xaa603365b43f9425L,0xae8d7126f7ee4635L,0xa2b2524456330a32L,
42586         0xc396b5bb9e025aa3L,0xabbf77faf8a0d5cfL,0xb322ee30ea31c83bL } },
42587     /* 8 << 280 */
42588     { { 0x300b04840d6ded89L,0x0b1092cbc3ab55edL,0x17d9c5420cc10a74L,
42589         0x7f637e84eff9d010L,0xd732aa1e27aa1285L,0xedb97340e2a77114L },
42590       { 0x62acf1585ef4dfb0L,0x1e94fc6eba1d7b81L,0x88bec5d22e6eb2dbL,
42591         0xaec272028d18263dL,0x4b687353e4bbd6acL,0x031be3510ff7e4c0L } },
42592     /* 9 << 280 */
42593     { { 0x048813847890e234L,0x387f1159672e70c6L,0x1468a6147b307f75L,
42594         0x56335b52ed85ec96L,0xda1bb60fd45bcae9L,0x4d94f3f0f9faeaddL },
42595       { 0x6c6a7183fc78d86bL,0xa425b5c73018dec6L,0xb1549c332d877399L,
42596         0x6c41c50c92b2bc37L,0x3a9f380c83ee0ddbL,0xded5feb6c4599e73L } },
42597     /* 10 << 280 */
42598     { { 0x6c00f388f086d06cL,0x17ee45035add0cf4L,0xf96984c707caf89cL,
42599         0x9d49d667648ed5e9L,0x3ef95015a0164881L,0x39e28e447d9c651fL },
42600       { 0xb13ad24059f37780L,0x08cee349b9522225L,0x9245ee6f2ba1b214L,
42601         0x12bedaa9a886d8d2L,0xe139ae08fcb8186fL,0x99203fb6fc2ef864L } },
42602     /* 11 << 280 */
42603     { { 0x14d34c210b7f8354L,0x1475a1cd9177ce45L,0x9f5f764a9b926e4bL,
42604         0x77260d1e05dd21feL,0x3c882480c4b937f7L,0xc92dcd39722372f2L },
42605       { 0xf636a1beec6f657eL,0xb0e6c3121d30dd35L,0xfe4b0528e4654efeL,
42606         0x1c4a682021d230d2L,0x615d2e4898fa45abL,0x1f35d6d801fdbabfL } },
42607     /* 12 << 280 */
42608     { { 0x3c29284764c9323dL,0x40115a890491f77dL,0xec141ade2d7a05f5L,
42609         0x0c35e4d9222a5f9fL,0x5ea51791442a3e9bL,0x17e68ecee51b841eL },
42610       { 0x415c0f6cd6ae9174L,0xe6df85f89ffd7595L,0x65fc694f8dedf59cL,
42611         0xc609503efee92718L,0x57d2592e97d565aeL,0xb761bf157e20862bL } },
42612     /* 13 << 280 */
42613     { { 0xa636eeb83a7b10d1L,0x4e1ae352f4a29e73L,0x01704f5fe6bb1ec7L,
42614         0x75c04f720ef020aeL,0x448d8cee5a31e6a6L,0xe40a9c29208f994bL },
42615       { 0x69e09a30fd8f9d5dL,0xe6a5f7eb449bab7eL,0xf25bc18a2aa1768bL,
42616         0x9449e4043c841234L,0x7a3bf43e016a7befL,0xf25803e82a150b60L } },
42617     /* 14 << 280 */
42618     { { 0xd443b26582376117L,0xb91087c11a1beb0dL,0x3fe62a6545cc5951L,
42619         0x49c754bce6e472d5L,0x7e60bb8177c424ebL,0xbcd4088e830cbb97L },
42620       { 0x3da5c94eba26df7bL,0x508b4f55f72b4338L,0x409c5c7469ad7784L,
42621         0x82e5f1b0fdf44d6aL,0x10654a1ceed2766fL,0xef1e65faa6e83f4aL } },
42622     /* 15 << 280 */
42623     { { 0xe44a2a57b215f9e0L,0x38b34dce19066f0aL,0x8bb91dad40bb1bfbL,
42624         0x64c9f775e67735fcL,0xde14241788d613cdL,0xc5014ff51901d88dL },
42625       { 0xa250341df38116b0L,0xf96b9dd49d6cbcb2L,0x15ec6c7276b3fac2L,
42626         0x88f1952f8124c1e9L,0x6b72f8ea975be4f5L,0x23d288ff061f7530L } },
42627     /* 16 << 280 */
42628     { { 0xa6e19d0a5f56dc3cL,0xe387e2690b88326aL,0xef7380950ee527a4L,
42629         0x78b7174b7c4278a6L,0xc133d867e70798ffL,0x9d0fef759e9230caL },
42630       { 0x7431eef01a955ab9L,0x3772e7038868d922L,0xf7a4306a8d6af3f7L,
42631         0x633bb5a0bbec076aL,0x6d07623e7a257ca3L,0xffb5e16521c00663L } },
42632     /* 17 << 280 */
42633     { { 0xebfe3e5fafb96ce3L,0x2275edfbb1979537L,0xc37ab9e8c97ba741L,
42634         0x446e4b1063d7c626L,0xb73e2dced025eb02L,0x1f952b517669eea7L },
42635       { 0xabdd00f66069a424L,0x1c0f9d9bdc298bfbL,0x831b1fd3eb757b33L,
42636         0xd7dbe18359d60b32L,0x663d1f369ef094b3L,0x1bd5732e67f7f11aL } },
42637     /* 18 << 280 */
42638     { { 0xfab0ce2bee1ae33dL,0x7bf9f90b4c5692e3L,0x131a4374d776d6caL,
42639         0x6ba40908a2b135afL,0x5c4ab997e1334bf8L,0x9eb442d07af584e9L },
42640       { 0xd764c506786391c1L,0x07f24c6bbcf6ab3aL,0xf73c7924fad8e1bbL,
42641         0x79f624acb7583623L,0x2b032021b44c14d3L,0x7cc0ae8dbf58ff99L } },
42642     /* 19 << 280 */
42643     { { 0x3c7fb3f5c75d8892L,0x2cff9a0cba68da69L,0x76455e8b60ec740bL,
42644         0x4b8d67ff167b88f0L,0xedec0c025a4186b1L,0x127c462dbebf35abL },
42645       { 0x9159c67e049430fcL,0x86b21dd2e7747320L,0x0e0e01520cf27b89L,
42646         0x705f28f5cd1316b6L,0x76751691beaea8a8L,0x4c73e282360c5b69L } },
42647     /* 20 << 280 */
42648     { { 0xe4d7c8b88929c133L,0xe5f96bef92a813c7L,0xdb8ab0af71c18e09L,
42649         0x0db6ff287dae63b4L,0x54d1fac49a1eaa73L,0xadbcfdf59180c980L },
42650       { 0xd3220f300b584314L,0xa24e4d1cca3697c7L,0x4ade8c7fa44f8067L,
42651         0xbd8bc81aca21ac17L,0x303a2f9fc1d361cfL,0x55648b65c71cf031L } },
42652     /* 21 << 280 */
42653     { { 0x46bcc0d5fd7b3d74L,0x6f13c20e0dc4f410L,0x98a1af7d72f11cdfL,
42654         0x6099fd837928881cL,0x66976356371bb94bL,0x673fba7219b945abL },
42655       { 0xe4d8fa6eaed00700L,0xea2313ec5c71a9f7L,0xf9ed8268f99d4aeaL,
42656         0xadd8916442ab59c7L,0xb37eb26f3f3a2d45L,0x0b39bd7aa924841eL } },
42657     /* 22 << 280 */
42658     { { 0x6f8135c7ce89e8daL,0x21ac20d9d6b5948eL,0x1dc4d48b31cefd7eL,
42659         0x3d34bc2a4a347926L,0xadcd11be8f614fd6L,0x77148b08a8ea116aL },
42660       { 0x7afc75fcfce1d3f5L,0xa9e0557d7d9a8ea3L,0x640cb5850cc864ecL,
42661         0x5811ba842eb332c7L,0xb6c10b6efdb668c4L,0x24d8b10f99f5f6c7L } },
42662     /* 23 << 280 */
42663     { { 0xd811eb32e03cdbbbL,0x12055f1d7cc3610eL,0x6b23a1a0a9046e3fL,
42664         0x4d7121229dd4a749L,0xb0c2aca1b1bf0ac3L,0x71eff575c1b0432fL },
42665       { 0x6cd814922b44e285L,0x3088bd9cd87e8d20L,0xace218e5f567e8faL,
42666         0xb3fa0424cf90cbbbL,0xadbda751770734d3L,0xbcd78bad5ad6569aL } },
42667     /* 24 << 280 */
42668     { { 0x391fa3cd8d075ec5L,0x54d45020c84c81e5L,0xdead561a79fad87cL,
42669         0x0ab3c8544e7ffc48L,0x5967f8ebff02706cL,0x8860de795d31ec98L },
42670       { 0x7476459c6c8a1c25L,0x8d9c484082f16117L,0x5c1b13b33b413429L,
42671         0x1962a435601b5906L,0x78b9d382e006929dL,0x1924e979e5897b16L } },
42672     /* 25 << 280 */
42673     { { 0xcadb31fa7f39641fL,0x3ef3e295825e5562L,0x4893c633f4094c64L,
42674         0x52f685f18addf432L,0x9fd887ab7fdc9373L,0x47a9ada0e8680e8bL },
42675       { 0x579313b7f0cd44f6L,0xac4b8668e188ae2eL,0x648f43698fb145bdL,
42676         0xe0460ab374629e31L,0xc25f28758ff2b05fL,0x4720c2b62d31eaeaL } },
42677     /* 26 << 280 */
42678     { { 0xef1001dfbdb22e61L,0x1626bd9af384bbf5L,0x33f42d385fe8ae07L,
42679         0x59646c42b7218d21L,0x5e27210e6a016f5dL,0x3e9ecf07094481c3L },
42680       { 0xf91609c1f50cc2dcL,0x8bf8c05ad0d43633L,0x9d508972e74ab746L,
42681         0xb625887a33f628b7L,0x557bd493e733952fL,0xd35f450b8981dcfbL } },
42682     /* 27 << 280 */
42683     { { 0x4603cdf413d48f80L,0x9adb50e2a49725daL,0x8cd3305065df63f0L,
42684         0x58d8b3bbcd643003L,0x170a4f4ab739826bL,0x857772b51ead0e17L },
42685       { 0x01b78152e65320f1L,0xa6b4d845b7503fc0L,0x0f5089b93dd50798L,
42686         0x488f200f5690b6beL,0x220b4adf9e096f36L,0x474d7c9f8ce5bc7cL } },
42687     /* 28 << 280 */
42688     { { 0x531c43cdb63f3d28L,0x01289772429708dfL,0xb0ee772ccdb60078L,
42689         0x4131f5cd5f1a6e72L,0xd9d0f8c6a0da0112L,0x58efddd204e957b1L },
42690       { 0x18857c0c32840c31L,0x00825340c4068b2cL,0x0a9217a771ff8800L,
42691         0x69b19e6415530b80L,0xa28e274ee125e3f2L,0xb471a91bc9bfc846L } },
42692     /* 29 << 280 */
42693     { { 0xfed8c058c745f8c9L,0xb683179e291262d1L,0x26abd367d15ee88cL,
42694         0x29e8eed3f60a6249L,0xed6008bb1e02d6e1L,0xd82ecf4ca6b12b8dL },
42695       { 0x9929d021aae4fa22L,0xbe4def14336a1ab3L,0x529b7e098c80a312L,
42696         0xb059188dee0eb0ceL,0x1e42979a16deab7fL,0x2411034984ee9477L } },
42697     /* 30 << 280 */
42698     { { 0x01d04fe04ce2d199L,0xf434bcfd0517c7ebL,0x82f3aca4a7659a94L,
42699         0xf436a7781ff015c9L,0xf5143391d6223e5cL,0xba66c6a2ecb5c340L },
42700       { 0x080f158a4b23a041L,0xb401094cb699acafL,0x1c57626c677491dbL,
42701         0xfb39e317d42d86dbL,0x19e2ca804f6b3354L,0xe919c4c3c1d41ef3L } },
42702     /* 31 << 280 */
42703     { { 0xd65246852be579ccL,0x849316f1c456fdedL,0xc51b7da42d1b67daL,
42704         0xc25b539e41bc6d6aL,0xe3b7cca3a9bf8bedL,0x813ef18c045c15e4L },
42705       { 0x5f3789a1697982c4L,0x4c1253698c435566L,0x00a7ae6edc0a92c6L,
42706         0x1abc929b2f64a053L,0xf4925c4c38666b44L,0xa81044b00f3de7f6L } },
42707     /* 32 << 280 */
42708     { { 0x35ae891bbb71e9b0L,0x1f6ce6ca522b77f0L,0xc2dab3cae63745c4L,
42709         0x55b8c185f218d139L,0x6ab039c889f3b0e2L,0xd9e25bfdc644c3faL },
42710       { 0xc8496f203e2ed47bL,0xc395ec028d67e17cL,0x5c67839292114918L,
42711         0xe962e52fef73f345L,0x3818baf354fcfb22L,0x4d75d65d9d4bc911L } },
42712     /* 33 << 280 */
42713     { { 0x10078824eb7ff5fdL,0x50c65328735ef75fL,0xdfc04d53ec980ba2L,
42714         0x4bfb260f2d519cf5L,0x1f03dff15c854667L,0xd1ad2231badb625cL },
42715       { 0x986064d0be9f7f03L,0xe5ff93e5c13f7d0dL,0x02682a1896e26a17L,
42716         0xc421567c817ec3cdL,0xb740652352615c25L,0x6800a8335d135eebL } },
42717     /* 34 << 280 */
42718     { { 0xde57575b17d8ec5cL,0x72e2257578aeb9bbL,0xce73fa7731605c27L,
42719         0x2f286b79ae77436cL,0x5e78fbb77f4e6997L,0xb03c888e474f23a7L },
42720       { 0x4bb302a3e38927ceL,0x39c6de5f6e1514ceL,0x9daa0ad349b2ddbdL,
42721         0x98fd2377d683dffdL,0xbefa4ae5933476edL,0x4ad53d01173f49edL } },
42722     /* 35 << 280 */
42723     { { 0xdfafc70e44b89837L,0xe0104b9c4935fa88L,0x7625d9d92fd702e2L,
42724         0x27461e6549af2219L,0x4a279383ad3f36edL,0xd87e246b9204e857L },
42725       { 0x8d832190ab1727d9L,0x59205cd82182e291L,0xb96a1d15a6513613L,
42726         0x1c7de3cc49cc8ddcL,0x637ea26af17ab785L,0xc098bb7a09a3ba58L } },
42727     /* 36 << 280 */
42728     { { 0xfb5383cc31bd4f68L,0x6fd5aee3d96a1899L,0x4e39d6eb01d5430eL,
42729         0x12679565ca5a2848L,0xa399e83f062b44fbL,0x3ee2432f3c166682L },
42730       { 0x57229c841de47708L,0x40a5d0cbba528a61L,0x4bae36be8239e7baL,
42731         0xddac65a2f8087427L,0xfd516d1a3cc61266L,0xc89542b5bcef98b1L } },
42732     /* 37 << 280 */
42733     { { 0x3fc8d1b2d49cc0eaL,0xfc591f7f7bca4d23L,0x5f48e27c41fefdf3L,
42734         0x5ca1d08a1039419dL,0xd450c1bddc8042ceL,0x6760e23fb436fc4bL },
42735       { 0xc5642797c06bb34bL,0xb787cd53fde06d4dL,0x2926360ccbf144b0L,
42736         0xb63756f4dce32421L,0x0878deab774abc4aL,0x2d97c7919a4e142aL } },
42737     /* 38 << 280 */
42738     { { 0xf58389ff105c818eL,0xfa29f1eb585fa7f0L,0xb6da09b5917e8924L,
42739         0x1375c3047e7a3f49L,0x9b4792b289cfa1c0L,0x92094a8535571cc7L },
42740       { 0xf986ccf6051e5e50L,0x55ea34d601df6babL,0xe65989eed1363333L,
42741         0xd94bbd918c84e20aL,0x9a4f71dc49e39b8aL,0x6d9fe495927d633eL } },
42742     /* 39 << 280 */
42743     { { 0x30b295f01fdc29e2L,0x71415daae2c2fab4L,0x205e957683c312beL,
42744         0x893c69fefab48afcL,0x8108f3f994ca2fdbL,0x37c860c314f99296L },
42745       { 0x1009a6d2e990ed34L,0xd5350c36ac26b611L,0xd03161102ce23d91L,
42746         0x82bb476e62189343L,0xe255965160ef0cbdL,0x6bab3f53cf5d2311L } },
42747     /* 40 << 280 */
42748     { { 0xcaa3b7a592fa460fL,0x92bb46b804dff174L,0xcd6949b3cf926a1fL,
42749         0x01f95e5559d1bb18L,0x21f90c08d4518f3cL,0x325dbfe920ee8bf5L },
42750       { 0xd0136f3feafb919eL,0x941190cc8e0ebcabL,0x599e91a287b557aaL,
42751         0x7fac4887dcbde1c7L,0x1dad481905a07040L,0x640493978b03d593L } },
42752     /* 41 << 280 */
42753     { { 0x65521bb85ebd3685L,0x16c68e79665d1619L,0xd6ab56bbc52b14c8L,
42754         0x312f1fb4c6d3067dL,0x5afef4f3d50587c0L,0xa3e79e94ace6e2feL },
42755       { 0x52c7fa0825f12a1eL,0x9c1c1ea20dec9f3dL,0xc418d4232e87a036L,
42756         0xa0a19fbb0283752fL,0x52e0a8830b804506L,0xc67fc71b3f7de2a1L } },
42757     /* 42 << 280 */
42758     { { 0x4d062d3d7dad8ca9L,0xb78c81581cf59756L,0xaccb38f8c6b5d9fcL,
42759         0x83436d3f7ddc66eaL,0x37115b6033adcb87L,0x49b74bd45a8b09abL },
42760       { 0x7b8bdb81675ae43bL,0x5284f5b3f0476428L,0x8f1521e7db38b0c7L,
42761         0x792ef9dea0c4b2f6L,0xa15880a162159fc6L,0x70b999e372b09b63L } },
42762     /* 43 << 280 */
42763     { { 0x6f47787d4e8ffde7L,0x19e9434574495a10L,0x8da6d55784f5be33L,
42764         0x110844811884e325L,0x621734c5a9f030baL,0x25cd0544d0e63f63L },
42765       { 0xea6729687e936833L,0x08297af784a34442L,0xb77dc3a342f9ed3eL,
42766         0x9f8908c8258e8d4fL,0xb8281bfc3299ba4bL,0x1f6412920a09849cL } },
42767     /* 44 << 280 */
42768     { { 0xd5d51e60ee9a7708L,0x2e8ab3effd2cfe78L,0x0af5c3bac8e71273L,
42769         0xbfd1b94091041652L,0x4c7c86ab52ce4582L,0x3ab72feff1d9bc29L },
42770       { 0xae89c3d51e1974b3L,0xd859c7ef70433caeL,0x762064c77edd1398L,
42771         0xc0b6a6b6072064a4L,0x3ba43b059bb1b3d0L,0x20f9aa85e47d79bbL } },
42772     /* 45 << 280 */
42773     { { 0xd1a45415c2d001cfL,0x40f3f05d848a480fL,0x03708da0ce554d5bL,
42774         0xd7090557c80f4254L,0x7e57d29907743393L,0x7db8a5e10f2f5903L },
42775       { 0xd0466a0b14e8ff8bL,0xa3c38f49e0cf88b0L,0xde47262e329f71adL,
42776         0x56b2a7935da6d0a1L,0x22e1f9b880ef44b0L,0xb9b96c617b2b6d4bL } },
42777     /* 46 << 280 */
42778     { { 0x3235bc494c500ee1L,0xce0f0b54da4a4f35L,0x628cb91c337ac7b7L,
42779         0xd8a6d4cd88a26e9dL,0xdcf40cba96e44349L,0x073a0f75b54e3fa9L },
42780       { 0xc9b95d29ca44e6e8L,0x42ad9afa2315f4beL,0xdf13a5ddf78617c7L,
42781         0x40aeb346d196504bL,0x9317d6f33d1fef90L,0xf94d308fe1708a79L } },
42782     /* 47 << 280 */
42783     { { 0x45bc768608835815L,0x700d93bc5798c507L,0xae3415b85362a822L,
42784         0xdbce01b33883d21dL,0xb9df7efbe56fb2aeL,0x5ed57d9427d341c0L },
42785       { 0xdc26916e7ee4dfa0L,0xcdb06a17147c075fL,0x0198b6a7fa9e7a63L,
42786         0xc9876c786355b62bL,0x9f4b8f12f565279dL,0xa03aeb619cb6ddb6L } },
42787     /* 48 << 280 */
42788     { { 0x3a35938779493f3dL,0x128301a91f06a9c0L,0xfcce0f82899d204cL,
42789         0x4ca41589158780b5L,0xc28f1bb73c4edd4fL,0xe08e48a87a6aec34L },
42790       { 0x6d4783dfd447c55eL,0xe7c2ecc857803027L,0xb7b8c2bcdf6d7f91L,
42791         0xf0a8d4700f356ca3L,0x229894bfdeb8e964L,0x555c9d40d3aa70e1L } },
42792     /* 49 << 280 */
42793     { { 0xa899a252e0ace851L,0x74b716c9bb9d8476L,0x2ba0bb00571bb175L,
42794         0xee01a9bf7ac2b619L,0x74f0b6d3502ee575L,0x7fdd7856cc45f810L },
42795       { 0x68c0beb1c0ae384dL,0x21955de8fe63d58fL,0x1b98e3951c08bbd2L,
42796         0x5ddaf7e9638701b3L,0xefc264f1b1242d62L,0xa9b8de5c81292443L } },
42797     /* 50 << 280 */
42798     { { 0xf0d713b7131a3bf1L,0x690ae8c147e9f09fL,0x1dc92a5f8cd8bf1eL,
42799         0xdf98927ad61f5445L,0x729b5469ae795eabL,0x939b391c5265675aL },
42800       { 0x5d916c6c7bd7e97aL,0x7c2a3de5d514e72bL,0x0660758379e9915fL,
42801         0x0554d5e543a4d2c7L,0x37eb7f82ca5bca41L,0x90e41b71b640109dL } },
42802     /* 51 << 280 */
42803     { { 0xfdd403b0e6f769aeL,0xa67f97f6906a7981L,0xc86c49be6aa83c6dL,
42804         0x6177820677ab6d8fL,0x60f77c49916933b2L,0xfa33c528fcb3fe39L },
42805       { 0x102ffca0783cb589L,0x6a37a394a96ce10eL,0xd17bf1f89eb4695fL,
42806         0x2a7623af2a53116eL,0x10601afe83af2e60L,0xceebada2582a1704L } },
42807     /* 52 << 280 */
42808     { { 0xcbfb50fa57004c05L,0x0d545f0ea7bea436L,0xb7e30eb77071e269L,
42809         0x435b3df73b845896L,0x48ba27f0b246365eL,0x9fbe883341344f12L },
42810       { 0xb763df280a87ef33L,0x4f9339d70b5288beL,0xc02770d6e722e3beL,
42811         0x6c69bfd918e32f03L,0x20c5c05e74c2845cL,0x09fa0928d6f9279dL } },
42812     /* 53 << 280 */
42813     { { 0x82f43866962fccc1L,0x92bc5f82278c9762L,0xc979a68b39a39a08L,
42814         0xfcae204b97c5a298L,0x78f55c7908676082L,0x210e036447c7b09dL },
42815       { 0x24512cef47d87769L,0xb4b0fdd7e4b53f4fL,0xc2a263fff6818efdL,
42816         0xfa160dc1985bc93fL,0x7b7f82961bf44affL,0xd6c75fb2a6407cdfL } },
42817     /* 54 << 280 */
42818     { { 0xea0b6ec35741c57bL,0x9b148c2668ba5fd0L,0x6206025166461969L,
42819         0x0726919f8cfc618eL,0xf66ac684c1954bcbL,0x160ad0260273adb4L },
42820       { 0x0ec10cffe6f6aac3L,0x232fc7adb4f64d98L,0x0707cb6e73564063L,
42821         0x76daa2c5487a29acL,0xe4ffd6e335768176L,0x4ab87262464d126eL } },
42822     /* 55 << 280 */
42823     { { 0xdbc1d21c553f05efL,0x16e950d0dc115e4cL,0xa727059a354480a5L,
42824         0x32df221efd6711f1L,0x06f9bc2e5c8aa9fcL,0x9f2449a67b15522cL },
42825       { 0xac14774bf498ee00L,0x02b5979f3ec7e0a2L,0xdce96e06e1e00abdL,
42826         0xd7a1bf5a1e00e8a9L,0x19b30fd3a8f42042L,0x29b08eb7e7c507ebL } },
42827     /* 56 << 280 */
42828     { { 0xe91477d3a66b2f3aL,0xf50d3bdfc4deb7f5L,0x19bf2857a1e45e44L,
42829         0x1c104e3270a2126aL,0x4636b4894357b9f5L,0xf65e5aa0962d684aL },
42830       { 0xfcc83a5fb7b52893L,0x8451d02b08adbd4dL,0xf0fb410c19f7a896L,
42831         0x6b90b0faff36caeeL,0x111710d0f5af8966L,0x00a4cfafbd2b8c59L } },
42832     /* 57 << 280 */
42833     { { 0xad9f11cb817bd227L,0xe4733a1465d27b5fL,0xeda46e8dbcf76526L,
42834         0x8db309ecad57a5a9L,0x4a863ec07f1487a8L,0xb0453ed210f1c4c1L },
42835       { 0x9b4df78af2dbfd76L,0x62af38b21525e18cL,0xe6bd0b0ade2c7f65L,
42836         0xad62bfb70b27fad4L,0xd21fd4346d6a8a5fL,0x07b606703e401a5eL } },
42837     /* 58 << 280 */
42838     { { 0xdd14c891e34b192cL,0x6ddfcc793aed3e36L,0xc89c3e6dc49a92e2L,
42839         0xa61954fd6fcf1ce9L,0x420c39a9bd297157L,0x57c20a8a406d3f2fL },
42840       { 0x7ccda02263faf545L,0xb01814a96cca4388L,0x88baf1dce5fb1fd0L,
42841         0x9e1183cfa0bae755L,0x3fe540badbc243c2L,0xe50d52305aeb26a3L } },
42842     /* 59 << 280 */
42843     { { 0x10145b3d52726a98L,0x7236036869e333fcL,0xce9a409323a6f608L,
42844         0x61c121dcddd11095L,0x3349b30a0d39f1daL,0xd07df9d4e3485e93L },
42845       { 0xb4c500a561159e84L,0xbc74918100561c03L,0x8f27e9f3904ad807L,
42846         0x7272786a0108ed01L,0xcf36a5d9c9365dd8L,0xe052fc9d7f859d87L } },
42847     /* 60 << 280 */
42848     { { 0x0e6cd863da97e11eL,0x5b058c6852a818a1L,0x7768c5e73de760b3L,
42849         0x898b7f608dfb4142L,0xd48130977efec180L,0xd7196cd758279538L },
42850       { 0x67c451fb816858a1L,0xbf0e88912ac699b2L,0x21fa74effcb126a5L,
42851         0x1f9dc10123b8df5aL,0x38aefff921136ffcL,0x3408874c47cb395aL } },
42852     /* 61 << 280 */
42853     { { 0xded9035213054567L,0xc61d0628c58c633dL,0x73ff2589f31143c3L,
42854         0xc43594ff0871b05cL,0xcf662dd64db0edf2L,0x6bac019d8d1f33b0L },
42855       { 0xcaa37cd8bb379461L,0x9b077a6934fc0269L,0x421e716788ecedf2L,
42856         0x2d422f95073284cdL,0x9a353114bbb2409cL,0x99e8c7a0dcbb79e7L } },
42857     /* 62 << 280 */
42858     { { 0xfca254cba21c40f0L,0x4945c838e0f4a032L,0x99318ff3fd6cb7fdL,
42859         0xc631e0644a85e726L,0x2e3ca11d9359e8cfL,0x433a0e5c06acf935L },
42860       { 0x665c54c996b37ea9L,0xe78865c4c2d52b81L,0x68596f6ffb27850aL,
42861         0x7e7272221277995eL,0x602b0f5c197344c2L,0x81ff2ad620a9ec11L } },
42862     /* 63 << 280 */
42863     { { 0xb2ce6cbe7c4c464fL,0xd7c11ef5741a4b1fL,0xf3f987f621a7eb17L,
42864         0x6b2812ef79f4e274L,0x3a0117ae38a7d5ddL,0x5d8c75a9cfab6bb5L },
42865       { 0x3827c04052394166L,0x897eb181e00e621dL,0x6693817f8aa19361L,
42866         0x67cac329959d81a8L,0x21e7133869a7ca51L,0xa02fd11269a46a87L } },
42867     /* 64 << 280 */
42868     { { 0x7f1f985c022ea83aL,0x90a22662a7584e7fL,0xb40a930a5188fcf6L,
42869         0x3fad79aba3a82904L,0x7bee8d22f3151027L,0x79a1a838c2c3e17bL },
42870       { 0x1fbe06e933cc3509L,0x629c56aa9abd5ccaL,0xfff290ec2d9cf7a5L,
42871         0x5d0dedaa9bd062c5L,0x080344abd7d35381L,0x0848373af5cf9edaL } },
42872     /* 0 << 287 */
42873     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
42874       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
42875     /* 1 << 287 */
42876     { { 0x31d31f7a7a0c0bc0L,0x7a37a84ab251d2bfL,0x1793362e52f04d67L,
42877         0x5808e70921c7b651L,0x33fe9123ed6f47f6L,0xdeb1dde958f71405L },
42878       { 0x821d3045ae56b472L,0x9f61f761e02043adL,0x932ddb145b2048a9L,
42879         0x17d989fed7811330L,0x032ae4cb128fd85fL,0x8f1956b47d1ef434L } },
42880     /* 2 << 287 */
42881     { { 0x070d34e116973cf4L,0x20aee08b7e4f34f7L,0x269af9b95eb8ad29L,
42882         0xdde0a036a6a45ddaL,0xa18b528e63df41e0L,0x03cc71b2a260df2aL },
42883       { 0x24a6770aa06b1dd7L,0x5bfa9c119d2675d3L,0x73c1e2a196844432L,
42884         0x3660558d131a6cf0L,0xb0289c832ee79454L,0xa6aefb01c6d8ddcdL } },
42885     /* 3 << 287 */
42886     { { 0xe5d473dc7521f457L,0xe9ef09bda00be577L,0xf6d0965fb6eaa640L,
42887         0xeb49486875726560L,0x452116d528817302L,0xf0424fdbfbde3597L },
42888       { 0xd6096da3bb454915L,0xde48280841422141L,0x7a1351972d19fac0L,
42889         0xdc9a5ec421393f6fL,0xcabcc1e3eb2c8adaL,0xd436643142d8c4f2L } },
42890     /* 4 << 287 */
42891     { { 0x0ed1082f89e4e449L,0xdb1fb471833f2378L,0xa35fef0eece77352L,
42892         0x76adaa464bf0c426L,0xfbab929aa011b2fbL,0x6f475d5b9d8cc4d3L },
42893       { 0xbe6d7f2174351480L,0x2d1362d193e4a7aeL,0xc7e2cba5106ceaabL,
42894         0xfe94528a45258697L,0x7109b17d075945b0L,0xfd395b2ccae17f7aL } },
42895     /* 5 << 287 */
42896     { { 0xdf534b80dece6d4dL,0xcfaa60a28737af46L,0x7d76a921b9ba3d56L,
42897         0x61490bd199338721L,0xc514e950ed25cfbdL,0x5041fbb2dc09b8b1L },
42898       { 0x2410310d46fbcbf0L,0x2c46bcd14f7e8aa4L,0x08ce31f5d0d5fe1dL,
42899         0xb11efdbebeac3c97L,0x406e1d05b01633e9L,0xde48cdba766391adL } },
42900     /* 6 << 287 */
42901     { { 0x68550299845e12c9L,0x979b5406361d027fL,0xf601d2b4a8e92e70L,
42902         0xfd02799f0cc9fca9L,0x89f99ca013bc2e96L,0x22a12c0bff9db9b8L },
42903       { 0x6ae7084a32efcea8L,0x5ddd3ee9a24b9376L,0x394d92a4e0945e8fL,
42904         0xddab6752ecea36f6L,0x650b74d60d18a069L,0x37f91cebad650860L } },
42905     /* 7 << 287 */
42906     { { 0xe3e559bd9d839b3aL,0x50e8d4e9719de3c7L,0xf7bb377cea70b986L,
42907         0x63753cace1b2707dL,0xeb239a870e585c4aL,0xec40a379b0e32380L },
42908       { 0x836ebcefc86d6685L,0x703c296a70d18b76L,0x47e2c004b94aa268L,
42909         0x33ef7d0cbaf14d61L,0x74aa00fcd315c72cL,0xf23c789eccf5d75aL } },
42910     /* 8 << 287 */
42911     { { 0xfc1faedc310404a8L,0xea339148d3bcb128L,0xf00485456416defdL,
42912         0x75de7770c58653e7L,0xdd2dcbebe2f6f99eL,0xa4380ef4d159ac07L },
42913       { 0x45dd713ce4173608L,0x44919b61446a6789L,0x3f73756b6b962b38L,
42914         0x3cb9f53bbffd3f0cL,0xd723c40b7f08ebaeL,0x998a9b170c3cddbaL } },
42915     /* 9 << 287 */
42916     { { 0x261c9fe6f21ae889L,0xa589147edf3cb243L,0xd09452f71976deecL,
42917         0xf80ee8bf2497f6b2L,0x0b5f1b19eee697d4L,0xce9b6b680de48ab7L },
42918       { 0x3ad3bbc4bbf29546L,0x544406a697f51becL,0x51d44dfac2e2e75cL,
42919         0xcfc8625d3da3f634L,0x0845ace6a1f5995dL,0x11850d8bf3b65c55L } },
42920     /* 10 << 287 */
42921     { { 0xa804b2f089ef2489L,0x06a2a805fb22f7d6L,0x31baf4fd353970beL,
42922         0x3481c8b712854a91L,0xb0424eecf3971398L,0x748ef3820f4ed94aL },
42923       { 0x92b74ad026722164L,0x23f71d5831b1302fL,0x6741b28070a5f0c9L,
42924         0x46c12cfb9f5101caL,0xe7014d7901d0f81eL,0x129bd87ad758c288L } },
42925     /* 11 << 287 */
42926     { { 0x6c43d8307b00cd09L,0xb794cb012141eb00L,0x95fe13a75cf23ec5L,
42927         0x3de5ad7b8f2c799eL,0xa378434a025de83bL,0x07f681bba3a14a3cL },
42928       { 0x8fa0b5d2983ba419L,0xe477bf361781bf08L,0x5b8162845e8ce6bdL,
42929         0xb36a78ee199ec8eeL,0x444fc01a6062d5d1L,0xc026ab4586ee9ac2L } },
42930     /* 12 << 287 */
42931     { { 0x6a565269a3e0c5b3L,0xaab7ec7104c6ae54L,0x0bda11a7d8c6ddb8L,
42932         0xb7ebfafb2332347bL,0xcf791881e99dff48L,0x81600214dc357c83L },
42933       { 0x2a264f8931d7495bL,0x8ca430004ec885a7L,0x6d478260bb47d417L,
42934         0x544de4ec3d817032L,0xac7150a9dc05f901L,0xffef225775c0963cL } },
42935     /* 13 << 287 */
42936     { { 0xacb83aadb65296f8L,0x04c96c3e18151422L,0x8913311e7a9f126aL,
42937         0x3baeaf8010b74e8aL,0x253c9dcbb7410105L,0x30a13e42da2d5437L },
42938       { 0xde31fd5533a2065eL,0xde2caf1ffe099595L,0x54c762fe795076b5L,
42939         0x8beb51fe635ed402L,0x369603c1e5c3d2a6L,0xc5083f0700a472b5L } },
42940     /* 14 << 287 */
42941     { { 0x58805ca8d2eaf294L,0x910d085ed7d5abb8L,0xf9cbc9a1349cfecfL,
42942         0x67bc7b417800a980L,0xe7e6dbc0f6847e9dL,0x7a0f22c4af379c48L },
42943       { 0x80b6fc04b1d2822fL,0xa1cae656d8517a70L,0xd2d11ed14e9dc24bL,
42944         0x48d74f173fab87e6L,0x1feca5af50c630aeL,0x263e04cc62d0620aL } },
42945     /* 15 << 287 */
42946     { { 0x7dd330ca16b2a52aL,0x25133c614157ae5bL,0xe6ee0e4edd606b2fL,
42947         0x700840423f2b59a7L,0x58d27587d03f54eaL,0x62ebc668d34605e9L },
42948       { 0xa764392ab3155e07L,0xf0810f3e3c6ae6c8L,0x1b32e5ae94614cd4L,
42949         0x45b49262b9cbf481L,0x0034db795b3d1184L,0x463237825b1b9ab9L } },
42950     /* 16 << 287 */
42951     { { 0xf6377e3bf6ba1469L,0xc334fb6c09c832d3L,0x7f85ac42c21c0cf1L,
42952         0x7a3e31c9857d8edbL,0x2eb1076327b77ed6L,0x2bfbbdbc38dae10bL },
42953       { 0xed7c6fb17bae3b4fL,0xc5911d9f36d04e6fL,0x4dc435504569e72fL,
42954         0xaa82fb97bedae3abL,0x06d37bef4f27e463L,0xd0dbce6df0c35a11L } },
42955     /* 17 << 287 */
42956     { { 0x4482c7b704414726L,0x72c9cb5b26d23eabL,0x3747b8cefd5cb171L,
42957         0xe4ecabc300312ffaL,0x5909f29b9cf10a38L,0x209bc3f4b8d0e5acL },
42958       { 0xd34c84db60fac147L,0xd64dea89f8938c89L,0xb18285f8b815267cL,
42959         0x719a7e355a2437d1L,0x45f8d9dab769c5a2L,0x2d0e4281a412cfccL } },
42960     /* 18 << 287 */
42961     { { 0x23c14c43d8f6e236L,0xb14be0d28ee39386L,0xd3c55814262dd390L,
42962         0xa1b40401e1f23d0bL,0x1377b07c61534375L,0xfe4e3eb116f6d95eL },
42963       { 0x17b1af0040b4386cL,0x2dc657a837ca3851L,0x6862ca92ef976731L,
42964         0x9f0c380ba4118d3bL,0x23bf793977c1aa94L,0xaadee0612bc27d4bL } },
42965     /* 19 << 287 */
42966     { { 0xfa5e4cb6f1847a9aL,0x0e13a60cba6f07f1L,0x68d9db450ac86498L,
42967         0x44b02de3920ff013L,0x43724c2d84b46078L,0xb3686ee81f951b93L },
42968       { 0x019b3e77d712fe85L,0x313e7b7497dfb295L,0x7d883ed826d50e37L,
42969         0x64815565d32562ddL,0x2f9e48bed7b3e2f2L,0xc97cf156dcb93450L } },
42970     /* 20 << 287 */
42971     { { 0x0573d9963ab4c707L,0xee5d87691420fdf1L,0x41873aa55e2b9c12L,
42972         0xe09290456810bf08L,0x4ff4143fccbe4bbfL,0xd0e5a74969328301L },
42973       { 0xab5912621c4b73beL,0x550ea0633f3edf99L,0x8a77633734c93db1L,
42974         0x5c51d3f832b21521L,0xcee9f604713feea0L,0x0d6f8a5a7bf4268eL } },
42975     /* 21 << 287 */
42976     { { 0xc415d467009a0cffL,0x32dd46ef55960242L,0x4ccc6f676d6a81b0L,
42977         0xa860bcb6b2571d81L,0x7e74150991f9b6c9L,0x9a96b2f9d3a0592aL },
42978       { 0xcc3d821071248929L,0x586062daf1cb0f52L,0x18d993483d48b6c1L,
42979         0x667f17949f4e612aL,0xf1d7a77ffb3a12e9L,0xf7586397f5753220L } },
42980     /* 22 << 287 */
42981     { { 0xb87d5ce2722f405fL,0x24d1f993d7c6a322L,0x09d837291e0d8113L,
42982         0x70b5cdbf89a6cbc3L,0xdfb3ee16fb2c9607L,0xf0acc1163465c7c6L },
42983       { 0x10cef4b707e6659bL,0xc280c4331fde9940L,0xc8b5e9819a2d3f25L,
42984         0xc36faa763f7f68c1L,0x17878bfa8d54e281L,0x8fda8b359c42c5a2L } },
42985     /* 23 << 287 */
42986     { { 0x2aa1366305d22d7dL,0xee77da6eb0c62a12L,0xff8f99c5bacad876L,
42987         0xcbe33479f8a0f0baL,0x4c69bd7f4a232c8aL,0x760ce3fd485d3f48L },
42988       { 0x0b286a59268d7411L,0x2dd746b6589819b9L,0xe017a53060ce76f2L,
42989         0xe4407828d642a7f0L,0x12761e51b6badaecL,0x4f4f286b78d07257L } },
42990     /* 24 << 287 */
42991     { { 0x43c78835661019ecL,0x68e916b124e66d29L,0x02c0f3a224094671L,
42992         0xab6f1c05d0f17d86L,0x6d3bac72a22d4264L,0xd7b8f152f6e5fafeL },
42993       { 0x95627c6339447eb3L,0xfd15901879e1ff93L,0x39277c835ad80806L,
42994         0x758aafc90d7c7b74L,0x605ad8ca4cb8bec9L,0x6a90085c5741828aL } },
42995     /* 25 << 287 */
42996     { { 0xbc11d3d559cdebfeL,0x75c31b4531b2796eL,0x8d11e18a07b1055eL,
42997         0xcf522c1fb2d2986dL,0xc994c377eafcbec6L,0x840d27ebc0c0e2f0L },
42998       { 0xd4124d17859550d3L,0xeea6047aba21b2b6L,0xbd2a036e335a2854L,
42999         0xd8703d6b207ac2e5L,0x09d2244a94a34bbbL,0xd6b9481417ec6f44L } },
43000     /* 26 << 287 */
43001     { { 0x7d8ddca252aa7ff2L,0x0985e47d6953b9a2L,0xed328993dfff63ccL,
43002         0xbfeca5327cfa6ee5L,0x7535a871b1e6a010L,0xb0052764303c2ec5L },
43003       { 0xd39c72102fedb0daL,0x7ee2b384e1001505L,0xb638a1b1c82a7e1cL,
43004         0x1b94a47b4573fd7dL,0xef2bca7792cb2b88L,0x49ad6e97a75b21efL } },
43005     /* 27 << 287 */
43006     { { 0x591bdd0d8f4093abL,0xa2c63f1ba1322343L,0x5e548f71b32a4331L,
43007         0x9930891c5e7f3c14L,0xb2b2406e54c27043L,0x7ffe3e5ef1281af8L },
43008       { 0xc31ba363900742d1L,0xf24c8ae1e61ee209L,0x687c56b7beed46f4L,
43009         0x0b63e47895682562L,0x9117cf4c0c8a45a8L,0x0744a86824c20748L } },
43010     /* 28 << 287 */
43011     { { 0x9ac777993acb39ddL,0xd1d3ecddbb7c6a8aL,0xa5271c9e7a75159cL,
43012         0xa6ffb41f2c276e4dL,0xc526556e0bb9a955L,0xa32e1352233b7774L },
43013       { 0x103f124bc2cf09aaL,0x1816d1eff10bae5aL,0xc5f9197ee8837629L,
43014         0x064d5dcb13b1b76bL,0x109c70748d0fe0b1L,0xbb4e9743fce5f6e1L } },
43015     /* 29 << 287 */
43016     { { 0x4636f36d3ef05af6L,0x3695267b3e498920L,0xd59830285d773fc8L,
43017         0x939591245d3cc515L,0xc3f52a9569134370L,0xc9d0db7af8848992L },
43018       { 0xcd1be9bf15906eeeL,0xa95d25fb916d576fL,0x08de893be152fb62L,
43019         0x65d743658ab1e35cL,0xd6d97057fef14ac1L,0x67ad47b9574508c7L } },
43020     /* 30 << 287 */
43021     { { 0x1b403c4f1470433eL,0x6f8cb19257e53eecL,0x87b5b93df0cce4f5L,
43022         0xfefaa5008c566f77L,0xf6aa8066db71517bL,0x9f01b036d67f5952L },
43023       { 0x9524306faaeb40dfL,0x5cb2e8e1421350a6L,0xa57d05ea3d69040cL,
43024         0xd0ff12a1b9bbdcd8L,0xed64d3259e3e19bbL,0x29509c0fed0a490dL } },
43025     /* 31 << 287 */
43026     { { 0xc94191e7a607c050L,0xb918a096b98d3d4eL,0x97413dbce3f253f3L,
43027         0x8476c03cdc6d8418L,0x50247d1d2402202dL,0x077476225f8097c5L },
43028       { 0x1457ab609b71c6d6L,0x9ff312c447cf0c94L,0x954dce23ee79d2bcL,
43029         0x3ba2b1a4a0da6e48L,0x363df36f532be9f6L,0x816642ddc742c7d4L } },
43030     /* 32 << 287 */
43031     { { 0x6edf5561ff8b1fbeL,0x614b788ef6eac0c0L,0x7699ae56d8d66d29L,
43032         0x5f81602ae9d58eb2L,0xd0c04874faf9176dL,0x4b3a0046523153b1L },
43033       { 0x9690930ff6315883L,0xa81c0b44a60ca92dL,0x2d0e725873bcba90L,
43034         0x57efe72de902e329L,0x3fcd598676bc27b9L,0x492adf0393940c09L } },
43035     /* 33 << 287 */
43036     { { 0xf2ab8e22973a4b6bL,0x6a96f2ef6ad73ce7L,0xad5e22547235e929L,
43037         0xfab3e4a9bc6c3b76L,0xf69fb2062dc950d0L,0xd863ca9049478ff2L },
43038       { 0xec669f122749fabbL,0xe1d28bdc71a6d279L,0x766ee6458372942dL,
43039         0xd118b90480ade5ccL,0xedcfb0a72293740bL,0xa3ee3a67f16b29cbL } },
43040     /* 34 << 287 */
43041     { { 0xc29fb53e118a0c7dL,0xea7a1017193b834cL,0x678072a2cec93ecbL,
43042         0x9054d6b72475dedfL,0x4a7d477342ee616cL,0x05cec7f8680f8a43L },
43043       { 0x39c491d496915870L,0xe07a2b1d8746edeeL,0x1d8ed3c83566e7fcL,
43044         0xc7d744e5e002298bL,0x8a0acec99c0e6388L,0xb2daac39ebf48fe3L } },
43045     /* 35 << 287 */
43046     { { 0x773ad1cb8e133d97L,0x1e29f5a2872523d3L,0xa2a742293a09c1ffL,
43047         0x809e6d284369ca06L,0xf22e521a7fe148caL,0xbaaf90c383ef9578L },
43048       { 0x65aa9b54d633b2d5L,0xe55f2ce29a2994a8L,0x8a0af446e67e0b85L,
43049         0xb9714de9c1f062c8L,0x1f4047dd2a3aa1d7L,0x39658ea965179222L } },
43050     /* 36 << 287 */
43051     { { 0x0322b29a57fbc5cfL,0xf55af7863078be9cL,0xd4b186e6ecb59f79L,
43052         0x50f5fe746d950733L,0xaf8a1898a9f90d02L,0x483801a742d6d9bfL },
43053       { 0xf0a0af145ec09c0eL,0x85af0e6188383360L,0x404b295e42592235L,
43054         0xb3199d63c596493cL,0x7aadacdb194abb80L,0xac84563ec1c845c6L } },
43055     /* 37 << 287 */
43056     { { 0xd78d1dae5336e58dL,0xa3f36e0bc5ff354fL,0x8421f95e5d1ed78cL,
43057         0xff4c16019f360c43L,0xd5efa09f8bb582a1L,0x0ece005aefb39652L },
43058       { 0xce8bb58036c2c940L,0x11f8f74bcd1ae8ccL,0x923c350b57a2f2b3L,
43059         0x2438e3213c86faacL,0xe76129503e230776L,0x35c73d415e6158e2L } },
43060     /* 38 << 287 */
43061     { { 0x8ffda4643672507aL,0x76301be7dd91327aL,0x42720bb0958860bfL,
43062         0xedc0b8945ad4f455L,0x2fb553201bfbeb4dL,0x22a425bda1c6494dL },
43063       { 0xfb927a85de0e7f52L,0xb84a82cf49a4b6a1L,0x8afd0546b640fe0fL,
43064         0x23b78fbed2fc15cbL,0xeab469c26742a49fL,0x308e453fe277c7cdL } },
43065     /* 39 << 287 */
43066     { { 0x60ce0f55af7b14aaL,0xf2577fbe5cf5a2caL,0x7bb9521fabf3bb41L,
43067         0x68b6409def00287aL,0x700bf423bfaf9391L,0x98e6c3017d637300L },
43068       { 0x342ed4870ce28aeeL,0xad8b8dc383b059dbL,0x1b8a892b85d0a485L,
43069         0x553c4fad6b7a7d3aL,0xf5692acc198d0379L,0x6004ebb3ce932f00L } },
43070     /* 40 << 287 */
43071     { { 0x6895dbe2f820c195L,0x3787a5003f6c7b40L,0xdc718243ac1e90f3L,
43072         0x352f8c91ba5d0870L,0xf3d1c53eec0112b5L,0x08a0782f6b84f64aL },
43073       { 0xd659e6358eedd5d4L,0xfc30df6c29537276L,0xbfb09978a1755ce0L,
43074         0x227f7b12aa2b4187L,0x828730b9226539d2L,0x9051a37cb2472c95L } },
43075     /* 41 << 287 */
43076     { { 0x430c2a45d0a0ddabL,0x916aa68926a6291fL,0x9db5510268dff24fL,
43077         0xa22121c1850a7aabL,0xd43416194e2d9670L,0x7ef2cb9415cf7636L },
43078       { 0x2cd6ddf6bf97b27dL,0xac5676b625aba9c0L,0x3ca96f7ec4ee110fL,
43079         0xc6900abd08e7ebb4L,0xcd3942fbdcb91135L,0x62d6b6f6a8ad56e2L } },
43080     /* 42 << 287 */
43081     { { 0x1ec7f2410828d35fL,0xd94c2a926ccae554L,0xdf4227273c36ecedL,
43082         0x2facd6d89fa6582bL,0xed43247ed349d3beL,0x1d59d55d1db6fcc6L },
43083       { 0x2b5074b1ee1bea38L,0x025496aac9c21a8fL,0x57dd7fa1d1d817edL,
43084         0x57b5572aead03124L,0xdc024be87314616dL,0x5bb5b23c10f6e38eL } },
43085     /* 43 << 287 */
43086     { { 0x643cb9cd53812134L,0x016a11e8092ff9b5L,0x227f3dfbfcde37bfL,
43087         0x01b9bcebe8a8fc6dL,0x7009ae45e1da0dd6L,0x193b6f519e2908f3L },
43088       { 0x28656302230db5feL,0xb0a730c41aaeee73L,0x028320ab387addc8L,
43089         0x92165d909a92488cL,0xb0b2f8f09066c95cL,0x0fa55db564007634L } },
43090     /* 44 << 287 */
43091     { { 0xbff4fe0844284b10L,0xc7e3f8da19c2f775L,0xdcd97e54a45ab746L,
43092         0xf53158a9540ee8a5L,0xfd19068728c4aa74L,0xa3447e30648fa2e1L },
43093       { 0xa6794670c374cedcL,0x605629c258204248L,0x1b86f8e6f7d8db3dL,
43094         0x1e8ffe8bff0f38c9L,0xe4a556b8e274c82bL,0xb31406c94c0076d6L } },
43095     /* 45 << 287 */
43096     { { 0x198999821e555a0cL,0x831e923fbc196442L,0x8b294623f682e135L,
43097         0x79ba90c01743c6e1L,0x74f8dbafeff5ed22L,0xe4c3257d5c010835L },
43098       { 0x9cf94a208f9ec66bL,0x9fe9da3ddc303c43L,0xa53870be0cb716daL,
43099         0xc322ffaa2aef881dL,0xb9ff76ff0fcd5580L,0xdcc125d49ebb1d7dL } },
43100     /* 46 << 287 */
43101     { { 0x747b6b6ddecaf88eL,0x1a32f8ba368cc7caL,0x52a3a00f60d84fd7L,
43102         0x60052af507adacf7L,0x8b7bf25650b8de16L,0xb8b2acf8194926baL },
43103       { 0x4bda72c81d1ef524L,0xe350f73288993f96L,0x63fee4e2e08c5d39L,
43104         0x1f2cd9cd5db46904L,0xbf11ac311668d3bcL,0x8eaa064371d721aeL } },
43105     /* 47 << 287 */
43106     { { 0x33cfdcb3e14210feL,0x4abad5ec4946aa01L,0x14b42417a8cb53b3L,
43107         0xeebb0d70238d4edfL,0x8c9d87fdb5bdb30bL,0x3cc680f17c928b33L },
43108       { 0x4b2b2358757c2607L,0x51a70a33c1c8dedfL,0x62a26d776b22d113L,
43109         0x2f4acd62ef3b4f5eL,0x403e91bf6ed00636L,0x219ba3577bf74d3cL } },
43110     /* 48 << 287 */
43111     { { 0x7de743e2b39317b8L,0x9205d4472d372acfL,0x8226fc303eeb0012L,
43112         0xab2a3e052af74be6L,0xbe4767804af91ac0L,0x98497c710ca36bf4L },
43113       { 0x74fdf7cd8d6dedb4L,0xb50778eea0fc5919L,0x5d5ec33f2fcd7c63L,
43114         0x667b81937f33cde0L,0xce48ae4b38364d44L,0xb8578963223ed67eL } },
43115     /* 49 << 287 */
43116     { { 0x3e5688e46bfd7adeL,0xb3f1eb051b80bd4bL,0x8626c4cafe3de456L,
43117         0x8846bc714b7e5444L,0xa54c7cff689e8a67L,0x8c3ea61f43eadcf6L },
43118       { 0x924f17d6fde15178L,0x45319eb705c08d2dL,0x6d55775d9f85dcbcL,
43119         0x2aaf9f7405278280L,0x574a13e77b617153L,0xe7fa921ae8b15bebL } },
43120     /* 50 << 287 */
43121     { { 0x9dd54056514e343aL,0x8d9116dff12aa25fL,0x5322ec38e3397844L,
43122         0xe1843921571036a1L,0x2cde0a48650beb19L,0x41ad4a7e4f259728L },
43123       { 0xf314fceeee6448b2L,0x80006b2aff0e81f5L,0xb5ee5524d51d229aL,
43124         0xeba6d733128e900bL,0x79278cb8030f391aL,0xb24bcd63a9a5f9fbL } },
43125     /* 51 << 287 */
43126     { { 0xed867a7b37d10743L,0xd57d2d8df510023eL,0x4d500e4c737e0a50L,
43127         0xcfa119900ecbf795L,0x3ac126b89373bdaaL,0xb06324fb735449a1L },
43128       { 0xfe321df5cd79de70L,0x52d625dbfd07c6d4L,0x88ff505a3d628e51L,
43129         0x120350fab044d725L,0xf718b20ad02f9515L,0x766698630bbea1b2L } },
43130     /* 52 << 287 */
43131     { { 0x6293e0ff50d9bda1L,0xe7259ada433b4dd3L,0x39aee63e821cee67L,
43132         0x4d707c7144b10739L,0x42b9e0f69bd6efc3L,0x7d71edcc0717a61dL },
43133       { 0xe7df9e56d1e5a5bcL,0x7895b638ddde509bL,0x6fc597b3d2a6a822L,
43134         0x022da65d96d2a8abL,0x95541ce7cff45c72L,0xa5bb7799e649800fL } },
43135     /* 53 << 287 */
43136     { { 0x7472e4c963676cd5L,0x2836b1d52687f376L,0x1460b664f732a51aL,
43137         0x7c4541f22a214ae1L,0x743a524d107d6622L,0x9c64e3ff082fc015L },
43138       { 0x9341f3fc8e0d13bdL,0x9946043e529554edL,0x6fbbbcda5798d6ccL,
43139         0x3bfad5fb242115c5L,0x1f46bd1945ab793cL,0xd9383bcf3b42f81aL } },
43140     /* 54 << 287 */
43141     { { 0xe4ff888f820a13b5L,0x7cd18b3eaf1bfbbbL,0x3fb7f681bd4e4dd5L,
43142         0xaba364c287d46c40L,0x44e209ab659b3498L,0x5e071a272dde85c1L },
43143       { 0x8a029b1fb969c790L,0x51bab9f0c6fd1c22L,0x9ee9b047b83eb0c1L,
43144         0xda0b39439e5b2c35L,0x0cb30625f20ca425L,0x8e4dbd013d25c2c9L } },
43145     /* 55 << 287 */
43146     { { 0xe7aa41a96b8f7599L,0xe97ff24a3f556ad5L,0x10e07713dd6a9329L,
43147         0xaf464b18c4d06a93L,0x9b8e5145a1ccc85fL,0xa256680bd0487ca6L },
43148       { 0x420b60bf815652f1L,0xeaf09eff5bb45b6fL,0xa31e875f8845a557L,
43149         0xb035ee09eebe0911L,0x1402d1d86531c356L,0x24aeeaf0b630f75aL } },
43150     /* 56 << 287 */
43151     { { 0x4b20d1829567f5f4L,0xde7e814918f02b34L,0xc9a4be7becff9dd7L,
43152         0xe2f70bbe9812fd3fL,0x471bf90c9c889263L,0xb60d01b53e61f5bfL },
43153       { 0x258c7f89d22d855bL,0x35ef5c15b75a7d4fL,0x26d8e1dab247f27dL,
43154         0xcf1361998d0f7757L,0x312447803f8e894dL,0x8d2a20bae1a3d47dL } },
43155     /* 57 << 287 */
43156     { { 0x6447cc97f08a0417L,0xd98ea6837afee809L,0x81426d20bf7990aaL,
43157         0x848bd6223526ad26L,0xb6cdc5b4fe1f3381L,0xe7e10bc7a26189ecL },
43158       { 0x25a9f7cf57464e6bL,0xf90c1aa12c86ddf0L,0x2126ed530124705fL,
43159         0xf384e7e5b58e6341L,0xb2dfeb0a12207e57L,0x72875c55e0e23287L } },
43160     /* 58 << 287 */
43161     { { 0x37579c3eb954b7a4L,0xf0291f8f3f2ea608L,0xde68104f90a85ed2L,
43162         0x6a35fea9e1088788L,0xe8d5517470d15d00L,0x0bc72de552467f90L },
43163       { 0x2ded3293297be2b8L,0x76c53e5761ddc65bL,0xae4b2b5015562d6aL,
43164         0xfe7cdd329e0aeb79L,0x98ef4c518dd474ecL,0xfca56ffb0076b23aL } },
43165     /* 59 << 287 */
43166     { { 0x120adcba6f60309aL,0x41e46edeca8ab2c7L,0xd68aa4c529b79ce0L,
43167         0x21a21f8d7a3b11fdL,0xea68dc4739d0809fL,0xd4faa71a27973044L },
43168       { 0x65b42172810be134L,0xb2dafa6c793aee92L,0x951e9f6f1f78f7dcL,
43169         0x2affc70a17fdba97L,0x4f0f4c51dcaa2789L,0xfde1951c9e703980L } },
43170     /* 60 << 287 */
43171     { { 0x80826a196488d9d8L,0xfa452795f3ad867aL,0xdd9bf8f5bd4e6674L,
43172         0x324386227e8e3ee5L,0x7af4c605dff05c96L,0x79efb6f9541cbbd2L },
43173       { 0xeb5ff62675e78961L,0x5318c4c30be43d7aL,0x02df456daa4a0562L,
43174         0x4d6002d88a916a81L,0xf0dbc349f68eced2L,0xfd75d4d5ec8c3fddL } },
43175     /* 61 << 287 */
43176     { { 0x6c15d903544378f3L,0x0a9bc9d735ea3c77L,0x9d9066408caa4acbL,
43177         0x9ba27502402be833L,0x1ed4123f8773fd7bL,0x236364ba190eac92L },
43178       { 0xd6287f17f8383ee1L,0x75b7b0b5d9739582L,0xeb6cd50d0292806eL,
43179         0x216f36dc43448409L,0xec136f8cb6c4958aL,0xfa805ab49ef7810eL } },
43180     /* 62 << 287 */
43181     { { 0x5c6448f70d00b29aL,0xaa134b87124cd55dL,0xc2c6b269d94b72d9L,
43182         0x0f0dd472412f76d8L,0xb4cf3c1873f6571aL,0x6aed00218b9218ffL },
43183       { 0xa55b74eaa0c9dde9L,0x59b952125b4c8fccL,0xbc9873ea4ddc367bL,
43184         0x26b369ba0fd30421L,0x71763a45e446f4fcL,0x67e800edaff54707L } },
43185     /* 63 << 287 */
43186     { { 0x4de97de1126b4919L,0xd631d908883ea109L,0x37c77d729f6ec50cL,
43187         0x910932e6df718c7dL,0xa798406855028d0fL,0x21b09540a6119a26L },
43188       { 0xb837cceced4b4962L,0x3c83f4bdba66002aL,0xa067aa3d2ac41124L,
43189         0xa64bff30d08dc360L,0xa22778a5c108d3abL,0x7f732064aac4dee4L } },
43190     /* 64 << 287 */
43191     { { 0xc68b641ec795a2c7L,0x4fe559b15a4d6647L,0xeda98cbad89ce668L,
43192         0x15f84dc06c269d8eL,0xf0eb685ecbf34023L,0x3668c530c032634aL },
43193       { 0x2e3d7fffe4531f59L,0xe627030685494d06L,0xf02cabcfa3e050dfL,
43194         0xccd2da67c001dcd9L,0x50aa3723066d2d52L,0xdb0756507224a41fL } },
43195     /* 0 << 294 */
43196     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
43197       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
43198     /* 1 << 294 */
43199     { { 0x04418b5965b55050L,0xa8a797c3d324aa67L,0x5f87e22c7c65a6d9L,
43200         0xaac710651dbeffe4L,0xff619d64bd3cc05cL,0x9a29c966e65c92c4L },
43201       { 0x23af2b21dad7fcbdL,0x4950a767153b817fL,0xc34a7efac6478c55L,
43202         0x57cde95af6cd140eL,0x64b74575f5a0db2eL,0xd4b5ea5275d7fb76L } },
43203     /* 2 << 294 */
43204     { { 0x284050628e72aafbL,0x655bf3538ea8bf00L,0x789d944405547f7bL,
43205         0x7fa445ed3441e472L,0xfeb198254a44ce87L,0xccb5f12c129aed14L },
43206       { 0x22b05de3af94fb34L,0x7422a040d3f03199L,0xfba252caa83f7f08L,
43207         0x0f6ad6e6cefaa757L,0xe1ad18716517d806L,0xd16dc8ed8e9d97adL } },
43208     /* 3 << 294 */
43209     { { 0x0208092a0e3dca68L,0x9a49bdccd1a09971L,0xe5194181aefab9c1L,
43210         0xc1c9690a0076f47cL,0xd7499e95b486c2fbL,0x83a69e43d4b72e00L },
43211       { 0x75f2838a2d1a6c2bL,0x57a24c69751f6366L,0xd956ee08626cc684L,
43212         0x434cadd7e6ce3249L,0x3d4eaececfe289bfL,0xbbd53b961b8aafddL } },
43213     /* 4 << 294 */
43214     { { 0xcbb99194a3736eb6L,0xdd5161cd36dcf470L,0xd50b24aab6ab6c03L,
43215         0x419d2810bc41f4b7L,0xe2e88d7a295496cfL,0x350713f2f2457ac0L },
43216       { 0x838e4a360427e2aeL,0x7631472a4d974e5aL,0x9fa3ab1c7a5c5fdcL,
43217         0x324798cdde34cb8dL,0xbfa5a9d0889105feL,0xd05dad34fd0df249L } },
43218     /* 5 << 294 */
43219     { { 0xb47c1d47d6a3a1baL,0x99bb7e6572f65bd5L,0xf251794578abfda2L,
43220         0x827f2aba3e3e3420L,0x436ee73250e2de70L,0x5c9ac6dc10eca926L },
43221       { 0x2ec67465181f5e18L,0x1e8f32fcc6c83d02L,0x9dd3aeaf3953bd81L,
43222         0xca955f4b07086daaL,0x7b4b6f3fd14eaa88L,0x562e75f1148d826fL } },
43223     /* 6 << 294 */
43224     { { 0x536e5657cb419fc3L,0xe8c208bc1d271dd1L,0x6a3713bd22d2b9adL,
43225         0xa4c761a7471d808dL,0xd93aafb67e6dca35L,0xc46c0ae38f55ca32L },
43226       { 0x55dc0de7a78bfca0L,0xe9cfb3013407d0caL,0x777e2a60b3256c14L,
43227         0x32b2238c6d8fee02L,0xe8b3539646e43ee8L,0x310bc1ba247985ddL } },
43228     /* 7 << 294 */
43229     { { 0xbb9bce6810168f49L,0x32edc368717445e3L,0xb0b5a04426aa3ff2L,
43230         0xc671f1fcd166542bL,0x3142864df61d2523L,0x11b2dfc7b0c67410L },
43231       { 0x2e031a05c99690a5L,0x4782fb749fb7bae8L,0xeac2cd506b7175acL,
43232         0x2e116782bef2313aL,0x67992027241c4d2dL,0xf8aa0e09a6952d9fL } },
43233     /* 8 << 294 */
43234     { { 0x9974759c581f9d3cL,0x9e76a970e5cb1973L,0x8afec58ec64941caL,
43235         0x2d7c57fa01d05575L,0xc07c74cc5c448db5L,0xa52474ce01bb1440L },
43236       { 0x93162d9700115bbbL,0x483b6147fd7480f9L,0x4f28c57e6af18dedL,
43237         0x36faed8f174a3089L,0x702dbd64a3dd6265L,0x86a9c43f6adc0d7bL } },
43238     /* 9 << 294 */
43239     { { 0x9d4d4b3c795eb646L,0x727e2aa17485839cL,0xb50018a5aa9250baL,
43240         0x5a15808d1ba716adL,0xb1748d580ff91cebL,0x0131bcff76144b6dL },
43241       { 0x23fea4a58dcccffaL,0xe8eddb5ceb64caaeL,0x011a65971c3c5e66L,
43242         0x7723dfba377a8f6cL,0x00167c71dee2f651L,0x3e89ddf5ee0e4325L } },
43243     /* 10 << 294 */
43244     { { 0xa3510710b9de7b63L,0x9f364ad14019c9dfL,0x5b66a5d79b5bdce3L,
43245         0x2b2f695178b1b385L,0x3e4783d33cfa9f99L,0x1af517506bd6bcf4L },
43246       { 0xf9c0686a81d8d7efL,0xdc0f22ec37c068d3L,0xe1b8665393545fafL,
43247         0x37ca8501a8a52881L,0x07ac5c8a5603e359L,0x98fb2bab542cc937L } },
43248     /* 11 << 294 */
43249     { { 0x96326ec323da6b81L,0xdb48a5e1f90a6f83L,0xbb141660f640a0fdL,
43250         0xb51609375b92f5c2L,0xaaabd54c997244e4L,0xbeb8ab2f859bb92cL },
43251       { 0xcac7c5dda4be476bL,0x7093faea7f58c1b2L,0x3167a2c45c6ad412L,
43252         0xabd86bc9544fb9a7L,0x571296a72448c363L,0x4da64cd9c6cd4621L } },
43253     /* 12 << 294 */
43254     { { 0x4981be690c5bbd3eL,0xb047df0a185fdb55L,0x3168e05074cff00cL,
43255         0x111150a1b52c7f9cL,0x0db2ed84a51c7986L,0x7d991630e61272adL },
43256       { 0x7443d93628de14ddL,0xfdf31f41a5daed5fL,0x71e0ef4e866b5e40L,
43257         0x05c57a45b965a670L,0x85bdb58c70e1aa77L,0xe4d1fe2a9df3ce32L } },
43258     /* 13 << 294 */
43259     { { 0x6ff2b1a1772c3796L,0x9b88c1178e186fe8L,0x342ba11f4312af31L,
43260         0x9a93a4d1a86ae2b6L,0x496d5f219d59e3feL,0xce519a7d6924acdcL },
43261       { 0x6fdef82327c46e44L,0xab5504c34d31c9bdL,0x6fa52bca71693677L,
43262         0x31221119033c80f7L,0xdb2cb49dc0a22f91L,0x4962d58f9b4aeb5eL } },
43263     /* 14 << 294 */
43264     { { 0x5d4618982f722563L,0x11d22b39567db14cL,0x9a8f004e6779cd40L,
43265         0x0812ae3d5473ecd5L,0x4ed828624e6c296aL,0x2d9ce40c064ee61fL },
43266       { 0x4856d586d8a9eb1eL,0x2ddd6b125d1b5e3aL,0x0ab5eec0382fba3cL,
43267         0x302018dffcf4a9c8L,0x7b4e6fd2ab3cdedbL,0x266c246a8f64cb1dL } },
43268     /* 15 << 294 */
43269     { { 0x55bad54bd6dc35e8L,0xa43d72ff38642612L,0xe39a191609bc85ddL,
43270         0xc9d4bc9b0f85d3baL,0x84cd12b61367a70cL,0xf4ebc0e04937bb2dL },
43271       { 0xd083145949dc027bL,0x110751601cf29970L,0xa443a29c0b76b4c0L,
43272         0xee5b8d0ca0de3249L,0x368aa3259002e7d6L,0xeb48afdc6182e2e4L } },
43273     /* 16 << 294 */
43274     { { 0xc41e4aedf5c3af59L,0xa0284ad06de9a78aL,0xf5eaab7b8ed812d2L,
43275         0x7801fbb81afb58b8L,0xbe5cdba671efcc3aL,0xe31a0e3ccd10cb91L },
43276       { 0x882e821e85dc0bc6L,0xd3ad070fbb32e506L,0x3afede2bd8a0f038L,
43277         0xe20a117c857fd3a0L,0xebaa2aa43060f767L,0x6524aa0d2b9d1da1L } },
43278     /* 17 << 294 */
43279     { { 0x86aeca0ffd81174dL,0x19bc6ee60c6eefc8L,0xc85f7f2ea91f0e19L,
43280         0x09b9276ad2354dc8L,0xb62adee0542a669aL,0x8354ad1a88097445L },
43281       { 0xe67d2834df9984a1L,0x2330c8cfa64b2864L,0x309dcdeb39e7b54aL,
43282         0xbbba4737a18cf5eaL,0x47511b1d92861a8eL,0x99d4bd673286d404L } },
43283     /* 18 << 294 */
43284     { { 0x9cc5847c88cffe33L,0xff726b0f6e8eb6c1L,0x9bb2ca161bc45d8eL,
43285         0xe7903009a6d8a5a6L,0x4f089cc047db2201L,0x4135884de6b5928aL },
43286       { 0xb1a86a0ae5c017cfL,0xb1d9bf6db0a393dfL,0x33d9c1c628bb3277L,
43287         0xcb05b67b45b582ceL,0xa72585fcf33792c5L,0x78b7c5e8a7d1ed84L } },
43288     /* 19 << 294 */
43289     { { 0xbb83b446b1b4a091L,0x66440b3d9603d875L,0xd1931f33c2b45d1aL,
43290         0xb8b67f20098d4cccL,0xa3583818790f208aL,0xe01194bec4a3e88fL },
43291       { 0x29301bb192e8b150L,0x1795cabe9448ee60L,0x377d8f9752500c48L,
43292         0x474e73d65a457e79L,0xce0a50ef30159027L,0xfe69abaafbb2c214L } },
43293     /* 20 << 294 */
43294     { { 0x70e478fb9346df25L,0x01dc0c2eb4a4ada5L,0xaec82b005be36ea7L,
43295         0x82618b8f6717e06aL,0x2db1f6d4008f1977L,0x4e493f3b16b390d1L },
43296       { 0xfe86fd4d990a75ebL,0xa1cf7f99783f6076L,0x6cbb23e70c049158L,
43297         0xd05be7e5ed456235L,0x601374069bd836efL,0x94ec964432e5f604L } },
43298     /* 21 << 294 */
43299     { { 0xd96e4d920fc48c7bL,0xa2e29660f66e491cL,0xb92d850601146906L,
43300         0xa43f4803afe346d6L,0x27885d98700b6bccL,0x90662e9f595d8de2L },
43301       { 0xefa7f261f70d1007L,0xfe8a8be3fc72531aL,0x3b3f7541f1aa8d93L,
43302         0xb31bea258215966bL,0x15faa4acf35d2be8L,0x0a5f95e786c9a45fL } },
43303     /* 22 << 294 */
43304     { { 0x3361e1ce3d87bfa8L,0x92f235e78dcca4f0L,0xc8084cb4be323fd1L,
43305         0x3fd481a5c24c6d16L,0x9b1bd9402cea81baL,0xf50911910c5aa59fL },
43306       { 0x4cd8c9eff81d5e2aL,0x5ad000131550bff4L,0x29d47b9f8cc32e55L,
43307         0x66e3e6f111694eceL,0xd5edf7017950dd7eL,0x9ccb10960f6350c6L } },
43308     /* 23 << 294 */
43309     { { 0xc31e47ff95e784e4L,0x7ad0dfd63fa14241L,0xc91482092dab896eL,
43310         0xe9a114cccb9bb463L,0xedce9e6f16cb16afL,0x0ee2ce0607508893L },
43311       { 0x1aedb80ce31c0f54L,0x235d4591512658ccL,0x9029fad2a38583f1L,
43312         0x95b1e1ddebef898eL,0xeb2f21809efabef3L,0x458c4338b10e9cbbL } },
43313     /* 24 << 294 */
43314     { { 0x09db138d18f2470cL,0x63bd2290f613658fL,0x0bb647794feebab9L,
43315         0xfce4aee17fdb1e71L,0x7d5c0c61a7f1f65dL,0x46405b618d02d6cdL },
43316       { 0x7cac04856fdcb0d0L,0x85224c4b2f8ec5afL,0xb5879a59db0aa864L,
43317         0x75f391b8ff94f8b5L,0xa6c994ae49c97f8eL,0x4d968fadd690b232L } },
43318     /* 25 << 294 */
43319     { { 0x1e436df6e11a616aL,0x9eb49c76bdb932a8L,0x207d2fe90e6591aeL,
43320         0x6e05acc8233ac034L,0x464dd321f3d04d32L,0xd4ba4889af43c171L },
43321       { 0x0808e5207120fab9L,0xb9e4726c3fbac672L,0x5dd1c13b9d7d883bL,
43322         0x1c091808771f1edbL,0x76988d1c75eac1a5L,0xb0fcd3a893a67be8L } },
43323     /* 26 << 294 */
43324     { { 0xf5cd290a67e0b4e7L,0xaa6fa6807c1594b6L,0xebedfbd7b63270beL,
43325         0x574b410ba369bfeeL,0x431cba5a020ea888L,0xd3a3102f56c71d47L },
43326       { 0x4894bfe0a90a853aL,0xd78bd98b5f9c4b6bL,0x9b1324f6d900c5c1L,
43327         0xc65c944d718c2147L,0xf661de6ba987f634L,0x0315e69f172628d8L } },
43328     /* 27 << 294 */
43329     { { 0xb12e0ab8aac7ab64L,0x8ce877abb06cf9cfL,0x39b694b40bb11fb4L,
43330         0x0c2428369b0d8850L,0x6bc9a033ccd50c6eL,0xaa2e77739a1e8fb3L },
43331       { 0xa7d8be09608e2e9cL,0xeb4cef0542b9f458L,0xa7268c9b985f66fdL,
43332         0xd60eeab27acf4968L,0x02eb2db3b6e5621eL,0x82fb4abfad8236c4L } },
43333     /* 28 << 294 */
43334     { { 0x07c60c7522ea5f1cL,0x35beae34a36bee4fL,0xa8b00a09dcba8997L,
43335         0xa77f1f3a802ce50cL,0x6c4050df2a2144b0L,0xf79bfa96ab1b10dbL },
43336       { 0x9025d470433a9b1cL,0xaf3e391790d9eec8L,0xbcad2d629ae2d535L,
43337         0x7a152829eff0f6a9L,0xe87345cd925fa5a0L,0x6ce007200e84039cL } },
43338     /* 29 << 294 */
43339     { { 0xc65acf36c3d095d2L,0x9192c5fe72427e6cL,0xcb84c43c3fa8b90dL,
43340         0x2f458fe965e15b23L,0xd8bf193731469f11L,0x1ccd8bb93638cc3eL },
43341       { 0xa067022f78e35577L,0x382e6af730ee676dL,0xf197adc2f6d135bfL,
43342         0x06360834c9a1cf58L,0x413813f7930371beL,0xf7461d04f5dcaccaL } },
43343     /* 30 << 294 */
43344     { { 0xdae449c007f6a05aL,0xbc1b84f55bf26c9eL,0xe3b3f9edb1c13820L,
43345         0x5442ad5b4090598bL,0x794ef65613749e4dL,0xde809180948b71c5L },
43346       { 0x4c72dc7de203c5b5L,0x8902b0971b349fc4L,0xa899bedb225a1569L,
43347         0xeb7da73de6ff3f53L,0x6ee8e1607c0be37bL,0x9ee667d2a31bf943L } },
43348     /* 31 << 294 */
43349     { { 0xbc91031108b6fb2bL,0xa5e0ab3e25e06a55L,0x16ff0705360f1698L,
43350         0x71c0aa7487e72a67L,0xa1f1497b355c75e8L,0x179b67bffa6bbcd7L },
43351       { 0xc9db6590b6738583L,0xf77660c4d87e72bdL,0x0ee2e7b3f13abc2dL,
43352         0x0cdf5a37a4d922b6L,0xaa8af2d596c853a4L,0xdc452af4e0092356L } },
43353     /* 32 << 294 */
43354     { { 0x5017e145db81146dL,0xc7d2086d45c54db8L,0x2541059dfa98234aL,
43355         0x4bf344d99985af98L,0x39737ed67b5b7b1cL,0x8e24691987c411adL },
43356       { 0x2fad8cedb877a75fL,0xe42352df17e60ee2L,0x1a53d856404043f7L,
43357         0x6c1f07a5863927a1L,0x38d3a4f4b6892121L,0xf4c1092001976c8fL } },
43358     /* 33 << 294 */
43359     { { 0x541732a70224214aL,0x61617b515cb2d019L,0xc560c24bcb4fc6b2L,
43360         0xd0ad737943670d99L,0x08cdd32eb83112a8L,0xbe57493d7e29810fL },
43361       { 0x7834124899d4523fL,0xae1a5857cc8e5fb7L,0xf8b62a59b8454efaL,
43362         0x7c63c900ab0f4729L,0xeef9243d72dd0f5fL,0x6b865dfbad766386L } },
43363     /* 34 << 294 */
43364     { { 0xd11536eefee626b8L,0x1d2471dd8077b5d4L,0x7db062debdb9a4dbL,
43365         0xfcc62c0ab9f808ebL,0x619b54c6ef392bc7L,0x81e146fc51b9f5c9L },
43366       { 0x0343807c7bbd52b3L,0xe024a9f1572125c5L,0xf8b886d86c57cb31L,
43367         0xcb92aa7d5398a318L,0x4ce0870d2410ef34L,0x1a40c103f8366683L } },
43368     /* 35 << 294 */
43369     { { 0x46485baa7bb78552L,0xc0f685f23e6a3f0fL,0xd24970b5fb3cc0ecL,
43370         0x0d1f380e7bf91feeL,0xf0f7fcafe7624351L,0x27cb99bc697a8055L },
43371       { 0x55be14685cdc7560L,0xf006927927ba7f93L,0xb0c25c759fdd0e70L,
43372         0xda82e73785818253L,0x7d40d86946304c51L,0xe06ea6fdcc18ba58L } },
43373     /* 36 << 294 */
43374     { { 0x99d37ade6b65e17aL,0x61ca538e38ce217cL,0xd3ea83f68ebb89edL,
43375         0xce6611eb4b02964eL,0x0ec7cc2f5c0a8e44L,0xa985b0c2974240a4L },
43376       { 0x7a3abb6c42ee5b0fL,0x55f049a0cb2eddadL,0x69348b027c44a60cL,
43377         0xcabc65191974a8c7L,0xd9def4bc07b91a35L,0x684a2d71b93b34c3L } },
43378     /* 37 << 294 */
43379     { { 0x21c37d21f48f274cL,0x2de96b4da082a098L,0x82520e0ca606b6a6L,
43380         0xf76c9ec6e1050b81L,0x248c5efbd1ce149dL,0x5a36ae1e9a909790L },
43381       { 0x8790b09bec8b43afL,0xd592dce560ff709cL,0x726d699724cc8e21L,
43382         0x61e37bef5e2cb745L,0xd55a68c26eff3ba0L,0xd47f02659ad265c0L } },
43383     /* 38 << 294 */
43384     { { 0x3e6351ef3932ef94L,0x65625878db5d64e6L,0x118a688e091ec7b7L,
43385         0x2a95072abdf60b88L,0x5200703540dc0afeL,0x59c3d90b6fc1cbffL },
43386       { 0x5622b1b21dfb1a7fL,0xdcb0344834d92243L,0x18fccfa86d7d36c4L,
43387         0x5d43a14181341761L,0xef375542eaaee79dL,0x4e4667216999d399L } },
43388     /* 39 << 294 */
43389     { { 0x1bca97aa9d3c6b9eL,0xb4bb4f95095cb250L,0x4f2c216a996fb52aL,
43390         0xc4d01916f379790cL,0x510882a4359df53dL,0x6457d76a671d6a8fL },
43391       { 0x0ded2623061f7d64L,0x3cb4f38f1ce7dcf2L,0x0d86313a224ffa88L,
43392         0xba8a15012b99aeb3L,0x2fb92183d69f72b5L,0xd3b9d6daf1fdb8f0L } },
43393     /* 40 << 294 */
43394     { { 0x5d573a3a0b6320aaL,0xf9ac8ccf289b6700L,0x8bad05cd8f28dd72L,
43395         0xe2eabd446b62c306L,0x60f70353906ef302L,0x147cdd0c367a768eL },
43396       { 0xea9d871635a9e846L,0xdd71e80aa8684430L,0xa56a5ccd530768a8L,
43397         0x59d241270a3e42f6L,0x707cbaf0faa367d1L,0x5419b14f52a0cbd0L } },
43398     /* 41 << 294 */
43399     { { 0x625bf4e6d991d842L,0x56b95a56a81daaaeL,0x2101137c9911bdadL,
43400         0x1141b0a1bbded1c2L,0x85deb889d1df8d43L,0x51e3e17edac3e376L },
43401       { 0x5d31639381fb19f8L,0xd1cb634b92eed2c4L,0x72a6ed7b943746dfL,
43402         0xd55f55fb22b85e00L,0x255b025804193aabL,0xd0b94c5d86a78c96L } },
43403     /* 42 << 294 */
43404     { { 0x121c15d859c3556aL,0xabe25c21864380dfL,0x2de101832627f78cL,
43405         0x19988e4b4bcf4a0cL,0x4ed3aad8a2f9cb52L,0x50f8cef5b2b257e1L },
43406       { 0xab0b000c49f7f596L,0x6cb997471fb9c471L,0x331974b95fefb8f4L,
43407         0x57cf97578e2e0e5cL,0xa82a8d06174a626cL,0x40ef371b03e80567L } },
43408     /* 43 << 294 */
43409     { { 0xfea713e1324cbab8L,0x738885e61897e7baL,0x8234ed08126aaa13L,
43410         0x4f66467661ed1548L,0x61fdc2aa172c432bL,0x78eade7c9ebf0a29L },
43411       { 0xd50ae7156aa104a9L,0x977d7a605536df98L,0x024014bdc9eb983cL,
43412         0x75d53c0585e21649L,0xc181d67098404cffL,0xe00f5f5dfdb3f05aL } },
43413     /* 44 << 294 */
43414     { { 0x3cfe2987d10542b1L,0x5935e0dc29f5b006L,0xce5932d6d83344f2L,
43415         0x67aab7ad9800a6d5L,0x3ef2b0e765073619L,0xc381a99454aa9ccaL },
43416       { 0xbf069577d4011571L,0x33b70c5d4d1ce997L,0x801ba41c758c9b1bL,
43417         0x6c2dd5ec36968958L,0x31820ca087921665L,0x0b7f0d337ca55668L } },
43418     /* 45 << 294 */
43419     { { 0x0b099a5afce6c55fL,0x91d1caca408dd628L,0x42a5181165449db1L,
43420         0x540935b040715d49L,0x8feabc5433b00823L,0x7107c06240c2485fL },
43421       { 0x13f307ac4fea64e4L,0xae4ec4a713a04327L,0x8297be380eff71f5L,
43422         0x3434286f1ecd0b2eL,0x4d7a5456a3e9d625L,0x657f950b6a0d04e2L } },
43423     /* 46 << 294 */
43424     { { 0x2237f78ecebadb15L,0xa1184339da01f9e2L,0x542c3354ef37abd1L,
43425         0xbec90883de982d70L,0xbacdbb9c457d3024L,0xf1d167c19840ea52L },
43426       { 0x9ed827d8433bd3cdL,0xf4e5b4231102fdf3L,0x2038c92fb63d6056L,
43427         0x490cb0188eb9ae35L,0x776331b87c75ffc8L,0xafbe7c6a3fe2e400L } },
43428     /* 47 << 294 */
43429     { { 0xf668460c9176a02dL,0xa843a70011d322a2L,0x6424f0e8a8c5d1c8L,
43430         0x0b45a1ab1bc440e5L,0x3b740cb11c3e391cL,0x5aaa89c4d5850e1bL },
43431       { 0x77739ee6d632c592L,0x171fd350fffe373cL,0x6a648fcdbd7e83beL,
43432         0xd98650c6b619f4d5L,0xa4e4ae5438dea07cL,0x10001f5afe0bf5c1L } },
43433     /* 48 << 294 */
43434     { { 0x31cb896b57dfc732L,0xc6b74a1edc323e91L,0xd24a41d0f11b04f6L,
43435         0xb609a26dab8f7159L,0x96d84b372adbec34L,0x154f5307d24ae7f6L },
43436       { 0x36dd3243e10eb34cL,0x055d3b714f6dbbd3L,0x30b1efde36d0c561L,
43437         0x3846925ce9bffd15L,0xaf401286aa99ba07L,0x3a191267fd48b839L } },
43438     /* 49 << 294 */
43439     { { 0x67145f18e42a26cfL,0x580857fa491122d7L,0xa4e2db8dd03b5071L,
43440         0x47a39a0d3e379882L,0xb6bfe4b35970766dL,0xe40f4daea8bce767L },
43441       { 0x38f199a7e812a217L,0x1407f98d97eec7caL,0x25d6f750236a41a0L,
43442         0x644327340e811ee6L,0x84d5d9c9dddd6e5cL,0xc1b6ef13c44cae4eL } },
43443     /* 50 << 294 */
43444     { { 0x79879d4f6714e8daL,0xce409617a17abd07L,0x6f2b14d008a6e685L,
43445         0x817d467409b5e150L,0xa1181873eb51b966L,0x573ba855da6b9544L },
43446       { 0x836ec3e5c4a37013L,0xb8da1bbe93fded69L,0xdb5bb6f16edff4c1L,
43447         0xff30b837f1657d36L,0xa20cf000223270b9L,0x29d60562d44a57cfL } },
43448     /* 51 << 294 */
43449     { { 0x0d6f36b9b98b029dL,0xc4cd72d07a371233L,0x23bd419e4f95cd4cL,
43450         0x2c95b0a2b80d1e13L,0x0f76e62f7edfbef1L,0xd077194dd303a470L },
43451       { 0xd6e20e7cd1b50934L,0xf4201fca2dfeb806L,0xa57dc150bced28faL,
43452         0xa84d621be3172301L,0x119768fe9aa14d6dL,0x34f1ae864b363253L } },
43453     /* 52 << 294 */
43454     { { 0x2fc83aa3afabd13dL,0x521b745f53c45a27L,0xc6f345a660c18225L,
43455         0x9609076eb5faa47aL,0x8bdd97fd535388fbL,0x8f5f3bd6e7fd7e87L },
43456       { 0x6de4454c1c8e1d5aL,0x8d61ca3b2b35e823L,0x93b66fce4672d30eL,
43457         0xcb9d601721d09ec5L,0xef98137fb1de06eaL,0x45e212758b051877L } },
43458     /* 53 << 294 */
43459     { { 0x117b89e9ee6e35f7L,0x2ad205aadd203ed9L,0x3f6c950c0689bd4dL,
43460         0xaba1e4b342f20742L,0x67464b793e22f0d1L,0x74436dfdbe0ad6c1L },
43461       { 0xc4a6e964c1470ac7L,0x853ad39b361da35bL,0x261c6fd6a187a6abL,
43462         0x08d7e89d59fb860eL,0x158e2697e8f88299L,0xf3f1f6f34b04a8ecL } },
43463     /* 54 << 294 */
43464     { { 0xbdfb8d006b562705L,0x76dbc217ed9f2aaeL,0x62f713778cfd02ddL,
43465         0xa05eed177a5d27e1L,0x60082379a006983aL,0x312af914bf7c2c05L },
43466       { 0x7d163fe76c8500fdL,0x722a35299d4d0dbcL,0x9b4c5c3539f93a78L,
43467         0xb193734c34c7ec06L,0x457db178cda87a84L,0x088dae087f816e0cL } },
43468     /* 55 << 294 */
43469     { { 0x746e73055896ac5dL,0x1d8326c21a7b69f1L,0x695197743132a40dL,
43470         0x3899f8a03f58720fL,0x2c3070a5df0b7fb2L,0x49bc59f2acb839e3L },
43471       { 0xf7d5d3f66b8f5a9aL,0x704ed893a4c3b570L,0xbafde26cab591c03L,
43472         0xc447dac83388a62bL,0xda80991d4416acfeL,0x1625c9151e729d69L } },
43473     /* 56 << 294 */
43474     { { 0x3104e59e6b843647L,0x4eccb42720bad138L,0xa575b8e150efd6a9L,
43475         0x68a6b7055a6e4729L,0x670306798f5b2a22L,0xb2cfcf81df9253bfL },
43476       { 0x9c3eeb19b8f81c39L,0x082ca86c986b4dfeL,0x1f64eca250250d8eL,
43477         0xbf26bcfb67f0c713L,0xbc5d0e2a49b609cdL,0x175acb34e6aa3c76L } },
43478     /* 57 << 294 */
43479     { { 0x5237d7368c53aae2L,0x2a88098bbdbc0b10L,0x18f1af11cec6db6bL,
43480         0x12c23392c4e08b3bL,0x23b652bf3eab43f3L,0xb79feb949f3dca0dL },
43481       { 0xb71e311d2b24e0d9L,0x85e48aede37a0f90L,0x93e8a0e753200b6dL,
43482         0x5d44b87226bf3a30L,0x466c31d1d0496b98L,0xabec12f7dd39874fL } },
43483     /* 58 << 294 */
43484     { { 0x58bc23928ca41326L,0x0744ba8524aa5067L,0x900e7e9baaf80bb2L,
43485         0x510bd122aff38fe1L,0xf90dd6a1002b277bL,0x829379dc81bf7df2L },
43486       { 0x5443b8736372d502L,0x124c2abab5b6f9a2L,0x88b237a4d6020c14L,
43487         0x3542215108f7a498L,0x39e84240e6234eb1L,0x43d721dfcc5827eaL } },
43488     /* 59 << 294 */
43489     { { 0x43e7597234658dcbL,0xed936b96bdf3a7caL,0x74acb7f60f1923abL,
43490         0x6a52b28cc007995bL,0x5abf2909a560fbf4L,0x79d571dd256bf1a8L },
43491       { 0xa8d51082e4c3281dL,0xc0d6f8aa0b9fdd38L,0xd589f2c57ac30640L,
43492         0x6abb8faf07635c58L,0x2af1b083d7520b0dL,0x18b9f6c893b951fdL } },
43493     /* 60 << 294 */
43494     { { 0x32e678b4c1ba956bL,0x9e8b137248f32982L,0x9b380a118a8f262aL,
43495         0x5c2d6ce0807f6d1aL,0xe99c2e909f1b3fa2L,0x6a0c9e4a7c4bb836L },
43496       { 0x30d80329ee8dac83L,0xabcf7b76b60bd5fbL,0xc589a0c8c14d56d4L,
43497         0x9e40af665de24d43L,0x932f4070230f8331L,0x96bba1c19b87948dL } },
43498     /* 61 << 294 */
43499     { { 0x8b83af0c4efaae9aL,0x25e55686770c85cdL,0x0beda54fede0c999L,
43500         0x6c5749398d249a2eL,0x520ac2ba2f476146L,0x162e482de95b05acL },
43501       { 0x2d3d19b6c73a32daL,0x945e5e3c33fd2c48L,0x361d9770a36b4ee8L,
43502         0x8aed760d014cacb3L,0xae66e5de5ae302c7L,0xb5fd5959b5d4d6a4L } },
43503     /* 62 << 294 */
43504     { { 0x25df58ff147da470L,0x1b3941ec3f4e3e98L,0x7543b1227aee3587L,
43505         0xb7bc2b31b4a28218L,0x8628b5400bb3224fL,0xe3e7644d373222e6L },
43506       { 0xb4e3269299244dc9L,0xe72c679d49781bcdL,0x894d9eb0bb6f0700L,
43507         0x4a08cdbc443c3639L,0x52c4d04e5baeb02cL,0x53f550ffb5f93552L } },
43508     /* 63 << 294 */
43509     { { 0x2b908f693c1f524fL,0x59fd6ae7090970ceL,0x595e15721eb9ec29L,
43510         0xa55adbd6fbc4f04cL,0x575a2344bcc38bf8L,0x89397944f2b659b7L },
43511       { 0xc77532a18c87fe8bL,0xa5a75677de4c9eefL,0x2e3d873a0e4a1704L,
43512         0xe18ff4fcc4d02aa1L,0xd842074275573a79L,0x0fcb532115296dcbL } },
43513     /* 64 << 294 */
43514     { { 0xbcc88422c2ec3731L,0x78a3e4d410dc4ec2L,0x745da1ef2571d6b1L,
43515         0xf01c2921739a956eL,0xeffd8065e4bffc16L,0x6efe62a1f36fe72cL },
43516       { 0xf49e90d20f4629a4L,0xadd1dcc78ce646f4L,0xcb78b583b7240d91L,
43517         0x2e1a7c3c03f8387fL,0x16566c223200f2d9L,0x2361b14baaf80a84L } },
43518     /* 0 << 301 */
43519     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
43520       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
43521     /* 1 << 301 */
43522     { { 0x7a1a522b246dc690L,0xb563cbe14b61ab70L,0x41bb4abe3d4ac4abL,
43523         0xc52950b337f996e8L,0x01d991e679727761L,0x35de93bd978fd7d2L },
43524       { 0x86bad5e65706d336L,0x10844155e7f26c20L,0x58ffeb7705757453L,
43525         0xbb1861293939df77L,0xbfdd394a6a78ea0fL,0x907ff0546e33e1d3L } },
43526     /* 2 << 301 */
43527     { { 0xa7f295320df93b34L,0x855934f25c14df30L,0xd2f54ce9efae348cL,
43528         0x5acb931cac52758dL,0x287b3e18d22961a4L,0x42a5516d748f8fe1L },
43529       { 0x1b62b341877224caL,0xaff58db3d30a4aa7L,0xbad78dadbe8da847L,
43530         0x85fa710954f18276L,0xe2cc9d287c4bfdadL,0xbb131f762c75f237L } },
43531     /* 3 << 301 */
43532     { { 0xcdcdd7d703844670L,0x79ec59afb4a23f91L,0x5923c569c00ce5c3L,
43533         0x099c17ffc589d0c7L,0x0335eeea89fa6fe6L,0x916bcacaa4e868c4L },
43534       { 0xb7037325fb687bd5L,0x57d6bca79853b564L,0xdf3132efd5e26d28L,
43535         0x7ed994b8de919cbeL,0x12df67cd6fbbb18dL,0x516e07c06baff508L } },
43536     /* 4 << 301 */
43537     { { 0xf2ec9ef597e833e4L,0x97bdef9734ec7e41L,0x90e2b2387d2ac6e3L,
43538         0xcf682b120318a3b7L,0x7fe76089ea84a7a0L,0x85c489f916546d05L },
43539       { 0xf987118f6abdda05L,0x675cf998aa4b95fcL,0x544c7774888a7e8cL,
43540         0xbd2647ba63ec5831L,0xb479cea3fd2fe985L,0xa042134528d163e8L } },
43541     /* 5 << 301 */
43542     { { 0xd93506a4e5947c6fL,0x4340d76a39b81d08L,0x741aee5917930d30L,
43543         0xfea3d99a18fdb81cL,0x1088ff6b289bcb07L,0xc6b45602b7c082c6L },
43544       { 0x50e2baab453d8d69L,0xda9bf561e893e183L,0x0af25f86b29a284dL,
43545         0x0e92e67473e01380L,0xe173a0e32be00e59L,0x402d2f3dada8954aL } },
43546     /* 6 << 301 */
43547     { { 0xca9cb3890399721dL,0x03ad9f4aa3291479L,0xd85b5df56dee003dL,
43548         0xe1fa7b0264a4f83aL,0x01c4cbfdb73f7324L,0x707010d45cf2ddf4L },
43549       { 0x3c6df430b12e02f8L,0x921a290185531489L,0x302fc77c91d1022cL,
43550         0xc3733ec0342d8f3fL,0xb83bc75f6195a665L,0x4a14b9e7a79f8027L } },
43551     /* 7 << 301 */
43552     { { 0x9f0e5428e2a57359L,0xc690a3c714998c16L,0xd73c3ca2de37e07eL,
43553         0x2ddf91b8dba0bc0dL,0x69d834b27570ae71L,0x2ac8bed4735195a6L },
43554       { 0xcd8c51ff3b1fcc5cL,0x7aa8cf4e1ba6863fL,0xebb69e72ae70f428L,
43555         0xa29409dfaa9e936dL,0x43f6ee805a332b9bL,0x0de49efac2eab0a9L } },
43556     /* 8 << 301 */
43557     { { 0x04baa1762310333eL,0xdc75e35f7b9bad46L,0xc4a6031dc6cd6108L,
43558         0xba2534d030bf87a5L,0x7ebc6e2131e497ccL,0x8a2a82b4851fd665L },
43559       { 0x9ecae0116d5faf40L,0xfa3a6d7f96956ecbL,0x39e8a9c22fa52782L,
43560         0x74c93801236d442eL,0x8b21ba23b1c289ceL,0x7f3e221b25c769cfL } },
43561     /* 9 << 301 */
43562     { { 0xed800e4d08aa4dfdL,0xf524b107d8105bc7L,0x8c4addc9ab07fc03L,
43563         0x2b0f038d26a71b4cL,0x5055c471a83d19a7L,0xc6c5ecba27e20a5bL },
43564       { 0xdbad26b7aaeaa017L,0x4e3abc20d2493554L,0x626310143a0c15bfL,
43565         0xbafcc06798cec55cL,0x9204e17ce6f87607L,0x8f1c10eed9302c05L } },
43566     /* 10 << 301 */
43567     { { 0x53680ce08afe59b9L,0x36a3cec75665022dL,0xb3a5091654490b50L,
43568         0x803d383f0838f0aeL,0x65531a008005ba2eL,0xb7fa6b4a1241a17dL },
43569       { 0x9aaec449b17e07bcL,0x19b7d9113d190dd0L,0x79da42457fa5e7feL,
43570         0x725bd045598ad850L,0x49f96cc45f94ee82L,0x114bbcbf03850eefL } },
43571     /* 11 << 301 */
43572     { { 0xf566a287d43a6db8L,0xffb8944b2aeb120cL,0x3e7099427e294c1aL,
43573         0xce122b126c31214eL,0xe59b280c2a21282dL,0x03916e2ba01a4fc6L },
43574       { 0x56e65da29f5e409cL,0x374d3dfe7f5c3e11L,0x150684fc13967e2cL,
43575         0xfbed4f5bdf4bc38eL,0x5973c67182e54b82L,0xcd36c873363f307bL } },
43576     /* 12 << 301 */
43577     { { 0xcb42c5617c3805d4L,0x0e74e75c3b43a8b3L,0xfd58f864369f579dL,
43578         0xf471aa774a3dfe97L,0x2e0dbb51ab37bd2fL,0xc4704487729c887bL },
43579       { 0xcb7958a9cff32948L,0x3e36de368505e71fL,0x2232fd2dd38ccfbfL,
43580         0x6f3c502042005175L,0xd1280a3e306fb63bL,0xef7abd792e368ee9L } },
43581     /* 13 << 301 */
43582     { { 0x29c5712d56ffcac3L,0x20307670e1a8e0eeL,0x676a23c26356aea0L,
43583         0xb9c17e3f432f15d5L,0x0008512e287c5705L,0x6ae2704bc5f7ccfeL },
43584       { 0x6a200db709a13b60L,0x24fb1e9241043271L,0x2e455e9741b766a2L,
43585         0xa11ff26fbe056684L,0x3cfb8a64ad9178ceL,0x5786978d5d675b79L } },
43586     /* 14 << 301 */
43587     { { 0xf4cf2c8e6070a72cL,0x0bd73aecabc3251cL,0x1af44eff17539f67L,
43588         0xec3ee99e44e8d8f7L,0xba698f6a279afdf7L,0xe871accfb771d4a1L },
43589       { 0xbf92963d8bb0f264L,0x817b1fcfb10716bdL,0xf57580786b23076dL,
43590         0x994ff3c535a994cdL,0x05d984e82604847eL,0xd728e292fc9f2e43L } },
43591     /* 15 << 301 */
43592     { { 0xa44bf023b900b696L,0x1f82fe54037bb770L,0xa6d12f820717e747L,
43593         0xf154ac51e3b83029L,0xfbd343128cf3984dL,0x7f734beaa76c72c2L },
43594       { 0x05c5b443114548b9L,0x4ce414f396af4132L,0x1474c0b79d080a7aL,
43595         0x865827c6497366a3L,0x34760c457816a0a8L,0x6da2474c15d2a176L } },
43596     /* 16 << 301 */
43597     { { 0x761e10e2ca114c4aL,0xe39d121d894301b3L,0xa0870ff43dbc6fcaL,
43598         0x97651286cbe0ba8aL,0x47d46075c0f1ff6aL,0x18669c843abeb5b6L },
43599       { 0x1234c80ead8d9309L,0x1ccbe4d51f6f97ffL,0x399a2d41d82ab780L,
43600         0x8a03afafde426e50L,0xa2bcb109ca6dde77L,0x840e13b00618f5ecL } },
43601     /* 17 << 301 */
43602     { { 0x9552a8184929f7eaL,0x514e9ce9acc61766L,0x03159a525a219015L,
43603         0x5efeebfa14eace54L,0xe8a3736f853da94dL,0x3a0f334ff45e8a32L },
43604       { 0x71ebab39c9dc65c9L,0x6ef37f49d7c24f39L,0xde3d45f8b24a9383L,
43605         0x7193bbb80c218869L,0xa1bdfd30c0f7b6beL,0x82b2c4c5c1d9206aL } },
43606     /* 18 << 301 */
43607     { { 0xf9d9b678b197099fL,0xfa8548c4c15b2bbeL,0xa36f17fbdd2817beL,
43608         0xb35597021732d1edL,0xba145100744f3955L,0x7c274633344b43a3L },
43609       { 0x9b0ee7c8686b65a5L,0x438eaf4823f0e973L,0x79a658a7288c5019L,
43610         0xf6d938c546d04413L,0xe39bf9a6a6cb9853L,0x880d5b83801b70ddL } },
43611     /* 19 << 301 */
43612     { { 0x8f23f00303825482L,0xc4a9f214a6b35023L,0xf0905573794e7de0L,
43613         0x7ff790144dd68979L,0x8d9c14942959beffL,0xdb34474f82282e48L },
43614       { 0x423bdfa281fde794L,0xfc31e3e792a8810bL,0x19d316ba8bae4eceL,
43615         0xddcf30b7159c1386L,0x997968a38e7d69dfL,0xcf67ae9aa6b21be0L } },
43616     /* 20 << 301 */
43617     { { 0x877866a3697b4dd0L,0x32a872f4e76481aeL,0x300387bad609cc04L,
43618         0xc761ae79d74566d4L,0x9fd3e5bff22e2d24L,0x363ef5bf1c46bc0dL },
43619       { 0x121b25bce299a690L,0x7932471dc2d32b7eL,0x7f89692e94bb4272L,
43620         0xaf9cc4111a3ce076L,0xaf02ea22ea02e452L,0x43154e581d19dc60L } },
43621     /* 21 << 301 */
43622     { { 0xd9389e05e25dbe97L,0x3a8689b162b3afe3L,0x4d5556467014953bL,
43623         0xd6894c42af5ba9bcL,0x4b233690b3bacaa6L,0x0fc8ad07fc191181L },
43624       { 0xcd3a1e4df0764f39L,0x18a47233d79567f1L,0xf0f9eb765f921f79L,
43625         0x7f3d814d19d12a7fL,0x5e48cc36ff33a995L,0x9589679b8960331eL } },
43626     /* 22 << 301 */
43627     { { 0xa2ff78bb477d7226L,0x3216fcc085e04a8bL,0x7c594f81e4c3c24aL,
43628         0x075eefaa029d6ef6L,0x5ae51000493ab006L,0xcdfcc6939ab165efL },
43629       { 0x50b7eee276073bfaL,0xee52d55b3b60cdb4L,0xc7f7b3af45027275L,
43630         0x01d5444ac15b2ecbL,0xdf56f8c12a61d1e1L,0xcf032e7e4992e1bcL } },
43631     /* 23 << 301 */
43632     { { 0xc8a4dfbf15b6d8d5L,0xcb34e0e4e87ff88dL,0x6dc95befa6ebbff6L,
43633         0x2a55ca1372ff2cc0L,0x3c4c0f3c6a62588fL,0xa8de444ece156917L },
43634       { 0xced7c4523e55eba1L,0xa109b7949f05820eL,0xa021717e0e6c318dL,
43635         0xa0156b8d0b308f5bL,0x3c65ab9daa6634baL,0x1666e650e2839e0eL } },
43636     /* 24 << 301 */
43637     { { 0x0d27500f9ebe3c40L,0xeb9ac1022b700fcfL,0xee7578f8610763e3L,
43638         0x6e56078f47ef08feL,0xa8d03a7f047d04c0L,0x2143606f27cc8aa3L },
43639       { 0x6b08eb383b004721L,0x1f505c0dc4e36bb6L,0x6f9b869ae3f10ba9L,
43640         0x3bfb9833e500e846L,0x6d975557b9171b1aL,0x7af9cf4f18fa0045L } },
43641     /* 25 << 301 */
43642     { { 0x35bfb51b3b35836dL,0xc834e59003b0fba6L,0xbe6e17d378937ce0L,
43643         0x2f796f7c4daa9aa8L,0xd7896a0ad310eba9L,0xda258ab05ea4056aL },
43644       { 0x2d872d2170626628L,0xc9b26d7c2ee433f0L,0xb176220ee72f7491L,
43645         0x4869adcd895e9b52L,0xd37540e4d3a6d786L,0x024aff303a86b44bL } },
43646     /* 26 << 301 */
43647     { { 0x5e78606bd8424b90L,0xc83a5af9ebc9c9fdL,0x8d5b63740b65ada7L,
43648         0x4d01d6a221fca70fL,0x8ed7787ba1838061L,0x29901318f4a1716eL },
43649       { 0xc4d260527f25fd2dL,0xa66dc0a98b5147e0L,0x4355e26c269d726fL,
43650         0x1284fecce3a27644L,0xc9aa6cf7f98e1d0aL,0xa25ac1be3ff560c9L } },
43651     /* 27 << 301 */
43652     { { 0x5bbb87ded64d103eL,0xcb53a2f24d20fb37L,0xf8a9c2993a46b892L,
43653         0xb552910ca793aa9dL,0xd09e5bea51ef0806L,0xb57a0568e0c3817fL },
43654       { 0x9ca67c5f4e85598fL,0x04f6361fb0336008L,0xf028231b580afa5aL,
43655         0x8d938c0ef2bba03cL,0xa5984c1f894f37d3L,0x62ead7f4af695ac5L } },
43656     /* 28 << 301 */
43657     { { 0xf897de9213a48775L,0x505e21681b0041bbL,0x9f5533aad598ebb7L,
43658         0xd552ae1e1e87b2fbL,0xbb35a6319b736f5aL,0x391ce7dcc3a4c54aL },
43659       { 0x4c677d87f90124d6L,0x2ceebe51a9292210L,0x8882ae3133c63951L,
43660         0x8222c6482d44c9d0L,0xb97511420d607658L,0x3a999028b85f5997L } },
43661     /* 29 << 301 */
43662     { { 0x7b23f424eabb3f68L,0xa622a3ba4294750eL,0xb382b118e535b446L,
43663         0x7dbab9ee5fab292cL,0xcfabbfb037fe2f8eL,0x2283d7606670925bL },
43664       { 0xd18e90715be9d07fL,0xe191daa7d257745dL,0x86d59808df915e35L,
43665         0x87f68d5987370b6bL,0x76b9d255f945ac1eL,0xdcf9e8f2dc94ddbdL } },
43666     /* 30 << 301 */
43667     { { 0x004f1db65b986506L,0x5da683c32b0d22acL,0xf2afd1d85ee0c71aL,
43668         0x3b99a78a8f2ad25bL,0x8145d2ffd1c0cb69L,0x4511dc4e4009a536L },
43669       { 0x5539e8b8a5cb0c13L,0x4f8fd0186aae4603L,0x15dde4476d2365f3L,
43670         0x7cb887f7380df270L,0x815343a6a741b88aL,0x81a085e4bf99e7e1L } },
43671     /* 31 << 301 */
43672     { { 0x37d0460fd647fbd6L,0x2ccc7b01b9541f89L,0xec0e8826877a1b2fL,
43673         0x54d9e611cd462979L,0x016e8458453dcce6L,0x99b5dbed20ea6a24L },
43674       { 0x64072ec778550386L,0x279fbd9959d02307L,0x7f2ca27e9183bfebL,
43675         0xa191d6e8bb5132f5L,0x2b9f6163ba49ee68L,0x5a58a11fa3ee1672L } },
43676     /* 32 << 301 */
43677     { { 0x15d47e52ec645a62L,0xabe0ddb38d6d4423L,0x51226a3070cddb11L,
43678         0x63a253d32b5a8db7L,0xe8be4d1fbef37d65L,0x41e625d9c0920b91L },
43679       { 0x08b713a8d9d040ecL,0x467fb08dc450cdbaL,0xa8975877917ee393L,
43680         0x294792e91528cd12L,0x4512dc8c37daf6aaL,0xa83becc9197a99b9L } },
43681     /* 33 << 301 */
43682     { { 0x1b7bfdb118815b20L,0x1aa602e8629b81b9L,0x11e6df9d199aa5abL,
43683         0x1a521728bef9296aL,0xeba3e03b89e127e7L,0x6e69893553dffcf2L },
43684       { 0x24355785101615e1L,0x126b4c5282e42593L,0xe344ddd85c23144bL,
43685         0xc73a49b3746c0ca2L,0x1ec2432be6f63f9bL,0x6080ba870243120bL } },
43686     /* 34 << 301 */
43687     { { 0x6ab2936a4c3e946aL,0x8de2e0ae3ab052f0L,0xcaf8c35eea109739L,
43688         0x21d69383032418c8L,0xefab535ae7ee60faL,0x1a3a1be794b44fabL },
43689       { 0x0842aaa5eb911cbbL,0x789c2b7e0286862dL,0x8bff708715c0b148L,
43690         0x71100d79d8d7faf7L,0x47caa89a6dfa0c8fL,0x82385cf44b546332L } },
43691     /* 35 << 301 */
43692     { { 0x4f5d8c35e4b814fbL,0xe534b7be6a427f92L,0x468fb2819ca1d37aL,
43693         0x8c1c86347949961cL,0xf9d00305db0f7f19L,0x77534b3a976f7102L },
43694       { 0x94ecb7933f530710L,0x072f6fc7a916827aL,0x9247acdecc926f8eL,
43695         0x0d4a8997281d0a50L,0x659712669f353507L,0xd4730a15fde80a6bL } },
43696     /* 36 << 301 */
43697     { { 0xde68ca25bd37b630L,0xcfa9d32ca899d623L,0xaaeab905937c9ba8L,
43698         0xcb261334348ed39dL,0x8d12531fc77e1512L,0xfb7934b6213b63d1L },
43699       { 0xc6a6fb0096a13f19L,0xe940f3aac8f88d6aL,0x014c7f95c3d2829dL,
43700         0xc33d87e9fff01f41L,0xbf9c3c23c5cdcb4bL,0x8b8c0afe5d5be5c1L } },
43701     /* 37 << 301 */
43702     { { 0xe4f84bf12aac2c23L,0x5bde1744f823f90fL,0x65ffefbc02d5bbe2L,
43703         0x385aff9332a3b756L,0x3813f2b362abfdacL,0xbbb444cb0a144325L },
43704       { 0x0cf9d137ec625be1L,0x86b8fcd4c143816bL,0x03f7a9d060ac32d8L,
43705         0x0428daf9366165b6L,0x6ef94260d2a806d0L,0x94a100a598134bb5L } },
43706     /* 38 << 301 */
43707     { { 0x4b68325ca4a34cb5L,0x74f41f7639fada89L,0x34bf397236e593e7L,
43708         0x0cc75d461c6179c4L,0xe62d5ba577d711e5L,0x7bec1be7876964c7L },
43709       { 0x768f35d13809fc73L,0xfe55a9a57dcf1703L,0x86405336e69d3390L,
43710         0x68f5ea2d00bfc544L,0xd4cf822b4834b2d8L,0x77dc1ac22b0d3ad6L } },
43711     /* 39 << 301 */
43712     { { 0x45603dfa0337f57aL,0x50623184344b6968L,0x3fb9957ef160d9aaL,
43713         0x40eef1697c8db44fL,0xa8f394e98bf71121L,0xa55ecf3b86a920f5L },
43714       { 0x1f3c1f22bb0822e6L,0xb3c2f21357747a3eL,0xfbdb4465bef56f08L,
43715         0xa9844890a46ac73fL,0x3fd564a5bde3652aL,0x008cc1a97c653c82L } },
43716     /* 40 << 301 */
43717     { { 0xcfebe027ca0a98d5L,0x946b0d9aa8914697L,0x00f89d16725ebd08L,
43718         0x94c6f2b07a584e8dL,0x095ac9cc911cab58L,0xfc9c3b499c4073c8L },
43719       { 0x265919b0c7233aa8L,0xe6c0c7f474be5217L,0x6db597f1815a70a9L,
43720         0xdd9e4a101c5fd35aL,0x38b8e35112d52a8bL,0x5d0ed83f2ef20fabL } },
43721     /* 41 << 301 */
43722     { { 0x4f47e10a6c96b43eL,0xe406ab39f3d744deL,0x1caf45d83c893b01L,
43723         0x4f089452a7582ea6L,0xc02f58cd62b5a868L,0xf6532017c2a9aa7bL },
43724       { 0xf0d8bf6f32b01bf2L,0xfeec5f68a97246f3L,0xb2ead70a1aa7c238L,
43725         0x1a1d6f77ad83e05aL,0x4b7110533dca7e9aL,0x44a89fb85f96e5adL } },
43726     /* 42 << 301 */
43727     { { 0x86a7ebe0f02461f3L,0x6a7a9cc6862282c9L,0x7f8857944a97e48bL,
43728         0x191244cd20662db2L,0x8d85175183489311L,0xfbcb17b0f934c1fdL },
43729       { 0x33b4d86e032a7bb3L,0xa99864cb573f5c28L,0x49fe8e799c4f12cbL,
43730         0xe34c32e32c8bb49cL,0x5888421e962d6d9bL,0xa317c2d1bf1be44dL } },
43731     /* 43 << 301 */
43732     { { 0x3454c424cc1dcbbfL,0x67e61434aac98717L,0xfecd8125cc2d3044L,
43733         0x2032be70df7f8891L,0x04c5a0c81028059cL,0x6563dc8c76ade6b7L },
43734       { 0x9ff3815192f460aeL,0x8c2c3c632d54785dL,0x1fa99d8e43eabf60L,
43735         0xd75d9559383be317L,0xc9ef068e3dfc908eL,0x2217c8c1959d3e6cL } },
43736     /* 44 << 301 */
43737     { { 0x5828d71bf2e5f345L,0x8b756075929fe375L,0xca625ec12c43a6d1L,
43738         0x08cd01f53b31e127L,0x56c622619cfc1be2L,0x093ea207b3a6caeaL },
43739       { 0xdf53b20970b42dc9L,0x2d2dfdf2235f4aa0L,0xcaac3b3598786c94L,
43740         0x1ce1f893b4998150L,0x40341c41526a98bdL,0xef39e97eedce5288L } },
43741     /* 45 << 301 */
43742     { { 0x08cd60d461ea4256L,0x8031748b9461f861L,0x9c96e1f9019c7908L,
43743         0x7e6e08f4e46bcf7dL,0x8e8408f123ffa986L,0x0bee857ed467288bL },
43744       { 0x702fa8536e36fcceL,0x3bb25fa905a89edeL,0x642105f4e96866ceL,
43745         0x6a5207cc16e37536L,0xcb6a96d1372a3e06L,0xb1c7c85a1da6bc6dL } },
43746     /* 46 << 301 */
43747     { { 0x0bb97497a97a3316L,0x9416659ce402a800L,0x79656970503a2314L,
43748         0x0070a7eef8007c50L,0x8093cd4372624892L,0x4c0ee444f9b96830L },
43749       { 0xc7c10b9fe300c49bL,0x97f5f90a5f7baf99L,0xf04a5a7cfaa064deL,
43750         0xd5b01fa6b0c111fcL,0x4d12d6fb65d8a2b7L,0x807a381c27770e2fL } },
43751     /* 47 << 301 */
43752     { { 0xcd1aeeb43b6a9c22L,0x7fbdc6c19d71dcd0L,0x9bb43b6e6221669eL,
43753         0x1b76f2bf526f8a00L,0xaeba54302efdf661L,0xe1f623e745537bbdL },
43754       { 0x340966ae067c5f4aL,0xe2cdb27e4799b2aeL,0x9aeec5989b8458e0L,
43755         0x1d0588487655b632L,0xa5ffe5897abd70b1L,0x84db43db6721054eL } },
43756     /* 48 << 301 */
43757     { { 0x3b21dc1f538d92d8L,0xc80b22b3c005aa86L,0xf536e5d30da87d65L,
43758         0x4ce10edf0cd999a0L,0x8949181450e08f5dL,0x77fd8f2e526647e6L },
43759       { 0xcb207ee9250099fdL,0x03c7d1abfd6aa078L,0x7d4940d225e0cf15L,
43760         0xb688b311067fa052L,0x89308326a98b2e21L,0x3ee4cc2b72311eabL } },
43761     /* 49 << 301 */
43762     { { 0xec49fc4e06d255b2L,0xabd0c002fb309d28L,0x97490ff08c601c3cL,
43763         0xe17102fd58042cd6L,0x861411f11416ebc3L,0xfb31ce455c6c630cL },
43764       { 0x0a24d561c6cc5e9bL,0x80bec25c9a7c1524L,0x8003494fbe53e50dL,
43765         0xe89b75e28633c559L,0xafb1f6d6763b3360L,0x0e7e58c52bf70cd3L } },
43766     /* 50 << 301 */
43767     { { 0x72322d26aab6c9b5L,0x953e43d0070d7d08L,0xe2dd5444954645c3L,
43768         0xc5de051cb276ca86L,0x195d454439158c74L,0x26e2cf9fb90a8f97L },
43769       { 0x774baec15b217a76L,0xdba4bc63f94172baL,0x96ddaa4022e20037L,
43770         0xfe1ce4aac111af69L,0x6f6d3c428ad6dacaL,0xe59257d8376cdefeL } },
43771     /* 51 << 301 */
43772     { { 0xf2cabe73184d44ecL,0x4bf744d60bb08687L,0x10cb9e9209865d58L,
43773         0x3a63fe414ea221e0L,0x8f595e5892961becL,0x1b8ad036855d186cL },
43774       { 0x75dd5f70086542abL,0x8b357e087bddbb6bL,0x22de89f06e829a06L,
43775         0x44ca8b64ecc6cc26L,0xd02fa871a5ddebb6L,0x6adf1d0c6a60a0e3L } },
43776     /* 52 << 301 */
43777     { { 0x0102775982e4f5c3L,0xac8eac172c014fc4L,0xa0cd26e85bd843eaL,
43778         0x9b0431ec056d4b1fL,0x89df7db58eb9c55bL,0xf17f917298fc9b9eL },
43779       { 0x2cf1e4a78e6b770fL,0x0d6ef9e2b842fe52L,0x40b4ddb76c578172L,
43780         0x6630657627533b9eL,0xf8d8661eb50ce390L,0x6ceba0aa16577df7L } },
43781     /* 53 << 301 */
43782     { { 0x6dff66c19ec8ac93L,0x6261295bfdf6fe7dL,0x9ad1536fcf9fbbb2L,
43783         0x5cfa30a92a6d6d31L,0xb3bcf1b0296224dcL,0x42e4b410608371daL },
43784       { 0xd6bad6dac32945fdL,0x0fab7d1dc0c031a1L,0x054df9599b192d32L,
43785         0x29830094ea78052fL,0x8d73ffce03f2ce45L,0xc14c7012f9d840ebL } },
43786     /* 54 << 301 */
43787     { { 0xdf74522e74ce5c21L,0xf864cbac930c4b92L,0xfe0d2358eb0fbe9cL,
43788         0x10b31736a5cf765aL,0x185bbbe96a9c95c6L,0xcb14d694e5362993L },
43789       { 0x3f5c921da5332e61L,0x0820b32bd244cc98L,0xdaf09f24d7c32062L,
43790         0xb2241c9ad5959a1cL,0x16bb89a3226127ddL,0x0b46e3f03723d04dL } },
43791     /* 55 << 301 */
43792     { { 0xa38b1a796975230aL,0x25c6db8c3991b5ceL,0x0d89c3fe9c1bf52aL,
43793         0xe186e293cd8f9f8cL,0x777bb327e6ec37afL,0xa974132a0ae31c7eL },
43794       { 0xfb9918305c50f089L,0x4a653d6999497954L,0x5055c690774e8a26L,
43795         0xf94ffbae3815d67aL,0x99d74f5e74ea4481L,0x3b352a327d477151L } },
43796     /* 56 << 301 */
43797     { { 0x2a62804172fb61e9L,0xa9bfa73ab13d053fL,0x4a2cdaa3c647fcb9L,
43798         0xe1a9e91f4952d3a4L,0xbc1b3d8011e2e2c3L,0xe58ef59c18e4340eL },
43799       { 0xeb8696ff1cf859b8L,0x5b0f5cc4ee918cf4L,0xa471d6ce6c1e905cL,
43800         0x4e13d6091ed2e8cbL,0x52951509c77c8c91L,0x0926dad8e234884eL } },
43801     /* 57 << 301 */
43802     { { 0xb168a6c36e3aa3d7L,0xbd0086ea5ad9142fL,0xbc4da0293c24fe23L,
43803         0x7ed3b34808b90de6L,0x7a7a2259e33b0df9L,0x483b389c9c3a173dL },
43804       { 0x02080c626334a061L,0x61944965b020cfbeL,0xece528e9ede88ecfL,
43805         0xcdf3e2fc99389758L,0xb21470cb7a3fb92fL,0x717cfbe083937e21L } },
43806     /* 58 << 301 */
43807     { { 0xfac97f2910e3e93fL,0x1505c7d2f1101b88L,0x7cea978823bc0d11L,
43808         0x27ead95d45045667L,0x711bc4dcd17ea199L,0xe3f93fb522f3142dL },
43809       { 0x31b05e6ad7233d64L,0xac28e6c154e7c9d5L,0x892b6366716d273cL,
43810         0x1622230470da8a48L,0xc85bbe6070d560b3L,0x555e6de987fd38a0L } },
43811     /* 59 << 301 */
43812     { { 0xac593f746ed50680L,0x89bdeabbcb01cfd3L,0xfa43158ead35524dL,
43813         0xb2393726e8d66ca0L,0x248c67c2c36bb495L,0x27d4b0b85c933625L },
43814       { 0xdbb1364a78c8bb4bL,0xdcf4b1e13486ef0eL,0x554f95cec498b2c9L,
43815         0x2b76da29811a2329L,0x750c10271a10d941L,0x07045eae375b01b6L } },
43816     /* 60 << 301 */
43817     { { 0xd3fb9bef82621500L,0x09b18748f0f647a6L,0x186bed054c357e73L,
43818         0xd58281f0a85f3174L,0xdcf2e0bb91ded0e9L,0xe77faad126894faaL },
43819       { 0x6843c160bc3a3c4bL,0x7f8058944c76592dL,0xc53be0883ec05e95L,
43820         0x318d8ce7cce0c822L,0x6d615f1b4c761dbaL,0x0115824c46ff47e0L } },
43821     /* 61 << 301 */
43822     { { 0x1815391cf8d0b74bL,0x903ad8fd797625dfL,0xad1ca24d3983100eL,
43823         0x0883fd415572ff15L,0x0e9e572cadeb4e56L,0x800bad6f7d0e25c4L },
43824       { 0x52a394b44c7e2f03L,0x5150c01398f2c416L,0xf4ab35c68ce503c4L,
43825         0xa0ad209a41b4beeeL,0x050c52c80189706fL,0x86780a924049e913L } },
43826     /* 62 << 301 */
43827     { { 0xa398529c74ded2a1L,0x5e7248f52d7ea6e5L,0xbeb250bc28c2225aL,
43828         0xf7068fc0b40f4843L,0x62098aed839b7290L,0x947087e293ddfec4L },
43829       { 0x81ba8c8824d71004L,0xa877f443bf4813c2L,0x3cf5f473ca4751bcL,
43830         0x2533890e633cc635L,0xb358f7781e6d9465L,0x50693deaa7801dc7L } },
43831     /* 63 << 301 */
43832     { { 0xaf306f56cbebedf6L,0xdd733be7837acb84L,0xc767237afcff0b9bL,
43833         0xdf948f12e555bee9L,0x86b85657826dc76dL,0xa4bac032e702b1c0L },
43834       { 0xdf3544bba81bb117L,0x69c20dff34f4f0aaL,0x846b78577050d98dL,
43835         0xde0ef0403c70120cL,0x4483872c12c3bd64L,0x870b758550acebacL } },
43836     /* 64 << 301 */
43837     { { 0x37be5d3f68d7dfcfL,0x97bdbd49b945e6f2L,0x165a24b59d1569e7L,
43838         0x254aaf59b4e293abL,0x3c751fbd6fb7c0a4L,0x14eda4ba5018cb18L },
43839       { 0xacb3b8971b5f6aedL,0x6d10be441e4b6b78L,0x245d7258621df6d7L,
43840         0x2af0e283185f0e2aL,0x1e7edc818fddbd81L,0xbd1e6c72c538d02aL } },
43841     /* 0 << 308 */
43842     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
43843       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
43844     /* 1 << 308 */
43845     { { 0x6858b674844626a2L,0x610cd40f0cbba6a6L,0x324e674e29d9194dL,
43846         0x2dc6fdf6dcb30a51L,0x3f3ecb77528aa549L,0x0721f8f923ffaa92L },
43847       { 0xd8efcbd627a77538L,0xf4e642bfd6162c9cL,0x04f2b0b74cf4a16fL,
43848         0xbc0bb49fbbf335fdL,0xc6b6e5bd5a928c36L,0x981b01f4d893dd45L } },
43849     /* 2 << 308 */
43850     { { 0xfb083c2af810465bL,0xb66a8de902ce0deeL,0x6e4130e747a81b95L,
43851         0xcd704dc658a98737L,0x842ae329592829c9L,0x99bedc34be20dd63L },
43852       { 0xabee8e55d53b2df4L,0x6ce657586010b37cL,0x781f39b2467112b9L,
43853         0x6f06058fbe341038L,0x5effdca512a2f8beL,0xaa9bdad7af34466eL } },
43854     /* 3 << 308 */
43855     { { 0x3933b4c1575782aaL,0x610d3ba25c66e501L,0x52fd3c0f0b7e019dL,
43856         0x7f8e5ddfa48715d6L,0x0879c5defa39be53L,0xe32c886c56f01cdcL },
43857       { 0x71b2dcbb1726779cL,0x6caaff052c6aa84cL,0x6af94846640b2d74L,
43858         0x78a10710049a2cbeL,0x41a1ce67ac2ab0f1L,0xd160b7faa76d8438L } },
43859     /* 4 << 308 */
43860     { { 0xab86639e9c216137L,0x45a12fb882b18d64L,0xb5734418d763f0bbL,
43861         0xd2cc332211a9802cL,0xe41d7db881269b8aL,0x91072fc12ecfa355L },
43862       { 0x59d6912504ce306fL,0x916d9d4da131b86dL,0x84478b6b8a739738L,
43863         0xe86ad7d91cc83ae3L,0xbc9b2084797ccd97L,0xc1e94af4694944c6L } },
43864     /* 5 << 308 */
43865     { { 0xbbb6725b5c82c857L,0x72c66c3f140b561eL,0xab65dd0664bcb2d5L,
43866         0x755e848a780d5c1bL,0x84e6f686a3a61e6eL,0xd84bf486bd100b4bL },
43867       { 0xb34fdf846354e899L,0xcbc312da55ec5654L,0x3c2cc881f9a125f0L,
43868         0xb1fcce564aeadf8eL,0xbdfc54c0c46bf0c2L,0x11d7ea4f09d281beL } },
43869     /* 6 << 308 */
43870     { { 0xe1aa844b1601940eL,0xd22221821797e84fL,0x3025aba65ddcb5d1L,
43871         0xac8cdaba38009c6aL,0xb9ee07b46e261ee5L,0x84069bc106ab8430L },
43872       { 0x7a36b46278b9b112L,0x2d91ed2c08e77879L,0xae4ef469341275a1L,
43873         0xf7cb393f1c7cf858L,0x83c00eafd192af3dL,0xa81697a7a1e15176L } },
43874     /* 7 << 308 */
43875     { { 0x687d0980f9bfd795L,0x9a7539377ad882bcL,0x641407fabbcde5b3L,
43876         0x12ec9d216ed103a5L,0xf858c7851fa6ee22L,0x329b61bc818f2c11L },
43877       { 0x4720d42ad9d48b30L,0x3f61c66082a66766L,0x99aff25533723e4eL,
43878         0xd6c67ce3d3260b62L,0x63a6fc9d86391c33L,0xc002433a31de2381L } },
43879     /* 8 << 308 */
43880     { { 0x585edee3895c0318L,0x775e142f45e8205bL,0x3bd7924fd85ad31fL,
43881         0x2e7d8f919124bffaL,0x885397c044c62868L,0xc0c2dff47fda9f5dL },
43882       { 0xd302582ec14e693dL,0x53d6e33a6cec31baL,0xb0216b5b63653c06L,
43883         0x8f08a1ad9c70dad4L,0xccf014aaffbba93dL,0x900b0d2ca33f12b7L } },
43884     /* 9 << 308 */
43885     { { 0x4960ccb6e9824c45L,0x3c5a9b74c7e4cd06L,0x1e78cdfe37cfec62L,
43886         0x8cd49ca80da56a05L,0x5ba51217dca05707L,0x0d1f6e459d66c960L },
43887       { 0x7178089467f9c82bL,0x342e4a5b18974c55L,0x16263f18f9b32fdaL,
43888         0x844b5a02935b3636L,0x9c5abd51c139ea58L,0xf54c69428beef953L } },
43889     /* 10 << 308 */
43890     { { 0xbe51552d6d2dedd1L,0x6bc86dc1cd997093L,0xc9b600c4418f03b8L,
43891         0x4ea4e857e7a9208aL,0x7aac3d96883b639bL,0x4127ed0735d2f4bfL },
43892       { 0xf5f6310d76bd792aL,0x3da9b6a5fa223d0cL,0xd75f88075a041b79L,
43893         0xf3261457e4dd58f6L,0x4f0f5b18b0d9a51bL,0xf5aeedc1b8c84f9fL } },
43894     /* 11 << 308 */
43895     { { 0x1e08d6a81375620eL,0xed9a4fbae1f62c24L,0x0d3bb90381ab5de2L,
43896         0x885781f0df1b6a13L,0xc3fb9f97e1c7de7eL,0xf12e4bcf9372b033L },
43897       { 0x9bc3cf4dd5868448L,0x89465649552016adL,0xeea40cf92a8b2c23L,
43898         0x57d720ee3af98886L,0x97b14c0b72db853dL,0x65d10f42f23504deL } },
43899     /* 12 << 308 */
43900     { { 0x0dd2395e9b8cfa41L,0x50e203abd4f92a44L,0x7280aff16630023bL,
43901         0xfcce59dc07de820eL,0xa686be05bc8189adL,0xac4b59bfaac70b7eL },
43902       { 0xd2c0070e7a3c71acL,0x1d550add35ac1c47L,0xd42b6389fb881c1bL,
43903         0x57ca3fccd0dafd42L,0x909e8284be26ccc9L,0x1abe7595a002235cL } },
43904     /* 13 << 308 */
43905     { { 0x02562f1c6b1878daL,0x52a2cd069fce0ee6L,0xf25b35bdeb16199aL,
43906         0x0320c326a75fb01eL,0x2006d7587de2d46aL,0x6f9d0e256842b459L },
43907       { 0x70a89562a68b5482L,0x9653726e1ab35865L,0xbda3cebbd8f849adL,
43908         0xe2f8d9e60b6fc51dL,0x9c3fd51246104400L,0xbbd260c9bab5d34eL } },
43909     /* 14 << 308 */
43910     { { 0x1f5094703cbc1df1L,0x9f752a663f962634L,0x98089d2ca2435048L,
43911         0x05256acb0e755318L,0x91a21f707f3845f4L,0x473ac1e0d68c8fcfL },
43912       { 0x57ee51417f2ff0c9L,0x959a84f32013c48bL,0xe701f13c4c111ee5L,
43913         0x70219eee86db5763L,0x385f890cdb0782e5L,0x81fb64b2fea04d2eL } },
43914     /* 15 << 308 */
43915     { { 0x61b4bf7eeaa07bd9L,0x49832879afe544c0L,0xf788e97f54eb4d80L,
43916         0x78351b41338af327L,0x3a631bba77cb8057L,0xeb9a6f23f218e4ceL },
43917       { 0xbd4a0dcf025b6453L,0x2aad6a467b876222L,0xaee94361215c42cfL,
43918         0xf8d1fd5de496cddeL,0x3c3af08022d0fe06L,0xb3d5dde0d09cc3f7L } },
43919     /* 16 << 308 */
43920     { { 0x1e34781aa6a1913dL,0x9a8f32287d0adc38L,0xfc185ccc28af85baL,
43921         0xc923d78b3ae9ba11L,0x7d494d7ea7bdb313L,0xf774dfa5af8f8b87L },
43922       { 0xc178ccc116e863b8L,0x2d472f2aa8899691L,0x608747cc80a50372L,
43923         0x8147aa90e6f90197L,0x4683d4c978c2f216L,0x8323652c552f3b51L } },
43924     /* 17 << 308 */
43925     { { 0x7d6bff984dc9149fL,0x79879e1f499b443dL,0xf4ec65232aff2a1dL,
43926         0x6cf3c97f27253aa1L,0x95b9471eefe6f72cL,0x3959bd816c8457daL },
43927       { 0xe2870635cf112073L,0x84e44933ec12174fL,0x67a592deedf434edL,
43928         0x0c93cdae2897d0e0L,0xe344ecf463c89730L,0x28098b7567a1133fL } },
43929     /* 18 << 308 */
43930     { { 0x62e96dc7a12a0cd8L,0x09d7c6f0f02a3d87L,0x9d9fd51233f8929dL,
43931         0x1231952dab376555L,0x6ef6823c8e3d2d63L,0x7ad2e5405a01c12fL },
43932       { 0xd1bfaec479af6fc8L,0x4555fedfdad97daeL,0x0e6d3f0155750bdeL,
43933         0xd37ed9f0056f6128L,0xf1fdf91c65fe6ff7L,0x3ece19ae92d05e43L } },
43934     /* 19 << 308 */
43935     { { 0x07d2075e750fc5d0L,0xdc2b03f6a07ca45cL,0x0248d87552efef7fL,
43936         0x2dfdaf3f744e727eL,0xbef861b8d9b2bcacL,0x5e6363f0baf394c7L },
43937       { 0xe8f23bbec973934cL,0xb43d619a50ea324dL,0x2bd5e0075842d6cfL,
43938         0x5c5af62217646e90L,0x5d95d8fd222ec05eL,0xc9adabb45bd67c31L } },
43939     /* 20 << 308 */
43940     { { 0xa5c08e8bcc2c9a2aL,0x70e1b4058baaf0fcL,0xf29e1e5c9e36e50cL,
43941         0xa3d9080080f258c5L,0xc9ceac25ecad4498L,0xcb73130fca32f3feL },
43942       { 0x2dbe620c48b3863dL,0x8c52727f14ff53bfL,0xb60b22a86b45e9b8L,
43943         0x81e05bc0f6483c5dL,0x217caa6bcd542972L,0xffab716afa780778L } },
43944     /* 21 << 308 */
43945     { { 0xaef1278b0ba5a344L,0x253be7ad2d0c3947L,0xce58bf0fe5408f09L,
43946         0x867b0d6fe21228f4L,0x815abb5dca61e691L,0x0da28f58f3e94434L },
43947       { 0x5b0fd178ca4cee2bL,0x8989604240b13224L,0x8e2fe19616c251a7L,
43948         0x7b3381cb11b17162L,0xc73d96a427ef2c0dL,0x76b7fcf36899c135L } },
43949     /* 22 << 308 */
43950     { { 0xcaee3387cad8b585L,0x58446c1ad59d8777L,0xb8755fa540888d8cL,
43951         0x7868510654428813L,0x7bd21629136e2b59L,0x249903a6998254a3L },
43952       { 0x2cc73a751f8fd813L,0x4b1a64576d4f3a70L,0xea2aa620b2e7a0fbL,
43953         0x77c8cb98202f6ddcL,0x68ba9d261e3851cfL,0x936fe8cbfe02e6efL } },
43954     /* 23 << 308 */
43955     { { 0x8b84121bda75aba3L,0x4440272d74602c33L,0xb8110b2a1e8a8ab0L,
43956         0x4de462e9391cf47dL,0x9173d756519b9ab4L,0x3df52d13ba8d5dc7L },
43957       { 0xd7a822eaa418b01fL,0x58be2b076585f7d8L,0xaa814fde00fb449fL,
43958         0x6b8260fc7da43c5dL,0xaecbfb442351ba9cL,0x9cbe3d199f8db60aL } },
43959     /* 24 << 308 */
43960     { { 0xe5d3e0d80d7410d6L,0xcfa9ed742be432c9L,0x60044434a85a0686L,
43961         0x93b357166ad6918aL,0x1a3c3e6d051762beL,0x80813589b0ab32d6L },
43962       { 0x64214b92aad403fdL,0x684befc14d3fb746L,0xaca5a51479515046L,
43963         0xacdba03472e84485L,0x61aa2834287d9e97L,0x07a515a5cad222e7L } },
43964     /* 25 << 308 */
43965     { { 0x8f631b17bc04e9c5L,0x017527212c515161L,0x4358d8e9ee7769a5L,
43966         0x18f0aed0b59dba1bL,0x035c6bb644973218L,0xa49a4cbcfb3897e6L },
43967       { 0xd2a0b7505841ab18L,0x8fe952dca6d2d43dL,0x2d30add69a71d0ecL,
43968         0x0cb84c402c5d440aL,0x33f3cf7c7c47846bL,0x88703c65bc8e8b3dL } },
43969     /* 26 << 308 */
43970     { { 0x3c3db9419474059cL,0xcfbf13ad72820ae8L,0x3f84300c51c37d62L,
43971         0x0f78adc45529d333L,0xa19be46482e34cfcL,0x9ed07ee011c98376L },
43972       { 0x5113e660b5b6f6beL,0x56f2d2b37a5bc818L,0xd99290c61c2c822cL,
43973         0x39c026b8b27aafceL,0x8692150b12ef7c76L,0xa55426d1c6de9e16L } },
43974     /* 27 << 308 */
43975     { { 0x889aa8ee3465358fL,0x5885ee29afbefa70L,0x05f9dbd290b6ff58L,
43976         0xc74be0d09b5e02afL,0x4b7da27ea6b29d44L,0x2ad60aefcf68eeddL },
43977       { 0x2ba942b3388c81c5L,0xda8badcc368e2e62L,0x33e95ac87a9e8511L,
43978         0x37453bbae72008b3L,0x3e1f181195eceea0L,0x719f550c7b19a417L } },
43979     /* 28 << 308 */
43980     { { 0xb03093068af19670L,0xd784125a34c6bf0fL,0x0b425ee0255a8396L,
43981         0x91076433fb541162L,0xc4d8188586f47a0eL,0x3b767d54fd7bc7c1L },
43982       { 0x98b405d3bee196e9L,0x4ef9c511edaccf4aL,0x5a6deb6503f4f1a6L,
43983         0x4a22ca641b4c5104L,0x2cce36679145ce41L,0xd05187523206810dL } },
43984     /* 29 << 308 */
43985     { { 0xa5746e07f7e11342L,0xb50e390f2e2ddca0L,0x3847749bcb288bc2L,
43986         0x6ff43ec646ee679bL,0x343b3fe2c5257b02L,0xc0f57f509b823eb7L },
43987       { 0x5ce3d2c8aff42c7dL,0x984c9b99c3c76f3fL,0xc8559f58b8823b92L,
43988         0x883ac8064ce4338cL,0xecf8aac3389d8ebbL,0x9edaec10b40bfb16L } },
43989     /* 30 << 308 */
43990     { { 0x0ed8a07cafb04e5eL,0x7e95ed898f6bc911L,0x6a4ed37113dcc222L,
43991         0x9aa3a43296f07c7dL,0xe819a80b9b338e4dL,0x65fc2778278f53b5L },
43992       { 0x788408e9024163b3L,0x159de8bb7de54f06L,0xc953e21281239dccL,
43993         0xacb5ea2c6dd62ce9L,0xf56ac93b753f4ab3L,0x2a1a09b5eacc39a6L } },
43994     /* 31 << 308 */
43995     { { 0x89dcbf021c5f4cb9L,0xc0fbe7ce210f98ffL,0x3dc3c743b897cdf2L,
43996         0x931f9dbb5d02c43fL,0x0ea9f164f74db981L,0x504938874af9f53aL },
43997       { 0x86bd3ed62531b8aaL,0xcc1fb6dddcfca2a3L,0x24b0cbf2b97abaa9L,
43998         0xd81ad35c9073f19eL,0x4dde5dc05db7fd5cL,0xce410880e3ac9b63L } },
43999     /* 32 << 308 */
44000     { { 0x29d81538037bebadL,0x76e52c73d9e0b78cL,0xaa4ace6e8783d1fdL,
44001         0x9c14ebddf0e3c126L,0x0eb1c08d6eca4b71L,0xd10c6b961c91df35L },
44002       { 0xdb8119bbe81bb84aL,0xf784d3c117e3ceefL,0x053c916835436f81L,
44003         0xeb41ccbb9b18d212L,0x93b3fb43b1bc3497L,0xd85a7c758c1ced81L } },
44004     /* 33 << 308 */
44005     { { 0x90b606b2fc9958e6L,0xd39965b6f94234b9L,0xf4a86f1676f4dd03L,
44006         0xd6a7ba54470f0f7aL,0xa1b85c0ca86fce7fL,0x2b50f14e574c4cfdL },
44007       { 0x4aff867d80e783bcL,0x031092eb61f78fc4L,0x8ad0d7486fe0af1fL,
44008         0xb56b1a1a0cdfa574L,0x586c916a56466e12L,0x427e5946d09a9d1bL } },
44009     /* 34 << 308 */
44010     { { 0xdd0e3ca276d1b2e5L,0x07dea7e48b4cb3a6L,0x62a63cc7fc4a0f0aL,
44011         0x048478ef5ea2eccfL,0xa77eae472e34c1a9L,0x7a2120751bfa5dc6L },
44012       { 0x0c1fbbecabc233ffL,0x6255fd91dee18d7fL,0xd6da39aec38462ebL,
44013         0xd86bc3194be435f9L,0x23567d64291c606fL,0x6b85038af67051adL } },
44014     /* 35 << 308 */
44015     { { 0xbe79e1b1eef4ae7cL,0xa45668dc42fb7357L,0xcdb3b3ee2d497a36L,
44016         0x6ef724e6c5f8d861L,0x7e8834523802a324L,0x641b3a81aba90442L },
44017       { 0x13bec555ae4c2544L,0x340d34f927d172ceL,0xfcfd933bd92f558cL,
44018         0x57d8e300d5a669bdL,0x9f745ce71883049bL,0x19690a31e261f9ceL } },
44019     /* 36 << 308 */
44020     { { 0x004105c3811af84aL,0x01307934a7934a0fL,0x179fd49b9b3226a1L,
44021         0x195d9e5cde6834b4L,0xfbb79dc00e6051bdL,0x354273ed367f4487L },
44022       { 0x4afa9d4574fb892dL,0x03ae905ea1b7f3bbL,0xea32cd5d592f6122L,
44023         0xa758eed2f1103301L,0x9dde4238c59d1cc8L,0xe2760bcc51022a42L } },
44024     /* 37 << 308 */
44025     { { 0xfed7077b7a7134a8L,0xe65b4eaefe0cf05aL,0x130de76be626841bL,
44026         0x499934ca300117fcL,0xce74885d4e186b5cL,0xd352d0d2029bee7bL },
44027       { 0xd86c448c857a38ecL,0x8139eb50a956da9eL,0xa036de4a93ce7131L,
44028         0x3f9eba375041c9d4L,0x8c24408e548f74fbL,0xa74053fde942bf8fL } },
44029     /* 38 << 308 */
44030     { { 0x64cb00f586ff10acL,0xd1eebc4c9cbba8d8L,0x427fad8af3157125L,
44031         0x9f8eb84cf7523b0bL,0xbdd082bf2e6dc29cL,0xfe40623823d3c315L },
44032       { 0xad5df7fb546d9dd4L,0x83cadc4b8e42f3c7L,0x7c90502c36876485L,
44033         0x4f33eccda35bb6d2L,0xdf7571383a79b9baL,0xd250b7d2e6ddafaaL } },
44034     /* 39 << 308 */
44035     { { 0xa52a7595504417a1L,0x540f70b014683af9L,0x5f0d1560f27a9620L,
44036         0xccad06444b2147c9L,0x92223275e52c8eccL,0x30d6b52b7cfedb7bL },
44037       { 0x2161f8bb9bb5b844L,0x075b9db87033586cL,0x5748d512c8c5189aL,
44038         0x95d76a950f0aab91L,0x91f85aaed0ce9c56L,0xeab8cd9b8434e695L } },
44039     /* 40 << 308 */
44040     { { 0x54f84d70d377d7b0L,0xb745d1903344bc4eL,0x1c693ed08f33aa53L,
44041         0x990ed45f8bfbee7fL,0xad620c9fe9b258fbL,0x465ccb101a54bf46L },
44042       { 0x5330a0d3ebc40951L,0x34423e8ca405da61L,0xeef1ce78b83043b6L,
44043         0x99678f22ac06d182L,0x9213f57d1802f14cL,0xf8549616adf11fdaL } },
44044     /* 41 << 308 */
44045     { { 0xc6ca95476c66fa6eL,0xcae41345bdd5b16dL,0xd72a41a4ef022783L,
44046         0x810f4615b2d5154aL,0xfddc469e6d333af9L,0x3154ccbb02d2bf38L },
44047       { 0xb33d5c59fc1a0bdfL,0xd8c3f8743c971fb3L,0x5e47ec01114e68b2L,
44048         0xa440a83fe9baa164L,0x353d01c397c26b35L,0xfaabf5dff03b7672L } },
44049     /* 42 << 308 */
44050     { { 0xdc2a97651e22de2eL,0x91eef436b6cd3b6dL,0xff099200f99ac721L,
44051         0x20faacfed4f89e8aL,0x91bb24373fcfe45cL,0xb7a152897b6d3ff6L },
44052       { 0xfee966c0ef94332aL,0x944728473c81b942L,0x831d36dfab1a553fL,
44053         0x244bc8393023cca1L,0x3f4a49d57e7be940L,0x4159aa9d7b71c0e0L } },
44054     /* 43 << 308 */
44055     { { 0xfc25fcab5b16ee64L,0x44f807e06841acd2L,0x5f43cfedf59c3f06L,
44056         0x9279c8110c5b59a7L,0x825df117194b80beL,0xe2c18880d27d6fa7L },
44057       { 0xc9aab2e66a333721L,0x1665b6f55b034c1cL,0xf28fffd13df9796cL,
44058         0x23caca87bbefb8a2L,0xfc556d575f7510f0L,0x41990ce8552dafd0L } },
44059     /* 44 << 308 */
44060     { { 0xf31796d2b6e392e1L,0x199d624893b3395eL,0xef14c7c212f9b763L,
44061         0x721ebf2143edb7a5L,0xa40b88945e96f3baL,0x8770608c4cff8394L },
44062       { 0x990c99ae8d0def0eL,0x292b26dfa15a5649L,0xa98fda2c91ca89d7L,
44063         0x916cb1b4973e5f5fL,0xa2823f13a72de0bbL,0x415f7bd28cd3219dL } },
44064     /* 45 << 308 */
44065     { { 0x5cfde16a9fc0e90fL,0x61bda4caac6c15d3L,0x5935e48e2a79d928L,
44066         0x31213c7c82f986eaL,0x170dc539bcc4c0dfL,0x2e0d29406f11823cL },
44067       { 0xd2dbecac80fe659eL,0x98b7f46b8399d8b8L,0x259f975abb204589L,
44068         0x65f3073cd5c52a46L,0x0f4c007805dc7fc4L,0x16c49d403031a8ffL } },
44069     /* 46 << 308 */
44070     { { 0x95705b15359816d5L,0xce0c4379d0641ed7L,0xb3f0d8321e8a448eL,
44071         0x8bea060873e2d711L,0x5a85fb2f6a040c03L,0x7c19a2185bcebd4aL },
44072       { 0x2b10a87aa31cffddL,0x4fc728fa9a5814a2L,0xedabb0dc63bdd2ceL,
44073         0xdb90173f96bdaa40L,0x543c4f01527ff659L,0x5dbff7ad0a33b251L } },
44074     /* 47 << 308 */
44075     { { 0xeef30ea55e636f5dL,0x8df2d4040bccc4ddL,0x8b0d6f35ef1afe9fL,
44076         0xbd288e6ef8f86f6aL,0xbc68817ebda45411L,0x8a6f50070faf9e7bL },
44077       { 0x6158c57a53d4050cL,0x6d5a3af165b2252cL,0x10f62839f450886aL,
44078         0x8b9ac19b1df85080L,0xc160c1567553ed58L,0x2195ab29cb449cd9L } },
44079     /* 48 << 308 */
44080     { { 0x521f4af73ed03d5fL,0xe3461f66eaf9064cL,0xad099ab7ae03777fL,
44081         0x541cadcdb65f73ffL,0x53430463a86059b9L,0x8ff88fe5043e9f82L },
44082       { 0xd515f4c7e42cde45L,0xf7f3dec3f41c3269L,0x7bed53567ef1b8ffL,
44083         0x8782b45f1295b5feL,0xab54ebaa03917627L,0x8516beb28787ed9fL } },
44084     /* 49 << 308 */
44085     { { 0x24b2b95b113940daL,0x8c24d8d3f9c6e6d1L,0x7c584170eddaaf29L,
44086         0x249267171efd01aeL,0x692cf8f40cd0f2d5L,0x0bf82e142f960244L },
44087       { 0x6dbcb6162dabe927L,0x76d826d20aa1eed3L,0xe4492fb3be98af99L,
44088         0xd4f27cbea50dd711L,0xb7796efe2d8085daL,0xf2d42519ec4e8ec2L } },
44089     /* 50 << 308 */
44090     { { 0x3fbaf46dccc3c261L,0x773c240c1b646e80L,0x151a711f363b6a5bL,
44091         0x3c8680b1c53b5b59L,0x8ee6795f9fb234b6L,0xab7840aa2f673211L },
44092       { 0x0a1a0ff3224a8184L,0xcab87319c71bb575L,0x7a9e9daa8125668fL,
44093         0xdc607b016c4cff5bL,0xa54cb4c792e5c760L,0x977e4c93d99e4655L } },
44094     /* 51 << 308 */
44095     { { 0x87d4ff71ebe95680L,0xa2093915e5adaac7L,0xd5bbbdade32f5d9aL,
44096         0x5d61056cf328a4e1L,0x61fcdb0f353f565bL,0xb7b8ba004efab5caL },
44097       { 0xb5bbcfa410f05eabL,0x483ae9221f09a105L,0x17d94ca44bbf4753L,
44098         0xf734a8cdbbdc9a94L,0xc7f01a4244e81e2dL,0x60c3e777b3ba8033L } },
44099     /* 52 << 308 */
44100     { { 0xba7df5a965b68624L,0x30b4d6ed6e7d58bbL,0x67e52341dbb81762L,
44101         0xd697ab1b0deeac1dL,0x01d15e8e5577ea92L,0xbb12d72498fb38daL },
44102       { 0x302faa6d4e04908dL,0x66cf6cb909b90a9cL,0xcd665dbd98d96736L,
44103         0xf7d3c528b86f3af4L,0x4844c7541d8b07f4L,0x2a77d7b91eaf7dc0L } },
44104     /* 53 << 308 */
44105     { { 0x8a36c9b57fceaa87L,0x5110912b553c7ad3L,0x4aa51166d5eca67cL,
44106         0x05740dcf07a5eb58L,0xeaafb3e3396857a4L,0x1ae9571bba8d62d9L },
44107       { 0x2736975500272434L,0x2c74325c59872fbbL,0xd1d8291709dda11aL,
44108         0x2a5334eb4683e8a1L,0x22cdd088e3481df0L,0xab1c5f5b4fddc546L } },
44109     /* 54 << 308 */
44110     { { 0x1966aa0515f46174L,0x495901bd2a074050L,0xda5b0cdebba902baL,
44111         0xc47c518a684325bfL,0xa5df133ec4d9d6d9L,0x3771f465fbf7d31aL },
44112       { 0x0a73718c02b05d1aL,0x1107cd45534237a2L,0x582cfd2980f5d897L,
44113         0xf51a0a88dab0269eL,0xfdea51cfea1a22faL,0x3c9a0d247a13a324L } },
44114     /* 55 << 308 */
44115     { { 0xcc330f58c42f1ce6L,0x8e1fb7df534efc38L,0x2a37208f5fa5a01fL,
44116         0xc06d8447369bdbb6L,0x0b1ea5161a3e36e7L,0xfb4a48366ff9abbeL },
44117       { 0x5989c2d524419909L,0xdeaa6136f1d5b1caL,0xac6003b04ba760f1L,
44118         0x3a6d5422059081beL,0x96c7fa9df797e22dL,0x67c2f77fa9f3addcL } },
44119     /* 56 << 308 */
44120     { { 0x53e59f251d70eb73L,0x8aed17afe69d0525L,0x26ddc17864413768L,
44121         0xa7c8d40f5e48c349L,0x29ad92d187ff01fbL,0x8f4e1b3b965b2de1L },
44122       { 0xb83cfadf1446eca2L,0x7432bda4e609d416L,0xcf97e8a3f1c7de69L,
44123         0x45899bd832f55f07L,0x41a6811751175738L,0x89eeb115b8efff21L } },
44124     /* 57 << 308 */
44125     { { 0x9dcda4f3723fc25eL,0x710de79fb5d954deL,0x095ffbf1f0b7d129L,
44126         0x419a2a5e32651179L,0x7b249135827d4268L,0x9dccc98d909fbfb4L },
44127       { 0xcb4b0cb016554ab5L,0xb2fc635f6d84b255L,0xa7f8f3f553512b87L,
44128         0xc72633f300ec778bL,0x4e07d91a4f1841a9L,0x2a1adbbdcb4f478cL } },
44129     /* 58 << 308 */
44130     { { 0xe31333093bb794fdL,0x34c68bac33b3be44L,0x953fa2c412172b7aL,
44131         0xa9afc12d4fdde6ffL,0x30b5302ae9c7804cL,0x4a1746c702119e68L },
44132       { 0xc4d0c7d323e2ec51L,0xbc821f217143d613L,0x8f41251a673e203dL,
44133         0xfa32c06aac2ca4c3L,0xf4343f2799a7c431L,0x8f7d489e6b96d959L } },
44134     /* 59 << 308 */
44135     { { 0x183311763f6278f9L,0x4fcc5b653593cdd5L,0xb09b5880e643f83dL,
44136         0x0f130a3d2c78466eL,0x926d7c3d2b1c1ebcL,0x7217f875662ed4ecL },
44137       { 0x2d3be028d81cdad3L,0xb2a04e3507a38019L,0x8da8cddfc9a3097eL,
44138         0xbaa67f60ddb20228L,0x698fc1c407f04de8L,0x6f0e1d6d7e86db6dL } },
44139     /* 60 << 308 */
44140     { { 0x54a01e60936c3ebaL,0xf326fe96ec01b12cL,0xcdfaf00366e4de2eL,
44141         0xc53dba07392fd0a8L,0x00d9b80f6ec46004L,0x84d59be83ba63f8dL },
44142       { 0xbac4ea439dea6062L,0xb4b4845badd568caL,0xa6ca3d34d225e2d0L,
44143         0xce72955db50070a2L,0x56e5c91321c78b68L,0x888eb198999488a3L } },
44144     /* 61 << 308 */
44145     { { 0x65bead3c1c2de335L,0x0ecdc057b18a6778L,0x821b836983e57ea8L,
44146         0x84c80b574a5c11dcL,0x0b6432822ac9ad27L,0x8e09a7f344fe943fL },
44147       { 0xe510f47daa92dc94L,0x8bb0b5cc6a1666a3L,0x55315bcc24645380L,
44148         0xe3acbed113dcf7a1L,0xff99c90e3c9a1610L,0xfbe9aa1bc326e1f5L } },
44149     /* 62 << 308 */
44150     { { 0x5040bea56827b6e3L,0x1049e004d935eb24L,0xa15f9a07ba9bde68L,
44151         0xda430c55e6087e70L,0x30ed69af8e84b7c8L,0x8498514eac9d6a72L },
44152       { 0x69c783d64cb27e79L,0xe55d31a09647a572L,0x0479e8b2fbfb82e8L,
44153         0x3e845922b52f08c0L,0x252f755f0dbca622L,0x6219778389ddfee8L } },
44154     /* 63 << 308 */
44155     { { 0x175264893ca1461fL,0x54c432f92b6476bfL,0x0e0be36a530795f9L,
44156         0xb9896dacca583429L,0xe4af98239d4e6085L,0xa38b7c4b4a7422ddL },
44157       { 0x74643ef47163e421L,0x74c28314895ee61aL,0x637c79c20d62b657L,
44158         0xb232ec619bf2b3afL,0x27bdbfb4b2d5992eL,0xcc6e424c49afb181L } },
44159     /* 64 << 308 */
44160     { { 0x5255508c11c92f34L,0x9a346cf3a294d382L,0xd9765eea3095205bL,
44161         0xfea2ed702c470ef7L,0xf5e8a0fc9c40bf0aL,0xb572390ee4137a16L },
44162       { 0xb91753712bf2f545L,0x2c2d0f4c58cd9cc7L,0xbea6bce902385486L,
44163         0x46208408a8bc3a94L,0x64a87a2a3ac45044L,0xe40da33c7df70151L } },
44164     /* 0 << 315 */
44165     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
44166       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
44167     /* 1 << 315 */
44168     { { 0xee9e25d939161b8aL,0x8763f2a2e2eead91L,0xd2fc1157d2d91300L,
44169         0xe7597e2fffcbe50fL,0x4be3814fe11d376eL,0x1eab3d7edbf14562L },
44170       { 0x38a107c0c0ad183aL,0x829766267c753bbfL,0x18014e09caebd481L,
44171         0xb28c331bf9ace60dL,0xe8fba04f211cb8e7L,0x41c4b797e42dc65eL } },
44172     /* 2 << 315 */
44173     { { 0x009dc2f4c3e88580L,0x4a405be899db1fb5L,0xc89bfaa2ec5d91feL,
44174         0x461be9a0f160afcbL,0xfdd084bb7d7566b5L,0x795275e8e48099a2L },
44175       { 0x1b461fc9fe9815dbL,0x576214cd73627bbcL,0x3246332d9f09a206L,
44176         0xbde4c0c36941d6efL,0x44ef03fdf387f5f6L,0x99c8ac0157b63400L } },
44177     /* 3 << 315 */
44178     { { 0xaa512f202f6e4301L,0xef668a5fbf94a1ccL,0x08713c3015861b88L,
44179         0x49d47551c99bb2b6L,0x6db5f812e2f0258eL,0x70c9b299998d7435L },
44180       { 0x46168e1c5d176ae0L,0xec3306e4f730ec30L,0x49439df3ab69c15dL,
44181         0x1040408bea0143e4L,0xb48ab8eabc549b0aL,0x4aa38bbf10f89223L } },
44182     /* 4 << 315 */
44183     { { 0x7e4851599598f49aL,0xbdac3d5e9629305bL,0x20de0dafa6fbabfbL,
44184         0x04f015838f09fff7L,0x5a0562976a06994fL,0xf51dac8f6e3ccd33L },
44185       { 0xc087ef9c3af507b8L,0x525ab76e6a5c6663L,0x4fc04814d916ee93L,
44186         0x3369c978d23d140bL,0xb0fcd70f1662028fL,0x2ca77de2e1e28adbL } },
44187     /* 5 << 315 */
44188     { { 0x838acd1bc512bc71L,0xac06d6bddc18afd0L,0xc991c1e39ec45f4bL,
44189         0x667c5e89cc27c68eL,0x0e059b04ed07f829L,0xceccf1d4cec4b3a7L },
44190       { 0x3d9c2dc9b953f9a1L,0x4be2f7e72d599b16L,0x1a2054b197256c26L,
44191         0xcf66fa478b4fdfebL,0x896cc1b38134d7efL,0xa17264cad41dadbcL } },
44192     /* 6 << 315 */
44193     { { 0xe3ccfe8e37627e56L,0x00733a867b6b21a6L,0x3f13e2cbb605c427L,
44194         0x5ee12395b0d80992L,0x4dcaea94b9991381L,0x4cfed7ee8c4c4b6eL },
44195       { 0xd7aad54b7f7f45dfL,0x2229407fb3809bf8L,0x6eb31eee68048fd9L,
44196         0x693842dfd57225fcL,0x3e62cd85a88dfd3fL,0xc6307d53d5462cf1L } },
44197     /* 7 << 315 */
44198     { { 0x2d15615ef344f5fdL,0xe0ba6a8aa7f23989L,0xbbfc58041c84e3f2L,
44199         0x22ffeaae6f4ba826L,0x1e9bf27494292682L,0xc768f89146c02af9L },
44200       { 0x894127d6177cdafaL,0x8d0523da2acdc791L,0x71ada9aedc78c3c4L,
44201         0xf21dbbb92c532a01L,0x0c797d5eacb20fdaL,0x1ff99d7616cf57b0L } },
44202     /* 8 << 315 */
44203     { { 0x99b5f150493c1d64L,0x3422b656fb74075eL,0xe7493900ff19bf24L,
44204         0xc82e5b80260925edL,0x3398d340c0ea1eafL,0xe7de2ba11287121eL },
44205       { 0xea6dfb0b87847031L,0x73bed0a1566af2f2L,0xe26678bf12012999L,
44206         0xb5369e4d32e5cebcL,0x2304eac86d181e32L,0xafdbd9543d364addL } },
44207     /* 9 << 315 */
44208     { { 0x5b1a53ca75da4189L,0xa90485802eb4862bL,0x319424092783ad6aL,
44209         0x15a4c5e11a9e025eL,0x841bc53313837199L,0x6e9d3e14e642954aL },
44210       { 0xf4a02bbdd436ec5cL,0x62fe177bc6d6ad53L,0xedbf1e4eac86425aL,
44211         0xff9359c8d9f752f5L,0x79c685d92d7ad656L,0x8d82c0c4fdde9052L } },
44212     /* 10 << 315 */
44213     { { 0xf55f868e702f640dL,0xe459aa9b1dedda11L,0xbec0ff9bbb5ba193L,
44214         0xf7325c4957724703L,0x5ab8f06323e0e4fbL,0xfbf02e91ecb0fd7cL },
44215       { 0xcc72e8daa2e5fa31L,0x47de252832cb53cfL,0xbfa646e64252763cL,
44216         0x7a769efeb8d81de3L,0xf5ec70031e772f00L,0x049bea9a2729aa5eL } },
44217     /* 11 << 315 */
44218     { { 0xe987ba54759090d6L,0x904d6901619ef08bL,0x9e16d1382024a6fcL,
44219         0xb6f0459ba9f3b7e4L,0x1f2a530817ee069aL,0x99403b2e2be31049L },
44220       { 0xba1663c6bfb2f288L,0xf829195cc7a92b41L,0x89b915ee8ae621b1L,
44221         0x3fbbb1e150f8ea92L,0xb1fe7f978c901ddcL,0x16d1f62cbbc69ca4L } },
44222     /* 12 << 315 */
44223     { { 0x51f19bb3fda072dbL,0xa815459fe3f7e0a2L,0x5f7cde2f987112caL,
44224         0xdc51d948759de2cbL,0x9d05c410ed49bd98L,0xf063ab99364341fdL },
44225       { 0xd7869d68d1aa0a11L,0xc20291065d862d01L,0x7f258180c2591073L,
44226         0x7b90fc7a6ebc4ebcL,0x5565390f3dda1d68L,0xae77fca8a44e4493L } },
44227     /* 13 << 315 */
44228     { { 0x97564e4847c49ee8L,0xc56bb5a9ab4ebef5L,0x80d969417b4f86bcL,
44229         0xa594b4e541026cf0L,0xd56c89965a89ece9L,0xbcf609316a0f922bL },
44230       { 0x702596161103475cL,0xb1224fb58a2a2abbL,0x0a437a03715cd61bL,
44231         0xcbe2d2b2739921edL,0xf3b1b5e9385541c4L,0x5d0984f4ae010520L } },
44232     /* 14 << 315 */
44233     { { 0xb4a2742dcfd9295eL,0x9cd36774ae929cd0L,0xb15fadccdd7fcf4fL,
44234         0x0b1fa2b337d4fcc6L,0x242c7b26f01c7ab7L,0x2be8131b50574cc9L },
44235       { 0x6ee50f42bd89a03cL,0xc7f6ff8f005e7765L,0x04d13af18420501bL,
44236         0xc22e092b1b6e7d2aL,0xa393be7ee9516f80L,0xa2593652b80bb5b5L } },
44237     /* 15 << 315 */
44238     { { 0x5caa5da68b23bebbL,0xa1ad33e81fdbbdf4L,0x18dc93cf4e5c1de0L,
44239         0xc3e6addb5bd9e178L,0xf30d517e7cb8cd03L,0xbb84ce54f1abc417L },
44240       { 0x0774b64c67699659L,0x228005b9b7d4a401L,0xd8c2ec5b80b2d3d2L,
44241         0x419c4cd93450ba7fL,0x520ae681789286a6L,0x24b67ea9aa8bcfbbL } },
44242     /* 16 << 315 */
44243     { { 0x9e41b9b70f74808fL,0x2d835dae0c061bdbL,0x67e50c8cf272346cL,
44244         0xc98a5ef5def57493L,0xc2dea8afa02676fcL,0x59508de26ace4659L },
44245       { 0xc2b707aada6cd733L,0x6c1f226a4be7bfb9L,0x5b580fa2a778c20bL,
44246         0x272c3a1d57af166bL,0xe47a64a9ca78ce62L,0xd12db7d771d35087L } },
44247     /* 17 << 315 */
44248     { { 0x6a37ac5a2ada7e64L,0x664594de04e35dbdL,0x3a82f748ffdbf300L,
44249         0x4525ddf155975f5dL,0xcfe5a76bbdf2035fL,0x1693a99f0fcbda84L },
44250       { 0x5bdb76856a297cdeL,0xdb9ad0cef1d1009aL,0x9e9dae1caf902a00L,
44251         0x7e36f79f271a0a50L,0x688a0f41a2a2f652L,0x33d2178613722e40L } },
44252     /* 18 << 315 */
44253     { { 0x2f4abaff356f4ca1L,0xa2e419422d13be2bL,0x58d72e2f3d7db731L,
44254         0xafc2f505cd455649L,0x8a0794cd1583705cL,0x4a43066288ffe8e7L },
44255       { 0x2c0c031d135c8e7cL,0x8ecd9ed76b371b41L,0x17cc1ad9563843eaL,
44256         0x9603987cfc6b810fL,0x6e291ed7f0d9498dL,0x8c69ae62e1a4058dL } },
44257     /* 19 << 315 */
44258     { { 0x934666dd40680b5aL,0x37a9c6ac91e762f6L,0xa0a10533e4d26e7eL,
44259         0xd811d558ade18237L,0x6e2918ed411b121fL,0xbd9352b93c24a52eL },
44260       { 0xe31569ccb811ec4fL,0x3b5b977553f7d097L,0xa0d9ebfd7198e959L,
44261         0x63e10ab13f0a942cL,0x65b8b87f8ea55897L,0x935ea3c129aa0212L } },
44262     /* 20 << 315 */
44263     { { 0xe14dd3708ba8a3dfL,0x49c1fc3750a645b6L,0x3f0db6a32252ff87L,
44264         0xea2ac3c4a34ad040L,0x97a37936decf9f0fL,0x810f02326f7f92ffL },
44265       { 0xd96c2641184e9c88L,0x08c4cd333d5ab12eL,0xa938d8c3eda80fdfL,
44266         0xf2dded68bfccc054L,0x4b3da61ede36ac9cL,0x2c266df8347ef904L } },
44267     /* 21 << 315 */
44268     { { 0x4653cbfbe3443739L,0x53ea14dd8dd85382L,0x2f6d0513f26ba2fbL,
44269         0x374d9bee51269be1L,0xf976cdb243f1f612L,0x68b47bf7b5f171b8L },
44270       { 0x726e93dc7095f377L,0xe6f18c57b59fcfb8L,0xffb56a4023d9eb60L,
44271         0x678c9508447caf79L,0x4cec83e459740ce0L,0x820ab7eff4d7d58cL } },
44272     /* 22 << 315 */
44273     { { 0x88eac51c8e376fe4L,0x096e70c49ef465b6L,0xb35265852004969eL,
44274         0xbd581669d29cc63dL,0x88094298745b6919L,0x317e386c12e7d67fL },
44275       { 0x33848bb2e3d6f4daL,0xbace887f2a0ca785L,0x83b32feb197e67a7L,
44276         0x2b58535ade9c851bL,0x3e428b19c38beaa9L,0x784aa3d174f26de1L } },
44277     /* 23 << 315 */
44278     { { 0x10c5f1e5b292efd6L,0x47d92b88ddc96103L,0xc8743717e5e802e0L,
44279         0x47781ba8008dbb2dL,0x7abcd3acf02360fdL,0x673e2b05e9142308L },
44280       { 0x501db7c76db93818L,0x285ced71f33dbda3L,0x30aa5fb5cdba4b44L,
44281         0x93d536c2df0445b0L,0x28a77bfa10196091L,0x26b9f668e38c4c7fL } },
44282     /* 24 << 315 */
44283     { { 0x98c3a697c0909659L,0x35c3b0f297d847aeL,0x67d9f71273a7a5a8L,
44284         0x28e83651b47bed08L,0xfca9e849567b3410L,0x5fa9a6ded291fe1fL },
44285       { 0xd79682421976a995L,0xcff5bb36a0261383L,0x34166ef962e9922bL,
44286         0xd816b0342d433139L,0x3b62d3589c4b99c3L,0x8521f917104f7cc4L } },
44287     /* 25 << 315 */
44288     { { 0xc35a5c7874e09962L,0x1c340269e1690418L,0x2ed61ab4dca0de49L,
44289         0x2570d29ede2534ffL,0x9077691bc5143c88L,0xaa249a4a346f3ec1L },
44290       { 0x57e4f1e104de76b3L,0x206859c3f415b99dL,0xdac6f415f9a15eb1L,
44291         0x2bf456d00a9501bcL,0x1ceb7dc41ef91323L,0x19c1fa8c3cb8afb0L } },
44292     /* 26 << 315 */
44293     { { 0x7761d8fc6f7b6eafL,0xdc439bfdcc0575e5L,0x33853d91f1ff4383L,
44294         0x6da20e4b75dc1254L,0x25a53b581969a1d3L,0xb40df56723311968L },
44295       { 0xac150a297dd6aaebL,0xfe6865ce2a3ba337L,0xea05d97cf71013feL,
44296         0x0ab3cf008053c65aL,0x7cd38b647bab4869L,0x788cb867204cc6a5L } },
44297     /* 27 << 315 */
44298     { { 0x253a041e36e88e48L,0x1610f836b86297fdL,0x379d3da109334bb9L,
44299         0x62de4308777fa7a9L,0x604a46bd6dfefd1dL,0x9e4740ae314eed76L },
44300       { 0x40ec32e12efde5ccL,0xa5b841bdd92c1faeL,0x01852e23dec68e16L,
44301         0xc76173b88b55b2c2L,0x4609f350377d5e77L,0xe9c4167ffd67c6b2L } },
44302     /* 28 << 315 */
44303     { { 0x52732a0a4b0fc112L,0xe654744e9d125dddL,0x9f76cf7e269beee7L,
44304         0x2fb8bf32ff80a2f0L,0x1bcef16262b7153bL,0xdedc255a43a4201eL },
44305       { 0xb1b30b91acbd8a37L,0x147fae6f240adc8fL,0x5558702cb39bf39bL,
44306         0x171e58803e1eb997L,0x095bf301ed7c79b4L,0x29f1dbffeef752f4L } },
44307     /* 29 << 315 */
44308     { { 0xcbb2506e7535c370L,0x40ee37ec7ab20106L,0x74f502d4caca3675L,
44309         0x167e778db57c0364L,0x7726715b13fa3dccL,0x76097791f42e0c3aL },
44310       { 0xe1d990c3379dd41aL,0x432454d785c8f5e2L,0x1f90c59562ac45e4L,
44311         0x63e156998ffe0c09L,0xc3bb8c29d42bf0a6L,0x027d5a86ecca4cfcL } },
44312     /* 30 << 315 */
44313     { { 0xaf8ca08b20492da0L,0x37b1fa1547508667L,0xc9fc925b96077958L,
44314         0xb78c83c19ecac8b4L,0xd9d953a17c05a67fL,0x970ee229b9ebcaaaL },
44315       { 0x689cad7f55dc989eL,0xf02f05bc66c941fcL,0x8d00516281e23d8bL,
44316         0xfe603ffc8caebcc3L,0x592860bff303153bL,0x9ec1d5ab3344e524L } },
44317     /* 31 << 315 */
44318     { { 0x7e374b7b0f922941L,0x44b3f00174466c92L,0xcb3eb28c3c2fe678L,
44319         0x91079467bb9bf05bL,0x0d268749de2dcbe3L,0xb6383ba4c5204680L },
44320       { 0xd50269f4951d3c71L,0x9209a2d53ffbf2e0L,0x2f6496258110f811L,
44321         0x08fc9fbb0b31e275L,0x697960ea1faec287L,0xae95e4a8c5420ad4L } },
44322     /* 32 << 315 */
44323     { { 0xc20fb9111a42e5e7L,0x075a678b81d12863L,0x12bcbc6a5cc0aa89L,
44324         0x5279c6ab4fb9f01eL,0xbc8e178911ae1b89L,0xae74a706c290003cL },
44325       { 0x9949d6ec79df3f45L,0xba18e26296c8d37fL,0x68de6ee2dd2275bfL,
44326         0xa9e4fff8c419f1d5L,0xbc759ca4a52b5a40L,0xff18cbd863b0996dL } },
44327     /* 33 << 315 */
44328     { { 0x1304bd65ff0e8fbfL,0xa249adb53343deecL,0x20635fa9826e1293L,
44329         0x6283f098b7bddaadL,0x0d0a7820bc96fed6L,0xcd7605d47de0b9bdL },
44330       { 0x4f0a9751586f9eb6L,0x2f6dde5556b2521bL,0xb7efccbd76264c6fL,
44331         0x7df9cd35b2613621L,0xc334c8f924a2ff4fL,0x914f472a0b13b604L } },
44332     /* 34 << 315 */
44333     { { 0x89092cbc5f6bb241L,0x8b4dadacca123b83L,0x9ba420eecd2dbaa2L,
44334         0xf269d1982dd6ef2fL,0x29f68d03809b338dL,0x18cf8675958ae927L },
44335       { 0xc179d4b2bffac33aL,0x5356ffc1522695e1L,0x453474986d039c90L,
44336         0xcba0e0fc5a675530L,0xf369b7ab98a0c70cL,0x51f82173d508c254L } },
44337     /* 35 << 315 */
44338     { { 0x5f98e5aae8490374L,0xdd84a7506ca52a68L,0xb6904ff8a9244f56L,
44339         0x4c908c0362a5502fL,0x70ff1e01a8df73b3L,0x573a37f20df382caL },
44340       { 0x5df73cf8c7dd1209L,0x965ad402abfbcd79L,0x61a633a59e67af24L,
44341         0x0953c83cc64203f7L,0xe14f58f9a1fd8dcdL,0xb5ea722887a5fadeL } },
44342     /* 36 << 315 */
44343     { { 0x55466aa1d896c2f9L,0xd03ade059831fb31L,0xc46711547d968dfbL,
44344         0x8ade0c97bce2fdb9L,0xb408c7457f6d843eL,0xb1bbe028a709cf63L },
44345       { 0x1dbd25383ba4fe36L,0x1438d322dc1f2720L,0x1c3c46b9c37694deL,
44346         0xe57133dc3997e650L,0x754c171e422b95bcL,0x29c47f0da209c7bbL } },
44347     /* 37 << 315 */
44348     { { 0xe520480823822d0dL,0x745fe7aae3eab177L,0x6f0f4a7e808500edL,
44349         0x9383c632200c2bf0L,0x6f3130d7be22d432L,0xed7713d465511061L },
44350       { 0xff84bc04049067acL,0x33c2be61d56210e1L,0x57d63f885ac04f01L,
44351         0xc2fbb773284fb49dL,0x46422426e1f349adL,0x3cb627c465863455L } },
44352     /* 38 << 315 */
44353     { { 0xea06cbe9a1edcfccL,0xb0438e198aff46ecL,0xa93fb88ba450240dL,
44354         0xfc4a370021b6b45dL,0x2503aa5d82a21241L,0x7533f1d7f540d3b7L },
44355       { 0xd7a58a679277538aL,0x466d981a539c347dL,0x46f1682bf26488c2L,
44356         0xee2b4976318282e4L,0x8fe5e5b85a94409dL,0x40ca43a7b1a4fc28L } },
44357     /* 39 << 315 */
44358     { { 0x0ed4414c901e48d7L,0xdcabb46418340890L,0xd50bf12f20998781L,
44359         0x498a90232a596ffdL,0xcc877212b43f456cL,0x98d9d531f796c4fcL },
44360       { 0x061e3b31977c11b9L,0xe56bc6f00a00c822L,0x756e62c96887ea43L,
44361         0x29129d53859ec944L,0x42342589146c1fbeL,0x2f2cd4bdd1884196L } },
44362     /* 40 << 315 */
44363     { { 0x3d3815d645d94a24L,0x4cd9fe1139f3e6e2L,0x8c7b8dae8e7eb572L,
44364         0x7e69faf40f7deecdL,0x0e54b3c0387e97ddL,0xd12e473175a1b6b1L },
44365       { 0xb7163632c664f92aL,0x86ab4ea88d94e55bL,0x37212aef1133dcbdL,
44366         0x0c6c7fc6dfc0d47aL,0xacbcb077aa9e1ccaL,0x43cf50a726ef7fb6L } },
44367     /* 41 << 315 */
44368     { { 0xc0eb003c54d7bac5L,0x89780aea2b770baeL,0x13a194e8076bb29cL,
44369         0xb863585046f8aa90L,0x79ebc6066df515f0L,0x25ea422dd1ead000L },
44370       { 0x16b03b8106c89b71L,0xa964da878ad9fff7L,0x2c96dc6b2e7b9072L,
44371         0xf71788978c93f6bfL,0x4c7ecef912688648L,0xed7b4a577c663be0L } },
44372     /* 42 << 315 */
44373     { { 0x5b7cdd0ad74a20d2L,0x273184f48bcdd2f5L,0x4d8d3b4ce3ac03f7L,
44374         0x0e2ff518a02cc60cL,0x9c006ad8b6fa606fL,0x401606caccf627a0L },
44375       { 0xe7429a6f7b967844L,0xe4e5d1c1bc8ac8beL,0xc050f89ff4f46638L,
44376         0xd23a3eb452f918c9L,0x4528e4e202944b49L,0xeb345a689268719dL } },
44377     /* 43 << 315 */
44378     { { 0xf4fbd190ccec4c27L,0x7e042c8722674e8fL,0xbc79835ae8b33439L,
44379         0xc7923b8fad2124d1L,0x0ece42272c72542aL,0x02d638e2b9264875L },
44380       { 0xbdf9fba1904e7683L,0xcbbc0e0aac934377L,0xea154d99459ec213L,
44381         0x87db3f66c3023e2eL,0x7f9262d518de83a8L,0x432fef4f3524400aL } },
44382     /* 44 << 315 */
44383     { { 0x3b5566d7938a395bL,0x920dc1111f256c82L,0xcee7f231a059c8f8L,
44384         0xdc3da434d48b3179L,0xb1e819e913f78de6L,0x94a21bb01f9819deL },
44385       { 0x8ef14a96f302a94dL,0x9f897e1a079fff9eL,0xff9a4e0e54122af0L,
44386         0xac6a6cbef0b7f1c7L,0xfd15d9756401df3dL,0x500531a323a0b7b6L } },
44387     /* 45 << 315 */
44388     { { 0x12e22a012da0c724L,0xa0a837f3b80cba90L,0x89df9a3e2a9b5434L,
44389         0xf3299f64925840acL,0x0cc78a3a125b3dc1L,0xa4ea6203c723d647L },
44390       { 0x5cee8068d369522cL,0x3e479803432d5e87L,0x86e809363ad8126bL,
44391         0x93e871c9cf89d85dL,0x892e4710286c9010L,0xa075a6d3ec3a1792L } },
44392     /* 46 << 315 */
44393     { { 0x095768bc7dfddf6eL,0xc4e331b4e63c4e60L,0x1179808104f28a2aL,
44394         0x415e33e1bee48983L,0x7fe8050144af7eb7L,0xdf6c423b2f28fbfdL },
44395       { 0xd10886db007a2b56L,0xea578b286613f26dL,0xd18a9d1c2b90a815L,
44396         0xd4c6e8b2675c2c8dL,0xff973df5788bf2d6L,0x4fbeb6210d7e611bL } },
44397     /* 47 << 315 */
44398     { { 0xcfab317671674fa8L,0x78038a1afef7089eL,0x3109736aa27b5b55L,
44399         0x1b31325fc0193518L,0x3afd21a8be19b5f0L,0x548196a2d8028eabL },
44400       { 0x15b0d6d2a94e6be0L,0x1552ffb67afd5dd6L,0x49b1150d89bed9eeL,
44401         0x2c59b0bfb0d1444cL,0xab265d7eb695a900L,0xa24d0788a1dd1ef4L } },
44402     /* 48 << 315 */
44403     { { 0x4e913e1131e325ccL,0xe92f7c8f2a65fe01L,0x8e61a80d5857aae9L,
44404         0x2c36923d53104397L,0x5b0911d6b36d5379L,0x76eb9b56b1207ae0L },
44405       { 0xb5cd11646723c4aaL,0xa6bec13b98891a11L,0x09af8be29d806056L,
44406         0x7da8d29ecc1fc0e6L,0x231cc00e2aa8791dL,0x2ded362c042171c2L } },
44407     /* 49 << 315 */
44408     { { 0x26eb2ac96afa51d2L,0x83485eff13c04ce8L,0xdedb48718072d8dcL,
44409         0x4da1771d8ac3d411L,0x2d8f99ef849c6c0bL,0xea65f6bc2b5882e4L },
44410       { 0x60a90f58fd671216L,0xb9f3e2058af33bedL,0x29c41ec92bf02916L,
44411         0xcdf15b1de5ddeae8L,0x67f9ad163109e99dL,0xb9b5585f517d25e1L } },
44412     /* 50 << 315 */
44413     { { 0xae016b4811b3e20bL,0x5ccf3cf1e5164179L,0x1281ff8efe9fd47cL,
44414         0xb85438038e61bdf2L,0x694e42feba5856a0L,0x53f7e09759b32aa1L },
44415       { 0x5b9848e9c341a531L,0x9a5fb85025952b73L,0x9d5fe0dea6f82c5eL,
44416         0x9216a8ca44090933L,0x3e986d4bc3272875L,0xc20534f8f3512e42L } },
44417     /* 51 << 315 */
44418     { { 0x718124a1033495a6L,0xc4f28a746834851fL,0x91186d80e1baaa77L,
44419         0xca4e13222a761e95L,0x7b6b8322582ddee2L,0x75d396c6c3c70c6bL },
44420       { 0x075dcd6b54c75102L,0x3669b97c0b92622cL,0x621154e6f0cd45adL,
44421         0x7ff0029ff381a6d3L,0x3d37e750a726f84bL,0xc4f79202874de604L } },
44422     /* 52 << 315 */
44423     { { 0x215018fdec26297dL,0xaa06fd0bbf35d225L,0xe5fb438cab40bc17L,
44424         0x6a0ab335acb7f4c5L,0xbe1f4de4187a8e6cL,0x651deba961f7e842L },
44425       { 0x2b30b0046f629aedL,0x63bdbf8e2218f107L,0x21a21aa5f9ca8bbdL,
44426         0xa88cd9138304f7e1L,0x23594fc6c5e6f9d4L,0x4d4db41a6682fc06L } },
44427     /* 53 << 315 */
44428     { { 0xca2317b0428dcb40L,0x9a7bd387288b5eeeL,0xd62da6d0a060584bL,
44429         0x601a3d6ce8f10251L,0x65718f0584885319L,0x5a87b1c2a1bc252dL },
44430       { 0x27ae8015a37b05d5L,0xa624af9c98394605L,0x988220050ba4565dL,
44431         0xb93395c9da2613deL,0xcef9a880edcaa74eL,0x7b2ef0fe0976687eL } },
44432     /* 54 << 315 */
44433     { { 0x094f20588e5c6b80L,0x6e5a5f52846eabebL,0x9eaef2d7370a9345L,
44434         0x12d6f20687c19719L,0x0d2494ab9c44076cL,0x15ccc737de9309a6L },
44435       { 0x8eeb8faf94ca6587L,0x7dc9a4fe3fe363f5L,0xf02f6e03b3b08270L,
44436         0x31adbe77daf15507L,0xc0fb2814343bb4efL,0x724007519bdc1d91L } },
44437     /* 55 << 315 */
44438     { { 0xd301525c1677fcb7L,0x11b7141bfb6b0dc1L,0x01f4950eb2163b70L,
44439         0x34c758c6ed3c0025L,0xd1b1c7573a5196cbL,0x7926f0a42fa19c66L },
44440       { 0x107e5d32b1c47233L,0x0fe50b00cacbdaa0L,0xf45dd7e8e213397aL,
44441         0xca6b2de9eaa1db7dL,0xbf234b55dd09c2eeL,0x10db87d1a1db37f3L } },
44442     /* 56 << 315 */
44443     { { 0xaff57c87de0572ecL,0xc0745250826246c4L,0x523910fc700ef250L,
44444         0x8c23aa5793faa067L,0x87f7c7198e7dcf75L,0x45ef4adb46695227L },
44445       { 0x0ffe09d196ceb1e0L,0xfb72a05790f3383aL,0x62d26e5e07c220d9L,
44446         0x03e19605766b1e64L,0xa774669458c17fb7L,0x9a851d828e7acfa9L } },
44447     /* 57 << 315 */
44448     { { 0x150e936f4baea8efL,0xeb5328d68239dfe4L,0xe064fd95b5f987adL,
44449         0x13d3803d52e7313dL,0x0e9738f5b215317dL,0xb6dd60a7974be106L },
44450       { 0x00fa92bd6bac81d0L,0xdee050f9e7cb2338L,0xd7943d4f9075745eL,
44451         0x07cc4170819cfd9aL,0x21b7e0b04aef1468L,0xd7520b77aef07b1dL } },
44452     /* 58 << 315 */
44453     { { 0x126c012681097c49L,0x95339f9475c02669L,0xec3fc15b100115ecL,
44454         0xea5c8e9c49fb787eL,0x63168108bd3fbc19L,0xdbf2430541573590L },
44455       { 0xcaa3a69686dbc847L,0x2c464fcb70d76739L,0xdd9e0bcd69e2fd74L,
44456         0x4ae92cc01652728dL,0xafe3e24812b060cdL,0xf3776c6ff951a38dL } },
44457     /* 59 << 315 */
44458     { { 0xe4ab1c417af22e76L,0x35a8addf038840dbL,0x95ba3e3dafd0d7b2L,
44459         0x2a7bf827f84417a3L,0x0bc177c729bf5a83L,0x29ef7f8bd09905a3L },
44460       { 0x1df34fb1385e6c69L,0x079bc0fcf99e0d19L,0xcd2dbbc4f30eb5c7L,
44461         0x2d364701afa7447bL,0x3c7bfa087a791ef9L,0xe21508c8e71166d0L } },
44462     /* 60 << 315 */
44463     { { 0x0b204c9ac746ec60L,0xdd5efe2718b93b24L,0x484474e0ce15332eL,
44464         0x690be23d05a308b7L,0xeea3abfcb0f7081aL,0xaff69f36cd8e8720L },
44465       { 0x5dadd080d951329cL,0x060c379c8cae67c2L,0x8e284705b20851baL,
44466         0xacc8d8a0e5df0e85L,0x8c024e789463544dL,0x15a9a3f08003076cL } },
44467     /* 61 << 315 */
44468     { { 0x095e284899e0ecb5L,0x61e9d5893415c1bfL,0xb1207d3017f5c585L,
44469         0x75f73f1d04e97243L,0x868551aa77bd50d8L,0xd530e0cc197f7d84L },
44470       { 0xdd6ab731ea9fb71bL,0x26e5b52e2cf9510cL,0x4fba03ff11a88911L,
44471         0x6608b634e921e323L,0x4baf22f836d46a1fL,0xb8bced501bc7ace0L } },
44472     /* 62 << 315 */
44473     { { 0xaee397fa327d9bbaL,0x9a45e7a2d832e3dbL,0xccb43a730582ae33L,
44474         0x457b3271d4093b12L,0x409caea6370bd663L,0xa5019f25657f693aL },
44475       { 0x5851c78a16478fe7L,0x5e09ace7ddf17dd5L,0x89ca68da0763656cL,
44476         0xb92d3321e2bad2d0L,0xdd5642098422f6bcL,0x4a6ea69946c04923L } },
44477     /* 63 << 315 */
44478     { { 0x7ba1f48579120405L,0x6c136597898be69cL,0x1e75e1586dcacc38L,
44479         0x3d3cb58b65ee4cbeL,0xbccee7a308db0caeL,0xee8bff34e77edfb7L },
44480       { 0x123bc3f036f60cf7L,0x3b1dc9e779bb4c78L,0x036a8049fe5f0d85L,
44481         0xc4de23d318f66f39L,0x593cf51e3c436c16L,0xd4d40e906769584eL } },
44482     /* 64 << 315 */
44483     { { 0xf6827150844eefc5L,0x002e82c44515ef68L,0xa46c8f55c51916c4L,
44484         0x98c3524b61ee081fL,0x5ab7f2c2ad64872aL,0x0b503ff07e555faaL },
44485       { 0x802e0d23b4c58d29L,0x122890402fd917feL,0xb56d19087af20d26L,
44486         0x8d619e216be50784L,0x10fdbb721372b851L,0xf2c1673e4935576eL } },
44487     /* 0 << 322 */
44488     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
44489       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
44490     /* 1 << 322 */
44491     { { 0xd97a9b1451a135f6L,0x6d16aaf597b4df14L,0xc57160c254818818L,
44492         0x4dbdeab61d59be44L,0xb93a9dad81f2b247L,0xe2868cf5ecbcab33L },
44493       { 0x5e1ce82883a86711L,0x29a9ca2f29c55428L,0xe716273a2d82b0dfL,
44494         0xb017f5f6ac8ff52fL,0x7563e79970ea7ccdL,0x5fedf0a63f0e674bL } },
44495     /* 2 << 322 */
44496     { { 0xa7f8501488d7b3fbL,0x3b5ec513ec78386eL,0xc6586b8a2ad5053dL,
44497         0x88c09a43fbcebe43L,0xde7f2a4a20054f16L,0x63daba80bbbb147fL },
44498       { 0x087e48f37d352b55L,0x997e32a08317ab79L,0x8ae802ff7f27cac7L,
44499         0xb01a131c37b1f6e1L,0x3f0d4c2e9a6d1deaL,0xe06114fce7ceef80L } },
44500     /* 3 << 322 */
44501     { { 0x311df84c359590bfL,0xf907d69ddf6ca4b4L,0x876fd36782f22c64L,
44502         0x64c4d14d9713e68cL,0xd431858d6b07f539L,0x39dfea3384990283L },
44503       { 0x6afb8cf080cf6498L,0x327056bcde060e9eL,0x5103ce4a49a71086L,
44504         0xfc94be75cdf853abL,0x2bfb105f8ca579cdL,0x02d19c3a50454b41L } },
44505     /* 4 << 322 */
44506     { { 0xaa03b474cde121c7L,0x74a648cb55e52c76L,0xb286ef86f37b57bcL,
44507         0x95b797eb2a6371d2L,0xa489ef894077ccbdL,0xf46ade048e99ca6dL },
44508       { 0x5cf9e23723242d03L,0x33c7d32acb708390L,0x329523b6ba7ba477L,
44509         0xd406ab8757de30bfL,0xaa10e4a21536ca01L,0xdcec94f4dfa7aac5L } },
44510     /* 5 << 322 */
44511     { { 0xb5839fa424700097L,0x82fe2251759eb8beL,0xec5f34bd5f104a39L,
44512         0x7f3da509ed1cf49eL,0x62fe425244621c76L,0x2118b68dc7bba926L },
44513       { 0xb0ac18009ea4b7e7L,0x33b21ca1fcc83f56L,0x1856161208458096L,
44514         0xba0e6aa95650f3feL,0x918d427231006f05L,0x955f3951b1066473L } },
44515     /* 6 << 322 */
44516     { { 0x0cb41ada3c59ee1fL,0x38b2465861d1633dL,0xde863b47d03e9452L,
44517         0x2bfab5b41548d45bL,0x580af6272ccb7528L,0x6744c7cb13c04327L },
44518       { 0x5eca3ab339cc5075L,0x51dbfc7b6d243f62L,0xd64d84b7981ee3ceL,
44519         0xf639a03db4f2bc63L,0x8a411c36a317a1b6L,0x51edc4c0ed34eb3aL } },
44520     /* 7 << 322 */
44521     { { 0x01511b8a9d6fce5eL,0xb5c7b33f89a2875cL,0xa88e720e2fd79b67L,
44522         0x5337034404229e94L,0x40bb7e7ec94af25cL,0xc11501b99183a7b3L },
44523       { 0x29a4d81fcec3cc7bL,0x143976fdd75b8febL,0xac8dad2cfa261ad0L,
44524         0xb14793006a2db8a8L,0xd4981293929c4a12L,0x5703506fb6eef856L } },
44525     /* 8 << 322 */
44526     { { 0x762a5eec1f5a9609L,0xfe4f5f6a765b337fL,0x0fd534aeaa4f964aL,
44527         0xcf46648ed6526f01L,0xbc62a54a18d71d72L,0x48d94f2a4f8488eaL },
44528       { 0x62c40de7a0c72a86L,0xd73ac51a725dd2efL,0x3a51d7466ab19096L,
44529         0xf07bea4b2dd1ad3dL,0x2a0ec4672ef88078L,0x92598cb3664e435dL } },
44530     /* 9 << 322 */
44531     { { 0xd49f753012fbc44aL,0x769a4fc941c51d91L,0xeb1ed485981fd6a9L,
44532         0x90a4b3cad7daf430L,0x4bbffd5c75d07405L,0xd998a096da671888L },
44533       { 0x0514ad4b6e10976cL,0x5d40328aab11d9ecL,0x86de976bfa180702L,
44534         0x259ca429f6f8a4b7L,0xe08970f05772eb4fL,0xca428fa1b5feb7a7L } },
44535     /* 10 << 322 */
44536     { { 0x9f3d76ae35af4a88L,0x0b92f48a242af3e6L,0xd4f8a37b7165d261L,
44537         0x30e1fa8b2b917832L,0xd26f821f8fdfc06aL,0x75359bcf3669d1a2L },
44538       { 0x0ba3bcebb638331aL,0x8d02c0996c73b62bL,0x2a8c078d8c4f63a5L,
44539         0x55458ccaa312c282L,0x901ea0ea5eaaad9dL,0x03665da20e39eba1L } },
44540     /* 11 << 322 */
44541     { { 0x79a30b82da9affceL,0xafb188567204a29dL,0x2e64e6105a8ed24aL,
44542         0x6bf3695a9e44aa24L,0xc22320690c77fa6cL,0x20b3c69531524429L },
44543       { 0x91e60caad6e0f847L,0xf0fa30c4542d6b57L,0x56a3a66bff98ceffL,
44544         0xec44f0b72c9507a2L,0x4ef13008c37e17e4L,0xc819ae81cda21355L } },
44545     /* 12 << 322 */
44546     { { 0x17c563be1cac0b58L,0x889cfcecb8491347L,0x591d49ac4cd1bfc0L,
44547         0xd4465510d4e53d3bL,0xca95ccf6ad079a6eL,0xce391389b5ea6eb4L },
44548       { 0x600ccc9ca48b6447L,0x20d0c7dbc20d56a8L,0x5f27edc569c6c6e7L,
44549         0xb3fc0f4a586abcdcL,0xdbfdf3f985dbc5b6L,0xfba1cf254ea80fe0L } },
44550     /* 13 << 322 */
44551     { { 0x38d6267e427a9075L,0xd1df12006d63ea4cL,0x9887a99881407b57L,
44552         0x41accae4688e9f0eL,0x33c63c9e10886dc3L,0xf8332ac57574a033L },
44553       { 0x7d77d41f4c636d00L,0xf6f4ca28add70d4bL,0xbe496330c0ee111dL,
44554         0xa4de7670b74bc69dL,0x683a93d369e5eabdL,0x4c5461c710963bd5L } },
44555     /* 14 << 322 */
44556     { { 0x9bbc99b59310424cL,0x6f4bce534568e290L,0x21373f5bc1572fd6L,
44557         0xe5ecd5b6a28b4394L,0xd56968f646ef7bacL,0xcbce8614726cc043L },
44558       { 0xb2fa6101d0a49bd8L,0x65eaa7725a7b41c3L,0x10d7515296e5ae18L,
44559         0xec8f4639af389838L,0xac660d81bccaff25L,0x3c546ba931734025L } },
44560     /* 15 << 322 */
44561     { { 0x81b13d3ee098c584L,0xf8eb4e41fa3460caL,0x1bb889d1f0b905e3L,
44562         0xd158ebe939a3faafL,0x7ad0f829cf09735eL,0xc89611963aa8b3beL },
44563       { 0x522327781be516cbL,0x9118d851ee88d911L,0x35ad130f0bf2a62cL,
44564         0xf35bcf1b39c05087L,0x73b992c3bce42949L,0x93ce50b95b42744dL } },
44565     /* 16 << 322 */
44566     { { 0xee6e7006b515fff5L,0xaedf6e3913258ed5L,0x373adf7dfc45111bL,
44567         0x0c7535b1875c23c8L,0x2a7e04f897039d49L,0xd76787ae9afd1a06L },
44568       { 0x049dd38591b6dc89L,0x8f0c8ad0932dab78L,0xdce057b9925498c2L,
44569         0x7b9c9bd2da25daa3L,0x6d0b70a3d4decb7dL,0x099a218303df76efL } },
44570     /* 17 << 322 */
44571     { { 0xbfaf4b848c5520a2L,0x36fa343fc6741e50L,0xadcc36dcbd5211c4L,
44572         0x2cae5a8514bf0578L,0x8fee4d403fe4171eL,0x2acd2756624d0daeL },
44573       { 0xaf99a323623aa9cbL,0x120cd2038c8191e2L,0x2073e8884068d993L,
44574         0x144851ac579bbf88L,0x54d458a4ee29fa34L,0xb7704255e5e5d676L } },
44575     /* 18 << 322 */
44576     { { 0x02f6e396617dc4bdL,0xbc48c42961497feeL,0xb27487fe0b4d22d7L,
44577         0x33d6b1161d0b0aabL,0x5e21cebad31278e5L,0xf7119a50dacd8f27L },
44578       { 0xe47eff2cc8ab54acL,0x7c7ccd3bbbe16c9cL,0xc056d817c584bafcL,
44579         0x868ead2b97790d9cL,0x8fea6eea1a58126aL,0x67d323640fab2640L } },
44580     /* 19 << 322 */
44581     { { 0xee1a958ffa14b58eL,0x900644f9760b54e3L,0x97fa6fa451579d09L,
44582         0xa7351c3b26e7f95aL,0xc3546595aadfd139L,0x07b7ef48f14f1e6dL },
44583       { 0xc8d100ec4d139608L,0xf98609b2d8741228L,0xf0890d9d33030d3eL,
44584         0x893b874fe28ed106L,0x5439b7aff7bb558aL,0xe68a3adba71a2261L } },
44585     /* 20 << 322 */
44586     { { 0xff54e8bc8acd597bL,0xdae781e94682b8c6L,0xb2265bc4ed1fae2dL,
44587         0xa5e23c29ea983db1L,0x4af5f55909851454L,0xffe9538836eb4506L },
44588       { 0x4c72b2d1c2247b8fL,0xb179573331a67505L,0xb1aa8ad4e19c9c25L,
44589         0xb9cfea953e8b8004L,0x07782d788ac747fdL,0xe23e547fce9d9e41L } },
44590     /* 21 << 322 */
44591     { { 0xbc6b0088fd9e8e72L,0x7e51aa5dc6453462L,0xe8615fb9c8b1725bL,
44592         0x031f0d2a5a371c9bL,0xb9db0a647441d8aeL,0x0dd0446e9d5783c5L },
44593       { 0xb3b7be2381720779L,0x49a8ecbb6cc5a610L,0x165c626152cd016cL,
44594         0x5fcd657da3f6ae6aL,0x30497fbc9f6988dbL,0xd734927936a73fe7L } },
44595     /* 22 << 322 */
44596     { { 0xb30ddd0e388562b4L,0xc485506b1f61067fL,0xf0da517684947c84L,
44597         0x04830cedeb067f33L,0x05084c8262404b76L,0xe7e7efad7996707cL },
44598       { 0xc2a6a57fc78b9a7eL,0x4e55fd8c7bfbf308L,0x204e7c44d1386117L,
44599         0x979ecd5a4e56595eL,0x3bfc790853707b85L,0x2c3a41c59fcc5b7aL } },
44600     /* 23 << 322 */
44601     { { 0xcdbfd951ed6e2671L,0xb72c42ee135f6b96L,0x38c8d1ca40bbb789L,
44602         0xf6fa984cda03f270L,0x76dc5a19ed88deb9L,0xa8c88f2a9985bcd7L },
44603       { 0x2b0d3b66c6628a44L,0xdf679b6a2b311954L,0x30a363c25f851b07L,
44604         0x78a5d242aecdb9cdL,0x42d7ca82a968b4e6L,0xb188e99af2efb94fL } },
44605     /* 24 << 322 */
44606     { { 0x779905b6d8948f95L,0x3c7085b591cd0206L,0xce9af0aa679096dbL,
44607         0xfdf04f10f558913cL,0x05300cb06f24a2e2L,0xf9d9a2f25d581b35L },
44608       { 0x855c8de96a713751L,0xc9ac24bc0e0c0dfbL,0x67612a4197740d65L,
44609         0x7588a52744c9360dL,0x928ac910325cc880L,0xa74abdafacdd3188L } },
44610     /* 25 << 322 */
44611     { { 0x98d80359e7c5fbc7L,0x6abc82b7047c61d5L,0x8d8f5fbd58f2fd49L,
44612         0x321f2426ccb0a4dfL,0x379f10e2e96cac24L,0x34c0444130666763L },
44613       { 0x8dd3972043632c61L,0xb2bbe2eec19f98eeL,0x00d5a467c464dfa3L,
44614         0xa44ceb19a85b6fecL,0x88bf80ddc9b1fa77L,0x7e5123c8e6dda98fL } },
44615     /* 26 << 322 */
44616     { { 0xf73ad540b75a6b88L,0x57bcf1cc08487cc1L,0x00358de735cd0c27L,
44617         0x86d469a2573df808L,0x4884cd5684716abfL,0x0157687fa7da61d7L },
44618       { 0x8efd8acda732c2cfL,0xb6c9bf7198677236L,0x3d1f01826d46c473L,
44619         0xafa65fd82f497476L,0x535ee757e54f17daL,0x432b5878fe7aaef6L } },
44620     /* 27 << 322 */
44621     { { 0xf091c4ff3370e118L,0xabf011ee118d4b8eL,0xb489c4b7a13c7279L,
44622         0xc2dd44e93bfb19feL,0x10b68e92c5d859dcL,0x57935fc39249205eL },
44623       { 0xb97e63b06c929bf4L,0x98cb08a739a25097L,0xb13f17c15eeedf15L,
44624         0x1e27a85c240884feL,0xda1515ad9b601298L,0xe01251fd4ce36c3eL } },
44625     /* 28 << 322 */
44626     { { 0x3774af36ba6aca8aL,0x562fcfb1340e6a03L,0xde45205ec1187539L,
44627         0xf3b114418799c22eL,0xfd53f681e8b0842eL,0x45a0039066d36d64L },
44628       { 0xa2c3391d353eb1e7L,0xf9d9fcc55840eddaL,0x4df1fa4a6ab8ab4aL,
44629         0x2b0cd34bd841a623L,0x52441d79b10b189aL,0xfd86d3c2fa025da7L } },
44630     /* 29 << 322 */
44631     { { 0xe28f3bab5872204bL,0x6f87cbaf0ba35c66L,0x783e85c03d877c60L,
44632         0x376e5e2df132df52L,0x213d53a9bc2cd6faL,0x2e2a573008a13174L },
44633       { 0xc0988fa9ba15290fL,0x51d81b9485456f81L,0xfe371f32a0ef5b80L,
44634         0x9aca060ff129171bL,0x0b02b39e0e402e65L,0x8e6bce1eae9c209cL } },
44635     /* 30 << 322 */
44636     { { 0xb0cb0f0c532f78c8L,0x83113e752d133635L,0x3f64aad5123dc64bL,
44637         0x4d3201c85aee8c59L,0x265905dbe75e8642L,0x9d1d277805f9a759L },
44638       { 0x84778aead9e2a07eL,0xc747cc3a9c0aed31L,0x10d1b4e87af2dc61L,
44639         0xf58a6bd8af0bf23cL,0x83836c2352e1ee75L,0x88c4d1c6d899062dL } },
44640     /* 31 << 322 */
44641     { { 0x27eb26a3f3842d98L,0x90f712b69da68159L,0xd11177052676f05bL,
44642         0xdf603446073bf994L,0x28ad2b498bfcbb7cL,0x6916c6e2e5e1266cL },
44643       { 0x37d516996e98d62bL,0x155d8ef749634968L,0x0676ea286a1b2222L,
44644         0x1dc3f8d71566cb3bL,0x95fb3f177dc6aecbL,0x092f4c8120807b13L } },
44645     /* 32 << 322 */
44646     { { 0x3c6c5618b9d926c2L,0x7e14c3ae4a9099f9L,0xb3259c90ae2fb830L,
44647         0xf7cc6e43ec31a504L,0x83bb13c6126230bdL,0x5a1f4313ff1dae3aL },
44648       { 0x0cc6c1a549b0b65bL,0x67fa836a274a84c2L,0xd454c75fe604a58dL,
44649         0xceadfd912491f872L,0x6c5575da9ce116a5L,0xfaa4903fb24a4481L } },
44650     /* 33 << 322 */
44651     { { 0xc9ade1497c4579f8L,0xdad7eff3be316db0L,0x4ff3abc613fce23dL,
44652         0x09103a75da708e56L,0x4cf139fa8ab52827L,0x0f82219b8f251a68L },
44653       { 0xd19719c7dea33388L,0xa482548423085413L,0xbb63cb43f8eb4b18L,
44654         0xeec33735f3b88079L,0xee79d331de3ddb97L,0x56fc93090e5acf8aL } },
44655     /* 34 << 322 */
44656     { { 0x951a780bcef9c5bbL,0xc37d442ddb35bf11L,0x8e2a0e7d64a776b0L,
44657         0xbf461becc652cf34L,0x3970eb603194f918L,0x2768daedb3bda869L },
44658       { 0x8e81257557b24bf2L,0xae05e2db38dd69cbL,0x0adab288cee2f522L,
44659         0xc7a0e1f148234f13L,0x285f6ee36728c9e9L,0xb9ae7b9fc4541e19L } },
44660     /* 35 << 322 */
44661     { { 0xfd90c5c1f6422b56L,0xd9fc8cce4dfdb947L,0xf3566dc4d088588eL,
44662         0x25dd9e27f22682e6L,0xb077392119b0a532L,0x54da228c0d05a9f9L },
44663       { 0x0f7fda40986f60d4L,0xb6dafff6c9b112feL,0x7eb99e1a4abfdfcaL,
44664         0xed499eb9389611caL,0xf230d6d6f251477bL,0xc09d328c227ecc92L } },
44665     /* 36 << 322 */
44666     { { 0x9b21ef6c16cdcfeaL,0x233be0c3694edecfL,0x110243df7c49c931L,
44667         0x03a59a2ea3113ed1L,0x6470f721023c9a77L,0x7d1640c88e9ff099L },
44668       { 0xc21488316f2c7b37L,0x9e1c9e1dac6eebc7L,0x6af65a671109ca9cL,
44669         0x8379fdd9cc6f80d9L,0x33f74ade7e666a4fL,0x07ac728b7be081a5L } },
44670     /* 37 << 322 */
44671     { { 0xa3df31a312354705L,0xffc8fdfc1aec1bd7L,0xd9dd39c112cc342cL,
44672         0x8077a57e37bf43fcL,0x0f037ce49cb8751eL,0x5740f6b5b805b530L },
44673       { 0xd26422704e2b5b93L,0x114bb1f02dc158efL,0x71881767a9bec3d1L,
44674         0x1174386d266d95cfL,0xa373d7ea7cdd4461L,0xaf4f7b40d814a33eL } },
44675     /* 38 << 322 */
44676     { { 0x0db94a18f79761beL,0x263e2acb5717b98cL,0x78c28d8182567b0eL,
44677         0xce1b366b893c35b4L,0x1e20b1bc0d6907a7L,0xd6f123474b973588L },
44678       { 0xfb945471f717e91bL,0xef85653cb027bd4dL,0x048e9e1df07dc0e1L,
44679         0xc494aa9cc163b83dL,0xfaec72d3021b4fa5L,0x5c63c30fc9869fe6L } },
44680     /* 39 << 322 */
44681     { { 0x2dfa058d510d8d86L,0x772fad416a89aa0cL,0xdf55d15cd586f23dL,
44682         0x7d96b7a989b604f6L,0x352fe049a38d821bL,0xfc56b8df4fbb5795L },
44683       { 0x264122b4b3d5dd0bL,0x89317f4a980177d9L,0xc060ab4a13e2aeecL,
44684         0xc2676725e2cafc87L,0x78863cf45eb1df3cL,0x2e1572dc0ab1a715L } },
44685     /* 40 << 322 */
44686     { { 0x7a8a898d5a4703aaL,0xc59933ea1cd6f9d6L,0x703265f5d28124cdL,
44687         0xe1c1bee10178d1feL,0x9ff31cd4241262e9L,0x9174a939a3c9f80fL },
44688       { 0x0f7a3d2dbc2a62eeL,0x0454051c62f1b3acL,0x83502c9ea2421254L,
44689         0xb4fa51fcb684199bL,0x257e9e2bc5e36a44L,0x14efeed597d8647fL } },
44690     /* 41 << 322 */
44691     { { 0x09bddbc28f2b12baL,0x8af83a779b7f1c14L,0x88f9b4d3bcc934bbL,
44692         0x8d8312df8d072340L,0x2ee105bc615989dcL,0x6044fa00de3bab08L },
44693       { 0x98c499d603cc86ffL,0xf0b48aa7c5068033L,0xdaa536d2c96606d8L,
44694         0xef905aa2bc6a843eL,0xb6f108ee8ac620ecL,0x0dec7dfbb6dd66f9L } },
44695     /* 42 << 322 */
44696     { { 0xb9157d4ab0fe18a8L,0x139bbcbc68cc7a70L,0xd546a06d7dea2914L,
44697         0x8db142d4a01cc59aL,0x127ce2d9aa09fcdfL,0x3950a5a63bfef8deL },
44698       { 0xf41ef6d42527522aL,0x4b4e6f107e6fb19cL,0x2a2735d1345788c5L,
44699         0x87963e1ee72a7ae3L,0xb58d8934fc443360L,0x93552692b16b6f2eL } },
44700     /* 43 << 322 */
44701     { { 0x70591a849518f0c7L,0x5c282b6fc67c438fL,0xdbf61b6b100facc1L,
44702         0x3c5d969f2bf2a5beL,0xe1a0c6cbab980c70L,0x70f4981c680619fdL },
44703       { 0xc6905d7cc65be256L,0xde3340fbb5c27acdL,0x17be9d182c1b3fbcL,
44704         0xd584e4f96fb00b1dL,0xac5dc14eb819646fL,0xf5c3279a3242935bL } },
44705     /* 44 << 322 */
44706     { { 0xfdb13b31be970ebaL,0x119b1c08b0bfadc2L,0xed62f35e21875542L,
44707         0x73c8f9b0349a6d12L,0x8c35d8f8bd1622c0L,0x501b9d288b6521a0L },
44708       { 0x377f8fa1c918b2d5L,0xe2a9580cd0239ef9L,0xee24f4f0371d7bebL,
44709         0x4cc697a669231b47L,0xa55193c8dc4c5a07L,0xd4e51e1db0ab8507L } },
44710     /* 45 << 322 */
44711     { { 0xcb811c27265f267fL,0xb85593aa9e2688f4L,0x57a1969dd76bf364L,
44712         0xc29946c9014483a2L,0x5bdd72490915bddeL,0xba6d13ff22746ae4L },
44713       { 0x524121e0d25f6b7bL,0x9011309e0d68a3f9L,0xf25e89ccdb91c66cL,
44714         0xae79cad781df593aL,0xef8c6bec4f103231L,0x832659c3e038f02eL } },
44715     /* 46 << 322 */
44716     { { 0xd58eeece37761959L,0xba6d8ab5b328f084L,0x3911e6ae324a6706L,
44717         0x299921c8ad139296L,0xb81a3fe4f6b8d9e1L,0x2680c46f5ef06a6cL },
44718       { 0xab9cdf368611d63cL,0x6c9fa5b3cc0a5da8L,0x712356a3da4d4412L,
44719         0xc1707a10cd3f550dL,0x5c25b2f3ce468303L,0xe4be20bffa546b6aL } },
44720     /* 47 << 322 */
44721     { { 0x797a2919515ee1dfL,0x65dd5991119dc9d3L,0x82e8201b41e4c5ffL,
44722         0xd27b35130d3dd45aL,0x9ba590c5b13b2dd7L,0x0f15b35282992935L },
44723       { 0xef39971e227e4e46L,0xb74c524b2786fd6dL,0xe09c28ec71b1579eL,
44724         0x0d1418e285f6a935L,0x173265448719fbe7L,0xfe3b1d831200b35dL } },
44725     /* 48 << 322 */
44726     { { 0x6e96a8195cecb21fL,0x3a58d8b2d8beecaeL,0x93c3cbb0c0c715a8L,
44727         0xfb06f977541759b7L,0xf25ba095771c3d2cL,0x7560446ea3bfd322L },
44728       { 0x7cd99f35a015cb4fL,0xa0e541960786f235L,0x0f868f768b8e291aL,
44729         0xc8260b0b2f95050bL,0xaf38376ef4c0a462L,0x2b3c0f3b98a3395dL } },
44730     /* 49 << 322 */
44731     { { 0x99d4529efed6a724L,0xc6f1b084071d8d31L,0x6c48062ba097da1fL,
44732         0x1dd10493301c1d74L,0x5288f194f554cbccL,0x77b1b81f39dd42c7L },
44733       { 0xeb1f2d53a007a6d8L,0x43bed54e05648d75L,0x1a85326f29801a1eL,
44734         0xcb9a91a4f564d78aL,0x4f38fc7893f071deL,0x920117d8aeeeb5adL } },
44735     /* 50 << 322 */
44736     { { 0x709b5904b35cba78L,0xef0c321021b11d3dL,0x38f07eec46844b18L,
44737         0x2e79f99934870a55L,0x9e9df80400d7b924L,0x857a95625cafba4bL },
44738       { 0xef8ab68f4adfea6fL,0x4a83bfc16ea764e1L,0x21f4c75475e8d874L,
44739         0xa3597f526ecdf5d1L,0x9d3a4766eff2e1e6L,0x9872db39e5e6ae81L } },
44740     /* 51 << 322 */
44741     { { 0x42d9f39e99bb9a10L,0xe617263ce35e4852L,0xb3f8ace1a06b71d0L,
44742         0x861520de6419d9d1L,0xc2c521cf37b1fe38L,0xd537001b9edf9936L },
44743       { 0x92614b9f39af94e7L,0xd2003f2e25286664L,0x249d04aeb836d4b1L,
44744         0x3c6c192ab26df88cL,0x6e0b25442c72ec0eL,0x69d7f6d7497f03dcL } },
44745     /* 52 << 322 */
44746     { { 0xbb5a95f6293cc00fL,0xb202a82a65fb729eL,0x819c26aa12e35774L,
44747         0x70cd5237c2b3f0b2L,0xa752224a89b2c5ccL,0x71c09cbd0ec89df5L },
44748       { 0xb849e352bab45d24L,0x290f0307d313f461L,0xf083031cee885e9dL,
44749         0xdf42a973a60bf2faL,0xe39f2118d4842999L,0x8b54cf1d0508febeL } },
44750     /* 53 << 322 */
44751     { { 0x8942b4df0d846a3cL,0x18db708662b6605cL,0x6549e019fafa6508L,
44752         0x85d97fce43ef9443L,0xe9f13da373485de4L,0x5743297bb0f46e8dL },
44753       { 0xc52781bb70908255L,0xcd88a48a6bc6e666L,0xf857caa5eb4f54d1L,
44754         0x32dc925320974dfaL,0x6dc79fad965146e6L,0x24e3a8d2edc1f747L } },
44755     /* 54 << 322 */
44756     { { 0x1993fa650e81671fL,0xc6acd9f3dd1a1e4fL,0x227edd1a7bf36f1cL,
44757         0x4ad2478370867ca3L,0xed0254f758b9a7c2L,0x63fe279a7013a5a4L },
44758       { 0xa65787ee232e6a88L,0x5faceda487161d5cL,0x36e351b603d64c37L,
44759         0xaa265f1de9e30871L,0xbf3432f521e6f66bL,0x69d68c068621289dL } },
44760     /* 55 << 322 */
44761     { { 0xd2bd143ea0807eeaL,0x474ad99582568efeL,0x0fcd6bba7d482c5fL,
44762         0xf83e6f15e2628f4eL,0x314508252210e41cL,0x8f0a9402f47de776L },
44763       { 0x7f20bc562ee4d1e0L,0xed4157de791aa7a7L,0xbe443399be2dee9aL,
44764         0xb461643371625f13L,0x1be21ba8771f55c6L,0x04b3035a300fc187L } },
44765     /* 56 << 322 */
44766     { { 0x0952b888b9d0bdf0L,0x3973763c8ce32fb7L,0x221f0ba56dd860c7L,
44767         0xbb7a27feb16ac501L,0xf113b194bc8fe58fL,0x18f3297a65839ffbL },
44768       { 0xa2d4eb7c8dc30003L,0x3fb4b4878e334479L,0xa4f32c651a8310e3L,
44769         0x944cd644f78f46acL,0x14e40c4af96fb91fL,0xc31402bd4ddf6e72L } },
44770     /* 57 << 322 */
44771     { { 0x9eb2c9e51ff0ab88L,0x0a29fc0695cc3436L,0x3f4b4ebdbd298127L,
44772         0xeb8ad8b52ef56848L,0x6159700f5b211ff6L,0x8fb98f2fc3a67bc0L },
44773       { 0x5c5998ffbd195b66L,0xea99d6767e44a64bL,0x314316e4bafd1471L,
44774         0xb5f48757cc8c0e77L,0x922a91d15b259ac8L,0x2458279cf9fc4e4eL } },
44775     /* 58 << 322 */
44776     { { 0x945c5a3c6aac3e97L,0x5cbdfad9a266ad50L,0xa3e38114fe59f5ceL,
44777         0x1ca1cfdace3ae206L,0xbe1f15e12a84cfdcL,0x682514726a12ec3fL },
44778       { 0x48409f871f57341aL,0x632c369e8461bf7fL,0x1c96fc87d8865ed4L,
44779         0x1727934ae1ffc51aL,0xa60f0ebb6d71f51dL,0xb6c354052e411888L } },
44780     /* 59 << 322 */
44781     { { 0xc7b3d3bb72a77726L,0x04b9bdfbbdb03d78L,0xdbdbaa7e2fe88db4L,
44782         0xc5848e58564710b6L,0x7bbd84863ec55713L,0x1b5aea5670183191L },
44783       { 0x95d91bb25340d9b7L,0x9a1462e4187a3252L,0x5cee9b8cec352fedL,
44784         0x7db8350137049284L,0xa1d2822cd3b714f3L,0xe4cf6d53c2e51da6L } },
44785     /* 60 << 322 */
44786     { { 0xdb2a2ac9a63f6f62L,0x4c0d2da695f20639L,0xa485a6adb475e177L,
44787         0xf6dad8b5aa93055fL,0xafcc1e954974bc52L,0x6686940224fcf32fL },
44788       { 0x10c138bfc103b013L,0xe74ea82bc6faba1bL,0xddb399c581824de5L,
44789         0xae797b70cdaad079L,0xc648e7ad6ea955e2L,0xd07c5c919be79db6L } },
44790     /* 61 << 322 */
44791     { { 0xf4b7a33b39d93befL,0x4be176f9659da9f0L,0xbf57d975f36642cdL,
44792         0xe10b452d16d5528cL,0x7c062421a6bdd74bL,0xc093e346e7aa1d9eL },
44793       { 0xb7cc38cc2f5c19ddL,0x9fc7f69b230c8790L,0x9b667acd5e3c5282L,
44794         0x1cade31144cd22ebL,0x53a0d702bb43a1e4L,0xb25868777906519eL } },
44795     /* 62 << 322 */
44796     { { 0x46e2415deb5003acL,0x05aee8855e8a6a0aL,0xbda9f162bbaf343dL,
44797         0x658b350b21853341L,0xaf6b4948ced47246L,0x1d454740723cd3bfL },
44798       { 0xc4b7ce3fe1aaef54L,0x619420daa35c9e24L,0x65d455b14eb7a52cL,
44799         0x2f9b700a4c961515L,0xa5b7b962d3aed448L,0x4e32a6d937851d3fL } },
44800     /* 63 << 322 */
44801     { { 0x2c4c1b2ed00f8cb9L,0xbf83ba500fd305aeL,0xb75bcf9f801a8e64L,
44802         0xd8ab465ccba76b29L,0xf5a2bcd74ea718f4L,0x81501d563b592ae0L },
44803       { 0x9734e4e26ae6bac5L,0xc4860b0eee304e5eL,0x8bd59b7b1d59f1acL,
44804         0x7c9497e8e799594dL,0x4bc6634c08292918L,0xc45583aa92619229L } },
44805     /* 64 << 322 */
44806     { { 0xc5ad791eb45a8002L,0x4a23fd68ba2d7a40L,0x673b9e4998544bc4L,
44807         0x934d8f55d273c360L,0x7fb48d0768a75a8cL,0x2e6201055e0fac97L },
44808       { 0xbe01655ff10ed580L,0xd21d52ae9e96731fL,0x74f830de53325138L,
44809         0xa7240331de9f3fc5L,0x96b25206a7e01fa5L,0x3fcfedee07eda4b4L } },
44810     /* 0 << 329 */
44811     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
44812       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
44813     /* 1 << 329 */
44814     { { 0x3e6e93818d5c039fL,0x809494228a8d2cc9L,0xf2d7c8b4b843ec06L,
44815         0x0055d882af8a23f1L,0xe848010ed3792335L,0x9b41a55f55e08e74L },
44816       { 0x956ea8e95de83059L,0xf159a9973263678eL,0x5f7b9271cca1b548L,
44817         0xd41d2281f1d0b7f1L,0xb187047b5c9963fbL,0x213ff6af02536cd8L } },
44818     /* 2 << 329 */
44819     { { 0xe51a95700d0fa76cL,0x67c7890e4d2e9c8eL,0xc6160fa2f974d2cbL,
44820         0xe00474f74c6a78deL,0xee916e510ac89d11L,0x1adad97af826f133L },
44821       { 0x3fc65d3f8d2d77f3L,0xda9420750ba6c300L,0x5237a82e0b9196b1L,
44822         0x4975e680a572b6f5L,0x41ea8b92b9bed2bcL,0xbe0ad7109826825eL } },
44823     /* 3 << 329 */
44824     { { 0x06f721d30a9ec81fL,0xf0359222034f3e78L,0xc5ca6b7a5a44ffd9L,
44825         0xc53e328915764390L,0x7f16917459747d7dL,0xc3a9981461f79122L },
44826       { 0x099f4e3a97aa46f7L,0xcb0570c9d70458a6L,0x270a43576b72f327L,
44827         0x9d6bb26cc33695bdL,0x60f9202126224902L,0x8eb0e108e1b0a51fL } },
44828     /* 4 << 329 */
44829     { { 0x8a390dca9fcaba39L,0x3879f0b4278d22b3L,0x77bbea69bc5e82f1L,
44830         0x71f02e2d4628d6f1L,0x6260790cf968e240L,0x1c7f3df5665270eeL },
44831       { 0x336395451a87b1c8L,0x2011fd214ffd9fb8L,0x69060f867807ed55L,
44832         0x1b0ac0119dfa452cL,0xbbdb25fe06d27c0dL,0x5c25d23aa60ef90cL } },
44833     /* 5 << 329 */
44834     { { 0xc08dc153d9f75d6bL,0x5c1f07e7a0330237L,0xb3e6fb677d67a5c9L,
44835         0xca949ed098f9faddL,0x48b16b2dd7720835L,0xfdb1b735fee4d341L },
44836       { 0x1a6b37b1debf3207L,0x5b3eeb1e3218c63aL,0xc19b57b504c23b30L,
44837         0x178bd3bb40669e2dL,0x74e57b26fb6b162cL,0xc3626931a0932b58L } },
44838     /* 6 << 329 */
44839     { { 0xd3eb69e4734b2e9cL,0x1c2754e2c35ff1b3L,0xa26681e69f3e8c51L,
44840         0x7892ad11a2cae737L,0x88b1da43cbd8bda6L,0x8a576942419d21c4L },
44841       { 0x7c124343c90f4545L,0xa5a8d93b26453baeL,0x9a4c08fd76ae72e8L,
44842         0xa08b82d97b064e94L,0x4f803ba083725330L,0x33672455865235f3L } },
44843     /* 7 << 329 */
44844     { { 0xf7a5e2f0a51e695fL,0x3099bf9484adf10bL,0xb2a03c0f22a3ff04L,
44845         0x30303a910acec674L,0xaccb2f3ca59522f8L,0x00ff4d88f273ba94L },
44846       { 0xf0056b4210e735ebL,0x3337279a7786e93bL,0xfecc77c44bb3c31dL,
44847         0x3385bf5be0e26a05L,0xa9454ab85f45fcbfL,0x41a4158346edb553L } },
44848     /* 8 << 329 */
44849     { { 0x1877dfd0c8110f1fL,0xea88f59d18db27c2L,0x9d089536c78e295eL,
44850         0xcbb5d55374a04cc5L,0xe3666006827f75edL,0x8557b81a61e7378cL },
44851       { 0x74170170ed223f48L,0x84197a6ed86ee829L,0xd75a30f8ac1c4a0fL,
44852         0xd7e7be0d3cd92824L,0x5ea0abdb1b5e86d4L,0x41146ae1b3b615efL } },
44853     /* 9 << 329 */
44854     { { 0x6d340fd3fabd376bL,0xb5066b1ccc169cb3L,0xa4148142d20ef8f1L,
44855         0x0c5d66fb461544d0L,0x84c7a232d67043d2L,0x4c0e77867e609af4L },
44856       { 0xb1e83f1af4619e4eL,0x40fca1a0b225d174L,0x39bb3a882e42fa4dL,
44857         0x04dfe833d2682205L,0x49016d9d685296f8L,0x2da587198b735155L } },
44858     /* 10 << 329 */
44859     { { 0x570deceb1ae5e9daL,0x5c079c70b73ead01L,0x522a30a6d2ce6639L,
44860         0x71dc5c3ff4056ac9L,0xd93c7a2dbaac149fL,0x5c3298b8f1844cebL },
44861       { 0x282adf408c23c0dcL,0xbe4981899b646f86L,0xe77c1950628da9e5L,
44862         0x38cc27baa1fd5a18L,0xb5579728aacdca52L,0x8d34fdb4c8e1ecbdL } },
44863     /* 11 << 329 */
44864     { { 0x563e0b8a7a7fa597L,0x6697c375bb7dd079L,0x95758ff6c6233951L,
44865         0xca07993fa2059c40L,0xc3065507ce2aaefcL,0x9faed33c6ea927d5L },
44866       { 0x0f8b48241207247eL,0x0044f6115eb2263aL,0xd7c9ce7c851596fcL,
44867         0x54729d523c69d424L,0x42cbdcca45876770L,0xc1e0e6ceeff2adcbL } },
44868     /* 12 << 329 */
44869     { { 0x323f2102adea7d6aL,0x035b354eb694b253L,0x66dc4e4a5b8a36c2L,
44870         0xb609222471795ca4L,0xd8c6d7eed300d80fL,0xf31f258db3b94954L },
44871       { 0x0f2eb679277ced5bL,0x0b16efa3eba40e3fL,0x400035070dca4f36L,
44872         0xd34c91cb59a9a3a1L,0x5e8fea3286da6408L,0xf237959f03f31728L } },
44873     /* 13 << 329 */
44874     { { 0x1d3173653412e8d3L,0x1d14cd1b09695abbL,0x9044adf2a2cda00cL,
44875         0x60a6ccd60b7ba011L,0x614b100417284b46L,0xfb3d84b9cf840203L },
44876       { 0xd65b3566532b068dL,0xc8c03996c2465150L,0xc9035c2df71c35f4L,
44877         0x350231a752222e21L,0x59440020451935b1L,0xd723a55cccfdd206L } },
44878     /* 14 << 329 */
44879     { { 0x1b5bc630bbaaedc6L,0xe7d25088b49cbb3bL,0x5622cbf70deb8cf0L,
44880         0x3b20803cd309c3baL,0x64c2e7deff45e2fcL,0xfa730ffb9aab84a5L },
44881       { 0xba83cc514edfb52eL,0xe05c0140748bbd69L,0x27bbb5f52254ec43L,
44882         0xca740989324c8c40L,0xa21488b1d26491b4L,0xe2753a1f69d8626bL } },
44883     /* 15 << 329 */
44884     { { 0xea04908f64dab001L,0x8ea1f127b4debb2eL,0x87adb69534f155a0L,
44885         0x41595cfcca8afe0bL,0xffef042f8763ba08L,0xb7b4865decd3e667L },
44886       { 0x2c46c97070c4c8a3L,0x1ab18c080403d206L,0x08b2d3c94b3df379L,
44887         0xc6a4c268a87a7166L,0x449bc61f5323b1f0L,0x8d4b7ced489ada74L } },
44888     /* 16 << 329 */
44889     { { 0x618ca06b8956146cL,0xd51f1e6f552cdecfL,0x981372cca3b6ce7dL,
44890         0xb44a68ee5f14bb57L,0xfc1167e96373abbbL,0x3d621f8b767d4c0aL },
44891       { 0xc6dcdfebf6ecc778L,0xddda926282d1fbddL,0x477501aabfcbf2f7L,
44892         0x0be7228a67aa8277L,0x5de7b8331daab9cdL,0xb88a4f9a262feb4aL } },
44893     /* 17 << 329 */
44894     { { 0x203a666c608fea53L,0xbf71f8fde8979c08L,0x3bd58feba22a3d2cL,
44895         0x596bfcf521f178a1L,0x6f207d89f84beffcL,0x8a7c6dbb18097607L },
44896       { 0x208f5e64a1c5c927L,0xd7d0e33478dc83c3L,0x5e9397261d4e30f5L,
44897         0xf3877242fa09a36cL,0x68e4338ae6a7b0feL,0xcf8cd131ac47b369L } },
44898     /* 18 << 329 */
44899     { { 0x28f18586936fb33fL,0x9809b2ab381bf7bbL,0xf6e16931eac3c252L,
44900         0x366d18335e151187L,0xe5b4c2357a3b6460L,0x693a9fa50a68bc91L },
44901       { 0xa35f104a6a7f8b6eL,0x3e5d6981688676c4L,0xc0c081b10651a609L,
44902         0x6df5da2dd77057c9L,0x8bb271bbc4602847L,0x322547b3c4bd07d8L } },
44903     /* 19 << 329 */
44904     { { 0x9b56b9444deb8158L,0x5f4b15a6da5eb70fL,0x120afa9514cb0126L,
44905         0x01f6d00d6bdd0d78L,0x73dd7c5c463b1ce6L,0xc770cf35df00a133L },
44906       { 0xb5db93a1247ff879L,0x1c12f3f0c70ecea1L,0x10168c4e5b59cc9cL,
44907         0x1e9e0f8a0e19efe5L,0x43987dc1cfd44b62L,0xb1d265c204814e2dL } },
44908     /* 20 << 329 */
44909     { { 0x8c283529233d39e4L,0x96300796c6092096L,0x2c549de55dde766cL,
44910         0x27e0b444b4151002L,0x802e5fc3f2f88f1bL,0x2af579c28ba1956dL },
44911       { 0x52edd04ed68196c7L,0x2e22e71474a202b0L,0x338948248bf66459L,
44912         0x8f0d8c259e39df55L,0xee4f109e6c5276d9L,0xc0c893f0c5dc0bf0L } },
44913     /* 21 << 329 */
44914     { { 0xa3081bc75b3f17e5L,0x299e7a0222e46b9dL,0x36184c98a9afa278L,
44915         0xee2043319095a8a1L,0xf5e54622cd5ac080L,0x08d649013fa844a4L },
44916       { 0xb20ddfc6d7fbb42bL,0x15130bdbd868a81eL,0x25e5fd2f32ff1a03L,
44917         0x907e3c01ca5288d3L,0x2f2f7496a1f6f96cL,0x831feefd38ab83d9L } },
44918     /* 22 << 329 */
44919     { { 0x06054c76f8482849L,0xc24b4a6a5fcca65dL,0x71c27e01a17ebda3L,
44920         0x1ffce0281be9dfb8L,0x3784c950ebc43854L,0xcf0ecc2dd5086510L },
44921       { 0x86d0fc3cbe24d8ebL,0x5bad01911f21788eL,0xe2c3bcb9c49b3a12L,
44922         0x66f82433f7d5992dL,0xf7cc5eb913969246L,0xe52defd48660a6daL } },
44923     /* 23 << 329 */
44924     { { 0xd6d6a42b102490deL,0x9e6532acf40d27d7L,0xcd1591cdf2a08bbeL,
44925         0x973e09f234eb47ccL,0xb3a5915add4fa316L,0xb36ca6ceac38218dL },
44926       { 0x73d370b3e58a0cafL,0xbc8fd39f07766be2L,0x3d5d9ef7c2ea7997L,
44927         0x22877500bbfcc1a7L,0xc54d0c6406e0547aL,0xf7bc1d2d564e9ef1L } },
44928     /* 24 << 329 */
44929     { { 0x7a9623b653fd1a04L,0x13bd35bf3a3b8500L,0xf8a5dec9e0f8e530L,
44930         0x88bcbe291d65dcd4L,0x09fe38036739541cL,0xebd04b7fe716a97aL },
44931       { 0xbd8e34df1e5ef7cbL,0xddfc4243d7c4fd6cL,0x0183d9053519411fL,
44932         0x63450996f7a3c483L,0x18283cea01355739L,0x8c1d72cf9aaa72f7L } },
44933     /* 25 << 329 */
44934     { { 0xffcd4b6f9be9ff57L,0x0bff01bb939327efL,0xde596626b5ed90e3L,
44935         0xc07464ff4379e17cL,0xefd3e2c470d31340L,0x78b2192f4e7df61bL },
44936       { 0x7cfe28def3faf2fcL,0xd2d1a994dd642f87L,0xa5d4fb1410b3377eL,
44937         0x2cb4978ead6fa00aL,0x5b6fe7a765fb3688L,0xc26c1b3336d5acdeL } },
44938     /* 26 << 329 */
44939     { { 0x551e1b4e8dc72468L,0x8a926cb2a7b2f1acL,0xb873e83b0fd12fadL,
44940         0xb6cde14fa4e7fb13L,0x81ae41415befc256L,0xffb0c636b4c7631cL },
44941       { 0x80f1408f8a2478feL,0xde6d051d44fa7605L,0x5a15b1f84d44a1e4L,
44942         0x1a0031c5a0daafe3L,0x304338dd597652a7L,0x6830dcc7f257f17aL } },
44943     /* 27 << 329 */
44944     { { 0x62fae4072fdc8ea4L,0xff77522fcbe76ee3L,0x5fa03a454fd2bae6L,
44945         0x774c635e8dc90431L,0x718081b62ddc4376L,0xf4901a2c03e7aec7L },
44946       { 0x5339a3109eb023d7L,0x15dd4f96366e35f7L,0x1f802d4a0e2d2e95L,
44947         0x8e5e9cb2fe1b1226L,0x175806f623a0de5cL,0x115a97db068c7bbdL } },
44948     /* 28 << 329 */
44949     { { 0x4a67ec76193aabbcL,0x3da6dec6d74761f9L,0x751720c90b35bb70L,
44950         0xe5e049058d9e0f8bL,0x3cd37c840858f29cL,0x7ff1abfbb881733eL },
44951       { 0xa0c2698b0c4f7694L,0xc736419296b95e4eL,0xcfa55c5537ece651L,
44952         0xa2bbd6ae7cb1e9e1L,0xcd2292b9a0eb0e8aL,0x8aba99e18d5030d0L } },
44953     /* 29 << 329 */
44954     { { 0xa3f508a498fa3d8cL,0x4d894cbf45bcff40L,0xbcdac17d0c095cc4L,
44955         0x397caa6f407c2ed8L,0x2195056b5f97b4a9L,0x41eb6e0e97434508L },
44956       { 0xbb5e4e4a73f211f8L,0x5e8e638f720a451cL,0x8470bc9e4974252dL,
44957         0xc487aae29f6a9a96L,0xaa66417101165deaL,0xc8af7172b603771bL } },
44958     /* 30 << 329 */
44959     { { 0xb7c74c58dc4a1d3eL,0xe3ec30160331ea39L,0x83afb271023c8712L,
44960         0xc2670d56c9c82680L,0xd426f350feca1061L,0xe8aee692ba6edc01L },
44961       { 0xc916fbe546e801d9L,0xcb001c377097286eL,0xfcf79d2678ee1328L,
44962         0xb05b0634b6a4afb3L,0x2ab327bb306da14fL,0xc11a0294ba5ff534L } },
44963     /* 31 << 329 */
44964     { { 0xcaa287c30f00dfcaL,0x9ca672930601cc7eL,0x435e883fb105d00fL,
44965         0xf9cddbf91238536aL,0xda604ccb45f558c3L,0x7e51d9d182f48366L },
44966       { 0xc1e8d50d7e8396c3L,0x58638b85edbb75e3L,0xe926aabe9b088d2eL,
44967         0x8103a34a428c41e3L,0x03e5e35d089deeedL,0x64969c6d93bb0b99L } },
44968     /* 32 << 329 */
44969     { { 0x7b7da028e19763ddL,0x662f54df8b98ff78L,0xc056d83c51f3dbd9L,
44970         0xe2f4d46fa91d085aL,0x31759c9ceb35262dL,0x624d0cf20c9dd29eL },
44971       { 0x108cf9bb1624b02dL,0xa241444e345531d6L,0xf69816b273d372b2L,
44972         0x126575a7d5415e53L,0x546bb4c1306b8b0eL,0x82bb0c124d54ea5eL } },
44973     /* 33 << 329 */
44974     { { 0x85b355304c397362L,0x218a3b0eeda72e19L,0xd8eae54461729c56L,
44975         0x3d9b4a62735b571dL,0x12f3ee775629e437L,0xa72f9809095e5378L },
44976       { 0x5420a641bbe6dd1eL,0x8121eb3d02f41fe9L,0x5698eaf945e7acbaL,
44977         0x8a5e1a89469c2f12L,0x801740e25b434e0fL,0xa4dbe1cc670f58bcL } },
44978     /* 34 << 329 */
44979     { { 0x2f1919df5819e9f2L,0x156489e7a62287a9L,0xed038deb20a0c2caL,
44980         0xf63ac2d5c5ab4fdcL,0xca2b648ce391ec06L,0x8258e3f45b047d2eL },
44981       { 0xb7dcff56fd17b40aL,0xa8ace11f4bed747eL,0x542d70d175018429L,
44982         0x6c568967951bb2e2L,0xce420f73bb0e089cL,0xdae9623ed13f8eb5L } },
44983     /* 35 << 329 */
44984     { { 0x2d561034009a41d3L,0xf078204f5734d3a1L,0x2b8973ff7408e71fL,
44985         0x07cb9f95aab9c533L,0x376c1f59d0b35fffL,0x4a756c7fe851b313L },
44986       { 0xdc690e9874dedeaaL,0x625b082f70cf3f5cL,0x44839b5803dfc301L,
44987         0x5835a6c3c520f618L,0x695425e3afdb68d5L,0xc04ce4c62db97ee7L } },
44988     /* 36 << 329 */
44989     { { 0xc1d9b27ecb5833e7L,0x9911909567a8a669L,0x9317f8c30ab9ee27L,
44990         0xfad65eb9f34551e6L,0x7725ec2e016504f6L,0xca492cb47ebbdfc1L },
44991       { 0x6d2a3c962706aa66L,0x53e6d650836d8ee2L,0x109496434bc84bf3L,
44992         0x8442ee826df7c0f1L,0x7ab2eb9918fe80c5L,0x6a8579b35cd2ea35L } },
44993     /* 37 << 329 */
44994     { { 0x96adba7706e80e68L,0xa8839d6a0fe580e1L,0x755227e337a31a9bL,
44995         0x40b5fc70e27ec051L,0xb900a11b29af222aL,0x8fea2e509dd84811L },
44996       { 0x4f844c8861b59ab3L,0x26739874560c0948L,0xb39f85ba0cc08828L,
44997         0xcdce2fca829082edL,0xbd17998eb4555dceL,0x827eae97a3608a9fL } },
44998     /* 38 << 329 */
44999     { { 0xa77087f4c98e17c4L,0x9fa12dadbe2985a5L,0xa68cabc94bdce4e2L,
45000         0x222a6fb6d3500913L,0x15e28fd5a9c0904eL,0xed31c63f7a91f825L },
45001       { 0x9cd9f3e56f2f35b0L,0xa2b14261923cab8dL,0x71a780516d8ccbeaL,
45002         0xf1fe532bdfa937b4L,0x6e3d7252539d0a74L,0x27ef2720814cd797L } },
45003     /* 39 << 329 */
45004     { { 0x8bd8341e6899b9bfL,0xc2ea111680865aedL,0x0cabb5cf13fed0e6L,
45005         0xa11e82c1e4ce70c0L,0xefe3d4eb99aba16aL,0xd774db4dd8df10c3L },
45006       { 0x72ee5c98bae14dbaL,0x9161d0b179b86e02L,0x1ba8b84585e5ba90L,
45007         0x3830148f17228bdfL,0x222499e2ba89b2a5L,0x5d50922cccd4f87eL } },
45008     /* 40 << 329 */
45009     { { 0x81dd074e4398751eL,0x87b11b480a3f3ebcL,0xb5afe1f0352b58f5L,
45010         0x6d2d94829c390eefL,0xd073f9a0f36a8d23L,0xa7c5abec466ebbe5L },
45011       { 0x968c04a60539f145L,0x52a3ad0c93f4d3d3L,0x98e196bb15c0970bL,
45012         0x2af28ea370ab8ddaL,0xb912fbda7a039fa9L,0x3dd8d87acbd02ff6L } },
45013     /* 41 << 329 */
45014     { { 0x849b2f0b4ee5ebb7L,0xfd1b015158bea2f9L,0x260a6b5bfbc530f9L,
45015         0x2b6c198d06776366L,0x6540793f8074c6d2L,0x1c722c259871be11L },
45016       { 0x8ce5241ce0560ce9L,0x3574db548096df0cL,0x1d9dd078b0fb8c98L,
45017         0x6049c7f25625a023L,0xd2c0853cb18d0dd0L,0x5e57bd71cd645f78L } },
45018     /* 42 << 329 */
45019     { { 0x8da9b831361ce377L,0x6496515b7dc06076L,0x870e7df3b8cba83eL,
45020         0x315ac0049f8f495bL,0x1a09dee576fe0978L,0xae7af621c18059a2L },
45021       { 0x2bc9dea404fac2afL,0xc630bd5021b90a79L,0xbded6b8628c0f9a1L,
45022         0x709d72c7be4fe93cL,0x3d1e2eed74b22303L,0xcdaf6b1d0e81dfcaL } },
45023     /* 43 << 329 */
45024     { { 0x42d004f3be8ec138L,0x5379a3063d617cfeL,0xcbbd274ec1a87d06L,
45025         0xb9967c5284c9df0dL,0x0238d715c421e288L,0x787ee6abd239639fL },
45026       { 0x746e4071adace009L,0x2e2545db61377666L,0x47cc241cf07deb1fL,
45027         0x0a0742f1847dee19L,0x50175dd06e59b0acL,0x95ce3065d2333a87L } },
45028     /* 44 << 329 */
45029     { { 0x65c33cf4ca5eba6eL,0xbc48b22e12c2f19aL,0x6c5bbde461fbdcb0L,
45030         0xe086202bbc503a00L,0xa9483799deecbb11L,0x9b2c0216279aff50L },
45031       { 0xc10fce1069f99456L,0x2b0051d5b7820d55L,0xd2de9cc32129b5a4L,
45032         0x711166d9e4f565d6L,0x7a8c3dfb88075f30L,0x6914edda224ac45fL } },
45033     /* 45 << 329 */
45034     { { 0xca481b6e4e1e3cabL,0xf390ed5f7e12d8b5L,0xcda82616dcd06247L,
45035         0xf7d791422cec8917L,0x0c2ea9fe2364e5deL,0x471b71ed21f98e3fL },
45036       { 0xbebd6a753b9aae94L,0xf9914c0b45f5d5a5L,0x07c823ca4b3dd18fL,
45037         0x0b8c09ab74ad2bafL,0x21048cf7c7376302L,0x080e4a00efb16ac2L } },
45038     /* 46 << 329 */
45039     { { 0x1699d711379e6c77L,0x9126d88c7427418eL,0xbb05797d825210acL,
45040         0xc0b611df315cb277L,0x90f82a9d61f69206L,0x39a79014f517228fL },
45041       { 0xd9f2def450e8a693L,0x88c1104381e9d71aL,0x28e20b56451f8a9dL,
45042         0xeaa794763e101231L,0x3f1ba0c56423e8c3L,0x2fe7ce4e3c6c558dL } },
45043     /* 47 << 329 */
45044     { { 0xd706ab9cc55b1a3cL,0x99c453663aa386f6L,0x348c8f743617676aL,
45045         0x5f3c49092b9ef7bcL,0x26969963ff5d4864L,0x1f952e03f5b490ffL },
45046       { 0x4007914e30cd5518L,0x3b38fd1e0b0e6513L,0xb25e0a81decbba43L,
45047         0xb7e77345a7d78431L,0xbb7bc23062467d4aL,0x616c1724598ad852L } },
45048     /* 48 << 329 */
45049     { { 0x5bcf287864e60ac2L,0xf70e78a455d53345L,0x88685de6707a7138L,
45050         0xa77646dcfb2041a4L,0x8608695289db3060L,0x08b7c4d8e27a1690L },
45051       { 0x4148d9373ca7fd81L,0x58c7440bff7698a8L,0x9d722d4db0391d14L,
45052         0x5683112462b0373fL,0x87b0363be9a9992cL,0x51870cd18853db84L } },
45053     /* 49 << 329 */
45054     { { 0x775086f481eb73b1L,0xddf02d0e4db4d236L,0xab3d637445b09e54L,
45055         0xb7ef92657e883a2eL,0x20e6ae8f7f42b4b3L,0x26a14629bc49d85cL },
45056       { 0xf0ee4e5ca4ed9ba3L,0x288c5b0793b0b721L,0x9c767a59e9917114L,
45057         0x3dde322015085ec5L,0x3176507f7ece24dbL,0x71e1995686cc47fcL } },
45058     /* 50 << 329 */
45059     { { 0x86dedf2e9b1ab85eL,0xf3330387c2d0593eL,0xf5e6143997e907a5L,
45060         0x1992569d8cd66e4aL,0x836b215e0869329eL,0x8b5c4891153ff215L },
45061       { 0xf6c52f1b609dcc15L,0xa3a5258c085722c3L,0x0a4e81501c378dfcL,
45062         0xa8997ddc739040aeL,0xb1c4417a7180a073L,0x618009bff1dbab34L } },
45063     /* 51 << 329 */
45064     { { 0xc276e23733ec753fL,0x196a1ccee112da60L,0xcc049e2b953211efL,
45065         0xa60e1aa711dcc43cL,0x091ceb49cdfed2ddL,0x8fe1c52e72c69037L },
45066       { 0xf66eac87a986ba11L,0x4917f822b273d90dL,0xf7ef04cc957befacL,
45067         0xf8a7ac1320b8aeebL,0x71f0db3dbe6af428L,0xcb0bf8ba566429c8L } },
45068     /* 52 << 329 */
45069     { { 0xf617674d2cbb40a8L,0x446ad46b4d11399aL,0x4d4246943076b6b3L,
45070         0x1b9e7d881c33ea9eL,0x8e1aa6716954589cL,0xf1099b26e221722cL },
45071       { 0xb18904f94917576eL,0x0512b21bb549058bL,0x12c89a64a209ad3cL,
45072         0x421f5e575557cc67L,0xb42e17371b5a17edL,0x427c6a621ff3230cL } },
45073     /* 53 << 329 */
45074     { { 0x74e75db02bfb49e4L,0x7685588d58cf18dfL,0xfbfe8f56398e27a9L,
45075         0xd2711ec365666b9fL,0x1df7714d2c59b787L,0x0f2c4b4c486f8fc0L },
45076       { 0x098ed315f847b688L,0x60c367e332a20ae2L,0x58f48cd6bba6dd13L,
45077         0xc41e31960616128aL,0x7f90dd69a3205005L,0x8e6ce9d23581c177L } },
45078     /* 54 << 329 */
45079     { { 0xcf2da6044a3b3618L,0xcfd27cc6b83f1814L,0x8cb45c0a6b9369a6L,
45080         0x1f11501633976ef1L,0x2654a1574afc708cL,0xb47f423860970498L },
45081       { 0x548be9389fd8536bL,0x454fde1673ff1ecfL,0x44657efae96be82dL,
45082         0xc8e7e96b555df813L,0x2a0b3f4a4fccb822L,0x2e0f36b114b6dfdaL } },
45083     /* 55 << 329 */
45084     { { 0x227ba88551cefcb8L,0x81e8f52e00071a19L,0x4afd5a5d170fee3eL,
45085         0xc8864e274e17ff05L,0x1d8c2083710ffa4dL,0x22529baa9839c46fL },
45086       { 0xad771341825a0a87L,0x34a3049edad7c56cL,0xf1f14e1712f3625fL,
45087         0x6103d1fabcd36dfbL,0x9f5ce7a949a7cf78L,0xa5a4e38a333cf634L } },
45088     /* 56 << 329 */
45089     { { 0x6c8e5a261d99492cL,0x6e5bab8e77f916a3L,0x9b014aad50ad6f39L,
45090         0x2a3933c51f107e26L,0x4b04395cc951bf73L,0xf8f683b4b0ef56dfL },
45091       { 0x28c9fcdd1905c84fL,0xb03604f14141feacL,0xb546f58e53ace23dL,
45092         0xee5fec4efe688f02L,0xd8b43f6d2e91406dL,0x75e44b21261764d9L } },
45093     /* 57 << 329 */
45094     { { 0x56905026e84e6549L,0x1dc1958c5b84b0b7L,0xcb477afba55d3c52L,
45095         0x6c67cf7bc1434094L,0x739da94d2ecb03edL,0x8c45e5ee778ca2fdL },
45096       { 0x66084f9712e2fe43L,0xee6a89e66c3289d1L,0x623b73abc5d1a215L,
45097         0xb0edfa31cbf45830L,0x8024dffbd7de3b1fL,0x2ddf805a27f25caaL } },
45098     /* 58 << 329 */
45099     { { 0xb4e5a5d5605d7341L,0xe7a7a4069a1d3465L,0x234783d66c60b1b0L,
45100         0xdd7ee2fb3b480129L,0xfd183240dbb7032fL,0xba2a97accaedc8c1L },
45101       { 0x1a1824d3b0185c9bL,0xddc0f82cd36edae3L,0xaf7bbcc03116b17dL,
45102         0xefc9095985f6e8e4L,0xc6bde428acb9c328L,0x69d80732cbf991a7L } },
45103     /* 59 << 329 */
45104     { { 0x455a23a465ecec1dL,0xcf0b2a221d9e9887L,0x0b43131e3fbb1cc9L,
45105         0xd4ece789bdad49b9L,0x370c2f9aedfa4d17L,0x7f6855be15163f17L },
45106       { 0x868a16f3735ecbd1L,0xd84527db08897c01L,0xcdbf5b18f2df294aL,
45107         0x8c500b1f12b99a2fL,0x929c58df2591e3b9L,0x314cb13714eae6cbL } },
45108     /* 60 << 329 */
45109     { { 0xd014cc6deda2479bL,0xd2586003f1a85fb5L,0xceb0611153cd207cL,
45110         0xe8c9fbfa647b3c16L,0x1f53e8e6ab7d6738L,0x06dcceabb060b5f3L },
45111       { 0x80e023b2ab770ccbL,0x83ca0a5f4cda70d2L,0x19f7f5dfea1caa2cL,
45112         0x769041414ffe884eL,0xfa4d93a3fca3c05bL,0xd381f527e88e1169L } },
45113     /* 61 << 329 */
45114     { { 0xa4553b3534914b85L,0x03968ddddc176f80L,0x095fb9531f258fa3L,
45115         0xda9d2df7a554bb6dL,0x012a30ed84926864L,0x3fea37b12aa219d2L },
45116       { 0x730d2c6d81cc6036L,0x96ea83c9ddd81991L,0xfab080dcef1678dfL,
45117         0x16e25c6bfb2fe230L,0xf083a2b298ef2fb5L,0x0c0d0767581feac0L } },
45118     /* 62 << 329 */
45119     { { 0xd464a6525bc81cc8L,0x513353adebfa99d0L,0xd1aa97c0be51245bL,
45120         0x0d37e590e4d20201L,0x7afc95cbb45c5c19L,0xdbd640cfb6a4ea8cL },
45121       { 0xffcc3ff2be9c5b78L,0x61cb76ac1b2865d1L,0xb145bb0011352d21L,
45122         0x69568e5ce550ac6dL,0x454a33043bf7ee0bL,0xa2fcf9b45dad3642L } },
45123     /* 63 << 329 */
45124     { { 0x2e2c8fb3f33eaca6L,0xae1c78b265f75366L,0xbdc601092280d2b4L,
45125         0xed8409b7b6f472f0L,0x69eafa4f439e09afL,0x3b9ca2ecaa2b1531L },
45126       { 0x59b2e8eb336e484bL,0x93ec3ecac5f0481aL,0xb01e690ad575157bL,
45127         0x811aebc262e9d767L,0x1b26c0e49a9065eaL,0x5712d2c969a18827L } },
45128     /* 64 << 329 */
45129     { { 0xdaa7fcc9f9474bb7L,0x3c82e74bafa5db2aL,0xfbf918c59894edceL,
45130         0x470c45eda9ac29a7L,0xdfd44f6fbc372f2cL,0x73a4790aa1e38d3fL },
45131       { 0x23d2400ba9674837L,0x3dad71bc136a92daL,0xc76a488148baa4abL,
45132         0x73227e4ebc26e6b0L,0xe732edcfe8ef5662L,0xfe96aa5f0c5662bbL } },
45133     /* 0 << 336 */
45134     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
45135       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
45136     /* 1 << 336 */
45137     { { 0x87c7dd7d139b3239L,0x8b57824e4d833baeL,0xbcbc48789fff0015L,
45138         0x8ffcef8b909eaf1aL,0x9905f4eef1443a78L,0x020dd4a2e15cbfedL },
45139       { 0xca2969eca306d695L,0xdf940cadb93caf60L,0x67f7fab787ea6e39L,
45140         0x0d0ee10ff98c4fe5L,0xc646879ac19cb91eL,0x4b4ea50c7d1d7ab4L } },
45141     /* 2 << 336 */
45142     { { 0xcfbcbc4a7db62b5aL,0x2919bf514ab45ddeL,0x735de05622322f91L,
45143         0xd2590bda7662ae23L,0x63d468fed82be7a6L,0xc84d0435695ea172L },
45144       { 0xc50f494120a6fccdL,0x2d613990620f44f1L,0x680ccd041fd25778L,
45145         0x25ddac444a3d0808L,0x41d8b738c4684cbaL,0x2611645f53963888L } },
45146     /* 3 << 336 */
45147     { { 0xb05cb834b0279be5L,0x2de7d0ebf08c5f93L,0xf023b5aaefa9e4f0L,
45148         0xb8061e5d9bd075ecL,0x7d2ba50f1aa41bfbL,0x8963f3e390865d96L },
45149       { 0x7f221a794713ec7aL,0xc83bc5178500b4c3L,0x085feb6af6ab1540L,
45150         0xfd141024dc87cd93L,0x3e196fdb3239dbf6L,0xb7cf3e16dbcd5364L } },
45151     /* 4 << 336 */
45152     { { 0x1466c9f5e03a2fb4L,0xb866c006862a58a2L,0x291e8c75b5865550L,
45153         0x1ddb7154e65862ccL,0x285153bc2b997167L,0xe2fce0e7954b6c19L },
45154       { 0x985d450616dc2937L,0xf7f14216ee41d9c3L,0x39e098dafa5fe5e5L,
45155         0x3fc26046f90f231dL,0xde5d5ced32afd0b5L,0xad688b1d60c09c18L } },
45156     /* 5 << 336 */
45157     { { 0x3720b1720f806b59L,0x1f696d47f224597bL,0x03c46e315b54eefcL,
45158         0x387e466472b0edaaL,0xfc59b03dee77476eL,0x86854e54607a7259L },
45159       { 0x1478bcee3e9320dcL,0x4aa825a88c9d87e4L,0x71272f72cf272ee0L,
45160         0x19e3a4a38bd885cdL,0x9af6415b376ba31cL,0x6394b5a7807b2b36L } },
45161     /* 6 << 336 */
45162     { { 0xdbfcfa75e572e06dL,0xafa019d08b7d5653L,0xcc6c851d67a19b60L,
45163         0xace88bf431ae1a67L,0x74554a6193d1e135L,0x51ba2cdd4211890aL },
45164       { 0x7cb326899e8d1f02L,0x29a6b8258b66ab99L,0x0a672c21766e72f3L,
45165         0x24bb718a880642e3L,0x425dc41d184d2b36L,0x96a1468e891024abL } },
45166     /* 7 << 336 */
45167     { { 0x3180789c26df7050L,0xe375a43e96cdfd31L,0x7951b895e99e922dL,
45168         0x987ea2503d0bbe80L,0x6d2f49f0e2fe79c0L,0xc9c2c636c2b18d2aL },
45169       { 0x707798f3d8c8620cL,0xc2d603dad5c6a0eeL,0x46cf1e32bc447940L,
45170         0x4dfc145938a845f3L,0x210083fe455e5d92L,0x6be989eaa1fedc3fL } },
45171     /* 8 << 336 */
45172     { { 0x72fc8198dacc038cL,0x5fdae1d9f1077bbdL,0x369198bbd99e3036L,
45173         0x6b68390a0efddfcaL,0x8c35f3e4f0914741L,0xd2bc54ecca7d7807L },
45174       { 0x564d991e3a8695d1L,0x5e1e14c81b0d937dL,0x51f30dab5d635893L,
45175         0x0427e346f944e49aL,0x1e0bf1b56a233bc0L,0x75b0ee6c617bf93eL } },
45176     /* 9 << 336 */
45177     { { 0xcd2db6797b1bbd75L,0x1ce5acecaac388b1L,0x715ab9f634c1fa9cL,
45178         0xa531e1b8e0815643L,0xa64511c692de769bL,0x8425126b785b8bc0L },
45179       { 0xc8d9320de72e155bL,0x9cf36dcd5600a04bL,0xbea8b0f4c6e1f7fdL,
45180         0x6f9af6349767d85bL,0xc3ea9fa4c403ecb8L,0x0af7be1ed60a0e70L } },
45181     /* 10 << 336 */
45182     { { 0x180afdcc20928729L,0xec2e90f436bce72bL,0xa8a8c54d8f48e48cL,
45183         0x9d0c6a355248109bL,0x8bdd819baa6c3ae3L,0x95e221a6dc0bebc1L },
45184       { 0x83e568eceb113737L,0xaa6d29c8a1a3a0a8L,0x0ebd5015c54fbda4L,
45185         0x692a84832a5c8b17L,0xa08e384b51836490L,0xf1904bfc37ded786L } },
45186     /* 11 << 336 */
45187     { { 0x2093335463919940L,0x34e4f27397ea3359L,0xbe64c5584d4156a5L,
45188         0x368a6c980497cf92L,0x59931a502288b8cfL,0x67d70ff8c36cf906L },
45189       { 0x4175562a8886126fL,0x46ecdd1d55114ffeL,0xd12876f94efde702L,
45190         0xb0c9333fc046d908L,0x8358b04a2cd6c180L,0xcbaf4612336d3c84L } },
45191     /* 12 << 336 */
45192     { { 0xd77d9cd4fe8dee55L,0x7a0f60c12e43fc84L,0xecc5cd746d5da126L,
45193         0xb5ac6fee2382a984L,0xd9db83e26ccd0feeL,0xaa4dbcba350717d4L },
45194       { 0xb3c0562c812ead77L,0xf7a995eea96cdd07L,0xd5419bf1ffeb4e67L,
45195         0xba0aa22e1226df29L,0xb8d0d7f4c1e333d1L,0x86fecca60a27388cL } },
45196     /* 13 << 336 */
45197     { { 0x9ea1d715dc579084L,0xc1e715dd0b1cf2a4L,0x624fa6e4926bf7d5L,
45198         0x5034c9d34f7b4e51L,0xc1b0ed7aba3a42a6L,0xd1847c28b73cdb77L },
45199       { 0xa4794bc36ae49ff0L,0x50b2d908b9144fa5L,0xad112c778f073479L,
45200         0x040499dd4b98f590L,0xd415d273152b5e30L,0xd3f4ff3f39054cabL } },
45201     /* 14 << 336 */
45202     { { 0x1e0318d5fff93451L,0x40b91fa9283e197eL,0xdebc5a28089ac579L,
45203         0xcf25f527e9d98537L,0x73f7818d4ae08f51L,0x397f2cb6a956c875L },
45204       { 0xb7d74ac57515436dL,0xc29a2ffd830664abL,0x02e273563cabe01bL,
45205         0x418417c103c78924L,0xd12994116535005eL,0x53fc391258f66295L } },
45206     /* 15 << 336 */
45207     { { 0x6b1fceac4d87dff4L,0xd31aef70f262f722L,0x894361782612da01L,
45208         0x1d3bdfa9963bc230L,0x9a46505ba7afa565L,0x662c2fc7a31db4ffL },
45209       { 0x33983a9ae5ef30c0L,0xb8c874ee723f085aL,0xfb5fbc860f279c05L,
45210         0xcd9cc376ad0a380cL,0xcb19d881fdfad736L,0x1c3d9734585167ddL } },
45211     /* 16 << 336 */
45212     { { 0xd23658c8d2e15a8cL,0x23f93df716ba28caL,0x6dab10ec082210f1L,
45213         0xfb1add91bfc36490L,0xeda8b02f9a4f2d14L,0x9060318c56560443L },
45214       { 0x6c01479e64711ab2L,0x41446fc7e337eb85L,0x4dcf3c1d71888397L,
45215         0x87a9c04e13c34fd2L,0xfe0e08ec510c15acL,0xfc0d0413c0f495d2L } },
45216     /* 17 << 336 */
45217     { { 0xf791c8196726ae9cL,0xc95c53f13cee0ca7L,0x816b37ae601b0802L,
45218         0xcf28a2371b854925L,0xdc4f6bc111d5d9f2L,0x222d6102df6862aaL },
45219       { 0x93d3fcc5c0053ee2L,0x1d30937fdf873eb7L,0x925a2c2527d098b9L,
45220         0x8564c199001cf28aL,0x87cb85ed748b8479L,0xd12d6b2b184c1020L } },
45221     /* 18 << 336 */
45222     { { 0xeaf36b865bddb3c8L,0xa4bab6e0099f18ecL,0xe22839208addee4cL,
45223         0x485307e053bb454eL,0xf981c80d362db12aL,0x012190355cb4b460L },
45224       { 0x62824680c78bd110L,0xf3e0b963d87df5f5L,0xd96de5e2758da525L,
45225         0xc6a810faa60956abL,0x913d5a7b8e3eb6dbL,0x27c581fbbc9e8c3cL } },
45226     /* 19 << 336 */
45227     { { 0x5edcd7dcb0c55d75L,0xaeb0b5c727838c23L,0x13d65db758c3fea0L,
45228         0xe821d853b36f1f15L,0x3435a4bc365e7703L,0xb890e52f3a04d292L },
45229       { 0x6a96ae92e7a823f3L,0x3960ecb0ca611036L,0x81638aff210cb460L,
45230         0x5f95793ce6b983d1L,0x0d5029ffa3ae1a8dL,0x54f749b492ca1229L } },
45231     /* 20 << 336 */
45232     { { 0xefe0a702537c4a5fL,0x322ff89c151d0e69L,0xcee88b48491b757cL,
45233         0x8e92cc15b5da77c0L,0x3138b90bf6af039dL,0xeb73edd2f3748d35L },
45234       { 0xf29f06435b8bb06cL,0x91ea9643560e4966L,0x013c274875acbcc8L,
45235         0xdb2d1d9703f1d40dL,0xed7aeef1fcac606eL,0x91395dcabff4b849L } },
45236     /* 21 << 336 */
45237     { { 0x952e4e21c8967f37L,0xdc9f71994bf85ec3L,0x6b01f3d00c141bd4L,
45238         0xc6601dec06c9ba55L,0x7d884fc0c4a5945eL,0xcab1de947e19d3baL },
45239       { 0x9ca6aff02e3c9c5eL,0x01e828a1445e4a8bL,0xf97165ae80d065c1L,
45240         0xe2195895881978a2L,0x4834501fc6b77acbL,0xbcf7545445d99f5fL } },
45241     /* 22 << 336 */
45242     { { 0xbfc9c5071e434ba6L,0x30768f646f2634adL,0xee3a7cec1caf9c0bL,
45243         0x27c4fd0bc232910fL,0x5c5813ee24ff4510L,0xe5e731af901f2ce6L },
45244       { 0x440ca2cf68f9aef3L,0x54ff9e837fa17587L,0x4d792db7982acc0bL,
45245         0x73c3863834846c98L,0x76cff95f8d6243d9L,0x5fa573399d015583L } },
45246     /* 23 << 336 */
45247     { { 0xe0419a6fb007e4cdL,0xc44ac4961f613529L,0x3408e15af18f82eaL,
45248         0x66bebd87d92d3b39L,0x1c563ee4f85d0c1eL,0xb31a8c891f7eb37dL },
45249       { 0x65c7bf8c458a056dL,0x9d2ba592f25b6f73L,0x1ac4f0bc94eeb39dL,
45250         0xa008b562d9a9ac29L,0xe7de714589d1c354L,0x420f5cf04c2e45d2L } },
45251     /* 24 << 336 */
45252     { { 0xe11cc2e117cc0d20L,0x9b4cc698d406fabfL,0x6f6e9b0cb8567c18L,
45253         0xa0dcda9c61b22b83L,0x4c8683fa79ee53abL,0x7d46b3f82f11f0c4L },
45254       { 0x91e74e482740aed8L,0x75afb62a056466e3L,0xc60bb430e8d0c16fL,
45255         0x36cf252522b4aae9L,0x3713f254aceb6dd2L,0xc2906379eb8c6fd9L } },
45256     /* 25 << 336 */
45257     { { 0x440da0369eb8b2deL,0x6c4d1a38462fbb19L,0xfd86930fb050f995L,
45258         0x2e5f1a8c954823a0L,0xe9122aefcb9f8e9aL,0xc9e923f2794be14eL },
45259       { 0xdaa5663dbf740c2aL,0xf3a7ecd6df75c915L,0xa047a07efa80015aL,
45260         0x846b4d27ea4a720bL,0x2389717e295845f4L,0xf56f77f6cbf2eabaL } },
45261     /* 26 << 336 */
45262     { { 0xaac4f6a7e67b6dcbL,0x59ccb836d51c5183L,0x78d19f452b7ccb20L,
45263         0xb32d4ffd5a619a1dL,0x86b11dbe5c4bd17eL,0xd983e839a9b52073L },
45264       { 0xfe9c0b92993455c1L,0x3a156676ea36006eL,0x578217fea907ca7aL,
45265         0xaa3c5489440a251fL,0x6760a166d7fdf3fbL,0x4a2fc54b4415c6fbL } },
45266     /* 27 << 336 */
45267     { { 0xaedf171dbe18bc16L,0x00febab2b2d026ffL,0x82b6d8890cdcca4aL,
45268         0x1b1e4c53445bc877L,0xc2174e10ed74285eL,0xced66cc02b243f6bL },
45269       { 0x73e9ff69c7b9a66eL,0xc4fe5caad5e4d121L,0xaef80d67402c5d1fL,
45270         0xd3b95a0f2f3dcaf9L,0x00cb6e798ceeea00L,0x1ee2ca8c436f35e1L } },
45271     /* 28 << 336 */
45272     { { 0x0b21c764a6db111fL,0x7c36dfde24c5721eL,0x53a0b6db66e2d428L,
45273         0x6f37bf728169d776L,0x9baf6385a68511c8L,0xeaef9c919b218151L },
45274       { 0x712cdd5bdd58d201L,0x50bcd0988d3f78c3L,0xfb6427b571fcb05eL,
45275         0x6245fe7cc4675aebL,0xb5b75b50fb767bdaL,0xc1d8b76ddd7a18fdL } },
45276     /* 29 << 336 */
45277     { { 0x6392686cbb52f636L,0xf10df7c41c46a5c1L,0xab7f88acc504a122L,
45278         0x2a179193fdb6a9d5L,0x2a7c7e4e2901f29cL,0x3ab41b80a2cc726eL },
45279       { 0x8f577fc31fb5e412L,0x65cba0aeff7c47faL,0xa79191697f45c04dL,
45280         0x2712fcaeb29a4c06L,0xf2a879e4099f76e3L,0xd333fabd98a22a04L } },
45281     /* 30 << 336 */
45282     { { 0x87a905e056ddf14cL,0xd36289cb95a1c633L,0x2fb251aa57f8f0f2L,
45283         0xbf9c72a9fb7907a4L,0xb4f9b6f3f771333dL,0x7b5ed437469ea10bL },
45284       { 0xe8cfa847fa5a8f93L,0x456395c945a4c9a9L,0xe20ffc39f7fac5a6L,
45285         0x8b07c9ff287a3c78L,0x117f306f67e66d0eL,0x97c8a6388b331e09L } },
45286     /* 31 << 336 */
45287     { { 0x1b3e04c26a98318fL,0x04d5ed5dd5a63b2bL,0x4098d09f3cebabecL,
45288         0x226bb70565a14306L,0x5bdce76fd962a94fL,0x47a66e96c40dedbcL },
45289       { 0xd514ae5bbedcfbb0L,0xa8c0fe40892f07e7L,0xcf78e224c9186f1cL,
45290         0x2499f68fe94329e0L,0x3ea3fae5ebbe3d2fL,0x681fca8bbc631de3L } },
45291     /* 32 << 336 */
45292     { { 0xb097b2c5c4e81268L,0x7ef175521d50ca8cL,0x638266e942099644L,
45293         0x43d059deff729073L,0xeebb5fe1148c3940L,0xb82e73d1daa8e925L },
45294       { 0xf43c78d8254380fdL,0x2beabc58fce37fa0L,0xcdd5a7d66b636357L,
45295         0x8b70a2ebe096a954L,0x011d5419d0afa2fcL,0x3e49eb6704fb095aL } },
45296     /* 33 << 336 */
45297     { { 0x5c73f69fb99abd8eL,0x0a7c36aacc1ed636L,0x9d2fe67e7f69a6cdL,
45298         0x04d015fd48c34b1fL,0xc50f88c17f84915fL,0xeee3e105a706fb24L },
45299       { 0xbd42861c734d0513L,0x544b6ef495408b60L,0x4526e680d40179beL,
45300         0x9f984c4140ab740bL,0xbed7baee67a02ab3L,0x09e3446862a9fb2eL } },
45301     /* 34 << 336 */
45302     { { 0xdf64ebcf28eedf59L,0x435531be73b5d9f4L,0x1990df01cf35d981L,
45303         0xa34d4fa9a2cc41b0L,0x9f643bd6b5a10b37L,0x90cae11158a6cd14L },
45304       { 0x2b0490701943d2f3L,0x2c9f8af4eda3fc20L,0x48c245c5f96e72f3L,
45305         0xb4505a3a861355deL,0x4dfab1b9be032112L,0x69c1a9195942de24L } },
45306     /* 35 << 336 */
45307     { { 0x761c2c356efcc891L,0xd06710d1fa376241L,0xc83a491c8a78b0fcL,
45308         0x0c0ee8d8af75b3eaL,0xe6d9d92e4532b587L,0xcb3b652d64eba138L },
45309       { 0x1cc504ca34ff5d2aL,0x207e7443d0eae0baL,0x94ad1676428382b1L,
45310         0xfcb5909992ec17c5L,0x7f99e1b5ce3b2e48L,0xa8c38c0fac9bc921L } },
45311     /* 36 << 336 */
45312     { { 0x5763ff1af4ba4711L,0x6aac1315bfaae662L,0x51b9c30ede4b5505L,
45313         0x50e63d1891b25d3eL,0x41938349e65ea695L,0x11260360f514dd15L },
45314       { 0x231f7f574a086eecL,0xa2c3237f55bd9ee1L,0x8afafa043e0705bbL,
45315         0x44607900e9fc754fL,0x7250929678519ce3L,0xe751c3a74d17708eL } },
45316     /* 37 << 336 */
45317     { { 0x0098a3254611d3dbL,0xbee52036dde82f67L,0xec432a62cdd50282L,
45318         0xae8a144e52f994f2L,0x027e9e60aa5c03fdL,0x1a49ce47821f55f7L },
45319       { 0x46fbbd6c4d10c0ffL,0xe14c82ff8c461df3L,0x95570f44aef902b8L,
45320         0xacaa04ec0eb7eb26L,0x3c8c86a8e738570fL,0xb87d47ccb77cc59cL } },
45321     /* 38 << 336 */
45322     { { 0x2f4f68377bbf7168L,0xd5b67947f03f7145L,0x2c6ca74d4cecfe22L,
45323         0x0e559b9f0a7d6fadL,0xdbcd039ff6b37f98L,0xaaf1f6edfa7a3877L },
45324       { 0x97b779f0f607316fL,0xe2185ccc72b99fd4L,0xd3f696bf2bdfe399L,
45325         0x20d9baf15e6c403cL,0xe5bbc1cb4c4f1216L,0xd1c0761a428838fcL } },
45326     /* 39 << 336 */
45327     { { 0x4f433b8abd08dd65L,0x27849a72773bd3c0L,0x62351b911854502eL,
45328         0x836580ffca24ce7dL,0xa5c224a39355258aL,0x8d33fb43e65db7f0L },
45329       { 0xe44d391edf49a825L,0xc28e0d9bd2f5d4bbL,0xf7208342efb61ae9L,
45330         0x43686b414dbce055L,0x7f7562d01800c062L,0x5031bd7c8b8ace99L } },
45331     /* 40 << 336 */
45332     { { 0xc183199375476a4fL,0xa6383a0055fc4367L,0x23a72dea98bf90c4L,
45333         0x67ee6f451045a947L,0x4e6518836920d0a2L,0x49132c9ac8042a04L },
45334       { 0xe249e46d5dfa9fc8L,0x6ff9eba1c60d1a11L,0xa4d9362d43490335L,
45335         0xe8fad79ade504480L,0x519e8d1bac43c951L,0x7e688047952d6f54L } },
45336     /* 41 << 336 */
45337     { { 0x135d677342e27f9eL,0xd58b98fb8fcc77e0L,0xf3bb847d7f64928bL,
45338         0x15ec841663176905L,0x83e75b6a0f755173L,0x4c3eff5c7a24de69L },
45339       { 0x289e9a45313bf61eL,0x01b15aadeafa2733L,0xae7fafe1d2cf501dL,
45340         0xd6fba525d5ac0b3eL,0x4bf48be0689bb20aL,0xa591843255bf610eL } },
45341     /* 42 << 336 */
45342     { { 0x0f019b64c5f8df0bL,0x112f06a979307310L,0x91dc57276d16102eL,
45343         0x34070a5be2651248L,0x0b9f35dbd3423044L,0xf29bb4a072b10ed1L },
45344       { 0x87071a9a07fb6388L,0x4246d532b7dbdb1eL,0x87db3d2285a039c9L,
45345         0x76620a5d42b030cdL,0xc798e3816a42d8ebL,0xdd97441ac441ef9bL } },
45346     /* 43 << 336 */
45347     { { 0xa9b004a0f08592c3L,0x984d17e5d069c54dL,0xc96f2132ccb87e81L,
45348         0x67fd082f3b1f9eccL,0xcdd0827ac4ff9feeL,0x9d1025070e04b7a6L },
45349       { 0x4ff3424177c67935L,0x4f2246f58efea5b9L,0x128085b12fbf7615L,
45350         0x9f111f65174b0575L,0x0b27d8e2f455cba5L,0xda20626b536054eaL } },
45351     /* 44 << 336 */
45352     { { 0x4a3df6de3761fa82L,0xb839d6babc56eb6cL,0xe41afc5e13977a26L,
45353         0x64022937fc0686d5L,0xa5d6dc19e2d681a2L,0x81afab3128f411b0L },
45354       { 0xc089aff74321a117L,0x32b0ae2657d18f89L,0x650aacd5f66aacd0L,
45355         0x7b317bf6b8d3f677L,0x2cd5789777ea82dfL,0x935be0f3c74e7509L } },
45356     /* 45 << 336 */
45357     { { 0x4387f8f602de9e59L,0x529c06f337589811L,0x6dbaab60bc9f06b4L,
45358         0x0063bc3db5f181faL,0x7bcb289969b906b3L,0xdca70d1331d1ea3eL },
45359       { 0xca65e546ee373e94L,0x13cd365c779f415fL,0x4183460e9d71cb08L,
45360         0x60f312726e35eaf7L,0x3d0c265f14bc5e0eL,0xe7a1b9af39ce618bL } },
45361     /* 46 << 336 */
45362     { { 0xc234c892f46aac36L,0x213076ada55983a9L,0x81f96142dcf335a1L,
45363         0xf21ceb724b22e311L,0xa12d6333dc053e1dL,0xe7808925a930732bL },
45364       { 0xb5a9eb81b1f1075aL,0xd13739c0f0a3e623L,0xbcd842e9ff2f24d5L,
45365         0x200cda381b16ff0fL,0x0a85ea521d6a6c54L,0xe1c0dc8756785463L } },
45366     /* 47 << 336 */
45367     { { 0x3287c8d39100f769L,0xb349ce8c052e8bcfL,0x5fdb952dd0d3e44bL,
45368         0x68715110d0639cc4L,0xc9a5fbaac8efc67eL,0x14ebb97da009aec5L },
45369       { 0xf0684e1ca1423e1eL,0xb282f2f56357fa17L,0xc2e79d3c5af78041L,
45370         0xe0ca9f4bd7d2ba8bL,0x20629f1e04dd84bfL,0x274ebccc3ee73228L } },
45371     /* 48 << 336 */
45372     { { 0xeb05c516156636c2L,0x2f613aba090e93fcL,0xcfd573cd489576f5L,
45373         0xe6535380535a8d57L,0x13947314671436c4L,0x1172fb0c5f0a122dL },
45374       { 0xaecc7ec1c12f58f6L,0xfe42f9578e41afd2L,0xdf96f6523d4221aaL,
45375         0xfef5649f2851996bL,0x46fb9f26d5cfb67eL,0xb047bfc7ef5c4052L } },
45376     /* 49 << 336 */
45377     { { 0xeadd123d385f2b36L,0xe3b14829ddf58569L,0xa4fdf0ec47c7e485L,
45378         0x93c0d8380623ea5fL,0xeb9c0a2c9e2661deL,0x8046fc69e72e0ca6L },
45379       { 0x6f439e5c7be1c918L,0xcd8fd2f92a9ffcdcL,0x7f134747420e939cL,
45380         0x8e880ef05ae283f9L,0x502c5c99f780a249L,0x68a529ab94bf9d68L } },
45381     /* 50 << 336 */
45382     { { 0x3cf994ed88c9d290L,0x9209f5610bb34d46L,0x8170b567b2bfa21eL,
45383         0xae87b6f7c62f86d4L,0xac6fc431d71bccebL,0x5f3a62ba83cf2970L },
45384       { 0x390262d1d943b10aL,0x8fc9a27f28aec573L,0xe59beb203e3069f9L,
45385         0xf3e7bd365e0812a7L,0xc29c8a433aceffa4L,0x015feecb41c25e2dL } },
45386     /* 51 << 336 */
45387     { { 0x5b6a4d6ca8e61f40L,0x35825d762f9a6e70L,0xd48f6d8d346a8b94L,
45388         0x12bea60889801a40L,0x5182192ad57115f6L,0xb5a8dc6b954c1b47L },
45389       { 0x084a5c71793b427eL,0xeb66d699f8de2a03L,0x9835b2fb8eb6d905L,
45390         0xb4229923c79dfe40L,0xa7c8aedddee34c0aL,0x12a00675337b0658L } },
45391     /* 52 << 336 */
45392     { { 0x38ca9f61d44aee32L,0xb2cd0f505484905aL,0x23ecb3a4d812e727L,
45393         0x9be645b874a3ac5dL,0xaa4a1d114bfa93b9L,0x5be5277d147072caL },
45394       { 0x623a4bd9ba0a6d93L,0x03419661dcf3d9b1L,0x9bffbe8231de1cf4L,
45395         0xbadfa2ab56a6af06L,0x9103f7256746f09cL,0x0cd5e956344a2688L } },
45396     /* 53 << 336 */
45397     { { 0x50a18ab1f40b0edeL,0xf963b76736e01032L,0xba2029b4d4f9a6deL,
45398         0x8baec9b85a8446b9L,0x7a4107e766fa8a92L,0x06e78bf99f6543d9L },
45399       { 0xdaa894b3a5043e86L,0x172858a8f4e6fe37L,0xff0265cc0844608dL,
45400         0x5db1a8f1d5def174L,0xdf9f8a698874fbedL,0xdd2292a977a274d6L } },
45401     /* 54 << 336 */
45402     { { 0x46f522196ad8d03dL,0xb63e0eaadaf8b0d3L,0xd667f0a66e29df38L,
45403         0x6e77432f96ef3b57L,0x78fe0872139ca180L,0x300a0c78d1e4af21L },
45404       { 0x650f32462148816aL,0x31ef1e883b4301a2L,0xa2222b25f18442fdL,
45405         0xb26b63066884291fL,0x977b6f7d713d88daL,0x3e8173248cd5f7f7L } },
45406     /* 55 << 336 */
45407     { { 0xd5687c9a9684771aL,0x797808e396cf65d4L,0x793d4eb6ea9ee562L,
45408         0x2359b991fd94defcL,0x4e75cdf03a8959adL,0x7a08566900ce7815L },
45409       { 0x5c61df5da699fc46L,0x02b62d4868da56d5L,0x8a6972d1eaea27d5L,
45410         0x727582b3c8e5d04fL,0x0ab2e6c2de87c408L,0xaa9a62e47b9ed157L } },
45411     /* 56 << 336 */
45412     { { 0x9c6247d631af03e4L,0xe5a59ad075f9ee90L,0x1da1d64f6ac4b5a6L,
45413         0xd2fbd169c521ec7dL,0x6d168015dfaa39f7L,0xe9bcf5b59c69d9d7L },
45414       { 0x3d1d3e6693ae2925L,0xcda60beae4bc73a3L,0xb2456adc954e2f3bL,
45415         0x5d312fdc02a8fe08L,0x7b37c00e0e497a0cL,0xbd1f3aafc2f8b148L } },
45416     /* 57 << 336 */
45417     { { 0x60f3bb27bc00d150L,0x159c5af42448affbL,0x4492b6bd2cfa563dL,
45418         0x7e58219683c833b8L,0x9f9ebdb20edfafa2L,0x93a7048f31a39a8aL },
45419       { 0x4172f74d50149d01L,0xff38fceec58b7588L,0x2e71ba9099f25353L,
45420         0xdf50fb440604e555L,0x7effa7ca8f3b5969L,0x3bbe8d49b836b8bfL } },
45421     /* 58 << 336 */
45422     { { 0xc18c375c29d08d49L,0xb04c0c29c1a681bbL,0x0c4acce9e74dd458L,
45423         0x1d6da95c85c920a1L,0xc67280d285387462L,0xeba99725e7e804adL },
45424       { 0x08f80e5a8811a138L,0x26f442138f2136e3L,0xf67f157c2d028cc9L,
45425         0xb436356d14cd7cbaL,0x1c9c610290281895L,0xf67f16ea48598bdbL } },
45426     /* 59 << 336 */
45427     { { 0xbf926a077a326266L,0x4045c18bef43cfc6L,0x6fad4cf56ce45553L,
45428         0x613ad2dc45a9abc8L,0x7b086ace8836eed8L,0x855857c213ad51d7L },
45429       { 0xa3b19c2d167664adL,0x422c548abbd2c452L,0x8cd3681f85928ef0L,
45430         0xe969e45c3ed435ecL,0xf76f2cce746c9aacL,0x514df58d1dd90e35L } },
45431     /* 60 << 336 */
45432     { { 0x9b66219c4d09cd36L,0x6c6fa570b54f0853L,0x95c268bcf29a8fffL,
45433         0xc8cf84bf5420c324L,0x5bfc975ebb61617aL,0x935cfe24e78f1bbaL },
45434       { 0xa6e2afe919d71ea1L,0x8a321e568c9b950eL,0x42dd9e28ec097826L,
45435         0xf06e600ef391633aL,0x94e5512b46acbe2eL,0xb0bca2cc61cc7a08L } },
45436     /* 61 << 336 */
45437     { { 0xcd361103e8b2d41dL,0x2d0d982cab0b5f13L,0x8158129618d55aecL,
45438         0xf1c28a71579caa03L,0x5ddedfd7e50b83faL,0x932d2c03222105d0L },
45439       { 0x48fd0ead75ada3f4L,0x29209d988c533a40L,0xc2acc587f2acf0c8L,
45440         0x05a8703ef689912fL,0x8f28953b9182995aL,0x1cbba2f20fb3eeeaL } },
45441     /* 62 << 336 */
45442     { { 0xa1472574180e5eb2L,0xde27569b93fc7b21L,0x3bb956816b9af8aeL,
45443         0x8a25fc0ee155f89bL,0x8aff018d825126b2L,0x6eda2f31906f0bdcL },
45444       { 0x19cbbecc4e8fbe4eL,0x04e0a4a40568d248L,0x6de2c002ff07b863L,
45445         0x6d388447e8d1595dL,0x6a193b70c2cfd10fL,0x00bd826ee6f6bf96L } },
45446     /* 63 << 336 */
45447     { { 0x2a0165a40a5b4d1dL,0x49c85ee904f12309L,0xc2d221031ded788dL,
45448         0x510ccbb3735bd89fL,0x92d2eaebd8eb0e1dL,0x6bda8e346e428c11L },
45449       { 0x44c01a1d361f7495L,0xddda8e97cc7a95bdL,0x95cbae30524a53baL,
45450         0x266d7192dacad45bL,0x8a42793f22fa4b99L,0xbb393cb5ed204904L } },
45451     /* 64 << 336 */
45452     { { 0x88e7ac8e168d5e60L,0x53abd5696188a98fL,0x3b96d52918be419aL,
45453         0x7e75e354c057621cL,0xcb1b709f5ce57e59L,0xe78befa2844f2463L },
45454       { 0x536081993276d4a0L,0x92636ade157f2024L,0x6dd0d348e0411414L,
45455         0x5b28e9504d73eeaeL,0x08439232690ed85eL,0xdde1a3496da14b58L } },
45456     /* 0 << 343 */
45457     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
45458       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
45459     /* 1 << 343 */
45460     { { 0x6cbd275739ed9ec9L,0x5db68a68fe5d4aa8L,0x177eaa0be4c58c7bL,
45461         0x603551ef0e488784L,0xc8eba131df916b0fL,0xd0dbceda159732e2L },
45462       { 0x55acca84b0834afaL,0xdbe98440b59ffbf5L,0x162a2c703bd3b202L,
45463         0x4c5e5d256ddd8ebaL,0x66e7844a77b1d93dL,0x1292bc0e110b9dcfL } },
45464     /* 2 << 343 */
45465     { { 0x1b66faabf9e89beaL,0xc81c5ddc3a441284L,0x1a82f3a0a675f7c8L,
45466         0x82884a2f30313a71L,0x7ac5d7b058aea9e6L,0x1954f075cd5ff05dL },
45467       { 0x7c29638d6178d270L,0x6af7f8ba19381929L,0xe85e3c47a17ae3a7L,
45468         0x91b107c77009e38aL,0xf3b777d8f1f9c52eL,0x5b7b74ff11b688a0L } },
45469     /* 3 << 343 */
45470     { { 0xe1e5b76914b87b2aL,0xee187f5d143a4ae1L,0xa9a38728908cb988L,
45471         0x2027b2ed4443d8daL,0x1c6b4813c0c98675L,0x509ea7d1323bd978L },
45472       { 0x43b16a587f4dc19eL,0x385f8be812940ae9L,0xa4ed64e57d59acadL,
45473         0x47e7abed51ca7f14L,0xead594b82bcce6b8L,0xa2bff60cfc03cf06L } },
45474     /* 4 << 343 */
45475     { { 0x4ae3d232c0385874L,0x83bda9e6cbf96d2aL,0xba73c769ec62fd6aL,
45476         0xd586ba7f62a4720cL,0x6497cd140cc1f491L,0x8b012b707b2ac571L },
45477       { 0xa65eabb6268fd705L,0x8caf100a1431873dL,0x25b31b84231457d7L,
45478         0xcab62f75901645c5L,0x2377d74db2f7b656L,0x4008277c2d33c95cL } },
45479     /* 5 << 343 */
45480     { { 0xa7be70c04bfeb784L,0x4633ddadc222ab44L,0x00e397d30f5924bdL,
45481         0x5446db3ae25b7b9eL,0x433ea2c4fa1dd048L,0xbb9ae36a1421321aL },
45482       { 0xf879069dc59fe8f6L,0xe0f2b8b4820bfee2L,0xcc6cf7c49cf239e4L,
45483         0x0e3545c207dc3122L,0x23b0f48b1d2c737bL,0x1c6b6d9cfc1137d4L } },
45484     /* 6 << 343 */
45485     { { 0x10105dfd101d2433L,0x64e009b58ab6d664L,0x122e68324e80fc07L,
45486         0x3b26e76287dc7da6L,0x7bc183de6d4728cfL,0xebfecf4f8bcdc129L },
45487       { 0x8b995cec265c66f5L,0x080572d7c4b0e942L,0x612e9e6b4da5b77dL,
45488         0x8ec048a96caf9161L,0xe3628ee2c7f45eb6L,0x0190b71bd85650e9L } },
45489     /* 7 << 343 */
45490     { { 0xccf79a81017fbd3fL,0xa852ca29c875bc66L,0xbb4cd90c0592f8e2L,
45491         0x2ee786f455b05c79L,0xe1a2b6baf382e6e7L,0xf2d6cf6e6d2e952eL },
45492       { 0x2f0b534abc9304fcL,0x1d63fd80795629a3L,0x42e70cd9322d8e03L,
45493         0x8a282cdfb057e36cL,0xd18a0c313ceb177bL,0x270e31569c58b890L } },
45494     /* 8 << 343 */
45495     { { 0xaae2f448ed001c43L,0x08ad1d9bcf4be493L,0x3262b2f482c1f372L,
45496         0x5521febd351a5f7fL,0xf8ec9190916c75a8L,0xf3c258c72728dfb8L },
45497       { 0x5dd4ff4f8af19574L,0xefddf5795d076b1cL,0x318b5b98ba8b777aL,
45498         0xd971d426fb7f8409L,0xed1465e8b0fd31dbL,0x80d24d4300f66347L } },
45499     /* 9 << 343 */
45500     { { 0xe8263e8012eb6baaL,0xc452c7581dde8c37L,0x5112af2840baa45dL,
45501         0x949b8a740793703aL,0x8ba78382e60e007eL,0x38cd110412823c99L },
45502       { 0xdeb0d555f86cf04bL,0xb2f20bfdfd9f6320L,0xff1d399d17c39502L,
45503         0x1340aedd1bdf0760L,0x36b2b43c88cc0c09L,0x5f3dba7e9ce285edL } },
45504     /* 10 << 343 */
45505     { { 0xcea0374a69ca5051L,0x19e060ad5294ae7aL,0xf6ce02361bb01f47L,
45506         0x2a5b28ba8c328b8bL,0x6991b1d8b253d630L,0x360afd40859455d8L },
45507       { 0xf5c6e1427c1f5946L,0x1eab83084cc8c391L,0x4eb4032f67e76ecdL,
45508         0x5bf14aa233898059L,0x0804a7c00e001b76L,0xe3866a93734cd134L } },
45509     /* 11 << 343 */
45510     { { 0xbe85177db72e5eadL,0x47c15fad59fd2463L,0x2cf5f07f4bd51f8eL,
45511         0x82f48288c2898713L,0xdb08aab4c8f753e8L,0x18a1f5c510f58eddL },
45512       { 0xaeb7bde366d0b94cL,0x04539620079fb6dfL,0x64d1aff2ebe8c4b9L,
45513         0x08d9ef431a10a101L,0xe326c7ec6c602789L,0xd8b1b3e7f6efc3d1L } },
45514     /* 12 << 343 */
45515     { { 0x5ba5288c1ae586a2L,0x044f1fc61b715821L,0xc1a9a997602f3c65L,
45516         0xc5c7512fe08c0223L,0x48a19c3c367e6f1dL,0xa9f2195dfb241597L },
45517       { 0x9f674a5fb5ba32a6L,0x275a060f0a312742L,0x5aeb8c4303d6f13eL,
45518         0x0fed575d917433fbL,0xe4a5ef9a59f53490L,0xa9f86145f315e616L } },
45519     /* 13 << 343 */
45520     { { 0x770d01ab2c1deef8L,0xca72f761f61b2a4eL,0xff686a4ceff9ee49L,
45521         0xd6b338d30d07000aL,0x885b4e8ce1050b10L,0xd6326179b2364b01L },
45522       { 0xceb2bafc672b298aL,0x7df8941aba628946L,0x9c94004ebc56b115L,
45523         0xde09cc2d7b12cdd2L,0x9c2dda163833ce43L,0x88da691a6265b59eL } },
45524     /* 14 << 343 */
45525     { { 0x7059c58669a03980L,0x91f2dfe4e88e1287L,0x96dcd9318d9633ccL,
45526         0xb2abc44f37bda148L,0xe31adb3feb8964dcL,0x7b07e015e316876cL },
45527       { 0x31732880ababd240L,0x5c37a667e95854a1L,0xb5b334c91d6f69adL,
45528         0xe613e5622c34e118L,0x8bbdbf5c5f5984edL,0x82ecfd95cf4f63a1L } },
45529     /* 15 << 343 */
45530     { { 0x813caa72ade4e3bfL,0x29055be8600c93c4L,0xcb346967e6e4ec1bL,
45531         0x39c1152d50ce992fL,0x4682c20e5ce62852L,0x04e9dcb7f4e45ed4L },
45532       { 0xda75355d7c0fa5bdL,0xe80f29b078949d91L,0x6214610130fb9e33L,
45533         0xe70cda8f325eececL,0x49217f74efca3e14L,0xd3c890b36bd7246aL } },
45534     /* 16 << 343 */
45535     { { 0x315ad7a47e5a59f4L,0x1c615bfc543c8b00L,0xe12f97a8baa56473L,
45536         0xf263db4446edcfcbL,0x47cf91d53c1a968eL,0x1a1165b4c15db875L },
45537       { 0x5d35e53a3479616aL,0x649f87b45c59958fL,0x5d3d11ea246da3d3L,
45538         0xc1ddfcc653f06820L,0x8169d7116610c00fL,0x15f16ba54bddc8c7L } },
45539     /* 17 << 343 */
45540     { { 0x307b040d9977713eL,0xc03f7787dee9e016L,0x761a5d03e12c354fL,
45541         0x8fa1a4141cc88904L,0x2e079008b7675e71L,0x649c789591d68d60L },
45542       { 0x63467e93c98f1c9eL,0x81931ac7fcc52703L,0x2060c89538e59af3L,
45543         0x8c12e002a87024c4L,0xfc881e69b3b8496aL,0x2b4e482e1e827081L } },
45544     /* 18 << 343 */
45545     { { 0xf80ed61a30fa7e86L,0xf2e5f324a15ec5d9L,0x139ca085ecba2d64L,
45546         0xd164ee5ff3f5cfd1L,0x758c0008e5cc3cc5L,0xd180c463ce8fa1f9L },
45547       { 0xe5dd27054adc6e61L,0x061e0c3c592c39e5L,0xec5a8d4a4e437781L,
45548         0x9e4c6f461e6d4540L,0x33ab232e2526e6eeL,0x3c551685ea282d9cL } },
45549     /* 19 << 343 */
45550     { { 0x59507a2162ce1459L,0x88b465d1c6a2cb30L,0xa5ef8b2b5c8ef7d4L,
45551         0x73145f4c4dc9a457L,0xabad3390d19186f2L,0x7036b424f9b78a7aL },
45552       { 0xf76f51bb16e04046L,0xecd1ece92b2b71efL,0xda8d82011900f2b9L,
45553         0xc2d3291b268d1bfbL,0xa6c1c79a2d176459L,0xb27e5d5885ee1b7bL } },
45554     /* 20 << 343 */
45555     { { 0xcf19fb2a1e548ef0L,0x8bb6dfa0cc694171L,0xeb1668ca5c5e390fL,
45556         0xf5a3485be1975263L,0x4edfc596442cc850L,0x9901f447f9627d74L },
45557       { 0x3a6b85c984d0413aL,0x1466366167de639cL,0x9fc9fdcf11705bbbL,
45558         0x6d066e2bbff2cf80L,0x38dedc2fdc3026fdL,0xad533a981b828538L } },
45559     /* 21 << 343 */
45560     { { 0xa7d51d862222dcb3L,0x52e2531cd1a6c525L,0x742b1234532126d8L,
45561         0x226043f24e9e77acL,0x02f270afb3a75b2bL,0x7ede5714d4a8dc0aL },
45562       { 0x24699e16b34fd97dL,0x4e5d785e8d417ad1L,0x273f5dd1ec307ecdL,
45563         0x742373863186955aL,0xf46805fde6afd38dL,0xae100ba424562906L } },
45564     /* 22 << 343 */
45565     { { 0xed9f434e5216636cL,0x242bd09bc5c1668fL,0x8bb747bd804f3d6eL,
45566         0xd66d8753c7c83dd2L,0xa71016c2584540b8L,0xd8b16210fdd41a90L },
45567       { 0x5eb5947e1b65be60L,0x1bf995e7616dbdc2L,0x71b7099abb7dbdd8L,
45568         0x53650d29079eec24L,0x6bdd1b0e8ebd86c8L,0x0a9658ed9a31624aL } },
45569     /* 23 << 343 */
45570     { { 0x3be2ce89b8cf4d55L,0xf9b3c501822cdcd9L,0x0cc8423010e12f3aL,
45571         0xee09031a3c580ec7L,0xf4c256a812f4b48bL,0x71a8323104018d0cL },
45572       { 0x69ad6d7babfcf13fL,0xfa79b457af658743L,0x249f32816001af58L,
45573         0x158430fcea127a64L,0x25a3e4549a9be713L,0x68ba3f0fcc6b5bb5L } },
45574     /* 24 << 343 */
45575     { { 0x6c75bc93b7bfa29eL,0xf86f22b218ef6d69L,0x90ce6a1536dcadf2L,
45576         0xf11f711c7ce50921L,0x0739ceda38a479e3L,0x840b825e6ec3dbc6L },
45577       { 0x7c36c0a59fa23481L,0xceb61fd170cb186dL,0xac6f7d3c26e4754dL,
45578         0x4076d3b5f317b385L,0x52f1bd723fd9e9c7L,0x6649d8b6bf316043L } },
45579     /* 25 << 343 */
45580     { { 0x5f03dcdcceb1e25cL,0xafff6561d50ff864L,0x17208b6f3a6bb787L,
45581         0x61d96c978e15abf2L,0xb1beb427991107b1L,0x436328475008aa3fL },
45582       { 0x8a326eeb3595febdL,0xa8e5a037ec60dc0dL,0x762ebd2a3159f062L,
45583         0x8ea005adbd1b0bd5L,0xd4d863cf696d4121L,0x2a07a637eacc9b9eL } },
45584     /* 26 << 343 */
45585     { { 0xf352e28b54a8ffaaL,0xa8317f089ce68b6eL,0x7deb148770cad820L,
45586         0x2411b382b2c3579dL,0x20b21ed214d36e66L,0xe7331bec353b9ff5L },
45587       { 0x5692636840dff0b3L,0x13356f7b646eff07L,0x1e6e6e4508c64091L,
45588         0x913b83f2ea0b920eL,0xb69e5f839f713aa1L,0x8e59d3794632a60dL } },
45589     /* 27 << 343 */
45590     { { 0x3594c0d3cdefc3dfL,0x9d850e2fd21cf9e7L,0x245322944e38263bL,
45591         0x597964610e43acb7L,0x13fad563bca9408aL,0xe52983dba985390cL },
45592       { 0x9c5e71e08c000a9dL,0xde6b0b2f800949e2L,0xc58032d131d94108L,
45593         0x36cd4099b31811e6L,0xa8d9bdeb3981d619L,0x06f644e03d4760c2L } },
45594     /* 28 << 343 */
45595     { { 0xdc2870f8243cfbd5L,0x000b71b31ab496f3L,0x53511a3f708f4507L,
45596         0xbd7bd0381949d835L,0x723a007d938f4db6L,0x5bc8679e2d04e9fdL },
45597       { 0x51ca5fd176ec7fc4L,0x86c4205c988f354eL,0x9042e76b2a0a4a90L,
45598         0x368f52a84ad44d2dL,0xddc2cab8912edfb7L,0xde74ccf5cde80199L } },
45599     /* 29 << 343 */
45600     { { 0x91b31fcbcaa3f1d2L,0xb8a29af1bcc99f53L,0xc5842b2695662f80L,
45601         0x13954262a4b4b396L,0xc1fac956a6acfdffL,0xbe37fa4dcf60b88bL },
45602       { 0xc7715493dffff3deL,0x06dfaceda1274350L,0x9dfcaffd7460fa94L,
45603         0x5f1d3a351e9c317dL,0x2fbf393d377b84ceL,0xb4d9bc8404b83635L } },
45604     /* 30 << 343 */
45605     { { 0x29871ce22855a74eL,0x5418f0dc98696474L,0xd8bc07d6b90d0498L,
45606         0x391012a79fdc0ea2L,0x271396949b09f60aL,0xa0a43dbf3371f0d7L },
45607       { 0xab5849422af8d992L,0x64cbd121409eb3faL,0xd36faf01766864fcL,
45608         0x69189faea2a83417L,0x3c24d85e3733b772L,0x125a915d2ee497adL } },
45609     /* 31 << 343 */
45610     { { 0xa8f9eb2abab3fa8cL,0x484584f654ab1e16L,0xee74e5aab21b34edL,
45611         0x3ce626ff4eb689f0L,0xd757f22b0006e5bcL,0x611505d024a25e65L },
45612       { 0x212df14c46382659L,0xd17898d78c73da0aL,0x5604a93e51421c2cL,
45613         0x76147f7603a580a1L,0x325b5c8ae5c34d09L,0x6ff28848db857152L } },
45614     /* 32 << 343 */
45615     { { 0x8002f4583e455a61L,0xafbafd375bea205aL,0xa8ced112fb93f735L,
45616         0x27cb6292196e3084L,0x72395bdd77e8c744L,0x02e018d8ee71f5ffL },
45617       { 0x7cfc14d9c1337a1dL,0x94e14c0ad7b4d86eL,0x66e50129d213738eL,
45618         0x7a905d91bc0b5ea3L,0x92cb630afca06700L,0x65e06d5cbf3a0821L } },
45619     /* 33 << 343 */
45620     { { 0x769ff9191e1cde66L,0x6ef257d1944a8786L,0x881437da4f75233eL,
45621         0x15266f3768665eafL,0x21fcccafc1777505L,0xe9513e1ab7fea0ddL },
45622       { 0x67806e9c53c8a735L,0x24be9a769b11ae2eL,0x928c1455045d2065L,
45623         0xea0395b53557f62eL,0x910d7cb4c7d3a450L,0xe849c853c634443dL } },
45624     /* 34 << 343 */
45625     { { 0x76c6e48d3b476f69L,0x28195cdffe694ee4L,0xa3a9a99e2d3aacc9L,
45626         0x0f68fe36b7f320d8L,0xca84a6c9889ce762L,0xc1eafac94901907dL },
45627       { 0xa28b9916208c9770L,0x6846e639f8403e57L,0x12fdf9fa1d179e3eL,
45628         0xb81e47c843d046dbL,0x700ad19468c14491L,0x136395cebbac51d7L } },
45629     /* 35 << 343 */
45630     { { 0x7452dfd4f775003bL,0xb38a2031f1a4765dL,0xef36c513a2888c68L,
45631         0x2039b168a2339fd3L,0xf74c24be2cc498e9L,0xbeeaca157b622e31L },
45632       { 0xda72e5a005f2fb8fL,0xab4a98f0568d5811L,0x231aa495fcb15e1eL,
45633         0xf981bd7f537023f1L,0x29d6eb2db367e5fbL,0x15247194b8cd452dL } },
45634     /* 36 << 343 */
45635     { { 0xa81e4a4e55c2369dL,0x394de01b60a0f544L,0x22acfd07a8906e17L,
45636         0xf59b37a6cc9bc4d0L,0xdd16a22c7ffec12fL,0x07decc2ad5976455L },
45637       { 0xc5019463abe1d122L,0x2bf0ac0ce318c92cL,0xfa50280ab2bfc47bL,
45638         0x53354fc5c7cf8bffL,0xaea1d293e20ca341L,0xec25ecda8b626244L } },
45639     /* 37 << 343 */
45640     { { 0x05c6f1c99a2f572bL,0xf13f8c7747987918L,0xccb406d74101fdffL,
45641         0x93cea27bee1abcf4L,0x32703ada8f5adca8L,0xceaecb5f76313a1eL },
45642       { 0xf1c558980b9620cfL,0x942c28b51046c388L,0xbed4e9dc5a07cf8cL,
45643         0x423b695a6c734b85L,0x1ce0a2392ac87737L,0x40f126ac4d1cc7d8L } },
45644     /* 38 << 343 */
45645     { { 0x63e3bb09ad9e132dL,0xaa2880c5c9e84778L,0x23de89ea06049834L,
45646         0x442d1df3554e23bbL,0x87214f9f08c5f124L,0x305d967a6beb4996L },
45647       { 0x01676f804409f827L,0x16992f73a50147f9L,0x77ee56796081b38aL,
45648         0x8c75d293290afd9bL,0xf9578bca813f0aceL,0x395212dd0e786ed6L } },
45649     /* 39 << 343 */
45650     { { 0x63475e65c21b0f48L,0x114f9af5326c2c63L,0xa897bc01310f768aL,
45651         0xcaf47a8fc1bf3f5aL,0xc023bb3718cb887aL,0x3572f633685652a2L },
45652       { 0x2dc4ea0d7523287cL,0xafd60b92a121a141L,0xb6b4bf6e085ca490L,
45653         0xf599f8f2e5351ecbL,0xe38c8eacddba3d60L,0x2540585f5be9e748L } },
45654     /* 40 << 343 */
45655     { { 0x313b66cafd8ba33eL,0x10bdb130fabe27ddL,0x1181334c125e2b8cL,
45656         0x0f4f198fdb6f94baL,0xf7000076ac3f5de9L,0x1a78813d9d6402aeL },
45657       { 0x3427f75dc8a9e758L,0xcdac8b34b01f791fL,0x922c36d12a9ebaf5L,
45658         0x195ea05fb0487cc4L,0xe33de901a808baecL,0x15e1d5ac57291d89L } },
45659     /* 41 << 343 */
45660     { { 0xfe52cd9cfdc7e2deL,0x3947e578da6dccf1L,0x0548d4b5738751e7L,
45661         0xc73fc23f4b52a5ffL,0xf38eb8ff1b066accL,0xe9a40d37a27b40f5L },
45662       { 0x723b0752a264ad77L,0xe5d0c4efdea83bf8L,0xf7301e3fafad27a0L,
45663         0x336b0d86298d09b3L,0x462766bdb2ef2fb7L,0xa5311241141a7607L } },
45664     /* 42 << 343 */
45665     { { 0x10adb987ee1f44a1L,0xd6ebd1c3e51c0152L,0x0cf1303f4dd3b9eaL,
45666         0xd06351b837a33a3aL,0xb5ce1d941cff1f0fL,0x326b3e055476e2bcL },
45667       { 0x90f76b5d3426b8ddL,0x77497380648042f1L,0x48684604f9f83902L,
45668         0x00275191180f197aL,0x36fd84ecde7ce932L,0x52b428e65391a268L } },
45669     /* 43 << 343 */
45670     { { 0xd2c1ccb0695c2851L,0xd722b84ff1c78f17L,0xaaa53d26fe52f2a4L,
45671         0x3057f4ed24742143L,0x951332a4a2aea258L,0xe5e4db6091096878L },
45672       { 0x71db9e48f0b9ef38L,0x7e4b25c1ac542c26L,0xb7250394dd021df5L,
45673         0xcdcc6118ee48e711L,0xbc324af1fcdd5db9L,0x71a664ef3e6de57fL } },
45674     /* 44 << 343 */
45675     { { 0x4e2a05c1c21cdd1fL,0x8a232097dd46e76aL,0x8b55313cd871b1d6L,
45676         0x976ce5f6af396bc4L,0xeb91527dafd381b1L,0x6cfd449014455ee2L },
45677       { 0x8723be9e1f274d1eL,0x1c63fd011999fa9fL,0x5f1726258049b6f8L,
45678         0xe18a3ecd99a51b4dL,0x329fc2c1b13d4e65L,0x94da252b0f18f300L } },
45679     /* 45 << 343 */
45680     { { 0x583adeb8b893316aL,0x69dce1efee5122deL,0xc5cacdf319b77627L,
45681         0x061fedee5e8aedd8L,0xd53fce220257dce1L,0x0e4124bdc781e069L },
45682       { 0xf097c697d44ed517L,0x7704e33e9a4e9019L,0xac245dc23e0088dfL,
45683         0x70e1176bb76102a3L,0x55261ab235e4dcaeL,0xc2ba59230ede3501L } },
45684     /* 46 << 343 */
45685     { { 0x6edf35f3af073b6dL,0x7ab4118107376eb0L,0x4ef3e65be7ff1c9aL,
45686         0x654ea359d2ac6d70L,0x2b41a7f67ffcd91fL,0xe5da0511e0a60e8cL },
45687       { 0x97fefd9756701b93L,0x7a4a827dd34afe15L,0x8bd6c2299090536cL,
45688         0x110156f217e510a0L,0xce62a26ec801ca6aL,0xa786e9b05522b64aL } },
45689     /* 47 << 343 */
45690     { { 0x3c73c2868f02f70bL,0x744a580d0eeca325L,0x58b7ca1733534669L,
45691         0xd7d17d77800b0270L,0x864e3509538b116aL,0xc7eda5dce4797818L },
45692       { 0xd6c00fbaf741f023L,0x718ed11131d022bcL,0x4586baf2f2ce39efL,
45693         0x1095729dcd9a09f8L,0xf5ff3f2d7652f5ddL,0x29d95a09dbb72722L } },
45694     /* 48 << 343 */
45695     { { 0x7b151b98e28fd10dL,0x8fc01ce81dd884cfL,0x1f0ffb5098d56c2cL,
45696         0xf9df1fa2b084606dL,0xf86232bfdc7d2008L,0xeae5cb8fd8751699L },
45697       { 0x70f0229883ed54fdL,0xb575283a86087697L,0xad2191350302e2c3L,
45698         0x1c09a0d6c4b57e01L,0x0f65e1e1c541b9fbL,0x85493d9bf4fe76c0L } },
45699     /* 49 << 343 */
45700     { { 0xecf595d6bc19db89L,0x32cdf31bd607e09bL,0xfaf93c636217e9faL,
45701         0xa9a1619884d37c72L,0xa2688a33bd929e8eL,0x2ce3442e2842b31bL },
45702       { 0x906ac09ab37184daL,0x93a1a54492587ea0L,0x1acfab1ec5b4ce7eL,
45703         0xd4788cac7131e80bL,0xb463d67bc8cf0e18L,0xa754ffb81f24067fL } },
45704     /* 50 << 343 */
45705     { { 0x634f8d6db04ea518L,0xe8c424b4c60108a7L,0x3553b6d11ef6f4bdL,
45706         0x1fe850dfbc0a8e1cL,0xa077055473a66e4aL,0x5417bd50da985b55L },
45707       { 0x3f99edcaed53259aL,0xd243f2d1b3d5ae6cL,0x70f404b8cb49e74eL,
45708         0xf6893edc51fec8f0L,0x3f3ac23871521335L,0x127c055436e39048L } },
45709     /* 51 << 343 */
45710     { { 0x459a96595ab6a5b5L,0x14ec172bb5ac2238L,0xe556f7061642ba57L,
45711         0xe18d92d2da35bad6L,0xe64f9bcdd5805c1fL,0xabb4e0243b297094L },
45712       { 0x95429e14b8b876f3L,0x27961a7d9c04bad0L,0x81c74cf57fa32b6aL,
45713         0xb035259ebb0f1f24L,0x828c42da2e773f8bL,0x06c996366ea73c24L } },
45714     /* 52 << 343 */
45715     { { 0x353718ce191c21ccL,0x08e6edf64ad6bd18L,0xc2bb0d6e4dc5b572L,
45716         0x328e19df88193daaL,0xccc9f6ab7211c958L,0x377d99ef58aae5c5L },
45717       { 0x40e2ecc91c823442L,0x036d6d528b0d36abL,0x2fe0cd7eda4d0ad3L,
45718         0xb8fc3c7ffc8af791L,0xdb7e44a42b201b20L,0xa5176004ebcf527dL } },
45719     /* 53 << 343 */
45720     { { 0x24d19ca6fed20bb6L,0x0c02db9841d634aeL,0xfb55998930310b8fL,
45721         0xf9d0818506c00c8bL,0x2b9983fb4742362cL,0x16ae9bfbdce1b6f3L },
45722       { 0x679057e6a161a419L,0xe1e80fe04db28bbaL,0x2ca0c869f06c9a98L,
45723         0x7b80c43bc448ffa4L,0x100f205cb7ef73f7L,0x29565a93a938bea7L } },
45724     /* 54 << 343 */
45725     { { 0x4d00c613e1e7a831L,0xc90021dc56d9ddf2L,0xbb80b8385286ccccL,
45726         0x156b05b771f5f09dL,0x120f47f47bc921f7L,0x6ea1715f8a65c50aL },
45727       { 0xa070c9f695aa8348L,0x96120fe273171f56L,0x10c7d592ebc69e4eL,
45728         0x73f6ba27c1c7ef52L,0x10f5b9cef8bb536dL,0x8bc82b225ce0220eL } },
45729     /* 55 << 343 */
45730     { { 0xac25749af4f3fa3bL,0x2376bcd76f50e4a0L,0x9c68fd1028b2332dL,
45731         0x130ed4d12130b66bL,0x91842d58038dfc9fL,0x4111e4cbc401a53dL },
45732       { 0x85532deafb5d9b16L,0x0c5657503025e3b1L,0x1340aa49b6cc0c31L,
45733         0x1cfdd7d68b7f71a0L,0xee911d7e8b6e548fL,0xcddf07f021456ebdL } },
45734     /* 56 << 343 */
45735     { { 0xe19b7576fa5256d2L,0x418d5425db3f8bfdL,0x00424869951a1719L,
45736         0x2383c7a8533b69b0L,0x166a38e2e67a86fdL,0xa6baa01c5876c435L },
45737       { 0x574ddc4584a208f5L,0x8cee30b826b18dbbL,0xeced99c1e9f6b30dL,
45738         0xb638d88da7d34beaL,0xa4836806069adedfL,0x62beb7ee7a07c593L } },
45739     /* 57 << 343 */
45740     { { 0xffc89d6de16d63b2L,0x4da3b04f5df40d2fL,0x3437da2ab48706d8L,
45741         0xc35290a1d677df03L,0xe54fc6567c5b6c8aL,0x84f052ff2c77314eL },
45742       { 0x59c33a99d968b4eeL,0x2424c5d0facce444L,0x022d7bfbf505307dL,
45743         0x5372518d00c142ffL,0xcc82d21aeefa787aL,0x3517f3c0473ef630L } },
45744     /* 58 << 343 */
45745     { { 0xaf576c307a8a437cL,0x15852131de3f2cc9L,0x96bbff4371759da5L,
45746         0x106934ec66f5257dL,0x712e7d0ba9cedae6L,0x5b0b876ddabf131bL },
45747       { 0x1605f3a8b741f94fL,0xe5d961c109305b04L,0x3fb97996346266c6L,
45748         0xaf4eafc0b3ec7458L,0x0aefa01abcd90b0cL,0x2b7723e3505ea305L } },
45749     /* 59 << 343 */
45750     { { 0xe5c6f37b43d12de3L,0xdc34fdad642baf26L,0x89d716d647268e1bL,
45751         0x50047b391df8d657L,0x40da6352c64470a7L,0x406e3bc97879824eL },
45752       { 0x9677b4c38b9ecc36L,0xc82bf16fd246788cL,0xbc9fa99cef5dda3dL,
45753         0x3050febf0e7b676aL,0xfbb1301a53e448afL,0x3239f20267c84d67L } },
45754     /* 60 << 343 */
45755     { { 0x5093950b724fb94dL,0x107822718117ff50L,0xdc9e34b59f5961d7L,
45756         0xfaa2fc012351a33eL,0xb9e0f1d9d5fc462eL,0x276a5b3bdd9c6914L },
45757       { 0xe6136d1775365ca5L,0x228b77e2a91eed68L,0x5cd6a269411e4770L,
45758         0xd8857b0e17590390L,0xe7094f3aa0d45fafL,0xe52d11dcf40693e4L } },
45759     /* 61 << 343 */
45760     { { 0xc873fdf565a0d2bbL,0x848244dbaa42c6cbL,0xa5d2d766ac50ba78L,
45761         0xc650cf4343f38ad7L,0x901cf122ea895d06L,0x3ec1b583cbf46321L },
45762       { 0x863dce6193c3db94L,0x902459202445bb4fL,0xae716052673385dbL,
45763         0x9266b0bfff830253L,0xd201095844375610L,0x9e008b9712cf8d71L } },
45764     /* 62 << 343 */
45765     { { 0x2b1b2a551448e73bL,0xa8486146b5f97da2L,0xcf24d8636c848202L,
45766         0xa3d6431c5e483407L,0x47a33db852edb78bL,0xb09256a37dad3826L },
45767       { 0x740222a74dfa2b26L,0x23f43bec2a8ebe04L,0x4081e512a8072f18L,
45768         0xe53f0d05751ad7e8L,0x100d0a17332361ecL,0x8a2122e9e0c3a152L } },
45769     /* 63 << 343 */
45770     { { 0x28be8affe7e6417aL,0x4e18b452d6a30763L,0x73ae410310d0d5f2L,
45771         0x5151fe80003625caL,0x45ebb636ba7a91ccL,0x50f4b49d994e7e31L },
45772       { 0x02eaeaa93ebac455L,0x7632c7dac830fb1cL,0x06fe1dde3bb0d765L,
45773         0x0d2f7623a6789d20L,0xabba46de01a43e9dL,0x2e822e08f27917f9L } },
45774     /* 64 << 343 */
45775     { { 0xe96c4aebe5f5b545L,0x10a85a002d4c43b0L,0xf86ad2f632f9151dL,
45776         0x05daf874302b99e2L,0x4299dbfa14fd3171L,0x27cbedd6812cfc62L },
45777       { 0x42e61536b8772164L,0x52eecef76a5423efL,0xc34c6c70548fffa3L,
45778         0x1fbed7777b6db825L,0x850bded44ef2989eL,0x3b8a542c815463eeL } },
45779     /* 0 << 350 */
45780     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
45781       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
45782     /* 1 << 350 */
45783     { { 0x9decf2173079fe2fL,0xc32ec5707c817f6dL,0xd5649ce8aeb36b92L,
45784         0xab9f77d158fb4dc8L,0x66b11fb6b52d60cfL,0xe217941deaaa4619L },
45785       { 0xf3522a9a1607c412L,0xea2eba4fc2a3d8c9L,0x267997c625e38722L,
45786         0xed5047b72d4595eeL,0xaaa41e5f55e5456cL,0x891e3d1278cfc6feL } },
45787     /* 2 << 350 */
45788     { { 0xa438634ed7357a51L,0x918f14cd18c04d59L,0x2ab4dedfac40dd56L,
45789         0x758e95ee4956a5deL,0xfc11e3945113f84dL,0x6d71b6736059f16cL },
45790       { 0xfd8e2236fb357c3fL,0xd7c8681232dca873L,0x02aeb1538ea13b44L,
45791         0xde1275d3013d3827L,0x470a7b7e659ca201L,0x862c83c55c77b351L } },
45792     /* 3 << 350 */
45793     { { 0xfc9b800f05084cfbL,0x1c4d4510496f23fcL,0xfea0003cc1d08465L,
45794         0xf0281da09af48a41L,0xa5c0d97144d32eedL,0x2613b73e023a2e31L },
45795       { 0x455013c87dc8ac1aL,0x581b13195958b3daL,0xd293f2f22290aaeaL,
45796         0xa068256496f6223bL,0x38fd18fa69410ef6L,0x74eaf35f2b2cf629L } },
45797     /* 4 << 350 */
45798     { { 0x281f6e58c7ff5b50L,0xbc67791ecf9cd114L,0xe29fa41afd89abd8L,
45799         0xfcb0b0b07984feefL,0x0b0928a6d9d20a64L,0x2fd385c46979ccd5L },
45800       { 0xce9c34c81fbe72e4L,0x69364344aad0135fL,0xd464635250946a5bL,
45801         0xb09a97c6f39f53b9L,0x1d47bc20dcbc8b64L,0xcda5c7bdd458b0d6L } },
45802     /* 5 << 350 */
45803     { { 0xad5b8c2887eff3b3L,0xa8a3917d9937833aL,0xbafdc493200c3b49L,
45804         0x9e27aac5972c6fbfL,0xfd292bb20518c97dL,0xa62126db33515a63L },
45805       { 0x9892a8bb1bcfc875L,0x93b066b7e0b674d1L,0xcde9b0087fd3d080L,
45806         0x1e285a8859401ae8L,0x4679e32982cfea96L,0x52406ea023e615d3L } },
45807     /* 6 << 350 */
45808     { { 0x27de61138b6e9462L,0xb8ade1dc473464bfL,0x911ad49394dacc08L,
45809         0xd036f28e44252cb1L,0x3865abf6d13dc20dL,0xcea487cdd528f0baL },
45810       { 0x14d77eaf4fc290feL,0x5106533bc5084101L,0x11001dc7cda9eccdL,
45811         0xb79ad4bc49fc4a78L,0x4f6369f54567f8a9L,0x64050aa2df7ab817L } },
45812     /* 7 << 350 */
45813     { { 0xffe057aade07f615L,0xf3f91b55342700bdL,0x294761e127a839f9L,
45814         0x6411a2b480eafe1cL,0x4900eb120737b80aL,0xa1134d10bb73264cL },
45815       { 0x0ebfad730ddbf7f1L,0x57bbe692cd1f73ecL,0x675931fca20f8944L,
45816         0x1950eefffad2ad19L,0x60d304029cdf88a0L,0x121af89e33fd2c6eL } },
45817     /* 8 << 350 */
45818     { { 0x763e3664295c4db2L,0x632fd676dbbaa92dL,0x62ab11a8c66b40e9L,
45819         0x06244698f384b708L,0xe7cdf3bd69197876L,0x9cc79c48064f8837L },
45820       { 0x95900a229486589eL,0x7953f6e72ff01639L,0x3f65fbbddd3e6e46L,
45821         0x84f52e06baa2e2a0L,0x1dc462a8e3852824L,0x9be69c3f7e4c032cL } },
45822     /* 9 << 350 */
45823     { { 0xa40afc3670977e01L,0x965f110da6c3b289L,0xc4952f87805a8491L,
45824         0xb36804b80b65e2d3L,0xd3f6f5ace8cf2b2bL,0x0f37a79da4b71938L },
45825       { 0xb2f810d9489ef671L,0x1feae0262df23cd8L,0x7412eee321a14e4fL,
45826         0x1458b8ad179d51faL,0x2156a90ee201509cL,0x39f29fca72605867L } },
45827     /* 10 << 350 */
45828     { { 0x231f70adb2e066e3L,0xf09db880bb477a19L,0xdfa0e503907e5c63L,
45829         0x12fe09f4f97022adL,0xdbf06f3620bce7ddL,0x0140e197f1371cbaL },
45830       { 0x917b6da464b0b4b0L,0x9a6f4d9b20fe3320L,0x0981d60ed66bdf87L,
45831         0xb430e4e062d3487cL,0xc3440fb934dc4a94L,0xe7972dda09a5e3c9L } },
45832     /* 11 << 350 */
45833     { { 0x29d6394093f47052L,0xadf04e70847e5937L,0xa0ef4fee731bab6fL,
45834         0x21de31956ee7d7bdL,0x99af4a8dbd716777L,0x9e15c983df4c569eL },
45835       { 0x2ec7bc0ce94401eaL,0xda1835ad85727722L,0x2b5862ce5dad81daL,
45836         0xb2be508188dddc2eL,0xa02482101414286bL,0xc52c436d8ea33f3fL } },
45837     /* 12 << 350 */
45838     { { 0xcc580ea73b24e776L,0x0f3a8b189d721d6eL,0x8665604fb23480cfL,
45839         0x95787cba34414689L,0x425d7c6f4d10a945L,0xb5ec2626b2f1cc78L },
45840       { 0x55da88858658de6bL,0xb50919d1e9aba03eL,0xc64881d7d99e417eL,
45841         0x1eeba5aabf28fba2L,0x20feb7b3504eff80L,0x9f5f9db650debfb7L } },
45842     /* 13 << 350 */
45843     { { 0x4eb94584230923dbL,0xba8611287b3a6929L,0x5aa7faa3ab1d6b31L,
45844         0x95c1e23916ae0966L,0x98674fd3a2fe2297L,0xa8da0ee53c42d488L },
45845       { 0x103cabace0740db0L,0xf0b860d45bf16882L,0x03cb0cdc289e48ceL,
45846         0x3c15d3759e52c7d5L,0x524f731998103ca2L,0x828ed65cc609ffebL } },
45847     /* 14 << 350 */
45848     { { 0x518f231b83dfb993L,0x4b0987db37c0826cL,0x0c34961cd5177eadL,
45849         0x9d882d3e452c92daL,0xbfeaf5588765bcedL,0x83957b62b9962295L },
45850       { 0x2d1d01757bb084cfL,0x04c4cfcde8cffcfcL,0x2f35e33d8d4536c1L,
45851         0xbebb31cbd83124cfL,0xe342bed2abb29019L,0x2af0fcde2692a0d3L } },
45852     /* 15 << 350 */
45853     { { 0xece5d865c7e3b29fL,0xe58106a4622839ddL,0xf5272d43f2969d76L,
45854         0x90c72c1b2a1a240fL,0x1e2aa0acaf15e14fL,0xfa2f1c7bf1b6b5a0L },
45855       { 0xfb5d343d880224a5L,0x47b88a84f91881c5L,0x140f5ee9dd142fe7L,
45856         0x4e76982e24b37c44L,0x6aaf61e9578b482bL,0x01950e22765bc4e2L } },
45857     /* 16 << 350 */
45858     { { 0x20ebf79ce8a2e8f0L,0xec040d0daca418a2L,0x016c07e78d630d2aL,
45859         0x20021d57fa605dcbL,0x6190f3e942d04705L,0x4e000df58974b7e6L },
45860       { 0x6710da6c5abcedacL,0xf31aa4965f95d37cL,0x192c4b8ba5830899L,
45861         0x171ab8c4ea7dbcddL,0x715f60818cdf1097L,0x0e0135bf205d10edL } },
45862     /* 17 << 350 */
45863     { { 0x070fbbe1687645c4L,0x4dd859c8c7e0261eL,0x749fa1e9fad54b60L,
45864         0xb35942f483cdc91fL,0xcef26d0018eeb83cL,0x4dddd5787462064fL },
45865       { 0x0420ed6e703e8740L,0x9087d805c180c7d3L,0x93807412828424f2L,
45866         0x8bcea69a6dcae236L,0x22aed9a2d1973c78L,0xe3d0f6f83328d690L } },
45867     /* 18 << 350 */
45868     { { 0x5ce5bc6da85a13acL,0x868f385c7f1dd71bL,0x15aa63a420c376c6L,
45869         0x7802fc9e749127dcL,0xfad59f8e67a98935L,0x6bc97b1d60c0fdf3L },
45870       { 0xd24caa7ebce87ee6L,0x8aa08bc27ba511f8L,0xe5ba94f47ba61c1cL,
45871         0x9fe9c343364d2d75L,0x8ee0468161273932L,0xab2f0dbe5e8c4861L } },
45872     /* 19 << 350 */
45873     { { 0x13239c0a8254ded6L,0x594182e61762f9cdL,0x6326369d480efa21L,
45874         0x7fee5afd33101382L,0x9e1ea59c4688bc0bL,0x7a3b1b8eae19c17aL },
45875       { 0xa8f8f8e5777aedf3L,0xe2d018bfc6bbdeacL,0x3625b03b54328db4L,
45876         0xda7540c8711ab8caL,0x7faa19fc46930a99L,0x61a5d1845b59a973L } },
45877     /* 20 << 350 */
45878     { { 0x4a6226f9f7092423L,0xfe6b7a6dec945231L,0xb44e2e60a1193cabL,
45879         0x2ce6393543dda270L,0x1a9e8a2138d64738L,0x863d151a9d843675L },
45880       { 0x98a1222ee2b14443L,0xbf8b32712826846fL,0x80475be555508801L,
45881         0xc39ccd917b38f064L,0xea31304de8e249f5L,0xa3b6891b4d42db74L } },
45882     /* 21 << 350 */
45883     { { 0xc0f1627a147e0f32L,0x59fb7f2f5e8822d8L,0x21d8be6371097441L,
45884         0xa6169f1b855543f5L,0x188c420645102ae3L,0x4c20a136131b674fL },
45885       { 0x05487c4d15999699L,0x8a82a130e6ba5542L,0x93a2119519ec0de9L,
45886         0x634d644cc8d0538aL,0xa90c5eeb3b6bbd60L,0xd59105125e4db926L } },
45887     /* 22 << 350 */
45888     { { 0x5140a7172119e821L,0xe5a2ca8cbc370a14L,0x0c17ad48a6db3398L,
45889         0xd7094545ed6fc82aL,0xcf32984dedb976d1L,0xcf04ac16cdf83a9bL },
45890       { 0x9bbea16b49775502L,0xb4855286452a6f35L,0x45cbc3b7a86f445dL,
45891         0x5972ec64763f5990L,0x14d0b9c0b780b2f0L,0xb120273456e707feL } },
45892     /* 23 << 350 */
45893     { { 0xbf6b76e1e41c43c6L,0x64ea1824db033acdL,0x7fc0399987c9406cL,
45894         0x9427585a51b371d3L,0x464f3559c9705e0aL,0x6639797ac8cb6ff6L },
45895       { 0x5104a72e842fbf01L,0x7cabb009fea7af74L,0xe42aa69b19a1db1cL,
45896         0xca9599a3a6a7ab69L,0xf31e4aaa1a70d770L,0x0fcc7f1b8a5ef098L } },
45897     /* 24 << 350 */
45898     { { 0x39a689bc281548baL,0x11aacfca138eabbeL,0xcf33108a8d29457bL,
45899         0x312612e014ed4b4dL,0xcbb21f345115625fL,0x4e7217de303a363bL },
45900       { 0xaeb0c8c0d137f67bL,0x4ff84a937bf78dfeL,0x7a022604683b37dcL,
45901         0xfa4ced77862b0847L,0x5a49bdc136d69390L,0x6d9dff06c0215314L } },
45902     /* 25 << 350 */
45903     { { 0xcb116e787b1320bbL,0x6310206258ed15fcL,0x1a7891a082c13108L,
45904         0x203d73d939eb4c93L,0x0485b8493c78c65aL,0x663897e93c935525L },
45905       { 0x9b79708088b41afbL,0xbd34d5134f2b649dL,0x0b4c156f62f6b652L,
45906         0x24125d1d6863dca7L,0x726a8bb2edb6638bL,0x2ec5deaf82aea7a2L } },
45907     /* 26 << 350 */
45908     { { 0x9fb22ca52a3706f1L,0x5a265b5279f5203eL,0xc8844f096fcbd426L,
45909         0x52a165f0ed8a3267L,0xff0b3a00dfdfcac5L,0x80167cf52de9e1c6L },
45910       { 0x9e9c4391b0b969c7L,0x279440c41e0dabf6L,0xaa535b8f85133e39L,
45911         0xef61e22234660228L,0x8ea81a41c386528bL,0xd0bb1f6e71a8c66aL } },
45912     /* 27 << 350 */
45913     { { 0x75a689bfa67ab0ecL,0x53eaad3e54843363L,0xdb71f81619a3ba98L,
45914         0x817257fdc244f33dL,0x8181c028c0fb3720L,0xc813c4651cb7bb39L },
45915       { 0xbc44c1e71b189585L,0xaedef8701eea3a29L,0xcdd828d7ccb5dc90L,
45916         0xd224f1774fd2e0f1L,0x2a4723b0e78883e6L,0x33bb05473128e260L } },
45917     /* 28 << 350 */
45918     { { 0x544874b71477473cL,0x253a455a3907385fL,0xb303afd631411ba1L,
45919         0x30047aa0466d6415L,0x3a1b676594d4c2deL,0xc265f1912860c7b1L },
45920       { 0xfe140a73688e7975L,0xf08a652bf37ce7deL,0x6c9f6df9f46f144eL,
45921         0xf7e7b95bc0defbc4L,0xfbc9a9697824c075L,0x9745d768d7773c39L } },
45922     /* 29 << 350 */
45923     { { 0x7170ab4699873dabL,0x765eb89b8952bc0fL,0xbe3fe2c4f78fd020L,
45924         0xde51f8579f194b70L,0xa625839e7cc68fbbL,0x50e59b49f7105097L },
45925       { 0x625294f3b82e287dL,0x98daa85288ca9d10L,0xfa0eb790b499d9bfL,
45926         0xe280de610382dba8L,0x3fd350e0e76a7d70L,0x1e5c2bebece5ba7aL } },
45927     /* 30 << 350 */
45928     { { 0x73e187e000ce469bL,0x21dc6268dbd717ceL,0xe9d63224ee564ef2L,
45929         0xa7553c854c4c444bL,0xdd409398f6a9b713L,0x902c9cff72f94d6fL },
45930       { 0x944edb33f50a36eaL,0xa48a5ae4cfb65a8aL,0xcb9a83b9ed82fddfL,
45931         0x9476090c209aa829L,0x66cd0cb1c7e2347bL,0x0f1fe07c86fa005bL } },
45932     /* 31 << 350 */
45933     { { 0x7c17a2e0c65e52b9L,0xa987f030615b8325L,0xa39b78aaa3d4dba8L,
45934         0x738ce26396e96e82L,0x313f7bb7f08f99cdL,0x29571b3cd1a1b7c1L },
45935       { 0x00c0e66c89ead6e5L,0x231de4ff19b9874dL,0xc9445296a4137755L,
45936         0x7b95f3ea336ea724L,0x7c0a222c49bfe5a0L,0xa265c41d782f8d4fL } },
45937     /* 32 << 350 */
45938     { { 0xd2db4d35c8d2bf7bL,0x52105d0981571d06L,0x447565cc723a57bfL,
45939         0xd98c3597d8ded62cL,0x0aeac6d9de2f1a9eL,0xd363b0b70a98d3b2L },
45940       { 0xd9708f0702ad9933L,0x9334677564f5809dL,0x499332cf49cda010L,
45941         0x546df74a858467e2L,0x8b84a55093748e8eL,0x9e88ef9706f09073L } },
45942     /* 33 << 350 */
45943     { { 0x1cdc6b4f673d9c55L,0x4300148a0c11743eL,0x2f924ce4c38b8c99L,
45944         0x5300ecc925f32459L,0xb9cd815004473c2cL,0xffee15498eebdcabL },
45945       { 0x42c292d54c537dbcL,0x32f6d8a293a133d0L,0x4da3a50c35dc41a6L,
45946         0xc16dee6a102f9ea4L,0x69a017a1f00d0bd6L,0x6a95ee1527acbc5eL } },
45947     /* 34 << 350 */
45948     { { 0x6c02c17adcb73b47L,0x10073a3454b70b07L,0x417ca218a7fe7a73L,
45949         0x6f81a38e4ab64b0aL,0x4e25301f8fa7fc44L,0x180f3e1b27d41e1eL },
45950       { 0x88925649ce1cfbf5L,0xae279fff2eedaeb9L,0xeac9b033eed426cfL,
45951         0xa8488f8aa1740d49L,0x6f748bc3711b5da7L,0xbb1c46fd23bbe135L } },
45952     /* 35 << 350 */
45953     { { 0x6b2f317b9da70c21L,0xebddc2b5c99dc82dL,0xf4a85d4c5c807d1eL,
45954         0x47a79b298a15ad6eL,0x02afb05befbda553L,0x34f3998e6941a669L },
45955       { 0xa4a413fb72deac14L,0x2bd9306c1941b899L,0xae023fa5788c1db8L,
45956         0x38cd6c42e1012bb6L,0x77ae298c13bd860bL,0x6312af9d63bb40cbL } },
45957     /* 36 << 350 */
45958     { { 0xbb7742f370fcad48L,0x6dcce7ff57d444acL,0xfc338485b6abc122L,
45959         0x03c1118caaf9060bL,0x095dc123cb997905L,0x2dfe24453dd9bee4L },
45960       { 0x9bffbbf9d45cdcdfL,0xc5b50babb4b26fe5L,0xe985754e87d31873L,
45961         0xb5b007f5a503d2e0L,0xe25c4eb620bb8357L,0xb6f00e50803fa8ddL } },
45962     /* 37 << 350 */
45963     { { 0x21cab682b8035f01L,0xec82f6ae301c96c1L,0xf25d6a0c1539a503L,
45964         0x94180ece1e35b449L,0x13fbc96f1ede3c57L,0xe4a63eac01d8e678L },
45965       { 0x3d1a745c068c6886L,0x0659d6ff233be378L,0x493d7a6f3244a214L,
45966         0xfa852b1b772bd953L,0xbf05cc0ce87db547L,0x28f497ccb30aacf9L } },
45967     /* 38 << 350 */
45968     { { 0xa92f28b88ea312ecL,0x9c702e953a3b5f1eL,0xf0a2f787583053edL,
45969         0xf99506f29cb41eceL,0x4c3b00b5c2b5c214L,0x59bb943717b8d5caL },
45970       { 0x9ccc7869af5e6b94L,0x6eb795a7f340d02cL,0x7fc613c80a09eca5L,
45971         0xdac14e61d155f16eL,0xda25c7fcccadb39eL,0x160fda8c9c7fe2b3L } },
45972     /* 39 << 350 */
45973     { { 0x8aa83310312ee9dcL,0x702ad7bc2af291bfL,0x3940f883ec915c5dL,
45974         0xdfb7e44f6fe07c64L,0xa7af875c72d09357L,0xb5df04f4f70b766fL },
45975       { 0x738af1bb96f8b10bL,0xab27b86735563f8eL,0x18fccbec2ebaf570L,
45976         0x94e9066dc1d7d59dL,0xa1e3518dc63373e4L,0x0722fd0f22d8306fL } },
45977     /* 40 << 350 */
45978     { { 0xcd42d2391be93e28L,0x93c11fcae2ea0d1cL,0x8acd0b17345984efL,
45979         0x3e3feaf350905d0dL,0x4124e89a6f35b49cL,0xafdd8d27a2bae979L },
45980       { 0xce1e814015ad5661L,0xb0f9296dde281bc6L,0x11e93935c31ea529L,
45981         0x1c4c3bd7ebb898ffL,0x7cb73fc76ccc32c2L,0x69e5307da3ac9b8bL } },
45982     /* 41 << 350 */
45983     { { 0x37bec50c8e5a9a8fL,0x7f0daba5055a1aa3L,0xa56bc577a1c00a74L,
45984         0x0656b6aeab88258eL,0x2959237fb88f0f0fL,0xffff63bb9ef15ca9L },
45985       { 0xd9a2909eb94ae6c0L,0x2506a1779b304c76L,0x5658fed3abdf17c8L,
45986         0x9c95765e0f90cc53L,0x80ffd7b38e74dc97L,0x97e032e6b8c73479L } },
45987     /* 42 << 350 */
45988     { { 0x7073ada11780b0c7L,0x6d4ce321f35f07d8L,0x27b26ee589f35e5fL,
45989         0x5af10ecd324349d4L,0xf9a0a9071b9bd956L,0x5dde968571350ba0L },
45990       { 0x678158f5b6400a5eL,0x93764a022842e0deL,0x71a17724057c9ff8L,
45991         0x04c4313c72f58c63L,0x07fdf15cc4e81260L,0xd6c25e82a509f1acL } },
45992     /* 43 << 350 */
45993     { { 0x4f8a719ae3cf3138L,0x7aac7f0d9b1a2e30L,0x3fe8dcb88c0c76d0L,
45994         0x34afed4ade0b5be0L,0x824e043cfdf7c28eL,0x5b700afce708e71bL },
45995       { 0x6c7fa728eeffc50dL,0x2488eee97ca62450L,0x25490cb59d969f4eL,
45996         0x8bbbac3d8bd629aeL,0x7e5213b56e75e171L,0x1385bff25324b23bL } },
45997     /* 44 << 350 */
45998     { { 0x364e7371c7d996d5L,0x053390bf8cc483aaL,0x69c23cf281e948d1L,
45999         0x65e45d618e822ec6L,0x9240ee412ed94568L,0xe0f33912510a84cbL },
46000       { 0xad42eb0f6ecabdadL,0xb35afdb4bc7e39f6L,0x4ee63cb10cb50316L,
46001         0x7ccfa14a2a27dc3fL,0x584328f0b4141347L,0x361b2614a23cd89fL } },
46002     /* 45 << 350 */
46003     { { 0xe70edc42ee93ec36L,0xec773e52bccc99efL,0x9b0367a0ce0816e2L,
46004         0x43baad458c6757e4L,0x5d25fa821fb7b01aL,0x65913e86bb6bc3fbL },
46005       { 0xb1f1fcab67fafef2L,0xe5ffd89c9e9261cbL,0x86f7b89ff29bb205L,
46006         0xa76ed6722db408b5L,0xd6f1ce5cf83f53a5L,0x9cb5cd26c2882d51L } },
46007     /* 46 << 350 */
46008     { { 0x03f6ca364b2582d0L,0x70345ae80f8116e4L,0xc2612cbfc562aba3L,
46009         0x9cdd127789898142L,0xea7f202c02d762ccL,0xa00c15da33662a74L },
46010       { 0xcb5cc621aa430b63L,0x6dd1482fb1550d67L,0xb27e7df46216f063L,
46011         0xfffe57408f49403aL,0x9403206cfc2bc9f9L,0x132504014593a578L } },
46012     /* 47 << 350 */
46013     { { 0x6b9c67e6076b2d5bL,0x54509f61883d31d1L,0x25905831fe051be5L,
46014         0xe6633c1be93608f5L,0x284afa7697480e6aL,0xb124e6063a06cc65L },
46015       { 0xcbcb2c2e2c608edaL,0x07a39d8f813795a2L,0xf27742a8bd108bbeL,
46016         0x7425519005b4e5b6L,0xa27620b2b0145a3bL,0x6e3d1210c0f42782L } },
46017     /* 48 << 350 */
46018     { { 0x0eeb9dc702ed3c24L,0xe7cb624dfb39fc44L,0xded105f581d4cceeL,
46019         0xaa675d0c46465cc3L,0x313f4fc99af0a81bL,0xd129819f227e6a72L },
46020       { 0xaa6b690340b16103L,0x3dba75b2fb4c2fdfL,0xc9feeea1e7c79c2aL,
46021         0x14f503104e024e75L,0x3704aaa8b5729449L,0x39ac6b0c24b86accL } },
46022     /* 49 << 350 */
46023     { { 0x7e25860735214575L,0x3baa75cb068c68c2L,0x93b6a33f10be8d33L,
46024         0xa88f3cc11ba06b10L,0xe70e7ec2a4f8fe72L,0x32fed39fd4835710L },
46025       { 0x16137edf3e6059b5L,0x57b1bb9fbb064775L,0x68d3f26dac98cfccL,
46026         0x89339bce7f9fd53fL,0x15b32212825e946fL,0x55b0a89bf92a0ef1L } },
46027     /* 50 << 350 */
46028     { { 0xf419d9becd3eed01L,0x851b31659851492fL,0xa9ac81a9c9b0a402L,
46029         0xf67bdf20122c09acL,0x9b26b131f442a030L,0xf7a548f517e72d1bL },
46030       { 0x9e0dbf852a7f505eL,0xaa8e7348c7e93ff2L,0x4efa7877134d8017L,
46031         0x48f476fc13e5fb0eL,0x552d0447154f4040L,0x8d5b166569b18f6aL } },
46032     /* 51 << 350 */
46033     { { 0x65ef443e63c90cfcL,0x3a0dfb8194ed3ad4L,0x75570ba710b5547dL,
46034         0x5e161fa498e84064L,0xf55dc5003c576f89L,0xe46bd28c7f530eabL },
46035       { 0x367607400109f9c1L,0xde7a997bb15e9598L,0x25386f307593c3d7L,
46036         0x680e3639def120b7L,0x43fab687aa6e213eL,0xce48861daa99cf3bL } },
46037     /* 52 << 350 */
46038     { { 0x93c2cf3e53ead820L,0xfca3b3564f4444e1L,0xeb6d82bfaac7a37dL,
46039         0x9c0915d4cf49947cL,0x771f9f7cc7edadaaL,0x51418e487b2df679L },
46040       { 0xad1b249173f28cf8L,0x8fe4fb7baecacd2aL,0x539764bdb20d0b77L,
46041         0xb0073685a6a4f808L,0x4c6f5602cf909196L,0x1ae89342d45e9e7dL } },
46042     /* 53 << 350 */
46043     { { 0xcf8aa4e5f007985eL,0x833ea882c325d2dfL,0xc1cbaaf5f9f326e8L,
46044         0xe779a4a9bf906c20L,0x29f475bbc923cf15L,0x6598d52a54055b74L },
46045       { 0x1001a5f1e4fbd4f9L,0xb4933d56cc74cc71L,0x45c04a50fed802baL,
46046         0xda140558052bd04cL,0x71c127d63dfbd563L,0xef2b85ba42ebaafcL } },
46047     /* 54 << 350 */
46048     { { 0x76569e44bc325891L,0x8f8a1487fa2604afL,0x07a8bacdbc90be04L,
46049         0xeb53b1087b2c9bb7L,0xcfdc78aaad3c7943L,0xd74807da3bfcd779L },
46050       { 0x642552417189257eL,0x28138e8d23cb9584L,0x0ce0b331476b888dL,
46051         0x6d9ceaa0f2a9bbe5L,0xb4f1185653b872efL,0xfa9e6fb222d06df6L } },
46052     /* 55 << 350 */
46053     { { 0x0d45565ce6eabd52L,0xaca75463f41a4559L,0xc3e4064a846eb291L,
46054         0x22ac04bc8613d2f2L,0x74cf6fac2364ce2cL,0x61bbaca8be4fce3cL },
46055       { 0x302e8117b24dc7b4L,0xa72ae24dd89a053fL,0x75b2023967de96e1L,
46056         0xbe51cfd2a9e6d1bdL,0x807a8e3d07c9259dL,0xcf3cd92e43cf6384L } },
46057     /* 56 << 350 */
46058     { { 0xc040412c754b8669L,0xbda7e0cde2c1d3b4L,0x2ac3b3d5ba29b9beL,
46059         0x98a415e3f63bf3abL,0x25aee93ed1776a16L,0x46db7347ec3bc968L },
46060       { 0x8e44180a02612d2bL,0x4e3dc4e82db990ffL,0x2050f58f5f7705dfL,
46061         0x7b41f5892672d845L,0xeb301603c96e4fecL,0x66ecd24e6cb16a6eL } },
46062     /* 57 << 350 */
46063     { { 0xd428e7e3d01edc1fL,0xef608062873fadf8L,0x05e7c80d5606965eL,
46064         0xb818d0c6a979f826L,0xe9b4c5c7c4793537L,0x7ef637225e83bb66L },
46065       { 0x825d89499fbb3a85L,0x557abf0396e34cabL,0xfc3db05b8040ad0cL,
46066         0xbdc8e907e305204eL,0xdfc1628d1c1637e1L,0x10841d2a947a78deL } },
46067     /* 58 << 350 */
46068     { { 0x99432df309c7b138L,0x288eef14593b1fc1L,0xf47f9fb21b55f0b4L,
46069         0x5cc20dd46788b9a5L,0x2e87fb4605e43a77L,0x08cf86be849c700aL },
46070       { 0x467ec61374680ce7L,0x44e5c8d45884aff8L,0x549f2ea86b33a1a9L,
46071         0x2ebf696a8b4a815dL,0xc1705b152a74323aL,0x930a9fde69745934L } },
46072     /* 59 << 350 */
46073     { { 0xbb11fe102d168ee9L,0xba4aea667f39e124L,0x139364b6fca2841fL,
46074         0x6feef5b13d359df1L,0x4fe89fe19787be92L,0xd4cea92e0f6b6aa9L },
46075       { 0x794006c0039bd8f5L,0xdce0eb5b0be647abL,0xf4a97f7d4e40c1d3L,
46076         0x78d19059d5f7254eL,0x464ddc1d0df22d8bL,0x990b0a39e0fc7628L } },
46077     /* 60 << 350 */
46078     { { 0x72f5a0f70ad3bb67L,0xabb15e3dce6396d8L,0x2ae94788463efba7L,
46079         0xe77b53b41fd4c512L,0x09921a1ca88606cdL,0x1b86b75608e980eaL },
46080       { 0x2def667af3d22731L,0xadebd3a39641b175L,0xc0f35509045da920L,
46081         0x8fbf85e4952b7ca9L,0x4ee7565023517a65L,0xd31eeea30e75a4a4L } },
46082     /* 61 << 350 */
46083     { { 0x6d9a5d3cc4508650L,0xe71fcf32d1a2ac1bL,0x784b9148d62ec2dbL,
46084         0x9a3d5d572088946aL,0xc488178757848c00L,0x2f50a62e0875c1e9L },
46085       { 0xbd23d4aedec0f2dfL,0xc9c28dd5188dad0eL,0xf87ef6460977ba29L,
46086         0x89ce8330ab03e4d7L,0x7dbec90dbcf1a5a9L,0x3ddc39c1f6c2a4d4L } },
46087     /* 62 << 350 */
46088     { { 0x8c0518c7618b787eL,0x6f226212b95734feL,0x3e6cab90c66e138bL,
46089         0x6e56d68037a7c0b8L,0x67a3c7df16f6acbbL,0x43df95107921bb92L },
46090       { 0x967846f6a0887d25L,0xf717017766908fcbL,0x1a8ec350267430d8L,
46091         0xebb46f1a25855c90L,0x73eb78cb396c1714L,0xf766957cdc081e43L } },
46092     /* 63 << 350 */
46093     { { 0x0700da846de27e73L,0xfac9dcfd78c35563L,0x01af330ccd073b09L,
46094         0x0bf5c3b1bb784ceeL,0xd3d9a9ff5d465498L,0x4836b065bde8bafbL },
46095       { 0xf5bf3316329b4cf5L,0x387388fc54a5275fL,0x73e880d8254af26eL,
46096         0x07ebcddc8d05311dL,0xe8b9965a4f46cec2L,0x4f07a4fa01b06069L } },
46097     /* 64 << 350 */
46098     { { 0xc0a40cac52133095L,0xfe1b22fd93c162bbL,0x8625898c34018741L,
46099         0x69c9f3f636d9e57aL,0x69d9d7f3378aa211L,0x6b03f897e7dca168L },
46100       { 0x24d49aebf997a48fL,0x1d984c67c149ac40L,0x667c1d01576f533fL,
46101         0x372eee199ef82eceL,0x577723c0c207c14dL,0x4225907a0eed37f6L } },
46102     /* 0 << 357 */
46103     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
46104       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
46105     /* 1 << 357 */
46106     { { 0xc61db977bc0e0903L,0xbaf6e4da645c32fbL,0xce89b8ca060b1adbL,
46107         0x41db448188e2c178L,0xba6339f3923bdd3cL,0xff25b818d29db42cL },
46108       { 0x3521116ee6d6b35dL,0x4e1bd283b22f16acL,0x9357c984bd79fe5dL,
46109         0x2eda73be9d45eee4L,0x1a50c59f6288e01fL,0x37baf64975018873L } },
46110     /* 2 << 357 */
46111     { { 0xc552c6c6097f322fL,0xdf59a3028bc06287L,0xc9ed375c19610b0cL,
46112         0xf0e7b4ebb051dad5L,0x7267a304c6556643L,0x0044f6d8c96dc1d8L },
46113       { 0xf0ed5f9af4fc3725L,0xbbaf9f2c9de8e1ffL,0xef5d66f4af5a4b4bL,
46114         0x0b5bed3d20644cf2L,0xf7e4543a75ae23c0L,0x696f60dc41325b66L } },
46115     /* 3 << 357 */
46116     { { 0x9949b33d2c20f868L,0xdb3aa790b5706250L,0x88ce71e788e17f2bL,
46117         0xd851baf2da9c0881L,0xe869c5ba86d8c9e9L,0x1af68d65a01425b6L },
46118       { 0xeae8b1c69bbd3963L,0xf34900b1ec087425L,0x14942910c374bb96L,
46119         0x3e13c45705487483L,0xe0e6fad435bc6ee1L,0xc7c38dc7b54d247bL } },
46120     /* 4 << 357 */
46121     { { 0x6d34bdf6ab463fa6L,0x7bb127b60093b9cbL,0x61d051135a3bfdd0L,
46122         0x4abab575f1296bddL,0x72da68494d2e9a7cL,0x90267bca8d11f03dL },
46123       { 0x478111223e9b310bL,0x8ffe91d31b1920cdL,0xec293ec67521898eL,
46124         0xf0cf026996c1da75L,0xb0dbd4c380f2c7b3L,0xe528175534e4baf8L } },
46125     /* 5 << 357 */
46126     { { 0x7ce1ce36189e2f1bL,0x36ca8fe3fa84ca41L,0x54cc2c13a6a568e4L,
46127         0x1967d9ed25a6d223L,0xf8d20c88537252afL,0x5a58936cac3d697cL },
46128       { 0xa2659671b0084ffeL,0x08a9e041ec25bb0eL,0x6bd405ed4074ccedL,
46129         0xaeebb470dacb5503L,0x6f18e32bd5448d3eL,0x0412973ba94cd45dL } },
46130     /* 6 << 357 */
46131     { { 0xd72fcc3742fb1cd7L,0xadfb8967c49c359dL,0x6dc988a55935bb0dL,
46132         0x3fb10981e3080802L,0x12c4494f3be161ceL,0x5a0e22d44b649dd0L },
46133       { 0x5c57cbfd62a85259L,0x7ad55b3c0e5ab7a2L,0xcd53564928de30e7L,
46134         0xce35e6e76867e6a7L,0x626810562f6716fbL,0xd8b4ff26a88d3bf8L } },
46135     /* 7 << 357 */
46136     { { 0x5949ddfa53abe7a9L,0x944a2ae0716f63a6L,0x90961922675d1f43L,
46137         0x36c41c12f5b55722L,0x85b8250f7782775eL,0x89a3a733748663beL },
46138       { 0xd4358450475d2d88L,0x4183f45e1beef8adL,0xee3bfe8b06ec8d58L,
46139         0x2e462b1609cc4d82L,0xf9cc307ec6148e1dL,0x70d3b2f77b1281a3L } },
46140     /* 8 << 357 */
46141     { { 0xc32730e8dd14d47eL,0xcdc1fd42c0f01e0fL,0x2bacfdbf3f5cd846L,
46142         0x45f364167272d4ddL,0xdd813a795eb75776L,0xb57885e450997be2L },
46143       { 0xda054e2bdb8c9829L,0x4161d820aab5a594L,0x4c428f31026116a3L,
46144         0x372af9a0dcd85e91L,0xfda6e903673adc2dL,0x4526b8aca8db59e6L } },
46145     /* 9 << 357 */
46146     { { 0xf0467111e854f886L,0xe228021d8dc6117fL,0x07ff954cac432e28L,
46147         0x373be2ef31d9b69bL,0xaa214d016fd61f0aL,0x27bb7932f950b029L },
46148       { 0x1caa914f967c97f0L,0xfb133ec0d548897dL,0x598514173cfad251L,
46149         0xd41d1da432d14208L,0x446c79f2cee424ceL,0x8b5272a175e839a5L } },
46150     /* 10 << 357 */
46151     { { 0x26b5e85d62f50c12L,0x8418cecf5ff562d5L,0x0d35b4d459be698eL,
46152         0xd79ca9ee93730d2eL,0x2414d99325627fe5L,0xe31dc5293fc64803L },
46153       { 0x5c9100d60d027a12L,0x9004ee36f2208db5L,0xe734b13b135d02bdL,
46154         0xf905c01a7bc09b60L,0x4eb51557b21b68fdL,0xe6e98bea8c583359L } },
46155     /* 11 << 357 */
46156     { { 0x14dbcf1a61dae7e6L,0x559a7b52ea0da075L,0x7391545d439d10d6L,
46157         0x187e00e675e617abL,0x453b546b5142355dL,0x9bdbddbc84bca97aL },
46158       { 0x742a699591e5035dL,0xcf86d3e1831209ddL,0x6fb66757f5f2a999L,
46159         0x2e360aeff0e71f2dL,0x6c6f71f2dc97114aL,0xef686b8b17c3a3dcL } },
46160     /* 12 << 357 */
46161     { { 0x7d07a61d13b5ea74L,0x7f4b7157c8afecd9L,0xefce9c89820b0298L,
46162         0xe85c4510e3888d59L,0x9cd3352001234b9cL,0xba2692c0fef767e8L },
46163       { 0xd2bea3d45b3ca353L,0x9ad478e5b51a704aL,0x1fc9bd0d9426f25bL,
46164         0x52f930bf864a1ba4L,0x559f36353765ff27L,0x548c7f0dae28479fL } },
46165     /* 13 << 357 */
46166     { { 0x6296d54f68b0df62L,0xace420ee9e6afdd4L,0xa20a510dfcd1812fL,
46167         0x488f113a8cd04a29L,0x1bee07640765cb70L,0x50bb5c446d0f44e5L },
46168       { 0x5ea842cb7e320ebfL,0xa6e0c1e6e795a7fbL,0x89cd1f765e7e79c9L,
46169         0x7436ec1e87ce6c5dL,0x1376222de28309f9L,0x9ed7d6fb7f01548aL } },
46170     /* 14 << 357 */
46171     { { 0x32e9740ae2fb0467L,0x3a7a32b3ec039d67L,0x630d8d346a425a7cL,
46172         0xc9af74ae418a7dd0L,0xc903576daf502870L,0x7e02b3b7e98cce5dL },
46173       { 0x0bfdee7a158f005bL,0x88eff4a363b91d59L,0xf23079728bfe3ed3L,
46174         0xc75536bce6b1fb4cL,0xf61a82e1a04d46fbL,0x771a8fedfddd52a5L } },
46175     /* 15 << 357 */
46176     { { 0xf5efc82065af5b94L,0xd618a9e8ce5535a2L,0x70cfb112cda6249cL,
46177         0x6986f00f9f217280L,0x41e46ce605faa951L,0x2abb39f3a3ad613cL },
46178       { 0x3e04b28b07671c94L,0x61d323ac53cdaf80L,0x2389875cbb9580f8L,
46179         0x64800835febb0b34L,0xdaebba99d0d21027L,0x0f1cebfc23288a7fL } },
46180     /* 16 << 357 */
46181     { { 0x51a033a5cecb916fL,0x2ac62f638d7de61cL,0x92eece49a42a266eL,
46182         0x87e037db82c4d11eL,0x875be1416fbae08aL,0xf348fe26c539478cL },
46183       { 0x51f8b907ff94c01eL,0xc46cc0e019695a9dL,0x2c74bd666c51b9c2L,
46184         0x635d3d24ee565de8L,0x6bd656638982c8c3L,0x5c345b79daf6a93cL } },
46185     /* 17 << 357 */
46186     { { 0xee7265ee93f081dcL,0xe8f90a6be03493f4L,0x4e8d10275328b0b8L,
46187         0x13bb82bb96fa0930L,0x764c2915d1f7d5a7L,0x1896c78f73476481L },
46188       { 0xe9a34ff267873b76L,0x8a9a719cfa0afda4L,0xce93d4cc9ccb715aL,
46189         0x9ba00f011495d1ffL,0x3131e6666df0e119L,0xe68e1815c902ac6bL } },
46190     /* 18 << 357 */
46191     { { 0x0ce4ae1044f4a2dbL,0xa8645e2310bcc5c6L,0x6d9728b5e489762fL,
46192         0xd365c12a9d46ad88L,0xedf484fee1a527aeL,0xfdf5c519e5be2bb1L },
46193       { 0x4706cc2870a3d4e3L,0x07c60129065f1506L,0x42e2e16478298553L,
46194         0xa56a2bd5bae646dbL,0x893bf45c61437e62L,0x97dbf9266c525900L } },
46195     /* 19 << 357 */
46196     { { 0x65c56764b52213c3L,0xa171ba9d97aefe9aL,0x5904e8c934336916L,
46197         0x727209b6ff187f05L,0xaf4e50525cb68a5bL,0xb46a6abadc4319feL },
46198       { 0xfd48d0d57890cd90L,0x5b0b68c7252942daL,0xc41023352b01887bL,
46199         0x582251eb5ad09a7dL,0xbd79b557e1312726L,0x9f5ee3788057db5cL } },
46200     /* 20 << 357 */
46201     { { 0xa30486a6666fdcc5L,0x5cb7f7ce84056f89L,0x0f8a6b96505636a5L,
46202         0xfeafdf97c6624ce2L,0x9dade91c55b8a7d6L,0x3d009219ca2b459fL },
46203       { 0x483549845a969337L,0x37d57cbd323c09adL,0x32a91e91e74b9e74L,
46204         0xdb4f18ff1c317c24L,0xf9f0daf342418667L,0x735a1eb946946667L } },
46205     /* 21 << 357 */
46206     { { 0xb395bfd1c8eaa54bL,0x8181d6262ee25219L,0xf4bf437b38d912f1L,
46207         0xf9f1161228a8b32eL,0xe359adacc2be5c61L,0x71557ea2971b60c9L },
46208       { 0xf071404b1b00cf1eL,0xb163c3608da3141fL,0xd9dedc07a8d51d98L,
46209         0x29e89ac5ac827b74L,0xc38cef633ef35dfbL,0x9abd281097d477f1L } },
46210     /* 22 << 357 */
46211     { { 0xb34e560f0e6d9646L,0x4fc05a0dc0ba033fL,0xc9f5e040ddc1bcc8L,
46212         0xf723b78ab92068cbL,0xd558f5912b5c7030L,0xb16bdec774ed778bL },
46213       { 0xc12aacc3b32980e0L,0x856e90411daaa32cL,0x34f7a28596429db4L,
46214         0xcc2c61ea415dcd04L,0xa0e192cb46b7d996L,0x5b7c845d55d87ce9L } },
46215     /* 23 << 357 */
46216     { { 0x9ba0a26fc0ee684eL,0x1b871ac353573254L,0x76a094bc5783e706L,
46217         0xe78bea66dcc01e8fL,0x7e20c5aedfb74e56L,0xbdc5314a8710f0e6L },
46218       { 0x2bcc7a0085f2233aL,0xc58dd45b8aba1575L,0xdd1c6b78e411b6d8L,
46219         0xbb8d19529d23d2eaL,0x5293f3cc0066c9cbL,0xb7d0d7b0249c6d93L } },
46220     /* 24 << 357 */
46221     { { 0x68fe359de23a8472L,0x43eb12bd4ce3c101L,0x0ec652c3fc704935L,
46222         0x1eeff1f952e4e22dL,0xba6777cb083e3adaL,0xab52d7dc8befc871L },
46223       { 0x4ede689f497cbd59L,0xc8ae42b927577dd9L,0xe0f080517ab83c27L,
46224         0x1f3d5f252c8c1f48L,0x57991607af241aacL,0xc4458b0ab8a337e0L } },
46225     /* 25 << 357 */
46226     { { 0x614c4bc273041ddfL,0x4fef1cf6364135aaL,0x2c9ac204ecf0e610L,
46227         0x75a302a991a6dce1L,0xa5899c96651ec9f9L,0x6c5384f64bcad1a6L },
46228       { 0xa41012e560f705ebL,0xfcf6512235e85d67L,0x2fdcfc235ced3638L,
46229         0xf834fac02deac34aL,0xf5a64ec510a8ad80L,0x843855e1a412c4feL } },
46230     /* 26 << 357 */
46231     { { 0x440dfebd76ca517aL,0x79924057c577eb59L,0xf1aea290d038a921L,
46232         0x77afb37fb0c95974L,0x48a5b9a715763d44L,0x713de85155c8683eL },
46233       { 0x250e8f8239d7e1deL,0xc5f1f61c8a2c846bL,0xf26ea6f9faafd017L,
46234         0x8ad26055f9d7cd35L,0xc980ba773b2df598L,0xe23b7eabd5e299a3L } },
46235     /* 27 << 357 */
46236     { { 0x5d37811464744605L,0xfab096990278c1f0L,0xc4d32b208448c344L,
46237         0x767a24d2d7d1df17L,0x842de148773ea0fdL,0x73d7dfbdff6e40b4L },
46238       { 0x3d61439283576d1cL,0x4820c435ec865519L,0xf99e84dd6bfa5e48L,
46239         0xeb18687a9d0d2adcL,0xc3b7369da7fd75d2L,0x7e332b5739f5f093L } },
46240     /* 28 << 357 */
46241     { { 0x0796a8b6ec13d2acL,0x19036c255677347dL,0x2f0d36eef527c827L,
46242         0x7c8a3d17ca61ed60L,0x3920bc68748cf7c2L,0x61835bdf9018b300L },
46243       { 0x9cf595c1689d5826L,0xdc547999fb51aea5L,0x11bb04120fc297c6L,
46244         0x88770df2b2f9fe0eL,0x99e031f5f6856a85L,0xbb59e8c7afe29c50L } },
46245     /* 29 << 357 */
46246     { { 0x714e784820dfc5f8L,0x35cde8ae2a2265bcL,0xf6b29ce4bfc32fecL,
46247         0xbd5e91f1918043a5L,0xd3766f8b60f8c218L,0x273c41935298904cL },
46248       { 0x0a76492d5d441fb5L,0x99cb3b1d164d9275L,0xb2be87c80ac7935eL,
46249         0xbd1a1b3f0962981bL,0x8a0c207b96d0df2dL,0x1bb1e505929752d9L } },
46250     /* 30 << 357 */
46251     { { 0xa574de94621b2705L,0x0d0ca1b73e3f2227L,0xbdc9ddf2e49bc2d8L,
46252         0xfbc7254309d314f0L,0xf5900cbb827e0b1dL,0x3994eadd8a7e8164L },
46253       { 0x2e7949793046f170L,0xde21ddc3c6883cc6L,0x9ea19d34bcd40da7L,
46254         0xb4334df8f01a9ae5L,0x801496ebce8c53c7L,0xc2a5e8527a4b0601L } },
46255     /* 31 << 357 */
46256     { { 0x435a6c512ecf62d2L,0x757cd8f6559a6a0cL,0x47833f815e4c0d40L,
46257         0x2d0b48047d960c6aL,0xf5474833473d5eb3L,0x70264154bf756b52L },
46258       { 0xcc46e58d940bfb7cL,0x2e0dd3a69c89d48aL,0x483f3ee19387df66L,
46259         0xb3097da4585d3600L,0x82d64b4d76411ef9L,0x0df7d95719682e87L } },
46260     /* 32 << 357 */
46261     { { 0x179c59cf210c3144L,0xfb613c5733eebbc4L,0xdda75cfdba0cf384L,
46262         0x94081a5b3a8fbafaL,0xb91de90a33384e0bL,0x7d1f8f4027aa2a45L },
46263       { 0x0747bcc162031148L,0xd2db8e39f324160bL,0x9c1ce3e9722484f0L,
46264         0x13a7ee5da62d1ddaL,0x77fd79343a963bceL,0xcd3d871783d2f21bL } },
46265     /* 33 << 357 */
46266     { { 0xc7c8eedc93a27196L,0x0832b0dfa8abe585L,0x31fe11e8d8adfb86L,
46267         0x1091601e9d50e4c7L,0x7931a284ac3d2ca4L,0x0f1464b6f3fc6641L },
46268       { 0x2ead94f3260f29a7L,0x914b8396d88a7696L,0x950be4bbe73d807dL,
46269         0x26d0115e5b3ad83dL,0x3de8a73146c22525L,0xe50825dac5fffff1L } },
46270     /* 34 << 357 */
46271     { { 0x716378cae4b98aa8L,0xacf8d67b59b746a9L,0x78f0b5eca65ce8ebL,
46272         0xe5997983523cfa35L,0x85bf5badbeba89e3L,0xc8052bbfcfd73b41L },
46273       { 0x0b3d77139fb311a3L,0x821a20e2d96f696fL,0x0f087e5744657c9aL,
46274         0x72031f281ecfea36L,0xd0765f333f32b010L,0x0412c69929c48643L } },
46275     /* 35 << 357 */
46276     { { 0x53d361b89f501481L,0x8970937717153c6fL,0xb52280b916bb8d8cL,
46277         0x5985cdc0b33dabd6L,0x35ba0cd9dca8ae72L,0xf55c6e7301bc4efdL },
46278       { 0x2106ed2f269577c4L,0x4cc34291bfe765b4L,0x9f4168ea812eb958L,
46279         0x02869228999ba5cdL,0xff91540d3ab27498L,0x9020e6e158e55a79L } },
46280     /* 36 << 357 */
46281     { { 0x1a5b15377f1c7cbdL,0x5b31930b7cc17c56L,0x5b91e1a492cc8cf5L,
46282         0x970e43deeca08bdeL,0x36424bfe0e2e963bL,0x2e49534968b1a489L },
46283       { 0xe350ca52d8e85a9aL,0x3cb9f599ae2cdd7cL,0x0ff35a0aa83215ecL,
46284         0x64cf57b81973a966L,0x128be6cd36b26702L,0x8067afbd5f65f7bdL } },
46285     /* 37 << 357 */
46286     { { 0x23d1f49215876c71L,0xafb21c1d41e7495bL,0xdb3ab62c2705885dL,
46287         0x20ff803f7ba216cdL,0x26cb190699c9ee55L,0x8280dc9c0fb05389L },
46288       { 0xadf55171df1020dfL,0xc044e9bcbd011b5cL,0xe21aaa60cbed2430L,
46289         0x5939fe583336df4dL,0xfa306816ff78c665L,0xba92ca8243eb18f2L } },
46290     /* 38 << 357 */
46291     { { 0x6f05e6241b7edb64L,0xc280105b6681f48fL,0xd1b94413f993dc9eL,
46292         0x84f24c01e46de412L,0x092017d54abbf7dbL,0xb73193a56f7b1b08L },
46293       { 0x22a7c5765195ae46L,0x81dd6b12610c28efL,0x61959874ad7bfcc1L,
46294         0x3ade0a77d15f8cf9L,0x124cef4d954db624L,0x0733bd7a5c247650L } },
46295     /* 39 << 357 */
46296     { { 0x52d7f9ddf1cee098L,0x538b7fa17a6a2ad1L,0x5f2294312911e75aL,
46297         0x71c337b7e6ef0271L,0x5e278a1267ee72d1L,0x7b348c756f33fea9L },
46298       { 0x7bb59f1a694bb928L,0x5783e43f292b258aL,0xe3b53ca77181f1d2L,
46299         0x028ba90e051c7d2eL,0x4bb06f9364789d76L,0xcf97fc4da228a7a7L } },
46300     /* 40 << 357 */
46301     { { 0x3dbb3fa651dd1ba9L,0xe53c1c4d545e960bL,0x35ac6574793ce803L,
46302         0xb2697dc783dbce4fL,0xe35c5bf2e13cf6b0L,0x35034280b0c4a164L },
46303       { 0xaa490908d9c0d3c1L,0x2cce614dcb4d2e90L,0xf646e96c54d504e4L,
46304         0xd74e7541b73310a3L,0xead7159618bde5daL,0x96e7f4a8aa09aef7L } },
46305     /* 41 << 357 */
46306     { { 0xdf5c2fa79111caacL,0x493ada25b04d2b3aL,0x5c4850bfa39a7872L,
46307         0xbeae16c067e07e93L,0x63bd7d390178358dL,0x7a7e56a1cfe0bcd0L },
46308       { 0x9ba7a4500816b666L,0xea6c70c8dae070dfL,0x84013756832c2b35L,
46309         0xa28e5dd08d3e9fc3L,0xd67665aac653c08fL,0xee54d7b6aa6bdff8L } },
46310     /* 42 << 357 */
46311     { { 0x99b870afadbd24baL,0xb34fa9083bee289fL,0x4a20f29bae836fa4L,
46312         0x4188ed5024b464c3L,0xfb93f48fc6c00297L,0x334b8689736186ecL },
46313       { 0xbf7f1c424e1016f1L,0xf95e6e59413ca088L,0x5878156c288912d8L,
46314         0x9e99199704c7ce69L,0x0f0c185d5d6520d1L,0x1ed2ece33fe6f498L } },
46315     /* 43 << 357 */
46316     { { 0x319fb249607cfd40L,0x5920056f62b40e28L,0x9ab4528058631ab5L,
46317         0xb527738f413452d2L,0xb2885e46b296e602L,0xb1dcf41a74824807L },
46318       { 0xca9d2b06b2ad2fc6L,0x500c5f11ad05eeceL,0xca94160f21f3db6aL,
46319         0x693adf4e262470d6L,0x1f4c62c5480b0cffL,0xb3ebf11f54c748e4L } },
46320     /* 44 << 357 */
46321     { { 0xc8ae4d2bb4ef93b3L,0x4967da7b99758d99L,0xd1483a1fe04db9baL,
46322         0xf5e657df3033474dL,0xdd9371c89db4b96fL,0xb5f288956044b259L },
46323       { 0xe8987a43b2ec27bdL,0xaabb1ae68fce67bcL,0x4518fa3eb2b97680L,
46324         0xa0142a13748591e1L,0xf9148ab96c2db557L,0x65592253e0e4f9e7L } },
46325     /* 45 << 357 */
46326     { { 0x21163809bccf41d8L,0x0eafed515b3f09d1L,0x3b5360d9d84b27f6L,
46327         0xee752fd04411d37aL,0x1cea3b5c6a3f5027L,0xb206e74d9454d9f6L },
46328       { 0x710715dab52af43dL,0x8175ca136e6c6463L,0xbdb123d39689144dL,
46329         0x569e6edd4d9c459fL,0x070f09a4f02e5b25L,0x691c23ef3d79a7b9L } },
46330     /* 46 << 357 */
46331     { { 0xc0c94165781356cbL,0xcb9fb705876a839bL,0xfe23f07e89db25feL,
46332         0x710f0fa3a52cec3bL,0xb0ab363073e0f037L,0x3b79a8167c9aa037L },
46333       { 0xdbc7f83ca1f13fe1L,0x8bd910c63d653a81L,0x2e54ad408c78d003L,
46334         0x0de02157a3e9ccf0L,0xe9081e8bf7670dfbL,0x6a2ad476c8647bc8L } },
46335     /* 47 << 357 */
46336     { { 0xaf58106ebf047836L,0xadc3245e195e5675L,0x75612e175290e051L,
46337         0x27b81bd869d46bb9L,0x9d4dad5b5417b5faL,0x19850d70fd024259L },
46338       { 0x987daa604b0a86b5L,0x5d5a5f9c0358a944L,0x9008682f48d2ff67L,
46339         0xc9db4d4b89e81cf9L,0x133516bc850eaae4L,0x0b5bfdc81da8bd19L } },
46340     /* 48 << 357 */
46341     { { 0x609deb162d8bcd6eL,0xe42f23a92591750dL,0x4a9f3132b378305cL,
46342         0xf101799869275f5eL,0x14be746761b089b5L,0x05f620d20c81b0c5L },
46343       { 0xca90a9c06cb8412eL,0xfe0f6a8915b1b0d5L,0x1b25ac9620c71988L,
46344         0xb971b61a390aedd0L,0x995214d779d8cd39L,0xd7fa135b65c6e11aL } },
46345     /* 49 << 357 */
46346     { { 0x5aaa98f875330325L,0xc900a7781f3541a6L,0x69bcf864174a3200L,
46347         0x3abc5ef71c46b3e2L,0xa53c9e4e47851b97L,0xc166a4e22acdc42eL },
46348       { 0x49e4e6fdb19b4678L,0x4fe02cb162b7da19L,0x575c61a6633153feL,
46349         0x49578b28a4f83b70L,0xc6840d063737532cL,0x93047d40480f55b9L } },
46350     /* 50 << 357 */
46351     { { 0x835be7417d930332L,0xa4d001bb2cd86fc4L,0xef141e30a6e3a24dL,
46352         0x4047620adc328d2eL,0x5c80a3bc9a5f1f12L,0x6cde5e4ca19b423cL },
46353       { 0xcdd5d7773ba0fa5cL,0xb96dbe62ea85c28eL,0x963c02245c804896L,
46354         0xb2a581abe5dd6b98L,0x28a908a2abc8dac4L,0x5834b212985fd18fL } },
46355     /* 51 << 357 */
46356     { { 0x02757b1f0fbe0c5dL,0x2d0d05a854ef99e2L,0x2bda526d0377ffa0L,
46357         0x58ca8b08925985afL,0x1fb7dbe727b69722L,0x322d7db5f1c57fe5L },
46358       { 0x4049c8bcfdf111f3L,0x0b4712974148b027L,0x34fcb1e58782dab0L,
46359         0x697dc9431665557cL,0x3ae30e2844659ba2L,0x479dbc2f118e7417L } },
46360     /* 52 << 357 */
46361     { { 0x10b10d86227e8607L,0xe83536281d1be36aL,0xe34068f9d952b0e9L,
46362         0x148eeb38fdb6ea99L,0x82657d605547e7ebL,0x9c35dc82a86155eeL },
46363       { 0x408f79262060a81aL,0xf2a79205a6282e8aL,0x10dbb58526e70e7cL,
46364         0xd636f8225df85d6cL,0x03202c027682b922L,0x31323940baf18500L } },
46365     /* 53 << 357 */
46366     { { 0x5882374401879796L,0x068943ccd1249281L,0x20dec1c12e1d6effL,
46367         0x5f4c2c070bdddecdL,0xc56d52b37ee724c3L,0x93bc2c7a559e25ddL },
46368       { 0x0c95d2e5f98a9940L,0xc570e96ada60a809L,0x94c4a964076233eeL,
46369         0x843c99627dbbc526L,0xe4075129d4cdc652L,0x0afff70561cb2698L } },
46370     /* 54 << 357 */
46371     { { 0x3ec1e3a5f607f893L,0xd476dd24054aaa8cL,0x2cb92280a93488abL,
46372         0xc8d1207710d1dc68L,0x564839b9bfb494e6L,0x7a13930ceabdfe56L },
46373       { 0x52f72a9724f9b183L,0x30ae4bc87e9c6fc3L,0x3d7d2765f35b8e6cL,
46374         0x701f3d89a665ba55L,0x98f2fe85c466111bL,0x338073600c1c0dadL } },
46375     /* 55 << 357 */
46376     { { 0x7dd106bab3a48d42L,0x7eac4690ebfc75aeL,0xdbf3547e68ef4ea3L,
46377         0x3629c438a1a5faa2L,0xac2aa55e653bfd97L,0xae5cc39752c3b8f9L },
46378       { 0x117380552853b626L,0xd5a955f224a0dfe2L,0xc4356ca25940233eL,
46379         0x73f7eda97994aedfL,0x2bfa76c693b185d9L,0x091cef91a0327108L } },
46380     /* 56 << 357 */
46381     { { 0xa8393a245d6e5f48L,0x2c8d7ea2f9175ce8L,0xd8824e0255a20268L,
46382         0x9dd9a272a446bcc6L,0xc929cded5351499bL,0xea5ad9eccfe76535L },
46383       { 0x26f3d7d9dc32d001L,0x51c3be8343eb9689L,0x91fdcc06759e6ddbL,
46384         0xac2e1904e302b891L,0xad25c645c207e1f7L,0x28a70f0dab3deb4aL } },
46385     /* 57 << 357 */
46386     { { 0xf5dafec85f102704L,0x2f3b6b6929f5b946L,0x84472c029d4c9979L,
46387         0xed49f3e6341f0150L,0x3ee3432eb3bb085fL,0x84c553183cbac42eL },
46388       { 0xbb358bd9dc4c7ffaL,0x0713917d2db356ccL,0xc73e9fd0670c7139L,
46389         0x87600c4c3581108eL,0x2ae731d7586af51dL,0x30630ad6614c126eL } },
46390     /* 58 << 357 */
46391     { { 0x15f8fba7712c0edfL,0x4a1f93baa2c363ceL,0xfabca37e8f2948a4L,
46392         0x652922e4dd765560L,0x2da78559220cb98bL,0xb797746a54b940c4L },
46393       { 0x8535fcfc591bb7faL,0x58857815c25376e3L,0xcd8db789da627557L,
46394         0x718072ca318512b7L,0x92266469813efd94L,0x3217649aafa85382L } },
46395     /* 59 << 357 */
46396     { { 0xd517b39e51c4bf28L,0x6614c16261f583a3L,0x79c72f414739ea59L,
46397         0x597e1c2ff76e80f8L,0x3a72b05e7b846f3aL,0x1849e5126c0a45a2L },
46398       { 0x79a6ea5b9d506d83L,0xc48e570219b7f46eL,0xc89c5047c524bb48L,
46399         0xafc1fdd99cb88cfdL,0xb07eaaa0b82056e6L,0x60f6544f05885df8L } },
46400     /* 60 << 357 */
46401     { { 0x9894ef75f39e2738L,0xac585d07b40db6ecL,0x07d9e938c4cfdb92L,
46402         0xda174933737f1a7fL,0xa4f1fb65484031a6L,0xa96d9f612c21b546L },
46403       { 0xaf981519d24ccee0L,0x238de6de9d53b571L,0x09afc481fd78c3ffL,
46404         0x4351715d9ea7f6fbL,0x91a02325b14a7320L,0xcd8958d8bbb6346aL } },
46405     /* 61 << 357 */
46406     { { 0x22ef4217452ae6a0L,0x3192309d9ced837aL,0x773585ed2ba43ee9L,
46407         0xa9b29d94f3379e81L,0x43838b3aa6835e44L,0x1afe27ab0c7b2336L },
46408       { 0xca1dc61683ecd230L,0xc9e8b95e6d235df5L,0x9667829b2af11adeL,
46409         0x27254b0fbe532148L,0xb50bc3c86d233f14L,0x30e0e450bb35d985L } },
46410     /* 62 << 357 */
46411     { { 0x8b3f79087b95cf32L,0x67c654b06272c619L,0x61160a9d22c0f46eL,
46412         0x1cce95721d2e36ccL,0x62bd951d3990db3cL,0xcf0005c8d9700d14L },
46413       { 0x304aff9c70116120L,0x1c919dd2b08d57ceL,0x841b058ec0c0c0b0L,
46414         0x7cfd4deb7af05aa2L,0x4fbd13c57b11ce5bL,0x03e07dc9f8259bebL } },
46415     /* 63 << 357 */
46416     { { 0xe9b37f569d0703e0L,0x7b5e0df5f83c215bL,0x7fbb40f0d3c21efcL,
46417         0x87a2ff119fb33620L,0x208b062bd1176635L,0x806bc549950d30efL },
46418       { 0x862de3a4ae2bf355L,0x917b06bacf9ef6e8L,0x55f1ec4cadacc178L,
46419         0xbcd679fc81d752fbL,0x9404d6ce65a00270L,0x25ce99e6000c6e1fL } },
46420     /* 64 << 357 */
46421     { { 0xa13f19b40f3ff12dL,0x57ee08b1019564aaL,0x00ec0c997044a6f4L,
46422         0xaf5665f8dca1075cL,0xded5ca3f0620ab0cL,0x9b2cb8c7a896deffL },
46423       { 0x032ab2b307df2345L,0x964d109ef1da3f88L,0x2286b6f725133304L,
46424         0x0d16d531977a4567L,0x00a66036f1abae4fL,0x5debab1d95f0103bL } },
46425     /* 0 << 364 */
46426     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
46427       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
46428     /* 1 << 364 */
46429     { { 0xf2cdae3196230a58L,0x47cf36b4f304e1eaL,0x9d14f25ad750b29bL,
46430         0x931b9c65dba15f3eL,0x34db169ebf9fe2ddL,0x8a89e47c52663433L },
46431       { 0x8859a4f8026ec31fL,0xeeb703eaa913ceeaL,0x74638d6a67ac4db7L,
46432         0x5c8ea7b2be25d755L,0x8a0f0a8738db10eeL,0x96a26bace890bcd3L } },
46433     /* 2 << 364 */
46434     { { 0x883533af64a5e869L,0xaaa778c26973ec23L,0x8f0b5fb546d0fcf3L,
46435         0x7e6b0a0a4ab05da7L,0xcd91a869c67b6614L,0x7de9f2ff6c6f7cf2L },
46436       { 0xc072a106d1ec14c3L,0x3f4b960642a128eeL,0x7378192c8f0ce946L,
46437         0xdf2e7b9fd1149441L,0x4fa17cb614ccf45aL,0x575680e945f03568L } },
46438     /* 3 << 364 */
46439     { { 0x0f4ca7803374f910L,0x5948ae98fedc5b5bL,0x4873625b4ef805afL,
46440         0xbddba22fc015c586L,0x7091b50aa41a8c93L,0x721dd3384c005f42L },
46441       { 0xf43d37462065f41dL,0xd16bae3e172512b3L,0x3efca10c8277068fL,
46442         0xd0c25d7b77513f00L,0xc0015cc12dc3af9bL,0xdf11a4ec94c6cadaL } },
46443     /* 4 << 364 */
46444     { { 0x8b70e94f8f458c68L,0x292726544160ecc7L,0xe22219ba4d3ef22fL,
46445         0x7f8a712a1999f948L,0x25575e96abfe7302L,0x21c6ffc6564a1af0L },
46446       { 0x045e9c667e8500daL,0xef7c3cf704ef8ea6L,0xdd23b825c3db161aL,
46447         0x05fb173aba33a906L,0x9a8b5ecb870e41f2L,0xf3d9db0bccc30d1dL } },
46448     /* 5 << 364 */
46449     { { 0xbed7d94ca1bf2c8cL,0xbb7f437cb8b719ddL,0x65416af6106834bfL,
46450         0xdade8a144c4f7448L,0x62227a1d881dfc06L,0x37bc7de58dc2b7bcL },
46451       { 0x4f11541712ce030bL,0x72439d8ac2a9e0d6L,0x98cc53aba0f1b961L,
46452         0x2f68011d48b0ec8eL,0x4bbc34679c72d034L,0x0320c1469c576e38L } },
46453     /* 6 << 364 */
46454     { { 0xd9243926e873ff0fL,0x2e2a5ab6f20b0e49L,0xa1bcfeee0e35f201L,
46455         0xd25be5f3196f23f3L,0x298c67f2ffc1d068L,0x77dae55c0c3d950bL },
46456       { 0x5e15ab998822c996L,0x52de2e6d83f60a98L,0xa9f82ec947a7e269L,
46457         0xf02af9a22ac22e49L,0xdfb3103fa706f090L,0x125599623cf8dcb0L } },
46458     /* 7 << 364 */
46459     { { 0x9f5f44fa666e278fL,0x53c88803f5582c78L,0xd7e8f258f9627f9cL,
46460         0x22499dc938fd51bdL,0xa9d7497c846a4a79L,0x791b8ead026ae250L },
46461       { 0x84d47d19db15ff63L,0xb58a82c0267b44b5L,0x9b2f138806a52e30L,
46462         0x3fc8da027f08953fL,0x22d074d292fcac08L,0xb9c7c3db701d73fcL } },
46463     /* 8 << 364 */
46464     { { 0xb7b8562588ad12b2L,0x81f5958b1e44b254L,0xb4ebddd5c91b8ffdL,
46465         0xef815ae155d38511L,0x98587d551b0da525L,0x1d41817734a9ebbdL },
46466       { 0x844811fb1e6057d7L,0x0c16977176e5976dL,0x4b268bb4f623789bL,
46467         0xb26ae5be40498058L,0xb47a5ded3c2b435aL,0xe15a684b8fceceb3L } },
46468     /* 9 << 364 */
46469     { { 0xd55407583353db48L,0x0e334ccac0c0b5e9L,0x679a935f270c48d3L,
46470         0x170693e436ef0e90L,0xc72fb12f9de59023L,0xaae13a0e9371697cL },
46471       { 0xe98ed704d8d56e4dL,0xc6de5384eb71f091L,0xba63adccc6d905a8L,
46472         0xc84e614d66e40dd4L,0x15dcf1a3fa0f55e3L,0x4e26ee3af157c7a1L } },
46473     /* 10 << 364 */
46474     { { 0x122a3eedd09dc3c8L,0x6a19907faefe0819L,0x057aafa1da325339L,
46475         0x138033bdd42a5345L,0x8ac206af1a065ebeL,0x0a46f5ae25c31ed6L },
46476       { 0x7fc577a9d7e379dbL,0xc6df694369dcee54L,0x4c167ba2a8336bc1L,
46477         0x0fbd9708f3a1339cL,0xc6b8c01f226f612fL,0x5d4ed789d51332e1L } },
46478     /* 11 << 364 */
46479     { { 0x67ead4e0f6a40814L,0x42fe051ca2ec9ae1L,0xc09f84395eba62cdL,
46480         0x7bb5ba0c9d8e7305L,0x85962d0db46f81abL,0xc7183752628b18ebL },
46481       { 0x7a1f023edf58ec0cL,0xf21bfdbaab6535dfL,0x12add590801d2481L,
46482         0x1fccd1e37a11520aL,0xf83caddd6fa8f8e2L,0x99e7256c24e58433L } },
46483     /* 12 << 364 */
46484     { { 0x26aa2c2e5a1abcd8L,0x2b16a12e9609d9d8L,0xe485a551a2bee00cL,
46485         0xfa28c30bf4f2292eL,0x99abef78b7358f1bL,0xda6b3cdf10a276a1L },
46486       { 0xbd3858b747c03f71L,0x4f0bf5f0b22d05d1L,0x2d80f5d28250f760L,
46487         0x060f9b278cd9666cL,0x6a6c40b0b1b014a9L,0x44537af38c440a9eL } },
46488     /* 13 << 364 */
46489     { { 0xce1c070a2275263dL,0x2723b3d149cea971L,0xedca02f5817001b6L,
46490         0x5c160e9349c946e4L,0x273b4952458a5265L,0xc7bcd7c610385173L },
46491       { 0x22cddfd17fb08b14L,0x959d5dfe10f73d01L,0x900f5f348e387351L,
46492         0x6d7381dfdadb8695L,0x8dff2b193aeafba6L,0xe4a8d6bd8adadc36L } },
46493     /* 14 << 364 */
46494     { { 0xb564cfd676faaca5L,0x8a6e3925920dd223L,0xee59a140a590a383L,
46495         0x9e29b552a1922ad9L,0x604367de60a0da63L,0xc498aca592c35fd0L },
46496       { 0x74135082250ed8a0L,0x5d109d1a6c7c3e77L,0xf9e2d84dc63dff94L,
46497         0xca50f5e4f7aa2b0eL,0x7cba9e87d543d389L,0xaf5fbbefd8fd1292L } },
46498     /* 15 << 364 */
46499     { { 0x3163e2e895bcc345L,0x4ceaaf2d80d9a931L,0x4d2dc44b2f621612L,
46500         0x2a5f60b86cc8ffd0L,0xf49038cf7e8c9434L,0xb580b8c508015b8fL },
46501       { 0x4283ec01d52af80bL,0xac9dc35f99076245L,0x38785f7bd64c3dd8L,
46502         0xca19c17623bf8915L,0xd778291370478260L,0xc1e48e6816e34149L } },
46503     /* 16 << 364 */
46504     { { 0x707656834fc11c3aL,0x53a9403166aac4d1L,0x2a935ef0a6db6169L,
46505         0x002927612032d599L,0xb5babb2d3a6f1316L,0x601a7dfadb26af51L },
46506       { 0x00c340131322d983L,0x45b062ec2bb507c5L,0xa1bbe2ed0f9b3656L,
46507         0xe17a5d4934031d18L,0xe3661047f8fe1224L,0x0e4f3b3d623c6cf5L } },
46508     /* 17 << 364 */
46509     { { 0xb335d83c7c3b8c3cL,0x01eb94f059359a67L,0x3a8359a6aef3ffa0L,
46510         0xb0270076ecd2d862L,0xc946b1610377e30eL,0x9a5506c282bd6ae1L },
46511       { 0x737bdad0218512dbL,0x449238633487fb13L,0x36026dd12a8e7907L,
46512         0xb67bdc80784811eeL,0x9f92cc2405c90646L,0x02c551554c370746L } },
46513     /* 18 << 364 */
46514     { { 0xffaac084ca45cccfL,0xaea5cc3d061ffe3cL,0x7c5d7c60b355f387L,
46515         0x4bbb2a0c99cba92dL,0x6b4ba3ef2f7768d6L,0xc7484ed2cc5f9c40L },
46516       { 0x5d4e92fc52b57a7eL,0xba9f16c4ca2c200bL,0xebe02a8a3797ccbaL,
46517         0xb6b3f42138c4133aL,0xad5d85b68153d033L,0x782d6ee85714f269L } },
46518     /* 19 << 364 */
46519     { { 0x4654991087f226ccL,0x97894d5fc7bfffcbL,0x94f67786b3cabb83L,
46520         0xa6abaa960d788dc4L,0x08ae72d61723738dL,0x5003f41d86704dfeL },
46521       { 0x67687c3d40fb0a3cL,0x6fdc98c9b43320aeL,0x0f22572fdeb08964L,
46522         0x05bb02a4c8002624L,0x4c5adb7f987c2991L,0x3f1c6dddef4e60cdL } },
46523     /* 20 << 364 */
46524     { { 0x7845b6969c0cf752L,0xb82d052b5a732acfL,0x7760564c1262877bL,
46525         0x29b3c57a8ecc7aa5L,0xb58eccb0df1ebbedL,0x86fc15443c3a3303L },
46526       { 0x44761ddf13060f0eL,0x5a3dacfd7371a5a8L,0x846f6faaf7cbc2bcL,
46527         0xf5e098b0368caabfL,0xe23ea10710c08769L,0xbc5df1db1563fcdaL } },
46528     /* 21 << 364 */
46529     { { 0x75647f6476638edbL,0xb76ceb04aad6e25bL,0x33c73367d9393a41L,
46530         0x8396726dc55f0feeL,0xe1cbd48e751b3d43L,0xb779c5bdf47141a3L },
46531       { 0x122b85434eab6097L,0xeabacf45e08c6fa4L,0xdb32eab7769f49cfL,
46532         0xf956976a04ac2cb4L,0xf55c6fcb5ea8e71aL,0xd72940dfbad47ea9L } },
46533     /* 22 << 364 */
46534     { { 0x65c3a54e142d8955L,0x5c6583cce7814f25L,0xbd5a07d8d924dc7dL,
46535         0x9f717bd9c28f6e8eL,0xa0c4ec4e3b6540a7L,0x3153bb2b142b3283L },
46536       { 0x53bf403c9b296946L,0x659a828ab1cdb6d2L,0xe9517d811369af19L,
46537         0xd8c7a0998990e7a0L,0xbaa9f59de535cd04L,0xbb0cc68e0f269551L } },
46538     /* 23 << 364 */
46539     { { 0x2b4a0e69d0cd5fc2L,0xeb8dd25981167a94L,0x356198ae61b73503L,
46540         0xb159ca12e5289d45L,0x99d71c97991765b5L,0xce3a3b6c198e10b0L },
46541       { 0xcf6ee0bcafbb512eL,0x4aadd1381e19b49aL,0xcf6a9cf3b4806f0aL,
46542         0x6aff0386ad688bb4L,0xea487c6e4f2e5065L,0xec200f4b56573b51L } },
46543     /* 24 << 364 */
46544     { { 0x3c00ac526a78c6e5L,0x9c61aca6defaa52cL,0x0034128939794a09L,
46545         0xe08910d141cd7c0aL,0xa58ffbb6a732e3bcL,0x87bf51ab91fe8fd8L },
46546       { 0xc4f4f2674a59e2beL,0xdeb512c7438071c8L,0xddf82842e9cd290bL,
46547         0x3e17311d6ae85fe0L,0x6e9236a9b41be881L,0xbb9ddf9853555ebfL } },
46548     /* 25 << 364 */
46549     { { 0x07d2df1162bb0e3aL,0xe74ce211ce469affL,0x9629d7d4756b5a83L,
46550         0x61d2a633aefd449eL,0xd39a6afe491e503bL,0x0f1568d14d2b2ed7L },
46551       { 0x8216304cd19611bbL,0x6df99bbeb27388daL,0x2b0f60c0b7a3b4beL,
46552         0xcff84c1c7dadf840L,0x470201e28a9f8a49L,0xcda3693c21afc717L } },
46553     /* 26 << 364 */
46554     { { 0xccc163ea09f3f0beL,0x9932b56f6a5b0a63L,0xf89fae919c69668eL,
46555         0x555f98215ce13021L,0x4b02693f37037aa9L,0xc4afee79bde50f35L },
46556       { 0x4b0919c202aa6c7aL,0x3166de2a991e15e9L,0x284baa3e7077fb38L,
46557         0xbb7a6416a116ddecL,0xe8c89547b7636772L,0xff9403620ef92c54L } },
46558     /* 27 << 364 */
46559     { { 0xcd183e8bd3ea4c3cL,0xc8ce2f2154b7ac32L,0x75387e04be960826L,
46560         0xaf878400f2e39f5dL,0x7fcefcd94fa628f7L,0x76eb621c34582cbbL },
46561       { 0x44e1f848f29d2496L,0x42aa36174ab4eb21L,0x43cead840c08b50aL,
46562         0xfa4ecf60dd44f7c2L,0x5ac9ffd59f817546L,0xec11567eabcc594dL } },
46563     /* 28 << 364 */
46564     { { 0xd5d81275e2ce6008L,0xc45bdf250b3b9d10L,0x15ab5da36cbc83e2L,
46565         0x85a18cf8c52a66cbL,0x77e202b8b042c047L,0xc4dc3de2e7e7997eL },
46566       { 0xfe9335b1995fa67aL,0x809e161d75b96a00L,0xfb03c2a5a0c3baeaL,
46567         0x5c7e0523888c2f77L,0xa8fda1c887ad10e2L,0x90484f78858a3577L } },
46568     /* 29 << 364 */
46569     { { 0xefc5aa2681bf26c9L,0xdbe91f606bf105bcL,0x0d70c4d4369dd3aaL,
46570         0x2b357b847af9bf66L,0x4293e9a01f27f163L,0xc846f67cb3eaeddeL },
46571       { 0x4556bb787da305dfL,0x4ecebf83a5a26bf9L,0x8e05af924c1bc430L,
46572         0x4f3bdaba70f80402L,0xccaccfd3cf204577L,0x8fdee135a0c42d1aL } },
46573     /* 30 << 364 */
46574     { { 0x49e41f0af9fde126L,0xec9600443613d3c2L,0x2c62a49d10421d3bL,
46575         0xe24024648131a0d8L,0x8a7ce188bdf794fcL,0x704dea7d4665b1b6L },
46576       { 0xbdb9c18e4d57c6baL,0x5288a053f669b3c0L,0xbf7d01b878a5e252L,
46577         0xb26cccf926b9cb7dL,0x14191a3284326c47L,0x460ff74791f8425bL } },
46578     /* 31 << 364 */
46579     { { 0xb9958c5397698b9bL,0xe1f74292c27f96ffL,0x172b0d50806da6bfL,
46580         0xaf3d889ddd38b97eL,0xe7a75ea409c688daL,0x1f0951b85c631b2aL },
46581       { 0xdad8b2adda1c111eL,0xbacb9cc832813338L,0x30b8336b10582abaL,
46582         0x0ff3d7549494e71cL,0x8d99be5cd663ed6dL,0x8eb412cf7073a941L } },
46583     /* 32 << 364 */
46584     { { 0x59367582bd27be7bL,0x92bf5bbc1ab2c596L,0x5d96351af6a27741L,
46585         0xeab94db87f929e0dL,0x865ba011043f1afbL,0x43acea125fb631ddL },
46586       { 0x192e0652b2fd1436L,0x44f22ff17b38d121L,0x7bcc228db7cae5f6L,
46587         0x02eaeccd6a828b03L,0x7c48a2ea91f301aaL,0x1e090717f5eb1a07L } },
46588     /* 33 << 364 */
46589     { { 0x4c7f41b4609c6818L,0x978c2a561c82b3c4L,0x68404f1d7f6ba836L,
46590         0x91e056d0c863aa7cL,0x0b24599ba2261804L,0x16e9060dcdd7596fL },
46591       { 0x42aa49434eff004eL,0xb99408690438f1e4L,0x28299e8581775712L,
46592         0x498998eb83be6877L,0x84273d9e91328a67L,0xb7e9076e9a87bc8cL } },
46593     /* 34 << 364 */
46594     { { 0xe8d204865e5aea08L,0xaa946076addc7ba0L,0xc0153a9bb6a5cabdL,
46595         0x622271bd4fbe43e0L,0x44de159cbd62e5cfL,0xefca41112b9b63f8L },
46596       { 0x30774d3cf5269928L,0x4fbb7ff84ac0c8b6L,0xe0611f1f8839106aL,
46597         0x5d4121204ffa4a64L,0x9552c123e86251c0L,0x57d029680efbdb14L } },
46598     /* 35 << 364 */
46599     { { 0xdf3f8e06d7aeacd2L,0x725b25fe4d0e7af3L,0x1794f0da5c17392dL,
46600         0xabc807dac977ff46L,0xd90e6c8f0d5ca66fL,0xaf8eb526c2d26d49L },
46601       { 0x4661962e8a8efa37L,0x2a2cbeade87ad53aL,0xa57d34b1ce3ff40fL,
46602         0x1190437dc6aa3067L,0x92c31e779db66b47L,0x86a8ee0f8e8a70d4L } },
46603     /* 36 << 364 */
46604     { { 0x7b65bb14de97229eL,0xad6e3fee4c6d35b8L,0xfcbbf6afbee3f5d8L,
46605         0xb51549ca4a438fe3L,0xe66e615d437d531dL,0x9ee793eabf168624L },
46606       { 0x796789b0f8878a84L,0x3d38950dd32ec2ecL,0x74c37196a638d45bL,
46607         0x35d318327aeedaf0L,0x082c44f046a001e5L,0x93fae5cf89886220L } },
46608     /* 37 << 364 */
46609     { { 0x8e585fea499b635cL,0x60afcb3566781e83L,0x06594d9267482257L,
46610         0xb9f6101128773448L,0xba9ef7102817fd2aL,0x494e05b2aad046c8L },
46611       { 0x65d804fc1614e265L,0x1b0884c6d97fe002L,0xd7d34f60875bcc2dL,
46612         0xf34725444b440852L,0x49386bfb95591325L,0xe3966f4ccf68a142L } },
46613     /* 38 << 364 */
46614     { { 0xa5f3bc6cea06320dL,0x1bf855c637ad6e7eL,0xce7ff06ec58befadL,
46615         0xcf0d22cf1c2c0478L,0xf53e473e75616621L,0x00539f8700829986L },
46616       { 0x45398355844866d3L,0xbade46a2d710bc63L,0x6b3da567d4e2641fL,
46617         0xff70185978fd963cL,0x2eefaabaa5bc18a6L,0x61eeca92eb64cd49L } },
46618     /* 39 << 364 */
46619     { { 0xdf7c7c0b4cd4c82fL,0x67a26a97188ab9dcL,0x58c5bd74dd189cebL,
46620         0x3e1e93a9bb6409f2L,0x0d18a8bca6bb744bL,0xad3eafb45328dcf0L },
46621       { 0xacd15db5e311dfe8L,0x13a1c10ac1e849bdL,0xfaaa7227e1e73aa5L,
46622         0xa4cd2400e33d4665L,0xb9be68d9d6d527b4L,0xfe282bc05efbfc40L } },
46623     /* 40 << 364 */
46624     { { 0x159b38e17f8fd522L,0xf3ea27b5755e2bd8L,0xfaa52efebf11ac90L,
46625         0xc2014b892cb9f6dfL,0xa711c179d8baa5d6L,0x5474c1ceb22c2f27L },
46626       { 0x3cbc74cb031d05d9L,0xddd97ca6c44e469aL,0x21b386a647db83e5L,
46627         0xd1431c7b7abc0595L,0xbc05d009a416a325L,0x1c29eb709da53e92L } },
46628     /* 41 << 364 */
46629     { { 0x7f1aaf98181ce8a0L,0xa890cd3b6caa5b6cL,0x5d78dfaa5fbeac66L,
46630         0x36c63cef3d3d4594L,0x6f89ac3ec36d117aL,0xce9095640fc90e27L },
46631       { 0xaa356b1ac127aa76L,0xfa42cc119d181455L,0xbe4622fcd27f5ab7L,
46632         0x58d924542c3d54f7L,0x78a84f6b07e93c24L,0x5bf7cd278bce9a46L } },
46633     /* 42 << 364 */
46634     { { 0x4bde9ce5f810db3bL,0xec4a74b7281552edL,0xf5b4fa5fee085bb0L,
46635         0xb07a62936192c8b2L,0x163ff0d1fb18d219L,0x8d4b5e1d8e0ce753L },
46636       { 0xbfa6211baebcbf50L,0x1ed6d4b4fecc19eeL,0xbf6d514b82393e94L,
46637         0x90b356c1711e7d6fL,0x87b28dc2f975139bL,0xc41900648d8bebe9L } },
46638     /* 43 << 364 */
46639     { { 0x3468af53e8d49368L,0xa0a07369ff825262L,0xfad134fd662958f7L,
46640         0x5be79c00ce900822L,0x4909a56c44bde5abL,0xc2e8c4df4862e335L },
46641       { 0xd5e9b9386e7e41f5L,0xd3828d424fe474afL,0x058b2723cef44adaL,
46642         0xc74ac74617eebe66L,0xc3e6e014bca4416cL,0x2e30bc88167c2e86L } },
46643     /* 44 << 364 */
46644     { { 0x68211ba4969c2c58L,0x7a34733977f218e4L,0x0237eb3696ea1d64L,
46645         0xdc97f94b7416f3caL,0x63aa82e476bf9e52L,0x4b88a32d388465baL },
46646       { 0x7322d9f44adc7579L,0x70c01c7fb24d28f6L,0xdf7f4213c7517ecaL,
46647         0x42c027f0a8db6d56L,0x2708360eb6c2f8baL,0xf20690d1c2dde09eL } },
46648     /* 45 << 364 */
46649     { { 0xf139c3e3bc6158ceL,0x19207b6a4c86b780L,0x55af3eb977c036b1L,
46650         0xd192686abd563ebdL,0x8bd0afb05550266dL,0xaaa7376d83bf81bfL },
46651       { 0x26aa74ae4a114541L,0xd92549dfbb6745ecL,0x6ad6a14ec6bbfbd0L,
46652         0x63fee75b411771f3L,0x111ae3101938e8b5L,0xce3e5e346c363756L } },
46653     /* 46 << 364 */
46654     { { 0x2a53c88ae0a45b56L,0x26367466da72228fL,0xdd65516edfdbb135L,
46655         0x5fe254e82d7e37bfL,0xc0f5cbe433ef39e3L,0x249b7e3ece85effeL },
46656       { 0x85951a5391ffba8aL,0x41117672c8dd5ec6L,0x7a74538d9dbb0761L,
46657         0x0b35fba0cfb06ddcL,0x8c36be4d1a0aca2aL,0xbf884a8e45848e1dL } },
46658     /* 47 << 364 */
46659     { { 0x191eef31788596c8L,0xa7413be65a2d0ef8L,0x30894fcc5c3c09e1L,
46660         0x6b0e429b2f72a333L,0xceea52a1e70470e2L,0xfc638b316b682db2L },
46661       { 0x31af73cd615f7f21L,0xb31663760094996eL,0x7ec37e33dfff756dL,
46662         0x38c50101d9b63a4cL,0xa517c6df192f18e4L,0xd674c53a841fb337L } },
46663     /* 48 << 364 */
46664     { { 0x4dd3bd842446fc6aL,0x4654b82ef25ab510L,0x1ad46998ba066896L,
46665         0xb7c679acad713bbdL,0xef9389aff7ca4fa5L,0x1b864105d68b6a1cL },
46666       { 0x3acfff604b6f5ea4L,0x81ef58f7b9e5a475L,0x5e2f6441c66ad734L,
46667         0x49f144c42fd3eb16L,0xbd7f22082e4e2117L,0x30865994417911a3L } },
46668     /* 49 << 364 */
46669     { { 0xc2f25d9e80d2adb5L,0xa0e77dc5242430feL,0x7f30e54b4f504e97L,
46670         0xdc114db4680ca2cbL,0xf76fae57adec4d89L,0x06f892eff313535fL },
46671       { 0x50af729a9a266407L,0xb0cbc4f0764dffd1L,0x153ff8f8d20c2e19L,
46672         0x27fa845a7388d22fL,0x26e08ef5d784e057L,0xccbe49ee53b5dfc0L } },
46673     /* 50 << 364 */
46674     { { 0x6fa8e5ff3082ceb5L,0x81f4dd02ef4850ccL,0x626b324456483f9aL,
46675         0xc0acbd8782e65652L,0xf9bef3117e23f93eL,0xc2474777c2310f6fL },
46676       { 0x6b4617704379fd64L,0x2f8fc599f18c3b14L,0x2287f1d0bd076aedL,
46677         0x9f8eac0fef366016L,0x517cd2e371fd845dL,0x0fc2f219a30c371dL } },
46678     /* 51 << 364 */
46679     { { 0xfea0464721c56ce8L,0x4f7b055b6a32a26bL,0xf8c8d93e487ed396L,
46680         0xe620b440855f4df9L,0xa3f6f21dea870c14L,0x0518225207dad127L },
46681       { 0xbdfb7b12c68ab5f6L,0x5f58bdd7fc68f296L,0x2df9cfc505e4fdc2L,
46682         0xed12a102379c282cL,0xd388362654d8de77L,0xaefb0f7fb01065afL } },
46683     /* 52 << 364 */
46684     { { 0xdc64f8d23d80d738L,0x7ae74ab1d95a1c6dL,0x4dba93a8dd46de0dL,
46685         0x271aeb870fddbd1dL,0x1bab6546e9e7ed31L,0xe6445d22efec8f37L },
46686       { 0xd927df1797a718a7L,0x738c2450351b1ceaL,0x3809e595d51a7422L,
46687         0x4f8d5ea58969456cL,0x74d9168421c9ad95L,0x59a69f8f4f796a11L } },
46688     /* 53 << 364 */
46689     { { 0x2542fcf1f07717aaL,0x032abb3f405a7717L,0xc757e6e294cade8cL,
46690         0xad4776adf2e84dd1L,0xb7e277243d5e397bL,0x173894a605f8921cL },
46691       { 0x0e3a78531f6afc3fL,0xf33732b8ad62482fL,0xa6b4e0f03e4cb6e9L,
46692         0x51ba565eda02264aL,0xd0afaa4600f3f376L,0xf5506a1e35252e93L } },
46693     /* 54 << 364 */
46694     { { 0x3574783b5ea1c662L,0x675894e514fadc8dL,0x64dd63935ac6ea7fL,
46695         0xa76c00dc77f16c96L,0xf73ef2c62eb9574cL,0xdd39a89a2e408008L },
46696       { 0xbef8c8c72bafa10bL,0xa31f030a074733f8L,0x5620dda5445b4b6dL,
46697         0x4e08fb0173040ab8L,0x0a279f38598ad48aL,0x03e8b55e2d40d775L } },
46698     /* 55 << 364 */
46699     { { 0xf49d4d54c20c8610L,0x1b1d70bbc0d62b65L,0x524d3a0c16285ce2L,
46700         0x0be553b08a0785b4L,0x9b93e5093c84975aL,0xbeac761160769465L },
46701       { 0xffaaffcb3331dd0aL,0xad0f01542d70fcf1L,0x65aaabab66fe24bcL,
46702         0x283edb562cab253eL,0x1659deca80383c87L,0x06de45fd83fc6d7cL } },
46703     /* 56 << 364 */
46704     { { 0x7bcb055d5f76c311L,0xdb2d05878e293aaaL,0xb15036e7207360b4L,
46705         0xbc38cc9f163f0ae4L,0x5a942f85a44d0a0eL,0xee8633a23f553a88L },
46706       { 0xf66b65c5c9bd4ee7L,0x7a4ca96a80b8ceefL,0x7b71cc55f6f08036L,
46707         0xc0408b198c41be7cL,0x885fd72f80860d93L,0x338a567be7f68b7bL } },
46708     /* 57 << 364 */
46709     { { 0xcba302e939d99b60L,0x2557b3d903b8faa0L,0x2a99cd6e9efc4461L,
46710         0x03ce3e08268f14a3L,0x59226a83b1c68a01L,0x81a18c69fe379976L },
46711       { 0xfdfc9f148af62557L,0x0cdf327140b2d4ebL,0xf99ff3ded26c6085L,
46712         0x2c138ffdf9b0273cL,0x393d6de6888dfbd3L,0x75903c68e5cc102bL } },
46713     /* 58 << 364 */
46714     { { 0x0c56d477b78a7b91L,0xbedff933c7c3ecf4L,0xe02da64223ead65aL,
46715         0xf7e7cc19a8162300L,0x3719fb8f2f3dbd03L,0x4f150cb8cff88c59L },
46716       { 0xa564c5eda7fcb233L,0x9b042870b6a41ca7L,0xf253b65ac1615f1aL,
46717         0x9ccb49a7b8aaff46L,0x38bbc5f7af0086fdL,0x688f7c2054a6d8a9L } },
46718     /* 59 << 364 */
46719     { { 0x3702c5e5d22a0892L,0xf17510a28d510809L,0x5c36dc68bfdab4e7L,
46720         0xf72c9357623a98e4L,0xc660fc5146624a0cL,0xf0b4983d3e64dd4cL },
46721       { 0x5cb98cc9a5ecf45eL,0x79759acdf5082a78L,0xfd0daf366e7321dfL,
46722         0xf61c54f7f1ebcacaL,0x782e5e74b8f665c4L,0xb1d54c2145d78c08L } },
46723     /* 60 << 364 */
46724     { { 0xb64f3b9bef1af123L,0xc86dc5ffe1b75401L,0xc3a76d81d928e989L,
46725         0x075005abff8ca002L,0xca6226325c3cd8b1L,0x017a97b2bd8f772aL },
46726       { 0x187eb635039c4757L,0x9eb7a9d1e905c6e5L,0xdacb98bfbc251cceL,
46727         0xe357c60e8704c639L,0x50563b8558fd987aL,0xb2f89c864cea5d4bL } },
46728     /* 61 << 364 */
46729     { { 0x3d13c0bfd32233faL,0x997c424145aceb7cL,0x77ff5a75ed2e9df0L,
46730         0xc4279aa23c91d085L,0x5a11a276ca0392c7L,0x928e06032daae653L },
46731       { 0x21fe225fc4046f85L,0x591fa82f512dbfb4L,0xb5b01a3f51aa53feL,
46732         0x900012ef7133befbL,0x24609da17130c15dL,0x3c4a09b33d2549faL } },
46733     /* 62 << 364 */
46734     { { 0xcdd3073d3ceabe32L,0x56e155bc5a848977L,0x07f4c7c6da48eef6L,
46735         0x00a2f9f79e021b38L,0xeb683e17ffc4bd6bL,0xa7d6b87592b7e240L },
46736       { 0x651d21de7e48836eL,0xf9c9ede775de3c75L,0x72cea748d90f2634L,
46737         0x29d8022283fc524aL,0x1e412b510dd044faL,0x1b9b332a76a04fdfL } },
46738     /* 63 << 364 */
46739     { { 0x4dc8421f06f49d8cL,0x6a3fd9a83f979e4cL,0x50b0e3760b51bd69L,
46740         0xec22f486a592313eL,0x5e4663ff8e8904d4L,0xde7b9e23f3362548L },
46741       { 0xa1ad270d1ab757abL,0xb91fd935a3089f6aL,0x1d6b1524a635f996L,
46742         0x8673f8e29c718c6dL,0x0e04360725932b9fL,0xb5d0447222ac239fL } },
46743     /* 64 << 364 */
46744     { { 0xdf0ae8df941948e3L,0x123fee901d010bcdL,0xde3717ca1dd28691L,
46745         0x0c1db879709b678eL,0x0288959a400acdc6L,0x66c691815ca2d03aL },
46746       { 0xe52534b3dbbb75deL,0xe914938c3de927cfL,0x1a9a34f873eece30L,
46747         0x0fb0c7bd642a6799L,0x375cc0cfeaa7e8a8L,0x75fb9eb5d00ec238L } },
46748     /* 0 << 371 */
46749     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
46750       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
46751     /* 1 << 371 */
46752     { { 0x9ca8cc9db72958ebL,0x3c8cd0db1014f562L,0x72115d53059b2bbaL,
46753         0x8fe7ac30730e5dc3L,0x4e67ef69841d8998L,0xfb6439ffc8ed37a5L },
46754       { 0x48164b3e26df84c4L,0x37d492ad365bc99eL,0xb7fd4643beed38ceL,
46755         0x993cfa9fa3e30b3dL,0xdcc5e7af01ddd484L,0x5edf3ac06840175dL } },
46756     /* 2 << 371 */
46757     { { 0x79768e9f51d33c11L,0xeec34505a4b24889L,0xc194821bbe0c67d7L,
46758         0x537a6a4a6909fdfcL,0xae6d705195ccdda7L,0xed4b722292b3926cL },
46759       { 0x2c5dd6af6b24a3d4L,0x9282ec39e4386095L,0xdd3c7388397a3bd3L,
46760         0x9d176c6a8baf59c2L,0xd5c6219e380ec958L,0x194fc11654e8e315L } },
46761     /* 3 << 371 */
46762     { { 0x0b7576f901ec1432L,0x84b30eecabc5f603L,0xdaaf7ba9f4a84b7aL,
46763         0x9e3a5daa3bb37a99L,0x56bd964880378cffL,0x2fdeeeb78e6ed856L },
46764       { 0x079014a73c81ac34L,0xf8de4004b4211c27L,0x0cee3df97fe4391eL,
46765         0x441aa7fb2fd2fc38L,0xeba7be864d1b575aL,0xca2fb5b7231c2d01L } },
46766     /* 4 << 371 */
46767     { { 0x0683349e463a8251L,0x97dc4f475103e72cL,0x47c7181050663b9eL,
46768         0xf327d1499733dac6L,0x03f55e4a292137c5L,0xccc6232ada59e1c7L },
46769       { 0xbaa8b4ddadc59cb8L,0x45370d35fe7486e4L,0x99a88c1db0322df9L,
46770         0x394440a7fd69954fL,0x9060473da5a29889L,0xc8ca43e32f04864aL } },
46771     /* 5 << 371 */
46772     { { 0xd5c7241add8b9644L,0x45a5f2d1993116d2L,0xbacacd4a823048dfL,
46773         0xa278fa042568547aL,0x3a4f2482bff72820L,0x1305d1a713e4314aL },
46774       { 0x9d84c33334ba28e3L,0x9995b5bb6a32fb41L,0xb0f75f3c520946d8L,
46775         0xd7c4b8b7de98aa63L,0xee5efcf3ba856b6bL,0x36af33683324ed66L } },
46776     /* 6 << 371 */
46777     { { 0x90762c1f5827fe2cL,0x20160f7aeaffda88L,0x7420849f5c47c645L,
46778         0xb08231956d72e748L,0xaeac683b8ee11773L,0x8c2a0a79fb5c550eL },
46779       { 0x6d986d696c07cc1eL,0x57269140ba8398b9L,0xd13e136fd94d5223L,
46780         0x1aa75419ed5b01c6L,0x7c2014b1408fcdccL,0x0680a985cffde5eeL } },
46781     /* 7 << 371 */
46782     { { 0x92fc9a3342c5a7eeL,0x8768614af9f0ed71L,0x1ea5f7ed87ebfb66L,
46783         0x296852ded361069cL,0x1cec6f1a0192498eL,0xbfd4858fa9cca3aaL },
46784       { 0xfba98c242ef240e8L,0xc8b500e4ab635d9fL,0x9f49c572913a3eddL,
46785         0xe6181f93d42b2d4dL,0xf96b5db26aa77fa3L,0xdfb2241fe43558d8L } },
46786     /* 8 << 371 */
46787     { { 0xc7d0abb2edee15a5L,0x72dc0105228cc4a1L,0xeb67defca80767deL,
46788         0x6fa174d871820908L,0x3215df485674d19aL,0xf944531a960a081aL },
46789       { 0x93ed7180ef2cce62L,0xb318edbfc8bcfc0dL,0x0909d56efe787e58L,
46790         0x5ae74fc98fe8b96fL,0x8fc342c435ab6811L,0x6fc6cc5c0b991e0cL } },
46791     /* 9 << 371 */
46792     { { 0xa8eaba6e291f689dL,0xfbfa9a2cdea0cba9L,0x5b1b4a21727bfa11L,
46793         0x3b69505fac59c8c4L,0xb06290c89368ddb2L,0x4181abc294bcc14aL },
46794       { 0xa19f65813e29d997L,0xab1ae8408864aac2L,0xb04a24300fcc9ae8L,
46795         0x3ca2428e1059e4dbL,0xe288731117e1e01dL,0x1f5d4164be56238fL } },
46796     /* 10 << 371 */
46797     { { 0xc600dd57354416d9L,0x6f5840991f829d6bL,0x2d7b0a27de43c1d6L,
46798         0x21bf3a9e616bdb16L,0x33ce767c96297953L,0x99bf97b69e4398b2L },
46799       { 0x4069cced8d441287L,0x52e0edd6bf01017dL,0x9981bf89c5394236L,
46800         0x07d9c079acb24e38L,0xd2e5e904a2da4735L,0x4c3c12162f1b6cd9L } },
46801     /* 11 << 371 */
46802     { { 0x1f28bd0de6f1c85cL,0x4a49d0864e6f3db6L,0xc9a8e70c4ef7d981L,
46803         0xde8abcf2682bc68eL,0xd0ef89a4a66cbee3L,0xfa03108432df7f0fL },
46804       { 0xe361e0f803594856L,0x1f423bafc985c77fL,0x50397b67010ee4acL,
46805         0x502f4a20c0a48e96L,0x260bed875435539eL,0xdae03cefa0391250L } },
46806     /* 12 << 371 */
46807     { { 0xfeecc6e83be5ba68L,0x3293dbda40445158L,0x48454e20e81879caL,
46808         0xd0ea9cb89c4a2712L,0xba8b6f33540749c3L,0x95e6d6e3e971df93L },
46809       { 0x4c2a1b13478a2eb5L,0x8b5f9af330b92170L,0xe6c60b5343573986L,
46810         0xb9f56a6a57040c00L,0x6de6489f6291a7b4L,0xa9a7784653bc3246L } },
46811     /* 13 << 371 */
46812     { { 0x0dd4172f9025411fL,0x978e952ac6129de8L,0x9afa974bc7ab7609L,
46813         0x7bd29a644e42f223L,0xc0232f5f3deb639bL,0xacce69d05f39a264L },
46814       { 0xdaee07cb3070b24cL,0xe3adc8556b532246L,0xae5935ce1e6ee4f6L,
46815         0xba9c4329ea018a45L,0xa1a4002e6b97ee9dL,0x98390aab8a9460cbL } },
46816     /* 14 << 371 */
46817     { { 0x828a9dbe67154a02L,0x57a3af981866aadfL,0x1558428089faa581L,
46818         0x2da092202dba2a1dL,0xa225f631df197ae6L,0x0abff5cf8f4ebabbL },
46819       { 0xbbadc9b3b98e5e4eL,0x7c7cc36e4509f98fL,0x072a6cc2759413f6L,
46820         0x7b39ea4121dd1222L,0xd6baf9e196ac2c73L,0xee38818c75d46296L } },
46821     /* 15 << 371 */
46822     { { 0x19befeacfa37c53fL,0x32c29b361f95c29aL,0x1d282db40d5aeafdL,
46823         0x8812b6c8f102a97eL,0x1cd4a23c8402f481L,0xbfdf7b6b8eddec81L },
46824       { 0xc8039ae0616b2654L,0xdc6f38acabd23a57L,0x2431c763f147dd44L,
46825         0x7c45ed50d795bc37L,0xdbc30ab9842022aeL,0x568f7d4ba1f05a43L } },
46826     /* 16 << 371 */
46827     { { 0x55671129542f4e90L,0x43bedccf0623d4cdL,0x7e21207ce99ca16bL,
46828         0x785fa1057c7a26b9L,0x33c28658c2c3ab00L,0xcce42a48d79cd59fL },
46829       { 0x9a674db4b8c3bc75L,0xea701d156904e3feL,0x990e722166bf2c6cL,
46830         0xba29affabd4c3791L,0xd98510cf20696ee1L,0x722ed471f93d26a5L } },
46831     /* 17 << 371 */
46832     { { 0x74e6c2624ba40f04L,0xf7ad1f159a63b3c2L,0xa89e8490ef75d482L,
46833         0xaf8e79b83bb5f5c4L,0xb094f8660c624d8aL,0xb571ce6613c69a60L },
46834       { 0xcbf9722d53787457L,0x97e24cf5c15d097fL,0xdba98bede99e034bL,
46835         0x8b6c171a57773590L,0x5d2b441cfe822efbL,0xb8c6dc57fc74ef1aL } },
46836     /* 18 << 371 */
46837     { { 0x37c70bdf7db1c03fL,0xd9368612964632abL,0xcf6368d742530338L,
46838         0xe56beecbb1d9522eL,0xb1caaf16bb6fba3aL,0xb7bd485ac8384d26L },
46839       { 0x4ba13818528d4372L,0x95c469bab9c5e8f6L,0x4e5cef0c4a370695L,
46840         0xb87c97ca663f9b07L,0xa9e1b388e5f3b79aL,0xc0416bb84c845a1bL } },
46841     /* 19 << 371 */
46842     { { 0x4483db00e4634d8dL,0x4d8d623d0a268bd8L,0x296f179c64e6d10aL,
46843         0x048f3a1cb6c7ff95L,0x60f8ad62c60c76d1L,0xa0a497610d028845L },
46844       { 0x10128387aea1b714L,0x81e5c75ca18bd98cL,0xac30d7361dac4200L,
46845         0xb83c1c12821380f1L,0xc8ca7c6afaaeb726L,0x13fb870dfead4cfbL } },
46846     /* 20 << 371 */
46847     { { 0x3921332a6b393648L,0x49ec6df649584f38L,0xa0fc013dce243a6cL,
46848         0xde5b16b5f8da8a00L,0xabcd0c0471ab1c9aL,0xff6594bc78b83305L },
46849       { 0x3546004b76c1900bL,0x87428fa236fb3186L,0xd2e464ce59cdeb49L,
46850         0x1260bd28faf6ec08L,0x1ada2f08d0c9d098L,0xe0b66299dea06396L } },
46851     /* 21 << 371 */
46852     { { 0x603d58167c1212e8L,0x95bb823fa4590144L,0xf239058a4bc3ba48L,
46853         0x21f2aa610db724b3L,0x29c706e8cd6792a2L,0xb143a84a634f01e6L },
46854       { 0x68f37382626ee80eL,0x56daa0e51fcd8c4aL,0xe01b52b39e5299a5L,
46855         0x2224513c3accdac7L,0xbb21c7d74acd435fL,0x039bc010bbcb948aL } },
46856     /* 22 << 371 */
46857     { { 0x5006c3a00848d6b7L,0x726b8648b28285aeL,0x7162e3c0277c5a87L,
46858         0x567f7ab02019c20aL,0x490c858fa551d5efL,0x0029a108d134a2bbL },
46859       { 0xa9e19284ef0aca3cL,0xbc399dc16e414f83L,0x5bdf85f86efa5a8eL,
46860         0x5291e1a674fe7c5fL,0x249ddf2acd7091dfL,0x71d4cb4c2e29fcf6L } },
46861     /* 23 << 371 */
46862     { { 0xc374acf4c1ded13cL,0x300d96132b69132cL,0x909ce34b055622d2L,
46863         0x26f033f6bad97809L,0x30987ebed1f7a220L,0x23147226db775b8cL },
46864       { 0x8d45c2c28d05ecfdL,0xeee0c679f0c1b419L,0x9f7df70d8c380da2L,
46865         0x4d49f3d130212a25L,0xa9602e8c64491ff3L,0x5ab91d223a254c49L } },
46866     /* 24 << 371 */
46867     { { 0xedd3291c9dac47a9L,0x02d64634fb5d396dL,0x2ce21bf163264c51L,
46868         0x0fdcc68e092c4724L,0x653acb286e3e4c2fL,0x2f9c77f12f1fa1edL },
46869       { 0xd91d4c3aa58afea2L,0x5a91b2ba7b0d8092L,0xd47e0f61f10a15fdL,
46870         0x01652d86f9c86edeL,0x1cc1b668d6006daeL,0x2763e36d24af68beL } },
46871     /* 25 << 371 */
46872     { { 0xaa5f387c2314a1adL,0xb8c00105e2647c74L,0x1f950dd8d6719178L,
46873         0xb7dae31de79881efL,0xf2d49aa2e45a615eL,0xb22dc098f17352afL },
46874       { 0xa4c438728ac23ba4L,0xedd6e4092c55e588L,0x1956b199022f5632L,
46875         0x18adcaa58c11bc50L,0xa0c11f6458b1cbf5L,0xd1204377f961ce1fL } },
46876     /* 26 << 371 */
46877     { { 0x35a2685bbb77f5dcL,0x1b5b79bbc08efa67L,0x4ebec6e6ea5f411eL,
46878         0x1800a21988c57793L,0x8d7397f2cbb13c96L,0xbc13ac35dc0327f4L },
46879       { 0x53ac05a6fd94b150L,0xd898fa600423e787L,0x802aad2c2a66b97fL,
46880         0xb604ac0692c62b03L,0x9f395d3a45911e7dL,0x5d38164128ae56b6L } },
46881     /* 27 << 371 */
46882     { { 0xa7d5a3afa5fb0decL,0x0d11c0cd5b27e02dL,0x8d854b53366c6cc9L,
46883         0x87ef4c140ad9a5f5L,0xaf7c2e6b0c5f8acfL,0x81fc22b69f010f1aL },
46884       { 0xe49e0c7e4e25ddb3L,0xd30bc860ef233d23L,0x0b63afb89fa41205L,
46885         0xd14b326c702fea93L,0x10ab93662c2a5fc8L,0xab35bab356cfff28L } },
46886     /* 28 << 371 */
46887     { { 0xdf0f79524130138bL,0x117e4628934c58afL,0x227be6867b6a4087L,
46888         0xe73fb2f3b8d298a3L,0xe32e89fda9bacb9dL,0xdd3be6130e9ea7e3L },
46889       { 0xd3d655ead4da2d1eL,0x153cce647833bb3dL,0x4a32a9f0b36da20cL,
46890         0x025768e5a69c4b27L,0xb0b5da379cf1fcecL,0xd0ecaba23aa3b99eL } },
46891     /* 29 << 371 */
46892     { { 0x9ab6dae0aaf6b398L,0x2d50f46b4f8e270cL,0x46c1e676fd7b7005L,
46893         0x4b8b203e32cf8be9L,0x0253ec899451bca9L,0xc3a7eab7f512b7a5L },
46894       { 0xf3bed3fdc5bd61a6L,0x5c0eb52f0a37ef8aL,0xb61aee11140894dfL,
46895         0x690607f9bec928f6L,0xba2b1db65148b45cL,0xbd309bf56619b652L } },
46896     /* 30 << 371 */
46897     { { 0x79d624c7a7b92932L,0xcd086bd7cc75e7a8L,0x3cddc1bbb48eab26L,
46898         0x10282df1f6791cfdL,0xffedb4fb1048f114L,0x937ed0e7c092d899L },
46899       { 0x045e4f60b84b6d20L,0xdd67bd36877ed915L,0x9bf8fede97617aa9L,
46900         0xa7ff9b0789cb8e1aL,0xc49e310e74f4e7d6L,0x12dde0fb3f62eafeL } },
46901     /* 31 << 371 */
46902     { { 0xe2e3dc4d50ba6e73L,0x31c19ebce6114f87L,0x8df0ffb01ffa99b5L,
46903         0x305142f1bfcf7fbdL,0x39931954ab88b782L,0x1952bbab43de3650L },
46904       { 0xb32ed678aa09e528L,0xa5150011acee68ffL,0x0307716a97b98b23L,
46905         0xb60c3edd4fc8d2b7L,0x91c81725b2b2f887L,0xf1dfc70ab9fb0288L } },
46906     /* 32 << 371 */
46907     { { 0xe7cf5bacbc579793L,0x11db7ddfd73f881cL,0x9c1a531d04fa8473L,
46908         0x399e84845780efdaL,0x6e9c12be4f62cb5aL,0xf21bdc4994a5df3bL },
46909       { 0x3c15fe1211da2a4fL,0xdea123bb23e631d1L,0x3ef76da4be294c90L,
46910         0x5cf21d5aa99b8398L,0x50679cf8751b9f6aL,0x4b3f3b9c54d0b7bfL } },
46911     /* 33 << 371 */
46912     { { 0x442dc0fd27174604L,0x5aa056efebc95895L,0xbb8cf9b54c96a2dfL,
46913         0xf43342d440f8618bL,0x58b0d00a8f89a8bcL,0x74d32dbc81f69f20L },
46914       { 0x5caf0910ab22a49eL,0xa0e9a677ff372f3cL,0xec90b5aef5c05066L,
46915         0xe2d98821b663f0e1L,0x388804bf50c7abc2L,0x2fbab16e97ba64d3L } },
46916     /* 34 << 371 */
46917     { { 0x09138c6071ed8d4eL,0x994d0fa991ef82b1L,0xe6089dbb931f3193L,
46918         0xb3b229d0aac23611L,0x52cf03fdacb8affeL,0xf64f9872bd99d6e2L },
46919       { 0x52ebb8b40186279dL,0x36a2349fb09efd7aL,0xa85b5d802225772aL,
46920         0xd2dc3c1547522562L,0x659297a666471319L,0x65913b608c8e7b68L } },
46921     /* 35 << 371 */
46922     { { 0xd54591f9a713f82eL,0x0ecfcffc6fae64b7L,0x7df9d7ea7287e218L,
46923         0x8b260162abe71460L,0xf75097efb12d48beL,0x82d5902482581904L },
46924       { 0xc5c0b5dc400d4288L,0xf6493c78190f768cL,0x1844b5f895bc9fccL,
46925         0x24afb04ba615bff9L,0x6c9638ee8bf51197L,0x38bce012b9ab9fcaL } },
46926     /* 36 << 371 */
46927     { { 0x087a2790494efdc0L,0x0b5f23c9e1645cb8L,0xa6e1d1e8193a99baL,
46928         0x0d324e67c0e0c026L,0xa86d993820d608b5L,0x48ddfbfd8d6944dfL },
46929       { 0x6aa07f90d371864eL,0x5cf727eef2060df5L,0x7694e02c9a7cf2d0L,
46930         0xe091982f6260f63cL,0xd2d481a72cae5da6L,0x045e3685ebcb4172L } },
46931     /* 37 << 371 */
46932     { { 0x1765632323c82633L,0x5de90578d590cdd3L,0x5cc5e7b9525caf0aL,
46933         0xdd9be80dd53e825aL,0x9ed28b29949073f3L,0xd15024156a6ce0bcL },
46934       { 0xbc34beeabf355f49L,0x73724878d2b210ccL,0xe47b7af911e8122dL,
46935         0x381a4cccdf53a9eaL,0xaa22c9b229e8a466L,0x7a05e2081a4fa093L } },
46936     /* 38 << 371 */
46937     { { 0x3dfb53521830d848L,0xea183d5cd2820590L,0xc83a65bcabbeb376L,
46938         0x5d9ca4d189bb9ac9L,0xb32217be137c900aL,0xcc40daebb0827afdL },
46939       { 0xc76130060c58b0afL,0x39f4ed8adf32389dL,0x04a586e2bc1fe9f6L,
46940         0xcf018c2abb50450eL,0x5072b8f016d55d0dL,0xc3c72e90d59e1dbdL } },
46941     /* 39 << 371 */
46942     { { 0xb3291b4e50b4e9f4L,0x79a2e8121b7b9e08L,0x81855db1ddd5f0adL,
46943         0x91fa12fc884392e5L,0x6373de02291c5694L,0x15c77432a7171428L },
46944       { 0x6016a06c1132df9eL,0xa4286939a0c21c8fL,0x70c5ebe26dca3f37L,
46945         0xc5278c510f115497L,0x8f5b07a35ce1953cL,0x4d75c1dc41f6ac0dL } },
46946     /* 40 << 371 */
46947     { { 0xfeac8e8ac24002e7L,0xa43892076643fa6aL,0x06e7ed63daa68b52L,
46948         0x8580bbd5d8c7b952L,0xb17ce22410c8fe9dL,0x40266bd379b88ceaL },
46949       { 0x32afc840dd63ffa5L,0xb4a3eb27a2280b83L,0x90528bf685897e28L,
46950         0xe4612391d231f941L,0xa7b3a2ccacb5c909L,0x2606844e5558d57aL } },
46951     /* 41 << 371 */
46952     { { 0x49ad52380519dd66L,0xe1b0b03b3c1470f4L,0x15e42792cd3a4852L,
46953         0x91c954b7388ba040L,0xe9fd8c7f857711f1L,0x8552d3d44b63a36dL },
46954       { 0xbf867fde230ffab0L,0x362a32a0793f885dL,0x687802cba11e0225L,
46955         0xd95b073b308c1972L,0x13b104aa6b3e5120L,0x60bef12333673f57L } },
46956     /* 42 << 371 */
46957     { { 0x4c4cc5561c8a5d9fL,0x5c6e1fd52b8a42c9L,0x73fd66c44ccfa024L,
46958         0x73c777563c50d038L,0x26964a68a5076758L,0xb14cdbfa7484d080L },
46959       { 0x24c499cf3f4b92ccL,0x40c8c0d84682daa1L,0xaa156edf785561beL,
46960         0x36718fb6de75af0aL,0x4d391cee03f5b180L,0xcf28d08a3100efc8L } },
46961     /* 43 << 371 */
46962     { { 0xbf1fc9fdd113a97bL,0x19cee87f5ff5ff3cL,0xfc140acf8f8213a3L,
46963         0xe70d50d546127d5cL,0x78cd24032faa7ac9L,0x409675f1c1808096L },
46964       { 0xaa7b6cd91765da93L,0xc0755b924f508d86L,0x09b8fb7640169a6eL,
46965         0x9ca977e52e7da664L,0xee1aab6c9a9616daL,0x54d740391ca0f4fdL } },
46966     /* 44 << 371 */
46967     { { 0xfe011830c37c7fc5L,0x0b2b965b2ee958c7L,0x99fd253588a43cf6L,
46968         0x6a73d62dbf8dc33aL,0xd53c0241a99247deL,0xb8186dccb4127f94L },
46969       { 0x86c4c274964cc3d3L,0x2f3f2742cbfa9429L,0x5b4bd23c5391abd3L,
46970         0x030b211bc5838fe2L,0xd2263dc4ae2e36fbL,0x45583a3ca0bf7280L } },
46971     /* 45 << 371 */
46972     { { 0x9ce7f43f1ed3f49aL,0xd8094c4afcdce20cL,0xd8b423d12b37b162L,
46973         0x332ce47c53d90a7dL,0xc686fc0c94a38ff2L,0xb44938d6c33d842eL },
46974       { 0x5ed14772cd9b0002L,0xffa5d063e800c655L,0x4511ec79ffcb6120L,
46975         0xb8c9de3f9da8e70dL,0x4d0759ca952b0ef7L,0x685f7005dfd88f4cL } },
46976     /* 46 << 371 */
46977     { { 0xcbdb755f1dbdc85dL,0x63d0d7047961be6aL,0xf65af35d8220a1b3L,
46978         0x8dcea7df77db51b3L,0x8cb2c5d14bfe8fbeL,0x740579bdee2f03e0L },
46979       { 0xa7eeea4ed3f0181fL,0xedbdfaa3c12ef399L,0xee3cc40f1c332118L,
46980         0xdae0995e731ef93fL,0x05165c6c0f24d954L,0xcbcc014219fca63aL } },
46981     /* 47 << 371 */
46982     { { 0xff24bcd842c7c110L,0xa5ddfffc56dc10c6L,0xb9937fcdaa1a09c5L,
46983         0x8e18ed5b852dd22fL,0xf24e43c7826fb5a7L,0x13989a43415c2c63L },
46984       { 0x71ad7c21d36ffe0bL,0x68b77701129df418L,0x1c5324cd9a8d424aL,
46985         0x2e2a2b1ba9bf46abL,0x7d0c04d19cd0ea12L,0x8b4186bf2f9869e8L } },
46986     /* 48 << 371 */
46987     { { 0x6c8d97e075a46271L,0x0fa0c4cd9dbed39fL,0xfb6da5e2de74ac6cL,
46988         0x041ce886c17c1ec5L,0xb42941a8d7419105L,0x79768eee002fdfd5L },
46989       { 0x64849afd88c8111fL,0xf425fe14814192d6L,0xe916e8640448fd7eL,
46990         0x31e224ad72ed351fL,0x73e6e6ac7c0183c1L,0x375657c621bf7cebL } },
46991     /* 49 << 371 */
46992     { { 0x093d8039114fd7b9L,0xb6bed3eb45c5e1c7L,0xb73ab7fe50fdbf14L,
46993         0x68d95e57af0cd23dL,0x5c260eacc7b750fbL,0x79bb142bb5358c26L },
46994       { 0x5aa9845158ace251L,0x04b2388637dbfef5L,0x1051172dc0532263L,
46995         0x686ee9e6294890d9L,0x092617b3bffd1609L,0xb4a50e50ea3836a4L } },
46996     /* 50 << 371 */
46997     { { 0x8bdb3886cdf950abL,0xe2bdc8d3d595dbd5L,0xd28211254ecc49f1L,
46998         0x946566081d3c2f24L,0x8124ad390c87df6dL,0x6020c322d16272baL },
46999       { 0x2150f7e694af134bL,0x38512401a1a14e33L,0x39a54386b1ff7304L,
47000         0xfaf1ffea078d8f0fL,0x7739ea99dea995bfL,0x3252e815c020816eL } },
47001     /* 51 << 371 */
47002     { { 0x1609832322f1bd8dL,0x6b02533cd4df163fL,0x25108619a8296363L,
47003         0x373bf9988f8c755cL,0xebfbc5b23b32542dL,0x7ada597688b9d360L },
47004       { 0x3914406ebd605f01L,0xe245ba48cb3a40b2L,0x11a1dc4ed3171f32L,
47005         0x4a10d5d26ffb5915L,0x9326b23e997460b6L,0x53ddfee92aa0c77cL } },
47006     /* 52 << 371 */
47007     { { 0x44f51dd51104ed7fL,0xfca4773e270f6135L,0xe36c8b266bc757f4L,
47008         0x2cf0515d6941c7a0L,0xdeab655d5fb16e2aL,0x75c28116cff7be07L },
47009       { 0xb24ca428abbbca02L,0x6aaeca9b1e7f8116L,0x4252f4c3510f0c81L,
47010         0x01462d856f3ff7fcL,0x4df702879d1c25e3L,0xddd47a1dbebd1559L } },
47011     /* 53 << 371 */
47012     { { 0xdffaef2c6f2e2611L,0xc2c2e6a41f29efa2L,0xa29bc3b75ebb40c9L,
47013         0x8473594bac31a2c4L,0x100d7d6a8604447aL,0x80318670794bbab9L },
47014       { 0x78979f72054dfc75L,0x94b4c17e55232511L,0xac44836b78b883c3L,
47015         0xc1f7e98168422328L,0x34fcdee68266747cL,0x18533b3f0475c011L } },
47016     /* 54 << 371 */
47017     { { 0xede6728e3bab17f0L,0xfcd9c96879b94302L,0x6410ae37544a677bL,
47018         0xeacbf6de1dcd0fdeL,0xdae70841e2f3ac0fL,0xeea2a9b6e41ba13bL },
47019       { 0x1b06aeae9349cdf0L,0x28571e3d33c0ea87L,0xceaf9dd46043e874L,
47020         0x32cbcc69fa6fea15L,0x7db75664e135aa11L,0x588d4458f816929aL } },
47021     /* 55 << 371 */
47022     { { 0xf70797d02b014160L,0x1ddf312d8d7c3263L,0x3bdd58f3c78beacbL,
47023         0x8bccd90101c71f77L,0x3c637f58166c1486L,0xb62c0aa45fd1a307L },
47024       { 0xa68db7b05f2544d4L,0xb9727946f860585aL,0x91565060a068412eL,
47025         0x1283d6d1ab536c42L,0x86c2a11c79caa387L,0x2687309b62bd7797L } },
47026     /* 56 << 371 */
47027     { { 0x525cd8849b711a38L,0xd413d82b8c95bf61L,0x19ecc14a36b82970L,
47028         0x65190ee6e3416342L,0xde9834c93066fcf7L,0x3b87b15e8302cd85L },
47029       { 0xec6f67a785268eb2L,0x5ab08b5af95aef07L,0xb5257f70adda86a5L,
47030         0x53e95ec4b934400aL,0x9611a632c33b870bL,0xd27929522723a3d5L } },
47031     /* 57 << 371 */
47032     { { 0xcd203b542c95b469L,0x89b140e768713ca6L,0x451646a165701050L,
47033         0xb97a582575e54715L,0x070fabaa93bb6a91L,0xe517e07a196421b3L },
47034       { 0xc8d741235f46e495L,0x920ee94fdf60eb8dL,0x885b86dd19564c3eL,
47035         0x6c9e973231670005L,0xb52eed1fe4893763L,0xa8f9fbd759157417L } },
47036     /* 58 << 371 */
47037     { { 0x0c41f2eb56517cafL,0x47778a92798cf8b0L,0x4232ab390dc60cecL,
47038         0x5de0b7e39e3eb6f1L,0xa2569d8571562511L,0x37b3c62a1ce1cec9L },
47039       { 0x312caccd8b3391aeL,0x6b22c9447dcbe533L,0xc890d22f4fefd4edL,
47040         0xd1504f7df007a64eL,0x117e4e595845d5bcL,0x999386c7723584e1L } },
47041     /* 59 << 371 */
47042     { { 0x02c396533bdadbd5L,0xc07325fda1fe704aL,0xf78d7e23350aa0c4L,
47043         0x9f09cf22ce50784cL,0xcdea9a6a1a6e8abcL,0x245fba06ee5a5e06L },
47044       { 0xf1fd3b9b4a3d0d7cL,0x24c65a131a4952c4L,0x40ea3ef37236b6f4L,
47045         0x60aa573d8f7addcfL,0xdd5ec47b0305577dL,0xd92dc5035deacea5L } },
47046     /* 60 << 371 */
47047     { { 0xc666f8f3fac2de80L,0xabb2b8aba8fa36a6L,0x1bd0ec8f12202b09L,
47048         0x88b184be6d17a3c5L,0x00d501fc670a77c1L,0xe1f94f1db3de1c7eL },
47049       { 0x953179cd2d6de8caL,0xa8873a5bb9263791L,0xd76433098d7ac5d1L,
47050         0x3d751cab4d2f8224L,0x7417b8262e5458eaL,0xf4eb3c669e454a8cL } },
47051     /* 61 << 371 */
47052     { { 0x65b0d7e9ae3284a2L,0x3d4770bb1e3cbb18L,0x217a0cdb808ea164L,
47053         0x9ed6d0f689810270L,0x62d9cc95f14139e1L,0x4d39eeef6a2c82a0L },
47054       { 0xecf319f40dcf14afL,0x62c95df6ab0fd145L,0xfe85014d22db0105L,
47055         0xc37756e6a652168cL,0x6ba9f6b370a67e9dL,0xe453fd0af18d8058L } },
47056     /* 62 << 371 */
47057     { { 0x265798acfe3bf4f8L,0xc1603abdc1183f63L,0x14e3952f1063e086L,
47058         0xdcb106d2910f0a78L,0x27c2aee2f454f625L,0xf16d83e60f463fe9L },
47059       { 0xaa5547207f5ae172L,0x42ea8fea9a2133eaL,0x9f3b33f6e9253e7eL,
47060         0x6224ef75d67af0afL,0x06f0ddfbb92d6cc9L,0x12e66e32656e9e9aL } },
47061     /* 63 << 371 */
47062     { { 0x1a93be3424ace7f0L,0xb993bcb9a56be2eaL,0x3b054afac33608d7L,
47063         0x36e782c3aea3d7e9L,0x54f1dda950e9b3adL,0x04dd021f55f51bb4L },
47064       { 0x9c76f7c0347bb352L,0x3d9a04ee2f1dc5fbL,0xea5e582ae80e06f0L,
47065         0xe523aab927e1e818L,0xe2f1960252d4904cL,0x1bfa8b03adecc51fL } },
47066     /* 64 << 371 */
47067     { { 0xc84f917203bdf6d6L,0xcfc4718769f60e03L,0xcdc4753ba05068eaL,
47068         0xa177ad14077777efL,0x0b7f54eb7e4cf44aL,0x4ee443f91860144eL },
47069       { 0x1279ed4d42bb6a93L,0x511137d7436c1b54L,0xebc958fab8cdb6ceL,
47070         0xbc4f93f4a0c7614aL,0xc5bd6cde7b2c6d8eL,0xecff7dd78d65f38aL } },
47071     /* 0 << 378 */
47072     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
47073       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
47074     /* 1 << 378 */
47075     { { 0xffec6674f65de0f5L,0x4043079cd23ad193L,0x31811365ee61bc95L,
47076         0x358bbd6e8948b6e2L,0x1cd9c342e31644beL,0xbab3aa8c60a8a7a7L },
47077       { 0xe065519fa375beb6L,0xf7d0b0414439990cL,0x8957c03b8517ae8aL,
47078         0xc96a040173750d6eL,0x4eb2e364b2aee6d7L,0x813054feed099114L } },
47079     /* 2 << 378 */
47080     { { 0xbb39a17a7c34f095L,0x7be330a822fbbe61L,0x6be6abe3b91f1482L,
47081         0xf972804fbd39a2bcL,0x06737e54f91d813eL,0xbd6066681a87cd4aL },
47082       { 0xbf88b2e5f538d56eL,0xb8206a8134afd68fL,0x7a93aedfa58af042L,
47083         0x8853cdf6ac0511b0L,0x9d7f416d067e2c19L,0x5d0bc923f9671d8aL } },
47084     /* 3 << 378 */
47085     { { 0xf3b6fd79dd3532a7L,0xf60262b5dbbb9e4cL,0xbf75bb57da4d6ac4L,
47086         0xf016adf1c094b38cL,0x9114cdd012def474L,0xdc74d638c785f143L },
47087       { 0xdea060d6a8d90bbbL,0x1f141878cbcd0d4cL,0x552685b79ddee1f5L,
47088         0x381dfc0c636ea6b6L,0x8c601615cb08f34fL,0x5b843830271041eeL } },
47089     /* 4 << 378 */
47090     { { 0x2e7d0a16204be028L,0x4f1d082ed0e41851L,0x15f1ddc63eb317f9L,
47091         0xf02750715adf71d7L,0x2ce33c2eee858bc3L,0xa24c76d1da73b71aL },
47092       { 0x9ef6a70a6c70c483L,0xefcf170505cf9612L,0x9f5bf5a67502de64L,
47093         0xd11122a1a4701973L,0x82cfaac2a2ea7b24L,0x6cad67cc0a4582e1L } },
47094     /* 5 << 378 */
47095     { { 0x139d9fef6bfc08e4L,0x4399615939ffcb3bL,0xaa299008a84ace07L,
47096         0xfce43e873cbb2b3fL,0x07b3e8b9191a320eL,0x3ec851d706c4d485L },
47097       { 0x03d8a672a4bb8477L,0xb6a5dcb213c31d5cL,0x58b79d01c439ab23L,
47098         0xdd6f8b5134f66137L,0xccb178a0b29be48cL,0x4c71b7aa4df8a1b2L } },
47099     /* 6 << 378 */
47100     { { 0x92bf8c4508359896L,0x77253434ae2c30f2L,0xf05086ec827e6cf8L,
47101         0x46d4729f1771c5d3L,0x92587306f37f0bedL,0xb82c99d2e7c30180L },
47102       { 0xee0141dcb1684841L,0x7fa984be994ddaf5L,0x5c583347165c238cL,
47103         0x1a1ad3eea5d78204L,0xcfed795f2736bce6L,0xa7a413318961204eL } },
47104     /* 7 << 378 */
47105     { { 0x87451ca71400851dL,0x3aace28e3573ecf6L,0x3a5902cee85717c5L,
47106         0xe4b51dd0c9f57944L,0x33cf684789a9d8aeL,0x2f6fb08031e6e769L },
47107       { 0x4bf3da323b78dad1L,0x2d73fef4e7809638L,0x84d76151965109abL,
47108         0xa2c932c9a2098f46L,0xb8c457c3bc17d1fcL,0x5ef2562d0c8012a4L } },
47109     /* 8 << 378 */
47110     { { 0x96a1e74f51e4de5eL,0x72913696e37f5006L,0x12449c4fbe35109cL,
47111         0x1fad8b304521d7e6L,0xc85eb23d57d00293L,0x4ebd334b35f68229L },
47112       { 0x7c5b86682df5acf1L,0xc2b4da6e5463de2eL,0x067b0456757cd570L,
47113         0xeaab81be3a1c866bL,0x72a6af75bbba88c0L,0xaed4dbde0ef567dcL } },
47114     /* 9 << 378 */
47115     { { 0x085e33cd9273818aL,0x8fb9294a8cf4e306L,0xaed46bbc35052bd1L,
47116         0x031febb3374661eaL,0x9386a35d4868dbb2L,0x381e5b521d3f2dddL },
47117       { 0xa938a3a5179617edL,0xb0fc99f49dc95af1L,0xf446dfa92b9dacbcL,
47118         0xbae262ae490c1969L,0x042707ffa7443354L,0x8dc0511f267d5c14L } },
47119     /* 10 << 378 */
47120     { { 0x8f0e1908fac2674dL,0xd86e85a483e43c26L,0x1f719f7036fb5a4eL,
47121         0x7ad61b8ca57dbcbcL,0xcf6ba7db0f63dc79L,0xb4315ab11afe8540L },
47122       { 0x0448e852425c4df3L,0xf51969ef8838a51dL,0xce98589b9eab87deL,
47123         0x55867b5645149689L,0x9b70bc8c60d2a624L,0xc158a2710b6dbd45L } },
47124     /* 11 << 378 */
47125     { { 0x0b262f808f1915f2L,0x64ba3bc73d501e01L,0x8ce2db1f4645152cL,
47126         0xf4a4f3afab047cdbL,0x1a7c4af600d31e7fL,0x0005bca678d1c0ecL },
47127       { 0xf5ed135f6fe5ebb0L,0xa299b1002ea9abdfL,0x4fa387e5fccb58f5L,
47128         0x105b9dd2fc657b72L,0x1494c6050dc3c22cL,0xf7468e8a92d281c7L } },
47129     /* 12 << 378 */
47130     { { 0x597a26ffb4dc8600L,0x264a09f3f9288555L,0x0b06aff65c27f5f6L,
47131         0xce5ab665d8d544e6L,0x92f031be99275c32L,0xaf51c5bbf42e0e7cL },
47132       { 0x5bb28b061e37b36dL,0x583fba6a8473543aL,0xe73fd299f93fb7dcL,
47133         0xfcd999a86e2ccad9L,0xb8c8a6df334d4f57L,0x5adb28dd9a2acc9bL } },
47134     /* 13 << 378 */
47135     { { 0xc760823646dd14f3L,0xc6d97d37e7a97f33L,0x05037f26de2f444aL,
47136         0x5267ded09aa9a5c0L,0xd1ef46340be2d841L,0x308b37a8d48b9574L },
47137       { 0x102f7878487bad5bL,0x1d5169d938b7c1efL,0x2d8adde62c39c75aL,
47138         0x71bfb8bc0b80f3bbL,0x126505999bff252fL,0xf99e952f24f8bd3bL } },
47139     /* 14 << 378 */
47140     { { 0x24496a8b7a8a6d47L,0x9fc75c0aec6afe43L,0x4200e00670744f15L,
47141         0xe2f87d5e2973be1dL,0x0f6c5993c82e2013L,0xe9ecf6ce198c99f0L },
47142       { 0xcbdf72058b37d828L,0xbef4b8c8325d1d93L,0x8e962ffbd0fbb134L,
47143         0xe4273a124bcffc61L,0x4f24ba23f3d93d73L,0x8f02df83bcfcb930L } },
47144     /* 15 << 378 */
47145     { { 0x985c8f4b0614348aL,0xca4ca7cd5a03c014L,0x5bdd4382a7b62effL,
47146         0x623d44b9e4a0bb42L,0x1f28862ef23931d5L,0x30568303868326beL },
47147       { 0x850d2a0d82e76f04L,0xf4dc02330ac4a153L,0x62b74879b1e70a9aL,
47148         0x7b32249baf3f0dbbL,0x2f50395d155eae92L,0x6d990c16f6f5c9a4L } },
47149     /* 16 << 378 */
47150     { { 0x3afdee277d221ab6L,0xecf10abc47bb619eL,0x340c8ee3ba4a3301L,
47151         0x1a6ea51a2a883b7fL,0x64f27976d5d7412bL,0x7fcf0ecc91251b6eL },
47152       { 0x5f3f8f41365b18b7L,0x38e48b96e2e13e58L,0xde3b73d6ad61b2cbL,
47153         0xf08398d5d542676dL,0xd373931e8e7d712bL,0x89325d7a7f96e023L } },
47154     /* 17 << 378 */
47155     { { 0xeb2e48c10bf4e94dL,0x00614bf206b7e166L,0x536c999ce295c451L,
47156         0x951f92186359cf06L,0xe2a938890afc827fL,0x63102e93ff029787L },
47157       { 0xab297c7d2ac89645L,0x7354df74928742bfL,0xc0934ca6c8604304L,
47158         0x36b7e9711cc2f3b4L,0x487ce890e10ee837L,0xe6aa9eabae2ae9e3L } },
47159     /* 18 << 378 */
47160     { { 0x6e7a578340517347L,0x7db868f3a950dfa2L,0x7fd7fd8eb3c2eff7L,
47161         0xae7b59c5fbe10a47L,0x5239b5c4109797d6L,0x3838356a53264b8aL },
47162       { 0x8df8454c320a8c5aL,0x67c86ef46958fa2cL,0xfe1aad846241a50aL,
47163         0x3df64ef5a06f3cf3L,0xde6af0ff83282fbdL,0x25ca45046cdbe5feL } },
47164     /* 19 << 378 */
47165     { { 0xa319340d6e6c0debL,0x101f055acb1b1cd5L,0x4bea31ad623e7e55L,
47166         0xc0c88af6aec23cd2L,0xca98c4364aaf2f73L,0x1969eca437dd1341L },
47167       { 0x6b03989f97866dc3L,0xafdc99532eaf5b08L,0x199ec0e93d6ea9c4L,
47168         0xc3d1069474f262e9L,0xa7e5670079911cf9L,0xc0213ec56844da05L } },
47169     /* 20 << 378 */
47170     { { 0x5adf3d9a111792b9L,0x1c77a3054f1e0d09L,0xf9fbce33a82d3736L,
47171         0xf307823e718c8aa3L,0x860578cf416ccf69L,0xb942add81ef8465bL },
47172       { 0x9ee0cf97cd9472e1L,0xe6792eefb01528a8L,0xf99b9a8dc09da90bL,
47173         0x1f521c2dcbf3ccb8L,0x6bf6694891a62632L,0xcc7a9ceb854fe9daL } },
47174     /* 21 << 378 */
47175     { { 0xfc9660a3c8808373L,0x84c5d6a71a50c560L,0x13fe0588ba057fe2L,
47176         0x29b0341dafb73ad1L,0x37b11137f15f0cd2L,0x84422ba89c2d7eb0L },
47177       { 0x0b595ac52554ef7fL,0xd7a8303f08b37a84L,0x908895a9e02d77fcL,
47178         0x70cdeb0c9f242a42L,0x535e8540116e2db8L,0xc88f0cf685c54d31L } },
47179     /* 22 << 378 */
47180     { { 0xf534f145e2290ebaL,0x3d081c0d7f15c9e3L,0x716574c5e9ae3da0L,
47181         0xbe6bd7b92c078aa8L,0xab8802bab8da8e68L,0x0c5be4a1ab204fb0L },
47182       { 0xad25c5ee0d3f12b3L,0x3929d0d78fc9b7a5L,0x9c6e2ce0bb5cd2fdL,
47183         0x855367c4924ec2d2L,0x6b532891e6550d3cL,0xab2bc89575ba5c99L } },
47184     /* 23 << 378 */
47185     { { 0xb56b035e2a0349adL,0xcfa41da6f89ce836L,0x9d86bcac8b5c43fcL,
47186         0xc77375da47644b07L,0x9e9c222607f4b670L,0x71d663c80482a61bL },
47187       { 0xb423e739ef237431L,0xf1cedf7e48832b5bL,0x09e0cb2a7ca7548bL,
47188         0x9b463559631b9850L,0x8a2bd7fed4dd03deL,0x46115292ae0c97d3L } },
47189     /* 24 << 378 */
47190     { { 0xe44e3f864b3759cfL,0x90cab0eb9d74e3f6L,0x1004254501c4e171L,
47191         0xc12df68cce52defbL,0xb1fae2fbf363100aL,0x5016c8533573235fL },
47192       { 0x8d4deb661d922e9bL,0x8a20d42317f84ef2L,0x324985835a4e118eL,
47193         0x5abfa961308772e9L,0x41c7611ff54e4876L,0xc1da40d31f5867b2L } },
47194     /* 25 << 378 */
47195     { { 0x4df02a7d3088aebcL,0x7dea27ea12487485L,0x2a773270df98069eL,
47196         0xea435fa0e9ceaf44L,0x08e952e365e5ebabL,0x972877d5c3511480L },
47197       { 0xef5685f859a04cd0L,0xe50abe68b8c7c796L,0xbbb792e2c3225f20L,
47198         0x7d9878e811c89153L,0x4b72a1e619354751L,0x7d5f05a3faa1be22L } },
47199     /* 26 << 378 */
47200     { { 0x61dd7692f27eed54L,0x8540213ea7a3f2f7L,0xe659cbd6ace07e13L,
47201         0x3a998cdcc8995cacL,0x0accb4a7922d3b25L,0x762b3406c6577d81L },
47202       { 0xa09db4f57e043740L,0x7f78e02d8cc9bc5fL,0x080a522673b98cd3L,
47203         0xb6d72f7ce6490808L,0x36815de2c724284aL,0xc27d13df98b867b5L } },
47204     /* 27 << 378 */
47205     { { 0xbfeffd5356adb6e4L,0xb5e8876c499a1455L,0x4771281390833f18L,
47206         0x5f49ef880115b9a5L,0xb041ec67cf575de5L,0x490753350b7e4afcL },
47207       { 0xad4dc4a15f0b9f24L,0x9dbb181edafad9a5L,0xa84431a6e6ed5198L,
47208         0x33ee16e27993eed6L,0xfdf76899c1e4f8b4L,0x868d06baff60e943L } },
47209     /* 28 << 378 */
47210     { { 0x46303171491ccb92L,0xa80a8c0d2771235bL,0xd8e497fff172c7cfL,
47211         0x7f7009d735b193cfL,0x6b9fd3f7f19df4bcL,0xada548c3b46f1e37L },
47212       { 0x87c6eaa9c7a20270L,0xef2245d6ae78ef99L,0x2a121042539eab95L,
47213         0x29a6d5d779b8f5ccL,0x33803a10b77840dcL,0xfedd3a7011a6a30fL } },
47214     /* 29 << 378 */
47215     { { 0x5d782a0778664144L,0xc1413da46682c779L,0x937a15f52a67b12bL,
47216         0x8ec00d9fc04d8cd5L,0x3f16d1ed3b5fe8d6L,0x24ad6b0ca28c8067L },
47217       { 0xdd1eecc532732b19L,0x62c4c2beab2fa785L,0x7d863f5b2ac0c238L,
47218         0xd686eb7239384e15L,0x3770e54d16bd75b2L,0xdcd9e4e8120b3881L } },
47219     /* 30 << 378 */
47220     { { 0xe3052838df5147e1L,0x87bc4d75b1baaa7cL,0x49b13eb95acc5572L,
47221         0x919081881990c13cL,0x5d43a4a6191cc808L,0x20b358444182aa55L },
47222       { 0x70d49a4a670b1fd1L,0xc6e6e061722e91e7L,0x8d130b3900c5ae9eL,
47223         0x5db7d06920f68ec5L,0x85b6c505470fbe13L,0x14101ec7326c4d38L } },
47224     /* 31 << 378 */
47225     { { 0xeef03450e10e8018L,0x75921e487576c3ddL,0x6c8e22676e97f5afL,
47226         0xd7323e01a856ae6bL,0x43a195425fed884fL,0x010865380377ba8fL },
47227       { 0x7cdbd06ac82a8f67L,0xc6fce58bf0fd4281L,0xae098b7f9e67bed0L,
47228         0x0c8d328bdd918524L,0xddf723ec0a11fb83L,0x210d6016e25a2073L } },
47229     /* 32 << 378 */
47230     { { 0x3c90a59f85adde98L,0x35414174e5269140L,0x9aca885c1a0d58e2L,
47231         0x77b9b6dd6816b009L,0x8e5c12139ee4718fL,0x60ad991e4e4eac45L },
47232       { 0xc00c35694d71f624L,0xacbf4eb25bc5fd2aL,0xcba1ffc75eaf3eaaL,
47233         0x5f99092d42a87e32L,0x2e7b49c76f7a882fL,0x5e9bfc5c29040512L } },
47234     /* 33 << 378 */
47235     { { 0xa31d3524b295958dL,0x9713a5e04894f486L,0xe8804ab3329a0b9aL,
47236         0xd4447c1b20eefa54L,0xf5b944c9040b7ad4L,0x9db0ee0b907f2cfdL },
47237       { 0x0b1a1f3a5384a999L,0x3137241ea8351764L,0xe0663b5ab29c3cffL,
47238         0x2b47ca0622d4deefL,0x4f952109f1172bcdL,0x1e7a7fca9b447bd4L } },
47239     /* 34 << 378 */
47240     { { 0xc9898355ecf2a473L,0x20d0c4740dcd66f6L,0x6459720f8eeefff5L,
47241         0xd9b625dcf9ce0cdeL,0xed3a6508ea56be90L,0x6847c20de211c90eL },
47242       { 0x36d86bed71a73ceeL,0x9222eab23023d16eL,0x3155874750209b4dL,
47243         0xcac8f277d145b831L,0x49cedc634470e754L,0x6c7c065add370f77L } },
47244     /* 35 << 378 */
47245     { { 0x46a95735f8171804L,0x1ff2549ec4c93476L,0xfb8a08285bb5202dL,
47246         0xaff5505f1070737aL,0x162aaad842f412c5L,0x02a37213fac8a477L },
47247       { 0x05ff9238932f08e2L,0x9be6a0b29fc66787L,0x373a9039db1e5a40L,
47248         0xe657e8c782d04913L,0xa2006f207e6ee867L,0xd7aa1d2378d82f9aL } },
47249     /* 36 << 378 */
47250     { { 0xfa070e22142403d1L,0x68ff316015c6f7f5L,0xe09f04e6223a0ce8L,
47251         0x22bbd01853e14183L,0x35d9fafccf45b75bL,0x3a34819d7eceec88L },
47252       { 0xd9cf7568d33262d2L,0x431036d5841d1505L,0x0c8005659eb2a79aL,
47253         0x8e77d9f05f7edc6aL,0x19e12d0565e800aaL,0x335c8d36b7784e7cL } },
47254     /* 37 << 378 */
47255     { { 0xdcac39d87c1d9f4dL,0x88322d8bc225ce6eL,0x5c240cefa3ef5202L,
47256         0xf60ce5d991f1d487L,0x8e857069e462cfa8L,0xa6e5585e996d2033L },
47257       { 0x709675a556281e6aL,0xcd90c140f907ebf0L,0x5343a0a2a3231eecL,
47258         0x74b1443214892291L,0xf8cb9c26a5325b8cL,0x1bb28be140089be5L } },
47259     /* 38 << 378 */
47260     { { 0x2bb6e7ec3092d0b2L,0xc7c9e5f1d27d1f31L,0xbac785aeac0939e3L,
47261         0x186d3d934f810d8fL,0xda296dacfe7d778fL,0x6189f5e41a991ea2L },
47262       { 0x098f794e9634363eL,0x04aaf59a88a4dccaL,0x09d718487196dfa8L,
47263         0xa447a31ed83044a6L,0x720cd3908d1363fdL,0x6f670479e22efa03L } },
47264     /* 39 << 378 */
47265     { { 0xaa452e81cdf60f9aL,0xf3dc472a8e2c58e9L,0x16ddefa50589fd01L,
47266         0xd56ec8f223a1656eL,0xcccb784f77921ca4L,0x9bace7adf8a7c0baL },
47267       { 0xc94ef3ef51f052e2L,0xa70c0579c34e7cb5L,0x3599817883ce8674L,
47268         0x033647c392a20951L,0xc828fcc77a21add6L,0x5a446de871ba27a5L } },
47269     /* 40 << 378 */
47270     { { 0x75cba9d530a3ada1L,0xb69e308bf8ae9565L,0x990e3425ca7b8369L,
47271         0x9f67567fe0a7ad0bL,0x76ed6fe718bd01b7L,0x282358aa2ff95cfeL },
47272       { 0x28d2ea41410f8841L,0x89d1533fccd67c81L,0x969bb272b6a7b8f9L,
47273         0x54f8664c26330782L,0xb89f3ae81dcd9164L,0x54d845b93d962c14L } },
47274     /* 41 << 378 */
47275     { { 0x08ba5b61fde4ca03L,0x39b1a9c697b17ee6L,0x885253779336b2b9L,
47276         0xe964dc9c9aabc3fcL,0x6aed101a5295e728L,0x30369ea0ee12356aL },
47277       { 0xe081e022c8e80e5eL,0x3a769ef0df9f47c0L,0x3b2f7aab5590750cL,
47278         0xd16c7a85a1a5e504L,0x9e528623e854d7cfL,0xaca079354468e419L } },
47279     /* 42 << 378 */
47280     { { 0xee521c0af93098bfL,0xf517c925b79aa0ebL,0x17779f5e7bbc58feL,
47281         0x093c3dc2769de891L,0xafbf32372a69ad0dL,0x33a95de702001e8cL },
47282       { 0x3b30afc73410a2b0L,0xb379a3f425bc7d9aL,0xf1c069251604a646L,
47283         0x04f0bb334fca052fL,0xe5cd9c39cab33871L,0xf259795816fa1b16L } },
47284     /* 43 << 378 */
47285     { { 0x291d65c801189d9aL,0xb16ca18bd8e94e49L,0x55f7680599440d4bL,
47286         0x55d40c1b2eb7f0fdL,0x752d98f6018d7c64L,0xa1cae78c7b491c4dL },
47287       { 0x898fc8c78f66b8d3L,0xbb48956a3ceecd27L,0xb8f9498dfaa9451fL,
47288         0x583b336aa5683ef8L,0x0deaa373e92656f4L,0x7f87b4412a9a0272L } },
47289     /* 44 << 378 */
47290     { { 0x8b2fc4e96484fd40L,0xee702764a35d24eaL,0x15b28ac7b871c3f3L,
47291         0x805b4048e097047fL,0xd6f1b8df647cad2fL,0xf1d5b458dc7dd67fL },
47292       { 0x324c529c25148803L,0xf6185ebe21274fafL,0xaf14751e95148b55L,
47293         0x283ed89d28f284f4L,0x93ad20e74cbebf1aL,0x5f6ec65d882935e1L } },
47294     /* 45 << 378 */
47295     { { 0x4b0c7d0c69c284cbL,0x907e4f38199c5176L,0x4ebfbda7cf3dab12L,
47296         0x675f12cca4fa74a9L,0x86628102bdf579e6L,0xf08cbfe771c4d061L },
47297       { 0x9dde390e03bc1cb9L,0xb6d0d48b4c727915L,0x7cad28c370c0b7bfL,
47298         0x8d978a8110d1e881L,0x1c071597924baeb1L,0x83c09192eb103fe0L } },
47299     /* 46 << 378 */
47300     { { 0x494dbd2665925506L,0xe239b1d404b6fc45L,0x38a1ec5ce16b874dL,
47301         0x1588c4712a3f012dL,0x5bd45adcdc6938b9L,0xe4c35c2244ab2fccL },
47302       { 0x87cbd9ff887108a2L,0x92a9c3b2144fd3eeL,0x3a0e55c7982a4928L,
47303         0xcaf679765bb0fddfL,0x04616318263ea256L,0x56eb022838caa901L } },
47304     /* 47 << 378 */
47305     { { 0x2f7de141a48da000L,0x323bd638835a4edfL,0xd2d9da967e155bd5L,
47306         0x717c302a766b69daL,0x5927968beb0f6ca5L,0xfd96bd168940c766L },
47307       { 0xf89f7539a334fd71L,0x4ba9cd8bd870954fL,0x7e639523a3d57aa8L,
47308         0x88f31e162314c0ceL,0xa836a6ad53b7e6e9L,0xd35a825190e43169L } },
47309     /* 48 << 378 */
47310     { { 0xb3984b176c0f3509L,0xf9fa4483d8b4d6bcL,0xf4ac2b677dec20d2L,
47311         0x67ef024eb3dbe034L,0x2dcc51180f94f4d7L,0x024cdcfd74a51393L },
47312       { 0xf1c0fead20e7abcbL,0xffc18f81d3a7414fL,0xb00ce5567062cb0bL,
47313         0xeccb0521817bc8d1L,0xa0c0fe6040411c15L,0x053113221defbe00L } },
47314     /* 49 << 378 */
47315     { { 0x74faca8a6af7e742L,0x6f206002d878a97aL,0xd69b7c83177305ffL,
47316         0x605e7a32d2e2bcf1L,0x65bd03584590bf03L,0xab3ae700d1a378c5L },
47317       { 0x037e79028a929b0dL,0x83625ae0a7c451c6L,0x82a18f03492b01d4L,
47318         0x12c6d168e67756b1L,0x1e704c3bd7924df1L,0x7708617f1989244eL } },
47319     /* 50 << 378 */
47320     { { 0x4c98c61d097bde48L,0x6a55edf1c354f433L,0x1ceee947c3f39212L,
47321         0x162cf27f36ba3cebL,0xd9f3982e3ec5f7ffL,0xd363e435d58d42d2L },
47322       { 0x2ee90d7bad36681dL,0xd916df56ebfbf51cL,0x61d94ed8d7c27fe7L,
47323         0x5010582e923c1acdL,0x89d23e8b6de52994L,0x0a4f9c10525dbccfL } },
47324     /* 51 << 378 */
47325     { { 0x7778fad7e65573e2L,0xa4af7a2d74986210L,0xd78ecebfec57d967L,
47326         0x9be8a33f67d61b2eL,0x6888444f98a9add7L,0x218e7fb1b71a25a4L },
47327       { 0xf75a6b795f46323bL,0x2f8610ad11a52cd9L,0x23692f85fc6837caL,
47328         0x3a37965f71fe847bL,0x29c25cc3fe3bdeeeL,0x68fefc83f624665aL } },
47329     /* 52 << 378 */
47330     { { 0xe222eba4a4dcefe9L,0x63ad235fec1ceb74L,0x2e0bf749e05b18e7L,
47331         0x547bd050b48bdd87L,0x0490c970f5aa2fc4L,0xced5e4cf2b431390L },
47332       { 0x07d8270451d2898eL,0x44b72442083b57d4L,0xa4ada2305037fce8L,
47333         0x55f7905e50510da6L,0xd8ee724f8d890a98L,0x925a8e7c11b85640L } },
47334     /* 53 << 378 */
47335     { { 0x8357d8bb460e77b2L,0xc749a6a77709a52bL,0x94035a1f0c82ab81L,
47336         0x15245ac616c11ef4L,0xbf3cd96c034d021bL,0xf79e2d39b2e8fac1L },
47337       { 0x387015194b6cf1bdL,0x341f9b53b3143bf7L,0xb2584aabdda9acf2L,
47338         0x16f34bdd553a8e68L,0x89d0c4c5da7830b3L,0x6cfe44c63f488c2eL } },
47339     /* 54 << 378 */
47340     { { 0xee536a26d4bcaa59L,0x5ea6a57c699397bfL,0xb28f476b59a7eb99L,
47341         0xa901f2551406ec90L,0x7b6e3e4d1f54ef38L,0x058ff1904c89c9a8L },
47342       { 0x5690fa10fca546ccL,0xfe98793145e14268L,0x6181fa1675362f5dL,
47343         0x3ebe84466964b9aeL,0x3e1957812ce0f969L,0xb33ea619b0195852L } },
47344     /* 55 << 378 */
47345     { { 0xeef402410ec537acL,0x1f72c1f8911316f6L,0xab4bb08268cc6678L,
47346         0x031fc087255e8c5eL,0x99c2ff0b948ac53bL,0x13db3201919c1870L },
47347       { 0xdec81fd312057a3cL,0xbdffa226ff7a44cbL,0x748d2e93d97167e2L,
47348         0x33a9fe40bd21effeL,0xe08e4213817ea560L,0x2221798b9f4337d5L } },
47349     /* 56 << 378 */
47350     { { 0xda828fe556467257L,0x5e9abf67d640c2a1L,0x0eed233cc25c696aL,
47351         0x72483dc5b3e1d84fL,0x30bf1ee34f114abcL,0xf58b321ed1f9bce8L },
47352       { 0xcb26564c97524f33L,0xdc2f105e1e453229L,0x9da43ceb72a982ddL,
47353         0xecf5649dfeef8862L,0xd8afda341fa2f06dL,0xf0d0ced355035432L } },
47354     /* 57 << 378 */
47355     { { 0xec22bb32205a5301L,0xe4d168e75b0b727bL,0x91217a6be34fe2e0L,
47356         0x03c6831675f0f139L,0xb21e275d8b991b29L,0x7f517c9c01f3f401L },
47357       { 0xbbe95d19e55e49faL,0xc5470808504514b1L,0xb88be15c7cc1367dL,
47358         0x242cb06bbfd24bacL,0x08647a158d2ab0baL,0x8f1fd1bd5716ed9bL } },
47359     /* 58 << 378 */
47360     { { 0xe787054518ba5236L,0x243622f9e8a47507L,0xe7d94f4697b97d7cL,
47361         0xb120589021649255L,0x8b5101310dd4e1d4L,0x1690687e164c44baL },
47362       { 0x65bb4d8cf100fef5L,0xfffffee70a684c3dL,0x2aa11707c463a975L,
47363         0xccaddeaf391ad03dL,0x4d2cda1c81cca7deL,0x9d3eaa58c5b0f8e7L } },
47364     /* 59 << 378 */
47365     { { 0x3d92ecc18f8802dfL,0x3024ce311a719461L,0x6bdf53fc46c1f31bL,
47366         0x4f4576a12c9c7744L,0xe1ee7508c3ff7356L,0xd4b25ed3883ebf03L },
47367       { 0x1dc46052420c3ac9L,0x376ebbfa11ecefa9L,0x36e175265e9693f5L,
47368         0xeb82b33740ed3143L,0x6960312ff19fa66aL,0xc7edb5db6c742e1bL } },
47369     /* 60 << 378 */
47370     { { 0x5bfa10cd1ca459edL,0x593f085a6dcf56bfL,0xe6f0ad9bc0579c3eL,
47371         0xc11c95a22527c1adL,0x7cfa71e1cf1cb8b3L,0xedcff8331d6dc79dL },
47372       { 0x581c4bbe432521c9L,0xbf620096144e11a0L,0x54c38b71be3a107bL,
47373         0xed555e37e2606ec0L,0x3fb148b8d721d034L,0x79d53dad0091bc90L } },
47374     /* 61 << 378 */
47375     { { 0x4b98cb69c5c8a182L,0x887071bbcac96dabL,0x03d42e96afc190c3L,
47376         0xbc2c3b8d7a813820L,0x1ee7797f6590d0ecL,0x4a95f7f3ad4777a4L },
47377       { 0x7a36de4e2a8d2736L,0x7f8c6751ad78dab6L,0xf9874bf6974c0a8eL,
47378         0x759fee1c8b53025aL,0x1b00fb28a2171c8bL,0xdf206f19be8f2e7eL } },
47379     /* 62 << 378 */
47380     { { 0xe6bbcf0bf8ed6302L,0x7734dc91f8fe7a42L,0x840210ee61ff9d1eL,
47381         0xbbf2d5477007f2e9L,0x0f17d421a6542ac0L,0x0b2d3d2ee01df4e9L },
47382       { 0x520e4fbb84f3703fL,0x8362f7b1431106b7L,0xdcfc96ae6e50d836L,
47383         0x2dfa176cc44153bbL,0xeef1c6710b09ffe2L,0x633a2ac888531d81L } },
47384     /* 63 << 378 */
47385     { { 0x29262b6d7636a78dL,0xdc504f01d3ce2967L,0xa441e5035bcf0e19L,
47386         0x8025224f7ad39d9aL,0x780ec65de871b792L,0x977b4bce597694b4L },
47387       { 0xe05eaeb87fe3ef11L,0x1cff87ac9748b10eL,0xb669c1d60c34153aL,
47388         0xf5da63e0f8f90368L,0x6f7f2fc47d31bf61L,0x37e9158235c16a0fL } },
47389     /* 64 << 378 */
47390     { { 0xcf17f9dc08d1be5dL,0xb55de4c8afdfeb23L,0xa69454ffe437b29cL,
47391         0x6628d789e27ee9e2L,0x56e3b975ee3af03bL,0x0083fe9c2f532d62L },
47392       { 0xcae15213e63e7511L,0xdb5384f386ed849cL,0x902ba959fa4d825fL,
47393         0xbad700d55ae17566L,0x16b2c5dc14c82eb4L,0xa4b057a736708ea7L } },
47394 };
47395 
47396 /* Multiply the point by the scalar and return the result.
47397  * If map is true then convert result to affine coordinates.
47398  *
47399  * Pre-computed table containing multiples of g times powers of 2.
47400  * Width between powers is 7 bits.
47401  * Accumulate into the result.
47402  *
47403  * r      Resulting point.
47404  * g      Point to scalar multiply.
47405  * k      Scalar to multiply by.
47406  * table  Pre-computed table of points.
47407  * map    Indicates whether to convert result to affine.
47408  * ct     Constant time required.
47409  * heap   Heap to use for allocation.
47410  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
47411  */
sp_384_ecc_mulmod_add_only_6(sp_point_384 * r,const sp_point_384 * g,const sp_table_entry_384 * table,const sp_digit * k,int map,int ct,void * heap)47412 static int sp_384_ecc_mulmod_add_only_6(sp_point_384* r, const sp_point_384* g,
47413         const sp_table_entry_384* table, const sp_digit* k, int map,
47414         int ct, void* heap)
47415 {
47416 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
47417     sp_point_384* rt = NULL;
47418     sp_digit* tmp = NULL;
47419 #else
47420     sp_point_384 rt[2];
47421     sp_digit tmp[2 * 6 * 6];
47422 #endif
47423     sp_point_384* p = NULL;
47424     sp_digit* negy = NULL;
47425     int i;
47426     ecc_recode_384 v[55];
47427     int err = MP_OKAY;
47428 
47429     (void)g;
47430     (void)ct;
47431     (void)heap;
47432 
47433 
47434 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
47435     rt = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 2, heap,
47436                                      DYNAMIC_TYPE_ECC);
47437     if (rt == NULL)
47438         err = MEMORY_E;
47439     if (err == MP_OKAY) {
47440         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 6 * 6, heap,
47441                                  DYNAMIC_TYPE_ECC);
47442         if (tmp == NULL)
47443             err = MEMORY_E;
47444     }
47445 #endif
47446 
47447     if (err == MP_OKAY) {
47448         negy = tmp;
47449         p = rt + 1;
47450     }
47451 
47452     if (err == MP_OKAY) {
47453         sp_384_ecc_recode_7_6(k, v);
47454 
47455         XMEMCPY(p->z, p384_norm_mod, sizeof(p384_norm_mod));
47456         XMEMCPY(rt->z, p384_norm_mod, sizeof(p384_norm_mod));
47457 
47458         i = 54;
47459     #ifndef WC_NO_CACHE_RESISTANT
47460         if (ct) {
47461             sp_384_get_entry_65_6(rt, &table[i * 65], v[i].i);
47462         }
47463         else
47464     #endif
47465         {
47466             XMEMCPY(rt->x, table[i * 65 + v[i].i].x, sizeof(table->x));
47467             XMEMCPY(rt->y, table[i * 65 + v[i].i].y, sizeof(table->y));
47468         }
47469         rt->infinity = !v[i].i;
47470         for (--i; i>=0; i--) {
47471         #ifndef WC_NO_CACHE_RESISTANT
47472             if (ct) {
47473                 sp_384_get_entry_65_6(p, &table[i * 65], v[i].i);
47474             }
47475             else
47476         #endif
47477             {
47478                 XMEMCPY(p->x, table[i * 65 + v[i].i].x, sizeof(table->x));
47479                 XMEMCPY(p->y, table[i * 65 + v[i].i].y, sizeof(table->y));
47480             }
47481             p->infinity = !v[i].i;
47482             sp_384_sub_6(negy, p384_mod, p->y);
47483             sp_384_norm_6(negy);
47484             sp_384_cond_copy_6(p->y, negy, 0 - v[i].neg);
47485             sp_384_proj_point_add_qz1_6(rt, rt, p, tmp);
47486         }
47487         if (map != 0) {
47488             sp_384_map_6(r, rt, tmp);
47489         }
47490         else {
47491             XMEMCPY(r, rt, sizeof(sp_point_384));
47492         }
47493     }
47494 
47495 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
47496     if (tmp != NULL)
47497 #endif
47498     {
47499         ForceZero(tmp, sizeof(sp_digit) * 2 * 6 * 6);
47500     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
47501         XFREE(tmp, heap, DYNAMIC_TYPE_ECC);
47502     #endif
47503     }
47504 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
47505     if (rt != NULL)
47506         XFREE(rt, heap, DYNAMIC_TYPE_ECC);
47507 #endif
47508 
47509     return MP_OKAY;
47510 }
47511 
47512 /* Multiply the base point of P384 by the scalar and return the result.
47513  * If map is true then convert result to affine coordinates.
47514  *
47515  * r     Resulting point.
47516  * k     Scalar to multiply by.
47517  * map   Indicates whether to convert result to affine.
47518  * ct    Constant time required.
47519  * heap  Heap to use for allocation.
47520  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
47521  */
sp_384_ecc_mulmod_base_6(sp_point_384 * r,const sp_digit * k,int map,int ct,void * heap)47522 static int sp_384_ecc_mulmod_base_6(sp_point_384* r, const sp_digit* k,
47523         int map, int ct, void* heap)
47524 {
47525     return sp_384_ecc_mulmod_add_only_6(r, NULL, p384_table,
47526                                       k, map, ct, heap);
47527 }
47528 
47529 #ifdef HAVE_INTEL_AVX2
47530 /* Multiply the point by the scalar and return the result.
47531  * If map is true then convert result to affine coordinates.
47532  *
47533  * Pre-computed table containing multiples of g times powers of 2.
47534  * Width between powers is 7 bits.
47535  * Accumulate into the result.
47536  *
47537  * r      Resulting point.
47538  * g      Point to scalar multiply.
47539  * k      Scalar to multiply by.
47540  * table  Pre-computed table of points.
47541  * map    Indicates whether to convert result to affine.
47542  * ct     Constant time required.
47543  * heap   Heap to use for allocation.
47544  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
47545  */
sp_384_ecc_mulmod_add_only_avx2_6(sp_point_384 * r,const sp_point_384 * g,const sp_table_entry_384 * table,const sp_digit * k,int map,int ct,void * heap)47546 static int sp_384_ecc_mulmod_add_only_avx2_6(sp_point_384* r, const sp_point_384* g,
47547         const sp_table_entry_384* table, const sp_digit* k, int map,
47548         int ct, void* heap)
47549 {
47550 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
47551     sp_point_384* rt = NULL;
47552     sp_digit* tmp = NULL;
47553 #else
47554     sp_point_384 rt[2];
47555     sp_digit tmp[2 * 6 * 6];
47556 #endif
47557     sp_point_384* p = NULL;
47558     sp_digit* negy = NULL;
47559     int i;
47560     ecc_recode_384 v[55];
47561     int err = MP_OKAY;
47562 
47563     (void)g;
47564     (void)ct;
47565     (void)heap;
47566 
47567 
47568 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
47569     rt = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 2, heap,
47570                                      DYNAMIC_TYPE_ECC);
47571     if (rt == NULL)
47572         err = MEMORY_E;
47573     if (err == MP_OKAY) {
47574         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 6 * 6, heap,
47575                                  DYNAMIC_TYPE_ECC);
47576         if (tmp == NULL)
47577             err = MEMORY_E;
47578     }
47579 #endif
47580 
47581     if (err == MP_OKAY) {
47582         negy = tmp;
47583         p = rt + 1;
47584     }
47585 
47586     if (err == MP_OKAY) {
47587         sp_384_ecc_recode_7_6(k, v);
47588 
47589         XMEMCPY(p->z, p384_norm_mod, sizeof(p384_norm_mod));
47590         XMEMCPY(rt->z, p384_norm_mod, sizeof(p384_norm_mod));
47591 
47592         i = 54;
47593     #ifndef WC_NO_CACHE_RESISTANT
47594         if (ct) {
47595             sp_384_get_entry_65_avx2_6(rt, &table[i * 65], v[i].i);
47596         }
47597         else
47598     #endif
47599         {
47600             XMEMCPY(rt->x, table[i * 65 + v[i].i].x, sizeof(table->x));
47601             XMEMCPY(rt->y, table[i * 65 + v[i].i].y, sizeof(table->y));
47602         }
47603         rt->infinity = !v[i].i;
47604         for (--i; i>=0; i--) {
47605         #ifndef WC_NO_CACHE_RESISTANT
47606             if (ct) {
47607                 sp_384_get_entry_65_avx2_6(p, &table[i * 65], v[i].i);
47608             }
47609             else
47610         #endif
47611             {
47612                 XMEMCPY(p->x, table[i * 65 + v[i].i].x, sizeof(table->x));
47613                 XMEMCPY(p->y, table[i * 65 + v[i].i].y, sizeof(table->y));
47614             }
47615             p->infinity = !v[i].i;
47616             sp_384_sub_6(negy, p384_mod, p->y);
47617             sp_384_norm_6(negy);
47618             sp_384_cond_copy_6(p->y, negy, 0 - v[i].neg);
47619             sp_384_proj_point_add_qz1_avx2_6(rt, rt, p, tmp);
47620         }
47621         if (map != 0) {
47622             sp_384_map_avx2_6(r, rt, tmp);
47623         }
47624         else {
47625             XMEMCPY(r, rt, sizeof(sp_point_384));
47626         }
47627     }
47628 
47629 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
47630     if (tmp != NULL)
47631 #endif
47632     {
47633         ForceZero(tmp, sizeof(sp_digit) * 2 * 6 * 6);
47634     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
47635         XFREE(tmp, heap, DYNAMIC_TYPE_ECC);
47636     #endif
47637     }
47638 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
47639     if (rt != NULL)
47640         XFREE(rt, heap, DYNAMIC_TYPE_ECC);
47641 #endif
47642 
47643     return MP_OKAY;
47644 }
47645 
47646 /* Multiply the base point of P384 by the scalar and return the result.
47647  * If map is true then convert result to affine coordinates.
47648  *
47649  * r     Resulting point.
47650  * k     Scalar to multiply by.
47651  * map   Indicates whether to convert result to affine.
47652  * ct    Constant time required.
47653  * heap  Heap to use for allocation.
47654  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
47655  */
sp_384_ecc_mulmod_base_avx2_6(sp_point_384 * r,const sp_digit * k,int map,int ct,void * heap)47656 static int sp_384_ecc_mulmod_base_avx2_6(sp_point_384* r, const sp_digit* k,
47657         int map, int ct, void* heap)
47658 {
47659     return sp_384_ecc_mulmod_add_only_avx2_6(r, NULL, p384_table,
47660                                       k, map, ct, heap);
47661 }
47662 
47663 #endif /* HAVE_INTEL_AVX2 */
47664 #endif /* WOLFSSL_SP_SMALL */
47665 /* Multiply the base point of P384 by the scalar and return the result.
47666  * If map is true then convert result to affine coordinates.
47667  *
47668  * km    Scalar to multiply by.
47669  * r     Resulting point.
47670  * map   Indicates whether to convert result to affine.
47671  * heap  Heap to use for allocation.
47672  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
47673  */
sp_ecc_mulmod_base_384(const mp_int * km,ecc_point * r,int map,void * heap)47674 int sp_ecc_mulmod_base_384(const mp_int* km, ecc_point* r, int map, void* heap)
47675 {
47676 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
47677     sp_point_384* point = NULL;
47678     sp_digit* k = NULL;
47679 #else
47680     sp_point_384  point[1];
47681     sp_digit k[6];
47682 #endif
47683     int err = MP_OKAY;
47684 #ifdef HAVE_INTEL_AVX2
47685     word32 cpuid_flags = cpuid_get_flags();
47686 #endif
47687 
47688 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
47689     point = (sp_point_384*)XMALLOC(sizeof(sp_point_384), heap,
47690                                          DYNAMIC_TYPE_ECC);
47691     if (point == NULL)
47692         err = MEMORY_E;
47693     if (err == MP_OKAY) {
47694         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 6, heap,
47695                                DYNAMIC_TYPE_ECC);
47696         if (k == NULL)
47697             err = MEMORY_E;
47698     }
47699 #endif
47700 
47701     if (err == MP_OKAY) {
47702         sp_384_from_mp(k, 6, km);
47703 
47704 #ifdef HAVE_INTEL_AVX2
47705         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
47706             err = sp_384_ecc_mulmod_base_avx2_6(point, k, map, 1, heap);
47707         else
47708 #endif
47709             err = sp_384_ecc_mulmod_base_6(point, k, map, 1, heap);
47710     }
47711     if (err == MP_OKAY) {
47712         err = sp_384_point_to_ecc_point_6(point, r);
47713     }
47714 
47715 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
47716     if (k != NULL)
47717         XFREE(k, heap, DYNAMIC_TYPE_ECC);
47718     if (point != NULL)
47719         XFREE(point, heap, DYNAMIC_TYPE_ECC);
47720 #endif
47721 
47722     return err;
47723 }
47724 
47725 /* Multiply the base point of P384 by the scalar, add point a and return
47726  * the result. If map is true then convert result to affine coordinates.
47727  *
47728  * km      Scalar to multiply by.
47729  * am      Point to add to scalar mulitply result.
47730  * inMont  Point to add is in montgomery form.
47731  * r       Resulting point.
47732  * map     Indicates whether to convert result to affine.
47733  * heap    Heap to use for allocation.
47734  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
47735  */
sp_ecc_mulmod_base_add_384(const mp_int * km,const ecc_point * am,int inMont,ecc_point * r,int map,void * heap)47736 int sp_ecc_mulmod_base_add_384(const mp_int* km, const ecc_point* am,
47737         int inMont, ecc_point* r, int map, void* heap)
47738 {
47739 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
47740     sp_point_384* point = NULL;
47741     sp_digit* k = NULL;
47742 #else
47743     sp_point_384 point[2];
47744     sp_digit k[6 + 6 * 2 * 6];
47745 #endif
47746     sp_point_384* addP = NULL;
47747     sp_digit* tmp = NULL;
47748     int err = MP_OKAY;
47749 #ifdef HAVE_INTEL_AVX2
47750     word32 cpuid_flags = cpuid_get_flags();
47751 #endif
47752 
47753 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
47754     point = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 2, heap,
47755                                          DYNAMIC_TYPE_ECC);
47756     if (point == NULL)
47757         err = MEMORY_E;
47758     if (err == MP_OKAY) {
47759         k = (sp_digit*)XMALLOC(
47760             sizeof(sp_digit) * (6 + 6 * 2 * 6),
47761             heap, DYNAMIC_TYPE_ECC);
47762         if (k == NULL)
47763             err = MEMORY_E;
47764     }
47765 #endif
47766 
47767     if (err == MP_OKAY) {
47768         addP = point + 1;
47769         tmp = k + 6;
47770 
47771         sp_384_from_mp(k, 6, km);
47772         sp_384_point_from_ecc_point_6(addP, am);
47773     }
47774     if ((err == MP_OKAY) && (!inMont)) {
47775         err = sp_384_mod_mul_norm_6(addP->x, addP->x, p384_mod);
47776     }
47777     if ((err == MP_OKAY) && (!inMont)) {
47778         err = sp_384_mod_mul_norm_6(addP->y, addP->y, p384_mod);
47779     }
47780     if ((err == MP_OKAY) && (!inMont)) {
47781         err = sp_384_mod_mul_norm_6(addP->z, addP->z, p384_mod);
47782     }
47783     if (err == MP_OKAY) {
47784 #ifdef HAVE_INTEL_AVX2
47785         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
47786             err = sp_384_ecc_mulmod_base_avx2_6(point, k, 0, 0, heap);
47787         else
47788 #endif
47789             err = sp_384_ecc_mulmod_base_6(point, k, 0, 0, heap);
47790     }
47791     if (err == MP_OKAY) {
47792 #ifdef HAVE_INTEL_AVX2
47793         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
47794             sp_384_proj_point_add_avx2_6(point, point, addP, tmp);
47795         else
47796 #endif
47797             sp_384_proj_point_add_6(point, point, addP, tmp);
47798 
47799         if (map) {
47800 #ifdef HAVE_INTEL_AVX2
47801             if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
47802                 sp_384_map_avx2_6(point, point, tmp);
47803             else
47804 #endif
47805                 sp_384_map_6(point, point, tmp);
47806         }
47807 
47808         err = sp_384_point_to_ecc_point_6(point, r);
47809     }
47810 
47811 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
47812     if (k != NULL)
47813         XFREE(k, heap, DYNAMIC_TYPE_ECC);
47814     if (point)
47815         XFREE(point, heap, DYNAMIC_TYPE_ECC);
47816 #endif
47817 
47818     return err;
47819 }
47820 
47821 #if defined(WOLFSSL_VALIDATE_ECC_KEYGEN) || defined(HAVE_ECC_SIGN) || \
47822                                                         defined(HAVE_ECC_VERIFY)
47823 /* Returns 1 if the number of zero.
47824  * Implementation is constant time.
47825  *
47826  * a  Number to check.
47827  * returns 1 if the number is zero and 0 otherwise.
47828  */
sp_384_iszero_6(const sp_digit * a)47829 static int sp_384_iszero_6(const sp_digit* a)
47830 {
47831     return (a[0] | a[1] | a[2] | a[3] | a[4] | a[5]) == 0;
47832 }
47833 
47834 #endif /* WOLFSSL_VALIDATE_ECC_KEYGEN | HAVE_ECC_SIGN | HAVE_ECC_VERIFY */
47835 extern void sp_384_add_one_6(sp_digit* a);
47836 extern void sp_384_from_bin_bswap(sp_digit* r, int size, const byte* a, int n);
47837 extern void sp_384_from_bin_movbe(sp_digit* r, int size, const byte* a, int n);
47838 /* Read big endian unsigned byte array into r.
47839  *
47840  * r  A single precision integer.
47841  * size  Maximum number of bytes to convert
47842  * a  Byte array.
47843  * n  Number of bytes in array to read.
47844  */
sp_384_from_bin(sp_digit * r,int size,const byte * a,int n)47845 static void sp_384_from_bin(sp_digit* r, int size, const byte* a, int n)
47846 {
47847 #ifndef NO_MOVBE_SUPPORT
47848     word32 cpuid_flags = cpuid_get_flags();
47849 
47850     if (IS_INTEL_MOVBE(cpuid_flags)) {
47851         sp_384_from_bin_movbe(r, size, a, n);
47852     }
47853     else
47854 #endif
47855     {
47856         sp_384_from_bin_bswap(r, size, a, n);
47857     }
47858 }
47859 
47860 /* Generates a scalar that is in the range 1..order-1.
47861  *
47862  * rng  Random number generator.
47863  * k    Scalar value.
47864  * returns RNG failures, MEMORY_E when memory allocation fails and
47865  * MP_OKAY on success.
47866  */
sp_384_ecc_gen_k_6(WC_RNG * rng,sp_digit * k)47867 static int sp_384_ecc_gen_k_6(WC_RNG* rng, sp_digit* k)
47868 {
47869     int err;
47870     byte buf[48];
47871 
47872     do {
47873         err = wc_RNG_GenerateBlock(rng, buf, sizeof(buf));
47874         if (err == 0) {
47875             sp_384_from_bin(k, 6, buf, (int)sizeof(buf));
47876             if (sp_384_cmp_6(k, p384_order2) <= 0) {
47877                 sp_384_add_one_6(k);
47878                 break;
47879             }
47880         }
47881     }
47882     while (err == 0);
47883 
47884     return err;
47885 }
47886 
47887 /* Makes a random EC key pair.
47888  *
47889  * rng   Random number generator.
47890  * priv  Generated private value.
47891  * pub   Generated public point.
47892  * heap  Heap to use for allocation.
47893  * returns ECC_INF_E when the point does not have the correct order, RNG
47894  * failures, MEMORY_E when memory allocation fails and MP_OKAY on success.
47895  */
sp_ecc_make_key_384(WC_RNG * rng,mp_int * priv,ecc_point * pub,void * heap)47896 int sp_ecc_make_key_384(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap)
47897 {
47898 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
47899     sp_point_384* point = NULL;
47900     sp_digit* k = NULL;
47901 #else
47902     #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
47903     sp_point_384 point[2];
47904     #else
47905     sp_point_384 point[1];
47906     #endif
47907     sp_digit k[6];
47908 #endif
47909 #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
47910     sp_point_384* infinity = NULL;
47911 #endif
47912     int err = MP_OKAY;
47913 
47914 #ifdef HAVE_INTEL_AVX2
47915     word32 cpuid_flags = cpuid_get_flags();
47916 #endif
47917 
47918     (void)heap;
47919 
47920 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
47921     #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
47922     point = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 2, heap, DYNAMIC_TYPE_ECC);
47923     #else
47924     point = (sp_point_384*)XMALLOC(sizeof(sp_point_384), heap, DYNAMIC_TYPE_ECC);
47925     #endif
47926     if (point == NULL)
47927         err = MEMORY_E;
47928     if (err == MP_OKAY) {
47929         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 6, heap,
47930                                DYNAMIC_TYPE_ECC);
47931         if (k == NULL)
47932             err = MEMORY_E;
47933     }
47934 #endif
47935 
47936     if (err == MP_OKAY) {
47937     #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
47938         infinity = point + 1;
47939     #endif
47940 
47941         err = sp_384_ecc_gen_k_6(rng, k);
47942     }
47943     if (err == MP_OKAY) {
47944 #ifdef HAVE_INTEL_AVX2
47945         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
47946             err = sp_384_ecc_mulmod_base_avx2_6(point, k, 1, 1, NULL);
47947         else
47948 #endif
47949             err = sp_384_ecc_mulmod_base_6(point, k, 1, 1, NULL);
47950     }
47951 
47952 #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
47953     if (err == MP_OKAY) {
47954 #ifdef HAVE_INTEL_AVX2
47955         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
47956             err = sp_384_ecc_mulmod_avx2_6(infinity, point, p384_order, 1, 1,
47957                                                                           NULL);
47958         }
47959         else
47960 #endif
47961             err = sp_384_ecc_mulmod_6(infinity, point, p384_order, 1, 1, NULL);
47962     }
47963     if (err == MP_OKAY) {
47964         if (sp_384_iszero_6(point->x) || sp_384_iszero_6(point->y)) {
47965             err = ECC_INF_E;
47966         }
47967     }
47968 #endif
47969 
47970     if (err == MP_OKAY) {
47971         err = sp_384_to_mp(k, priv);
47972     }
47973     if (err == MP_OKAY) {
47974         err = sp_384_point_to_ecc_point_6(point, pub);
47975     }
47976 
47977 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
47978     if (k != NULL)
47979         XFREE(k, heap, DYNAMIC_TYPE_ECC);
47980     if (point != NULL) {
47981         /* point is not sensitive, so no need to zeroize */
47982         XFREE(point, heap, DYNAMIC_TYPE_ECC);
47983     }
47984 #endif
47985 
47986     return err;
47987 }
47988 
47989 #ifdef HAVE_ECC_DHE
47990 extern void sp_384_to_bin_bswap_6(sp_digit* r, byte* a);
47991 extern void sp_384_to_bin_movbe_6(sp_digit* r, byte* a);
47992 /* Write r as big endian to byte array.
47993  * Fixed length number of bytes written: 48
47994  *
47995  * r  A single precision integer.
47996  * a  Byte array.
47997  */
sp_384_to_bin_6(sp_digit * r,byte * a)47998 static void sp_384_to_bin_6(sp_digit* r, byte* a)
47999 {
48000 #ifndef NO_MOVBE_SUPPORT
48001     word32 cpuid_flags = cpuid_get_flags();
48002 
48003     if (IS_INTEL_MOVBE(cpuid_flags)) {
48004         sp_384_to_bin_movbe_6(r, a);
48005     }
48006     else
48007 #endif
48008     {
48009         sp_384_to_bin_bswap_6(r, a);
48010     }
48011 }
48012 
48013 /* Multiply the point by the scalar and serialize the X ordinate.
48014  * The number is 0 padded to maximum size on output.
48015  *
48016  * priv    Scalar to multiply the point by.
48017  * pub     Point to multiply.
48018  * out     Buffer to hold X ordinate.
48019  * outLen  On entry, size of the buffer in bytes.
48020  *         On exit, length of data in buffer in bytes.
48021  * heap    Heap to use for allocation.
48022  * returns BUFFER_E if the buffer is to small for output size,
48023  * MEMORY_E when memory allocation fails and MP_OKAY on success.
48024  */
sp_ecc_secret_gen_384(const mp_int * priv,const ecc_point * pub,byte * out,word32 * outLen,void * heap)48025 int sp_ecc_secret_gen_384(const mp_int* priv, const ecc_point* pub, byte* out,
48026                           word32* outLen, void* heap)
48027 {
48028 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
48029     sp_point_384* point = NULL;
48030     sp_digit* k = NULL;
48031 #else
48032     sp_point_384 point[1];
48033     sp_digit k[6];
48034 #endif
48035     int err = MP_OKAY;
48036 #ifdef HAVE_INTEL_AVX2
48037     word32 cpuid_flags = cpuid_get_flags();
48038 #endif
48039 
48040     if (*outLen < 48U) {
48041         err = BUFFER_E;
48042     }
48043 
48044 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
48045     if (err == MP_OKAY) {
48046         point = (sp_point_384*)XMALLOC(sizeof(sp_point_384), heap,
48047                                          DYNAMIC_TYPE_ECC);
48048         if (point == NULL)
48049             err = MEMORY_E;
48050     }
48051     if (err == MP_OKAY) {
48052         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 6, heap,
48053                                DYNAMIC_TYPE_ECC);
48054         if (k == NULL)
48055             err = MEMORY_E;
48056     }
48057 #endif
48058 
48059     if (err == MP_OKAY) {
48060         sp_384_from_mp(k, 6, priv);
48061         sp_384_point_from_ecc_point_6(point, pub);
48062 #ifdef HAVE_INTEL_AVX2
48063         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
48064             err = sp_384_ecc_mulmod_avx2_6(point, point, k, 1, 1, heap);
48065         else
48066 #endif
48067             err = sp_384_ecc_mulmod_6(point, point, k, 1, 1, heap);
48068     }
48069     if (err == MP_OKAY) {
48070         sp_384_to_bin_6(point->x, out);
48071         *outLen = 48;
48072     }
48073 
48074 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
48075     if (k != NULL)
48076         XFREE(k, heap, DYNAMIC_TYPE_ECC);
48077     if (point != NULL)
48078         XFREE(point, heap, DYNAMIC_TYPE_ECC);
48079 #endif
48080 
48081     return err;
48082 }
48083 #endif /* HAVE_ECC_DHE */
48084 
48085 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
48086 #ifdef HAVE_INTEL_AVX2
48087 #endif /* HAVE_INTEL_AVX2 */
48088 #endif
48089 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
48090 extern sp_digit sp_384_sub_in_place_6(sp_digit* a, const sp_digit* b);
48091 extern void sp_384_mul_d_6(sp_digit* r, const sp_digit* a, sp_digit b);
48092 extern void sp_384_mul_d_avx2_6(sp_digit* r, const sp_digit* a, const sp_digit b);
48093 #ifdef _WIN64
48094 #if _MSC_VER < 1920
48095 extern sp_digit div_384_word_asm_6(sp_digit d1, sp_digit d0, sp_digit div);
48096 #endif /* _MSC_VER < 1920 */
48097 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
48098  *
48099  * d1   The high order half of the number to divide.
48100  * d0   The low order half of the number to divide.
48101  * div  The dividend.
48102  * returns the result of the division.
48103  */
div_384_word_6(sp_digit d1,sp_digit d0,sp_digit div)48104 static WC_INLINE sp_digit div_384_word_6(sp_digit d1, sp_digit d0,
48105         sp_digit div)
48106 {
48107     ASSERT_SAVED_VECTOR_REGISTERS();
48108 #if _MSC_VER >= 1920
48109     return _udiv128(d1, d0, div, NULL);
48110 #else
48111     return div_384_word_asm_6(d1, d0, div);
48112 #endif
48113 }
48114 #else
48115 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
48116  *
48117  * d1   The high order half of the number to divide.
48118  * d0   The low order half of the number to divide.
48119  * div  The dividend.
48120  * returns the result of the division.
48121  */
div_384_word_6(sp_digit d1,sp_digit d0,sp_digit div)48122 static WC_INLINE sp_digit div_384_word_6(sp_digit d1, sp_digit d0,
48123         sp_digit div)
48124 {
48125     ASSERT_SAVED_VECTOR_REGISTERS();
48126     register sp_digit r asm("rax");
48127     __asm__ __volatile__ (
48128         "divq %3"
48129         : "=a" (r)
48130         : "d" (d1), "a" (d0), "r" (div)
48131         :
48132     );
48133     return r;
48134 }
48135 #endif /* _WIN64 */
48136 /* AND m into each word of a and store in r.
48137  *
48138  * r  A single precision integer.
48139  * a  A single precision integer.
48140  * m  Mask to AND against each digit.
48141  */
sp_384_mask_6(sp_digit * r,const sp_digit * a,sp_digit m)48142 static void sp_384_mask_6(sp_digit* r, const sp_digit* a, sp_digit m)
48143 {
48144 #ifdef WOLFSSL_SP_SMALL
48145     int i;
48146 
48147     for (i=0; i<6; i++) {
48148         r[i] = a[i] & m;
48149     }
48150 #else
48151     r[0] = a[0] & m;
48152     r[1] = a[1] & m;
48153     r[2] = a[2] & m;
48154     r[3] = a[3] & m;
48155     r[4] = a[4] & m;
48156     r[5] = a[5] & m;
48157 #endif
48158 }
48159 
48160 /* Divide d in a and put remainder into r (m*d + r = a)
48161  * m is not calculated as it is not needed at this time.
48162  *
48163  * a  Number to be divided.
48164  * d  Number to divide with.
48165  * m  Multiplier result.
48166  * r  Remainder from the division.
48167  * returns MP_OKAY indicating success.
48168  */
sp_384_div_6(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)48169 static WC_INLINE int sp_384_div_6(const sp_digit* a, const sp_digit* d, sp_digit* m,
48170         sp_digit* r)
48171 {
48172     sp_digit t1[12];
48173     sp_digit t2[7];
48174     sp_digit div;
48175     sp_digit r1;
48176     int i;
48177 #ifdef HAVE_INTEL_AVX2
48178     word32 cpuid_flags = cpuid_get_flags();
48179 #endif
48180 
48181     ASSERT_SAVED_VECTOR_REGISTERS();
48182 
48183     (void)m;
48184 
48185     div = d[5];
48186     XMEMCPY(t1, a, sizeof(*t1) * 2 * 6);
48187     r1 = sp_384_cmp_6(&t1[6], d) >= 0;
48188 #ifdef HAVE_INTEL_AVX2
48189     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
48190         sp_384_cond_sub_avx2_6(&t1[6], &t1[6], d, (sp_digit)0 - r1);
48191     else
48192 #endif
48193         sp_384_cond_sub_6(&t1[6], &t1[6], d, (sp_digit)0 - r1);
48194     for (i=5; i>=0; i--) {
48195         sp_digit hi = t1[6 + i] - (t1[6 + i] == div);
48196         r1 = div_384_word_6(hi, t1[6 + i - 1], div);
48197 
48198 #ifdef HAVE_INTEL_AVX2
48199         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
48200             sp_384_mul_d_avx2_6(t2, d, r1);
48201         else
48202 #endif
48203             sp_384_mul_d_6(t2, d, r1);
48204         t1[6 + i] += sp_384_sub_in_place_6(&t1[i], t2);
48205         t1[6 + i] -= t2[6];
48206         sp_384_mask_6(t2, d, t1[6 + i]);
48207         t1[6 + i] += sp_384_add_6(&t1[i], &t1[i], t2);
48208         sp_384_mask_6(t2, d, t1[6 + i]);
48209         t1[6 + i] += sp_384_add_6(&t1[i], &t1[i], t2);
48210     }
48211 
48212     r1 = sp_384_cmp_6(t1, d) >= 0;
48213 #ifdef HAVE_INTEL_AVX2
48214     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
48215         sp_384_cond_sub_avx2_6(r, t1, d, (sp_digit)0 - r1);
48216     else
48217 #endif
48218         sp_384_cond_sub_6(r, t1, d, (sp_digit)0 - r1);
48219 
48220     return MP_OKAY;
48221 }
48222 
48223 /* Reduce a modulo m into r. (r = a mod m)
48224  *
48225  * r  A single precision number that is the reduced result.
48226  * a  A single precision number that is to be reduced.
48227  * m  A single precision number that is the modulus to reduce with.
48228  * returns MP_OKAY indicating success.
48229  */
sp_384_mod_6(sp_digit * r,const sp_digit * a,const sp_digit * m)48230 static WC_INLINE int sp_384_mod_6(sp_digit* r, const sp_digit* a,
48231         const sp_digit* m)
48232 {
48233     ASSERT_SAVED_VECTOR_REGISTERS();
48234     return sp_384_div_6(a, m, NULL, r);
48235 }
48236 
48237 #endif
48238 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
48239 /* Multiply two number mod the order of P384 curve. (r = a * b mod order)
48240  *
48241  * r  Result of the multiplication.
48242  * a  First operand of the multiplication.
48243  * b  Second operand of the multiplication.
48244  */
sp_384_mont_mul_order_6(sp_digit * r,const sp_digit * a,const sp_digit * b)48245 static void sp_384_mont_mul_order_6(sp_digit* r, const sp_digit* a, const sp_digit* b)
48246 {
48247     sp_384_mul_6(r, a, b);
48248     sp_384_mont_reduce_order_6(r, p384_order, p384_mp_order);
48249 }
48250 
48251 #if defined(HAVE_ECC_SIGN) || (defined(HAVE_ECC_VERIFY) && defined(WOLFSSL_SP_SMALL))
48252 #ifdef WOLFSSL_SP_SMALL
48253 /* Order-2 for the P384 curve. */
48254 static const uint64_t p384_order_minus_2[6] = {
48255     0xecec196accc52971U,0x581a0db248b0a77aU,0xc7634d81f4372ddfU,
48256     0xffffffffffffffffU,0xffffffffffffffffU,0xffffffffffffffffU
48257 };
48258 #else
48259 /* The low half of the order-2 of the P384 curve. */
48260 static const uint64_t p384_order_low[3] = {
48261     0xecec196accc52971U,0x581a0db248b0a77aU,0xc7634d81f4372ddfU
48262 };
48263 #endif /* WOLFSSL_SP_SMALL */
48264 
48265 /* Square number mod the order of P384 curve. (r = a * a mod order)
48266  *
48267  * r  Result of the squaring.
48268  * a  Number to square.
48269  */
sp_384_mont_sqr_order_6(sp_digit * r,const sp_digit * a)48270 static void sp_384_mont_sqr_order_6(sp_digit* r, const sp_digit* a)
48271 {
48272     sp_384_sqr_6(r, a);
48273     sp_384_mont_reduce_order_6(r, p384_order, p384_mp_order);
48274 }
48275 
48276 #ifndef WOLFSSL_SP_SMALL
48277 /* Square number mod the order of P384 curve a number of times.
48278  * (r = a ^ n mod order)
48279  *
48280  * r  Result of the squaring.
48281  * a  Number to square.
48282  */
sp_384_mont_sqr_n_order_6(sp_digit * r,const sp_digit * a,int n)48283 static void sp_384_mont_sqr_n_order_6(sp_digit* r, const sp_digit* a, int n)
48284 {
48285     int i;
48286 
48287     sp_384_mont_sqr_order_6(r, a);
48288     for (i=1; i<n; i++) {
48289         sp_384_mont_sqr_order_6(r, r);
48290     }
48291 }
48292 #endif /* !WOLFSSL_SP_SMALL */
48293 
48294 /* Invert the number, in Montgomery form, modulo the order of the P384 curve.
48295  * (r = 1 / a mod order)
48296  *
48297  * r   Inverse result.
48298  * a   Number to invert.
48299  * td  Temporary data.
48300  */
48301 
48302 #ifdef WOLFSSL_SP_NONBLOCK
48303 typedef struct sp_384_mont_inv_order_6_ctx {
48304     int state;
48305     int i;
48306 } sp_384_mont_inv_order_6_ctx;
sp_384_mont_inv_order_6_nb(sp_ecc_ctx_t * sp_ctx,sp_digit * r,const sp_digit * a,sp_digit * t)48307 static int sp_384_mont_inv_order_6_nb(sp_ecc_ctx_t* sp_ctx, sp_digit* r, const sp_digit* a,
48308         sp_digit* t)
48309 {
48310     int err = FP_WOULDBLOCK;
48311     sp_384_mont_inv_order_6_ctx* ctx = (sp_384_mont_inv_order_6_ctx*)sp_ctx;
48312 
48313     typedef char ctx_size_test[sizeof(sp_384_mont_inv_order_6_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
48314     (void)sizeof(ctx_size_test);
48315 
48316     switch (ctx->state) {
48317     case 0:
48318         XMEMCPY(t, a, sizeof(sp_digit) * 6);
48319         ctx->i = 382;
48320         ctx->state = 1;
48321         break;
48322     case 1:
48323         sp_384_mont_sqr_order_6(t, t);
48324         ctx->state = 2;
48325         break;
48326     case 2:
48327         if ((p384_order_minus_2[ctx->i / 64] & ((sp_int_digit)1 << (ctx->i % 64))) != 0) {
48328             sp_384_mont_mul_order_6(t, t, a);
48329         }
48330         ctx->i--;
48331         ctx->state = (ctx->i == 0) ? 3 : 1;
48332         break;
48333     case 3:
48334         XMEMCPY(r, t, sizeof(sp_digit) * 6U);
48335         err = MP_OKAY;
48336         break;
48337     }
48338     return err;
48339 }
48340 #endif /* WOLFSSL_SP_NONBLOCK */
48341 
sp_384_mont_inv_order_6(sp_digit * r,const sp_digit * a,sp_digit * td)48342 static void sp_384_mont_inv_order_6(sp_digit* r, const sp_digit* a,
48343         sp_digit* td)
48344 {
48345 #ifdef WOLFSSL_SP_SMALL
48346     sp_digit* t = td;
48347     int i;
48348 
48349     XMEMCPY(t, a, sizeof(sp_digit) * 6);
48350     for (i=382; i>=0; i--) {
48351         sp_384_mont_sqr_order_6(t, t);
48352         if ((p384_order_minus_2[i / 64] & ((sp_int_digit)1 << (i % 64))) != 0) {
48353             sp_384_mont_mul_order_6(t, t, a);
48354         }
48355     }
48356     XMEMCPY(r, t, sizeof(sp_digit) * 6U);
48357 #else
48358     sp_digit* t = td;
48359     sp_digit* t2 = td + 2 * 6;
48360     sp_digit* t3 = td + 4 * 6;
48361     int i;
48362 
48363     /* t = a^2 */
48364     sp_384_mont_sqr_order_6(t, a);
48365     /* t = a^3 = t * a */
48366     sp_384_mont_mul_order_6(t, t, a);
48367     /* t2= a^c = t ^ 2 ^ 2 */
48368     sp_384_mont_sqr_n_order_6(t2, t, 2);
48369     /* t = a^f = t2 * t */
48370     sp_384_mont_mul_order_6(t, t2, t);
48371     /* t2= a^f0 = t ^ 2 ^ 4 */
48372     sp_384_mont_sqr_n_order_6(t2, t, 4);
48373     /* t = a^ff = t2 * t */
48374     sp_384_mont_mul_order_6(t, t2, t);
48375     /* t2= a^ff00 = t ^ 2 ^ 8 */
48376     sp_384_mont_sqr_n_order_6(t2, t, 8);
48377     /* t3= a^ffff = t2 * t */
48378     sp_384_mont_mul_order_6(t3, t2, t);
48379     /* t2= a^ffff0000 = t3 ^ 2 ^ 16 */
48380     sp_384_mont_sqr_n_order_6(t2, t3, 16);
48381     /* t = a^ffffffff = t2 * t3 */
48382     sp_384_mont_mul_order_6(t, t2, t3);
48383     /* t2= a^ffffffff0000 = t ^ 2 ^ 16  */
48384     sp_384_mont_sqr_n_order_6(t2, t, 16);
48385     /* t = a^ffffffffffff = t2 * t3 */
48386     sp_384_mont_mul_order_6(t, t2, t3);
48387     /* t2= a^ffffffffffff000000000000 = t ^ 2 ^ 48  */
48388     sp_384_mont_sqr_n_order_6(t2, t, 48);
48389     /* t= a^fffffffffffffffffffffffff = t2 * t */
48390     sp_384_mont_mul_order_6(t, t2, t);
48391     /* t2= a^ffffffffffffffffffffffff000000000000000000000000 */
48392     sp_384_mont_sqr_n_order_6(t2, t, 96);
48393     /* t2= a^ffffffffffffffffffffffffffffffffffffffffffffffff = t2 * t */
48394     sp_384_mont_mul_order_6(t2, t2, t);
48395     for (i=191; i>=1; i--) {
48396         sp_384_mont_sqr_order_6(t2, t2);
48397         if ((p384_order_low[i / 64] & ((sp_int_digit)1 << (i % 64))) != 0) {
48398             sp_384_mont_mul_order_6(t2, t2, a);
48399         }
48400     }
48401     sp_384_mont_sqr_order_6(t2, t2);
48402     sp_384_mont_mul_order_6(r, t2, a);
48403 #endif /* WOLFSSL_SP_SMALL */
48404 }
48405 
48406 #endif /* HAVE_ECC_SIGN || (HAVE_ECC_VERIFY && WOLFSSL_SP_SMALL) */
48407 #ifdef HAVE_INTEL_AVX2
48408 /* Multiply two number mod the order of P384 curve. (r = a * b mod order)
48409  *
48410  * r  Result of the multiplication.
48411  * a  First operand of the multiplication.
48412  * b  Second operand of the multiplication.
48413  */
sp_384_mont_mul_order_avx2_6(sp_digit * r,const sp_digit * a,const sp_digit * b)48414 static void sp_384_mont_mul_order_avx2_6(sp_digit* r, const sp_digit* a, const sp_digit* b)
48415 {
48416     sp_384_mul_avx2_6(r, a, b);
48417     sp_384_mont_reduce_order_avx2_6(r, p384_order, p384_mp_order);
48418 }
48419 
48420 #if defined(HAVE_ECC_SIGN) || (defined(HAVE_ECC_VERIFY) && defined(WOLFSSL_SP_SMALL))
48421 /* Square number mod the order of P384 curve. (r = a * a mod order)
48422  *
48423  * r  Result of the squaring.
48424  * a  Number to square.
48425  */
sp_384_mont_sqr_order_avx2_6(sp_digit * r,const sp_digit * a)48426 static void sp_384_mont_sqr_order_avx2_6(sp_digit* r, const sp_digit* a)
48427 {
48428     sp_384_sqr_avx2_6(r, a);
48429     sp_384_mont_reduce_order_avx2_6(r, p384_order, p384_mp_order);
48430 }
48431 
48432 #ifndef WOLFSSL_SP_SMALL
48433 /* Square number mod the order of P384 curve a number of times.
48434  * (r = a ^ n mod order)
48435  *
48436  * r  Result of the squaring.
48437  * a  Number to square.
48438  */
sp_384_mont_sqr_n_order_avx2_6(sp_digit * r,const sp_digit * a,int n)48439 static void sp_384_mont_sqr_n_order_avx2_6(sp_digit* r, const sp_digit* a, int n)
48440 {
48441     int i;
48442 
48443     sp_384_mont_sqr_order_avx2_6(r, a);
48444     for (i=1; i<n; i++) {
48445         sp_384_mont_sqr_order_avx2_6(r, r);
48446     }
48447 }
48448 #endif /* !WOLFSSL_SP_SMALL */
48449 
48450 /* Invert the number, in Montgomery form, modulo the order of the P384 curve.
48451  * (r = 1 / a mod order)
48452  *
48453  * r   Inverse result.
48454  * a   Number to invert.
48455  * td  Temporary data.
48456  */
48457 
48458 #ifdef WOLFSSL_SP_NONBLOCK
48459 typedef struct sp_384_mont_inv_order_avx2_6_ctx {
48460     int state;
48461     int i;
48462 } sp_384_mont_inv_order_avx2_6_ctx;
sp_384_mont_inv_order_avx2_6_nb(sp_ecc_ctx_t * sp_ctx,sp_digit * r,const sp_digit * a,sp_digit * t)48463 static int sp_384_mont_inv_order_avx2_6_nb(sp_ecc_ctx_t* sp_ctx, sp_digit* r, const sp_digit* a,
48464         sp_digit* t)
48465 {
48466     int err = FP_WOULDBLOCK;
48467     sp_384_mont_inv_order_avx2_6_ctx* ctx = (sp_384_mont_inv_order_avx2_6_ctx*)sp_ctx;
48468 
48469     typedef char ctx_size_test[sizeof(sp_384_mont_inv_order_avx2_6_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
48470     (void)sizeof(ctx_size_test);
48471 
48472     switch (ctx->state) {
48473     case 0:
48474         XMEMCPY(t, a, sizeof(sp_digit) * 6);
48475         ctx->i = 382;
48476         ctx->state = 1;
48477         break;
48478     case 1:
48479         sp_384_mont_sqr_order_avx2_6(t, t);
48480         ctx->state = 2;
48481         break;
48482     case 2:
48483         if ((p384_order_minus_2[ctx->i / 64] & ((sp_int_digit)1 << (ctx->i % 64))) != 0) {
48484             sp_384_mont_mul_order_avx2_6(t, t, a);
48485         }
48486         ctx->i--;
48487         ctx->state = (ctx->i == 0) ? 3 : 1;
48488         break;
48489     case 3:
48490         XMEMCPY(r, t, sizeof(sp_digit) * 6U);
48491         err = MP_OKAY;
48492         break;
48493     }
48494     return err;
48495 }
48496 #endif /* WOLFSSL_SP_NONBLOCK */
48497 
sp_384_mont_inv_order_avx2_6(sp_digit * r,const sp_digit * a,sp_digit * td)48498 static void sp_384_mont_inv_order_avx2_6(sp_digit* r, const sp_digit* a,
48499         sp_digit* td)
48500 {
48501 #ifdef WOLFSSL_SP_SMALL
48502     sp_digit* t = td;
48503     int i;
48504 
48505     XMEMCPY(t, a, sizeof(sp_digit) * 6);
48506     for (i=382; i>=0; i--) {
48507         sp_384_mont_sqr_order_avx2_6(t, t);
48508         if ((p384_order_minus_2[i / 64] & ((sp_int_digit)1 << (i % 64))) != 0) {
48509             sp_384_mont_mul_order_avx2_6(t, t, a);
48510         }
48511     }
48512     XMEMCPY(r, t, sizeof(sp_digit) * 6U);
48513 #else
48514     sp_digit* t = td;
48515     sp_digit* t2 = td + 2 * 6;
48516     sp_digit* t3 = td + 4 * 6;
48517     int i;
48518 
48519     /* t = a^2 */
48520     sp_384_mont_sqr_order_avx2_6(t, a);
48521     /* t = a^3 = t * a */
48522     sp_384_mont_mul_order_avx2_6(t, t, a);
48523     /* t2= a^c = t ^ 2 ^ 2 */
48524     sp_384_mont_sqr_n_order_avx2_6(t2, t, 2);
48525     /* t = a^f = t2 * t */
48526     sp_384_mont_mul_order_avx2_6(t, t2, t);
48527     /* t2= a^f0 = t ^ 2 ^ 4 */
48528     sp_384_mont_sqr_n_order_avx2_6(t2, t, 4);
48529     /* t = a^ff = t2 * t */
48530     sp_384_mont_mul_order_avx2_6(t, t2, t);
48531     /* t2= a^ff00 = t ^ 2 ^ 8 */
48532     sp_384_mont_sqr_n_order_avx2_6(t2, t, 8);
48533     /* t3= a^ffff = t2 * t */
48534     sp_384_mont_mul_order_avx2_6(t3, t2, t);
48535     /* t2= a^ffff0000 = t3 ^ 2 ^ 16 */
48536     sp_384_mont_sqr_n_order_avx2_6(t2, t3, 16);
48537     /* t = a^ffffffff = t2 * t3 */
48538     sp_384_mont_mul_order_avx2_6(t, t2, t3);
48539     /* t2= a^ffffffff0000 = t ^ 2 ^ 16  */
48540     sp_384_mont_sqr_n_order_avx2_6(t2, t, 16);
48541     /* t = a^ffffffffffff = t2 * t3 */
48542     sp_384_mont_mul_order_avx2_6(t, t2, t3);
48543     /* t2= a^ffffffffffff000000000000 = t ^ 2 ^ 48  */
48544     sp_384_mont_sqr_n_order_avx2_6(t2, t, 48);
48545     /* t= a^fffffffffffffffffffffffff = t2 * t */
48546     sp_384_mont_mul_order_avx2_6(t, t2, t);
48547     /* t2= a^ffffffffffffffffffffffff000000000000000000000000 */
48548     sp_384_mont_sqr_n_order_avx2_6(t2, t, 96);
48549     /* t2= a^ffffffffffffffffffffffffffffffffffffffffffffffff = t2 * t */
48550     sp_384_mont_mul_order_avx2_6(t2, t2, t);
48551     for (i=191; i>=1; i--) {
48552         sp_384_mont_sqr_order_avx2_6(t2, t2);
48553         if ((p384_order_low[i / 64] & ((sp_int_digit)1 << (i % 64))) != 0) {
48554             sp_384_mont_mul_order_avx2_6(t2, t2, a);
48555         }
48556     }
48557     sp_384_mont_sqr_order_avx2_6(t2, t2);
48558     sp_384_mont_mul_order_avx2_6(r, t2, a);
48559 #endif /* WOLFSSL_SP_SMALL */
48560 }
48561 
48562 #endif /* HAVE_ECC_SIGN || (HAVE_ECC_VERIFY && WOLFSSL_SP_SMALL) */
48563 #endif /* HAVE_INTEL_AVX2 */
48564 #endif /* HAVE_ECC_SIGN | HAVE_ECC_VERIFY */
48565 #ifdef HAVE_ECC_SIGN
48566 #ifndef SP_ECC_MAX_SIG_GEN
48567 #define SP_ECC_MAX_SIG_GEN  64
48568 #endif
48569 
48570 /* Calculate second signature value S from R, k and private value.
48571  *
48572  * s = (r * x + e) / k
48573  *
48574  * s    Signature value.
48575  * r    First signature value.
48576  * k    Ephemeral private key.
48577  * x    Private key as a number.
48578  * e    Hash of message as a number.
48579  * tmp  Temporary storage for intermediate numbers.
48580  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
48581  */
sp_384_calc_s_6(sp_digit * s,const sp_digit * r,sp_digit * k,sp_digit * x,const sp_digit * e,sp_digit * tmp)48582 static int sp_384_calc_s_6(sp_digit* s, const sp_digit* r, sp_digit* k,
48583     sp_digit* x, const sp_digit* e, sp_digit* tmp)
48584 {
48585     int err;
48586     sp_digit carry;
48587     sp_int64 c;
48588     sp_digit* kInv = k;
48589 #ifdef HAVE_INTEL_AVX2
48590     word32 cpuid_flags = cpuid_get_flags();
48591 #endif
48592 
48593     /* Conv k to Montgomery form (mod order) */
48594 #ifdef HAVE_INTEL_AVX2
48595      if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
48596         sp_384_mul_avx2_6(k, k, p384_norm_order);
48597     else
48598 #endif
48599         sp_384_mul_6(k, k, p384_norm_order);
48600     err = sp_384_mod_6(k, k, p384_order);
48601     if (err == MP_OKAY) {
48602         sp_384_norm_6(k);
48603 
48604         /* kInv = 1/k mod order */
48605 #ifdef HAVE_INTEL_AVX2
48606         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
48607             sp_384_mont_inv_order_avx2_6(kInv, k, tmp);
48608         else
48609 #endif
48610             sp_384_mont_inv_order_6(kInv, k, tmp);
48611         sp_384_norm_6(kInv);
48612 
48613         /* s = r * x + e */
48614 #ifdef HAVE_INTEL_AVX2
48615         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
48616             sp_384_mul_avx2_6(x, x, r);
48617         else
48618 #endif
48619             sp_384_mul_6(x, x, r);
48620         err = sp_384_mod_6(x, x, p384_order);
48621     }
48622     if (err == MP_OKAY) {
48623         sp_384_norm_6(x);
48624         carry = sp_384_add_6(s, e, x);
48625         sp_384_cond_sub_6(s, s, p384_order, 0 - carry);
48626         sp_384_norm_6(s);
48627         c = sp_384_cmp_6(s, p384_order);
48628         sp_384_cond_sub_6(s, s, p384_order,
48629             (sp_digit)0 - (sp_digit)(c >= 0));
48630         sp_384_norm_6(s);
48631 
48632         /* s = s * k^-1 mod order */
48633 #ifdef HAVE_INTEL_AVX2
48634         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
48635             sp_384_mont_mul_order_avx2_6(s, s, kInv);
48636         else
48637 #endif
48638             sp_384_mont_mul_order_6(s, s, kInv);
48639         sp_384_norm_6(s);
48640     }
48641 
48642     return err;
48643 }
48644 
48645 /* Sign the hash using the private key.
48646  *   e = [hash, 384 bits] from binary
48647  *   r = (k.G)->x mod order
48648  *   s = (r * x + e) / k mod order
48649  * The hash is truncated to the first 384 bits.
48650  *
48651  * hash     Hash to sign.
48652  * hashLen  Length of the hash data.
48653  * rng      Random number generator.
48654  * priv     Private part of key - scalar.
48655  * rm       First part of result as an mp_int.
48656  * sm       Sirst part of result as an mp_int.
48657  * heap     Heap to use for allocation.
48658  * returns RNG failures, MEMORY_E when memory allocation fails and
48659  * MP_OKAY on success.
48660  */
48661 #ifdef WOLFSSL_SP_NONBLOCK
48662 typedef struct sp_ecc_sign_384_ctx {
48663     int state;
48664     union {
48665         sp_384_ecc_mulmod_6_ctx mulmod_ctx;
48666         sp_384_mont_inv_order_6_ctx mont_inv_order_ctx;
48667     };
48668     sp_digit e[2*6];
48669     sp_digit x[2*6];
48670     sp_digit k[2*6];
48671     sp_digit r[2*6];
48672     sp_digit tmp[3 * 2*6];
48673     sp_point_384 point;
48674     sp_digit* s;
48675     sp_digit* kInv;
48676     int i;
48677 } sp_ecc_sign_384_ctx;
48678 
sp_ecc_sign_384_nb(sp_ecc_ctx_t * sp_ctx,const byte * hash,word32 hashLen,WC_RNG * rng,mp_int * priv,mp_int * rm,mp_int * sm,mp_int * km,void * heap)48679 int sp_ecc_sign_384_nb(sp_ecc_ctx_t* sp_ctx, const byte* hash, word32 hashLen, WC_RNG* rng,
48680     mp_int* priv, mp_int* rm, mp_int* sm, mp_int* km, void* heap)
48681 {
48682     int err = FP_WOULDBLOCK;
48683     sp_ecc_sign_384_ctx* ctx = (sp_ecc_sign_384_ctx*)sp_ctx->data;
48684 
48685     typedef char ctx_size_test[sizeof(sp_ecc_sign_384_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
48686     (void)sizeof(ctx_size_test);
48687 
48688     (void)heap;
48689 
48690     switch (ctx->state) {
48691     case 0: /* INIT */
48692         ctx->s = ctx->e;
48693         ctx->kInv = ctx->k;
48694         if (hashLen > 48U) {
48695             hashLen = 48U;
48696         }
48697 
48698         ctx->i = SP_ECC_MAX_SIG_GEN;
48699         ctx->state = 1;
48700         break;
48701     case 1: /* GEN */
48702         /* New random point. */
48703         if (km == NULL || mp_iszero(km)) {
48704             err = sp_384_ecc_gen_k_6(rng, ctx->k);
48705         }
48706         else {
48707             sp_384_from_mp(ctx->k, 6, km);
48708             mp_zero(km);
48709         }
48710         XMEMSET(&ctx->mulmod_ctx, 0, sizeof(ctx->mulmod_ctx));
48711         ctx->state = 2;
48712         break;
48713     case 2: /* MULMOD */
48714         err = sp_384_ecc_mulmod_6_nb((sp_ecc_ctx_t*)&ctx->mulmod_ctx,
48715             &ctx->point, &p384_base, ctx->k, 1, 1, heap);
48716         if (err == MP_OKAY) {
48717             ctx->state = 3;
48718         }
48719         break;
48720     case 3: /* MODORDER */
48721     {
48722         sp_int64 c;
48723         /* r = point->x mod order */
48724         XMEMCPY(ctx->r, ctx->point.x, sizeof(sp_digit) * 6U);
48725         sp_384_norm_6(ctx->r);
48726         c = sp_384_cmp_6(ctx->r, p384_order);
48727         sp_384_cond_sub_6(ctx->r, ctx->r, p384_order,
48728             (sp_digit)0 - (sp_digit)(c >= 0));
48729         sp_384_norm_6(ctx->r);
48730 
48731         sp_384_from_mp(ctx->x, 6, priv);
48732         sp_384_from_bin(ctx->e, 6, hash, (int)hashLen);
48733         ctx->state = 4;
48734         break;
48735     }
48736     case 4: /* KMODORDER */
48737         /* Conv k to Montgomery form (mod order) */
48738         sp_384_mul_6(ctx->k, ctx->k, p384_norm_order);
48739         err = sp_384_mod_6(ctx->k, ctx->k, p384_order);
48740         if (err == MP_OKAY) {
48741             sp_384_norm_6(ctx->k);
48742             XMEMSET(&ctx->mont_inv_order_ctx, 0, sizeof(ctx->mont_inv_order_ctx));
48743             ctx->state = 5;
48744         }
48745         break;
48746     case 5: /* KINV */
48747         /* kInv = 1/k mod order */
48748         err = sp_384_mont_inv_order_6_nb((sp_ecc_ctx_t*)&ctx->mont_inv_order_ctx, ctx->kInv, ctx->k, ctx->tmp);
48749         if (err == MP_OKAY) {
48750             XMEMSET(&ctx->mont_inv_order_ctx, 0, sizeof(ctx->mont_inv_order_ctx));
48751             ctx->state = 6;
48752         }
48753         break;
48754     case 6: /* KINVNORM */
48755         sp_384_norm_6(ctx->kInv);
48756         ctx->state = 7;
48757         break;
48758     case 7: /* R */
48759         /* s = r * x + e */
48760         sp_384_mul_6(ctx->x, ctx->x, ctx->r);
48761         ctx->state = 8;
48762         break;
48763     case 8: /* S1 */
48764         err = sp_384_mod_6(ctx->x, ctx->x, p384_order);
48765         if (err == MP_OKAY)
48766             ctx->state = 9;
48767         break;
48768     case 9: /* S2 */
48769     {
48770         sp_digit carry;
48771         sp_int64 c;
48772         sp_384_norm_6(ctx->x);
48773         carry = sp_384_add_6(ctx->s, ctx->e, ctx->x);
48774         sp_384_cond_sub_6(ctx->s, ctx->s,
48775             p384_order, 0 - carry);
48776         sp_384_norm_6(ctx->s);
48777         c = sp_384_cmp_6(ctx->s, p384_order);
48778         sp_384_cond_sub_6(ctx->s, ctx->s, p384_order,
48779             (sp_digit)0 - (sp_digit)(c >= 0));
48780         sp_384_norm_6(ctx->s);
48781 
48782         /* s = s * k^-1 mod order */
48783         sp_384_mont_mul_order_6(ctx->s, ctx->s, ctx->kInv);
48784         sp_384_norm_6(ctx->s);
48785 
48786         /* Check that signature is usable. */
48787         if (sp_384_iszero_6(ctx->s) == 0) {
48788             ctx->state = 10;
48789             break;
48790         }
48791     #ifdef WOLFSSL_ECDSA_SET_K_ONE_LOOP
48792         ctx->i = 1;
48793     #endif
48794 
48795         /* not usable gen, try again */
48796         ctx->i--;
48797         if (ctx->i == 0) {
48798             err = RNG_FAILURE_E;
48799         }
48800         ctx->state = 1;
48801         break;
48802     }
48803     case 10: /* RES */
48804         err = sp_384_to_mp(ctx->r, rm);
48805         if (err == MP_OKAY) {
48806             err = sp_384_to_mp(ctx->s, sm);
48807         }
48808         break;
48809     }
48810 
48811     if (err == MP_OKAY && ctx->state != 10) {
48812         err = FP_WOULDBLOCK;
48813     }
48814     if (err != FP_WOULDBLOCK) {
48815         XMEMSET(ctx->e, 0, sizeof(sp_digit) * 2U * 6U);
48816         XMEMSET(ctx->x, 0, sizeof(sp_digit) * 2U * 6U);
48817         XMEMSET(ctx->k, 0, sizeof(sp_digit) * 2U * 6U);
48818         XMEMSET(ctx->r, 0, sizeof(sp_digit) * 2U * 6U);
48819         XMEMSET(ctx->tmp, 0, sizeof(sp_digit) * 3U * 2U * 6U);
48820     }
48821 
48822     return err;
48823 }
48824 #endif /* WOLFSSL_SP_NONBLOCK */
48825 
sp_ecc_sign_384(const byte * hash,word32 hashLen,WC_RNG * rng,const mp_int * priv,mp_int * rm,mp_int * sm,mp_int * km,void * heap)48826 int sp_ecc_sign_384(const byte* hash, word32 hashLen, WC_RNG* rng,
48827     const mp_int* priv, mp_int* rm, mp_int* sm, mp_int* km, void* heap)
48828 {
48829 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
48830     sp_digit* e = NULL;
48831     sp_point_384* point = NULL;
48832 #else
48833     sp_digit e[7 * 2 * 6];
48834     sp_point_384 point[1];
48835 #endif
48836     sp_digit* x = NULL;
48837     sp_digit* k = NULL;
48838     sp_digit* r = NULL;
48839     sp_digit* tmp = NULL;
48840     sp_digit* s = NULL;
48841     sp_int64 c;
48842     int err = MP_OKAY;
48843     int i;
48844 #ifdef HAVE_INTEL_AVX2
48845     word32 cpuid_flags = cpuid_get_flags();
48846 #endif
48847 
48848     (void)heap;
48849 
48850 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
48851     if (err == MP_OKAY) {
48852         point = (sp_point_384*)XMALLOC(sizeof(sp_point_384), heap,
48853                                              DYNAMIC_TYPE_ECC);
48854         if (point == NULL)
48855             err = MEMORY_E;
48856     }
48857     if (err == MP_OKAY) {
48858         e = (sp_digit*)XMALLOC(sizeof(sp_digit) * 7 * 2 * 6, heap,
48859                                DYNAMIC_TYPE_ECC);
48860         if (e == NULL)
48861             err = MEMORY_E;
48862     }
48863 #endif
48864 
48865     if (err == MP_OKAY) {
48866         x = e + 2 * 6;
48867         k = e + 4 * 6;
48868         r = e + 6 * 6;
48869         tmp = e + 8 * 6;
48870         s = e;
48871 
48872         if (hashLen > 48U) {
48873             hashLen = 48U;
48874         }
48875     }
48876 
48877     for (i = SP_ECC_MAX_SIG_GEN; err == MP_OKAY && i > 0; i--) {
48878         /* New random point. */
48879         if (km == NULL || mp_iszero(km)) {
48880             err = sp_384_ecc_gen_k_6(rng, k);
48881         }
48882         else {
48883             sp_384_from_mp(k, 6, km);
48884             mp_zero(km);
48885         }
48886         if (err == MP_OKAY) {
48887 #ifdef HAVE_INTEL_AVX2
48888             if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
48889                 err = sp_384_ecc_mulmod_base_avx2_6(point, k, 1, 1, heap);
48890             else
48891 #endif
48892                 err = sp_384_ecc_mulmod_base_6(point, k, 1, 1, heap);
48893         }
48894 
48895         if (err == MP_OKAY) {
48896             /* r = point->x mod order */
48897             XMEMCPY(r, point->x, sizeof(sp_digit) * 6U);
48898             sp_384_norm_6(r);
48899             c = sp_384_cmp_6(r, p384_order);
48900             sp_384_cond_sub_6(r, r, p384_order,
48901                 (sp_digit)0 - (sp_digit)(c >= 0));
48902             sp_384_norm_6(r);
48903 
48904             sp_384_from_mp(x, 6, priv);
48905             sp_384_from_bin(e, 6, hash, (int)hashLen);
48906 
48907             err = sp_384_calc_s_6(s, r, k, x, e, tmp);
48908         }
48909 
48910         /* Check that signature is usable. */
48911         if ((err == MP_OKAY) && (sp_384_iszero_6(s) == 0)) {
48912             break;
48913         }
48914 #ifdef WOLFSSL_ECDSA_SET_K_ONE_LOOP
48915         i = 1;
48916 #endif
48917     }
48918 
48919     if (i == 0) {
48920         err = RNG_FAILURE_E;
48921     }
48922 
48923     if (err == MP_OKAY) {
48924         err = sp_384_to_mp(r, rm);
48925     }
48926     if (err == MP_OKAY) {
48927         err = sp_384_to_mp(s, sm);
48928     }
48929 
48930 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
48931     if (e != NULL)
48932 #endif
48933     {
48934         ForceZero(e, sizeof(sp_digit) * 7 * 2 * 6);
48935     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
48936         XFREE(e, heap, DYNAMIC_TYPE_ECC);
48937     #endif
48938     }
48939 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
48940     if (point != NULL)
48941 #endif
48942     {
48943         ForceZero(point, sizeof(sp_point_384));
48944     #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
48945         XFREE(point, heap, DYNAMIC_TYPE_ECC);
48946     #endif
48947     }
48948 
48949     return err;
48950 }
48951 #endif /* HAVE_ECC_SIGN */
48952 
48953 #ifndef WOLFSSL_SP_SMALL
48954 extern void sp_384_rshift1_6(sp_digit* r, const sp_digit* a);
48955 extern void sp_384_div2_mod_6(sp_digit* r, const sp_digit* a, const sp_digit* m);
48956 extern int sp_384_num_bits_6(const sp_digit * a);
48957 /* Non-constant time modular inversion.
48958  *
48959  * @param  [out]  r   Resulting number.
48960  * @param  [in]   a   Number to invert.
48961  * @param  [in]   m   Modulus.
48962  * @return  MP_OKAY on success.
48963  */
sp_384_mod_inv_6(sp_digit * r,const sp_digit * a,const sp_digit * m)48964 static int sp_384_mod_inv_6(sp_digit* r, const sp_digit* a, const sp_digit* m)
48965 {
48966     sp_digit u[6];
48967     sp_digit v[6];
48968     sp_digit b[6];
48969     sp_digit d[6];
48970     int ut, vt;
48971     sp_digit o;
48972 
48973     XMEMCPY(u, m, sizeof(u));
48974     XMEMCPY(v, a, sizeof(v));
48975 
48976     ut = sp_384_num_bits_6(u);
48977     vt = sp_384_num_bits_6(v);
48978 
48979     XMEMSET(b, 0, sizeof(b));
48980     if ((v[0] & 1) == 0) {
48981         sp_384_rshift1_6(v, v);
48982         XMEMCPY(d, m, sizeof(u));
48983         d[0] += 1;
48984         sp_384_rshift1_6(d, d);
48985         vt--;
48986 
48987         while ((v[0] & 1) == 0) {
48988             sp_384_rshift1_6(v, v);
48989             sp_384_div2_mod_6(d, d, m);
48990             vt--;
48991         }
48992     }
48993     else {
48994         XMEMSET(d+1, 0, sizeof(d)-sizeof(sp_digit));
48995         d[0] = 1;
48996     }
48997 
48998     while (ut > 1 && vt > 1) {
48999         if (ut > vt || (ut == vt && sp_384_cmp_6(u, v) >= 0)) {
49000             sp_384_sub_6(u, u, v);
49001             o = sp_384_sub_6(b, b, d);
49002             if (o != 0)
49003                 sp_384_add_6(b, b, m);
49004             ut = sp_384_num_bits_6(u);
49005 
49006             do {
49007                 sp_384_rshift1_6(u, u);
49008                 sp_384_div2_mod_6(b, b, m);
49009                 ut--;
49010             }
49011             while (ut > 0 && (u[0] & 1) == 0);
49012         }
49013         else {
49014             sp_384_sub_6(v, v, u);
49015             o = sp_384_sub_6(d, d, b);
49016             if (o != 0)
49017                 sp_384_add_6(d, d, m);
49018             vt = sp_384_num_bits_6(v);
49019 
49020             do {
49021                 sp_384_rshift1_6(v, v);
49022                 sp_384_div2_mod_6(d, d, m);
49023                 vt--;
49024             }
49025             while (vt > 0 && (v[0] & 1) == 0);
49026         }
49027     }
49028 
49029     if (ut == 1)
49030         XMEMCPY(r, b, sizeof(b));
49031     else
49032         XMEMCPY(r, d, sizeof(d));
49033 
49034     return MP_OKAY;
49035 }
49036 
49037 #endif /* WOLFSSL_SP_SMALL */
49038 
49039 /* Add point p1 into point p2. Handles p1 == p2 and result at infinity.
49040  *
49041  * p1   First point to add and holds result.
49042  * p2   Second point to add.
49043  * tmp  Temporary storage for intermediate numbers.
49044  */
sp_384_add_points_6(sp_point_384 * p1,const sp_point_384 * p2,sp_digit * tmp)49045 static void sp_384_add_points_6(sp_point_384* p1, const sp_point_384* p2,
49046     sp_digit* tmp)
49047 {
49048 #ifdef HAVE_INTEL_AVX2
49049     word32 cpuid_flags = cpuid_get_flags();
49050 #endif
49051 
49052 #ifdef HAVE_INTEL_AVX2
49053     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
49054         sp_384_proj_point_add_avx2_6(p1, p1, p2, tmp);
49055     }
49056     else
49057 #endif
49058         sp_384_proj_point_add_6(p1, p1, p2, tmp);
49059     if (sp_384_iszero_6(p1->z)) {
49060         if (sp_384_iszero_6(p1->x) && sp_384_iszero_6(p1->y)) {
49061 #ifdef HAVE_INTEL_AVX2
49062             if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
49063                 sp_384_proj_point_dbl_avx2_6(p1, p2, tmp);
49064             }
49065             else
49066 #endif
49067                 sp_384_proj_point_dbl_6(p1, p2, tmp);
49068         }
49069         else {
49070             /* Y ordinate is not used from here - don't set. */
49071             p1->x[0] = 0;
49072             p1->x[1] = 0;
49073             p1->x[2] = 0;
49074             p1->x[3] = 0;
49075             p1->x[4] = 0;
49076             p1->x[5] = 0;
49077             XMEMCPY(p1->z, p384_norm_mod, sizeof(p384_norm_mod));
49078         }
49079     }
49080 }
49081 
49082 /* Calculate the verification point: [e/s]G + [r/s]Q
49083  *
49084  * p1    Calculated point.
49085  * p2    Public point and temporary.
49086  * s     Second part of signature as a number.
49087  * u1    Temporary number.
49088  * u2    Temproray number.
49089  * heap  Heap to use for allocation.
49090  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
49091  */
sp_384_calc_vfy_point_6(sp_point_384 * p1,sp_point_384 * p2,sp_digit * s,sp_digit * u1,sp_digit * u2,sp_digit * tmp,void * heap)49092 static int sp_384_calc_vfy_point_6(sp_point_384* p1, sp_point_384* p2,
49093     sp_digit* s, sp_digit* u1, sp_digit* u2, sp_digit* tmp, void* heap)
49094 {
49095     int err;
49096 #ifdef HAVE_INTEL_AVX2
49097     word32 cpuid_flags = cpuid_get_flags();
49098 #endif
49099 
49100 #ifndef WOLFSSL_SP_SMALL
49101     err = sp_384_mod_inv_6(s, s, p384_order);
49102     if (err == MP_OKAY)
49103 #endif /* !WOLFSSL_SP_SMALL */
49104     {
49105 #ifdef HAVE_INTEL_AVX2
49106         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
49107             sp_384_mul_avx2_6(s, s, p384_norm_order);
49108         }
49109         else
49110 #endif
49111         {
49112             sp_384_mul_6(s, s, p384_norm_order);
49113         }
49114         err = sp_384_mod_6(s, s, p384_order);
49115     }
49116     if (err == MP_OKAY) {
49117         sp_384_norm_6(s);
49118 #ifdef WOLFSSL_SP_SMALL
49119 #ifdef HAVE_INTEL_AVX2
49120         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
49121             sp_384_mont_inv_order_avx2_6(s, s, tmp);
49122             sp_384_mont_mul_order_avx2_6(u1, u1, s);
49123             sp_384_mont_mul_order_avx2_6(u2, u2, s);
49124         }
49125         else
49126 #endif
49127         {
49128             sp_384_mont_inv_order_6(s, s, tmp);
49129             sp_384_mont_mul_order_6(u1, u1, s);
49130             sp_384_mont_mul_order_6(u2, u2, s);
49131         }
49132 #else
49133 #ifdef HAVE_INTEL_AVX2
49134         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
49135             sp_384_mont_mul_order_avx2_6(u1, u1, s);
49136             sp_384_mont_mul_order_avx2_6(u2, u2, s);
49137         }
49138         else
49139 #endif
49140         {
49141             sp_384_mont_mul_order_6(u1, u1, s);
49142             sp_384_mont_mul_order_6(u2, u2, s);
49143         }
49144 #endif /* WOLFSSL_SP_SMALL */
49145 #ifdef HAVE_INTEL_AVX2
49146         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
49147             err = sp_384_ecc_mulmod_base_avx2_6(p1, u1, 0, 0, heap);
49148         }
49149         else
49150 #endif
49151         {
49152             err = sp_384_ecc_mulmod_base_6(p1, u1, 0, 0, heap);
49153         }
49154     }
49155     if ((err == MP_OKAY) && sp_384_iszero_6(p1->z)) {
49156         p1->infinity = 1;
49157     }
49158     if (err == MP_OKAY) {
49159 #ifdef HAVE_INTEL_AVX2
49160         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
49161             err = sp_384_ecc_mulmod_avx2_6(p2, p2, u2, 0, 0, heap);
49162         else
49163 #endif
49164             err = sp_384_ecc_mulmod_6(p2, p2, u2, 0, 0, heap);
49165     }
49166     if ((err == MP_OKAY) && sp_384_iszero_6(p2->z)) {
49167         p2->infinity = 1;
49168     }
49169 
49170     if (err == MP_OKAY) {
49171         sp_384_add_points_6(p1, p2, tmp);
49172     }
49173 
49174     return err;
49175 }
49176 
49177 #ifdef HAVE_ECC_VERIFY
49178 /* Verify the signature values with the hash and public key.
49179  *   e = Truncate(hash, 384)
49180  *   u1 = e/s mod order
49181  *   u2 = r/s mod order
49182  *   r == (u1.G + u2.Q)->x mod order
49183  * Optimization: Leave point in projective form.
49184  *   (x, y, 1) == (x' / z'*z', y' / z'*z'*z', z' / z')
49185  *   (r + n*order).z'.z' mod prime == (u1.G + u2.Q)->x'
49186  * The hash is truncated to the first 384 bits.
49187  *
49188  * hash     Hash to sign.
49189  * hashLen  Length of the hash data.
49190  * rng      Random number generator.
49191  * priv     Private part of key - scalar.
49192  * rm       First part of result as an mp_int.
49193  * sm       Sirst part of result as an mp_int.
49194  * heap     Heap to use for allocation.
49195  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
49196  */
49197 #ifdef WOLFSSL_SP_NONBLOCK
49198 typedef struct sp_ecc_verify_384_ctx {
49199     int state;
49200     union {
49201         sp_384_ecc_mulmod_6_ctx mulmod_ctx;
49202         sp_384_mont_inv_order_6_ctx mont_inv_order_ctx;
49203         sp_384_proj_point_dbl_6_ctx dbl_ctx;
49204         sp_384_proj_point_add_6_ctx add_ctx;
49205     };
49206     sp_digit u1[2*6];
49207     sp_digit u2[2*6];
49208     sp_digit s[2*6];
49209     sp_digit tmp[2*6 * 5];
49210     sp_point_384 p1;
49211     sp_point_384 p2;
49212 } sp_ecc_verify_384_ctx;
49213 
sp_ecc_verify_384_nb(sp_ecc_ctx_t * sp_ctx,const byte * hash,word32 hashLen,const mp_int * pX,const mp_int * pY,const mp_int * pZ,const mp_int * rm,const mp_int * sm,int * res,void * heap)49214 int sp_ecc_verify_384_nb(sp_ecc_ctx_t* sp_ctx, const byte* hash,
49215     word32 hashLen, const mp_int* pX, const mp_int* pY, const mp_int* pZ,
49216     const mp_int* rm, const mp_int* sm, int* res, void* heap)
49217 {
49218     int err = FP_WOULDBLOCK;
49219     sp_ecc_verify_384_ctx* ctx = (sp_ecc_verify_384_ctx*)sp_ctx->data;
49220 
49221     typedef char ctx_size_test[sizeof(sp_ecc_verify_384_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
49222     (void)sizeof(ctx_size_test);
49223 
49224     switch (ctx->state) {
49225     case 0: /* INIT */
49226         if (hashLen > 48U) {
49227             hashLen = 48U;
49228         }
49229 
49230         sp_384_from_bin(ctx->u1, 6, hash, (int)hashLen);
49231         sp_384_from_mp(ctx->u2, 6, rm);
49232         sp_384_from_mp(ctx->s, 6, sm);
49233         sp_384_from_mp(ctx->p2.x, 6, pX);
49234         sp_384_from_mp(ctx->p2.y, 6, pY);
49235         sp_384_from_mp(ctx->p2.z, 6, pZ);
49236         ctx->state = 1;
49237         break;
49238     case 1: /* NORMS0 */
49239         sp_384_mul_6(ctx->s, ctx->s, p384_norm_order);
49240         err = sp_384_mod_6(ctx->s, ctx->s, p384_order);
49241         if (err == MP_OKAY)
49242             ctx->state = 2;
49243         break;
49244     case 2: /* NORMS1 */
49245         sp_384_norm_6(ctx->s);
49246         XMEMSET(&ctx->mont_inv_order_ctx, 0, sizeof(ctx->mont_inv_order_ctx));
49247         ctx->state = 3;
49248         break;
49249     case 3: /* NORMS2 */
49250         err = sp_384_mont_inv_order_6_nb((sp_ecc_ctx_t*)&ctx->mont_inv_order_ctx, ctx->s, ctx->s, ctx->tmp);
49251         if (err == MP_OKAY) {
49252             ctx->state = 4;
49253         }
49254         break;
49255     case 4: /* NORMS3 */
49256         sp_384_mont_mul_order_6(ctx->u1, ctx->u1, ctx->s);
49257         ctx->state = 5;
49258         break;
49259     case 5: /* NORMS4 */
49260         sp_384_mont_mul_order_6(ctx->u2, ctx->u2, ctx->s);
49261         XMEMSET(&ctx->mulmod_ctx, 0, sizeof(ctx->mulmod_ctx));
49262         ctx->state = 6;
49263         break;
49264     case 6: /* MULBASE */
49265         err = sp_384_ecc_mulmod_6_nb((sp_ecc_ctx_t*)&ctx->mulmod_ctx, &ctx->p1, &p384_base, ctx->u1, 0, 0, heap);
49266         if (err == MP_OKAY) {
49267             if (sp_384_iszero_6(ctx->p1.z)) {
49268                 ctx->p1.infinity = 1;
49269             }
49270             XMEMSET(&ctx->mulmod_ctx, 0, sizeof(ctx->mulmod_ctx));
49271             ctx->state = 7;
49272         }
49273         break;
49274     case 7: /* MULMOD */
49275         err = sp_384_ecc_mulmod_6_nb((sp_ecc_ctx_t*)&ctx->mulmod_ctx, &ctx->p2, &ctx->p2, ctx->u2, 0, 0, heap);
49276         if (err == MP_OKAY) {
49277             if (sp_384_iszero_6(ctx->p2.z)) {
49278                 ctx->p2.infinity = 1;
49279             }
49280             XMEMSET(&ctx->add_ctx, 0, sizeof(ctx->add_ctx));
49281             ctx->state = 8;
49282         }
49283         break;
49284     case 8: /* ADD */
49285         err = sp_384_proj_point_add_6_nb((sp_ecc_ctx_t*)&ctx->add_ctx, &ctx->p1, &ctx->p1, &ctx->p2, ctx->tmp);
49286         if (err == MP_OKAY)
49287             ctx->state = 9;
49288         break;
49289     case 9: /* MONT */
49290         /* (r + n*order).z'.z' mod prime == (u1.G + u2.Q)->x' */
49291         /* Reload r and convert to Montgomery form. */
49292         sp_384_from_mp(ctx->u2, 6, rm);
49293         err = sp_384_mod_mul_norm_6(ctx->u2, ctx->u2, p384_mod);
49294         if (err == MP_OKAY)
49295             ctx->state = 10;
49296         break;
49297     case 10: /* SQR */
49298         /* u1 = r.z'.z' mod prime */
49299         sp_384_mont_sqr_6(ctx->p1.z, ctx->p1.z, p384_mod, p384_mp_mod);
49300         ctx->state = 11;
49301         break;
49302     case 11: /* MUL */
49303         sp_384_mont_mul_6(ctx->u1, ctx->u2, ctx->p1.z, p384_mod, p384_mp_mod);
49304         ctx->state = 12;
49305         break;
49306     case 12: /* RES */
49307     {
49308         sp_int64 c = 0;
49309         err = MP_OKAY; /* math okay, now check result */
49310         *res = (int)(sp_384_cmp_6(ctx->p1.x, ctx->u1) == 0);
49311         if (*res == 0) {
49312             sp_digit carry;
49313 
49314             /* Reload r and add order. */
49315             sp_384_from_mp(ctx->u2, 6, rm);
49316             carry = sp_384_add_6(ctx->u2, ctx->u2, p384_order);
49317             /* Carry means result is greater than mod and is not valid. */
49318             if (carry == 0) {
49319                 sp_384_norm_6(ctx->u2);
49320 
49321                 /* Compare with mod and if greater or equal then not valid. */
49322                 c = sp_384_cmp_6(ctx->u2, p384_mod);
49323             }
49324         }
49325         if ((*res == 0) && (c < 0)) {
49326             /* Convert to Montogomery form */
49327             err = sp_384_mod_mul_norm_6(ctx->u2, ctx->u2, p384_mod);
49328             if (err == MP_OKAY) {
49329                 /* u1 = (r + 1*order).z'.z' mod prime */
49330                 sp_384_mont_mul_6(ctx->u1, ctx->u2, ctx->p1.z, p384_mod,
49331                                                             p384_mp_mod);
49332                 *res = (int)(sp_384_cmp_6(ctx->p1.x, ctx->u1) == 0);
49333             }
49334         }
49335         break;
49336     }
49337     } /* switch */
49338 
49339     if (err == MP_OKAY && ctx->state != 12) {
49340         err = FP_WOULDBLOCK;
49341     }
49342 
49343     return err;
49344 }
49345 #endif /* WOLFSSL_SP_NONBLOCK */
49346 
sp_ecc_verify_384(const byte * hash,word32 hashLen,const mp_int * pX,const mp_int * pY,const mp_int * pZ,const mp_int * rm,const mp_int * sm,int * res,void * heap)49347 int sp_ecc_verify_384(const byte* hash, word32 hashLen, const mp_int* pX,
49348     const mp_int* pY, const mp_int* pZ, const mp_int* rm, const mp_int* sm,
49349     int* res, void* heap)
49350 {
49351 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49352     sp_digit* u1 = NULL;
49353     sp_point_384* p1 = NULL;
49354 #else
49355     sp_digit  u1[16 * 6];
49356     sp_point_384 p1[2];
49357 #endif
49358     sp_digit* u2 = NULL;
49359     sp_digit* s = NULL;
49360     sp_digit* tmp = NULL;
49361     sp_point_384* p2 = NULL;
49362     sp_digit carry;
49363     sp_int64 c = 0;
49364     int err = MP_OKAY;
49365 
49366 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49367     if (err == MP_OKAY) {
49368         p1 = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 2, heap,
49369                                              DYNAMIC_TYPE_ECC);
49370         if (p1 == NULL)
49371             err = MEMORY_E;
49372     }
49373     if (err == MP_OKAY) {
49374         u1 = (sp_digit*)XMALLOC(sizeof(sp_digit) * 16 * 6, heap,
49375                                                               DYNAMIC_TYPE_ECC);
49376         if (u1 == NULL)
49377             err = MEMORY_E;
49378     }
49379 #endif
49380 
49381     if (err == MP_OKAY) {
49382         u2  = u1 + 2 * 6;
49383         s   = u1 + 4 * 6;
49384         tmp = u1 + 6 * 6;
49385         p2 = p1 + 1;
49386 
49387         if (hashLen > 48U) {
49388             hashLen = 48U;
49389         }
49390 
49391         sp_384_from_bin(u1, 6, hash, (int)hashLen);
49392         sp_384_from_mp(u2, 6, rm);
49393         sp_384_from_mp(s, 6, sm);
49394         sp_384_from_mp(p2->x, 6, pX);
49395         sp_384_from_mp(p2->y, 6, pY);
49396         sp_384_from_mp(p2->z, 6, pZ);
49397 
49398         err = sp_384_calc_vfy_point_6(p1, p2, s, u1, u2, tmp, heap);
49399     }
49400     if (err == MP_OKAY) {
49401         /* (r + n*order).z'.z' mod prime == (u1.G + u2.Q)->x' */
49402         /* Reload r and convert to Montgomery form. */
49403         sp_384_from_mp(u2, 6, rm);
49404         err = sp_384_mod_mul_norm_6(u2, u2, p384_mod);
49405     }
49406 
49407     if (err == MP_OKAY) {
49408         /* u1 = r.z'.z' mod prime */
49409         sp_384_mont_sqr_6(p1->z, p1->z, p384_mod, p384_mp_mod);
49410         sp_384_mont_mul_6(u1, u2, p1->z, p384_mod, p384_mp_mod);
49411         *res = (int)(sp_384_cmp_6(p1->x, u1) == 0);
49412         if (*res == 0) {
49413             /* Reload r and add order. */
49414             sp_384_from_mp(u2, 6, rm);
49415             carry = sp_384_add_6(u2, u2, p384_order);
49416             /* Carry means result is greater than mod and is not valid. */
49417             if (carry == 0) {
49418                 sp_384_norm_6(u2);
49419 
49420                 /* Compare with mod and if greater or equal then not valid. */
49421                 c = sp_384_cmp_6(u2, p384_mod);
49422             }
49423         }
49424         if ((*res == 0) && (c < 0)) {
49425             /* Convert to Montogomery form */
49426             err = sp_384_mod_mul_norm_6(u2, u2, p384_mod);
49427             if (err == MP_OKAY) {
49428                 /* u1 = (r + 1*order).z'.z' mod prime */
49429                 sp_384_mont_mul_6(u1, u2, p1->z, p384_mod,
49430                     p384_mp_mod);
49431                 *res = (sp_384_cmp_6(p1->x, u1) == 0);
49432             }
49433         }
49434     }
49435 
49436 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49437     if (u1 != NULL)
49438         XFREE(u1, heap, DYNAMIC_TYPE_ECC);
49439     if (p1 != NULL)
49440         XFREE(p1, heap, DYNAMIC_TYPE_ECC);
49441 #endif
49442 
49443     return err;
49444 }
49445 #endif /* HAVE_ECC_VERIFY */
49446 
49447 #ifdef HAVE_ECC_CHECK_KEY
49448 /* Check that the x and y oridinates are a valid point on the curve.
49449  *
49450  * point  EC point.
49451  * heap   Heap to use if dynamically allocating.
49452  * returns MEMORY_E if dynamic memory allocation fails, MP_VAL if the point is
49453  * not on the curve and MP_OKAY otherwise.
49454  */
sp_384_ecc_is_point_6(const sp_point_384 * point,void * heap)49455 static int sp_384_ecc_is_point_6(const sp_point_384* point,
49456     void* heap)
49457 {
49458 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49459     sp_digit* t1 = NULL;
49460 #else
49461     sp_digit t1[6 * 4];
49462 #endif
49463     sp_digit* t2 = NULL;
49464     int err = MP_OKAY;
49465 
49466 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49467     t1 = (sp_digit*)XMALLOC(sizeof(sp_digit) * 6 * 4, heap, DYNAMIC_TYPE_ECC);
49468     if (t1 == NULL)
49469         err = MEMORY_E;
49470 #endif
49471     (void)heap;
49472 
49473     if (err == MP_OKAY) {
49474         t2 = t1 + 2 * 6;
49475 
49476         sp_384_sqr_6(t1, point->y);
49477         (void)sp_384_mod_6(t1, t1, p384_mod);
49478         sp_384_sqr_6(t2, point->x);
49479         (void)sp_384_mod_6(t2, t2, p384_mod);
49480         sp_384_mul_6(t2, t2, point->x);
49481         (void)sp_384_mod_6(t2, t2, p384_mod);
49482         (void)sp_384_sub_6(t2, p384_mod, t2);
49483         sp_384_mont_add_6(t1, t1, t2, p384_mod);
49484 
49485         sp_384_mont_add_6(t1, t1, point->x, p384_mod);
49486         sp_384_mont_add_6(t1, t1, point->x, p384_mod);
49487         sp_384_mont_add_6(t1, t1, point->x, p384_mod);
49488 
49489         if (sp_384_cmp_6(t1, p384_b) != 0) {
49490             err = MP_VAL;
49491         }
49492     }
49493 
49494 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49495     if (t1 != NULL)
49496         XFREE(t1, heap, DYNAMIC_TYPE_ECC);
49497 #endif
49498 
49499     return err;
49500 }
49501 
49502 /* Check that the x and y oridinates are a valid point on the curve.
49503  *
49504  * pX  X ordinate of EC point.
49505  * pY  Y ordinate of EC point.
49506  * returns MEMORY_E if dynamic memory allocation fails, MP_VAL if the point is
49507  * not on the curve and MP_OKAY otherwise.
49508  */
sp_ecc_is_point_384(const mp_int * pX,const mp_int * pY)49509 int sp_ecc_is_point_384(const mp_int* pX, const mp_int* pY)
49510 {
49511 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49512     sp_point_384* pub = NULL;
49513 #else
49514     sp_point_384 pub[1];
49515 #endif
49516     const byte one[1] = { 1 };
49517     int err = MP_OKAY;
49518 
49519 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49520     pub = (sp_point_384*)XMALLOC(sizeof(sp_point_384), NULL,
49521                                        DYNAMIC_TYPE_ECC);
49522     if (pub == NULL)
49523         err = MEMORY_E;
49524 #endif
49525 
49526     if (err == MP_OKAY) {
49527         sp_384_from_mp(pub->x, 6, pX);
49528         sp_384_from_mp(pub->y, 6, pY);
49529         sp_384_from_bin(pub->z, 6, one, (int)sizeof(one));
49530 
49531         err = sp_384_ecc_is_point_6(pub, NULL);
49532     }
49533 
49534 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49535     if (pub != NULL)
49536         XFREE(pub, NULL, DYNAMIC_TYPE_ECC);
49537 #endif
49538 
49539     return err;
49540 }
49541 
49542 /* Check that the private scalar generates the EC point (px, py), the point is
49543  * on the curve and the point has the correct order.
49544  *
49545  * pX     X ordinate of EC point.
49546  * pY     Y ordinate of EC point.
49547  * privm  Private scalar that generates EC point.
49548  * returns MEMORY_E if dynamic memory allocation fails, MP_VAL if the point is
49549  * not on the curve, ECC_INF_E if the point does not have the correct order,
49550  * ECC_PRIV_KEY_E when the private scalar doesn't generate the EC point and
49551  * MP_OKAY otherwise.
49552  */
sp_ecc_check_key_384(const mp_int * pX,const mp_int * pY,const mp_int * privm,void * heap)49553 int sp_ecc_check_key_384(const mp_int* pX, const mp_int* pY,
49554     const mp_int* privm, void* heap)
49555 {
49556 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49557     sp_digit* priv = NULL;
49558     sp_point_384* pub = NULL;
49559 #else
49560     sp_digit priv[6];
49561     sp_point_384 pub[2];
49562 #endif
49563     sp_point_384* p = NULL;
49564     const byte one[1] = { 1 };
49565     int err = MP_OKAY;
49566 #ifdef HAVE_INTEL_AVX2
49567     word32 cpuid_flags = cpuid_get_flags();
49568 #endif
49569 
49570 
49571     /* Quick check the lengs of public key ordinates and private key are in
49572      * range. Proper check later.
49573      */
49574     if (((mp_count_bits(pX) > 384) ||
49575         (mp_count_bits(pY) > 384) ||
49576         ((privm != NULL) && (mp_count_bits(privm) > 384)))) {
49577         err = ECC_OUT_OF_RANGE_E;
49578     }
49579 
49580 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49581     if (err == MP_OKAY) {
49582         pub = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 2, heap,
49583                                            DYNAMIC_TYPE_ECC);
49584         if (pub == NULL)
49585             err = MEMORY_E;
49586     }
49587     if (err == MP_OKAY && privm) {
49588         priv = (sp_digit*)XMALLOC(sizeof(sp_digit) * 6, heap,
49589                                   DYNAMIC_TYPE_ECC);
49590         if (priv == NULL)
49591             err = MEMORY_E;
49592     }
49593 #endif
49594 
49595     if (err == MP_OKAY) {
49596         p = pub + 1;
49597 
49598         sp_384_from_mp(pub->x, 6, pX);
49599         sp_384_from_mp(pub->y, 6, pY);
49600         sp_384_from_bin(pub->z, 6, one, (int)sizeof(one));
49601         if (privm)
49602             sp_384_from_mp(priv, 6, privm);
49603 
49604         /* Check point at infinitiy. */
49605         if ((sp_384_iszero_6(pub->x) != 0) &&
49606             (sp_384_iszero_6(pub->y) != 0)) {
49607             err = ECC_INF_E;
49608         }
49609     }
49610 
49611     /* Check range of X and Y */
49612     if ((err == MP_OKAY) &&
49613             ((sp_384_cmp_6(pub->x, p384_mod) >= 0) ||
49614              (sp_384_cmp_6(pub->y, p384_mod) >= 0))) {
49615         err = ECC_OUT_OF_RANGE_E;
49616     }
49617 
49618     if (err == MP_OKAY) {
49619         /* Check point is on curve */
49620         err = sp_384_ecc_is_point_6(pub, heap);
49621     }
49622 
49623     if (err == MP_OKAY) {
49624         /* Point * order = infinity */
49625 #ifdef HAVE_INTEL_AVX2
49626         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
49627             err = sp_384_ecc_mulmod_avx2_6(p, pub, p384_order, 1, 1, heap);
49628         else
49629 #endif
49630             err = sp_384_ecc_mulmod_6(p, pub, p384_order, 1, 1, heap);
49631     }
49632     /* Check result is infinity */
49633     if ((err == MP_OKAY) && ((sp_384_iszero_6(p->x) == 0) ||
49634                              (sp_384_iszero_6(p->y) == 0))) {
49635         err = ECC_INF_E;
49636     }
49637 
49638     if (privm) {
49639         if (err == MP_OKAY) {
49640             /* Base * private = point */
49641 #ifdef HAVE_INTEL_AVX2
49642             if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
49643                 err = sp_384_ecc_mulmod_base_avx2_6(p, priv, 1, 1, heap);
49644             else
49645 #endif
49646                 err = sp_384_ecc_mulmod_base_6(p, priv, 1, 1, heap);
49647         }
49648         /* Check result is public key */
49649         if ((err == MP_OKAY) &&
49650                 ((sp_384_cmp_6(p->x, pub->x) != 0) ||
49651                  (sp_384_cmp_6(p->y, pub->y) != 0))) {
49652             err = ECC_PRIV_KEY_E;
49653         }
49654     }
49655 
49656 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49657     if (pub != NULL)
49658         XFREE(pub, heap, DYNAMIC_TYPE_ECC);
49659     if (priv != NULL)
49660         XFREE(priv, heap, DYNAMIC_TYPE_ECC);
49661 #endif
49662 
49663     return err;
49664 }
49665 #endif
49666 #ifdef WOLFSSL_PUBLIC_ECC_ADD_DBL
49667 /* Add two projective EC points together.
49668  * (pX, pY, pZ) + (qX, qY, qZ) = (rX, rY, rZ)
49669  *
49670  * pX   First EC point's X ordinate.
49671  * pY   First EC point's Y ordinate.
49672  * pZ   First EC point's Z ordinate.
49673  * qX   Second EC point's X ordinate.
49674  * qY   Second EC point's Y ordinate.
49675  * qZ   Second EC point's Z ordinate.
49676  * rX   Resultant EC point's X ordinate.
49677  * rY   Resultant EC point's Y ordinate.
49678  * rZ   Resultant EC point's Z ordinate.
49679  * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
49680  */
sp_ecc_proj_add_point_384(mp_int * pX,mp_int * pY,mp_int * pZ,mp_int * qX,mp_int * qY,mp_int * qZ,mp_int * rX,mp_int * rY,mp_int * rZ)49681 int sp_ecc_proj_add_point_384(mp_int* pX, mp_int* pY, mp_int* pZ,
49682                               mp_int* qX, mp_int* qY, mp_int* qZ,
49683                               mp_int* rX, mp_int* rY, mp_int* rZ)
49684 {
49685 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49686     sp_digit* tmp = NULL;
49687     sp_point_384* p = NULL;
49688 #else
49689     sp_digit tmp[2 * 6 * 5];
49690     sp_point_384 p[2];
49691 #endif
49692     sp_point_384* q = NULL;
49693     int err = MP_OKAY;
49694 #ifdef HAVE_INTEL_AVX2
49695     word32 cpuid_flags = cpuid_get_flags();
49696 #endif
49697 
49698 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49699     if (err == MP_OKAY) {
49700         p = (sp_point_384*)XMALLOC(sizeof(sp_point_384) * 2, NULL,
49701                                          DYNAMIC_TYPE_ECC);
49702         if (p == NULL)
49703             err = MEMORY_E;
49704     }
49705     if (err == MP_OKAY) {
49706         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 6 * 5, NULL,
49707                                  DYNAMIC_TYPE_ECC);
49708         if (tmp == NULL) {
49709             err = MEMORY_E;
49710         }
49711     }
49712 #endif
49713 
49714     if (err == MP_OKAY) {
49715         q = p + 1;
49716 
49717         sp_384_from_mp(p->x, 6, pX);
49718         sp_384_from_mp(p->y, 6, pY);
49719         sp_384_from_mp(p->z, 6, pZ);
49720         sp_384_from_mp(q->x, 6, qX);
49721         sp_384_from_mp(q->y, 6, qY);
49722         sp_384_from_mp(q->z, 6, qZ);
49723         p->infinity = sp_384_iszero_6(p->x) &
49724                       sp_384_iszero_6(p->y);
49725         q->infinity = sp_384_iszero_6(q->x) &
49726                       sp_384_iszero_6(q->y);
49727 
49728 #ifdef HAVE_INTEL_AVX2
49729         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
49730             sp_384_proj_point_add_avx2_6(p, p, q, tmp);
49731         else
49732 #endif
49733             sp_384_proj_point_add_6(p, p, q, tmp);
49734     }
49735 
49736     if (err == MP_OKAY) {
49737         err = sp_384_to_mp(p->x, rX);
49738     }
49739     if (err == MP_OKAY) {
49740         err = sp_384_to_mp(p->y, rY);
49741     }
49742     if (err == MP_OKAY) {
49743         err = sp_384_to_mp(p->z, rZ);
49744     }
49745 
49746 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49747     if (tmp != NULL)
49748         XFREE(tmp, NULL, DYNAMIC_TYPE_ECC);
49749     if (p != NULL)
49750         XFREE(p, NULL, DYNAMIC_TYPE_ECC);
49751 #endif
49752 
49753     return err;
49754 }
49755 
49756 /* Double a projective EC point.
49757  * (pX, pY, pZ) + (pX, pY, pZ) = (rX, rY, rZ)
49758  *
49759  * pX   EC point's X ordinate.
49760  * pY   EC point's Y ordinate.
49761  * pZ   EC point's Z ordinate.
49762  * rX   Resultant EC point's X ordinate.
49763  * rY   Resultant EC point's Y ordinate.
49764  * rZ   Resultant EC point's Z ordinate.
49765  * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
49766  */
sp_ecc_proj_dbl_point_384(mp_int * pX,mp_int * pY,mp_int * pZ,mp_int * rX,mp_int * rY,mp_int * rZ)49767 int sp_ecc_proj_dbl_point_384(mp_int* pX, mp_int* pY, mp_int* pZ,
49768                               mp_int* rX, mp_int* rY, mp_int* rZ)
49769 {
49770 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49771     sp_digit* tmp = NULL;
49772     sp_point_384* p = NULL;
49773 #else
49774     sp_digit tmp[2 * 6 * 2];
49775     sp_point_384 p[1];
49776 #endif
49777     int err = MP_OKAY;
49778 #ifdef HAVE_INTEL_AVX2
49779     word32 cpuid_flags = cpuid_get_flags();
49780 #endif
49781 
49782 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49783     if (err == MP_OKAY) {
49784         p = (sp_point_384*)XMALLOC(sizeof(sp_point_384), NULL,
49785                                          DYNAMIC_TYPE_ECC);
49786         if (p == NULL)
49787             err = MEMORY_E;
49788     }
49789     if (err == MP_OKAY) {
49790         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 6 * 2, NULL,
49791                                  DYNAMIC_TYPE_ECC);
49792         if (tmp == NULL)
49793             err = MEMORY_E;
49794     }
49795 #endif
49796 
49797     if (err == MP_OKAY) {
49798         sp_384_from_mp(p->x, 6, pX);
49799         sp_384_from_mp(p->y, 6, pY);
49800         sp_384_from_mp(p->z, 6, pZ);
49801         p->infinity = sp_384_iszero_6(p->x) &
49802                       sp_384_iszero_6(p->y);
49803 
49804 #ifdef HAVE_INTEL_AVX2
49805         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
49806             sp_384_proj_point_dbl_avx2_6(p, p, tmp);
49807         else
49808 #endif
49809             sp_384_proj_point_dbl_6(p, p, tmp);
49810     }
49811 
49812     if (err == MP_OKAY) {
49813         err = sp_384_to_mp(p->x, rX);
49814     }
49815     if (err == MP_OKAY) {
49816         err = sp_384_to_mp(p->y, rY);
49817     }
49818     if (err == MP_OKAY) {
49819         err = sp_384_to_mp(p->z, rZ);
49820     }
49821 
49822 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49823     if (tmp != NULL)
49824         XFREE(tmp, NULL, DYNAMIC_TYPE_ECC);
49825     if (p != NULL)
49826         XFREE(p, NULL, DYNAMIC_TYPE_ECC);
49827 #endif
49828 
49829     return err;
49830 }
49831 
49832 /* Map a projective EC point to affine in place.
49833  * pZ will be one.
49834  *
49835  * pX   EC point's X ordinate.
49836  * pY   EC point's Y ordinate.
49837  * pZ   EC point's Z ordinate.
49838  * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
49839  */
sp_ecc_map_384(mp_int * pX,mp_int * pY,mp_int * pZ)49840 int sp_ecc_map_384(mp_int* pX, mp_int* pY, mp_int* pZ)
49841 {
49842 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49843     sp_digit* tmp = NULL;
49844     sp_point_384* p = NULL;
49845 #else
49846     sp_digit tmp[2 * 6 * 6];
49847     sp_point_384 p[1];
49848 #endif
49849     int err = MP_OKAY;
49850 
49851 #ifdef HAVE_INTEL_AVX2
49852     word32 cpuid_flags = cpuid_get_flags();
49853 #endif
49854 
49855 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49856     if (err == MP_OKAY) {
49857         p = (sp_point_384*)XMALLOC(sizeof(sp_point_384), NULL,
49858                                          DYNAMIC_TYPE_ECC);
49859         if (p == NULL)
49860             err = MEMORY_E;
49861     }
49862     if (err == MP_OKAY) {
49863         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 6 * 6, NULL,
49864                                  DYNAMIC_TYPE_ECC);
49865         if (tmp == NULL)
49866             err = MEMORY_E;
49867     }
49868 #endif
49869     if (err == MP_OKAY) {
49870         sp_384_from_mp(p->x, 6, pX);
49871         sp_384_from_mp(p->y, 6, pY);
49872         sp_384_from_mp(p->z, 6, pZ);
49873         p->infinity = sp_384_iszero_6(p->x) &
49874                       sp_384_iszero_6(p->y);
49875 
49876 #ifdef HAVE_INTEL_AVX2
49877         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
49878             sp_384_map_avx2_6(point, point, tmp);
49879         else
49880 #endif
49881             sp_384_map_6(p, p, tmp);
49882     }
49883 
49884     if (err == MP_OKAY) {
49885         err = sp_384_to_mp(p->x, pX);
49886     }
49887     if (err == MP_OKAY) {
49888         err = sp_384_to_mp(p->y, pY);
49889     }
49890     if (err == MP_OKAY) {
49891         err = sp_384_to_mp(p->z, pZ);
49892     }
49893 
49894 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49895     if (tmp != NULL)
49896         XFREE(tmp, NULL, DYNAMIC_TYPE_ECC);
49897     if (p != NULL)
49898         XFREE(p, NULL, DYNAMIC_TYPE_ECC);
49899 #endif
49900 
49901     return err;
49902 }
49903 #endif /* WOLFSSL_PUBLIC_ECC_ADD_DBL */
49904 #ifdef HAVE_COMP_KEY
49905 /* Find the square root of a number mod the prime of the curve.
49906  *
49907  * y  The number to operate on and the result.
49908  * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
49909  */
sp_384_mont_sqrt_6(sp_digit * y)49910 static int sp_384_mont_sqrt_6(sp_digit* y)
49911 {
49912 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49913     sp_digit* t1 = NULL;
49914 #else
49915     sp_digit t1[5 * 2 * 6];
49916 #endif
49917     sp_digit* t2 = NULL;
49918     sp_digit* t3 = NULL;
49919     sp_digit* t4 = NULL;
49920     sp_digit* t5 = NULL;
49921     int err = MP_OKAY;
49922 #ifdef HAVE_INTEL_AVX2
49923     word32 cpuid_flags = cpuid_get_flags();
49924 #endif
49925 
49926 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
49927     t1 = (sp_digit*)XMALLOC(sizeof(sp_digit) * 5 * 2 * 6, NULL, DYNAMIC_TYPE_ECC);
49928     if (t1 == NULL)
49929         err = MEMORY_E;
49930 #endif
49931 
49932     if (err == MP_OKAY) {
49933         t2 = t1 + 2 * 6;
49934         t3 = t1 + 4 * 6;
49935         t4 = t1 + 6 * 6;
49936         t5 = t1 + 8 * 6;
49937 
49938 #ifdef HAVE_INTEL_AVX2
49939         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
49940             /* t2 = y ^ 0x2 */
49941             sp_384_mont_sqr_avx2_6(t2, y, p384_mod, p384_mp_mod);
49942             /* t1 = y ^ 0x3 */
49943             sp_384_mont_mul_avx2_6(t1, t2, y, p384_mod, p384_mp_mod);
49944             /* t5 = y ^ 0xc */
49945             sp_384_mont_sqr_n_avx2_6(t5, t1, 2, p384_mod, p384_mp_mod);
49946             /* t1 = y ^ 0xf */
49947             sp_384_mont_mul_avx2_6(t1, t1, t5, p384_mod, p384_mp_mod);
49948             /* t2 = y ^ 0x1e */
49949             sp_384_mont_sqr_avx2_6(t2, t1, p384_mod, p384_mp_mod);
49950             /* t3 = y ^ 0x1f */
49951             sp_384_mont_mul_avx2_6(t3, t2, y, p384_mod, p384_mp_mod);
49952             /* t2 = y ^ 0x3e0 */
49953             sp_384_mont_sqr_n_avx2_6(t2, t3, 5, p384_mod, p384_mp_mod);
49954             /* t1 = y ^ 0x3ff */
49955             sp_384_mont_mul_avx2_6(t1, t3, t2, p384_mod, p384_mp_mod);
49956             /* t2 = y ^ 0x7fe0 */
49957             sp_384_mont_sqr_n_avx2_6(t2, t1, 5, p384_mod, p384_mp_mod);
49958             /* t3 = y ^ 0x7fff */
49959             sp_384_mont_mul_avx2_6(t3, t3, t2, p384_mod, p384_mp_mod);
49960             /* t2 = y ^ 0x3fff800 */
49961             sp_384_mont_sqr_n_avx2_6(t2, t3, 15, p384_mod, p384_mp_mod);
49962             /* t4 = y ^ 0x3ffffff */
49963             sp_384_mont_mul_avx2_6(t4, t3, t2, p384_mod, p384_mp_mod);
49964             /* t2 = y ^ 0xffffffc000000 */
49965             sp_384_mont_sqr_n_avx2_6(t2, t4, 30, p384_mod, p384_mp_mod);
49966             /* t1 = y ^ 0xfffffffffffff */
49967             sp_384_mont_mul_avx2_6(t1, t4, t2, p384_mod, p384_mp_mod);
49968             /* t2 = y ^ 0xfffffffffffffff000000000000000 */
49969             sp_384_mont_sqr_n_avx2_6(t2, t1, 60, p384_mod, p384_mp_mod);
49970             /* t1 = y ^ 0xffffffffffffffffffffffffffffff */
49971             sp_384_mont_mul_avx2_6(t1, t1, t2, p384_mod, p384_mp_mod);
49972             /* t2 = y ^ 0xffffffffffffffffffffffffffffff000000000000000000000000000000 */
49973             sp_384_mont_sqr_n_avx2_6(t2, t1, 120, p384_mod, p384_mp_mod);
49974             /* t1 = y ^ 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff */
49975             sp_384_mont_mul_avx2_6(t1, t1, t2, p384_mod, p384_mp_mod);
49976             /* t2 = y ^ 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000 */
49977             sp_384_mont_sqr_n_avx2_6(t2, t1, 15, p384_mod, p384_mp_mod);
49978             /* t1 = y ^ 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff */
49979             sp_384_mont_mul_avx2_6(t1, t3, t2, p384_mod, p384_mp_mod);
49980             /* t2 = y ^ 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000 */
49981             sp_384_mont_sqr_n_avx2_6(t2, t1, 31, p384_mod, p384_mp_mod);
49982             /* t1 = y ^ 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffff */
49983             sp_384_mont_mul_avx2_6(t1, t4, t2, p384_mod, p384_mp_mod);
49984             /* t2 = y ^ 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffff0 */
49985             sp_384_mont_sqr_n_avx2_6(t2, t1, 4, p384_mod, p384_mp_mod);
49986             /* t1 = y ^ 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffc */
49987             sp_384_mont_mul_avx2_6(t1, t5, t2, p384_mod, p384_mp_mod);
49988             /* t2 = y ^ 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000 */
49989             sp_384_mont_sqr_n_avx2_6(t2, t1, 62, p384_mod, p384_mp_mod);
49990             /* t1 = y ^ 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000001 */
49991             sp_384_mont_mul_avx2_6(t1, y, t2, p384_mod, p384_mp_mod);
49992             /* t2 = y ^ 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffc00000000000000040000000 */
49993             sp_384_mont_sqr_n_avx2_6(y, t1, 30, p384_mod, p384_mp_mod);
49994         }
49995         else
49996 #endif
49997         {
49998             /* t2 = y ^ 0x2 */
49999             sp_384_mont_sqr_6(t2, y, p384_mod, p384_mp_mod);
50000             /* t1 = y ^ 0x3 */
50001             sp_384_mont_mul_6(t1, t2, y, p384_mod, p384_mp_mod);
50002             /* t5 = y ^ 0xc */
50003             sp_384_mont_sqr_n_6(t5, t1, 2, p384_mod, p384_mp_mod);
50004             /* t1 = y ^ 0xf */
50005             sp_384_mont_mul_6(t1, t1, t5, p384_mod, p384_mp_mod);
50006             /* t2 = y ^ 0x1e */
50007             sp_384_mont_sqr_6(t2, t1, p384_mod, p384_mp_mod);
50008             /* t3 = y ^ 0x1f */
50009             sp_384_mont_mul_6(t3, t2, y, p384_mod, p384_mp_mod);
50010             /* t2 = y ^ 0x3e0 */
50011             sp_384_mont_sqr_n_6(t2, t3, 5, p384_mod, p384_mp_mod);
50012             /* t1 = y ^ 0x3ff */
50013             sp_384_mont_mul_6(t1, t3, t2, p384_mod, p384_mp_mod);
50014             /* t2 = y ^ 0x7fe0 */
50015             sp_384_mont_sqr_n_6(t2, t1, 5, p384_mod, p384_mp_mod);
50016             /* t3 = y ^ 0x7fff */
50017             sp_384_mont_mul_6(t3, t3, t2, p384_mod, p384_mp_mod);
50018             /* t2 = y ^ 0x3fff800 */
50019             sp_384_mont_sqr_n_6(t2, t3, 15, p384_mod, p384_mp_mod);
50020             /* t4 = y ^ 0x3ffffff */
50021             sp_384_mont_mul_6(t4, t3, t2, p384_mod, p384_mp_mod);
50022             /* t2 = y ^ 0xffffffc000000 */
50023             sp_384_mont_sqr_n_6(t2, t4, 30, p384_mod, p384_mp_mod);
50024             /* t1 = y ^ 0xfffffffffffff */
50025             sp_384_mont_mul_6(t1, t4, t2, p384_mod, p384_mp_mod);
50026             /* t2 = y ^ 0xfffffffffffffff000000000000000 */
50027             sp_384_mont_sqr_n_6(t2, t1, 60, p384_mod, p384_mp_mod);
50028             /* t1 = y ^ 0xffffffffffffffffffffffffffffff */
50029             sp_384_mont_mul_6(t1, t1, t2, p384_mod, p384_mp_mod);
50030             /* t2 = y ^ 0xffffffffffffffffffffffffffffff000000000000000000000000000000 */
50031             sp_384_mont_sqr_n_6(t2, t1, 120, p384_mod, p384_mp_mod);
50032             /* t1 = y ^ 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff */
50033             sp_384_mont_mul_6(t1, t1, t2, p384_mod, p384_mp_mod);
50034             /* t2 = y ^ 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000 */
50035             sp_384_mont_sqr_n_6(t2, t1, 15, p384_mod, p384_mp_mod);
50036             /* t1 = y ^ 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff */
50037             sp_384_mont_mul_6(t1, t3, t2, p384_mod, p384_mp_mod);
50038             /* t2 = y ^ 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000 */
50039             sp_384_mont_sqr_n_6(t2, t1, 31, p384_mod, p384_mp_mod);
50040             /* t1 = y ^ 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffff */
50041             sp_384_mont_mul_6(t1, t4, t2, p384_mod, p384_mp_mod);
50042             /* t2 = y ^ 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffff0 */
50043             sp_384_mont_sqr_n_6(t2, t1, 4, p384_mod, p384_mp_mod);
50044             /* t1 = y ^ 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffc */
50045             sp_384_mont_mul_6(t1, t5, t2, p384_mod, p384_mp_mod);
50046             /* t2 = y ^ 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000 */
50047             sp_384_mont_sqr_n_6(t2, t1, 62, p384_mod, p384_mp_mod);
50048             /* t1 = y ^ 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000001 */
50049             sp_384_mont_mul_6(t1, y, t2, p384_mod, p384_mp_mod);
50050             /* t2 = y ^ 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffc00000000000000040000000 */
50051             sp_384_mont_sqr_n_6(y, t1, 30, p384_mod, p384_mp_mod);
50052         }
50053     }
50054 
50055 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
50056     if (t1 != NULL)
50057         XFREE(t1, NULL, DYNAMIC_TYPE_ECC);
50058 #endif
50059 
50060     return err;
50061 }
50062 
50063 
50064 /* Uncompress the point given the X ordinate.
50065  *
50066  * xm    X ordinate.
50067  * odd   Whether the Y ordinate is odd.
50068  * ym    Calculated Y ordinate.
50069  * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
50070  */
sp_ecc_uncompress_384(mp_int * xm,int odd,mp_int * ym)50071 int sp_ecc_uncompress_384(mp_int* xm, int odd, mp_int* ym)
50072 {
50073 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
50074     sp_digit* x = NULL;
50075 #else
50076     sp_digit x[4 * 6];
50077 #endif
50078     sp_digit* y = NULL;
50079     int err = MP_OKAY;
50080 #ifdef HAVE_INTEL_AVX2
50081     word32 cpuid_flags = cpuid_get_flags();
50082 #endif
50083 
50084 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
50085     x = (sp_digit*)XMALLOC(sizeof(sp_digit) * 4 * 6, NULL, DYNAMIC_TYPE_ECC);
50086     if (x == NULL)
50087         err = MEMORY_E;
50088 #endif
50089 
50090     if (err == MP_OKAY) {
50091         y = x + 2 * 6;
50092 
50093         sp_384_from_mp(x, 6, xm);
50094         err = sp_384_mod_mul_norm_6(x, x, p384_mod);
50095     }
50096     if (err == MP_OKAY) {
50097         /* y = x^3 */
50098 #ifdef HAVE_INTEL_AVX2
50099         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
50100             sp_384_mont_sqr_avx2_6(y, x, p384_mod, p384_mp_mod);
50101             sp_384_mont_mul_avx2_6(y, y, x, p384_mod, p384_mp_mod);
50102         }
50103         else
50104 #endif
50105         {
50106             sp_384_mont_sqr_6(y, x, p384_mod, p384_mp_mod);
50107             sp_384_mont_mul_6(y, y, x, p384_mod, p384_mp_mod);
50108         }
50109         /* y = x^3 - 3x */
50110         sp_384_mont_sub_6(y, y, x, p384_mod);
50111         sp_384_mont_sub_6(y, y, x, p384_mod);
50112         sp_384_mont_sub_6(y, y, x, p384_mod);
50113         /* y = x^3 - 3x + b */
50114         err = sp_384_mod_mul_norm_6(x, p384_b, p384_mod);
50115     }
50116     if (err == MP_OKAY) {
50117         sp_384_mont_add_6(y, y, x, p384_mod);
50118         /* y = sqrt(x^3 - 3x + b) */
50119         err = sp_384_mont_sqrt_6(y);
50120     }
50121     if (err == MP_OKAY) {
50122         XMEMSET(y + 6, 0, 6U * sizeof(sp_digit));
50123         sp_384_mont_reduce_6(y, p384_mod, p384_mp_mod);
50124         if ((((word32)y[0] ^ (word32)odd) & 1U) != 0U) {
50125             sp_384_mont_sub_6(y, p384_mod, y, p384_mod);
50126         }
50127 
50128         err = sp_384_to_mp(y, ym);
50129     }
50130 
50131 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
50132     if (x != NULL)
50133         XFREE(x, NULL, DYNAMIC_TYPE_ECC);
50134 #endif
50135 
50136     return err;
50137 }
50138 #endif
50139 #endif /* WOLFSSL_SP_384 */
50140 #ifdef WOLFSSL_SP_1024
50141 
50142 /* Point structure to use. */
50143 typedef struct sp_point_1024 {
50144     /* X ordinate of point. */
50145     sp_digit x[2 * 16];
50146     /* Y ordinate of point. */
50147     sp_digit y[2 * 16];
50148     /* Z ordinate of point. */
50149     sp_digit z[2 * 16];
50150     /* Indicates point is at infinity. */
50151     int infinity;
50152 } sp_point_1024;
50153 
50154 extern void sp_1024_mul_16(sp_digit* r, const sp_digit* a, const sp_digit* b);
50155 extern void sp_1024_sqr_16(sp_digit* r, const sp_digit* a);
50156 extern void sp_1024_mul_avx2_16(sp_digit* r, const sp_digit* a, const sp_digit* b);
50157 extern void sp_1024_sqr_avx2_16(sp_digit* r, const sp_digit* a);
50158 /* The modulus (prime) of the curve P1024. */
50159 static const sp_digit p1024_mod[16] = {
50160     0x666d807afea85febL,0x80c5df10ac7ace87L,0xfce3e82389857db0L,
50161     0x9f94d6af56971f1fL,0xa7cf3c521c3c09aaL,0xb6aff4a831852a82L,
50162     0x512ac5cd65681ce1L,0xe26c6487326b4cd4L,0x356d27f4a666a6d0L,
50163     0xe791b39ff7c88a19L,0x228730d531a59cb0L,0xf40aab27e2fc0f1bL,
50164     0xbe9ae358b3e01a2eL,0x416c0ce19cb48261L,0x65c61198dad0657aL,
50165     0x997abb1f0a563fdaL
50166 };
50167 /* The Montgomery normalizer for modulus of the curve P1024. */
50168 static const sp_digit p1024_norm_mod[16] = {
50169     0x99927f850157a015L,0x7f3a20ef53853178L,0x031c17dc767a824fL,
50170     0x606b2950a968e0e0L,0x5830c3ade3c3f655L,0x49500b57ce7ad57dL,
50171     0xaed53a329a97e31eL,0x1d939b78cd94b32bL,0xca92d80b5999592fL,
50172     0x186e4c60083775e6L,0xdd78cf2ace5a634fL,0x0bf554d81d03f0e4L,
50173     0x41651ca74c1fe5d1L,0xbe93f31e634b7d9eL,0x9a39ee67252f9a85L,
50174     0x668544e0f5a9c025L
50175 };
50176 /* The Montgomery multiplier for modulus of the curve P1024. */
50177 static sp_digit p1024_mp_mod = 0x290420077c8f2f3d;
50178 #if defined(WOLFSSL_SP_SMALL) || defined(HAVE_ECC_CHECK_KEY)
50179 /* The order of the curve P1024. */
50180 static const sp_digit p1024_order[16] = {
50181     0xd99b601ebfaa17fbL,0x203177c42b1eb3a1L,0xff38fa08e2615f6cL,
50182     0xa7e535abd5a5c7c7L,0xa9f3cf14870f026aL,0x6dabfd2a0c614aa0L,
50183     0x144ab173595a0738L,0x389b1921cc9ad335L,0x4d5b49fd2999a9b4L,
50184     0x39e46ce7fdf22286L,0xc8a1cc354c69672cL,0xbd02aac9f8bf03c6L,
50185     0x6fa6b8d62cf8068bL,0x905b0338672d2098L,0x9971846636b4195eL,
50186     0x265eaec7c2958ff6L
50187 };
50188 #endif
50189 /* The base point of curve P1024. */
50190 static const sp_point_1024 p1024_base = {
50191     /* X ordinate */
50192     {
50193         0x880dc8abeae63895L,0x80ec46c4967e0979L,0xee9163a5b63f73ecL,
50194         0xd5cfb4cc80728d87L,0xa7c1514dba66910dL,0xa702c3397a60de74L,
50195         0x337c86548b72f2e1L,0x9760af765dd5bccbL,0x718bd9e7406ce890L,
50196         0x43d5f22cdb9dfa55L,0xab10db9030b09e10L,0xb5edb6c0f6ce2308L,
50197         0x98b2f204b6ff7cbfL,0x2b1a2fd60aec69c6L,0x0a7990053ed9b52aL,
50198         0x53fc09ee332c29adL,
50199         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
50200         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
50201         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
50202         (sp_digit)0
50203     },
50204     /* Y ordinate */
50205     {
50206         0x75573fd71bef16d7L,0xadb9b5706a67dcdeL,0x80bdad5ad5bb4636L,
50207         0x13515ad7e9cb99a9L,0x492d979fc5a4d5f2L,0xac6f1e80164aa989L,
50208         0xcad696b5b7652fe0L,0x70dae117ad547c6cL,0x416cff0ca9e032b9L,
50209         0x6b598ccf9a140b2eL,0xe7f7f5e5f0de55f6L,0xf5ea69f4654ec2b9L,
50210         0x3d778d821e141178L,0xd3e8201602990696L,0xf9f1f0533634a135L,
50211         0x0a8249063f6009f1L,
50212         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
50213         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
50214         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
50215         (sp_digit)0
50216     },
50217     /* Z ordinate */
50218     {
50219         0x0000000000000001L,0x0000000000000000L,0x0000000000000000L,
50220         0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,
50221         0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,
50222         0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,
50223         0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,
50224         0x0000000000000000L,
50225         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
50226         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
50227         (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0, (sp_digit)0,
50228         (sp_digit)0
50229     },
50230     /* infinity */
50231     0
50232 };
50233 
50234 extern sp_digit sp_1024_add_16(sp_digit* r, const sp_digit* a, const sp_digit* b);
50235 extern sp_digit sp_1024_sub_in_place_16(sp_digit* a, const sp_digit* b);
50236 extern sp_digit sp_1024_cond_sub_16(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
50237 extern sp_digit sp_1024_cond_sub_avx2_16(sp_digit* r, const sp_digit* a, const sp_digit* b, sp_digit m);
50238 extern void sp_1024_mul_d_16(sp_digit* r, const sp_digit* a, sp_digit b);
50239 extern void sp_1024_mul_d_avx2_16(sp_digit* r, const sp_digit* a, const sp_digit b);
50240 #ifdef _WIN64
50241 #if _MSC_VER < 1920
50242 extern sp_digit div_1024_word_asm_16(sp_digit d1, sp_digit d0, sp_digit div);
50243 #endif /* _MSC_VER < 1920 */
50244 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
50245  *
50246  * d1   The high order half of the number to divide.
50247  * d0   The low order half of the number to divide.
50248  * div  The dividend.
50249  * returns the result of the division.
50250  */
div_1024_word_16(sp_digit d1,sp_digit d0,sp_digit div)50251 static WC_INLINE sp_digit div_1024_word_16(sp_digit d1, sp_digit d0,
50252         sp_digit div)
50253 {
50254     ASSERT_SAVED_VECTOR_REGISTERS();
50255 #if _MSC_VER >= 1920
50256     return _udiv128(d1, d0, div, NULL);
50257 #else
50258     return div_1024_word_asm_16(d1, d0, div);
50259 #endif
50260 }
50261 #else
50262 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
50263  *
50264  * d1   The high order half of the number to divide.
50265  * d0   The low order half of the number to divide.
50266  * div  The dividend.
50267  * returns the result of the division.
50268  */
div_1024_word_16(sp_digit d1,sp_digit d0,sp_digit div)50269 static WC_INLINE sp_digit div_1024_word_16(sp_digit d1, sp_digit d0,
50270         sp_digit div)
50271 {
50272     ASSERT_SAVED_VECTOR_REGISTERS();
50273     register sp_digit r asm("rax");
50274     __asm__ __volatile__ (
50275         "divq %3"
50276         : "=a" (r)
50277         : "d" (d1), "a" (d0), "r" (div)
50278         :
50279     );
50280     return r;
50281 }
50282 #endif /* _WIN64 */
50283 /* AND m into each word of a and store in r.
50284  *
50285  * r  A single precision integer.
50286  * a  A single precision integer.
50287  * m  Mask to AND against each digit.
50288  */
sp_1024_mask_16(sp_digit * r,const sp_digit * a,sp_digit m)50289 static void sp_1024_mask_16(sp_digit* r, const sp_digit* a, sp_digit m)
50290 {
50291 #ifdef WOLFSSL_SP_SMALL
50292     int i;
50293 
50294     for (i=0; i<16; i++) {
50295         r[i] = a[i] & m;
50296     }
50297 #else
50298     int i;
50299 
50300     for (i = 0; i < 16; i += 8) {
50301         r[i+0] = a[i+0] & m;
50302         r[i+1] = a[i+1] & m;
50303         r[i+2] = a[i+2] & m;
50304         r[i+3] = a[i+3] & m;
50305         r[i+4] = a[i+4] & m;
50306         r[i+5] = a[i+5] & m;
50307         r[i+6] = a[i+6] & m;
50308         r[i+7] = a[i+7] & m;
50309     }
50310 #endif
50311 }
50312 
50313 extern sp_int64 sp_1024_cmp_16(const sp_digit* a, const sp_digit* b);
50314 /* Divide d in a and put remainder into r (m*d + r = a)
50315  * m is not calculated as it is not needed at this time.
50316  *
50317  * a  Number to be divided.
50318  * d  Number to divide with.
50319  * m  Multiplier result.
50320  * r  Remainder from the division.
50321  * returns MP_OKAY indicating success.
50322  */
sp_1024_div_16(const sp_digit * a,const sp_digit * d,sp_digit * m,sp_digit * r)50323 static WC_INLINE int sp_1024_div_16(const sp_digit* a, const sp_digit* d, sp_digit* m,
50324         sp_digit* r)
50325 {
50326     sp_digit t1[32];
50327     sp_digit t2[17];
50328     sp_digit div;
50329     sp_digit r1;
50330     int i;
50331 #ifdef HAVE_INTEL_AVX2
50332     word32 cpuid_flags = cpuid_get_flags();
50333 #endif
50334 
50335     ASSERT_SAVED_VECTOR_REGISTERS();
50336 
50337     (void)m;
50338 
50339     div = d[15];
50340     XMEMCPY(t1, a, sizeof(*t1) * 2 * 16);
50341     r1 = sp_1024_cmp_16(&t1[16], d) >= 0;
50342 #ifdef HAVE_INTEL_AVX2
50343     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
50344         sp_1024_cond_sub_avx2_16(&t1[16], &t1[16], d, (sp_digit)0 - r1);
50345     else
50346 #endif
50347         sp_1024_cond_sub_16(&t1[16], &t1[16], d, (sp_digit)0 - r1);
50348     for (i=15; i>=0; i--) {
50349         sp_digit hi = t1[16 + i] - (t1[16 + i] == div);
50350         r1 = div_1024_word_16(hi, t1[16 + i - 1], div);
50351 
50352 #ifdef HAVE_INTEL_AVX2
50353         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
50354             sp_1024_mul_d_avx2_16(t2, d, r1);
50355         else
50356 #endif
50357             sp_1024_mul_d_16(t2, d, r1);
50358         t1[16 + i] += sp_1024_sub_in_place_16(&t1[i], t2);
50359         t1[16 + i] -= t2[16];
50360         sp_1024_mask_16(t2, d, t1[16 + i]);
50361         t1[16 + i] += sp_1024_add_16(&t1[i], &t1[i], t2);
50362         sp_1024_mask_16(t2, d, t1[16 + i]);
50363         t1[16 + i] += sp_1024_add_16(&t1[i], &t1[i], t2);
50364     }
50365 
50366     r1 = sp_1024_cmp_16(t1, d) >= 0;
50367 #ifdef HAVE_INTEL_AVX2
50368     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
50369         sp_1024_cond_sub_avx2_16(r, t1, d, (sp_digit)0 - r1);
50370     else
50371 #endif
50372         sp_1024_cond_sub_16(r, t1, d, (sp_digit)0 - r1);
50373 
50374     return MP_OKAY;
50375 }
50376 
50377 /* Reduce a modulo m into r. (r = a mod m)
50378  *
50379  * r  A single precision number that is the reduced result.
50380  * a  A single precision number that is to be reduced.
50381  * m  A single precision number that is the modulus to reduce with.
50382  * returns MP_OKAY indicating success.
50383  */
sp_1024_mod_16(sp_digit * r,const sp_digit * a,const sp_digit * m)50384 static WC_INLINE int sp_1024_mod_16(sp_digit* r, const sp_digit* a,
50385         const sp_digit* m)
50386 {
50387     ASSERT_SAVED_VECTOR_REGISTERS();
50388     return sp_1024_div_16(a, m, NULL, r);
50389 }
50390 
50391 /* Multiply a number by Montgomery normalizer mod modulus (prime).
50392  *
50393  * r  The resulting Montgomery form number.
50394  * a  The number to convert.
50395  * m  The modulus (prime).
50396  * returns MEMORY_E when memory allocation fails and MP_OKAY otherwise.
50397  */
sp_1024_mod_mul_norm_16(sp_digit * r,const sp_digit * a,const sp_digit * m)50398 static int sp_1024_mod_mul_norm_16(sp_digit* r, const sp_digit* a, const sp_digit* m)
50399 {
50400     sp_1024_mul_16(r, a, p1024_norm_mod);
50401     return sp_1024_mod_16(r, r, m);
50402 }
50403 
50404 #ifdef HAVE_INTEL_AVX2
50405 /* Multiply a number by Montgomery normalizer mod modulus (prime).
50406  *
50407  * r  The resulting Montgomery form number.
50408  * a  The number to convert.
50409  * m  The modulus (prime).
50410  * returns MEMORY_E when memory allocation fails and MP_OKAY otherwise.
50411  */
sp_1024_mod_mul_norm_avx2_16(sp_digit * r,const sp_digit * a,const sp_digit * m)50412 static int sp_1024_mod_mul_norm_avx2_16(sp_digit* r, const sp_digit* a, const sp_digit* m)
50413 {
50414     sp_1024_mul_avx2_16(r, a, p1024_norm_mod);
50415     return sp_1024_mod_16(r, r, m);
50416 }
50417 
50418 #endif /* HAVE_INTEL_AVX2 */
50419 
50420 #ifdef WOLFCRYPT_HAVE_SAKKE
50421 /* Create a new point.
50422  *
50423  * heap  [in]   Buffer to allocate dynamic memory from.
50424  * sp    [in]   Data for point - only if not allocating.
50425  * p     [out]  New point.
50426  * returns MEMORY_E when dynamic memory allocation fails and 0 otherwise.
50427  */
sp_1024_point_new_ex_16(void * heap,sp_point_1024 * sp,sp_point_1024 ** p)50428 static int sp_1024_point_new_ex_16(void* heap, sp_point_1024* sp,
50429     sp_point_1024** p)
50430 {
50431     int ret = MP_OKAY;
50432     (void)heap;
50433 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
50434     (void)sp;
50435     *p = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024), heap, DYNAMIC_TYPE_ECC);
50436 #else
50437     *p = sp;
50438 #endif
50439     if (*p == NULL) {
50440         ret = MEMORY_E;
50441     }
50442     return ret;
50443 }
50444 
50445 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
50446 /* Allocate memory for point and return error. */
50447 #define sp_1024_point_new_16(heap, sp, p) sp_1024_point_new_ex_16((heap), NULL, &(p))
50448 #else
50449 /* Set pointer to data and return no error. */
50450 #define sp_1024_point_new_16(heap, sp, p) sp_1024_point_new_ex_16((heap), &(sp), &(p))
50451 #endif
50452 #endif /* WOLFCRYPT_HAVE_SAKKE */
50453 #ifdef WOLFCRYPT_HAVE_SAKKE
50454 /* Free the point.
50455  *
50456  * p      [in,out]  Point to free.
50457  * clear  [in]      Indicates whether to zeroize point.
50458  * heap   [in]      Buffer from which dynamic memory was allocate from.
50459  */
sp_1024_point_free_16(sp_point_1024 * p,int clear,void * heap)50460 static void sp_1024_point_free_16(sp_point_1024* p, int clear, void* heap)
50461 {
50462 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
50463 /* If valid pointer then clear point data if requested and free data. */
50464     if (p != NULL) {
50465         if (clear != 0) {
50466             XMEMSET(p, 0, sizeof(*p));
50467         }
50468         XFREE(p, heap, DYNAMIC_TYPE_ECC);
50469     }
50470 #else
50471 /* Clear point data if requested. */
50472     if ((p != NULL) && (clear != 0)) {
50473         XMEMSET(p, 0, sizeof(*p));
50474     }
50475 #endif
50476     (void)heap;
50477 }
50478 #endif /* WOLFCRYPT_HAVE_SAKKE */
50479 
50480 /* Convert an mp_int to an array of sp_digit.
50481  *
50482  * r  A single precision integer.
50483  * size  Maximum number of bytes to convert
50484  * a  A multi-precision integer.
50485  */
sp_1024_from_mp(sp_digit * r,int size,const mp_int * a)50486 static void sp_1024_from_mp(sp_digit* r, int size, const mp_int* a)
50487 {
50488 #if DIGIT_BIT == 64
50489     int j;
50490 
50491     XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
50492 
50493     for (j = a->used; j < size; j++) {
50494         r[j] = 0;
50495     }
50496 #elif DIGIT_BIT > 64
50497     int i;
50498     int j = 0;
50499     word32 s = 0;
50500 
50501     r[0] = 0;
50502     for (i = 0; i < a->used && j < size; i++) {
50503         r[j] |= ((sp_digit)a->dp[i] << s);
50504         r[j] &= 0xffffffffffffffffl;
50505         s = 64U - s;
50506         if (j + 1 >= size) {
50507             break;
50508         }
50509         /* lint allow cast of mismatch word32 and mp_digit */
50510         r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
50511         while ((s + 64U) <= (word32)DIGIT_BIT) {
50512             s += 64U;
50513             r[j] &= 0xffffffffffffffffl;
50514             if (j + 1 >= size) {
50515                 break;
50516             }
50517             if (s < (word32)DIGIT_BIT) {
50518                 /* lint allow cast of mismatch word32 and mp_digit */
50519                 r[++j] = (sp_digit)(a->dp[i] >> s); /*lint !e9033*/
50520             }
50521             else {
50522                 r[++j] = (sp_digit)0;
50523             }
50524         }
50525         s = (word32)DIGIT_BIT - s;
50526     }
50527 
50528     for (j++; j < size; j++) {
50529         r[j] = 0;
50530     }
50531 #else
50532     int i;
50533     int j = 0;
50534     int s = 0;
50535 
50536     r[0] = 0;
50537     for (i = 0; i < a->used && j < size; i++) {
50538         r[j] |= ((sp_digit)a->dp[i]) << s;
50539         if (s + DIGIT_BIT >= 64) {
50540             r[j] &= 0xffffffffffffffffl;
50541             if (j + 1 >= size) {
50542                 break;
50543             }
50544             s = 64 - s;
50545             if (s == DIGIT_BIT) {
50546                 r[++j] = 0;
50547                 s = 0;
50548             }
50549             else {
50550                 r[++j] = a->dp[i] >> s;
50551                 s = DIGIT_BIT - s;
50552             }
50553         }
50554         else {
50555             s += DIGIT_BIT;
50556         }
50557     }
50558 
50559     for (j++; j < size; j++) {
50560         r[j] = 0;
50561     }
50562 #endif
50563 }
50564 
50565 /* Convert a point of type ecc_point to type sp_point_1024.
50566  *
50567  * p   Point of type sp_point_1024 (result).
50568  * pm  Point of type ecc_point.
50569  */
sp_1024_point_from_ecc_point_16(sp_point_1024 * p,const ecc_point * pm)50570 static void sp_1024_point_from_ecc_point_16(sp_point_1024* p,
50571         const ecc_point* pm)
50572 {
50573     XMEMSET(p->x, 0, sizeof(p->x));
50574     XMEMSET(p->y, 0, sizeof(p->y));
50575     XMEMSET(p->z, 0, sizeof(p->z));
50576     sp_1024_from_mp(p->x, 16, pm->x);
50577     sp_1024_from_mp(p->y, 16, pm->y);
50578     sp_1024_from_mp(p->z, 16, pm->z);
50579     p->infinity = 0;
50580 }
50581 
50582 /* Convert an array of sp_digit to an mp_int.
50583  *
50584  * a  A single precision integer.
50585  * r  A multi-precision integer.
50586  */
sp_1024_to_mp(const sp_digit * a,mp_int * r)50587 static int sp_1024_to_mp(const sp_digit* a, mp_int* r)
50588 {
50589     int err;
50590 
50591     err = mp_grow(r, (1024 + DIGIT_BIT - 1) / DIGIT_BIT);
50592     if (err == MP_OKAY) { /*lint !e774 case where err is always MP_OKAY*/
50593 #if DIGIT_BIT == 64
50594         XMEMCPY(r->dp, a, sizeof(sp_digit) * 16);
50595         r->used = 16;
50596         mp_clamp(r);
50597 #elif DIGIT_BIT < 64
50598         int i;
50599         int j = 0;
50600         int s = 0;
50601 
50602         r->dp[0] = 0;
50603         for (i = 0; i < 16; i++) {
50604             r->dp[j] |= (mp_digit)(a[i] << s);
50605             r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
50606             s = DIGIT_BIT - s;
50607             r->dp[++j] = (mp_digit)(a[i] >> s);
50608             while (s + DIGIT_BIT <= 64) {
50609                 s += DIGIT_BIT;
50610                 r->dp[j++] &= ((sp_digit)1 << DIGIT_BIT) - 1;
50611                 if (s == SP_WORD_SIZE) {
50612                     r->dp[j] = 0;
50613                 }
50614                 else {
50615                     r->dp[j] = (mp_digit)(a[i] >> s);
50616                 }
50617             }
50618             s = 64 - s;
50619         }
50620         r->used = (1024 + DIGIT_BIT - 1) / DIGIT_BIT;
50621         mp_clamp(r);
50622 #else
50623         int i;
50624         int j = 0;
50625         int s = 0;
50626 
50627         r->dp[0] = 0;
50628         for (i = 0; i < 16; i++) {
50629             r->dp[j] |= ((mp_digit)a[i]) << s;
50630             if (s + 64 >= DIGIT_BIT) {
50631     #if DIGIT_BIT != 32 && DIGIT_BIT != 64
50632                 r->dp[j] &= ((sp_digit)1 << DIGIT_BIT) - 1;
50633     #endif
50634                 s = DIGIT_BIT - s;
50635                 r->dp[++j] = a[i] >> s;
50636                 s = 64 - s;
50637             }
50638             else {
50639                 s += 64;
50640             }
50641         }
50642         r->used = (1024 + DIGIT_BIT - 1) / DIGIT_BIT;
50643         mp_clamp(r);
50644 #endif
50645     }
50646 
50647     return err;
50648 }
50649 
50650 /* Convert a point of type sp_point_1024 to type ecc_point.
50651  *
50652  * p   Point of type sp_point_1024.
50653  * pm  Point of type ecc_point (result).
50654  * returns MEMORY_E when allocation of memory in ecc_point fails otherwise
50655  * MP_OKAY.
50656  */
sp_1024_point_to_ecc_point_16(const sp_point_1024 * p,ecc_point * pm)50657 static int sp_1024_point_to_ecc_point_16(const sp_point_1024* p, ecc_point* pm)
50658 {
50659     int err;
50660 
50661     err = sp_1024_to_mp(p->x, pm->x);
50662     if (err == MP_OKAY) {
50663         err = sp_1024_to_mp(p->y, pm->y);
50664     }
50665     if (err == MP_OKAY) {
50666         err = sp_1024_to_mp(p->z, pm->z);
50667     }
50668 
50669     return err;
50670 }
50671 
50672 extern void sp_1024_cond_copy_16(sp_digit* r, const sp_digit* a, sp_digit m);
50673 extern void sp_1024_mont_reduce_16(sp_digit* a, const sp_digit* m, sp_digit mp);
50674 /* Multiply two Montgomery form numbers mod the modulus (prime).
50675  * (r = a * b mod m)
50676  *
50677  * r   Result of multiplication.
50678  * a   First number to multiply in Montgomery form.
50679  * b   Second number to multiply in Montgomery form.
50680  * m   Modulus (prime).
50681  * mp  Montgomery mulitplier.
50682  */
sp_1024_mont_mul_16(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)50683 static void sp_1024_mont_mul_16(sp_digit* r, const sp_digit* a,
50684         const sp_digit* b, const sp_digit* m, sp_digit mp)
50685 {
50686     sp_1024_mul_16(r, a, b);
50687     sp_1024_mont_reduce_16(r, m, mp);
50688 }
50689 
50690 /* Square the Montgomery form number. (r = a * a mod m)
50691  *
50692  * r   Result of squaring.
50693  * a   Number to square in Montgomery form.
50694  * m   Modulus (prime).
50695  * mp  Montgomery mulitplier.
50696  */
sp_1024_mont_sqr_16(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)50697 static void sp_1024_mont_sqr_16(sp_digit* r, const sp_digit* a,
50698         const sp_digit* m, sp_digit mp)
50699 {
50700     sp_1024_sqr_16(r, a);
50701     sp_1024_mont_reduce_16(r, m, mp);
50702 }
50703 
50704 /* Mod-2 for the P1024 curve. */
50705 static const uint8_t p1024_mod_minus_2[] = {
50706      6,0x06,  7,0x0f,  7,0x0b,  6,0x0c,  7,0x1e,  9,0x09,  7,0x0c,  7,0x1f,
50707      6,0x16,  6,0x06,  7,0x0e,  8,0x10,  6,0x03,  8,0x11,  6,0x0d,  7,0x14,
50708      9,0x12,  6,0x0f,  7,0x04,  9,0x0d,  6,0x00,  7,0x13,  6,0x01,  6,0x07,
50709      8,0x0d,  8,0x00,  6,0x06,  9,0x17,  6,0x14,  6,0x15,  6,0x11,  6,0x0b,
50710      9,0x0c,  6,0x1e, 13,0x14,  7,0x0e,  6,0x1d, 12,0x0a,  6,0x0b,  8,0x07,
50711      6,0x18,  6,0x0f,  6,0x10,  8,0x1c,  7,0x16,  7,0x02,  6,0x01,  6,0x13,
50712     10,0x15,  7,0x06,  8,0x14,  6,0x0c,  6,0x19,  7,0x10,  6,0x19,  6,0x19,
50713      9,0x16,  7,0x19,  6,0x1f,  6,0x17,  6,0x12,  8,0x02,  6,0x01,  6,0x04,
50714      6,0x15,  7,0x16,  6,0x04,  6,0x1f,  6,0x09,  7,0x06,  7,0x13,  7,0x09,
50715      6,0x0d, 10,0x18,  6,0x06,  6,0x11,  6,0x04,  6,0x01,  6,0x13,  8,0x06,
50716      6,0x0d,  8,0x13,  7,0x08,  6,0x08,  6,0x05,  7,0x0c,  7,0x0e,  7,0x15,
50717      6,0x05,  7,0x14, 10,0x19,  6,0x10,  6,0x16,  6,0x15,  7,0x1f,  6,0x14,
50718      6,0x0a, 10,0x11,  6,0x01,  7,0x05,  7,0x08,  8,0x0a,  7,0x1e,  7,0x1c,
50719      6,0x1c,  7,0x09, 10,0x18,  7,0x1c, 10,0x06,  6,0x0a,  6,0x07,  6,0x19,
50720      7,0x06,  6,0x0d,  7,0x0f,  7,0x0b,  7,0x05,  6,0x11,  6,0x1c,  7,0x1f,
50721      6,0x1e,  7,0x18,  6,0x1e,  6,0x00,  6,0x03,  6,0x02,  7,0x10,  6,0x0b,
50722      6,0x1b,  7,0x10,  6,0x00,  8,0x11,  7,0x1b,  6,0x18,  6,0x01,  7,0x0c,
50723      7,0x1d,  7,0x13,  6,0x08,  7,0x1b,  8,0x13,  7,0x16, 13,0x1d,  7,0x1f,
50724      6,0x0a,  6,0x01,  7,0x1f,  6,0x14,  1,0x01
50725 };
50726 
50727 /* Invert the number, in Montgomery form, modulo the modulus (prime) of the
50728  * P1024 curve. (r = 1 / a mod m)
50729  *
50730  * r   Inverse result.
50731  * a   Number to invert.
50732  * td  Temporary data.
50733  */
sp_1024_mont_inv_16(sp_digit * r,const sp_digit * a,sp_digit * td)50734 static void sp_1024_mont_inv_16(sp_digit* r, const sp_digit* a,
50735         sp_digit* td)
50736 {
50737     sp_digit* t = td;
50738     int i;
50739     int j;
50740     sp_digit table[32][2 * 16];
50741 
50742     XMEMCPY(table[0], a, sizeof(sp_digit) * 16);
50743     for (i = 1; i < 6; i++) {
50744         sp_1024_mont_sqr_16(table[0], table[0], p1024_mod, p1024_mp_mod);
50745     }
50746     for (i = 1; i < 32; i++) {
50747         sp_1024_mont_mul_16(table[i], table[i-1], a, p1024_mod, p1024_mp_mod);
50748     }
50749 
50750     XMEMCPY(t, table[p1024_mod_minus_2[1]], sizeof(sp_digit) * 16);
50751     for (i = 2; i < (int)sizeof(p1024_mod_minus_2) - 2; i += 2) {
50752         for (j = 0; j < p1024_mod_minus_2[i]; j++) {
50753             sp_1024_mont_sqr_16(t, t, p1024_mod, p1024_mp_mod);
50754         }
50755         sp_1024_mont_mul_16(t, t, table[p1024_mod_minus_2[i+1]], p1024_mod,
50756             p1024_mp_mod);
50757     }
50758     sp_1024_mont_sqr_16(t, t, p1024_mod, p1024_mp_mod);
50759     sp_1024_mont_mul_16(r, t, a, p1024_mod, p1024_mp_mod);
50760 }
50761 
50762 /* Normalize the values in each word to 64.
50763  *
50764  * a  Array of sp_digit to normalize.
50765  */
50766 #define sp_1024_norm_16(a)
50767 
50768 /* Map the Montgomery form projective coordinate point to an affine point.
50769  *
50770  * r  Resulting affine coordinate point.
50771  * p  Montgomery form projective coordinate point.
50772  * t  Temporary ordinate data.
50773  */
sp_1024_map_16(sp_point_1024 * r,const sp_point_1024 * p,sp_digit * t)50774 static void sp_1024_map_16(sp_point_1024* r, const sp_point_1024* p,
50775     sp_digit* t)
50776 {
50777     sp_digit* t1 = t;
50778     sp_digit* t2 = t + 2*16;
50779     sp_int64 n;
50780 
50781     sp_1024_mont_inv_16(t1, p->z, t + 2*16);
50782 
50783     sp_1024_mont_sqr_16(t2, t1, p1024_mod, p1024_mp_mod);
50784     sp_1024_mont_mul_16(t1, t2, t1, p1024_mod, p1024_mp_mod);
50785 
50786     /* x /= z^2 */
50787     sp_1024_mont_mul_16(r->x, p->x, t2, p1024_mod, p1024_mp_mod);
50788     XMEMSET(r->x + 16, 0, sizeof(r->x) / 2U);
50789     sp_1024_mont_reduce_16(r->x, p1024_mod, p1024_mp_mod);
50790     /* Reduce x to less than modulus */
50791     n = sp_1024_cmp_16(r->x, p1024_mod);
50792     sp_1024_cond_sub_16(r->x, r->x, p1024_mod, 0 - ((n >= 0) ?
50793                 (sp_digit)1 : (sp_digit)0));
50794     sp_1024_norm_16(r->x);
50795 
50796     /* y /= z^3 */
50797     sp_1024_mont_mul_16(r->y, p->y, t1, p1024_mod, p1024_mp_mod);
50798     XMEMSET(r->y + 16, 0, sizeof(r->y) / 2U);
50799     sp_1024_mont_reduce_16(r->y, p1024_mod, p1024_mp_mod);
50800     /* Reduce y to less than modulus */
50801     n = sp_1024_cmp_16(r->y, p1024_mod);
50802     sp_1024_cond_sub_16(r->y, r->y, p1024_mod, 0 - ((n >= 0) ?
50803                 (sp_digit)1 : (sp_digit)0));
50804     sp_1024_norm_16(r->y);
50805 
50806     XMEMSET(r->z, 0, sizeof(r->z));
50807     r->z[0] = 1;
50808 
50809 }
50810 
50811 extern void sp_1024_mont_add_16(sp_digit* r, const sp_digit* a, const sp_digit* b, const sp_digit* m);
50812 extern void sp_1024_mont_dbl_16(sp_digit* r, const sp_digit* a, const sp_digit* m);
50813 extern void sp_1024_mont_tpl_16(sp_digit* r, const sp_digit* a, const sp_digit* m);
50814 extern void sp_1024_mont_sub_16(sp_digit* r, const sp_digit* a, const sp_digit* b, const sp_digit* m);
50815 extern void sp_1024_div2_16(sp_digit* r, const sp_digit* a, const sp_digit* m);
50816 /* Double the Montgomery form projective point p.
50817  *
50818  * r  Result of doubling point.
50819  * p  Point to double.
50820  * t  Temporary ordinate data.
50821  */
50822 #ifdef WOLFSSL_SP_NONBLOCK
50823 typedef struct sp_1024_proj_point_dbl_16_ctx {
50824     int state;
50825     sp_digit* t1;
50826     sp_digit* t2;
50827     sp_digit* x;
50828     sp_digit* y;
50829     sp_digit* z;
50830 } sp_1024_proj_point_dbl_16_ctx;
50831 
sp_1024_proj_point_dbl_16_nb(sp_ecc_ctx_t * sp_ctx,sp_point_1024 * r,const sp_point_1024 * p,sp_digit * t)50832 static int sp_1024_proj_point_dbl_16_nb(sp_ecc_ctx_t* sp_ctx, sp_point_1024* r, const sp_point_1024* p, sp_digit* t)
50833 {
50834     int err = FP_WOULDBLOCK;
50835     sp_1024_proj_point_dbl_16_ctx* ctx = (sp_1024_proj_point_dbl_16_ctx*)sp_ctx->data;
50836 
50837     typedef char ctx_size_test[sizeof(sp_1024_proj_point_dbl_16_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
50838     (void)sizeof(ctx_size_test);
50839 
50840     switch (ctx->state) {
50841     case 0:
50842         ctx->t1 = t;
50843         ctx->t2 = t + 2*16;
50844         ctx->x = r->x;
50845         ctx->y = r->y;
50846         ctx->z = r->z;
50847 
50848         /* Put infinity into result. */
50849         if (r != p) {
50850             r->infinity = p->infinity;
50851         }
50852         ctx->state = 1;
50853         break;
50854     case 1:
50855         /* T1 = Z * Z */
50856         sp_1024_mont_sqr_16(ctx->t1, p->z, p1024_mod, p1024_mp_mod);
50857         ctx->state = 2;
50858         break;
50859     case 2:
50860         /* Z = Y * Z */
50861         sp_1024_mont_mul_16(ctx->z, p->y, p->z, p1024_mod, p1024_mp_mod);
50862         ctx->state = 3;
50863         break;
50864     case 3:
50865         /* Z = 2Z */
50866         sp_1024_mont_dbl_16(ctx->z, ctx->z, p1024_mod);
50867         ctx->state = 4;
50868         break;
50869     case 4:
50870         /* T2 = X - T1 */
50871         sp_1024_mont_sub_16(ctx->t2, p->x, ctx->t1, p1024_mod);
50872         ctx->state = 5;
50873         break;
50874     case 5:
50875         /* T1 = X + T1 */
50876         sp_1024_mont_add_16(ctx->t1, p->x, ctx->t1, p1024_mod);
50877         ctx->state = 6;
50878         break;
50879     case 6:
50880         /* T2 = T1 * T2 */
50881         sp_1024_mont_mul_16(ctx->t2, ctx->t1, ctx->t2, p1024_mod, p1024_mp_mod);
50882         ctx->state = 7;
50883         break;
50884     case 7:
50885         /* T1 = 3T2 */
50886         sp_1024_mont_tpl_16(ctx->t1, ctx->t2, p1024_mod);
50887         ctx->state = 8;
50888         break;
50889     case 8:
50890         /* Y = 2Y */
50891         sp_1024_mont_dbl_16(ctx->y, p->y, p1024_mod);
50892         ctx->state = 9;
50893         break;
50894     case 9:
50895         /* Y = Y * Y */
50896         sp_1024_mont_sqr_16(ctx->y, ctx->y, p1024_mod, p1024_mp_mod);
50897         ctx->state = 10;
50898         break;
50899     case 10:
50900         /* T2 = Y * Y */
50901         sp_1024_mont_sqr_16(ctx->t2, ctx->y, p1024_mod, p1024_mp_mod);
50902         ctx->state = 11;
50903         break;
50904     case 11:
50905         /* T2 = T2/2 */
50906         sp_1024_div2_16(ctx->t2, ctx->t2, p1024_mod);
50907         ctx->state = 12;
50908         break;
50909     case 12:
50910         /* Y = Y * X */
50911         sp_1024_mont_mul_16(ctx->y, ctx->y, p->x, p1024_mod, p1024_mp_mod);
50912         ctx->state = 13;
50913         break;
50914     case 13:
50915         /* X = T1 * T1 */
50916         sp_1024_mont_sqr_16(ctx->x, ctx->t1, p1024_mod, p1024_mp_mod);
50917         ctx->state = 14;
50918         break;
50919     case 14:
50920         /* X = X - Y */
50921         sp_1024_mont_sub_16(ctx->x, ctx->x, ctx->y, p1024_mod);
50922         ctx->state = 15;
50923         break;
50924     case 15:
50925         /* X = X - Y */
50926         sp_1024_mont_sub_16(ctx->x, ctx->x, ctx->y, p1024_mod);
50927         ctx->state = 16;
50928         break;
50929     case 16:
50930         /* Y = Y - X */
50931         sp_1024_mont_sub_16(ctx->y, ctx->y, ctx->x, p1024_mod);
50932         ctx->state = 17;
50933         break;
50934     case 17:
50935         /* Y = Y * T1 */
50936         sp_1024_mont_mul_16(ctx->y, ctx->y, ctx->t1, p1024_mod, p1024_mp_mod);
50937         ctx->state = 18;
50938         break;
50939     case 18:
50940         /* Y = Y - T2 */
50941         sp_1024_mont_sub_16(ctx->y, ctx->y, ctx->t2, p1024_mod);
50942         ctx->state = 19;
50943         /* fall-through */
50944     case 19:
50945         err = MP_OKAY;
50946         break;
50947     }
50948 
50949     if (err == MP_OKAY && ctx->state != 19) {
50950         err = FP_WOULDBLOCK;
50951     }
50952 
50953     return err;
50954 }
50955 #endif /* WOLFSSL_SP_NONBLOCK */
50956 
sp_1024_proj_point_dbl_16(sp_point_1024 * r,const sp_point_1024 * p,sp_digit * t)50957 static void sp_1024_proj_point_dbl_16(sp_point_1024* r, const sp_point_1024* p, sp_digit* t)
50958 {
50959     sp_digit* t1 = t;
50960     sp_digit* t2 = t + 2*16;
50961     sp_digit* x;
50962     sp_digit* y;
50963     sp_digit* z;
50964 
50965     x = r->x;
50966     y = r->y;
50967     z = r->z;
50968     /* Put infinity into result. */
50969     if (r != p) {
50970         r->infinity = p->infinity;
50971     }
50972 
50973     /* T1 = Z * Z */
50974     sp_1024_mont_sqr_16(t1, p->z, p1024_mod, p1024_mp_mod);
50975     /* Z = Y * Z */
50976     sp_1024_mont_mul_16(z, p->y, p->z, p1024_mod, p1024_mp_mod);
50977     /* Z = 2Z */
50978     sp_1024_mont_dbl_16(z, z, p1024_mod);
50979     /* T2 = X - T1 */
50980     sp_1024_mont_sub_16(t2, p->x, t1, p1024_mod);
50981     /* T1 = X + T1 */
50982     sp_1024_mont_add_16(t1, p->x, t1, p1024_mod);
50983     /* T2 = T1 * T2 */
50984     sp_1024_mont_mul_16(t2, t1, t2, p1024_mod, p1024_mp_mod);
50985     /* T1 = 3T2 */
50986     sp_1024_mont_tpl_16(t1, t2, p1024_mod);
50987     /* Y = 2Y */
50988     sp_1024_mont_dbl_16(y, p->y, p1024_mod);
50989     /* Y = Y * Y */
50990     sp_1024_mont_sqr_16(y, y, p1024_mod, p1024_mp_mod);
50991     /* T2 = Y * Y */
50992     sp_1024_mont_sqr_16(t2, y, p1024_mod, p1024_mp_mod);
50993     /* T2 = T2/2 */
50994     sp_1024_div2_16(t2, t2, p1024_mod);
50995     /* Y = Y * X */
50996     sp_1024_mont_mul_16(y, y, p->x, p1024_mod, p1024_mp_mod);
50997     /* X = T1 * T1 */
50998     sp_1024_mont_sqr_16(x, t1, p1024_mod, p1024_mp_mod);
50999     /* X = X - Y */
51000     sp_1024_mont_sub_16(x, x, y, p1024_mod);
51001     /* X = X - Y */
51002     sp_1024_mont_sub_16(x, x, y, p1024_mod);
51003     /* Y = Y - X */
51004     sp_1024_mont_sub_16(y, y, x, p1024_mod);
51005     /* Y = Y * T1 */
51006     sp_1024_mont_mul_16(y, y, t1, p1024_mod, p1024_mp_mod);
51007     /* Y = Y - T2 */
51008     sp_1024_mont_sub_16(y, y, t2, p1024_mod);
51009 }
51010 
51011 /* Double the Montgomery form projective point p a number of times.
51012  *
51013  * r  Result of repeated doubling of point.
51014  * p  Point to double.
51015  * n  Number of times to double
51016  * t  Temporary ordinate data.
51017  */
sp_1024_proj_point_dbl_n_16(sp_point_1024 * p,int n,sp_digit * t)51018 static void sp_1024_proj_point_dbl_n_16(sp_point_1024* p, int n,
51019     sp_digit* t)
51020 {
51021     sp_digit* w = t;
51022     sp_digit* a = t + 2*16;
51023     sp_digit* b = t + 4*16;
51024     sp_digit* t1 = t + 6*16;
51025     sp_digit* t2 = t + 8*16;
51026     sp_digit* x;
51027     sp_digit* y;
51028     sp_digit* z;
51029 
51030     x = p->x;
51031     y = p->y;
51032     z = p->z;
51033 
51034     /* Y = 2*Y */
51035     sp_1024_mont_dbl_16(y, y, p1024_mod);
51036     /* W = Z^4 */
51037     sp_1024_mont_sqr_16(w, z, p1024_mod, p1024_mp_mod);
51038     sp_1024_mont_sqr_16(w, w, p1024_mod, p1024_mp_mod);
51039 
51040 #ifndef WOLFSSL_SP_SMALL
51041     while (--n > 0)
51042 #else
51043     while (--n >= 0)
51044 #endif
51045     {
51046         /* A = 3*(X^2 - W) */
51047         sp_1024_mont_sqr_16(t1, x, p1024_mod, p1024_mp_mod);
51048         sp_1024_mont_sub_16(t1, t1, w, p1024_mod);
51049         sp_1024_mont_tpl_16(a, t1, p1024_mod);
51050         /* B = X*Y^2 */
51051         sp_1024_mont_sqr_16(t1, y, p1024_mod, p1024_mp_mod);
51052         sp_1024_mont_mul_16(b, t1, x, p1024_mod, p1024_mp_mod);
51053         /* X = A^2 - 2B */
51054         sp_1024_mont_sqr_16(x, a, p1024_mod, p1024_mp_mod);
51055         sp_1024_mont_dbl_16(t2, b, p1024_mod);
51056         sp_1024_mont_sub_16(x, x, t2, p1024_mod);
51057         /* Z = Z*Y */
51058         sp_1024_mont_mul_16(z, z, y, p1024_mod, p1024_mp_mod);
51059         /* t2 = Y^4 */
51060         sp_1024_mont_sqr_16(t1, t1, p1024_mod, p1024_mp_mod);
51061 #ifdef WOLFSSL_SP_SMALL
51062         if (n != 0)
51063 #endif
51064         {
51065             /* W = W*Y^4 */
51066             sp_1024_mont_mul_16(w, w, t1, p1024_mod, p1024_mp_mod);
51067         }
51068         /* y = 2*A*(B - X) - Y^4 */
51069         sp_1024_mont_sub_16(y, b, x, p1024_mod);
51070         sp_1024_mont_mul_16(y, y, a, p1024_mod, p1024_mp_mod);
51071         sp_1024_mont_dbl_16(y, y, p1024_mod);
51072         sp_1024_mont_sub_16(y, y, t1, p1024_mod);
51073     }
51074 #ifndef WOLFSSL_SP_SMALL
51075     /* A = 3*(X^2 - W) */
51076     sp_1024_mont_sqr_16(t1, x, p1024_mod, p1024_mp_mod);
51077     sp_1024_mont_sub_16(t1, t1, w, p1024_mod);
51078     sp_1024_mont_tpl_16(a, t1, p1024_mod);
51079     /* B = X*Y^2 */
51080     sp_1024_mont_sqr_16(t1, y, p1024_mod, p1024_mp_mod);
51081     sp_1024_mont_mul_16(b, t1, x, p1024_mod, p1024_mp_mod);
51082     /* X = A^2 - 2B */
51083     sp_1024_mont_sqr_16(x, a, p1024_mod, p1024_mp_mod);
51084     sp_1024_mont_dbl_16(t2, b, p1024_mod);
51085     sp_1024_mont_sub_16(x, x, t2, p1024_mod);
51086     /* Z = Z*Y */
51087     sp_1024_mont_mul_16(z, z, y, p1024_mod, p1024_mp_mod);
51088     /* t2 = Y^4 */
51089     sp_1024_mont_sqr_16(t1, t1, p1024_mod, p1024_mp_mod);
51090     /* y = 2*A*(B - X) - Y^4 */
51091     sp_1024_mont_sub_16(y, b, x, p1024_mod);
51092     sp_1024_mont_mul_16(y, y, a, p1024_mod, p1024_mp_mod);
51093     sp_1024_mont_dbl_16(y, y, p1024_mod);
51094     sp_1024_mont_sub_16(y, y, t1, p1024_mod);
51095 #endif
51096     /* Y = Y/2 */
51097     sp_1024_div2_16(y, y, p1024_mod);
51098 }
51099 
51100 extern sp_digit sp_1024_sub_16(sp_digit* r, const sp_digit* a, const sp_digit* b);
51101 /* Compare two numbers to determine if they are equal.
51102  * Constant time implementation.
51103  *
51104  * a  First number to compare.
51105  * b  Second number to compare.
51106  * returns 1 when equal and 0 otherwise.
51107  */
sp_1024_cmp_equal_16(const sp_digit * a,const sp_digit * b)51108 static int sp_1024_cmp_equal_16(const sp_digit* a, const sp_digit* b)
51109 {
51110     return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2]) |
51111             (a[3] ^ b[3]) | (a[4] ^ b[4]) | (a[5] ^ b[5]) |
51112             (a[6] ^ b[6]) | (a[7] ^ b[7]) | (a[8] ^ b[8]) |
51113             (a[9] ^ b[9]) | (a[10] ^ b[10]) | (a[11] ^ b[11]) |
51114             (a[12] ^ b[12]) | (a[13] ^ b[13]) | (a[14] ^ b[14]) |
51115             (a[15] ^ b[15])) == 0;
51116 }
51117 
51118 /* Add two Montgomery form projective points.
51119  *
51120  * r  Result of addition.
51121  * p  First point to add.
51122  * q  Second point to add.
51123  * t  Temporary ordinate data.
51124  */
51125 
51126 #ifdef WOLFSSL_SP_NONBLOCK
51127 typedef struct sp_1024_proj_point_add_16_ctx {
51128     int state;
51129     sp_1024_proj_point_dbl_16_ctx dbl_ctx;
51130     const sp_point_1024* ap[2];
51131     sp_point_1024* rp[2];
51132     sp_digit* t1;
51133     sp_digit* t2;
51134     sp_digit* t3;
51135     sp_digit* t4;
51136     sp_digit* t5;
51137     sp_digit* x;
51138     sp_digit* y;
51139     sp_digit* z;
51140 } sp_1024_proj_point_add_16_ctx;
51141 
sp_1024_proj_point_add_16_nb(sp_ecc_ctx_t * sp_ctx,sp_point_1024 * r,const sp_point_1024 * p,const sp_point_1024 * q,sp_digit * t)51142 static int sp_1024_proj_point_add_16_nb(sp_ecc_ctx_t* sp_ctx, sp_point_1024* r,
51143     const sp_point_1024* p, const sp_point_1024* q, sp_digit* t)
51144 {
51145     int err = FP_WOULDBLOCK;
51146     sp_1024_proj_point_add_16_ctx* ctx = (sp_1024_proj_point_add_16_ctx*)sp_ctx->data;
51147 
51148     /* Ensure only the first point is the same as the result. */
51149     if (q == r) {
51150         const sp_point_1024* a = p;
51151         p = q;
51152         q = a;
51153     }
51154 
51155     typedef char ctx_size_test[sizeof(sp_1024_proj_point_add_16_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
51156     (void)sizeof(ctx_size_test);
51157 
51158     switch (ctx->state) {
51159     case 0: /* INIT */
51160         ctx->t1 = t;
51161         ctx->t2 = t + 2*16;
51162         ctx->t3 = t + 4*16;
51163         ctx->t4 = t + 6*16;
51164         ctx->t5 = t + 8*16;
51165 
51166         ctx->state = 1;
51167         break;
51168     case 1:
51169         /* Check double */
51170         (void)sp_1024_sub_16(ctx->t1, p1024_mod, q->y);
51171         sp_1024_norm_16(ctx->t1);
51172         if ((sp_1024_cmp_equal_16(p->x, q->x) & sp_1024_cmp_equal_16(p->z, q->z) &
51173             (sp_1024_cmp_equal_16(p->y, q->y) | sp_1024_cmp_equal_16(p->y, ctx->t1))) != 0)
51174         {
51175             XMEMSET(&ctx->dbl_ctx, 0, sizeof(ctx->dbl_ctx));
51176             ctx->state = 2;
51177         }
51178         else {
51179             ctx->state = 3;
51180         }
51181         break;
51182     case 2:
51183         err = sp_1024_proj_point_dbl_16_nb((sp_ecc_ctx_t*)&ctx->dbl_ctx, r, p, t);
51184         if (err == MP_OKAY)
51185             ctx->state = 27; /* done */
51186         break;
51187     case 3:
51188     {
51189         int i;
51190         ctx->rp[0] = r;
51191 
51192         /*lint allow cast to different type of pointer*/
51193         ctx->rp[1] = (sp_point_1024*)t; /*lint !e9087 !e740*/
51194         XMEMSET(ctx->rp[1], 0, sizeof(sp_point_1024));
51195         ctx->x = ctx->rp[p->infinity | q->infinity]->x;
51196         ctx->y = ctx->rp[p->infinity | q->infinity]->y;
51197         ctx->z = ctx->rp[p->infinity | q->infinity]->z;
51198 
51199         ctx->ap[0] = p;
51200         ctx->ap[1] = q;
51201         for (i=0; i<16; i++) {
51202             r->x[i] = ctx->ap[p->infinity]->x[i];
51203         }
51204         for (i=0; i<16; i++) {
51205             r->y[i] = ctx->ap[p->infinity]->y[i];
51206         }
51207         for (i=0; i<16; i++) {
51208             r->z[i] = ctx->ap[p->infinity]->z[i];
51209         }
51210         r->infinity = ctx->ap[p->infinity]->infinity;
51211 
51212         ctx->state = 4;
51213         break;
51214     }
51215     case 4:
51216         /* U1 = X1*Z2^2 */
51217         sp_1024_mont_sqr_16(ctx->t1, q->z, p1024_mod, p1024_mp_mod);
51218         ctx->state = 5;
51219         break;
51220     case 5:
51221         sp_1024_mont_mul_16(ctx->t3, ctx->t1, q->z, p1024_mod, p1024_mp_mod);
51222         ctx->state = 6;
51223         break;
51224     case 6:
51225         sp_1024_mont_mul_16(ctx->t1, ctx->t1, ctx->x, p1024_mod, p1024_mp_mod);
51226         ctx->state = 7;
51227         break;
51228     case 7:
51229         /* U2 = X2*Z1^2 */
51230         sp_1024_mont_sqr_16(ctx->t2, ctx->z, p1024_mod, p1024_mp_mod);
51231         ctx->state = 8;
51232         break;
51233     case 8:
51234         sp_1024_mont_mul_16(ctx->t4, ctx->t2, ctx->z, p1024_mod, p1024_mp_mod);
51235         ctx->state = 9;
51236         break;
51237     case 9:
51238         sp_1024_mont_mul_16(ctx->t2, ctx->t2, q->x, p1024_mod, p1024_mp_mod);
51239         ctx->state = 10;
51240         break;
51241     case 10:
51242         /* S1 = Y1*Z2^3 */
51243         sp_1024_mont_mul_16(ctx->t3, ctx->t3, ctx->y, p1024_mod, p1024_mp_mod);
51244         ctx->state = 11;
51245         break;
51246     case 11:
51247         /* S2 = Y2*Z1^3 */
51248         sp_1024_mont_mul_16(ctx->t4, ctx->t4, q->y, p1024_mod, p1024_mp_mod);
51249         ctx->state = 12;
51250         break;
51251     case 12:
51252         /* H = U2 - U1 */
51253         sp_1024_mont_sub_16(ctx->t2, ctx->t2, ctx->t1, p1024_mod);
51254         ctx->state = 13;
51255         break;
51256     case 13:
51257         /* R = S2 - S1 */
51258         sp_1024_mont_sub_16(ctx->t4, ctx->t4, ctx->t3, p1024_mod);
51259         ctx->state = 14;
51260         break;
51261     case 14:
51262         /* Z3 = H*Z1*Z2 */
51263         sp_1024_mont_mul_16(ctx->z, ctx->z, q->z, p1024_mod, p1024_mp_mod);
51264         ctx->state = 15;
51265         break;
51266     case 15:
51267         sp_1024_mont_mul_16(ctx->z, ctx->z, ctx->t2, p1024_mod, p1024_mp_mod);
51268         ctx->state = 16;
51269         break;
51270     case 16:
51271         /* X3 = R^2 - H^3 - 2*U1*H^2 */
51272         sp_1024_mont_sqr_16(ctx->x, ctx->t4, p1024_mod, p1024_mp_mod);
51273         ctx->state = 17;
51274         break;
51275     case 17:
51276         sp_1024_mont_sqr_16(ctx->t5, ctx->t2, p1024_mod, p1024_mp_mod);
51277         ctx->state = 18;
51278         break;
51279     case 18:
51280         sp_1024_mont_mul_16(ctx->y, ctx->t1, ctx->t5, p1024_mod, p1024_mp_mod);
51281         ctx->state = 19;
51282         break;
51283     case 19:
51284         sp_1024_mont_mul_16(ctx->t5, ctx->t5, ctx->t2, p1024_mod, p1024_mp_mod);
51285         ctx->state = 20;
51286         break;
51287     case 20:
51288         sp_1024_mont_sub_16(ctx->x, ctx->x, ctx->t5, p1024_mod);
51289         ctx->state = 21;
51290         break;
51291     case 21:
51292         sp_1024_mont_dbl_16(ctx->t1, ctx->y, p1024_mod);
51293         ctx->state = 22;
51294         break;
51295     case 22:
51296         sp_1024_mont_sub_16(ctx->x, ctx->x, ctx->t1, p1024_mod);
51297         ctx->state = 23;
51298         break;
51299     case 23:
51300         /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
51301         sp_1024_mont_sub_16(ctx->y, ctx->y, ctx->x, p1024_mod);
51302         ctx->state = 24;
51303         break;
51304     case 24:
51305         sp_1024_mont_mul_16(ctx->y, ctx->y, ctx->t4, p1024_mod, p1024_mp_mod);
51306         ctx->state = 25;
51307         break;
51308     case 25:
51309         sp_1024_mont_mul_16(ctx->t5, ctx->t5, ctx->t3, p1024_mod, p1024_mp_mod);
51310         ctx->state = 26;
51311         break;
51312     case 26:
51313         sp_1024_mont_sub_16(ctx->y, ctx->y, ctx->t5, p1024_mod);
51314         ctx->state = 27;
51315         /* fall-through */
51316     case 27:
51317         err = MP_OKAY;
51318         break;
51319     }
51320 
51321     if (err == MP_OKAY && ctx->state != 27) {
51322         err = FP_WOULDBLOCK;
51323     }
51324     return err;
51325 }
51326 #endif /* WOLFSSL_SP_NONBLOCK */
51327 
sp_1024_proj_point_add_16(sp_point_1024 * r,const sp_point_1024 * p,const sp_point_1024 * q,sp_digit * t)51328 static void sp_1024_proj_point_add_16(sp_point_1024* r,
51329         const sp_point_1024* p, const sp_point_1024* q, sp_digit* t)
51330 {
51331     const sp_point_1024* ap[2];
51332     sp_point_1024* rp[2];
51333     sp_digit* t1 = t;
51334     sp_digit* t2 = t + 2*16;
51335     sp_digit* t3 = t + 4*16;
51336     sp_digit* t4 = t + 6*16;
51337     sp_digit* t5 = t + 8*16;
51338     sp_digit* x;
51339     sp_digit* y;
51340     sp_digit* z;
51341     int i;
51342 
51343     /* Ensure only the first point is the same as the result. */
51344     if (q == r) {
51345         const sp_point_1024* a = p;
51346         p = q;
51347         q = a;
51348     }
51349 
51350     /* Check double */
51351     (void)sp_1024_mont_sub_16(t1, p1024_mod, q->y, p1024_mod);
51352     sp_1024_norm_16(t1);
51353     if ((sp_1024_cmp_equal_16(p->x, q->x) & sp_1024_cmp_equal_16(p->z, q->z) &
51354         (sp_1024_cmp_equal_16(p->y, q->y) | sp_1024_cmp_equal_16(p->y, t1))) != 0) {
51355         sp_1024_proj_point_dbl_16(r, p, t);
51356     }
51357     else {
51358         rp[0] = r;
51359 
51360         /*lint allow cast to different type of pointer*/
51361         rp[1] = (sp_point_1024*)t; /*lint !e9087 !e740*/
51362         XMEMSET(rp[1], 0, sizeof(sp_point_1024));
51363         x = rp[p->infinity | q->infinity]->x;
51364         y = rp[p->infinity | q->infinity]->y;
51365         z = rp[p->infinity | q->infinity]->z;
51366 
51367         ap[0] = p;
51368         ap[1] = q;
51369         for (i=0; i<16; i++) {
51370             r->x[i] = ap[p->infinity]->x[i];
51371         }
51372         for (i=0; i<16; i++) {
51373             r->y[i] = ap[p->infinity]->y[i];
51374         }
51375         for (i=0; i<16; i++) {
51376             r->z[i] = ap[p->infinity]->z[i];
51377         }
51378         r->infinity = ap[p->infinity]->infinity;
51379 
51380         /* U1 = X1*Z2^2 */
51381         sp_1024_mont_sqr_16(t1, q->z, p1024_mod, p1024_mp_mod);
51382         sp_1024_mont_mul_16(t3, t1, q->z, p1024_mod, p1024_mp_mod);
51383         sp_1024_mont_mul_16(t1, t1, x, p1024_mod, p1024_mp_mod);
51384         /* U2 = X2*Z1^2 */
51385         sp_1024_mont_sqr_16(t2, z, p1024_mod, p1024_mp_mod);
51386         sp_1024_mont_mul_16(t4, t2, z, p1024_mod, p1024_mp_mod);
51387         sp_1024_mont_mul_16(t2, t2, q->x, p1024_mod, p1024_mp_mod);
51388         /* S1 = Y1*Z2^3 */
51389         sp_1024_mont_mul_16(t3, t3, y, p1024_mod, p1024_mp_mod);
51390         /* S2 = Y2*Z1^3 */
51391         sp_1024_mont_mul_16(t4, t4, q->y, p1024_mod, p1024_mp_mod);
51392         /* H = U2 - U1 */
51393         sp_1024_mont_sub_16(t2, t2, t1, p1024_mod);
51394         /* R = S2 - S1 */
51395         sp_1024_mont_sub_16(t4, t4, t3, p1024_mod);
51396         /* Z3 = H*Z1*Z2 */
51397         sp_1024_mont_mul_16(z, z, q->z, p1024_mod, p1024_mp_mod);
51398         sp_1024_mont_mul_16(z, z, t2, p1024_mod, p1024_mp_mod);
51399         /* X3 = R^2 - H^3 - 2*U1*H^2 */
51400         sp_1024_mont_sqr_16(x, t4, p1024_mod, p1024_mp_mod);
51401         sp_1024_mont_sqr_16(t5, t2, p1024_mod, p1024_mp_mod);
51402         sp_1024_mont_mul_16(y, t1, t5, p1024_mod, p1024_mp_mod);
51403         sp_1024_mont_mul_16(t5, t5, t2, p1024_mod, p1024_mp_mod);
51404         sp_1024_mont_sub_16(x, x, t5, p1024_mod);
51405         sp_1024_mont_dbl_16(t1, y, p1024_mod);
51406         sp_1024_mont_sub_16(x, x, t1, p1024_mod);
51407         /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
51408         sp_1024_mont_sub_16(y, y, x, p1024_mod);
51409         sp_1024_mont_mul_16(y, y, t4, p1024_mod, p1024_mp_mod);
51410         sp_1024_mont_mul_16(t5, t5, t3, p1024_mod, p1024_mp_mod);
51411         sp_1024_mont_sub_16(y, y, t5, p1024_mod);
51412     }
51413 }
51414 
51415 /* Double the Montgomery form projective point p a number of times.
51416  *
51417  * r  Result of repeated doubling of point.
51418  * p  Point to double.
51419  * n  Number of times to double
51420  * t  Temporary ordinate data.
51421  */
sp_1024_proj_point_dbl_n_store_16(sp_point_1024 * r,const sp_point_1024 * p,int n,int m,sp_digit * t)51422 static void sp_1024_proj_point_dbl_n_store_16(sp_point_1024* r,
51423         const sp_point_1024* p, int n, int m, sp_digit* t)
51424 {
51425     sp_digit* w = t;
51426     sp_digit* a = t + 2*16;
51427     sp_digit* b = t + 4*16;
51428     sp_digit* t1 = t + 6*16;
51429     sp_digit* t2 = t + 8*16;
51430     sp_digit* x = r[2*m].x;
51431     sp_digit* y = r[(1<<n)*m].y;
51432     sp_digit* z = r[2*m].z;
51433     int i;
51434     int j;
51435 
51436     for (i=0; i<16; i++) {
51437         x[i] = p->x[i];
51438     }
51439     for (i=0; i<16; i++) {
51440         y[i] = p->y[i];
51441     }
51442     for (i=0; i<16; i++) {
51443         z[i] = p->z[i];
51444     }
51445 
51446     /* Y = 2*Y */
51447     sp_1024_mont_dbl_16(y, y, p1024_mod);
51448     /* W = Z^4 */
51449     sp_1024_mont_sqr_16(w, z, p1024_mod, p1024_mp_mod);
51450     sp_1024_mont_sqr_16(w, w, p1024_mod, p1024_mp_mod);
51451     j = m;
51452     for (i=1; i<=n; i++) {
51453         j *= 2;
51454 
51455         /* A = 3*(X^2 - W) */
51456         sp_1024_mont_sqr_16(t1, x, p1024_mod, p1024_mp_mod);
51457         sp_1024_mont_sub_16(t1, t1, w, p1024_mod);
51458         sp_1024_mont_tpl_16(a, t1, p1024_mod);
51459         /* B = X*Y^2 */
51460         sp_1024_mont_sqr_16(t2, y, p1024_mod, p1024_mp_mod);
51461         sp_1024_mont_mul_16(b, t2, x, p1024_mod, p1024_mp_mod);
51462         x = r[j].x;
51463         /* X = A^2 - 2B */
51464         sp_1024_mont_sqr_16(x, a, p1024_mod, p1024_mp_mod);
51465         sp_1024_mont_dbl_16(t1, b, p1024_mod);
51466         sp_1024_mont_sub_16(x, x, t1, p1024_mod);
51467         /* Z = Z*Y */
51468         sp_1024_mont_mul_16(r[j].z, z, y, p1024_mod, p1024_mp_mod);
51469         z = r[j].z;
51470         /* t2 = Y^4 */
51471         sp_1024_mont_sqr_16(t2, t2, p1024_mod, p1024_mp_mod);
51472         if (i != n) {
51473             /* W = W*Y^4 */
51474             sp_1024_mont_mul_16(w, w, t2, p1024_mod, p1024_mp_mod);
51475         }
51476         /* y = 2*A*(B - X) - Y^4 */
51477         sp_1024_mont_sub_16(y, b, x, p1024_mod);
51478         sp_1024_mont_mul_16(y, y, a, p1024_mod, p1024_mp_mod);
51479         sp_1024_mont_dbl_16(y, y, p1024_mod);
51480         sp_1024_mont_sub_16(y, y, t2, p1024_mod);
51481 
51482         /* Y = Y/2 */
51483         sp_1024_div2_16(r[j].y, y, p1024_mod);
51484         r[j].infinity = 0;
51485     }
51486 }
51487 
51488 /* Add two Montgomery form projective points.
51489  *
51490  * ra  Result of addition.
51491  * rs  Result of subtraction.
51492  * p   First point to add.
51493  * q   Second point to add.
51494  * t   Temporary ordinate data.
51495  */
sp_1024_proj_point_add_sub_16(sp_point_1024 * ra,sp_point_1024 * rs,const sp_point_1024 * p,const sp_point_1024 * q,sp_digit * t)51496 static void sp_1024_proj_point_add_sub_16(sp_point_1024* ra,
51497         sp_point_1024* rs, const sp_point_1024* p, const sp_point_1024* q,
51498         sp_digit* t)
51499 {
51500     sp_digit* t1 = t;
51501     sp_digit* t2 = t + 2*16;
51502     sp_digit* t3 = t + 4*16;
51503     sp_digit* t4 = t + 6*16;
51504     sp_digit* t5 = t + 8*16;
51505     sp_digit* t6 = t + 10*16;
51506     sp_digit* x = ra->x;
51507     sp_digit* y = ra->y;
51508     sp_digit* z = ra->z;
51509     sp_digit* xs = rs->x;
51510     sp_digit* ys = rs->y;
51511     sp_digit* zs = rs->z;
51512 
51513 
51514     XMEMCPY(x, p->x, sizeof(p->x) / 2);
51515     XMEMCPY(y, p->y, sizeof(p->y) / 2);
51516     XMEMCPY(z, p->z, sizeof(p->z) / 2);
51517     ra->infinity = 0;
51518     rs->infinity = 0;
51519 
51520     /* U1 = X1*Z2^2 */
51521     sp_1024_mont_sqr_16(t1, q->z, p1024_mod, p1024_mp_mod);
51522     sp_1024_mont_mul_16(t3, t1, q->z, p1024_mod, p1024_mp_mod);
51523     sp_1024_mont_mul_16(t1, t1, x, p1024_mod, p1024_mp_mod);
51524     /* U2 = X2*Z1^2 */
51525     sp_1024_mont_sqr_16(t2, z, p1024_mod, p1024_mp_mod);
51526     sp_1024_mont_mul_16(t4, t2, z, p1024_mod, p1024_mp_mod);
51527     sp_1024_mont_mul_16(t2, t2, q->x, p1024_mod, p1024_mp_mod);
51528     /* S1 = Y1*Z2^3 */
51529     sp_1024_mont_mul_16(t3, t3, y, p1024_mod, p1024_mp_mod);
51530     /* S2 = Y2*Z1^3 */
51531     sp_1024_mont_mul_16(t4, t4, q->y, p1024_mod, p1024_mp_mod);
51532     /* H = U2 - U1 */
51533     sp_1024_mont_sub_16(t2, t2, t1, p1024_mod);
51534     /* RS = S2 + S1 */
51535     sp_1024_mont_add_16(t6, t4, t3, p1024_mod);
51536     /* R = S2 - S1 */
51537     sp_1024_mont_sub_16(t4, t4, t3, p1024_mod);
51538     /* Z3 = H*Z1*Z2 */
51539     /* ZS = H*Z1*Z2 */
51540     sp_1024_mont_mul_16(z, z, q->z, p1024_mod, p1024_mp_mod);
51541     sp_1024_mont_mul_16(z, z, t2, p1024_mod, p1024_mp_mod);
51542     XMEMCPY(zs, z, sizeof(p->z)/2);
51543     /* X3 = R^2 - H^3 - 2*U1*H^2 */
51544     /* XS = RS^2 - H^3 - 2*U1*H^2 */
51545     sp_1024_mont_sqr_16(x, t4, p1024_mod, p1024_mp_mod);
51546     sp_1024_mont_sqr_16(xs, t6, p1024_mod, p1024_mp_mod);
51547     sp_1024_mont_sqr_16(t5, t2, p1024_mod, p1024_mp_mod);
51548     sp_1024_mont_mul_16(y, t1, t5, p1024_mod, p1024_mp_mod);
51549     sp_1024_mont_mul_16(t5, t5, t2, p1024_mod, p1024_mp_mod);
51550     sp_1024_mont_sub_16(x, x, t5, p1024_mod);
51551     sp_1024_mont_sub_16(xs, xs, t5, p1024_mod);
51552     sp_1024_mont_dbl_16(t1, y, p1024_mod);
51553     sp_1024_mont_sub_16(x, x, t1, p1024_mod);
51554     sp_1024_mont_sub_16(xs, xs, t1, p1024_mod);
51555     /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
51556     /* YS = -RS*(U1*H^2 - XS) - S1*H^3 */
51557     sp_1024_mont_sub_16(ys, y, xs, p1024_mod);
51558     sp_1024_mont_sub_16(y, y, x, p1024_mod);
51559     sp_1024_mont_mul_16(y, y, t4, p1024_mod, p1024_mp_mod);
51560     sp_1024_mont_sub_16(t6, p1024_mod, t6, p1024_mod);
51561     sp_1024_mont_mul_16(ys, ys, t6, p1024_mod, p1024_mp_mod);
51562     sp_1024_mont_mul_16(t5, t5, t3, p1024_mod, p1024_mp_mod);
51563     sp_1024_mont_sub_16(y, y, t5, p1024_mod);
51564     sp_1024_mont_sub_16(ys, ys, t5, p1024_mod);
51565 }
51566 
51567 /* Structure used to describe recoding of scalar multiplication. */
51568 typedef struct ecc_recode_1024 {
51569     /* Index into pre-computation table. */
51570     uint8_t i;
51571     /* Use the negative of the point. */
51572     uint8_t neg;
51573 } ecc_recode_1024;
51574 
51575 /* The index into pre-computation table to use. */
51576 static const uint8_t recode_index_16_7[130] = {
51577      0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
51578     16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
51579     32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
51580     48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
51581     64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49,
51582     48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33,
51583     32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17,
51584     16, 15, 14, 13, 12, 11, 10,  9,  8,  7,  6,  5,  4,  3,  2,  1,
51585      0,  1,
51586 };
51587 
51588 /* Whether to negate y-ordinate. */
51589 static const uint8_t recode_neg_16_7[130] = {
51590      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
51591      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
51592      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
51593      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
51594      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
51595      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
51596      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
51597      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
51598      0,  0,
51599 };
51600 
51601 /* Recode the scalar for multiplication using pre-computed values and
51602  * subtraction.
51603  *
51604  * k  Scalar to multiply by.
51605  * v  Vector of operations to perform.
51606  */
sp_1024_ecc_recode_7_16(const sp_digit * k,ecc_recode_1024 * v)51607 static void sp_1024_ecc_recode_7_16(const sp_digit* k, ecc_recode_1024* v)
51608 {
51609     int i;
51610     int j;
51611     uint8_t y;
51612     int carry = 0;
51613     int o;
51614     sp_digit n;
51615 
51616     j = 0;
51617     n = k[j];
51618     o = 0;
51619     for (i=0; i<147; i++) {
51620         y = (int8_t)n;
51621         if (o + 7 < 64) {
51622             y &= 0x7f;
51623             n >>= 7;
51624             o += 7;
51625         }
51626         else if (o + 7 == 64) {
51627             n >>= 7;
51628             if (++j < 16)
51629                 n = k[j];
51630             o = 0;
51631         }
51632         else if (++j < 16) {
51633             n = k[j];
51634             y |= (uint8_t)((n << (64 - o)) & 0x7f);
51635             o -= 57;
51636             n >>= o;
51637         }
51638 
51639         y += (uint8_t)carry;
51640         v[i].i = recode_index_16_7[y];
51641         v[i].neg = recode_neg_16_7[y];
51642         carry = (y >> 7) + v[i].neg;
51643     }
51644 }
51645 
51646 /* Multiply the point by the scalar and return the result.
51647  * If map is true then convert result to affine coordinates.
51648  *
51649  * Window technique of 7 bits. (Add-Sub variation.)
51650  * Calculate 0..64 times the point. Use function that adds and
51651  * subtracts the same two points.
51652  * Recode to add or subtract one of the computed points.
51653  * Double to push up.
51654  * NOT a sliding window.
51655  *
51656  * r     Resulting point.
51657  * g     Point to multiply.
51658  * k     Scalar to multiply by.
51659  * map   Indicates whether to convert result to affine.
51660  * ct    Constant time required.
51661  * heap  Heap to use for allocation.
51662  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
51663  */
sp_1024_ecc_mulmod_win_add_sub_16(sp_point_1024 * r,const sp_point_1024 * g,const sp_digit * k,int map,int ct,void * heap)51664 static int sp_1024_ecc_mulmod_win_add_sub_16(sp_point_1024* r, const sp_point_1024* g,
51665         const sp_digit* k, int map, int ct, void* heap)
51666 {
51667 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
51668     sp_point_1024* t = NULL;
51669     sp_digit* tmp = NULL;
51670 #else
51671     sp_point_1024 t[65+2];
51672     sp_digit tmp[2 * 16 * 6];
51673 #endif
51674     sp_point_1024* rt = NULL;
51675     sp_point_1024* p = NULL;
51676     sp_digit* negy;
51677     int i;
51678     ecc_recode_1024 v[147];
51679     int err = MP_OKAY;
51680 
51681     /* Constant time used for cache attack resistance implementation. */
51682     (void)ct;
51683     (void)heap;
51684 
51685 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
51686     t = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024) *
51687         (65+2), heap, DYNAMIC_TYPE_ECC);
51688     if (t == NULL)
51689         err = MEMORY_E;
51690     if (err == MP_OKAY) {
51691         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 16 * 6,
51692                                  heap, DYNAMIC_TYPE_ECC);
51693         if (tmp == NULL)
51694             err = MEMORY_E;
51695     }
51696 #endif
51697 
51698     if (err == MP_OKAY) {
51699         rt = t + 65;
51700         p  = t + 65+1;
51701 
51702         /* t[0] = {0, 0, 1} * norm */
51703         XMEMSET(&t[0], 0, sizeof(t[0]));
51704         t[0].infinity = 1;
51705         /* t[1] = {g->x, g->y, g->z} * norm */
51706         err = sp_1024_mod_mul_norm_16(t[1].x, g->x, p1024_mod);
51707     }
51708     if (err == MP_OKAY) {
51709         err = sp_1024_mod_mul_norm_16(t[1].y, g->y, p1024_mod);
51710     }
51711     if (err == MP_OKAY) {
51712         err = sp_1024_mod_mul_norm_16(t[1].z, g->z, p1024_mod);
51713     }
51714 
51715     if (err == MP_OKAY) {
51716         t[1].infinity = 0;
51717         /* t[2] ... t[64]  */
51718         sp_1024_proj_point_dbl_n_store_16(t, &t[ 1], 6, 1, tmp);
51719         sp_1024_proj_point_add_16(&t[ 3], &t[ 2], &t[ 1], tmp);
51720         sp_1024_proj_point_dbl_16(&t[ 6], &t[ 3], tmp);
51721         sp_1024_proj_point_add_sub_16(&t[ 7], &t[ 5], &t[ 6], &t[ 1], tmp);
51722         sp_1024_proj_point_dbl_16(&t[10], &t[ 5], tmp);
51723         sp_1024_proj_point_add_sub_16(&t[11], &t[ 9], &t[10], &t[ 1], tmp);
51724         sp_1024_proj_point_dbl_16(&t[12], &t[ 6], tmp);
51725         sp_1024_proj_point_dbl_16(&t[14], &t[ 7], tmp);
51726         sp_1024_proj_point_add_sub_16(&t[15], &t[13], &t[14], &t[ 1], tmp);
51727         sp_1024_proj_point_dbl_16(&t[18], &t[ 9], tmp);
51728         sp_1024_proj_point_add_sub_16(&t[19], &t[17], &t[18], &t[ 1], tmp);
51729         sp_1024_proj_point_dbl_16(&t[20], &t[10], tmp);
51730         sp_1024_proj_point_dbl_16(&t[22], &t[11], tmp);
51731         sp_1024_proj_point_add_sub_16(&t[23], &t[21], &t[22], &t[ 1], tmp);
51732         sp_1024_proj_point_dbl_16(&t[24], &t[12], tmp);
51733         sp_1024_proj_point_dbl_16(&t[26], &t[13], tmp);
51734         sp_1024_proj_point_add_sub_16(&t[27], &t[25], &t[26], &t[ 1], tmp);
51735         sp_1024_proj_point_dbl_16(&t[28], &t[14], tmp);
51736         sp_1024_proj_point_dbl_16(&t[30], &t[15], tmp);
51737         sp_1024_proj_point_add_sub_16(&t[31], &t[29], &t[30], &t[ 1], tmp);
51738         sp_1024_proj_point_dbl_16(&t[34], &t[17], tmp);
51739         sp_1024_proj_point_add_sub_16(&t[35], &t[33], &t[34], &t[ 1], tmp);
51740         sp_1024_proj_point_dbl_16(&t[36], &t[18], tmp);
51741         sp_1024_proj_point_dbl_16(&t[38], &t[19], tmp);
51742         sp_1024_proj_point_add_sub_16(&t[39], &t[37], &t[38], &t[ 1], tmp);
51743         sp_1024_proj_point_dbl_16(&t[40], &t[20], tmp);
51744         sp_1024_proj_point_dbl_16(&t[42], &t[21], tmp);
51745         sp_1024_proj_point_add_sub_16(&t[43], &t[41], &t[42], &t[ 1], tmp);
51746         sp_1024_proj_point_dbl_16(&t[44], &t[22], tmp);
51747         sp_1024_proj_point_dbl_16(&t[46], &t[23], tmp);
51748         sp_1024_proj_point_add_sub_16(&t[47], &t[45], &t[46], &t[ 1], tmp);
51749         sp_1024_proj_point_dbl_16(&t[48], &t[24], tmp);
51750         sp_1024_proj_point_dbl_16(&t[50], &t[25], tmp);
51751         sp_1024_proj_point_add_sub_16(&t[51], &t[49], &t[50], &t[ 1], tmp);
51752         sp_1024_proj_point_dbl_16(&t[52], &t[26], tmp);
51753         sp_1024_proj_point_dbl_16(&t[54], &t[27], tmp);
51754         sp_1024_proj_point_add_sub_16(&t[55], &t[53], &t[54], &t[ 1], tmp);
51755         sp_1024_proj_point_dbl_16(&t[56], &t[28], tmp);
51756         sp_1024_proj_point_dbl_16(&t[58], &t[29], tmp);
51757         sp_1024_proj_point_add_sub_16(&t[59], &t[57], &t[58], &t[ 1], tmp);
51758         sp_1024_proj_point_dbl_16(&t[60], &t[30], tmp);
51759         sp_1024_proj_point_dbl_16(&t[62], &t[31], tmp);
51760         sp_1024_proj_point_add_sub_16(&t[63], &t[61], &t[62], &t[ 1], tmp);
51761 
51762         negy = t[0].y;
51763 
51764         sp_1024_ecc_recode_7_16(k, v);
51765 
51766         i = 146;
51767         XMEMCPY(rt, &t[v[i].i], sizeof(sp_point_1024));
51768         for (--i; i>=0; i--) {
51769             sp_1024_proj_point_dbl_n_16(rt, 7, tmp);
51770             XMEMCPY(p, &t[v[i].i], sizeof(sp_point_1024));
51771             sp_1024_mont_sub_16(negy, p1024_mod, p->y, p1024_mod);
51772             sp_1024_norm_16(negy);
51773             sp_1024_cond_copy_16(p->y, negy, (sp_digit)0 - v[i].neg);
51774             sp_1024_proj_point_add_16(rt, rt, p, tmp);
51775         }
51776 
51777         if (map != 0) {
51778             sp_1024_map_16(r, rt, tmp);
51779         }
51780         else {
51781             XMEMCPY(r, rt, sizeof(sp_point_1024));
51782         }
51783     }
51784 
51785 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
51786     if (t != NULL)
51787         XFREE(t, heap, DYNAMIC_TYPE_ECC);
51788     if (tmp != NULL)
51789         XFREE(tmp, heap, DYNAMIC_TYPE_ECC);
51790 #endif
51791 
51792     return err;
51793 }
51794 
51795 #ifdef HAVE_INTEL_AVX2
51796 #ifdef HAVE_INTEL_AVX2
51797 extern void sp_1024_mont_reduce_avx2_16(sp_digit* a, const sp_digit* m, sp_digit mp);
51798 /* Multiply two Montgomery form numbers mod the modulus (prime).
51799  * (r = a * b mod m)
51800  *
51801  * r   Result of multiplication.
51802  * a   First number to multiply in Montgomery form.
51803  * b   Second number to multiply in Montgomery form.
51804  * m   Modulus (prime).
51805  * mp  Montgomery mulitplier.
51806  */
sp_1024_mont_mul_avx2_16(sp_digit * r,const sp_digit * a,const sp_digit * b,const sp_digit * m,sp_digit mp)51807 static void sp_1024_mont_mul_avx2_16(sp_digit* r, const sp_digit* a,
51808         const sp_digit* b, const sp_digit* m, sp_digit mp)
51809 {
51810     sp_1024_mul_avx2_16(r, a, b);
51811     sp_1024_mont_reduce_avx2_16(r, m, mp);
51812 }
51813 
51814 #endif /* HAVE_INTEL_AVX2 */
51815 #ifdef HAVE_INTEL_AVX2
51816 /* Square the Montgomery form number. (r = a * a mod m)
51817  *
51818  * r   Result of squaring.
51819  * a   Number to square in Montgomery form.
51820  * m   Modulus (prime).
51821  * mp  Montgomery mulitplier.
51822  */
sp_1024_mont_sqr_avx2_16(sp_digit * r,const sp_digit * a,const sp_digit * m,sp_digit mp)51823 static void sp_1024_mont_sqr_avx2_16(sp_digit* r, const sp_digit* a,
51824         const sp_digit* m, sp_digit mp)
51825 {
51826     sp_1024_sqr_avx2_16(r, a);
51827     sp_1024_mont_reduce_avx2_16(r, m, mp);
51828 }
51829 
51830 #endif /* HAVE_INTEL_AVX2 */
51831 
51832 /* Invert the number, in Montgomery form, modulo the modulus (prime) of the
51833  * P1024 curve. (r = 1 / a mod m)
51834  *
51835  * r   Inverse result.
51836  * a   Number to invert.
51837  * td  Temporary data.
51838  */
sp_1024_mont_inv_avx2_16(sp_digit * r,const sp_digit * a,sp_digit * td)51839 static void sp_1024_mont_inv_avx2_16(sp_digit* r, const sp_digit* a,
51840         sp_digit* td)
51841 {
51842     sp_digit* t = td;
51843     int i;
51844     int j;
51845     sp_digit table[32][2 * 16];
51846 
51847     XMEMCPY(table[0], a, sizeof(sp_digit) * 16);
51848     for (i = 1; i < 6; i++) {
51849         sp_1024_mont_sqr_avx2_16(table[0], table[0], p1024_mod, p1024_mp_mod);
51850     }
51851     for (i = 1; i < 32; i++) {
51852         sp_1024_mont_mul_avx2_16(table[i], table[i-1], a, p1024_mod, p1024_mp_mod);
51853     }
51854 
51855     XMEMCPY(t, table[p1024_mod_minus_2[1]], sizeof(sp_digit) * 16);
51856     for (i = 2; i < (int)sizeof(p1024_mod_minus_2) - 2; i += 2) {
51857         for (j = 0; j < p1024_mod_minus_2[i]; j++) {
51858             sp_1024_mont_sqr_avx2_16(t, t, p1024_mod, p1024_mp_mod);
51859         }
51860         sp_1024_mont_mul_avx2_16(t, t, table[p1024_mod_minus_2[i+1]], p1024_mod,
51861             p1024_mp_mod);
51862     }
51863     sp_1024_mont_sqr_avx2_16(t, t, p1024_mod, p1024_mp_mod);
51864     sp_1024_mont_mul_avx2_16(r, t, a, p1024_mod, p1024_mp_mod);
51865 }
51866 
51867 /* Map the Montgomery form projective coordinate point to an affine point.
51868  *
51869  * r  Resulting affine coordinate point.
51870  * p  Montgomery form projective coordinate point.
51871  * t  Temporary ordinate data.
51872  */
sp_1024_map_avx2_16(sp_point_1024 * r,const sp_point_1024 * p,sp_digit * t)51873 static void sp_1024_map_avx2_16(sp_point_1024* r, const sp_point_1024* p,
51874     sp_digit* t)
51875 {
51876     sp_digit* t1 = t;
51877     sp_digit* t2 = t + 2*16;
51878     sp_int64 n;
51879 
51880     sp_1024_mont_inv_avx2_16(t1, p->z, t + 2*16);
51881 
51882     sp_1024_mont_sqr_avx2_16(t2, t1, p1024_mod, p1024_mp_mod);
51883     sp_1024_mont_mul_avx2_16(t1, t2, t1, p1024_mod, p1024_mp_mod);
51884 
51885     /* x /= z^2 */
51886     sp_1024_mont_mul_avx2_16(r->x, p->x, t2, p1024_mod, p1024_mp_mod);
51887     XMEMSET(r->x + 16, 0, sizeof(r->x) / 2U);
51888     sp_1024_mont_reduce_avx2_16(r->x, p1024_mod, p1024_mp_mod);
51889     /* Reduce x to less than modulus */
51890     n = sp_1024_cmp_16(r->x, p1024_mod);
51891     sp_1024_cond_sub_16(r->x, r->x, p1024_mod, 0 - ((n >= 0) ?
51892                 (sp_digit)1 : (sp_digit)0));
51893     sp_1024_norm_16(r->x);
51894 
51895     /* y /= z^3 */
51896     sp_1024_mont_mul_avx2_16(r->y, p->y, t1, p1024_mod, p1024_mp_mod);
51897     XMEMSET(r->y + 16, 0, sizeof(r->y) / 2U);
51898     sp_1024_mont_reduce_avx2_16(r->y, p1024_mod, p1024_mp_mod);
51899     /* Reduce y to less than modulus */
51900     n = sp_1024_cmp_16(r->y, p1024_mod);
51901     sp_1024_cond_sub_avx2_16(r->y, r->y, p1024_mod, 0 - ((n >= 0) ?
51902                 (sp_digit)1 : (sp_digit)0));
51903     sp_1024_norm_16(r->y);
51904 
51905     XMEMSET(r->z, 0, sizeof(r->z));
51906     r->z[0] = 1;
51907 
51908 }
51909 
51910 extern void sp_1024_mont_add_avx2_16(sp_digit* r, const sp_digit* a, const sp_digit* b, const sp_digit* m);
51911 extern void sp_1024_mont_dbl_avx2_16(sp_digit* r, const sp_digit* a, const sp_digit* m);
51912 extern void sp_1024_mont_tpl_avx2_16(sp_digit* r, const sp_digit* a, const sp_digit* m);
51913 extern void sp_1024_mont_sub_avx2_16(sp_digit* r, const sp_digit* a, const sp_digit* b, const sp_digit* m);
51914 extern void sp_1024_div2_avx2_16(sp_digit* r, const sp_digit* a, const sp_digit* m);
51915 /* Double the Montgomery form projective point p.
51916  *
51917  * r  Result of doubling point.
51918  * p  Point to double.
51919  * t  Temporary ordinate data.
51920  */
51921 #ifdef WOLFSSL_SP_NONBLOCK
51922 typedef struct sp_1024_proj_point_dbl_avx2_16_ctx {
51923     int state;
51924     sp_digit* t1;
51925     sp_digit* t2;
51926     sp_digit* x;
51927     sp_digit* y;
51928     sp_digit* z;
51929 } sp_1024_proj_point_dbl_avx2_16_ctx;
51930 
sp_1024_proj_point_dbl_avx2_16_nb(sp_ecc_ctx_t * sp_ctx,sp_point_1024 * r,const sp_point_1024 * p,sp_digit * t)51931 static int sp_1024_proj_point_dbl_avx2_16_nb(sp_ecc_ctx_t* sp_ctx, sp_point_1024* r, const sp_point_1024* p, sp_digit* t)
51932 {
51933     int err = FP_WOULDBLOCK;
51934     sp_1024_proj_point_dbl_avx2_16_ctx* ctx = (sp_1024_proj_point_dbl_avx2_16_ctx*)sp_ctx->data;
51935 
51936     typedef char ctx_size_test[sizeof(sp_1024_proj_point_dbl_avx2_16_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
51937     (void)sizeof(ctx_size_test);
51938 
51939     switch (ctx->state) {
51940     case 0:
51941         ctx->t1 = t;
51942         ctx->t2 = t + 2*16;
51943         ctx->x = r->x;
51944         ctx->y = r->y;
51945         ctx->z = r->z;
51946 
51947         /* Put infinity into result. */
51948         if (r != p) {
51949             r->infinity = p->infinity;
51950         }
51951         ctx->state = 1;
51952         break;
51953     case 1:
51954         /* T1 = Z * Z */
51955         sp_1024_mont_sqr_avx2_16(ctx->t1, p->z, p1024_mod, p1024_mp_mod);
51956         ctx->state = 2;
51957         break;
51958     case 2:
51959         /* Z = Y * Z */
51960         sp_1024_mont_mul_avx2_16(ctx->z, p->y, p->z, p1024_mod, p1024_mp_mod);
51961         ctx->state = 3;
51962         break;
51963     case 3:
51964         /* Z = 2Z */
51965         sp_1024_mont_dbl_avx2_16(ctx->z, ctx->z, p1024_mod);
51966         ctx->state = 4;
51967         break;
51968     case 4:
51969         /* T2 = X - T1 */
51970         sp_1024_mont_sub_avx2_16(ctx->t2, p->x, ctx->t1, p1024_mod);
51971         ctx->state = 5;
51972         break;
51973     case 5:
51974         /* T1 = X + T1 */
51975         sp_1024_mont_add_avx2_16(ctx->t1, p->x, ctx->t1, p1024_mod);
51976         ctx->state = 6;
51977         break;
51978     case 6:
51979         /* T2 = T1 * T2 */
51980         sp_1024_mont_mul_avx2_16(ctx->t2, ctx->t1, ctx->t2, p1024_mod, p1024_mp_mod);
51981         ctx->state = 7;
51982         break;
51983     case 7:
51984         /* T1 = 3T2 */
51985         sp_1024_mont_tpl_avx2_16(ctx->t1, ctx->t2, p1024_mod);
51986         ctx->state = 8;
51987         break;
51988     case 8:
51989         /* Y = 2Y */
51990         sp_1024_mont_dbl_avx2_16(ctx->y, p->y, p1024_mod);
51991         ctx->state = 9;
51992         break;
51993     case 9:
51994         /* Y = Y * Y */
51995         sp_1024_mont_sqr_avx2_16(ctx->y, ctx->y, p1024_mod, p1024_mp_mod);
51996         ctx->state = 10;
51997         break;
51998     case 10:
51999         /* T2 = Y * Y */
52000         sp_1024_mont_sqr_avx2_16(ctx->t2, ctx->y, p1024_mod, p1024_mp_mod);
52001         ctx->state = 11;
52002         break;
52003     case 11:
52004         /* T2 = T2/2 */
52005         sp_1024_div2_avx2_16(ctx->t2, ctx->t2, p1024_mod);
52006         ctx->state = 12;
52007         break;
52008     case 12:
52009         /* Y = Y * X */
52010         sp_1024_mont_mul_avx2_16(ctx->y, ctx->y, p->x, p1024_mod, p1024_mp_mod);
52011         ctx->state = 13;
52012         break;
52013     case 13:
52014         /* X = T1 * T1 */
52015         sp_1024_mont_sqr_avx2_16(ctx->x, ctx->t1, p1024_mod, p1024_mp_mod);
52016         ctx->state = 14;
52017         break;
52018     case 14:
52019         /* X = X - Y */
52020         sp_1024_mont_sub_avx2_16(ctx->x, ctx->x, ctx->y, p1024_mod);
52021         ctx->state = 15;
52022         break;
52023     case 15:
52024         /* X = X - Y */
52025         sp_1024_mont_sub_avx2_16(ctx->x, ctx->x, ctx->y, p1024_mod);
52026         ctx->state = 16;
52027         break;
52028     case 16:
52029         /* Y = Y - X */
52030         sp_1024_mont_sub_avx2_16(ctx->y, ctx->y, ctx->x, p1024_mod);
52031         ctx->state = 17;
52032         break;
52033     case 17:
52034         /* Y = Y * T1 */
52035         sp_1024_mont_mul_avx2_16(ctx->y, ctx->y, ctx->t1, p1024_mod, p1024_mp_mod);
52036         ctx->state = 18;
52037         break;
52038     case 18:
52039         /* Y = Y - T2 */
52040         sp_1024_mont_sub_avx2_16(ctx->y, ctx->y, ctx->t2, p1024_mod);
52041         ctx->state = 19;
52042         /* fall-through */
52043     case 19:
52044         err = MP_OKAY;
52045         break;
52046     }
52047 
52048     if (err == MP_OKAY && ctx->state != 19) {
52049         err = FP_WOULDBLOCK;
52050     }
52051 
52052     return err;
52053 }
52054 #endif /* WOLFSSL_SP_NONBLOCK */
52055 
sp_1024_proj_point_dbl_avx2_16(sp_point_1024 * r,const sp_point_1024 * p,sp_digit * t)52056 static void sp_1024_proj_point_dbl_avx2_16(sp_point_1024* r, const sp_point_1024* p, sp_digit* t)
52057 {
52058     sp_digit* t1 = t;
52059     sp_digit* t2 = t + 2*16;
52060     sp_digit* x;
52061     sp_digit* y;
52062     sp_digit* z;
52063 
52064     x = r->x;
52065     y = r->y;
52066     z = r->z;
52067     /* Put infinity into result. */
52068     if (r != p) {
52069         r->infinity = p->infinity;
52070     }
52071 
52072     /* T1 = Z * Z */
52073     sp_1024_mont_sqr_avx2_16(t1, p->z, p1024_mod, p1024_mp_mod);
52074     /* Z = Y * Z */
52075     sp_1024_mont_mul_avx2_16(z, p->y, p->z, p1024_mod, p1024_mp_mod);
52076     /* Z = 2Z */
52077     sp_1024_mont_dbl_avx2_16(z, z, p1024_mod);
52078     /* T2 = X - T1 */
52079     sp_1024_mont_sub_avx2_16(t2, p->x, t1, p1024_mod);
52080     /* T1 = X + T1 */
52081     sp_1024_mont_add_avx2_16(t1, p->x, t1, p1024_mod);
52082     /* T2 = T1 * T2 */
52083     sp_1024_mont_mul_avx2_16(t2, t1, t2, p1024_mod, p1024_mp_mod);
52084     /* T1 = 3T2 */
52085     sp_1024_mont_tpl_avx2_16(t1, t2, p1024_mod);
52086     /* Y = 2Y */
52087     sp_1024_mont_dbl_avx2_16(y, p->y, p1024_mod);
52088     /* Y = Y * Y */
52089     sp_1024_mont_sqr_avx2_16(y, y, p1024_mod, p1024_mp_mod);
52090     /* T2 = Y * Y */
52091     sp_1024_mont_sqr_avx2_16(t2, y, p1024_mod, p1024_mp_mod);
52092     /* T2 = T2/2 */
52093     sp_1024_div2_avx2_16(t2, t2, p1024_mod);
52094     /* Y = Y * X */
52095     sp_1024_mont_mul_avx2_16(y, y, p->x, p1024_mod, p1024_mp_mod);
52096     /* X = T1 * T1 */
52097     sp_1024_mont_sqr_avx2_16(x, t1, p1024_mod, p1024_mp_mod);
52098     /* X = X - Y */
52099     sp_1024_mont_sub_avx2_16(x, x, y, p1024_mod);
52100     /* X = X - Y */
52101     sp_1024_mont_sub_avx2_16(x, x, y, p1024_mod);
52102     /* Y = Y - X */
52103     sp_1024_mont_sub_avx2_16(y, y, x, p1024_mod);
52104     /* Y = Y * T1 */
52105     sp_1024_mont_mul_avx2_16(y, y, t1, p1024_mod, p1024_mp_mod);
52106     /* Y = Y - T2 */
52107     sp_1024_mont_sub_avx2_16(y, y, t2, p1024_mod);
52108 }
52109 
52110 /* Double the Montgomery form projective point p a number of times.
52111  *
52112  * r  Result of repeated doubling of point.
52113  * p  Point to double.
52114  * n  Number of times to double
52115  * t  Temporary ordinate data.
52116  */
sp_1024_proj_point_dbl_n_avx2_16(sp_point_1024 * p,int n,sp_digit * t)52117 static void sp_1024_proj_point_dbl_n_avx2_16(sp_point_1024* p, int n,
52118     sp_digit* t)
52119 {
52120     sp_digit* w = t;
52121     sp_digit* a = t + 2*16;
52122     sp_digit* b = t + 4*16;
52123     sp_digit* t1 = t + 6*16;
52124     sp_digit* t2 = t + 8*16;
52125     sp_digit* x;
52126     sp_digit* y;
52127     sp_digit* z;
52128 
52129     x = p->x;
52130     y = p->y;
52131     z = p->z;
52132 
52133     /* Y = 2*Y */
52134     sp_1024_mont_dbl_avx2_16(y, y, p1024_mod);
52135     /* W = Z^4 */
52136     sp_1024_mont_sqr_avx2_16(w, z, p1024_mod, p1024_mp_mod);
52137     sp_1024_mont_sqr_avx2_16(w, w, p1024_mod, p1024_mp_mod);
52138 
52139 #ifndef WOLFSSL_SP_SMALL
52140     while (--n > 0)
52141 #else
52142     while (--n >= 0)
52143 #endif
52144     {
52145         /* A = 3*(X^2 - W) */
52146         sp_1024_mont_sqr_avx2_16(t1, x, p1024_mod, p1024_mp_mod);
52147         sp_1024_mont_sub_avx2_16(t1, t1, w, p1024_mod);
52148         sp_1024_mont_tpl_avx2_16(a, t1, p1024_mod);
52149         /* B = X*Y^2 */
52150         sp_1024_mont_sqr_avx2_16(t1, y, p1024_mod, p1024_mp_mod);
52151         sp_1024_mont_mul_avx2_16(b, t1, x, p1024_mod, p1024_mp_mod);
52152         /* X = A^2 - 2B */
52153         sp_1024_mont_sqr_avx2_16(x, a, p1024_mod, p1024_mp_mod);
52154         sp_1024_mont_dbl_avx2_16(t2, b, p1024_mod);
52155         sp_1024_mont_sub_avx2_16(x, x, t2, p1024_mod);
52156         /* Z = Z*Y */
52157         sp_1024_mont_mul_avx2_16(z, z, y, p1024_mod, p1024_mp_mod);
52158         /* t2 = Y^4 */
52159         sp_1024_mont_sqr_avx2_16(t1, t1, p1024_mod, p1024_mp_mod);
52160 #ifdef WOLFSSL_SP_SMALL
52161         if (n != 0)
52162 #endif
52163         {
52164             /* W = W*Y^4 */
52165             sp_1024_mont_mul_avx2_16(w, w, t1, p1024_mod, p1024_mp_mod);
52166         }
52167         /* y = 2*A*(B - X) - Y^4 */
52168         sp_1024_mont_sub_avx2_16(y, b, x, p1024_mod);
52169         sp_1024_mont_mul_avx2_16(y, y, a, p1024_mod, p1024_mp_mod);
52170         sp_1024_mont_dbl_avx2_16(y, y, p1024_mod);
52171         sp_1024_mont_sub_avx2_16(y, y, t1, p1024_mod);
52172     }
52173 #ifndef WOLFSSL_SP_SMALL
52174     /* A = 3*(X^2 - W) */
52175     sp_1024_mont_sqr_avx2_16(t1, x, p1024_mod, p1024_mp_mod);
52176     sp_1024_mont_sub_avx2_16(t1, t1, w, p1024_mod);
52177     sp_1024_mont_tpl_avx2_16(a, t1, p1024_mod);
52178     /* B = X*Y^2 */
52179     sp_1024_mont_sqr_avx2_16(t1, y, p1024_mod, p1024_mp_mod);
52180     sp_1024_mont_mul_avx2_16(b, t1, x, p1024_mod, p1024_mp_mod);
52181     /* X = A^2 - 2B */
52182     sp_1024_mont_sqr_avx2_16(x, a, p1024_mod, p1024_mp_mod);
52183     sp_1024_mont_dbl_avx2_16(t2, b, p1024_mod);
52184     sp_1024_mont_sub_avx2_16(x, x, t2, p1024_mod);
52185     /* Z = Z*Y */
52186     sp_1024_mont_mul_avx2_16(z, z, y, p1024_mod, p1024_mp_mod);
52187     /* t2 = Y^4 */
52188     sp_1024_mont_sqr_avx2_16(t1, t1, p1024_mod, p1024_mp_mod);
52189     /* y = 2*A*(B - X) - Y^4 */
52190     sp_1024_mont_sub_avx2_16(y, b, x, p1024_mod);
52191     sp_1024_mont_mul_avx2_16(y, y, a, p1024_mod, p1024_mp_mod);
52192     sp_1024_mont_dbl_avx2_16(y, y, p1024_mod);
52193     sp_1024_mont_sub_avx2_16(y, y, t1, p1024_mod);
52194 #endif
52195     /* Y = Y/2 */
52196     sp_1024_div2_avx2_16(y, y, p1024_mod);
52197 }
52198 
52199 /* Add two Montgomery form projective points.
52200  *
52201  * r  Result of addition.
52202  * p  First point to add.
52203  * q  Second point to add.
52204  * t  Temporary ordinate data.
52205  */
52206 
52207 #ifdef WOLFSSL_SP_NONBLOCK
52208 typedef struct sp_1024_proj_point_add_avx2_16_ctx {
52209     int state;
52210     sp_1024_proj_point_dbl_avx2_16_ctx dbl_ctx;
52211     const sp_point_1024* ap[2];
52212     sp_point_1024* rp[2];
52213     sp_digit* t1;
52214     sp_digit* t2;
52215     sp_digit* t3;
52216     sp_digit* t4;
52217     sp_digit* t5;
52218     sp_digit* x;
52219     sp_digit* y;
52220     sp_digit* z;
52221 } sp_1024_proj_point_add_avx2_16_ctx;
52222 
sp_1024_proj_point_add_avx2_16_nb(sp_ecc_ctx_t * sp_ctx,sp_point_1024 * r,const sp_point_1024 * p,const sp_point_1024 * q,sp_digit * t)52223 static int sp_1024_proj_point_add_avx2_16_nb(sp_ecc_ctx_t* sp_ctx, sp_point_1024* r,
52224     const sp_point_1024* p, const sp_point_1024* q, sp_digit* t)
52225 {
52226     int err = FP_WOULDBLOCK;
52227     sp_1024_proj_point_add_avx2_16_ctx* ctx = (sp_1024_proj_point_add_avx2_16_ctx*)sp_ctx->data;
52228 
52229     /* Ensure only the first point is the same as the result. */
52230     if (q == r) {
52231         const sp_point_1024* a = p;
52232         p = q;
52233         q = a;
52234     }
52235 
52236     typedef char ctx_size_test[sizeof(sp_1024_proj_point_add_avx2_16_ctx) >= sizeof(*sp_ctx) ? -1 : 1];
52237     (void)sizeof(ctx_size_test);
52238 
52239     switch (ctx->state) {
52240     case 0: /* INIT */
52241         ctx->t1 = t;
52242         ctx->t2 = t + 2*16;
52243         ctx->t3 = t + 4*16;
52244         ctx->t4 = t + 6*16;
52245         ctx->t5 = t + 8*16;
52246 
52247         ctx->state = 1;
52248         break;
52249     case 1:
52250         /* Check double */
52251         (void)sp_1024_sub_avx2_16(ctx->t1, p1024_mod, q->y);
52252         sp_1024_norm_avx2_16(ctx->t1);
52253         if ((sp_1024_cmp_equal_avx2_16(p->x, q->x) & sp_1024_cmp_equal_avx2_16(p->z, q->z) &
52254             (sp_1024_cmp_equal_avx2_16(p->y, q->y) | sp_1024_cmp_equal_avx2_16(p->y, ctx->t1))) != 0)
52255         {
52256             XMEMSET(&ctx->dbl_ctx, 0, sizeof(ctx->dbl_ctx));
52257             ctx->state = 2;
52258         }
52259         else {
52260             ctx->state = 3;
52261         }
52262         break;
52263     case 2:
52264         err = sp_1024_proj_point_dbl_avx2_16_nb((sp_ecc_ctx_t*)&ctx->dbl_ctx, r, p, t);
52265         if (err == MP_OKAY)
52266             ctx->state = 27; /* done */
52267         break;
52268     case 3:
52269     {
52270         int i;
52271         ctx->rp[0] = r;
52272 
52273         /*lint allow cast to different type of pointer*/
52274         ctx->rp[1] = (sp_point_1024*)t; /*lint !e9087 !e740*/
52275         XMEMSET(ctx->rp[1], 0, sizeof(sp_point_1024));
52276         ctx->x = ctx->rp[p->infinity | q->infinity]->x;
52277         ctx->y = ctx->rp[p->infinity | q->infinity]->y;
52278         ctx->z = ctx->rp[p->infinity | q->infinity]->z;
52279 
52280         ctx->ap[0] = p;
52281         ctx->ap[1] = q;
52282         for (i=0; i<16; i++) {
52283             r->x[i] = ctx->ap[p->infinity]->x[i];
52284         }
52285         for (i=0; i<16; i++) {
52286             r->y[i] = ctx->ap[p->infinity]->y[i];
52287         }
52288         for (i=0; i<16; i++) {
52289             r->z[i] = ctx->ap[p->infinity]->z[i];
52290         }
52291         r->infinity = ctx->ap[p->infinity]->infinity;
52292 
52293         ctx->state = 4;
52294         break;
52295     }
52296     case 4:
52297         /* U1 = X1*Z2^2 */
52298         sp_1024_mont_sqr_avx2_16(ctx->t1, q->z, p1024_mod, p1024_mp_mod);
52299         ctx->state = 5;
52300         break;
52301     case 5:
52302         sp_1024_mont_mul_avx2_16(ctx->t3, ctx->t1, q->z, p1024_mod, p1024_mp_mod);
52303         ctx->state = 6;
52304         break;
52305     case 6:
52306         sp_1024_mont_mul_avx2_16(ctx->t1, ctx->t1, ctx->x, p1024_mod, p1024_mp_mod);
52307         ctx->state = 7;
52308         break;
52309     case 7:
52310         /* U2 = X2*Z1^2 */
52311         sp_1024_mont_sqr_avx2_16(ctx->t2, ctx->z, p1024_mod, p1024_mp_mod);
52312         ctx->state = 8;
52313         break;
52314     case 8:
52315         sp_1024_mont_mul_avx2_16(ctx->t4, ctx->t2, ctx->z, p1024_mod, p1024_mp_mod);
52316         ctx->state = 9;
52317         break;
52318     case 9:
52319         sp_1024_mont_mul_avx2_16(ctx->t2, ctx->t2, q->x, p1024_mod, p1024_mp_mod);
52320         ctx->state = 10;
52321         break;
52322     case 10:
52323         /* S1 = Y1*Z2^3 */
52324         sp_1024_mont_mul_avx2_16(ctx->t3, ctx->t3, ctx->y, p1024_mod, p1024_mp_mod);
52325         ctx->state = 11;
52326         break;
52327     case 11:
52328         /* S2 = Y2*Z1^3 */
52329         sp_1024_mont_mul_avx2_16(ctx->t4, ctx->t4, q->y, p1024_mod, p1024_mp_mod);
52330         ctx->state = 12;
52331         break;
52332     case 12:
52333         /* H = U2 - U1 */
52334         sp_1024_mont_sub_avx2_16(ctx->t2, ctx->t2, ctx->t1, p1024_mod);
52335         ctx->state = 13;
52336         break;
52337     case 13:
52338         /* R = S2 - S1 */
52339         sp_1024_mont_sub_avx2_16(ctx->t4, ctx->t4, ctx->t3, p1024_mod);
52340         ctx->state = 14;
52341         break;
52342     case 14:
52343         /* Z3 = H*Z1*Z2 */
52344         sp_1024_mont_mul_avx2_16(ctx->z, ctx->z, q->z, p1024_mod, p1024_mp_mod);
52345         ctx->state = 15;
52346         break;
52347     case 15:
52348         sp_1024_mont_mul_avx2_16(ctx->z, ctx->z, ctx->t2, p1024_mod, p1024_mp_mod);
52349         ctx->state = 16;
52350         break;
52351     case 16:
52352         /* X3 = R^2 - H^3 - 2*U1*H^2 */
52353         sp_1024_mont_sqr_avx2_16(ctx->x, ctx->t4, p1024_mod, p1024_mp_mod);
52354         ctx->state = 17;
52355         break;
52356     case 17:
52357         sp_1024_mont_sqr_avx2_16(ctx->t5, ctx->t2, p1024_mod, p1024_mp_mod);
52358         ctx->state = 18;
52359         break;
52360     case 18:
52361         sp_1024_mont_mul_avx2_16(ctx->y, ctx->t1, ctx->t5, p1024_mod, p1024_mp_mod);
52362         ctx->state = 19;
52363         break;
52364     case 19:
52365         sp_1024_mont_mul_avx2_16(ctx->t5, ctx->t5, ctx->t2, p1024_mod, p1024_mp_mod);
52366         ctx->state = 20;
52367         break;
52368     case 20:
52369         sp_1024_mont_sub_avx2_16(ctx->x, ctx->x, ctx->t5, p1024_mod);
52370         ctx->state = 21;
52371         break;
52372     case 21:
52373         sp_1024_mont_dbl_avx2_16(ctx->t1, ctx->y, p1024_mod);
52374         ctx->state = 22;
52375         break;
52376     case 22:
52377         sp_1024_mont_sub_avx2_16(ctx->x, ctx->x, ctx->t1, p1024_mod);
52378         ctx->state = 23;
52379         break;
52380     case 23:
52381         /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
52382         sp_1024_mont_sub_avx2_16(ctx->y, ctx->y, ctx->x, p1024_mod);
52383         ctx->state = 24;
52384         break;
52385     case 24:
52386         sp_1024_mont_mul_avx2_16(ctx->y, ctx->y, ctx->t4, p1024_mod, p1024_mp_mod);
52387         ctx->state = 25;
52388         break;
52389     case 25:
52390         sp_1024_mont_mul_avx2_16(ctx->t5, ctx->t5, ctx->t3, p1024_mod, p1024_mp_mod);
52391         ctx->state = 26;
52392         break;
52393     case 26:
52394         sp_1024_mont_sub_avx2_16(ctx->y, ctx->y, ctx->t5, p1024_mod);
52395         ctx->state = 27;
52396         /* fall-through */
52397     case 27:
52398         err = MP_OKAY;
52399         break;
52400     }
52401 
52402     if (err == MP_OKAY && ctx->state != 27) {
52403         err = FP_WOULDBLOCK;
52404     }
52405     return err;
52406 }
52407 #endif /* WOLFSSL_SP_NONBLOCK */
52408 
sp_1024_proj_point_add_avx2_16(sp_point_1024 * r,const sp_point_1024 * p,const sp_point_1024 * q,sp_digit * t)52409 static void sp_1024_proj_point_add_avx2_16(sp_point_1024* r,
52410         const sp_point_1024* p, const sp_point_1024* q, sp_digit* t)
52411 {
52412     const sp_point_1024* ap[2];
52413     sp_point_1024* rp[2];
52414     sp_digit* t1 = t;
52415     sp_digit* t2 = t + 2*16;
52416     sp_digit* t3 = t + 4*16;
52417     sp_digit* t4 = t + 6*16;
52418     sp_digit* t5 = t + 8*16;
52419     sp_digit* x;
52420     sp_digit* y;
52421     sp_digit* z;
52422     int i;
52423 
52424     /* Ensure only the first point is the same as the result. */
52425     if (q == r) {
52426         const sp_point_1024* a = p;
52427         p = q;
52428         q = a;
52429     }
52430 
52431     /* Check double */
52432     (void)sp_1024_mont_sub_avx2_16(t1, p1024_mod, q->y, p1024_mod);
52433     sp_1024_norm_16(t1);
52434     if ((sp_1024_cmp_equal_16(p->x, q->x) & sp_1024_cmp_equal_16(p->z, q->z) &
52435         (sp_1024_cmp_equal_16(p->y, q->y) | sp_1024_cmp_equal_16(p->y, t1))) != 0) {
52436         sp_1024_proj_point_dbl_avx2_16(r, p, t);
52437     }
52438     else {
52439         rp[0] = r;
52440 
52441         /*lint allow cast to different type of pointer*/
52442         rp[1] = (sp_point_1024*)t; /*lint !e9087 !e740*/
52443         XMEMSET(rp[1], 0, sizeof(sp_point_1024));
52444         x = rp[p->infinity | q->infinity]->x;
52445         y = rp[p->infinity | q->infinity]->y;
52446         z = rp[p->infinity | q->infinity]->z;
52447 
52448         ap[0] = p;
52449         ap[1] = q;
52450         for (i=0; i<16; i++) {
52451             r->x[i] = ap[p->infinity]->x[i];
52452         }
52453         for (i=0; i<16; i++) {
52454             r->y[i] = ap[p->infinity]->y[i];
52455         }
52456         for (i=0; i<16; i++) {
52457             r->z[i] = ap[p->infinity]->z[i];
52458         }
52459         r->infinity = ap[p->infinity]->infinity;
52460 
52461         /* U1 = X1*Z2^2 */
52462         sp_1024_mont_sqr_avx2_16(t1, q->z, p1024_mod, p1024_mp_mod);
52463         sp_1024_mont_mul_avx2_16(t3, t1, q->z, p1024_mod, p1024_mp_mod);
52464         sp_1024_mont_mul_avx2_16(t1, t1, x, p1024_mod, p1024_mp_mod);
52465         /* U2 = X2*Z1^2 */
52466         sp_1024_mont_sqr_avx2_16(t2, z, p1024_mod, p1024_mp_mod);
52467         sp_1024_mont_mul_avx2_16(t4, t2, z, p1024_mod, p1024_mp_mod);
52468         sp_1024_mont_mul_avx2_16(t2, t2, q->x, p1024_mod, p1024_mp_mod);
52469         /* S1 = Y1*Z2^3 */
52470         sp_1024_mont_mul_avx2_16(t3, t3, y, p1024_mod, p1024_mp_mod);
52471         /* S2 = Y2*Z1^3 */
52472         sp_1024_mont_mul_avx2_16(t4, t4, q->y, p1024_mod, p1024_mp_mod);
52473         /* H = U2 - U1 */
52474         sp_1024_mont_sub_avx2_16(t2, t2, t1, p1024_mod);
52475         /* R = S2 - S1 */
52476         sp_1024_mont_sub_avx2_16(t4, t4, t3, p1024_mod);
52477         /* Z3 = H*Z1*Z2 */
52478         sp_1024_mont_mul_avx2_16(z, z, q->z, p1024_mod, p1024_mp_mod);
52479         sp_1024_mont_mul_avx2_16(z, z, t2, p1024_mod, p1024_mp_mod);
52480         /* X3 = R^2 - H^3 - 2*U1*H^2 */
52481         sp_1024_mont_sqr_avx2_16(x, t4, p1024_mod, p1024_mp_mod);
52482         sp_1024_mont_sqr_avx2_16(t5, t2, p1024_mod, p1024_mp_mod);
52483         sp_1024_mont_mul_avx2_16(y, t1, t5, p1024_mod, p1024_mp_mod);
52484         sp_1024_mont_mul_avx2_16(t5, t5, t2, p1024_mod, p1024_mp_mod);
52485         sp_1024_mont_sub_avx2_16(x, x, t5, p1024_mod);
52486         sp_1024_mont_dbl_avx2_16(t1, y, p1024_mod);
52487         sp_1024_mont_sub_avx2_16(x, x, t1, p1024_mod);
52488         /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
52489         sp_1024_mont_sub_avx2_16(y, y, x, p1024_mod);
52490         sp_1024_mont_mul_avx2_16(y, y, t4, p1024_mod, p1024_mp_mod);
52491         sp_1024_mont_mul_avx2_16(t5, t5, t3, p1024_mod, p1024_mp_mod);
52492         sp_1024_mont_sub_avx2_16(y, y, t5, p1024_mod);
52493     }
52494 }
52495 
52496 /* Double the Montgomery form projective point p a number of times.
52497  *
52498  * r  Result of repeated doubling of point.
52499  * p  Point to double.
52500  * n  Number of times to double
52501  * t  Temporary ordinate data.
52502  */
sp_1024_proj_point_dbl_n_store_avx2_16(sp_point_1024 * r,const sp_point_1024 * p,int n,int m,sp_digit * t)52503 static void sp_1024_proj_point_dbl_n_store_avx2_16(sp_point_1024* r,
52504         const sp_point_1024* p, int n, int m, sp_digit* t)
52505 {
52506     sp_digit* w = t;
52507     sp_digit* a = t + 2*16;
52508     sp_digit* b = t + 4*16;
52509     sp_digit* t1 = t + 6*16;
52510     sp_digit* t2 = t + 8*16;
52511     sp_digit* x = r[2*m].x;
52512     sp_digit* y = r[(1<<n)*m].y;
52513     sp_digit* z = r[2*m].z;
52514     int i;
52515     int j;
52516 
52517     for (i=0; i<16; i++) {
52518         x[i] = p->x[i];
52519     }
52520     for (i=0; i<16; i++) {
52521         y[i] = p->y[i];
52522     }
52523     for (i=0; i<16; i++) {
52524         z[i] = p->z[i];
52525     }
52526 
52527     /* Y = 2*Y */
52528     sp_1024_mont_dbl_avx2_16(y, y, p1024_mod);
52529     /* W = Z^4 */
52530     sp_1024_mont_sqr_avx2_16(w, z, p1024_mod, p1024_mp_mod);
52531     sp_1024_mont_sqr_avx2_16(w, w, p1024_mod, p1024_mp_mod);
52532     j = m;
52533     for (i=1; i<=n; i++) {
52534         j *= 2;
52535 
52536         /* A = 3*(X^2 - W) */
52537         sp_1024_mont_sqr_avx2_16(t1, x, p1024_mod, p1024_mp_mod);
52538         sp_1024_mont_sub_avx2_16(t1, t1, w, p1024_mod);
52539         sp_1024_mont_tpl_avx2_16(a, t1, p1024_mod);
52540         /* B = X*Y^2 */
52541         sp_1024_mont_sqr_avx2_16(t2, y, p1024_mod, p1024_mp_mod);
52542         sp_1024_mont_mul_avx2_16(b, t2, x, p1024_mod, p1024_mp_mod);
52543         x = r[j].x;
52544         /* X = A^2 - 2B */
52545         sp_1024_mont_sqr_avx2_16(x, a, p1024_mod, p1024_mp_mod);
52546         sp_1024_mont_dbl_avx2_16(t1, b, p1024_mod);
52547         sp_1024_mont_sub_avx2_16(x, x, t1, p1024_mod);
52548         /* Z = Z*Y */
52549         sp_1024_mont_mul_avx2_16(r[j].z, z, y, p1024_mod, p1024_mp_mod);
52550         z = r[j].z;
52551         /* t2 = Y^4 */
52552         sp_1024_mont_sqr_avx2_16(t2, t2, p1024_mod, p1024_mp_mod);
52553         if (i != n) {
52554             /* W = W*Y^4 */
52555             sp_1024_mont_mul_avx2_16(w, w, t2, p1024_mod, p1024_mp_mod);
52556         }
52557         /* y = 2*A*(B - X) - Y^4 */
52558         sp_1024_mont_sub_avx2_16(y, b, x, p1024_mod);
52559         sp_1024_mont_mul_avx2_16(y, y, a, p1024_mod, p1024_mp_mod);
52560         sp_1024_mont_dbl_avx2_16(y, y, p1024_mod);
52561         sp_1024_mont_sub_avx2_16(y, y, t2, p1024_mod);
52562 
52563         /* Y = Y/2 */
52564         sp_1024_div2_avx2_16(r[j].y, y, p1024_mod);
52565         r[j].infinity = 0;
52566     }
52567 }
52568 
52569 /* Add two Montgomery form projective points.
52570  *
52571  * ra  Result of addition.
52572  * rs  Result of subtraction.
52573  * p   First point to add.
52574  * q   Second point to add.
52575  * t   Temporary ordinate data.
52576  */
sp_1024_proj_point_add_sub_avx2_16(sp_point_1024 * ra,sp_point_1024 * rs,const sp_point_1024 * p,const sp_point_1024 * q,sp_digit * t)52577 static void sp_1024_proj_point_add_sub_avx2_16(sp_point_1024* ra,
52578         sp_point_1024* rs, const sp_point_1024* p, const sp_point_1024* q,
52579         sp_digit* t)
52580 {
52581     sp_digit* t1 = t;
52582     sp_digit* t2 = t + 2*16;
52583     sp_digit* t3 = t + 4*16;
52584     sp_digit* t4 = t + 6*16;
52585     sp_digit* t5 = t + 8*16;
52586     sp_digit* t6 = t + 10*16;
52587     sp_digit* x = ra->x;
52588     sp_digit* y = ra->y;
52589     sp_digit* z = ra->z;
52590     sp_digit* xs = rs->x;
52591     sp_digit* ys = rs->y;
52592     sp_digit* zs = rs->z;
52593 
52594 
52595     XMEMCPY(x, p->x, sizeof(p->x) / 2);
52596     XMEMCPY(y, p->y, sizeof(p->y) / 2);
52597     XMEMCPY(z, p->z, sizeof(p->z) / 2);
52598     ra->infinity = 0;
52599     rs->infinity = 0;
52600 
52601     /* U1 = X1*Z2^2 */
52602     sp_1024_mont_sqr_avx2_16(t1, q->z, p1024_mod, p1024_mp_mod);
52603     sp_1024_mont_mul_avx2_16(t3, t1, q->z, p1024_mod, p1024_mp_mod);
52604     sp_1024_mont_mul_avx2_16(t1, t1, x, p1024_mod, p1024_mp_mod);
52605     /* U2 = X2*Z1^2 */
52606     sp_1024_mont_sqr_avx2_16(t2, z, p1024_mod, p1024_mp_mod);
52607     sp_1024_mont_mul_avx2_16(t4, t2, z, p1024_mod, p1024_mp_mod);
52608     sp_1024_mont_mul_avx2_16(t2, t2, q->x, p1024_mod, p1024_mp_mod);
52609     /* S1 = Y1*Z2^3 */
52610     sp_1024_mont_mul_avx2_16(t3, t3, y, p1024_mod, p1024_mp_mod);
52611     /* S2 = Y2*Z1^3 */
52612     sp_1024_mont_mul_avx2_16(t4, t4, q->y, p1024_mod, p1024_mp_mod);
52613     /* H = U2 - U1 */
52614     sp_1024_mont_sub_avx2_16(t2, t2, t1, p1024_mod);
52615     /* RS = S2 + S1 */
52616     sp_1024_mont_add_avx2_16(t6, t4, t3, p1024_mod);
52617     /* R = S2 - S1 */
52618     sp_1024_mont_sub_avx2_16(t4, t4, t3, p1024_mod);
52619     /* Z3 = H*Z1*Z2 */
52620     /* ZS = H*Z1*Z2 */
52621     sp_1024_mont_mul_avx2_16(z, z, q->z, p1024_mod, p1024_mp_mod);
52622     sp_1024_mont_mul_avx2_16(z, z, t2, p1024_mod, p1024_mp_mod);
52623     XMEMCPY(zs, z, sizeof(p->z)/2);
52624     /* X3 = R^2 - H^3 - 2*U1*H^2 */
52625     /* XS = RS^2 - H^3 - 2*U1*H^2 */
52626     sp_1024_mont_sqr_avx2_16(x, t4, p1024_mod, p1024_mp_mod);
52627     sp_1024_mont_sqr_avx2_16(xs, t6, p1024_mod, p1024_mp_mod);
52628     sp_1024_mont_sqr_avx2_16(t5, t2, p1024_mod, p1024_mp_mod);
52629     sp_1024_mont_mul_avx2_16(y, t1, t5, p1024_mod, p1024_mp_mod);
52630     sp_1024_mont_mul_avx2_16(t5, t5, t2, p1024_mod, p1024_mp_mod);
52631     sp_1024_mont_sub_avx2_16(x, x, t5, p1024_mod);
52632     sp_1024_mont_sub_avx2_16(xs, xs, t5, p1024_mod);
52633     sp_1024_mont_dbl_avx2_16(t1, y, p1024_mod);
52634     sp_1024_mont_sub_avx2_16(x, x, t1, p1024_mod);
52635     sp_1024_mont_sub_avx2_16(xs, xs, t1, p1024_mod);
52636     /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
52637     /* YS = -RS*(U1*H^2 - XS) - S1*H^3 */
52638     sp_1024_mont_sub_avx2_16(ys, y, xs, p1024_mod);
52639     sp_1024_mont_sub_avx2_16(y, y, x, p1024_mod);
52640     sp_1024_mont_mul_avx2_16(y, y, t4, p1024_mod, p1024_mp_mod);
52641     sp_1024_mont_sub_avx2_16(t6, p1024_mod, t6, p1024_mod);
52642     sp_1024_mont_mul_avx2_16(ys, ys, t6, p1024_mod, p1024_mp_mod);
52643     sp_1024_mont_mul_avx2_16(t5, t5, t3, p1024_mod, p1024_mp_mod);
52644     sp_1024_mont_sub_avx2_16(y, y, t5, p1024_mod);
52645     sp_1024_mont_sub_avx2_16(ys, ys, t5, p1024_mod);
52646 }
52647 
52648 /* Multiply the point by the scalar and return the result.
52649  * If map is true then convert result to affine coordinates.
52650  *
52651  * Window technique of 7 bits. (Add-Sub variation.)
52652  * Calculate 0..64 times the point. Use function that adds and
52653  * subtracts the same two points.
52654  * Recode to add or subtract one of the computed points.
52655  * Double to push up.
52656  * NOT a sliding window.
52657  *
52658  * r     Resulting point.
52659  * g     Point to multiply.
52660  * k     Scalar to multiply by.
52661  * map   Indicates whether to convert result to affine.
52662  * ct    Constant time required.
52663  * heap  Heap to use for allocation.
52664  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
52665  */
sp_1024_ecc_mulmod_win_add_sub_avx2_16(sp_point_1024 * r,const sp_point_1024 * g,const sp_digit * k,int map,int ct,void * heap)52666 static int sp_1024_ecc_mulmod_win_add_sub_avx2_16(sp_point_1024* r, const sp_point_1024* g,
52667         const sp_digit* k, int map, int ct, void* heap)
52668 {
52669 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
52670     sp_point_1024* t = NULL;
52671     sp_digit* tmp = NULL;
52672 #else
52673     sp_point_1024 t[65+2];
52674     sp_digit tmp[2 * 16 * 6];
52675 #endif
52676     sp_point_1024* rt = NULL;
52677     sp_point_1024* p = NULL;
52678     sp_digit* negy;
52679     int i;
52680     ecc_recode_1024 v[147];
52681     int err = MP_OKAY;
52682 
52683     /* Constant time used for cache attack resistance implementation. */
52684     (void)ct;
52685     (void)heap;
52686 
52687 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
52688     t = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024) *
52689         (65+2), heap, DYNAMIC_TYPE_ECC);
52690     if (t == NULL)
52691         err = MEMORY_E;
52692     if (err == MP_OKAY) {
52693         tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 16 * 6,
52694                                  heap, DYNAMIC_TYPE_ECC);
52695         if (tmp == NULL)
52696             err = MEMORY_E;
52697     }
52698 #endif
52699 
52700     if (err == MP_OKAY) {
52701         rt = t + 65;
52702         p  = t + 65+1;
52703 
52704         /* t[0] = {0, 0, 1} * norm */
52705         XMEMSET(&t[0], 0, sizeof(t[0]));
52706         t[0].infinity = 1;
52707         /* t[1] = {g->x, g->y, g->z} * norm */
52708         err = sp_1024_mod_mul_norm_avx2_16(t[1].x, g->x, p1024_mod);
52709     }
52710     if (err == MP_OKAY) {
52711         err = sp_1024_mod_mul_norm_avx2_16(t[1].y, g->y, p1024_mod);
52712     }
52713     if (err == MP_OKAY) {
52714         err = sp_1024_mod_mul_norm_avx2_16(t[1].z, g->z, p1024_mod);
52715     }
52716 
52717     if (err == MP_OKAY) {
52718         t[1].infinity = 0;
52719         /* t[2] ... t[64]  */
52720         sp_1024_proj_point_dbl_n_store_avx2_16(t, &t[ 1], 6, 1, tmp);
52721         sp_1024_proj_point_add_avx2_16(&t[ 3], &t[ 2], &t[ 1], tmp);
52722         sp_1024_proj_point_dbl_avx2_16(&t[ 6], &t[ 3], tmp);
52723         sp_1024_proj_point_add_sub_avx2_16(&t[ 7], &t[ 5], &t[ 6], &t[ 1], tmp);
52724         sp_1024_proj_point_dbl_avx2_16(&t[10], &t[ 5], tmp);
52725         sp_1024_proj_point_add_sub_avx2_16(&t[11], &t[ 9], &t[10], &t[ 1], tmp);
52726         sp_1024_proj_point_dbl_avx2_16(&t[12], &t[ 6], tmp);
52727         sp_1024_proj_point_dbl_avx2_16(&t[14], &t[ 7], tmp);
52728         sp_1024_proj_point_add_sub_avx2_16(&t[15], &t[13], &t[14], &t[ 1], tmp);
52729         sp_1024_proj_point_dbl_avx2_16(&t[18], &t[ 9], tmp);
52730         sp_1024_proj_point_add_sub_avx2_16(&t[19], &t[17], &t[18], &t[ 1], tmp);
52731         sp_1024_proj_point_dbl_avx2_16(&t[20], &t[10], tmp);
52732         sp_1024_proj_point_dbl_avx2_16(&t[22], &t[11], tmp);
52733         sp_1024_proj_point_add_sub_avx2_16(&t[23], &t[21], &t[22], &t[ 1], tmp);
52734         sp_1024_proj_point_dbl_avx2_16(&t[24], &t[12], tmp);
52735         sp_1024_proj_point_dbl_avx2_16(&t[26], &t[13], tmp);
52736         sp_1024_proj_point_add_sub_avx2_16(&t[27], &t[25], &t[26], &t[ 1], tmp);
52737         sp_1024_proj_point_dbl_avx2_16(&t[28], &t[14], tmp);
52738         sp_1024_proj_point_dbl_avx2_16(&t[30], &t[15], tmp);
52739         sp_1024_proj_point_add_sub_avx2_16(&t[31], &t[29], &t[30], &t[ 1], tmp);
52740         sp_1024_proj_point_dbl_avx2_16(&t[34], &t[17], tmp);
52741         sp_1024_proj_point_add_sub_avx2_16(&t[35], &t[33], &t[34], &t[ 1], tmp);
52742         sp_1024_proj_point_dbl_avx2_16(&t[36], &t[18], tmp);
52743         sp_1024_proj_point_dbl_avx2_16(&t[38], &t[19], tmp);
52744         sp_1024_proj_point_add_sub_avx2_16(&t[39], &t[37], &t[38], &t[ 1], tmp);
52745         sp_1024_proj_point_dbl_avx2_16(&t[40], &t[20], tmp);
52746         sp_1024_proj_point_dbl_avx2_16(&t[42], &t[21], tmp);
52747         sp_1024_proj_point_add_sub_avx2_16(&t[43], &t[41], &t[42], &t[ 1], tmp);
52748         sp_1024_proj_point_dbl_avx2_16(&t[44], &t[22], tmp);
52749         sp_1024_proj_point_dbl_avx2_16(&t[46], &t[23], tmp);
52750         sp_1024_proj_point_add_sub_avx2_16(&t[47], &t[45], &t[46], &t[ 1], tmp);
52751         sp_1024_proj_point_dbl_avx2_16(&t[48], &t[24], tmp);
52752         sp_1024_proj_point_dbl_avx2_16(&t[50], &t[25], tmp);
52753         sp_1024_proj_point_add_sub_avx2_16(&t[51], &t[49], &t[50], &t[ 1], tmp);
52754         sp_1024_proj_point_dbl_avx2_16(&t[52], &t[26], tmp);
52755         sp_1024_proj_point_dbl_avx2_16(&t[54], &t[27], tmp);
52756         sp_1024_proj_point_add_sub_avx2_16(&t[55], &t[53], &t[54], &t[ 1], tmp);
52757         sp_1024_proj_point_dbl_avx2_16(&t[56], &t[28], tmp);
52758         sp_1024_proj_point_dbl_avx2_16(&t[58], &t[29], tmp);
52759         sp_1024_proj_point_add_sub_avx2_16(&t[59], &t[57], &t[58], &t[ 1], tmp);
52760         sp_1024_proj_point_dbl_avx2_16(&t[60], &t[30], tmp);
52761         sp_1024_proj_point_dbl_avx2_16(&t[62], &t[31], tmp);
52762         sp_1024_proj_point_add_sub_avx2_16(&t[63], &t[61], &t[62], &t[ 1], tmp);
52763 
52764         negy = t[0].y;
52765 
52766         sp_1024_ecc_recode_7_16(k, v);
52767 
52768         i = 146;
52769         XMEMCPY(rt, &t[v[i].i], sizeof(sp_point_1024));
52770         for (--i; i>=0; i--) {
52771             sp_1024_proj_point_dbl_n_avx2_16(rt, 7, tmp);
52772             XMEMCPY(p, &t[v[i].i], sizeof(sp_point_1024));
52773             sp_1024_mont_sub_avx2_16(negy, p1024_mod, p->y, p1024_mod);
52774             sp_1024_norm_16(negy);
52775             sp_1024_cond_copy_16(p->y, negy, (sp_digit)0 - v[i].neg);
52776             sp_1024_proj_point_add_avx2_16(rt, rt, p, tmp);
52777         }
52778 
52779         if (map != 0) {
52780             sp_1024_map_avx2_16(r, rt, tmp);
52781         }
52782         else {
52783             XMEMCPY(r, rt, sizeof(sp_point_1024));
52784         }
52785     }
52786 
52787 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
52788     if (t != NULL)
52789         XFREE(t, heap, DYNAMIC_TYPE_ECC);
52790     if (tmp != NULL)
52791         XFREE(tmp, heap, DYNAMIC_TYPE_ECC);
52792 #endif
52793 
52794     return err;
52795 }
52796 
52797 #endif /* HAVE_INTEL_AVX2 */
52798 /* A table entry for pre-computed points. */
52799 typedef struct sp_table_entry_1024 {
52800     sp_digit x[16];
52801     sp_digit y[16];
52802 } sp_table_entry_1024;
52803 
52804 #ifdef FP_ECC
52805 #endif /* FP_ECC */
52806 /* Add two Montgomery form projective points. The second point has a q value of
52807  * one.
52808  * Only the first point can be the same pointer as the result point.
52809  *
52810  * r  Result of addition.
52811  * p  First point to add.
52812  * q  Second point to add.
52813  * t  Temporary ordinate data.
52814  */
sp_1024_proj_point_add_qz1_16(sp_point_1024 * r,const sp_point_1024 * p,const sp_point_1024 * q,sp_digit * t)52815 static void sp_1024_proj_point_add_qz1_16(sp_point_1024* r, const sp_point_1024* p,
52816         const sp_point_1024* q, sp_digit* t)
52817 {
52818     const sp_point_1024* ap[2];
52819     sp_point_1024* rp[2];
52820     sp_digit* t1 = t;
52821     sp_digit* t2 = t + 2*16;
52822     sp_digit* t3 = t + 4*16;
52823     sp_digit* t4 = t + 6*16;
52824     sp_digit* t5 = t + 8*16;
52825     sp_digit* x;
52826     sp_digit* y;
52827     sp_digit* z;
52828     int i;
52829 
52830     /* Check double */
52831     (void)sp_1024_mont_sub_16(t1, p1024_mod, q->y, p1024_mod);
52832     sp_1024_norm_16(t1);
52833     if ((sp_1024_cmp_equal_16(p->x, q->x) & sp_1024_cmp_equal_16(p->z, q->z) &
52834         (sp_1024_cmp_equal_16(p->y, q->y) | sp_1024_cmp_equal_16(p->y, t1))) != 0) {
52835         sp_1024_proj_point_dbl_16(r, p, t);
52836     }
52837     else {
52838         rp[0] = r;
52839 
52840         /*lint allow cast to different type of pointer*/
52841         rp[1] = (sp_point_1024*)t; /*lint !e9087 !e740*/
52842         XMEMSET(rp[1], 0, sizeof(sp_point_1024));
52843         x = rp[p->infinity | q->infinity]->x;
52844         y = rp[p->infinity | q->infinity]->y;
52845         z = rp[p->infinity | q->infinity]->z;
52846 
52847         ap[0] = p;
52848         ap[1] = q;
52849         for (i=0; i<16; i++) {
52850             r->x[i] = ap[p->infinity]->x[i];
52851         }
52852         for (i=0; i<16; i++) {
52853             r->y[i] = ap[p->infinity]->y[i];
52854         }
52855         for (i=0; i<16; i++) {
52856             r->z[i] = ap[p->infinity]->z[i];
52857         }
52858         r->infinity = ap[p->infinity]->infinity;
52859 
52860         /* U2 = X2*Z1^2 */
52861         sp_1024_mont_sqr_16(t2, z, p1024_mod, p1024_mp_mod);
52862         sp_1024_mont_mul_16(t4, t2, z, p1024_mod, p1024_mp_mod);
52863         sp_1024_mont_mul_16(t2, t2, q->x, p1024_mod, p1024_mp_mod);
52864         /* S2 = Y2*Z1^3 */
52865         sp_1024_mont_mul_16(t4, t4, q->y, p1024_mod, p1024_mp_mod);
52866         /* H = U2 - X1 */
52867         sp_1024_mont_sub_16(t2, t2, x, p1024_mod);
52868         /* R = S2 - Y1 */
52869         sp_1024_mont_sub_16(t4, t4, y, p1024_mod);
52870         /* Z3 = H*Z1 */
52871         sp_1024_mont_mul_16(z, z, t2, p1024_mod, p1024_mp_mod);
52872         /* X3 = R^2 - H^3 - 2*X1*H^2 */
52873         sp_1024_mont_sqr_16(t1, t4, p1024_mod, p1024_mp_mod);
52874         sp_1024_mont_sqr_16(t5, t2, p1024_mod, p1024_mp_mod);
52875         sp_1024_mont_mul_16(t3, x, t5, p1024_mod, p1024_mp_mod);
52876         sp_1024_mont_mul_16(t5, t5, t2, p1024_mod, p1024_mp_mod);
52877         sp_1024_mont_sub_16(x, t1, t5, p1024_mod);
52878         sp_1024_mont_dbl_16(t1, t3, p1024_mod);
52879         sp_1024_mont_sub_16(x, x, t1, p1024_mod);
52880         /* Y3 = R*(X1*H^2 - X3) - Y1*H^3 */
52881         sp_1024_mont_sub_16(t3, t3, x, p1024_mod);
52882         sp_1024_mont_mul_16(t3, t3, t4, p1024_mod, p1024_mp_mod);
52883         sp_1024_mont_mul_16(t5, t5, y, p1024_mod, p1024_mp_mod);
52884         sp_1024_mont_sub_16(y, t3, t5, p1024_mod);
52885     }
52886 }
52887 
52888 #if defined(FP_ECC) || !defined(WOLFSSL_SP_SMALL)
52889 /* Convert the projective point to affine.
52890  * Ordinates are in Montgomery form.
52891  *
52892  * a  Point to convert.
52893  * t  Temporary data.
52894  */
sp_1024_proj_to_affine_16(sp_point_1024 * a,sp_digit * t)52895 static void sp_1024_proj_to_affine_16(sp_point_1024* a, sp_digit* t)
52896 {
52897     sp_digit* t1 = t;
52898     sp_digit* t2 = t + 2 * 16;
52899     sp_digit* tmp = t + 4 * 16;
52900 
52901     sp_1024_mont_inv_16(t1, a->z, tmp);
52902 
52903     sp_1024_mont_sqr_16(t2, t1, p1024_mod, p1024_mp_mod);
52904     sp_1024_mont_mul_16(t1, t2, t1, p1024_mod, p1024_mp_mod);
52905 
52906     sp_1024_mont_mul_16(a->x, a->x, t2, p1024_mod, p1024_mp_mod);
52907     sp_1024_mont_mul_16(a->y, a->y, t1, p1024_mod, p1024_mp_mod);
52908     XMEMCPY(a->z, p1024_norm_mod, sizeof(p1024_norm_mod));
52909 }
52910 
52911 /* Generate the pre-computed table of points for the base point.
52912  *
52913  * width = 8
52914  * 256 entries
52915  * 128 bits between
52916  *
52917  * a      The base point.
52918  * table  Place to store generated point data.
52919  * tmp    Temporary data.
52920  * heap  Heap to use for allocation.
52921  */
sp_1024_gen_stripe_table_16(const sp_point_1024 * a,sp_table_entry_1024 * table,sp_digit * tmp,void * heap)52922 static int sp_1024_gen_stripe_table_16(const sp_point_1024* a,
52923         sp_table_entry_1024* table, sp_digit* tmp, void* heap)
52924 {
52925 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
52926     sp_point_1024* t = NULL;
52927 #else
52928     sp_point_1024 t[3];
52929 #endif
52930     sp_point_1024* s1 = NULL;
52931     sp_point_1024* s2 = NULL;
52932     int i;
52933     int j;
52934     int err = MP_OKAY;
52935 
52936     (void)heap;
52937 
52938 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
52939     t = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024) * 3, heap,
52940                                      DYNAMIC_TYPE_ECC);
52941     if (t == NULL)
52942         err = MEMORY_E;
52943 #endif
52944 
52945     if (err == MP_OKAY) {
52946         s1 = t + 1;
52947         s2 = t + 2;
52948 
52949         err = sp_1024_mod_mul_norm_16(t->x, a->x, p1024_mod);
52950     }
52951     if (err == MP_OKAY) {
52952         err = sp_1024_mod_mul_norm_16(t->y, a->y, p1024_mod);
52953     }
52954     if (err == MP_OKAY) {
52955         err = sp_1024_mod_mul_norm_16(t->z, a->z, p1024_mod);
52956     }
52957     if (err == MP_OKAY) {
52958         t->infinity = 0;
52959         sp_1024_proj_to_affine_16(t, tmp);
52960 
52961         XMEMCPY(s1->z, p1024_norm_mod, sizeof(p1024_norm_mod));
52962         s1->infinity = 0;
52963         XMEMCPY(s2->z, p1024_norm_mod, sizeof(p1024_norm_mod));
52964         s2->infinity = 0;
52965 
52966         /* table[0] = {0, 0, infinity} */
52967         XMEMSET(&table[0], 0, sizeof(sp_table_entry_1024));
52968         /* table[1] = Affine version of 'a' in Montgomery form */
52969         XMEMCPY(table[1].x, t->x, sizeof(table->x));
52970         XMEMCPY(table[1].y, t->y, sizeof(table->y));
52971 
52972         for (i=1; i<8; i++) {
52973             sp_1024_proj_point_dbl_n_16(t, 128, tmp);
52974             sp_1024_proj_to_affine_16(t, tmp);
52975             XMEMCPY(table[1<<i].x, t->x, sizeof(table->x));
52976             XMEMCPY(table[1<<i].y, t->y, sizeof(table->y));
52977         }
52978 
52979         for (i=1; i<8; i++) {
52980             XMEMCPY(s1->x, table[1<<i].x, sizeof(table->x));
52981             XMEMCPY(s1->y, table[1<<i].y, sizeof(table->y));
52982             for (j=(1<<i)+1; j<(1<<(i+1)); j++) {
52983                 XMEMCPY(s2->x, table[j-(1<<i)].x, sizeof(table->x));
52984                 XMEMCPY(s2->y, table[j-(1<<i)].y, sizeof(table->y));
52985                 sp_1024_proj_point_add_qz1_16(t, s1, s2, tmp);
52986                 sp_1024_proj_to_affine_16(t, tmp);
52987                 XMEMCPY(table[j].x, t->x, sizeof(table->x));
52988                 XMEMCPY(table[j].y, t->y, sizeof(table->y));
52989             }
52990         }
52991     }
52992 
52993 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
52994     if (t != NULL)
52995         XFREE(t, heap, DYNAMIC_TYPE_ECC);
52996 #endif
52997 
52998     return err;
52999 }
53000 
53001 #endif /* FP_ECC | !WOLFSSL_SP_SMALL */
53002 /* Multiply the point by the scalar and return the result.
53003  * If map is true then convert result to affine coordinates.
53004  *
53005  * Stripe implementation.
53006  * Pre-generated: 2^0, 2^128, ...
53007  * Pre-generated: products of all combinations of above.
53008  * 8 doubles and adds (with qz=1)
53009  *
53010  * r      Resulting point.
53011  * k      Scalar to multiply by.
53012  * table  Pre-computed table.
53013  * map    Indicates whether to convert result to affine.
53014  * ct     Constant time required.
53015  * heap   Heap to use for allocation.
53016  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
53017  */
sp_1024_ecc_mulmod_stripe_16(sp_point_1024 * r,const sp_point_1024 * g,const sp_table_entry_1024 * table,const sp_digit * k,int map,int ct,void * heap)53018 static int sp_1024_ecc_mulmod_stripe_16(sp_point_1024* r, const sp_point_1024* g,
53019         const sp_table_entry_1024* table, const sp_digit* k, int map,
53020         int ct, void* heap)
53021 {
53022 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
53023     sp_point_1024* rt = NULL;
53024     sp_digit* t = NULL;
53025 #else
53026     sp_point_1024 rt[2];
53027     sp_digit t[2 * 16 * 5];
53028 #endif
53029     sp_point_1024* p = NULL;
53030     int i;
53031     int j;
53032     int y;
53033     int x;
53034     int err = MP_OKAY;
53035 
53036     (void)g;
53037     /* Constant time used for cache attack resistance implementation. */
53038     (void)ct;
53039     (void)heap;
53040 
53041 
53042 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
53043     rt = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024) * 2, heap,
53044                                       DYNAMIC_TYPE_ECC);
53045     if (rt == NULL)
53046         err = MEMORY_E;
53047     if (err == MP_OKAY) {
53048         t = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 16 * 5, heap,
53049                                DYNAMIC_TYPE_ECC);
53050         if (t == NULL)
53051             err = MEMORY_E;
53052     }
53053 #endif
53054 
53055     if (err == MP_OKAY) {
53056         p = rt + 1;
53057 
53058         XMEMCPY(p->z, p1024_norm_mod, sizeof(p1024_norm_mod));
53059         XMEMCPY(rt->z, p1024_norm_mod, sizeof(p1024_norm_mod));
53060 
53061         y = 0;
53062         x = 127;
53063         for (j=0; j<8; j++) {
53064             y |= (int)(((k[x / 64] >> (x % 64)) & 1) << j);
53065             x += 128;
53066         }
53067         XMEMCPY(rt->x, table[y].x, sizeof(table[y].x));
53068         XMEMCPY(rt->y, table[y].y, sizeof(table[y].y));
53069         rt->infinity = !y;
53070         for (i=126; i>=0; i--) {
53071             y = 0;
53072             x = i;
53073             for (j=0; j<8; j++) {
53074                 y |= (int)(((k[x / 64] >> (x % 64)) & 1) << j);
53075                 x += 128;
53076             }
53077 
53078             sp_1024_proj_point_dbl_16(rt, rt, t);
53079             XMEMCPY(p->x, table[y].x, sizeof(table[y].x));
53080             XMEMCPY(p->y, table[y].y, sizeof(table[y].y));
53081             p->infinity = !y;
53082             sp_1024_proj_point_add_qz1_16(rt, rt, p, t);
53083         }
53084 
53085         if (map != 0) {
53086             sp_1024_map_16(r, rt, t);
53087         }
53088         else {
53089             XMEMCPY(r, rt, sizeof(sp_point_1024));
53090         }
53091     }
53092 
53093 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
53094     if (t != NULL)
53095         XFREE(t, heap, DYNAMIC_TYPE_ECC);
53096     if (rt != NULL)
53097         XFREE(rt, heap, DYNAMIC_TYPE_ECC);
53098 #endif
53099 
53100     return err;
53101 }
53102 
53103 #ifdef FP_ECC
53104 #ifndef FP_ENTRIES
53105     #define FP_ENTRIES 16
53106 #endif
53107 
53108 /* Cache entry - holds precomputation tables for a point. */
53109 typedef struct sp_cache_1024_t {
53110     /* X ordinate of point that table was generated from. */
53111     sp_digit x[16];
53112     /* Y ordinate of point that table was generated from. */
53113     sp_digit y[16];
53114     /* Precomputation table for point. */
53115     sp_table_entry_1024 table[256];
53116     /* Count of entries in table. */
53117     uint32_t cnt;
53118     /* Point and table set in entry. */
53119     int set;
53120 } sp_cache_1024_t;
53121 
53122 /* Cache of tables. */
53123 static THREAD_LS_T sp_cache_1024_t sp_cache_1024[FP_ENTRIES];
53124 /* Index of last entry in cache. */
53125 static THREAD_LS_T int sp_cache_1024_last = -1;
53126 /* Cache has been initialized. */
53127 static THREAD_LS_T int sp_cache_1024_inited = 0;
53128 
53129 #ifndef HAVE_THREAD_LS
53130     static volatile int initCacheMutex_1024 = 0;
53131     static wolfSSL_Mutex sp_cache_1024_lock;
53132 #endif
53133 
53134 /* Get the cache entry for the point.
53135  *
53136  * g      [in]   Point scalar multipling.
53137  * cache  [out]  Cache table to use.
53138  */
sp_ecc_get_cache_1024(const sp_point_1024 * g,sp_cache_1024_t ** cache)53139 static void sp_ecc_get_cache_1024(const sp_point_1024* g, sp_cache_1024_t** cache)
53140 {
53141     int i;
53142     int j;
53143     uint32_t least;
53144 
53145     if (sp_cache_1024_inited == 0) {
53146         for (i=0; i<FP_ENTRIES; i++) {
53147             sp_cache_1024[i].set = 0;
53148         }
53149         sp_cache_1024_inited = 1;
53150     }
53151 
53152     /* Compare point with those in cache. */
53153     for (i=0; i<FP_ENTRIES; i++) {
53154         if (!sp_cache_1024[i].set)
53155             continue;
53156 
53157         if (sp_1024_cmp_equal_16(g->x, sp_cache_1024[i].x) &
53158                            sp_1024_cmp_equal_16(g->y, sp_cache_1024[i].y)) {
53159             sp_cache_1024[i].cnt++;
53160             break;
53161         }
53162     }
53163 
53164     /* No match. */
53165     if (i == FP_ENTRIES) {
53166         /* Find empty entry. */
53167         i = (sp_cache_1024_last + 1) % FP_ENTRIES;
53168         for (; i != sp_cache_1024_last; i=(i+1)%FP_ENTRIES) {
53169             if (!sp_cache_1024[i].set) {
53170                 break;
53171             }
53172         }
53173 
53174         /* Evict least used. */
53175         if (i == sp_cache_1024_last) {
53176             least = sp_cache_1024[0].cnt;
53177             for (j=1; j<FP_ENTRIES; j++) {
53178                 if (sp_cache_1024[j].cnt < least) {
53179                     i = j;
53180                     least = sp_cache_1024[i].cnt;
53181                 }
53182             }
53183         }
53184 
53185         XMEMCPY(sp_cache_1024[i].x, g->x, sizeof(sp_cache_1024[i].x));
53186         XMEMCPY(sp_cache_1024[i].y, g->y, sizeof(sp_cache_1024[i].y));
53187         sp_cache_1024[i].set = 1;
53188         sp_cache_1024[i].cnt = 1;
53189     }
53190 
53191     *cache = &sp_cache_1024[i];
53192     sp_cache_1024_last = i;
53193 }
53194 #endif /* FP_ECC */
53195 
53196 /* Multiply the base point of P1024 by the scalar and return the result.
53197  * If map is true then convert result to affine coordinates.
53198  *
53199  * r     Resulting point.
53200  * g     Point to multiply.
53201  * k     Scalar to multiply by.
53202  * map   Indicates whether to convert result to affine.
53203  * ct    Constant time required.
53204  * heap  Heap to use for allocation.
53205  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
53206  */
sp_1024_ecc_mulmod_16(sp_point_1024 * r,const sp_point_1024 * g,const sp_digit * k,int map,int ct,void * heap)53207 static int sp_1024_ecc_mulmod_16(sp_point_1024* r, const sp_point_1024* g, const sp_digit* k,
53208         int map, int ct, void* heap)
53209 {
53210 #ifndef FP_ECC
53211     return sp_1024_ecc_mulmod_win_add_sub_16(r, g, k, map, ct, heap);
53212 #else
53213     sp_digit tmp[2 * 16 * 5];
53214     sp_cache_1024_t* cache;
53215     int err = MP_OKAY;
53216 
53217 #ifndef HAVE_THREAD_LS
53218     if (initCacheMutex_1024 == 0) {
53219          wc_InitMutex(&sp_cache_1024_lock);
53220          initCacheMutex_1024 = 1;
53221     }
53222     if (wc_LockMutex(&sp_cache_1024_lock) != 0)
53223        err = BAD_MUTEX_E;
53224 #endif /* HAVE_THREAD_LS */
53225 
53226     if (err == MP_OKAY) {
53227         sp_ecc_get_cache_1024(g, &cache);
53228         if (cache->cnt == 2)
53229             sp_1024_gen_stripe_table_16(g, cache->table, tmp, heap);
53230 
53231 #ifndef HAVE_THREAD_LS
53232         wc_UnLockMutex(&sp_cache_1024_lock);
53233 #endif /* HAVE_THREAD_LS */
53234 
53235         if (cache->cnt < 2) {
53236             err = sp_1024_ecc_mulmod_win_add_sub_16(r, g, k, map, ct, heap);
53237         }
53238         else {
53239             err = sp_1024_ecc_mulmod_stripe_16(r, g, cache->table, k,
53240                     map, ct, heap);
53241         }
53242     }
53243 
53244     return err;
53245 #endif
53246 }
53247 
53248 #ifdef HAVE_INTEL_AVX2
53249 #ifdef FP_ECC
53250 #endif /* FP_ECC */
53251 /* Add two Montgomery form projective points. The second point has a q value of
53252  * one.
53253  * Only the first point can be the same pointer as the result point.
53254  *
53255  * r  Result of addition.
53256  * p  First point to add.
53257  * q  Second point to add.
53258  * t  Temporary ordinate data.
53259  */
sp_1024_proj_point_add_qz1_avx2_16(sp_point_1024 * r,const sp_point_1024 * p,const sp_point_1024 * q,sp_digit * t)53260 static void sp_1024_proj_point_add_qz1_avx2_16(sp_point_1024* r, const sp_point_1024* p,
53261         const sp_point_1024* q, sp_digit* t)
53262 {
53263     const sp_point_1024* ap[2];
53264     sp_point_1024* rp[2];
53265     sp_digit* t1 = t;
53266     sp_digit* t2 = t + 2*16;
53267     sp_digit* t3 = t + 4*16;
53268     sp_digit* t4 = t + 6*16;
53269     sp_digit* t5 = t + 8*16;
53270     sp_digit* x;
53271     sp_digit* y;
53272     sp_digit* z;
53273     int i;
53274 
53275     /* Check double */
53276     (void)sp_1024_mont_sub_avx2_16(t1, p1024_mod, q->y, p1024_mod);
53277     sp_1024_norm_16(t1);
53278     if ((sp_1024_cmp_equal_16(p->x, q->x) & sp_1024_cmp_equal_16(p->z, q->z) &
53279         (sp_1024_cmp_equal_16(p->y, q->y) | sp_1024_cmp_equal_16(p->y, t1))) != 0) {
53280         sp_1024_proj_point_dbl_avx2_16(r, p, t);
53281     }
53282     else {
53283         rp[0] = r;
53284 
53285         /*lint allow cast to different type of pointer*/
53286         rp[1] = (sp_point_1024*)t; /*lint !e9087 !e740*/
53287         XMEMSET(rp[1], 0, sizeof(sp_point_1024));
53288         x = rp[p->infinity | q->infinity]->x;
53289         y = rp[p->infinity | q->infinity]->y;
53290         z = rp[p->infinity | q->infinity]->z;
53291 
53292         ap[0] = p;
53293         ap[1] = q;
53294         for (i=0; i<16; i++) {
53295             r->x[i] = ap[p->infinity]->x[i];
53296         }
53297         for (i=0; i<16; i++) {
53298             r->y[i] = ap[p->infinity]->y[i];
53299         }
53300         for (i=0; i<16; i++) {
53301             r->z[i] = ap[p->infinity]->z[i];
53302         }
53303         r->infinity = ap[p->infinity]->infinity;
53304 
53305         /* U2 = X2*Z1^2 */
53306         sp_1024_mont_sqr_avx2_16(t2, z, p1024_mod, p1024_mp_mod);
53307         sp_1024_mont_mul_avx2_16(t4, t2, z, p1024_mod, p1024_mp_mod);
53308         sp_1024_mont_mul_avx2_16(t2, t2, q->x, p1024_mod, p1024_mp_mod);
53309         /* S2 = Y2*Z1^3 */
53310         sp_1024_mont_mul_avx2_16(t4, t4, q->y, p1024_mod, p1024_mp_mod);
53311         /* H = U2 - X1 */
53312         sp_1024_mont_sub_avx2_16(t2, t2, x, p1024_mod);
53313         /* R = S2 - Y1 */
53314         sp_1024_mont_sub_avx2_16(t4, t4, y, p1024_mod);
53315         /* Z3 = H*Z1 */
53316         sp_1024_mont_mul_avx2_16(z, z, t2, p1024_mod, p1024_mp_mod);
53317         /* X3 = R^2 - H^3 - 2*X1*H^2 */
53318         sp_1024_mont_sqr_avx2_16(t1, t4, p1024_mod, p1024_mp_mod);
53319         sp_1024_mont_sqr_avx2_16(t5, t2, p1024_mod, p1024_mp_mod);
53320         sp_1024_mont_mul_avx2_16(t3, x, t5, p1024_mod, p1024_mp_mod);
53321         sp_1024_mont_mul_avx2_16(t5, t5, t2, p1024_mod, p1024_mp_mod);
53322         sp_1024_mont_sub_avx2_16(x, t1, t5, p1024_mod);
53323         sp_1024_mont_dbl_avx2_16(t1, t3, p1024_mod);
53324         sp_1024_mont_sub_avx2_16(x, x, t1, p1024_mod);
53325         /* Y3 = R*(X1*H^2 - X3) - Y1*H^3 */
53326         sp_1024_mont_sub_avx2_16(t3, t3, x, p1024_mod);
53327         sp_1024_mont_mul_avx2_16(t3, t3, t4, p1024_mod, p1024_mp_mod);
53328         sp_1024_mont_mul_avx2_16(t5, t5, y, p1024_mod, p1024_mp_mod);
53329         sp_1024_mont_sub_avx2_16(y, t3, t5, p1024_mod);
53330     }
53331 }
53332 
53333 #if defined(FP_ECC) || !defined(WOLFSSL_SP_SMALL)
53334 /* Convert the projective point to affine.
53335  * Ordinates are in Montgomery form.
53336  *
53337  * a  Point to convert.
53338  * t  Temporary data.
53339  */
sp_1024_proj_to_affine_avx2_16(sp_point_1024 * a,sp_digit * t)53340 static void sp_1024_proj_to_affine_avx2_16(sp_point_1024* a, sp_digit* t)
53341 {
53342     sp_digit* t1 = t;
53343     sp_digit* t2 = t + 2 * 16;
53344     sp_digit* tmp = t + 4 * 16;
53345 
53346     sp_1024_mont_inv_avx2_16(t1, a->z, tmp);
53347 
53348     sp_1024_mont_sqr_avx2_16(t2, t1, p1024_mod, p1024_mp_mod);
53349     sp_1024_mont_mul_avx2_16(t1, t2, t1, p1024_mod, p1024_mp_mod);
53350 
53351     sp_1024_mont_mul_avx2_16(a->x, a->x, t2, p1024_mod, p1024_mp_mod);
53352     sp_1024_mont_mul_avx2_16(a->y, a->y, t1, p1024_mod, p1024_mp_mod);
53353     XMEMCPY(a->z, p1024_norm_mod, sizeof(p1024_norm_mod));
53354 }
53355 
53356 /* Generate the pre-computed table of points for the base point.
53357  *
53358  * width = 8
53359  * 256 entries
53360  * 128 bits between
53361  *
53362  * a      The base point.
53363  * table  Place to store generated point data.
53364  * tmp    Temporary data.
53365  * heap  Heap to use for allocation.
53366  */
sp_1024_gen_stripe_table_avx2_16(const sp_point_1024 * a,sp_table_entry_1024 * table,sp_digit * tmp,void * heap)53367 static int sp_1024_gen_stripe_table_avx2_16(const sp_point_1024* a,
53368         sp_table_entry_1024* table, sp_digit* tmp, void* heap)
53369 {
53370 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
53371     sp_point_1024* t = NULL;
53372 #else
53373     sp_point_1024 t[3];
53374 #endif
53375     sp_point_1024* s1 = NULL;
53376     sp_point_1024* s2 = NULL;
53377     int i;
53378     int j;
53379     int err = MP_OKAY;
53380 
53381     (void)heap;
53382 
53383 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
53384     t = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024) * 3, heap,
53385                                      DYNAMIC_TYPE_ECC);
53386     if (t == NULL)
53387         err = MEMORY_E;
53388 #endif
53389 
53390     if (err == MP_OKAY) {
53391         s1 = t + 1;
53392         s2 = t + 2;
53393 
53394         err = sp_1024_mod_mul_norm_avx2_16(t->x, a->x, p1024_mod);
53395     }
53396     if (err == MP_OKAY) {
53397         err = sp_1024_mod_mul_norm_avx2_16(t->y, a->y, p1024_mod);
53398     }
53399     if (err == MP_OKAY) {
53400         err = sp_1024_mod_mul_norm_avx2_16(t->z, a->z, p1024_mod);
53401     }
53402     if (err == MP_OKAY) {
53403         t->infinity = 0;
53404         sp_1024_proj_to_affine_avx2_16(t, tmp);
53405 
53406         XMEMCPY(s1->z, p1024_norm_mod, sizeof(p1024_norm_mod));
53407         s1->infinity = 0;
53408         XMEMCPY(s2->z, p1024_norm_mod, sizeof(p1024_norm_mod));
53409         s2->infinity = 0;
53410 
53411         /* table[0] = {0, 0, infinity} */
53412         XMEMSET(&table[0], 0, sizeof(sp_table_entry_1024));
53413         /* table[1] = Affine version of 'a' in Montgomery form */
53414         XMEMCPY(table[1].x, t->x, sizeof(table->x));
53415         XMEMCPY(table[1].y, t->y, sizeof(table->y));
53416 
53417         for (i=1; i<8; i++) {
53418             sp_1024_proj_point_dbl_n_avx2_16(t, 128, tmp);
53419             sp_1024_proj_to_affine_avx2_16(t, tmp);
53420             XMEMCPY(table[1<<i].x, t->x, sizeof(table->x));
53421             XMEMCPY(table[1<<i].y, t->y, sizeof(table->y));
53422         }
53423 
53424         for (i=1; i<8; i++) {
53425             XMEMCPY(s1->x, table[1<<i].x, sizeof(table->x));
53426             XMEMCPY(s1->y, table[1<<i].y, sizeof(table->y));
53427             for (j=(1<<i)+1; j<(1<<(i+1)); j++) {
53428                 XMEMCPY(s2->x, table[j-(1<<i)].x, sizeof(table->x));
53429                 XMEMCPY(s2->y, table[j-(1<<i)].y, sizeof(table->y));
53430                 sp_1024_proj_point_add_qz1_avx2_16(t, s1, s2, tmp);
53431                 sp_1024_proj_to_affine_avx2_16(t, tmp);
53432                 XMEMCPY(table[j].x, t->x, sizeof(table->x));
53433                 XMEMCPY(table[j].y, t->y, sizeof(table->y));
53434             }
53435         }
53436     }
53437 
53438 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
53439     if (t != NULL)
53440         XFREE(t, heap, DYNAMIC_TYPE_ECC);
53441 #endif
53442 
53443     return err;
53444 }
53445 
53446 #endif /* FP_ECC | !WOLFSSL_SP_SMALL */
53447 /* Multiply the point by the scalar and return the result.
53448  * If map is true then convert result to affine coordinates.
53449  *
53450  * Stripe implementation.
53451  * Pre-generated: 2^0, 2^128, ...
53452  * Pre-generated: products of all combinations of above.
53453  * 8 doubles and adds (with qz=1)
53454  *
53455  * r      Resulting point.
53456  * k      Scalar to multiply by.
53457  * table  Pre-computed table.
53458  * map    Indicates whether to convert result to affine.
53459  * ct     Constant time required.
53460  * heap   Heap to use for allocation.
53461  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
53462  */
sp_1024_ecc_mulmod_stripe_avx2_16(sp_point_1024 * r,const sp_point_1024 * g,const sp_table_entry_1024 * table,const sp_digit * k,int map,int ct,void * heap)53463 static int sp_1024_ecc_mulmod_stripe_avx2_16(sp_point_1024* r, const sp_point_1024* g,
53464         const sp_table_entry_1024* table, const sp_digit* k, int map,
53465         int ct, void* heap)
53466 {
53467 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
53468     sp_point_1024* rt = NULL;
53469     sp_digit* t = NULL;
53470 #else
53471     sp_point_1024 rt[2];
53472     sp_digit t[2 * 16 * 5];
53473 #endif
53474     sp_point_1024* p = NULL;
53475     int i;
53476     int j;
53477     int y;
53478     int x;
53479     int err = MP_OKAY;
53480 
53481     (void)g;
53482     /* Constant time used for cache attack resistance implementation. */
53483     (void)ct;
53484     (void)heap;
53485 
53486 
53487 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
53488     rt = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024) * 2, heap,
53489                                       DYNAMIC_TYPE_ECC);
53490     if (rt == NULL)
53491         err = MEMORY_E;
53492     if (err == MP_OKAY) {
53493         t = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 16 * 5, heap,
53494                                DYNAMIC_TYPE_ECC);
53495         if (t == NULL)
53496             err = MEMORY_E;
53497     }
53498 #endif
53499 
53500     if (err == MP_OKAY) {
53501         p = rt + 1;
53502 
53503         XMEMCPY(p->z, p1024_norm_mod, sizeof(p1024_norm_mod));
53504         XMEMCPY(rt->z, p1024_norm_mod, sizeof(p1024_norm_mod));
53505 
53506         y = 0;
53507         x = 127;
53508         for (j=0; j<8; j++) {
53509             y |= (int)(((k[x / 64] >> (x % 64)) & 1) << j);
53510             x += 128;
53511         }
53512         XMEMCPY(rt->x, table[y].x, sizeof(table[y].x));
53513         XMEMCPY(rt->y, table[y].y, sizeof(table[y].y));
53514         rt->infinity = !y;
53515         for (i=126; i>=0; i--) {
53516             y = 0;
53517             x = i;
53518             for (j=0; j<8; j++) {
53519                 y |= (int)(((k[x / 64] >> (x % 64)) & 1) << j);
53520                 x += 128;
53521             }
53522 
53523             sp_1024_proj_point_dbl_avx2_16(rt, rt, t);
53524             XMEMCPY(p->x, table[y].x, sizeof(table[y].x));
53525             XMEMCPY(p->y, table[y].y, sizeof(table[y].y));
53526             p->infinity = !y;
53527             sp_1024_proj_point_add_qz1_avx2_16(rt, rt, p, t);
53528         }
53529 
53530         if (map != 0) {
53531             sp_1024_map_avx2_16(r, rt, t);
53532         }
53533         else {
53534             XMEMCPY(r, rt, sizeof(sp_point_1024));
53535         }
53536     }
53537 
53538 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
53539     if (t != NULL)
53540         XFREE(t, heap, DYNAMIC_TYPE_ECC);
53541     if (rt != NULL)
53542         XFREE(rt, heap, DYNAMIC_TYPE_ECC);
53543 #endif
53544 
53545     return err;
53546 }
53547 
53548 /* Multiply the base point of P1024 by the scalar and return the result.
53549  * If map is true then convert result to affine coordinates.
53550  *
53551  * r     Resulting point.
53552  * g     Point to multiply.
53553  * k     Scalar to multiply by.
53554  * map   Indicates whether to convert result to affine.
53555  * ct    Constant time required.
53556  * heap  Heap to use for allocation.
53557  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
53558  */
sp_1024_ecc_mulmod_avx2_16(sp_point_1024 * r,const sp_point_1024 * g,const sp_digit * k,int map,int ct,void * heap)53559 static int sp_1024_ecc_mulmod_avx2_16(sp_point_1024* r, const sp_point_1024* g, const sp_digit* k,
53560         int map, int ct, void* heap)
53561 {
53562 #ifndef FP_ECC
53563     return sp_1024_ecc_mulmod_win_add_sub_avx2_16(r, g, k, map, ct, heap);
53564 #else
53565     sp_digit tmp[2 * 16 * 5];
53566     sp_cache_1024_t* cache;
53567     int err = MP_OKAY;
53568 
53569 #ifndef HAVE_THREAD_LS
53570     if (initCacheMutex_1024 == 0) {
53571          wc_InitMutex(&sp_cache_1024_lock);
53572          initCacheMutex_1024 = 1;
53573     }
53574     if (wc_LockMutex(&sp_cache_1024_lock) != 0)
53575        err = BAD_MUTEX_E;
53576 #endif /* HAVE_THREAD_LS */
53577 
53578     if (err == MP_OKAY) {
53579         sp_ecc_get_cache_1024(g, &cache);
53580         if (cache->cnt == 2)
53581             sp_1024_gen_stripe_table_avx2_16(g, cache->table, tmp, heap);
53582 
53583 #ifndef HAVE_THREAD_LS
53584         wc_UnLockMutex(&sp_cache_1024_lock);
53585 #endif /* HAVE_THREAD_LS */
53586 
53587         if (cache->cnt < 2) {
53588             err = sp_1024_ecc_mulmod_win_add_sub_avx2_16(r, g, k, map, ct, heap);
53589         }
53590         else {
53591             err = sp_1024_ecc_mulmod_stripe_avx2_16(r, g, cache->table, k,
53592                     map, ct, heap);
53593         }
53594     }
53595 
53596     return err;
53597 #endif
53598 }
53599 
53600 #endif /* HAVE_INTEL_AVX2 */
53601 /* Multiply the point by the scalar and return the result.
53602  * If map is true then convert result to affine coordinates.
53603  *
53604  * km    Scalar to multiply by.
53605  * p     Point to multiply.
53606  * r     Resulting point.
53607  * map   Indicates whether to convert result to affine.
53608  * heap  Heap to use for allocation.
53609  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
53610  */
sp_ecc_mulmod_1024(const mp_int * km,const ecc_point * gm,ecc_point * r,int map,void * heap)53611 int sp_ecc_mulmod_1024(const mp_int* km, const ecc_point* gm, ecc_point* r,
53612         int map, void* heap)
53613 {
53614 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
53615     sp_point_1024* point = NULL;
53616     sp_digit* k = NULL;
53617 #else
53618     sp_point_1024 point[1];
53619     sp_digit k[16];
53620 #endif
53621     int err = MP_OKAY;
53622 #ifdef HAVE_INTEL_AVX2
53623     word32 cpuid_flags = cpuid_get_flags();
53624 #endif
53625 
53626 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
53627     point = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024), heap,
53628                                          DYNAMIC_TYPE_ECC);
53629     if (point == NULL)
53630         err = MEMORY_E;
53631     if (err == MP_OKAY) {
53632         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 16, heap,
53633                                DYNAMIC_TYPE_ECC);
53634         if (k == NULL)
53635             err = MEMORY_E;
53636     }
53637 #endif
53638 
53639     if (err == MP_OKAY) {
53640         sp_1024_from_mp(k, 16, km);
53641         sp_1024_point_from_ecc_point_16(point, gm);
53642 
53643 #ifdef HAVE_INTEL_AVX2
53644         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
53645             err = sp_1024_ecc_mulmod_avx2_16(point, point, k, map, 1, heap);
53646         else
53647 #endif
53648             err = sp_1024_ecc_mulmod_16(point, point, k, map, 1, heap);
53649     }
53650     if (err == MP_OKAY) {
53651         err = sp_1024_point_to_ecc_point_16(point, r);
53652     }
53653 
53654 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
53655     if (k != NULL)
53656         XFREE(k, heap, DYNAMIC_TYPE_ECC);
53657     if (point != NULL)
53658         XFREE(point, heap, DYNAMIC_TYPE_ECC);
53659 #endif
53660 
53661     return err;
53662 }
53663 
53664 /* Striping precomputation table.
53665  * 8 points combined into a table of 256 points.
53666  * Distance of 128 between points.
53667  */
53668 static const sp_table_entry_1024 p1024_table[256] = {
53669     /* 0 */
53670     { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
53671         0x00, 0x00, 0x00, 0x00 },
53672       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
53673         0x00, 0x00, 0x00, 0x00 } },
53674     /* 1 */
53675     { { 0xbf9c7ec6e0162bc2L,0xddecc6e310a89289L,0x5d599df09e499d81L,
53676         0x9a96ea286d358218L,0x01aec7d370c5f8dbL,0xe72e49958cf5d066L,
53677         0xc2e7297d3e91d7f8L,0x8621db92da9f2f5aL,0x4b26c8675a5679edL,
53678         0x233385df2c56aac1L,0xb88e74d4c6a13f99L,0x1214b173ffa8ec11L,
53679         0xa0386a271f3f9fefL,0xbd9b1b4ec0e7b44eL,0xafe528dceecd3496L,
53680         0x8dfff96a1c49f80bL },
53681       { 0xb4a4753ac03c0c83L,0x68e69d18abcdcd75L,0xe3839b88f775b649L,
53682         0x803f949abf58f352L,0x5f702679bd0bc15cL,0x85bf5d168ff298c2L,
53683         0x3f6ebd98c6c7976eL,0x20618af445e3e1b4L,0x67d5598e54e64093L,
53684         0xb047283b504fed9eL,0x450cabfd70d87517L,0x47d628bf3f5addbeL,
53685         0x0037ef3078cb4ccaL,0x4e148d3c6b1c4908L,0xe256d3294fcfd837L,
53686         0x2aa1207bde3c01f3L } },
53687     /* 2 */
53688     { { 0xa95b6dae01900955L,0xa5dc9cc1ceb4656dL,0x50c78907e72fe95bL,
53689         0xa1ae5447a040c334L,0x911913707952ea6eL,0x54ff73436d097305L,
53690         0xa4db0074bda4d10fL,0xfd5306f191644070L,0x14b9fe738b24522cL,
53691         0x1468dad67849f762L,0x87b29a18b0dcd2e4L,0xadd7f1a15e1ad492L,
53692         0x9ac63a81dbba2a1aL,0x01379c5b81223379L,0xf402b2f0b0e53bc8L,
53693         0x8c3eb27f0bf13b61L },
53694       { 0x9a4ad3e1e513696fL,0x0350ba5c18c81ffaL,0x1e2fc1363c033d13L,
53695         0x53da6e7117a531bcL,0x42ec64901aed610dL,0xd33e8df7e99ff567L,
53696         0xe4aad73e3deed12aL,0xd983b465180f4debL,0x99365269502f30b4L,
53697         0x7e2799aba8918d7fL,0x0ffe84b6700fc79aL,0x7b4400d640bfd8c2L,
53698         0xc3a21d215d2641bdL,0x79839442c32621cbL,0xace6500bb1401e83L,
53699         0x7bf4163e251c4310L } },
53700     /* 3 */
53701     { { 0x1c174f88e3fd589eL,0xdb501790df974a03L,0xd09623e33e70549fL,
53702         0x8d091eff15924f34L,0xeef79cadf9b65ac5L,0xd2cc42623f69c2cfL,
53703         0x817d903252cd82bcL,0xacf4f4d9a5f1ddddL,0xd06126355011b6bdL,
53704         0x9f74490d2ed140c9L,0x64092e8c4db686d2L,0x225eef16776b0fccL,
53705         0x0e8c01e9df16aeb6L,0x6283674184bbd82aL,0x757574e28956e337L,
53706         0x9871edc6705a7f07L },
53707       { 0xbd0b76d5776535f7L,0x5214d6022635b3b8L,0xc0c25ad99d216f64L,
53708         0xfd4df3a75515bf75L,0x24a625bc5e9f1675L,0x3c35efb7406873e7L,
53709         0xef5c9a33bb2e5c4aL,0xa971b35e806b198aL,0x9f5c0ca5a3c690edL,
53710         0xa8d5dd898e1e2341L,0x4cecbcce955ad9e4L,0x2ecf4407248d3416L,
53711         0x1abb381145c0af6eL,0x3f4bee821c780fffL,0xd14df768c272ed57L,
53712         0x397ed10a371637adL } },
53713     /* 4 */
53714     { { 0xcf3e0bb2755c2a27L,0xd38e42f959585c44L,0x46b13e0f19285e60L,
53715         0xc3ecd0c076273d0fL,0x7800f085193c569aL,0xf04e74ab4351818aL,
53716         0x9258aa388496363bL,0x8456617cb8c894feL,0x8bc62aaa2af969a0L,
53717         0x66c2280b5a4668d9L,0xbc9df58ea992f4faL,0x5db0b7d93f401e99L,
53718         0xe0614fe1c4c38c0eL,0xd531151c2ccdf6b3L,0x1c7575ece143b618L,
53719         0x40247985df9398a4L },
53720       { 0xfba251788f055746L,0xc5ba00400ab1e6e0L,0xe1b194fbac292697L,
53721         0x771521195b4f4740L,0x250091d09bb7ba54L,0x7a674861b9a139a4L,
53722         0xba8413b3f353aa7eL,0xafe771922443ceeeL,0x14468d363847bbd0L,
53723         0x61f79ff63da4942dL,0x1563a1c1d425b456L,0x3c270fcd75ff4630L,
53724         0x42072090eb2802c9L,0x68f0cdcbc85c7004L,0xca4372fbfa032e74L,
53725         0x1a6fd1e6c8b79d80L } },
53726     /* 5 */
53727     { { 0x967a901a8d5116a3L,0x0b844394b2f5f47fL,0xe39ad45260ebaf3bL,
53728         0x1e1be61760ccfc0cL,0xac07e3d2cc3f53f2L,0xdd838e0e1ed11bb6L,
53729         0x454753071c15b0c2L,0x70dd4748920fe5b8L,0x1a20be2de471896dL,
53730         0x3c3fad8a59276c7cL,0x026a1cc3c886ee07L,0x9fdb6f376e831ac4L,
53731         0x26a35d1aac501d65L,0x0ae9890540da8574L,0x65dde0a4abd734e5L,
53732         0x29b7d4dc15614750L },
53733       { 0x44b3c2cbcbf4e20bL,0x1c3f548f58cc44c5L,0x39809b545b0cac1fL,
53734         0x0c0f02b500f80621L,0xe612b890066905e0L,0x8f158ed78350188cL,
53735         0xc01dc4583f5576b2L,0x29803272a45492e0L,0x77a5623a0ff92443L,
53736         0xd12a2b0029d0dc41L,0xb41254592780e87aL,0x1ebcf9030d53f272L,
53737         0xbae6ea4024301e8dL,0x1e5f3f2fa37d0798L,0x9342c31022b4126cL,
53738         0x5d0928025382497eL } },
53739     /* 6 */
53740     { { 0x583a2b7eff2f780dL,0x34d26820d7d76b1dL,0xe3c3284786f74aecL,
53741         0x0fd4221210823febL,0x227e417efb5e7bf4L,0x510d49b6a568f8cdL,
53742         0x53bce7d61781bbecL,0x9cfe3f222f3718b7L,0x7f44e89fd9de6c1fL,
53743         0xf1cc553f3fac9b55L,0x9d2d0846e6f300bcL,0x976c82a29f0ae6b1L,
53744         0xe63dbf5e24b8bbe0L,0x4cac7f45973a5aa7L,0xc6eb623784dd33c7L,
53745         0x0a26e434142fee5dL },
53746       { 0x8081339facaa9a08L,0x40f311055246ece1L,0x892c817061393747L,
53747         0x8d8d4103242f02e1L,0x482bfd203b5de98aL,0x89ef946b5abbe952L,
53748         0xb8d218b937698249L,0xd5268e8966617c7aL,0x962e75518b7d2b91L,
53749         0x2c5c7973fe8d67c3L,0x42e3150a2b017c51L,0x6f4e5ebcc1a29469L,
53750         0xa39910ce531c7083L,0xaf4f6eb4b77b9e50L,0x68cbb175da120ad0L,
53751         0x19497c61b92636ecL } },
53752     /* 7 */
53753     { { 0x6920b0c6417659a8L,0xc77ab9c792cb28ffL,0x55b67180b687797fL,
53754         0x4caf58c1e7759363L,0x5155bdb65561b186L,0x2e64e355780f4946L,
53755         0xeb0ac9b7229a8b20L,0x88594d782571bd60L,0x5dcc0939e3fa78f9L,
53756         0x7b8b48302ac2d379L,0x505fbf60b90f1444L,0xac610e813ce4b3c1L,
53757         0x39a4f27ad59b5c18L,0x5fa339737cea0222L,0xe578730b8dff1c7bL,
53758         0x96b91b8b517bf7a6L },
53759       { 0xc1a991f49aac087cL,0xce62f74e6cfdb28dL,0x08d6ff9a5f7600d6L,
53760         0xd781cd04f917f9c9L,0x7796f5f63de52dbfL,0xe7db64e02ed72180L,
53761         0x0f0876f66fa4137dL,0x3271ee643ca1f716L,0xcb9b20587c4ab8a3L,
53762         0xcba1710739481047L,0xdf9a190d598c5c37L,0x0cb6e72a6f20e125L,
53763         0xa3142204f4f2902dL,0x42d28cb97ce2dcfbL,0xdf261b8aa3d3c351L,
53764         0x73f3d315cffc249dL } },
53765     /* 8 */
53766     { { 0x5d86855be6fd3673L,0x309b70af9d214b7bL,0x8d332f90dcc46cd3L,
53767         0xe553c015595510deL,0x5746a09638c1251cL,0xcd7cea5b85cc1bc9L,
53768         0x4ffa1468002eba8fL,0x10a3cb7022fcd77cL,0xb6999dfbc4ea05e3L,
53769         0x3375a0d04efa756eL,0x4d90279edced5fd8L,0x48192403251fd56eL,
53770         0xe87633a482a4c5f1L,0x3170d1301b34105bL,0x93998b0f7247e578L,
53771         0x88934f64436ba1faL },
53772       { 0xf09f43b04713eabcL,0x4ca7dd91accdc517L,0x27daa63bef13ca7cL,
53773         0x8b2e5a7a2588184bL,0x0a8cb612d95dc269L,0x346975a2e1f2f14cL,
53774         0x1f29b8ede172935cL,0xc3cbfd6ed40bc1e3L,0xd3f46b3f132623daL,
53775         0xc115be6dfb0b7681L,0x5e31c34556da4344L,0xa7c63f18a8e43d98L,
53776         0x55cb20834bddb4eaL,0xb16a0c384a54f58cL,0x74eacca246fd69d9L,
53777         0x0d1898bb153548e1L } },
53778     /* 9 */
53779     { { 0x4ea73461e35ef043L,0x107b67d93496b564L,0xd62c173bd0f83a3cL,
53780         0xfad4b03851d29c35L,0x3f42882a71b1c1a4L,0x5d2bcf6654b43b9eL,
53781         0xc77b15aa2abdf543L,0x5cb38a80dabe3dc1L,0x15fda0aea481673bL,
53782         0x86996b4de7b90ebeL,0x84f87e252bc8f3d8L,0xaded03d637c4e424L,
53783         0xe5ede666d7a7afd8L,0x80dd95a2a1ccb93aL,0xa55cfd2546fba391L,
53784         0x2bdab1dc46f82e60L },
53785       { 0x7a4de22bfa6fed61L,0xca458aa5cc8dd94eL,0x3e372df1071222f5L,
53786         0x06a4b44fe5aff377L,0xbc2d0ba74a738e6dL,0x1a470e1d5f31f136L,
53787         0x77ff933ae102a911L,0x8b380a50310c7885L,0x9f3c0228783fc5acL,
53788         0xec66892544725d06L,0x878f0e165ac84221L,0x9a3af1afcfda6e8aL,
53789         0x0183ed3778cd2abaL,0x32cdbd60826d0eaeL,0xb3234661cbee6415L,
53790         0x353eb892b9c10120L } },
53791     /* 10 */
53792     { { 0xc8fdcad610b5521eL,0x1a11b44052e702f0L,0x6302680d8ffda49cL,
53793         0xcdb9654acbf36badL,0x7b58ce114c10a2d7L,0x1e5d1f7de630e7e0L,
53794         0x8cbe3d7d6760a813L,0xeb35866b6480d77fL,0x58728cf37f036219L,
53795         0xdd5865ed42a8a757L,0x283f1f1d906a2870L,0x79e23fa4a51f906bL,
53796         0xf2ac6e83543b20a8L,0x4f0b6379b81e7754L,0x57fbc0d4840016eeL,
53797         0x8da20771e621b67dL },
53798       { 0x3c855004ecce65ecL,0x76d10d1fb748185eL,0x64be7bca78797ad2L,
53799         0x43444db077e54aadL,0x17b6b0c9be0df0ffL,0x8fc4256c055086a4L,
53800         0xf952c43bfd74d5a3L,0x501e005a01c4edb8L,0xd5172dfc4a57e328L,
53801         0xdb40ce4e535d6ee3L,0xbaef1e5c0c650918L,0xe85145e7857561fcL,
53802         0xe468536a34a224c6L,0x69a8e2270ec0e0a2L,0xb3f52247242b03fcL,
53803         0x862f55e2c3bebd5fL } },
53804     /* 11 */
53805     { { 0x2d6a390f226049feL,0xcc92a578dcbbc9fbL,0xa52feca497634fb7L,
53806         0x2b340cb63dea5893L,0xa39f338a2a49e916L,0x26b2df3d949e41f3L,
53807         0xc71c7cdb065a7e40L,0x4a9b84a0468281a2L,0x63eeb503731eeecaL,
53808         0xe6d0913476cbb725L,0x0cf979a9b94a678cL,0xb44d8c3b808fd9f1L,
53809         0xe60da613e0afc5b9L,0x52dce7de3ea5be69L,0x3a5d6864dc1ee74fL,
53810         0x71ab28913bc80790L },
53811       { 0xcf618fc43b5b60adL,0x0afb5e304a0c3184L,0xd22381ccbc403302L,
53812         0x33cf8953db1c0c66L,0x9c994e4da6112a8dL,0xd7aae2c3d1967a86L,
53813         0xc28d54935b7acd29L,0x8075bd136c9a57fbL,0xc9c0373e9c8427f9L,
53814         0x2cbca18d193225f5L,0x73777d13442c018cL,0xebe5ed47fbb3a727L,
53815         0x70437d491962dc18L,0xf39c1e092dc08806L,0x03e9c6f715fff35cL,
53816         0x8d087bb65e360a65L } },
53817     /* 12 */
53818     { { 0xbe2123023fdc1844L,0x6eca27ef105eac56L,0x2183a606f168a348L,
53819         0x295f807de1d7a4cbL,0x7246a6327ef5d43eL,0xae143205c77025c7L,
53820         0x4bdfc7caf3484e3eL,0xec939895df52c075L,0x82e655f6d7a9cac0L,
53821         0x985dfe208baeddb0L,0x79c817e4527de731L,0x30ce0fbc313de1eaL,
53822         0x9df95b89cc4f6cbbL,0xf2aedf1ef5bb20cdL,0xfc1e0a891a8cfb01L,
53823         0x225ed34a63edb7ecL },
53824       { 0x3e13154dbabb1a85L,0xd3d8dae71e6a565aL,0xd3217d56ab4b100fL,
53825         0xd44d934eebc78e1aL,0x0215321b48e73d37L,0xbbc90bfa201e43cbL,
53826         0x3c23f1d027500905L,0x2a2e5000c86691a1L,0x08b2bad26065841cL,
53827         0x15d41caf30026b60L,0x1712c2f45276ce61L,0x01c4c3e715932ffbL,
53828         0x7894e13d6a74caf2L,0x02d6f5df0c0537a4L,0xa8fb7602c2b1c97eL,
53829         0x612b60e5d0887c7bL } },
53830     /* 13 */
53831     { { 0xefd495cfba245d6bL,0x5cf0cbb7a2ce3ff6L,0x24da2ac0dff5feeeL,
53832         0x90c914f8cf28c6a3L,0x72fdb50d4308a56bL,0x03dbf77913d72034L,
53833         0xcfa5ec91822ac9e9L,0x0dde73c83aea3e81L,0x545ba96266289139L,
53834         0xa52f648bca6acbd3L,0xff6f276e98a0683aL,0x2536d3aca378ed52L,
53835         0x353c2c54885ac1d9L,0xcaff52da00bc84a7L,0x3971f81c37684167L,
53836         0x0f7334e1d2d7986eL },
53837       { 0xafbb5c836596067eL,0x33e54e1938c19806L,0x8285d96739cb0dccL,
53838         0x2b53f43d424035f9L,0x38c531f8dfef9095L,0x90fbe8e4db0f571aL,
53839         0x9a0c1ed2a39ca787L,0x2fecc1d6606f2620L,0x9dc890b172b7cb4aL,
53840         0xc33ca6fbccbb7868L,0xd1b11082fe73ee49L,0x590b7d17fcb66c48L,
53841         0x9356b0a686e14573L,0x75d682c4053ead85L,0xb2ae55fac54d30fbL,
53842         0x67636a72f8aee949L } },
53843     /* 14 */
53844     { { 0x638063bcb91d6beaL,0xae263a2e923ecb96L,0x9d7b0992c627aca6L,
53845         0xc6ed001a77af9e7eL,0x9214accf24aafebbL,0xa3564b9678055a90L,
53846         0x00999b1ce027499dL,0xe413a4e1e46a06a5L,0xa05d13f62e51efe7L,
53847         0x35e87d349ba843beL,0x0a6338253183159eL,0x6023e8ba54601923L,
53848         0x9b107721b7fd1cf2L,0x46b5542bfdf2fd53L,0xb314f4f81c18af38L,
53849         0x086f987660ac8965L },
53850       { 0x767019548cbb9850L,0x6210b730a20d2c8cL,0x4084d0575335670cL,
53851         0x3ecdc5950324baeaL,0x607fc5f2c76ee9b4L,0xf393d00f440ffa64L,
53852         0xe01117962dc1463cL,0xf00b82519c7725e7L,0x35e607365bd1d186L,
53853         0xf3d8554c2cf72aacL,0xb4dd0fdeefa3497dL,0xd712268cf646ad11L,
53854         0x07c20afb9f7b8eadL,0x630969d4fc06dfe5L,0x76b7df1c7245549aL,
53855         0x681f9403e61ae810L } },
53856     /* 15 */
53857     { { 0x7cad5163c9a0623bL,0xdbf8295767fab8d4L,0x2ccab0ec81af7c7cL,
53858         0x469e38c8e966d5c2L,0x34430d52f0d4e41cL,0x426075a2a52b359cL,
53859         0x242dd3e333bd0127L,0xcda3f6359fed2341L,0x4df33730d7d52ffaL,
53860         0x5fff56f07640c3efL,0x4783c21c1bbde57cL,0xd8784a2aeb8bb336L,
53861         0x1ec7c533ead08405L,0x4b7f1423f9b62bd4L,0x5543145c7075d4afL,
53862         0x0c9de94aba60590aL },
53863       { 0x8ed7273595d5682bL,0x711c42832ec276edL,0xd1f4aed58b36a0d2L,
53864         0x62ab40c48498a88fL,0x58c8fc624480f451L,0x8bc8ca4bb79cffe2L,
53865         0x90ab583c701a359dL,0xaee31a733fd5d15dL,0x02a5597bc912333cL,
53866         0x1019cae4b6c3e3c2L,0xe513042c29938088L,0x0e00283df47c8199L,
53867         0x90d68e58f2a00e92L,0x69e2df41a775ae3bL,0xb8d2eca5871c30b2L,
53868         0x733dca0ebb1de396L } },
53869     /* 16 */
53870     { { 0xf5b495d04b59213aL,0xca6720398d70200eL,0x4bcb09a62b6771c1L,
53871         0x26adeed42b9eb0cbL,0xeb5447548cdba212L,0x0e1abfcdf08890d1L,
53872         0x52509963698e46b4L,0xe1bff0b082e9c138L,0xa189e4cd51099a71L,
53873         0x2360c9bcc9b91cc7L,0x9bd4d7dc137ec4beL,0xd0356521d1519f6eL,
53874         0xbf5f6d78cf832503L,0xe43010318deea2b4L,0xc3132494ef4c319cL,
53875         0x2ab3bd470f1fa7d7L },
53876       { 0x5753b680922c9fbbL,0x869e7dc80f16c6d1L,0x83445135bac16efcL,
53877         0x4326a3b4846d1d9bL,0xb517fee3b2d62c21L,0x6905afa20b292ad5L,
53878         0x2a57131a2cadac13L,0xcd904d8febdbca8dL,0xdfeda86f3f365fb2L,
53879         0x7097b208dc7eaa1cL,0x89a35a84a45e77c0L,0x417a062ccf5d118eL,
53880         0x3c0c04a81f6e99e8L,0xc44704b0ba7a087dL,0x6f8a27d13ea22ad2L,
53881         0x93a4b4164c27d229L } },
53882     /* 17 */
53883     { { 0xd4271bc11f1efb7aL,0xae4e68e633fccc0dL,0x9d9bc8f1b11f50a8L,
53884         0x5430398faf076089L,0x45e242fb443d0e03L,0x73ec2519f6e3d4c1L,
53885         0xab70f790ba9bad09L,0xde612ad5f9add10fL,0xb837e54e14e942b4L,
53886         0x175a56d3ddb8b68aL,0xe85b233c1ac2a408L,0xf8ff6c30f0c80f94L,
53887         0x4b7f3fb7898db4f9L,0xa2c6044f45a7dcddL,0xf3abb2f6fe3d3895L,
53888         0x342ce0d732ee7763L },
53889       { 0xeb261394cf491b1fL,0xdcaaeed71909e395L,0xdcc4055a9fe4dbeaL,
53890         0x17a6611d493d604dL,0xba445a3a1ce5ebefL,0xe82e2858e3989cb5L,
53891         0xb96f428283f58406L,0x99877b99a156cf55L,0xaf906a664e166a0eL,
53892         0xcea1d353b2976d13L,0xefc16f2736c61a01L,0xdb04c433b0f55d86L,
53893         0x3cb4b2698eb34c01L,0x38d07f782ae60280L,0x43ac3bcb43be3ec5L,
53894         0x455f4af3e156fd20L } },
53895     /* 18 */
53896     { { 0xc057f262754ec21cL,0x3eacd4c9e3a1ba38L,0x3a0210d1116c1fe9L,
53897         0xe4ea4e94eacc8ab6L,0x31c00c9aea6f32caL,0x5cb6239d86b975ceL,
53898         0x654d5d8ca14ea1e9L,0x230d31f45067fc8bL,0x48bb90cb6355fecbL,
53899         0x78f81ecedc172e8eL,0x288380a8cb006737L,0x19b02e01e162d012L,
53900         0x0e087a06c5af145cL,0xf04dc8b7b72dc354L,0xf70ef2148de3c066L,
53901         0x4f14824313009fb7L },
53902       { 0x5e004fce6e2055e2L,0x89e247ea86c32067L,0x4ebcbd955f9daaa2L,
53903         0xd15f212fceb7f63bL,0x5ecc5c1f863784a0L,0x53b3800b75760251L,
53904         0xeb9301c38a6a2954L,0x0f16ba18a13cdd19L,0x8313d251887c2d24L,
53905         0xf99235859a9413f6L,0x423405e6fe3fd7c5L,0x678aeb3416e0ee05L,
53906         0x1f3be7bb3fadaab0L,0x7901fa2c82884471L,0xc950db304d662ff6L,
53907         0x74d5d2d43c01170bL } },
53908     /* 19 */
53909     { { 0xa3002dc02b5bfe11L,0x0733410d52d321e7L,0x15920f659679ba89L,
53910         0x0e248c14685b236eL,0x8cfab594346f6040L,0x9f57afb740c717f0L,
53911         0x0dbab28c66044576L,0x0fa099689cdc3247L,0x41e02ae2c230ed05L,
53912         0x0d961554e45bef74L,0x9688a982ce4d7b6fL,0xfadefac75e62d22eL,
53913         0xaf1512a6bd2cba28L,0x78868e62be7c749fL,0x88048d81ae9f5a6bL,
53914         0x6b1a5442c5857a29L },
53915       { 0x9f5ab9ad43242066L,0x0afef1b52ccca2aeL,0xb1b43ec7988edc4eL,
53916         0x0d0c00f10341b0d5L,0x4d68b8f7b50aab37L,0x9a8e4e6ff3a64a99L,
53917         0x198338fb7f1a684eL,0x8bc0e748351a0f5cL,0x2cacf2cddac44515L,
53918         0xc14d39995e9ff76bL,0x54a01b3f16393055L,0x6ac3eea5888d8376L,
53919         0xb84d9a9a723277b1L,0x99132691e11dbbbfL,0x597717aeabb67178L,
53920         0x4c2135268bb14ac8L } },
53921     /* 20 */
53922     { { 0x2e6fe0a695532833L,0xabca228ed626d067L,0x22aef3d9649e73bdL,
53923         0x2083a87af03c4c0cL,0xe954e75d35169b45L,0x577509ee74506a89L,
53924         0x49cb276e2aeacf90L,0x08275d77fa409f91L,0x61eb6f3df0bbd6b9L,
53925         0x948202cbe4132704L,0x35f3fc21b1c498b1L,0x76c68ba8361fee59L,
53926         0xa18cbbd950e051f3L,0x2384a879318e7042L,0x292abead80dd1e8bL,
53927         0x65713c295c37c334L },
53928       { 0xdccca8e9ceb77b9aL,0x2f97e72723b69469L,0xc76abee6a01d6b28L,
53929         0x3925203d5abecdfeL,0x8944808229290d70L,0xf9931424b0314438L,
53930         0x04209df17cd447c3L,0x7c6f2059c855c827L,0xd97d786256c0e069L,
53931         0x5a9db6fe412d94c4L,0x19a64591994c41ddL,0x12348aa1c89e21a3L,
53932         0xd6904b50c6a03f0eL,0x55c15156a616feacL,0x4e36d1b57cc7693bL,
53933         0x6b0e996c3bae3c38L } },
53934     /* 21 */
53935     { { 0x32789fabcceced00L,0x3237e71ae5b7aa66L,0x87b2e2692ddebcdfL,
53936         0xb7245120b61dad8fL,0xe11e5e48d35f803cL,0xfb4df5d798e50f0dL,
53937         0x60ee68b4bcd2ab92L,0x98ab2f5c1ce3363dL,0x15ba39da7cd42647L,
53938         0x1a6572eb83f4fb3fL,0x0f77de88e56f08dbL,0x1743761e172562c2L,
53939         0xbe349ff88a58f0f4L,0xe04da71b84d1d6e2L,0x368f03429e9ff3b4L,
53940         0x4022a205678223f8L },
53941       { 0x527bbd0583847375L,0x3ae56b623f451af0L,0x6198f24d4b2c7f18L,
53942         0xee323f5b4525b98dL,0xa9d8d39a0e0884b5L,0xd005d7f6fb12c776L,
53943         0xd71c483e708bc154L,0x8ca6fd28742541bcL,0x0af3dccdf8397ddbL,
53944         0xb80d31253eccf243L,0xc743a10858d81b8dL,0x3f48eb2171391f68L,
53945         0x493aff8833bb657fL,0x1d15ed6607e47e31L,0x10159b11e08279f6L,
53946         0x312179cb24a6a956L } },
53947     /* 22 */
53948     { { 0xa94cc3ca07615ac2L,0x85865e64121ad581L,0xae47616fa7986b79L,
53949         0x395a40eb9d5e0f1dL,0xa91432643d9457eaL,0x8de6d6a3fa2865d9L,
53950         0x0771db961014ae8cL,0x77a7cce6976a87cbL,0xa7de42e1143a0f60L,
53951         0xe203cc09d993d934L,0x9201869398ec4c3dL,0xd77546d83a25df4bL,
53952         0x0ad9eb4762b02d6bL,0xfaaaf208d05a7189L,0x5238181f431221bbL,
53953         0x417d6c78733511eaL },
53954       { 0x3cbd81b70e91e9a8L,0x73340418c370d6b3L,0x825db10a8eaa2373L,
53955         0x8f2b09e46c7d6756L,0xe288ee9b94c33dedL,0xcd8426bb1695e3fbL,
53956         0xa6176c86dce9e888L,0x3f4c89226165e362L,0x514e411f6063fb09L,
53957         0x6907ac20c8f9e04cL,0xcef7469cdfd2ad61L,0xba30bae48452199aL,
53958         0x3068129312ac3462L,0x011be873c92d482dL,0xff4cbf89e8330995L,
53959         0x02189d52d1470a0aL } },
53960     /* 23 */
53961     { { 0x73e419dd92599c69L,0x5b94221b7fec32caL,0xb2bf9bd209bbfbfdL,
53962         0x61ea97a463ed895bL,0x6609146b3f486f79L,0xbd1c7a05fd141a39L,
53963         0xc79ec8cf83d64135L,0x7f8fd42f9883507bL,0xafcb53b717b3d027L,
53964         0x86658dcd67ca5a21L,0xa6a6c0accd149786L,0x16f3d70e34b95067L,
53965         0x371208e3df44958cL,0xd2dd64e6ec280212L,0x33b2c4ab30782c71L,
53966         0x7bbf8abd521176faL },
53967       { 0xbe9e4aafa78b981aL,0x788b4e36304ec828L,0x0c45cf393959dea3L,
53968         0x70a9bdd3240b39c7L,0x499cd7dd28383b7dL,0x30690b2e307a1026L,
53969         0x2262d598ee92f1b3L,0xc62d77deb4725a48L,0xa16f25bc7bc3aa0eL,
53970         0x62dd8b65d15ef7faL,0xd979221d0b96d68fL,0xb92885c3a00f1906L,
53971         0xfa476b9beb74c740L,0x217ddbb5c7576222L,0xc2782c305788504fL,
53972         0x860d096cf812716bL } },
53973     /* 24 */
53974     { { 0xfebc337d4d79bbf9L,0x5d53eab869f74f80L,0xff36a09533104d53L,
53975         0x2ab820da196f8b97L,0x961d3d1f75ce6909L,0xb197ec0404683754L,
53976         0xa68ce1bf93a6cb9bL,0x503456ffc5f021a3L,0xb50a2db18940ffdbL,
53977         0x77c50f8fef004209L,0xd635d17704965875L,0x725766d98bb8770aL,
53978         0x8e19b028a078e53eL,0x364d4ccaf9fc8378L,0x1a3df411f0dd39a0L,
53979         0x7e80e44203adf920L },
53980       { 0x4b5f8a57539a1ddfL,0xd248e7aeee486562L,0x1c7b491d816021e1L,
53981         0x2e7b871bfd36d2c4L,0xda38b5040aec00d9L,0xf28276126193f1b3L,
53982         0x69c3fe86fb1f78d6L,0x56c8b786e827ac33L,0x1687f6c73487c8f7L,
53983         0xab8f221719dee5bcL,0x04e8473fff399418L,0xf384c014a9027c80L,
53984         0x9967be9aaa1d2e28L,0x869686d3e065eef1L,0x737c6b08c7bd837cL,
53985         0x5dcab5d19e8bd863L } },
53986     /* 25 */
53987     { { 0x0784283a9a7d772bL,0x6b49e525e540959bL,0x546bb00886414ab5L,
53988         0xd44481629d74b2a9L,0x267890ad203b0b1bL,0x1e7a82bcc8d3f86bL,
53989         0x1352bfb5d85a83c7L,0xf29f16e3fad07ccfL,0xc02a63b841e0c43fL,
53990         0x904f22c56b379fefL,0x19d8a653b1244f26L,0x6635b6df3a28bdeaL,
53991         0x18b68851f6d455ceL,0x74ac28189cff3735L,0xad40f9df8b2cbdabL,
53992         0x08cc2d9eadc9d498L },
53993       { 0x2e6a6866c170c84bL,0xbb989e8b5a49a484L,0x7b0e00e0d04c8992L,
53994         0x55ad347861b3a423L,0x3c952450b0d01899L,0xe3922155e3100cb3L,
53995         0x19265b6ef03276d0L,0x0fe8595a76d42b53L,0x0a96dee0fc6353b6L,
53996         0x761e0dc8246f893eL,0x4ec902bef0a74cbaL,0x610086843fdfad9bL,
53997         0x5d6a60e44fdb6975L,0x3f53aac87ef7590aL,0xd29e6be012870a37L,
53998         0x991fadc155aa55b0L } },
53999     /* 26 */
54000     { { 0x82bc4b0fb4844ffeL,0x7392271460f8b871L,0x8ac000e24ce3f1f3L,
54001         0xf0d548b4163519ecL,0x7aaf842b88288b5fL,0x9e8b0c4c2bdc9a70L,
54002         0xa06d51524ba5fd67L,0xd0b1afa0f93cdec3L,0x280955badf89f8f0L,
54003         0x86cbe92deea32c92L,0x0cae3f993fe05be4L,0xf2607095fa6919aaL,
54004         0x0f54741e6e0f1b8bL,0x2aed1f7430ecf988L,0x9296f76b734991d7L,
54005         0x66cf8d28259f0fe9L },
54006       { 0x9b01905b226f5868L,0xc102e88c16909e9eL,0x2bd089164a37eb54L,
54007         0xf72253e8c9816323L,0x37f84e9d86bac53cL,0x2e352454afeaaaf7L,
54008         0x67c86f772ca0046eL,0x86bce50e6663372eL,0xf6a3a960b6950a04L,
54009         0x61f994d7fc1aba93L,0x1957c12bc1326e6eL,0x9b658fe42e56b005L,
54010         0x9cd297fc8592740cL,0x7654ce9b177f26a5L,0xaaa699dba79d2ebbL,
54011         0x5fca0c5a0ecb6448L } },
54012     /* 27 */
54013     { { 0xe26e25f3569a6663L,0x09597ee7e6aa4ca7L,0x25a4cda68d18b80cL,
54014         0x450602b522926730L,0x9af5f65007387209L,0xfeeedb3426733a53L,
54015         0x0f5ce76886572951L,0x872a360b8398ae9aL,0x60347a802b30f6c3L,
54016         0xd2113b231a162158L,0x6fd9cf92ee6c6decL,0x85f0a5a85cbcf9e6L,
54017         0xd7a5a6e42ba3fe84L,0xaafe672051ecd727L,0xe09c6bb2a2081a10L,
54018         0x657acbf0b973b0b4L },
54019       { 0x3130466fc274c8d4L,0x4276517630a994d1L,0x217258ca7079435fL,
54020         0x44850406eb897a06L,0xf38dfeee561ee130L,0x11f4facfaa1778bbL,
54021         0x765c6617b9abb9e9L,0xb135499bd8f10932L,0xc0eb6337a73b9159L,
54022         0xf2c1ccf16f7e8b6aL,0x5b32c03a187def53L,0x89ad1d49830b9c62L,
54023         0x1735eae32f10e538L,0xb1cbd9c29d5f55bcL,0x42428c47e539db0dL,
54024         0x3d2da412c852b3bbL } },
54025     /* 28 */
54026     { { 0x97702b6e871f2865L,0x56cb639f142920d6L,0x328522a045b58611L,
54027         0xf3943ad1f3b13812L,0xe6c2200a712206e8L,0xc2890e5aa34d59eaL,
54028         0xab52fd40f6b7f759L,0xf522c8de180bf567L,0x181e97b2accee396L,
54029         0xe0375819c4ea5cbbL,0x0d9985e8ab51d3efL,0xe26c96cabcb50fd8L,
54030         0xfb9d6b1397e1c80dL,0x582b1814f796357dL,0x89a7822107f4c7fbL,
54031         0x02aeef2dc0357e61L },
54032       { 0x2ba7926f2c7ec9beL,0x292f307e7258b201L,0x74e62a10c6fa6b4aL,
54033         0x80c08549e2bcc5abL,0xb4160db87bb8c073L,0xd5ef0529329f194dL,
54034         0x0eb8da146dda4a9cL,0x0b5d43d215ea23d1L,0x6cebef02fc34bfaeL,
54035         0xacd364d0848757a7L,0xc14013682d34cca3L,0x09ca67421d2d95e2L,
54036         0xc3fd1d6e786eaa28L,0x9eb1136da2965fecL,0x48871baac0779203L,
54037         0x6b446c014b15aeb0L } },
54038     /* 29 */
54039     { { 0xc819eb2e25e8fe80L,0x2b5f790698238a17L,0xd6f1e99681e41849L,
54040         0x58ad8ad698ea6d45L,0x5bae5ad4bfd02e40L,0x016dc327a812416dL,
54041         0x8b31a985a3347ca1L,0x0b4da61082a65391L,0x1cb91b2db48c35fbL,
54042         0x9e96817cd2aaf8c4L,0x1a630483cdfdcdc0L,0x7055936112b69254L,
54043         0x5fdcd712f8a2a097L,0x59ab623a35cc5281L,0x30c8ebe0932b6095L,
54044         0x8613424bb08e052fL },
54045       { 0x28902063b2231d8aL,0xb0f62329d9a61667L,0xaafa0fe7071a9f27L,
54046         0x6bcd8960603f047eL,0x118cca76fd92a1c3L,0x3414e62b71d483b6L,
54047         0xa123ccddba705262L,0x1a576437fd9b5c5aL,0xa5301bc24c8d0fa3L,
54048         0x96f0ad44102427cdL,0x0e6fb5e0d3aa6c02L,0xcd8c4880072a3996L,
54049         0x4dafca12840d3fadL,0x29f4ca3dde91d541L,0x0037c5988441734dL,
54050         0x86333a999ccfe57cL } },
54051     /* 30 */
54052     { { 0xd213a751ecf53b40L,0xcff2c6f22f78a542L,0x0f59f0e2f13ae56dL,
54053         0x91f8ccbf0e61748eL,0x0aadecb9d72c4145L,0x6b2ed8524c9cdcb7L,
54054         0x8e00b72c1eaffc70L,0x89b24285aa728102L,0xaa7ea7e0b679cafaL,
54055         0x5d2b8c264f0a6f6fL,0x7ed7b1730e804397L,0x5a93eb45c8573049L,
54056         0xc92bf5d40986e93eL,0x526b5a9c6a20c0afL,0x0adf47c9b99dc3afL,
54057         0x12b25fe2ba202cc9L },
54058       { 0x09b8d78a33eea395L,0xc7a93618f633fc5cL,0x7e821629270eceefL,
54059         0x524779b8c628ed0cL,0x91db5ca1a1d68939L,0x8626e18e586edc90L,
54060         0xfe023e8bfeb3f3bfL,0x6279fde10250171cL,0xe52ec7dc55e172deL,
54061         0x445e8695c6d4ca45L,0x42de3878bdbc10f1L,0x2b114de86fc3835eL,
54062         0x9faba4567e10b652L,0x4111d82a390e78feL,0x576b61c2aedf0acaL,
54063         0x216279a974accb74L } },
54064     /* 31 */
54065     { { 0xc14cdabf4047f747L,0x03ca233dc1315a1eL,0x59e7cbd340e5d0a7L,
54066         0x1fd0c4e9bb413869L,0x189d08b10f01fbd8L,0x50449c42a76b823dL,
54067         0x81c224a1398b00a1L,0x08084e4f8e8179e4L,0xfd8af994698e41e9L,
54068         0x1e30e37c5610bf2eL,0x4e6a043fa7d2790fL,0x9d96e60cb3195388L,
54069         0xe75f986d03799dfdL,0x3b4a8f11f8ff902fL,0xfa9453787588416eL,
54070         0x20683e3f9827535eL },
54071       { 0xcb582e26d0378878L,0x9e214c23a7945787L,0x13d000bf8f6688b3L,
54072         0x7548d4f540515270L,0x7113c15d40111f5dL,0x3bf5a526a8bff902L,
54073         0xbda6b0109b4945ccL,0x83dcc74ebc2f3a05L,0x2aef628443efdfa1L,
54074         0xd2e60ee9565c5bf4L,0x4f0fa10d592f243aL,0x6ae58b321bc3bf51L,
54075         0x813b086860576a74L,0x0bc023f84d73081aL,0x9fd03aa032dcee59L,
54076         0x5e416bf527d6c795L } },
54077     /* 32 */
54078     { { 0x24313760026cc23cL,0xf819aaeeb5b29058L,0xa92272f8c5d2ee17L,
54079         0x8048e7cbee5cc402L,0xdbc7d6ee77def07dL,0x61d69244f6af821eL,
54080         0x5f7966ed996cbb89L,0xf81b17ea96a155a4L,0xb2d9ef7003f3ed56L,
54081         0x5e6e5906e882a5b2L,0x86fa1072ae947180L,0x34d9fc51658c76f4L,
54082         0x9f603dc0cb035aa0L,0xb7b39feb75be6481L,0xca87554acf04a9efL,
54083         0x4ff682ec87b4fde3L },
54084       { 0x3125627fd0a10ad5L,0x7fd45c72968e6f45L,0x2981bd6b806a1163L,
54085         0xb92de1cdde5033e3L,0x3b44b45ebf4f8988L,0xca1b9896dae7e1dcL,
54086         0x52166e5a0778d878L,0x82d472bea5116847L,0xfbdd382af2895445L,
54087         0x22ed16025d6ec4c9L,0x3614eb1cb6552b02L,0x63c5df73a1e6210fL,
54088         0xe9160285021a74a7L,0xa44ca400c65cbd4dL,0x48cb187e0f15e299L,
54089         0x51eb818e3402507cL } },
54090     /* 33 */
54091     { { 0x1fc1d178b92100abL,0xdf2e3d609605b839L,0x12a7c255b71e59d0L,
54092         0x3f8b667514fcbe04L,0x0e8a393559fd06afL,0x5632650212020d07L,
54093         0x6696fcd1528e7be5L,0x6588514b0c7b7654L,0x0cd80f8c5912a5b5L,
54094         0x8bafef04f324cb7fL,0x6b53eecfc6da3d75L,0xedef48d831d1df2fL,
54095         0xf336b96573812b6dL,0xc82eae4aee626031L,0x300abd32d244f09bL,
54096         0x8b0af95531d9647fL },
54097       { 0xb770180a2e603544L,0x2b573ac3221acd9eL,0x3a17f66562407032L,
54098         0xad3e74adb89abc3dL,0x8a3d2e3ad793225aL,0x457bba04ef02564bL,
54099         0x8875652ffc2dd2b5L,0xd2905d15e67143e8L,0x6d884b4202e48d70L,
54100         0x06f99219c7636a57L,0xa8dc342135e378dfL,0x95c1d73d10c64a02L,
54101         0xcd6a4ececc157a66L,0xbadcc1c88e24a354L,0x8024f1b29839329dL,
54102         0x5363e5494da48ad0L } },
54103     /* 34 */
54104     { { 0x1f5523b7e23fc641L,0xfe54e72f86667063L,0x294a15f58e009d2fL,
54105         0xf203997f8c57f5e1L,0xa229724cb16d64dcL,0x697be4fd4baa2ffbL,
54106         0x3f507e460a6e8ed6L,0x0afe3a5d78508536L,0xeeef6cdd95408208L,
54107         0x701fd889f2c4237cL,0x496d883a5c385253L,0xe25c67ed72a212f1L,
54108         0x4b4167831ff78fcdL,0xe9967004c16f4146L,0xfa45c3a1c45b0697L,
54109         0x633340183fbd30c3L },
54110       { 0x39c9a0cca2fbbbceL,0x876f6e5caa0cb744L,0x9ce6010e3438ece3L,
54111         0x0aad148e13802d82L,0x9c3e5c609cd45a1bL,0x875cb8597bcfc1e0L,
54112         0xb19ff790d8584dd0L,0x2598b81ed81c2a2bL,0x118bdf2f02be07e3L,
54113         0x074fc8eeb9765ce9L,0x125e9d88b24f95aeL,0x3bb12cdc0c98f09dL,
54114         0x4a6aee07a0b74b27L,0x4723d2f9c08077ceL,0x959447d6bea8026fL,
54115         0x93a7075c16280b73L } },
54116     /* 35 */
54117     { { 0x26bbefe2715b27f9L,0xa935a5e22a280923L,0x5ddf23affd58a26aL,
54118         0x54c83e167c138694L,0x44799bc9892a2153L,0x4e6e47109b8d09f5L,
54119         0xc63af616d588ea68L,0x5e896706883ab1b6L,0x3c1393a03d209336L,
54120         0xd02f292192c23ddaL,0xab70cb7adcf6ea43L,0x12434ea8791559e1L,
54121         0x040680db6d70ff0bL,0x1a10fe522832ba45L,0xd69f9c08e5f0cb8fL,
54122         0x1a7422ac44b141fdL },
54123       { 0xc3a9dd2e9f40b675L,0x2a7c6603fcc71f39L,0x18939a611948e342L,
54124         0x8f3b6158ed0ab484L,0xa3aa7d97ee31ca6bL,0xbc1e865ef7a8db63L,
54125         0x315f8c092c7c62e4L,0xa260788f9f5c6d0fL,0xb18331294b6f3ec5L,
54126         0x73adbcd636b4d849L,0x66e14890bc699a9bL,0xbf3790d82a1175e7L,
54127         0x7f43605afc53ca4fL,0x577f6c4787ff6091L,0x827c7552600c82b6L,
54128         0x0944d6309d25599cL } },
54129     /* 36 */
54130     { { 0xcfdeb63ee6ab9620L,0xdff4fa6d786cd808L,0x145edd82456320b3L,
54131         0x2ae5f862c4943915L,0x9508e813b73b3f87L,0x3bd805f3e52f97a9L,
54132         0xf71b5c28c9829b62L,0xb394c70e86e0cefcL,0x534fb1a923bdb36eL,
54133         0xd64f5862dbe27e5aL,0xbae23df383ab6169L,0xdd6df1b127c828cbL,
54134         0x1901899f3a307a8aL,0x36cc8659811ddf66L,0xa3cb777479943b77L,
54135         0x7d89f3836fd86576L },
54136       { 0xf8564242c9f92b2bL,0x700c6a75c46e32bdL,0x93e768b77f99a5c5L,
54137         0xb6efe85803149568L,0xbbfe8a19c2ce6709L,0x721a3b1bee6ec493L,
54138         0x26eeeea9c371c28dL,0xd798115e15177e1dL,0xd7bf3bceb068a5a5L,
54139         0xdf8da22046d2b4b2L,0x3df0995b59be9dfcL,0xc96897bc77640b79L,
54140         0xce0cf4c25a2bd3c5L,0x16f45d6e89afe744L,0xb53f3acb3a8509bbL,
54141         0x449af81f63f2a6e6L } },
54142     /* 37 */
54143     { { 0xc2fcf132a16d9377L,0x9ab377b37e1a2f9eL,0x72e1a12e86d19ae5L,
54144         0xd2b12e66d013bbb1L,0x0972e055cb5f66baL,0xd11de1c0399eab50L,
54145         0xc1f314fdc65f5ec2L,0xfc3118418a9ff593L,0xdf73c1ece05246e6L,
54146         0xc28d13631625056dL,0x30a9dbd76fb25e19L,0x049ed244845cd2d7L,
54147         0xc779b83fd36e852dL,0x85a35fc7f68c8a83L,0x299bf1e1c95e8033L,
54148         0x0e8617c320891af5L },
54149       { 0x5372060267c81b5cL,0x2fa89dcde737873cL,0x2a7430b0a8144fd0L,
54150         0x3006c5a726208c83L,0x4e066660d8ea40f5L,0x9dd025f9896413a4L,
54151         0xbdf380cc46b9149fL,0x801566190a125cc2L,0x04d6a3b752793c37L,
54152         0xb60013746b7a62f2L,0xa9cfe268585d5978L,0xdcad0cb88395fe66L,
54153         0xbab468fc46b261f6L,0xca0ef5ef9d9d9218L,0xc507d4a85e452402L,
54154         0x6f4404f1326cf687L } },
54155     /* 38 */
54156     { { 0xa3e1920b4febd3ffL,0xca6234d8fdfd2bbaL,0xb7d1af2ae19a9829L,
54157         0x23de1610c6f5bc20L,0xe204dbf3daa39ca9L,0x2a2de9b86d8c70abL,
54158         0x272e0c377c9d370bL,0x80914c06e565510eL,0xb611e7a857cbb6b0L,
54159         0x076fc6efd8266a6eL,0xdfac34ee3095801cL,0x69ff40a2b9e24063L,
54160         0xa7ba31a9787aa5c5L,0x0e4d1fdf33c70cd2L,0x903e31326895f074L,
54161         0x905771f87fb671e2L },
54162       { 0x5199ba0da4062beeL,0x18e7238c94d7d9f9L,0xf53f29bc1e0922c0L,
54163         0xde9b2a81b12d855fL,0x649f3eed6d68ca29L,0x64adfc34c50c097fL,
54164         0x81964ab99db398a0L,0x00d59c477a587224L,0x09fea39674c5903aL,
54165         0x6aafd8ee15043dd0L,0xc5721a6e5f1ecc20L,0xb6d6a4830db9b7b4L,
54166         0x06ffc61766c8d52aL,0x3de241d6acc82a27L,0x0605f05227f2f7a8L,
54167         0x6a22953b6404deccL } },
54168     /* 39 */
54169     { { 0x92452d8f74fce389L,0x059634c02afa5564L,0x9377ccbbf0ed7825L,
54170         0x89f4045b37718e0dL,0x11074e7d9fa69a4dL,0x5d70bb077295b0baL,
54171         0xb22d54adf107ede6L,0x5c39a3d8a1a29c7bL,0x37236c02d795e3abL,
54172         0xf7282d002b589951L,0x5e2265be5790bee2L,0x91e0ea11a8e65ea2L,
54173         0x0e71a7086001cebdL,0x16900f5a2c1c5402L,0xc3b2d5c0357f6981L,
54174         0x528c9ea0619e3427L },
54175       { 0x1edc86b45f26c577L,0xf80747089438bd45L,0x2dfe1013792582a7L,
54176         0xe08eaca0de1e569fL,0x5f952efa9a55a356L,0xa4d80b53e4976216L,
54177         0xd2b65855cd5d71f2L,0x246704bf66cea3f0L,0x193f641f492323caL,
54178         0xa681855c9adb1325L,0x86d522ce2d19d652L,0x53609f105b82ed7bL,
54179         0x3b0f00948e150d29L,0x23ad8bfb0b13e891L,0xcbb1556cf794b449L,
54180         0x200f9093738bcf57L } },
54181     /* 40 */
54182     { { 0xf9b22fc58388387fL,0xcf26f17028e883c5L,0x447cab90d1b7973cL,
54183         0x8d5d4ea2f6ec9171L,0x2e16f498c30cdbc0L,0xdc92910c48623c2bL,
54184         0xeb1491b030dbc545L,0x631deb2e14de21b0L,0x04a210662fe830f4L,
54185         0xa4c6979c379c1f3fL,0x8a732b68fb06a795L,0x3a44327a1619dfa9L,
54186         0x91a307d38dbe2c9bL,0x939bc8d203989feaL,0x3daabaf20f4a331fL,
54187         0x5c307e98dd0f55dcL },
54188       { 0xbbc4e0c435b233daL,0xe3d2908522f6f985L,0x99dd2d21a8b02468L,
54189         0x978f40e9a96916e7L,0x0327d86c614bccedL,0x95e95502b290762cL,
54190         0x0ffd2197a879f2edL,0xc436513750e0bd33L,0x26c3148a0827c4c4L,
54191         0xc79812a83fcfc0b2L,0xc3d8d17e31928589L,0x8b572cfe8830f42dL,
54192         0x7cd9ff924b07f83fL,0x331ca9500a51148fL,0xd0c539684c59f9acL,
54193         0x1df16dfac1434785L } },
54194     /* 41 */
54195     { { 0xcc7bb4ac68bcacc3L,0x06ded34f430f58cfL,0xc59f9f4fd461855aL,
54196         0xf549199445c9f0bcL,0xdc5f7ec64375c892L,0x1b8708f13c85983aL,
54197         0xb32a5cc482fcd087L,0xefdcdc352d6b4c0fL,0x4bb24f048ac6fb2dL,
54198         0x5982d4f533906471L,0x162eb52fb83a3ac4L,0x7130df282337a223L,
54199         0xdce7b802cbc3dbd3L,0x8b3959592467ac0eL,0x21d3d2e81b56717eL,
54200         0x729a7f5046512617L },
54201       { 0x874ed1aa8420f90aL,0x6368e19e0fe4c855L,0xb62d4aaab0be74afL,
54202         0x76fcc4808ca60ca9L,0xf310b5a57645a867L,0x131bac9bddb1b24cL,
54203         0xef77d71d2dea5b44L,0x4706d21072fcc64eL,0x29b92691673d77f0L,
54204         0x22e00bf3e89e0663L,0x472d0cd374077d40L,0x3e21040d829232e2L,
54205         0x2f916dfb38dc8533L,0x48bbb59b14b8f667L,0x19de9f4ad44be19dL,
54206         0x7f6d3649232d9d5cL } },
54207     /* 42 */
54208     { { 0x3bd064de6e794819L,0x5a6b694ef82ebda1L,0x1f017fe0b91e2804L,
54209         0x190d31f307a43cd2L,0x6c26f226630433e9L,0xba488aa70abfdcb4L,
54210         0x418d9085a46411c0L,0x1b934fe6bffb5880L,0x75d1e237e200f849L,
54211         0xdf04d63fa55413dbL,0xe216ed75e23b3f77L,0xa05866cb0f91bd30L,
54212         0x84c395d97729c509L,0xec97e188452ab2d7L,0x8cb7c1f90093d686L,
54213         0x2d032395628f086cL },
54214       { 0xa81c94074a44b4c5L,0xb9846879cc702c98L,0xcb502287ceb0dc97L,
54215         0x303011266e3aa321L,0xc0ac8763e4c256c2L,0x65034d20e55b4845L,
54216         0xaa96a040f240f35bL,0x046d26d37cf7eedcL,0x62a5a8e13b810656L,
54217         0x86044b9783d70c2bL,0x2fbaff8859e4da8fL,0x929d901a5457f5d1L,
54218         0xd29e1eb2b531b757L,0x214dabdc9e4e9739L,0x5bd724fc4eaa9bd9L,
54219         0x734c12b31ef9bb9bL } },
54220     /* 43 */
54221     { { 0x98fe3c2e92f9b086L,0x4641b93eb3fd4544L,0x47ce208b5c02c65cL,
54222         0x8a52dca1c4f03242L,0xb5ec17d9679d29f6L,0x11d2fed09406f5f4L,
54223         0x260f63dc0d9ba811L,0xde2b056f15472a3fL,0x1b170d9f007290e6L,
54224         0xa2e23e8db6b5c8f9L,0x345a2839cf34c3eeL,0x9bdc54611b973ee2L,
54225         0x65bda6c2bb24d1c5L,0x97d52ba33c6141a1L,0x47bb16129d2eb201L,
54226         0x7c558a8721fbe49fL },
54227       { 0xb9485a523f350fecL,0x016678c56a38d4c0L,0x8ef346a20d5aa64dL,
54228         0xb85daa02d96da2e4L,0x845ec4ea4f647b3cL,0xc0d1a6ca0d5e946cL,
54229         0x41d8d1c14fa9f4abL,0x43972cc59c8b1303L,0x67e1f48d434ffbfbL,
54230         0x350ce93a819d2318L,0x49f530906ddef23fL,0x3c2e6cf9200cf12cL,
54231         0x42691cc1640432fcL,0xbfff74b472496b52L,0x44527c9f020a97beL,
54232         0x34cd7dca7b3c4348L } },
54233     /* 44 */
54234     { { 0xf031761a59e7fe87L,0xb1eae31a0047cd72L,0x27902e68fae30f62L,
54235         0xa666f48db71db143L,0x75ee66780e0038f4L,0x3b45ac6702bdd76dL,
54236         0x0d2fb828a0d6cd5cL,0x27ce7f1d9d8c5b11L,0x141fe0e4120b5e96L,
54237         0x95a1b984b9267c37L,0x5206e589d60312cdL,0x1867342eda549356L,
54238         0x374520b9070c74acL,0x2703cbb59557b0b3L,0xf621f59ca6ed8c14L,
54239         0x7ceb1cc2abf7b887L },
54240       { 0x0647a5bbdb7fd65bL,0xd8d45cc036c9457cL,0xc6da99db9e12718aL,
54241         0xed1dbbf4e93a7fb1L,0x4512c95cbd1566a1L,0x4861ba00dbc0c919L,
54242         0x3c6cc2989e7f5269L,0x671961500941aaaeL,0xbfcf5d0fc8c538e3L,
54243         0xad6e9929a25a551fL,0x9071098517ca0f26L,0x743b78eafa89ef7eL,
54244         0x39d5ea3171ab4549L,0x7442f3f3e6d1c36dL,0x25a683e0059d568dL,
54245         0x1f629a99227ced5cL } },
54246     /* 45 */
54247     { { 0x8925ddace45a1c3eL,0x72d2936541f7545fL,0x45622fcb37e7f828L,
54248         0x882345133e4c79d2L,0x5dffaf849c2645d6L,0x3078f4dd994802b9L,
54249         0x566927f09d339fa0L,0x9a500a1e9fd91dccL,0xce0081800ab0abd7L,
54250         0xd97135a38194e5dfL,0x9e87630798adf088L,0x3baf01b89a45a2a7L,
54251         0x6fed6154788b4399L,0x980e5722e77a997dL,0xaac90ffa2a378eedL,
54252         0x4a75fda28bd805a2L },
54253       { 0xd09a8fbb55e74cbcL,0x737738cefab18f25L,0x0fc23ad69764ec3aL,
54254         0xc5a7d35be7e0ad31L,0xe75e068ee481cc9bL,0xf0c2ea993d4aec34L,
54255         0xf1324fe80d4a63c4L,0x5dbb7c1699b0592cL,0x442d674da7e0f46bL,
54256         0x5a5d66c7a300faeaL,0xe83dc8213333ac83L,0x70ef812e8c408496L,
54257         0x96e1dcb699ef5fc1L,0x6e2b771b1734e862L,0x04629cdc583507d8L,
54258         0x5819f9ae23d8179aL } },
54259     /* 46 */
54260     { { 0xd99691216aa78811L,0xf64ee8f42103e7c3L,0xddf0107022b9e698L,
54261         0xe6001f9e4f582cdeL,0x24a608af2ecfac1aL,0x6ef4c78406393009L,
54262         0x5262eae6ebf72911L,0xddbd0af58c4ee5a0L,0x875aff90ecd87bc7L,
54263         0x2fddb34c6f24f114L,0x48104281e865f172L,0x95692426886c1b9aL,
54264         0x6f5f32089ef4231fL,0xaf587acfd0a7e82eL,0xd65719179ac395c8L,
54265         0x7459603c1364a750L },
54266       { 0x1c2475bff41ae519L,0x34401fb14af8f251L,0x70ddfcd2aefb2c3dL,
54267         0x9b2d385b51cdaf08L,0x8531c2568208bb19L,0x16c89df64c33f3f6L,
54268         0xc23cfa9924571769L,0x2339b51e86d010baL,0x08db0e8d22638313L,
54269         0xf769e17900fedeb7L,0x3fd96dcba3687ef1L,0xcd046b2391476475L,
54270         0xf3ff20640c45c8ddL,0xefd167bdb8343d78L,0x493ccb6d4b77ee90L,
54271         0x33025513b3cf7b45L } },
54272     /* 47 */
54273     { { 0x36f0046935eaaca1L,0x0c384b7589119102L,0xcb375665e6d2954cL,
54274         0xcb9199b9b1e9d6d7L,0x75852349c29c2757L,0x89cbd1bab8e738d0L,
54275         0x9b8dbe905923a427L,0xa237793e18fe1889L,0xa4271757a742e083L,
54276         0x8c4979d24eebd613L,0x40325054d4f2cf77L,0xa3b8a091958705deL,
54277         0x1b191bd933d999baL,0xbafefba43b0fee1eL,0xb3bad1843facdf14L,
54278         0x9328adb04387561cL },
54279       { 0xabe84e80f906b872L,0x705523a078262665L,0xd89c6a7e3398ccf7L,
54280         0x2fab551df55b5323L,0xa0578eca0554dea8L,0xef26523d375589cdL,
54281         0xd8fd6242864ad750L,0x93f27fc5178fe1feL,0x7b3e6f309df87422L,
54282         0x2862e49e3750d054L,0x7d90c6b25dc038a1L,0xc1a1ae2284db682bL,
54283         0x47f3dab79881930aL,0x30e6bd52baf3e0a4L,0x0680025bf62d25c5L,
54284         0x0aa1f3cfadd0d5e7L } },
54285     /* 48 */
54286     { { 0xa982219022a10453L,0xdd1eb91c2a03a10bL,0xafbb5d9596646f3bL,
54287         0xa58de344f38b6fc6L,0xce47c3e5b8cfca1dL,0xfcd8e16d0f70da04L,
54288         0xac44349bda262ed6L,0x9320d87bc56e2f8eL,0x9ce3ea0819138e58L,
54289         0xa5862dffa2b236c0L,0x6b0f9a5c8e7efb0dL,0x4b53432b16ac78ebL,
54290         0x6ff43105709b51afL,0x08e236f88f519628L,0x1f93f176eed403adL,
54291         0x559337e09636545eL },
54292       { 0x30ddf738d8fd807aL,0xf4e0ec9dab131222L,0x14a2f4db625afbc3L,
54293         0xd5b706049f12f895L,0xb46f3c23ac3044fdL,0x1b232d1ff540148fL,
54294         0x61b458f539b4e554L,0xf694b24a0dd70b75L,0x0fc64299289581d9L,
54295         0xc05d49beee5fe22dL,0x7af3447f6a18bf63L,0xe96a1dc27f1929d6L,
54296         0x6afe6028c1551e8cL,0x27dacaf32b5d4fa2L,0x4a1631bc545c2cb4L,
54297         0x930070f9b0c914d3L } },
54298     /* 49 */
54299     { { 0xd2f32c5e69a9bc05L,0x0a5c19c6589c4b73L,0x095c9e5e94665f9cL,
54300         0x8ab0f293bcfb4c39L,0xb90708771ddb7c31L,0x894e965866b38048L,
54301         0xf19a90cf606bd9bdL,0xcc1d58dfb6fd2d69L,0x886dcc4e461d8a69L,
54302         0xc455c277f9ce4831L,0x749a5996765f8a82L,0x2ffc668cc3badc8dL,
54303         0x380183969112cdabL,0xa98795c3b243c7cbL,0x8775f310010a2224L,
54304         0x043a2141587b5e14L },
54305       { 0x7bbe9dbc3a873752L,0xee1493f42f442feeL,0x981ca2c8c18c2181L,
54306         0x00ce3090e29769e7L,0xb4626ac8de768c5fL,0x33e9ce4634d7677eL,
54307         0xf89c2cade0fa94e6L,0x04f5cc1141f5b5bfL,0x2565f7362228c12cL,
54308         0xf1bf706a0c05cce5L,0x5d07ffffbe487c4fL,0x3ec43c09a499f1a4L,
54309         0x4f4e79bb98d94800L,0x8a335a16073f12f8L,0x4bb5eaf70f970d6dL,
54310         0x18d0747bf24d0ae8L } },
54311     /* 50 */
54312     { { 0x58d3c77c84601fafL,0xc9465be2af1c1f72L,0xff626798d116d806L,
54313         0x3996c0c6d5b0d93cL,0x2fa1ad755ec6723aL,0x966a814403ba5349L,
54314         0xdc4c94222ac34d8aL,0xddf471deed675865L,0xd8aca597953d528fL,
54315         0xb2e463b524ebf67dL,0x258248717e25b4d3L,0x23c5adba43159daaL,
54316         0x5458f9c683357540L,0xcf685da7f938b1a6L,0x981a4fdacefed231L,
54317         0x711093ed08bb5e59L },
54318       { 0x12aa3fc6401f161aL,0xf7358560974c5e87L,0x4aa252fb17b5df82L,
54319         0xb0b82b07a48e6299L,0x0023415729dd847dL,0xf1e54d004529c5a6L,
54320         0xcc1c539e6d98f538L,0x36162b5328d3abcbL,0x75a379382a84f0cdL,
54321         0xf717a81b4dee7484L,0x16cf35fb4c23bf1bL,0x7fd1c29f787e8b3eL,
54322         0xb7da7e6859b79ab0L,0x072100a085f6c60bL,0x31840159e7ed48b5L,
54323         0x17898bda4d9c97d4L } },
54324     /* 51 */
54325     { { 0xcd8483d8ae1b8cf8L,0x323d4b42e9a28856L,0x7633584f204a4bc2L,
54326         0x4e0b2228ca7a69faL,0x8afbda8bf757bab2L,0x85b240886cc5f9caL,
54327         0x47fb4813d41a95c3L,0x3f1bc53cc2aabe6bL,0xf22cda3f1ad1599dL,
54328         0x1b2ec081c31ea9b1L,0x048f304b01614ac1L,0xce31cee9c6afa7abL,
54329         0x55af76334140dc3dL,0x84b7ab37dce8abbaL,0x50de7648c7cf3efeL,
54330         0x73a88dcf15356ab2L },
54331       { 0x3f86828806e83b39L,0x477a44139f44037dL,0xf9058b0f17dbc841L,
54332         0x2db64f4f54d17549L,0xa23cea6af2307ffeL,0x393efd554f126261L,
54333         0x2f4e658a10f37f26L,0xa4437ce3f4ee1e35L,0x64ef42a7a93cde8bL,
54334         0x1debc9f4939aa901L,0x44223d6a3d7b5cd4L,0x789a6a11f88a3accL,
54335         0x56fb9df82c608a2dL,0xe79db8e3bbf56c06L,0x73c56af2668fa300L,
54336         0x52f32b17ae396a1eL } },
54337     /* 52 */
54338     { { 0x56f524c1e714f71aL,0xc1be12629add8519L,0xad9189d865cadbe3L,
54339         0xd88bf5c85a0fb649L,0x9efa6a9221d192d9L,0xe3fe83896f724b6fL,
54340         0xec3fae24b250119cL,0x4b6af9f62ae0d3c0L,0x8fceba0bd619624dL,
54341         0x7dc3092b2fdb6e3aL,0xc91da3763263cd29L,0x30c0761ef95c43bdL,
54342         0x89136400cdeb44d9L,0xfd7dce8443c0d31dL,0x78fec3b19871899fL,
54343         0x79e14d28efdf58c1L },
54344       { 0xe38222359bb40c55L,0x0a27202d0ed07a42L,0x48e6c1a94838c1f4L,
54345         0x2b5f24a7d864a78eL,0x7e7f140a0c6c55c9L,0xe62c104ace12d508L,
54346         0x9b0a1a7ec11b1e10L,0xfd8a275fafbb3dd5L,0xdff354fe9a3b6b30L,
54347         0x5a105d9e46602a01L,0x3d371b4d93bb65f7L,0xda5cbf0b0f82fdebL,
54348         0x4601229bde468545L,0x505e10b9c73d517eL,0x77cfa541672ff492L,
54349         0x0d8ec28a99566ce2L } },
54350     /* 53 */
54351     { { 0x014cf73ecbeee995L,0xb2eb88bcd491e80cL,0x615a6cadd9aba5d4L,
54352         0x2f7d46339304c84dL,0xba0501d28ab03c9aL,0xc8f723de91babb94L,
54353         0xc885f97750405772L,0xb5e1d2b3c7fcb094L,0x61ee7995df96c71aL,
54354         0xb8c8daab3464499eL,0xdb425ddd5f607932L,0x70251ca1b1243587L,
54355         0x26d7d3be9fc74340L,0x8c179310c902ac89L,0x72522c154559a74fL,
54356         0x86001e27c3734afcL },
54357       { 0x13b00ba5e7693947L,0x6478641e012c062bL,0xe1a438e0e85490a8L,
54358         0x5173dbbfd9574d5eL,0x9532eb8c9bd3ba61L,0x1f41bcb85f3ea075L,
54359         0xac1cc2478cbb92b9L,0x0f34648e1ef901b4L,0xdd929d1ed2b3b2eeL,
54360         0x470f1eabc3d75bfcL,0x5cdbc6f7139cf4d2L,0xcd86454df0424953L,
54361         0x1e07981247fcb383L,0xb9f209b417df930cL,0x4225fc31114ebc00L,
54362         0x020591cb347946c1L } },
54363     /* 54 */
54364     { { 0xe3003721275e0af4L,0x721141efe78a4a4bL,0x666cfcf6d1757485L,
54365         0x5fa1d737168e659eL,0x263e3e540e2842eeL,0xadecc3d4948bd5f6L,
54366         0x019de03d246b104aL,0xf8a9e903f343d818L,0xcb57ba4a5b0c0d31L,
54367         0x8246c50651e2765fL,0x80c5751f6519bf67L,0x5f05c200f2119a01L,
54368         0x7e6487b87821d4f4L,0x262f94aa261c3a06L,0x56cfe48972146052L,
54369         0x5119985fa1df05efL },
54370       { 0x5819497db18586c0L,0x004415d6c6eeaa62L,0x7c6a46b697cda28bL,
54371         0x9a149b287c194594L,0xb56369fa4ed3a506L,0x7092aa6643c94cb4L,
54372         0x55bce73aa9e9eee2L,0x34bb287077893509L,0x8af95fb006eb5326L,
54373         0x87cd03239638f485L,0x293762685ba75bf8L,0xf32d6f3d9d42d581L,
54374         0xa4cad57465c6d64dL,0x985f50fbb2cded41L,0xcf34ce0e9006a067L,
54375         0x59eaf26558a57f9aL } },
54376     /* 55 */
54377     { { 0x7b407efb6ec3876fL,0x780c6123f0f48648L,0x2abb56ffbf893039L,
54378         0x9592eaa045a91ab0L,0xce5b84d778811b82L,0x86a71a341f9f3fc9L,
54379         0xc17fdd86f0e7e13bL,0x88ed8297655a0880L,0x75d6dc7481d5e666L,
54380         0xeffc9df61d171797L,0x36ad4c8de3f79e1fL,0xdb15317d2046192eL,
54381         0x78c9fa7a274fda62L,0x04ec924f82dd9914L,0x059d1e383a64971cL,
54382         0x3b4450ea2620bbfbL },
54383       { 0x3db7a955c776dcdbL,0x35c4a57c81c8ba47L,0xae285003505760fbL,
54384         0xe3e80691b3aec353L,0x380335be47117be5L,0xe1c47e3a056ccf61L,
54385         0x253cfdeb33977916L,0x3decdfbaf5cb7ee1L,0xf3c9794f7cf4b704L,
54386         0x2401680c9ff81462L,0x4e440e11be3daa9fL,0xc5d0437769f91d8aL,
54387         0x4106c7a8cb5e9c5dL,0x191909a133b7d24dL,0xe893c8383764b4a2L,
54388         0x4a7fe30cc429b614L } },
54389     /* 56 */
54390     { { 0xe78f3a702455c7c5L,0x5b7636e870157754L,0xf32c45247623262cL,
54391         0x2c98b11e1bc780c7L,0xd48eaeac915ed877L,0xbb04d3c0199265f4L,
54392         0x6b52b19bcfa5200fL,0xc46a098193ea3fe8L,0xd82c733dba758059L,
54393         0xd324bbd61896aaccL,0xac09a2fcce8ecd51L,0x529918fd02fc44b3L,
54394         0xf0c45e4aaaa1784bL,0x35626340fe22085cL,0x53cbb676c50c7d61L,
54395         0x83fa1ea365126b23L },
54396       { 0x60ac86da10ccc646L,0x2ce0637f7b0451e9L,0xbbbcf6308a088610L,
54397         0x23c1901920349982L,0x707fc39cfc0bcda0L,0x7f4d1f151bd4fd7dL,
54398         0xd6a64e7444713bbbL,0x57bdc676c5ac9e60L,0x456c530337b61169L,
54399         0xd3451396dcf40a1dL,0xf3edec254997d2c7L,0x534ae9a4c2c4a739L,
54400         0x1401397e6a6ad2e2L,0x20769d4d23e95f81L,0xcee007c6de98fabfL,
54401         0x61409779931c51e0L } },
54402     /* 57 */
54403     { { 0x3ddb32db15156623L,0x68137fbcab7a67c2L,0x26011f506f19e3c2L,
54404         0x34218b0289924c61L,0x492a0b0fc6804c1cL,0xd65be706afaae6a7L,
54405         0x3b13d23e0d01be61L,0x44545b47f87f4c69L,0xd42236e204dc1aa3L,
54406         0x6135261d3c5161ecL,0x1eb46a63bd88bc07L,0x78c6d8361599d720L,
54407         0xf6955fe169baf0f3L,0x467eebd617072820L,0x2f1b8a2a3e3a340aL,
54408         0x636dac762d0b5f88L },
54409       { 0x94280db9b4c80af3L,0x9a189cd14e3892abL,0x26e702e0d1477ddcL,
54410         0xe91aee3868f9f14fL,0x2864f63a80baa0b2L,0xacd81f738b714a29L,
54411         0x30e1b870c5fe7cb6L,0x883ea1c3b10837fdL,0x2da279536b20489fL,
54412         0x3aeb2a6858a2da5fL,0xe2330bf203a8fa14L,0xb5c488b5dc70b1c4L,
54413         0x0a78c4d9299678f4L,0x233bd09825df675cL,0x37b5c0767b67d368L,
54414         0x2f6dbdfe4d0bef3fL } },
54415     /* 58 */
54416     { { 0x2f8472fd2e4da7c7L,0x708cfc91ae677932L,0x364af08a3dc268e2L,
54417         0x0f10dfe0799a2424L,0xef912d5871d58bffL,0x6bf35dfc988962e6L,
54418         0x28b96fa95f47ea0aL,0x734a79eaaad308c1L,0x957303379f437bbaL,
54419         0x002cbd8e6cf54f75L,0x47606dcfe7632eecL,0x404b5ecb53193104L,
54420         0x0ae0897c0acf729dL,0x89628b863bddf1deL,0xeced154ef87d7448L,
54421         0x5cb6e197458d5d4eL },
54422       { 0x98cef197008c75edL,0x7cf49d3ef6eeaaf8L,0x1d6f9e021875e96dL,
54423         0xfcec2cfedd9b0d8aL,0x38a61cfeb9576daaL,0x10003f3936a7dbb8L,
54424         0xb37c386823b814f4L,0x9fb66dcbb80e3153L,0x9e7e2eba059847a8L,
54425         0xa4ec63fd35a72770L,0x311f3d91fc9e0ed0L,0x3c1dc094d515baa4L,
54426         0x75a06ebca08cd4e3L,0xab6172382ed5eeaaL,0x2e82bbb0e1f52c1fL,
54427         0x2149d6305175d6e5L } },
54428     /* 59 */
54429     { { 0xee1a8e6f5f9311f6L,0xc97e3c9fbabc1f85L,0x4fa7c52eb494209aL,
54430         0x04c2f51c19774fe1L,0x5cefd1228555844fL,0xb53862a3b5873ab3L,
54431         0x768efdd6cbed19fcL,0xcdc12479ee58469aL,0x11237e313d80c09cL,
54432         0xdd74a290c044c28cL,0x9ee6517abd47e287L,0xc2421228ad0ffeefL,
54433         0x4273088f818d281fL,0xebc744bc43ec0de1L,0x5b26eccfb415bd73L,
54434         0x14e2f350cb07c26cL },
54435       { 0x548d2a104216946bL,0x6e801f077a4bd92dL,0x5996d0a343695160L,
54436         0x0f1b5c2f63a197c9L,0x79da3c4f061f77c9L,0x1c1cd63493ff7b22L,
54437         0x5e61b650a234123fL,0x826b34c5f284033cL,0x718b90e8c2f34214L,
54438         0xa5f35620ae806ec5L,0xa2fae345e324a9b4L,0x8c0bb95e8b53cb51L,
54439         0xc94f6ac2f9965778L,0x07ec607d6b9def32L,0x63bf1dbad0ed8f27L,
54440         0x58537e02dcb61e4fL } },
54441     /* 60 */
54442     { { 0x1f64b06464f80ba2L,0xe8e055e70559a45bL,0xc3262b34f1f4b634L,
54443         0xef4f7d5fde8c8482L,0x9d55dea0c30c780aL,0x1740afb9cfa1e693L,
54444         0x2cfe6a667460c34bL,0xf66959411187c1eeL,0x1382f2775f974d94L,
54445         0x1ca0ace4004549ebL,0xf8244b3fbabded02L,0xc36f4d064e3653eaL,
54446         0xeab9f0dcc55c5f83L,0xd93b9cefacebce90L,0x16658e7219061425L,
54447         0x4857835f82d7970dL },
54448       { 0xdcd525bcd2576210L,0x9f378aa7d51b5443L,0xfe97bf171bd83994L,
54449         0x930d0f63f38ac621L,0xaf8f2c17818408ccL,0x2692c87e260f53f6L,
54450         0x0ee45407db0a75e4L,0x0ec47ae5ffdb1b37L,0x769129dc7aa6a44bL,
54451         0xb6f932b22e40b75dL,0xe06764d095ef3b77L,0x28fd47f568bc63e8L,
54452         0xd18104949c0014c0L,0x90e2d3fdd7995d8eL,0xeb39a05d6c2a85afL,
54453         0x6c0277bda21f3128L } },
54454     /* 61 */
54455     { { 0xe41b7086b509e7efL,0x8842ec7b3d7f9f91L,0xcd285f945526b88bL,
54456         0x6e44e064051dd0abL,0x90198c10774f1cebL,0x6ecabe98123e661bL,
54457         0x4481113632f647d9L,0x1dd82b4526c52aeeL,0xd650907f939dc9d5L,
54458         0xbd5eeef2fcd455bfL,0x7815a4dd8d2e5d7cL,0x5ad4ec9288bc9f2aL,
54459         0xc6f10d0b57a3b322L,0xe8d0c1e720b9cbdbL,0x5a0b071a9b774ee8L,
54460         0x3067bc9af22fcf8fL },
54461       { 0xe0e589f2b7ca9326L,0x17a106fdb1224f63L,0xb2354521747a57bdL,
54462         0x2614982d62b0882eL,0x7f3af5444391ffcfL,0x1aaa337ba84e440dL,
54463         0x28ea37b0941bb071L,0xa957dcb42e4a7f54L,0xe7ab662c1a6ad5fbL,
54464         0xd135e381f7c36a20L,0x42e7980c9baa0b6bL,0x4237030c94e4671fL,
54465         0x24cc63ff8b0922e3L,0xd10d5279445a589fL,0xbb99d316a870ff6cL,
54466         0x390c83caa996c195L } },
54467     /* 62 */
54468     { { 0x50d3fa82ffc4a73fL,0x2665d6353bd53303L,0x80a06f8a264bb77dL,
54469         0x81c04a6e22d73d84L,0x2409cff50323b8aaL,0x31dce2178c4c4d5aL,
54470         0x374aa80e0c0f9c19L,0x0b25a38700186bb8L,0xd0b77a10aaf1487fL,
54471         0x15f39ad5ab498de1L,0x92e32da61aa0c116L,0x228e3dbd96e25ce8L,
54472         0xb57c88dc5e8646d1L,0x672b1164267b1c68L,0x5d0d807f600bdec5L,
54473         0x3ea4007d223e573aL },
54474       { 0xd76debd0a595d0a3L,0xa6bd76cbaff0b3b4L,0xbf2c154f9b1bdb97L,
54475         0x62b19ab44c714c71L,0xc9bf33b9221af663L,0x23d87c498c941ef6L,
54476         0x255804c3d79f0f6dL,0x6f1a10052a7acbc1L,0x5dab79d9550528afL,
54477         0xfd77a6f0c8d16213L,0x40508b6dde5e1029L,0xd95ac0f2f95da12bL,
54478         0x8860af71758a8ba1L,0x0b194c837160c8fbL,0xa40e6c80ce004d34L,
54479         0x09f82a176b14aaa0L } },
54480     /* 63 */
54481     { { 0x60abe588c21366dcL,0x729c0a4faf75daf9L,0x70501fd9acb93ed4L,
54482         0xb97e744e87a16d70L,0xa42e0a7a98e7361bL,0x1acdaff228b54cf3L,
54483         0xf087ccbbb7bd9078L,0xda6f3983663250e7L,0x66d693eebaf07c09L,
54484         0x79baf4c38cbaf157L,0x5a984e07dfca99d0L,0xab4d3247f26d8dabL,
54485         0x4d0be7017eba36f9L,0x37bb9e650e8dd216L,0x72aa4e24531c4f03L,
54486         0x77d1e984b753d85aL },
54487       { 0xd9373239d8e62367L,0x3361848bb9820cf1L,0x00c7e3445a9c97c4L,
54488         0x9a0ec9ae14f960fcL,0xcf41f0cf740474b5L,0xa5eede8fece065d5L,
54489         0xb1de5a4e9e808610L,0x17c44ae4ae0cf75dL,0x2fa563236b148d0bL,
54490         0x64fa740fd29ff2dcL,0xc605eb8a88cb212eL,0xf2c771ad6a863016L,
54491         0x6d6112e7607b4c17L,0xfe90ec0740d49785L,0x599be18be256e0e5L,
54492         0x4e6eabecca54adb0L } },
54493     /* 64 */
54494     { { 0x950323d3fb99cfe6L,0x7b09bc26c9334178L,0x64111e417cbdfb6fL,
54495         0x9114174489a75760L,0x4c633df910919cb0L,0x715fc7c7396bfd2fL,
54496         0x8ca195128cab62dbL,0x306724734db81aacL,0xe67a246bb4c4c54aL,
54497         0xd77ea0fabf229646L,0x5bed15f1fa5b5d70L,0xa5686da5c2f192f3L,
54498         0xdecac72a7f6690adL,0x0c4af2a2caa50b7dL,0xf44631c16049ad2fL,
54499         0x325d279604ecf056L },
54500       { 0xee11fb554848c144L,0x4e062925b6a7af32L,0x125b68e1369e0f9aL,
54501         0xad9bdae6ca53b21eL,0xf50d605c2e98ea1bL,0xbdb9e1539f2fa395L,
54502         0x4570e32de91532f5L,0x810698ae46a250d7L,0x7fd9546cad9d9145L,
54503         0xabf6772111e97a5eL,0xca29f7d5249f82e9L,0xa9c539a99851df63L,
54504         0xfd84d54b71d0e3e5L,0xd1e0459c041d2b56L,0xceb3eb6efd80096aL,
54505         0x19d48546e32a79d3L } },
54506     /* 65 */
54507     { { 0xfe19ee8fb540f5e5L,0x86d2a52f04e68d17L,0xd2320db0adbdc871L,
54508         0xa83ad5a8d03a7fc8L,0x54bf83c708bcb916L,0x092133ea2e51e840L,
54509         0xbce38424cb52dddfL,0xd5c7be4031063583L,0xc1ebb9df458e3176L,
54510         0xafb19639bc4dabbfL,0x36350fe4c05725a8L,0xac4a063484e1cd24L,
54511         0xadf73154c145b8deL,0x0aa6dd9eb3483237L,0xa3345c3dcbff2720L,
54512         0x1b3ace6cb4e453b0L },
54513       { 0x0343e5e990a8bdc5L,0xa203bf9d6306a089L,0x98489a358e48520eL,
54514         0xbd17debede7d1d06L,0x8fafa6d75f795d3fL,0xa4ceb630387b0a3fL,
54515         0xe0166b32ffddeafaL,0xa2fe20547e764e02L,0x55ab9824e871f304L,
54516         0xa2bd36bb952ec45eL,0x7b4c1484a90d20caL,0x5319f38775bcfb53L,
54517         0x34238a4a6982c4e5L,0xa2bb61c7a102921dL,0x1e061b64db3ab17eL,
54518         0x538ec33e192f0a14L } },
54519     /* 66 */
54520     { { 0x193496fea19b56cfL,0x663d77f47bb99acdL,0x8f04afa857d0a881L,
54521         0xcced3da2082835fdL,0x7e21faed5d82cec7L,0x6e175b99f8009c85L,
54522         0xd9c6e31b2d05a307L,0x96948d4a81487d82L,0x86ebd3f2d46f6655L,
54523         0x86851aa8773ccc49L,0x3e220f228b1640a6L,0x9f06e3a841a20b75L,
54524         0x2cfffe5e90ac0a6fL,0xf5a9b1da8ebeb3fbL,0x2587d9976e08e2c9L,
54525         0x6fd6029803e9f401L },
54526       { 0x54709f8d8eb7516aL,0x83058a74bdc598abL,0xd234dd9887e801ceL,
54527         0xfd0f9d90d17b8a96L,0xaa1e549f6e90f6abL,0x2496ff805a7ed55bL,
54528         0x0d9f657a6c254c19L,0x3cdea49cb8962575L,0xb685a3f02dff27deL,
54529         0x3c50e7fddb8bc04bL,0x904ff0ff987236b0L,0x494298fdbb0d5055L,
54530         0x34b3386de14be8d0L,0x7ad34e9c7c3d30d6L,0x1f2b32bde159fdd9L,
54531         0x84cfa23cc761e5c0L } },
54532     /* 67 */
54533     { { 0x13bc11eb8b99b964L,0x8e280c0a58e2fc47L,0x870fbc49d4c9a54bL,
54534         0x37a334a2bf6e20faL,0xee583d0dd7c88cfaL,0x05e029a8ef4af1daL,
54535         0x6d55e2340c2ef8a6L,0x61b6fdfe209e9b62L,0x3b1dad26bb8e080fL,
54536         0x5adbc1629392fc1aL,0x02ac0fe60aae3f4eL,0x8d99801ac2bf4d5bL,
54537         0x2333f93fc282fed2L,0x16dcb10cb52db33fL,0x09f90f84c55752e7L,
54538         0x287d4c51c84a0d8eL },
54539       { 0x5fa582010e9867daL,0x614589b31a874cdaL,0x005e27c5fbdee22eL,
54540         0xe357fef5e612bda8L,0x4e0dbedf2d3635f9L,0x62be70e46f125a86L,
54541         0xa09b98840d94a2e5L,0x7eb99a1528b5e5d1L,0x21b9416e751028b5L,
54542         0x1b137fd7e06d2cc4L,0x6fa1f517fea09845L,0x3ba1e966ffcecbd7L,
54543         0xd4c89a4a832f453eL,0x07b1e2afeca68fa1L,0xd0fb44534bd395a3L,
54544         0x0132a3dcd8ef9e13L } },
54545     /* 68 */
54546     { { 0xe53c7785576374c2L,0xe60526d184727040L,0x8a066dc8228ca044L,
54547         0x1fe1c1b2f1ce1313L,0x2aeec832cdeb0c5dL,0xa75966999cbf826fL,
54548         0xcd188e81de77a589L,0xe5ce0fe0118d1254L,0xa142a9840790b86aL,
54549         0xe28f043f39ac28ceL,0x4eef829087de5804L,0x83c31b32f639a8c5L,
54550         0xd70454a75887794fL,0xca635d5018b1b391L,0xcefea07631d9c795L,
54551         0x13cbee76b6f8aa25L },
54552       { 0x79cabe0f8d3f34f3L,0xbda9c31ca3617fe3L,0xb26dee23dd9426a1L,
54553         0xe9dd9627f29c9104L,0x033eb169e2c6cd3bL,0x8a73f492fcba2196L,
54554         0x92e37e0bb858c83cL,0xe4f2aca623b3fbb7L,0x8101fb1e64be00a2L,
54555         0x91a7826a948f6448L,0x414067b4907260e7L,0xf774aa50e30bb835L,
54556         0xf922ca80c999c06eL,0x6b8635b90ba08511L,0xbf936b5c25fa04f0L,
54557         0x4e0a1adae02e8967L } },
54558     /* 69 */
54559     { { 0x00ca66708ba29c4dL,0xc08240ce22988094L,0x21c5ca6716dda752L,
54560         0x689c0e45abbbfa34L,0x1d7545fd3ed28b72L,0x5f221198d7c56ab4L,
54561         0x4b3d8f7438759d65L,0x93490dfb8fe50b89L,0xb641f5d7e80eba16L,
54562         0x7b0da5eb79acb537L,0xab6b14970c1d5e5eL,0x2338e68da5da429aL,
54563         0xe010c4372f6d2f25L,0x226f16d26530f3a7L,0xefb0f7b6cbef08bcL,
54564         0x733e30d99f99c999L },
54565       { 0xecfe1582a42a38f9L,0xaec2d58e4730b500L,0x2ee2f2a7de976b2cL,
54566         0xf0539db5a969c1bbL,0x31954168fcecdb4aL,0xf2f7348ae7a8e902L,
54567         0x1d58d7cc3121541fL,0x5d25b75c2202ae52L,0xdea9965af40835a7L,
54568         0x3feb6a41529b4e46L,0x5c97fb6fbd27ad9bL,0xd87554c0261f900bL,
54569         0xb43031d904d5b19eL,0x33d5e9b8cb219b9cL,0x7a43d4923ee00bcfL,
54570         0x56facb39b79a5c0cL } },
54571     /* 70 */
54572     { { 0x019165a2a3018bfaL,0x100c6b249ffad984L,0xbbf1b1f655341a9bL,
54573         0xe6bd1d9725dc4cc9L,0x52850ed52bfffe60L,0x24e992cc7e5509abL,
54574         0xff6c502e4ceb59f1L,0x2f0b35731aa7d148L,0xe90c1ddde7e3aa46L,
54575         0xbaec9f45d1142880L,0x475cfd2665be5dd5L,0x83abb14e1febce13L,
54576         0x6aba482980942d30L,0x1e1b235d297e82c8L,0xb771cdbe50d8218dL,
54577         0x88599266d94d6cbbL },
54578       { 0x08847290155ccaf2L,0x8679ebc77c5b773eL,0xa88b2dd1b2dd08edL,
54579         0x960a180e87d475dbL,0x80fdb6b76694d02aL,0x3e8758c93f3f9e96L,
54580         0xbda3f6fa4ad836c4L,0x9400c58132fb387dL,0x25a785422550200fL,
54581         0x2a97c351776ecf18L,0x03ebf46e566db59aL,0x4743a28026545edaL,
54582         0xed169d84cf74ab44L,0xbaab931d88cb3f69L,0x70ae932cd8257196L,
54583         0x797224a6a0c09719L } },
54584     /* 71 */
54585     { { 0x632923f8441f3567L,0xc11c31682e24bf1dL,0x4b97726bb7671fffL,
54586         0x601746a77a5e1a22L,0x53dddea03addb417L,0x57867a3c7f59b846L,
54587         0xb012a98756cd7ff7L,0x1bd5fec9f19ba9a8L,0x750379a2f8306748L,
54588         0x7763445dab8c05d1L,0x5d7f441b7903f42aL,0xc011674da903e46dL,
54589         0x1b1d3c4dadd126c1L,0xa2752aac61455b40L,0x4da42a68555c356eL,
54590         0x3ff09c15d820852cL },
54591       { 0x4c0a1bcef9cb7784L,0xaec539bc2422f305L,0x5f40f9fd0c414aa7L,
54592         0xd3aa316cffd42bc4L,0x42f5a4c32f358e15L,0x00bdcd9ed6e27682L,
54593         0x069f789ff8a5eceeL,0x8078018e05e14f5dL,0x2bb3e4938b40c741L,
54594         0x5dbc8c1d7917f72dL,0xe0eea664cc57150cL,0xa25ecc5ac3fa8920L,
54595         0x3c21b0f51c797164L,0x8f09a2f2634ad16bL,0x8e730fc558391d9aL,
54596         0x47ef18054fdfae4cL } },
54597     /* 72 */
54598     { { 0x9965f3d13da285e4L,0xba7d4dba3a01e3f4L,0x4738413a61214ad0L,
54599         0xd3b7d53522397549L,0xa53dbdcf5a730b92L,0x3130d92b332d165dL,
54600         0x44a2854182f97ef4L,0xbf62221c44dce1b6L,0xbba138587e2a0ec9L,
54601         0x33f32c8dcbfad998L,0x409e5f3fb5fed44bL,0x5c328c65c66217bbL,
54602         0xb00db69ffcdf71a9L,0xa23c2a21b8920788L,0xf8ab28e63ae6464bL,
54603         0x1a6b6e9cb8de0861L },
54604       { 0xaf6ec2b606af77aaL,0x2e60f5cda887f065L,0x87d214009f498c56L,
54605         0xdb595b59fcbaaf4bL,0x0fb592a1271ab855L,0xa0ce10e5d4349b0cL,
54606         0x9d6187d8887d8c9cL,0x03ee95f9154bd6dbL,0x8fe532135d06c999L,
54607         0xf4a7bc30fb6a64d0L,0x3d22af0d66a4cb60L,0x16952cef5d37367cL,
54608         0x6f0ea734997d8e55L,0xb447c70f731732d0L,0x00ab3034a9cb3942L,
54609         0x79dd018028510fd0L } },
54610     /* 73 */
54611     { { 0x04e0033a3ac7424eL,0xdb06b68860fda4d0L,0x236a9766bcb772fbL,
54612         0x294a8e2bf297cda4L,0x4b0aab85db013c6eL,0x3d2aec988723a3adL,
54613         0x0cae32cd13c84a6bL,0x21888f5e70ec169eL,0x739633bd42a88262L,
54614         0x68ac792e7b60d9b8L,0x89f2b72210769fe1L,0x8f3fcfe6d24bed34L,
54615         0xd35efb88a3eb24aaL,0xddecfa3f484c706bL,0x7cc119a9929ece0dL,
54616         0x87e5ad458d405436L },
54617       { 0xba99aa9d7d1000a7L,0x8b94affcae823833L,0xc8229628dfb83dc5L,
54618         0x2f59fe11845a418dL,0xa8b970f85d417054L,0x8918c26572b71581L,
54619         0xe4ef477dc0d1dd17L,0xb50b4cf33afad7c0L,0x21baea7901870a5bL,
54620         0xc77087f9bb3a2868L,0x7857531e124a59cdL,0xed74c26f57f43239L,
54621         0xd5f5ae250164c94aL,0x6608b7e2f094bf74L,0xf4cdb5bafdceea32L,
54622         0x0b712519990cc045L } },
54623     /* 74 */
54624     { { 0x5a290ca188d5c64dL,0x0596d749a7492534L,0xa04b0d3d2a00e925L,
54625         0x082cd02ccaf7b66bL,0x912b50c2ecdded83L,0x813ce9deff31646eL,
54626         0x62ae70c7c75fff95L,0x6f6852e07e2a4615L,0x320fd7d003804fd1L,
54627         0xb1a2a4dd8218e8d9L,0x4918a6fbafc645d7L,0xfb080fa1e8d9fdbeL,
54628         0x33d4d08a4470b6eeL,0xd2ba20776d974ef7L,0x8ecb95a769dae5d2L,
54629         0x7a3f423a7d69596dL },
54630       { 0x362d2ca69a929387L,0xabdb7581cb1c1fffL,0xd892ec9f7e51b6cbL,
54631         0xee8d86323a4e131fL,0x4680e3f15bd87561L,0xe3a597e1d4e7e732L,
54632         0x3cc72b7c5581fefeL,0xf3e77f8aca8cae0bL,0xfcc7d7dc5e2fd4afL,
54633         0xdd3a455221355b79L,0x546b24f2a2c07177L,0x415b532d0689621fL,
54634         0x2be9af513f78163eL,0x27d63b9b33d7ed21L,0xab019ef296802943L,
54635         0x2da5fc551623faf4L } },
54636     /* 75 */
54637     { { 0x62429cf3c8a5c600L,0xa7a80c223fe33e7cL,0x9ffda7400a57ddcbL,
54638         0xd1ae156d925b0c74L,0x097a43f96b100eb0L,0x169e945cef943c81L,
54639         0xa1f734e51128cf24L,0x04387c4a419f0133L,0xc007868b01044024L,
54640         0xe5416abf90359cf2L,0xf9c76fee478d54e3L,0x66219da642a2173eL,
54641         0x61e031569fe30141L,0xa0ff5ce393ef247eL,0x811792ba072b6592L,
54642         0x855f021970c854d3L },
54643       { 0x61fbfb6c847314c4L,0x97906155eb45b96aL,0x7102e1466ba2afacL,
54644         0xed51f975ab949781L,0x9d2f5b17c110c4feL,0x7ac8ce70aff57667L,
54645         0xe7366a216eb244e7L,0xdd1bbcec551c65c7L,0xb525060ae1a859deL,
54646         0x7a0481748ba7d2e7L,0xe1a2c541ab8ea8c4L,0x6e7824c36fdff078L,
54647         0x79b49fc714874b04L,0x22ae337f06b1f733L,0x1c3521926f8fe6cfL,
54648         0x292236cf525d0797L } },
54649     /* 76 */
54650     { { 0xcdb8d80a7d8b29dcL,0xd17a202408ea648aL,0x7db12c5eae92be91L,
54651         0x1f347d18fda72fbcL,0x11374b409e760c6fL,0x7361e8f1d8e38d91L,
54652         0x7714be9d739ac1f4L,0xc1f9701cb4df5c4eL,0xd9138ed86f72cae1L,
54653         0x1c7fe1f76ad180c4L,0xf8c185be9e2dbf9cL,0x835db2697c70c44dL,
54654         0xf997cfeab0d15b5fL,0x5101445a61e6545eL,0x16b0688425184e5eL,
54655         0x7cfac3597521e7aaL },
54656       { 0x811821673c0bc53aL,0x84b5ede37e751367L,0x3ca255fda3657a18L,
54657         0x096abbf4ba1fdd98L,0x9ce8369fc5da77d8L,0xf27b9ae7aab342c5L,
54658         0x06c91bd6972059f1L,0xee0dab30914ecfe9L,0xbb647fbb93f53f12L,
54659         0x30c38a7affa57e0eL,0x517d06ef9f2ad607L,0x49728d87bb99dcc9L,
54660         0xb0034af1446080a1L,0xcc810c3f12b9c17dL,0x7225f14f772a22a0L,
54661         0x6ce3dc7f1ddf82bdL } },
54662     /* 77 */
54663     { { 0xc07cd835a4397830L,0x4dd9290cf4733306L,0xdd35d3a829989e8cL,
54664         0x79902559563d8152L,0xf278d911e87de61bL,0x9c7340c71024e35cL,
54665         0x2d4444614a0d0e59L,0x63e7608ff32626a1L,0x627a37e9c4c9baa9L,
54666         0x0c56dc5176fffd25L,0xcb6defc8cef2a1cdL,0xcbcc0d56efc559d9L,
54667         0xe45f3fc5041cb692L,0xcd05c239e5161e09L,0x2a731ee95c3b559cL,
54668         0x85151122a3d0a16dL },
54669       { 0x782d033586ff19e2L,0xc2c60daa1da28603L,0xb2e78cfe557c7eedL,
54670         0xa8f6f9841bc4e8b0L,0xcc1f9b4b3df35c67L,0x96e136034764462aL,
54671         0xbf910b977c7ae0b0L,0x27c7f30551435956L,0xc14db15cf631eae5L,
54672         0xa51d61427e69b34cL,0xdec828515fc12ff2L,0xfcceae13fb887162L,
54673         0xda332ac1de1488bdL,0xa20374e22ee3e74cL,0x597ea1a1f0ae069cL,
54674         0x8b1159f277bdec04L } },
54675     /* 78 */
54676     { { 0x4af71a442f961d30L,0xbdf968a87ac7248fL,0xd32df87cb1a906cdL,
54677         0x00c10e2604abf925L,0xb8711759b9f04d4cL,0x00d54e60939705daL,
54678         0xf7587433c9f80849L,0x2e9abade6a7a2375L,0x5676d47894ac17acL,
54679         0x4ca0525bc202d99cL,0x95b8bcadabfae73dL,0x2371ed383405991bL,
54680         0x2b69e47a458a99c3L,0x7cac0b182b78c866L,0x6ceaa79be0232c7cL,
54681         0x0bd86433588f7459L },
54682       { 0xdea1a8b47e734189L,0x52c5ac88cfe5fa17L,0x444a4d4e11437664L,
54683         0xc2522308af9e9750L,0x78b1d0c3d30c6b3bL,0x2edae5f04c6df477L,
54684         0x53131d9a2ee88dd7L,0xc4e380eeacc93e34L,0xd499b1aca8db0e8eL,
54685         0x77348c167f5d49d7L,0xc96632571556ccd7L,0x65ce0e8c2611d13dL,
54686         0x2c95fe66b5a2fdccL,0x266988328658faa1L,0xda87d1f431c32c98L,
54687         0x46650598fcd91907L } },
54688     /* 79 */
54689     { { 0x4c6c13cc6b4a5efaL,0xc481989b1d07b265L,0x10b966ce8bdc69c0L,
54690         0xf54cfaa22c2531d4L,0xcb5f1808cad0a100L,0xbeb52538ee5da449L,
54691         0xa6240085bedd83ccL,0xe792dacfd6255c78L,0x883719062062058fL,
54692         0x96615e83ed1658c1L,0x4b549b277d28d542L,0xeaf127db83b75df3L,
54693         0x4f60df6d17fbb942L,0xd08631dbf6f7c930L,0x17c38f986018789fL,
54694         0x0c43574ab9a9280cL },
54695       { 0x76eb324c1d20cad0L,0x90decb098c61108aL,0xa6e9d39c6f06d36dL,
54696         0x6cd978babc0da197L,0x5948b1c0507ac5ceL,0x2bd47164c5497eb5L,
54697         0x2a9c4c0f4d5914e3L,0x772c5046a759f03cL,0xe7d7328a69ac847eL,
54698         0xa8d57d0c3048b330L,0xe60034e040f7baceL,0x823d9193a85f1790L,
54699         0xa6e9b66c5c859736L,0x22ca2c7a679e1022L,0x00e7a19c09023fa4L,
54700         0x324999f12726d5b9L } },
54701     /* 80 */
54702     { { 0x667eaed67c834915L,0x9f77aa6abc5eb64dL,0x729ebcb625d62011L,
54703         0x0aee24f2699fd9c2L,0xe1eb58742b8d4f6cL,0x7f12710c14c976d6L,
54704         0x91390335f6d9ea65L,0x668b704906b50064L,0x65969a0e0876ee4fL,
54705         0xf901bf3f2f9d9360L,0xfb1a8651b499e3ceL,0x80b953fbf2dbcaaaL,
54706         0x312cc566973b06b6L,0x3534d9c33af36c64L,0xe4463a5210ffd815L,
54707         0x57ea2b4bf18c2b91L },
54708       { 0x00f5e1628aa0f2f2L,0x8c7e75c50e46bcaaL,0x97ab479aa4a2c42dL,
54709         0xb4f308ea14baa202L,0xa901bd146943cc2eL,0xbb125feeeed58804L,
54710         0x6502c8f99d180f7cL,0xe53539191580c61cL,0x7e27806927101ee3L,
54711         0x7a0a40a1faa72717L,0x32edce024c75b153L,0xda23660b538f1c22L,
54712         0x4d511e98be307d2eL,0x24276e409baee0b4L,0xa78c39277ff1f307L,
54713         0x60480b46ea7935c9L } },
54714     /* 81 */
54715     { { 0x31087d663872ece3L,0x5f29be7d955b70f8L,0xb50b4fc79cf95bb8L,
54716         0xbae3b58ddbffa621L,0x0e61d280e022ba5dL,0x78ae51174181449cL,
54717         0x0b132840cf555485L,0x800ed1b6b8ce0b0eL,0x35dffdd578d5de3dL,
54718         0xf7e4237469a56b47L,0xd5e323698d910ae7L,0xb6ff52a06313c7c7L,
54719         0x5a2fe20da92de9e5L,0x41b347d3d12110bbL,0xc5905edb40c16f23L,
54720         0x0774a0d39a8f88ccL },
54721       { 0x3ae181abe3b6c106L,0x4ebe163f8de150b7L,0xcf75b82f6f354836L,
54722         0xaa0d20633ac7ac16L,0x5c680668291722afL,0x73941e6111545553L,
54723         0x17127e38bf5de3f7L,0x32cfdf031afb41daL,0xc6893c9187bc8663L,
54724         0x75046744a62c9c99L,0x96866e2d962c1947L,0x489ec8df378cdf4cL,
54725         0x3a60709b3407fa32L,0xd37d2159551290d1L,0x9623d303bab92273L,
54726         0x081519542432014bL } },
54727     /* 82 */
54728     { { 0xf9236d89fb7b2108L,0x3ecc83ccad75f9aaL,0xf7c72b15b4e1da11L,
54729         0x552aeaef0315c362L,0x11e140edf272fe3fL,0x99d79bf687843ee8L,
54730         0xce6b54fd1d9bb25bL,0xb20b0e215b1bad74L,0x54a0214f5b84c90dL,
54731         0x459bbf52fca6cec9L,0xe363c48d9e4df76fL,0x3045f84ed64cf17eL,
54732         0x8402a167f62ada48L,0x2c9e1bf36a74ca01L,0xe8cf9d41f691c42dL,
54733         0x5abf2178c2c4b874L },
54734       { 0x4777966bf3b3bccdL,0x0047e0f0be3e0caaL,0xcb8383b38c7d5043L,
54735         0xe77e3baf946fd5fcL,0x79baa785e9ec0e87L,0xd83c557cc8a18d25L,
54736         0x9b96e5af25befcfeL,0x4f05d15e98c71b61L,0x081f991a77e62da1L,
54737         0x1c6ec781cbaa3821L,0x7522f65de54d9bfbL,0xf5d0557344ed1430L,
54738         0x3035b31f95cafddaL,0x47e67f436378f5bfL,0x029f7cad5270b9d9L,
54739         0x15ad15874d916a48L } },
54740     /* 83 */
54741     { { 0x00de2eceaa588ae4L,0x552ebc58a371a232L,0xd00ea93471230444L,
54742         0xafbfa67de4b1832dL,0x29216341b689e843L,0x1f96bbbd61f4e2e8L,
54743         0x9542068404c29dc5L,0xc7fe382742317fd1L,0xe0a0aec663483162L,
54744         0xfc2b94d10700184fL,0x07219973fe1fbd85L,0x648b6ab1fb074352L,
54745         0x23bbdaadc46e5392L,0x0db8dd1f00fa56ffL,0x104815eb866725f6L,
54746         0x3f9c4cca52e81963L },
54747       { 0xff36b29732ce637eL,0x81a15f2df5d25cddL,0x1a1d052d8b02ad97L,
54748         0x2e5f3bbccfbab3e9L,0x60d2cbd7614eeb75L,0xd4491843cd5a793aL,
54749         0x2242cf75cdba2144L,0xa20705e788b99766L,0x64e12cc0ec77e132L,
54750         0xb1c14df6b61a9b05L,0x8fd97f0474825b5aL,0x956048213da31223L,
54751         0xde4867274d30c70dL,0xbcab8f151c12ee69L,0x5dc638b4668d893dL,
54752         0x6479dad6223f574bL } },
54753     /* 84 */
54754     { { 0x569044f3b05f2b26L,0xb35a294a80b9f76cL,0x8839fe284290f6aeL,
54755         0x761cfb23026a5877L,0x768926b62e5ff9c3L,0xbae6cd200b11c576L,
54756         0xdc85775672a03efeL,0x0cae074ae1bad63aL,0x3fe491a1d709d99cL,
54757         0x76c5ded66501d9c1L,0x1da6eca1c32aeff7L,0x50849d55c57683e8L,
54758         0x9e392e9cdf98d847L,0xfad7982f64d9a564L,0xf7c3bdb7a37b98b2L,
54759         0x1fe09f94f0860497L },
54760       { 0x49a7eaae7648cc63L,0x13ea251167cfa714L,0xfc8b923c653f4559L,
54761         0xd957619b81a16e86L,0x0c7e804b3c864674L,0xfc88134a1616599aL,
54762         0x366ea9690a652328L,0x415329604bc9029eL,0xef9e1994ae2aad2bL,
54763         0x9e2a8c527f10bef5L,0x73dcb586c67bf860L,0xf61a43fa844cc25dL,
54764         0xd74e7eea74eb3653L,0xf3356706dd240f02L,0xeec7694cfd83bcb4L,
54765         0x4de95786db62526aL } },
54766     /* 85 */
54767     { { 0x4867d3153deac2f7L,0xa084778ab61d9a8eL,0xf3b76f960ab7b2d5L,
54768         0x00b30056cfdf4f79L,0xd0701e1531ab8f4bL,0x07f948d59c779d01L,
54769         0x7c994ebc82675371L,0x1104d4ee48bad4c0L,0x798ce0b5bfc9d058L,
54770         0xc7ca898d309fa80bL,0x0244f225acb33eafL,0xd51e8dfc5b2f3175L,
54771         0x3e49ba6ba4d7be34L,0x1760f4c7bda02b43L,0x37e36a7e4435275aL,
54772         0x1c94418be636980cL },
54773       { 0x43a2131309dc1414L,0x060765fc43c93537L,0x6ff3207adf5f79ceL,
54774         0x6f18b1fa85d4cfcaL,0xf5c4272e63e995abL,0x121a09e4a82b3002L,
54775         0x82b65d1b97147f16L,0x4993c20c20a7fe26L,0x99c9cb98e6716726L,
54776         0x5a02d673feb440a0L,0x3f3fa9e1251b4bc5L,0x75dbc474a05338eaL,
54777         0x3cb4044b7b09f6cbL,0x6767da1880434609L,0x97851422098ceac2L,
54778         0x611bfbb2b55235baL } },
54779     /* 86 */
54780     { { 0xbdbaa55ef00ad2a1L,0x29efa85e14a290d7L,0x3b4a4768e92b1694L,
54781         0x67111bcd11ec8130L,0x0e42570288bd27b2L,0xf28cf2a3d9a03c06L,
54782         0xbb7c8d2df318884aL,0xe2ea1462e3aaeb20L,0x3353580443b85d77L,
54783         0x81ee4482554ee9bdL,0xeb2eee9ee6aa198fL,0x7a5aa804c26c5944L,
54784         0xa0ef2da582ab167cL,0x5a2ab47602fe21a5L,0x169cb3b83370298eL,
54785         0x86e6c5440eb3aa8dL },
54786       { 0xede033210b793d9bL,0xf79fade11ddb5eceL,0xf73fda9268930b64L,
54787         0x06aad97dfe4fd1b2L,0x073a5b1d92a4dc88L,0x8af8cbd8bc976d75L,
54788         0x60b4abb163ce26c0L,0x9c8300a9dcb1fb06L,0x335a594cda95b3d3L,
54789         0x1f97d7d4b37eac87L,0xa3d2eba220eefaabL,0x3258c906f3e828c8L,
54790         0xc832616f85ab7781L,0x725971928c28b617L,0xcd7196bc3233b82dL,
54791         0x83867eb919fa126dL } },
54792     /* 87 */
54793     { { 0x774fe73e22474edbL,0x2a7663941a84e1aeL,0x270329ad9c6dd6e3L,
54794         0x00c4a41514f8bf5dL,0x3ce2ea37d2267b90L,0x1275301511d24faeL,
54795         0x7c14d854263a1b78L,0x20c8401b1ae0b206L,0xf32a011b081f49fcL,
54796         0x1e8123fb959c6df8L,0xa328dc7c800e1d06L,0x5876a37824259a9aL,
54797         0x23ada8b5b7ef6c37L,0x023f6b6ea93d4c9fL,0x89f5414dffb6389fL,
54798         0x4b26bba2e628b39eL },
54799       { 0xd30b1cb45d318454L,0x123b749fd7436cb6L,0x3110c726568a7461L,
54800         0xc85de1231c84fd1eL,0xa5f8d6e608403d55L,0x395b6e139b1fabf8L,
54801         0xfe6d68c33cfedce0L,0x1d90381f94b91110L,0xf0a8ea812dcc6eb7L,
54802         0x59e804137e90ca2bL,0xbeb5fc07c8a25c5aL,0x009c253a5d84663cL,
54803         0x00b15073910b6a7cL,0x8607da4c4108f8d5L,0x02c3d9c3cb901e65L,
54804         0x4d697bc52c9615c6L } },
54805     /* 88 */
54806     { { 0xe0db1ef0efa8fb40L,0x29021c5b5ba3989cL,0xa8d6fb15809d19dfL,
54807         0x6b787b734c1219e1L,0x6417e16814ef05e2L,0x449342db8f9796e2L,
54808         0x2f878a5ebf84421bL,0xe71916d7e94a4536L,0x9818bba3ae119693L,
54809         0xec674be95768804eL,0x0a26074cf8424f8aL,0xdbc93b9d466ce6abL,
54810         0xb3f15a98c920078bL,0x9d10fd0d3870f1a3L,0xa61241d9e4e785a7L,
54811         0x76ca87a1e6c8cd80L },
54812       { 0x4357fb56e02e48b7L,0xfbd14b13cc09e9c6L,0xdb5f243524069cf0L,
54813         0xf878165c2c3b01a9L,0xe549e7c4e6956dadL,0xf2fe9538bbd60b68L,
54814         0x952f856b059dc653L,0xd3f60225b377fe9bL,0x6a0c7328bfe908c4L,
54815         0xce6aa2d3bc8f5f2dL,0xf721344324425050L,0x17e1266a3d3b3ce5L,
54816         0x75b5e43fc1677512L,0x1592706237fb894aL,0x152607532be3e375L,
54817         0x27e7f2c66da3b7beL } },
54818     /* 89 */
54819     { { 0x638f65ade6a15883L,0xd4a7e68c66afdb33L,0x6207b6abd3f12de5L,
54820         0x1c6ff95037b87810L,0xc0d44cb264acf6d3L,0x163ac601f2be78c2L,
54821         0x1c63cc5a1636980eL,0x3e92cfe895c9349bL,0x7738e0d841ec7220L,
54822         0x6169d7642d5fa961L,0x2aa776c1c3e028e9L,0x93dc5646b16d5409L,
54823         0xa0b27fb5706df4d9L,0x9e991170ce9c6b97L,0xea8e42be53c85f40L,
54824         0x02e9643783246528L },
54825       { 0x91540addae78ea1fL,0x51a1b74d7b670e96L,0xf9936441f7006826L,
54826         0x8f97d6ea7d7520c7L,0x0faa6a0269ce12e1L,0x2590aca879208342L,
54827         0x7a48386375614436L,0x07c6149ef381408fL,0x733bf584d7853406L,
54828         0x8761b0109abbb6f7L,0xe4eb249ff528a09aL,0x08781ed82e00ae3cL,
54829         0x864c1b252178effaL,0xcc1e62a29d513a7eL,0xedb8b94e1919062fL,
54830         0x739f53da4f16527dL } },
54831     /* 90 */
54832     { { 0x7a5f4a88924adc5fL,0x95646c16a818f56dL,0x0ec491297795f954L,
54833         0x2b48753dd19c5400L,0x16fa236b205912b4L,0x6b3d65f3e87a4946L,
54834         0xa7174a01045fd066L,0xb635031312a5e140L,0xa79c4b44a96b8623L,
54835         0x7a339d659ab003d5L,0xc72f30c63826f31aL,0xb4e7390c6f7090cdL,
54836         0x59ac6c36906ebe24L,0x39a7f06dbba4505aL,0x839991e1c58c413aL,
54837         0x020c23ffa20e0e84L },
54838       { 0x120e4adaafc74661L,0x37bbcf63277fc065L,0x41049cf6b6dce799L,
54839         0x5b8d6b537b161ba1L,0x22218431a9610fb2L,0xde9ec9d1dfdde769L,
54840         0xd32bfa4d42d80630L,0x3885702a6244df4bL,0xcdedd1ed45592dfbL,
54841         0x0e1df45bfb4e01b8L,0x8f4bded286e215b0L,0x809354876a937e6aL,
54842         0x415278ba8130f723L,0xc6dc469238a821f8L,0x2207b119fd8b4f8aL,
54843         0x76e7bf53f9269cefL } },
54844     /* 91 */
54845     { { 0x5f12842827ebd187L,0x8d3320abb65aadbbL,0xb042765a72258695L,
54846         0xda3f33f98f0986abL,0x411807a7aebff503L,0x25c776ca825f71a5L,
54847         0xc0de7bedff7df24bL,0xda8b0f42165f1fb4L,0x5f3ff737731f3ae3L,
54848         0x4cd1d7e7193e0a52L,0x8df84aa3b6b3ba46L,0xba84b897aa1f3782L,
54849         0x6e7960cce7733ac7L,0x4d46d6ab50981a21L,0x1ec12c257cbb80edL,
54850         0x79e7ad272b96ef09L },
54851       { 0x3cd970dc8f30caaeL,0x85cabcf10a6ebef4L,0x63c1863ec714616dL,
54852         0x1c50db0b519e3a98L,0xf39b896364cb13d6L,0xdf67d81f22547b69L,
54853         0x7157abb9d67db0ccL,0xccca25ba889491b7L,0xf689207c7a27e0dcL,
54854         0x34ae8fbe0fd43281L,0xa5d91f735720ec09L,0xb2f61909cdfd7bedL,
54855         0x1ec102324a039e32L,0xd3c3d65edb0d8fdcL,0x32c916c84fe5005dL,
54856         0x7f8c37ac4c0bea94L } },
54857     /* 92 */
54858     { { 0x33ec1e5443ac05e5L,0xda4a4da4cd8d3825L,0x86d88c0b88bf9e2bL,
54859         0x34d71dd0b53811dcL,0x655040d2a3c3aba4L,0x2bc40949b61611beL,
54860         0x1c2d426e279a4fa0L,0x535a5aa23b065ac3L,0xdaa8a32fc52ea890L,
54861         0x5a5deca79fddad22L,0x911f05fd2ab3b26fL,0x5dace7dbf37cd81eL,
54862         0x0e0e44e790d16b8cL,0x15e68aede4f5894eL,0xafe04999fc92a74fL,
54863         0x1d7703aa970e7c2fL },
54864       { 0xa8a4c81d3f0062a9L,0xe31eb2b8d96a20baL,0x66dd98df864bd101L,
54865         0xba05f5924413b614L,0x51a67a0de9a555f8L,0xacc2f0972e4b52d1L,
54866         0xab5daaec7184ab23L,0xce08b43e7c7f691bL,0x520e530b76c427f4L,
54867         0x7d352069e423ebdcL,0x6b5e39e834df14ceL,0x3dcbf295446305acL,
54868         0x682cb2e1fe34cdc1L,0xd4ac45d1111f5afbL,0xc5ef63cd47f296f9L,
54869         0x0a2c40ec93c20871L } },
54870     /* 93 */
54871     { { 0x09bc384faf5747dbL,0x3bad6086c06ab86bL,0xa406882e9e7c1547L,
54872         0x2d5326d155977abfL,0x063a9a05da81deb0L,0x9a86e4a7524b6111L,
54873         0x1402f87a4ab2eb90L,0x7d0721d4d5c600baL,0x1a2fd9a9f289fdbfL,
54874         0xf5dce66decde6f07L,0x62171277dab9fa73L,0x6d2dc49f6c474babL,
54875         0xdc017e1f76eed033L,0xb97175c04da825d3L,0x6c297e3d54b05e43L,
54876         0x2efb454656c9c87eL },
54877       { 0xa4712b008b21c064L,0xd186fe424a70629eL,0x6435b3409b74f0afL,
54878         0x6965aa437ec9e629L,0xdda14673c4c60d08L,0x0b656670bf3057aaL,
54879         0x7f05e8403ce86f60L,0xc05073a904401a16L,0x16b1e638294e607eL,
54880         0x2078325269cf7046L,0x2941141be8ce7d3aL,0xd38ad8d37577053dL,
54881         0xdba68fb3caa6630dL,0xecbeaff1e9504350L,0x9f5166d51d2d760bL,
54882         0x337532ce462891e4L } },
54883     /* 94 */
54884     { { 0x3f1118533a00bb9bL,0x2d2ffbae45f66685L,0x9ae11a85d4aee24dL,
54885         0x18ba1e1b0341856eL,0xa9ac81782731349fL,0xc13dfd4a545715b5L,
54886         0xa5f7423c5daad2eaL,0x30a483b9535b76a7L,0x92e9ada4ff873e9bL,
54887         0x15662d84723a1055L,0xb935497b8edac4e0L,0x61b6441a39d8fa70L,
54888         0x1541d75640d1589fL,0x62994237f0a05f0aL,0xfd8b00346bb28908L,
54889         0x192a2b5dd4cd32bfL },
54890       { 0x63576628365ced07L,0x029f32fb05de1d1fL,0x6d17b9bcbf40a7aaL,
54891         0x1b1b2a089bb50a47L,0x9389abbb795a6278L,0x52cff60fb34fc19bL,
54892         0xf3ab9492387d8739L,0xa8f053e66920ccd6L,0x3ef2dd4b63a9b4f0L,
54893         0x9ab0ede151e82129L,0xafba0c0b0838bfa1L,0x2bd5a7ac9ffc11beL,
54894         0x058bfd9595cc0878L,0x686d48a3f8c2f0c6L,0xc33abaaf1d9b31baL,
54895         0x632e22893bc0c268L } },
54896     /* 95 */
54897     { { 0x1c851d2015a1cccaL,0x4efe290c7e522bc3L,0x0b741d5518eab053L,
54898         0xae656197bc85e217L,0xae13141e01cf8b29L,0x2e2cb59366948478L,
54899         0xeb57bb0fc31bd8aeL,0xdecef5d6c264e788L,0x6fa856cc9cb96d86L,
54900         0x2db16813279183daL,0xf03f3820383d796aL,0x58a456ff1d0c6fedL,
54901         0x255898058a6abd9bL,0x339f52c583f96f19L,0xcf6ded8fda7e9ea7L,
54902         0x68c3d9c15d1ccd45L },
54903       { 0x67e26265e6b392b7L,0xcec1d9bf775d9509L,0xe16abcd4d76514f7L,
54904         0xd86f59b20de72e1cL,0xa66e43cd1adfb033L,0xdb34434005e457ccL,
54905         0xb67a79165681daa2L,0xc32e7babf0114731L,0x066fe16ed3b1e961L,
54906         0x924e298ef63d26e6L,0x9bea0dd8541add6dL,0xef9500df9982f971L,
54907         0x5c876e63c5f076acL,0x55e12ae5b23d396bL,0x09efbb362ec6747aL,
54908         0x8f2055ee233286a5L } },
54909     /* 96 */
54910     { { 0x4a4ab9e3b82c1af0L,0xfc65e9e7f2cae264L,0x4feaac0a60187d46L,
54911         0x27d3f335e393b363L,0x9c9f7c00819bacceL,0x3f7418b5b8aa6611L,
54912         0xffa94557372aae95L,0x937d78048db38589L,0xd10c86df6f1fbc1cL,
54913         0x48aebd89a2f0a0ceL,0xae5d5fa2367439ebL,0x103a6a0b3f17d2d8L,
54914         0xf233f68a411d9894L,0x7fece8b3218b67a2L,0x0422540f2319bf06L,
54915         0x1292c8c9340d322eL },
54916       { 0xf5eb55870386463dL,0xd4bbc2b20371d97fL,0x1b3645710b819c5aL,
54917         0x0cbb42d6cf04ad41L,0x5d819c7666939ec1L,0x8745ac13a01847e7L,
54918         0x4f704b021c7232e4L,0x2c9e58a0acb05780L,0x9523b8b3b561e295L,
54919         0x3384df0079f9ba35L,0x78231fc21eaa9628L,0xa2eac54f8aea2b90L,
54920         0x8075ed7730d1c263L,0xacb44ed5fb339000L,0x92546ac2f011293aL,
54921         0x7c78762beb821764L } },
54922     /* 97 */
54923     { { 0xb8f7d6fb067902b6L,0xb2823a43d1735980L,0x062cfb1259741dddL,
54924         0x6e391b074033f95cL,0x3831d0a368589b8cL,0xe3474d49522290f2L,
54925         0x4dab14d6222e1f3aL,0x8f00fcde53f08d39L,0x559917ae707f28f5L,
54926         0x166aa0ba068e607cL,0x602713e7d7e1f824L,0x7c2555404d6a328fL,
54927         0x0d2e32649890cd2aL,0xf2207944eca0b20aL,0x5c98dc0752f4e09cL,
54928         0x69403504d84de81dL },
54929       { 0xf8b7b366e5407206L,0x1ecf54cf0d88fa8cL,0x6fefe548f7272e6fL,
54930         0xd653137281ab4468L,0x52cb5f0e4e474408L,0x9e426b3a6490737fL,
54931         0x2576c19b4980d071L,0x91f346280f272cafL,0x78e60a4f468f31c9L,
54932         0x8776a32990844d89L,0x8a55700cb951582bL,0xab1af36514b1adbfL,
54933         0x22ebff92fbd343efL,0x32f9fb01b7d81f34L,0xad850e06ba6b30e1L,
54934         0x6da9e027bc5f9546L } },
54935     /* 98 */
54936     { { 0x21eee4c25c9490ceL,0xa96ec4a30df68381L,0xe6c607e0a4a9368eL,
54937         0xd8b0492a4bc262f3L,0x0846a210460c34ffL,0xf7ff7a6428df33cdL,
54938         0x10c5504421827612L,0x9d25fce9149bcd01L,0x725611cdcfc613dcL,
54939         0x159f7e8897f51ce5L,0x3fa3bf314e8c08b5L,0xea15611575e7538fL,
54940         0xd1e0a95191c84020L,0x0d2268bacf02ad0aL,0xa04c6ac4058b8e5fL,
54941         0x773b40b9b3515912L },
54942       { 0x00ff2cdc3631cfd2L,0x14c4c2d3807737bcL,0xd600616a338a5270L,
54943         0xd0e3306db32cabdeL,0x336738eaa70b17caL,0xf2f4aa8d79f353eeL,
54944         0x712f6ad9576f3ad3L,0xe427985289b2bce0L,0x05d8f94dda92ca30L,
54945         0x9891d475d8492dd9L,0x3e06a5ca4d15e4bdL,0x4725d4eb254eabbdL,
54946         0x31394acec0ed513cL,0x7e0f9859bbfaae6cL,0xdc125546833fd137L,
54947         0x12b46385c56c4f75L } },
54948     /* 99 */
54949     { { 0x810dbebd932951deL,0x96959d425aa69c94L,0x5fc49c04ecb2f08dL,
54950         0xac74f0cc2250b82cL,0x96a439a53aec4e1dL,0xc33cab9a90499acdL,
54951         0x2fccde6654d9b3afL,0xf4af285c3863ae8bL,0x2373373e46febf88L,
54952         0x751d672c3c9ab7edL,0xc1c51130fe12020cL,0xad82402f52f3e56eL,
54953         0x3489ab7aa4a64a81L,0x0a1fb661d9f163f2L,0x17c69be10e553317L,
54954         0x61c1935e7d88d417L },
54955       { 0x2e722d9b3492ae43L,0x1ef89d950538f05aL,0xae77e588200aab63L,
54956         0x2872c120eba4b117L,0x5c2432c83a461cb8L,0x315b3434cb938f26L,
54957         0x05bf2ac58c4c7dc0L,0xd2e501dd596b378dL,0xa8506c9fcb890c30L,
54958         0x3d0af4617c361f0cL,0x21f7b7185a35cbaeL,0xbd1035f1f3fc0138L,
54959         0x74628af58b248edfL,0x8d6421d048c9cae0L,0x75e3da392ca18773L,
54960         0x27ad0df271d3db94L } },
54961     /* 100 */
54962     { { 0x9e3bda79305b5aedL,0x2c67d4a45998d6a7L,0xc855e1d30f7eb700L,
54963         0xc18a7e9e147d1c44L,0x3ea99618c89540edL,0xa53be20a7e6bfd20L,
54964         0xc9487e64ecc14437L,0x7297920734ef85c6L,0xfa0d4e71d5e1ebd5L,
54965         0xfda2b1e64d48d6b6L,0x782a1e0566e200d4L,0x2a3c70da5a5366a1L,
54966         0xfe3fbd2b1a473738L,0xd7ef8c067fe020e8L,0xec686fdeeacfb665L,
54967         0x5d9b5e276dd1542fL },
54968       { 0x3637c5a5cb3e472eL,0x2153d92730a1405eL,0x009992e5b4498558L,
54969         0x18f00ccdf39a0851L,0x26237c11b5c6c560L,0x418ed4081343540eL,
54970         0xfef7cbf07e7f3184L,0xecd92366bf48576bL,0x1b75be1abc94c91aL,
54971         0x8e1778de4a162276L,0xc52e57d3c5c6bcb8L,0x5cc382c75ab71858L,
54972         0xe12c2c283f6e39f9L,0x4c7e0ef2d62735fcL,0xe071deb1835a5996L,
54973         0x24f891cdcbb8c766L } },
54974     /* 101 */
54975     { { 0x24ef60bf6778c1e2L,0xff49c03d00d5be5cL,0xec11986e2f01a09fL,
54976         0x59a728a4ae096e58L,0xaabbcedb7077984cL,0xfb473bd2870ca5a5L,
54977         0x8c928c614de30e3dL,0x3fae7f9a4f67abcaL,0x83c2b2ebec21a9cfL,
54978         0xafa70d629cd9b5deL,0xadeaea59c60b18dfL,0xd5fef7be4049b54cL,
54979         0xfceebc766dd310e3L,0x7748efe38f6321ccL,0xfe9c32b118ee8af5L,
54980         0x863ac3cfd42df612L },
54981       { 0x0a36fca7b85a2fe2L,0xf3e70d08ee429dc6L,0x8c9ba209141c3944L,
54982         0x306a810667272a0aL,0xe69a1555f968bd06L,0xb86f7e47153c603dL,
54983         0x9706614aef56e4faL,0xc0dc36b898780b4cL,0x43657fe23a1d3263L,
54984         0x01f97a86435522c9L,0xd91897f6edfef679L,0xebbe31d46daa17a0L,
54985         0x6f17910085accfbdL,0xe0da6e328f9fc1deL,0x1c9d53dbe1e7142cL,
54986         0x3e3f1b1e8b86725aL } },
54987     /* 102 */
54988     { { 0xb7ea15c07b7fbf05L,0x992f11b61f1a3882L,0xc9ddd95ad1dcd1bcL,
54989         0x31f5b7faad0f7e8bL,0x2936e5ebfca7ab79L,0x30f417dc19a55be6L,
54990         0x1f6f4e4343cde554L,0x971f5e6582f044bfL,0x73c3b8e44288c408L,
54991         0x61aac59fb807f575L,0xa64ee2dd818b58f0L,0x6f7a0a6097a3b0d3L,
54992         0x8b85ecc80394b058L,0x9a059474bfb3517dL,0x89ad5977a79c3f06L,
54993         0x81208ed8700a8025L },
54994       { 0x1093509914c4ce37L,0xf34bb843a1aa48a6L,0x86007024580d58e8L,
54995         0x6db42c49b375b8baL,0xac365524ed3bde83L,0x5521e1b4649233b6L,
54996         0xbc7cc5d564dd946fL,0x9c14b035bfb5b6aeL,0x7f22ba180146c1a3L,
54997         0x0b62fbbc872214f5L,0x3acfd7f7b4921764L,0x5ff10da1cb4d6df1L,
54998         0x660e262062600a91L,0x7ac7da9d81d9167fL,0x6e8e260cb6e7a199L,
54999         0x44383fb880deb3c2L } },
55000     /* 103 */
55001     { { 0xe107f01de44f9af6L,0x36381a4d8cb1fa1cL,0xe65be3ecfb7dd493L,
55002         0xd0b8435a26a8839fL,0xee60f9153ec789d8L,0xe25fea502bcc5e1fL,
55003         0x0477c0c57e44a81cL,0x349e9f83230ba5b8L,0xdd42f32fde180dd9L,
55004         0x8b039eaf64a3d11cL,0x80ef884ebeb7083aL,0x288e60c4f12742cbL,
55005         0x44156cc5720a0262L,0xcd547de67253b77fL,0x9829a6eca6013a59L,
55006         0x8aee708f0d548445L },
55007       { 0x18f22d9c32c54409L,0xa9ebfa4675ebaac4L,0x90e2e92886284981L,
55008         0xd0201f6f6b3a8e0cL,0xc973016cbd77641eL,0xf926f2f070170575L,
55009         0x4984048ffec0ce01L,0xbf696211f319d304L,0x74b5c844c91a88c4L,
55010         0x4c40fbcee0030a82L,0xbed67525e4f6d521L,0xaf7e47cc29d67d1eL,
55011         0xfa307db8c21d3536L,0x56b6c46abbb29405L,0xf059a7e3033e805fL,
55012         0x970f61fe6096a5a0L } },
55013     /* 104 */
55014     { { 0x1bc53d231bec8e4aL,0x8809ac1435a6034cL,0x4ee081da509e464dL,
55015         0x496ae1fd8a488235L,0xa1ae9863325864b6L,0xbaca13e974cd069fL,
55016         0x3738cc58b1d8a6b4L,0x5fa71f58e76b9da4L,0xc919be88c7eb16fbL,
55017         0xf5c8f13fad4e429dL,0x4583b6712499f9edL,0xbce20115a10d8bd7L,
55018         0xf66d76055790bb7eL,0x9316aede482b78ddL,0xe0d8fb2d75f855faL,
55019         0x404b5b945a7dcca7L },
55020       { 0xf9ee682a517a15c7L,0xaae4cfbcef880202L,0xcee2c1395106a354L,
55021         0x5de60192170febe7L,0x589e39fd73d0c54bL,0x195c71358c9092b7L,
55022         0xcb7ed53f0a7bfe5fL,0x2bd9242af61cc979L,0x8d2ef16c5395f7d9L,
55023         0x0d4ac1ca70b32f09L,0xa587526d52d185c1L,0x2932b04a942d6195L,
55024         0xfe25a979a500b0acL,0x5fa1f4ae562fd230L,0x60f55af220da253cL,
55025         0x7faa11b583146002L } },
55026     /* 105 */
55027     { { 0xb0ba4f0c6e402149L,0x3584cc1d963cc119L,0x7740dc1aa6527476L,
55028         0x3f77ff75c95715f2L,0xb2f234ad3f89fb0eL,0x55159032ef9be3ffL,
55029         0xfc9fb21d04237e82L,0xeb2eff38a153ed93L,0x89d53ae010041d13L,
55030         0xcf2e545b7f1bd828L,0xdd4a27ce43953ea5L,0x00d2e5d4d85e75c8L,
55031         0xeb93ed62241be1c3L,0x1e53f25f0242032dL,0xb9957636c3a4e701L,
55032         0x14b63a52ed98febfL },
55033       { 0x7610b55371c43336L,0x19dfd4a623a4824bL,0x7b97a2e00286051bL,
55034         0x86abbb9c8f5f1edbL,0x67a57d779b67daadL,0x8ace506dcd5ffafbL,
55035         0x85da9f9589ac3c63L,0x081cbaa875a3d150L,0x03353d8fe9346ed2L,
55036         0xb2ab61f1a1f9a02dL,0xb0cb09373a659c71L,0xb7e0e30b4f5df8a1L,
55037         0x77c4c741eb7d5a1dL,0x8f046c9c728e5cf0L,0x32dd0bc7f7c171acL,
55038         0x02485873836d2655L } },
55039     /* 106 */
55040     { { 0xcd40dd2375a4cd8dL,0x132ca43397bcba78L,0x30c5cd84258d61f5L,
55041         0x0a7ec059da1e8e68L,0x07a8f1711d65d40aL,0x869e655ef4350d76L,
55042         0xb98ce6f05983ae42L,0x7b61391d9d8bebd0L,0x3a529e25b1ba5d49L,
55043         0x46f732e91f6b2cf6L,0xbd66ec6a3fa3b629L,0x397950ecc3ef0ed2L,
55044         0xee9008cb5f08b476L,0xfd6be425965a0e2eL,0x78ed513c1177bc87L,
55045         0x6798cedffe512daeL },
55046       { 0x49e3f8fd1b97c5c6L,0x39fbab3e78c3b33fL,0x4427441240f595baL,
55047         0x174225b95d7d4376L,0x880b3fcc79c44777L,0xdc3aca833296b245L,
55048         0x55913df71734e184L,0xa4db23d39c934472L,0xcebb3733d1420a11L,
55049         0xb9d20cf9f3608bdcL,0xa618acf630cfe13fL,0x75f06b315f30874cL,
55050         0x506efe7f9f0005a5L,0x8aaea78c01bfc9dbL,0xf9179255f78e7c41L,
55051         0x3ea7aed252e96395L } },
55052     /* 107 */
55053     { { 0x98617e045b06ae25L,0xbcac148dcb5750efL,0x91ea2f0e604c2ba2L,
55054         0x00c19f6b76b78975L,0x79b9b6d0651da181L,0xf3225bebc945705bL,
55055         0x30b435f35c005bf1L,0x440b4482bc24d86dL,0x2b8f0996d6373777L,
55056         0x65fd6c561c44b4dcL,0xe9405ee630906999L,0x19ff092408aa1ec1L,
55057         0xeef3246a3d2f2895L,0x016c3765bc746797L,0x62d2569fd0705f7eL,
55058         0x6a8ad39c05250044L },
55059       { 0xe45f020d46be7282L,0x9405afed21380f12L,0x4cdca5bdd5da6ad0L,
55060         0xc2d6f1847f8be61eL,0x20132953596b8178L,0x8d3b1e7b7a8df954L,
55061         0x757c61bb39572b4dL,0xd749b57b80cc3b56L,0x9590ff9337b3ffecL,
55062         0x39bbb653145dc94dL,0x70c1c6062335e573L,0x9c2e72d7f763febaL,
55063         0x4768e424cc61b732L,0x777d2fa6aa73f2caL,0xdee4dbaac5cb58cdL,
55064         0x1a1811799cfae1aaL } },
55065     /* 108 */
55066     { { 0x6f6ff62f77575ed0L,0x18f14fa97d1da99bL,0x2e72aefb69efd7f6L,
55067         0xc45ab4cbddc28633L,0xb0e20d48586c5834L,0xd397011a39775dd8L,
55068         0x0130c808f4134498L,0x2d408ebaf5115ed8L,0xc506a05c0260ded9L,
55069         0x9e5b736219cab911L,0x4cf508c6e8693a86L,0x4e71245fcc773617L,
55070         0x2f71aa1f95d89ca3L,0x4bba7c6a607bbc98L,0xf3a515e7212b7fd2L,
55071         0x7d2ddc759230f5a8L },
55072       { 0x3d05816d4ed2cae8L,0x4cf6bc7db9c00377L,0xc23e98e6646b08d4L,
55073         0xf9ee6c614b9c0180L,0xe11c9a13ef9179c1L,0xa5b6147e8ed9688aL,
55074         0x7afeb648d06670a7L,0xd670333c17685275L,0xa89dd96975f9e8f2L,
55075         0xbb57228d37a68adeL,0x21a05d5e454cb186L,0x4810158f063dd550L,
55076         0x92dd4f084cb6caf3L,0x70c4d8527854abe7L,0x845969dc6e729d76L,
55077         0x5a52f87ab1bf40baL } },
55078     /* 109 */
55079     { { 0xed019e9109ecacbdL,0x6544023d7b89bdeaL,0x7cc51f0b5707371eL,
55080         0x14832b0416c8e217L,0xb1aa668281259ab5L,0x6e100f9223e361d4L,
55081         0xe593eee9e3a95c2aL,0x699b6bbd16c10e26L,0xad4878739473a13fL,
55082         0xf1c14dc5b274987cL,0x57dc00752559e2e9L,0x8449849dc3d47ad2L,
55083         0x83df278add527793L,0x770e3ec8eefd5b99L,0x2ae5844676bd02a0L,
55084         0x17f027643e705ffeL },
55085       { 0xdda4010d29abea1fL,0x636b96952407ac4cL,0x96a601290433218bL,
55086         0xf221fc3b163d534aL,0x05ba15beccc20565L,0x1238e54d96285577L,
55087         0x1b144257878804d3L,0x96fbf304a89a9fe4L,0xc8a7f06c4be642b1L,
55088         0xdd1a20e86e2b085eL,0x8f7f27c2ff4a591dL,0xc17b0753a4a343b8L,
55089         0x684b1e88bb173d4dL,0x3accea443dc07bbeL,0xdb15c88d4c441d77L,
55090         0x0ef0309a53e5957eL } },
55091     /* 110 */
55092     { { 0x4fc25721fa8e5b60L,0x646938ad691c0bb2L,0xe46d4b760b0a2248L,
55093         0x863f9ac27de16877L,0x503bb6ef2721c630L,0xf8c199df0b67fb02L,
55094         0x78c1ed72e07abd39L,0xcf9deb7bb32f0ddaL,0xaff726f06c3c89f3L,
55095         0xb7008b2d1972225aL,0x8f5a61174f145f5cL,0x4e0e6f8c457c4f37L,
55096         0x8bbdaa441c453c64L,0x57be326da6e92c80L,0xa9bc3fd95d773561L,
55097         0x3d3b6cc6bb37b72aL },
55098       { 0x6e6f12cc9722c880L,0x3a1b6ae7286b6889L,0xba1cc09bad2fafecL,
55099         0xad64ad7a43bb8befL,0xa5af6a0097c3f4c3L,0x2afcb0d9c353a91bL,
55100         0xca13fcab69ccbf6bL,0x699a1391f2abc190L,0x2dbd554223a247e5L,
55101         0xe206180f95488d9aL,0xba9e7bff1244cc3cL,0x29297abe87d3a365L,
55102         0x4054fa38fa4ca5e2L,0xb390623d67be1b6cL,0x1fa67c5778f41a44L,
55103         0x2e946e43c7b544e7L } },
55104     /* 111 */
55105     { { 0x2980fddfc60934aeL,0x2c3e7eff164206d1L,0xf75e7f96416ed75aL,
55106         0xfac60cf35cd0b2dcL,0xddc4bece1faad87bL,0x753fa87c9849e5ddL,
55107         0xc5d516a32c1bf1aeL,0x565dbea814732b4bL,0x007ebe3ace48696bL,
55108         0x40ca74d6cdb97694L,0x3f5cd27065e4e7beL,0x74847c013aac4ebcL,
55109         0x6762e03443d6c3a1L,0x690d8c95467a076aL,0x768d78d61eda677dL,
55110         0x0997ce550181d8c2L },
55111       { 0x9297746c965a0b81L,0x48b58be6e5e12dfaL,0x5573b3c4715f437fL,
55112         0xe425e907b565c459L,0x4f43f5121582797cL,0xe5dafa6f8ea5474fL,
55113         0x2aeb8fbe13de04acL,0xed7f95f0e8a07c83L,0x3e012a6e662c09feL,
55114         0xbf96e9b8c742cf17L,0x8ea5759ae28a1c45L,0x475941b45cf4e2f3L,
55115         0x7dd3c02df901a019L,0xe7a4deea70916b2eL,0x50b272b52fa9b988L,
55116         0x96f9f09fd0917fe6L } },
55117     /* 112 */
55118     { { 0x78e8aac42c310a96L,0x32a98303f7a2a734L,0xc46ca83d23962207L,
55119         0xad131e6ed9541280L,0x5791fc5e2cabe911L,0x50cb77eb841b6c68L,
55120         0xaff93dea3d3c8878L,0x06541f1df1007bceL,0x4ee729c255cdf1fdL,
55121         0xe0f71317323e3972L,0xa2de7a41ad4d08c1L,0xa9912abfa35e22bfL,
55122         0xa050122b89b03325L,0x8b9e51f406514d4eL,0x423c7aad79d3e0abL,
55123         0x71998e2640b8fea5L },
55124       { 0x40140fcdceb6ed78L,0x653cf37718534516L,0x0450b65ae8d60dccL,
55125         0xce6c1a769dac55f8L,0x8a96a92dae05686cL,0x2fe4476212712562L,
55126         0x747bcb50a4f39425L,0xf0ec6ff2fc531fc2L,0xc97c344710fe9ff0L,
55127         0xfb4887839c792cffL,0x552c5248026fb019L,0x4001a29cd804c290L,
55128         0x742b5ad835c8ca73L,0xc3781f176ee5dfa0L,0xca6b85f03dfa4ab1L,
55129         0x8389941a0b0d32acL } },
55130     /* 113 */
55131     { { 0xc0f062a2de067dffL,0xd4f32690bcb80162L,0x98cd990d0707a2bdL,
55132         0x5afc63b8fae4a391L,0x684f1b7bb32ad814L,0xb0a2dce2f199dfb1L,
55133         0x2260e17f48f25848L,0x7393db00c2d5e862L,0x9e88f854338cf171L,
55134         0x0067942902acf522L,0x19157cb86835af3dL,0x2faa6f92b8a2614cL,
55135         0x04ff95f5134ec46cL,0xcf00626efb7a8135L,0x454b3d05b37a4704L,
55136         0x1fbfda312694ec25L },
55137       { 0xfdebb657c8f69c77L,0x92a8278ba3df88faL,0x463b5571c1fb78b4L,
55138         0xd2066a1a11c71a33L,0x10c88143089958b0L,0xb975c7e0cf9d67a6L,
55139         0xdaa5d20873037b8fL,0x5ee5005d40bf5861L,0x300e6ce77dba69a9L,
55140         0x893c3cb3c962cc74L,0x0ac986294cf84055L,0x0a7ef63a225c9d70L,
55141         0xfe184869b91e47e8L,0x1b9d7deb8c2f84beL,0x67788915c0e278bfL,
55142         0x4f9488cac426f19eL } },
55143     /* 114 */
55144     { { 0x610dfcd4dd51b8ceL,0x0857927836230e80L,0xedc7ff1c36599562L,
55145         0x905ead4be2cae877L,0xa1c325d9e7967608L,0x3e39edddbd38926cL,
55146         0xda92c8685f6f0a4eL,0xe16f800af47a0fa4L,0x50b4db5be5f60aabL,
55147         0x3665412f983853d3L,0x64b622509b79789cL,0xea5600584e0e72b2L,
55148         0xabbd4901e555c2bbL,0x378419a717292e11L,0x6e0b5aaae174218fL,
55149         0x688e06848f796b92L },
55150       { 0xcdfef641313b8f64L,0xaef11b7b942c7462L,0x067cfb775c0d8abdL,
55151         0x608ea5f0af4041a9L,0x23d5bd826935210fL,0x5ab904fc27917a08L,
55152         0x85dbb1fe45d22d21L,0xc3d5e5094d36159fL,0xaebb528e1d39b8f2L,
55153         0xdd5ca828f44acef0L,0x24209adf20c57a54L,0x5742b43378f95f44L,
55154         0xd11fa7d9a9337d37L,0xd66a0c09c64cfdb7L,0x56e55b8f9bb817ecL,
55155         0x1723c7e3e4c41265L } },
55156     /* 115 */
55157     { { 0x9a6486d8dc8b43f3L,0xfc3e0e6126409e68L,0x1889c437d9b46003L,
55158         0x3a8503356284ec7bL,0x5a3665c46a9dbaeaL,0x7bf6941de978933cL,
55159         0x1ed5a51069341490L,0x664a7b7a8cb8002dL,0x603f76e460ed0a59L,
55160         0xc3e06ba31f4ebf27L,0x296ced41f2c38a7fL,0x2ac18f79cf1db08aL,
55161         0xc919e882cde7a3b6L,0x15e77d29dbf68b06L,0x21978baa4e947cb5L,
55162         0x84bf542b7630993aL },
55163       { 0xc1decda9e364f21eL,0x0d6cf345012e557eL,0xba246848588f90e1L,
55164         0x9f6dda4be3b104b8L,0x6bf7a346e3aef57aL,0x210299fee8327ea9L,
55165         0xaa99f487da95e6c7L,0x24ff813ed2cdf645L,0xd1dbb2d28bd414b8L,
55166         0x065101afcafa1a61L,0x7d9f4b9a9cdebda4L,0xaf41b395e41039e4L,
55167         0xe3e9e6bac50adf42L,0x4f2133ae341e9e49L,0x4968c0f3cb157f23L,
55168         0x383f827bda068153L } },
55169     /* 116 */
55170     { { 0x2ec46a216583ff4cL,0x4e645a294ad709e7L,0xdc66e9cfc04ca12aL,
55171         0x82f128f49160a7e5L,0xbfb227b1569c762eL,0xf80c7963c2edb8e7L,
55172         0xa7dafe0649a0f688L,0xb7e417542d14b8ccL,0x3a0c5c5386de40beL,
55173         0xf0d052861db79331L,0xb902ce69fbfe071bL,0x61e46956210e9903L,
55174         0xfaef874ef703ebb8L,0xf668947edd5f78b6L,0x6fe865475af5ea3aL,
55175         0x3b121f1543f94625L },
55176       { 0x5b26e847659275e9L,0x47581cfd6d0fce50L,0x55f5cbfd8aa3f1efL,
55177         0x1e7be315e484e60eL,0xd8f1a20ffe9698e4L,0x25d46da97ab04784L,
55178         0xa526db75834cdb3eL,0x1fd408d98d08a009L,0xfc004b205b5ca816L,
55179         0x5b3e3bb365e4bbe8L,0xf50cc125759bb6efL,0xf05fa817c2fac737L,
55180         0x9ee102d2d273951aL,0x2a8e540bfecb3367L,0x673446fb2a6a515fL,
55181         0x5505e1d137290c83L } },
55182     /* 117 */
55183     { { 0x0c3014a1d15e68a6L,0x6f9f0b2664dd35e5L,0x18c3742d03ad67f9L,
55184         0x74818c0ed2c14484L,0xc51811690d41a3cbL,0x65c8c83fc49f3e9eL,
55185         0x9b260c612c279386L,0xf6086faeced04e9cL,0xa7b2ccebfd7c4758L,
55186         0x4b3c313390297fd8L,0xca8264e809701ac8L,0x9f976a87508b3762L,
55187         0x5d582714983a8dfeL,0x350d2669d9d598e9L,0x85cb89cb0f6fd348L,
55188         0x617d80d4a574317cL },
55189       { 0x4cef267e70022b67L,0x80536bb53768b94aL,0x3153a566d2784462L,
55190         0x49054d4438243919L,0x8d11e1725df78c4aL,0x9b252a71d5a1e35aL,
55191         0x07866c808171e31dL,0x0a8501db1b38a00eL,0x2ed932b8ce770236L,
55192         0xa2d776098edaf7d0L,0x3aee5dabb93006e9L,0xfaffc8c4bbfeb036L,
55193         0x077b96784e21b38bL,0x491fc59fdca8e069L,0x3f624f550e938471L,
55194         0x5156f5087cd1780bL } },
55195     /* 118 */
55196     { { 0x58234e220206e8d0L,0xf5f6f5d47f15af32L,0xafab7289d638950fL,
55197         0x66ec4d097d4495f4L,0xad890c5d68da80a9L,0xe4aa092064f8a36bL,
55198         0x799e257e0f4d5c5fL,0x44c677ae24495e31L,0x720387b3a5b8e352L,
55199         0x703790f475a287b9L,0x54895cc5c3c1f2f7L,0xb8680f9b41a7fa41L,
55200         0xfcd47458b00b008bL,0x149cc838ba6473cbL,0x78ed5f7aac9be19aL,
55201         0x5254599cb33765baL },
55202       { 0x08739679a21b54c4L,0x029ece2ab6497d9dL,0xf14f1a92c8488640L,
55203         0xae48dcffe9fa79d9L,0x14b911c246c208dbL,0x5ab0fbf2dae3f69eL,
55204         0x180ac87ed1edb838L,0x146fd718188586bbL,0x210eb6545467cbd0L,
55205         0xaa2394081667cfeeL,0xdb125c1ab73d1a60L,0xde685300881c1cbeL,
55206         0xfe34c71337c30232L,0xc6c6070e6f3c8d18L,0x07e365bab4af4e83L,
55207         0x22f0a7eddcf82b45L } },
55208     /* 119 */
55209     { { 0xe262791fea7f1b7fL,0x9c3d8c5ddcff09d4L,0x86c2a9c339c7dc58L,
55210         0x4dad40174276e8c0L,0x0a918f59e9fe1d56L,0xb8d796702aa810c9L,
55211         0xeb7a88364aa5cdc4L,0xfc4c23bbe7afa72eL,0x4dbb5c9e4ac86908L,
55212         0x37e390136a0c7e6fL,0x855d700149c218d2L,0xe475bc6794b324a2L,
55213         0xc98a8dc66287a071L,0x395a299b5fb4323cL,0xe186c3ee0c0389e9L,
55214         0x79f81e6f16734c46L },
55215       { 0x83f2c1f3364f3c4eL,0x536b2ac51367e14bL,0x44a6dcfc5933e43dL,
55216         0x34e5947510d961feL,0x08234ece7e3f2aaeL,0xcb92e00abdea7f25L,
55217         0x1efba4f0a791a124L,0xc2086fd21192d53aL,0xfec0d0fcb51c8af6L,
55218         0x48d1b2cadc0f1b5fL,0xb07a388f812dbe19L,0x40873a6adedbdd45L,
55219         0xbc2a1268d702589aL,0xbbf6e3a817e27b64L,0x73ee56636d386e85L,
55220         0x442ecd379de7c000L } },
55221     /* 120 */
55222     { { 0xb4cd1ae68a2f90a6L,0xf277d41d6f5ad0ccL,0x6a3828c4401d4b8eL,
55223         0xe817a134d8376631L,0x142b758df5e1124bL,0x25fbc69dfd6b95e4L,
55224         0xa30c9f5fd74a9e3eL,0x5ac0f163d89663ceL,0x32a9eef70ce6386dL,
55225         0x7a690ea5d8ed5544L,0x5de23ff09889427aL,0x75ad36a5eaaced58L,
55226         0x3514a6c1d3e18465L,0x3d9162c37f093910L,0x5c10add9e33d56e8L,
55227         0x85176b7306aa691eL },
55228       { 0xa32110fa28a21e38L,0x97b6379d5773d538L,0xd3697bbf2d020dc4L,
55229         0x59177593961833cdL,0x6d7045fae5fa8516L,0x3390f29a786ab5d2L,
55230         0xac0bda30dc4f5b70L,0xcca0240adcc615c6L,0x8e1f1702c5146d91L,
55231         0xceb472d0a72cef87L,0x848407080b669ba1L,0x79b08f9d7e61aa0aL,
55232         0x388160be4669560bL,0x23935c2d948eb71eL,0xd7fd83c09431590cL,
55233         0x8ab154bb6e5768b3L } },
55234     /* 121 */
55235     { { 0x28686003353c4a96L,0x4e5c60e8905cd835L,0xbd5913648f66f8ccL,
55236         0xb6b80b989faccf9eL,0xbc1c1faee32639e5L,0x2f6396d2278aadebL,
55237         0x00a796d01898202dL,0x18ab548f3a474835L,0xacd056c3b31b0e3eL,
55238         0x15ba68dd0164512dL,0x203836d94b03f3bcL,0xd64eca6bd8f206c5L,
55239         0x931a361e9f1779b6L,0xd82690fc52ab34a8L,0x342bb8e092922e22L,
55240         0x1bfcdd84e00b02a9L },
55241       { 0x310b9a4375a365d9L,0xd4ade15e08d8fb03L,0x9c9753d7d742df83L,
55242         0xcf7309d4de318742L,0x1228e2123360ace0L,0x1043d238f7669643L,
55243         0xfc2adbedf90f5a53L,0x41d64cb77b5f9397L,0x5200b30ac446d010L,
55244         0xc3c8642d231720feL,0xfcc0122db9aa2075L,0x856e3b12041eae47L,
55245         0x4586445568c876a4L,0x1a1c7842233606b1L,0x9b766d1f227757bfL,
55246         0x25b78a3bf7b9d4f1L } },
55247     /* 122 */
55248     { { 0x90835718156707ceL,0x9bdc23984314f90aL,0x017c885a8be57dbdL,
55249         0xd4bba225ad63a4b8L,0x5ce71b8615aacffdL,0x5f26647572954722L,
55250         0x0a80f1f74f0ad3ddL,0x010538a3fc352ed7L,0xf8a640454203c6caL,
55251         0x2b2c7a88330c73b4L,0xb3433ee602dcac1bL,0x2e0499cfed2b17c7L,
55252         0x9f8681a4bd6329c7L,0x3897994636fadc37L,0xdc5650c892b7895bL,
55253         0x70ab957065a51cf0L },
55254       { 0x46778ec47b585d93L,0xca6d3610a633fe4eL,0x21da154e4ea0311aL,
55255         0xaf22190bbd64002fL,0x9e633ac7d91cb7a9L,0xed13c31fee6837d7L,
55256         0xda4a07d71616ee8aL,0xd78a27323afcd616L,0xc06696e5ba14d694L,
55257         0x733754d74df58420L,0xe85e504e2778e3c9L,0x3055aa0c55b5a5c2L,
55258         0x313df5388a3acb5cL,0x5896acb52a088edaL,0xfc8842a084c85ddeL,
55259         0x5fec9f7951dde6beL } },
55260     /* 123 */
55261     { { 0x5ebc2c7cfe519f99L,0xe396bd80e5410353L,0xaded94028a3988f3L,
55262         0x1c03b735d601bda1L,0xfd30203614ce64acL,0x5837ebe901240290L,
55263         0xcaaea1a3a554097dL,0xdce73d25b0b88139L,0x35ed412becb090b9L,
55264         0x99029ff7d63dab3cL,0x555437d9062db071L,0x277d2f5642a4c11dL,
55265         0x477fa64524fc9109L,0x7b12e9b72799254dL,0x7ad2ae22d84c618cL,
55266         0x0a8d5663ce8ed195L },
55267       { 0x43ac51630a21fde1L,0xcfcf5dd66903d849L,0x6d2499ee5fdd6281L,
55268         0x4dedc6f077a49a34L,0x46bda2c02875c06fL,0xd0e0e0f6347b8046L,
55269         0x1058169b5e67836fL,0xc961912ade8a8042L,0xdf3fea0aa93b3d32L,
55270         0x9f138edb0c576bc5L,0x7971ad6ed8d37e47L,0xeab85739cce5e7cbL,
55271         0x88a4b4341d202b40L,0x5d842557e3a1fd26L,0x872fabd5b3a86f91L,
55272         0x95b934936aa4629fL } },
55273     /* 124 */
55274     { { 0x9998a70199f951deL,0x8fade596f058db45L,0x4d479c1ef3d03dd3L,
55275         0x6e928d5d33b141d3L,0x9a465800acfe8a40L,0xd108ad2fc1cefa3dL,
55276         0x64b96921e013726eL,0xb9b6a6b68e83bb9fL,0x29f1e6dc1242e544L,
55277         0xd3f8f6762f65966bL,0xa34dd0965e105b41L,0xd4e9139a16011e1cL,
55278         0xeea4dc682515541bL,0x6f8030acc822166dL,0xbdc7ae1d31d16124L,
55279         0x2e25ef51621afa7dL },
55280       { 0x2533cf8fdd8e7357L,0x333ba218eaceddb8L,0x68e3e31d0784d2acL,
55281         0x1c927f36f2804ae2L,0x01433d2277e7ad7eL,0x0b401cf0587f78a0L,
55282         0x9dfcf036aa0027aeL,0xc9e46c8b1d9a46b5L,0xaa6de4861f288d32L,
55283         0xdd56da2f1b8a043dL,0x346230e5f2d0bb56L,0x19f0b6e419defb56L,
55284         0x55ec37cd21d2c874L,0x3dbf0397b70e45b3L,0xf0862a8dac7ce852L,
55285         0x87979ea7e141f3d6L } },
55286     /* 125 */
55287     { { 0x9b7e7b3f7f1c747fL,0x151a4c1dc6e63369L,0x4273ff70b372dba0L,
55288         0xca6d2234d3ee54feL,0x12fc8e0cd33cae0fL,0x273285385dd6f10cL,
55289         0xc86f3fbdf01a9cf9L,0x5322677fe36cae91L,0x39a700332fefea44L,
55290         0x2c9ca328ce8af217L,0xc0256776f6a731f4L,0xc687b3df66a96813L,
55291         0x194aab128db2eda8L,0xde30dc5aeec4febdL,0xc052236a979241b2L,
55292         0x3ec98802c23d4c16L },
55293       { 0x0f9e760c4072f74dL,0xe78eb0deab594059L,0xdb3dea40c9b009c2L,
55294         0x47e875f038b59ae5L,0xf40eb4362b4daa06L,0x9a6a4f92090f3788L,
55295         0xefebe9afedbfaf8bL,0xf87f96a59867e256L,0x1e6fed2375ab6aebL,
55296         0x17f2782a3fdb13cbL,0x5102c71e70fa2621L,0x5d2b06ecfd4c0dbeL,
55297         0x537cc26830347297L,0x8dbf5e2b2b67e780L,0x2f633f3aba25da32L,
55298         0x3e9315e8efaec914L } },
55299     /* 126 */
55300     { { 0x9255cfa5239a9ea9L,0x20f3c6900be33a62L,0x759eeb4b9cb642bdL,
55301         0x3316c54600bae718L,0x874a76d5f3410f84L,0x123b502e90f129b6L,
55302         0xadc8f9a812851f1cL,0xf57b764a1b62408cL,0x116ec01f1a80777bL,
55303         0x746ecef21f0ddc5cL,0x3c49d47ce5a6a5a7L,0x1e15dbe706e955baL,
55304         0x629c0c79b45d79b0L,0x11278308778d1087L,0x22585dc78c6a22d7L,
55305         0x2ed02a0d0a682791L },
55306       { 0x530434164daa2682L,0x0e26d32b01359625L,0x449c834abd867097L,
55307         0x11a19d2bee77ae2eL,0x39bd529a3af6c169L,0x36cca5c05cd61054L,
55308         0x6370a59bdc6c0fe1L,0xca420d27b93d5135L,0xd8730d45554c451aL,
55309         0xebd258c996cdebf2L,0x0cb1b990a50f9a05L,0x69a8c97a7b0f0151L,
55310         0x2cc36d3411d217e1L,0xf117688a752f75e8L,0x1db01394a09b2a61L,
55311         0x14627844a9efd7ddL } },
55312     /* 127 */
55313     { { 0x6bca3aed232803cfL,0xc1e4398b9a96ff34L,0xcaf6757f74ab788bL,
55314         0xc3a53e007e68c04dL,0x5f969c195cb7cd20L,0xf28b65a6dc068bcaL,
55315         0xe3ca01d31d863032L,0x9b733b8187808e14L,0xb5d704d9efe618beL,
55316         0x276f3542b01b946dL,0xe057e19efbedddbfL,0x7d182f2b903275ceL,
55317         0x3cdc5f77880f7bc6L,0xd6f03d3f78476c14L,0x035f5557a9ba5072L,
55318         0x7acb57b6b4029628L },
55319       { 0xd241356944e6b07cL,0x451c4cc9e1c7345dL,0x407444d8e273b9fbL,
55320         0xfe496079b88e34fcL,0x77d184cff152776dL,0x6d1033b9c742299cL,
55321         0x29a0a68477bf2897L,0x59ffdf10ee8f0420L,0x4e17146c44bb56d6L,
55322         0x831d06c2fb9ae855L,0xb2cb82dbd93e7cd5L,0x83381c463c96b607L,
55323         0x06aed2517549e2a8L,0xef97891c774a21d4L,0xae9807c78675fbddL,
55324         0x6a5a05b96363516cL } },
55325     /* 128 */
55326     { { 0x92e71ea66a8f4f33L,0xf2fc6fc64dea8f4aL,0xd356252cfee88461L,
55327         0x59b0a83e08954d08L,0x5bd68c23468ab766L,0x40281357900f8d04L,
55328         0x181c19c052b867aeL,0x986a516918764c41L,0xcb01dfae13575d24L,
55329         0x17269ae5593677b7L,0xf6d1702546dc9b19L,0x8de68499c40097c8L,
55330         0x76df0032259c407bL,0x4091aad917d29d8bL,0xa7f46d214a7ab5f6L,
55331         0x688054b470ece48cL },
55332       { 0xf0d168aa51a5b86cL,0x2437e4d895777247L,0xae844076f1720329L,
55333         0x0a7ac87d9647a54eL,0x1e597a4b0405622cL,0xedefe5c6f0a79f2fL,
55334         0xaf3ef0c24d55156dL,0x917fb04eef047cf6L,0x3792799f54b62137L,
55335         0x875ea32f314be0b8L,0xe157c65b0c466b0cL,0xd28c90ce7e218978L,
55336         0xb90fc3bacde587afL,0xdd32d71c8b877bedL,0x3b432200ca8e10cdL,
55337         0x0021f419d94f6e53L } },
55338     /* 129 */
55339     { { 0x2191122c43519d26L,0xbdafac1d40a51845L,0xcc6f71e9548bb89fL,
55340         0x9ef3375c16844bf9L,0xe7789f79178e8d55L,0x04f599b61f8be1c5L,
55341         0x8088c99a2cbbde40L,0x8939a260893206c9L,0xa1ae4bfffcd30851L,
55342         0x664cb3fee08feafeL,0x61f38099ff14aabcL,0x0d8394cc2a841ef9L,
55343         0x75fad8ad17f01db6L,0x6fc345766debb773L,0x1e716b05a4252512L,
55344         0x7985588029e1ed9fL },
55345       { 0xa2cb3aaa95106473L,0x95fafa415a61da04L,0xfd3c9362539563c0L,
55346         0xbaa4809195312b87L,0x6c7e7582bf885c76L,0x70f6dab6230c78d5L,
55347         0x8ce3051c7747440dL,0x6dbebd14ffdb6186L,0xb0e041fa190e4096L,
55348         0xba10c4666ee62e2aL,0x93d57e2a74f333d6L,0x006aadc4fe7b9b66L,
55349         0xfaf72f6c06d2837dL,0x318cc5e6910741eaL,0x9c50260965692477L,
55350         0x95d823c31d0fb08dL } },
55351     /* 130 */
55352     { { 0x6aeebd86140528a5L,0xf268c2ba53979bc8L,0xb1bc9b8a4ec144abL,
55353         0x1efabb0d82a7d7edL,0xf12c70d14e0118d8L,0x31607168a1c1558eL,
55354         0x33e428b7e4b7e73eL,0x6317663783aec9ddL,0x5172ffbee12ac35cL,
55355         0x37df0bfbbc17b2a4L,0x4212f870741f812aL,0x3dcecbdbe2888f9cL,
55356         0xa9dc15aa756ca55dL,0xf31918ecb9028e41L,0x7ede02856aeadb03L,
55357         0x0e2708d578654f54L },
55358       { 0x2270cc53cde20f88L,0x9338272c5f5b1039L,0x5042e19e5dcb1dbfL,
55359         0x4b3de219b72d74c1L,0x16c49a8b2aaaaa55L,0x008443e5bba86ba6L,
55360         0xee6bcd7220cf1695L,0x59ffac6ba89abd11L,0x2831217bf115639dL,
55361         0xe4d28af2f34cba52L,0xf27f03e70727a906L,0x6842c79f69017766L,
55362         0xcb3469bd7a81123eL,0x48c0f346a42973b8L,0xfc5784a623990dbdL,
55363         0x0d3dab3bfb299678L } },
55364     /* 131 */
55365     { { 0x8f8376e6ce29c3ccL,0xcb0507ecf016cbc6L,0xdebff9965e394ce1L,
55366         0x24fc526f73c50d41L,0x4edd5a542d16ce3dL,0xbb37bdd991c13141L,
55367         0xe3442ef2e33a8606L,0x2ae90337c0629da8L,0x57faec64592ab331L,
55368         0x1a938997d82b857bL,0xad6c8cb9a3373176L,0x82595de29086751fL,
55369         0xa81e97fb18c17196L,0xe4f48a13bf697357L,0xa1387c2e5cb89f69L,
55370         0x530b4eeb5874b426L },
55371       { 0xe9f275a1bab7b5aeL,0xbb69dc4d03a57bf4L,0xc974dc4aa45c505bL,
55372         0x726369f3416ac402L,0x735e4e78aed985dcL,0x0548d879cdd446a1L,
55373         0x84ceb0699e16b02aL,0xf73f6fa4789b11a6L,0x6aa0c41fb2a4e784L,
55374         0xb1f7690293a9b697L,0x814cce00f03a8ab2L,0x64cb255b844d66c1L,
55375         0xb794e7d630952201L,0xe052d4e43da32271L,0x5278b2e708b6a4d9L,
55376         0x9094255280c6577fL } },
55377     /* 132 */
55378     { { 0xd269a14d0d5b4c2fL,0x2b8fc59b5c8a649cL,0x95becb3ab0e37d4aL,
55379         0xfda1a7689111037eL,0x5810e05a94e35322L,0xa24dcc12a178fafcL,
55380         0x5c2c63b28e3dce62L,0x995c3f179452c444L,0x35330ec342d45161L,
55381         0xa025a60ab4ef8129L,0x854932528bae9c13L,0x25d1a606e2e3caf8L,
55382         0xd44091ab3649bf47L,0xc7d0afbf704ec5f1L,0x27bd1d62bd8b3333L,
55383         0x50570111cfe616f5L },
55384       { 0xd0084acef534356bL,0x9df1de054b4b0fbcL,0x021afe05cee04dc1L,
55385         0x64bde688361b78e1L,0xa324fcc7ef78d38bL,0xfeb372ceeb0a5e4eL,
55386         0xef04fcb365811996L,0x7dce5d505eb0ab4eL,0x1e29b588238c586eL,
55387         0xde5e3197bcd80037L,0x8bf5e4514806b9cfL,0x4330968bd18e67abL,
55388         0x26a7d04ef9f63fadL,0xa1c7f123b5c18bb4L,0x485b848225dce22cL,
55389         0x8ff0b36fd540e79fL } },
55390     /* 133 */
55391     { { 0x99f2e2f43ff42cffL,0xa3c19f9d1c35317cL,0xdb749392aba1b545L,
55392         0x84232b054afa9a32L,0x0b855d46d7dcd436L,0x8ac35e2045cf9915L,
55393         0xd7cf22c7f001a218L,0x057d35aeed408305L,0x25a4a519553ccfcdL,
55394         0x5e56579393e2b939L,0xa20332b03422ec27L,0x9b09005e3ac53958L,
55395         0x628051a379e9b163L,0xb4a0dc09fc6618d6L,0x9e0e857f6748e7afL,
55396         0x71b28eeec577d63eL },
55397       { 0x4942b0cd99726bf8L,0x1290a3b91c208f3cL,0xfd7290e7b0598eaaL,
55398         0xc6a7791fa25a9128L,0x2d33db24c037d7daL,0xc21efeb070e2837bL,
55399         0xbf70d96ee3dae2a0L,0x43ed819185076027L,0x4aeb0aa84d4ad7e3L,
55400         0xbc75101fe8c5b74cL,0xdbfb2a6ead26ebddL,0xba8120686b78aa4eL,
55401         0xc94aa8f2e1159848L,0x0d10d9db3eba5c4eL,0xce7fec476318295aL,
55402         0x7294711a330d925aL } },
55403     /* 134 */
55404     { { 0xfce4590432bbd495L,0x330f4dd1be54973fL,0x006bee1d5d9c3f4eL,
55405         0x40ee607859ba7204L,0xc194fd3f42c2c768L,0xa0e76b12e9fe88beL,
55406         0x17cddddbec2b0210L,0x689d436b00811ec7L,0xa6a6ba37284be9e4L,
55407         0xabc395b2007d4114L,0xf8cdf9f30f11e744L,0xc5febec8e9396402L,
55408         0x8a751743eeb46285L,0x99bf8782c6e0d137L,0x3965e170beb292e3L,
55409         0x001c39d85801fd5fL },
55410       { 0xf4805cb9da4a0912L,0xd27cb76a4410bca4L,0xef3dcb8eec71d65bL,
55411         0x780fbb2b4816849aL,0xef6a7026a8b24635L,0x15625c8812c44e68L,
55412         0x624c232c4d7a74a8L,0x81a770374b1631e4L,0x04e4f7f1db917c2eL,
55413         0x1d0465fd1f61ed95L,0xb1048049cbde6e3dL,0x637ce0c1d7131fcfL,
55414         0x22e4dbc28ada4715L,0xf7530c5cace99726L,0xa0160dccee287450L,
55415         0x9132e670bb91af13L } },
55416     /* 135 */
55417     { { 0x8057efe27996099dL,0xb72344dba06e608cL,0xeb4a8740d0958588L,
55418         0xe53daf0679e5aee9L,0xc9560a9a908a2fadL,0x7f4be131107e706aL,
55419         0x6d5f3d9b2830246aL,0xa5f8e8da27cca3e6L,0xeb51dca64c28f292L,
55420         0x4cfa310ef31dfd78L,0x92e0c7c22ca073e5L,0x102f1694a40da683L,
55421         0x16bb07cc750d38fcL,0x703e83e2badae035L,0xea93c066b4d3c9ddL,
55422         0x7d0b03e579940ed1L },
55423       { 0x5fe7ea304dd94c63L,0x57ef01c5738b0b3aL,0x9534a78ca14e6b4bL,
55424         0x07622cdea5353276L,0xaf696a077c22d006L,0x733c18867d46b209L,
55425         0x9654ccbb626c2b4aL,0xa098d3a1a84f3c4cL,0x3596f9ed2d734b74L,
55426         0xdfd3021a5d551c90L,0xe2ba7d2f1ec5123fL,0xf9726925b2c1aa39L,
55427         0xd2e75d0ef8eb2927L,0xfaba712e19192a6fL,0xa606b43a9b83e50eL,
55428         0x31b1782fdab5de60L } },
55429     /* 136 */
55430     { { 0x878dba454034db92L,0xa39779018f34dc4dL,0x8d004f2edf754c33L,
55431         0xeaa5954acd563a88L,0xa29d6c89bb5ffad1L,0xa8adf655b0d8bdb8L,
55432         0xf7fb842d8cdbdb47L,0xb72e3a0380d3205bL,0xc335b0b27cac7ca9L,
55433         0xffc60bcbd8a5475dL,0x736f7719eba4d25fL,0x3d901c380c50fca6L,
55434         0x1fdacf7b80c01900L,0x75cf658f5681f84dL,0x57a7e6345cefbbc1L,
55435         0x6fc0fbe53e07ed1fL },
55436       { 0x496d116bb81b0e5fL,0xd82dd2a52ac853b8L,0x357e22d4327387f0L,
55437         0x3e332a84ba912c59L,0x8b71c64349d5dcc1L,0x0c982ee9438d85d3L,
55438         0x90b9553cbf7fcd4eL,0x2cb39bbc38fed5e3L,0xa2c67c9c5ac42903L,
55439         0xebf21217bf07da55L,0x55ac05ada0b9e4eeL,0x10bb12c28ee9e0c6L,
55440         0x5cf3aee548bb6e3fL,0x4ae7269c8b046e91L,0xcb266012aa0e553fL,
55441         0x701935a1a94c8fc8L } },
55442     /* 137 */
55443     { { 0xde58d41da4626deaL,0x25ef66ca15b9039fL,0x99a810a43164e65bL,
55444         0x9fe6daad748cfccfL,0x7ab9a6bd2f142fa9L,0xa4cba1685d471796L,
55445         0x12d30b366bc3a39bL,0x1f46a5dc8bf45076L,0xb868e5291421ac0eL,
55446         0x7a68620659bba1c4L,0x2b4b552eda698b90L,0x5039dcd4e5453707L,
55447         0x42a07a9e9e90165fL,0xa838fff3d7d45dfcL,0x41991e5a3b5ceb30L,
55448         0x6c961ec8969ca600L },
55449       { 0x703bdc1bc4e7eb46L,0xd6bac557596c7b48L,0x4f9917cd66afd74dL,
55450         0x56355105656ce6f3L,0x3d1fb50c32497175L,0xfda6783e63effb2dL,
55451         0xbd79f1f3eefaa2bdL,0xa4efbe5417af9ef7L,0x6cef64625a55b7a4L,
55452         0x116f32381a713304L,0xdb2a2a7fb95625a3L,0x6a0aa43a0b027e96L,
55453         0x458fe5d24832b3bcL,0x523418df5adfaac0L,0xc05a89cbc49e7f9aL,
55454         0x830883d869e24b53L } },
55455     /* 138 */
55456     { { 0x959b1c6202557389L,0x5fe5ce97adefc0bcL,0x893bbe7f8330f383L,
55457         0x27e0c6af16cfb81eL,0x6f64e65bd04428fdL,0x53de9245b79e6182L,
55458         0x08a313c1487e11caL,0x65cec3b9445bce93L,0x33bc0314d67ed49eL,
55459         0x69f36b2430782352L,0xd78e5daf93ad31d2L,0xf2682b70c780890cL,
55460         0x7015c34f9e45efe9L,0x135d4ba4e6cbafeaL,0x43a378a47e3fcc6cL,
55461         0x2376f97f96638f8cL },
55462       { 0x0a6e1ec0ae575b99L,0x7e14cb4f81b970dcL,0xf00a3824d3a73947L,
55463         0x0b4b9c81fb235a9dL,0x8d15115f5bf62944L,0xcfd35b431e165d7aL,
55464         0x5d12fea2b2ee3e3bL,0x629984a6f5182e7bL,0x4e43e2f3c365d08eL,
55465         0x9932709130f36e72L,0x698b4a00fd345401L,0x23c4fd0ebaf96dceL,
55466         0xa60ba0ae23675554L,0x51bdac2db0325784L,0x8ab4190a215464a1L,
55467         0x8c4616616bf10296L } },
55468     /* 139 */
55469     { { 0xeffca2582d1f36a5L,0x0eded2b2894c5f2dL,0x35a5cdb843ced84fL,
55470         0x290f8982db0e3b9bL,0xcce0eaf00719a112L,0xd0e657e439a362d6L,
55471         0x5516a55d62697e47L,0x269e1f778e636514L,0x5e3dedcbd50269bcL,
55472         0xecec2300441c57c5L,0xdb83f31cc705578dL,0x1bdefb731e489eabL,
55473         0x20b678cf395fcdb4L,0x908cf91cff9db001L,0xcbebc6f455f52cc8L,
55474         0x155ea622b4c61162L },
55475       { 0x94be2f1f876fa42eL,0xab5e87497fadeee7L,0x692e70f538c865afL,
55476         0x16e99b84df8059b0L,0x0ceb606e8b5a7ac9L,0xced233572d463d2bL,
55477         0x2d0f26232a9a09a0L,0x2529998c3861fbdfL,0x711888a7c1be310bL,
55478         0x9b1229c50d8aade3L,0xdbcf9b783b13533dL,0x3ca746f8ff029708L,
55479         0xa5a013a1da83ef88L,0x8e904d184ab28444L,0x2fe84b3dbcbd4abaL,
55480         0x8f570f24259058c3L } },
55481     /* 140 */
55482     { { 0xdeb66c8a2ca9c508L,0x2dc5bec269d6b780L,0x16d6126688ead600L,
55483         0x61841b9749d72614L,0x41e40e6cce472e6fL,0xada242641fa7a876L,
55484         0x45b9fd33cc3997a0L,0xb25e8fa97c15dcf4L,0x0124ceb212e9629dL,
55485         0x3a8c72c67db3d956L,0x8e2ded2b7c1a7844L,0x94ab09c66dd027ffL,
55486         0xf89a057d7e7a2bc6L,0xad8bf226cf70c763L,0x4cb268e7c8a26212L,
55487         0x3d171e87b2c44c1dL },
55488       { 0x382ac16e8ce49820L,0x24ee45e2c0c44dc9L,0x0ec6791273e858c4L,
55489         0x918cb25c46327cf9L,0x43e3876bc6159c1fL,0xb6b6e0e037545cb3L,
55490         0x64b839ab5d12347eL,0x72e09274a300d541L,0x26ab28e6881c1169L,
55491         0x4a580fffeb75a843L,0x0a5802ca359120dfL,0x7fee82d03209f4a3L,
55492         0xb518016b8e6a9380L,0xb99c6c70c2ee11caL,0x16105af1ab9d4ec7L,
55493         0x234e98f834cd9004L } },
55494     /* 141 */
55495     { { 0xff43520814db9cdaL,0x99cfdc4796adec90L,0x843aaa6faf458b6dL,
55496         0x3f1f7415743eaa31L,0x915e192e61735d81L,0x3441a22d0ac595d5L,
55497         0x704bbf67c044bc8dL,0x2f960471be23a236L,0xcc32638815d1d557L,
55498         0x9410230b76b1dd94L,0xf2e5439f0c1c8a67L,0x56b141ac833c910dL,
55499         0x467c999f865b84dfL,0x1b0251fa21f02b7bL,0xde5b526096216950L,
55500         0x6a2130e3ce3a1e93L },
55501       { 0xd21b67a04b3ca1a7L,0xaf42ed5300c0ce80L,0x22ccd368932cf07aL,
55502         0x36523a815c25c35aL,0xecdd39588dd04d06L,0x73da3502b2f93a3bL,
55503         0x4c5e0c3cd5e5b530L,0xef9f548613268777L,0xed87fefc1e742292L,
55504         0x6d9ac29ea24e5edeL,0x08abc9f033849f1aL,0xb09b229240f23905L,
55505         0x6791072c7f934353L,0x102a6381e6aeb550L,0x3ee0740996feb870L,
55506         0x34f06faa9c4d2830L } },
55507     /* 142 */
55508     { { 0x869dc79f2348f005L,0x9b5c5d71df4920b1L,0xfd1b57ca6dee64a4L,
55509         0x21b7f734e82a4fb4L,0x637cb834b9578366L,0xc934101b7d287d96L,
55510         0x1590f8ac0392ecabL,0x280dc3737f75f4e3L,0x8b36f50f6a61ac62L,
55511         0x74f58304a65568daL,0x80d792a9d930870aL,0x6d17b192fc8895ccL,
55512         0x498392fa4914939fL,0xaf36027dd41d5b9eL,0x452d79e25caa82b5L,
55513         0x764d47b1f4115d1aL },
55514       { 0x5df22303a2ee8b9cL,0x1b9f72d385dfcd48L,0x6b42b98310813a37L,
55515         0xe28c523b3de741f5L,0x0857625af303bb5bL,0x926f299aac9bf9afL,
55516         0x21beac080d445b34L,0x6a523a02d6ba2c0eL,0xe302a1b17fce2864L,
55517         0x4516a235e300c1eaL,0x4543736a7b4a9311L,0xd3c0b9e8c0cc89f7L,
55518         0x0481904f40ed88deL,0x4f269b563cb7fc70L,0x09a1d53a321b9738L,
55519         0x1c0dd9c3230a3810L } },
55520     /* 143 */
55521     { { 0xffaa1f67c46a7d9aL,0x64743334bedf91ccL,0x45833a7447a42f2eL,
55522         0x67980051241ffaa9L,0x70979a84335efe6bL,0x5f0613f5f08b2403L,
55523         0x6bb22fcd64f211dcL,0xe1b8b2a3a0572cfcL,0x19e0eb417950a14aL,
55524         0xe634bb293eb6cd4cL,0x31a04b25470a25ffL,0xa41f7ac9a3d15a0aL,
55525         0xefed85ecbf2fede9L,0x1f581f5f81b94a00L,0xaa3996b09ef4a15cL,
55526         0x52d8be39b06041bcL },
55527       { 0xbd1536f6fd631a2fL,0x91fae7f0b351a8dcL,0xd1a590c79b126212L,
55528         0x52d4875f2bd0f435L,0x9aedb6d392b0ea70L,0x0bd0abdcb83ab89eL,
55529         0x827a106289fe192cL,0x6566a960102a0bdaL,0xda083037ce036814L,
55530         0x30bed79f58639405L,0x972019b6dbca8df9L,0x89201286efdaa3f5L,
55531         0xb337b9965236b892L,0x11d3e38e28fc2e73L,0x70787f41880e8da3L,
55532         0x6cff6367dae4a45dL } },
55533     /* 144 */
55534     { { 0xbd3d0433f89a8bb4L,0x42144c3393b98f71L,0x82b616c803470a2dL,
55535         0x98fcc757e5da089eL,0x542354ef7bf5fda6L,0x1885c2539ebd34ccL,
55536         0x2e20b285bec5dd0dL,0xe71bbbe1782a1bcaL,0x959ded309b854ef0L,
55537         0x172499798997fa6aL,0x50cf8fa8d81f3c45L,0xa9a3b51760c11152L,
55538         0xc9b0ef7decf845eaL,0xc9339e23b9fed11bL,0xc93e9c5c28256080L,
55539         0x1d2c8217613ec1e7L },
55540       { 0x7381347d987cfc93L,0x047603bbf187f810L,0x3fa6bc9d1250ca31L,
55541         0x480091e0bb055bf3L,0xbdf95f1a3a3af87cL,0xe2687770140540abL,
55542         0x998df730d7fe045bL,0xb398135fb723bc2dL,0xac230f8c15ebec46L,
55543         0xe08e18305f5561c0L,0x7c0fbf4cda60a47fL,0x06e95c24e16d4bfcL,
55544         0x7416349574617e92L,0x397198694ae0c20eL,0xfe2693122131e2b6L,
55545         0x25486e360a537722L } },
55546     /* 145 */
55547     { { 0x618795ca53572806L,0xb2c89449656968e1L,0x149c2c973fb323aeL,
55548         0xfb15de26409bc7d6L,0xa90cda72c79121b3L,0x6d2fa14e204cabbbL,
55549         0xcbcda6f791604125L,0x25086261b435f947L,0xdb686c38c282eb10L,
55550         0x51016d62f1a791cbL,0x6b1c7ed161a2266cL,0x26780666271d74a6L,
55551         0xb5ffeda1824287a4L,0xcbe503ffbbe4f0f3L,0xd7f7f0beb9482a74L,
55552         0x751b2358088493f1L },
55553       { 0xd597b9d6e9c9be68L,0x1794b5c467d10c6cL,0xa88cdc3d7762b2f4L,
55554         0x6d94a63aa1b44e11L,0xfb0bbbb9aaa8eca8L,0xf4b0f2d0c963d87fL,
55555         0xb753062c5dc7075dL,0xfed726ac49933989L,0x5da6063857f9ccdeL,
55556         0x221c392a75f8c766L,0xcd264d955dc672caL,0x7004ff22b66ecc8dL,
55557         0xfb1aa9ae18a458baL,0xea9644df8babd653L,0xa9378e802ba0de7cL,
55558         0x144cc12dca2c6c75L } },
55559     /* 146 */
55560     { { 0x593a0a1d2989aa3aL,0xd83f228359e6e64dL,0xe938b0cbd32e732eL,
55561         0xf4c464c53c3cb249L,0x9750a5f8f89ea6acL,0x467e5bbf346cfc32L,
55562         0xc9bfab9d37b2b809L,0xf8eb74533b339c6dL,0x3fe01fbe3b766deeL,
55563         0xb3154254ef6aea27L,0x555c3df27be61b10L,0x70fb6d81dd818488L,
55564         0xda1af3a4bbe714f9L,0x575f20179d18f693L,0xdc08fc6b2465b839L,
55565         0x874ecf336b84a951L },
55566       { 0x624af83ebbb3f6beL,0xf578fbb908bb423dL,0x5623b0bad7873527L,
55567         0xc3659bd8a62e0442L,0x2903b167fe236f79L,0x55a430c6e53f26a6L,
55568         0x222547ae3ad712cfL,0xb73890d776eb272bL,0x95b4f70b3d628df9L,
55569         0x9f0e13b053eae4acL,0x5b4f5138e7f2174eL,0x75482cf998dbae17L,
55570         0x2b69bbde44518480L,0x4f279652cafef15cL,0xa0a3ef2bb6bcaf19L,
55571         0x31fb8581ce4c634fL } },
55572     /* 147 */
55573     { { 0x398306d1615cd607L,0x680c9faaaa32c3a6L,0xe87a705b7779131dL,
55574         0x1031013a36708b00L,0x814fa0e19445297fL,0x70c5583aa6a79b56L,
55575         0x03039cbf4b16bed4L,0x18a7ca8daaaaf8d3L,0xf33159e75cdb68a5L,
55576         0xdea0e738d23814faL,0xeb3527188d0f4f9fL,0xb0b76609dcdff032L,
55577         0x65ba8ea93d48338bL,0x18044d8255dd507aL,0x844a223e4a4a50b4L,
55578         0x9832300018e19e54L },
55579       { 0x28a2102757f3d5a6L,0xffce56486e8cadcdL,0x9590381b02551f3bL,
55580         0xb26cc64f935ebdf1L,0x60611291c083aa6eL,0xcd988a6688e4cf41L,
55581         0x581c3f73dd53b1b5L,0x78c804a977fc621dL,0x31874330fadca2faL,
55582         0xf7008da4c83ccf02L,0xc4122a1da79a4707L,0x9a8e0d3f4a915eb5L,
55583         0xa2de157dd0123660L,0x45ef43b265ead2a0L,0xd0a22ade188db285L,
55584         0x8abbe39e922e0caaL } },
55585     /* 148 */
55586     { { 0xb44469053a2d2f01L,0xd27c31935dc6685cL,0x6a908bbf1d74a027L,
55587         0x01da350f5b50ec1dL,0x1d3dd45e3f3c2e26L,0xf66e11d0b836ee92L,
55588         0x7e03908f474b979cL,0x19e7c5b998b87834L,0xa741d3febd3d1de9L,
55589         0x63c68e8d1ef6059bL,0x9b9ff9393674e247L,0x1d7d53e73e7e67f6L,
55590         0x698dc326aee9e248L,0x52f23edab3bd984cL,0xf95e31b06f8fe8a7L,
55591         0x0f15b4d0c3d0ba95L },
55592       { 0x8f2f6635790a8d85L,0x51bffbaee2595af1L,0xd15b7ec624b51287L,
55593         0x7639b6ab3234715dL,0x0cdd52992bc5441dL,0x54800ea4f6d05833L,
55594         0x21efd752f6d6e360L,0xc0b7ffe519290613L,0xb68a5825eea898cdL,
55595         0xecedba9222982266L,0x678a91b0bbd06bb2L,0xb2436dc04bb6b0cbL,
55596         0xcf7a99e7caf8ea98L,0xb92d0e6e71aa05bbL,0xbf8d0471f5993eb1L,
55597         0x515db37820385ddbL } },
55598     /* 149 */
55599     { { 0xee43eaaa6f5bef22L,0x952d269820348712L,0x1e4c484e7a3af6c6L,
55600         0x18d434c69a8c9403L,0x63e5d7415001899aL,0x5238dbbcfe8ea40cL,
55601         0xca6cc8d296798721L,0x73db6aee04acbde8L,0xbf69328db7f993ceL,
55602         0xa3f79bbfad45e334L,0x8c51ec937c1f1630L,0x4907325f9b00a6deL,
55603         0x49e6acb412d82bc3L,0x5901b36d0ec59fc9L,0xcb09b7109cf34e3bL,
55604         0x2de0487e1abf4c02L },
55605       { 0x18b722f38dd9d484L,0x833493937c77baccL,0x58dbb8f193d92b8aL,
55606         0x80d78d508e3fac25L,0xf0500981745f4a7dL,0xd072bfed877cc29dL,
55607         0x67abf8f2c30a89f8L,0x92c567ea9a0820d7L,0x425ab12e8a3a5738L,
55608         0xc162faebf055521bL,0xee1c4f26b94ea5e9L,0x1e4149943d71e546L,
55609         0x258183b843e8be1dL,0x44917c82ef9eae0bL,0x6813a45773874a30L,
55610         0x6f6ac071cc42f86eL } },
55611     /* 150 */
55612     { { 0xd38822ad4dd6e3b1L,0xfc78e1ccad620869L,0xe78438452cacde80L,
55613         0x121cc14aa8469fe3L,0x8e8f3da7e67e8ef2L,0xdb83d16e4d347448L,
55614         0x3ba1dd98798631f4L,0xdfab59770a4c4c17L,0x1f0a13063edc701fL,
55615         0x4649d6016cd8ff28L,0x2267230bbcc55bc9L,0x02a19c605760412aL,
55616         0xc719d5f1328faef6L,0x27cb969ef67eaad9L,0xf342530e719bafb5L,
55617         0x6e2c24ccff5a82cbL },
55618       { 0x6313024badaf8793L,0x944bccf1035c948eL,0xe9a066b7953500bfL,
55619         0x7991a9461d116765L,0x95addb2e9fd93c78L,0x05d2c037e92e5495L,
55620         0xcb145b189f03e5cfL,0x81ae48ca95aa1f72L,0x203f2702135a6e4fL,
55621         0x2bcef5a249b2a7d5L,0x0687a90002d7f2a3L,0x2f7d32286c6745b0L,
55622         0x3da8a87586507305L,0xbe38b8842e8dc58fL,0x6b48bf34dbf11185L,
55623         0x5af7fd0d97c08f91L } },
55624     /* 151 */
55625     { { 0x55f9b950f4a224a5L,0x41904574cc50273aL,0x34f81330643f1fd5L,
55626         0x996801bb0e50f783L,0x866d740389581712L,0xdb9a405da4091d36L,
55627         0xf1e379df16a46fe7L,0x8d04a93f83bf9168L,0xae4c833532b20bcaL,
55628         0x99d334b1f72a1c10L,0x8fbc9977d8195db4L,0xcaeb3dfffba14b5dL,
55629         0x60fef02276daf476L,0x4b948dfedb5b72f4L,0x5185c925b6dfb062L,
55630         0x27a9c3819609d4aeL },
55631       { 0x73c37346f12a93afL,0x028b707c5536634dL,0x8efa58d5498193d1L,
55632         0x4f83a5ccef21b69dL,0x05cbb0a3a788a0e2L,0x0103178165b13c98L,
55633         0xfea20e582b73784cL,0xdf9713a0e50361f2L,0x31449a0fd0cc22d9L,
55634         0x183752e77c5e2e1bL,0x6e44d6bdb67044cfL,0x012dde95733e177aL,
55635         0x68b4966908ee2c23L,0xd9bb05411f5f1949L,0x95182c716acd886fL,
55636         0x1c690694fbde9244L } },
55637     /* 152 */
55638     { { 0x5db67d173a880026L,0x89c4f0a0125d95f2L,0x290505513f6cb7a4L,
55639         0x3eb231d15cbbdca5L,0xf8cffc99972bcbd3L,0xcb4ef4d4ad55a03aL,
55640         0x944d47ca22867c2fL,0x96d885480ead1aa5L,0x76a57cf8cbc8b045L,
55641         0xdfe5844b005e55a0L,0x5e9e7e191d18a097L,0x957a26e852923c74L,
55642         0xd0867b797f5db339L,0x2553408e63bed0c8L,0x1596e5d5689ad23cL,
55643         0x7b8c13d6a504c339L },
55644       { 0x2fc43aad52fb6901L,0x1c0313f916ca253bL,0x1475830a515aadc6L,
55645         0xc93d19267f577dc2L,0x26e52e8ef723c0ddL,0x2f1e0eb83eb9f6daL,
55646         0x9979de82f180376dL,0x43e28ecbb0834939L,0x9a2d51dca39c38e7L,
55647         0x6e6063a9a8e3f6b5L,0x4cf1da3a4b9b3270L,0x6e5348a2d2f8915dL,
55648         0x5e75e3e050507912L,0xaeffce5720d383faL,0x1d6d53cc8fd2fb29L,
55649         0x0e3c3ef6696f4cd0L } },
55650     /* 153 */
55651     { { 0x3bc337c121ee1d83L,0x97e08f6d787b7788L,0xbf709fcc138fa4ceL,
55652         0xbaf77647a0348e58L,0x04f8babca55e672dL,0x0ed2919d7d5ec5ddL,
55653         0x8ce64bff33e99218L,0xac09fc5724b059afL,0x506831f9dc5e32baL,
55654         0x26a22677465af6a9L,0x3c5efe66c97f1ff8L,0x1515e0d6bc6087fdL,
55655         0xb1a39c5eaa8edc6bL,0x3dd816bb0e79ed29L,0x6cc13769bc3788b8L,
55656         0x463098e3c092a51cL },
55657       { 0x3a6408c7c8bd0fa7L,0xd1764311ce6bde49L,0xe315e108283ef7beL,
55658         0x8213cc7799b5d938L,0xaf7f158145a49a6bL,0xd00fdb0fe529e4d1L,
55659         0x55d38f77ce66c9d6L,0xb4f7ccc01bd4b952L,0x8d975b49af71f986L,
55660         0x12b59fcbcd64d00aL,0x1860e504a5a3bad7L,0x6d9760442b5c89f1L,
55661         0xfed0c6597a3e231fL,0x58114c33178cba92L,0xe2e74c066698e11eL,
55662         0x7f8fd093a348b85aL } },
55663     /* 154 */
55664     { { 0xf24592cac19428afL,0x192a1c813a308665L,0x42589812e30bbd7fL,
55665         0x10db0723836c6bb9L,0x9c7a41e9598e4987L,0x8aff179e6ead6f4bL,
55666         0x70f8f9b975862c44L,0x6b3b02376f21983eL,0x25d83e9b98e65152L,
55667         0x3b2d26a8d751218aL,0x9508281a9d6f1da6L,0x8df78d05a5a81f74L,
55668         0xd79ee559e4687471L,0x2060ca576787d8ccL,0x427a84ffa8476c95L,
55669         0x87b64c51e6435131L },
55670       { 0x87f46f654b30d3c4L,0xcdec4c5c23b4ef14L,0xb3b7476663ca4d68L,
55671         0x1df34269cf3fb56dL,0xd4f139c40fd7d46aL,0xa3b7c7c76a69a8bdL,
55672         0xee56b4c9cbadd7d2L,0xb28ff342ac942334L,0x0046fdfa786f1da3L,
55673         0xce5d149cb700c82eL,0xca30ef8150966597L,0x44a20609fcff4bddL,
55674         0x0f2f65e744925268L,0xe5b6552cd4021f38L,0x77ea9c2a042dbbd0L,
55675         0x8c95267cd9c062f5L } },
55676     /* 155 */
55677     { { 0x6655032e5fc1abb1L,0x2215af5412fe4743L,0xfd65756029f05ef5L,
55678         0xb0e73325dc191be9L,0x7ab3c65ec08639b0L,0x67507f511c3e6673L,
55679         0x638befc3c8615555L,0x5d0188cf42f0c4adL,0x843a301cd896186dL,
55680         0x045603f7b2c6741eL,0xf7545c0cfa3cd1d0L,0xf612affd4a40672eL,
55681         0x56197c9f45b9e8ddL,0xb453237d87922d74L,0xbf132e3a4b2d59bfL,
55682         0x8afa1b73b84a6a16L },
55683       { 0x6b3596eae793ac70L,0x4c94ef8eeef6dd10L,0x926b4fa270422e40L,
55684         0xc8c71dcee9e5d763L,0x352fcb70f512aadfL,0x1b7ba138a883975fL,
55685         0x57991390058c3b13L,0x9692092a97740fd1L,0x19ad945b160b0697L,
55686         0xbc63438810837ab2L,0x76ee11c4f174bb71L,0x6111bfc1ab1b80ebL,
55687         0xbc82bac870ec458aL,0xeee60127312d3325L,0xb4118b1ab240adc8L,
55688         0x672111912b5a093cL } },
55689     /* 156 */
55690     { { 0x91e99306f55cf9bfL,0x9b045308a46b96d9L,0xae3c1e1d9e7a65dfL,
55691         0x453cb151c731bcbbL,0x14be5227a4d58a61L,0x39dac92297c74cc2L,
55692         0x4d0f7a45822e00d6L,0xafeb1d51c62b03dfL,0xbb1dc3a4baa18b2dL,
55693         0x7f3c7178df2b74f0L,0xfcd328a6896b6a33L,0xe95ed4541dce055fL,
55694         0x97fbc76b6a4e2b87L,0xe5ec67f1fa59dce9L,0x052368accc0367c1L,
55695         0x7c86391654e4a3feL },
55696       { 0x55e94b5eca7388cfL,0x17cc0a60c0335d38L,0x9b69b78b616f85baL,
55697         0x705d02ef10122980L,0x565a6e801cfd0a79L,0xeb74a96d7d1ee352L,
55698         0x5c8832ed427b9dadL,0x96ea8528e6d5330fL,0x30d8862b18d24ee8L,
55699         0x9cd38ed59ff939f7L,0x690fc9a201060252L,0xc62d88b82303b3ffL,
55700         0xfc42d7a4dd52b469L,0x06f8dfa28cad2d93L,0x5023609060920438L,
55701         0x32582758fce855adL } },
55702     /* 157 */
55703     { { 0xeb20e45f359e8c60L,0xc71bb8a5364ca186L,0x02b15071dff8e110L,
55704         0x074e91d34c93e578L,0xc0326e00b829d0d8L,0x3c192258626a83faL,
55705         0x387a64d5fb29a09eL,0xcaaa3d34e5ac5c82L,0x8ed685e5ada2da29L,
55706         0x92720267eb29650eL,0xf7184b19763802f3L,0x23f5dd0edf6b1aeaL,
55707         0xbe1fa34725e6125dL,0xd6287f9d0c872a1aL,0x49aa93d2ac57c3afL,
55708         0x1a4e6a715bda7656L },
55709       { 0x1a126ede554d1267L,0x37f945331cd02b48L,0xd70af04cce31fb1dL,
55710         0xcf410b0b097dc012L,0x930e1d1736c7b6c5L,0x902fee41c6891085L,
55711         0x349ba4a779fb638fL,0xa16c5821acd6f8dfL,0xfb3b83c12e076aceL,
55712         0x6b8d033be501d14dL,0x0593d45220f2d2daL,0x3752526d99df1880L,
55713         0xca32351c9feb33a6L,0xd91343bc1f6ef456L,0xc74857db35b9dc8aL,
55714         0x856a7c9385b4e832L } },
55715     /* 158 */
55716     { { 0xa007d0020d0a5583L,0x2f1301ddeda4658aL,0x91c0796434d939beL,
55717         0xa0cb6780a70c0836L,0xc0b4df95be81e540L,0x6cbbcd345d4ac8b8L,
55718         0x57c52ed054756239L,0xcac2dca41805ceb6L,0x915ee6ab79344255L,
55719         0x366def3124c9a2a6L,0xbd3b962f8c12c674L,0xaab64f1b7dbb7c3bL,
55720         0x3c0e4553e22bb95bL,0x2408febac4c63b74L,0x3ca773122a4da631L,
55721         0x62889084c636da40L },
55722       { 0xa457fd538cb8d208L,0x7a8f8009543f06d4L,0xb66de154f2eff2abL,
55723         0xfddb28ebf72517e7L,0x0149fe66f9389d2cL,0x79e8773fd85b88ceL,
55724         0x452e090b0ba543f7L,0xdeb9b5cfb0b03fc0L,0x3113448a6c5ed77bL,
55725         0x3609f3cf8ffc0372L,0x2bc9c46d5c1b4c4aL,0xe66f3bf38fa59be9L,
55726         0x1396bf5fcdb02691L,0xf1ec59d4009f88f9L,0xc29034562ad9dfe3L,
55727         0x79d8122c5ada4d58L } },
55728     /* 159 */
55729     { { 0x14d4e4ceaa529507L,0x056a081474655d00L,0xc0d30a384f0fc474L,
55730         0x8a8203ea3443cb8eL,0x33c62fb097f1728dL,0x8a38dcfdb520ef52L,
55731         0xa0f90d5d7cac9d3eL,0x28a7b0bf873cea50L,0xd115ae3a6c6c41cbL,
55732         0xa35171daa13812c1L,0x25d4bba5624d507eL,0x91dad2897e98f42fL,
55733         0xffd6b1e996a41371L,0xd46c2125b69e5b77L,0xc7d2b42420c4f707L,
55734         0x2ab3af958142557aL },
55735       { 0x86ca074c6a5372a6L,0x728fb83e56292ba7L,0x745596dc77741cf5L,
55736         0x70b4cea1520ef49dL,0x1472fe3461e46472L,0xf4d6bd663fb8ac5dL,
55737         0x46e52cc9c10bc071L,0x28794efe371a3461L,0xa4850718276fe877L,
55738         0xedad57739bef5ab4L,0x24c2d9ff3f15c815L,0x188950e58f8395c3L,
55739         0xbae4099680b6a855L,0x4f53e22c8a8803e1L,0xaf233f61039d25eeL,
55740         0x07db2c35250409caL } },
55741     /* 160 */
55742     { { 0xc7f3b8db037d4703L,0xe83708dfc5f488b9L,0x1fba830f8471d402L,
55743         0xa55ee8d25a2faae9L,0xc2e5bf105404fc1eL,0x647d5027aa2d5651L,
55744         0x37a53c0c7ebaf5f9L,0x7adf0bb295b30abfL,0x5a62e1fed64c93baL,
55745         0x7ffc18c0e2ef4a78L,0x139dd9d94d2cd04fL,0x253fbab75ea0af02L,
55746         0x7c8100ea0fef9acfL,0x74c5384dc8615aa7L,0xcb28682d9fe52069L,
55747         0x08b6ca8fcf7dd759L },
55748       { 0xe04e5bea036c3b5aL,0x387261027f9f2b4bL,0xa9fca57029797c0fL,
55749         0x1656180b82879ea3L,0x153389bb607f0ddfL,0x99a1223c67b0e087L,
55750         0x0d1808ec9d897fc7L,0x9470711a916edf19L,0xf8f52f2b07217118L,
55751         0x5d8b29ffd18888b6L,0xef1e22c54cc6f900L,0xc4036165eb24877fL,
55752         0xfda9523335479525L,0xd622a4216861468aL,0x5d043b0774faba08L,
55753         0x2c337b020d31a7d2L } },
55754     /* 161 */
55755     { { 0x7b2305bcea22fa65L,0xbe183ef4d159f63aL,0x3473d87d3f35923fL,
55756         0xb27fb306c11d7753L,0x702e7e6b2a054cffL,0x3ce9f97caf185619L,
55757         0x835502434e7d51c5L,0xa63e3d82f356ac5bL,0x867b7caad7645131L,
55758         0xee85e6afa671fc9dL,0x3b985ede2b07cd77L,0x07d598b0ffda5193L,
55759         0xb10eca39a942dc36L,0x17f3dcee506218a9L,0x3d94e8d106b7d5caL,
55760         0x509b2634ed8831c9L },
55761       { 0xb1b9414e48caed54L,0x77a78c6ccbf51e97L,0xa4688c8d4de9b258L,
55762         0x0024137c91ee3d78L,0xa68f9234e30ee64cL,0x573255bc88190d78L,
55763         0x41e8e05fba80690bL,0x50038d84ec354f4cL,0xb18f02d6dfa52816L,
55764         0xc47f9007ccb63fdaL,0x29d480fbe98ae455L,0x4ac45d225d0e319dL,
55765         0xd06f3575026db719L,0x733b9e202c3587b9L,0x224839922c317727L,
55766         0x1592d5a754bb8752L } },
55767     /* 162 */
55768     { { 0x5778d9a2cf7453f0L,0xaffb899aed83c1f0L,0xae6506d3e0a82ba7L,
55769         0x32c84e1aea3d5081L,0x9ad528c0810aa38bL,0xb1fdb020bd37d041L,
55770         0x78d6cbe1d06ce41fL,0xd287f0f02e74b7f6L,0xf5cd2575c43bb022L,
55771         0x6d28f2f3f81a71b3L,0xe65bb1f5c633e7f4L,0x32e5fc1cc4fc580eL,
55772         0xcd55539fbb7b07a5L,0xb5a94471c3caaf3aL,0xb958bdf44cc22d2dL,
55773         0x1614bdbd77a2777cL },
55774       { 0x4c1f0230ed0ab04dL,0xae347b006e2082eaL,0x9f10bc63c42c5b5fL,
55775         0xb0539e6fde019935L,0xd89bd4e765dd0825L,0x92260fefbbceda16L,
55776         0x8aaa755ce62aca32L,0xed762fa95ec82c5fL,0x99e64c0118650768L,
55777         0x57dd6245c92e348cL,0x0db88a7731ea6d68L,0xef0012ab07b44736L,
55778         0xb9356b94171d70feL,0xe68b062803f891b0L,0x3a54a53ab79c20a2L,
55779         0x489656c7b00b0728L } },
55780     /* 163 */
55781     { { 0xe43649ba71353c25L,0x517f27a113f67e24L,0x10bd333a1c1eb9e3L,
55782         0x94e1c05c78e29bf9L,0x84fe7d974743f15dL,0x9c87490890da2df0L,
55783         0x82403fa753673be1L,0x7ebf5db41baea1b1L,0xcfe0ae3524180eadL,
55784         0x1d15873fc2f50c3fL,0x16851ad670661cd9L,0x802968d9a51e8c2cL,
55785         0xe7d1a9cde0161099L,0x2b153c89a8a7ea56L,0x6d41b78906e3c498L,
55786         0x082bb2e9d6769dcbL },
55787       { 0x6180ef46c4d6615fL,0xfc629dc101b9829cL,0xde222ec00fb264caL,
55788         0xc5457e0610ecc2c4L,0x95ce599f1eea2c4dL,0x0433fa728f9c5b2cL,
55789         0xee035462cd6310f9L,0x84c57c3bce2e2253L,0x6c8ec31a96d87e44L,
55790         0x30bfe393a452c5a7L,0xc592b140a047b235L,0x7bd8be18c018545eL,
55791         0x794e01075c178c46L,0x484719462e23005bL,0x2665e237622a54f3L,
55792         0x36451a46901c9042L } },
55793     /* 164 */
55794     { { 0x17802d1819893e71L,0xa1765d8b539a2082L,0xfc6aea012302ecfcL,
55795         0x8d4cf51b365bf59dL,0x87741d720d232a80L,0xac343eb318e80427L,
55796         0x553ecb2fe74739ecL,0xaeca79a81a8b07caL,0x089ff32256f4ab3aL,
55797         0x5e95d7293fa1d1f7L,0x260569aef62a9a16L,0x5e776232aa08ddc2L,
55798         0x93fabec31b7bb54aL,0x48a20956743d56e7L,0x749cdb12eb0ebeffL,
55799         0x705307a469b8fcf1L },
55800       { 0x7a8e4c04e488310bL,0x12726e325325cd7bL,0x5d0fd8b04983efacL,
55801         0x796e552c02ddb913L,0x0eeca3f777b9685cL,0x9b766e89b15f24a3L,
55802         0x7c2736d648efc979L,0x3d619685a8021c6cL,0xfe33e278a0b2f1eaL,
55803         0x95c69879b676d6b0L,0xa07473191af4e0beL,0xa2fab5f136c4ee55L,
55804         0x6938b8ff59e5f3b9L,0x1e114da439cafe6eL,0xc9595ec36a6ad120L,
55805         0x80f79bd057e62aecL } },
55806     /* 165 */
55807     { { 0x3cef42a760af09b3L,0x3c016ebd933dfe14L,0x720cf1e0ed85eaa8L,
55808         0xd4f5e99fceaa3bc9L,0x7216b9d2b7106f97L,0x65f34c36c9668ad2L,
55809         0xa8fb82bc5b0c651fL,0x20f42f1cf2fda4deL,0xeb31ab2cd21f659eL,
55810         0xb7a776c7a13d1618L,0xec44102238662be5L,0xc825da70cad08e0bL,
55811         0x99299079022c0180L,0x7623bda02aef9ffdL,0xde84f4f3f5c58b50L,
55812         0x5f5a5da4d824ff19L },
55813       { 0x5737257e7e8311dcL,0xdef94f51466cf136L,0xa73e1645b05ca21aL,
55814         0x38ea9b3c02e4ab37L,0x7760eac98579165bL,0xdffdd047c24b01a4L,
55815         0x188d4fd13fb95584L,0xfaac38b825548bdaL,0x1a79a6f059e9dcacL,
55816         0x983f720f09a2700fL,0x8cbba554fb8a7e48L,0x38a1996847a1fad5L,
55817         0x118565475abd6b5eL,0x75113d31f3716ec2L,0x1391e7814212907bL,
55818         0x5319c8010dc15889L } },
55819     /* 166 */
55820     { { 0x2320136e6b61c3afL,0x1d40f2de07b4bb68L,0x651dee7f380c97f0L,
55821         0xa978ba706a8c313aL,0x22c587d62011ca10L,0x48bba218ab1f445bL,
55822         0x8c5eaf07e50444e6L,0x5549f02a442fccf9L,0x2564746f3d80493dL,
55823         0x42d24f6179c04591L,0x1600fa18abdc8887L,0x5cb8600aded38f8fL,
55824         0xa4bf9b90923aeb46L,0xd63fee351e1c578aL,0xf3c9c5acebb9ea14L,
55825         0x3d13314df11a4ff0L },
55826       { 0xe5cc662db4513d1eL,0xde78a8c5d55952bdL,0xe8a37a3fe7f86d0aL,
55827         0xca2d12a47a04f0c5L,0x4c6696e42e25d06cL,0x52614698b2136071L,
55828         0xf4d2701b89f6e1cbL,0xaafd617780efd95eL,0xe6d73ac4c5bb6907L,
55829         0x49e874ac420db35aL,0x11631de4f2751fa0L,0xb29f7336a1fa2eddL,
55830         0x4c406864b7fd794dL,0x73cb21d3e22f92a6L,0xeae904e62043cc76L,
55831         0x67f28a9fb322c6adL } },
55832     /* 167 */
55833     { { 0x7c17b258ca148ab5L,0xb9a1976fb3c60051L,0xea260698c8f28df9L,
55834         0x87b2cc74e8d45017L,0x372573290578a422L,0x81d5ee2517bec732L,
55835         0xd7411fcf1d48bbc4L,0x46217e6b487f5cfeL,0xcb007ac541eb8e1bL,
55836         0xc41c57a6e05a00c8L,0x1f954d2bd2f9fa99L,0x370bd5db40941cadL,
55837         0xe487879c3829509dL,0x4c1375525ceca5eeL,0xe8ef7fa4fd3efb9eL,
55838         0x5ff091741bd1bdb2L },
55839       { 0x791912a4579c6632L,0xbb19a44fb8a20815L,0xf4f97b84535639d3L,
55840         0xe57e2bcbbc3c9bceL,0x122b3f2bf19e6410L,0x1f0189da1357d9adL,
55841         0x675573bb79e5ff66L,0x444e5c98ef2f3c4cL,0xd6f61e2004d10731L,
55842         0x0dfa366fac75d635L,0x9fc47c862c854f23L,0xc04ae43e0ad0850bL,
55843         0x5ce94f642f720c32L,0x67efae65a753bc9dL,0xc27d30d3b0373a63L,
55844         0x6681013a29721646L } },
55845     /* 168 */
55846     { { 0x1385d913e84509dfL,0xe978beddcf339376L,0x2df425d33423a148L,
55847         0x43fa0ae3ee8cb579L,0xf015369d31c4553cL,0x05cf08bbdfbf1d48L,
55848         0xadff4be69444244aL,0x01635f81a35dda33L,0x085c8949e76fab7cL,
55849         0x4bd7fcde16737783L,0xfd8cb52ca254f8d2L,0x62168a66413ec985L,
55850         0xf2db97417a9026ccL,0x3962ee5650e1e1b7L,0xbee0a346d3beffdeL,
55851         0x3b35b72f0bdfab1fL },
55852       { 0xbff8de9f535c3749L,0x23c1f20f8add9c48L,0xa975b37bc8f8f663L,
55853         0x2529e475e8f3ae49L,0xc32f10d51d5e2628L,0x5ac0d29767862f1dL,
55854         0x13c79338854cbe36L,0x48f004ef4b67e462L,0xfa37a150e5d10ee1L,
55855         0x4974778dd28288a0L,0x96830a66cfb73f4dL,0x9f44401307804952L,
55856         0x8233c7099760b694L,0x8340cca525b75c99L,0x3f62e40bc771f99cL,
55857         0x47d0a1ebcd95c685L } },
55858     /* 169 */
55859     { { 0x266f4fff652811f1L,0xeaacaa9362ef3002L,0x6c387a5550cba0caL,
55860         0xa350142a007f5467L,0xc7fd102a202f2673L,0x5daee57033dc6e65L,
55861         0x60682ec3064a63d9L,0x46cf0bb0462b251eL,0x0e030ca55da936e7L,
55862         0xc87a60f2434265b5L,0x9637b2bb69b4e8f5L,0x601fb58c7ad7770aL,
55863         0x1f2147f6ed3a15a6L,0x05b47d5e2995e961L,0xcb0ca9b383213a16L,
55864         0x8f4b614a4995a85cL },
55865       { 0x5aa8ec194b4eb3c1L,0x8c549ac420323a70L,0x00d493224f6cc6aaL,
55866         0x0e53b9bb45f9a5a3L,0xe46ef1100897abbbL,0xfe873e57d7acd7d0L,
55867         0x7cfccfe50f7cb588L,0x0ea53d65c85557d1L,0xfdd9eb447288f2e2L,
55868         0xab2dedfac0eb68a8L,0x5822147008603a0cL,0x6946468900feb06cL,
55869         0x804cf5bf25e5caacL,0xd85598589fc91ae9L,0xed9378b173c45eaeL,
55870         0x8f942d02524c9801L } },
55871     /* 170 */
55872     { { 0x1f1ec3028e845808L,0xc302bffab77abfc5L,0x26afd4b9f8d97dc7L,
55873         0x3d3a83c43aac594bL,0xe3b74bd1674d94dcL,0x4464b737caa5911cL,
55874         0x62925773871c2cd2L,0x419f24853b4440feL,0xdda6a0f3e052ad7dL,
55875         0x645280d6846c86c0L,0xa25689faf8324f42L,0xc74ad1e807cf117aL,
55876         0x5626dea08ddc9db7L,0x52620373966fc85dL,0xe0ad57c3f3b1eb53L,
55877         0x38300252949c1acbL },
55878       { 0xa0ef5a405e744723L,0xdb5bcf751ae08481L,0xabfad8ccfec1f76fL,
55879         0xfba5d831fab37fc6L,0xbe39e248c8fedb78L,0xa5cfad5fad93f310L,
55880         0x747fdb1e913d5c24L,0x052a47c94518b7f5L,0x9e208d6c7cfb4327L,
55881         0xb135cb9c70e538beL,0x363527595bb17916L,0xa2c078805b3106c7L,
55882         0xd2d42a06c209bb06L,0xb525b471d3c504adL,0xc9f4b368822ce034L,
55883         0x15f18796eb4185a5L } },
55884     /* 171 */
55885     { { 0x094dea060aee4684L,0x42b21f067cdbdbc8L,0xa439e149b1931319L,
55886         0xea4bdd4181a7dba6L,0xc62137063c2ae80fL,0xb58b096712823dc2L,
55887         0x7443d515832611b1L,0x2e16f83113c20384L,0x0ce204d62bd992d2L,
55888         0x499dbcd6f419388bL,0x492ded1d1d3778c7L,0x9d5bd74fc5ddae73L,
55889         0xd4813d52994b6259L,0x191d9cf60e86ca68L,0x562179eaf3e9c2acL,
55890         0x6146f1f39fee1238L },
55891       { 0xbd06d33e078e2aa6L,0x693af7f79dee9265L,0xd56e0f81daa40e84L,
55892         0x05fbbb889b9a407eL,0xdcf44adcede99519L,0x7f71f8d3092dba39L,
55893         0x675b5da54231774bL,0x7456a251a5f605ebL,0x9031d4af87a39a9eL,
55894         0xdb43000605b474bdL,0xbda5dbf2b665aa91L,0x5d1a3df56631eeb4L,
55895         0x028149ef62377c58L,0x2e1af4e9685d0bffL,0xe0ea087582a465deL,
55896         0x95543f9e06bd0050L } },
55897     /* 172 */
55898     { { 0xf7cbc6f485d7c6efL,0xcad8084d63b1bc24L,0xdf90ce88bf8cba62L,
55899         0x98e4b686b455c192L,0x6146b8d5774fc6edL,0x70e2389e7ae20077L,
55900         0x5241c47961c22529L,0x7d2215103884e5f5L,0xd6d20ce217e28273L,
55901         0xe3119f514f2674f8L,0x8545905570c011dbL,0xdfab75d9fcfb760eL,
55902         0x9546362a9e8c2a19L,0x4b6d3f8a4a7d4b27L,0xa5c87104ee5d698cL,
55903         0x6db434782ba296ffL },
55904       { 0x064864935c3f0d95L,0x8917db824e748895L,0xf73fdf626b2f3e44L,
55905         0xc60edc542b7f574bL,0xbe1c09a2af732723L,0x7d34669d7cad114cL,
55906         0x9646600a321aaff9L,0xb94e2bbaed0cd61cL,0x866e1a41dec4750eL,
55907         0xa1be990db1a89f58L,0xc39e4d6cf2759693L,0x11cfb780c0e0dddfL,
55908         0xf0afcd7fd99c8a41L,0xcebffadb6e1c3050L,0x4f3981b096d2c6e4L,
55909         0x07a791e72ae27a94L } },
55910     /* 173 */
55911     { { 0xe70e90471e9f0300L,0xe0253ad9bccdf904L,0x51c0289dff053078L,
55912         0xf1ef092eae893462L,0x2c90a91aa4846845L,0x1946eda0f1dad4b4L,
55913         0xf07650f333df67b2L,0xc6e988db0b15a014L,0x72e0c66eb542f0f9L,
55914         0x5d4b6311e0c0378fL,0x548badaaae86950dL,0x6801638db35f1c8fL,
55915         0x129e3216944d1ad4L,0x9951bac840471d32L,0x03cc29f385e94ddeL,
55916         0x6d6acc2e4543ecacL },
55917       { 0xeb999e9557b2d299L,0x3a2bcd9be3d721cdL,0x2e60384fbb4cb444L,
55918         0xae177709dc060faaL,0x74f0e6d38c987cdeL,0x9a237cf81076fbedL,
55919         0x69af15137983fbffL,0x6c3f7a1d323f9584L,0x3e21cacf6db64398L,
55920         0x7cd8134f96703d92L,0x0755898fb8393f76L,0x1b5b28bc2e825222L,
55921         0xb78799c17924aa7cL,0x1db378f281427a8aL,0xd5a451b1ff289492L,
55922         0x79d182123d3c46eeL } },
55923     /* 174 */
55924     { { 0x1a3edff9109d5589L,0xded52eb4029b4499L,0x13eb9d30b4b54adfL,
55925         0x4f9214c1a27bff67L,0x4c817ee767f0f460L,0xbadf8d83c3a50e28L,
55926         0xc5dc03c994026237L,0x5f29581b966647c1L,0x10b6a0898a0687f3L,
55927         0xae787cec31634517L,0x2001dba562e75188L,0x55d4e1a745e2c3fbL,
55928         0xbfcacdebb67d3395L,0xa1a0af9cbc6842eeL,0x50590a2b3e88580bL,
55929         0x73104491a784cdc8L },
55930       { 0x44ca2cdf2648d676L,0x9a85eca54f1b12b1L,0x1b9dac942980e1ebL,
55931         0xf30d37091ac8aa89L,0x73072ab7c719e195L,0xba518c822f703797L,
55932         0xac090e14ac0067f6L,0x0e6cfc708dcd2927L,0x4f5889e221e7da63L,
55933         0xb4aaa40b8371c7c6L,0x1f9dabe28f7878c9L,0xf78aed6bd84caf3fL,
55934         0x3c39dd079e0e1d92L,0x680be5fb122424dcL,0xf41b214d0bdc0099L,
55935         0x6a8f8fc95180c54fL } },
55936     /* 175 */
55937     { { 0x62a1ed6353235132L,0x1db233f159dba88bL,0x85625452291efdd8L,
55938         0xc7505297b25111aeL,0xb5921af91d701bd8L,0xb4d05d729774f45dL,
55939         0x6e3d4c5ef18e73ffL,0x897d985f899b3038L,0x8a9c30fbc89b1558L,
55940         0x3c92d1a34d13181cL,0x292e86ba2223320eL,0xcf2454c201ceed02L,
55941         0x27a45f74583f309fL,0x75a6102cad0fd1a3L,0xdb4f45d2cb9c7538L,
55942         0x4752d8c1db283fd7L },
55943       { 0x514d6cead5dff4d5L,0x74cd5fdb45a827f4L,0x1070a60c4fc7135eL,
55944         0xdec0bb781be5778eL,0x271e12cd58dc6b08L,0xb765089b54bc2496L,
55945         0x6ddf2c63619098acL,0xfd6ebac667528832L,0xeaa2d025c2508af1L,
55946         0x13c2cda84dcfc1f0L,0x1c7836a845510be0L,0x3904688d1a886801L,
55947         0x643132aaafaf2545L,0x496855772830a88dL,0x569491ca8744b470L,
55948         0x3a6518f375fb8552L } },
55949     /* 176 */
55950     { { 0xaaa8ed50224042a0L,0x6cb4e3b02452f1e6L,0xedca5f4c768211d8L,
55951         0x4e0fe3f9ef4d5d3fL,0x33a8e2a4522d46e5L,0x5998e21ff1446775L,
55952         0x1496c50ef592d01bL,0x69104c2f83a67739L,0x28670bcb472bbf00L,
55953         0x8ea883b2503177bdL,0xc5d8bc057d2712a2L,0x41ef9317b439c994L,
55954         0x9801d3a8dcda1affL,0xd686eeb57038f6fbL,0xe80c5cd0fbfbf820L,
55955         0x540ac363edc25817L },
55956       { 0xa71969a9fe7f43dfL,0xe66538082c1b9e4cL,0xad9677d8859c2917L,
55957         0xbaca954596aa4404L,0x0e9d855fff1297daL,0x1f61897b22aea7deL,
55958         0x96edccfd36f13f8eL,0x627d307016e200dfL,0x729f0736c98988a4L,
55959         0x95e25e6097f231d2L,0xaf7f221bf6048752L,0xd66826094019b299L,
55960         0x1d99de0926b4b1d9L,0xec47cf661acdd7a3L,0x4de9f2b36ebe15e9L,
55961         0x17db32ecfa16974fL } },
55962     /* 177 */
55963     { { 0x75ef69196cf40599L,0x7ea10dfb00c020eaL,0x3da5ae7bfcaaf679L,
55964         0x0d663ca388ddd678L,0x5a21f8fe255bcfcdL,0xe9c3f538e344bc7eL,
55965         0x35f62b1d548e0632L,0x654f242543c6e64dL,0xc755a7a626993627L,
55966         0xa3b7c5f7b0f41324L,0x05697f793a2180f3L,0x6cf85fb11e81675bL,
55967         0x6d3cdb35e53428f5L,0xe3aa159152d28b02L,0xa8470255f7a3fb78L,
55968         0x460bd01ba194445dL },
55969       { 0xbc34dc23c24d8077L,0x82f4b5804c720d2cL,0xa29da9116f5d1ffeL,
55970         0x578af52092783ce2L,0xe29f51abb5904af3L,0x46c570d7f7aa1190L,
55971         0x4a522fba571bddf0L,0xbf4e2a06ae89bb51L,0x799b35cc59f3444dL,
55972         0xc302836726cc2557L,0x94a4e985afcec177L,0xadaf7dcb7c36cbd0L,
55973         0xed31b78775d39077L,0x52d6904f2d3e24bcL,0xc5ca26691f95421bL,
55974         0x7d342c3c1734878dL } },
55975     /* 178 */
55976     { { 0xe5cf2c0a11fd127fL,0x66d36bb8119e4c5eL,0x621ab2526ef56ac3L,
55977         0x30cfeaeee5430675L,0x2ede27d2ac3e9619L,0x6413513af8fce671L,
55978         0x6159c61b075f4c3dL,0xd447efe959069d98L,0xaf8d6f68ea76aea9L,
55979         0xac5dc61b0f5bd164L,0xdbab446e1e88bb98L,0x618b8b161ba92320L,
55980         0xa0eafb3c78989865L,0x0c7abcc2c08b7e82L,0x10f09b6e20d160bbL,
55981         0x5be0afa68e4c63a7L },
55982       { 0x82ab6d381bbbf49cL,0x3e09ce498c0703feL,0xeca58b5de10f4263L,
55983         0xd9cc6581da5a4532L,0x07e18876f618f7b7L,0x0419a5e3250f7fe7L,
55984         0xbb1a9e90de6b86beL,0x584a7deb37359169L,0x38eb34895149db2cL,
55985         0x14546a33b0ebabb8L,0x0067f0b0c2f88a92L,0xbde0dfe70a2db019L,
55986         0xba51b06cc63e6f3eL,0xa19127b9e9206fadL,0xe4eb5e87fe80dc0aL,
55987         0x1e6fccf5d4de30aeL } },
55988     /* 179 */
55989     { { 0xb57dff66aa8ac924L,0x06e9ad31c298b3e8L,0xd140e32965fb080cL,
55990         0x7dab211d1d95c93fL,0x6d68d8428a180caaL,0x1a929408a20ded69L,
55991         0xa815175338df461fL,0xff5604ae60eae932L,0x901b9e497dae4c0bL,
55992         0x4573a97fde262e89L,0xed69d9a4f1084983L,0x8ffa022f64724f1dL,
55993         0xd5f1c2e4ea85a15fL,0x4c626ce901453794L,0x80440cd6bf0907ddL,
55994         0x4522d4615ddaa837L },
55995       { 0x8895f079ebfbe7c5L,0x30ea1ded84ef3446L,0x716a9eb6d4a1ab96L,
55996         0x1a4a5d2250a30c68L,0x5a16631c0043bbaaL,0xbd1075025010e5f5L,
55997         0xbffe3e9d3d8c0556L,0x31b30b1807772419L,0x90ff7ef084b82297L,
55998         0x00c37d75f21a18c3L,0x18d0a635565bb8f8L,0xbac1da2a45e3bcebL,
55999         0x1c38e90c23f0b08dL,0xf1ba1aa25fbc5ac5L,0x09d5256bdda71fc6L,
56000         0x346501a96d7e40baL } },
56001     /* 180 */
56002     { { 0x86be448ccc2b0f1dL,0xe3eb45c9ac4c3703L,0x5387f65d9fc96bbfL,
56003         0xcef3c4e95ae27fdaL,0xa008f7761bc18089L,0xf374a08422ca18a1L,
56004         0xee88284253b73371L,0xcb6fc6d87cc09354L,0x8489ec1b61496d6bL,
56005         0xa92c29b949e325c4L,0x15c6ca527bdec166L,0x95444eeedcea2813L,
56006         0x34683eb33a21154fL,0x8fb26f98d39061cfL,0xc3b08aa806c940bbL,
56007         0x7c1d42cfe554c96dL },
56008       { 0x766e703fdc110aa7L,0xab7b79d7f362e378L,0xd259c75d5aadca3cL,
56009         0x2a6eca7960be3373L,0xf4744a4b06c4e8ffL,0xb2842ccef3b705bfL,
56010         0x1a3af5aaae304b53L,0x7bbfa2011b2d31b8L,0xc4ba6eba4bee88d9L,
56011         0x2d3565ce565cb839L,0x24808696daf7ece8L,0x2c7ccce7e6959745L,
56012         0xefd6eb3ce94f9837L,0x0a33b4cf3811a326L,0x14203f43fffa93a6L,
56013         0x031e982873c31d90L } },
56014     /* 181 */
56015     { { 0x4fefecfc765a17ffL,0xa09f3888d1290a65L,0xbf265c46938da038L,
56016         0x4bb6145da169ad46L,0x33cf821423a62fe8L,0x562df571abc860a5L,
56017         0xbf2a90fa815c38c4L,0x45ba1d6e17eda875L,0x799d881a946fa5e1L,
56018         0x6c1be784b90f5a3bL,0x0910a37cb10ff52aL,0xc38c1fe4a4f4fd36L,
56019         0xc3180fc58e2d3ba0L,0x3e2ff050b17a6187L,0x3a00059b943a35c2L,
56020         0x494d3645a28cc51cL },
56021       { 0x398426b64ba021f8L,0xd14c9083796deb6cL,0x6d2e53957e36c762L,
56022         0x8f556eca751cf216L,0xdaca1e0019b24a19L,0x47887da44b20c2aeL,
56023         0x93ed4ccdff41a733L,0x8d717c445c7c0cd7L,0xcc48634a91bf7009L,
56024         0xa1f146f93b59bbafL,0xdd38bb39e5624f15L,0x96d41aad303f8443L,
56025         0x6b670f034bf104fcL,0x0503f9ed29706582L,0x768e1f47b34200f5L,
56026         0x3cfdcc5ebbd4c6f3L } },
56027     /* 182 */
56028     { { 0x536c2a86b523e13dL,0x1014a4582920d0a0L,0x3d52b478e7571296L,
56029         0x057460667eb51beaL,0x709f786187b0e919L,0x028aed88686888e8L,
56030         0x79a809d7d94afcd4L,0x50c6032fe2129af3L,0x75e4be72983c4082L,
56031         0x98331bbb7ab3be8eL,0xd31a032cb618c728L,0x36dd85a13f59c4a4L,
56032         0xdbece345ed4f61e2L,0xba7aaccd1e571715L,0x138c58da64a1ebd7L,
56033         0x89296d0f3d1aeea1L },
56034       { 0xb165288fcca82c97L,0x26c6c12d1427e8dcL,0x66a94f074c3edda9L,
56035         0x94600e1eeaa01ebeL,0x14abce7c30f5e86dL,0x741d7020cb456a31L,
56036         0xab05aa13279f42c2L,0x70b60fafd4238468L,0xa18efec1318d39e6L,
56037         0xeb07f1ac8920b318L,0x01e3cba8d8399e03L,0x65f8932e3c81a301L,
56038         0xae8bca7dccc667d8L,0xcee1ae79a268607cL,0x3182e64ccac0a12cL,
56039         0x9233a2f72b1a4c54L } },
56040     /* 183 */
56041     { { 0x717e8df60acbee17L,0x0f0959c25c24fcdcL,0x46f09887e54ffcb0L,
56042         0xb993decad285116bL,0x0bfaa4f8bba1fa51L,0x9c9249efd0f2183eL,
56043         0xf93cb35896847779L,0x284bfb7f2322d421L,0x40cc709ad42af009L,
56044         0xc69f22749bb1d615L,0x76f50b3a717c3c6aL,0x8b21e985bb9c5eebL,
56045         0x58fb19aea4783b5fL,0x04c86b9b52e1c3e7L,0xaca59092f2971ac8L,
56046         0x2bb26a6921ed8291L },
56047       { 0x98a3443515f81416L,0x086e72e7aaff5bb4L,0x3d1f64de0317261cL,
56048         0x31c0786c5c0a1cfeL,0x542ea4d8b3683401L,0x2f77273a1a39b4cdL,
56049         0x14fe7ee1cbef27f1L,0xee7fc09e16bb27dcL,0xc0dccc17410e5dc7L,
56050         0xa34667421943b3ddL,0x92934b603f31c1b7L,0x0186ded9c22c1070L,
56051         0xa37ee8ba799f966bL,0x0f3bfcb4249b0893L,0xbae614472e92d4deL,
56052         0x937cb3f8e196eb08L } },
56053     /* 184 */
56054     { { 0x57c0e77c16fbfdceL,0xea034cc9c98d4cc0L,0xe7606d7242572d20L,
56055         0x9861b55c0019a83cL,0x80ba2803f1597162L,0x0f4141dd05a0fd7bL,
56056         0x8865913b4b0daaa2L,0xe6685746aa3848ecL,0x16d15a5a3e0485d2L,
56057         0x81c0c7743b6905ddL,0xcec31b7d818af2baL,0x80d8f194d2b74b78L,
56058         0xca659db2543e2f28L,0x31b83a7d9fb07c1cL,0x86537fdc1f1048c0L,
56059         0x4d57bb0778586a11L },
56060       { 0xbc4b768a53b396b6L,0xbc8b24c493b51dacL,0x33e511eba30ae1b3L,
56061         0x893bbd95945147c5L,0x6cc86031179fe3ceL,0x34b0a1673f920bd4L,
56062         0xb32912eb6b256160L,0xbc69a2a49d168d83L,0xb4949e7aef0dd128L,
56063         0x2613419a872699e1L,0x06c58477bf21376bL,0xe55b1909a4f97147L,
56064         0x63d6eb757b9b745fL,0xb5365b2908df3c85L,0x0e257e4355fcfae3L,
56065         0x1067c118979f2aa8L } },
56066     /* 185 */
56067     { { 0xc845508432bf8883L,0x4755286a6fd06667L,0xd70b0f8f77c2335dL,
56068         0x678e60da2f4a2c94L,0xa468d8acd118acf5L,0xce93830bbf5b90d9L,
56069         0xea4b1c74ed4e9104L,0xac67316d27776ea4L,0xb98ad75c361bab12L,
56070         0xc323d48299122451L,0x26440220530a43aeL,0x3a44532e3292d5a5L,
56071         0xdb48694b5fecf1bcL,0xe4e0516ec667b8b8L,0xb3aa595fa4306adeL,
56072         0x7e4f7091f34e9725L },
56073       { 0x3f3816e9b7f70919L,0x765216ed16b003f5L,0x46c6cff4778c99e5L,
56074         0xe6a5abe830a51810L,0xef6f49e645e728dbL,0x6fdd73eacaccefd6L,
56075         0xec394e6f8c37f3f7L,0x73320802b6407fc3L,0x988e8f7a96625cbdL,
56076         0x832923637cabfb00L,0x258ba9df407f359aL,0xff01aee5ccbfae50L,
56077         0xfbeaeacefe251813L,0x9c69f16183f1cba1L,0x512c58ad9eadcdb5L,
56078         0x2ae49cd46ccce8bdL } },
56079     /* 186 */
56080     { { 0x1239b0e3c40849f2L,0x5136a4cda441098cL,0x61535a99e547f649L,
56081         0x92e4bdc47a9bbac6L,0x195a164653547af6L,0x85ecb3198b47a74aL,
56082         0x278553fc9de6a2b2L,0x471c038a0e2ba52dL,0x12ba1b8835bcba93L,
56083         0xd4bf50da6f31eca2L,0xd146e3f6802b32c6L,0x0c9c01313c64c8c4L,
56084         0xad30f12deed21297L,0x9b75bffb9c68530fL,0x23c0ad3e8918de51L,
56085         0x180e9d52a73771b7L },
56086       { 0xc316542f29ab77b0L,0xdd411d9cf7aee628L,0x044c0685353c2f40L,
56087         0x638dc7e44b0ae4cfL,0xa092418595fc266fL,0x639da671fd2feb7dL,
56088         0x56858ed55ea39798L,0x7a694f3158f3832aL,0xa94233c6d316d831L,
56089         0x2fcacb2630a35a7bL,0xfef8f7ddf1ff713bL,0x8b9b452559eee2f3L,
56090         0xd1b4f91b156d064aL,0x177866c22f5cfcfcL,0x12bc25663777eb41L,
56091         0x21ca6f3cd8ab85b4L } },
56092     /* 187 */
56093     { { 0x0e162b13a3e66635L,0x1ef20a2b2a9f76afL,0xab473a3046db3356L,
56094         0x0840bd777802bb8dL,0x5b6baf5ea699b44cL,0xc6e119001b2207f1L,
56095         0xe5de16a9790b0105L,0x22b12f15db67f004L,0x185fad458a025d25L,
56096         0xbccf6953df0a1142L,0x4c42129bf45034c0L,0x0f7404001c277bffL,
56097         0x6e440b4c280a9e18L,0x767de8f5842aa2b4L,0x3de20ab805e8d94fL,
56098         0x5aff585920227635L },
56099       { 0x805acd20a8458e40L,0x5a5557d8149732bdL,0xc70741315f1ca72dL,
56100         0x7f2e269c952b5323L,0x5c5925566494fadfL,0x153b7acd1a7d2666L,
56101         0xa6df063d86fe2865L,0x1e91db1357d53b6bL,0x9195bb89e93ead01L,
56102         0x3d71e1af2963bfe6L,0xfab2b9c288278886L,0x778366923b859b6fL,
56103         0x6e695174f7029dd1L,0xc79878767b984561L,0x64fb4f1d5907d849L,
56104         0x3eab7e1c88d8a977L } },
56105     /* 188 */
56106     { { 0xc73a94b652e5718bL,0xe3aefa54f4cee1e9L,0x654e9e63553eedeaL,
56107         0xf2541e1b5f3aca1aL,0xd71294890d083316L,0x7965af63fb7f950eL,
56108         0xd8fc9e0dc74e3e4aL,0xb4ee48d2eaf79ebcL,0xa458a86a8b7787e6L,
56109         0xd8c7621ff7cceaf0L,0x8228eeffdf67980dL,0x210d4742f9106727L,
56110         0x91f63501b07e3629L,0x441761c67971e29dL,0xc0ccc65f03a3b8a5L,
56111         0x3491da4f38e09544L },
56112       { 0x6706d046cb062eaeL,0xee7db7355d08776dL,0x80de8052292315d2L,
56113         0x40785662c402bbdbL,0x5f93525c26ed3337L,0x6cea14d67d568ed3L,
56114         0x916a118966888b1eL,0x0fbd52055dc71675L,0x833d1077e4575df2L,
56115         0x4e93100aec092335L,0x2f9e1d016cd85389L,0xeebd372543226368L,
56116         0x401d172b1ba4cfd7L,0x377dab9d574c5838L,0xaeaa695880d517deL,
56117         0x0c843dfd6ad15a18L } },
56118     /* 189 */
56119     { { 0x455811ffc9373300L,0x1c39332a99fdc300L,0xe19bb81c353cb655L,
56120         0x774b924a96a83d27L,0xcbfc8fcbb2ee3f1aL,0xaf278ec4010d56c7L,
56121         0x6fde682fe0abaf79L,0x7566d0727339aebfL,0xbd35ad5d71205db6L,
56122         0xb5bbe6947051c9d0L,0x577db480d3a3067cL,0x2c70ff54572d7530L,
56123         0xe8615aece06d853dL,0x71999ccb05abfb5dL,0xeeefc96bea0a8ed7L,
56124         0x2dcc469d35f6df69L },
56125       { 0xcca6cd06c65f0e77L,0xddcc7980bd71b14aL,0xb6221f8b3c93cc00L,
56126         0xddfcd5b3ae8cbf57L,0xbc92973f76f8e63fL,0xe9848a3406e132b7L,
56127         0x4cc59a03d51ec9e2L,0x9c9d32bb3a33081aL,0x0012105280e8466bL,
56128         0xc2b0032a1bbe7295L,0xdbfc657224938448L,0xe972a0ceb6bba0ffL,
56129         0xf60c0a4fc0a94802L,0xf62c41cc599d8bc7L,0x820c96ee312da0b8L,
56130         0x5a1a65dbcdbdf9fcL } },
56131     /* 190 */
56132     { { 0xbfba691a42485684L,0x613116b929c470c9L,0xb4b01971e62a0519L,
56133         0xf3245aa65ff499daL,0xc2ef87f4a5238effL,0xc16dc6bacc9d5515L,
56134         0x5a7f227e2dbdacacL,0x8dedaac4a9bbaecbL,0xff308a6d2e7c9885L,
56135         0x4c6f2fc2e6895593L,0x3655f285177e0611L,0xa63e8d06300b1beeL,
56136         0xbed0ce7913c17b54L,0xca4abe35c4974262L,0xf4b44a17bc4e4037L,
56137         0x5ae95099efe5fbd9L },
56138       { 0x122e5ee7804f7455L,0x341a499722066682L,0x97d24c317795e333L,
56139         0x12f4123ce48efcedL,0xe8738d9219fbc21cL,0xbb3bdc610663a3aeL,
56140         0x3603d8c28593a6dbL,0x926227f2e3c1ac75L,0xfea92ac05eaae519L,
56141         0x5b596f0bfd6812acL,0x3ce7e844fc2a82dcL,0x3840481a63522b27L,
56142         0x836088b152867895L,0x21ffb7cc26588688L,0x0ca331612f4a7cacL,
56143         0x4110667ea3edd298L } },
56144     /* 191 */
56145     { { 0x81830357c2d04b63L,0x3fc5a34df4929a18L,0xc73bf6da22d195dfL,
56146         0x14df2f89cb432473L,0x345afe5ce997f138L,0xd8e3f5f98b9604f4L,
56147         0xad7942e950c10ae5L,0xcefd5447eed25ff3L,0xbf68e51e0e73c0ccL,
56148         0x5b1ad591ab54fa4cL,0x8bbc110512b61c8cL,0xbb932913b5abf760L,
56149         0xdb1231be01e79649L,0xd0a83e91040ccbe7L,0x3dde426f90a96db9L,
56150         0x1cceb64534df11eaL },
56151       { 0x2d210c4f0c6d0f55L,0x6cadf61b9c673c9dL,0xdd7f9919a9ce3fbbL,
56152         0x135f494c93b063e4L,0x580bdb3c145a93beL,0x4d8723320f52ef7cL,
56153         0x74d876e88814bb6aL,0x4f6f723ac7a97deeL,0x7de2b8f03e3cd833L,
56154         0x6162f082ae720270L,0xe88ec2d4ddfa486eL,0xd965c8598d3a17c6L,
56155         0x62e59e543980171aL,0x0ab6285dbbef6b22L,0x3cf451954d48b203L,
56156         0x1f1752334ea25ea3L } },
56157     /* 192 */
56158     { { 0x808a765b3467ea91L,0x3f4632eefd2d9c45L,0x7b75dc6d9cf2bc6fL,
56159         0xefc8d240359813aeL,0x23ecb209e44cbd8dL,0x59ba10e321525622L,
56160         0xfa14d9343f1ee19aL,0xdf97c21bfb0c48f7L,0xc4e62890ea30d437L,
56161         0xb286e2a4651475c2L,0x291f01e4126672a5L,0x9c6fda5c31aab3b8L,
56162         0xb7277a5ae17d22ecL,0xbd88ed83914f0badL,0xd0b05d1b6a2392e1L,
56163         0x4cb8af9065893c2bL },
56164       { 0xa2b02057bb4b1953L,0x4ce08b44f597f6eeL,0x854f5d9b5e6412c8L,
56165         0x1913262db3cd4919L,0x902762e46e42bb5dL,0x8355c8e6d78e7f60L,
56166         0x8efaa82438b6c16cL,0xd0173790e550f618L,0x118af462e57d778eL,
56167         0xa16ad5e8715b4714L,0x900596c341dea4f9L,0x2a957c32280ca610L,
56168         0x2faee800374c65a1L,0xdb10512750080414L,0x8c1db931ff080fa1L,
56169         0x486a5c25d79878fcL } },
56170     /* 193 */
56171     { { 0x0521e213941b4f36L,0xbaacfb14f803b4f9L,0xfdf1e22e52a54ba8L,
56172         0xacfabbba8fe4796cL,0xae0788db58dbacb6L,0xdf98d736c19dfa51L,
56173         0x155c286a35a716eeL,0xbe7d46769c86461bL,0x50b6380f63a64a5eL,
56174         0x14b419149f609262L,0x0919a7d0a2dfc5b3L,0xc454da55cef466acL,
56175         0x93fa4a246986aaecL,0x5090b17171a49cedL,0x602f1d6cc1fa75adL,
56176         0x5d269f8978e4c054L },
56177       { 0x3a74030c14920419L,0x0845d86890968739L,0x81b994c4eeb70fa6L,
56178         0xabcaa06dd9fc5bcbL,0x06539427f58f8f2dL,0x35c85f67b1dc52aaL,
56179         0x5a7d8d722c911baaL,0x4041005caec2d834L,0xb5868a447a8e5347L,
56180         0x04ee180b8de512c3L,0x4daa66e5211168ebL,0xc0bd5dab2317cd8aL,
56181         0xa1d4185d61164df6L,0xacedca261dbad7c9L,0x0fe4b5ac09b02683L,
56182         0x8ac9995a26d9550fL } },
56183     /* 194 */
56184     { { 0xb2c8dc9b2640a39dL,0x21ff0b38ede0c9f9L,0x74f469bda1ecba0aL,
56185         0x8a902ccd080d0417L,0xe956fa32f4994604L,0x348f85cf9776ab15L,
56186         0xc21fc6ee0066f492L,0x35b1ebfefeeef367L,0x7804581c4613e5edL,
56187         0xcbdfe8e6ea6ba071L,0xddfcaa32950d73edL,0xc97479361da48889L,
56188         0xce867c8cdbaffbd1L,0xd267431f1cbaeae7L,0x68255045897912c8L,
56189         0x0c7c1ddcd7ea1e4dL },
56190       { 0x53aa30cc1ce963a7L,0x7352f64cc4c5fadeL,0x2b9aa2f82828afbfL,
56191         0x64273c56ca212107L,0xaadd765485a576dcL,0x6196ac3e90b5c77cL,
56192         0x20d43e9fd1aaf39bL,0xfc392062cd05cbc4L,0x141638724c0ff2fdL,
56193         0xcf32b8d82ae821e6L,0x5f58f9433fa7a3f0L,0xaebf1d2df644ca92L,
56194         0x0c0615631918a75fL,0x7989b5ed6b876118L,0xbf342445ad412441L,
56195         0x24ffc9ae1df633abL } },
56196     /* 195 */
56197     { { 0x89fcdc0593c7cb2bL,0xc1243b95590053fbL,0x601debcf6182343cL,
56198         0x364546ef66c18a63L,0xa5290701ec913287L,0xc35b8026f9788c31L,
56199         0x852b862a92d1f7d7L,0x1809cb050aa79728L,0x897d467ca3cb2005L,
56200         0xf20c77c09ef5b946L,0xc3372c42f2241984L,0xda053e0df35bb206L,
56201         0xbc26c6d0a9c140b5L,0x61cfcc0ccb56fb33L,0x1c3cf9ef299b3968L,
56202         0x89e4d3d140621ba4L },
56203       { 0xd35e80e7a45a9be3L,0xc4daa57807356fbdL,0x0186d62eb967bc2fL,
56204         0xa702679e47cd16e3L,0xca2f1c025f30ce9bL,0xf1205b461f864f50L,
56205         0x7fd6d79785061d66L,0x47edc4f68a08809eL,0x5dac04499a4d3ae2L,
56206         0xf844664a6d1f9da8L,0x9f30ce84d7a83a71L,0xe9382baceaac33f1L,
56207         0x1f033831948622abL,0xb037a4baf7681eb2L,0xd156a90899a1b5c7L,
56208         0x675d3e6fe6f1d0fbL } },
56209     /* 196 */
56210     { { 0xd9767ffd707193e5L,0xe478aa91810358e5L,0x5634f9ff328d8ef7L,
56211         0x913a0ee86dbbd9a7L,0x379b29687e215686L,0x903f410a89d9da38L,
56212         0xd9f8d7b91b1334d2L,0x9fe74229bd82efb5L,0xdb568b623803c778L,
56213         0x93e9a350d3d25344L,0x559c35b0724497e8L,0xc472d436a169e23bL,
56214         0x09864632cc5b4c69L,0x9f6d759d83c7f531L,0xa91cf1db1e497888L,
56215         0x5f7f92fe60af1a4bL },
56216       { 0xf18a1cc60545167eL,0x55ee2e02affa88e0L,0x24cdff51432a7bcfL,
56217         0x7382da42a7510866L,0xe894c11f40511af7L,0xaa4e4e312aaf1423L,
56218         0x8c3d36f0f63dd2aeL,0xfc5c9550d7660635L,0x0125373137ea7eabL,
56219         0x2a5cd59839b950f6L,0x95a0f60140e63442L,0x905e238ef2ac7045L,
56220         0x44bacc0e446b0f73L,0x4cd4206ec448578aL,0x367b1aaaa5bd7803L,
56221         0x25beced90a2b458dL } },
56222     /* 197 */
56223     { { 0x079a73820c33a8fbL,0xcfbf6cd10f25dc1dL,0x4ffc73f8c6d482b6L,
56224         0x3e51f18c07bf844aL,0xa7651236599162f0L,0xac59a74e14013811L,
56225         0x957a6865e55018a0L,0xe1ec51bde3ca09b1L,0xbc0c7eb3a960253fL,
56226         0xe83bfd147de03f84L,0xc0540ed152fbdb09L,0x6ba52eddcea15ec1L,
56227         0xf3d30ed54b261307L,0x9bd7bae8e8397206L,0xf20d8692096373aaL,
56228         0x0a616a4bc3b0bf63L },
56229       { 0x2075f3ed6e1339c9L,0x7afaa072bf8b00a6L,0xdfafec82bccd9b47L,
56230         0x4713158f00ca54c7L,0x449102f138bc31aeL,0xaf98f158310dfc8aL,
56231         0xc9ef207559e954d4L,0xe8021af9c527a0c4L,0x6e8012777a192023L,
56232         0x635f538c7fb02377L,0x5df1974fe8c9e951L,0x0287faed15cc9097L,
56233         0xfa0728f0f7a5115cL,0x90dbfbe60fac623dL,0xa8d40fd40311ba09L,
56234         0x876d154e07c6464cL } },
56235     /* 198 */
56236     { { 0xd3a4d6d2c2d3ea8aL,0x36be681ba842600eL,0xc53f100de4070672L,
56237         0xe3e5b6fe6a7d7a7bL,0x6e6994f95d5e1a83L,0x07cacd2276097c2aL,
56238         0x12d98dbaa6791011L,0xddfc4461102e0e24L,0x4815dbc2d493272aL,
56239         0x7e38e64ba9436696L,0x4960eb1a32b2bf90L,0xda457525d928e28bL,
56240         0x72f75b392a077c9eL,0x27760cbb7fd61d00L,0xaf235d1b0f4b1456L,
56241         0x3040c23be76d1700L },
56242       { 0xb10dc55b4efa9a70L,0xd4de414f53e86610L,0x3d95c11309f8a27fL,
56243         0x505109a506661d3cL,0xcaa2994a60eb513eL,0x3ee415371e7d338bL,
56244         0x4fd145fc4651e71fL,0x51bbf838cbc313b4L,0xb039e0781eb92150L,
56245         0xe8696b4414bf5ac7L,0x2d6671888be0d48cL,0xbe93b2f5dd8f2b6fL,
56246         0xc1dfd1e7eb8a7f8aL,0x862b3dd990f751c5L,0x1eb1ad58a32a74beL,
56247         0x5486d79a1ebbc9a2L } },
56248     /* 199 */
56249     { { 0xcb2e34ffa1359e13L,0x202d8dbf28196051L,0xe95e023d23564b5eL,
56250         0xfb1340b642f6ac12L,0x543ba852b653725dL,0x81aedcd68d2466adL,
56251         0xbf780224547c728bL,0x559f8a119569fb65L,0x505b7a62dfb22ec9L,
56252         0x071075409eed5e52L,0x9c899288299f6f11L,0xa7d692613db6f8c7L,
56253         0x30eb7fb3b3ca79a9L,0xcab99bb8fb2160b0L,0xd2012568d28b409aL,
56254         0x380f1b0f5ac45f8bL },
56255       { 0xc0b99e6be6a0068fL,0x4b67cf2ac8a73753L,0xa6c9a548b2faeb7cL,
56256         0x7f417f99340260c3L,0x8ee56855cc0f739eL,0xf08b510f780949daL,
56257         0xb1770fc28d5c6effL,0xb4f5abeefd96a7bbL,0xa07b1136f2665a2aL,
56258         0x2fb380a4b601dcf9L,0xcc803614162becc6L,0x3498fb96ee6b83b3L,
56259         0xea9b0fd6a8c17eebL,0x5834b5baa177efc2L,0x929044f55b110b3eL,
56260         0x4abeddedebd7285eL } },
56261     /* 200 */
56262     { { 0x3355e1b9700ef376L,0xd56e5d9a66cdabffL,0xb3dc257547e87646L,
56263         0x28f44b8a00f79369L,0x08c32b1ea0c52e29L,0x5a78de123729b392L,
56264         0x4184519ab26d239dL,0x23f6b4b7e0ce4a6bL,0x235f6f8aacb2a9f9L,
56265         0xbb8bc454e2064a59L,0x37efd0341bf3062eL,0x6bac683b94dff6f9L,
56266         0xc3364b1e8aa7fa06L,0x0616772ace0b3745L,0x46f08d08d1e3fb0fL,
56267         0x6a20abb318e132d3L },
56268       { 0xea8310166a85cbc7L,0xd0990946934f9aa7L,0xc2211088e778f1b3L,
56269         0x7ea4ff8f2247b799L,0xb3171d71454484ceL,0x294039494f98c364L,
56270         0x5da911f397df1458L,0xa6b5809309439116L,0x75f9509a174238bcL,
56271         0xfeb518218209758dL,0xae0c6021a47925d0L,0x0e946694af8a315eL,
56272         0xae7af8a36bad04b7L,0x44c15e7ff072447dL,0x5184668aa5456ffeL,
56273         0x45e353a7bf36b977L } },
56274     /* 201 */
56275     { { 0x7605676493092f71L,0xeb66b6c2f5b92d71L,0x9db3149be2c8b6c5L,
56276         0xf62f583a20c0363eL,0x688acd3303cd7097L,0x85d0c0f8ebb916acL,
56277         0x1bf7462c84c19b0eL,0xc76ed5f97c4a6ad1L,0xec8b88bad119f369L,
56278         0x59b8371bebe50b83L,0x0cc69508866706a6L,0x531c75a3f8373d2cL,
56279         0x4e1cd3a32a5a02fbL,0xe8274778da39a1d0L,0xedfc5bbb75da333eL,
56280         0x15941f24ca79bd36L },
56281       { 0x42e8c0f8a77dd512L,0xa91b59a71dc365f6L,0xe80d14cd08753862L,
56282         0x1624230dd272facaL,0xeea3ec164027cb5aL,0xc1700b59c1ef9f03L,
56283         0xd411c1270da3148dL,0x801ee448c4181af1L,0xedf285599e3a900bL,
56284         0x5d67b0bd0d09affdL,0xd839df968b370024L,0x3b6307e0e6f836b8L,
56285         0x5382e588bd3201c9L,0x636d8a6b7a1d02bbL,0x70b7db76968641e9L,
56286         0x6d17c34a118fad03L } },
56287     /* 202 */
56288     { { 0xcf608841c181c99bL,0xb65dc901c87bdcafL,0xb460b4473720dabeL,
56289         0x4c79c3965377515bL,0xd447f22e0a96c277L,0x0d9521302ac0f440L,
56290         0x8330b26bc90583adL,0xe25e977a928904a0L,0x1deaffd985c50b18L,
56291         0xcf4dbcb7a5ad5f6aL,0xcbcd0019c8a37ed5L,0x7846dd901e9850b6L,
56292         0x1ac8194ab0b8e605L,0xb972857134132f90L,0x4ce9f149f56ee28bL,
56293         0x1ab9b5a43e9e1d4eL },
56294       { 0x206dab92314fa7a3L,0xcc4af0f0478ff963L,0x4cce1713904d9fdbL,
56295         0xac20a2eb12c045feL,0x44fc5478fd8f6d7dL,0x886e72c5ca7b6ffaL,
56296         0x7fa4529b6fd6f758L,0x4df1d1b192a820d5L,0x3d812f9f2789f149L,
56297         0x9842f083aabb53d2L,0x2648539b2a03ab32L,0x631ce090b1512502L,
56298         0xe1294d15731f6bd5L,0xb229361d9436e634L,0x8c4281c43ca966afL,
56299         0x24b34956c21ab3edL } },
56300     /* 203 */
56301     { { 0x49bdcb86659824e2L,0x6dc4ce484e13e74cL,0xa4c01a266bbe1eeaL,
56302         0x47b2b8e71e3ec457L,0x7e8b15e02f5a8e4bL,0xe81eb6e6e333530dL,
56303         0xacba369e17a45202L,0x81241431d70e4c9fL,0xc190af4b3e12beb8L,
56304         0x5327052311f486fdL,0x9f6c41e129fb2bceL,0xbe6287ebb70f6c08L,
56305         0x1479850a3feb4477L,0xfcfdfb119bcf18bbL,0x925c292fda80d040L,
56306         0x212d65e57e3c5bf9L },
56307       { 0x23adb386ca15cf08L,0x4dfa4ac481e172ebL,0x9d1dbf934d42d0c0L,
56308         0xd9cf607374404dc7L,0x60508441e932bfcdL,0x9ae910ca1c682a98L,
56309         0x9528fc1841ac1cc0L,0xe6a120aedbbed630L,0x94e0e1ec30ccf250L,
56310         0xfe84ba54e58bbf2fL,0xc66d0b4f9faa4415L,0x0c58f1e7ecee7ce5L,
56311         0x7a1d43eb6fa6873aL,0x96c6c5a0399f1348L,0xe6ef9aaae6727ab7L,
56312         0x66afa5549a5c2447L } },
56313     /* 204 */
56314     { { 0xda5aaba8c980e91dL,0xa93cf5096ac98efaL,0xb0990e0a8da32662L,
56315         0x01d215300081453eL,0x2bb0d33e3d71de84L,0x465f6d803e19a012L,
56316         0x5902ff4c78a838e7L,0x74e2afb71931348cL,0xa49327579cfb057bL,
56317         0x761ea6423ad03f8fL,0xb7d4c24558ffa40aL,0xb5e9c0d977a87e30L,
56318         0xd1c5edbac9c84d26L,0xeca8839a3d1963a0L,0xbc6f2f35ebf6bf0dL,
56319         0x01ef06310d58abdfL },
56320       { 0x2bf903163ecdcbb0L,0x19e2d72827c1c955L,0x9e5270309575c930L,
56321         0x0dc1c5a996983930L,0xef9f80ff7cd082dfL,0xcd915075df97e051L,
56322         0xf286fffe9cc61b55L,0x352db38f80f24cc4L,0xed9b99ec36523ae3L,
56323         0x109a8ca810b104a9L,0xc2700fe7305203adL,0x2a2ee24e769400f5L,
56324         0xd595d399ee0c452cL,0x0ab75d6af7f02a41L,0x341080990db730b7L,
56325         0x0e4f5ffd5e8d1202L } },
56326     /* 205 */
56327     { { 0xbd1c64440ff14c38L,0x9a5b59faaece11f2L,0xaa4605a722af6330L,
56328         0xddc9f65a82af24eeL,0xf4ee4bfeeb9a1159L,0x2463d07674e84eafL,
56329         0x88cbe1e00e0baaceL,0x7ca568ead5fabdcbL,0xbd80d524c57eb99dL,
56330         0x9c46572ce9be9873L,0x918a1dcd7300b85eL,0x4922131240f54176L,
56331         0xf7e324ffb5b14236L,0x40dda5012434f16aL,0x08833421a133d97cL,
56332         0x33d411610876f020L },
56333       { 0x7531a36b9878e5ecL,0x5de3e32146918232L,0xd15f9a33d0a30464L,
56334         0x734c1b87aa173659L,0xac2094a2f925d4feL,0x43c965a1c262b0f4L,
56335         0x759c903e447d5cbcL,0x92af215e05239300L,0xfffb6d5f1f593f34L,
56336         0x65943b4bc3cddb5fL,0x9d03a29cbfdd5408L,0x8f7cda6b198d76c0L,
56337         0xc0790a22c0f27b59L,0xba557a848cb58ccfL,0x5922052d76c54fdcL,
56338         0x2d3de7aa47b6b466L } },
56339     /* 206 */
56340     { { 0xaade746265add3b7L,0xe5888f35abf24c2aL,0xd41549cae1a57d93L,
56341         0x0e22e18e2c76f7bfL,0x67f288eabe3202b3L,0xb79a66ba1d1d0f0aL,
56342         0x0e0ab7492881ad18L,0x7d424086c7adb0e9L,0x870c32c52842132fL,
56343         0x858477f158f9a09eL,0x422a9372ec025589L,0xbe428c5ca5098777L,
56344         0x45b7956457660058L,0x6c7fc631957f37cfL,0x8b7023ddd6316289L,
56345         0x47003bb65b1c12a6L },
56346       { 0xd99401c1c91c1c96L,0xaa5dcdf927a12970L,0x3ab92e17c3c29107L,
56347         0x26fce8f7a3fe4710L,0xb0d09d5e4ee998eeL,0xafa622048e3a41f8L,
56348         0xb1c012a5a26ca506L,0x2c6f734c99b57252L,0x1093d79f512f7fe1L,
56349         0x2f30906eacee19a6L,0x6bff8381056d1ea6L,0x61c75856eff35f21L,
56350         0x6e07e978c1ad2224L,0x2cca6ca16b20fde8L,0xab4d6d2d633fe81bL,
56351         0x73dff504b06a2ce6L } },
56352     /* 207 */
56353     { { 0x8b615805d8e20fb8L,0x7c6873e482b533f0L,0x5205f00156a854caL,
56354         0x87fec6accb369211L,0x1fa3c0ecc7f092b7L,0x5b36647ee845fe4cL,
56355         0xd4781e85f8b1f112L,0xc65268398b0f1a6fL,0xceeb8c6cdcb8eb92L,
56356         0x133f0ead8e5f6d52L,0x31883e23c8d934dcL,0x214ed5bd428ac45aL,
56357         0xf77ca492dbbfca85L,0xdf4113fe07e5ae13L,0x63e4a0d272ab05fbL,
56358         0x7544d0b77148f535L },
56359       { 0x4fe8d13480797aceL,0x216d6aa0af86d97eL,0xdbf0a688ef5a68fcL,
56360         0x18b26f459f9b2684L,0x52fefcfa8999d2fcL,0xd5af8d8262423955L,
56361         0x8f123469f63a3780L,0x2933454fdcd4feafL,0xba8018b7a73b5d09L,
56362         0x9af1f276e5552c18L,0xc5d4773dff26bb1cL,0x9ef4941006dd4f44L,
56363         0xad8f12f95f39ba49L,0x5767f6dcf66ca4f2L,0xba8773f17922f59aL,
56364         0x220081eac1e42d49L } },
56365     /* 208 */
56366     { { 0x3043d573ba37a0baL,0x05a431bcdd176df6L,0x03322cfcc42070f7L,
56367         0x5cabd30e67c2d109L,0x362c95decbf8bcfaL,0xd767d2777787b10bL,
56368         0x612c915e6ec05e64L,0x9e669631ce69c30eL,0x27c9dd8f682e2635L,
56369         0x79021f1295ffcc38L,0x06a8ee798a2adca2L,0x8e00e7844b5d500aL,
56370         0x87746fc78d80d6c5L,0x246053be915f10ccL,0x844e328b219f6fd8L,
56371         0x620541ac11bd3733L },
56372       { 0x0f7fd382509e5a29L,0x8748d7d0b432531eL,0x8f749354cd3883b9L,
56373         0xc6b8ac748bfbb17aL,0xa4616a6605f2d2c5L,0xb3d966251bcb1b83L,
56374         0xcf7531042fee265aL,0xc70d73fbdb225058L,0x1211d434f0c2d556L,
56375         0x862061d854b259b3L,0xffe4606dc42b3f7dL,0x4c5c8585e86a4949L,
56376         0x04ddcc8b160eedacL,0x1804ce67568e2420L,0x91f3855a42141656L,
56377         0x7f378198f932be97L } },
56378     /* 209 */
56379     { { 0x9a374bdadfa6639aL,0x0cbd48d402ab7391L,0x5c5ef23647031e2dL,
56380         0xb49ee2bcd0599d1fL,0xd285eb60e0d38443L,0xdbbea92f269392e8L,
56381         0x91455fbfb8bc538fL,0xae259ff1e469b768L,0xc1cecb1f41de5682L,
56382         0xc876f0719952d1aeL,0x1ce25181e7bf7446L,0xcb93ad86282ad2f1L,
56383         0x8fa3cd316ba4ef67L,0xfce68a04e507aa3eL,0xced74170a61bb608L,
56384         0x6de716b3f6ac10d0L },
56385       { 0xd4e58d04172d6dc5L,0xbed2cde66397c65cL,0x7ae77e180c9eb4e8L,
56386         0x5627546875fa2edbL,0x4b30324ea91e6738L,0x6023a856235c8b2eL,
56387         0x9df6d6c2a8f92887L,0xec2c185ff6f5e8b5L,0x7892e12b3ad5748aL,
56388         0x7aebb4f2d54aefbcL,0x14915448ee868821L,0xa26c5f71b1d9bd5bL,
56389         0xe5ccd1662ff00df7L,0xebc99f17b95b1deeL,0x909836163fe1f774L,
56390         0x51f90830bb3d25b0L } },
56391     /* 210 */
56392     { { 0x49376fa1f2922461L,0xdbb1b1c31650d0d1L,0x92b91c330dd8608dL,
56393         0x3e612c4b36b89906L,0xe1977b0bdf560052L,0xf8afff70636a2545L,
56394         0xcda7d27811723d8eL,0x0b0bc4bb81bde7baL,0x3cb080b2ed2a578eL,
56395         0x5bda0d0d171b2e02L,0xf6df38cf941bb9aeL,0x85dd81dbc14a65c5L,
56396         0x7f98c82dc19dd98eL,0xc613747f52206f93L,0x9e13a2c25f5bbe78L,
56397         0x5eed218e0aa34be7L },
56398       { 0xe156575401d4dc0bL,0xa1ae5f27f566bb07L,0xe985ebebb82225d5L,
56399         0x5f3ad21c1189ec6bL,0x17da518cecce4d9dL,0xc84a2d3ed6b65b59L,
56400         0x7f9881758ffa771cL,0x50d6ae122ac69a7aL,0xcb7f30b1c6e6846dL,
56401         0x8c023a605bd0bb13L,0x9a10fecdd73f2407L,0x8c5158cce5f0a996L,
56402         0xd26bf615bd8f5806L,0xaf32ea87915a46e1L,0xeaf74e810287d308L,
56403         0x8c14ba06a6264254L } },
56404     /* 211 */
56405     { { 0x0c877895b17ee201L,0xc05aa47188e57a77L,0x19c3e76397822456L,
56406         0x0be6f8c0c9c3ba1dL,0xfe85f4ffb4389ebeL,0x538bccce0ce7fbb6L,
56407         0x876eab2a65266c64L,0x5c9ac690cf9a3842L,0x9f5cf3b1ccc8f981L,
56408         0xfa17be6a9cf687deL,0xfcfc10fc83835c15L,0x086b0fdb150ef2ebL,
56409         0x9f97ecd9884a52e6L,0x416e6fa2b0cd1eb8L,0xe2bd15993ecc03baL,
56410         0x645c0a5deabb165eL },
56411       { 0xd94c420550aa7e31L,0xaec8df0c2f851da5L,0x996469093c726e6aL,
56412         0x72dbdc362619bf9aL,0x1b4260e0e253fbd5L,0x97c259fb8c709e06L,
56413         0xfabf7cbbcddaec5bL,0xb4d5e8b1e4b703e9L,0x1b06e56e0734efddL,
56414         0x02d4a4f91f55f8a5L,0x7f8608ba3f565c8dL,0x822f47d2816d1d94L,
56415         0x0cc361565ce7b136L,0xe46ee5ef31d04242L,0xb2a65f70683567f6L,
56416         0x27e9ff40d2fa6c91L } },
56417     /* 212 */
56418     { { 0x75251893d7e952e7L,0x15b30583c735bf18L,0x732b599296fe0491L,
56419         0x27451858806d2fcaL,0x71ab76a01b885ed9L,0xbdce9d976d9f55ecL,
56420         0x3da60b2048f2ba9cL,0x6977c086592b132bL,0xb6dca9cb099051d7L,
56421         0xd9c2ab23d188ae25L,0x9f469f3fe20aaf3dL,0xdbd1f7cf5aad74d0L,
56422         0x3d5efe5c22a9eb3bL,0x8c5edfa2137010c4L,0xada2217b57870260L,
56423         0x4feee5673dac9776L },
56424       { 0x30e18d52b5d3d780L,0x4dadb5d307166744L,0x320d386e5a742156L,
56425         0x5d8c290e8d6bbb86L,0x981a43232d263dd1L,0x33d0e7ca98984636L,
56426         0x5138784da519acb1L,0x832e3fabdddc81ffL,0xfc2785943199a43aL,
56427         0x5b4cabcf32743163L,0x9fa010bd74f94fa7L,0xc28a743d5694a627L,
56428         0xc1d2a888cb657a24L,0x7eef2503e86a25eaL,0xed11a5d304c561ffL,
56429         0x4fe818e79c9ede0eL } },
56430     /* 213 */
56431     { { 0x00252c9d7fc1c7ffL,0xa9bd419d9fa89ad1L,0xc93a124a4064e9ccL,
56432         0x384cbcb843942eccL,0x004c21fd8749695bL,0x69c81d9f421165bfL,
56433         0xe2325628dde01102L,0xec9374575a9b004dL,0xfb3346bff6dcfc21L,
56434         0xac4da64b4d372c7dL,0xcecb7ad3f20494e2L,0x562c41b5e867c150L,
56435         0x299395cec2b723d8L,0xc91adfc57ee53231L,0xe06f1161f10b6597L,
56436         0x81915529b74d3ffcL },
56437       { 0x8ec124316ed9d4eeL,0x3dffa154689aff01L,0x4aba349f2a89a3f4L,
56438         0x2db1e8e2d467efb2L,0x18dea354039102e2L,0x422ab853e52f082bL,
56439         0x7130a2c1ed36dd47L,0xca60e86d0295d1eeL,0xe6ac68087c7f5ad3L,
56440         0x0f83cecfde864658L,0x72e66c21461d1265L,0xfeef4150bd385099L,
56441         0x0f183f3aa6632289L,0x275454be792dc795L,0x2744c11b11367702L,
56442         0x7d06bcc7e8ea6ef3L } },
56443     /* 214 */
56444     { { 0x892859427090212fL,0x691b7d4c5521e844L,0x4c038422be2dbb92L,
56445         0x317721edbd81f880L,0xc136cbeeac89bc36L,0x4f71b60b7b8f004dL,
56446         0x269132d04e218ab8L,0xb0e2496ee6cc814dL,0x0b2ce31775fadc15L,
56447         0x82e3c08466d223c5L,0x9721caa64c612f8bL,0x59a751eba4b65355L,
56448         0x3433aad5c7d3d9d1L,0x1e61b9d2e80d4246L,0x149f655ffc673caaL,
56449         0x48b52b99d0f9cb92L },
56450       { 0xa3915399efdc05beL,0xde70db1813e095e9L,0x447862e9cddb3fdaL,
56451         0xa2b031621a009451L,0x4b27980c23920ea3L,0xac5394f1a23b8febL,
56452         0x163f72563e5616d4L,0xaa0ff93fb714219aL,0xd26f96d293d62474L,
56453         0xdd212ea87dcfe276L,0xab27bf2f47038d15L,0xe58c8325f418168eL,
56454         0xe3704222b32a989aL,0xa3694390bfc9f13bL,0xf16e26060d0684adL,
56455         0x17c0de879d8c76ecL } },
56456     /* 215 */
56457     { { 0xbca5f453dcc01958L,0x7d9459541ce88393L,0x5e6350a1561f5b6dL,
56458         0x291c3c867e2d36bcL,0xf6c7ed84a5ac3a6cL,0x7913c40bd98006cdL,
56459         0xf78bb0875671ec3bL,0x1c928f6eb43e89a9L,0xfdf28df3ae1ea1edL,
56460         0x62bba5b1b924b2b5L,0x491d27051a116e05L,0x08ec02b7167ed3e3L,
56461         0xe291cf7b5bc0b046L,0x30e501698c5d7f59L,0x0c7c350df5c799b7L,
56462         0x6862b9e20ac6e1d7L },
56463       { 0x56c6f4e79ffa1f64L,0xfed6a91aa1e24349L,0xe9a0ee0ccdb75232L,
56464         0xbfc90b370322d607L,0x29480ad2462fef87L,0xfc214969c2bfcf34L,
56465         0x6e5211e0a539e38fL,0x2a59ec2612a5149cL,0x195fe212d706b532L,
56466         0xf77fb108e99c8429L,0x74ceaea35dc80482L,0xa5a6030bbd92d298L,
56467         0xad42dca5aaea15eeL,0xd6ac3bc74987109cL,0xc64e1c40290af649L,
56468         0x5093fa2d51f8de6cL } },
56469     /* 216 */
56470     { { 0xc4cf32804c2d553bL,0xdc1abe223b966c29L,0x556a549c2296914aL,
56471         0xd8c9f8b5999976c9L,0xc22c57bd776e83f3L,0x4f2942ab7c85ec57L,
56472         0xef3407e56e2c61f5L,0xf005e8caf213db48L,0x470c853df32698c7L,
56473         0xe6f488d7cac0a54bL,0xb6bd6bed60b7501eL,0xf0103106714a4bd9L,
56474         0x5285bc3b6e098894L,0xec06741af5f92a00L,0x32f16426ef7ef24aL,
56475         0x12f9c44d6c77a438L },
56476       { 0x1951e96483313a1cL,0x98edd3da33c58b37L,0x4edbbf52c7ac4044L,
56477         0x866ca6f70dcb5ee8L,0xec0ae8f56dd422f8L,0x1077bc540661ec2eL,
56478         0x6d39913ad422523cL,0xd105e1e858e7cb3eL,0x47c9397fc979bb45L,
56479         0x3221d4a90997b592L,0x0ef628a3e8952fe7L,0xd08d58274e946241L,
56480         0x64cbed0f59780f40L,0x13d7c22708e110ecL,0xd186d8667679b1a3L,
56481         0x02f75e4e26ae1d18L } },
56482     /* 217 */
56483     { { 0x1b637ebf47f307d7L,0x6b644a6ad0141477L,0x82a33d652e05a80cL,
56484         0xc8f1a0f3fed07b31L,0xc09ee7f93696e597L,0xcdaa7ec3c7ffc01eL,
56485         0x549f88fef8f373b9L,0xc88d1961c3bb8989L,0xd92a4fe9dfcaa7b7L,
56486         0x12ff9ee23ae4ab20L,0xf5aea641f5ecb1a5L,0xe769237fe32fb47dL,
56487         0x96a5c42025d085c0L,0xdc91255826c755a2L,0x580b985f9bce9723L,
56488         0x72b1b56663961941L },
56489       { 0x9d708a08790e5558L,0x985360410689af80L,0xe85e7b8a42313b5fL,
56490         0xe6ba129255a49d1aL,0x5e76c4b0ac371b0bL,0x58504f39938e6e19L,
56491         0x8dd4142260ae9a21L,0xd8b04e9b968485ceL,0xf94c4ba5887efe43L,
56492         0x11268e67f11c5e73L,0x92623e28cf6b99c4L,0xf2d0aaa87a0a9662L,
56493         0xb266772a4ca02ed3L,0x68ee8e4e2d63b551L,0xcdebb2992e78b5b5L,
56494         0x5df19216e17225adL } },
56495     /* 218 */
56496     { { 0x20027e1e8df2e7e3L,0xb183cc68d8da07deL,0xce35ba694b4ae694L,
56497         0x896d97df3ca62e88L,0x3de4713b52efed2cL,0xd006c40e26bd084fL,
56498         0x1e9b71bbfc81923bL,0x9991c7b61aacc6b0L,0x650c93648f656840L,
56499         0x138561d187f47524L,0x610f2b11bffd3ca2L,0x96915faffa191418L,
56500         0x8f1236de955e5309L,0x613cbeeaa1872d79L,0x7f7b44ea66a2a48bL,
56501         0x452265c2e0a89c32L },
56502       { 0x4ad5ec7925430010L,0xcac786ffebd090c0L,0xa5f9f4ff20a9d3f5L,
56503         0xfcbf4112a3edc65fL,0x8824839c0cf3eb11L,0xb8dd6d4e8aa5b700L,
56504         0xe2271dfdb7568ab8L,0xe43ec373b744560eL,0x78eaf9261cf75296L,
56505         0x1809ae0e3fa96d9bL,0x0b312d2ddc25dfd5L,0x6b8f78b46bab7711L,
56506         0x069efc8db5ecf1e4L,0xc1952bae609fecaaL,0x43e302ed5f4dbde1L,
56507         0x14b02bf91e078555L } },
56508     /* 219 */
56509     { { 0x2c71c768b87e5b57L,0x0bcc78f7f531a557L,0x4ff93f8bf7597dc8L,
56510         0xb28e026d139e175fL,0x6b83b727cb94ca6cL,0x2eafe3b20079f7fcL,
56511         0x2aca54decf3bd170L,0x17c4133c6af0dc6cL,0xbea1e665ccf5e35eL,
56512         0xa6691a48345505c6L,0x2633abd0e6100b89L,0x966c6706c17d0388L,
56513         0x7aefffbe1a0cf90cL,0x4d847be7d0add64cL,0xd49bcdfbaea2aa46L,
56514         0x85e07e742cc7d0a5L },
56515       { 0x23aae0a60bc25bcaL,0x6e8e55f1e44f64ecL,0xe1e696d8b607b773L,
56516         0xaa90a746d3005909L,0x072b1ccd2cbc4990L,0x0d0fe6c6c68e2f5dL,
56517         0x920ec5f053e28ec9L,0x79b21fb4f0040cc1L,0xa7375bd3fcc4a2c7L,
56518         0xf5f5def9e1bac7ddL,0xdc315d7935c0f8d3L,0x7117c1702cacd318L,
56519         0x6f2823c4e926f71cL,0x38db58bbed02f39aL,0xe5b492317db69323L,
56520         0x0964039f8d49f430L } },
56521     /* 220 */
56522     { { 0x21774f1656999ebaL,0x3d8ee287b1de6305L,0xd81af726de0b2669L,
56523         0x374469393f8942a1L,0xbcf6b615ea03e13cL,0xd30c0c3594e273cfL,
56524         0x4fd33a56c6725c56L,0xa57534ada8be97a2L,0x799242a67c22a251L,
56525         0x4e51bdb59d0c5c49L,0xd7cd76ccc6a42768L,0x914097acd426bf59L,
56526         0x59404a2c66e9beb2L,0x4738fe985c96e3e9L,0xbcbb3e0eaad666d0L,
56527         0x626b0fd263bc5e56L },
56528       { 0x47217dbae1a1ec42L,0xaa6ae7dbab5acc50L,0xb7e1ab1e865331d1L,
56529         0xb84530703d30126fL,0x280649e0dee61851L,0x8806f4a3ea689544L,
56530         0x4bbe43adcb56f632L,0x036b9bdabcaff94fL,0x0d941e65bd0637beL,
56531         0x82179d44686f3abbL,0x1486912caad6afd6L,0x9a3b891eff7e1534L,
56532         0x88c426ceeb86fd96L,0xb56e6a81117928c3L,0x933e713596399e00L,
56533         0x09bbddd9a17b6ac1L } },
56534     /* 221 */
56535     { { 0x75e39c1de4fd3673L,0xf880d9d1a65c8e07L,0x4725c1dc7289c7feL,
56536         0x5b6735ee3529d200L,0xc1f8f2ed3c747af3L,0x5cf3998f912efdf5L,
56537         0xed72261849859c39L,0x23793a2f0e69795dL,0x8a6ab8d686b1d2a7L,
56538         0x00c815de22a882e4L,0xbe77d6fcf9db8d7eL,0x0886fb3202267547L,
56539         0xb62687d449c10edcL,0x9f1c3e177c83ed4cL,0xe6d5d7f05af366eaL,
56540         0x2eaa01b8d1efad24L },
56541       { 0x5e47fb701f357c74L,0x93085c4aa9e3b794L,0x4f0987336e85a905L,
56542         0xf53808ffbe0244c9L,0x91dddf93a3b5660dL,0x8b76377bf3b95ed6L,
56543         0x91b911b7bb3920d4L,0x7ccf08bf86a13cf3L,0x53ed8f97ea018e58L,
56544         0xb1ea434378c55194L,0x8e6adde9e0d2d5a6L,0xfc2b248f9b96259aL,
56545         0x96ebceaeeef17dddL,0xf694b443557f9c85L,0x48cd150f07d5bba8L,
56546         0x02d31de9b4c1986bL } },
56547     /* 222 */
56548     { { 0xa6bb9e1ede79499dL,0xf6ca8ff8fd0fc2adL,0xbec0f8e81a7d9356L,
56549         0xbc3d1c9fe8f06327L,0x805c72173b300bebL,0x00420a08413c181bL,
56550         0x9e9a167ef0ca9d01L,0x076c909d1aeeddd6L,0x64a1997f8e3a8a72L,
56551         0x3ce7f7a7a77b429eL,0xaac0fbf45c94d3e9L,0xf37694a7e6d48407L,
56552         0xf56679e2a91921e7L,0xf23fe0f3ee1dbbd6L,0xc7917566cbf9fa99L,
56553         0x965860f2e0f4d765L },
56554       { 0xe734702b7fa5f79cL,0x930bd4265af2d26dL,0x45bd8b986c73e0ceL,
56555         0x7dbe7bed4ee44a2dL,0xc129e024956c8a1aL,0x6fdc05ac77cdf80eL,
56556         0x70a6ba2b589ca59bL,0xfc484021999825afL,0x1d284b547a23f0b6L,
56557         0xb1da10a428a0a8afL,0xb1eb1b312b2af6d8L,0xf051443a33935ee3L,
56558         0x7a07eb268effa6ecL,0x16ee4086d662654cL,0x7a7bc5014549ee4cL,
56559         0x650810321fa98a52L } },
56560     /* 223 */
56561     { { 0x49f0e460b67ed9b2L,0x0cda0fd0c36d93d2L,0xbb5963e988c75e1cL,
56562         0x757bbe93614bc0c9L,0x9a9b88019a768605L,0xa8b7e2af48edc544L,
56563         0x9e77ed9eb51a5985L,0xdd025274ebbf024cL,0x598b62881545c636L,
56564         0x39bdaed04800dba0L,0x7fc2013981e2a23aL,0xdc66fd5c550cb4f2L,
56565         0xad27032fb52068c7L,0xc9a0bcae8169fa15L,0x60606f213a7ca8a2L,
56566         0x982950469862652fL },
56567       { 0x3e3746002e11c128L,0x80dfae5d0e6dca7eL,0xe44016e2d9552264L,
56568         0xf65f88f2880b7143L,0xca3d28d4526b881cL,0xf9c59dd1dfb86afeL,
56569         0x548860c24c74f958L,0xd06ea43c9cb69f4fL,0x5343c9ae7334ececL,
56570         0x5cc2ccd635329713L,0xa95ff4035f3a6c0cL,0x2e01a1ccb372653bL,
56571         0x31510fdfa250523dL,0xeee538e2a6227eb2L,0xeadfc8a0ca23cd10L,
56572         0x4b7e6e1b3e78f54bL } },
56573     /* 224 */
56574     { { 0x79c9076fdb5f928bL,0xe6250bb6b7347cecL,0x54b67798ac00ec41L,
56575         0x900d20ba9d9619c7L,0xed42c0d059e4343fL,0x3df39e85451935d7L,
56576         0x2639118264f701ceL,0xce8f2554e1f87aacL,0xfddd678965f91aaaL,
56577         0x96cd163fa324539fL,0x5c815f2c4bace995L,0xd78c8c2aa94f9ea5L,
56578         0x7ab2aff4ef24e455L,0xf0ed64091cddc26aL,0x954a420b00ca2822L,
56579         0x0611c4c5d3297658L },
56580       { 0xf192001ca9e81829L,0xded3332008a282ccL,0x0bfd7de18f9ded9bL,
56581         0x6793ac0db7889003L,0xbb00d91d3577a5ddL,0xe17a23a7802d3c2bL,
56582         0xff95f88cfb549014L,0x7cd1bf4bc71b6e07L,0x2e3b24a023588c8bL,
56583         0x9b5335b8a4112076L,0x2481c05ec4056d30L,0x55c7410ce916a1b5L,
56584         0xbbe03271850179f4L,0x15e6c177b3cd1208L,0x509a24c090cbfe50L,
56585         0x820795291c108566L } },
56586     /* 225 */
56587     { { 0x5d2d3cff1c7d353eL,0xd5e7eccd7de0ce3bL,0xb4b1075f6ca87635L,
56588         0xda8404e025f9ad3eL,0x6b963e89205cb5aeL,0x9e5ee0d809f221a1L,
56589         0xd64c85d9ea41aca4L,0x6a46c4e934442a34L,0xac6ff97e3cf655a4L,
56590         0x76565c1ee5417d7cL,0x681009a9eebf9c4cL,0x95b61d3988da6388L,
56591         0x6402b46af6b472c6L,0x1fde51650b7f1171L,0x94f8f273be0c05e3L,
56592         0x7487b036a88344a7L },
56593       { 0xa860e5759c3e2370L,0x19d58193f8048719L,0x3a0dbf3ca6e2f9aaL,
56594         0xb6c7e9596144719bL,0xa9049c74deffec21L,0x8ba064b23f50cebfL,
56595         0xb12822c049a1de15L,0xb654b7d9b1d527f2L,0xc470859d0ffd0430L,
56596         0x37c74a674f05446bL,0xe553251ba3add995L,0x4a3ed6cbe33533b5L,
56597         0x2f2f44d027e419ceL,0x2d84ee82a5d1b979L,0xcc76b123db6fa69fL,
56598         0x834f85c521fa3bddL } },
56599     /* 226 */
56600     { { 0x329347c12ce9b31aL,0x1d88522afe3fb3b7L,0x4bcefb4d52ff90fdL,
56601         0x53b173862b1a081dL,0x538c11ba2a411f08L,0x7895b93c141b603aL,
56602         0x2993b9aab10bd741L,0xccbbd04609912986L,0x669fafb0eea0aba5L,
56603         0xd484462235661897L,0x4a63b89c367ffa54L,0xcbad5d1d1c3478daL,
56604         0xc5339227aa6034f7L,0x0e6d705fe61b1391L,0xdd14b660f74ff515L,
56605         0x639d8b0a5332b54cL },
56606       { 0xfa423162162217cdL,0x2e0e4a2a811c28e6L,0x68d9ce1821766dc0L,
56607         0x51263739046a06efL,0x44eea231dde92101L,0x0607c8f2114298d3L,
56608         0x27f272ba63d957e9L,0xe7ce80cca5e8cae1L,0x5816ebe224f7a63fL,
56609         0x4dece5a789673e34L,0x13756a22536babd4L,0x644d61aee3bf77afL,
56610         0x60b2bf6e2bcf98bcL,0x3b0b59f329fa962cL,0xb0769a1aabb50023L,
56611         0x409031360c75402cL } },
56612     /* 227 */
56613     { { 0x84d2873a1670433fL,0xc9394df625493dfcL,0xeb05a19a80fcf89eL,
56614         0xe39e4310db297616L,0x50742dc9d9e63046L,0xf31ad8c81de9ca9eL,
56615         0x86aabf94fb7b1d0dL,0x36cda27a1b3c82d1L,0xfb1a2ef439702d84L,
56616         0x280bfddc46081299L,0xe4b2b48dd2396238L,0x2db2c2f37b3c9353L,
56617         0xd5b5b31712fb8a69L,0xf9b87a3b08180474L,0xd85909861e952578L,
56618         0x80668eedf37a2bc8L },
56619       { 0xe2edcd35b39a0249L,0xaf230cd4b2f8aeaeL,0x295b15e47223df05L,
56620         0xbb66982ae0e937f4L,0x019d2b728cbc9162L,0x5c512ae9cf49dca1L,
56621         0x11b491a7630f07b4L,0x48d4f34ca03874e9L,0xc1fd0ea644cb7433L,
56622         0x13f79ae1f95b30c3L,0x40362d4ded8b60acL,0x9e8314ff61ead81cL,
56623         0xed600dd4498c3d28L,0x5fcb1c19c2521702L,0x592329fc3a9c1f33L,
56624         0x046775481bde6ce9L } },
56625     /* 228 */
56626     { { 0xee3de56e39233c96L,0x868c409c80737eafL,0xacae11bd201abc68L,
56627         0x0f2cea9b2b486205L,0xe32387e16f19056cL,0xea75365aa5dc2a41L,
56628         0x76c29acc12b4be86L,0xa01fcab78d63294dL,0x81dbe88b0cab9f24L,
56629         0x76646e5bf414c054L,0xfe111893cb96b7aaL,0xb649f5b17664e097L,
56630         0xa196422e53fcf5a9L,0x5978c9bd0b7ff634L,0xb5feb38e3c229895L,
56631         0x038a49fb0833c456L },
56632       { 0x35e3818c13e93257L,0x14cebc9da612741bL,0x4f6e92497caac06bL,
56633         0x82278e333daa1116L,0xe7cc565e4de2034aL,0xbb7dc95f0a1ba630L,
56634         0x81dd9f2366956fbdL,0xc63e6319bb132dd6L,0x6e22b022fc241337L,
56635         0x238481937e8beb1cL,0x83b1994dd8c938acL,0xb54cfacaa6bb5644L,
56636         0x1a7cd44e06f91807L,0x1dd439bba8f8d9f3L,0x660c2a787f74a8e6L,
56637         0x4bb76e22121b5660L } },
56638     /* 229 */
56639     { { 0x7a151e8ae6354817L,0x33d494eaf038b438L,0x4c86c68885958986L,
56640         0x721538271dcbac12L,0xf487af8cc0edad06L,0xad33051fe500e5d6L,
56641         0x0a711b1bd6e47f55L,0xa68709a78c746ad5L,0x27f172626402f35eL,
56642         0xc6d08efafb30c130L,0x9ef1c041c06c7497L,0xd0c74ecedcc3e2daL,
56643         0x30c5f96e092e1073L,0x0f1393cf2aa12b74L,0x245840162107eb02L,
56644         0x8843d25f7b76f98bL },
56645       { 0x4e1501dcedb2a83eL,0xbcfe8fb02bb8d724L,0x09020659d925df62L,
56646         0x3c715dcf42ab6fc3L,0x73c05055a0f09dfdL,0x126745d8e3590aeaL,
56647         0x5382f4d876ff749eL,0xfc69feefa920c663L,0xde1602119fd711caL,
56648         0x4219c3bd9075c4d5L,0x3800cbd13ded6bf2L,0x8c7ea0eb6263a116L,
56649         0x35bd79587d264c37L,0x56e22e457159c98cL,0x71bf2a2dfa7373b5L,
56650         0x0503f9398935c949L } },
56651     /* 230 */
56652     { { 0x65addc6671dad4f6L,0x238e4889024bea1bL,0xfb76c8e2f605d3ddL,
56653         0x13d5f5deb0d96b89L,0xe0b5ba356601b2cbL,0xe37d491d83e3d254L,
56654         0xe8860423240c8ea7L,0x374182f3e91c99baL,0x26c2caf9a87ad919L,
56655         0x4b13040af574f295L,0x5b9bced1944000a3L,0x4ccc57be06df42e7L,
56656         0x22e8ec504bd1089dL,0x0c53177adddbb500L,0x690d31d29ecfeadbL,
56657         0x735778fe176668f9L },
56658       { 0x0f86ee3e843c1137L,0x3c1c42fa3f0b73cdL,0x0e75679d8ab20e3aL,
56659         0x6f95f1f416242faeL,0x7b88e11c39b092e4L,0x1629403e4c236ac0L,
56660         0x66105f412dac02e6L,0x74dc28a7862e0632L,0x2118ffb2f3b23c8dL,
56661         0x1182417c0745ffbfL,0x49b55a044c05711eL,0x2c665b74cefbe4deL,
56662         0x1cc4c01d97bf7107L,0xb2ca06dac54f0676L,0xfc599daa7450d0f8L,
56663         0x52e637a61a3182a1L } },
56664     /* 231 */
56665     { { 0x481700f16bebc6dbL,0x4a6b45dbf9503d92L,0xc715cd3c5d153919L,
56666         0x942a1c05e5ad2abcL,0x36a82433ab7b466fL,0xba413bedba13918bL,
56667         0x698a562490f4e6ceL,0xbb720da6f3f1f3caL,0x2116d41d63471ab3L,
56668         0xe00d2227303d3609L,0x7fd4cc00463ba69eL,0xac609e4d62845fd1L,
56669         0x63603b2c80adc9c7L,0xbf16fc9a45fafbcaL,0x41007f7fc4bc94abL,
56670         0x7c916b4fa74b1698L },
56671       { 0xc1026f9178bac2d4L,0x8a2e80982601a875L,0xad2f276e0073d640L,
56672         0x443610c4fcc1fb88L,0x5727b822ca6b291fL,0x0645532c88ec60fcL,
56673         0x51e48899ed9ad48bL,0x841b48b5f543f103L,0xa6ccb1bed591ceebL,
56674         0xfc4adf0f9dcf5a8bL,0x3a7ca020b347ddb4L,0xaa1accc2cb44c521L,
56675         0x773b68280527c0c4L,0xaa374c107023cf50L,0x733d10006b74c926L,
56676         0x1ff3916f77a8d07cL } },
56677     /* 232 */
56678     { { 0xaa218fe4f997939dL,0x3d4dfbbb791583b3L,0xb3a7b5da87f7560bL,
56679         0xa9c028015da92c98L,0xe1eb4aad46666f4aL,0x2eb17a5114ce9dd7L,
56680         0xf46a66a4ef8f3076L,0x900b45c6810e546eL,0xf7af22584baf04ddL,
56681         0x3cc1c8725c84d42fL,0x3093f2258e4c83deL,0x62fade41170d88b2L,
56682         0xe19612e4ac076e44L,0xf48d734632dd141bL,0xc1b1f759925e34daL,
56683         0x19ed1a56072b90c9L },
56684       { 0x9cf7fcde6c735473L,0xaab88e676003bc3eL,0x12187cbcfb199bb8L,
56685         0xbb7304419accccbdL,0x214aff3cb0f65459L,0x6aec81a36f926282L,
56686         0xaa82cb329f9d20b8L,0x82f3f90f5773cc90L,0x4af60e6bf62257e1L,
56687         0xf18b44bfbd4762dfL,0x3948b129db970753L,0xc6e920e97c22c18eL,
56688         0x393d620857be97adL,0xe8d7382c46b637f9L,0xf6625ccbf1fed1d5L,
56689         0x6f31e0f968681599L } },
56690     /* 233 */
56691     { { 0xc45afe5582b8f204L,0xac0441b6d358b54aL,0x7213e7bfacd5f5edL,
56692         0x1914c70b139bcd93L,0x714b458196dbcbb0L,0xe9297d351ed35d21L,
56693         0x8f6408376a3e1f20L,0x150a8a9d2f3cd705L,0xfb36e801dcdd9f6dL,
56694         0x5a54eb655cf56d82L,0x7610500c92aa5a21L,0xd10d0ae23b089f03L,
56695         0x491b2079c42b66e8L,0x4af1ae3d0eee8d48L,0x137e4c2841556f45L,
56696         0x875e330863d8a7e6L },
56697       { 0xdc80fddcaf6c0accL,0xd5ad1e66bb1e7c08L,0xdc717ae1828585adL,
56698         0xbdc54340275c7da6L,0xf4b4c852d26b9e15L,0x5f0a1fbf6a05fa50L,
56699         0xc6f81e47817bcb32L,0x2cbd432870ff2e1dL,0x8a24901667c7f7fcL,
56700         0xd045acb7b585a6c4L,0x2e972ad44666c057L,0xc74d87cfe6d7d63dL,
56701         0xf7067d870e274144L,0xb2ca157a8b2584aeL,0x495c5bfb75f0fdebL,
56702         0x5abb0581f386e009L } },
56703     /* 234 */
56704     { { 0x8be62d2bf0c97f57L,0x0fe04871962f28c7L,0xc548a46747b50abbL,
56705         0xf6b26e0344fa09edL,0xfd44c6e3ab05a96eL,0xedb0032c70e6ae82L,
56706         0x28bd402bd7e4899dL,0x43f2e9639b7c11c2L,0x0ec3fc0ece913716L,
56707         0x769b8bc902fd0f8cL,0x9d9cb3aa7cabc3acL,0xe88a889206924cc9L,
56708         0xa51461aa42609014L,0xc7f4aa8b962e79e0L,0x4ef0210a8b1b3e80L,
56709         0x705446801bfee4bcL },
56710       { 0xfab3d713121901c1L,0xe90a2627fead54aaL,0x64f6d285bc08ba23L,
56711         0x8d99301536ec227eL,0x99a16ab906c191abL,0x86b1cf5bf649ce2cL,
56712         0x5920675966be3a80L,0x18836279ccba2cf0L,0x2c157b87eff53486L,
56713         0xbfac98964b223af2L,0xcd0fd4f00aae7a57L,0xdaddb94063218a80L,
56714         0x3844bb79df88f14eL,0xc1b3e3d4b71ed9fdL,0x6c634a13d6205036L,
56715         0x6f56aecfb8680a6bL } },
56716     /* 235 */
56717     { { 0xb01dc803d9205c5dL,0x68955f7d67123929L,0x3debbffd9d9b6565L,
56718         0xb844395ed3b1acfeL,0x04328b216094eeffL,0x6631ffa822991febL,
56719         0x0dde66e6190dd075L,0x75b03c55e8577c05L,0x6c91ce5f91722407L,
56720         0x9a288a408ebb3a3fL,0x1d376f8a058a1396L,0xf3a594579a6e0676L,
56721         0x103029c57b71d288L,0x0843f428b44c30c0L,0xd8e6aff8730e0b9cL,
56722         0x7b6be8114ed644adL },
56723       { 0x3ec38e4a3d3aa54eL,0x10233943d83d509aL,0xf84aa621243955e2L,
56724         0x29104717f51d3d44L,0x62d2442c7eca4e37L,0x8c5a523d85fa55deL,
56725         0xc6f5ccda851da1b5L,0x044bcaa820001468L,0xf7501e68e01702e0L,
56726         0xf0819359e6a0acecL,0x33dda6adac0ef0b2L,0x97aeedc8fd964f01L,
56727         0x48dacd0e530b90d8L,0x4c5fad6fb84122ebL,0x2284ec1ed700a1deL,
56728         0x86f9a835dbca5474L } },
56729     /* 236 */
56730     { { 0x0e1d9055450cc69fL,0x50eb14bcc9edf98fL,0x1bb94e77ee7eba01L,
56731         0x5f7a6737998f8e53L,0x588384e31b16eef0L,0xbb928723d85c5e15L,
56732         0xfe51e345cbd952aaL,0xc5d0ee287e241674L,0xfdc146ef100182f0L,
56733         0x0f739e92e7f5be2cL,0x501ab3afb656bd3eL,0xb1552dde5168e289L,
56734         0x940dfe31b8ee104aL,0x42923603c4304475L,0x9306f114c460a913L,
56735         0x5bfa9faf03b51f86L },
56736       { 0x2a23f52c107b258eL,0x989e82bbd66341dcL,0x54a3ced8823cff1aL,
56737         0xf45b7794719b491fL,0x898c22182433dfb8L,0x0f9dd91cc49250eeL,
56738         0x50c2a2ae4fa17655L,0xf7aa1ce42c327f45L,0x13a15ad6583b1e41L,
56739         0x9aa0d5a5a1bfad9eL,0x9b1caa288e1fbdcdL,0xaf9283b6915f7f87L,
56740         0xc10e4e0c87e81a1eL,0x04fdca561080d296L,0x6acc961612755bd8L,
56741         0x1b1266aa828feedaL } },
56742     /* 237 */
56743     { { 0x4ebc0a00774ee49cL,0x776f6852cb6237d7L,0xfc0544ac5df938a3L,
56744         0xc3388ec8b6fbfbbdL,0x84ac8bcd745f2eaeL,0xa9c56609b1ece937L,
56745         0x656fb6ac7de8fa13L,0x5f8ded74a532b871L,0xab0d428baa889f09L,
56746         0x43b27f2810b7aec2L,0x26426e1efeecb34cL,0x44431b6b9e89c2dbL,
56747         0xaac4bc5d39211090L,0x926f73684fd81058L,0x452fa691471ef60eL,
56748         0x33517fdb218d7a23L },
56749       { 0xa9c33f46593c4a36L,0xac69d71836b1a9eeL,0x55a20c1d4277beecL,
56750         0x3e8ca24e7e4f179cL,0x57373369d46d88a2L,0x71ceb1cc730702f8L,
56751         0x8b184d9735eed574L,0x7f4517a20704cec2L,0x7f129d18d7062a53L,
56752         0x07a4571bb1d77e1cL,0x774ac3098350d8b2L,0x27b2919f61fab8efL,
56753         0xa7c4cc13b5dd801bL,0xe7e6255b1434591fL,0x349937b85a3592b3L,
56754         0x31fac63d30c77549L } },
56755     /* 238 */
56756     { { 0x2ee8cf1b04913fb6L,0x7e4013501769a6b3L,0x790ebb71783e61f0L,
56757         0x1e5107f9e27f2ffeL,0x124ba67fedaf89bfL,0x189200e1e58de68dL,
56758         0x962732a36df5abeeL,0x72cc37cfacbeb4aaL,0xb0c5fa96e93c5a76L,
56759         0x4c2a317cde63393bL,0x97f65e67830b2d6cL,0x4afc35041be5b96aL,
56760         0x0bf40a60730ce66dL,0x96a1ba799340d84fL,0x3ee1825407626b08L,
56761         0x01db35db7ab0cbf5L },
56762       { 0x6e0fbc2dac0efee2L,0x8406ebcdd71dbb45L,0xe72bde3e19b69abeL,
56763         0x49cb7e6137e01822L,0xcbb8c01c11458b4cL,0x420b4847687c5d63L,
56764         0x1847dfa1454c6776L,0xbede911dd1839d18L,0x1b9dc9c9278df046L,
56765         0x294bd62b881a336cL,0x7f09687993e77adcL,0x7ac9066543ce3ba7L,
56766         0x148695fd7764eefcL,0xe0c20f0b9ac465cfL,0x636e8d28a6e2cdb1L,
56767         0x7b6ba98cd755341dL } },
56768     /* 239 */
56769     { { 0xcb1d9e03c1881ab4L,0x19c25d55b3168c88L,0xa82d3d47282364ceL,
56770         0x95994390f161aa24L,0x7838bc00e1ebb2c9L,0x8fd5dfccbdec7a75L,
56771         0x4dd203c24ff7220aL,0x5ec173b30efeff48L,0x99f1d2b316428b35L,
56772         0xc06bd9e5056e813fL,0x929172bac0b319f1L,0x6ae0e384fd223b15L,
56773         0xbd01059e98d091edL,0x6b3168e4a654648eL,0x2211447f3375e798L,
56774         0x47e8101971eb4508L },
56775       { 0x7045d45abc8c290dL,0xa33d1355810fb33aL,0x2baf009246fbbf2fL,
56776         0xacff3f1b385c7cd9L,0xc5b150ece161985cL,0xc6ee0a7f2a888748L,
56777         0x9d888c8e5e88dcc8L,0x4dd735f2ccb86443L,0xcc1e13b73c40f6f2L,
56778         0xfc3a25fff3fed691L,0x4cb43b17257ee5c7L,0xaa654f93f32db135L,
56779         0x44f58d0a02dff2d3L,0x78e3f188a8ca6394L,0x39646ccef3e86697L,
56780         0x785b1902e0dce87bL } },
56781     /* 240 */
56782     { { 0xfcce2361a92f9a20L,0xb7bdca879d64540eL,0xd4739a851d00d7c5L,
56783         0x067ac8dc2e97c926L,0x2aea3ffe78da6a8bL,0x6828bf5463c51b69L,
56784         0x76f1c4797155141aL,0xf4bcbef63977d810L,0x75bc4949541bce7aL,
56785         0xe01f4066d17041a5L,0xd282d5bd87755eafL,0x6e2107dd59e7ae80L,
56786         0xaa56e166382ab36fL,0x65ee8ef6b9d1d634L,0x99a2160ace4ed844L,
56787         0x6557c367b7712c27L },
56788       { 0x561b0268d75b6e52L,0xb0813640118d0e89L,0xcff533306a2eb1aeL,
56789         0x4e4622266d090894L,0xbb351227b5fc1d48L,0x9365ea0757a3062dL,
56790         0x4caca37bd66e2dc5L,0x220d7d23b9095887L,0x9c0fd3938c4473bfL,
56791         0xadff370a6787da4fL,0xef0aebccd057f4b8L,0x205e744c1173f33aL,
56792         0xb8d1f0a5925a26b4L,0xa9364f49722fbbfdL,0xc891ae778227d284L,
56793         0x15c40d04a0e08ab4L } },
56794     /* 241 */
56795     { { 0x9baf169a2a0e18d1L,0x9971c0174c0327c2L,0xd81a323f7bc262ceL,
56796         0x2099db8d818ff379L,0x663f663d4cd3c330L,0xef5325c3011a0553L,
56797         0x9cd70bdcf980a470L,0xe64452d11c9ed070L,0xafbf43f4ac676e13L,
56798         0x97bec0a6ae85c2a5L,0x2faae550470490c4L,0x0ab97a87491e6ba9L,
56799         0x4055f537aafa9914L,0xfc95adbb36726557L,0x646343b9d119d6bfL,
56800         0x788e94a09d341e37L },
56801       { 0x053a6fe59c53461aL,0x75ec897e08e3b6edL,0xa8f5d2f30768d939L,
56802         0x9bd6bff6cc213d4fL,0x590c7b4105b0147cL,0x20a3628b7c7b8169L,
56803         0xc66a086e5bce78e9L,0x3dd4d2824dec1d8fL,0x890acf44c19dcce9L,
56804         0x6632d875d8435a7eL,0x590167c1ea6381b2L,0xb2259797f0dcc128L,
56805         0x91a612b446f8d463L,0x42185d78c15efa39L,0xdf55ec37119f6788L,
56806         0x91b19cc6780dea93L } },
56807     /* 242 */
56808     { { 0xebf2709dcb5d8b80L,0x03b96182fc35660eL,0xb873d991055ef969L,
56809         0xd1ea4b4de47c4342L,0xcc4b9244d54f8867L,0x93b1a2cafd8d77efL,
56810         0x068d24e7e8c1f563L,0x5f5fabb649973056L,0x83248c500542374fL,
56811         0xc36de2b53f38e913L,0xed07e8eb7bb680beL,0x964813d7d8f313b5L,
56812         0x7bb6a069afd2d392L,0xc06d848e0848a31aL,0x6867fb2fe4f0c325L,
56813         0x3c2ba834067343afL },
56814       { 0xab62d7759d3ad63bL,0x3f9cab9759e0eb1fL,0x70332a633885e117L,
56815         0xf22cafcee20b2f9eL,0xb529ba7e49eca947L,0x249542166228d88dL,
56816         0x80ea23ec39239561L,0x1b8907e7d4370644L,0x4b7fa455563e4e44L,
56817         0xcca9829eb2a4b0faL,0xd0a720a448060792L,0x8ccdda0c246991ceL,
56818         0x37a2325b348d086bL,0x566ed509f60aee13L,0x3d30e091147f253fL,
56819         0x1fa627a5c1073bd8L } },
56820     /* 243 */
56821     { { 0xa11222a242478fd4L,0xacf4c6f1670b2000L,0xf71bb04f8359c6deL,
56822         0x618e28297b93cdbcL,0x96e1bae3230db60bL,0xf17fd3b4965b3b29L,
56823         0xa58639c6bc7055ddL,0xc3ea92ed4b817d7fL,0x9082b2a6d23b08a4L,
56824         0x8471228adc17010eL,0x753b9e4620e89d97L,0xcf7e4f9703ff77c9L,
56825         0x6c3f82452bbe60e5L,0x9e432cbcb80e017dL,0x150a5acdc0a45edbL,
56826         0x67b8bd054798743eL },
56827       { 0xe66079b4f4797cf7L,0xe31c998ad03fde02L,0x5aa3763a54caaef1L,
56828         0x64d9a1fef7649711L,0x7ce0dc73af29b1a7L,0x6661b083fb66ca93L,
56829         0xbf4d74fe32fb6a78L,0x25f6ef09df00a561L,0x2bc4383f831d1159L,
56830         0x6d5cc10c536bde37L,0xd4945f9f882cc65bL,0x81f48f13451a99b8L,
56831         0x140161cd6bac11a4L,0x9d94d4edf18a4a0aL,0x65363165a467a824L,
56832         0x74297aa9a4c9aedfL } },
56833     /* 244 */
56834     { { 0xc49758a4e21124baL,0x99bd8198a87ffbd2L,0x45fbcdd13d6638a8L,
56835         0x94645ff815f7bf76L,0x5fa6736fc4e6d57eL,0x1eae647592e61db9L,
56836         0x79575c0ccbdf944aL,0xa3d1304725b31d74L,0x7881df224cab5ae6L,
56837         0x8dbfd2991a2887f2L,0x23d07590a26ac459L,0x2e589852d8661d4aL,
56838         0x37b5c13b8a0140f7L,0x0f94199e3fb3782aL,0x722aa0591bc14e90L,
56839         0x89aab7bad55bbb12L },
56840       { 0x8b345a96d656bdc7L,0x43bdc8afe176cd3bL,0xd69518b632d64c43L,
56841         0xfcf364a779b82b41L,0x907b344effb0cf82L,0xf3d0c83c5101287bL,
56842         0xe9f26a5934cd90efL,0xe5f5aaf207082b5cL,0x4eb72c75ece7c165L,
56843         0xe9590a81be986cd6L,0xfeef498fff1536aaL,0x04560243a8263d5eL,
56844         0x940be14f54ae872bL,0xbee7bcc9e3207686L,0xd496a27dc1bc4d7aL,
56845         0x002dc2975940ab46L } },
56846     /* 245 */
56847     { { 0xee533937b69d60c3L,0x260be552fe972755L,0xb11fb78dc0c725a6L,
56848         0x6982c27ecab2e7c2L,0x4bceedd9ee2322cbL,0x952b19ed122704f7L,
56849         0x2df4c285854a6165L,0xba40b5bf7b192485L,0xfcbca9500119f52aL,
56850         0x7467d1cbe5add86fL,0x9bf536fbd9d0f2c1L,0x3c296e34b8d4ebc9L,
56851         0x0495f8f405a81317L,0x8c59e8d673335f76L,0x0b53d324e0542122L,
56852         0x4d5645353c3bda73L },
56853       { 0x7322f8007e5c0877L,0x481b43e60ca9a764L,0x231f4f4ba2c12716L,
56854         0x09596857ed3136c2L,0xae82632238db30deL,0x652fad4099908ebcL,
56855         0x0b8d1814af0d231eL,0x2680c54b09cbc349L,0xfd4562f34bf3bf8eL,
56856         0x2985090b092b595fL,0xe6f39ca45e15fc34L,0x70175191bc378168L,
56857         0x906944b3845a4a87L,0xacc6d74a82a1541aL,0xadc9bab3b155c8b4L,
56858         0x1f2f89ce77306c62L } },
56859     /* 246 */
56860     { { 0x8253ef419affefdfL,0x05d7ece54cf9256bL,0x377002f2b444e483L,
56861         0xb189755fcba5471fL,0xc88483cbd5cbe015L,0x254f7c696a0b8429L,
56862         0x18850bd461f3f61dL,0x7ba210890a247157L,0x35abbc2ed92eeb0dL,
56863         0xfb56cabe965dec89L,0x9da23724bc55684aL,0xd8ba396f6a7a7492L,
56864         0xfcb90db72ef4ba46L,0xdd234fe09909b27aL,0xbdf3c16476f4366eL,
56865         0x09c8097f17e50d47L },
56866       { 0x6a04b14060050c07L,0xc29e831843a8e37eL,0xcb9429b2bb55e41fL,
56867         0xed2fea5a2ce60e3aL,0xdc7b1ff3db9d82f4L,0x48ebecc3687d37faL,
56868         0x79153e32ecb07539L,0x6a60054f57075692L,0x3871cd0c800759baL,
56869         0x17a7386f30922df1L,0x4e9fc59e83357b7cL,0x1d26b3a939415186L,
56870         0x912a0222d34db889L,0x6672fcf459fcdb71L,0x5a3f268d44ff3036L,
56871         0x6f113ed36911e16cL } },
56872     /* 247 */
56873     { { 0x52a9df591836f1c9L,0xfa6519f54232307dL,0x8406c7015ded285aL,
56874         0x0a1545caaf627f75L,0xae1111eeace0417dL,0xfb28bdf6a6113443L,
56875         0xde9ef0ab52dbcbcbL,0xe9dc181b7813e658L,0x0b1dabdb99127225L,
56876         0x5f0598e322814c59L,0x5c3b966ed934ee7eL,0x4eb84edab99ba4bfL,
56877         0xb2919a343c1b55e7L,0xa9addb4994aa860fL,0x1b7220dff6811ff6L,
56878         0x6636a23bd1a183e2L },
56879       { 0xdf5d5a2d20587283L,0x0b3822c9ef07fc5dL,0x1786bd550ef6de38L,
56880         0x163cf90725d1671dL,0x74bf971f1cdb1defL,0x5749e8300842fc4aL,
56881         0x0e2edbc727f854f7L,0xbb27bbdabce24acbL,0xc1b19cec05bed08dL,
56882         0xaada123ef7c904bcL,0x02429f1bd89982dbL,0x49d3616e65f6e632L,
56883         0xa3789fa8ee59fd32L,0x160ba3bafe9f29f5L,0x0f2d3b61af5378a0L,
56884         0x7aeecc7673c2a6f8L } },
56885     /* 248 */
56886     { { 0xf3a4757cdc43b0dbL,0x3d8a4e8598119cadL,0xf8095bf64616c156L,
56887         0x3e2a07bc4f533e97L,0xa982436739cfc5adL,0x18a6ba3acd68052cL,
56888         0xbd60e5908a1cec66L,0xae3841a502b1b695L,0x986dff12190a195bL,
56889         0x2df2beacad31fd9bL,0x7d893224cc728f7bL,0xc38ea7380cf0a992L,
56890         0xa8439a80586a44eaL,0xede7f7f01615f03cL,0x4824990827a1f885L,
56891         0x28ec4006b78a7645L },
56892       { 0xe1820c2ea2fe0009L,0xe11ba5d2f13874e9L,0x97522454c524db52L,
56893         0x4d4774267fede529L,0x01d3419a9b2500d4L,0xce08a4921869244bL,
56894         0xba169023dd1be1b9L,0x242c3e5432a301e0L,0x9b56f7ba70906788L,
56895         0xf0ad2a09c74a8cc4L,0x99cd1841d76f9439L,0xeddafe0b621fb60eL,
56896         0x056bee54bc397634L,0x4653f860ff7f0a84L,0x6bd4876f2011c0afL,
56897         0x134f4cc70c9525c3L } },
56898     /* 249 */
56899     { { 0x9621a3ece938dff4L,0x7d101a7b486a79a3L,0xf2c4ef97de950537L,
56900         0xf3184099e65d87dbL,0xb89c7ffb373b8cfaL,0x68baa505e842916eL,
56901         0xa790fd094ebea764L,0x679df6d4e592892bL,0x2023331cfcfed741L,
56902         0x0bf4efd29880ff21L,0x7ca78dddd0344501L,0x2cb09ecb342858c8L,
56903         0x9e5eb6dc2575487aL,0x50675a15ebcb0491L,0x09d2e74f7381d471L,
56904         0x6ea3782983d3d6f4L },
56905       { 0xc65c094b4e5cc40aL,0x7a2e3f6a1af37dfbL,0xef677e9df9026e44L,
56906         0xb7878c9593880f53L,0x4aa30b077f644aa9L,0xa0c516832f208c3cL,
56907         0x7c0277ae658d663bL,0xef0b3c38ae1d9130L,0x302f37a7695c3ea4L,
56908         0xe004c1c56a0c5e0dL,0x9fd495c420cbcf9fL,0x706d5b9d568a0e7cL,
56909         0x8b225dff59286454L,0x527d44658d9a709cL,0x47c558da87c08d68L,
56910         0x606ee6e6bb4ef07dL } },
56911     /* 250 */
56912     { { 0x02d99fc757c621f6L,0x292e40c17fe83d48L,0x1bdfc7a19ef199b0L,
56913         0x78a04102e62c7666L,0x16cda370e6738753L,0xbc81974d1e3a65afL,
56914         0x19742048f78fe209L,0xc83a058abf5981c6L,0xf26b24349c89702dL,
56915         0x988b2f1e9d1a678aL,0x472bf9b0ff29ae29L,0xa143e3981d7cf5ecL,
56916         0x9c9d7e45b268ddd8L,0x166cda555fc4ff76L,0x6044cdf0a4aa7673L,
56917         0x49dba6f7e9148707L },
56918       { 0x20e47fb2a758e37aL,0xaf6b31d72d8eaf66L,0x352ad5f96f9c2210L,
56919         0x0093f72790efc32bL,0x435c99dc41e4b264L,0xbfa878e005b15795L,
56920         0x99c520a40e673575L,0xca68259487eea759L,0x029f7b81f12a348bL,
56921         0xa547cc182aa2ce35L,0xa11d874bead5e2c5L,0x9af0349b55682cdfL,
56922         0xf86ebfea8bbe8e66L,0x3dab8782f55394abL,0x458bf797ebc8eb8fL,
56923         0x4890a7a49b7de78cL } },
56924     /* 251 */
56925     { { 0xd72996898da995f6L,0xd39eaae7ec6156efL,0x6959040c356a82d5L,
56926         0xb2046b21c135bcfeL,0xea720b640f595c78L,0x02824efae7c5fb40L,
56927         0x97d8fd4c0edb3bfcL,0x12f0290579f24ebeL,0x16fc47cf187ea6b9L,
56928         0xc219fd27789d5c23L,0x233a6b6c89263eccL,0x823634b28b6d30a6L,
56929         0xca352e25c9b33680L,0x9388d6ca40c77456L,0xf8e55b0b3c92065bL,
56930         0x5c17474b02439a76L },
56931       { 0xd888e7c28aaccab5L,0x18027836aaced05bL,0x185b877dccec0f65L,
56932         0x93cadc1c125c2882L,0x45df540a67fdc54cL,0x4f3c86e2c2788a33L,
56933         0x3e874469e3a0fa2cL,0xc59daa47273983cfL,0x3063c48b4a96d8a5L,
56934         0xc38d2bcfc2e58915L,0x90e78b8784e428c3L,0x900a292cf0c4fd53L,
56935         0xb7f92db7941e6005L,0x956792416ca53a1cL,0x35f6f31db1ab0fa7L,
56936         0x5d675eb47b58408cL } },
56937     /* 252 */
56938     { { 0xaeee1a77870c6025L,0xfc4a23b791a2dfcaL,0x7b0e60c4386b64c4L,
56939         0xd5d5b17de5ae72b1L,0x6dfc88ac9eefa212L,0x4feaefbed4038b96L,
56940         0x099ac3568e2d2eccL,0x548ea612012af207L,0x4ffed9db89c31218L,
56941         0x1c1e91c4e0e67331L,0x009bb64faf8300e0L,0x8780501c6773c3beL,
56942         0xe0cd6edec08219faL,0x7c055e07f81b06ffL,0x82b63f9ce080b36fL,
56943         0x02fccbaf0a9feca3L },
56944       { 0x9991d4d1b47cac61L,0x2e9d1687ab86e12cL,0x8c6855ec2b94f042L,
56945         0xca40051948e648e5L,0x9ba91fb2ef89ac57L,0x4f4192061be792cdL,
56946         0x82d221cbbd0f1e15L,0x062eb13bfc444019L,0xf3a97c3299790fdcL,
56947         0x4e796d946067a64bL,0xc46dd3006d23775aL,0x8672c4d5ed7f0f23L,
56948         0x821851dc3b4f63d7L,0x50a3ae0cd26273f2L,0x800e58fceac60f6fL,
56949         0x56f1e45613845545L } },
56950     /* 253 */
56951     { { 0x01ccb3f632c24f3bL,0x99eb1c7f06d817e6L,0x8dc640bb6aa26776L,
56952         0x7838affe0845d5e0L,0xf34fecb1f81a79a8L,0x6a2e282d3e6819b0L,
56953         0xc4b977ce8237a4b8L,0x0f46b3db87636439L,0xa465f54097970497L,
56954         0xd7e087628791be43L,0x00220b6c34198ec6L,0x57b38637093d94bbL,
56955         0x84012e1629d690b2L,0x02ec9db520aad1a4L,0xafee2fc685dc34e3L,
56956         0x911d193625500cf8L },
56957       { 0x13b1bd58f5e5af5bL,0xa7ca263b7b6a22a7L,0xab6bec4df3af2adcL,
56958         0x16651e59a04420bdL,0x3b448b3b4ba36c11L,0x3c62bfcdff424310L,
56959         0xde15c4a5f1a96cbbL,0xbe0ad8a1e4d1f980L,0x812bd14e36673a3aL,
56960         0x40303af69212acddL,0x8f6dab9c576095ceL,0x7df1882a107f5ca5L,
56961         0xb903e63c8896a3b0L,0xf5048544d863b3f0L,0x5e5019b9c09887deL,
56962         0x2be744fea0f53865L } },
56963     /* 254 */
56964     { { 0x054cd05f5b50f324L,0xb9b1eb241ea3c7a2L,0x4a858a5c7ff8e6b7L,
56965         0xd83902feec040882L,0x72b26494d0cba9bdL,0xd0176f90b29c9e1eL,
56966         0x05d4eb02cebadb81L,0x874405b1372b8bfcL,0x5c41288179ead190L,
56967         0xd44a3dd3ec2b48cdL,0x84499a773f4d5033L,0xb37b38cd564c3a09L,
56968         0x80e99497f42e803bL,0xc07b47a0b8f518b2L,0xc710e3c53568fde4L,
56969         0x735f542fcead0e7aL },
56970       { 0xcaa9a17138380039L,0xadfafe17f74d19c8L,0x92d4393eccbc1a8bL,
56971         0x3c5dbf39fe029705L,0x4552b5ab930e9b36L,0x7ee630322afd494aL,
56972         0x826a9ad73f02ac43L,0x98c5356299356298L,0x0c869f877342bb39L,
56973         0xd7510020e4f9b79aL,0x6361d1a4d34789a9L,0xf0ded5bacfa85637L,
56974         0x407ee73f88ac07e4L,0xfac7d03f09ef1cbdL,0x25d697cb4d475badL,
56975         0x1e984c9d14bd399eL } },
56976     /* 255 */
56977     { { 0xc76d05614850c817L,0xb08a5b193489812dL,0x7273d1545e58cbbeL,
56978         0x8900b5fa4be61e5aL,0xaa088691d7aeb8e1L,0xe66666afd35a3d4bL,
56979         0x38a2c19957ec7d3dL,0xa0648e8f668d6f5cL,0x1f9fc92c7adc1746L,
56980         0x23a116c0843065c3L,0x36370a2061e6ae69L,0x626c37362aa47e73L,
56981         0x540c25f2deff6d84L,0x9804824ccdbed2d4L,0x4b5bfce0039a9492L,
56982         0x6c474a5676942e01L },
56983       { 0x3aeb9a417d88e3a1L,0x105d3c88c484742aL,0xe59de8d13fe61131L,
56984         0x148f5b6b1a869e8bL,0x7a8abc59aa75d90aL,0x2f0c9bc762146013L,
56985         0x43faa747c3824cd9L,0x81763a186a5d0b92L,0xbbc341bc9bcbaebcL,
56986         0xe1813160f745d1ddL,0xa53ce52db75ce5f4L,0x15eae66cd50de4c2L,
56987         0x5ed8996c75d7656dL,0xe4ff5711c4ca552aL,0x215e985a3c5305b4L,
56988         0x6b258954fa1ba2ceL } },
56989 };
56990 
56991 /* Multiply the base point of P1024 by the scalar and return the result.
56992  * If map is true then convert result to affine coordinates.
56993  *
56994  * Stripe implementation.
56995  * Pre-generated: 2^0, 2^128, ...
56996  * Pre-generated: products of all combinations of above.
56997  * 8 doubles and adds (with qz=1)
56998  *
56999  * r     Resulting point.
57000  * k     Scalar to multiply by.
57001  * map   Indicates whether to convert result to affine.
57002  * ct    Constant time required.
57003  * heap  Heap to use for allocation.
57004  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
57005  */
sp_1024_ecc_mulmod_base_16(sp_point_1024 * r,const sp_digit * k,int map,int ct,void * heap)57006 static int sp_1024_ecc_mulmod_base_16(sp_point_1024* r, const sp_digit* k,
57007         int map, int ct, void* heap)
57008 {
57009     return sp_1024_ecc_mulmod_stripe_16(r, &p1024_base, p1024_table,
57010                                       k, map, ct, heap);
57011 }
57012 
57013 #ifdef HAVE_INTEL_AVX2
57014 /* Multiply the base point of P1024 by the scalar and return the result.
57015  * If map is true then convert result to affine coordinates.
57016  *
57017  * Stripe implementation.
57018  * Pre-generated: 2^0, 2^128, ...
57019  * Pre-generated: products of all combinations of above.
57020  * 8 doubles and adds (with qz=1)
57021  *
57022  * r     Resulting point.
57023  * k     Scalar to multiply by.
57024  * map   Indicates whether to convert result to affine.
57025  * ct    Constant time required.
57026  * heap  Heap to use for allocation.
57027  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
57028  */
sp_1024_ecc_mulmod_base_avx2_16(sp_point_1024 * r,const sp_digit * k,int map,int ct,void * heap)57029 static int sp_1024_ecc_mulmod_base_avx2_16(sp_point_1024* r, const sp_digit* k,
57030         int map, int ct, void* heap)
57031 {
57032     return sp_1024_ecc_mulmod_stripe_avx2_16(r, &p1024_base, p1024_table,
57033                                       k, map, ct, heap);
57034 }
57035 
57036 #endif /* HAVE_INTEL_AVX2 */
57037 /* Multiply the base point of P1024 by the scalar and return the result.
57038  * If map is true then convert result to affine coordinates.
57039  *
57040  * km    Scalar to multiply by.
57041  * r     Resulting point.
57042  * map   Indicates whether to convert result to affine.
57043  * heap  Heap to use for allocation.
57044  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
57045  */
sp_ecc_mulmod_base_1024(const mp_int * km,ecc_point * r,int map,void * heap)57046 int sp_ecc_mulmod_base_1024(const mp_int* km, ecc_point* r, int map, void* heap)
57047 {
57048 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
57049     sp_point_1024* point = NULL;
57050     sp_digit* k = NULL;
57051 #else
57052     sp_point_1024  point[1];
57053     sp_digit k[16];
57054 #endif
57055     int err = MP_OKAY;
57056 #ifdef HAVE_INTEL_AVX2
57057     word32 cpuid_flags = cpuid_get_flags();
57058 #endif
57059 
57060 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
57061     point = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024), heap,
57062                                          DYNAMIC_TYPE_ECC);
57063     if (point == NULL)
57064         err = MEMORY_E;
57065     if (err == MP_OKAY) {
57066         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 16, heap,
57067                                DYNAMIC_TYPE_ECC);
57068         if (k == NULL)
57069             err = MEMORY_E;
57070     }
57071 #endif
57072 
57073     if (err == MP_OKAY) {
57074         sp_1024_from_mp(k, 16, km);
57075 
57076 #ifdef HAVE_INTEL_AVX2
57077         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
57078             err = sp_1024_ecc_mulmod_base_avx2_16(point, k, map, 1, heap);
57079         else
57080 #endif
57081             err = sp_1024_ecc_mulmod_base_16(point, k, map, 1, heap);
57082     }
57083     if (err == MP_OKAY) {
57084         err = sp_1024_point_to_ecc_point_16(point, r);
57085     }
57086 
57087 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
57088     if (k != NULL)
57089         XFREE(k, heap, DYNAMIC_TYPE_ECC);
57090     if (point != NULL)
57091         XFREE(point, heap, DYNAMIC_TYPE_ECC);
57092 #endif
57093 
57094     return err;
57095 }
57096 
57097 /* Multiply the base point of P1024 by the scalar, add point a and return
57098  * the result. If map is true then convert result to affine coordinates.
57099  *
57100  * km      Scalar to multiply by.
57101  * am      Point to add to scalar mulitply result.
57102  * inMont  Point to add is in montgomery form.
57103  * r       Resulting point.
57104  * map     Indicates whether to convert result to affine.
57105  * heap    Heap to use for allocation.
57106  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
57107  */
sp_ecc_mulmod_base_add_1024(const mp_int * km,const ecc_point * am,int inMont,ecc_point * r,int map,void * heap)57108 int sp_ecc_mulmod_base_add_1024(const mp_int* km, const ecc_point* am,
57109         int inMont, ecc_point* r, int map, void* heap)
57110 {
57111 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
57112     sp_point_1024* point = NULL;
57113     sp_digit* k = NULL;
57114 #else
57115     sp_point_1024 point[2];
57116     sp_digit k[16 + 16 * 2 * 5];
57117 #endif
57118     sp_point_1024* addP = NULL;
57119     sp_digit* tmp = NULL;
57120     int err = MP_OKAY;
57121 #ifdef HAVE_INTEL_AVX2
57122     word32 cpuid_flags = cpuid_get_flags();
57123 #endif
57124 
57125 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
57126     point = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024) * 2, heap,
57127                                          DYNAMIC_TYPE_ECC);
57128     if (point == NULL)
57129         err = MEMORY_E;
57130     if (err == MP_OKAY) {
57131         k = (sp_digit*)XMALLOC(
57132             sizeof(sp_digit) * (16 + 16 * 2 * 5),
57133             heap, DYNAMIC_TYPE_ECC);
57134         if (k == NULL)
57135             err = MEMORY_E;
57136     }
57137 #endif
57138 
57139     if (err == MP_OKAY) {
57140         addP = point + 1;
57141         tmp = k + 16;
57142 
57143         sp_1024_from_mp(k, 16, km);
57144         sp_1024_point_from_ecc_point_16(addP, am);
57145     }
57146     if ((err == MP_OKAY) && (!inMont)) {
57147         err = sp_1024_mod_mul_norm_16(addP->x, addP->x, p1024_mod);
57148     }
57149     if ((err == MP_OKAY) && (!inMont)) {
57150         err = sp_1024_mod_mul_norm_16(addP->y, addP->y, p1024_mod);
57151     }
57152     if ((err == MP_OKAY) && (!inMont)) {
57153         err = sp_1024_mod_mul_norm_16(addP->z, addP->z, p1024_mod);
57154     }
57155     if (err == MP_OKAY) {
57156 #ifdef HAVE_INTEL_AVX2
57157         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
57158             err = sp_1024_ecc_mulmod_base_avx2_16(point, k, 0, 0, heap);
57159         else
57160 #endif
57161             err = sp_1024_ecc_mulmod_base_16(point, k, 0, 0, heap);
57162     }
57163     if (err == MP_OKAY) {
57164 #ifdef HAVE_INTEL_AVX2
57165         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
57166             sp_1024_proj_point_add_avx2_16(point, point, addP, tmp);
57167         else
57168 #endif
57169             sp_1024_proj_point_add_16(point, point, addP, tmp);
57170 
57171         if (map) {
57172 #ifdef HAVE_INTEL_AVX2
57173             if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
57174                 sp_1024_map_avx2_16(point, point, tmp);
57175             else
57176 #endif
57177                 sp_1024_map_16(point, point, tmp);
57178         }
57179 
57180         err = sp_1024_point_to_ecc_point_16(point, r);
57181     }
57182 
57183 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
57184     if (k != NULL)
57185         XFREE(k, heap, DYNAMIC_TYPE_ECC);
57186     if (point)
57187         XFREE(point, heap, DYNAMIC_TYPE_ECC);
57188 #endif
57189 
57190     return err;
57191 }
57192 
57193 #ifndef WOLFSSL_SP_SMALL
57194 /* Generate a pre-computation table for the point.
57195  *
57196  * gm     Point to generate table for.
57197  * table  Buffer to hold pre-computed points table.
57198  * len    Length of table.
57199  * heap   Heap to use for allocation.
57200  * returns BAD_FUNC_ARG when gm or len is NULL, LENGTH_ONLY_E when table is
57201  * NULL and length is returned, BUFFER_E if length is too small and 0 otherwise.
57202  */
sp_ecc_gen_table_1024(const ecc_point * gm,byte * table,word32 * len,void * heap)57203 int sp_ecc_gen_table_1024(const ecc_point* gm, byte* table, word32* len,
57204     void* heap)
57205 {
57206 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
57207     sp_point_1024* point = NULL;
57208     sp_digit* t = NULL;
57209 #else
57210     sp_point_1024 point[1];
57211     sp_digit t[5 * 2 * 16];
57212 #endif
57213     int err = MP_OKAY;
57214 #ifdef HAVE_INTEL_AVX2
57215     word32 cpuid_flags = cpuid_get_flags();
57216 #endif
57217 
57218     if ((gm == NULL) || (len == NULL)) {
57219         err = BAD_FUNC_ARG;
57220     }
57221 
57222     if ((err == MP_OKAY) && (table == NULL)) {
57223         *len = sizeof(sp_table_entry_1024) * 256;
57224         err = LENGTH_ONLY_E;
57225     }
57226     if ((err == MP_OKAY) && (*len < (int)(sizeof(sp_table_entry_1024) * 256))) {
57227         err = BUFFER_E;
57228     }
57229 
57230 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
57231     if (err == MP_OKAY) {
57232         point = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024), heap,
57233             DYNAMIC_TYPE_ECC);
57234         if (point == NULL)
57235             err = MEMORY_E;
57236     }
57237     if (err == MP_OKAY) {
57238         t = (sp_digit*)XMALLOC(sizeof(sp_digit) * 5 * 2 * 16, heap,
57239             DYNAMIC_TYPE_ECC);
57240         if (t == NULL)
57241             err = MEMORY_E;
57242     }
57243 #endif
57244 
57245     if (err == MP_OKAY) {
57246         sp_1024_point_from_ecc_point_16(point, gm);
57247 #ifdef HAVE_INTEL_AVX2
57248         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
57249             err = sp_1024_gen_stripe_table_avx2_16(point,
57250                 (sp_table_entry_1024*)table, t, heap);
57251         else
57252 #endif
57253             err = sp_1024_gen_stripe_table_16(point,
57254                 (sp_table_entry_1024*)table, t, heap);
57255     }
57256     if (err == 0) {
57257         *len = sizeof(sp_table_entry_1024) * 256;
57258     }
57259 
57260 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
57261     if (t != NULL)
57262         XFREE(t, heap, DYNAMIC_TYPE_ECC);
57263     if (point != NULL)
57264         XFREE(point, heap, DYNAMIC_TYPE_ECC);
57265 #endif
57266 
57267     return err;
57268 }
57269 #else
57270 /* Generate a pre-computation table for the point.
57271  *
57272  * gm     Point to generate table for.
57273  * table  Buffer to hold pre-computed points table.
57274  * len    Length of table.
57275  * heap   Heap to use for allocation.
57276  * returns BAD_FUNC_ARG when gm or len is NULL, LENGTH_ONLY_E when table is
57277  * NULL and length is returned, BUFFER_E if length is too small and 0 otherwise.
57278  */
sp_ecc_gen_table_1024(const ecc_point * gm,byte * table,word32 * len,void * heap)57279 int sp_ecc_gen_table_1024(const ecc_point* gm, byte* table, word32* len,
57280     void* heap)
57281 {
57282     int err = 0;
57283 
57284     if ((gm == NULL) || (len == NULL)) {
57285         err = BAD_FUNC_ARG;
57286     }
57287 
57288     if ((err == 0) && (table == NULL)) {
57289         *len = 0;
57290         err = LENGTH_ONLY_E;
57291     }
57292     if ((err == 0) && (*len != 0)) {
57293         err = BUFFER_E;
57294     }
57295     if (err == 0) {
57296         *len = 0;
57297     }
57298 
57299     (void)heap;
57300 
57301     return err;
57302 }
57303 #endif
57304 /* Multiply the point by the scalar and return the result.
57305  * If map is true then convert result to affine coordinates.
57306  *
57307  * km     Scalar to multiply by.
57308  * gm     Point to multiply.
57309  * table  Pre-computed points.
57310  * r      Resulting point.
57311  * map    Indicates whether to convert result to affine.
57312  * heap   Heap to use for allocation.
57313  * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
57314  */
sp_ecc_mulmod_table_1024(const mp_int * km,const ecc_point * gm,byte * table,ecc_point * r,int map,void * heap)57315 int sp_ecc_mulmod_table_1024(const mp_int* km, const ecc_point* gm, byte* table,
57316         ecc_point* r, int map, void* heap)
57317 {
57318 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
57319     sp_point_1024* point = NULL;
57320     sp_digit* k = NULL;
57321 #else
57322     sp_point_1024 point[1];
57323     sp_digit k[16];
57324 #endif
57325     int err = MP_OKAY;
57326 #if defined(HAVE_INTEL_AVX2) && !defined(WOLFSSL_SP_SMALL)
57327     word32 cpuid_flags = cpuid_get_flags();
57328 #endif
57329 
57330 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
57331     point = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024), heap,
57332         DYNAMIC_TYPE_ECC);
57333     if (point == NULL) {
57334         err = MEMORY_E;
57335     }
57336     if (err == MP_OKAY) {
57337         k = (sp_digit*)XMALLOC(sizeof(sp_digit) * 16, heap, DYNAMIC_TYPE_ECC);
57338         if (k == NULL)
57339             err = MEMORY_E;
57340     }
57341 #endif
57342 
57343     if (err == MP_OKAY) {
57344         sp_1024_from_mp(k, 16, km);
57345         sp_1024_point_from_ecc_point_16(point, gm);
57346 
57347 #ifndef WOLFSSL_SP_SMALL
57348 #ifdef HAVE_INTEL_AVX2
57349         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
57350             err = sp_1024_ecc_mulmod_stripe_avx2_16(point, point,
57351                 (const sp_table_entry_1024*)table, k, map, 0, heap);
57352         else
57353 #endif
57354             err = sp_1024_ecc_mulmod_stripe_16(point, point,
57355                 (const sp_table_entry_1024*)table, k, map, 0, heap);
57356 #else
57357         (void)table;
57358         err = sp_1024_ecc_mulmod_16(point, point, k, map, 0, heap);
57359 #endif
57360     }
57361     if (err == MP_OKAY) {
57362         err = sp_1024_point_to_ecc_point_16(point, r);
57363     }
57364 
57365 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
57366     if (k != NULL)
57367         XFREE(k, heap, DYNAMIC_TYPE_ECC);
57368     if (point != NULL)
57369         XFREE(point, heap, DYNAMIC_TYPE_ECC);
57370 #endif
57371 
57372     return err;
57373 }
57374 
57375 /* Multiply p* in projective co-ordinates by q*.
57376  *
57377  * r.x = p.x - (p.y * q.y)
57378  * r.y = (p.x * q.y) + p.y
57379  *
57380  * px  [in,out]  A single precision integer - X ordinate of number to multiply.
57381  * py  [in,out]  A single precision integer - Y ordinate of number to multiply.
57382  * q   [in]      A single precision integer - multiplier.
57383  * t   [in]      Two single precision integers - temps.
57384  */
sp_1024_proj_mul_qx1_16(sp_digit * px,sp_digit * py,const sp_digit * q,sp_digit * t)57385 static void sp_1024_proj_mul_qx1_16(sp_digit* px, sp_digit* py,
57386         const sp_digit* q, sp_digit* t)
57387 {
57388     sp_digit* t1 = t;
57389     sp_digit* t2 = t + 2 * 16;
57390 
57391     /* t1 = p.x * q.y */
57392     sp_1024_mont_mul_16(t1, px, q, p1024_mod, p1024_mp_mod);
57393     /* t2 = p.y * q.y */
57394     sp_1024_mont_mul_16(t2, py, q, p1024_mod, p1024_mp_mod);
57395     /* r.x = p.x - (p.y * q.y) */
57396     sp_1024_mont_sub_16(px, px, t2, p1024_mod);
57397     /* r.y = (p.x * q.y) + p.y */
57398     sp_1024_mont_add_16(py, t1, py, p1024_mod);
57399 }
57400 
57401 /* Square p* in projective co-ordinates.
57402  *
57403  *   px' = (p.x + p.y) * (p.x - p.y) = p.x^2 - p.y^2
57404  *   py' = 2 * p.x * p.y
57405  *
57406  * px  [in,out]  A single precision integer - X ordinate of number to square.
57407  * py  [in,out]  A single precision integer - Y ordinate of number to square.
57408  * t   [in]      Two single precision integers - temps.
57409  */
sp_1024_proj_sqr_16(sp_digit * px,sp_digit * py,sp_digit * t)57410 static void sp_1024_proj_sqr_16(sp_digit* px, sp_digit* py, sp_digit* t)
57411 {
57412     sp_digit* t1 = t;
57413     sp_digit* t2 = t + 2 * 16;
57414 
57415     /* t1 = p.x + p.y */
57416     sp_1024_mont_add_16(t1, px, py, p1024_mod);
57417     /* t2 = p.x - p.y */
57418     sp_1024_mont_sub_16(t2, px, py, p1024_mod);
57419     /* r.y = p.x * p.y */
57420     sp_1024_mont_mul_16(py, px, py, p1024_mod, p1024_mp_mod);
57421     /* r.x = (p.x + p.y) * (p.x - p.y) */
57422     sp_1024_mont_mul_16(px, t1, t2, p1024_mod, p1024_mp_mod);
57423     /* r.y = (p.x * p.y) * 2 */
57424     sp_1024_mont_dbl_16(py, py, p1024_mod);
57425 }
57426 
57427 #ifdef WOLFSSL_SP_SMALL
57428 /* Perform the modular exponentiation in Fp* for SAKKE.
57429  *
57430  * Simple square and multiply when expontent bit is one algorithm.
57431  * Square and multiply performed in Fp*.
57432  *
57433  * base  [in]   Base. MP integer.
57434  * exp   [in]   Exponent. MP integer.
57435  * res   [out]  Result. MP integer.
57436  * returns 0 on success and MEMORY_E if memory allocation fails.
57437  */
sp_ModExp_Fp_star_x64_1024(const mp_int * base,mp_int * exp,mp_int * res)57438 static int sp_ModExp_Fp_star_x64_1024(const mp_int* base, mp_int* exp, mp_int* res)
57439 {
57440 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
57441     !defined(WOLFSSL_SP_NO_MALLOC)
57442     sp_digit* td;
57443     sp_digit* t;
57444     sp_digit* tx;
57445     sp_digit* ty;
57446     sp_digit* b;
57447     sp_digit* e;
57448 #else
57449     sp_digit t[4 * 2 * 16];
57450     sp_digit tx[2 * 16];
57451     sp_digit ty[2 * 16];
57452     sp_digit b[2 * 16];
57453     sp_digit e[2 * 16];
57454 #endif
57455     sp_digit* r;
57456     int err = MP_OKAY;
57457     int bits;
57458     int i;
57459 
57460 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
57461     !defined(WOLFSSL_SP_NO_MALLOC)
57462     td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 8 * 16 * 2, NULL,
57463                             DYNAMIC_TYPE_TMP_BUFFER);
57464     if (td == NULL) {
57465         err = MEMORY_E;
57466     }
57467 #endif
57468 
57469     if (err == MP_OKAY) {
57470 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
57471     !defined(WOLFSSL_SP_NO_MALLOC)
57472         t  = td;
57473         tx = td + 4 * 16 * 2;
57474         ty = td + 5 * 16 * 2;
57475         b  = td + 6 * 16 * 2;
57476         e  = td + 7 * 16 * 2;
57477 #endif
57478         r = ty;
57479 
57480         bits = mp_count_bits(exp);
57481         sp_1024_from_mp(b, 16, base);
57482         sp_1024_from_mp(e, 16, exp);
57483 
57484         XMEMCPY(tx, p1024_norm_mod, sizeof(sp_digit) * 16);
57485         sp_1024_mul_16(b, b, p1024_norm_mod);
57486         err = sp_1024_mod_16(b, b, p1024_mod);
57487     }
57488     if (err == MP_OKAY) {
57489         XMEMCPY(ty, b, sizeof(sp_digit) * 16);
57490 
57491         for (i = bits - 2; i >= 0; i--) {
57492             sp_1024_proj_sqr_16(tx, ty, t);
57493             if ((e[i / 64] >> (i % 64)) & 1) {
57494                 sp_1024_proj_mul_qx1_16(tx, ty, b, t);
57495             }
57496         }
57497     }
57498 
57499     if (err == MP_OKAY) {
57500         sp_1024_mont_inv_16(tx, tx, t);
57501 
57502         XMEMSET(tx + 16, 0, sizeof(sp_digit) * 16);
57503         sp_1024_mont_reduce_16(tx, p1024_mod, p1024_mp_mod);
57504         XMEMSET(ty + 16, 0, sizeof(sp_digit) * 16);
57505         sp_1024_mont_reduce_16(ty, p1024_mod, p1024_mp_mod);
57506 
57507         sp_1024_mul_16(r, tx, ty);
57508         err = sp_1024_mod_16(r, r, p1024_mod);
57509     }
57510     if (err == MP_OKAY) {
57511         err = sp_1024_to_mp(r, res);
57512     }
57513 
57514 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
57515     !defined(WOLFSSL_SP_NO_MALLOC)
57516     if (td != NULL) {
57517         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
57518     }
57519 #endif
57520     return err;
57521 }
57522 
57523 #else
57524 /* Pre-computed table for exponentiating g.
57525  * Striping: 8 points at a distance of (128 combined for
57526  * a total of 256 points.
57527  */
57528 static const sp_digit sp_1024_g_table[256][16] = {
57529     { 0x0000000000000000L, 0x0000000000000000L, 0x0000000000000000L,
57530       0x0000000000000000L, 0x0000000000000000L, 0x0000000000000000L,
57531       0x0000000000000000L, 0x0000000000000000L, 0x0000000000000000L,
57532       0x0000000000000000L, 0x0000000000000000L, 0x0000000000000000L,
57533       0x0000000000000000L, 0x0000000000000000L, 0x0000000000000000L,
57534       0x0000000000000000L },
57535     { 0x170a46d2335c1685L, 0xeac9e971e1007a58L, 0x40e8f3df43ca4a73L,
57536       0x2646f81582642475L, 0x3af49bb4b36576d1L, 0xd89e2d1472bf1afbL,
57537       0x27be882c2fd151e6L, 0xaddedc858f88717cL, 0xd6d859bf16ac6c6fL,
57538       0x0e741a1b2d8eae58L, 0x6faf7a0061c1f30dL, 0x66dbd09a9b67e096L,
57539       0x21f11c067d3b4f7dL, 0x6152ba02c727c98eL, 0xafd58891e86cb221L,
57540       0x59e93c6a6bd3baf4L },
57541     { 0xe54dd36f71dd4594L, 0xbbc9cc9f00aef1e6L, 0x9ea5a44ea19f6530L,
57542       0x8588aa993f520928L, 0x9753794c8f5c1418L, 0x118bd792c11399faL,
57543       0xb9bd3afdf5cb6ab5L, 0x813d1cb22ecb9652L, 0xfd45626740389813L,
57544       0x51f7119b4ac8431cL, 0xdd9f6a910a180eb6L, 0x13946d179f7bfa2eL,
57545       0x16f1863150a9d0d9L, 0x5f19c20d6f8373d3L, 0xbe85ac6a9b6a52b9L,
57546       0x63ef187b74f62e03L },
57547     { 0x7c376b7f016f45e7L, 0x1c1bdb572bec82f8L, 0x7392f741ce429b60L,
57548       0x6fdbf0a2c7afd81dL, 0xbda41b1f7241098bL, 0x5b407474bb60f8cfL,
57549       0x933e0d41b330bc4dL, 0xae182830733fa3beL, 0xa0ed299b0f5c6cd1L,
57550       0x7ff3354e3f9860c8L, 0xb136098615559c41L, 0xab0cb63c129f85cbL,
57551       0x682ecc4947685fbeL, 0x505e8ec2eb199633L, 0x90dcc794ddac2cdaL,
57552       0x4fe6791cf192da23L },
57553     { 0x94a423d505e8733cL, 0xcc845e651d5717c1L, 0x237c7e88e961b322L,
57554       0x0c4471c6db4181ccL, 0x00c875e2713bd721L, 0x9dfde9edb2c17b09L,
57555       0x430a6de5e88ceaf6L, 0xaaa7a61a7b81cea6L, 0xea52d026233f98d5L,
57556       0xb55efdd060689a9aL, 0x30cfa7ce5cac4aabL, 0xfa4db1148e950761L,
57557       0x309570c44e9a1e52L, 0x18c21f611a040170L, 0x555d1ffebe78d9d2L,
57558       0x04482a18561db297L },
57559     { 0xe7758ac273d486d8L, 0x8169f94661cdc1e7L, 0x723c99fc2188ab4fL,
57560       0xa0e54f02f3373630L, 0x560bee25bd8c2260L, 0x28fc307c4531bc60L,
57561       0xd6f21f1a7e44feb5L, 0xc8e4499c57128d37L, 0x963b053ed7b2ea45L,
57562       0x40c27a0432a3d222L, 0x5b51854d35459668L, 0x66e1a49fd73557e9L,
57563       0x0d267fd98692077aL, 0xfa1350d3e7342702L, 0x1a9c3f2568ccdb44L,
57564       0x833a0ff8dedbf89fL },
57565     { 0xa8c419c7ab376b76L, 0x3b7294f327d0f0ccL, 0xe56bb9e2a90c514dL,
57566       0x931ba51ea62575a6L, 0x56fee07b098c0a88L, 0x04be5aeeb4c16a2aL,
57567       0xe513350be6eb260bL, 0x339edad6a1d5c270L, 0xf366ed59e9dbadd1L,
57568       0x4213be882dd06ec0L, 0x22d639c8cb1187dbL, 0x1fec95e1d8a1058aL,
57569       0x03f73ea6a2b744f1L, 0x741fd51af4f05c0cL, 0x2e2df95a85f811a0L,
57570       0x692b3ce3eb24965fL },
57571     { 0x0ce6cb72d2a127b4L, 0x66a46ea58f92816fL, 0x43ecf46347a37616L,
57572       0x163d9a01e0ab96eeL, 0xc8145c6db2edbe8cL, 0x2f426cae4de4e665L,
57573       0x174d0b4074e252f9L, 0x54c240d77d2af831L, 0x581fa3973d652936L,
57574       0x05b9491ca09d4695L, 0x8c4e85335452643cL, 0x32d64331d4128327L,
57575       0x6447903870361f25L, 0x774191b189ef09f2L, 0xc0cf0aaf81de5fe0L,
57576       0x333e430af40042d6L },
57577     { 0x5df04de4cf26d3b7L, 0x57a77306b53f79beL, 0xa4013c5f1808b664L,
57578       0xef291ea485037360L, 0x1ffc9d7d0b061037L, 0xd9d04dd965c913bbL,
57579       0x948a37aff13b8587L, 0xb5443483fe3ee755L, 0x3fc21e7404631386L,
57580       0xb3a104e5cddeb58cL, 0x94fe18626572cd52L, 0xeb9a71a115aaa408L,
57581       0x8adc6fe5459ea462L, 0xbb18d1754aeb02a3L, 0xae1276362f7791d1L,
57582       0x10e8b31dd6bbd708L },
57583     { 0xb87f03e53ed9f1afL, 0x03ad247756676166L, 0x38dcd63074ce15b8L,
57584       0x1877e2b026b1e85bL, 0xb1654d171af99c15L, 0x9782e9e49382547aL,
57585       0x6dc7fc7c26d55ef5L, 0x9038f95d2fbeb54cL, 0xfe590dfe036c0357L,
57586       0xcfcb6eae4fdc3f7fL, 0xcb1fbc54f35e1a88L, 0x3c8e1db2da0a5568L,
57587       0x9a87393f5b6f5557L, 0x38646b32e7ac0a06L, 0xfd261c832a8495abL,
57588       0x6485524c0cdcc4bcL },
57589     { 0x1abfb3e2c4a6ff2aL, 0x2aa03fba35a6428aL, 0x884227f089aff742L,
57590       0x2337883aba5dbd93L, 0x38186ae9d2a182cbL, 0xb9f0764d49a01f05L,
57591       0x92411feb917b1e7aL, 0x700b1903570cbb5bL, 0x5d5181d5b914be7cL,
57592       0x135c44371981182dL, 0x32758d24574b9997L, 0xa650a8f5632d28b2L,
57593       0x24078bacfa383f09L, 0x6546a60c00a33d80L, 0xa4061c7a2df8b449L,
57594       0x1f76f3f2f234563cL },
57595     { 0x9aa2c14344c436b0L, 0x790705561f69c87aL, 0x35f3117b5f6db2dfL,
57596       0x85761f41ed56ba82L, 0xf831464f7d0afa48L, 0xa99f29153adce71eL,
57597       0xb27bf693116b7488L, 0xa98a5a8c9bb9443aL, 0x7f8780262ee5fde8L,
57598       0x3a6f93dd1812acb7L, 0xaf92a4ccdc84bc92L, 0x3c2562aff1d4995aL,
57599       0xfd9fc33c04ed899dL, 0xc028ca944ed2a538L, 0xd0f367bb049ea726L,
57600       0x04924ffb3d108e05L },
57601     { 0x06548e3dc673562fL, 0xd3b33025e2eae48cL, 0xe61fd32b5e1c6977L,
57602       0x424e20646ebe557bL, 0x767391c041d6e18eL, 0x4b8ebb8e14d7e95bL,
57603       0x4ae8b7d420991b8cL, 0xf8a0df66e01290d3L, 0xc97e24a3925e5f4eL,
57604       0x79a7b2cb1508272aL, 0xb40b072e25072661L, 0xdad9e1829062fa49L,
57605       0x8780a784f3c53bceL, 0x58a82b769f142799L, 0x08cd849cc1468426L,
57606       0x4dfce809c380ae35L },
57607     { 0x45069cb2d527b780L, 0xd52da015977930ddL, 0x10cc600be27d0263L,
57608       0x34102c26bb2d1b2bL, 0x4c652623554adf3cL, 0xd689138245f0ff47L,
57609       0x83fa8cc5ca916e7cL, 0x1e10f139d15c8d8aL, 0xf173dc2e81dc56b3L,
57610       0x7fcecb045c4ed9baL, 0x307fd7d847d01228L, 0x24a571539f3a532fL,
57611       0x59e9e81de2153c22L, 0xc562595de428a408L, 0xdc7daff89339bd23L,
57612       0x0d075908b8a06802L },
57613     { 0x870af2a7de085f2aL, 0x88fcd24fbe99b2e5L, 0x88c0d26159ca413bL,
57614       0x1f02a2e48559f851L, 0x83b96021f622da0dL, 0x5c05c2f56dca3615L,
57615       0x0148cf1c7910c682L, 0x392f2896272695beL, 0x883d0bb5a8d64ef6L,
57616       0xef0d22441cfcbc52L, 0xf5dafcec526117e5L, 0xb68612b9f04928e9L,
57617       0x283f744d393f2e2aL, 0xfbeed7ed700c1151L, 0xf2cde215a4360dfeL,
57618       0x24fa961c2f08535aL },
57619     { 0x0767db3f616df7f6L, 0x643057d8fbd90326L, 0x174daa906e82d544L,
57620       0x2284f345689643dbL, 0x18b191dfcc89a060L, 0xbab46af4d6c27d12L,
57621       0x5a57f486c9895145L, 0xc03214e9cc942f9eL, 0x273e1c8f41950158L,
57622       0x8ceb759f39ad43abL, 0x5e1b8b7fe50ee173L, 0xf635b1fc8f4d7d4eL,
57623       0x8eff77e3755603f3L, 0x201f61d17752fa60L, 0x94d7a03d4a6fb6e1L,
57624       0x371cc23dfc4f0114L },
57625     { 0x289b115dda90c351L, 0x6d196ebf364d9c06L, 0x77a89202f650b31bL,
57626       0xcc28c1646f57642fL, 0xdc4f7e3608100127L, 0x8836cd08dc4c807bL,
57627       0x1280f156e00240f2L, 0x3f9a6d7899cb3953L, 0x40a494d33a802038L,
57628       0x45697e91e87d3474L, 0x70d97d0726dde24aL, 0x06f6a58d7640c30eL,
57629       0x03c2c0e85ba6e6c6L, 0x330f6a7af1bc13e8L, 0x3e602e4fc9f4d78fL,
57630       0x92b6bca00c80fb7fL },
57631     { 0x2e3d5c835f00822eL, 0x0e825712b8b16f12L, 0x81c329c492b0a330L,
57632       0x6b4e32ada7cc1954L, 0x0bee9cee1bb1413fL, 0xedfb7baa4a92ca27L,
57633       0xcd472afaea3b9153L, 0xe8f09e7e00f0c0f9L, 0xa4e1d8725cdebb70L,
57634       0xfe2bae084a9b63b6L, 0xf40141b83fd58f65L, 0xd7ec5edaa3b62759L,
57635       0x9aaf6e67790e3088L, 0x215ad8301f277e31L, 0xe7db4b98cf33871cL,
57636       0x71ff62c94f02f89dL },
57637     { 0xaa4c71022a4a84d9L, 0xe2ee4acd5ebc71e6L, 0x3b11a8a5f1cd6578L,
57638       0x83f5ef9ffff120a5L, 0xa4c598e109e65033L, 0xe1e9f990ca044180L,
57639       0x8b832d46f59828c1L, 0x753f28a033af536bL, 0x92edc4b1b6d4f68aL,
57640       0xedde692a72ccd1f0L, 0xd3aa0f7dd2226432L, 0x38dbb63ea3d2661cL,
57641       0xf1e19fc6fdc37ddaL, 0x6c18b35084ef6b4cL, 0xe6a83fe9df1bba69L,
57642       0x40fd47e75f958273L },
57643     { 0x5b88b746267140a4L, 0x6dbbfc1eeab6f2fbL, 0xdd9ec88e69862548L,
57644       0x69beeba12eb6efc2L, 0xcfc2214a8ac8ff88L, 0x95d5c96eb5a21950L,
57645       0x93389c054171fb69L, 0x2d85d4521b468337L, 0x14d68a084113425cL,
57646       0xe52c0139ec6c2174L, 0x20cf0b97f730084dL, 0x1ac16a261f578aa3L,
57647       0x18b9fab3f9b6ae43L, 0x68d82111d854a695L, 0x0b334d98dffbe286L,
57648       0x5b1c1157e639338cL },
57649     { 0x90edaab172b6bb8fL, 0x8dc64ed202fc92c2L, 0xf42ba3c5fe694c73L,
57650       0x316dc65fcb54dce4L, 0xcb2d66a3632420dcL, 0x16e706e7056dcf94L,
57651       0x2809c764a4f32c9dL, 0xab18d830ea6edca8L, 0x4fd1ace681c65f57L,
57652       0x1f91651c7da12c10L, 0x0ac3bd66c7791a48L, 0xb6ad1cf4785e67a3L,
57653       0xe4d3fc44da0fd591L, 0xce1648016e1c6344L, 0x84de9cb833e50ab3L,
57654       0x963ab83aa756eef4L },
57655     { 0x944b47d8df4ea5a3L, 0x965688155cfe45feL, 0xd16e7d588a3c3564L,
57656       0x84e55b3ee7c99e15L, 0x3fee204df55071bcL, 0x71006f2904057dceL,
57657       0xfe8c390dbba75570L, 0x3645bcb63319adacL, 0x8189e8b07c20bfd8L,
57658       0x8e5509697d7d9578L, 0x037d1321b99f4e3bL, 0x011b2521a60cfb6aL,
57659       0x66594aaa837382daL, 0xc89b91fd83c1dc07L, 0x6b82b899076b9884L,
57660       0x443480fcbe45c558L },
57661     { 0xf8ffffb49114221aL, 0x4aec4f2e3e857a7aL, 0x42e2d0e40fa54787L,
57662       0xef3e6b31d6f96152L, 0xb2296537fbfe9b77L, 0xc2a9d0f2fb43a86aL,
57663       0x241284ed24572ac6L, 0xa3868917e721ba7bL, 0xdbef7c00c117a78dL,
57664       0x38149071d31605acL, 0xc2dada9e065a8ee9L, 0xd5b138d8c442be82L,
57665       0x9b6c224bf6d72b58L, 0xb9d355cf8eb03e6dL, 0xab6d1eb0a1700371L,
57666       0x97118a88cffaa7ebL },
57667     { 0xbf9c59a2cdecb5d8L, 0x8083c81ba93a6866L, 0x24e0dd8104774fbfL,
57668       0xe779a3caa02070b4L, 0x9d352fbb0fbfb781L, 0xa8b0d8203ef2a1c4L,
57669       0xb858637b14b3e501L, 0x5ba70a498a882ff2L, 0xa27300833b06efa5L,
57670       0xa42c02f4102fee2aL, 0xe4e762998a0223a5L, 0xdba2ba2685c3fc72L,
57671       0x554fe763fe52eae7L, 0x30b5405a270f45f6L, 0xd56a177aa573387cL,
57672       0x17c0778d4b71fa82L },
57673     { 0x0e6dff1d2735e37bL, 0xc9884e56656ec572L, 0xa2f5ac9d9ebba978L,
57674       0x40fa4518ba09f3c4L, 0x8c3fa177f5b04377L, 0xa1a1decd967a2ecaL,
57675       0x768bca700528bd40L, 0xf224952b18691c4aL, 0x16e12c45e86d5fd5L,
57676       0x7a0d915737859a6aL, 0x723f4309a0ffce0eL, 0x5a8db79ba96cc9a3L,
57677       0x6dd12ae01ad23a38L, 0x9ffec3a1e2bf5d84L, 0xd6ce84e1a452ed66L,
57678       0x1219d5c8571fe4c6L },
57679     { 0x43eaa67f262969ebL, 0x3a3ab39d2f03e773L, 0xe6127e5157bb0909L,
57680       0x0f82b0ed8d150274L, 0xffffcad8e580bdbdL, 0x51d3d075a9743e6bL,
57681       0x1484bdb18bac11d6L, 0x95cd9990eb24c388L, 0x216a61d07fac67c6L,
57682       0x4308f762a04e6b87L, 0x2865dd61cba57cc8L, 0x3c296b0dd234a07aL,
57683       0x76f928393a0793f9L, 0x70b57e1f0be29eceL, 0x1314a82f7e626f42L,
57684       0x2c8d7ab2d657f230L },
57685     { 0x67cf58920825e4d6L, 0xdf51eaa56ef83b44L, 0x63e665d81310108dL,
57686       0x229f89f58dd0963fL, 0x8c4b14dd9df6436aL, 0x99dae469d45ebba7L,
57687       0x118aab775a4df381L, 0xda8978bd29e37febL, 0x69ced5aaaca2d7efL,
57688       0x6c98d05dc67d6a8aL, 0x7474bf0d77f84a34L, 0xd4428b2eed8cd59aL,
57689       0xb0fd1cd5d1d398fbL, 0x596013db94a20b11L, 0x96eb705a1b404c44L,
57690       0x2299d2774b09d958L },
57691     { 0x5b9cd58dc64397e6L, 0xac198f1ebf6dd31eL, 0x5866d8e13e9f1db2L,
57692       0x405ae2878fcdc68cL, 0xa4b280cde53c01fdL, 0xdc963f2d411db5f6L,
57693       0xed5d5189bec4f8a0L, 0x336fd13d916ee98bL, 0x6925b1b3042df48eL,
57694       0x0cf56291ace0074eL, 0xe8d38b4825317e95L, 0xc7ad1d2b821c446bL,
57695       0x71c44135f0b65934L, 0x971b736f52ca0d50L, 0xaf9ffa5727b46c26L,
57696       0x21ac67791936618eL },
57697     { 0xab420e3f2d7fbcd2L, 0x1272247397bdfc18L, 0x492033f84df5d4b4L,
57698       0x6fcd42363807b7d3L, 0xdfc19b09b33c3625L, 0x13d6f375a0f22814L,
57699       0x70978a59037c19b8L, 0x4f3989970ff27b9cL, 0xfc0e1a45615a4389L,
57700       0xffa3496a3e602f74L, 0xc3f1c431b261ca1cL, 0x612211dbee0164cdL,
57701       0x30463ee4e7f7be9fL, 0x015f7e7892c2e1bbL, 0x663d88d624483a56L,
57702       0x0e8ec1e70e62d9d8L },
57703     { 0xa88ccc298a0878ddL, 0x99ac175d6640071aL, 0x90344820a5173617L,
57704       0x316d023edd58a315L, 0x30785bd488d221a1L, 0xb74b3de7959c48e3L,
57705       0x42ee03824c67a771L, 0x59ef6cdde0b91453L, 0x7830ae289b237e91L,
57706       0xe1847a4c495d8325L, 0x67b1217ed0773666L, 0x58192c86a294a325L,
57707       0x76aa0f56864d8326L, 0xe2a2bd12f4b13e5bL, 0xd850c1c01b6b73fdL,
57708       0x653a795f5d103635L },
57709     { 0xcfe2898550dcb199L, 0xb35b8e5e7fa02b60L, 0xbca7d7c3c97603d0L,
57710       0xb0e5288d27f131b5L, 0x3aa704dee2b12d52L, 0xe206b1d81db725c7L,
57711       0x0b12839ac5d1b113L, 0x14f970cbdb45d763L, 0xc997f93eb2125e8eL,
57712       0xbd75739cee7daa26L, 0x46ecbd3f1fef20e9L, 0xf994a1147c6a42b1L,
57713       0xd289eb4f27fb0fd1L, 0x11186d319a40da4bL, 0x083f65a5fb9d7976L,
57714       0x30dfc47bd444675eL },
57715     { 0xbcfc5ae29eaadfe8L, 0x25027e54b4d4e812L, 0xab0702df8b533561L,
57716       0xa2b9c20456a6a214L, 0xb1a3df7a3059068eL, 0xa3514b219883110fL,
57717       0xb7be2336c4b78e1cL, 0x17073ce63e2f6984L, 0x86e114a62ddf7ac6L,
57718       0x276192bf07d7c3c8L, 0x5da69e0beb1ae289L, 0x983af17525184939L,
57719       0x9ac52a4d407a3aa0L, 0x1535c7daae0fe218L, 0xe16fe872397f2501L,
57720       0x572a591f54c212cfL },
57721     { 0x4966841909a5553aL, 0x3f054318327733bcL, 0xf9ceb4b23eefd690L,
57722       0xbd3cbf9bf22126d4L, 0x6d9671c02fed9578L, 0xbba597ceca0306d8L,
57723       0xb705ed613d674fe5L, 0xf1d3622b67f33f76L, 0x15bcf3c611cb8c31L,
57724       0xa38467dce53d1aa9L, 0x902fe929f908ab43L, 0x6e3e499d8d15767aL,
57725       0x8142db5c90afd07bL, 0x120c6fbc6c8b190eL, 0x80c8655324919a4eL,
57726       0x65c2cbe1d8c82c3cL },
57727     { 0x684cda20a660bb63L, 0x27dc3b0a86e86245L, 0x76472cf66ba0eed7L,
57728       0x79c162e5679dd158L, 0xb688427708452d44L, 0x829bc6b3413f579eL,
57729       0x92ea15ec95011770L, 0x5e34e30047738183L, 0x8c3ca34973e1d2f1L,
57730       0xa5c4f1dc229bd3deL, 0x783eff1b94ef7ed3L, 0x46db738ddfae7a1aL,
57731       0x4353d72e1a099852L, 0x2533ad58a0dcf4abL, 0xd80550160e7888b9L,
57732       0x831440d53ba77f66L },
57733     { 0xf43e2e32f611b2daL, 0x5d066e29d0fa46acL, 0xe897f3e8820b3c0dL,
57734       0xc45c28e61d3e44f0L, 0x929d7f66dfd27a66L, 0x735b860a101e8517L,
57735       0xea3fce983de078ddL, 0xc9977db5638ce11aL, 0x0488382f48536b3bL,
57736       0x7e0c7a3c64cadfc6L, 0x3cd17f7f82147b71L, 0xe95663cc1b411e3eL,
57737       0x5739ac8f985fb46dL, 0x385399cdbcf119caL, 0x4a985a70e15a2815L,
57738       0x504c3a8a6d5f4566L },
57739     { 0x00b55283b8fa53c7L, 0x985cff38509474e3L, 0x234d241c437ce25fL,
57740       0x29832430e5a129edL, 0x6ad38956aabcc674L, 0xa2dc001d7ee81ee1L,
57741       0x4c23c6b6670b2702L, 0xb35e567ea6e8a3bbL, 0xbc70b3cea69673eaL,
57742       0x85a7a9c3e6e28eacL, 0x2ae684de5537b7daL, 0x5ecac3e56de937dcL,
57743       0xbf2ea6c9f8430422L, 0x38caf7d077fdc520L, 0xc27af0b169f56addL,
57744       0x496e4699c71d21d2L },
57745     { 0xba14fc829fa93467L, 0xc2e376840eb2a614L, 0x659bcfaf4833e09bL,
57746       0xbc8597523686bdccL, 0x40bfd08081f3216aL, 0xc463bda617c081b8L,
57747       0xbd01fa86bb04793bL, 0x5a21ece62cd640c5L, 0x97bf6a542203d5c4L,
57748       0xceb40edc951167b7L, 0xd67aacaf765ba268L, 0x8ba0d9e9aeab51f9L,
57749       0xc14b215eb0d6863aL, 0x354cdcdbe5f06952L, 0x4f2b5ccfcb3744b5L,
57750       0x1338917313037fe8L },
57751     { 0xee68064045003cd1L, 0xfdac17bc44ae2ac6L, 0x4bcd419fde8e5314L,
57752       0x81e34eb9c7cea95cL, 0xbb57762d38f37e01L, 0xecc4cfb0260990c8L,
57753       0x0bc493f950a34a7bL, 0x68074172543304efL, 0xaec0fcb26bc8aa2aL,
57754       0x9e7a9b463b45fea5L, 0x4bb2952e55fbdbacL, 0x50f0c0a60485dff4L,
57755       0x02c5104d4dea4796L, 0xd2cefa09695e3a02L, 0x4c8102b46da1f345L,
57756       0x422eb573f3833fbdL },
57757     { 0xac592eb6a6ad3f47L, 0xb0861f6d9714ba0eL, 0x57c1e91907281459L,
57758       0xcf7c94e264ea5803L, 0x725376ac54b12723L, 0xf2a6ba41dafb736aL,
57759       0xc89e8920cba03cdcL, 0xf2e20cb45b0fd3adL, 0x26ea5a54d66059feL,
57760       0xee63fa8b889df8bcL, 0x40f1c7e166a3f2bfL, 0x09febc9c747312e1L,
57761       0x7d19b9c2727999ffL, 0xa9fbbb4cb7fd2b05L, 0xcfba27d7a0da2dc6L,
57762       0x368541cf2c252582L },
57763     { 0x510d3c9e22799d37L, 0x1b677de5acfa333aL, 0x4e6ae18f080f795bL,
57764       0x69b53c2aafc8dfc2L, 0x797541b60e842dc2L, 0xd5a6f2afac067fe8L,
57765       0xd0208a03bd07d877L, 0x34b473f0654be2f2L, 0xe67c102af515e23eL,
57766       0xb00dbf9d2ac1af48L, 0xe264fa41b6a13d00L, 0x1669786a97e94c11L,
57767       0x09d8cf2d86a586f4L, 0x073bf869c7f927e9L, 0xb89778802241a566L,
57768       0x59a5bf5922261334L },
57769     { 0xe9d1c91e81347191L, 0x186c1abceb969972L, 0x07888767a9d46a7fL,
57770       0xda93cfccdaa7d397L, 0x08bee9f1d91b9aa0L, 0x8267fd78f8dd3c6cL,
57771       0xf93860d094228100L, 0x6a6a71aadadb47fbL, 0x9caa06b7a6156f8aL,
57772       0xaa1b05e039848bc9L, 0x36ddc2372aaa9135L, 0x77e7e079b13f3bd1L,
57773       0x8d0b5cbe4acc5f4dL, 0x04da45f8984cfd36L, 0xf14ef618d3d3e0f8L,
57774       0x467564c143eb799cL },
57775     { 0x8d725904b6fff5d7L, 0x037f33af92dc4752L, 0x9095d5756d20b8aaL,
57776       0x32235fc143baec39L, 0xa2feb4af68a2b9b0L, 0x61c5031894d35c61L,
57777       0xac92b6a2ea877486L, 0x8eb48b15011bc6f3L, 0xa28fe128c79edcb2L,
57778       0x9f71bc0ca5d2a006L, 0xf31677322f15b850L, 0xfe8d728c7a036218L,
57779       0x068f39cb4f81e09eL, 0x1773f0167b7c50d9L, 0x0d0f7adbed6a1e03L,
57780       0x8a0dee164ee984d5L },
57781     { 0x504991bf47366e6fL, 0xb8084d9fe86c3005L, 0x14c4c751a40cce36L,
57782       0xbbb46aa63f1961e2L, 0x56a785f940445e43L, 0xdb8d1b57c91e215fL,
57783       0x6a8e453ec7ee808dL, 0xc0367ef8bbaa1e8cL, 0x310d91f1e3e18109L,
57784       0xf97cfd0e7e20a2c3L, 0xf1e80c84554cc277L, 0xe89bbc1d7b628403L,
57785       0x7778a9663fe0a17cL, 0x9e9db19fc1f00073L, 0x2ce7fe7db6f6bed2L,
57786       0x7b04b5d2ee97ce23L },
57787     { 0x5b546bc782c5faf8L, 0x1a734c5e8eb81097L, 0x3d566861e77851e0L,
57788       0x833a1013e956d51fL, 0xc7351731c3c3c37cL, 0x607738fbe0c148ecL,
57789       0x2ec6f0bbe1bbef41L, 0x0aa2ac6ecfa51857L, 0x072902d766e3adf0L,
57790       0xcd4d5089c622d6e3L, 0x3ae21b23a6dd802fL, 0xe5465a5533886372L,
57791       0xd85119a0a8d81822L, 0x4f14d0323786977aL, 0x515b081c9c7b272cL,
57792       0x1c6a95a4c99be31cL },
57793     { 0xa6b14ad5c2821363L, 0x829c18234d17de1cL, 0xaef5d2c4ccade848L,
57794       0xf412ab3982489e27L, 0x92c9c098f081d927L, 0x6f87bdf475cbad1fL,
57795       0xf4aadab81a1d9fb1L, 0x475a7923b75f3b76L, 0x99dd0ad6dbbba8feL,
57796       0x836f61644b70ab45L, 0x2a46488134bd9af1L, 0x5c91226eba9abda3L,
57797       0x4cec8709e65625fbL, 0xd4b3919e0818e4beL, 0xa5c09c8414f6879cL,
57798       0x72708a0230a864c9L },
57799     { 0x4f33c0b1f34a466cL, 0xa1bae09c7f9d45baL, 0xd70f0fee0e28785cL,
57800       0x824c714690880881L, 0xe2416c2abb043da3L, 0x733da713cec6f432L,
57801       0x2b590649c9793e1cL, 0xdb62d5b0b35c9365L, 0x355eb6e23e5c1b2aL,
57802       0xcfe8b5cebb16b515L, 0x9e081869f709691cL, 0xc865f9fb61a85bd5L,
57803       0xf169d3ccfae103f7L, 0x9525c47373467e9dL, 0x7db55c0b43695113L,
57804       0x7491c74c73265d21L },
57805     { 0x312ed5bf80d2b94dL, 0x1b8ac633ba4b260bL, 0xac86c58cd62219a1L,
57806       0x317ccf6baeb82c8eL, 0x2dfb29ee59ef9cedL, 0xdaa7d898e42bcd5aL,
57807       0x93e295c85974b201L, 0x69e75784d9fc5adcL, 0xd6c4709f012aa3baL,
57808       0x1fda9f37c85d3cb9L, 0xe5487e25d3dd4abdL, 0x00fd4b010b3ba22eL,
57809       0xcb591493c6e8dcbbL, 0xb7329fabbce68664L, 0x6829d1c268906b76L,
57810       0x8bcfd3e574176841L },
57811     { 0x06882734d3c8c314L, 0x95f0b2f111870833L, 0xb937f7c3c068ba16L,
57812       0x5365e0d877924787L, 0x15527e5e1f992227L, 0x0a06964827dffd4fL,
57813       0xd58b3df22f586389L, 0x83446b896af20eadL, 0x09d7970b50746257L,
57814       0xd9e8d2064022a691L, 0xd1e5f8af671ec379L, 0x6f542509057fe91eL,
57815       0xf14dda8152890418L, 0xbd78010e1db932adL, 0x3e18d1e4905a9378L,
57816       0x53cadcf7bd37ab49L },
57817     { 0x1bb5edf75e53d0ffL, 0xd886606c888abf67L, 0x6491b0f812206d15L,
57818       0xb3018345e22b6a33L, 0xaba6794bb173b317L, 0x8c1e58677dc9e595L,
57819       0x4e106482239624d1L, 0x61752e59da55dd53L, 0x018b4eab9e42879cL,
57820       0xcaf6784b491f2bedL, 0x3dcdb9d21e79429eL, 0x3694148510f26224L,
57821       0x106f190aa650ec5cL, 0x7542a5aeb69a9760L, 0x69bd75e9c32d1046L,
57822       0x90849964bf8c62b1L },
57823     { 0xb1390cf65a93c661L, 0x184862649db5f056L, 0x92a93a9da51a1788L,
57824       0x1b0cbb8f6772de9aL, 0x6e67febd7c71487cL, 0xf9b4382d4e62423eL,
57825       0x96fda50ebb5a42f8L, 0xc921b3376089a4f2L, 0x49d32d7b875ec516L,
57826       0xbd86d2cac410124bL, 0xf6862209c421fb7aL, 0x3e1949abf6b7de33L,
57827       0xcdee18f0e93c9268L, 0xd4edbd5e08dc4cc0L, 0xc2b75be473580d22L,
57828       0x3d7f6ffa468cd7e8L },
57829     { 0xea7b290cdffbd5d1L, 0x9d759da6970338dfL, 0x56680b0890feedc9L,
57830       0xbc690af542dce68eL, 0x8519df2bb2ae4d82L, 0x5612467f7f195b60L,
57831       0x659a342cd83c21f4L, 0x55771bf555651633L, 0x5fc68935548ba562L,
57832       0xb54192039492f23aL, 0x567528e39c9c6017L, 0x3f064ed4511e6019L,
57833       0x303f9eb91d16a555L, 0x3e18c4fd2254abeeL, 0x40994d6ffd434e7cL,
57834       0x8fb12d3f6dde74e6L },
57835     { 0x6c6381a2293cb7a4L, 0x453e09f0b87b7e4dL, 0x4f212823078ac3efL,
57836       0xe89ffad0578cae91L, 0x4a2b696a716ba4ddL, 0x14681a14f6f580a0L,
57837       0x1358f97b4c2f1307L, 0x878969962932fb89L, 0x29dd850a268a5af7L,
57838       0xaf771f6dfe239f83L, 0x5f20fd2e4f47499dL, 0x9b643e77867ca0e9L,
57839       0xe7858ecd375981ecL, 0xbe946a5919ab1c97L, 0x4f9303a206ff3453L,
57840       0x3fcc673175d237b1L },
57841     { 0x509debd5df21f920L, 0xfaf70e1fc1401b90L, 0x2429cbfd95a64aafL,
57842       0xf21208552c37a122L, 0x1d4c93f47deb926bL, 0x12f3e4c09fb3f1dcL,
57843       0x56085a595b51bc46L, 0x2a2f5d62f10fdbd2L, 0x60dd62cfdf0cb3c2L,
57844       0x154424a36b0f254bL, 0xc3a5a05d564612b7L, 0xbebe30cfa1f5249cL,
57845       0x24ec69037e62a188L, 0x75f0fbacaf429939L, 0xd41345dcb3fa8685L,
57846       0x645146fdc7151c34L },
57847     { 0xecec633aba1924f9L, 0xbba6f136006326e1L, 0x203757ac7e50fc17L,
57848       0xca531919ef3d8e00L, 0x9545a6aa51dc5a74L, 0x6e21d58fd31412b8L,
57849       0x01bc30057bb1d000L, 0xf1789c696ed1a9c3L, 0x7af2d35f9858fa48L,
57850       0x434d09b98197be85L, 0x1dc0775529aa265dL, 0xcad03be7c058fa80L,
57851       0x92d70a9f54ba14ceL, 0x6dc785056c050a74L, 0x2a7ca4a94d005ddaL,
57852       0x448d3d72abfb9f2eL },
57853     { 0xdc56f14529b33989L, 0x868351bca9ae815aL, 0xb3f456134b074414L,
57854       0x955ce42a3cd9f33bL, 0x13ade4ec5ff6e4a3L, 0xd3aac715a50eaa91L,
57855       0x0c61ec995666efdfL, 0x108a28b8f6a4470aL, 0x402ef584e54844c9L,
57856       0xb825b162d0e2f337L, 0x3dcd131fb46f7cbcL, 0x208178ec96f2fd89L,
57857       0x4d8c5d6725928c78L, 0x285a33df9963c459L, 0x72497175d92a309fL,
57858       0x76881479cb7019a5L },
57859     { 0xba43a11491767eedL, 0x5e11b9ad92bf65dbL, 0xe8a22ce003a5e21aL,
57860       0x636044212a335415L, 0xc2c563b44a9ead62L, 0x4bc06264a0b2aee5L,
57861       0x75b8d5758bf2e1d7L, 0x1cff0ee7d08a265dL, 0x17914e1db0b712a7L,
57862       0xc35925d04b18692dL, 0xde253f4c56cce815L, 0xa479241c9fff0e3aL,
57863       0x50b9d06eddabed19L, 0x6713526059fae506L, 0xf37600fb532ce180L,
57864       0x670eb01c5e5a8626L },
57865     { 0xdf73c0af73cdbb43L, 0xcf08ecc57f2431adL, 0x917805412a1a3845L,
57866       0x69a104f29224ddf1L, 0x4352f38dbeac7effL, 0xfc3b3b4e7c2d1322L,
57867       0xa69e9430b5e4b476L, 0x7d932340975a46f0L, 0x8093899e5d64eeceL,
57868       0x7b821250db2345e9L, 0x235529327f4b796bL, 0x2ee9cc154bb90b1fL,
57869       0x1fa9c8f59112f7d6L, 0x2d0f2f981cbaae32L, 0xb77f03660075166aL,
57870       0x504852e7635dff27L },
57871     { 0x2f0f3ce5a2f392faL, 0x326c076aec6c9078L, 0xad01de9284baaaf6L,
57872       0xb01b16d3cbe8e993L, 0x71305c242d950908L, 0xc66fd6173853af38L,
57873       0x7735140ed3c429a0L, 0x8a31b12a1fabf027L, 0xa0530002058b3177L,
57874       0xabffd9fca9c7deb9L, 0xd05ef69be8667d30L, 0x2f3a7308e9a9e13fL,
57875       0x3f4c9a19b91eae9cL, 0x50d0cee7618ce6c4L, 0xfb24dc405240f8b0L,
57876       0x992fe151f7e90cc4L },
57877     { 0x4454db3138f197aaL, 0xa4ded69d87872f98L, 0x97b427b044f0a828L,
57878       0x9821e1aea31e48c6L, 0xe38cb09fdd98efecL, 0x20b84fa8480cb3aeL,
57879       0xba5bb4a847475573L, 0xa9be080acd50e96bL, 0xc4451e9cef103550L,
57880       0x626ee75fc441325cL, 0x6eea5e9838a5e33dL, 0x7321beb9a2b0abd2L,
57881       0xca92e4849b6082a9L, 0x1dc8168a992bcc2aL, 0x134ecf4b9c8eb9fbL,
57882       0x5a68bfa84c5b71e0L },
57883     { 0xb4ff3b45ff0a2bfbL, 0xd105fff95502f8b0L, 0x14de58855b1c0c26L,
57884       0xed16865b0d3b9d04L, 0x2f5a2453026d3917L, 0x6a22f493f4db3c0eL,
57885       0x4871548ae2418f2eL, 0x6ab363a8509bef61L, 0x91ca1e3ab8cbbbecL,
57886       0x71e0dc984011a396L, 0xff982e0a0d5ca577L, 0xeb40b04581897bc1L,
57887       0x4bc24a46085ad5e7L, 0xd15c8fa0a6337b7cL, 0x56ce6ef7bef1628fL,
57888       0x78acfdf99f5ef439L },
57889     { 0x45bf7f15f8520189L, 0x954202a0c77f61c4L, 0x39edc6b9dfa22e1bL,
57890       0xd2d602671f4a3487L, 0xcd9339294814cc52L, 0xde76a12405e9f123L,
57891       0xe2306ea0ae36b6f7L, 0x53815218b83a58e0L, 0x9862bb76a041231aL,
57892       0xe8da253cbf31be71L, 0x2dfc533237de861fL, 0xf25c93f690ae4890L,
57893       0x66bcb8f08baa6ed2L, 0x6f10ae0f908b4a29L, 0x8cb4b48cb061c949L,
57894       0x0ad92d73d075a366L },
57895     { 0xbfb95fedc2ca548aL, 0x4778c62080cd89abL, 0xbe99154b3466c280L,
57896       0xea3be093d4be8902L, 0x847b799513e681edL, 0xf22a8f4b02f40161L,
57897       0x3ef2cb4d4aeb7fe8L, 0x9adc5151b3aed5f6L, 0xec1ccfd198c31163L,
57898       0xdc2ac17ba3d7d88fL, 0x08fa64d346421097L, 0x5ebf80b794b90bcfL,
57899       0x1b78b4ba0b50a9ebL, 0x1a4fe934279aa66bL, 0x8ef4dcaf075b3cedL,
57900       0x95bbd8a070a6e9aeL },
57901     { 0x59f92495e614bbd0L, 0x7567a887b823e363L, 0xe247c9ecfc1bd6a7L,
57902       0x2bfaaf478e835c42L, 0x314ef4e0aade066aL, 0x072baa635c16d336L,
57903       0xfa429c71e2f0e389L, 0xcac1e5d0bd07d90fL, 0x69ff35ea514f5c04L,
57904       0x893053fcc0554ec1L, 0xab1d86b72a35947fL, 0xe29fb0602aebe487L,
57905       0xa0a10d6ddfb9cf21L, 0xad147059f20dfcf5L, 0x480dc66fb8867a2aL,
57906       0x375a884fc125a919L },
57907     { 0x178cbe2e1217f7eaL, 0x1a161e2a875c6dabL, 0xf7707ec01bdb1a54L,
57908       0x678864a0e4fd73caL, 0xbaebc664d13a0d86L, 0x40325f99c8d30668L,
57909       0xb93ed9c92f1c5950L, 0xfdf36763541e0667L, 0xfd97fbb0b91a6763L,
57910       0x26aa69ea6079c9a0L, 0xc7303c801eaa8c47L, 0xdec75c81afa63c55L,
57911       0x01cdcde24fd12adbL, 0x9fe0dda71968838aL, 0x66bb093b38415379L,
57912       0x268d818b08cb84ecL },
57913     { 0x73dae35841580555L, 0x4fc32e67473d103bL, 0x240c1013beccc1abL,
57914       0xda4099f2b24ee9deL, 0x37b0cb5b9fa8e066L, 0xb5ae04e46438d7eeL,
57915       0x7f7d31642b720140L, 0x86ef4edb339e4a78L, 0xa5e77eed3a7d8375L,
57916       0x883fad37bd707c2eL, 0x816b633a0f979189L, 0xe24c028a2e7a208eL,
57917       0x1171fe3c4435516aL, 0x3eb93b334f5f2bf5L, 0x8419ed4b01b53a56L,
57918       0x8b02735c056ca44bL },
57919     { 0xb89bb464e1019195L, 0x1de4c026f3fc28c1L, 0xac120e6e2bfc3b21L,
57920       0xec71bc5a91bdf92fL, 0x485d7ab40d995bc9L, 0x97c6768ee6491ffeL,
57921       0xd9552d19afbce265L, 0xbae6c7fe8e1b76c2L, 0x167d8281d7e3ad1bL,
57922       0x3e149af95e989734L, 0xd1f0024c8a0c8182L, 0xf571ffdbc3006c0dL,
57923       0xb32ecf7e58773d4cL, 0x5822a782fd3540d8L, 0x5ab45c3f04365042L,
57924       0x400e3aa04b4d85feL },
57925     { 0x473216495e46e4a2L, 0x37a2ed6424136074L, 0x659223b1c60ec77dL,
57926       0x5e13aac3e5e0ac2eL, 0xda17c41bc5107ab7L, 0x65b22ec973c253dbL,
57927       0xff3867b8a5012296L, 0xfed660d50621a99bL, 0xa3c28506c89fc3f5L,
57928       0x3ed350b9f16451a7L, 0x27c3e03267cb586fL, 0xc807c779967185b1L,
57929       0x09c157d44a13009bL, 0x362f7647adaf1f4dL, 0x4a42b9acf3a6a198L,
57930       0x131c3da28da6e039L },
57931     { 0x4a785ff1a7da83baL, 0xf415b425d04f4436L, 0x7c0899bdec03f812L,
57932       0xc58d411a80f5f4a2L, 0x3d32d610fda251b9L, 0x99bb4504cd3b2f32L,
57933       0x198c444bf4c2083cL, 0x60c261af730e83fdL, 0x060ca4dfcb02db90L,
57934       0x0ff7838b9df1e7c8L, 0x6b79cf97c4c690c9L, 0x131514d75d75f154L,
57935       0xa7c074f11cb0e8ffL, 0xb920aac1b2c17615L, 0xde8098ad44aa0ff0L,
57936       0x71d1a46a34545ce9L },
57937     { 0x76178f76fa1b382eL, 0xa0d8ecc3772dda0dL, 0xaa5aab2ac5d4d130L,
57938       0x27d38ba48d72622cL, 0xc5410db6ca3bed06L, 0xf637a588793ceccfL,
57939       0x1f65dafd6e65e3d7L, 0xc3b44a8560a45641L, 0x0f47b3a84f78540bL,
57940       0x824fdadd5e4d60f6L, 0xd8ccf90c17d3b6d5L, 0x008eabdf325fc13aL,
57941       0x3e90d7163648fab9L, 0x3964ff3a24c52d4bL, 0xb95cc416533d0acbL,
57942       0x6cd2699f1167f521L },
57943     { 0x2d8c0b3b12f4f3acL, 0xb03dcfe299d1bdfbL, 0x540034f830f37326L,
57944       0x22dd68937c5a8c82L, 0xeb7093d0cd8f1442L, 0x892795a7585742f2L,
57945       0xe15f282c087adaddL, 0x7bbdc74916ab7b5eL, 0xd30fe40ba58acbb4L,
57946       0x0de417ebe2bac39bL, 0x4b4b19a6c61a04bcL, 0x9338c34df2735569L,
57947       0xe8f0374230ab196fL, 0xfa2efcb86c88c965L, 0x19eee274c7eeb826L,
57948       0x327c063fda345dc2L },
57949     { 0xab399eff5b47cd53L, 0xbbe9869d1943aefeL, 0xe64ecc7b1402a866L,
57950       0xc3e7c2aab1c25a16L, 0xc4216b79022de271L, 0xe58dfcc8366d6a5fL,
57951       0xd159509eda813336L, 0x370400f2130bfb7cL, 0x1be4e05993b48780L,
57952       0x0623a1fe39f3cd22L, 0x72aa22b2eecb4f87L, 0x1af4c4966c27b83bL,
57953       0x7a42a94bda5fa5bfL, 0x9afba82248b01af2L, 0xeb6b9d2a3670112cL,
57954       0x020f19d1c0df6856L },
57955     { 0x37051a86a4dbba20L, 0xb618ebc6db1de5c5L, 0x9a780a19e6525840L,
57956       0x9440302dd2bccc4dL, 0xe9ff023d10285a24L, 0x3b937ee33a486268L,
57957       0xe37ee2f24cd61147L, 0x79fbbfd3a3d057cfL, 0x5fba16d3ccddefceL,
57958       0x916058ec5b231727L, 0x47699ebe720c3adbL, 0x262743868b4f6bbaL,
57959       0x54b0092af18a0770L, 0x99d090ebacca1160L, 0xf757e1ff0c888f60L,
57960       0x79e72720b0050544L },
57961     { 0x632acf252820a239L, 0xb1a3974eaae6b310L, 0xd61fd6ba48c0a1dfL,
57962       0xd2453c395a3ee7aaL, 0x548455a0b980446dL, 0x9f29d97bde16676fL,
57963       0xf252ca0c789375a1L, 0xe961af3e7743a985L, 0x70c79c5666cdbd8dL,
57964       0x14a3854ecbc538f9L, 0x58daa73aa126851cL, 0xe9b5bb452a9f558cL,
57965       0x37af7f83fbd15e05L, 0xa448792738a1939dL, 0xe428b2b59511a056L,
57966       0x001d3ce37015846dL },
57967     { 0xd6be36b9e145b1d7L, 0xf3e3938a009c5664L, 0x2e562e7de7c0f6dbL,
57968       0x951044e6c343f539L, 0xa5ab62b8d90897b1L, 0xb1a1f70b512f797cL,
57969       0x91cdd754750f28e4L, 0xb4c80e2fffb8165dL, 0x65ed39c7594d02b3L,
57970       0xcc12a49d56833edcL, 0xe73694bcf3693a18L, 0x34cc134afcd2c404L,
57971       0x071bd5fc11d40194L, 0x05759047fc585e46L, 0xb3280360790b7a04L,
57972       0x4bb8c6fc40afc684L },
57973     { 0x3120e2ddfd0f8796L, 0x6968a40db133c9deL, 0xfea366c0a9369c6eL,
57974       0x37e5b6d66007273bL, 0x39e4ecf08cb81439L, 0x487fe9cd9febc005L,
57975       0xeb8af4440199b53cL, 0x2f124e3b293519ebL, 0x860c218ac82c9c16L,
57976       0xacd1d6f2709dc590L, 0x5696d54536d50529L, 0xc03f5df959120bfcL,
57977       0x99a3e88d10ffa690L, 0xd4f9cfa56c432827L, 0x2e8fea9e9a135d89L,
57978       0x3699a881b6a77e78L },
57979     { 0x5bca33721eb1c64dL, 0xe9cf3a2df1d28154L, 0xb7e2e9b36537106fL,
57980       0x06c171514f7cbf4dL, 0xcbde416e2058b37fL, 0x82c53a7e8834e9c5L,
57981       0x94dbdfe2e9ac3a75L, 0x795ec6cbc5e67c02L, 0x8c23c25f1426a80dL,
57982       0xee2cd20d6a8d4f9fL, 0x838daa54d3b7c235L, 0xb9e08ec03d7a4d52L,
57983       0xca9475e9781cb473L, 0x7271f39e5ec31caaL, 0x1df08e9f82535187L,
57984       0x4f3a4b03208aff8bL },
57985     { 0x0f7b81071ed095f8L, 0x23e37fa6da226d4eL, 0x8b0f9852afb36d1dL,
57986       0xb114634e07d8e311L, 0xb9634a97e3e0f16eL, 0x2454bb9c421eec37L,
57987       0xb4ecd5dbd72b21c1L, 0xf96038686df20d7cL, 0x9f5359fddf86e0a2L,
57988       0xc43d54fa5ac488aaL, 0x56d714abd1049df4L, 0x13152b3eb020607aL,
57989       0x49be1c187a02325eL, 0x44f24f4a52ae84dbL, 0x9e525c030b5a7b80L,
57990       0x6d874446a6d179fdL },
57991     { 0xd29d07aabe9a42f5L, 0x1fd5316c3781ccc8L, 0x71a75a6d9dc69ea1L,
57992       0x4e19e0df88fee91aL, 0x99c2b4dcf8d44f12L, 0x05f6df9231ae94e4L,
57993       0x27fba876cf28ccc2L, 0x6e1a0f01f57f7cebL, 0xe03f1f34f3fd3b74L,
57994       0xa0edc4a742c1d213L, 0x5caac2707deb8580L, 0x0f5d791faf0848bcL,
57995       0x17f514ad07ac759dL, 0x95a39734904fc531L, 0x95a4aca97bb70f3dL,
57996       0x3cf384c9ff9c5609L },
57997     { 0x700506bace1fc9e3L, 0x49721742676b0399L, 0x2b4a1b8de72bf7b3L,
57998       0xca8602a879b209f7L, 0x90580b90ce26a8e1L, 0x1ef339b7fe24f39aL,
57999       0xb6c5d991629362e1L, 0x51174e1a577b24f4L, 0xf380fcb505e451e9L,
58000       0xf4d97afb148321bdL, 0x099806bb747e5d2aL, 0x85525d65be99a608L,
58001       0x264828d9d455e820L, 0x8c8c5405d8560a65L, 0x3c67e73c71030770L,
58002       0x2b248850ee73df26L },
58003     { 0x2173cde68541159fL, 0x78224c184fb410b2L, 0x07a286191f2ca1c7L,
58004       0x52c207d6a8b23e40L, 0x071a0210a6b2344aL, 0xdb0e587cb5ed2945L,
58005       0x6c56b8ef810fcc6cL, 0x1248c58f62d843b9L, 0x4b90363d74c66975L,
58006       0x6348f7f2e66c66f6L, 0xb2f9d441c126bcbeL, 0xac07f2a373ce49e8L,
58007       0x52486758e81b0df0L, 0xa108b54d1d4621d1L, 0x17261ece74414a1cL,
58008       0x938b3bcc6a3ac215L },
58009     { 0xa9e4a16be4ded340L, 0x8e65fb2a80e88036L, 0x97089606dcd73acbL,
58010       0x1c3a0434aaa657a9L, 0xf304fc5849101b06L, 0xe60fb61ada0bb64cL,
58011       0x818c2aecf5542df5L, 0x7402057656f76d5fL, 0xb566b79092533d97L,
58012       0xae4655e574d6eb5fL, 0x60f7a1b5a55b44b7L, 0x7970179b93747ea5L,
58013       0x8ae7e0e8f2dace56L, 0x9847460784e83c06L, 0x24e8c9ed15307341L,
58014       0x6cff58a5d9e89d6bL },
58015     { 0x508c01b003e51f68L, 0xe1d1f2251d2fe7d6L, 0xf7998d0b09bd8805L,
58016       0x255e907a03e415b7L, 0xd148467d607d9798L, 0x055c3b1e9b453896L,
58017       0x35001013809f50f4L, 0xfbbb2fa6d0233fdcL, 0x0b680b0aff1820b8L,
58018       0xb1d404dc38d317e0L, 0x133d5444ccc8c7dfL, 0x7fa847e66ec13f84L,
58019       0xc33f83d8046e2e48L, 0x3c627fc54863b3acL, 0x5f67f8aaeb936af7L,
58020       0x5fe4ac8f31b79327L },
58021     { 0x581aa4bf8b6f401eL, 0x05db12a3ad5c7ed4L, 0x7b0187266fb07b4aL,
58022       0xfdd11f049c22bcd4L, 0x5454a7d469371c95L, 0x066c55fb99a46eafL,
58023       0x18637c7c7fef96d0L, 0xbafc1d346b83e95cL, 0x55c3859300bb42dcL,
58024       0xdd8dec2b34e7e712L, 0x69c9cfb0b184cee8L, 0x8dcc0c4249a27864L,
58025       0x290d95f22010f2e7L, 0x86e254c96977a420L, 0x20931c89eb2abdadL,
58026       0x81377164121c0548L },
58027     { 0x6266b25e9c5a8edfL, 0x6e1388c21078a7adL, 0x5f02737d4876eedfL,
58028       0x242fa7f962744617L, 0x3e2cfbd9b385382aL, 0xbadad7b102f71befL,
58029       0x562abcfa677d0a92L, 0x573ebd1751fdff34L, 0xd7f658527c250c78L,
58030       0xe0cf16eec47ca896L, 0x8ccd79b067622c9eL, 0x31fc5882f8f2c075L,
58031       0x9232b37ea6008515L, 0x4d7bb36182e8c5baL, 0xbf24735cd2f146feL,
58032       0x79c280ee9cd2db98L },
58033     { 0xbdcc8203f2b48122L, 0xa8c04916b04ac48eL, 0xacf064dc9fc4885eL,
58034       0xab83899782c1001cL, 0x7339e721676de250L, 0x17aa5aea8e1ab820L,
58035       0x24d28ca06bc14b2eL, 0x570c5bb7816b6230L, 0x6c51235ccee6b606L,
58036       0x1b2bf89f183eae42L, 0x3e3af3c69c66274bL, 0xe0b04426b51e38bcL,
58037       0x26dbc58e73e40e3bL, 0x3f9dd578b5be5be4L, 0x9fd9f79152c8f408L,
58038       0x758073a4a9e3ff4fL },
58039     { 0x7d27b0578691ca22L, 0xf206bfd613a2a1b6L, 0xe84bd385ac795413L,
58040       0xc5d18a2a75536607L, 0x2e166de7c8a0e24cL, 0x56d5750c3c474dbdL,
58041       0xdef444c11366843aL, 0x14646e53cf4b8432L, 0x4bc0d030a9fd9783L,
58042       0xbda4c824297ee203L, 0x3d0b10bffd7be6c7L, 0x2d21647608c7f3ffL,
58043       0x06e52599b4fd4c45L, 0xfbab9fa149e9e104L, 0x9342a7fa8661d32dL,
58044       0x3f3e3458faf66aa8L },
58045     { 0x51ec35af951597aaL, 0xb677d4ac49df64ebL, 0x0276cd9c9bf4eff5L,
58046       0x423eca49515a2935L, 0x8a696553fd9bb9c3L, 0xf99ee9dfede1f09cL,
58047       0xb8fa2956199e5f98L, 0xb763875835292c32L, 0x8734eddcfc40e81bL,
58048       0xd82d5e9f65457d95L, 0xc8ee323e30c78d2bL, 0xe77b2e4cc1433d67L,
58049       0x56d9f8073c8314aeL, 0x441eede22a0e2f63L, 0x1e9e17ed6c48295eL,
58050       0x640d20c434c294efL },
58051     { 0x4e9a0b8e3284d513L, 0x074c3545f315053aL, 0xb36e740745acd52aL,
58052       0xd80bdcfc1de50db7L, 0x8d9d47dc2549fc46L, 0x29b6ef13303f07a8L,
58053       0x4e461aca6d4ad4c2L, 0xca8e351dfc9f1b73L, 0x8bc4094d57460e65L,
58054       0xb6302b330f32d367L, 0x69a074b6285742e8L, 0xdfe52b11876c29c3L,
58055       0xf39e4609912bd17aL, 0x8ee40d66349aa639L, 0xb968902ac72e05c1L,
58056       0x0f9c1ca8c0d92816L },
58057     { 0x1ebbaab367433df3L, 0xb6aa534715d3628cL, 0x13a320d897f0c5ccL,
58058       0x72c918cb65e408f9L, 0x4b638854d5373451L, 0x731399a30b4dca09L,
58059       0xcf2567300a3b1326L, 0x5ea60dfa6608b388L, 0x58ad74b07b290dfdL,
58060       0x83202789d7694f9bL, 0x48593db8b6630fb1L, 0x3db47f70c65e3eafL,
58061       0x63949c913e7263f8L, 0x9b9acec6e6e6ff33L, 0x34bd9ba7098a8240L,
58062       0x7e31c12f45d36ec5L },
58063     { 0xbe281d680dfd2dd7L, 0x1efacb0024ab61d8L, 0xb9c3005f94431f97L,
58064       0x660c8dfa959cb3bcL, 0xfdd5fc30cffbb406L, 0x7a4631be7969a10dL,
58065       0x336e309ede13fd1bL, 0x76b3bfadfc947076L, 0xfa91925ddcc72223L,
58066       0x741f0d73156c4ee1L, 0x4f64ee410e2b3747L, 0x86be92d3efc4d93cL,
58067       0xc53b7e03fc4fbb2eL, 0xac196cf5337ca1bbL, 0x4de41a307e23ba60L,
58068       0x1a219c45326d5357L },
58069     { 0xfdcf7ef8aa4db0bcL, 0x2e2318067b6c9963L, 0xc26390673d8a192fL,
58070       0xc0cec2e2ffdc7771L, 0x997c8e35a2fc0edbL, 0x78e10ec182cc6043L,
58071       0xfd0de2cb2b0c8120L, 0x4d6c457f69e57f8eL, 0x953e69b25b53f1c3L,
58072       0x422a330ac4f89cb8L, 0x92ff232995566be6L, 0x73cd502d437442d1L,
58073       0xf04ce590bea69403L, 0x6ac1537ef8030662L, 0xe02bcf77b6d0bf93L,
58074       0x17aaa999bc90192fL },
58075     { 0x0d3d56438e55db2eL, 0x835dee433b946851L, 0x1a1440e55b88462fL,
58076       0xa6ff3b35ea17e27cL, 0x23f99c36dd95f7a9L, 0x7217fdd9bdd672cfL,
58077       0xf400ac1edd2045c0L, 0x94b55c874ff06b25L, 0x0a44a0e50e4a49beL,
58078       0xe8925e91b43b6813L, 0x78bedde1214f96c5L, 0x0f456a4c0f97fa97L,
58079       0xa28fd86ba5bfd267L, 0x3b4b2d8fbe7608efL, 0xfbd5ff8c226474bcL,
58080       0x6b282af0a5f3b24aL },
58081     { 0x78fc025f6341a595L, 0x591c38d6a445e28cL, 0x72bd6e3deb446842L,
58082       0x3f9466d375547833L, 0x911414d3083e16c4L, 0x145d946695a7acb4L,
58083       0x102ddf098fd2fb64L, 0x2a2b2d2d0bfd87b1L, 0x69e9be5c59455088L,
58084       0xee378bf4a80245deL, 0x80b0bd68b2306b0eL, 0x76a545c6c2be9f3dL,
58085       0x429d167b4802c245L, 0x13e644272b412dfbL, 0xb664f529ee8d9762L,
58086       0x6d4f5d2354706ebfL },
58087     { 0x35c8f2b600ba9f88L, 0xfdc807e07bb6d0bfL, 0x0a126d42b3b81e5bL,
58088       0x335ce6cea7ac781eL, 0x3e308e6ff37dcba6L, 0x028dca6263c96487L,
58089       0x72eba57e8818434dL, 0xa9e3d59f79b78a26L, 0xd2f0a7dd2f07aea3L,
58090       0xe0fe467824d05f74L, 0xb20851700116deb6L, 0x9c2a5e9258f37580L,
58091       0xe78bd7a574070bb3L, 0x551fc872b9977d90L, 0x6eda93c440db81b4L,
58092       0x4aaf0b4fd65d34adL },
58093     { 0x9bef25063514c7afL, 0xb09e7dadbc181eadL, 0xef3cae878fa3ec58L,
58094       0xd8dbfab5173b8685L, 0xb2490fc0921d32ddL, 0x4eef386b8bd9c466L,
58095       0xc1cdd52fa061dbdbL, 0x64de989a25bc04dbL, 0x06f9836b85728636L,
58096       0x11a5a8048be44aa0L, 0x16dede4e097018c7L, 0x72aec577b2c11fb1L,
58097       0x144dade1a721ecd9L, 0xf99c526bd6ebf3a9L, 0xa1d4165b1c2e14d7L,
58098       0x8b2cbd3982bc6337L },
58099     { 0x28ec1bf28a52e991L, 0x0ba202f6cf9d42ecL, 0x8307d130c634ea45L,
58100       0x3fc257b3c5762b9cL, 0xbd3298d1487c2a2dL, 0xca14f1a7a319488aL,
58101       0xc70ca93b06ba06d2L, 0x9aa3f4b3ee405e89L, 0xcc64eeb335deeae7L,
58102       0xd155f57803bf1d4cL, 0x041ec0b545616bfdL, 0x23df80e6086e33f6L,
58103       0x399a79c8f0243cf5L, 0x86c2824e874ccd58L, 0x220eeaec8fc5c831L,
58104       0x57e283047dbe3670L },
58105     { 0x6e60b698fbcdf666L, 0xbdd06a998bebb1d2L, 0x4044adba80498436L,
58106       0xd76bf75e522bc88dL, 0x655c4b9b28423b20L, 0x65c0f49253398a72L,
58107       0x76d4f2b70ca37601L, 0x469899252030fa5aL, 0x96b37e87b6054705L,
58108       0xef96f73153de1b2fL, 0x5ecbbc8cad54ef05L, 0xeb289d0aa93617b0L,
58109       0x3ac0fbd57cba217dL, 0xd0d3cb5619d4a2d7L, 0xe8bee9d4c91d6063L,
58110       0x4f12e037696ffda6L },
58111     { 0x4ccfa42215f1a610L, 0x804a5c553786519aL, 0x1246a45473838134L,
58112       0xfa15b4844b284e2aL, 0x36464c65146d1320L, 0xfb6ba88c70a8a0faL,
58113       0x74e7cee793c4804eL, 0x8c34d22cb95ae16aL, 0x9d9ed89ff9c1d4ddL,
58114       0x61a0866d32025371L, 0x45b232b29bd6444aL, 0xf888e92cf277bab1L,
58115       0x73e69c6ea9448b02L, 0x1a496ea95b521ecbL, 0xa8f78ea75858afb2L,
58116       0x83d2333eb1266f91L },
58117     { 0x1c63328867b478d7L, 0xa1ee1ae150a2fc9cL, 0x05b6ab3018d2241bL,
58118       0x69f1f288893cd696L, 0x159d6660a8117a87L, 0xe812011970e73d77L,
58119       0x528fef0093f55f0aL, 0xb3978db8d854dfb2L, 0xd6b43ef6f45d9fbbL,
58120       0x17de4bfed5bee397L, 0xa01e0f596bf76dadL, 0x28b2280e3d40754cL,
58121       0x8edb6122f8e86ef3L, 0x8226b6afb7d1e586L, 0x463532152f40a55bL,
58122       0x7362f13ec5a31621L },
58123     { 0x792eb27c73c0c430L, 0x8cc0a65fa51c3657L, 0x50a5ceced2194f1bL,
58124       0x18945688814b4947L, 0xbbf0a81a4b6fbbf4L, 0x376f4f58f0aa8608L,
58125       0xd9361d683987795eL, 0xb6510cd8e3a8d0d5L, 0x63e2fdbfb6c1a455L,
58126       0x2c91154eaec891f9L, 0x0eb1e715ff568f64L, 0xe7af9cd72f2b399eL,
58127       0x1fc39bac89f0bf0bL, 0xf0861d9290983695L, 0xd9b16f02da0a20a8L,
58128       0x2f10693fa38c0eadL },
58129     { 0x07a6ce910c06ded2L, 0xf974842f2fd9087bL, 0xe468bfd6a9f635a6L,
58130       0x04b618911ed60626L, 0x1fb2f89f369ee548L, 0x9cbd1113dc96a201L,
58131       0x6759acfe10d633acL, 0x64ba66fc8faa629eL, 0xa686ae4947f38283L,
58132       0x828c3a05d59cda99L, 0x7c7afb1408ea2f6eL, 0x2551c8e4af3953c8L,
58133       0x5b53d2799daa9e4fL, 0x1eff68d4ad6f1940L, 0x2775dbdd96437cdbL,
58134       0x985f83e44fe7a043L },
58135     { 0x89603c16eaf45294L, 0x70131160c24b5751L, 0x4c11201839d6b52dL,
58136       0x7079cf02ed943340L, 0x0c5b028b74f41b68L, 0x3dc3f0769c8ac1e1L,
58137       0x5ac5eea3f8b24f0eL, 0xee6684bae34c5c22L, 0xa5259e639abc452aL,
58138       0xb07d2cd1e9df45ccL, 0x07019c931a443cfaL, 0x68fddaa992c003b3L,
58139       0x2d9f179c0d8cbc2eL, 0xbbf15a6f1e781ca7L, 0x54d779d550dcc799L,
58140       0x0c88e5400fe962f1L },
58141     { 0x84f71a6ae8f44357L, 0xf75b4bf63a3cab6aL, 0x334c9d9e5aebc680L,
58142       0xcecaf0848a753ef2L, 0xe28014c1075e3c8eL, 0xbb9d5a38f74f8d3aL,
58143       0x75988464b80e32aeL, 0x7b328e6ff2bc3792L, 0xebbb1fafeed0e197L,
58144       0x674eac955a33065aL, 0x8c19fd8f922dbce8L, 0x8c17ae85987b907aL,
58145       0x89f336273b3a2cd7L, 0xebaea019fa87772fL, 0x4e5de4993a25ced6L,
58146       0x8e2560b8af110715L },
58147     { 0x56d3746c3141aba6L, 0x45a1079fbab2cf9eL, 0xb63828319cdd27c7L,
58148       0x222376329dfd950eL, 0x1e0b15cd3a9408ffL, 0x49a80200b1160118L,
58149       0x2719db5da383bba7L, 0x6078340a651046d5L, 0x8929d4de97523b1fL,
58150       0x4040345c8e0a28abL, 0x61275ac20adf09c7L, 0xb41ab2652331d611L,
58151       0x230cc77c5391ca50L, 0x88be0c928f922315L, 0xfef3d92b92fd9a29L,
58152       0x59005f228324f2e5L },
58153     { 0x6bb1750c3c4c1c74L, 0xbe73aac0e966fb79L, 0x85a75d9266c5973fL,
58154       0x8c97f9323a8656b6L, 0x2b7043b150446cdeL, 0x548916f73ff3897fL,
58155       0x913dd01cb18b72b2L, 0xd0a751f1488c0de6L, 0x191757148558ca58L,
58156       0x9771430144a663daL, 0x2df190acb0e08618L, 0x0080fc0cf39ead9cL,
58157       0x0085ac6e17382da1L, 0xe97918513262a338L, 0xe4495936b43bae8dL,
58158       0x57a78e26d783df6eL },
58159     { 0x161b346f40dbddd8L, 0x2b49a9279410c3acL, 0x8c5427831886cf3bL,
58160       0x72df323233b93debL, 0x9c8d59f540df579dL, 0xe5d7a67dc20ef500L,
58161       0xc46b391867f08643L, 0xecfa2445ad96adc3L, 0x658f589b0c4544d0L,
58162       0xe6ec9301e08417d7L, 0x6ca5ef6ac454e288L, 0x4191048fac0f462dL,
58163       0x852407d808d8a036L, 0xb4c533a7f6d35b7eL, 0x3251e4128f6ada87L,
58164       0x1ca370c581c472e8L },
58165     { 0x94bd5171a801b68aL, 0x7312879cfd1998b3L, 0x4905aabf41163202L,
58166       0xb5fe87f4f5b01fdbL, 0x78de523a9cda128bL, 0x0bf161a1c7bd31f7L,
58167       0xb5decfd023904c35L, 0x224b2882e188f12dL, 0x0dd2801df99dae74L,
58168       0xcad467b508cd1cd2L, 0x6c311c3dc0867e39L, 0x71a117202b425072L,
58169       0x83bf464e2efd9003L, 0x53d0448a1dbd3b03L, 0x32db52f4e6265baaL,
58170       0x2584b34c4c33ac79L },
58171     { 0x3cb863892aeec688L, 0xa5e740ba45fbe523L, 0x422e71f7fd60b5f8L,
58172       0x455d185c4874913dL, 0x04c2bb36fa17d80dL, 0x3f271854ac054524L,
58173       0x76dd3045a8b9a657L, 0x2e42c3e162ee7cc8L, 0x002667064df6c7d0L,
58174       0x5927dd51dc7cb488L, 0x6b3faabe187897e0L, 0xfe6ad22ef2d5737cL,
58175       0xafb60269ff51a9ffL, 0xe1c8354569807baaL, 0xacddb6ff951ca49aL,
58176       0x7e8113743f9ab085L },
58177     { 0xad722a8b830a88b1L, 0x91918ea8ce1117e1L, 0x3e02d0b80409b47dL,
58178       0xb53812d36c46d1d3L, 0x2fd09db0e589669cL, 0x9845cd0615b0cd5eL,
58179       0x0c1c155a2386c453L, 0xda774de5f5ff43cbL, 0xbb076b98e391c0cdL,
58180       0x97d71eff5004f286L, 0x23e0b46caeec0bfeL, 0xe453866732a1ad94L,
58181       0xfe0c9f81396da422L, 0x6376c1a263db2bfeL, 0x001c7918ba56fa91L,
58182       0x436b8c64df8485a6L },
58183     { 0x88117e9d8ab764bcL, 0xdfa61e94a077df84L, 0x5a7765d30c18eebdL,
58184       0x548916affc9451dcL, 0x01a52e33071a347aL, 0x633b95deb23b41dfL,
58185       0xdd7d68c943c8c286L, 0xe4f9d41e18d97068L, 0x79908b908c92799dL,
58186       0xe614148ed47394a3L, 0xe5018517cd51e53fL, 0x5060075e0243dcb6L,
58187       0xe5dcde6217954405L, 0x6f7c90e1537da5ffL, 0x1df7aae40768cb66L,
58188       0x5266ca9e6dbe95e1L },
58189     { 0x84ddee6d1386b3dbL, 0xf9e4af5a7c38e540L, 0xb3418440eb04f49dL,
58190       0x2138a1e8fde5a4fdL, 0x3e6e692430257cfcL, 0x3519c6e319fd70c1L,
58191       0x8f34e17486c31ff0L, 0xf1e298fd940ce1e8L, 0x6fb8cb1d14960d7cL,
58192       0x207c13472b2f3bffL, 0x899a20b4146ef8ffL, 0x7dec362b7bd3e220L,
58193       0xa975044e626bea27L, 0x0f32b4494fb4cb67L, 0xc17a09201fc6703aL,
58194       0x41f325b99cd84a2bL },
58195     { 0x312ed513ce2843a4L, 0xe748498e00728afcL, 0xa8ef28224d864ce5L,
58196       0x34064704a620083bL, 0x5905e1d94bed338dL, 0x2a578cb5063e7b38L,
58197       0x98276d96289e7bb9L, 0xdfe2dc47f17b7341L, 0x5923521f1dac8944L,
58198       0x3db6d28d23400aa7L, 0xc647705ea761ba43L, 0x8947ba6d9bfd07ddL,
58199       0x00f2e3ac242ca8fdL, 0x49ef4670eb8c3468L, 0x7db3d37bd9aa18fdL,
58200       0x56b30fb6e58cea9eL },
58201     { 0x07ecdcaacd80a428L, 0x7af922dc8732c891L, 0x20d887983ada441fL,
58202       0x3bed9a44924b008aL, 0x2123533cb2e81c3aL, 0xc34e407565f807d3L,
58203       0x0bfaefa51f2faecbL, 0x78b634a5ade8a88dL, 0xc4e0b7f894392a91L,
58204       0x3092237790bb1cd8L, 0xdea9b4faf87204aeL, 0x3edf81f585d3cd83L,
58205       0x58f88c51c6523a79L, 0xe472fb8b17c0d969L, 0x899081e5dccf7f07L,
58206       0x1353cc5758bdd146L },
58207     { 0x28a5649739bf6e18L, 0x59e8b5a2649b89c7L, 0x8d9434a0dce8b8e7L,
58208       0xd935bf512047040cL, 0x2ab3a1646a7b8e82L, 0xf1583ed627f81294L,
58209       0x8416a7e072d67297L, 0x49685d86cd39e42bL, 0x8a797fc7958ddbadL,
58210       0xa558f928155ce6deL, 0x75f4e570f8a36235L, 0xbc69cfc052877ae5L,
58211       0x8f4193a9a6b16ebdL, 0x8d1df43cbb1cc1f1L, 0x723a830e5a21e789L,
58212       0x3ec2185df451df58L },
58213     { 0xb9d4c7d71f0bc2d7L, 0x6982c6cc6e51d412L, 0x92e02d93a09f80f6L,
58214       0xb7dd2d25047ae09cL, 0x3503149f37f351f9L, 0x69d49ce1c77850beL,
58215       0x60242acb12f0d2c8L, 0xba188c567bc28b9dL, 0x8e40612106bc0550L,
58216       0xb0d84b1f8d7d4329L, 0xb4a67ae7d38951e0L, 0xb527c57b8bc97607L,
58217       0xbc93c5f35497aa72L, 0x5f1de8cc39bdd666L, 0x3087dc5ce9d447a3L,
58218       0x89b356b6a211abe5L },
58219     { 0xed6db0afdfdcc837L, 0x0fb80baaa871b7a9L, 0x413abfc91c1d4b72L,
58220       0xf5b56bf7adac9e5cL, 0x5664a2da8b8657a3L, 0x11b04f720e41d94eL,
58221       0x63e11d2637433658L, 0xee628ecef426daeaL, 0x011619c9cb162dc2L,
58222       0x9cf5817f87648643L, 0xe1bb97025584bc86L, 0x2cc27cef00bf7928L,
58223       0x4ef3a80edc60eee5L, 0x7e1202be87adc2f9L, 0x656f18e08a0d4f52L,
58224       0x39c4f10d57c5d126L },
58225     { 0xb3a9b68ce88aecd3L, 0x555b0918a518aa9dL, 0xedc1cdad4bd4ee54L,
58226       0x79b68b6702068d84L, 0x7dac80d0811ac72dL, 0x6d1e6d35a81a0a78L,
58227       0xc841e9ea3bd16283L, 0xa7bc1775894c4444L, 0xf2b63725f1aa1202L,
58228       0xbec7767ec7d4c556L, 0x2817ebb3d46ff51bL, 0xfde5be8d73f7e339L,
58229       0x44c6c9775aed24c4L, 0x0b9a1707b6e579cfL, 0xcff164789069fbccL,
58230       0x414b542d49152b00L },
58231     { 0x33c31e58606e173bL, 0x5b7f4e1b90e6713aL, 0x425fb512debb20afL,
58232       0xc788c61705120e70L, 0x3ef056029013e4ecL, 0x9f9d35ac81c6e6d7L,
58233       0xe131e88f9450690aL, 0x708f9b3244af082eL, 0xb2e4d66c1ba2aea9L,
58234       0xaf1f4a6e740db29cL, 0x74ab9248d1843007L, 0x13338ef8ed556a6cL,
58235       0xf48e623e270d17a6L, 0x3c7362fa9608f5bfL, 0x43977874444e8515L,
58236       0x52678d6ae00b8b2aL },
58237     { 0x5dff1c59df36aeb4L, 0x52d6653ca92bc0abL, 0x0e03f496927a5f81L,
58238       0x8509d4142dfd491fL, 0x258c2c52a571f89bL, 0x2bd6180493334485L,
58239       0x1a33e94f3f7d9e09L, 0xfab418d32c1bf906L, 0xf39c490e5aa5695cL,
58240       0x0e41196ef6d2d7ffL, 0x3ecd40750f7948a9L, 0x4b58f9b2d3053b4fL,
58241       0xb8ee842a5d9974c9L, 0x23a59c1dbf22f682L, 0x045ac614c8efcea6L,
58242       0x7040ba5bc10ceeddL },
58243     { 0x2c364f81515a1a96L, 0x31a63503184327e0L, 0x0a0966501ad93d4fL,
58244       0x9d7694f1273b6173L, 0x8886d876d2cda9d2L, 0x1e01a7422814c177L,
58245       0x3492276b8667696bL, 0x2fd4f0c65b25f006L, 0x6527349ffb294c4aL,
58246       0xc1fe0d8ade1d336fL, 0xaf9a23e8e7e3860eL, 0x97d2b721b774c31eL,
58247       0xfac3e5824365784aL, 0xff2dff4e70f4eaa3L, 0x3d281e1afe873248L,
58248       0x9043a6d60bd1c9c1L },
58249     { 0x1511a0fe766c7937L, 0x1b2ded5cabbc3be3L, 0x2ac160cce00888acL,
58250       0x928754bd616200f3L, 0xb801c83d34a2ea06L, 0x8ad7a03a9cbe106fL,
58251       0x996b0822cedfcd94L, 0xc3c3463ae4069880L, 0xfb12ea4df597f663L,
58252       0x2c8d383440c92af9L, 0x79bc85c64e8da154L, 0x95771fa2db4e801aL,
58253       0x7bd2c1381e3579b2L, 0xe45c75dfffaad078L, 0xb0760a3cb73eac46L,
58254       0x26362b483a125f35L },
58255     { 0x25c68d28eefc3e89L, 0x2d0ee87769e9ee71L, 0x8b07bb86af5e4b75L,
58256       0xdb709072cb86b333L, 0xfd3d20eaff552bacL, 0xa5eeb2b14c0da1e9L,
58257       0x391f688a44f97145L, 0x21fbd3101e06d485L, 0x45e4f2a5bea9cd49L,
58258       0x7b60d464a7bf21daL, 0x193f88c8054d5471L, 0x5ace53d1bee0f2e9L,
58259       0x92c26563c1439273L, 0x9c86e0b296c6b5eeL, 0x452fe23109ff59baL,
58260       0x2e952b20555c935eL },
58261     { 0x2a846bcad75f886eL, 0xe68a5dbed43dfc58L, 0x103e45b6007b1b86L,
58262       0x580e2ec9355ff2b5L, 0xbc702f26a263ecc9L, 0x2835b386181e5e33L,
58263       0x025113ec6c122076L, 0xa5c26e3a7fbd856dL, 0x8ef83fb39d6ebcb1L,
58264       0x7aaa53f2a44d2fa8L, 0x7c14ef3353b1fa97L, 0xff604a1117559a30L,
58265       0x2bcd96b0b09377e0L, 0xa5c14896db2f0273L, 0x1c0a84c9eb53ef06L,
58266       0x1236d01730378e4bL },
58267     { 0xd7481c8fc084373bL, 0x29ae4768646097aeL, 0x1300dfa0613bc34bL,
58268       0x3712714c934bc2b0L, 0x865246290e2be7e2L, 0x554fbb9fed010800L,
58269       0xf0ec0b3842314576L, 0x65baf594330a3282L, 0x3bdde1a8706ef817L,
58270       0x7d2c727dba7530e9L, 0xbb0c5d6674cc95cbL, 0xb3fcd3652438906dL,
58271       0x19881941d14658f3L, 0xe616f5556c97f0e9L, 0x353c2d854b9ec7eaL,
58272       0x02a48014620cb56eL },
58273     { 0x11d6d23d506ccd38L, 0x229a1c549059baa6L, 0x717c9c2769d011c5L,
58274       0xe87e1b46d828937dL, 0xf5d63bbb83835083L, 0xf0a7b427aadac258L,
58275       0x99ab26bd9f154d1fL, 0xdec0ffbf8ec955fdL, 0xee957c6749fcb880L,
58276       0x32395dee1e0114deL, 0x192a64b7369f46c7L, 0x4304466091eb2599L,
58277       0xbe2da887a2e8c3daL, 0xa44e2c25c3556d18L, 0x31390414b55f75f3L,
58278       0x1d8bde6f8f217fe0L },
58279     { 0x03cd39f8a2028924L, 0x6e54f19cb06ecb9fL, 0x862bbcb7d6f05846L,
58280       0xdbe067165a060776L, 0x9397c97ab10fec10L, 0xf42138266f1bb65cL,
58281       0x414deccba672ba38L, 0x594d4d43f88b05e6L, 0x7993f57aac94d4d1L,
58282       0x74fc2a6abfb17638L, 0xd8196b5bb6fc655aL, 0xdc375c84ee8d2139L,
58283       0xb9b00a02360d3a26L, 0xb36ed35cdeb93b87L, 0xf565b28bcc83209eL,
58284       0x349c6943c61013c1L },
58285     { 0xd1b394444de6c88aL, 0xd5c2c4714700207eL, 0xb6f458a221c2b780L,
58286       0x749f75640850993eL, 0x400ba579baef0c18L, 0x2d742938737c70f0L,
58287       0xc5a8e2ec21467ebfL, 0x243a666e5337f453L, 0xc991f1c7ed0bd50aL,
58288       0x3a7f3e90f4bd1f91L, 0x96089e8a5f0e129bL, 0xd0d3a17707389635L,
58289       0x9cf842d527182ac9L, 0x211952990817c5c2L, 0xa32f327e87255769L,
58290       0x056587ab89c2d8faL },
58291     { 0x008562ed1ce4733dL, 0x5faff7cb98e51444L, 0x5f03021fa9ab46b9L,
58292       0x89494c5eb61a8c13L, 0x57c9503636b35976L, 0x6be84c8f2ac2d2f6L,
58293       0x0e5b34d89bd2703eL, 0xc4ad918f7e872abbL, 0xc2a89e9fc4052ee1L,
58294       0xc2caee3f3190b51eL, 0x58fd14376fff254fL, 0x6f3c0d68883e0972L,
58295       0x63d0a0e90fb15438L, 0xc438764bf6caae00L, 0x815f15653f1d0f6cL,
58296       0x1b87f2edb86cdbdeL },
58297     { 0x35792bbb2b0b15b1L, 0xa3e4b5a7ce6ba779L, 0xfbacffd9dd8f3779L,
58298       0x005450bdc298d1efL, 0x0e3f5556c47031c6L, 0x0770f07a95d68066L,
58299       0xce3e84e02d1052c2L, 0xb050791e7aa8cc54L, 0x4d621e73ba3223a3L,
58300       0x87b9b94d39632990L, 0x8df9cb477eb8056dL, 0xe2430de8edfca0ccL,
58301       0x374bf4169712a0caL, 0xbe3f3c7788848a99L, 0xb22b87b1c4a3e59eL,
58302       0x8e0227c43e95bc23L },
58303     { 0x000e22a83210964dL, 0xdccd5df5ff056eebL, 0x02173a1fdaf1ead7L,
58304       0xd02833e067cdcae3L, 0x1cc574cb8bdcc90cL, 0x86eca7143224b4f5L,
58305       0xd00e603abb3f8298L, 0xb98ece1b0c1a8debL, 0x228a46e4378c261dL,
58306       0xc6f9dd0da6165e5dL, 0xb3ae38994b7ef0e2L, 0x3a3c16b3bda9f306L,
58307       0x5e9a26d338a084dbL, 0x528e59935394e950L, 0x848ecb114ea206bcL,
58308       0x14b15ab540545d6eL },
58309     { 0x0f6d86c9664c59a2L, 0x3dfe2be160fd7aa5L, 0x33f9b5699072cb8eL,
58310       0x5f2325d98176a7e0L, 0x79a0d4e74587080bL, 0xa4ee0def0d5d4e05L,
58311       0xc0ad9ffac87b28e1L, 0xd6f18d2f3f09b4eeL, 0xcc896ae7292e9d87L,
58312       0xca88953d6094763cL, 0xdbee97a818fbf9faL, 0xdf20e0e94b63d701L,
58313       0xcbba6e3047ea722fL, 0xce57e1ca612b571fL, 0x1e16ac76009a55f5L,
58314       0x742bbed8c4389e2eL },
58315     { 0x23ea86dcc1dc2c73L, 0x4bbbfd5bc1643abfL, 0x07f8fa1f24d8ca1fL,
58316       0xde68a6e08cb5cac7L, 0x7d54c64b54e66a7dL, 0x789dba22a9b7ad78L,
58317       0x4d88d540e364ab94L, 0xc8c2e02d1f72e011L, 0x4c82605746e2a278L,
58318       0xe6c35bb34b187c7dL, 0xed8b3dfeeb8fe0c9L, 0xb6bc34e87d11e415L,
58319       0xb3908bbfb865c7f9L, 0x717d1ce6e1ecc17cL, 0x151e3308f7cdd69bL,
58320       0x97bd5a14b5c94124L },
58321     { 0xe01c62fe81e82861L, 0x703d4b6ddd42c40eL, 0x7e52e55be65e91e5L,
58322       0xb8b493745abbbfddL, 0xb4f15f52c72a45f4L, 0xce8435a8550f29d8L,
58323       0x9df76b9b582de75fL, 0x52e84c5fa20c8b96L, 0xaf77d2d10a8a0af4L,
58324       0x0389bbd8ca6013c3L, 0xb0d9b9ba26f8305fL, 0xf053e8480cec8b9aL,
58325       0x4d63367affabda18L, 0x50f53be4a6424c2aL, 0xf892c58c864fba2eL,
58326       0x317c6d3148cc5469L },
58327     { 0x0c3525b02cb7d42bL, 0x55240bc9310facaeL, 0x8d5d2022ff20408fL,
58328       0x6b01402fe0c10ea0L, 0x7fbef68a718eb23dL, 0xa0146b5a41252a19L,
58329       0x59afce48110e0d6eL, 0xe9a1d27f022de181L, 0x6db96d16dc3f49daL,
58330       0xfc1ae3f5efbe4008L, 0xf9d70641eccbc11cL, 0x49022279525f8636L,
58331       0x3769796ac2763c30L, 0x9cc3483c1d90630bL, 0x451651f0ee3d3f17L,
58332       0x6ae597399da0b8fdL },
58333     { 0x57b13bc7bff4d2eeL, 0x2075422930b173d8L, 0xb6254bd50794936cL,
58334       0x1d5f232a5efd55beL, 0xc06f4a854e0c3389L, 0xcf2c5b598e61f944L,
58335       0xc564861ffd5f87b7L, 0xee261fb15a2afa4cL, 0xb0ff72262d97a774L,
58336       0x1a89ae22d6cf007aL, 0x28880534d346f214L, 0x8fe73bff97b6497eL,
58337       0x8a8595b2fa2afffcL, 0x9ef9cf3ef151a726L, 0xa84ee5f1e744b82bL,
58338       0x6649048dbc63fe72L },
58339     { 0x91b7bb781e8b760dL, 0xd47b0bd825aadaa0L, 0x81493d9ffab5226fL,
58340       0x4a6dd226bffc148eL, 0x5a032f8aa29be3dbL, 0x318dbc7034b0ab0bL,
58341       0xdcccbfb57d654868L, 0x8506ab379c581e46L, 0x09136a6e2830ece2L,
58342       0x48b79356cf6c80c7L, 0xfa176377ef6b1e86L, 0x2c9c1cc183f0f1c9L,
58343       0x96f0526d16abedddL, 0x3e0e98e2a93b0de4L, 0x6f2d7ada0f13873aL,
58344       0x4eb93b5cf3fa49ecL },
58345     { 0xbd89f7e5e11fae32L, 0xd13d74f5c4023f51L, 0x1b0014df491c3f6fL,
58346       0x1d849a57555279b7L, 0xbb9e889705ba0068L, 0x82222419c13ca2caL,
58347       0xafbbb685fd33676fL, 0x931c3f5275878a2aL, 0x12aeefefef3d5173L,
58348       0x189a5cc8bd8a6878L, 0x82cffdb3d99f0c16L, 0xbf565406a19d48b6L,
58349       0x5605e223e9c6c4e0L, 0x53e781de86804172L, 0xcdf5c90bc7001cc8L,
58350       0x2b582d937c043f68L },
58351     { 0xa1165c8281abc2aeL, 0xa73380f5e2b69ecaL, 0xc097b3d207fff66fL,
58352       0x5d60382654776506L, 0xdcbac9f3b57fa21cL, 0x78750db4c98dbdd5L,
58353       0x85e21103d9eff32aL, 0xceed172c2f11c41cL, 0xa8e392649e348c09L,
58354       0x71cb936b831eddfbL, 0x915c3d06f50864a3L, 0xfe8e33cde93acfcdL,
58355       0x4bee10d7b3f2f7aaL, 0xc1d8eb48eb7cee9aL, 0x4fa49ce3fa574afdL,
58356       0x78615109862db4c0L },
58357     { 0x3fe3f4807ae72c21L, 0x631aa144fd0f0da5L, 0xc76ee1e8f8c3a454L,
58358       0x379ae09451b4f1abL, 0x2a3a4397d7cdbb24L, 0x7a14cffe82bd5fcdL,
58359       0xbbe4ed12f427ef5aL, 0x9b0a43ee284d3ccfL, 0x57b78b938eec6e1eL,
58360       0x18d404e467b8e87bL, 0x0c8adc0534374c20L, 0x643736055428deb5L,
58361       0xb4d80ec0c3afa2cfL, 0x6d51f93c3aa956f9L, 0x9f9a28ab84161c68L,
58362       0x540b6bb76bc9c025L },
58363     { 0x04e1734c321d315dL, 0x4ef56612d86e05d0L, 0xeafae145bba8cd81L,
58364       0x1fb07a49acdc789aL, 0x6a21e9ad5877570fL, 0x2e4a837eb9bc53deL,
58365       0x436db2931d6298ebL, 0x43afbc78ea362f45L, 0x2a973d97aabf6585L,
58366       0xdce7dabe0c924d60L, 0xf69d98f07cadf0e9L, 0xe0b505a175020538L,
58367       0x3db7d1a34461cd29L, 0xe1c287765e20e818L, 0x2ca2586752dd50f6L,
58368       0x897cab1492e0388cL },
58369     { 0x59ed38130d8bab8aL, 0xc11d364ca438200aL, 0x0687bf2c40581415L,
58370       0x86ad0d3a7ac89674L, 0x44928105b97411a0L, 0x74984b11f383371cL,
58371       0x70d2ed840d1a831eL, 0xd883628b6c912fe0L, 0x44f8f7fb14fa88d2L,
58372       0x564f2a4dcf0ac93eL, 0x82f629aaa6c24fa6L, 0xab906ba3bf6cd949L,
58373       0x2c822e6720a5182dL, 0x2ff47dac30eb93a5L, 0xdc62c4a4fff673aaL,
58374       0x64b00763476b0ec5L },
58375     { 0x1e3f533eb3c9a404L, 0xb1db7f73b7ef9952L, 0xc7f13e296c253693L,
58376       0x7ce7f4c40738eed4L, 0xccfd3b33ce26cad0L, 0xd878493501ec5cf1L,
58377       0x3f8fc09ddc084e01L, 0x217cab32c39b5acfL, 0x42daf0bb9ef5551cL,
58378       0xfbc76f56e1217a95L, 0x80178b12c237002aL, 0x0b52c39fb070a293L,
58379       0xe3925153576ca964L, 0x2555942419d68e36L, 0x291fb82c09e50e84L,
58380       0x7dd22ea66618ed8cL },
58381     { 0x7ffe844b49cbb3bfL, 0xde0cc7045562fb25L, 0x1e6ee5379f5a845aL,
58382       0x956d7f26e51277fcL, 0x2c75d4b930635718L, 0x39a1489296957f34L,
58383       0x8cf4eb3282e5742bL, 0x6b0d3ddd83247b72L, 0x67a9f633201a4237L,
58384       0x416403c11414a485L, 0x60afd447b6f6a916L, 0x95f94930dac6f790L,
58385       0x685ff94bbd3b9d82L, 0x5c8f98fc51cadf0fL, 0x9559c88ab13b7489L,
58386       0x31377c665f18fcc8L },
58387     { 0x35c5de097dcfb35fL, 0x2dccca9f01cc36f8L, 0x7e93e85d7576cb63L,
58388       0x0c2dd48af7b4b375L, 0x9d95cd4fb09a19b5L, 0x752ed15971bfe607L,
58389       0x439880cf2596dad2L, 0xe52efb5369e90a6fL, 0x4409766303d3e60aL,
58390       0xfcf364faa95070e0L, 0xd8f993b605624dd2L, 0xb35a982400d5e467L,
58391       0xe289d0240c8f4524L, 0xef45423c648a0179L, 0x3a5fd695587edabdL,
58392       0x3dacc50ca11e5271L },
58393     { 0xcb3e4f946499ae4cL, 0xa46dcbe17053c527L, 0x807f5ce9be782e8aL,
58394       0xb6c64d28d8481e45L, 0xf35e4518aa286fd0L, 0xf7b7b9badf1cdb49L,
58395       0xf3fb6210aec23eafL, 0x0a9ba385b9bfd2fbL, 0xe51a0d538807f3a0L,
58396       0x7ab24404b17b2842L, 0x6fd57687f9dd9f0aL, 0xcd1efdb4f3e9df64L,
58397       0x5dd2df7a60df194dL, 0xbed3f2c3e069df05L, 0x469b756123248a31L,
58398       0x866949e1694744f7L },
58399     { 0x3a9a0da53f4ab07aL, 0x2cd6f333f54a6fbfL, 0x0c92e921b23cf290L,
58400       0xc9581c3e848e3d58L, 0x93af1fbdd3b218abL, 0x38598ea1066cb4d7L,
58401       0x5001394e990c03a0L, 0x3b664b1e7d0877b5L, 0xd79db1bbd74c7091L,
58402       0x852d44354e2d5dd0L, 0x0d2b841b3329db82L, 0xfa844eb07b96d480L,
58403       0x37a50569c295dc46L, 0xc2d3837394f7ec4eL, 0xdc3884ff5b083177L,
58404       0x574352b88b1fa598L },
58405     { 0xed2193f70d5d7ce9L, 0x3c19fd260b487eafL, 0x7c44ab597be65fd0L,
58406       0xdd9da86078270d56L, 0x8a84ec00baa70198L, 0x2ec27e49285985dfL,
58407       0x996ccaf0de2028d8L, 0x4e7648c761c2201dL, 0xa96335bc091c19ebL,
58408       0x253a3a69f0d6782bL, 0x3f204340d2946493L, 0x444521a1099f6873L,
58409       0x5fcbcc096996011aL, 0x3884d5d8f853a94eL, 0x2418c624d3b6a3a1L,
58410       0x3e431af206ae3c4fL },
58411     { 0xf967d93983d381f1L, 0x36501aaed0c033c3L, 0xbf3af4d054410768L,
58412       0xa86d15985093a6d3L, 0x43ae0741d92f2900L, 0xfeb2afa636f0b755L,
58413       0xd090a6a3aa456d6fL, 0x336a4fdaaefdb646L, 0xfd1bfe441a942f7dL,
58414       0x7fc2a3ed851ee41eL, 0x4f1c968611e935c5L, 0xcd57766653bbb343L,
58415       0xf26931baad896c2aL, 0x8a0fbbd186bbfa41L, 0x1c3d7d82a203cef1L,
58416       0x6dad3f15e2664d35L },
58417     { 0xd1940b7d12ec35a1L, 0x6219c5b6e7dfb128L, 0x2cc278c6f13321d5L,
58418       0x5e76904a33c58eb6L, 0x15090f55d9903c43L, 0x061bc926c3d96a19L,
58419       0x974a9f038c0acba7L, 0x7a4140217198b21bL, 0xb069599df8958c6fL,
58420       0x517f2f1dbebd0129L, 0x1109a613df3a8dc3L, 0x08e58448672375c5L,
58421       0x56590ba49383d2d3L, 0xfc3ee7c60bff837cL, 0xc87a539027d2d55fL,
58422       0x2438e9d45f517a3fL },
58423     { 0xc4a453088815af3cL, 0xe55f1a32f3c9bed5L, 0xaef1cdc997b65ddfL,
58424       0x61c61d9412e51eb5L, 0xbd0dac54e63f2490L, 0x6f14429cd0b3e231L,
58425       0xf737c3c2f1da6010L, 0x7150e04b6bbc4fb1L, 0x205b4c891be281cbL,
58426       0xf1b4633cd7701f5bL, 0x8b33ef462a513490L, 0xddb47c7368f1f7f2L,
58427       0xf4ada511bd416b67L, 0x9d2a97cdff795bb3L, 0x00a8b7b296200e67L,
58428       0x13f39011afe30e01L },
58429     { 0x3dd296ef7bd0c827L, 0x506110f34a29ff46L, 0xf87930681c9a515aL,
58430       0xde8d8045268bca77L, 0xcbb83024998045dfL, 0x3f90d71068c0e584L,
58431       0x2a838ca8263b6062L, 0x293bb5e7535c5d0bL, 0xceea99d556415110L,
58432       0xfe311ad01bbda005L, 0x2497e0bfa4d8d018L, 0x33dd77a01cf2b866L,
58433       0xbc075b73d8c4ba8bL, 0x298466d4722b7bc9L, 0x17a7ce24cbda1b0bL,
58434       0x458d4b6b680703b6L },
58435     { 0x8a26a20e4d54d8b2L, 0x05a5696e4d320a0dL, 0x698b5858f994f700L,
58436       0x7a4adc3c2f6549a8L, 0x1812e8193694d00dL, 0x46b9b000730402bdL,
58437       0xe10a1449a1b36410L, 0xeae95ea599230220L, 0x3efc2e9b1b4820c3L,
58438       0xfe5b5cb585c9eb8aL, 0x21ae031997847064L, 0x68ef0b708f27d49fL,
58439       0x3259ef182f72556bL, 0x00ae0457624db01aL, 0x628e3b065668f95cL,
58440       0x5f13f5fab6fbbf91L },
58441     { 0x7c6ed9ae3a9b0dc6L, 0xaea1bde96f883ec8L, 0xea66bf88ea8b3677L,
58442       0xdefa6abc9a66e3abL, 0xc4d3317b68217ffdL, 0xf741c8f2290df05cL,
58443       0x1f0fdf177d11674eL, 0xfdf0ece7c35989caL, 0x0eed92df6b9c482dL,
58444       0x73713e6655bf1ca7L, 0x90acb29025cec99cL, 0x37c9e3a2e803e69cL,
58445       0x7c0a3c5317713a1aL, 0x350dc5656f5a174dL, 0x11625a4405f802f6L,
58446       0x2196495da37ba4a2L },
58447     { 0x00cb2fd313142680L, 0xab9e91d765d14cf4L, 0xc6a0ceabdfe2669eL,
58448       0xbeefce580ae22bc5L, 0x3c2b7986cb6ec250L, 0x84adb1a2d738f1ffL,
58449       0x9709bc28516ec8ecL, 0xf36931298e8f7db5L, 0xc48efc6b95b197f9L,
58450       0x9ff109529aaaa404L, 0x2c3c8cbd144154b0L, 0x33ef7bc3427f3435L,
58451       0x04a17940d21897c1L, 0x5aa0c47d6ce548a0L, 0x2971cea73d56fa62L,
58452       0x93ad0eb004475f08L },
58453     { 0x7a0b6967988a9963L, 0x61e477f76515e8ddL, 0x6274e3863b6b50f2L,
58454       0x63a9b8d5d33922deL, 0x3c38d3fb687a5b3dL, 0x18f6f09c1302e323L,
58455       0x254c05c3e02fcccfL, 0xc04ed0b726e662f7L, 0x1d5646b8143fe079L,
58456       0xef8a9448c9016c8cL, 0xe5674c4bf823d797L, 0x0586f72fbccde451L,
58457       0xc5fc88d54417eadeL, 0x2b952209576e588dL, 0x4408dd425844d1f9L,
58458       0x73f8c3f0ea41c034L },
58459     { 0x89534fc85df763ddL, 0x3b1427f33ac71836L, 0x0db5be176e8f15a0L,
58460       0x1d390944cb20888eL, 0x7804c9ad857caea6L, 0xaa584428519f7bf3L,
58461       0x626eecf1293aa8cfL, 0x749e0d98ea36a015L, 0xefff6dae3321edcdL,
58462       0x963deea628b791ccL, 0xa14e05522d16e361L, 0xa2e058fcb15ae206L,
58463       0x0f268745fca325e4L, 0x7cf9d40721341a8aL, 0xdfed25d97caa51b8L,
58464       0x0108ae39adbedd75L },
58465     { 0x54d178f3a9e88f63L, 0xaa05b11eab0c7325L, 0x773a53e6e261d8a6L,
58466       0x24db7dae8d0b91c8L, 0xde10b073e9bb004dL, 0xfc8befe754e3090bL,
58467       0x16af05990cc69c89L, 0xddc838039d59511aL, 0xc3f65b9946c5dafcL,
58468       0xfbbe4be81ee0a599L, 0x88891e36fb3a9b17L, 0x0c9aad75445dad00L,
58469       0xdffc46abd5097e1fL, 0x8848089bac85a4e1L, 0x348bb42fa0c45233L,
58470       0x807c06d8eb13c1dfL },
58471     { 0x00a969ec98ee0ef6L, 0xba9d54838bb7b7afL, 0x24484c92a02f8fdbL,
58472       0x7bdb201a8b70557cL, 0xe59343e460ad1af2L, 0x53a9a942998c95fbL,
58473       0x974db3deda861d3bL, 0xce1525c9ed399c0eL, 0x89b56881f72109bdL,
58474       0x08ff7d15998211a4L, 0x5df76b3aef0f275aL, 0x93f180f7fa2f358bL,
58475       0xaac4ffcfc39b0634L, 0x2692c62617583b53L, 0xb2fdfa36b55399fcL,
58476       0x16424c6c99607a61L },
58477     { 0x5dd65c55dd2744a9L, 0x2544c1c2fe3af418L, 0x32c82e99efe8b089L,
58478       0x30b7ab25a9df691aL, 0x983845509be99674L, 0xbcecd258caf2d122L,
58479       0x88ae4098bcc77272L, 0xd43961414b8efa0cL, 0x44ff67b9ed64d12cL,
58480       0xa9e655e42e7f3404L, 0x3d16fc4545b0e9ebL, 0x474a3e14f03ded28L,
58481       0xa3c9adffacccb85cL, 0x3dfe6bc17253a51bL, 0xdddaf4b9fb5831b1L,
58482       0x5544e602a4f4478aL },
58483     { 0x897c5313baa80b4fL, 0x0122716f63bdc8efL, 0xae2742db7b42c5a8L,
58484       0xe9d9e1e90883308cL, 0x352c8c3f2d341ab1L, 0x163d0500ed945870L,
58485       0x8349dd73c290d9d8L, 0x2053c5e01f6c7d29L, 0x83107446cb42033cL,
58486       0x76c88bd209d09af1L, 0xd0f70e6eb2794681L, 0x720b59de19b1b540L,
58487       0x80b7ecdc22994b43L, 0xc1a4cdce2dec53cfL, 0xdd7d3edd1ed60f42L,
58488       0x5735995ce241d261L },
58489     { 0xdc4ba3fba0237056L, 0x6856c16433ab3388L, 0xc01eebbd271ec612L,
58490       0xabdeb033e3031becL, 0x4eee44196118a1f5L, 0xec4974215b600f33L,
58491       0x1b7185cf08868773L, 0x7b0c46cd7c1b7dfdL, 0xd143b2da4a4c5e89L,
58492       0xdb9a5984bb1ff94dL, 0xac3904e4c9cf3465L, 0xf8729bc0eace64c9L,
58493       0x5cc22821768ad99aL, 0xbbd3b0818a9540c2L, 0xe468ed5f049a6917L,
58494       0x885486df3ec45ef0L },
58495     { 0x6a942c934bdff464L, 0x3db2719f25a7b451L, 0xccb0070b325be324L,
58496       0x2055a31b19fe3339L, 0xaca69ae8241ee8ffL, 0x7607dd0855ef8defL,
58497       0x9e24960f1a1b73c6L, 0xbcb0e8a271d36810L, 0x29e11aa26885e6b9L,
58498       0x98b5d0ab185eae19L, 0x1a0b96e40f81f91cL, 0x4d0e8bcf994fc503L,
58499       0x33d81697f119d6e0L, 0x29083287aaa4ce0cL, 0xc5dd4d3ec91ff9d7L,
58500       0x31cecfe8d4ab962dL },
58501     { 0x437bfd9afc8b21e8L, 0xe5dd32b3b19436dfL, 0xfe5902d4921c36a0L,
58502       0x8e9de84da3d0fa90L, 0x9663e6ad5bb523bdL, 0x9800a23faecd6975L,
58503       0x1009c0d9b4fbb59cL, 0x839aa7bdc9d20ff1L, 0xf502f66decd6fa3dL,
58504       0x480ed4fbc5516ca9L, 0x65ffa5f66c742ac4L, 0x2b7c7945ff3252f8L,
58505       0x72fefc0575d9cb3dL, 0x11b0863bd6d6f1d2L, 0x5d8f3cf09a6a4ec3L,
58506       0x6961b46ada2547b3L },
58507     { 0xd07b587ecb35e2acL, 0x1ed5546b57af14d9L, 0xeca17a5bdb28a04cL,
58508       0xa1f91d44709d54f0L, 0xa6e719fd9c6f400eL, 0x4e4b88edfb8ce190L,
58509       0xf9781edd246e3fd2L, 0xd67120e6b655af5dL, 0xda782d1d93413ca7L,
58510       0x697e20a29707fa21L, 0x1eb51f3254e84123L, 0x2e254d9e36051f9fL,
58511       0xddaec42b73ce5be9L, 0x89a9a32ecd3f794fL, 0x1964e22f0781aad9L,
58512       0x6a63a90c53755212L },
58513     { 0x76554e003d7acbbbL, 0x2c01668ab74f6108L, 0xe4a29672388c519bL,
58514       0x016677143eb94d4fL, 0x086a3cdf0cd6d2f6L, 0xf86580217b370f7fL,
58515       0x658880c15a4d3e7cL, 0xd6ed58165ba3f4a1L, 0xabcc78135ca471ddL,
58516       0x809bf074e844a576L, 0xa53a81b36ea502eaL, 0xc20b93070e021ed3L,
58517       0x8c27f8928617f165L, 0xa54764468235cd0bL, 0xffc89ffd82552961L,
58518       0x51ed4a22d151d90eL },
58519     { 0x37d6963a449701b4L, 0xea8d91a3bb27caf2L, 0x3ef9be15b572965fL,
58520       0x75a7a055db50bf7dL, 0xfd67480ece643b9bL, 0xf2a60d2d6ceb5d5eL,
58521       0x68fc320c5ed7c897L, 0x41c53cf628ce685fL, 0x0e29711f7106615eL,
58522       0x7a87213823500eccL, 0xaf0a92606c29fe48L, 0x93df3f2ae1ef9712L,
58523       0x0d5f6fb1d2d169bfL, 0xeb7afe2674a9793cL, 0x4173d94ae9f49256L,
58524       0x2d6951bc2b8b5ce5L },
58525     { 0xdd007d9f904e222eL, 0x333f248f86f4e109L, 0xd4994e8b8f429eeeL,
58526       0x29573415cfc77518L, 0x6e7fea3a0b0f42f1L, 0xc795cb7dc2743519L,
58527       0x820a8f66711e71a0L, 0x83d95d9c2b874f55L, 0xd4b64d78e70e1627L,
58528       0x924353f58b92a742L, 0x322048b1447b5e6dL, 0x0bad730cbcf931a0L,
58529       0x75c4d089a7af2268L, 0x464904c1b83b93f9L, 0xa24eba02165b3aeeL,
58530       0x65c48e78e08cc5f0L },
58531     { 0x1a1c73cede222c22L, 0x5683d8cdfcea23b4L, 0x0301cb14b2143b06L,
58532       0x284adf8f59fcec77L, 0xfb1c581c31204cefL, 0xf54d3eee94735107L,
58533       0xdbf67f0b4d3188c0L, 0x76a3f2d110f18d12L, 0x3809fa2807d3e013L,
58534       0xf06f0a4625e7ece0L, 0xd82867edb2895d2eL, 0xe106f48908b0553aL,
58535       0xe2280fa6ef245445L, 0x402d5785a8d9a3cbL, 0xf63dd9ffd438ba2dL,
58536       0x36b5cd2c7a6b226fL },
58537     { 0x87ff4e20545679a7L, 0x64d80b414520c750L, 0x90a357fa9b459cd8L,
58538       0xa19eaf39c85af1a3L, 0x0d475d798d935a5eL, 0x74501983781a678aL,
58539       0x748397790cc2e810L, 0xc6a21d112f412244L, 0x8d0e85f936a51a37L,
58540       0xff50151eeaa74df8L, 0x14e182a793cf99c4L, 0x45593df1376a9ab6L,
58541       0x18f73caf522389ffL, 0xd27cc960f7445e8aL, 0x0692f4c539a51dc8L,
58542       0x08d7c144db39bfd8L },
58543     { 0x809c0d963ecca773L, 0x87ea9192d48c2156L, 0xf0eccd74db6bd641L,
58544       0x773123742a678cdfL, 0x7a966d8bd1587b7eL, 0xf3c1a1016130a4c6L,
58545       0x7cc6e8385fce17bdL, 0x95e95bb8a8de7aa4L, 0x3fe1e8b5898308e3L,
58546       0x0197243ee347694aL, 0xf3fe9c42bb0cd2bfL, 0xb59052640f9b2b49L,
58547       0x4c385e8bc7367d1fL, 0x1d3050aeb5ee147bL, 0x8e2c387904004ad9L,
58548       0x5f2aa8eebab70202L },
58549     { 0xe208d4641266524bL, 0xb7bf3880d0a19f66L, 0xa5aa685eda106ebfL,
58550       0x0a69e8d3e642dd46L, 0xef349c61c682e4d6L, 0x26f6ee3b0fcb534cL,
58551       0x7daba12705eb67b8L, 0x2babb27e18be05f6L, 0x959afcba8e2d85d1L,
58552       0xedcf2d1ae2d9d386L, 0x59dc52e61ea6f06eL, 0xc28278b4866e5ae8L,
58553       0xd9ff034002bcd3c7L, 0xe884ac76784be82fL, 0xa316498083c9f224L,
58554       0x62501a98b46ff949L },
58555     { 0x563f7d9aad264086L, 0xca6a33dba5e0e4bdL, 0xe82530028c8d3d67L,
58556       0xa288dac846e64b19L, 0xfa3c919720aa4536L, 0x8130c9b0ed553eacL,
58557       0x622806e02ea8abd3L, 0x52fbf54dceccfe77L, 0xbd9a8e314f0d1b70L,
58558       0x519d2133d59b1741L, 0xfd74101c9a6fea8aL, 0xd1acf7a0b5c4eb10L,
58559       0x78499b7391f9da5eL, 0xabaa4c49c0dea586L, 0xcc9c5f73a1f3531aL,
58560       0x497b15fefd3fc665L },
58561     { 0x8a56cbaaf45568e9L, 0xf491a0fec7192a6fL, 0xdbb03dd39ab2539aL,
58562       0xc86522f84ac37da9L, 0x8c8cdba202a0f5b4L, 0x8109fc75a29c539fL,
58563       0x9cd06d31ca90f02eL, 0x8f31f0443e216dbfL, 0x99aa68acba3ebd91L,
58564       0x2a80d0d242c007f4L, 0xdd8dffbf86a9b7ceL, 0x405d3e84d6308edcL,
58565       0xdafa33fe068012caL, 0xc2eebd13edea1071L, 0xb7ae7e5c2ff637e6L,
58566       0x18d46a6c9e514cb7L },
58567     { 0x868cbb22a78b7802L, 0x0745ddb2497cbaf4L, 0xc4eb2f3e42ae8addL,
58568       0xac0abcdab4ceb4e4L, 0x2e0d8325a325fd40L, 0x6cfe057113ac7345L,
58569       0x7407a788b14171b9L, 0x70eb06036da7a52bL, 0xab0b36f9d85176acL,
58570       0x14109d297c2954f3L, 0x370de9c8dcd705adL, 0x3f0db5cd7bb5e751L,
58571       0x45f93d41a06e708cL, 0x10d54f8a7e93050dL, 0x69e6f8e45a38fef9L,
58572       0x55044601d3f62e40L },
58573     { 0xd1c5c91006cb9cc9L, 0x542074d741d00014L, 0x7cd8663e11236fb8L,
58574       0x39721ffe29ad5f82L, 0x1d21fbfa2951fc83L, 0x1cde06e7400d144fL,
58575       0x9042596b91792e6bL, 0x3365c8e529ad5166L, 0xe2220e859aeefe98L,
58576       0xbcb5318970c2aee3L, 0x477ca3db9ff100bcL, 0x27074176f532973fL,
58577       0xa12118ac9a2bd01bL, 0xf34252093dd79f93L, 0x563a8ff7c6f5d7dbL,
58578       0x0da313fcd7b0ec4fL },
58579     { 0x37125a8c15aa2557L, 0xca21d70c00893e9cL, 0x4871399467b8a823L,
58580       0x0d3e9a747cb0042aL, 0x2d2bf4ffc9e2ce18L, 0xd5531a0d049aeac2L,
58581       0x4d29a616f03d0660L, 0x473d50d61f1b7f00L, 0x3af0ecbbca3de50cL,
58582       0xe2959bea09c28f27L, 0x6d7c2ea0f8704664L, 0xadfae4e1731083efL,
58583       0x50940c26941c2554L, 0x44167410a1162d03L, 0x620230d81e82290eL,
58584       0x63630be8db414accL },
58585     { 0xbf8d52228a7d2e41L, 0x49e75823eb62f879L, 0x1b4d33dd6c402d89L,
58586       0x883e04d6de2c59adL, 0xbf3f38f449b9dc38L, 0x9d997d18b4b70c4cL,
58587       0x1f69b20c13cea045L, 0xca3d702558e2606dL, 0x3d4fd977261d1b79L,
58588       0x56aeafa85a1436faL, 0x369b3e98bb443c07L, 0xfce5186ce558f6beL,
58589       0xeb0cd478f8ac8f89L, 0x68074f37d5e5aa72L, 0x295845c068544eb0L,
58590       0x306a9871f16688edL },
58591     { 0xbc451e9d634ec136L, 0x1edf27ca0e6f658fL, 0xa9be0152c0db4120L,
58592       0x87b6ef20c5bfee67L, 0x352832389a2d6023L, 0x60e564d8c7afb899L,
58593       0x4af22bc00ac9c2deL, 0x28e6f63182a9d22bL, 0xc075c701f532701bL,
58594       0xf6d418f882075f91L, 0xf9fa628d1beaa511L, 0x551e7a176e72a13dL,
58595       0x9306215b77f4c01cL, 0x71aba73193c9d588L, 0x6443ebe058e57cd4L,
58596       0x2833ac41e8103e37L },
58597     { 0x7e564b868da5ec5cL, 0xac3d9da81c08db24L, 0x9d7c1f0b8c57a728L,
58598       0x3512afe79d343dc2L, 0xb438e4cffdc60339L, 0x7d5a2700dcfa1941L,
58599       0xd5f323f827320449L, 0x1b87a58e1393c6e6L, 0xecb68bd104baa431L,
58600       0xc09c1c5a4722b4d7L, 0xf42faa97206b5faaL, 0xe1dcbcd69976327eL,
58601       0x655ba9e4087787d9L, 0xbd59c757de5c0191L, 0x673020ed0bcf3538L,
58602       0x120cd454a49d6303L },
58603     { 0xebfdb8f4cab0f9eeL, 0xbc003ef02cce58eeL, 0x9b6a68415a8d0665L,
58604       0x642ed3a69b957774L, 0x3de487f04721ab5cL, 0xef2ff38021a4f0d3L,
58605       0xbd16f55829dbddcdL, 0x2ef05b4b0e93dff2L, 0xde1faa120bc9aec1L,
58606       0x66dae2c2d467fa92L, 0x758daf645eb33e34L, 0xa67ad9f68f0103cbL,
58607       0x151f693a9be02430L, 0xd5698496eb4054bcL, 0x8ef1677e7019336eL,
58608       0x021cfd167fdeea3eL },
58609     { 0x5c73715fdf5c36f3L, 0x703bde37d64ad254L, 0x55368d10f2cf7713L,
58610       0x1e5ec7b70f3993c8L, 0xfdb16776304ae4caL, 0x0d8f717e3d3bb18bL,
58611       0x5267073f66343d5aL, 0xfaeb52ef156008b5L, 0xb97ad5f9224a470fL,
58612       0xaf86e391ed2ab51aL, 0xdc0c7e579974302cL, 0xc88fa817fd0ae28aL,
58613       0x807c22dfbf8ed59cL, 0x5dedc231eb128bb6L, 0x71edcd9ca20595a3L,
58614       0x07265b46c73cf78eL },
58615     { 0x73dd99f0bd66232fL, 0xc59aaf89c4027716L, 0xaf826dfa5b860fc4L,
58616       0x239ea8aa7a943f3bL, 0x0e0e1b1a523c428dL, 0x55ea0e3a6973b95aL,
58617       0xea399caa2557753bL, 0xf8adf72f06957b1fL, 0x0389f3413bd34302L,
58618       0x333f27d0f8a43a97L, 0xcd9c0c08adaf796fL, 0x6dcca49b49c12aa2L,
58619       0xdd88deee7a0ac6e9L, 0x8f47575d0644080eL, 0x6e9d667d0cc2f4bdL,
58620       0x36c5754b31d1496cL },
58621     { 0x9120046ef323d84bL, 0xa69911227e789c4fL, 0x4b0eaf4e921b8055L,
58622       0x6339844a8079974eL, 0xc905466a740f8c79L, 0x1c18d0f7cd6def49L,
58623       0x5297da6b4b23e4baL, 0x1c09dff3c41800c5L, 0x6c49075b37ef6777L,
58624       0xa94c3a4050513dedL, 0x3d6742e96b0b1705L, 0xc0784494c48af5aeL,
58625       0x40c01532c95822deL, 0xa2ddade5c164d94fL, 0xfc8a8ac9a2975eb5L,
58626       0x06fbf8611946944eL },
58627     { 0x2d65338e3f45aa97L, 0xd83b58c81d040febL, 0x05fef59b0fdef8b9L,
58628       0x7beb071ae4d7417cL, 0x982b61f5b30a1a23L, 0x4c5f2a2afb65bd03L,
58629       0xe40abc9d5cbf6bf3L, 0x422c326df06612a5L, 0xc921e69d9571ae28L,
58630       0x7c88b10b23d3434eL, 0x96d2e9579da07933L, 0x833d46a13619cf4dL,
58631       0xd9d19653d95eefa1L, 0x2a7d8411a03e8f0eL, 0x5e64295304bb5ab1L,
58632       0x5e9ca0fd1f0fa9eaL },
58633     { 0x5bd54571197c5dc4L, 0xe2da40bfe78a95a2L, 0x65fb9efcffdb0eb2L,
58634       0xe952dc2c0d17467cL, 0xc1fc9c7bc758c6a3L, 0xfc79562cd4034a9aL,
58635       0x26e36fbe61f64b56L, 0x6adc4b9e1e84728bL, 0x7f165fd3a8f9ac8aL,
58636       0x7bc93a4503e3e013L, 0xeacc5513656478e3L, 0xd3391717064ddc77L,
58637       0x75b318dc76936914L, 0x69b1f1c7362424a6L, 0x8cc2045b49955f34L,
58638       0x940622b3c6836af8L },
58639     { 0x4710ccb70d997973L, 0x3b29625dd3f8f115L, 0x8cf0c4d55b97abd5L,
58640       0xc6321e0a673e14a5L, 0x0541af9d3d262246L, 0xde6d87546fc83b11L,
58641       0x47e97da8f01652a4L, 0x0f82b3a6ad9802b6L, 0x69aa4075ae9c44b2L,
58642       0xaf3f5de2ced2bf77L, 0x1ef1ea8a497a40daL, 0x2e0f86083c23ba9cL,
58643       0xd8a998a4f190a2c8L, 0xe2b49c8ccfde3368L, 0xb9f49824bde6bd71L,
58644       0x80bb1664785bedb6L },
58645     { 0x05e575fefd145cb5L, 0x155ee561ac5e6883L, 0x461e70cf8793b273L,
58646       0x9f1553de133b2338L, 0x2fb9e0c3a2a7ba07L, 0xc3bfd6a83e7086faL,
58647       0xb6ba85008bb4cb93L, 0x0b66d78976f82dbdL, 0x7d5a6ff654eb49ffL,
58648       0xcd65d2371f20b322L, 0x79ea49c254e29cdcL, 0x64975963cb118ff9L,
58649       0x969598ddcc58000bL, 0x95107918110c779cL, 0xedfc154863b85a35L,
58650       0x077ba5ea41212350L },
58651     { 0x0b3a38d3cdd86f61L, 0x431214450502a0abL, 0x1912edc5806d0272L,
58652       0x01dc1f988a32f10fL, 0xbb1d31d10e80c760L, 0xd46ec7e5f464e8b3L,
58653       0xd569af369abf49eeL, 0x9d286ea72cdade77L, 0x2be7020d45ad5920L,
58654       0xabe5236e6299ae7fL, 0xc93179bdd3f55c07L, 0x8138995a52350e80L,
58655       0x0901265caff07586L, 0x5b3c81b2f4739653L, 0xbaf7581d9bc77d21L,
58656       0x6b2006df4591a2e2L },
58657     { 0xb2fe50a8965b1bc1L, 0x931f536a962bb4fdL, 0xd5718d33000e7f99L,
58658       0x84728f2553d5125eL, 0x4f8a6184d2125cafL, 0x54f1a701357f679eL,
58659       0x70a9f40c1531c05aL, 0x10d0cb976fa8b775L, 0xb476f41e9dc12ce9L,
58660       0x5c8d7a752755f894L, 0xd6c12e10625741a4L, 0x262a6fb8c917b16cL,
58661       0x24d116e638d6b0a0L, 0x849540c032c38e83L, 0x855b911c66868afcL,
58662       0x53217ea6bd26b550L },
58663     { 0xfc840473259f52b4L, 0x968da9cbe621146cL, 0x964eb85ecacbd26eL,
58664       0xab7daa2de4a54344L, 0x6dc3b848381a4ff7L, 0xa07a96b341c815efL,
58665       0xc4fae9e8c3d4b1e1L, 0x0f938d1e42ce9ea8L, 0xa727dacc35cc052fL,
58666       0xc81e01c9e9a06f07L, 0xa9e08dcb4a6d65a1L, 0xf8e2d1736044a9a6L,
58667       0x99893dd0f2bd295bL, 0xa08d3379f9781b12L, 0x64bd600161830ac2L,
58668       0x0386931ed9adbeefL },
58669     { 0xd0d7abb3d09885a5L, 0xed9d2b67e355bb07L, 0x3bc238cf536ebaedL,
58670       0x61ca2e78699ce4d6L, 0x354ff447111594cdL, 0x55cbe70903316ad2L,
58671       0x418679fd49fff5c4L, 0x75bacd750f9c6c40L, 0x677edc882972721aL,
58672       0x82596887e5ef502fL, 0x459e9367bf320e0eL, 0x81ce36ef8bbdccb2L,
58673       0x1ba097fcb766863dL, 0xcd3a21d6d58c6db8L, 0x0e4967cdb4a8748bL,
58674       0x2caaf74915041c20L },
58675     { 0x44f980066ed20424L, 0xb3e4ea2322471545L, 0x268ed1a5781a8c86L,
58676       0x48d0ab757ae5b70bL, 0x6ca8b320356d3982L, 0x9ce8e6812df31fa4L,
58677       0xb909d232d925dcf2L, 0x302c8f78f56723deL, 0x11725d69abac96f9L,
58678       0x656a47ca57d1a170L, 0x6bb5d511c18a2be7L, 0xb56e45f1ad50d9d9L,
58679       0x36e886e270b05518L, 0xc7c71f3d09d8ff91L, 0x65a1bbe29350361eL,
58680       0x86d7f53245fe3bd8L },
58681     { 0x99f16eb6b0bf719aL, 0xb69750988bc3d913L, 0xfae50e5226cd01b4L,
58682       0xd3e3ac5490898d1cL, 0x4da3b9db887ec666L, 0x58300644fbea45b8L,
58683       0x369f3bd98355b058L, 0x0fb239a8579bcc13L, 0x4f5b45396e2bd811L,
58684       0x007f3baf24198fd2L, 0x68a676db8837d51dL, 0x68eeea62eae75b16L,
58685       0x5ffe5f943db6083cL, 0x52c94d0f7d836c5aL, 0x5a4c3c6fcbc1ff85L,
58686       0x682a55e386c0b4ddL },
58687     { 0xc8f235a4587495aaL, 0x2276026c34c7245dL, 0xd6ae0cc5b75a46e3L,
58688       0x890d3965ecc3e5e7L, 0x1b13342f14296629L, 0xc89927e68a877227L,
58689       0x1543f27e2324a68bL, 0x6c44768449cdc21aL, 0x9bc7fd4f1452d0acL,
58690       0x2cc30a31ff4b045cL, 0x415d46a0852f7611L, 0xad737052c6fdd7a6L,
58691       0xdcecc3ab7b4c7c91L, 0xd2cdf01b7688d70cL, 0x054f2542e40d3905L,
58692       0x02227fa6fefe4dcdL },
58693     { 0x1805efd9b751948bL, 0x8efeed46fdfd225dL, 0xcb128e094f2c8b22L,
58694       0x9d1090bf96f7c5e5L, 0x0959d044b4cbeca0L, 0x21c955f98e08cb04L,
58695       0xbc1f279d68fa4fceL, 0xb021e14e0710ae9aL, 0x64d16e9f881167f4L,
58696       0xf5a5c22ebbc9f1a5L, 0x5f3716dfe3420eeaL, 0x971eb915d5c4e843L,
58697       0x64fc55fc28ffba81L, 0x3427e54d7dd37578L, 0x446e6a6215ebc7d0L,
58698       0x547e249a29269778L },
58699     { 0x4706868aa1ffda27L, 0xb4e6cdcc7955cf50L, 0xf65151e10a63f3d8L,
58700       0x5b4127ea9de5e70aL, 0x3d2c09baf9342823L, 0x18c99d83aa2f7d51L,
58701       0xa0c5bb1dddeec025L, 0x7ffddf8403dcf1ceL, 0xe57e4d29616fdedaL,
58702       0xd24565697932a1f0L, 0x7475e0e83191d4e3L, 0x3479bea1c220218bL,
58703       0xfceb5c908bcb2505L, 0x1c685cea3c6132e6L, 0xc42dc745bfe6c1ebL,
58704       0x45a41cc0d2b08eeaL },
58705     { 0x3ea9b2c74dbbf0e1L, 0x41ff962fa17cf70eL, 0xdc1ea7585eeb4c66L,
58706       0x4f5412d2a9beb17eL, 0x2c9e4f52a285741aL, 0x93df7da4984fd11fL,
58707       0xb2afbddc0df3184eL, 0x96323d252421e375L, 0xc87be1e449df781eL,
58708       0x145601ed3d589beaL, 0x0f0bd9bd28fff6ddL, 0x2d3259d48a0f298cL,
58709       0x362d7a77d88e6944L, 0xa84c06b6b6ac2af6L, 0xba850ac9d087da02L,
58710       0x128763c942ee40c8L },
58711     { 0x29a80f07acbac178L, 0x7cc2004434b08f6eL, 0xe9631d1470feded2L,
58712       0xb2115da386615767L, 0x7c75f5c4cb088548L, 0x5b29d2139a2e8e03L,
58713       0xfe9fda668b881752L, 0x3f1d8d88c1de7ebcL, 0xb476565e03218123L,
58714       0x07365561b1c995f3L, 0x2160cb18b13eb71bL, 0x7e8da51399b3a0ebL,
58715       0x5e8ca1f9b20fcd74L, 0x6a7e0067b4126d72L, 0x1e8204b768bb637fL,
58716       0x75e96bccfc4f74d2L },
58717     { 0x189d1fdc0d19716eL, 0xdf5850587c384525L, 0x64a846d1ea987d2aL,
58718       0x12b6bf836c07150fL, 0x91d85d464d6fd5b7L, 0xa97888364f53f55fL,
58719       0x60083bd881509129L, 0xa7672683ea876f48L, 0xe80b2e7ac15b2489L,
58720       0x985ef8d242d1d992L, 0x9c57b029cf3de492L, 0xfe02f83cb1487627L,
58721       0xaeba4fe48ae5b687L, 0x8a86f09b5d6b8196L, 0xd88f566ba16e523dL,
58722       0x309a6e9aba268949L },
58723     { 0xef27ee50bdfbe97aL, 0x1a5fe70fb8c50c4dL, 0xcc7beb017fe09f5cL,
58724       0x8fa15a85bed36cc5L, 0xc0c3acdb7550ed3aL, 0xc581ef87eb908681L,
58725       0xa15b3362c49d5ccbL, 0x0fbb17141fa264e8L, 0x267f8d8f8e1eee88L,
58726       0xd31ccfd621c2b63dL, 0x924dbe7d53be7efdL, 0xd42e877fdb2a358aL,
58727       0xcf9673c775d68ac1L, 0xe35978fd714fea55L, 0xeeb366535769b202L,
58728       0x0458258ad7593789L },
58729     { 0x5df71a74a042dbdfL, 0x2d4058575779dfa2L, 0x0e66cba70d2e6657L,
58730       0x285d6745ca2e892eL, 0xf56a8def0f0e6b5fL, 0xe0ee851da30767c3L,
58731       0x98c0565843346b9cL, 0xb35fce26d6b3c742L, 0xc0895bff39777e00L,
58732       0x83c8f6a6e7b6d886L, 0xbee148434f02904bL, 0x7f74915b2e84ec34L,
58733       0xbaaf663c96d10991L, 0x004b8757e41facc0L, 0xa2b880e56f86c029L,
58734       0x53f4a3e095b77358L },
58735     { 0x11bb08ce89fc48e7L, 0xba60c577afab5aebL, 0xf06bcbf8a0c1cb5aL,
58736       0x7d2efaea79757cb6L, 0xe26d90b176319160L, 0x42aa1ab62b77b7a9L,
58737       0x38eec0cd285df2bfL, 0xd35947f5f3a8f7f0L, 0x97c8dc0efc1cb5b5L,
58738       0xfeb8cca0c45845cfL, 0x16e8d989249e26f2L, 0x7c264e6d483ed89aL,
58739       0x13a3f14551d91073L, 0x8501562e305e99f0L, 0xaaf98d746908d563L,
58740       0x0a99e653d723d236L },
58741     { 0x23536f46abbc0559L, 0xc163067b9aa1a160L, 0x229fd2290c1681b5L,
58742       0x61254be11378e907L, 0xc60ff57aab793a2dL, 0xa6f2df8b466552dbL,
58743       0x9ad318938c170a36L, 0xc5cd9abe29b74d9aL, 0xcf747273f7848523L,
58744       0xc126a93a0d0e3063L, 0xfe2021e34248e3d8L, 0xd97343ee8323ddfaL,
58745       0x9f768775332639e7L, 0x9650fc3175325548L, 0xb595dbd13eebf7eaL,
58746       0x3a95cb45010fcbc0L },
58747     { 0x954e68cb39d7ff2eL, 0x8dd1cb4bc1d5c48fL, 0x02a92c777169438aL,
58748       0x7965c0b091cad8ceL, 0x0c5798ab32cd08d2L, 0x1a5bc3c3a6902bdaL,
58749       0x545d09255186d218L, 0xf0077cdbd27e64dbL, 0x0157caa48cd092daL,
58750       0x2a2fa3a024532ab3L, 0xa5fb639b41ccaba3L, 0x01702dc14744aee6L,
58751       0x485bb436cdba93daL, 0x93597f66329784f1L, 0x5d713c1ddad672c3L,
58752       0x366d222e030b7245L },
58753     { 0xd50b4875573ea5b2L, 0x0fce401ba90da44dL, 0x7b53fa657a1a0310L,
58754       0x722a80a5cf114460L, 0x0b8ebf05a538bf49L, 0xae141147d32acd21L,
58755       0x6692712c7b5ad07dL, 0x6dc5fee73f48ca07L, 0x98ed14992b8a78d8L,
58756       0x4e8b3145dd2f1759L, 0x43408de15f971b8eL, 0x055ea6ddadf1b368L,
58757       0x4bb76e73e5932b7eL, 0x44287153d30893fdL, 0x173dccd20661bfdaL,
58758       0x9072ba9979defd25L },
58759     { 0x474de4dd9620ea39L, 0xfbf1649fc831cee8L, 0x0b0e8bb1cd3a9c43L,
58760       0x6a38286f3f3df1d5L, 0x4ed072b38f0ec9b3L, 0xa6e4c987729c09e3L,
58761       0xea3e8ac68ad12242L, 0x6ae0e22bfbdfa5baL, 0x56171ecfb0a0f592L,
58762       0x33b2886d6b871f8dL, 0x6b19bea935e11bdaL, 0x4d815a407f0f153fL,
58763       0x7e608d977d6c02eeL, 0x7e8f23d9b6a88f46L, 0x26ac9652439d1654L,
58764       0x8d92c6bd35546c29L },
58765     { 0xb3e0d7ceabeb0ff7L, 0xfbe352543e0e42f8L, 0x57d1b226de808499L,
58766       0x9ece2e1f1cd44bc3L, 0x1245adbc435cfee1L, 0x874ee840f93f581cL,
58767       0x916a779cbda0b947L, 0xabcc815afa57ae0aL, 0x97adec2df0a621b0L,
58768       0xbe6a502b81f90bdcL, 0x54bf9de153bde63dL, 0xa88fdabf78884c25L,
58769       0x30aa52b1cbbb5470L, 0xf805396c29053ef5L, 0x8d43d8988dd827eaL,
58770       0x4e4bec175c1ae5c0L },
58771     { 0xbf8483a2fcc09676L, 0x457c4a3f19ea9a94L, 0xa6852ef3d702a5ddL,
58772       0xe7915fd2843fe7d8L, 0x644bba9816e35158L, 0x8d1b95d09ed746f0L,
58773       0x47704581b90af0b5L, 0x0bd4bc6bd4fd135eL, 0xa6dce067b4e833a5L,
58774       0x2c0e8f30ff56a9a1L, 0xa9c80800ec2c63feL, 0x449c20a598f508a8L,
58775       0x02b94cb33292813aL, 0x647e3d28ec7e81a2L, 0x72e67d1ab4877677L,
58776       0x7a4aa3f56f9ded24L },
58777     { 0x559ef1bae27a0045L, 0xdc812d4fb242cb50L, 0x23a478e439cf8d24L,
58778       0x97544fc59b3f9c54L, 0x5ac68132affa1fcfL, 0x74f8fee034a2c83bL,
58779       0x96cc640fcd3f4bb7L, 0x775dce9db0512ea6L, 0x67dca19dcdce381eL,
58780       0xc1eeb3f3a9d3fe55L, 0x38e0bf421a19274fL, 0x15992fb428d69b12L,
58781       0x48fcebde9fd09df8L, 0xdc9dfa4fb41ab5dfL, 0x0cbd7dc8c0a269c5L,
58782       0x60282a7bf7f0ade1L },
58783     { 0x7c07e538dceea2e7L, 0x38a322c83c42061dL, 0x676828f94f1f6516L,
58784       0xf21b69fbc7776a10L, 0xc63a3417b5e6b405L, 0x4c99f25891a7b642L,
58785       0x38692ca82cad1440L, 0xf1e82ffe00869bcdL, 0xc30b714e16fe466aL,
58786       0x5fb742f919019138L, 0xe90166d00fa516aeL, 0x5550f7acd8c73a43L,
58787       0x2d6a407dfbc5c372L, 0xe47a753968cc39edL, 0x3fd286d94a5fbe70L,
58788       0x5f4ae9c723c6b942L },
58789     { 0xd96a2dda53f4d561L, 0x286d45d016da1992L, 0x449a01fbfdd4b051L,
58790       0x25488a0d9f2195eaL, 0xc4151b0aa37661b3L, 0xb98c471ef9e5ee02L,
58791       0xa4bca86ea8658817L, 0xbbcadb877a68fc0aL, 0x88b346496b7366a9L,
58792       0x32ee98d415661c2dL, 0xf5b3b4c6c901420cL, 0xa23527352f2752afL,
58793       0x2f64ce73510e4d9cL, 0x939a7f26aca4aa80L, 0x9cd3e291401aa503L,
58794       0x92a01423dc46afd2L },
58795     { 0xe9f24be11c2f7dbdL, 0xda8c900fb7d527faL, 0x963e25bb8648f128L,
58796       0x9ab713e248141941L, 0xe87f7d017a6756fbL, 0x274dd85e058d90bdL,
58797       0x823fee7a82566abdL, 0x9f6230d774240195L, 0x04579f2cacb5e46eL,
58798       0x2a22626316a4c87eL, 0x9ca19a43d99b0857L, 0x86dc2ba3e488789eL,
58799       0xf960b5b99406c3bdL, 0x6f2c428b8960957eL, 0x90748706161c515bL,
58800       0x0fc8fe1eaa88cb9bL },
58801     { 0x68ae1bedfeb90f2dL, 0xf393bb3ca48b1559L, 0x2be62f9cf64e9635L,
58802       0x354c2410f8be75c2L, 0xbd7ea7035e6f7529L, 0xc264868e162cab31L,
58803       0xb1391e70c860f3ffL, 0xdf367c751d89837eL, 0xe150b6b42bf32941L,
58804       0x95e8f46e78c1318fL, 0x2b3f1daba2c4b160L, 0xc6ccf5ce701afbf3L,
58805       0x3ad275305e8874c5L, 0x39285e515dc6dcbeL, 0x3c954d86d99892ddL,
58806       0x2d0ba862dfd3789fL },
58807     { 0xeacd8ee8b472e1afL, 0xeb354eaeb76abbccL, 0x9b520bf8d0d93fbdL,
58808       0xfccd60d7fe6fc706L, 0xa9353ddea4ee2f39L, 0x5eb0925e9a81e51eL,
58809       0xee334da1d1366777L, 0xc1d28c9fd5354d69L, 0xb977175592a5ed54L,
58810       0x5d3e367fb7f70d81L, 0x7be7eecaa933ae7aL, 0x264cf1f9e23cfbb7L,
58811       0x0d129f4a89497681L, 0x705375a409b6235bL, 0xccf64c7548a376daL,
58812       0x963c87124d41dbfcL },
58813     { 0xbae290cbde36a814L, 0x9bdb0195733b12b5L, 0x0ebad867f77fe0e1L,
58814       0x0a7d19fd29720ceaL, 0x434d76519029ec72L, 0x856aff17bb51911eL,
58815       0xd0a25d9ad80a7f60L, 0xffca86aff848c106L, 0x53e8bdf943ad749cL,
58816       0xfb9e0284e3e696bbL, 0x3eb6630aeeee4215L, 0x9d8fbb9e2ecf3c63L,
58817       0x71da4ffa4e00c0c0L, 0xb296be595d57beacL, 0x1751fbada8cec7efL,
58818       0x2d03eb3cff55d7bdL },
58819     { 0xeb16925f04f2ec1dL, 0xa878f2760d147ee2L, 0x442df604aad9d9e0L,
58820       0x891df44b3f71035bL, 0xc28272b38cb95d5bL, 0x6f14efb55ee8ed23L,
58821       0xf3c4460f13b0f3e3L, 0x889f9bd76bd7335eL, 0x889ee771f755ba6eL,
58822       0x626984feed219b6cL, 0x2d44c737ec2ee411L, 0xb94385a263efcd37L,
58823       0xd909321b6637826bL, 0xc24f8a793ee6b7a7L, 0xa3ca8d24a7cf61b7L,
58824       0x842e40c1c54bacd9L },
58825     { 0x5a268ed6a661d843L, 0x02328cca4f5b30cdL, 0x16e6fed11311e177L,
58826       0x690decb4c6695967L, 0xbdac5bf657b2e280L, 0x827f82ca1efe42d0L,
58827       0xc554ec0aca5fca2fL, 0xac5276c1dde45506L, 0xb7f4cb08e3077513L,
58828       0x8caf6d9acc8797ccL, 0xd59648140d9332d2L, 0xcc6ae297285a409fL,
58829       0x7773c2a56223d093L, 0x2d5266ac5128fc09L, 0xa596b7cbbc31fe6cL,
58830       0x0e63319acac91328L },
58831     { 0xb5cd2fadf0360ac2L, 0x86b660de285e605aL, 0x82c6cf10e25b9b14L,
58832       0x9d5fa38daa9ac554L, 0x3dfcf1b8526c070eL, 0x0379a96b3fccc52dL,
58833       0xe3659c290bfcc7f5L, 0x5b1a3db569d3e6a1L, 0xb41528b59b7b42d5L,
58834       0x934defa49c22a006L, 0x90f380189b4ce3b6L, 0xb073bc04b3abaf32L,
58835       0x27a5a222ff8389e2L, 0x0b7a9d51ffa5a35bL, 0x4939ecef28e1a7c2L,
58836       0x88839da21872705aL },
58837     { 0x56b66c30701ce29aL, 0x3acaf12658981d50L, 0xd4dafc0c105f9f21L,
58838       0xfee571e6373e3d13L, 0xe7269c86fa2ee3caL, 0xf5cca64add20385aL,
58839       0x217f27573000e9acL, 0xc934db470e7273efL, 0x4294f4f7355b6776L,
58840       0x1faa36b96fc05180L, 0x8f88b1dbb052190bL, 0x35791b90e9eaef52L,
58841       0xf37fb2ebdb681b90L, 0x39d0a51d4415c369L, 0xfc59cca71d2e21c9L,
58842       0x64128cfea1f50c26L },
58843     { 0xf03678a2e8f5b0b5L, 0x5c7e249cd340f059L, 0x4144044193ca7cecL,
58844       0x075ca346bc83af98L, 0xf39f0033faa8bbb0L, 0x3d18f0edf38230f7L,
58845       0x78dff00cd448f345L, 0x849228c0d51aa475L, 0xdd4e270830c928d1L,
58846       0xc66ba6868f12cfd3L, 0x091049db88b3a206L, 0xd865d059016dae01L,
58847       0x4599e905e253e37dL, 0x322cf0c27ce9871bL, 0x014f54da174a132eL,
58848       0x93634a09bdabcbdaL },
58849     { 0x62826b27a9a2e304L, 0xc57e1866c1a4c124L, 0x913ab83222381710L,
58850       0x7e9b6b85a9847cfeL, 0x29655cf12b5f46fdL, 0x7295572b8038e66dL,
58851       0xe4cba6016fa95eabL, 0xbbc11071b9deda81L, 0x97f0009a3f1cf61eL,
58852       0x5372777b373e0cfbL, 0x302f909cd139d63bL, 0x1ed672da4f87d78eL,
58853       0x362077a3b4048763L, 0xc408c32d9dcc22b2L, 0x4b4c5bf226deeee7L,
58854       0x266cb467bc06357eL },
58855     { 0x6faa4154b56363e8L, 0x4b4fd0783c1aa4dbL, 0x14358dde2b9e6597L,
58856       0x5b34ae3efa004b84L, 0xcf44b2ecf19911a6L, 0x55caa833a536bf78L,
58857       0x606e1eb98870dc95L, 0xe3c3287d09f3511dL, 0x68b2f4eb9d5cf364L,
58858       0xc154e89263ab8c9eL, 0x1548828ec36ab611L, 0x0932bfcba1b7d120L,
58859       0x7ee7b5bc5315b8d7L, 0x782fd0d1f7473ac1L, 0xbcb029a83c8f2af3L,
58860       0x4b1d5a1b52454ee1L },
58861     { 0x12fe517463d52c0cL, 0x3735525e188c099dL, 0x5c621563360e3956L,
58862       0x88b3f1caacfa5a43L, 0x90123a0a797e8107L, 0xba31f6b5b15e080aL,
58863       0xd7de5e12fca3dadaL, 0x3287361b0df511c8L, 0x7cc800d465757d4eL,
58864       0x10810f3d5207ec91L, 0x0d4e56f130eea0e3L, 0xbbf7ee133ea5a2ecL,
58865       0x6fc07762be6abbd0L, 0xc831fdce120bf619L, 0xe07439fab622d42aL,
58866       0x8186b93f508e4b27L },
58867     { 0xc619d15409312867L, 0x7e042c05bfaf7db4L, 0xc1cf16681f5f5ddaL,
58868       0x50aa5057a4fc3d82L, 0xed30ed65ce68b8feL, 0xecb01c0bbeb4d644L,
58869       0x7b5dc444831c0497L, 0x351e6a009b7d9b1cL, 0x4bb863b9d9477c91L,
58870       0xaba6589105d4110aL, 0x30086cf443580b7aL, 0xb139c07690be357eL,
58871       0x12bfff1a27b5214eL, 0x79cfc6d722c3ab57L, 0x4743de57f34a9bfaL,
58872       0x0bf97e97c9ee2b2aL },
58873     { 0x96ec4ec8dda19e96L, 0x54ce18ea6c306e8bL, 0x7e83612b65f6918aL,
58874       0x1ac6f68b0d9a0d99L, 0x98a697a462fdcc09L, 0x65ce25f195bc3e13L,
58875       0x1896ecdab3939730L, 0x9eb81a0f32f12806L, 0xd3d7416e1d2dc7dfL,
58876       0xe22c7976ad473599L, 0x3de37a9a9f5ef439L, 0x6b7ac0ab9e69d94eL,
58877       0xe6bfa9e00a9d0bc8L, 0x576a870d5676f120L, 0x3bd91bb4feaac23fL,
58878       0x8fe5482c3e40aabbL },
58879     { 0x85ae67c2ce9a4d1eL, 0x4c3eb8034f1d2038L, 0x5c6c8f3a25d06192L,
58880       0x803de0ad308fb41cL, 0x9961f5bce71c294eL, 0xdc62078df02eb0daL,
58881       0xc87ef515b64ae8b6L, 0x69679f1e50b4d18fL, 0xc5c009a152199f43L,
58882       0xa7d484be0f640a5fL, 0x4c918bb123dab566L, 0xa67c114c64275d2cL,
58883       0x95a913b9cad2ded6L, 0x189ed18b6b4b5c8dL, 0x4aeb6206b42d3bf6L,
58884       0x3928c669bbc8bc3fL },
58885     { 0xde4bea4adacb4b64L, 0x03f62a44f26179a1L, 0xf3aac94e7a9112a4L,
58886       0x90448fbdd36f331eL, 0x426042bc407b85c4L, 0x5ad8a5962121b77bL,
58887       0x31674a4f67cee984L, 0x7fae8bbe4e3b2f0dL, 0x681df6dda7c930ebL,
58888       0xadeefa98c259d0d4L, 0x1b14d9e6bea1c1fdL, 0x3baadc8b21d405d1L,
58889       0xf01dff9373892754L, 0x81c35b3ef071cde4L, 0x1704d2e19150d0d9L,
58890       0x6ccc888f355134f6L },
58891     { 0xf8d36f0e7ad7504cL, 0xbca3265ff7959dddL, 0x0dcd1edefede67aaL,
58892       0x1276f4cebaebf32fL, 0x6825a6e6014edcfcL, 0x0b8c1a8299ad8eb7L,
58893       0x312024a909b8ce1eL, 0xcb8fd98b9cbd351aL, 0xa4841378fab1e8beL,
58894       0x17ed0f5d3973cacfL, 0xa17e1484259d5254L, 0x53d5b84374b91393L,
58895       0x8f792b211aca3ce9L, 0x035ff110c8c0f815L, 0x6afa6357ad4ed7bdL,
58896       0x2f151980b26faef9L },
58897     { 0x0c8631da29d2d439L, 0x121fbbc2bc039955L, 0x3e5a97926c05b75bL,
58898       0x6d6cf4c0b6ce47ecL, 0xbaaa17679d88c658L, 0x031db9e7f3355a17L,
58899       0x8381e3d80aef5a85L, 0xc71db29015a31bdfL, 0x638f6b749498fd7dL,
58900       0x44edf3f913beeef6L, 0xe6173271f4ab67b3L, 0x3a202c70fd22df11L,
58901       0xf7be0389205c4e92L, 0x1c219085a8eb9920L, 0x6c805ce8beb54aaaL,
58902       0x354b05b70ac58d65L },
58903     { 0x7171e2367a9170e9L, 0x01eec42d4cad50cdL, 0xffbe824f3cddccfbL,
58904       0xa73e8ce3a66cae1aL, 0xb7138a7f965c7d01L, 0x00058e3f5c3d971eL,
58905       0x52591ac32ff0a72bL, 0xa32fb5bcbbbce76fL, 0xf3241ab8a9f81a18L,
58906       0xf31d3332eca68630L, 0x847af9fc4482f13bL, 0x6196e217a4681be2L,
58907       0x9938f932e55efcf9L, 0x3e7dacb870acc705L, 0xd41be893cf09fac2L,
58908       0x48dc55c4ae3523a1L },
58909     { 0x8e623826a5092193L, 0xe46ec3626898970cL, 0x2f1356af25c9eb41L,
58910       0x4178064083c7d245L, 0x982def6797d00e38L, 0x382eb6e7a512151cL,
58911       0x154e10778af58869L, 0x187070758a51cf02L, 0xcdeba9f771313c58L,
58912       0x5d67b973ba155904L, 0x851c9f4b1d0d7b3aL, 0x19f29d718b8af2cdL,
58913       0xcb94ccff986b8d62L, 0x8725e24bb93b9c33L, 0x405ce4c566e38c68L,
58914       0x5f6a8edd0b6dc021L },
58915     { 0x83704ca58f9a8690L, 0x3f3697662f76a407L, 0xfbc12d8c69201028L,
58916       0x4cd58f16bce3a4cfL, 0x7804664a04aab26dL, 0x005cfbba4ea457a8L,
58917       0x537951b3b8a59794L, 0x4ca2b9e44fe1f739L, 0xe4428acddf325797L,
58918       0x648da3420ea243dbL, 0xcce6562bf43ce01eL, 0x840f0421f27db490L,
58919       0x156ccb708bfb7cf0L, 0x9b33480d5a8797d3L, 0x2e12e07a9eb814bbL,
58920       0x1ca65072ca7f87acL },
58921     { 0xfbb321cf2b9d25a0L, 0x66affdca40a746dbL, 0xc1c1530e59e368b5L,
58922       0x56ed1ea47d80068fL, 0x9b74d8fe5647dd68L, 0x1d96b50789b78da8L,
58923       0x39b752438bbe3391L, 0xef8d443e0d858c5fL, 0x4dd2db499646aa34L,
58924       0x7fad3bd1e667543cL, 0xd0d710c068980985L, 0x9f7aff3249facabaL,
58925       0x055dec1c14f9a192L, 0xaca663991fb307a1L, 0xac44fd9135ffff64L,
58926       0x462cafb6cbad3ceeL },
58927     { 0x1660a647de3237ddL, 0x95f735cc82b87404L, 0xf7879f59ddfa55f8L,
58928       0x15ef043e726b914aL, 0x1875393d1c93e298L, 0xa1a2be746ef18331L,
58929       0x4e7e8dfc25a9a12bL, 0xdfefc97da9c3917fL, 0xbc875d030a2ebe41L,
58930       0x0f75d235a732d1ccL, 0x06fee7fed9baa6d3L, 0xaa784fab65f48576L,
58931       0x23155e22513f83c0L, 0xd2fb77183e8f9d13L, 0x2a291503b546eafdL,
58932       0x1293c98c6cd93608L },
58933     { 0x7278125149d53b77L, 0xa6ab403d96eafac7L, 0xb7d7c7db4a36b711L,
58934       0x8238c70887e771c1L, 0x495f6abf33b37522L, 0xb0b0289c8c87530dL,
58935       0xca83cb86e77b111aL, 0xbe1c0fb8a1bd189eL, 0x58cfb2fb1ae9d7c7L,
58936       0xd05c23c54940c3e8L, 0x16e79e4174ad9107L, 0xa0a47f05064e7142L,
58937       0xc6929cd4fdfd614fL, 0xedb2584c3946988bL, 0x73e4b5f3e46f8fb1L,
58938       0x53b79aa168ea94baL },
58939     { 0x216fafce44bbb6a1L, 0xd3a5bba067821728L, 0xef1e4b30a9dd939aL,
58940       0x022eaf3df19efafeL, 0xfed5abce7b4ec014L, 0x64968ee6512c6738L,
58941       0x2311986929fe89a2L, 0x0d539d8d47397c05L, 0x6400bc54234596c4L,
58942       0xb9287f585346611dL, 0x04099903c9d5da0fL, 0xe5ef4997c83af2a8L,
58943       0xc89dc01b328151e1L, 0x150fb4a958401104L, 0x40a6f7d5f3872c9dL,
58944       0x8290d6d156c2e833L },
58945     { 0xf84637c6d8546946L, 0xda134a3969ec57faL, 0xd42359a4d789007eL,
58946       0xb42557fe0dc7b809L, 0xe62ae52d2d6784a9L, 0xa2714ca60bcadb5fL,
58947       0xcc208de633aafca5L, 0x2380ed5ced967811L, 0x6e6b55e9db321660L,
58948       0x1bead02ca675235aL, 0x51cc6ef9b33fa0e1L, 0xfd223e26f06a2a08L,
58949       0x00f332e1ec47b3cfL, 0x459f297ba0aa984eL, 0x6fa1d969ee952e14L,
58950       0x506ef1ab304fabb0L },
58951     { 0x11b4eb2735bff163L, 0x7130b96fea9fa984L, 0x66aceb3f9deb27ceL,
58952       0xa2daf1a59dd1c3d5L, 0xf5090a7ea73075aaL, 0x36a6af39e3071b58L,
58953       0xa28d633ddf73ad9cL, 0xdd354cacbdc89a16L, 0xdfea3423d4dcbc3cL,
58954       0x6eec74d2379d92d1L, 0xe14a456f8eed6765L, 0xfabe7743fa8feb1fL,
58955       0x1404ccf8b98fcbc7L, 0x6ccd2fbff71a706eL, 0xdaaf3fdb4d85c678L,
58956       0x415b7dbf15200344L },
58957     { 0x970105867d8377a7L, 0x068a3d68cb803272L, 0xfd67d289f03a4c32L,
58958       0x4bc7095d93c8f290L, 0x712fa13ce9e5a2b8L, 0xfc6ac6c60feb9f3bL,
58959       0x0cda36d96e0e54c2L, 0x4549975186320a01L, 0xf9318c9197f00f11L,
58960       0x01dc4c3fe6936508L, 0x769a2ef985f068aaL, 0x3522cef0a2b5511cL,
58961       0x006965edb4122e05L, 0xfce0fafcc175d43fL, 0x525dc9bdec831d59L,
58962       0x1ec314f1af58879dL },
58963     { 0x0663feef2c8310c2L, 0xaa7e14da457e3f74L, 0x392b10fce5346887L,
58964       0xcde4a38f637ec2c5L, 0x50773320b542f8dfL, 0x341302f9f7de1711L,
58965       0x018b1c63ae4b9bc6L, 0xf001c46edd2f9e6fL, 0xd3bb0a9726eccfa0L,
58966       0xa931b99d7746e0c7L, 0xe0c8b6f7f5875aecL, 0xbb32f17c96939c82L,
58967       0x765135d23de5a664L, 0x71936cb452abfa6bL, 0xad5cc08f2dc105deL,
58968       0x17e91d127fff5788L },
58969     { 0xbe92ced3b7e051caL, 0xc644d4fd19c776d4L, 0xc8ab4b520086784bL,
58970       0x3ea66227ce9d6b31L, 0x395249a3d289e9c7L, 0x54509e65d12a19eeL,
58971       0xa7bd46928c365aecL, 0x354997e477963e0eL, 0x0d765957b599732dL,
58972       0x99584aeb91d4a3b6L, 0x6e653ea41deb3e28L, 0xca7c98ed572571dfL,
58973       0xf301a38fb18ae1f9L, 0x1629f7c263f7b97eL, 0xdf242282afc4a0d5L,
58974       0x118f3b4b3ddd0c01L },
58975     { 0x74a0a0a87ad4762bL, 0x1aef84da8c58d175L, 0x16ff49604cf76d86L,
58976       0xc0be87867e60d98bL, 0x83637ffb3ecc1dbaL, 0xc244a6095dd6147aL,
58977       0xa3e178345b0846e5L, 0x735eb686e77a4c05L, 0x5bc18b4fdf758695L,
58978       0x15618d0b1bdfe52fL, 0x878ecc0d00715ba1L, 0x1dbdbd1ac2dd617fL,
58979       0x21d2b63121b61710L, 0x22ce8a7944f593c2L, 0x3b9b536a44f17024L,
58980       0x01d0a67c8d03e727L },
58981     { 0x7b9642361e46533cL, 0xe9477990fb88c2aeL, 0x019b5d16a42c4a18L,
58982       0x7135e81dd83c7a45L, 0x74a69bdd4cb663e3L, 0x7b67ecdbe76c0d63L,
58983       0x03d5452111e68da6L, 0x596cceb5d2e8650aL, 0xcd572dfd2af03b37L,
58984       0x52364ba1fabd5952L, 0x7f47d456b4ed8569L, 0x5ad8b572c950d5d4L,
58985       0xcadd2dfa486e2f84L, 0xdd527b43c56bb044L, 0xc9adba24997c08e6L,
58986       0x1b625b067da6320fL },
58987     { 0x44dfaa7b4fd8446dL, 0xc01b2f01af6febebL, 0xbf444388fe8838b5L,
58988       0xf33c434fbba9758bL, 0x2b971cba87156bc9L, 0x6b245e5c1f49098bL,
58989       0x87dcb5342b41c5ddL, 0xdb1f80c634d852d7L, 0x6d6e32582433da34L,
58990       0xf66820653f7df0c2L, 0xc4ca567c360cb365L, 0x321faac29826656aL,
58991       0x13f5ca6fbf069768L, 0x15397921a7076639L, 0xbdf143288400736eL,
58992       0x333eca9619fc948dL },
58993     { 0x23337948ac775d81L, 0x38c2518fd41dbbcaL, 0x623c7a4fbcfce948L,
58994       0xaad3623654703fe7L, 0x2b3a13a413fb3b5bL, 0x5db3565a7f5c01f0L,
58995       0xd72408dc52359661L, 0x5a17f8e51d616e91L, 0x90c16eebcb25b999L,
58996       0xf35e8cf13393743eL, 0x987da74ae54b64a7L, 0x557b322a65cd449dL,
58997       0x765082a537e7b15dL, 0x4d25c742f2cd134fL, 0xae9d9c074ccf0746L,
58998       0x72fc21108728d135L },
58999     { 0xa906b203f96004c8L, 0xd83f95cf458055ffL, 0xd77d586755f35909L,
59000       0x4a9ea6fbe550c8eeL, 0x91c8cca955a06081L, 0x4a1fee78bce82062L,
59001       0xeb9ade069a3df85eL, 0xfbbdcf0c7d3de666L, 0x228a391b5d336d51L,
59002       0x760f8d285c2ffc3cL, 0x1ee48de32f7b165bL, 0x03803d8456177040L,
59003       0xe573f6489deff9a0L, 0xe1a2738ea17e35a4L, 0x238ef17c8840a6c6L,
59004       0x480946f8b11ed92dL },
59005     { 0x84c747a8fd71f119L, 0x19e65c5e53eb3695L, 0x0e2f67866298587aL,
59006       0x48a48899ab18d6f4L, 0xa1a99024c630b8c0L, 0x849750962caaf892L,
59007       0xc8869abae20fd624L, 0x3b72b04d6c2b7dd4L, 0xe2775eb60992f7d0L,
59008       0x0089c06e7d06e684L, 0xcb3b4361e4bbd007L, 0xa1ae666b4ba846e4L,
59009       0xc01c2eb246464d9eL, 0xf86f2be6c1f8539fL, 0x16e8e8aecf68afc7L,
59010       0x8dab61fdc7386902L },
59011     { 0x42a5c903d54d1d45L, 0xacd4297eff4f9ba2L, 0x2d88b52034d478b4L,
59012       0x35b2ba2b08c4621aL, 0xd3d239bb34865402L, 0x1de76aed911f32e6L,
59013       0x877f8bcf3f06fdc2L, 0x802714c19ec51502L, 0xa10444eba590700dL,
59014       0x8694229f31dcc957L, 0x5ece77abb8169fedL, 0x55be8a152caf080eL,
59015       0x3eb21b14cbd7cef1L, 0x9def7ad167b97ee1L, 0xe03ca879118f690cL,
59016       0x6f77e62df99b29e7L },
59017     { 0xa271bdede40bbf59L, 0x177ba4536401aad6L, 0x1755e03573541cd1L,
59018       0x3465b4664b71b02fL, 0x22eb7113a813359fL, 0x9792a8fd6f38eac7L,
59019       0x11aa012fff3bf3b5L, 0x99aafabff85c3fbfL, 0x91e0a2ef06c0cc42L,
59020       0x314d5d57773b7b3aL, 0xae5e2e76d669840aL, 0x861360732e5a8be6L,
59021       0xee6d7578c1cf5580L, 0x2344e00f68bed102L, 0x799d78868184f0ebL,
59022       0x63819c91c3d2cf80L },
59023     { 0xca5392e17884b073L, 0x9ec3a1fceb1267eaL, 0x3d07f5f0907038a7L,
59024       0xcb2ac07ce4c47b70L, 0xf96664ee1bf96b91L, 0xebf575892aea4fbfL,
59025       0x5aabf391fade6500L, 0xc5b3376f171d1204L, 0x1ff60c51a0d3d81aL,
59026       0x10b2cfe7976a844bL, 0xe131cc9abda6125aL, 0xe0fc16d34ebd453eL,
59027       0xc0d0319a504b6bc1L, 0xe43a0be70a2f8cabL, 0xc80afeec55e49b47L,
59028       0x67d48d128265d7eeL },
59029     { 0x068d59a7ea2d56d6L, 0xd71abd0e27480a63L, 0x6bd11db0ae7366cdL,
59030       0xfbb639ca07204ebcL, 0x89a242e7f77e6293L, 0xdee7ca2b75ba8c3dL,
59031       0x472ddc3d64a2f9a8L, 0x84229df47561a010L, 0x95f62c85c5b649d4L,
59032       0xfdd56b1b4dc927cdL, 0xfe8bb1205ee60596L, 0x3efcaa50abf29401L,
59033       0xd4900d0f10d1c184L, 0x2cf113a928b01df5L, 0xa3d7ebc31f0e43f5L,
59034       0x27950e38e8384dc7L },
59035     { 0xeab21ff0e1d0fa79L, 0x4b9fd033048b5de9L, 0x4c9346892fe374cbL,
59036       0xbb4827fa4eb21f6bL, 0x46716f79a925e7e7L, 0x1442bf367dd4c531L,
59037       0x2073954cd2e96ddfL, 0x4e0141ae8502aa89L, 0x8ee00e1a8eef6cc9L,
59038       0x55ce84915880cdafL, 0xff3aba5c69628046L, 0x335cc4f85d15dfbfL,
59039       0xa7f0440c9f684f25L, 0xae80453fbb1e5bd8L, 0xa1c99813ff2225abL,
59040       0x54ff788479b25d71L },
59041     { 0x27c6ee30de40b068L, 0x9226465be6f3a51eL, 0xe24a4604fa3b21f6L,
59042       0x50a5a5adc0418115L, 0xe32854418df90d2bL, 0xbb74e58fdcb0c00fL,
59043       0xc68f1b3b4a2c08e3L, 0x339df0810ccd9ec9L, 0x915362dcb786ea9fL,
59044       0x28945e31c955aeadL, 0xd6a2c01d8b6a6c6bL, 0x069e82dc3678a427L,
59045       0x1787550028c9302cL, 0x8acda9659fa101e6L, 0x4e4e4573ee30b286L,
59046       0x8adbad853f1830feL },
59047     { 0x060ae11f0969d524L, 0xf42fdaf7f39bcc79L, 0x3cec67667cc1fcc2L,
59048       0x456b9cf2e2336d4fL, 0x6aa1f5de8e1c0f7fL, 0xcdbc2ad20984fb0eL,
59049       0x4090cfa61b464b28L, 0x40d86f301243f3efL, 0x95b16ccccd5e87e7L,
59050       0x403f168c3026cd41L, 0xdbe386cb816c0730L, 0x14eb86f358407a1dL,
59051       0xf588b4f81717e1afL, 0xb75c41a666cbc96cL, 0xf342c1aa027e71c1L,
59052       0x73930036c0945e5fL },
59053     { 0x954f757d22cdaf42L, 0x788b591df4181aabL, 0x8b986819f5514f25L,
59054       0x69642e08f18fd5bcL, 0x92b305d1022ceb91L, 0x1715903e6a4f6985L,
59055       0x4bd7d69d61179caeL, 0xdacdfd5dd29c01aaL, 0x705ddd5ad91108ccL,
59056       0x434ac7b164ac8f15L, 0x61a514e1b524632fL, 0x45b9e61b731fc447L,
59057       0xcf561348e0961b31L, 0x9c28a96773eaf223L, 0x5bd10182aa7c99d3L,
59058       0x8bc6ec4ae42965e2L },
59059     { 0xd096e5c0e7f2a32bL, 0xff54800c09388a30L, 0x06fe437c401e360cL,
59060       0x6655fc9cbb6054a6L, 0x510e18608457aa6eL, 0xa0acfca22b29b2b7L,
59061       0x732483e351b7da61L, 0xe31471ee6be6c8caL, 0xe565431c8b65c9a1L,
59062       0xfc9ac3b948d65cbbL, 0xd308fc21ae9b2aa8L, 0xd6a7df0daa60aa6aL,
59063       0x2844d96a982fc0d4L, 0xab012c2c5847a4d7L, 0x2b3c8f71dceb8955L,
59064       0x8e85437dbe9c7e15L },
59065 };
59066 
59067 /* Perform the modular exponentiation in Fp* for SAKKE.
59068  *
59069  * Base is fixed to be the g parameter - a precomputed table is used.
59070  *
59071  * Striping: 128 points at a distance of 8 combined.
59072  * Total of 256 points in table.
59073  * Square and multiply performed in Fp*.
59074  *
59075  * base  [in]   Base. MP integer.
59076  * exp   [in]   Exponent. MP integer.
59077  * res   [out]  Result. MP integer.
59078  * returns 0 on success, MP_READ_E if there are too many bytes in an array
59079  * and MEMORY_E if memory allocation fails.
59080  */
sp_ModExp_Fp_star_x64_1024(const mp_int * base,mp_int * exp,mp_int * res)59081 static int sp_ModExp_Fp_star_x64_1024(const mp_int* base, mp_int* exp, mp_int* res)
59082 {
59083 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
59084     !defined(WOLFSSL_SP_NO_MALLOC)
59085     sp_digit* td;
59086     sp_digit* t;
59087     sp_digit* tx;
59088     sp_digit* ty;
59089 #else
59090     sp_digit t[4 * 2 * 16];
59091     sp_digit tx[2 * 16];
59092     sp_digit ty[2 * 16];
59093 #endif
59094     sp_digit* r = NULL;
59095     unsigned char e[128];
59096     int err = MP_OKAY;
59097     int i;
59098     int y;
59099 
59100     (void)base;
59101 
59102 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
59103     !defined(WOLFSSL_SP_NO_MALLOC)
59104     td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 6 * 16 * 2, NULL,
59105                             DYNAMIC_TYPE_TMP_BUFFER);
59106     if (td == NULL) {
59107         err = MEMORY_E;
59108     }
59109 #endif
59110 
59111     if (err == MP_OKAY) {
59112 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
59113     !defined(WOLFSSL_SP_NO_MALLOC)
59114         t  = td;
59115         tx = td + 4 * 16 * 2;
59116         ty = td + 5 * 16 * 2;
59117 #endif
59118         r = ty;
59119 
59120         (void)mp_to_unsigned_bin_len(exp, e, 128);
59121 
59122         XMEMCPY(tx, p1024_norm_mod, sizeof(sp_digit) * 16);
59123         y  =  e[112] >> 7;
59124         y |= (e[96] >> 7) << 1;
59125         y |= (e[80] >> 7) << 2;
59126         y |= (e[64] >> 7) << 3;
59127         y |= (e[48] >> 7) << 4;
59128         y |= (e[32] >> 7) << 5;
59129         y |= (e[16] >> 7) << 6;
59130         y |= (e[0] >> 7) << 7;
59131         XMEMCPY(ty, sp_1024_g_table[y], sizeof(sp_digit) * 16);
59132         for (i = 126; i >= 0; i--) {
59133             y  =  (e[127 - (i / 8)] >> (i & 0x7)) & 1;
59134             y |= ((e[111 - (i / 8)] >> (i & 0x7)) & 1) << 1;
59135             y |= ((e[95 - (i / 8)] >> (i & 0x7)) & 1) << 2;
59136             y |= ((e[79 - (i / 8)] >> (i & 0x7)) & 1) << 3;
59137             y |= ((e[63 - (i / 8)] >> (i & 0x7)) & 1) << 4;
59138             y |= ((e[47 - (i / 8)] >> (i & 0x7)) & 1) << 5;
59139             y |= ((e[31 - (i / 8)] >> (i & 0x7)) & 1) << 6;
59140             y |= ((e[15 - (i / 8)] >> (i & 0x7)) & 1) << 7;
59141 
59142             sp_1024_proj_sqr_16(tx, ty, t);
59143             sp_1024_proj_mul_qx1_16(tx, ty, sp_1024_g_table[y], t);
59144         }
59145     }
59146 
59147     if (err == MP_OKAY) {
59148         sp_1024_mont_inv_16(tx, tx, t);
59149         sp_1024_mont_mul_16(r, tx, ty, p1024_mod, p1024_mp_mod);
59150         XMEMSET(r + 16, 0, sizeof(sp_digit) * 16);
59151         sp_1024_mont_reduce_16(r, p1024_mod, p1024_mp_mod);
59152 
59153         err = sp_1024_to_mp(r, res);
59154     }
59155 
59156 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
59157     !defined(WOLFSSL_SP_NO_MALLOC)
59158     if (td != NULL) {
59159         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
59160     }
59161 #endif
59162     return err;
59163 }
59164 
59165 #endif /* WOLFSSL_SP_SMALL */
59166 #ifdef HAVE_INTEL_AVX2
59167 /* Multiply p* in projective co-ordinates by q*.
59168  *
59169  * r.x = p.x - (p.y * q.y)
59170  * r.y = (p.x * q.y) + p.y
59171  *
59172  * px  [in,out]  A single precision integer - X ordinate of number to multiply.
59173  * py  [in,out]  A single precision integer - Y ordinate of number to multiply.
59174  * q   [in]      A single precision integer - multiplier.
59175  * t   [in]      Two single precision integers - temps.
59176  */
sp_1024_proj_mul_qx1_avx2_16(sp_digit * px,sp_digit * py,const sp_digit * q,sp_digit * t)59177 static void sp_1024_proj_mul_qx1_avx2_16(sp_digit* px, sp_digit* py,
59178         const sp_digit* q, sp_digit* t)
59179 {
59180     sp_digit* t1 = t;
59181     sp_digit* t2 = t + 2 * 16;
59182 
59183     /* t1 = p.x * q.y */
59184     sp_1024_mont_mul_avx2_16(t1, px, q, p1024_mod, p1024_mp_mod);
59185     /* t2 = p.y * q.y */
59186     sp_1024_mont_mul_avx2_16(t2, py, q, p1024_mod, p1024_mp_mod);
59187     /* r.x = p.x - (p.y * q.y) */
59188     sp_1024_mont_sub_avx2_16(px, px, t2, p1024_mod);
59189     /* r.y = (p.x * q.y) + p.y */
59190     sp_1024_mont_add_avx2_16(py, t1, py, p1024_mod);
59191 }
59192 
59193 /* Square p* in projective co-ordinates.
59194  *
59195  *   px' = (p.x + p.y) * (p.x - p.y) = p.x^2 - p.y^2
59196  *   py' = 2 * p.x * p.y
59197  *
59198  * px  [in,out]  A single precision integer - X ordinate of number to square.
59199  * py  [in,out]  A single precision integer - Y ordinate of number to square.
59200  * t   [in]      Two single precision integers - temps.
59201  */
sp_1024_proj_sqr_avx2_16(sp_digit * px,sp_digit * py,sp_digit * t)59202 static void sp_1024_proj_sqr_avx2_16(sp_digit* px, sp_digit* py, sp_digit* t)
59203 {
59204     sp_digit* t1 = t;
59205     sp_digit* t2 = t + 2 * 16;
59206 
59207     /* t1 = p.x + p.y */
59208     sp_1024_mont_add_avx2_16(t1, px, py, p1024_mod);
59209     /* t2 = p.x - p.y */
59210     sp_1024_mont_sub_avx2_16(t2, px, py, p1024_mod);
59211     /* r.y = p.x * p.y */
59212     sp_1024_mont_mul_avx2_16(py, px, py, p1024_mod, p1024_mp_mod);
59213     /* r.x = (p.x + p.y) * (p.x - p.y) */
59214     sp_1024_mont_mul_avx2_16(px, t1, t2, p1024_mod, p1024_mp_mod);
59215     /* r.y = (p.x * p.y) * 2 */
59216     sp_1024_mont_dbl_avx2_16(py, py, p1024_mod);
59217 }
59218 
59219 #ifdef WOLFSSL_SP_SMALL
59220 /* Perform the modular exponentiation in Fp* for SAKKE.
59221  *
59222  * Simple square and multiply when expontent bit is one algorithm.
59223  * Square and multiply performed in Fp*.
59224  *
59225  * base  [in]   Base. MP integer.
59226  * exp   [in]   Exponent. MP integer.
59227  * res   [out]  Result. MP integer.
59228  * returns 0 on success and MEMORY_E if memory allocation fails.
59229  */
sp_ModExp_Fp_star_avx2_1024(const mp_int * base,mp_int * exp,mp_int * res)59230 static int sp_ModExp_Fp_star_avx2_1024(const mp_int* base, mp_int* exp, mp_int* res)
59231 {
59232 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
59233     !defined(WOLFSSL_SP_NO_MALLOC)
59234     sp_digit* td;
59235     sp_digit* t;
59236     sp_digit* tx;
59237     sp_digit* ty;
59238     sp_digit* b;
59239     sp_digit* e;
59240 #else
59241     sp_digit t[4 * 2 * 16];
59242     sp_digit tx[2 * 16];
59243     sp_digit ty[2 * 16];
59244     sp_digit b[2 * 16];
59245     sp_digit e[2 * 16];
59246 #endif
59247     sp_digit* r;
59248     int err = MP_OKAY;
59249     int bits;
59250     int i;
59251 
59252 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
59253     !defined(WOLFSSL_SP_NO_MALLOC)
59254     td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 8 * 16 * 2, NULL,
59255                             DYNAMIC_TYPE_TMP_BUFFER);
59256     if (td == NULL) {
59257         err = MEMORY_E;
59258     }
59259 #endif
59260 
59261     if (err == MP_OKAY) {
59262 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
59263     !defined(WOLFSSL_SP_NO_MALLOC)
59264         t  = td;
59265         tx = td + 4 * 16 * 2;
59266         ty = td + 5 * 16 * 2;
59267         b  = td + 6 * 16 * 2;
59268         e  = td + 7 * 16 * 2;
59269 #endif
59270         r = ty;
59271 
59272         bits = mp_count_bits(exp);
59273         sp_1024_from_mp(b, 16, base);
59274         sp_1024_from_mp(e, 16, exp);
59275 
59276         XMEMCPY(tx, p1024_norm_mod, sizeof(sp_digit) * 16);
59277         sp_1024_mul_avx2_16(b, b, p1024_norm_mod);
59278         err = sp_1024_mod_16(b, b, p1024_mod);
59279     }
59280     if (err == MP_OKAY) {
59281         XMEMCPY(ty, b, sizeof(sp_digit) * 16);
59282 
59283         for (i = bits - 2; i >= 0; i--) {
59284             sp_1024_proj_sqr_avx2_16(tx, ty, t);
59285             if ((e[i / 64] >> (i % 64)) & 1) {
59286                 sp_1024_proj_mul_qx1_avx2_16(tx, ty, b, t);
59287             }
59288         }
59289     }
59290 
59291     if (err == MP_OKAY) {
59292         sp_1024_mont_inv_avx2_16(tx, tx, t);
59293 
59294         XMEMSET(tx + 16, 0, sizeof(sp_digit) * 16);
59295         sp_1024_mont_reduce_avx2_16(tx, p1024_mod, p1024_mp_mod);
59296         XMEMSET(ty + 16, 0, sizeof(sp_digit) * 16);
59297         sp_1024_mont_reduce_avx2_16(ty, p1024_mod, p1024_mp_mod);
59298 
59299         sp_1024_mul_avx2_16(r, tx, ty);
59300         err = sp_1024_mod_16(r, r, p1024_mod);
59301     }
59302     if (err == MP_OKAY) {
59303         err = sp_1024_to_mp(r, res);
59304     }
59305 
59306 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
59307     !defined(WOLFSSL_SP_NO_MALLOC)
59308     if (td != NULL) {
59309         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
59310     }
59311 #endif
59312     return err;
59313 }
59314 
59315 #else
59316 /* Perform the modular exponentiation in Fp* for SAKKE.
59317  *
59318  * Base is fixed to be the g parameter - a precomputed table is used.
59319  *
59320  * Striping: 128 points at a distance of 8 combined.
59321  * Total of 256 points in table.
59322  * Square and multiply performed in Fp*.
59323  *
59324  * base  [in]   Base. MP integer.
59325  * exp   [in]   Exponent. MP integer.
59326  * res   [out]  Result. MP integer.
59327  * returns 0 on success, MP_READ_E if there are too many bytes in an array
59328  * and MEMORY_E if memory allocation fails.
59329  */
sp_ModExp_Fp_star_avx2_1024(const mp_int * base,mp_int * exp,mp_int * res)59330 static int sp_ModExp_Fp_star_avx2_1024(const mp_int* base, mp_int* exp, mp_int* res)
59331 {
59332 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
59333     !defined(WOLFSSL_SP_NO_MALLOC)
59334     sp_digit* td;
59335     sp_digit* t;
59336     sp_digit* tx;
59337     sp_digit* ty;
59338 #else
59339     sp_digit t[4 * 2 * 16];
59340     sp_digit tx[2 * 16];
59341     sp_digit ty[2 * 16];
59342 #endif
59343     sp_digit* r = NULL;
59344     unsigned char e[128];
59345     int err = MP_OKAY;
59346     int i;
59347     int y;
59348 
59349     (void)base;
59350 
59351 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
59352     !defined(WOLFSSL_SP_NO_MALLOC)
59353     td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 6 * 16 * 2, NULL,
59354                             DYNAMIC_TYPE_TMP_BUFFER);
59355     if (td == NULL) {
59356         err = MEMORY_E;
59357     }
59358 #endif
59359 
59360     if (err == MP_OKAY) {
59361 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
59362     !defined(WOLFSSL_SP_NO_MALLOC)
59363         t  = td;
59364         tx = td + 4 * 16 * 2;
59365         ty = td + 5 * 16 * 2;
59366 #endif
59367         r = ty;
59368 
59369         (void)mp_to_unsigned_bin_len(exp, e, 128);
59370 
59371         XMEMCPY(tx, p1024_norm_mod, sizeof(sp_digit) * 16);
59372         y  =  e[112] >> 7;
59373         y |= (e[96] >> 7) << 1;
59374         y |= (e[80] >> 7) << 2;
59375         y |= (e[64] >> 7) << 3;
59376         y |= (e[48] >> 7) << 4;
59377         y |= (e[32] >> 7) << 5;
59378         y |= (e[16] >> 7) << 6;
59379         y |= (e[0] >> 7) << 7;
59380         XMEMCPY(ty, sp_1024_g_table[y], sizeof(sp_digit) * 16);
59381         for (i = 126; i >= 0; i--) {
59382             y  =  (e[127 - (i / 8)] >> (i & 0x7)) & 1;
59383             y |= ((e[111 - (i / 8)] >> (i & 0x7)) & 1) << 1;
59384             y |= ((e[95 - (i / 8)] >> (i & 0x7)) & 1) << 2;
59385             y |= ((e[79 - (i / 8)] >> (i & 0x7)) & 1) << 3;
59386             y |= ((e[63 - (i / 8)] >> (i & 0x7)) & 1) << 4;
59387             y |= ((e[47 - (i / 8)] >> (i & 0x7)) & 1) << 5;
59388             y |= ((e[31 - (i / 8)] >> (i & 0x7)) & 1) << 6;
59389             y |= ((e[15 - (i / 8)] >> (i & 0x7)) & 1) << 7;
59390 
59391             sp_1024_proj_sqr_avx2_16(tx, ty, t);
59392             sp_1024_proj_mul_qx1_avx2_16(tx, ty, sp_1024_g_table[y], t);
59393         }
59394     }
59395 
59396     if (err == MP_OKAY) {
59397         sp_1024_mont_inv_avx2_16(tx, tx, t);
59398         sp_1024_mont_mul_avx2_16(r, tx, ty, p1024_mod, p1024_mp_mod);
59399         XMEMSET(r + 16, 0, sizeof(sp_digit) * 16);
59400         sp_1024_mont_reduce_avx2_16(r, p1024_mod, p1024_mp_mod);
59401 
59402         err = sp_1024_to_mp(r, res);
59403     }
59404 
59405 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
59406     !defined(WOLFSSL_SP_NO_MALLOC)
59407     if (td != NULL) {
59408         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
59409     }
59410 #endif
59411     return err;
59412 }
59413 
59414 #endif /* WOLFSSL_SP_SMALL */
59415 #endif /* HAVE_INTEL_AVX2 */
59416 /* Perform the modular exponentiation for SAKKE.
59417  *
59418  * base  Base. MP integer.
59419  * exp   Exponent. MP integer.
59420  * res   Result. MP integer.
59421  * returns 0 on success, MP_READ_E if there are too many bytes in an array
59422  * and MEMORY_E if memory allocation fails.
59423  */
sp_ModExp_Fp_star_1024(const mp_int * base,mp_int * exp,mp_int * res)59424 int sp_ModExp_Fp_star_1024(const mp_int* base, mp_int* exp, mp_int* res)
59425 {
59426     int err;
59427 #ifdef HAVE_INTEL_AVX2
59428     word32 cpuid_flags = cpuid_get_flags();
59429 #endif
59430 
59431     ASSERT_SAVED_VECTOR_REGISTERS();
59432 
59433 #ifdef HAVE_INTEL_AVX2
59434     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
59435         err = sp_ModExp_Fp_star_avx2_1024(base, exp, res);
59436     }
59437     else
59438 #endif
59439     {
59440         err = sp_ModExp_Fp_star_x64_1024(base, exp, res);
59441     }
59442 
59443    return err;
59444 }
59445 
59446 /* Multiply p* by q* in projective co-ordinates.
59447  *
59448  *   p.x' = (p.x * q.x) - (p.y * q.y)
59449  *   p.y' = (p.x * q.y) + (p.y * q.x)
59450  * But applying Karatsuba:
59451  *   v0 = p.x * q.x
59452  *   v1 = p.y * q.y
59453  *   p.x' = v0 - v1
59454  *   p.y' = (px + py) * (qx + qy) - v0 - v1
59455  *
59456  * px  [in,out]  A single precision integer - X ordinate of number to multiply.
59457  * py  [in,out]  A single precision integer - Y ordinate of number to multiply.
59458  * qx  [in]      A single precision integer - X ordinate of number of
59459  *               multiplier.
59460  * qy  [in]      A single precision integer - Y ordinate of number of
59461  *               multiplier.
59462  * t   [in]      Two single precision integers - temps.
59463  */
sp_1024_proj_mul_16(sp_digit * px,sp_digit * py,const sp_digit * qx,const sp_digit * qy,sp_digit * t)59464 static void sp_1024_proj_mul_16(sp_digit* px, sp_digit* py,
59465         const sp_digit* qx, const sp_digit* qy, sp_digit* t)
59466 {
59467     sp_digit* t1 = t;
59468     sp_digit* t2 = t + 2 * 16;
59469 
59470     /* t1 = px + py */
59471     sp_1024_mont_add_16(t1, px, py, p1024_mod);
59472     /* t2 = qx + qy */
59473     sp_1024_mont_add_16(t2, qx, qy, p1024_mod);
59474     /* t2 = (px + py) * (qx + qy) */
59475     sp_1024_mont_mul_16(t2, t1, t2, p1024_mod, p1024_mp_mod);
59476     /* t1 = py * qy */
59477     sp_1024_mont_mul_16(t1, py, qy, p1024_mod, p1024_mp_mod);
59478     /* t2 = (px + py) * (qx + qy) - (py * qy) */
59479     sp_1024_mont_sub_16(t2, t2, t1, p1024_mod);
59480     /* px = px * qx */
59481     sp_1024_mont_mul_16(px, px, qx, p1024_mod, p1024_mp_mod);
59482     /* py = (px + py) * (qx + qy) - (py * qy) - (px * qx) */
59483     sp_1024_mont_sub_16(py, t2, px, p1024_mod);
59484     /* px = (px * qx) - (py * qy)*/
59485     sp_1024_mont_sub_16(px, px, t1, p1024_mod);
59486 }
59487 
59488 #ifndef WOLFSSL_SP_SMALL
59489 /*
59490  * Convert point from projective to affine but keep in Montgomery form.
59491  *
59492  * p  [in,out]  Point to convert.
59493  * t  [in]      Temporary numbers: 2.
59494  */
sp_1024_mont_map_16(sp_point_1024 * p,sp_digit * t)59495 static void sp_1024_mont_map_16(sp_point_1024* p, sp_digit* t)
59496 {
59497     sp_digit* t1 = t;
59498     sp_digit* t2 = t + 2 * 16;
59499 
59500     sp_1024_mont_inv_16(t1, p->z, t2);
59501     sp_1024_mont_sqr_16(t2, t1, p1024_mod, p1024_mp_mod);
59502     sp_1024_mont_mul_16(t1, t2, t1, p1024_mod, p1024_mp_mod);
59503     sp_1024_mont_mul_16(p->x, p->x, t2, p1024_mod, p1024_mp_mod);
59504     sp_1024_mont_mul_16(p->y, p->y, t1, p1024_mod, p1024_mp_mod);
59505     XMEMCPY(p->z, p1024_norm_mod, sizeof(sp_digit) * 16);
59506 }
59507 
59508 #endif /* WOLFSSL_SP_SMALL */
59509 /*
59510  * Calculate gradient of line through P, P and [-2]P, accumulate line and
59511  * double P.
59512  *
59513  * Calculations:
59514  *   l = 3 * (p.x^2 - p.z^4) = 3 * (p.x - p.z^2) * (p.x + p.z^2)
59515  *   r.x = l * (p.x + q.x * p.z^2) - 2 * p.y^2
59516  *   r.y = 2 * p.y * p.z^3 * q.y (= p'.z * p.z^2 * q.y)
59517  *   v* = v*^2 * r*
59518  *   p'.x = l^2 - 8 * p.y^2 * p.x
59519  *   p'.y = (4 * p.y^2 * p.x - p'.x) * l - 8 * p.y^4
59520  *   p'.z = 2 * p.y * p.z
59521  *
59522  * @param  [in,out]  vx  X-ordinate of projective value in F*.
59523  * @param  [in,out]  vy  Y-ordinate of projective value in F*.
59524  * @param  [in,out]  p   ECC point - point on E(F_p^2) to double.
59525  * @param  [in]      q   ECC point - second point on E(F_P^2).
59526  * @param  [in]      t   SP temporaries (6 used).
59527  */
sp_1024_accumulate_line_dbl_16(sp_digit * vx,sp_digit * vy,sp_point_1024 * p,const sp_point_1024 * q,sp_digit * t)59528 static void sp_1024_accumulate_line_dbl_16(sp_digit* vx, sp_digit* vy,
59529         sp_point_1024* p, const sp_point_1024* q, sp_digit* t)
59530 {
59531     sp_digit* t1  = t +  0 * 16;
59532     sp_digit* pz2 = t +  2 * 16;
59533     sp_digit* rx  = t +  4 * 16;
59534     sp_digit* ry  = t +  6 * 16;
59535     sp_digit* l   = t +  8 * 16;
59536     sp_digit* ty  = t + 10 * 16;
59537 
59538     /* v = v^2 */
59539     sp_1024_proj_sqr_16(vx, vy, t);
59540     /* pz2 = p.z^2 */
59541     sp_1024_mont_sqr_16(pz2, p->z, p1024_mod, p1024_mp_mod);
59542     /* t1 = p.x + p.z^2 */
59543     sp_1024_mont_add_16(ty, p->x, pz2, p1024_mod);
59544     /* l = p.x - p.z^2 */
59545     sp_1024_mont_sub_16(l, p->x, pz2, p1024_mod);
59546     /* t1 = (p.x + p.z^2) * (p.x - p.z^2) = p.x^2 - p.z^4 */
59547     sp_1024_mont_mul_16(t1, l, ty, p1024_mod, p1024_mp_mod);
59548     /* l = 3 * (p.x^2 - p.z^4) */
59549     sp_1024_mont_tpl_16(l, t1, p1024_mod);
59550     /* t1 = q.x * p.z^2 */
59551     sp_1024_mont_mul_16(t1, q->x, pz2, p1024_mod, p1024_mp_mod);
59552     /* t1 = p.x + q.x * p.z^2 */
59553     sp_1024_mont_add_16(t1, p->x, t1, p1024_mod);
59554     /* r.x = l * (p.x + q.x * p.z^2) */
59555     sp_1024_mont_mul_16(rx, l, t1, p1024_mod, p1024_mp_mod);
59556     /* r.y = 2 * p.y */
59557     sp_1024_mont_dbl_16(ry, p->y, p1024_mod);
59558     /* ty = 4 * p.y ^ 2 */
59559     sp_1024_mont_sqr_16(ty, ry, p1024_mod, p1024_mp_mod);
59560     /* t1 = 2 * p.y ^ 2 */
59561     sp_1024_div2_16(t1, ty, p1024_mod);
59562     /* r.x -= 2 * (p.y ^ 2) */
59563     sp_1024_mont_sub_16(rx, rx, t1, p1024_mod);
59564     /* p'.z = p.y * 2 * p.z */
59565     sp_1024_mont_mul_16(p->z, p->z, ry, p1024_mod, p1024_mp_mod);
59566     /* r.y = p'.z * p.z^2 */
59567     sp_1024_mont_mul_16(t1, p->z, pz2, p1024_mod, p1024_mp_mod);
59568     /* r.y = p'.z * p.z^2 * q.y */
59569     sp_1024_mont_mul_16(ry, t1, q->y, p1024_mod, p1024_mp_mod);
59570     /* v = v^2 * r */
59571     sp_1024_proj_mul_16(vx, vy, rx, ry, t);
59572 
59573     /* Double point using previously calculated values
59574      *   l = 3 * (p.x - p.z^2).(p.x + p.z^2)
59575      *   ty = 4 * p.y^2
59576      *   p'.z = 2 * p.y * p.z
59577      */
59578     /* t1 = (4 * p.y^2) ^ 2 = 16 * p.y^4 */
59579     sp_1024_mont_sqr_16(t1, ty, p1024_mod, p1024_mp_mod);
59580     /* t1 = 16 * p.y^4 / 2 = 8 * p.y^4 */
59581     sp_1024_div2_16(t1, t1, p1024_mod);
59582     /* p'.y = 4 * p.y^2 * p.x */
59583     sp_1024_mont_mul_16(p->y, ty, p->x, p1024_mod, p1024_mp_mod);
59584     /* p'.x = l^2 */
59585     sp_1024_mont_sqr_16(p->x, l, p1024_mod, p1024_mp_mod);
59586     /* p'.x = l^2 - 4 * p.y^2 * p.x */
59587     sp_1024_mont_sub_16(p->x, p->x, p->y, p1024_mod);
59588     /* p'.x = l^2 - 8 * p.y^2 * p.x */
59589     sp_1024_mont_sub_16(p->x, p->x, p->y, p1024_mod);
59590     /* p'.y = 4 * p.y^2 * p.x - p.x' */
59591     sp_1024_mont_sub_16(ty, p->y, p->x, p1024_mod);
59592     /* p'.y = (4 * p.y^2 * p.x - p'.x) * l */
59593     sp_1024_mont_mul_16(p->y, ty, l, p1024_mod, p1024_mp_mod);
59594     /* p'.y = (4 * p.y^2 * p.x - p'.x) * l - 8 * p.y^4 */
59595     sp_1024_mont_sub_16(p->y, p->y, t1, p1024_mod);
59596 }
59597 
59598 #ifdef WOLFSSL_SP_SMALL
59599 /*
59600  * Calculate gradient of line through C, P and -C-P, accumulate line and
59601  * add P to C.
59602  *
59603  * Calculations:
59604  *   r.x = (q.x + p.x) * c.y - (q.x * c.z^2 + c.x) * p.y * c.z
59605  *   r.y = (c.x - p.x * c.z^2) * q.y * c.z
59606  *   v* = v* * r*
59607  *   r = p.y * c.z^3 - c.y
59608  *   c'.x = r^2 + h^3 - 2 * c.x * h^2
59609  *   c'.y = r * (c'.x - c.x * h^2) - c.y * h^3
59610  *   c'.z = (c.x - p.x * c.z^2) * c.z
59611  *
59612  * @param  [in,out]  vx     X-ordinate of projective value in F*.
59613  * @param  [in,out]  vy     Y-ordinate of projective value in F*.
59614  * @param  [in,out]  c      ECC point - current point on E(F_p^2) to be added
59615  *                          to.
59616  * @param  [in]      p      ECC point - point on E(F_p^2) to add.
59617  * @param  [in]      q      ECC point - second point on E(F_P^2).
59618  * @param  [in]      qx_px  SP that is a constant value across adds.
59619  * @param  [in]      t      SP temporaries (6 used).
59620  */
sp_1024_accumulate_line_add_one_16(sp_digit * vx,sp_digit * vy,sp_point_1024 * c,sp_point_1024 * p,sp_point_1024 * q,sp_digit * qx_px,sp_digit * t)59621 static void sp_1024_accumulate_line_add_one_16(sp_digit* vx, sp_digit* vy,
59622         sp_point_1024* c, sp_point_1024* p, sp_point_1024* q, sp_digit* qx_px,
59623         sp_digit* t)
59624 {
59625     sp_digit* t1  = t;
59626     sp_digit* t2  = t +  2 * 16;
59627     sp_digit* rx  = t +  4 * 16;
59628     sp_digit* ry  = t +  6 * 16;
59629     sp_digit* h   = t +  8 * 16;
59630     sp_digit* r   = t + 10 * 16;
59631 
59632     /* r.x = (q.x + p.x) * c.y */
59633     sp_1024_mont_mul_16(rx, qx_px, c->y, p1024_mod, p1024_mp_mod);
59634     /* t2 = c.z^2 */
59635     sp_1024_mont_sqr_16(t2, c->z, p1024_mod, p1024_mp_mod);
59636     /* t1 = q.x * c.z^2 */
59637     sp_1024_mont_mul_16(t1, q->x, t2, p1024_mod, p1024_mp_mod);
59638     /* t1 = q.x * c.z^2 + c.x */
59639     sp_1024_mont_add_16(h, t1, c->x, p1024_mod);
59640     /* r = p.y * c.z */
59641     sp_1024_mont_mul_16(ry, p->y, c->z, p1024_mod, p1024_mp_mod);
59642     /* t1 = (q.x * c.z^2 + c.x) * p.y * c.z */
59643     sp_1024_mont_mul_16(t1, h, ry, p1024_mod, p1024_mp_mod);
59644     /* r = p.y * c.z * c.z^2 = p.y * c.z^3  */
59645     sp_1024_mont_mul_16(r, ry, t2, p1024_mod, p1024_mp_mod);
59646     /* r.x -= (q.x * c.z^2 + c.x) * p.y * c.z */
59647     sp_1024_mont_sub_16(rx, rx, t1, p1024_mod);
59648     /* t1 = p.x * c.z^2 */
59649     sp_1024_mont_mul_16(t1, p->x, t2, p1024_mod, p1024_mp_mod);
59650     /* h = c.x - p.x * c.z^2 */
59651     sp_1024_mont_sub_16(h, c->x, t1, p1024_mod);
59652     /* c'.z = (c.x - p.x * c.z^2) * c.z */
59653     sp_1024_mont_mul_16(c->z, h, c->z, p1024_mod, p1024_mp_mod);
59654     /* r.y = (c.x - p.x * c.z^2) * c.z * q.y */
59655     sp_1024_mont_mul_16(ry, c->z, q->y, p1024_mod, p1024_mp_mod);
59656     /* v = v * r */
59657     sp_1024_proj_mul_16(vx, vy, rx, ry, t);
59658 
59659     /* Add p to c using previously calculated values.
59660      *   h = c.x - p.x * c.z^2
59661      *   r = p.y * c.z^3
59662      *   c'.z = (c.x - p.x * c.z^2) * c.z
59663      */
59664 
59665     /* r = p.y * c.z^3 - c.y */
59666     sp_1024_mont_sub_16(r, r, c->y, p1024_mod);
59667     /* t1 = r^2 */
59668     sp_1024_mont_sqr_16(t1, r, p1024_mod, p1024_mp_mod);
59669     /* t2 = h^2 */
59670     sp_1024_mont_sqr_16(rx, h, p1024_mod, p1024_mp_mod);
59671     /* ry = c.x * h^2 */
59672     sp_1024_mont_mul_16(ry, c->x, rx, p1024_mod, p1024_mp_mod);
59673     /* t2 = h^3 */
59674     sp_1024_mont_mul_16(t2, rx, h, p1024_mod, p1024_mp_mod);
59675     /* c->x = r^2 + h^3 */
59676     sp_1024_mont_add_16(c->x, t1, t2, p1024_mod);
59677     /* t1 = 2 * c.x * h^2 */
59678     sp_1024_mont_dbl_16(t1, ry, p1024_mod);
59679     /* c'.x = r^2 + h^3 - 2 * c.x * h^2 */
59680     sp_1024_mont_sub_16(c->x, c->x, t1, p1024_mod);
59681     /* ry = c'.x - c.x * h^2 */
59682     sp_1024_mont_sub_16(t1, c->x, ry, p1024_mod);
59683     /* ry = r * (c'.x - c.x * h^2) */
59684     sp_1024_mont_mul_16(ry, t1, r, p1024_mod, p1024_mp_mod);
59685     /* t2 = c.y * h^3 */
59686     sp_1024_mont_mul_16(t1, t2, c->y, p1024_mod, p1024_mp_mod);
59687     /* c'.y = r * (c'.x - c.x * h^2) - c.y * h^3 */
59688     sp_1024_mont_sub_16(c->y, ry, t1, p1024_mod);
59689 }
59690 
59691 /*
59692  * Calculate r = pairing <P, Q>.
59693  *
59694  * That is, multiply base in PF_p[q] by the scalar s, such that s.P = Q.
59695  *
59696  * @param  [in]  key  SAKKE key.
59697  * @param  [in]  p    First point on E(F_p)[q].
59698  * @param  [in]  q    Second point on E(F_p)[q].
59699  * @param  [in]  r    Result of calculation.
59700  * @return  0 on success.
59701  * @return  MEMORY_E when dynamic memory allocation fails.
59702  * @return  Other -ve value on internal failure.
59703  */
sp_Pairing_x64_1024(const ecc_point * pm,const ecc_point * qm,mp_int * res)59704 static int sp_Pairing_x64_1024(const ecc_point* pm, const ecc_point* qm, mp_int* res)
59705 {
59706     int err = MP_OKAY;
59707 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
59708     !defined(WOLFSSL_SP_NO_MALLOC)
59709     sp_digit* td = NULL;
59710     sp_digit* t;
59711     sp_digit* vx;
59712     sp_digit* vy;
59713     sp_digit* qx_px;
59714 #else
59715     sp_digit t[6 * 2 * 16];
59716     sp_digit vx[2 * 16];
59717     sp_digit vy[2 * 16];
59718     sp_digit qx_px[2 * 16];
59719     sp_point_1024 pd;
59720     sp_point_1024 qd;
59721     sp_point_1024 cd;
59722 #endif
59723     sp_point_1024* p = NULL;
59724     sp_point_1024* q = NULL;
59725     sp_point_1024* c = NULL;
59726     sp_digit* r = NULL;
59727     int i;
59728 
59729     err = sp_1024_point_new_16(NULL, pd, p);
59730     if (err == MP_OKAY) {
59731         err = sp_1024_point_new_16(NULL, qd, q);
59732     }
59733     if (err == MP_OKAY) {
59734         err = sp_1024_point_new_16(NULL, cd, c);
59735     }
59736 
59737 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
59738     !defined(WOLFSSL_SP_NO_MALLOC)
59739     if (err == MP_OKAY) {
59740         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 9 * 16 * 2, NULL,
59741                                 DYNAMIC_TYPE_TMP_BUFFER);
59742         if (td == NULL) {
59743             err = MEMORY_E;
59744         }
59745     }
59746 #endif
59747 
59748     if (err == MP_OKAY) {
59749 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
59750     !defined(WOLFSSL_SP_NO_MALLOC)
59751         t     = td;
59752         vx    = td + 6 * 16 * 2;
59753         vy    = td + 7 * 16 * 2;
59754         qx_px = td + 8 * 16 * 2;
59755 #endif
59756         r = vy;
59757 
59758         sp_1024_point_from_ecc_point_16(p, pm);
59759         sp_1024_point_from_ecc_point_16(q, qm);
59760 
59761         err = sp_1024_mod_mul_norm_16(p->x, p->x, p1024_mod);
59762     }
59763     if (err == MP_OKAY) {
59764         err = sp_1024_mod_mul_norm_16(p->y, p->y, p1024_mod);
59765     }
59766     if (err == MP_OKAY) {
59767         err = sp_1024_mod_mul_norm_16(p->z, p->z, p1024_mod);
59768     }
59769     if (err == MP_OKAY) {
59770         err = sp_1024_mod_mul_norm_16(q->x, q->x, p1024_mod);
59771     }
59772     if (err == MP_OKAY) {
59773         err = sp_1024_mod_mul_norm_16(q->y, q->y, p1024_mod);
59774     }
59775     if (err == MP_OKAY) {
59776         XMEMCPY(c, p, sizeof(sp_point_1024));
59777         XMEMSET(vx, 0, sizeof(sp_digit) * 2 * 16);
59778         vx[0] = 1;
59779         XMEMSET(vy, 0, sizeof(sp_digit) * 2 * 16);
59780 
59781         sp_1024_mont_add_16(qx_px, q->x, p->x, p1024_mod);
59782 
59783         for (i = 1020; i >= 0; i--) {
59784             /* Accumulate line into v and double point. */
59785             sp_1024_accumulate_line_dbl_16(vx, vy, c, q, t);
59786 
59787             if ((i > 0) && ((p1024_order[i / 64] >> (i % 64)) & 1)) {
59788                 /* Accumulate line into v and add P into C. */
59789                 sp_1024_accumulate_line_add_one_16(vx, vy, c, p, q, qx_px, t);
59790             }
59791         }
59792 
59793         /* Final exponentiation */
59794         sp_1024_proj_sqr_16(vx, vy, t);
59795         sp_1024_proj_sqr_16(vx, vy, t);
59796 
59797         /* Convert from PF_p[q] to F_p */
59798         sp_1024_mont_inv_16(vx, vx, t);
59799         sp_1024_mont_mul_16(r, vx, vy, p1024_mod, p1024_mp_mod);
59800         XMEMSET(r + 16, 0, sizeof(sp_digit) * 16);
59801         sp_1024_mont_reduce_16(r, p1024_mod, p1024_mp_mod);
59802 
59803         err = sp_1024_to_mp(r, res);
59804     }
59805 
59806 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
59807     !defined(WOLFSSL_SP_NO_MALLOC)
59808     if (td != NULL) {
59809         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
59810     }
59811 #endif
59812     sp_1024_point_free_16(c, 1, NULL);
59813     sp_1024_point_free_16(q, 1, NULL);
59814     sp_1024_point_free_16(p, 1, NULL);
59815     return err;
59816 }
59817 
59818 #else
59819 /*
59820  * Calculate gradient of line through C, P and -C-P, accumulate line and
59821  * add P to C.
59822  *
59823  * Both C and P have z ordinates to use in the calculation.
59824  *
59825  * Calculations:
59826  *   r.x  = (q.x * c.z^2 + c.x) * p.y * c.z - (q.x * p.z^2 + p.x) * c.y * p.z
59827  *   r.y  = (p.x * c.z^2 - c.x * p.z^2) * q.y * p.z * c.z
59828  *   v*   = v* * r*
59829  *   h    = p.x * c.z^2 - c.x * p.z^2
59830  *   r    = p.y * c.z^3 - c.y * p.z^3
59831  *   c'.x = r^2 - h^3 - 2 * c.x * p.z^2 * h^2
59832  *   c'.y = r * (c.x * p.z^2 * h^2 - c'.x) - c.y * p.z^3 * h^3
59833  *   c'.z = (p.x * c.z^2 - c.x * p.z^2) * c.z
59834  *
59835  * @param  [in,out]  vx     X-ordinate of projective value in F*.
59836  * @param  [in,out]  vy     Y-ordinate of projective value in F*.
59837  * @param  [in,out]  c      ECC point - current point on E(F_p^2) to be added
59838  *                          to.
59839  * @param  [in,out]  p      ECC point - point on E(F_p^2) to add.
59840  * @param  [in,out]  q      ECC point - second point on E(F_P^2).
59841  * @param  [in,out]  t      SP temporaries (6 used).
59842  * @param  [in,out]  neg    Indicates to use negative P.
59843  * @return  0 on success.
59844  * @return  MEMORY_E when dynamic memory allocation fails.
59845  * @return  Other -ve value on internal failure.
59846  */
sp_1024_accumulate_line_add_n_16(sp_digit * vx,sp_digit * vy,const sp_point_1024 * p,const sp_point_1024 * q,sp_point_1024 * c,sp_digit * t,int neg)59847 static void sp_1024_accumulate_line_add_n_16(sp_digit* vx, sp_digit* vy,
59848         const sp_point_1024* p, const sp_point_1024* q,
59849         sp_point_1024* c, sp_digit* t, int neg)
59850 {
59851     sp_digit* t1 = t;
59852     sp_digit* t2 = t +  2 * 16;
59853     sp_digit* rx = t +  4 * 16;
59854     sp_digit* ry = t +  6 * 16;
59855     sp_digit* h  = t +  8 * 16;
59856     sp_digit* r  = t + 10 * 16;
59857 
59858     /* h = p.z^2 */
59859     sp_1024_mont_sqr_16(h, p->z, p1024_mod, p1024_mp_mod);
59860     /* rx = q.x * p.z^2 */
59861     sp_1024_mont_mul_16(rx, q->x, h, p1024_mod, p1024_mp_mod);
59862     /* rx = q.x * p.z^2 + p.x */
59863     sp_1024_mont_add_16(t2, rx, p->x, p1024_mod);
59864     /* c.y = c.y * p.z */
59865     sp_1024_mont_mul_16(t1, c->y, p->z, p1024_mod, p1024_mp_mod);
59866     /* r.x = (q.x * p.z^2 + p.x) * c.y * p.z */
59867     sp_1024_mont_mul_16(rx, t2, t1, p1024_mod, p1024_mp_mod);
59868     /* c.y = c.y * p.z^3 */
59869     sp_1024_mont_mul_16(c->y, t1, h, p1024_mod, p1024_mp_mod);
59870     /* t2 = c.z^2 */
59871     sp_1024_mont_sqr_16(t2, c->z, p1024_mod, p1024_mp_mod);
59872     /* t1 = q.x * c.z^2 */
59873     sp_1024_mont_mul_16(t1, q->x, t2, p1024_mod, p1024_mp_mod);
59874     /* t1 = q.x * c.z^2 + c.x */
59875     sp_1024_mont_add_16(t1, t1, c->x, p1024_mod);
59876     /* c.x = c.x * p.z^2 */
59877     sp_1024_mont_mul_16(c->x, c->x, h, p1024_mod, p1024_mp_mod);
59878     /* r = p.y * c.z */
59879     sp_1024_mont_mul_16(r, p->y, c->z, p1024_mod, p1024_mp_mod);
59880     if (neg) {
59881         /* r = -p.y * c.z */
59882         sp_1024_mont_sub_16(r, p1024_mod, r, p1024_mod);
59883     }
59884     /* t1 = (q.x * c.z^2 + c.x) * p.y * c.z */
59885     sp_1024_mont_mul_16(ry, t1, r, p1024_mod, p1024_mp_mod);
59886     /* r.x -= (q.x * c.z^2 + c.x) * p.y * c.z */
59887     sp_1024_mont_sub_16(rx, ry, rx, p1024_mod);
59888     /* t1 = p.x * c.z^2 */
59889     sp_1024_mont_mul_16(t1, p->x, t2, p1024_mod, p1024_mp_mod);
59890     /* h = p.x * c.z^2 - c.x * p.z^2 */
59891     sp_1024_mont_sub_16(h, t1, c->x, p1024_mod);
59892     /* c'.z = (p.x * c.z^2 - c.x * p.z^2) * c.z */
59893     sp_1024_mont_mul_16(t1, h, c->z, p1024_mod, p1024_mp_mod);
59894     /* c'.z = (p.x * c.z^2 - c.x * p.z^2) * c.z * p.z */
59895     sp_1024_mont_mul_16(c->z, t1, p->z, p1024_mod, p1024_mp_mod);
59896     /* r.y = (p.x * c.z^2 - c.x * p.z^2) * c.z * p.z * q.y */
59897     sp_1024_mont_mul_16(ry, c->z, q->y, p1024_mod, p1024_mp_mod);
59898     /* r = p.y * c.z^3 */
59899     sp_1024_mont_mul_16(t1, r, t2, p1024_mod, p1024_mp_mod);
59900     /* r = p.y * c.z^3 - c.y * p.z^3 */
59901     sp_1024_mont_sub_16(r, t1, c->y, p1024_mod);
59902     /* v = v * r */
59903     sp_1024_proj_mul_16(vx, vy, rx, ry, t);
59904 
59905     /* Add p to c using previously calculated values.
59906      *   h = p.x * c.z^2 - c.x * p.z^2
59907      *   r = p.y * c.z^3 - c.y * p.z^3
59908      *   c'.z = (p.x * c.z^2 - c.x * p.z^2) * c.z
59909      */
59910 
59911     /* t1 = r^2 */
59912     sp_1024_mont_sqr_16(t1, r, p1024_mod, p1024_mp_mod);
59913     /* t2 = h^2 */
59914     sp_1024_mont_sqr_16(rx, h, p1024_mod, p1024_mp_mod);
59915     /* ry = c.x * p.z^2 * h^2 */
59916     sp_1024_mont_mul_16(ry, rx, c->x, p1024_mod, p1024_mp_mod);
59917     /* t2 = h^3 */
59918     sp_1024_mont_mul_16(t2, rx, h, p1024_mod, p1024_mp_mod);
59919     /* c'.x = r^2 - h^3 */
59920     sp_1024_mont_sub_16(c->x, t1, t2, p1024_mod);
59921     /* t1 = 2 * c.x * p.z^2 * h^2 */
59922     sp_1024_mont_dbl_16(t1, ry, p1024_mod);
59923     /* c'.x = r^2 - h^3 - 2 * c.x * p.z^2 * h^2 */
59924     sp_1024_mont_sub_16(c->x, c->x, t1, p1024_mod);
59925     /* ry = c.x * p.z^2 * h^2 - c'.x */
59926     sp_1024_mont_sub_16(t1, ry, c->x, p1024_mod);
59927     /* ry = r * (c.x * p.z^2 * h^2 - c'.x) */
59928     sp_1024_mont_mul_16(ry, t1, r, p1024_mod, p1024_mp_mod);
59929     /* t2 = c.y * p.z^3 * h^3 */
59930     sp_1024_mont_mul_16(t1, t2, c->y, p1024_mod, p1024_mp_mod);
59931     /* c'.y = r * (c.x * p.z^2 * h^2 - c'.x) - c.y * p.z^3 * h^3 */
59932     sp_1024_mont_sub_16(c->y, ry, t1, p1024_mod);
59933 }
59934 
59935 /*
59936  * Perform n accumulate doubles and doubles of P.
59937  *
59938  * py = 2 * p.y
59939  *
59940  * For each double:
59941  * Calculate gradient of line through P, P and [-2]P, accumulate line and
59942  * double P.
59943  *
59944  * Calculations:
59945  *   l = 3 * (p.x^2 - p.z^4) = 3 * (p.x - p.z^2) * (p.x + p.z^2)
59946  *   r.x = l * (p.x + q.x * p.z^2) - py^2 / 2
59947  *   r.y = py * p.z^3 * q.y (= p'.z * p.z^2 * q.y)
59948  *   v* = v*^2 * r*
59949  *   p'.x = l^2 - 2 * py^2 * p.x
59950  *   py' = (py^2 * p.x - p'.x) * l - py^4 (= 2 * p'.y)
59951  *   p'.z = py * p.z
59952  *
59953  * Finally:
59954  *   p'.y = py' / 2
59955  *
59956  * @param  [in,out]  vx  X-ordinate of projective value in F*.
59957  * @param  [in,out]  vy  Y-ordinate of projective value in F*.
59958  * @param  [in,out]  p   ECC point - point on E(F_p^2) to double.
59959  * @param  [in]      q   ECC point - second point on E(F_P^2).
59960  * @param  [in]      n   Number of times to double.
59961  * @param  [in]      t   SP temporaries (6 used).
59962  */
sp_1024_accumulate_line_dbl_n_16(sp_digit * vx,sp_digit * vy,sp_point_1024 * p,const sp_point_1024 * q,int n,sp_digit * t)59963 static void sp_1024_accumulate_line_dbl_n_16(sp_digit* vx, sp_digit* vy,
59964         sp_point_1024* p, const sp_point_1024* q, int n, sp_digit* t)
59965 {
59966     sp_digit* t1  = t +  0 * 16;
59967     sp_digit* pz2 = t +  2 * 16;
59968     sp_digit* rx  = t +  4 * 16;
59969     sp_digit* ry  = t +  6 * 16;
59970     sp_digit* l   = t +  8 * 16;
59971     sp_digit* ty  = t + 10 * 16;
59972     int i;
59973 
59974     /* py = 2 * p.y */
59975     sp_1024_mont_dbl_16(p->y, p->y, p1024_mod);
59976 
59977     for (i = 0; i < n; i++) {
59978         /* v = v^2 */
59979         sp_1024_proj_sqr_16(vx, vy, t);
59980         /* pz2 = p.z^2 */
59981         sp_1024_mont_sqr_16(pz2, p->z, p1024_mod, p1024_mp_mod);
59982         /* t1 = p.x + p.z^2 */
59983         sp_1024_mont_add_16(t1, p->x, pz2, p1024_mod);
59984         /* l = p.x - p.z^2 */
59985         sp_1024_mont_sub_16(l, p->x, pz2, p1024_mod);
59986         /* t1 = (p.x + p.z^2) * (p.x - p.z^2) = p.x^2 - p.z^4 */
59987         sp_1024_mont_mul_16(ty, l, t1, p1024_mod, p1024_mp_mod);
59988         /* l = 3 * (p.x^2 - p.z^4) */
59989         sp_1024_mont_tpl_16(l, ty, p1024_mod);
59990         /* t1 = q.x * p.z^2 */
59991         sp_1024_mont_mul_16(t1, q->x, pz2, p1024_mod, p1024_mp_mod);
59992         /* t1 = p.x + q.x * p.z^2 */
59993         sp_1024_mont_add_16(t1, p->x, t1, p1024_mod);
59994         /* r.x = l * (p.x + q.x * p.z^2) */
59995         sp_1024_mont_mul_16(rx, l, t1, p1024_mod, p1024_mp_mod);
59996         /* ty = py ^ 2 */
59997         sp_1024_mont_sqr_16(ty, p->y, p1024_mod, p1024_mp_mod);
59998         /* t1 = py ^ 2 / 2 */
59999         sp_1024_div2_16(t1, ty, p1024_mod);
60000         /* r.x -= py ^ 2 / 2 */
60001         sp_1024_mont_sub_16(rx, rx, t1, p1024_mod);
60002         /* p'.z = py * pz */
60003         sp_1024_mont_mul_16(p->z, p->z, p->y, p1024_mod, p1024_mp_mod);
60004         /* r.y = p'.z * p.z^2 */
60005         sp_1024_mont_mul_16(t1, p->z, pz2, p1024_mod, p1024_mp_mod);
60006         /* r.y = p'.z * p.z^2 * q.y */
60007         sp_1024_mont_mul_16(ry, t1, q->y, p1024_mod, p1024_mp_mod);
60008         /* v = v^2 * r */
60009         sp_1024_proj_mul_16(vx, vy, rx, ry, t);
60010 
60011         /* Double point using previously calculated values
60012          *   l = 3 * (p.x - p.z^2).(p.x + p.z^2)
60013          *   ty = py^2
60014          *   p'.z = py * p.z
60015          */
60016         /* t1 = py^2 ^ 2 = py^4 */
60017         sp_1024_mont_sqr_16(t1, ty, p1024_mod, p1024_mp_mod);
60018         /* py' = py^2 * p. x */
60019         sp_1024_mont_mul_16(p->y, ty, p->x, p1024_mod, p1024_mp_mod);
60020         /* p'.x = l^2 */
60021         sp_1024_mont_sqr_16(p->x, l, p1024_mod, p1024_mp_mod);
60022         /* p'.x = l^2 - py^2 * p.x */
60023         sp_1024_mont_sub_16(p->x, p->x, p->y, p1024_mod);
60024         /* p'.x = l^2 - 2 * p.y^2 * p.x */
60025         sp_1024_mont_sub_16(p->x, p->x, p->y, p1024_mod);
60026         /* py' = py^2 * p.x - p.x' */
60027         sp_1024_mont_sub_16(ty, p->y, p->x, p1024_mod);
60028         /* py' = (p.y^2 * p.x - p'.x) * l */
60029         sp_1024_mont_mul_16(p->y, ty, l, p1024_mod, p1024_mp_mod);
60030         /* py' = (p.y^2 * p.x - p'.x) * l * 2 */
60031         sp_1024_mont_dbl_16(p->y, p->y, p1024_mod);
60032         /* py' = (p.y^2 * p.x - p'.x) * l * 2 - p.y^4 */
60033         sp_1024_mont_sub_16(p->y, p->y, t1, p1024_mod);
60034     }
60035 
60036     /* p'.y = py' / 2 */
60037     sp_1024_div2_16(p->y, p->y, p1024_mod);
60038 }
60039 
60040 /* Operations to perform based on order - 1.
60041  * Sliding window. Start at bottom and stop when bottom bit is one.
60042  * Subtract if top bit in window is one.
60043  * Width of 6 bits.
60044  * Pairs: #dbls, add/subtract window value
60045  */
60046 static const signed char sp_1024_order_op[] = {
60047    5,   6, -13,   9, -21,   6,  -5,   8,  31,   6,   3,   6, -27,   6,  25,   9,
60048   -1,   6, -11,   6, -13,   6,  -7,   6, -15,   6, -29,   7,  25,   6,  -9,   6,
60049  -19,   7,   3,   6,  11,   9, -23,   6,   1,   6,  27,   6,   1,   7, -25,   8,
60050   13,   7, -13,   7, -23,  10,  19,   7,   7,   7,  -3,   7,  27,   6,  -7,   7,
60051  -21,   7,  11,   7,  31,   8,   1,   7, -23,   6, -17,   6,  -3,  10,  11,   6,
60052  -21,   7, -27,  11, -29,   6,  -1,  10,  15,   8,  27,   7,  17,   6,  17,   7,
60053  -13,   8,  13,   6,  21,   7, -29,   6,  19,   7, -25,   6,  11,   9,  29,   7,
60054   -7,   8,  27,   7,  29,  10,  -1,   8,  -7,   8,  17,   6,  17,   7, -27,   7,
60055  -21,   6,  -9,   6, -27,  12, -23,   6,  19,   6,  13,   6, -11,   7,  27,   6,
60056   17,   6,  -7,   6, -25,   7, -29,   6,   9,   7,   7,   6,  13,   6, -25,   6,
60057  -19,   6,  13,   6, -11,   6,   5,   8,  19,   6, -21,   8,  23,   7,  27,   6,
60058  -13,   6, -19,  11,  29,   7, -15,   6,  -9,   7, -21,  10,  -3,   7,  21,  10,
60059   25,   6, -15,   6, -23,   6,  21,   6,   1,   6,  21,   7,  -3,   6,  -3,   7,
60060   -7,   6, -23,   7,   7,   8,  15,   9,   5,   6, -11,   6,  21,  11, -27,   7,
60061   27,   6, -11,   6,  31,   6, -21,   6,  19,   6,  -7,   8,  -7,  13,  -3,   6,
60062   -7,   7,  -3,   6,   1,   6,   7,   8,  19,   8,  11,   9,  -9,   7, -31,  12,
60063   25,   6, -17,   9, -15,   7,   5,   6,  25,   7,  -5,   7, -25,   6,  17,   8,
60064  -19,   6, -13,   6,  27,   8,   1,   7,  -5,   7,  -1,   6,  21,   6,   3,  10,
60065   -3,   1,
60066 };
60067 /*
60068  * Calculate r = pairing <P, Q>.
60069  *
60070  * That is, multiply base in PF_p[q] by the scalar s, such that s.P = Q.
60071  *
60072  * Sliding window. Start at bottom and stop when bottom bit is one.
60073  * Subtract if top bit in window is one.
60074  * Width of 6 bits.
60075  *
60076  * @param  [in]  pm   First point on E(F_p)[q].
60077  * @param  [in]  qm   Second point on E(F_p)[q].
60078  * @param  [in]  res  Result of calculation.
60079  * @return  0 on success.
60080  * @return  MEMORY_E when dynamic memory allocation fails.
60081  */
sp_Pairing_x64_1024(const ecc_point * pm,const ecc_point * qm,mp_int * res)60082 static int sp_Pairing_x64_1024(const ecc_point* pm, const ecc_point* qm, mp_int* res)
60083 {
60084     int err;
60085 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
60086     !defined(WOLFSSL_SP_NO_MALLOC)
60087     sp_digit* td = NULL;
60088     sp_digit* t;
60089     sp_digit* vx;
60090     sp_digit* vy;
60091     sp_digit (*pre_vx)[32];
60092     sp_digit (*pre_vy)[32];
60093     sp_digit (*pre_nvy)[32];
60094     sp_point_1024* pre_p;
60095 #else
60096     sp_digit t[6 * 2 * 16];
60097     sp_digit vx[2 * 16];
60098     sp_digit vy[2 * 16];
60099     sp_digit pre_vx[16][32];
60100     sp_digit pre_vy[16][32];
60101     sp_digit pre_nvy[16][32];
60102     sp_point_1024 pre_p[16];
60103     sp_point_1024 pd;
60104     sp_point_1024 qd;
60105     sp_point_1024 cd;
60106 #endif
60107     sp_point_1024* p = NULL;
60108     sp_point_1024* q = NULL;
60109     sp_point_1024* c = NULL;
60110     sp_digit* r = NULL;
60111     int i;
60112     int j;
60113 
60114     err = sp_1024_point_new_16(NULL, pd, p);
60115     if (err == MP_OKAY) {
60116         err = sp_1024_point_new_16(NULL, qd, q);
60117     }
60118     if (err == MP_OKAY) {
60119         err = sp_1024_point_new_16(NULL, cd, c);
60120     }
60121 
60122 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
60123     !defined(WOLFSSL_SP_NO_MALLOC)
60124     if (err == MP_OKAY) {
60125         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 56 * 16 * 2 + 16 * sizeof(sp_point_1024), NULL,
60126                                 DYNAMIC_TYPE_TMP_BUFFER);
60127         if (td == NULL) {
60128             err = MEMORY_E;
60129         }
60130     }
60131 #endif
60132 
60133     if (err == MP_OKAY) {
60134 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
60135     !defined(WOLFSSL_SP_NO_MALLOC)
60136         t       = td;
60137         vx      = td + 6 * 16 * 2;
60138         vy      = td + 7 * 16 * 2;
60139         pre_vx  = (sp_digit(*)[32])(td + 8 * 16 * 2);
60140         pre_vy  = (sp_digit(*)[32])(td + 24 * 16 * 2);
60141         pre_nvy = (sp_digit(*)[32])(td + 40 * 16 * 2);
60142         pre_p   = (sp_point_1024*)(td + 56 * 16 * 2);
60143 #endif
60144         r = vy;
60145 
60146         sp_1024_point_from_ecc_point_16(p, pm);
60147         sp_1024_point_from_ecc_point_16(q, qm);
60148 
60149         err = sp_1024_mod_mul_norm_16(p->x, p->x, p1024_mod);
60150     }
60151     if (err == MP_OKAY) {
60152         err = sp_1024_mod_mul_norm_16(p->y, p->y, p1024_mod);
60153     }
60154     if (err == MP_OKAY) {
60155         err = sp_1024_mod_mul_norm_16(p->z, p->z, p1024_mod);
60156     }
60157     if (err == MP_OKAY) {
60158         err = sp_1024_mod_mul_norm_16(q->x, q->x, p1024_mod);
60159     }
60160     if (err == MP_OKAY) {
60161         err = sp_1024_mod_mul_norm_16(q->y, q->y, p1024_mod);
60162     }
60163     if (err == MP_OKAY) {
60164         /* Generate pre-computation table: 1, 3, ... , 31 */
60165         XMEMCPY(&pre_p[0], p, sizeof(sp_point_1024));
60166         XMEMSET(pre_vx[0], 0, sizeof(sp_digit) * 2 * 16);
60167         pre_vx[0][0] = 1;
60168         XMEMSET(pre_vy[0], 0, sizeof(sp_digit) * 2 * 16);
60169         sp_1024_mont_sub_16(pre_nvy[0], p1024_mod, pre_vy[0], p1024_mod);
60170 
60171         /* [2]P for adding */
60172         XMEMCPY(c, p, sizeof(sp_point_1024));
60173         XMEMSET(vx, 0, sizeof(sp_digit) * 2 * 16);
60174         vx[0] = 1;
60175         XMEMSET(vy, 0, sizeof(sp_digit) * 2 * 16);
60176         sp_1024_accumulate_line_dbl_16(vx, vy, c, q, t);
60177 
60178         /* 3, 5, ... */
60179         for (i = 1; i < 16; i++) {
60180             XMEMCPY(&pre_p[i], &pre_p[i-1], sizeof(sp_point_1024));
60181             XMEMCPY(pre_vx[i], pre_vx[i-1], sizeof(sp_digit) * 2 * 16);
60182             XMEMCPY(pre_vy[i], pre_vy[i-1], sizeof(sp_digit) * 2 * 16);
60183             sp_1024_proj_mul_16(pre_vx[i], pre_vy[i], vx, vy, t);
60184             sp_1024_accumulate_line_add_n_16(pre_vx[i], pre_vy[i], c,
60185                     q, &pre_p[i], t, 0);
60186             sp_1024_mont_sub_16(pre_nvy[i], p1024_mod, pre_vy[i], p1024_mod);
60187         }
60188 
60189         j = sp_1024_order_op[0] / 2;
60190         XMEMCPY(c, &pre_p[j], sizeof(sp_point_1024));
60191         XMEMCPY(vx, pre_vx[j], sizeof(sp_digit) * 2 * 16);
60192         XMEMCPY(vy, pre_vy[j], sizeof(sp_digit) * 2 * 16);
60193 
60194         /* Accumulate line into v and double point n times. */
60195         sp_1024_accumulate_line_dbl_n_16(vx, vy, c, q,
60196                 sp_1024_order_op[1], t);
60197 
60198         for (i = 2; i < 290; i += 2) {
60199             j = sp_1024_order_op[i];
60200             if (j > 0) {
60201                 j /= 2;
60202                 /* Accumulate line into v and add P into C. */
60203                 sp_1024_proj_mul_16(vx, vy, pre_vx[j], pre_vy[j], t);
60204                 sp_1024_accumulate_line_add_n_16(vx, vy, &pre_p[j], q, c,
60205                     t, 0);
60206             }
60207             else {
60208                 j = -j / 2;
60209                 /* Accumulate line into v and add P into C. */
60210                 sp_1024_proj_mul_16(vx, vy, pre_vx[j], pre_nvy[j], t);
60211                 sp_1024_accumulate_line_add_n_16(vx, vy, &pre_p[j], q, c,
60212                     t, 1);
60213             }
60214 
60215             /* Accumulate line into v and double point n times. */
60216             sp_1024_accumulate_line_dbl_n_16(vx, vy, c, q,
60217                     sp_1024_order_op[i + 1], t);
60218         }
60219 
60220         /* Final exponentiation */
60221         sp_1024_proj_sqr_16(vx, vy, t);
60222         sp_1024_proj_sqr_16(vx, vy, t);
60223 
60224         /* Convert from PF_p[q] to F_p */
60225         sp_1024_mont_inv_16(vx, vx, t);
60226         sp_1024_mont_mul_16(r, vx, vy, p1024_mod, p1024_mp_mod);
60227         XMEMSET(r + 16, 0, sizeof(sp_digit) * 16);
60228         sp_1024_mont_reduce_16(r, p1024_mod, p1024_mp_mod);
60229 
60230         err = sp_1024_to_mp(r, res);
60231     }
60232 
60233 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
60234     !defined(WOLFSSL_SP_NO_MALLOC)
60235     if (td != NULL) {
60236         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
60237     }
60238 #endif
60239     sp_1024_point_free_16(c, 1, NULL);
60240     sp_1024_point_free_16(q, 1, NULL);
60241     sp_1024_point_free_16(p, 1, NULL);
60242     return err;
60243 }
60244 
60245 #endif /* WOLFSSL_SP_SMALL */
60246 #ifdef HAVE_INTEL_AVX2
60247 /* Multiply p* by q* in projective co-ordinates.
60248  *
60249  *   p.x' = (p.x * q.x) - (p.y * q.y)
60250  *   p.y' = (p.x * q.y) + (p.y * q.x)
60251  * But applying Karatsuba:
60252  *   v0 = p.x * q.x
60253  *   v1 = p.y * q.y
60254  *   p.x' = v0 - v1
60255  *   p.y' = (px + py) * (qx + qy) - v0 - v1
60256  *
60257  * px  [in,out]  A single precision integer - X ordinate of number to multiply.
60258  * py  [in,out]  A single precision integer - Y ordinate of number to multiply.
60259  * qx  [in]      A single precision integer - X ordinate of number of
60260  *               multiplier.
60261  * qy  [in]      A single precision integer - Y ordinate of number of
60262  *               multiplier.
60263  * t   [in]      Two single precision integers - temps.
60264  */
sp_1024_proj_mul_avx2_16(sp_digit * px,sp_digit * py,const sp_digit * qx,const sp_digit * qy,sp_digit * t)60265 static void sp_1024_proj_mul_avx2_16(sp_digit* px, sp_digit* py,
60266         const sp_digit* qx, const sp_digit* qy, sp_digit* t)
60267 {
60268     sp_digit* t1 = t;
60269     sp_digit* t2 = t + 2 * 16;
60270 
60271     /* t1 = px + py */
60272     sp_1024_mont_add_avx2_16(t1, px, py, p1024_mod);
60273     /* t2 = qx + qy */
60274     sp_1024_mont_add_avx2_16(t2, qx, qy, p1024_mod);
60275     /* t2 = (px + py) * (qx + qy) */
60276     sp_1024_mont_mul_avx2_16(t2, t1, t2, p1024_mod, p1024_mp_mod);
60277     /* t1 = py * qy */
60278     sp_1024_mont_mul_avx2_16(t1, py, qy, p1024_mod, p1024_mp_mod);
60279     /* t2 = (px + py) * (qx + qy) - (py * qy) */
60280     sp_1024_mont_sub_avx2_16(t2, t2, t1, p1024_mod);
60281     /* px = px * qx */
60282     sp_1024_mont_mul_avx2_16(px, px, qx, p1024_mod, p1024_mp_mod);
60283     /* py = (px + py) * (qx + qy) - (py * qy) - (px * qx) */
60284     sp_1024_mont_sub_avx2_16(py, t2, px, p1024_mod);
60285     /* px = (px * qx) - (py * qy)*/
60286     sp_1024_mont_sub_avx2_16(px, px, t1, p1024_mod);
60287 }
60288 
60289 #ifndef WOLFSSL_SP_SMALL
60290 /*
60291  * Convert point from projective to affine but keep in Montgomery form.
60292  *
60293  * p  [in,out]  Point to convert.
60294  * t  [in]      Temporary numbers: 2.
60295  */
sp_1024_mont_map_avx2_16(sp_point_1024 * p,sp_digit * t)60296 static void sp_1024_mont_map_avx2_16(sp_point_1024* p, sp_digit* t)
60297 {
60298     sp_digit* t1 = t;
60299     sp_digit* t2 = t + 2 * 16;
60300 
60301     sp_1024_mont_inv_avx2_16(t1, p->z, t2);
60302     sp_1024_mont_sqr_avx2_16(t2, t1, p1024_mod, p1024_mp_mod);
60303     sp_1024_mont_mul_avx2_16(t1, t2, t1, p1024_mod, p1024_mp_mod);
60304     sp_1024_mont_mul_avx2_16(p->x, p->x, t2, p1024_mod, p1024_mp_mod);
60305     sp_1024_mont_mul_avx2_16(p->y, p->y, t1, p1024_mod, p1024_mp_mod);
60306     XMEMCPY(p->z, p1024_norm_mod, sizeof(sp_digit) * 16);
60307 }
60308 
60309 #endif /* WOLFSSL_SP_SMALL */
60310 /*
60311  * Calculate gradient of line through P, P and [-2]P, accumulate line and
60312  * double P.
60313  *
60314  * Calculations:
60315  *   l = 3 * (p.x^2 - p.z^4) = 3 * (p.x - p.z^2) * (p.x + p.z^2)
60316  *   r.x = l * (p.x + q.x * p.z^2) - 2 * p.y^2
60317  *   r.y = 2 * p.y * p.z^3 * q.y (= p'.z * p.z^2 * q.y)
60318  *   v* = v*^2 * r*
60319  *   p'.x = l^2 - 8 * p.y^2 * p.x
60320  *   p'.y = (4 * p.y^2 * p.x - p'.x) * l - 8 * p.y^4
60321  *   p'.z = 2 * p.y * p.z
60322  *
60323  * @param  [in,out]  vx  X-ordinate of projective value in F*.
60324  * @param  [in,out]  vy  Y-ordinate of projective value in F*.
60325  * @param  [in,out]  p   ECC point - point on E(F_p^2) to double.
60326  * @param  [in]      q   ECC point - second point on E(F_P^2).
60327  * @param  [in]      t   SP temporaries (6 used).
60328  */
sp_1024_accumulate_line_dbl_avx2_16(sp_digit * vx,sp_digit * vy,sp_point_1024 * p,const sp_point_1024 * q,sp_digit * t)60329 static void sp_1024_accumulate_line_dbl_avx2_16(sp_digit* vx, sp_digit* vy,
60330         sp_point_1024* p, const sp_point_1024* q, sp_digit* t)
60331 {
60332     sp_digit* t1  = t +  0 * 16;
60333     sp_digit* pz2 = t +  2 * 16;
60334     sp_digit* rx  = t +  4 * 16;
60335     sp_digit* ry  = t +  6 * 16;
60336     sp_digit* l   = t +  8 * 16;
60337     sp_digit* ty  = t + 10 * 16;
60338 
60339     /* v = v^2 */
60340     sp_1024_proj_sqr_avx2_16(vx, vy, t);
60341     /* pz2 = p.z^2 */
60342     sp_1024_mont_sqr_avx2_16(pz2, p->z, p1024_mod, p1024_mp_mod);
60343     /* t1 = p.x + p.z^2 */
60344     sp_1024_mont_add_avx2_16(ty, p->x, pz2, p1024_mod);
60345     /* l = p.x - p.z^2 */
60346     sp_1024_mont_sub_avx2_16(l, p->x, pz2, p1024_mod);
60347     /* t1 = (p.x + p.z^2) * (p.x - p.z^2) = p.x^2 - p.z^4 */
60348     sp_1024_mont_mul_avx2_16(t1, l, ty, p1024_mod, p1024_mp_mod);
60349     /* l = 3 * (p.x^2 - p.z^4) */
60350     sp_1024_mont_tpl_avx2_16(l, t1, p1024_mod);
60351     /* t1 = q.x * p.z^2 */
60352     sp_1024_mont_mul_avx2_16(t1, q->x, pz2, p1024_mod, p1024_mp_mod);
60353     /* t1 = p.x + q.x * p.z^2 */
60354     sp_1024_mont_add_avx2_16(t1, p->x, t1, p1024_mod);
60355     /* r.x = l * (p.x + q.x * p.z^2) */
60356     sp_1024_mont_mul_avx2_16(rx, l, t1, p1024_mod, p1024_mp_mod);
60357     /* r.y = 2 * p.y */
60358     sp_1024_mont_dbl_avx2_16(ry, p->y, p1024_mod);
60359     /* ty = 4 * p.y ^ 2 */
60360     sp_1024_mont_sqr_avx2_16(ty, ry, p1024_mod, p1024_mp_mod);
60361     /* t1 = 2 * p.y ^ 2 */
60362     sp_1024_div2_avx2_16(t1, ty, p1024_mod);
60363     /* r.x -= 2 * (p.y ^ 2) */
60364     sp_1024_mont_sub_avx2_16(rx, rx, t1, p1024_mod);
60365     /* p'.z = p.y * 2 * p.z */
60366     sp_1024_mont_mul_avx2_16(p->z, p->z, ry, p1024_mod, p1024_mp_mod);
60367     /* r.y = p'.z * p.z^2 */
60368     sp_1024_mont_mul_avx2_16(t1, p->z, pz2, p1024_mod, p1024_mp_mod);
60369     /* r.y = p'.z * p.z^2 * q.y */
60370     sp_1024_mont_mul_avx2_16(ry, t1, q->y, p1024_mod, p1024_mp_mod);
60371     /* v = v^2 * r */
60372     sp_1024_proj_mul_avx2_16(vx, vy, rx, ry, t);
60373 
60374     /* Double point using previously calculated values
60375      *   l = 3 * (p.x - p.z^2).(p.x + p.z^2)
60376      *   ty = 4 * p.y^2
60377      *   p'.z = 2 * p.y * p.z
60378      */
60379     /* t1 = (4 * p.y^2) ^ 2 = 16 * p.y^4 */
60380     sp_1024_mont_sqr_avx2_16(t1, ty, p1024_mod, p1024_mp_mod);
60381     /* t1 = 16 * p.y^4 / 2 = 8 * p.y^4 */
60382     sp_1024_div2_avx2_16(t1, t1, p1024_mod);
60383     /* p'.y = 4 * p.y^2 * p.x */
60384     sp_1024_mont_mul_avx2_16(p->y, ty, p->x, p1024_mod, p1024_mp_mod);
60385     /* p'.x = l^2 */
60386     sp_1024_mont_sqr_avx2_16(p->x, l, p1024_mod, p1024_mp_mod);
60387     /* p'.x = l^2 - 4 * p.y^2 * p.x */
60388     sp_1024_mont_sub_avx2_16(p->x, p->x, p->y, p1024_mod);
60389     /* p'.x = l^2 - 8 * p.y^2 * p.x */
60390     sp_1024_mont_sub_avx2_16(p->x, p->x, p->y, p1024_mod);
60391     /* p'.y = 4 * p.y^2 * p.x - p.x' */
60392     sp_1024_mont_sub_avx2_16(ty, p->y, p->x, p1024_mod);
60393     /* p'.y = (4 * p.y^2 * p.x - p'.x) * l */
60394     sp_1024_mont_mul_avx2_16(p->y, ty, l, p1024_mod, p1024_mp_mod);
60395     /* p'.y = (4 * p.y^2 * p.x - p'.x) * l - 8 * p.y^4 */
60396     sp_1024_mont_sub_avx2_16(p->y, p->y, t1, p1024_mod);
60397 }
60398 
60399 #ifdef WOLFSSL_SP_SMALL
60400 /*
60401  * Calculate gradient of line through C, P and -C-P, accumulate line and
60402  * add P to C.
60403  *
60404  * Calculations:
60405  *   r.x = (q.x + p.x) * c.y - (q.x * c.z^2 + c.x) * p.y * c.z
60406  *   r.y = (c.x - p.x * c.z^2) * q.y * c.z
60407  *   v* = v* * r*
60408  *   r = p.y * c.z^3 - c.y
60409  *   c'.x = r^2 + h^3 - 2 * c.x * h^2
60410  *   c'.y = r * (c'.x - c.x * h^2) - c.y * h^3
60411  *   c'.z = (c.x - p.x * c.z^2) * c.z
60412  *
60413  * @param  [in,out]  vx     X-ordinate of projective value in F*.
60414  * @param  [in,out]  vy     Y-ordinate of projective value in F*.
60415  * @param  [in,out]  c      ECC point - current point on E(F_p^2) to be added
60416  *                          to.
60417  * @param  [in]      p      ECC point - point on E(F_p^2) to add.
60418  * @param  [in]      q      ECC point - second point on E(F_P^2).
60419  * @param  [in]      qx_px  SP that is a constant value across adds.
60420  * @param  [in]      t      SP temporaries (6 used).
60421  */
sp_1024_accumulate_line_add_one_avx2_16(sp_digit * vx,sp_digit * vy,sp_point_1024 * c,sp_point_1024 * p,sp_point_1024 * q,sp_digit * qx_px,sp_digit * t)60422 static void sp_1024_accumulate_line_add_one_avx2_16(sp_digit* vx, sp_digit* vy,
60423         sp_point_1024* c, sp_point_1024* p, sp_point_1024* q, sp_digit* qx_px,
60424         sp_digit* t)
60425 {
60426     sp_digit* t1  = t;
60427     sp_digit* t2  = t +  2 * 16;
60428     sp_digit* rx  = t +  4 * 16;
60429     sp_digit* ry  = t +  6 * 16;
60430     sp_digit* h   = t +  8 * 16;
60431     sp_digit* r   = t + 10 * 16;
60432 
60433     /* r.x = (q.x + p.x) * c.y */
60434     sp_1024_mont_mul_avx2_16(rx, qx_px, c->y, p1024_mod, p1024_mp_mod);
60435     /* t2 = c.z^2 */
60436     sp_1024_mont_sqr_avx2_16(t2, c->z, p1024_mod, p1024_mp_mod);
60437     /* t1 = q.x * c.z^2 */
60438     sp_1024_mont_mul_avx2_16(t1, q->x, t2, p1024_mod, p1024_mp_mod);
60439     /* t1 = q.x * c.z^2 + c.x */
60440     sp_1024_mont_add_avx2_16(h, t1, c->x, p1024_mod);
60441     /* r = p.y * c.z */
60442     sp_1024_mont_mul_avx2_16(ry, p->y, c->z, p1024_mod, p1024_mp_mod);
60443     /* t1 = (q.x * c.z^2 + c.x) * p.y * c.z */
60444     sp_1024_mont_mul_avx2_16(t1, h, ry, p1024_mod, p1024_mp_mod);
60445     /* r = p.y * c.z * c.z^2 = p.y * c.z^3  */
60446     sp_1024_mont_mul_avx2_16(r, ry, t2, p1024_mod, p1024_mp_mod);
60447     /* r.x -= (q.x * c.z^2 + c.x) * p.y * c.z */
60448     sp_1024_mont_sub_avx2_16(rx, rx, t1, p1024_mod);
60449     /* t1 = p.x * c.z^2 */
60450     sp_1024_mont_mul_avx2_16(t1, p->x, t2, p1024_mod, p1024_mp_mod);
60451     /* h = c.x - p.x * c.z^2 */
60452     sp_1024_mont_sub_avx2_16(h, c->x, t1, p1024_mod);
60453     /* c'.z = (c.x - p.x * c.z^2) * c.z */
60454     sp_1024_mont_mul_avx2_16(c->z, h, c->z, p1024_mod, p1024_mp_mod);
60455     /* r.y = (c.x - p.x * c.z^2) * c.z * q.y */
60456     sp_1024_mont_mul_avx2_16(ry, c->z, q->y, p1024_mod, p1024_mp_mod);
60457     /* v = v * r */
60458     sp_1024_proj_mul_avx2_16(vx, vy, rx, ry, t);
60459 
60460     /* Add p to c using previously calculated values.
60461      *   h = c.x - p.x * c.z^2
60462      *   r = p.y * c.z^3
60463      *   c'.z = (c.x - p.x * c.z^2) * c.z
60464      */
60465 
60466     /* r = p.y * c.z^3 - c.y */
60467     sp_1024_mont_sub_avx2_16(r, r, c->y, p1024_mod);
60468     /* t1 = r^2 */
60469     sp_1024_mont_sqr_avx2_16(t1, r, p1024_mod, p1024_mp_mod);
60470     /* t2 = h^2 */
60471     sp_1024_mont_sqr_avx2_16(rx, h, p1024_mod, p1024_mp_mod);
60472     /* ry = c.x * h^2 */
60473     sp_1024_mont_mul_avx2_16(ry, c->x, rx, p1024_mod, p1024_mp_mod);
60474     /* t2 = h^3 */
60475     sp_1024_mont_mul_avx2_16(t2, rx, h, p1024_mod, p1024_mp_mod);
60476     /* c->x = r^2 + h^3 */
60477     sp_1024_mont_add_avx2_16(c->x, t1, t2, p1024_mod);
60478     /* t1 = 2 * c.x * h^2 */
60479     sp_1024_mont_dbl_avx2_16(t1, ry, p1024_mod);
60480     /* c'.x = r^2 + h^3 - 2 * c.x * h^2 */
60481     sp_1024_mont_sub_avx2_16(c->x, c->x, t1, p1024_mod);
60482     /* ry = c'.x - c.x * h^2 */
60483     sp_1024_mont_sub_avx2_16(t1, c->x, ry, p1024_mod);
60484     /* ry = r * (c'.x - c.x * h^2) */
60485     sp_1024_mont_mul_avx2_16(ry, t1, r, p1024_mod, p1024_mp_mod);
60486     /* t2 = c.y * h^3 */
60487     sp_1024_mont_mul_avx2_16(t1, t2, c->y, p1024_mod, p1024_mp_mod);
60488     /* c'.y = r * (c'.x - c.x * h^2) - c.y * h^3 */
60489     sp_1024_mont_sub_avx2_16(c->y, ry, t1, p1024_mod);
60490 }
60491 
60492 /*
60493  * Calculate r = pairing <P, Q>.
60494  *
60495  * That is, multiply base in PF_p[q] by the scalar s, such that s.P = Q.
60496  *
60497  * @param  [in]  key  SAKKE key.
60498  * @param  [in]  p    First point on E(F_p)[q].
60499  * @param  [in]  q    Second point on E(F_p)[q].
60500  * @param  [in]  r    Result of calculation.
60501  * @return  0 on success.
60502  * @return  MEMORY_E when dynamic memory allocation fails.
60503  * @return  Other -ve value on internal failure.
60504  */
sp_Pairing_avx2_1024(const ecc_point * pm,const ecc_point * qm,mp_int * res)60505 static int sp_Pairing_avx2_1024(const ecc_point* pm, const ecc_point* qm, mp_int* res)
60506 {
60507     int err = MP_OKAY;
60508 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
60509     !defined(WOLFSSL_SP_NO_MALLOC)
60510     sp_digit* td = NULL;
60511     sp_digit* t;
60512     sp_digit* vx;
60513     sp_digit* vy;
60514     sp_digit* qx_px;
60515 #else
60516     sp_digit t[6 * 2 * 16];
60517     sp_digit vx[2 * 16];
60518     sp_digit vy[2 * 16];
60519     sp_digit qx_px[2 * 16];
60520     sp_point_1024 pd;
60521     sp_point_1024 qd;
60522     sp_point_1024 cd;
60523 #endif
60524     sp_point_1024* p = NULL;
60525     sp_point_1024* q = NULL;
60526     sp_point_1024* c = NULL;
60527     sp_digit* r = NULL;
60528     int i;
60529 
60530     err = sp_1024_point_new_16(NULL, pd, p);
60531     if (err == MP_OKAY) {
60532         err = sp_1024_point_new_16(NULL, qd, q);
60533     }
60534     if (err == MP_OKAY) {
60535         err = sp_1024_point_new_16(NULL, cd, c);
60536     }
60537 
60538 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
60539     !defined(WOLFSSL_SP_NO_MALLOC)
60540     if (err == MP_OKAY) {
60541         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 9 * 16 * 2, NULL,
60542                                 DYNAMIC_TYPE_TMP_BUFFER);
60543         if (td == NULL) {
60544             err = MEMORY_E;
60545         }
60546     }
60547 #endif
60548 
60549     if (err == MP_OKAY) {
60550 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
60551     !defined(WOLFSSL_SP_NO_MALLOC)
60552         t     = td;
60553         vx    = td + 6 * 16 * 2;
60554         vy    = td + 7 * 16 * 2;
60555         qx_px = td + 8 * 16 * 2;
60556 #endif
60557         r = vy;
60558 
60559         sp_1024_point_from_ecc_point_16(p, pm);
60560         sp_1024_point_from_ecc_point_16(q, qm);
60561 
60562         err = sp_1024_mod_mul_norm_avx2_16(p->x, p->x, p1024_mod);
60563     }
60564     if (err == MP_OKAY) {
60565         err = sp_1024_mod_mul_norm_avx2_16(p->y, p->y, p1024_mod);
60566     }
60567     if (err == MP_OKAY) {
60568         err = sp_1024_mod_mul_norm_avx2_16(p->z, p->z, p1024_mod);
60569     }
60570     if (err == MP_OKAY) {
60571         err = sp_1024_mod_mul_norm_avx2_16(q->x, q->x, p1024_mod);
60572     }
60573     if (err == MP_OKAY) {
60574         err = sp_1024_mod_mul_norm_avx2_16(q->y, q->y, p1024_mod);
60575     }
60576     if (err == MP_OKAY) {
60577         XMEMCPY(c, p, sizeof(sp_point_1024));
60578         XMEMSET(vx, 0, sizeof(sp_digit) * 2 * 16);
60579         vx[0] = 1;
60580         XMEMSET(vy, 0, sizeof(sp_digit) * 2 * 16);
60581 
60582         sp_1024_mont_add_avx2_16(qx_px, q->x, p->x, p1024_mod);
60583 
60584         for (i = 1020; i >= 0; i--) {
60585             /* Accumulate line into v and double point. */
60586             sp_1024_accumulate_line_dbl_avx2_16(vx, vy, c, q, t);
60587 
60588             if ((i > 0) && ((p1024_order[i / 64] >> (i % 64)) & 1)) {
60589                 /* Accumulate line into v and add P into C. */
60590                 sp_1024_accumulate_line_add_one_avx2_16(vx, vy, c, p, q, qx_px, t);
60591             }
60592         }
60593 
60594         /* Final exponentiation */
60595         sp_1024_proj_sqr_avx2_16(vx, vy, t);
60596         sp_1024_proj_sqr_avx2_16(vx, vy, t);
60597 
60598         /* Convert from PF_p[q] to F_p */
60599         sp_1024_mont_inv_avx2_16(vx, vx, t);
60600         sp_1024_mont_mul_avx2_16(r, vx, vy, p1024_mod, p1024_mp_mod);
60601         XMEMSET(r + 16, 0, sizeof(sp_digit) * 16);
60602         sp_1024_mont_reduce_16(r, p1024_mod, p1024_mp_mod);
60603 
60604         err = sp_1024_to_mp(r, res);
60605     }
60606 
60607 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
60608     !defined(WOLFSSL_SP_NO_MALLOC)
60609     if (td != NULL) {
60610         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
60611     }
60612 #endif
60613     sp_1024_point_free_16(c, 1, NULL);
60614     sp_1024_point_free_16(q, 1, NULL);
60615     sp_1024_point_free_16(p, 1, NULL);
60616     return err;
60617 }
60618 
60619 #else
60620 /*
60621  * Calculate gradient of line through C, P and -C-P, accumulate line and
60622  * add P to C.
60623  *
60624  * Both C and P have z ordinates to use in the calculation.
60625  *
60626  * Calculations:
60627  *   r.x  = (q.x * c.z^2 + c.x) * p.y * c.z - (q.x * p.z^2 + p.x) * c.y * p.z
60628  *   r.y  = (p.x * c.z^2 - c.x * p.z^2) * q.y * p.z * c.z
60629  *   v*   = v* * r*
60630  *   h    = p.x * c.z^2 - c.x * p.z^2
60631  *   r    = p.y * c.z^3 - c.y * p.z^3
60632  *   c'.x = r^2 - h^3 - 2 * c.x * p.z^2 * h^2
60633  *   c'.y = r * (c.x * p.z^2 * h^2 - c'.x) - c.y * p.z^3 * h^3
60634  *   c'.z = (p.x * c.z^2 - c.x * p.z^2) * c.z
60635  *
60636  * @param  [in,out]  vx     X-ordinate of projective value in F*.
60637  * @param  [in,out]  vy     Y-ordinate of projective value in F*.
60638  * @param  [in,out]  c      ECC point - current point on E(F_p^2) to be added
60639  *                          to.
60640  * @param  [in,out]  p      ECC point - point on E(F_p^2) to add.
60641  * @param  [in,out]  q      ECC point - second point on E(F_P^2).
60642  * @param  [in,out]  t      SP temporaries (6 used).
60643  * @param  [in,out]  neg    Indicates to use negative P.
60644  * @return  0 on success.
60645  * @return  MEMORY_E when dynamic memory allocation fails.
60646  * @return  Other -ve value on internal failure.
60647  */
sp_1024_accumulate_line_add_n_avx2_16(sp_digit * vx,sp_digit * vy,const sp_point_1024 * p,const sp_point_1024 * q,sp_point_1024 * c,sp_digit * t,int neg)60648 static void sp_1024_accumulate_line_add_n_avx2_16(sp_digit* vx, sp_digit* vy,
60649         const sp_point_1024* p, const sp_point_1024* q,
60650         sp_point_1024* c, sp_digit* t, int neg)
60651 {
60652     sp_digit* t1 = t;
60653     sp_digit* t2 = t +  2 * 16;
60654     sp_digit* rx = t +  4 * 16;
60655     sp_digit* ry = t +  6 * 16;
60656     sp_digit* h  = t +  8 * 16;
60657     sp_digit* r  = t + 10 * 16;
60658 
60659     /* h = p.z^2 */
60660     sp_1024_mont_sqr_avx2_16(h, p->z, p1024_mod, p1024_mp_mod);
60661     /* rx = q.x * p.z^2 */
60662     sp_1024_mont_mul_avx2_16(rx, q->x, h, p1024_mod, p1024_mp_mod);
60663     /* rx = q.x * p.z^2 + p.x */
60664     sp_1024_mont_add_avx2_16(t2, rx, p->x, p1024_mod);
60665     /* c.y = c.y * p.z */
60666     sp_1024_mont_mul_avx2_16(t1, c->y, p->z, p1024_mod, p1024_mp_mod);
60667     /* r.x = (q.x * p.z^2 + p.x) * c.y * p.z */
60668     sp_1024_mont_mul_avx2_16(rx, t2, t1, p1024_mod, p1024_mp_mod);
60669     /* c.y = c.y * p.z^3 */
60670     sp_1024_mont_mul_avx2_16(c->y, t1, h, p1024_mod, p1024_mp_mod);
60671     /* t2 = c.z^2 */
60672     sp_1024_mont_sqr_avx2_16(t2, c->z, p1024_mod, p1024_mp_mod);
60673     /* t1 = q.x * c.z^2 */
60674     sp_1024_mont_mul_avx2_16(t1, q->x, t2, p1024_mod, p1024_mp_mod);
60675     /* t1 = q.x * c.z^2 + c.x */
60676     sp_1024_mont_add_avx2_16(t1, t1, c->x, p1024_mod);
60677     /* c.x = c.x * p.z^2 */
60678     sp_1024_mont_mul_avx2_16(c->x, c->x, h, p1024_mod, p1024_mp_mod);
60679     /* r = p.y * c.z */
60680     sp_1024_mont_mul_avx2_16(r, p->y, c->z, p1024_mod, p1024_mp_mod);
60681     if (neg) {
60682         /* r = -p.y * c.z */
60683         sp_1024_mont_sub_avx2_16(r, p1024_mod, r, p1024_mod);
60684     }
60685     /* t1 = (q.x * c.z^2 + c.x) * p.y * c.z */
60686     sp_1024_mont_mul_avx2_16(ry, t1, r, p1024_mod, p1024_mp_mod);
60687     /* r.x -= (q.x * c.z^2 + c.x) * p.y * c.z */
60688     sp_1024_mont_sub_avx2_16(rx, ry, rx, p1024_mod);
60689     /* t1 = p.x * c.z^2 */
60690     sp_1024_mont_mul_avx2_16(t1, p->x, t2, p1024_mod, p1024_mp_mod);
60691     /* h = p.x * c.z^2 - c.x * p.z^2 */
60692     sp_1024_mont_sub_avx2_16(h, t1, c->x, p1024_mod);
60693     /* c'.z = (p.x * c.z^2 - c.x * p.z^2) * c.z */
60694     sp_1024_mont_mul_avx2_16(t1, h, c->z, p1024_mod, p1024_mp_mod);
60695     /* c'.z = (p.x * c.z^2 - c.x * p.z^2) * c.z * p.z */
60696     sp_1024_mont_mul_avx2_16(c->z, t1, p->z, p1024_mod, p1024_mp_mod);
60697     /* r.y = (p.x * c.z^2 - c.x * p.z^2) * c.z * p.z * q.y */
60698     sp_1024_mont_mul_avx2_16(ry, c->z, q->y, p1024_mod, p1024_mp_mod);
60699     /* r = p.y * c.z^3 */
60700     sp_1024_mont_mul_avx2_16(t1, r, t2, p1024_mod, p1024_mp_mod);
60701     /* r = p.y * c.z^3 - c.y * p.z^3 */
60702     sp_1024_mont_sub_avx2_16(r, t1, c->y, p1024_mod);
60703     /* v = v * r */
60704     sp_1024_proj_mul_avx2_16(vx, vy, rx, ry, t);
60705 
60706     /* Add p to c using previously calculated values.
60707      *   h = p.x * c.z^2 - c.x * p.z^2
60708      *   r = p.y * c.z^3 - c.y * p.z^3
60709      *   c'.z = (p.x * c.z^2 - c.x * p.z^2) * c.z
60710      */
60711 
60712     /* t1 = r^2 */
60713     sp_1024_mont_sqr_avx2_16(t1, r, p1024_mod, p1024_mp_mod);
60714     /* t2 = h^2 */
60715     sp_1024_mont_sqr_avx2_16(rx, h, p1024_mod, p1024_mp_mod);
60716     /* ry = c.x * p.z^2 * h^2 */
60717     sp_1024_mont_mul_avx2_16(ry, rx, c->x, p1024_mod, p1024_mp_mod);
60718     /* t2 = h^3 */
60719     sp_1024_mont_mul_avx2_16(t2, rx, h, p1024_mod, p1024_mp_mod);
60720     /* c'.x = r^2 - h^3 */
60721     sp_1024_mont_sub_avx2_16(c->x, t1, t2, p1024_mod);
60722     /* t1 = 2 * c.x * p.z^2 * h^2 */
60723     sp_1024_mont_dbl_avx2_16(t1, ry, p1024_mod);
60724     /* c'.x = r^2 - h^3 - 2 * c.x * p.z^2 * h^2 */
60725     sp_1024_mont_sub_avx2_16(c->x, c->x, t1, p1024_mod);
60726     /* ry = c.x * p.z^2 * h^2 - c'.x */
60727     sp_1024_mont_sub_avx2_16(t1, ry, c->x, p1024_mod);
60728     /* ry = r * (c.x * p.z^2 * h^2 - c'.x) */
60729     sp_1024_mont_mul_avx2_16(ry, t1, r, p1024_mod, p1024_mp_mod);
60730     /* t2 = c.y * p.z^3 * h^3 */
60731     sp_1024_mont_mul_avx2_16(t1, t2, c->y, p1024_mod, p1024_mp_mod);
60732     /* c'.y = r * (c.x * p.z^2 * h^2 - c'.x) - c.y * p.z^3 * h^3 */
60733     sp_1024_mont_sub_avx2_16(c->y, ry, t1, p1024_mod);
60734 }
60735 
60736 /*
60737  * Perform n accumulate doubles and doubles of P.
60738  *
60739  * py = 2 * p.y
60740  *
60741  * For each double:
60742  * Calculate gradient of line through P, P and [-2]P, accumulate line and
60743  * double P.
60744  *
60745  * Calculations:
60746  *   l = 3 * (p.x^2 - p.z^4) = 3 * (p.x - p.z^2) * (p.x + p.z^2)
60747  *   r.x = l * (p.x + q.x * p.z^2) - py^2 / 2
60748  *   r.y = py * p.z^3 * q.y (= p'.z * p.z^2 * q.y)
60749  *   v* = v*^2 * r*
60750  *   p'.x = l^2 - 2 * py^2 * p.x
60751  *   py' = (py^2 * p.x - p'.x) * l - py^4 (= 2 * p'.y)
60752  *   p'.z = py * p.z
60753  *
60754  * Finally:
60755  *   p'.y = py' / 2
60756  *
60757  * @param  [in,out]  vx  X-ordinate of projective value in F*.
60758  * @param  [in,out]  vy  Y-ordinate of projective value in F*.
60759  * @param  [in,out]  p   ECC point - point on E(F_p^2) to double.
60760  * @param  [in]      q   ECC point - second point on E(F_P^2).
60761  * @param  [in]      n   Number of times to double.
60762  * @param  [in]      t   SP temporaries (6 used).
60763  */
sp_1024_accumulate_line_dbl_n_avx2_16(sp_digit * vx,sp_digit * vy,sp_point_1024 * p,const sp_point_1024 * q,int n,sp_digit * t)60764 static void sp_1024_accumulate_line_dbl_n_avx2_16(sp_digit* vx, sp_digit* vy,
60765         sp_point_1024* p, const sp_point_1024* q, int n, sp_digit* t)
60766 {
60767     sp_digit* t1  = t +  0 * 16;
60768     sp_digit* pz2 = t +  2 * 16;
60769     sp_digit* rx  = t +  4 * 16;
60770     sp_digit* ry  = t +  6 * 16;
60771     sp_digit* l   = t +  8 * 16;
60772     sp_digit* ty  = t + 10 * 16;
60773     int i;
60774 
60775     /* py = 2 * p.y */
60776     sp_1024_mont_dbl_avx2_16(p->y, p->y, p1024_mod);
60777 
60778     for (i = 0; i < n; i++) {
60779         /* v = v^2 */
60780         sp_1024_proj_sqr_avx2_16(vx, vy, t);
60781         /* pz2 = p.z^2 */
60782         sp_1024_mont_sqr_avx2_16(pz2, p->z, p1024_mod, p1024_mp_mod);
60783         /* t1 = p.x + p.z^2 */
60784         sp_1024_mont_add_avx2_16(t1, p->x, pz2, p1024_mod);
60785         /* l = p.x - p.z^2 */
60786         sp_1024_mont_sub_avx2_16(l, p->x, pz2, p1024_mod);
60787         /* t1 = (p.x + p.z^2) * (p.x - p.z^2) = p.x^2 - p.z^4 */
60788         sp_1024_mont_mul_avx2_16(ty, l, t1, p1024_mod, p1024_mp_mod);
60789         /* l = 3 * (p.x^2 - p.z^4) */
60790         sp_1024_mont_tpl_avx2_16(l, ty, p1024_mod);
60791         /* t1 = q.x * p.z^2 */
60792         sp_1024_mont_mul_avx2_16(t1, q->x, pz2, p1024_mod, p1024_mp_mod);
60793         /* t1 = p.x + q.x * p.z^2 */
60794         sp_1024_mont_add_avx2_16(t1, p->x, t1, p1024_mod);
60795         /* r.x = l * (p.x + q.x * p.z^2) */
60796         sp_1024_mont_mul_avx2_16(rx, l, t1, p1024_mod, p1024_mp_mod);
60797         /* ty = py ^ 2 */
60798         sp_1024_mont_sqr_avx2_16(ty, p->y, p1024_mod, p1024_mp_mod);
60799         /* t1 = py ^ 2 / 2 */
60800         sp_1024_div2_avx2_16(t1, ty, p1024_mod);
60801         /* r.x -= py ^ 2 / 2 */
60802         sp_1024_mont_sub_avx2_16(rx, rx, t1, p1024_mod);
60803         /* p'.z = py * pz */
60804         sp_1024_mont_mul_avx2_16(p->z, p->z, p->y, p1024_mod, p1024_mp_mod);
60805         /* r.y = p'.z * p.z^2 */
60806         sp_1024_mont_mul_avx2_16(t1, p->z, pz2, p1024_mod, p1024_mp_mod);
60807         /* r.y = p'.z * p.z^2 * q.y */
60808         sp_1024_mont_mul_avx2_16(ry, t1, q->y, p1024_mod, p1024_mp_mod);
60809         /* v = v^2 * r */
60810         sp_1024_proj_mul_avx2_16(vx, vy, rx, ry, t);
60811 
60812         /* Double point using previously calculated values
60813          *   l = 3 * (p.x - p.z^2).(p.x + p.z^2)
60814          *   ty = py^2
60815          *   p'.z = py * p.z
60816          */
60817         /* t1 = py^2 ^ 2 = py^4 */
60818         sp_1024_mont_sqr_avx2_16(t1, ty, p1024_mod, p1024_mp_mod);
60819         /* py' = py^2 * p. x */
60820         sp_1024_mont_mul_avx2_16(p->y, ty, p->x, p1024_mod, p1024_mp_mod);
60821         /* p'.x = l^2 */
60822         sp_1024_mont_sqr_avx2_16(p->x, l, p1024_mod, p1024_mp_mod);
60823         /* p'.x = l^2 - py^2 * p.x */
60824         sp_1024_mont_sub_avx2_16(p->x, p->x, p->y, p1024_mod);
60825         /* p'.x = l^2 - 2 * p.y^2 * p.x */
60826         sp_1024_mont_sub_avx2_16(p->x, p->x, p->y, p1024_mod);
60827         /* py' = py^2 * p.x - p.x' */
60828         sp_1024_mont_sub_avx2_16(ty, p->y, p->x, p1024_mod);
60829         /* py' = (p.y^2 * p.x - p'.x) * l */
60830         sp_1024_mont_mul_avx2_16(p->y, ty, l, p1024_mod, p1024_mp_mod);
60831         /* py' = (p.y^2 * p.x - p'.x) * l * 2 */
60832         sp_1024_mont_dbl_avx2_16(p->y, p->y, p1024_mod);
60833         /* py' = (p.y^2 * p.x - p'.x) * l * 2 - p.y^4 */
60834         sp_1024_mont_sub_avx2_16(p->y, p->y, t1, p1024_mod);
60835     }
60836 
60837     /* p'.y = py' / 2 */
60838     sp_1024_div2_avx2_16(p->y, p->y, p1024_mod);
60839 }
60840 
60841 /*
60842  * Calculate r = pairing <P, Q>.
60843  *
60844  * That is, multiply base in PF_p[q] by the scalar s, such that s.P = Q.
60845  *
60846  * Sliding window. Start at bottom and stop when bottom bit is one.
60847  * Subtract if top bit in window is one.
60848  * Width of 6 bits.
60849  *
60850  * @param  [in]  pm   First point on E(F_p)[q].
60851  * @param  [in]  qm   Second point on E(F_p)[q].
60852  * @param  [in]  res  Result of calculation.
60853  * @return  0 on success.
60854  * @return  MEMORY_E when dynamic memory allocation fails.
60855  */
sp_Pairing_avx2_1024(const ecc_point * pm,const ecc_point * qm,mp_int * res)60856 static int sp_Pairing_avx2_1024(const ecc_point* pm, const ecc_point* qm, mp_int* res)
60857 {
60858     int err;
60859 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
60860     !defined(WOLFSSL_SP_NO_MALLOC)
60861     sp_digit* td = NULL;
60862     sp_digit* t;
60863     sp_digit* vx;
60864     sp_digit* vy;
60865     sp_digit (*pre_vx)[32];
60866     sp_digit (*pre_vy)[32];
60867     sp_digit (*pre_nvy)[32];
60868     sp_point_1024* pre_p;
60869 #else
60870     sp_digit t[6 * 2 * 16];
60871     sp_digit vx[2 * 16];
60872     sp_digit vy[2 * 16];
60873     sp_digit pre_vx[16][32];
60874     sp_digit pre_vy[16][32];
60875     sp_digit pre_nvy[16][32];
60876     sp_point_1024 pre_p[16];
60877     sp_point_1024 pd;
60878     sp_point_1024 qd;
60879     sp_point_1024 cd;
60880 #endif
60881     sp_point_1024* p = NULL;
60882     sp_point_1024* q = NULL;
60883     sp_point_1024* c = NULL;
60884     sp_digit* r = NULL;
60885     int i;
60886     int j;
60887 
60888     err = sp_1024_point_new_16(NULL, pd, p);
60889     if (err == MP_OKAY) {
60890         err = sp_1024_point_new_16(NULL, qd, q);
60891     }
60892     if (err == MP_OKAY) {
60893         err = sp_1024_point_new_16(NULL, cd, c);
60894     }
60895 
60896 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
60897     !defined(WOLFSSL_SP_NO_MALLOC)
60898     if (err == MP_OKAY) {
60899         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 56 * 16 * 2 + 16 * sizeof(sp_point_1024), NULL,
60900                                 DYNAMIC_TYPE_TMP_BUFFER);
60901         if (td == NULL) {
60902             err = MEMORY_E;
60903         }
60904     }
60905 #endif
60906 
60907     if (err == MP_OKAY) {
60908 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
60909     !defined(WOLFSSL_SP_NO_MALLOC)
60910         t       = td;
60911         vx      = td + 6 * 16 * 2;
60912         vy      = td + 7 * 16 * 2;
60913         pre_vx  = (sp_digit(*)[32])(td + 8 * 16 * 2);
60914         pre_vy  = (sp_digit(*)[32])(td + 24 * 16 * 2);
60915         pre_nvy = (sp_digit(*)[32])(td + 40 * 16 * 2);
60916         pre_p   = (sp_point_1024*)(td + 56 * 16 * 2);
60917 #endif
60918         r = vy;
60919 
60920         sp_1024_point_from_ecc_point_16(p, pm);
60921         sp_1024_point_from_ecc_point_16(q, qm);
60922 
60923         err = sp_1024_mod_mul_norm_avx2_16(p->x, p->x, p1024_mod);
60924     }
60925     if (err == MP_OKAY) {
60926         err = sp_1024_mod_mul_norm_avx2_16(p->y, p->y, p1024_mod);
60927     }
60928     if (err == MP_OKAY) {
60929         err = sp_1024_mod_mul_norm_avx2_16(p->z, p->z, p1024_mod);
60930     }
60931     if (err == MP_OKAY) {
60932         err = sp_1024_mod_mul_norm_avx2_16(q->x, q->x, p1024_mod);
60933     }
60934     if (err == MP_OKAY) {
60935         err = sp_1024_mod_mul_norm_avx2_16(q->y, q->y, p1024_mod);
60936     }
60937     if (err == MP_OKAY) {
60938         /* Generate pre-computation table: 1, 3, ... , 31 */
60939         XMEMCPY(&pre_p[0], p, sizeof(sp_point_1024));
60940         XMEMSET(pre_vx[0], 0, sizeof(sp_digit) * 2 * 16);
60941         pre_vx[0][0] = 1;
60942         XMEMSET(pre_vy[0], 0, sizeof(sp_digit) * 2 * 16);
60943         sp_1024_mont_sub_avx2_16(pre_nvy[0], p1024_mod, pre_vy[0], p1024_mod);
60944 
60945         /* [2]P for adding */
60946         XMEMCPY(c, p, sizeof(sp_point_1024));
60947         XMEMSET(vx, 0, sizeof(sp_digit) * 2 * 16);
60948         vx[0] = 1;
60949         XMEMSET(vy, 0, sizeof(sp_digit) * 2 * 16);
60950         sp_1024_accumulate_line_dbl_avx2_16(vx, vy, c, q, t);
60951 
60952         /* 3, 5, ... */
60953         for (i = 1; i < 16; i++) {
60954             XMEMCPY(&pre_p[i], &pre_p[i-1], sizeof(sp_point_1024));
60955             XMEMCPY(pre_vx[i], pre_vx[i-1], sizeof(sp_digit) * 2 * 16);
60956             XMEMCPY(pre_vy[i], pre_vy[i-1], sizeof(sp_digit) * 2 * 16);
60957             sp_1024_proj_mul_avx2_16(pre_vx[i], pre_vy[i], vx, vy, t);
60958             sp_1024_accumulate_line_add_n_avx2_16(pre_vx[i], pre_vy[i], c,
60959                     q, &pre_p[i], t, 0);
60960             sp_1024_mont_sub_avx2_16(pre_nvy[i], p1024_mod, pre_vy[i], p1024_mod);
60961         }
60962 
60963         j = sp_1024_order_op[0] / 2;
60964         XMEMCPY(c, &pre_p[j], sizeof(sp_point_1024));
60965         XMEMCPY(vx, pre_vx[j], sizeof(sp_digit) * 2 * 16);
60966         XMEMCPY(vy, pre_vy[j], sizeof(sp_digit) * 2 * 16);
60967 
60968         /* Accumulate line into v and double point n times. */
60969         sp_1024_accumulate_line_dbl_n_avx2_16(vx, vy, c, q,
60970                 sp_1024_order_op[1], t);
60971 
60972         for (i = 2; i < 290; i += 2) {
60973             j = sp_1024_order_op[i];
60974             if (j > 0) {
60975                 j /= 2;
60976                 /* Accumulate line into v and add P into C. */
60977                 sp_1024_proj_mul_avx2_16(vx, vy, pre_vx[j], pre_vy[j], t);
60978                 sp_1024_accumulate_line_add_n_avx2_16(vx, vy, &pre_p[j], q, c,
60979                     t, 0);
60980             }
60981             else {
60982                 j = -j / 2;
60983                 /* Accumulate line into v and add P into C. */
60984                 sp_1024_proj_mul_avx2_16(vx, vy, pre_vx[j], pre_nvy[j], t);
60985                 sp_1024_accumulate_line_add_n_avx2_16(vx, vy, &pre_p[j], q, c,
60986                     t, 1);
60987             }
60988 
60989             /* Accumulate line into v and double point n times. */
60990             sp_1024_accumulate_line_dbl_n_avx2_16(vx, vy, c, q,
60991                     sp_1024_order_op[i + 1], t);
60992         }
60993 
60994         /* Final exponentiation */
60995         sp_1024_proj_sqr_avx2_16(vx, vy, t);
60996         sp_1024_proj_sqr_avx2_16(vx, vy, t);
60997 
60998         /* Convert from PF_p[q] to F_p */
60999         sp_1024_mont_inv_avx2_16(vx, vx, t);
61000         sp_1024_mont_mul_avx2_16(r, vx, vy, p1024_mod, p1024_mp_mod);
61001         XMEMSET(r + 16, 0, sizeof(sp_digit) * 16);
61002         sp_1024_mont_reduce_avx2_16(r, p1024_mod, p1024_mp_mod);
61003 
61004         err = sp_1024_to_mp(r, res);
61005     }
61006 
61007 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
61008     !defined(WOLFSSL_SP_NO_MALLOC)
61009     if (td != NULL) {
61010         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
61011     }
61012 #endif
61013     sp_1024_point_free_16(c, 1, NULL);
61014     sp_1024_point_free_16(q, 1, NULL);
61015     sp_1024_point_free_16(p, 1, NULL);
61016     return err;
61017 }
61018 
61019 #endif /* WOLFSSL_SP_SMALL */
61020 #endif /* HAVE_INTEL_AVX2 */
61021 /*
61022  * Calculate r = pairing <P, Q>.
61023  *
61024  * That is, multiply base in PF_p[q] by the scalar s, such that s.P = Q.
61025  *
61026  * @param  [in]  key  SAKKE key.
61027  * @param  [in]  p    First point on E(F_p)[q].
61028  * @param  [in]  q    Second point on E(F_p)[q].
61029  * @param  [in]  r    Result of calculation.
61030  * @return  0 on success.
61031  * @return  MEMORY_E when dynamic memory allocation fails.
61032  * @return  Other -ve value on internal failure.
61033  */
sp_Pairing_1024(const ecc_point * pm,const ecc_point * qm,mp_int * res)61034 int sp_Pairing_1024(const ecc_point* pm, const ecc_point* qm, mp_int* res)
61035 {
61036     int err;
61037 #ifdef HAVE_INTEL_AVX2
61038     word32 cpuid_flags = cpuid_get_flags();
61039 #endif
61040 
61041     ASSERT_SAVED_VECTOR_REGISTERS();
61042 
61043 #ifdef HAVE_INTEL_AVX2
61044     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
61045         err = sp_Pairing_avx2_1024(pm, qm, res);
61046     }
61047     else
61048 #endif
61049     {
61050         err = sp_Pairing_x64_1024(pm, qm, res);
61051     }
61052 
61053    return err;
61054 }
61055 
61056 #ifdef WOLFSSL_SP_SMALL
61057 /*
61058  * Generate table for pairing.
61059  *
61060  * Small implementation does not use a table - returns 0 length.
61061  *
61062  * pm     [in]      Point to generate table for.
61063  * table  [in]      Generated table.
61064  * len    [in,out]  On in, the size of the buffer.
61065  *                  On out, length of table generated.
61066  * @return  0 on success.
61067  *          LENGTH_ONLY_E when table is NULL and only length returned.
61068  *          BUFFER_E when len is too small.
61069  */
sp_Pairing_gen_precomp_x64_1024(const ecc_point * pm,byte * table,word32 * len)61070 static int sp_Pairing_gen_precomp_x64_1024(const ecc_point* pm, byte* table,
61071         word32* len)
61072 {
61073     int err = 0;
61074 
61075     if (table == NULL) {
61076         *len = 0;
61077         err = LENGTH_ONLY_E;
61078     }
61079     else if (*len != 0) {
61080         err = BUFFER_E;
61081     }
61082 
61083     (void)*pm;
61084 
61085     return err;
61086 }
61087 
61088 /*
61089  * Calculate r = pairing <P, Q>.
61090  *
61091  * That is, multiply base in PF_p[q] by the scalar s, such that s.P = Q.
61092  *
61093  * Small implementation does not use a table - use the normal implementation.
61094  *
61095  * @param  [in]  pm     First point on E(F_p)[q].
61096  * @param  [in]  qm     Second point on E(F_p)[q].
61097  * @param  [in]  res    Result of calculation.
61098  * @param  [in]  table  Precomputed table of values.
61099  * @param  [in]  len    Length of precomputed table of values in bytes.
61100  * @return  0 on success.
61101  * @return  MEMORY_E when dynamic memory allocation fails.
61102  */
sp_Pairing_precomp_x64_1024(const ecc_point * pm,const ecc_point * qm,mp_int * res,const byte * table,word32 len)61103 static int sp_Pairing_precomp_x64_1024(const ecc_point* pm, const ecc_point* qm,
61104     mp_int* res, const byte* table, word32 len)
61105 {
61106     (void)table;
61107     (void)len;
61108     return sp_Pairing_x64_1024(pm, qm, res);
61109 }
61110 
61111 #else
61112 /*
61113  * Calc l and c for the point when doubling p.
61114  *
61115  * l = 3 * (p.x^2 - 1) / (2 * p.y)
61116  * c = l * p.x - p.y
61117  *
61118  * @param  [out]  lr  Gradient result - table entry.
61119  * @param  [out]  cr  Constant result - table entry.
61120  * @param  [in]   px  X-ordinate of point to double.
61121  * @param  [in]   py  Y-ordinate of point to double.
61122  * @param  [in]   t   SP temporaries (3 used).
61123  */
sp_1024_accum_dbl_calc_lc_16(sp_digit * lr,sp_digit * cr,const sp_digit * px,const sp_digit * py,sp_digit * t)61124 static void sp_1024_accum_dbl_calc_lc_16(sp_digit* lr, sp_digit* cr,
61125         const sp_digit* px, const sp_digit* py, sp_digit* t)
61126 {
61127     sp_digit* t1 = t + 0 * 2 * 16;
61128     sp_digit* t2 = t + 2 * 2 * 16;
61129     sp_digit* l  = t + 4 * 2 * 16;
61130 
61131 
61132     /* l = 1 / 2 * p.y */
61133     sp_1024_mont_dbl_16(l, py, p1024_mod);
61134     sp_1024_mont_inv_16(l, l, t);
61135 
61136     /* t1 = p.x^2 */
61137     sp_1024_mont_sqr_16(t1, px, p1024_mod, p1024_mp_mod);
61138     /* t1 = p.x - 1 */
61139     sp_1024_mont_sub_16(t1, t1, p1024_norm_mod, p1024_mod);
61140     /* t1 = 3 * (p.x^2 - 1) */
61141     sp_1024_mont_dbl_16(t2, t1, p1024_mod);
61142     sp_1024_mont_add_16(t1, t1, t2, p1024_mod);
61143     /* t1 = 3 * (p.x^2 - 1) / (2 * p.y) */
61144     sp_1024_mont_mul_16(l, l, t1, p1024_mod, p1024_mp_mod);
61145     /* t2 = l * p.x */
61146     sp_1024_mont_mul_16(t2, l, px, p1024_mod, p1024_mp_mod);
61147     /* c = t2 = l * p.x - p.y */
61148     sp_1024_mont_sub_16(t2, t2, py, p1024_mod);
61149 
61150     XMEMCPY(lr, l, sizeof(sp_digit) * 16);
61151     XMEMCPY(cr, t2, sizeof(sp_digit) * 16);
61152 }
61153 
61154 /*
61155  * Calc l and c when adding p and c.
61156  *
61157  * l = (c.y - p.y) / (c.x - p.x)
61158  * c = (p.x * c.y - cx * p.y) / (cx - p.x)
61159  *
61160  * @param  [out]  lr  Gradient result - table entry.
61161  * @param  [out]  cr  Constant result - table entry.
61162  * @param  [in]   px  X-ordinate of point to add.
61163  * @param  [in]   py  Y-ordinate of point to add.
61164  * @param  [in]   cx  X-ordinate of current point.
61165  * @param  [in]   cy  Y-ordinate of current point.
61166  * @param  [in]   t   SP temporaries (3 used).
61167  */
sp_1024_accum_add_calc_lc_16(sp_digit * lr,sp_digit * cr,const sp_digit * px,const sp_digit * py,const sp_digit * cx,const sp_digit * cy,sp_digit * t)61168 static void sp_1024_accum_add_calc_lc_16(sp_digit* lr, sp_digit* cr,
61169         const sp_digit* px, const sp_digit* py, const sp_digit* cx,
61170         const sp_digit* cy, sp_digit* t)
61171 {
61172     sp_digit* t1 = t + 0 * 2 * 16;
61173     sp_digit* c  = t + 2 * 2 * 16;
61174     sp_digit* l  = t + 4 * 2 * 16;
61175 
61176 
61177     /* l = 1 / (c.x - p.x) */
61178     sp_1024_mont_sub_16(l, cx, px, p1024_mod);
61179     sp_1024_mont_inv_16(l, l, t);
61180 
61181     /* c = p.x * c.y */
61182     sp_1024_mont_mul_16(c, px, cy, p1024_mod, p1024_mp_mod);
61183     /* t1 = c.x * p.y */
61184     sp_1024_mont_mul_16(t1, cx, py, p1024_mod, p1024_mp_mod);
61185     /* c = (p.x * c.y) - (c.x * p.y) */
61186     sp_1024_mont_sub_16(c, c, t1, p1024_mod);
61187     /* c = ((p.x * c.y) - (c.x * p.y)) / (c.x - p.x) */
61188     sp_1024_mont_mul_16(c, c, l, p1024_mod, p1024_mp_mod);
61189     /* t1 = c.y - p.y */
61190     sp_1024_mont_sub_16(t1, cy, py, p1024_mod);
61191     /* l = (c.y - p.y) / (c.x - p.x) */
61192     sp_1024_mont_mul_16(l, t1, l, p1024_mod, p1024_mp_mod);
61193 
61194     XMEMCPY(lr, l, sizeof(sp_digit) * 16);
61195     XMEMCPY(cr, c, sizeof(sp_digit) * 16);
61196 }
61197 
61198 /*
61199  * Calculate vx and vy given gradient l and constant c and point q.
61200  *
61201  * l is a the gradient and is multiplied by q->x.
61202  * c is a the constant that is added to the multiplicative result.
61203  * q->y is the y-ordinate in result to multiply.
61204  *
61205  * if dbl
61206  *   v*  = v*^2
61207  * r.x = l * q.x + c
61208  * r.y = q->y
61209  * v*  = v* * r*
61210  *
61211  * @param  [in,out]  vx     X-ordinate of projective value in F*.
61212  * @param  [in,out]  vy     Y-ordinate of projective value in F*.
61213  * @param  [in]      l      Gradient to multiply with.
61214  * @param  [in]      c      Constant to add with.
61215  * @param  [in]      q      ECC point - second point on E(F_P^2).
61216  * @param  [in]      t      SP temporaries (3 used).
61217  * @param  [in]      dbl    Indicates whether this is for doubling. Otherwise
61218  *                          adding.
61219  */
sp_1024_accumulate_line_lc_16(sp_digit * vx,sp_digit * vy,const sp_digit * l,const sp_digit * c,const sp_point_1024 * q,sp_digit * t,int dbl)61220 static void sp_1024_accumulate_line_lc_16(sp_digit* vx, sp_digit* vy,
61221         const sp_digit* l, const sp_digit* c, const sp_point_1024* q,
61222         sp_digit* t, int dbl)
61223 {
61224     sp_digit* rx = t + 4 * 2 * 16;
61225 
61226     /* v = v^2 */
61227     if (dbl) {
61228         sp_1024_proj_sqr_16(vx, vy, t);
61229     }
61230     /* rx = l * q.x + c */
61231     sp_1024_mont_mul_16(rx, l, q->x, p1024_mod, p1024_mp_mod);
61232     sp_1024_mont_add_16(rx, rx, c, p1024_mod);
61233     /* v = v^2 * r */
61234     sp_1024_proj_mul_16(vx, vy, rx, q->y, t);
61235 }
61236 
61237 /* Operations to perform based on order - 1.
61238  * Sliding window. Start at bottom and stop when bottom bit is one.
61239  * Subtract if top bit in window is one.
61240  * Width of 6 bits.
61241  * Pairs: #dbls, add/subtract window value
61242  */
61243 static const signed char sp_1024_order_op_pre[] = {
61244    5,   6, -13,   9, -21,   6,  -5,   8,  31,   6,   3,   6, -27,   6,  25,   9,
61245   -1,   6, -11,   6, -13,   6,  -7,   6, -15,   6, -29,   7,  25,   6,  -9,   6,
61246  -19,   7,   3,   6,  11,   9, -23,   6,   1,   6,  27,   6,   1,   7, -25,   8,
61247   13,   7, -13,   7, -23,  10,  19,   7,   7,   7,  -3,   7,  27,   6,  -7,   7,
61248  -21,   7,  11,   7,  31,   8,   1,   7, -23,   6, -17,   6,  -3,  10,  11,   6,
61249  -21,   7, -27,  11, -29,   6,  -1,  10,  15,   8,  27,   7,  17,   6,  17,   7,
61250  -13,   8,  13,   6,  21,   7, -29,   6,  19,   7, -25,   6,  11,   9,  29,   7,
61251   -7,   8,  27,   7,  29,  10,  -1,   8,  -7,   8,  17,   6,  17,   7, -27,   7,
61252  -21,   6,  -9,   6, -27,  12, -23,   6,  19,   6,  13,   6, -11,   7,  27,   6,
61253   17,   6,  -7,   6, -25,   7, -29,   6,   9,   7,   7,   6,  13,   6, -25,   6,
61254  -19,   6,  13,   6, -11,   6,   5,   8,  19,   6, -21,   8,  23,   7,  27,   6,
61255  -13,   6, -19,  11,  29,   7, -15,   6,  -9,   7, -21,  10,  -3,   7,  21,  10,
61256   25,   6, -15,   6, -23,   6,  21,   6,   1,   6,  21,   7,  -3,   6,  -3,   7,
61257   -7,   6, -23,   7,   7,   8,  15,   9,   5,   6, -11,   6,  21,  11, -27,   7,
61258   27,   6, -11,   6,  31,   6, -21,   6,  19,   6,  -7,   8,  -7,  13,  -3,   6,
61259   -7,   7,  -3,   6,   1,   6,   7,   8,  19,   8,  11,   9,  -9,   7, -31,  12,
61260   25,   6, -17,   9, -15,   7,   5,   6,  25,   7,  -5,   7, -25,   6,  17,   8,
61261  -19,   6, -13,   6,  27,   8,   1,   7,  -5,   7,  -1,   6,  21,   6,   3,  10,
61262   -3,   1,
61263 };
61264 
61265 /*
61266  * Generate table for pairing.
61267  *
61268  * Calculate the graident (l) and constant (c) at each step of the way.
61269  * Sliding window. Start at bottom and stop when bottom bit is one.
61270  * Subtract if top bit in window is one.
61271  * Width of 6 bits.
61272  *
61273  * pm     [in]      Point to generate table for.
61274  * table  [in]      Generated table.
61275  * len    [in,out]  On in, the size of the buffer.
61276  *                  On out, length of table generated.
61277  * @return  0 on success.
61278  *          LENGTH_ONLY_E when table is NULL and only length returned.
61279  *          BUFFER_E when len is too small.
61280  *          MEMORY_E when dynamic memory allocation fauls.
61281  */
sp_Pairing_gen_precomp_x64_1024(const ecc_point * pm,byte * table,word32 * len)61282 static int sp_Pairing_gen_precomp_x64_1024(const ecc_point* pm, byte* table,
61283         word32* len)
61284 {
61285     int err = 0;
61286 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
61287     !defined(WOLFSSL_SP_NO_MALLOC)
61288     sp_digit* td = NULL;
61289     sp_digit* t;
61290     sp_point_1024* pre_p;
61291 #else
61292     sp_digit t[6 * 2 * 16];
61293     sp_point_1024 pre_p[16];
61294     sp_point_1024 pd;
61295     sp_point_1024 cd;
61296     sp_point_1024 negd;
61297 #endif
61298     sp_point_1024* p = NULL;
61299     sp_point_1024* c = NULL;
61300     sp_point_1024* neg = NULL;
61301     int i;
61302     int j;
61303     int k;
61304     sp_table_entry_1024* precomp = (sp_table_entry_1024*)table;
61305 
61306     if (table == NULL) {
61307         *len = sizeof(sp_table_entry_1024) * 1167;
61308         err = LENGTH_ONLY_E;
61309     }
61310 
61311     if ((err == MP_OKAY) &&
61312             (*len < (int)(sizeof(sp_table_entry_1024) * 1167))) {
61313         err = BUFFER_E;
61314     }
61315 
61316     if (err == MP_OKAY) {
61317         err = sp_1024_point_new_16(NULL, pd, p);
61318     }
61319     if (err == MP_OKAY) {
61320         err = sp_1024_point_new_16(NULL, cd, c);
61321     }
61322     if (err == MP_OKAY) {
61323         err = sp_1024_point_new_16(NULL, negd, neg);
61324     }
61325 
61326 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
61327     !defined(WOLFSSL_SP_NO_MALLOC)
61328     if (err == MP_OKAY) {
61329         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 6 * 16 * 2 + 16 * sizeof(sp_point_1024), NULL,
61330                                 DYNAMIC_TYPE_TMP_BUFFER);
61331         if (td == NULL) {
61332             err = MEMORY_E;
61333         }
61334     }
61335 #endif
61336 
61337     if (err == MP_OKAY) {
61338 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
61339     !defined(WOLFSSL_SP_NO_MALLOC)
61340         t     = td;
61341         pre_p = (sp_point_1024*)(td + 6 * 16 * 2);
61342 #endif
61343 
61344         sp_1024_point_from_ecc_point_16(p, pm);
61345 
61346         err = sp_1024_mod_mul_norm_16(p->x, p->x, p1024_mod);
61347     }
61348     if (err == MP_OKAY) {
61349         err = sp_1024_mod_mul_norm_16(p->y, p->y, p1024_mod);
61350     }
61351     if (err == MP_OKAY) {
61352         XMEMCPY(p->z, p1024_norm_mod, sizeof(p1024_norm_mod));
61353         neg->infinity = 0;
61354         c->infinity = 0;
61355 
61356         /* Generate pre-computation table: 1, 3, ... , 31 */
61357         XMEMCPY(&pre_p[0], p, sizeof(sp_point_1024));
61358         /* [2]P for adding */
61359         sp_1024_proj_point_dbl_16(c, p, t);
61360 
61361         /* 1, 3, ... */
61362         for (i = 1; i < 16; i++) {
61363             sp_1024_proj_point_add_16(&pre_p[i], &pre_p[i-1], c, t);
61364             sp_1024_mont_map_16(&pre_p[i], t);
61365         }
61366 
61367         k = 0;
61368         j = sp_1024_order_op_pre[0] / 2;
61369         XMEMCPY(c, &pre_p[j], sizeof(sp_point_1024));
61370 
61371         for (j = 0; j < sp_1024_order_op_pre[1]; j++) {
61372             sp_1024_accum_dbl_calc_lc_16(precomp[k].x, precomp[k].y, c->x, c->y, t);
61373             k++;
61374             sp_1024_proj_point_dbl_16(c, c, t);
61375             sp_1024_mont_map_16(c, t);
61376         }
61377 
61378         for (i = 2; i < 290; i += 2) {
61379             j = sp_1024_order_op_pre[i];
61380             if (j > 0) {
61381                 sp_1024_accum_add_calc_lc_16(precomp[k].x, precomp[k].y,
61382                     pre_p[j/2].x, pre_p[j/2].y, c->x, c->y, t);
61383                 k++;
61384                 sp_1024_proj_point_add_16(c, c, &pre_p[j/2], t);
61385                 sp_1024_mont_map_16(c, t);
61386             }
61387             else {
61388                 XMEMCPY(neg->x, pre_p[-j / 2].x, sizeof(pre_p->x));
61389                 sp_1024_mont_sub_16(neg->y, p1024_mod, pre_p[-j / 2].y,
61390                         p1024_mod);
61391                 XMEMCPY(neg->z, pre_p[-j / 2].z, sizeof(pre_p->z));
61392 
61393                 sp_1024_accum_add_calc_lc_16(precomp[k].x, precomp[k].y,
61394                     neg->x, neg->y, c->x, c->y, t);
61395                 k++;
61396                 sp_1024_proj_point_add_16(c, c, neg, t);
61397                 sp_1024_mont_map_16(c, t);
61398             }
61399 
61400             for (j = 0; j < sp_1024_order_op_pre[i + 1]; j++) {
61401                 sp_1024_accum_dbl_calc_lc_16(precomp[k].x, precomp[k].y, c->x, c->y, t);
61402                 k++;
61403                 sp_1024_proj_point_dbl_16(c, c, t);
61404                 sp_1024_mont_map_16(c, t);
61405             }
61406         }
61407 
61408         *len = sizeof(sp_table_entry_1024) * 1167;
61409     }
61410 
61411 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
61412     !defined(WOLFSSL_SP_NO_MALLOC)
61413     if (td != NULL) {
61414         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
61415     }
61416 #endif
61417     sp_1024_point_free_16(neg, 1, NULL);
61418     sp_1024_point_free_16(c, 1, NULL);
61419     sp_1024_point_free_16(p, 1, NULL);
61420     return err;
61421 }
61422 
61423 /*
61424  * Calculate r = pairing <P, Q>.
61425  *
61426  * That is, multiply base in PF_p[q] by the scalar s, such that s.P = Q.
61427  *
61428  * Sliding window. Start at bottom and stop when bottom bit is one.
61429  * Subtract if top bit in window is one.
61430  * Width of 6 bits.
61431  * Pre-generate values in window (1, 3, ...) - only V.
61432  * Table contains all gradient l and a constant for each point on the path.
61433  *
61434  * @param  [in]  pm     First point on E(F_p)[q].
61435  * @param  [in]  qm     Second point on E(F_p)[q].
61436  * @param  [in]  res    Result of calculation.
61437  * @param  [in]  table  Precomputed table of values.
61438  * @param  [in]  len    Length of precomputed table of values in bytes.
61439  * @return  0 on success.
61440  * @return  MEMORY_E when dynamic memory allocation fails.
61441  */
sp_Pairing_precomp_x64_1024(const ecc_point * pm,const ecc_point * qm,mp_int * res,const byte * table,word32 len)61442 static int sp_Pairing_precomp_x64_1024(const ecc_point* pm, const ecc_point* qm,
61443     mp_int* res, const byte* table, word32 len)
61444 {
61445     int err = 0;
61446 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
61447     !defined(WOLFSSL_SP_NO_MALLOC)
61448     sp_digit* td = NULL;
61449     sp_digit* t;
61450     sp_digit* vx;
61451     sp_digit* vy;
61452     sp_digit (*pre_vx)[32];
61453     sp_digit (*pre_vy)[32];
61454     sp_digit (*pre_nvy)[32];
61455 #else
61456     sp_digit t[6 * 2 * 16];
61457     sp_digit vx[2 * 16];
61458     sp_digit vy[2 * 16];
61459     sp_digit pre_vx[16][32];
61460     sp_digit pre_vy[16][32];
61461     sp_digit pre_nvy[16][32];
61462     sp_point_1024 pd;
61463     sp_point_1024 qd;
61464     sp_point_1024 cd;
61465 #endif
61466     sp_point_1024* p = NULL;
61467     sp_point_1024* q = NULL;
61468     sp_point_1024* c = NULL;
61469     sp_digit* r = NULL;
61470     int i;
61471     int j;
61472     int k;
61473     const sp_table_entry_1024* precomp = (const sp_table_entry_1024*)table;
61474 
61475     if (len < (int)(sizeof(sp_table_entry_1024) * 1167)) {
61476         err = BUFFER_E;
61477     }
61478 
61479     if (err == MP_OKAY) {
61480         err = sp_1024_point_new_16(NULL, pd, p);
61481     }
61482     if (err == MP_OKAY) {
61483         err = sp_1024_point_new_16(NULL, qd, q);
61484     }
61485     if (err == MP_OKAY) {
61486         err = sp_1024_point_new_16(NULL, cd, c);
61487     }
61488 
61489 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
61490     !defined(WOLFSSL_SP_NO_MALLOC)
61491     if (err == MP_OKAY) {
61492         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 56 * 16 * 2, NULL,
61493                                 DYNAMIC_TYPE_TMP_BUFFER);
61494         if (td == NULL) {
61495             err = MEMORY_E;
61496         }
61497     }
61498 #endif
61499 
61500     if (err == MP_OKAY) {
61501 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
61502     !defined(WOLFSSL_SP_NO_MALLOC)
61503         t       = td;
61504         vx      = td + 6 * 16 * 2;
61505         vy      = td + 7 * 16 * 2;
61506         pre_vx  = (sp_digit(*)[32])(td + 8 * 16 * 2);
61507         pre_vy  = (sp_digit(*)[32])(td + 24 * 16 * 2);
61508         pre_nvy = (sp_digit(*)[32])(td + 40 * 16 * 2);
61509 #endif
61510         r = vy;
61511 
61512         sp_1024_point_from_ecc_point_16(p, pm);
61513         sp_1024_point_from_ecc_point_16(q, qm);
61514 
61515         err = sp_1024_mod_mul_norm_16(p->x, p->x, p1024_mod);
61516     }
61517     if (err == MP_OKAY) {
61518         err = sp_1024_mod_mul_norm_16(p->y, p->y, p1024_mod);
61519     }
61520     if (err == MP_OKAY) {
61521         err = sp_1024_mod_mul_norm_16(p->z, p->z, p1024_mod);
61522     }
61523     if (err == MP_OKAY) {
61524         err = sp_1024_mod_mul_norm_16(q->x, q->x, p1024_mod);
61525     }
61526     if (err == MP_OKAY) {
61527         err = sp_1024_mod_mul_norm_16(q->y, q->y, p1024_mod);
61528     }
61529     if (err == MP_OKAY) {
61530         /* Generate pre-computation table: 1, 3, ... , 31 */
61531         XMEMSET(pre_vx[0], 0, sizeof(sp_digit) * 2 * 16);
61532         pre_vx[0][0] = 1;
61533         XMEMSET(pre_vy[0], 0, sizeof(sp_digit) * 2 * 16);
61534         sp_1024_mont_sub_16(pre_nvy[0], p1024_mod, pre_vy[0], p1024_mod);
61535 
61536         /* [2]P for adding */
61537         XMEMCPY(c, p, sizeof(sp_point_1024));
61538         XMEMSET(vx, 0, sizeof(sp_digit) * 2 * 16);
61539         vx[0] = 1;
61540         XMEMSET(vy, 0, sizeof(sp_digit) * 2 * 16);
61541         sp_1024_accumulate_line_dbl_16(vx, vy, c, q, t);
61542 
61543         /* 3, 5, ... */
61544         for (i = 1; i < 16; i++) {
61545             XMEMCPY(pre_vx[i], pre_vx[i-1], sizeof(sp_digit) * 2 * 16);
61546             XMEMCPY(pre_vy[i], pre_vy[i-1], sizeof(sp_digit) * 2 * 16);
61547             sp_1024_proj_mul_16(pre_vx[i], pre_vy[i], vx, vy, t);
61548             sp_1024_accumulate_line_add_n_16(pre_vx[i], pre_vy[i], c,
61549                 q, p, t, 0);
61550             sp_1024_mont_sub_16(pre_nvy[i], p1024_mod, pre_vy[i],
61551                 p1024_mod);
61552         }
61553 
61554         XMEMCPY(c->z, p1024_norm_mod, sizeof(sp_digit) * 16);
61555         c->infinity = 0;
61556         j = sp_1024_order_op_pre[0] / 2;
61557         XMEMCPY(vx, pre_vx[j], sizeof(sp_digit) * 2 * 16);
61558         XMEMCPY(vy, pre_vy[j], sizeof(sp_digit) * 2 * 16);
61559 
61560         k = 0;
61561         for (j = 0; j < sp_1024_order_op_pre[1]; j++) {
61562             /* Accumulate line into v and double point. */
61563             sp_1024_accumulate_line_lc_16(vx, vy, precomp[k].x,
61564                 precomp[k].y, q, t, 1);
61565             k++;
61566         }
61567 
61568         for (i = 2; i < 290; i += 2) {
61569             sp_1024_accumulate_line_lc_16(vx, vy, precomp[k].x,
61570                 precomp[k].y, q, t, 0);
61571             k++;
61572 
61573             j = sp_1024_order_op_pre[i];
61574             if (j > 0) {
61575                 j /= 2;
61576                 /* Accumulate line into v. */
61577                 sp_1024_proj_mul_16(vx, vy, pre_vx[j], pre_vy[j], t);
61578             }
61579             else {
61580                 j = -j / 2;
61581                 /* Accumulate line into v. */
61582                 sp_1024_proj_mul_16(vx, vy, pre_vx[j], pre_nvy[j], t);
61583             }
61584 
61585             for (j = 0; j < sp_1024_order_op_pre[i + 1]; j++) {
61586                 /* Accumulate line into v and double point. */
61587                 sp_1024_accumulate_line_lc_16(vx, vy, precomp[k].x,
61588                     precomp[k].y, q, t, 1);
61589                 k++;
61590             }
61591         }
61592 
61593         /* Final exponentiation */
61594         sp_1024_proj_sqr_16(vx, vy, t);
61595         sp_1024_proj_sqr_16(vx, vy, t);
61596 
61597         /* Convert from PF_p[q] to F_p */
61598         sp_1024_mont_inv_16(vx, vx, t);
61599         sp_1024_mont_mul_16(r, vx, vy, p1024_mod, p1024_mp_mod);
61600         XMEMSET(r + 16, 0, sizeof(sp_digit) * 16);
61601         sp_1024_mont_reduce_16(r, p1024_mod, p1024_mp_mod);
61602 
61603         err = sp_1024_to_mp(r, res);
61604     }
61605 
61606 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
61607     !defined(WOLFSSL_SP_NO_MALLOC)
61608     if (td != NULL) {
61609         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
61610     }
61611 #endif
61612     sp_1024_point_free_16(c, 1, NULL);
61613     sp_1024_point_free_16(q, 1, NULL);
61614     sp_1024_point_free_16(p, 1, NULL);
61615     return err;
61616 }
61617 
61618 #endif /* WOLFSSL_SP_SMALL */
61619 #ifdef HAVE_INTEL_AVX2
61620 #ifdef WOLFSSL_SP_SMALL
61621 /*
61622  * Generate table for pairing.
61623  *
61624  * Small implementation does not use a table - returns 0 length.
61625  *
61626  * pm     [in]      Point to generate table for.
61627  * table  [in]      Generated table.
61628  * len    [in,out]  On in, the size of the buffer.
61629  *                  On out, length of table generated.
61630  * @return  0 on success.
61631  *          LENGTH_ONLY_E when table is NULL and only length returned.
61632  *          BUFFER_E when len is too small.
61633  */
sp_Pairing_gen_precomp_avx2_1024(const ecc_point * pm,byte * table,word32 * len)61634 static int sp_Pairing_gen_precomp_avx2_1024(const ecc_point* pm, byte* table,
61635         word32* len)
61636 {
61637     int err = 0;
61638 
61639     if (table == NULL) {
61640         *len = 0;
61641         err = LENGTH_ONLY_E;
61642     }
61643     else if (*len != 0) {
61644         err = BUFFER_E;
61645     }
61646 
61647     (void)*pm;
61648 
61649     return err;
61650 }
61651 
61652 /*
61653  * Calculate r = pairing <P, Q>.
61654  *
61655  * That is, multiply base in PF_p[q] by the scalar s, such that s.P = Q.
61656  *
61657  * Small implementation does not use a table - use the normal implementation.
61658  *
61659  * @param  [in]  pm     First point on E(F_p)[q].
61660  * @param  [in]  qm     Second point on E(F_p)[q].
61661  * @param  [in]  res    Result of calculation.
61662  * @param  [in]  table  Precomputed table of values.
61663  * @param  [in]  len    Length of precomputed table of values in bytes.
61664  * @return  0 on success.
61665  * @return  MEMORY_E when dynamic memory allocation fails.
61666  */
sp_Pairing_precomp_avx2_1024(const ecc_point * pm,const ecc_point * qm,mp_int * res,const byte * table,word32 len)61667 static int sp_Pairing_precomp_avx2_1024(const ecc_point* pm, const ecc_point* qm,
61668     mp_int* res, const byte* table, word32 len)
61669 {
61670     (void)table;
61671     (void)len;
61672     return sp_Pairing_avx2_1024(pm, qm, res);
61673 }
61674 
61675 #else
61676 /*
61677  * Calc l and c for the point when doubling p.
61678  *
61679  * l = 3 * (p.x^2 - 1) / (2 * p.y)
61680  * c = l * p.x - p.y
61681  *
61682  * @param  [out]  lr  Gradient result - table entry.
61683  * @param  [out]  cr  Constant result - table entry.
61684  * @param  [in]   px  X-ordinate of point to double.
61685  * @param  [in]   py  Y-ordinate of point to double.
61686  * @param  [in]   t   SP temporaries (3 used).
61687  */
sp_1024_accum_dbl_calc_lc_avx2_16(sp_digit * lr,sp_digit * cr,const sp_digit * px,const sp_digit * py,sp_digit * t)61688 static void sp_1024_accum_dbl_calc_lc_avx2_16(sp_digit* lr, sp_digit* cr,
61689         const sp_digit* px, const sp_digit* py, sp_digit* t)
61690 {
61691     sp_digit* t1 = t + 0 * 2 * 16;
61692     sp_digit* t2 = t + 2 * 2 * 16;
61693     sp_digit* l  = t + 4 * 2 * 16;
61694 
61695 
61696     /* l = 1 / 2 * p.y */
61697     sp_1024_mont_dbl_avx2_16(l, py, p1024_mod);
61698     sp_1024_mont_inv_avx2_16(l, l, t);
61699 
61700     /* t1 = p.x^2 */
61701     sp_1024_mont_sqr_avx2_16(t1, px, p1024_mod, p1024_mp_mod);
61702     /* t1 = p.x - 1 */
61703     sp_1024_mont_sub_avx2_16(t1, t1, p1024_norm_mod, p1024_mod);
61704     /* t1 = 3 * (p.x^2 - 1) */
61705     sp_1024_mont_dbl_avx2_16(t2, t1, p1024_mod);
61706     sp_1024_mont_add_avx2_16(t1, t1, t2, p1024_mod);
61707     /* t1 = 3 * (p.x^2 - 1) / (2 * p.y) */
61708     sp_1024_mont_mul_avx2_16(l, l, t1, p1024_mod, p1024_mp_mod);
61709     /* t2 = l * p.x */
61710     sp_1024_mont_mul_avx2_16(t2, l, px, p1024_mod, p1024_mp_mod);
61711     /* c = t2 = l * p.x - p.y */
61712     sp_1024_mont_sub_avx2_16(t2, t2, py, p1024_mod);
61713 
61714     XMEMCPY(lr, l, sizeof(sp_digit) * 16);
61715     XMEMCPY(cr, t2, sizeof(sp_digit) * 16);
61716 }
61717 
61718 /*
61719  * Calc l and c when adding p and c.
61720  *
61721  * l = (c.y - p.y) / (c.x - p.x)
61722  * c = (p.x * c.y - cx * p.y) / (cx - p.x)
61723  *
61724  * @param  [out]  lr  Gradient result - table entry.
61725  * @param  [out]  cr  Constant result - table entry.
61726  * @param  [in]   px  X-ordinate of point to add.
61727  * @param  [in]   py  Y-ordinate of point to add.
61728  * @param  [in]   cx  X-ordinate of current point.
61729  * @param  [in]   cy  Y-ordinate of current point.
61730  * @param  [in]   t   SP temporaries (3 used).
61731  */
sp_1024_accum_add_calc_lc_avx2_16(sp_digit * lr,sp_digit * cr,const sp_digit * px,const sp_digit * py,const sp_digit * cx,const sp_digit * cy,sp_digit * t)61732 static void sp_1024_accum_add_calc_lc_avx2_16(sp_digit* lr, sp_digit* cr,
61733         const sp_digit* px, const sp_digit* py, const sp_digit* cx,
61734         const sp_digit* cy, sp_digit* t)
61735 {
61736     sp_digit* t1 = t + 0 * 2 * 16;
61737     sp_digit* c  = t + 2 * 2 * 16;
61738     sp_digit* l  = t + 4 * 2 * 16;
61739 
61740 
61741     /* l = 1 / (c.x - p.x) */
61742     sp_1024_mont_sub_avx2_16(l, cx, px, p1024_mod);
61743     sp_1024_mont_inv_avx2_16(l, l, t);
61744 
61745     /* c = p.x * c.y */
61746     sp_1024_mont_mul_avx2_16(c, px, cy, p1024_mod, p1024_mp_mod);
61747     /* t1 = c.x * p.y */
61748     sp_1024_mont_mul_avx2_16(t1, cx, py, p1024_mod, p1024_mp_mod);
61749     /* c = (p.x * c.y) - (c.x * p.y) */
61750     sp_1024_mont_sub_avx2_16(c, c, t1, p1024_mod);
61751     /* c = ((p.x * c.y) - (c.x * p.y)) / (c.x - p.x) */
61752     sp_1024_mont_mul_avx2_16(c, c, l, p1024_mod, p1024_mp_mod);
61753     /* t1 = c.y - p.y */
61754     sp_1024_mont_sub_avx2_16(t1, cy, py, p1024_mod);
61755     /* l = (c.y - p.y) / (c.x - p.x) */
61756     sp_1024_mont_mul_avx2_16(l, t1, l, p1024_mod, p1024_mp_mod);
61757 
61758     XMEMCPY(lr, l, sizeof(sp_digit) * 16);
61759     XMEMCPY(cr, c, sizeof(sp_digit) * 16);
61760 }
61761 
61762 /*
61763  * Calculate vx and vy given gradient l and constant c and point q.
61764  *
61765  * l is a the gradient and is multiplied by q->x.
61766  * c is a the constant that is added to the multiplicative result.
61767  * q->y is the y-ordinate in result to multiply.
61768  *
61769  * if dbl
61770  *   v*  = v*^2
61771  * r.x = l * q.x + c
61772  * r.y = q->y
61773  * v*  = v* * r*
61774  *
61775  * @param  [in,out]  vx     X-ordinate of projective value in F*.
61776  * @param  [in,out]  vy     Y-ordinate of projective value in F*.
61777  * @param  [in]      l      Gradient to multiply with.
61778  * @param  [in]      c      Constant to add with.
61779  * @param  [in]      q      ECC point - second point on E(F_P^2).
61780  * @param  [in]      t      SP temporaries (3 used).
61781  * @param  [in]      dbl    Indicates whether this is for doubling. Otherwise
61782  *                          adding.
61783  */
sp_1024_accumulate_line_lc_avx2_16(sp_digit * vx,sp_digit * vy,const sp_digit * l,const sp_digit * c,const sp_point_1024 * q,sp_digit * t,int dbl)61784 static void sp_1024_accumulate_line_lc_avx2_16(sp_digit* vx, sp_digit* vy,
61785         const sp_digit* l, const sp_digit* c, const sp_point_1024* q,
61786         sp_digit* t, int dbl)
61787 {
61788     sp_digit* rx = t + 4 * 2 * 16;
61789 
61790     /* v = v^2 */
61791     if (dbl) {
61792         sp_1024_proj_sqr_avx2_16(vx, vy, t);
61793     }
61794     /* rx = l * q.x + c */
61795     sp_1024_mont_mul_avx2_16(rx, l, q->x, p1024_mod, p1024_mp_mod);
61796     sp_1024_mont_add_avx2_16(rx, rx, c, p1024_mod);
61797     /* v = v^2 * r */
61798     sp_1024_proj_mul_avx2_16(vx, vy, rx, q->y, t);
61799 }
61800 
61801 
61802 /*
61803  * Generate table for pairing.
61804  *
61805  * Calculate the graident (l) and constant (c) at each step of the way.
61806  * Sliding window. Start at bottom and stop when bottom bit is one.
61807  * Subtract if top bit in window is one.
61808  * Width of 6 bits.
61809  *
61810  * pm     [in]      Point to generate table for.
61811  * table  [in]      Generated table.
61812  * len    [in,out]  On in, the size of the buffer.
61813  *                  On out, length of table generated.
61814  * @return  0 on success.
61815  *          LENGTH_ONLY_E when table is NULL and only length returned.
61816  *          BUFFER_E when len is too small.
61817  *          MEMORY_E when dynamic memory allocation fauls.
61818  */
sp_Pairing_gen_precomp_avx2_1024(const ecc_point * pm,byte * table,word32 * len)61819 static int sp_Pairing_gen_precomp_avx2_1024(const ecc_point* pm, byte* table,
61820         word32* len)
61821 {
61822     int err = 0;
61823 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
61824     !defined(WOLFSSL_SP_NO_MALLOC)
61825     sp_digit* td = NULL;
61826     sp_digit* t;
61827     sp_point_1024* pre_p;
61828 #else
61829     sp_digit t[6 * 2 * 16];
61830     sp_point_1024 pre_p[16];
61831     sp_point_1024 pd;
61832     sp_point_1024 cd;
61833     sp_point_1024 negd;
61834 #endif
61835     sp_point_1024* p = NULL;
61836     sp_point_1024* c = NULL;
61837     sp_point_1024* neg = NULL;
61838     int i;
61839     int j;
61840     int k;
61841     sp_table_entry_1024* precomp = (sp_table_entry_1024*)table;
61842 
61843     if (table == NULL) {
61844         *len = sizeof(sp_table_entry_1024) * 1167;
61845         err = LENGTH_ONLY_E;
61846     }
61847 
61848     if ((err == MP_OKAY) &&
61849             (*len < (int)(sizeof(sp_table_entry_1024) * 1167))) {
61850         err = BUFFER_E;
61851     }
61852 
61853     if (err == MP_OKAY) {
61854         err = sp_1024_point_new_16(NULL, pd, p);
61855     }
61856     if (err == MP_OKAY) {
61857         err = sp_1024_point_new_16(NULL, cd, c);
61858     }
61859     if (err == MP_OKAY) {
61860         err = sp_1024_point_new_16(NULL, negd, neg);
61861     }
61862 
61863 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
61864     !defined(WOLFSSL_SP_NO_MALLOC)
61865     if (err == MP_OKAY) {
61866         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 6 * 16 * 2 + 16 * sizeof(sp_point_1024), NULL,
61867                                 DYNAMIC_TYPE_TMP_BUFFER);
61868         if (td == NULL) {
61869             err = MEMORY_E;
61870         }
61871     }
61872 #endif
61873 
61874     if (err == MP_OKAY) {
61875 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
61876     !defined(WOLFSSL_SP_NO_MALLOC)
61877         t     = td;
61878         pre_p = (sp_point_1024*)(td + 6 * 16 * 2);
61879 #endif
61880 
61881         sp_1024_point_from_ecc_point_16(p, pm);
61882 
61883         err = sp_1024_mod_mul_norm_avx2_16(p->x, p->x, p1024_mod);
61884     }
61885     if (err == MP_OKAY) {
61886         err = sp_1024_mod_mul_norm_avx2_16(p->y, p->y, p1024_mod);
61887     }
61888     if (err == MP_OKAY) {
61889         XMEMCPY(p->z, p1024_norm_mod, sizeof(p1024_norm_mod));
61890         neg->infinity = 0;
61891         c->infinity = 0;
61892 
61893         /* Generate pre-computation table: 1, 3, ... , 31 */
61894         XMEMCPY(&pre_p[0], p, sizeof(sp_point_1024));
61895         /* [2]P for adding */
61896         sp_1024_proj_point_dbl_avx2_16(c, p, t);
61897 
61898         /* 1, 3, ... */
61899         for (i = 1; i < 16; i++) {
61900             sp_1024_proj_point_add_avx2_16(&pre_p[i], &pre_p[i-1], c, t);
61901             sp_1024_mont_map_avx2_16(&pre_p[i], t);
61902         }
61903 
61904         k = 0;
61905         j = sp_1024_order_op_pre[0] / 2;
61906         XMEMCPY(c, &pre_p[j], sizeof(sp_point_1024));
61907 
61908         for (j = 0; j < sp_1024_order_op_pre[1]; j++) {
61909             sp_1024_accum_dbl_calc_lc_avx2_16(precomp[k].x, precomp[k].y, c->x, c->y, t);
61910             k++;
61911             sp_1024_proj_point_dbl_avx2_16(c, c, t);
61912             sp_1024_mont_map_avx2_16(c, t);
61913         }
61914 
61915         for (i = 2; i < 290; i += 2) {
61916             j = sp_1024_order_op_pre[i];
61917             if (j > 0) {
61918                 sp_1024_accum_add_calc_lc_avx2_16(precomp[k].x, precomp[k].y,
61919                     pre_p[j/2].x, pre_p[j/2].y, c->x, c->y, t);
61920                 k++;
61921                 sp_1024_proj_point_add_avx2_16(c, c, &pre_p[j/2], t);
61922                 sp_1024_mont_map_avx2_16(c, t);
61923             }
61924             else {
61925                 XMEMCPY(neg->x, pre_p[-j / 2].x, sizeof(pre_p->x));
61926                 sp_1024_mont_sub_avx2_16(neg->y, p1024_mod, pre_p[-j / 2].y,
61927                         p1024_mod);
61928                 XMEMCPY(neg->z, pre_p[-j / 2].z, sizeof(pre_p->z));
61929 
61930                 sp_1024_accum_add_calc_lc_avx2_16(precomp[k].x, precomp[k].y,
61931                     neg->x, neg->y, c->x, c->y, t);
61932                 k++;
61933                 sp_1024_proj_point_add_avx2_16(c, c, neg, t);
61934                 sp_1024_mont_map_avx2_16(c, t);
61935             }
61936 
61937             for (j = 0; j < sp_1024_order_op_pre[i + 1]; j++) {
61938                 sp_1024_accum_dbl_calc_lc_avx2_16(precomp[k].x, precomp[k].y, c->x, c->y, t);
61939                 k++;
61940                 sp_1024_proj_point_dbl_avx2_16(c, c, t);
61941                 sp_1024_mont_map_avx2_16(c, t);
61942             }
61943         }
61944 
61945         *len = sizeof(sp_table_entry_1024) * 1167;
61946     }
61947 
61948 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
61949     !defined(WOLFSSL_SP_NO_MALLOC)
61950     if (td != NULL) {
61951         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
61952     }
61953 #endif
61954     sp_1024_point_free_16(neg, 1, NULL);
61955     sp_1024_point_free_16(c, 1, NULL);
61956     sp_1024_point_free_16(p, 1, NULL);
61957     return err;
61958 }
61959 
61960 /*
61961  * Calculate r = pairing <P, Q>.
61962  *
61963  * That is, multiply base in PF_p[q] by the scalar s, such that s.P = Q.
61964  *
61965  * Sliding window. Start at bottom and stop when bottom bit is one.
61966  * Subtract if top bit in window is one.
61967  * Width of 6 bits.
61968  * Pre-generate values in window (1, 3, ...) - only V.
61969  * Table contains all gradient l and a constant for each point on the path.
61970  *
61971  * @param  [in]  pm     First point on E(F_p)[q].
61972  * @param  [in]  qm     Second point on E(F_p)[q].
61973  * @param  [in]  res    Result of calculation.
61974  * @param  [in]  table  Precomputed table of values.
61975  * @param  [in]  len    Length of precomputed table of values in bytes.
61976  * @return  0 on success.
61977  * @return  MEMORY_E when dynamic memory allocation fails.
61978  */
sp_Pairing_precomp_avx2_1024(const ecc_point * pm,const ecc_point * qm,mp_int * res,const byte * table,word32 len)61979 static int sp_Pairing_precomp_avx2_1024(const ecc_point* pm, const ecc_point* qm,
61980     mp_int* res, const byte* table, word32 len)
61981 {
61982     int err = 0;
61983 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
61984     !defined(WOLFSSL_SP_NO_MALLOC)
61985     sp_digit* td = NULL;
61986     sp_digit* t;
61987     sp_digit* vx;
61988     sp_digit* vy;
61989     sp_digit (*pre_vx)[32];
61990     sp_digit (*pre_vy)[32];
61991     sp_digit (*pre_nvy)[32];
61992 #else
61993     sp_digit t[6 * 2 * 16];
61994     sp_digit vx[2 * 16];
61995     sp_digit vy[2 * 16];
61996     sp_digit pre_vx[16][32];
61997     sp_digit pre_vy[16][32];
61998     sp_digit pre_nvy[16][32];
61999     sp_point_1024 pd;
62000     sp_point_1024 qd;
62001     sp_point_1024 cd;
62002 #endif
62003     sp_point_1024* p = NULL;
62004     sp_point_1024* q = NULL;
62005     sp_point_1024* c = NULL;
62006     sp_digit* r = NULL;
62007     int i;
62008     int j;
62009     int k;
62010     const sp_table_entry_1024* precomp = (const sp_table_entry_1024*)table;
62011 
62012     if (len < (int)(sizeof(sp_table_entry_1024) * 1167)) {
62013         err = BUFFER_E;
62014     }
62015 
62016     if (err == MP_OKAY) {
62017         err = sp_1024_point_new_16(NULL, pd, p);
62018     }
62019     if (err == MP_OKAY) {
62020         err = sp_1024_point_new_16(NULL, qd, q);
62021     }
62022     if (err == MP_OKAY) {
62023         err = sp_1024_point_new_16(NULL, cd, c);
62024     }
62025 
62026 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
62027     !defined(WOLFSSL_SP_NO_MALLOC)
62028     if (err == MP_OKAY) {
62029         td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 56 * 16 * 2, NULL,
62030                                 DYNAMIC_TYPE_TMP_BUFFER);
62031         if (td == NULL) {
62032             err = MEMORY_E;
62033         }
62034     }
62035 #endif
62036 
62037     if (err == MP_OKAY) {
62038 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
62039     !defined(WOLFSSL_SP_NO_MALLOC)
62040         t       = td;
62041         vx      = td + 6 * 16 * 2;
62042         vy      = td + 7 * 16 * 2;
62043         pre_vx  = (sp_digit(*)[32])(td + 8 * 16 * 2);
62044         pre_vy  = (sp_digit(*)[32])(td + 24 * 16 * 2);
62045         pre_nvy = (sp_digit(*)[32])(td + 40 * 16 * 2);
62046 #endif
62047         r = vy;
62048 
62049         sp_1024_point_from_ecc_point_16(p, pm);
62050         sp_1024_point_from_ecc_point_16(q, qm);
62051 
62052         err = sp_1024_mod_mul_norm_avx2_16(p->x, p->x, p1024_mod);
62053     }
62054     if (err == MP_OKAY) {
62055         err = sp_1024_mod_mul_norm_avx2_16(p->y, p->y, p1024_mod);
62056     }
62057     if (err == MP_OKAY) {
62058         err = sp_1024_mod_mul_norm_avx2_16(p->z, p->z, p1024_mod);
62059     }
62060     if (err == MP_OKAY) {
62061         err = sp_1024_mod_mul_norm_avx2_16(q->x, q->x, p1024_mod);
62062     }
62063     if (err == MP_OKAY) {
62064         err = sp_1024_mod_mul_norm_avx2_16(q->y, q->y, p1024_mod);
62065     }
62066     if (err == MP_OKAY) {
62067         /* Generate pre-computation table: 1, 3, ... , 31 */
62068         XMEMSET(pre_vx[0], 0, sizeof(sp_digit) * 2 * 16);
62069         pre_vx[0][0] = 1;
62070         XMEMSET(pre_vy[0], 0, sizeof(sp_digit) * 2 * 16);
62071         sp_1024_mont_sub_avx2_16(pre_nvy[0], p1024_mod, pre_vy[0], p1024_mod);
62072 
62073         /* [2]P for adding */
62074         XMEMCPY(c, p, sizeof(sp_point_1024));
62075         XMEMSET(vx, 0, sizeof(sp_digit) * 2 * 16);
62076         vx[0] = 1;
62077         XMEMSET(vy, 0, sizeof(sp_digit) * 2 * 16);
62078         sp_1024_accumulate_line_dbl_avx2_16(vx, vy, c, q, t);
62079 
62080         /* 3, 5, ... */
62081         for (i = 1; i < 16; i++) {
62082             XMEMCPY(pre_vx[i], pre_vx[i-1], sizeof(sp_digit) * 2 * 16);
62083             XMEMCPY(pre_vy[i], pre_vy[i-1], sizeof(sp_digit) * 2 * 16);
62084             sp_1024_proj_mul_avx2_16(pre_vx[i], pre_vy[i], vx, vy, t);
62085             sp_1024_accumulate_line_add_n_avx2_16(pre_vx[i], pre_vy[i], c,
62086                 q, p, t, 0);
62087             sp_1024_mont_sub_avx2_16(pre_nvy[i], p1024_mod, pre_vy[i],
62088                 p1024_mod);
62089         }
62090 
62091         XMEMCPY(c->z, p1024_norm_mod, sizeof(sp_digit) * 16);
62092         c->infinity = 0;
62093         j = sp_1024_order_op_pre[0] / 2;
62094         XMEMCPY(vx, pre_vx[j], sizeof(sp_digit) * 2 * 16);
62095         XMEMCPY(vy, pre_vy[j], sizeof(sp_digit) * 2 * 16);
62096 
62097         k = 0;
62098         for (j = 0; j < sp_1024_order_op_pre[1]; j++) {
62099             /* Accumulate line into v and double point. */
62100             sp_1024_accumulate_line_lc_avx2_16(vx, vy, precomp[k].x,
62101                 precomp[k].y, q, t, 1);
62102             k++;
62103         }
62104 
62105         for (i = 2; i < 290; i += 2) {
62106             sp_1024_accumulate_line_lc_avx2_16(vx, vy, precomp[k].x,
62107                 precomp[k].y, q, t, 0);
62108             k++;
62109 
62110             j = sp_1024_order_op_pre[i];
62111             if (j > 0) {
62112                 j /= 2;
62113                 /* Accumulate line into v. */
62114                 sp_1024_proj_mul_avx2_16(vx, vy, pre_vx[j], pre_vy[j], t);
62115             }
62116             else {
62117                 j = -j / 2;
62118                 /* Accumulate line into v. */
62119                 sp_1024_proj_mul_avx2_16(vx, vy, pre_vx[j], pre_nvy[j], t);
62120             }
62121 
62122             for (j = 0; j < sp_1024_order_op_pre[i + 1]; j++) {
62123                 /* Accumulate line into v and double point. */
62124                 sp_1024_accumulate_line_lc_avx2_16(vx, vy, precomp[k].x,
62125                     precomp[k].y, q, t, 1);
62126                 k++;
62127             }
62128         }
62129 
62130         /* Final exponentiation */
62131         sp_1024_proj_sqr_avx2_16(vx, vy, t);
62132         sp_1024_proj_sqr_avx2_16(vx, vy, t);
62133 
62134         /* Convert from PF_p[q] to F_p */
62135         sp_1024_mont_inv_avx2_16(vx, vx, t);
62136         sp_1024_mont_mul_avx2_16(r, vx, vy, p1024_mod, p1024_mp_mod);
62137         XMEMSET(r + 16, 0, sizeof(sp_digit) * 16);
62138         sp_1024_mont_reduce_avx2_16(r, p1024_mod, p1024_mp_mod);
62139 
62140         err = sp_1024_to_mp(r, res);
62141     }
62142 
62143 #if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && \
62144     !defined(WOLFSSL_SP_NO_MALLOC)
62145     if (td != NULL) {
62146         XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
62147     }
62148 #endif
62149     sp_1024_point_free_16(c, 1, NULL);
62150     sp_1024_point_free_16(q, 1, NULL);
62151     sp_1024_point_free_16(p, 1, NULL);
62152     return err;
62153 }
62154 
62155 #endif /* WOLFSSL_SP_SMALL */
62156 #endif /* HAVE_INTEL_AVX2 */
62157 /*
62158  * Generate table for pairing.
62159  *
62160  * pm     [in]   Point to generate table for.
62161  * table  [in]   Generated table.
62162  * len    [in,out]  On in, the size of the buffer.
62163  *                  On out, length of table generated.
62164  * @return  0 on success.
62165  *          Otherwise failure.
62166  */
sp_Pairing_gen_precomp_1024(const ecc_point * pm,byte * table,word32 * len)62167 int sp_Pairing_gen_precomp_1024(const ecc_point* pm, byte* table, word32* len)
62168 {
62169     int err;
62170 #ifdef HAVE_INTEL_AVX2
62171     word32 cpuid_flags = cpuid_get_flags();
62172 #endif
62173 
62174     ASSERT_SAVED_VECTOR_REGISTERS();
62175 
62176 #ifdef HAVE_INTEL_AVX2
62177     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
62178         err = sp_Pairing_gen_precomp_avx2_1024(pm, table, len);
62179     }
62180     else
62181 #endif
62182     {
62183         err = sp_Pairing_gen_precomp_x64_1024(pm, table, len);
62184     }
62185 
62186    return err;
62187 }
62188 
62189 /*
62190  * Calculate r = pairing <P, Q>.
62191  *
62192  * That is, multiply base in PF_p[q] by the scalar s, such that s.P = Q.
62193  *
62194  * @param  [in]  key  SAKKE key.
62195  * @param  [in]  p    First point on E(F_p)[q].
62196  * @param  [in]  q    Second point on E(F_p)[q].
62197  * @param  [in]  r    Result of calculation.
62198  * @return  0 on success.
62199  * @return  MEMORY_E when dynamic memory allocation fails.
62200  * @return  Other -ve value on internal failure.
62201  */
sp_Pairing_precomp_1024(const ecc_point * pm,const ecc_point * qm,mp_int * res,const byte * table,word32 len)62202 int sp_Pairing_precomp_1024(const ecc_point* pm, const ecc_point* qm, mp_int* res,
62203     const byte* table, word32 len)
62204 {
62205     int err;
62206 #ifdef HAVE_INTEL_AVX2
62207     word32 cpuid_flags = cpuid_get_flags();
62208 #endif
62209 
62210     ASSERT_SAVED_VECTOR_REGISTERS();
62211 
62212 #ifdef HAVE_INTEL_AVX2
62213     if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
62214         err = sp_Pairing_precomp_avx2_1024(pm, qm, res, table, len);
62215     }
62216     else
62217 #endif
62218     {
62219         err = sp_Pairing_precomp_x64_1024(pm, qm, res, table, len);
62220     }
62221 
62222    return err;
62223 }
62224 
62225 /* Returns 1 if the number of zero.
62226  * Implementation is constant time.
62227  *
62228  * a  Number to check.
62229  * returns 1 if the number is zero and 0 otherwise.
62230  */
sp_1024_iszero_16(const sp_digit * a)62231 static int sp_1024_iszero_16(const sp_digit* a)
62232 {
62233     return (a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] |
62234             a[8] | a[9] | a[10] | a[11] | a[12] | a[13] | a[14] | a[15]) == 0;
62235 }
62236 
62237 #ifdef HAVE_ECC_CHECK_KEY
62238 extern void sp_1024_from_bin_bswap(sp_digit* r, int size, const byte* a, int n);
62239 extern void sp_1024_from_bin_movbe(sp_digit* r, int size, const byte* a, int n);
62240 /* Read big endian unsigned byte array into r.
62241  *
62242  * r  A single precision integer.
62243  * size  Maximum number of bytes to convert
62244  * a  Byte array.
62245  * n  Number of bytes in array to read.
62246  */
sp_1024_from_bin(sp_digit * r,int size,const byte * a,int n)62247 static void sp_1024_from_bin(sp_digit* r, int size, const byte* a, int n)
62248 {
62249 #ifndef NO_MOVBE_SUPPORT
62250     word32 cpuid_flags = cpuid_get_flags();
62251 
62252     if (IS_INTEL_MOVBE(cpuid_flags)) {
62253         sp_1024_from_bin_movbe(r, size, a, n);
62254     }
62255     else
62256 #endif
62257     {
62258         sp_1024_from_bin_bswap(r, size, a, n);
62259     }
62260 }
62261 
62262 /* Check that the x and y oridinates are a valid point on the curve.
62263  *
62264  * point  EC point.
62265  * heap   Heap to use if dynamically allocating.
62266  * returns MEMORY_E if dynamic memory allocation fails, MP_VAL if the point is
62267  * not on the curve and MP_OKAY otherwise.
62268  */
sp_1024_ecc_is_point_16(const sp_point_1024 * point,void * heap)62269 static int sp_1024_ecc_is_point_16(const sp_point_1024* point,
62270     void* heap)
62271 {
62272 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
62273     sp_digit* t1 = NULL;
62274 #else
62275     sp_digit t1[16 * 4];
62276 #endif
62277     sp_digit* t2 = NULL;
62278     sp_int64 n;
62279     int err = MP_OKAY;
62280 
62281 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
62282     t1 = (sp_digit*)XMALLOC(sizeof(sp_digit) * 16 * 4, heap, DYNAMIC_TYPE_ECC);
62283     if (t1 == NULL)
62284         err = MEMORY_E;
62285 #endif
62286     (void)heap;
62287 
62288     if (err == MP_OKAY) {
62289         t2 = t1 + 2 * 16;
62290 
62291         sp_1024_sqr_16(t1, point->y);
62292         (void)sp_1024_mod_16(t1, t1, p1024_mod);
62293         sp_1024_sqr_16(t2, point->x);
62294         (void)sp_1024_mod_16(t2, t2, p1024_mod);
62295         sp_1024_mul_16(t2, t2, point->x);
62296         (void)sp_1024_mod_16(t2, t2, p1024_mod);
62297         (void)sp_1024_sub_16(t2, p1024_mod, t2);
62298         sp_1024_mont_add_16(t1, t1, t2, p1024_mod);
62299 
62300         sp_1024_mont_add_16(t1, t1, point->x, p1024_mod);
62301         sp_1024_mont_add_16(t1, t1, point->x, p1024_mod);
62302         sp_1024_mont_add_16(t1, t1, point->x, p1024_mod);
62303 
62304         n = sp_1024_cmp_16(t1, p1024_mod);
62305         sp_1024_cond_sub_16(t1, t1, p1024_mod, 0 - ((n >= 0) ?
62306             (sp_digit)1 : (sp_digit)0));
62307         sp_1024_norm_16(t1);
62308         if (!sp_1024_iszero_16(t1)) {
62309             err = MP_VAL;
62310         }
62311     }
62312 
62313 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
62314     if (t1 != NULL)
62315         XFREE(t1, heap, DYNAMIC_TYPE_ECC);
62316 #endif
62317 
62318     return err;
62319 }
62320 
62321 /* Check that the x and y oridinates are a valid point on the curve.
62322  *
62323  * pX  X ordinate of EC point.
62324  * pY  Y ordinate of EC point.
62325  * returns MEMORY_E if dynamic memory allocation fails, MP_VAL if the point is
62326  * not on the curve and MP_OKAY otherwise.
62327  */
sp_ecc_is_point_1024(const mp_int * pX,const mp_int * pY)62328 int sp_ecc_is_point_1024(const mp_int* pX, const mp_int* pY)
62329 {
62330 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
62331     sp_point_1024* pub = NULL;
62332 #else
62333     sp_point_1024 pub[1];
62334 #endif
62335     const byte one[1] = { 1 };
62336     int err = MP_OKAY;
62337 
62338 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
62339     pub = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024), NULL,
62340                                        DYNAMIC_TYPE_ECC);
62341     if (pub == NULL)
62342         err = MEMORY_E;
62343 #endif
62344 
62345     if (err == MP_OKAY) {
62346         sp_1024_from_mp(pub->x, 16, pX);
62347         sp_1024_from_mp(pub->y, 16, pY);
62348         sp_1024_from_bin(pub->z, 16, one, (int)sizeof(one));
62349 
62350         err = sp_1024_ecc_is_point_16(pub, NULL);
62351     }
62352 
62353 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
62354     if (pub != NULL)
62355         XFREE(pub, NULL, DYNAMIC_TYPE_ECC);
62356 #endif
62357 
62358     return err;
62359 }
62360 
62361 /* Check that the private scalar generates the EC point (px, py), the point is
62362  * on the curve and the point has the correct order.
62363  *
62364  * pX     X ordinate of EC point.
62365  * pY     Y ordinate of EC point.
62366  * privm  Private scalar that generates EC point.
62367  * returns MEMORY_E if dynamic memory allocation fails, MP_VAL if the point is
62368  * not on the curve, ECC_INF_E if the point does not have the correct order,
62369  * ECC_PRIV_KEY_E when the private scalar doesn't generate the EC point and
62370  * MP_OKAY otherwise.
62371  */
sp_ecc_check_key_1024(const mp_int * pX,const mp_int * pY,const mp_int * privm,void * heap)62372 int sp_ecc_check_key_1024(const mp_int* pX, const mp_int* pY,
62373     const mp_int* privm, void* heap)
62374 {
62375 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
62376     sp_digit* priv = NULL;
62377     sp_point_1024* pub = NULL;
62378 #else
62379     sp_digit priv[16];
62380     sp_point_1024 pub[2];
62381 #endif
62382     sp_point_1024* p = NULL;
62383     const byte one[1] = { 1 };
62384     int err = MP_OKAY;
62385 #ifdef HAVE_INTEL_AVX2
62386     word32 cpuid_flags = cpuid_get_flags();
62387 #endif
62388 
62389 
62390     /* Quick check the lengs of public key ordinates and private key are in
62391      * range. Proper check later.
62392      */
62393     if (((mp_count_bits(pX) > 1024) ||
62394         (mp_count_bits(pY) > 1024) ||
62395         ((privm != NULL) && (mp_count_bits(privm) > 1024)))) {
62396         err = ECC_OUT_OF_RANGE_E;
62397     }
62398 
62399 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
62400     if (err == MP_OKAY) {
62401         pub = (sp_point_1024*)XMALLOC(sizeof(sp_point_1024) * 2, heap,
62402                                            DYNAMIC_TYPE_ECC);
62403         if (pub == NULL)
62404             err = MEMORY_E;
62405     }
62406     if (err == MP_OKAY && privm) {
62407         priv = (sp_digit*)XMALLOC(sizeof(sp_digit) * 16, heap,
62408                                   DYNAMIC_TYPE_ECC);
62409         if (priv == NULL)
62410             err = MEMORY_E;
62411     }
62412 #endif
62413 
62414     if (err == MP_OKAY) {
62415         p = pub + 1;
62416 
62417         sp_1024_from_mp(pub->x, 16, pX);
62418         sp_1024_from_mp(pub->y, 16, pY);
62419         sp_1024_from_bin(pub->z, 16, one, (int)sizeof(one));
62420         if (privm)
62421             sp_1024_from_mp(priv, 16, privm);
62422 
62423         /* Check point at infinitiy. */
62424         if ((sp_1024_iszero_16(pub->x) != 0) &&
62425             (sp_1024_iszero_16(pub->y) != 0)) {
62426             err = ECC_INF_E;
62427         }
62428     }
62429 
62430     /* Check range of X and Y */
62431     if ((err == MP_OKAY) &&
62432             ((sp_1024_cmp_16(pub->x, p1024_mod) >= 0) ||
62433              (sp_1024_cmp_16(pub->y, p1024_mod) >= 0))) {
62434         err = ECC_OUT_OF_RANGE_E;
62435     }
62436 
62437     if (err == MP_OKAY) {
62438         /* Check point is on curve */
62439         err = sp_1024_ecc_is_point_16(pub, heap);
62440     }
62441 
62442     if (err == MP_OKAY) {
62443         /* Point * order = infinity */
62444 #ifdef HAVE_INTEL_AVX2
62445         if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
62446             err = sp_1024_ecc_mulmod_avx2_16(p, pub, p1024_order, 1, 1, heap);
62447         else
62448 #endif
62449             err = sp_1024_ecc_mulmod_16(p, pub, p1024_order, 1, 1, heap);
62450     }
62451     /* Check result is infinity */
62452     if ((err == MP_OKAY) && ((sp_1024_iszero_16(p->x) == 0) ||
62453                              (sp_1024_iszero_16(p->y) == 0))) {
62454         err = ECC_INF_E;
62455     }
62456 
62457     if (privm) {
62458         if (err == MP_OKAY) {
62459             /* Base * private = point */
62460 #ifdef HAVE_INTEL_AVX2
62461             if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
62462                 err = sp_1024_ecc_mulmod_base_avx2_16(p, priv, 1, 1, heap);
62463             else
62464 #endif
62465                 err = sp_1024_ecc_mulmod_base_16(p, priv, 1, 1, heap);
62466         }
62467         /* Check result is public key */
62468         if ((err == MP_OKAY) &&
62469                 ((sp_1024_cmp_16(p->x, pub->x) != 0) ||
62470                  (sp_1024_cmp_16(p->y, pub->y) != 0))) {
62471             err = ECC_PRIV_KEY_E;
62472         }
62473     }
62474 
62475 #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC)
62476     if (pub != NULL)
62477         XFREE(pub, heap, DYNAMIC_TYPE_ECC);
62478     if (priv != NULL)
62479         XFREE(priv, heap, DYNAMIC_TYPE_ECC);
62480 #endif
62481 
62482     return err;
62483 }
62484 #endif
62485 #endif /* WOLFSSL_SP_1024 */
62486 #endif /* WOLFSSL_HAVE_SP_ECC */
62487 #endif /* WOLFSSL_SP_X86_64_ASM */
62488 #endif /* WOLFSSL_HAVE_SP_RSA | WOLFSSL_HAVE_SP_DH | WOLFSSL_HAVE_SP_ECC */
62489