Falcon source files (reference implementation)


fpr.c

    1 /*
    2  * Floating-point operations.
    3  *
    4  * This file implements the non-inline functions declared in
    5  * fpr.h, as well as the constants for FFT / iFFT.
    6  *
    7  * ==========================(LICENSE BEGIN)============================
    8  *
    9  * Copyright (c) 2017-2019  Falcon Project
   10  *
   11  * Permission is hereby granted, free of charge, to any person obtaining
   12  * a copy of this software and associated documentation files (the
   13  * "Software"), to deal in the Software without restriction, including
   14  * without limitation the rights to use, copy, modify, merge, publish,
   15  * distribute, sublicense, and/or sell copies of the Software, and to
   16  * permit persons to whom the Software is furnished to do so, subject to
   17  * the following conditions:
   18  *
   19  * The above copyright notice and this permission notice shall be
   20  * included in all copies or substantial portions of the Software.
   21  *
   22  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
   23  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   24  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
   25  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
   26  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
   27  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
   28  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   29  *
   30  * ===========================(LICENSE END)=============================
   31  *
   32  * @author   Thomas Pornin <thomas.pornin@nccgroup.com>
   33  */
   34 
   35 #include "inner.h"
   36 
   37 #if FALCON_FPEMU // yyyFPEMU+1
   38 
   39 /*
   40  * Normalize a provided unsigned integer to the 2^63..2^64-1 range by
   41  * left-shifting it if necessary. The exponent e is adjusted accordingly
   42  * (i.e. if the value was left-shifted by n bits, then n is subtracted
   43  * from e). If source m is 0, then it remains 0, but e is altered.
   44  * Both m and e must be simple variables (no expressions allowed).
   45  */
   46 #define FPR_NORM64(m, e)   do { \
   47                 uint32_t nt; \
   48  \
   49                 (e) -= 63; \
   50  \
   51                 nt = (uint32_t)((m) >> 32); \
   52                 nt = (nt | -nt) >> 31; \
   53                 (m) ^= ((m) ^ ((m) << 32)) & ((uint64_t)nt - 1); \
   54                 (e) += (int)(nt << 5); \
   55  \
   56                 nt = (uint32_t)((m) >> 48); \
   57                 nt = (nt | -nt) >> 31; \
   58                 (m) ^= ((m) ^ ((m) << 16)) & ((uint64_t)nt - 1); \
   59                 (e) += (int)(nt << 4); \
   60  \
   61                 nt = (uint32_t)((m) >> 56); \
   62                 nt = (nt | -nt) >> 31; \
   63                 (m) ^= ((m) ^ ((m) <<  8)) & ((uint64_t)nt - 1); \
   64                 (e) += (int)(nt << 3); \
   65  \
   66                 nt = (uint32_t)((m) >> 60); \
   67                 nt = (nt | -nt) >> 31; \
   68                 (m) ^= ((m) ^ ((m) <<  4)) & ((uint64_t)nt - 1); \
   69                 (e) += (int)(nt << 2); \
   70  \
   71                 nt = (uint32_t)((m) >> 62); \
   72                 nt = (nt | -nt) >> 31; \
   73                 (m) ^= ((m) ^ ((m) <<  2)) & ((uint64_t)nt - 1); \
   74                 (e) += (int)(nt << 1); \
   75  \
   76                 nt = (uint32_t)((m) >> 63); \
   77                 (m) ^= ((m) ^ ((m) <<  1)) & ((uint64_t)nt - 1); \
   78                 (e) += (int)(nt); \
   79         } while (0)
   80 
   81 #if FALCON_ASM_CORTEXM4 // yyyASM_CORTEXM4+1
   82 
   83 __attribute__((naked))
   84 fpr
   85 fpr_scaled(int64_t i __attribute__((unused)), int sc __attribute__((unused)))
   86 {
   87         __asm__ (
   88         "push   { r4, r5, r6, lr }\n\t"
   89         "\n\t"
   90         "@ Input i is in r0:r1, and sc in r2.\n\t"
   91         "@ Extract the sign bit, and compute the absolute value.\n\t"
   92         "@ -> sign bit in r3, with value 0 or -1\n\t"
   93         "asrs   r3, r1, #31\n\t"
   94         "eors   r0, r3\n\t"
   95         "eors   r1, r3\n\t"
   96         "subs   r0, r3\n\t"
   97         "sbcs   r1, r3\n\t"
   98         "\n\t"
   99         "@ Scale exponent to account for the encoding; if the source is\n\t"
  100         "@ zero or if the scaled exponent is negative, it is set to 32.\n\t"
  101         "addw   r2, r2, #1022\n\t"
  102         "orrs   r4, r0, r1\n\t"
  103         "bics   r4, r4, r2, asr #31\n\t"
  104         "rsbs   r5, r4, #0\n\t"
  105         "orrs   r4, r5\n\t"
  106         "ands   r2, r2, r4, asr #31\n\t"
  107         "adds   r2, #32\n\t"
  108         "\n\t"
  109         "@ Normalize value to a full 64-bit width, by shifting it left.\n\t"
  110         "@ The shift count is subtracted from the exponent (in r2).\n\t"
  111         "@ If the mantissa is 0, the exponent is set to 0.\n\t"
  112         "\n\t"
  113         "@ If top word is 0, replace with low word; otherwise, add 32 to\n\t"
  114         "@ the exponent.\n\t"
  115         "rsbs   r4, r1, #0\n\t"
  116         "orrs   r4, r1\n\t"
  117         "eors   r5, r0, r1\n\t"
  118         "bics   r5, r5, r4, asr #31\n\t"
  119         "eors   r1, r5\n\t"
  120         "ands   r0, r0, r4, asr #31\n\t"
  121         "lsrs   r4, r4, #31\n\t"
  122         "adds   r2, r2, r4, lsl #5\n\t"
  123         "\n\t"
  124         "@ Count leading zeros of r1 to finish the shift.\n\t"
  125         "clz    r4, r1\n\t"
  126         "subs   r2, r4\n\t"
  127         "rsbs   r5, r4, #32\n\t"
  128         "lsls   r1, r4\n\t"
  129         "lsrs   r5, r0, r5\n\t"
  130         "lsls   r0, r4\n\t"
  131         "orrs   r1, r5\n\t"
  132         "\n\t"
  133         "@ Clear the top bit; we know it's a 1 (unless the whole mantissa\n\t"
  134         "@ was zero, but then it's still OK to clear it)\n\t"
  135         "bfc    r1, #31, #1\n\t"
  136         "\n\t"
  137         "@ Now shift right the value by 11 bits; this puts the value in\n\t"
  138         "@ the 2^52..2^53-1 range. We also keep a copy of the pre-shift\n\t"
  139         "@ low bits in r5.\n\t"
  140         "movs   r5, r0\n\t"
  141         "lsrs   r0, #11\n\t"
  142         "orrs   r0, r0, r1, lsl #21\n\t"
  143         "lsrs   r1, #11\n\t"
  144         "\n\t"
  145         "@ Also plug the exponent at the right place. This must be done\n\t"
  146         "@ now so that, in case the rounding creates a carry, that carry\n\t"
  147         "@ adds to the exponent, which would be exactly what we want at\n\t"
  148         "@ that point.\n\t"
  149         "orrs   r1, r1, r2, lsl #20\n\t"
  150         "\n\t"
  151         "@ Rounding: we must add 1 to the mantissa in the following cases:\n\t"
  152         "@  - bits 11 to 9 of r5 are '011', '110' or '111'\n\t"
  153         "@  - bits 11 to 9 of r5 are '010' and one of the\n\t"
  154         "@    bits 0 to 8 is non-zero\n\t"
  155         "ubfx   r6, r5, #0, #9\n\t"
  156         "addw   r6, r6, #511\n\t"
  157         "orrs   r5, r6\n\t"
  158         "\n\t"
  159         "ubfx   r5, r5, #9, #3\n\t"
  160         "movs   r6, #0xC8\n\t"
  161         "lsrs   r6, r5\n\t"
  162         "ands   r6, #1\n\t"
  163         "adds   r0, r6\n\t"
  164         "adcs   r1, #0\n\t"
  165         "\n\t"
  166         "@ Put back the sign.\n\t"
  167         "orrs   r1, r1, r3, lsl #31\n\t"
  168         "\n\t"
  169         "pop    { r4, r5, r6, pc}\n\t"
  170         );
  171 }
  172 
  173 #else // yyyASM_CORTEXM4+0
  174 
  175 fpr
  176 fpr_scaled(int64_t i, int sc)
  177 {
  178         /*
  179          * To convert from int to float, we have to do the following:
  180          *  1. Get the absolute value of the input, and its sign
  181          *  2. Shift right or left the value as appropriate
  182          *  3. Pack the result
  183          *
  184          * We can assume that the source integer is not -2^63.
  185          */
  186         int s, e;
  187         uint32_t t;
  188         uint64_t m;
  189 
  190         /*
  191          * Extract sign bit.
  192          * We have: -i = 1 + ~i
  193          */
  194         s = (int)((uint64_t)i >> 63);
  195         i ^= -(int64_t)s;
  196         i += s;
  197 
  198         /*
  199          * For now we suppose that i != 0.
  200          * Otherwise, we set m to i and left-shift it as much as needed
  201          * to get a 1 in the top bit. We can do that in a logarithmic
  202          * number of conditional shifts.
  203          */
  204         m = (uint64_t)i;
  205         e = 9 + sc;
  206         FPR_NORM64(m, e);
  207 
  208         /*
  209          * Now m is in the 2^63..2^64-1 range. We must divide it by 512;
  210          * if one of the dropped bits is a 1, this should go into the
  211          * "sticky bit".
  212          */
  213         m |= ((uint32_t)m & 0x1FF) + 0x1FF;
  214         m >>= 9;
  215 
  216         /*
  217          * Corrective action: if i = 0 then all of the above was
  218          * incorrect, and we clamp e and m down to zero.
  219          */
  220         t = (uint32_t)((uint64_t)(i | -i) >> 63);
  221         m &= -(uint64_t)t;
  222         e &= -(int)t;
  223 
  224         /*
  225          * Assemble back everything. The FPR() function will handle cases
  226          * where e is too low.
  227          */
  228         return FPR(s, e, m);
  229 }
  230 
  231 #endif // yyyASM_CORTEXM4-
  232 
  233 #if FALCON_ASM_CORTEXM4 // yyyASM_CORTEXM4+1
  234 
  235 // yyyPQCLEAN+0
  236 #if 0
  237 /* Debug code -- To get a printout of registers from a specific point
  238    in ARM Cortex M4 assembly code, uncomment this code and add a
  239    "bl DEBUG" call where wished for. */
  240 
  241 void
  242 print_regs(uint32_t *rr, uint32_t flags)
  243 {
  244         int i;
  245         extern int printf(const char *fmt, ...);
  246 
  247         printf("\nRegs:\n");
  248         for (i = 0; i < 7; i ++) {
  249                 int j;
  250 
  251                 j = i + 7;
  252                 printf("  %2d = %08X    %2d = %08X\n", i, rr[i], j, rr[j]);
  253         }
  254         printf("  flags = %08X  ", flags);
  255         if ((flags >> 31) & 1) {
  256                 printf("N");
  257         }
  258         if ((flags >> 30) & 1) {
  259                 printf("Z");
  260         }
  261         if ((flags >> 29) & 1) {
  262                 printf("C");
  263         }
  264         if ((flags >> 28) & 1) {
  265                 printf("V");
  266         }
  267         if ((flags >> 27) & 1) {
  268                 printf("Q");
  269         }
  270         printf("\n");
  271 }
  272 
  273 __attribute__((naked))
  274 void
  275 DEBUG(void)
  276 {
  277         __asm__ (
  278         "push   { r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, lr }\n\t"
  279         "mov    r0, sp\n\t"
  280         "mrs    r1, apsr\n\t"
  281         "bl     print_regs\n\t"
  282         "pop    { r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, pc }\n\t"
  283         );
  284 }
  285 #endif
  286 // yyyPQCLEAN-
  287 
  288 __attribute__((naked))
  289 fpr
  290 fpr_add(fpr x __attribute__((unused)), fpr y __attribute__((unused)))
  291 {
  292         __asm__ (
  293         "push   { r4, r5, r6, r7, r8, r10, r11, lr }\n\t"
  294         "\n\t"
  295         "@ Make sure that the first operand (x) has the larger absolute\n\t"
  296         "@ value. This guarantees that the exponent of y is less than\n\t"
  297         "@ or equal to the exponent of x, and, if they are equal, then\n\t"
  298         "@ the mantissa of y will not be greater than the mantissa of x.\n\t"
  299         "@ However, if absolute values are equal and the sign of x is 1,\n\t"
  300         "@ then we want to also swap the values.\n\t"
  301         "ubfx   r4, r1, #0, #31  @ top word without sign bit\n\t"
  302         "ubfx   r5, r3, #0, #31  @ top word without sign bit\n\t"
  303         "subs   r7, r0, r2       @ difference in r7:r4\n\t"
  304         "sbcs   r4, r5\n\t"
  305         "orrs   r7, r4\n\t"
  306         "rsbs   r5, r7, #0\n\t"
  307         "orrs   r7, r5      @ bit 31 of r7 is 0 iff difference is zero\n\t"
  308         "bics   r6, r1, r7\n\t"
  309         "orrs   r6, r4      @ bit 31 of r6 is 1 iff the swap must be done\n\t"
  310         "\n\t"
  311         "@ Conditional swap\n\t"
  312         "eors   r4, r0, r2\n\t"
  313         "eors   r5, r1, r3\n\t"
  314         "ands   r4, r4, r6, asr #31\n\t"
  315         "ands   r5, r5, r6, asr #31\n\t"
  316         "eors   r0, r4\n\t"
  317         "eors   r1, r5\n\t"
  318         "eors   r2, r4\n\t"
  319         "eors   r3, r5\n\t"
  320         "\n\t"
  321         "@ Extract mantissa of x into r0:r1, exponent in r4, sign in r5\n\t"
  322         "ubfx   r4, r1, #20, #11   @ Exponent in r4 (without sign)\n\t"
  323         "addw   r5, r4, #2047 @ Get a carry to test r4 for zero\n\t"
  324         "lsrs   r5, #11       @ r5 is the mantissa implicit high bit\n\t"
  325         "bfc    r1, #20, #11  @ Clear exponent bits (not the sign)\n\t"
  326         "orrs   r1, r1, r5, lsl #20  @ Set mantissa high bit\n\t"
  327         "asrs   r5, r1, #31   @ Get sign bit (sign-extended)\n\t"
  328         "bfc    r1, #31, #1   @ Clear the sign bit\n\t"
  329         "\n\t"
  330         "@ Extract mantissa of y into r2:r3, exponent in r6, sign in r7\n\t"
  331         "ubfx   r6, r3, #20, #11   @ Exponent in r6 (without sign)\n\t"
  332         "addw   r7, r6, #2047 @ Get a carry to test r6 for zero\n\t"
  333         "lsrs   r7, #11       @ r7 is the mantissa implicit high bit\n\t"
  334         "bfc    r3, #20, #11  @ Clear exponent bits (not the sign)\n\t"
  335         "orrs   r3, r3, r7, lsl #20  @ Set mantissa high bit\n\t"
  336         "asrs   r7, r3, #31   @ Get sign bit (sign-extended)\n\t"
  337         "bfc    r3, #31, #1   @ Clear the sign bit\n\t"
  338         "\n\t"
  339         "@ Scale mantissas up by three bits.\n\t"
  340         "lsls   r1, #3\n\t"
  341         "orrs   r1, r1, r0, lsr #29\n\t"
  342         "lsls   r0, #3\n\t"
  343         "lsls   r3, #3\n\t"
  344         "orrs   r3, r3, r2, lsr #29\n\t"
  345         "lsls   r2, #3\n\t"
  346         "\n\t"
  347         "@ x: exponent=r4, sign=r5, mantissa=r0:r1 (scaled up 3 bits)\n\t"
  348         "@ y: exponent=r6, sign=r7, mantissa=r2:r3 (scaled up 3 bits)\n\t"
  349         "\n\t"
  350         "@ At that point, the exponent of x (in r4) is larger than that\n\t"
  351         "@ of y (in r6). The difference is the amount of shifting that\n\t"
  352         "@ should be done on y. If that amount is larger than 59 then\n\t"
  353         "@ we clamp y to 0. We won't need y's exponent beyond that point,\n\t"
  354         "@ so we store that shift count in r6.\n\t"
  355         "subs   r6, r4, r6\n\t"
  356         "subs   r8, r6, #60\n\t"
  357         "ands   r2, r2, r8, asr #31\n\t"
  358         "ands   r3, r3, r8, asr #31\n\t"
  359         "\n\t"
  360         "@ Shift right r2:r3 by r6 bits. The shift count is in the 0..59\n\t"
  361         "@ range. r11 will be non-zero if and only if some non-zero bits\n\t"
  362         "@ were dropped.\n\t"
  363         "subs   r8, r6, #32\n\t"
  364         "bics   r11, r2, r8, asr #31\n\t"
  365         "ands   r2, r2, r8, asr #31\n\t"
  366         "bics   r10, r3, r8, asr #31\n\t"
  367         "orrs   r2, r2, r10\n\t"
  368         "ands   r3, r3, r8, asr #31\n\t"
  369         "ands   r6, r6, #31\n\t"
  370         "rsbs   r8, r6, #32\n\t"
  371         "lsls   r10, r2, r8\n\t"
  372         "orrs   r11, r11, r10\n\t"
  373         "lsrs   r2, r2, r6\n\t"
  374         "lsls   r10, r3, r8\n\t"
  375         "orrs   r2, r2, r10\n\t"
  376         "lsrs   r3, r3, r6\n\t"
  377         "\n\t"
  378         "@ If r11 is non-zero then some non-zero bit was dropped and the\n\t"
  379         "@ low bit of r2 must be forced to 1 ('sticky bit').\n\t"
  380         "rsbs   r6, r11, #0\n\t"
  381         "orrs   r6, r6, r11\n\t"
  382         "orrs   r2, r2, r6, lsr #31\n\t"
  383         "\n\t"
  384         "@ x: exponent=r4, sign=r5, mantissa=r0:r1 (scaled up 3 bits)\n\t"
  385         "@ y: sign=r7, value=r2:r3 (scaled to same exponent as x)\n\t"
  386         "\n\t"
  387         "@ If x and y don't have the same sign, then we should negate r2:r3\n\t"
  388         "@ (i.e. subtract the mantissa instead of adding it). Signs of x\n\t"
  389         "@ and y are in r5 and r7, as full-width words. We won't need r7\n\t"
  390         "@ afterwards.\n\t"
  391         "eors   r7, r5    @ r7 = -1 if y must be negated, 0 otherwise\n\t"
  392         "eors   r2, r7\n\t"
  393         "eors   r3, r7\n\t"
  394         "subs   r2, r7\n\t"
  395         "sbcs   r3, r7\n\t"
  396         "\n\t"
  397         "@ r2:r3 has been shifted, we can add to r0:r1.\n\t"
  398         "adds   r0, r2\n\t"
  399         "adcs   r1, r3\n\t"
  400         "\n\t"
  401         "@ result: exponent=r4, sign=r5, mantissa=r0:r1 (scaled up 3 bits)\n\t"
  402         "\n\t"
  403         "@ Normalize the result with some left-shifting to full 64-bit\n\t"
  404         "@ width. Shift count goes to r2, and exponent (r4) is adjusted.\n\t"
  405         "clz    r2, r0\n\t"
  406         "clz    r3, r1\n\t"
  407         "sbfx   r6, r3, #5, #1\n\t"
  408         "ands   r2, r6\n\t"
  409         "adds   r2, r2, r3\n\t"
  410         "subs   r4, r4, r2\n\t"
  411         "\n\t"
  412         "@ Shift r0:r1 to the left by r2 bits.\n\t"
  413         "subs   r7, r2, #32\n\t"
  414         "lsls   r7, r0, r7\n\t"
  415         "lsls   r1, r1, r2\n\t"
  416         "rsbs   r6, r2, #32\n\t"
  417         "orrs   r1, r1, r7\n\t"
  418         "lsrs   r6, r0, r6\n\t"
  419         "orrs   r1, r1, r6\n\t"
  420         "lsls   r0, r0, r2\n\t"
  421         "\n\t"
  422         "@ The exponent of x was in r4. The left-shift operation has\n\t"
  423         "@ subtracted some value from it, 8 in case the result has the\n\t"
  424         "@ same exponent as x. However, the high bit of the mantissa will\n\t"
  425         "@ add 1 to the exponent, so we only add back 7 (the exponent is\n\t"
  426         "@ added in because rounding might have produced a carry, which\n\t"
  427         "@ should then spill into the exponent).\n\t"
  428         "adds   r4, #7\n\t"
  429         "\n\t"
  430         "@ If the mantissa new mantissa is non-zero, then its bit 63 is\n\t"
  431         "@ non-zero (thanks to the normalizing shift). Otherwise, that bit\n\t"
  432         "@ is zero, and we should then set the exponent to zero as well.\n\t"
  433         "ands   r4, r4, r1, asr #31\n\t"
  434         "\n\t"
  435         "@ Shrink back the value to a 52-bit mantissa. This requires\n\t"
  436         "@ right-shifting by 11 bits; we keep a copy of the pre-shift\n\t"
  437         "@ low word in r3.\n\t"
  438         "movs   r3, r0\n\t"
  439         "lsrs   r0, #11\n\t"
  440         "orrs   r0, r0, r1, lsl #21\n\t"
  441         "lsrs   r1, #11\n\t"
  442         "\n\t"
  443         "@ Apply rounding.\n\t"
  444         "ubfx   r6, r3, #0, #9\n\t"
  445         "addw   r6, r6, #511\n\t"
  446         "orrs   r3, r6\n\t"
  447         "ubfx   r3, r3, #9, #3\n\t"
  448         "movs   r6, #0xC8\n\t"
  449         "lsrs   r6, r3\n\t"
  450         "ands   r6, #1\n\t"
  451         "adds   r0, r6\n\t"
  452         "adcs   r1, #0\n\t"
  453         "\n\t"
  454         "@Plug in the exponent with an addition.\n\t"
  455         "adds   r1, r1, r4, lsl #20\n\t"
  456         "\n\t"
  457         "@ If the new exponent is negative or zero, then it underflowed\n\t"
  458         "@ and we must clear the whole mantissa and exponent.\n\t"
  459         "rsbs   r4, r4, #0\n\t"
  460         "ands   r0, r0, r4, asr #31\n\t"
  461         "ands   r1, r1, r4, asr #31\n\t"
  462         "\n\t"
  463         "@ Put back the sign. This is the sign of x: thanks to the\n\t"
  464         "@ conditional swap at the start, this is always correct.\n\t"
  465         "bfi    r1, r5, #31, #1\n\t"
  466         "\n\t"
  467         "pop    { r4, r5, r6, r7, r8, r10, r11, pc }\n\t"
  468         );
  469 }
  470 
  471 #else // yyyASM_CORTEXM4+0
  472 
  473 fpr
  474 fpr_add(fpr x, fpr y)
  475 {
  476         uint64_t m, xu, yu, za;
  477         uint32_t cs;
  478         int ex, ey, sx, sy, cc;
  479 
  480         /*
  481          * Make sure that the first operand (x) has the larger absolute
  482          * value. This guarantees that the exponent of y is less than
  483          * or equal to the exponent of x, and, if they are equal, then
  484          * the mantissa of y will not be greater than the mantissa of x.
  485          *
  486          * After this swap, the result will have the sign x, except in
  487          * the following edge case: abs(x) = abs(y), and x and y have
  488          * opposite sign bits; in that case, the result shall be +0
  489          * even if the sign bit of x is 1. To handle this case properly,
  490          * we do the swap is abs(x) = abs(y) AND the sign of x is 1.
  491          */
  492         m = ((uint64_t)1 << 63) - 1;
  493         za = (x & m) - (y & m);
  494         cs = (uint32_t)(za >> 63)
  495                 | ((1U - (uint32_t)(-za >> 63)) & (uint32_t)(x >> 63));
  496         m = (x ^ y) & -(uint64_t)cs;
  497         x ^= m;
  498         y ^= m;
  499 
  500         /*
  501          * Extract sign bits, exponents and mantissas. The mantissas are
  502          * scaled up to 2^55..2^56-1, and the exponent is unbiased. If
  503          * an operand is zero, its mantissa is set to 0 at this step, and
  504          * its exponent will be -1078.
  505          */
  506         ex = (int)(x >> 52);
  507         sx = ex >> 11;
  508         ex &= 0x7FF;
  509         m = (uint64_t)(uint32_t)((ex + 0x7FF) >> 11) << 52;
  510         xu = ((x & (((uint64_t)1 << 52) - 1)) | m) << 3;
  511         ex -= 1078;
  512         ey = (int)(y >> 52);
  513         sy = ey >> 11;
  514         ey &= 0x7FF;
  515         m = (uint64_t)(uint32_t)((ey + 0x7FF) >> 11) << 52;
  516         yu = ((y & (((uint64_t)1 << 52) - 1)) | m) << 3;
  517         ey -= 1078;
  518 
  519         /*
  520          * x has the larger exponent; hence, we only need to right-shift y.
  521          * If the shift count is larger than 59 bits then we clamp the
  522          * value to zero.
  523          */
  524         cc = ex - ey;
  525         yu &= -(uint64_t)((uint32_t)(cc - 60) >> 31);
  526         cc &= 63;
  527 
  528         /*
  529          * The lowest bit of yu is "sticky".
  530          */
  531         m = fpr_ulsh(1, cc) - 1;
  532         yu |= (yu & m) + m;
  533         yu = fpr_ursh(yu, cc);
  534 
  535         /*
  536          * If the operands have the same sign, then we add the mantissas;
  537          * otherwise, we subtract the mantissas.
  538          */
  539         xu += yu - ((yu << 1) & -(uint64_t)(sx ^ sy));
  540 
  541         /*
  542          * The result may be smaller, or slightly larger. We normalize
  543          * it to the 2^63..2^64-1 range (if xu is zero, then it stays
  544          * at zero).
  545          */
  546         FPR_NORM64(xu, ex);
  547 
  548         /*
  549          * Scale down the value to 2^54..s^55-1, handling the last bit
  550          * as sticky.
  551          */
  552         xu |= ((uint32_t)xu & 0x1FF) + 0x1FF;
  553         xu >>= 9;
  554         ex += 9;
  555 
  556         /*
  557          * In general, the result has the sign of x. However, if the
  558          * result is exactly zero, then the following situations may
  559          * be encountered:
  560          *   x > 0, y = -x   -> result should be +0
  561          *   x < 0, y = -x   -> result should be +0
  562          *   x = +0, y = +0  -> result should be +0
  563          *   x = -0, y = +0  -> result should be +0
  564          *   x = +0, y = -0  -> result should be +0
  565          *   x = -0, y = -0  -> result should be -0
  566          *
  567          * But at the conditional swap step at the start of the
  568          * function, we ensured that if abs(x) = abs(y) and the
  569          * sign of x was 1, then x and y were swapped. Thus, the
  570          * two following cases cannot actually happen:
  571          *   x < 0, y = -x
  572          *   x = -0, y = +0
  573          * In all other cases, the sign bit of x is conserved, which
  574          * is what the FPR() function does. The FPR() function also
  575          * properly clamps values to zero when the exponent is too
  576          * low, but does not alter the sign in that case.
  577          */
  578         return FPR(sx, ex, xu);
  579 }
  580 
  581 #endif // yyyASM_CORTEXM4-
  582 
  583 #if FALCON_ASM_CORTEXM4 // yyyASM_CORTEXM4+1
  584 
  585 __attribute__((naked))
  586 fpr
  587 fpr_mul(fpr x __attribute__((unused)), fpr y __attribute__((unused)))
  588 {
  589         __asm__ (
  590         "push   { r4, r5, r6, r7, r8, r10, r11, lr }\n\t"
  591         "\n\t"
  592         "@ Extract mantissas: x.m = r4:r5, y.m = r6:r7\n\t"
  593         "@ r4 and r6 contain only 25 bits each.\n\t"
  594         "bics   r4, r0, #0xFE000000\n\t"
  595         "lsls   r5, r1, #7\n\t"
  596         "orrs   r5, r5, r0, lsr #25\n\t"
  597         "orrs   r5, r5, #0x08000000\n\t"
  598         "bics   r5, r5, #0xF0000000\n\t"
  599         "bics   r6, r2, #0xFE000000\n\t"
  600         "lsls   r7, r3, #7\n\t"
  601         "orrs   r7, r7, r2, lsr #25\n\t"
  602         "orrs   r7, r7, #0x08000000\n\t"
  603         "bics   r7, r7, #0xF0000000\n\t"
  604         "\n\t"
  605         "@ Perform product. Values are in the 2^52..2^53-1 range, so\n\t"
  606         "@ the product is at most 106-bit long. Of the low 50 bits,\n\t"
  607         "@ we only want to know if they are all zeros or not. Here,\n\t"
  608         "@ we get the top 56 bits in r10:r11, and r8 will be non-zero\n\t"
  609         "@ if and only if at least one of the low 50 bits is non-zero.\n\t"
  610         "umull  r8, r10, r4, r6      @ x0*y0\n\t"
  611         "lsls   r10, #7\n\t"
  612         "orrs   r10, r10, r8, lsr #25\n\t"
  613         "eors   r11, r11\n\t"
  614         "umlal  r10, r11, r4, r7     @ x0*y1\n\t"
  615         "umlal  r10, r11, r5, r6     @ x1*y0\n\t"
  616         "orrs   r8, r8, r10, lsl #7\n\t"
  617         "lsrs   r10, #25\n\t"
  618         "orrs   r10, r10, r11, lsl #7\n\t"
  619         "eors   r11, r11\n\t"
  620         "umlal  r10, r11, r5, r7     @ x1*y1\n\t"
  621         "\n\t"
  622         "@ Now r0, r2, r4, r5, r6 and r7 are free.\n\t"
  623         "@ If any of the low 50 bits was non-zero, then we force the\n\t"
  624         "@ low bit of r10 to 1.\n\t"
  625         "rsbs   r4, r8, #0\n\t"
  626         "orrs   r8, r8, r4\n\t"
  627         "orrs   r10, r10, r8, lsr #31\n\t"
  628         "\n\t"
  629         "@ r8 is free.\n\t"
  630         "@ r10:r11 contains the product in the 2^54..2^56-1 range. We\n\t"
  631         "@ normalize it to 2^54..2^55-1 (into r6:r7) with a conditional\n\t"
  632         "@ shift (low bit is sticky). r5 contains -1 if the shift was done,\n\t"
  633         "@ 0 otherwise.\n\t"
  634         "ands   r6, r10, #1\n\t"
  635         "lsrs   r5, r11, #23\n\t"
  636         "rsbs   r5, r5, #0\n\t"
  637         "orrs   r6, r6, r10, lsr #1\n\t"
  638         "orrs   r6, r6, r11, lsl #31\n\t"
  639         "lsrs   r7, r11, #1\n\t"
  640         "eors   r10, r10, r6\n\t"
  641         "eors   r11, r11, r7\n\t"
  642         "bics   r10, r10, r5\n\t"
  643         "bics   r11, r11, r5\n\t"
  644         "eors   r6, r6, r10\n\t"
  645         "eors   r7, r7, r11\n\t"
  646         "\n\t"
  647         "@ Compute aggregate exponent: ex + ey - 1023 + w\n\t"
  648         "@ (where w = 1 if the conditional shift was done, 0 otherwise)\n\t"
  649         "@ But we subtract 1 because the injection of the mantissa high\n\t"
  650         "@ bit will increment the exponent by 1.\n\t"
  651         "lsls   r0, r1, #1\n\t"
  652         "lsls   r2, r3, #1\n\t"
  653         "lsrs   r0, #21\n\t"
  654         "addw   r4, r0, #0x7FF   @ save ex + 2047 in r4\n\t"
  655         "lsrs   r2, #21\n\t"
  656         "addw   r8, r2, #0x7FF   @ save ey + 2047 in r8\n\t"
  657         "adds   r2, r0\n\t"
  658         "subw   r2, r2, #1024\n\t"
  659         "subs   r2, r5\n\t"
  660         "\n\t"
  661         "@ r5 is free.\n\t"
  662         "@ Also, if either of the source exponents is 0, or the result\n\t"
  663         "@ exponent is 0 or negative, then the result is zero and the\n\t"
  664         "@ mantissa and the exponent shall be clamped to zero. Since\n\t"
  665         "@ r2 contains the result exponent minus 1, we test on r2\n\t"
  666         "@ being strictly negative.\n\t"
  667         "ands   r4, r8    @ if bit 11 = 0 then one of the exponents was 0\n\t"
  668         "mvns   r5, r2\n\t"
  669         "ands   r5, r5, r4, lsl #20\n\t"
  670         "ands   r2, r2, r5, asr #31\n\t"
  671         "ands   r6, r6, r5, asr #31\n\t"
  672         "ands   r7, r7, r5, asr #31\n\t"
  673         "\n\t"
  674         "@ Sign is the XOR of the sign of the operands. This is true in\n\t"
  675         "@ all cases, including very small results (exponent underflow)\n\t"
  676         "@ and zeros.\n\t"
  677         "eors   r1, r3\n\t"
  678         "bfc    r1, #0, #31\n\t"
  679         "\n\t"
  680         "@ Plug in the exponent.\n\t"
  681         "bfi    r1, r2, #20, #11\n\t"
  682         "\n\t"
  683         "@ r2 and r3 are free.\n\t"
  684         "@ Shift back to the normal 53-bit mantissa, with rounding.\n\t"
  685         "@ Mantissa goes into r0:r1. For r1, we must use an addition\n\t"
  686         "@ because the rounding may have triggered a carry, that should\n\t"
  687         "@ be added to the exponent.\n\t"
  688         "movs   r4, r6\n\t"
  689         "lsrs   r0, r6, #2\n\t"
  690         "orrs   r0, r0, r7, lsl #30\n\t"
  691         "adds   r1, r1, r7, lsr #2\n\t"
  692         "ands   r4, #0x7\n\t"
  693         "movs   r3, #0xC8\n\t"
  694         "lsrs   r3, r4\n\t"
  695         "ands   r3, #1\n\t"
  696         "adds   r0, r3\n\t"
  697         "adcs   r1, #0\n\t"
  698         "\n\t"
  699         "pop    { r4, r5, r6, r7, r8, r10, r11, pc }\n\t"
  700         );
  701 }
  702 
  703 #else // yyyASM_CORTEXM4+0
  704 
  705 fpr
  706 fpr_mul(fpr x, fpr y)
  707 {
  708         uint64_t xu, yu, w, zu, zv;
  709         uint32_t x0, x1, y0, y1, z0, z1, z2;
  710         int ex, ey, d, e, s;
  711 
  712         /*
  713          * Extract absolute values as scaled unsigned integers. We
  714          * don't extract exponents yet.
  715          */
  716         xu = (x & (((uint64_t)1 << 52) - 1)) | ((uint64_t)1 << 52);
  717         yu = (y & (((uint64_t)1 << 52) - 1)) | ((uint64_t)1 << 52);
  718 
  719         /*
  720          * We have two 53-bit integers to multiply; we need to split
  721          * each into a lower half and a upper half. Moreover, we
  722          * prefer to have lower halves to be of 25 bits each, for
  723          * reasons explained later on.
  724          */
  725         x0 = (uint32_t)xu & 0x01FFFFFF;
  726         x1 = (uint32_t)(xu >> 25);
  727         y0 = (uint32_t)yu & 0x01FFFFFF;
  728         y1 = (uint32_t)(yu >> 25);
  729         w = (uint64_t)x0 * (uint64_t)y0;
  730         z0 = (uint32_t)w & 0x01FFFFFF;
  731         z1 = (uint32_t)(w >> 25);
  732         w = (uint64_t)x0 * (uint64_t)y1;
  733         z1 += (uint32_t)w & 0x01FFFFFF;
  734         z2 = (uint32_t)(w >> 25);
  735         w = (uint64_t)x1 * (uint64_t)y0;
  736         z1 += (uint32_t)w & 0x01FFFFFF;
  737         z2 += (uint32_t)(w >> 25);
  738         zu = (uint64_t)x1 * (uint64_t)y1;
  739         z2 += (z1 >> 25);
  740         z1 &= 0x01FFFFFF;
  741         zu += z2;
  742 
  743         /*
  744          * Since xu and yu are both in the 2^52..2^53-1 range, the
  745          * product is in the 2^104..2^106-1 range. We first reassemble
  746          * it and round it into the 2^54..2^56-1 range; the bottom bit
  747          * is made "sticky". Since the low limbs z0 and z1 are 25 bits
  748          * each, we just take the upper part (zu), and consider z0 and
  749          * z1 only for purposes of stickiness.
  750          * (This is the reason why we chose 25-bit limbs above.)
  751          */
  752         zu |= ((z0 | z1) + 0x01FFFFFF) >> 25;
  753 
  754         /*
  755          * We normalize zu to the 2^54..s^55-1 range: it could be one
  756          * bit too large at this point. This is done with a conditional
  757          * right-shift that takes into account the sticky bit.
  758          */
  759         zv = (zu >> 1) | (zu & 1);
  760         w = zu >> 55;
  761         zu ^= (zu ^ zv) & -w;
  762 
  763         /*
  764          * Get the aggregate scaling factor:
  765          *
  766          *   - Each exponent is biased by 1023.
  767          *
  768          *   - Integral mantissas are scaled by 2^52, hence an
  769          *     extra 52 bias for each exponent.
  770          *
  771          *   - However, we right-shifted z by 50 bits, and then
  772          *     by 0 or 1 extra bit (depending on the value of w).
  773          *
  774          * In total, we must add the exponents, then subtract
  775          * 2 * (1023 + 52), then add 50 + w.
  776          */
  777         ex = (int)((x >> 52) & 0x7FF);
  778         ey = (int)((y >> 52) & 0x7FF);
  779         e = ex + ey - 2100 + (int)w;
  780 
  781         /*
  782          * Sign bit is the XOR of the operand sign bits.
  783          */
  784         s = (int)((x ^ y) >> 63);
  785 
  786         /*
  787          * Corrective actions for zeros: if either of the operands is
  788          * zero, then the computations above were wrong. Test for zero
  789          * is whether ex or ey is zero. We just have to set the mantissa
  790          * (zu) to zero, the FPR() function will normalize e.
  791          */
  792         d = ((ex + 0x7FF) & (ey + 0x7FF)) >> 11;
  793         zu &= -(uint64_t)d;
  794 
  795         /*
  796          * FPR() packs the result and applies proper rounding.
  797          */
  798         return FPR(s, e, zu);
  799 }
  800 
  801 #endif // yyyASM_CORTEXM4-
  802 
  803 #if FALCON_ASM_CORTEXM4 // yyyASM_CORTEXM4+1
  804 
  805 __attribute__((naked))
  806 fpr
  807 fpr_div(fpr x __attribute__((unused)), fpr y __attribute__((unused)))
  808 {
  809         __asm__ (
  810         "push   { r4, r5, r6, r7, r8, r10, r11, lr }\n\t"
  811 
  812         "@ Extract mantissas of x and y, in r0:r4 and r2:r5, respectively.\n\t"
  813         "@ We don't touch r1 and r3 as they contain the exponents and\n\t"
  814         "@ signs, which we'll need later on.\n\t"
  815         "ubfx   r4, r1, #0, #20\n\t"
  816         "ubfx   r5, r3, #0, #20\n\t"
  817         "orrs   r4, r4, #0x00100000\n\t"
  818         "orrs   r5, r5, #0x00100000\n\t"
  819         "\n\t"
  820         "@ Perform bit-by-bit division. We want a 56-bit result in r8:r10\n\t"
  821         "@ (low bit is 0). Bits come from the carry flag and are\n\t"
  822         "@ injected with rrx, i.e. in position 31; we thus get bits in\n\t"
  823         "@ the reverse order. Bits accumulate in r8; after the first 24\n\t"
  824         "@ bits, we move the quotient bits to r10.\n\t"
  825         "eors   r8, r8\n\t"
  826         "\n\t"
  827 
  828 #define DIVSTEP \
  829         "subs   r6, r0, r2\n\t" \
  830         "sbcs   r7, r4, r5\n\t" \
  831         "rrx    r8, r8\n\t" \
  832         "ands   r6, r2, r8, asr #31\n\t" \
  833         "ands   r7, r5, r8, asr #31\n\t" \
  834         "subs   r0, r6\n\t" \
  835         "sbcs   r4, r7\n\t" \
  836         "adds   r0, r0, r0\n\t" \
  837         "adcs   r4, r4, r4\n\t"
  838 
  839 #define DIVSTEP4   DIVSTEP DIVSTEP DIVSTEP DIVSTEP
  840 #define DIVSTEP8   DIVSTEP4 DIVSTEP4
  841 
  842         DIVSTEP8
  843         DIVSTEP8
  844         DIVSTEP8
  845 
  846         "\n\t"
  847         "@ We have the first 24 bits of the quotient, move them to r10.\n\t"
  848         "rbit   r10, r8\n\t"
  849         "\n\t"
  850 
  851         DIVSTEP8
  852         DIVSTEP8
  853         DIVSTEP8
  854         DIVSTEP4 DIVSTEP DIVSTEP DIVSTEP
  855 
  856 #undef DIVSTEP
  857 #undef DIVSTEP4
  858 #undef DIVSTEP8
  859 
  860         "\n\t"
  861         "@ Lowest bit will be set if remainder is non-zero at this point\n\t"
  862         "@ (this is the 'sticky' bit).\n\t"
  863         "subs   r0, #1\n\t"
  864         "sbcs   r4, #0\n\t"
  865         "rrx    r8, r8\n\t"
  866         "\n\t"
  867         "@ We now have the next (low) 32 bits of the quotient.\n\t"
  868         "rbit   r8, r8\n\t"
  869         "\n\t"
  870         "@ Since both operands had their top bit set, we know that the\n\t"
  871         "@ result at this point is in 2^54..2^56-1. We scale it down\n\t"
  872         "@ to 2^54..2^55-1 with a conditional shift. We also write the\n\t"
  873         "@ result in r4:r5. If the shift is done, r6 will contain -1.\n\t"
  874         "ands   r4, r8, #1\n\t"
  875         "lsrs   r6, r10, #23\n\t"
  876         "rsbs   r6, r6, #0\n\t"
  877         "orrs   r4, r4, r8, lsr #1\n\t"
  878         "orrs   r4, r4, r10, lsl #31\n\t"
  879         "lsrs   r5, r10, #1\n\t"
  880         "eors   r8, r8, r4\n\t"
  881         "eors   r10, r10, r5\n\t"
  882         "bics   r8, r8, r6\n\t"
  883         "bics   r10, r10, r6\n\t"
  884         "eors   r4, r4, r8\n\t"
  885         "eors   r5, r5, r10\n\t"
  886         "\n\t"
  887         "@ Compute aggregate exponent: ex - ey + 1022 + w\n\t"
  888         "@ (where w = 1 if the conditional shift was done, 0 otherwise)\n\t"
  889         "@ But we subtract 1 because the injection of the mantissa high\n\t"
  890         "@ bit will increment the exponent by 1.\n\t"
  891         "lsls   r0, r1, #1\n\t"
  892         "lsls   r2, r3, #1\n\t"
  893         "lsrs   r0, r0, #21\n\t"
  894         "addw   r7, r0, #0x7FF  @ save ex + 2047 in r7\n\t"
  895         "subs   r0, r0, r2, lsr #21\n\t"
  896         "addw   r0, r0, #1021\n\t"
  897         "subs   r0, r6\n\t"
  898         "\n\t"
  899         "@ If the x operand was zero, then the computation was wrong and\n\t"
  900         "@ the result is zero. Also, if the result exponent is zero or\n\t"
  901         "@ negative, then the mantissa shall be clamped to zero. Since r0\n\t"
  902         "@ contains the result exponent minus 1, we test on r0 being\n\t"
  903         "@ strictly negative.\n\t"
  904         "mvns   r2, r0\n\t"
  905         "ands   r2, r2, r7, lsl #20\n\t"
  906         "ands   r0, r0, r2, asr #31\n\t"
  907         "ands   r4, r4, r2, asr #31\n\t"
  908         "ands   r5, r5, r2, asr #31\n\t"
  909         "\n\t"
  910         "@ Sign is the XOR of the sign of the operands. This is true in\n\t"
  911         "@ all cases, including very small results (exponent underflow)\n\t"
  912         "@ and zeros.\n\t"
  913         "eors   r1, r3\n\t"
  914         "bfc    r1, #0, #31\n\t"
  915         "\n\t"
  916         "@ Plug in the exponent.\n\t"
  917         "bfi    r1, r0, #20, #11\n\t"
  918         "\n\t"
  919         "@ Shift back to the normal 53-bit mantissa, with rounding.\n\t"
  920         "@ Mantissa goes into r0:r1. For r1, we must use an addition\n\t"
  921         "@ because the rounding may have triggered a carry, that should\n\t"
  922         "@ be added to the exponent.\n\t"
  923         "movs   r6, r4\n\t"
  924         "lsrs   r0, r4, #2\n\t"
  925         "orrs   r0, r0, r5, lsl #30\n\t"
  926         "adds   r1, r1, r5, lsr #2\n\t"
  927         "ands   r6, #0x7\n\t"
  928         "movs   r3, #0xC8\n\t"
  929         "lsrs   r3, r6\n\t"
  930         "ands   r3, #1\n\t"
  931         "adds   r0, r3\n\t"
  932         "adcs   r1, #0\n\t"
  933         "\n\t"
  934         "pop    { r4, r5, r6, r7, r8, r10, r11, pc }\n\t"
  935         );
  936 }
  937 
  938 #else // yyyASM_CORTEXM4+0
  939 
  940 fpr
  941 fpr_div(fpr x, fpr y)
  942 {
  943         uint64_t xu, yu, q, q2, w;
  944         int i, ex, ey, e, d, s;
  945 
  946         /*
  947          * Extract mantissas of x and y (unsigned).
  948          */
  949         xu = (x & (((uint64_t)1 << 52) - 1)) | ((uint64_t)1 << 52);
  950         yu = (y & (((uint64_t)1 << 52) - 1)) | ((uint64_t)1 << 52);
  951 
  952         /*
  953          * Perform bit-by-bit division of xu by yu. We run it for 55 bits.
  954          */
  955         q = 0;
  956         for (i = 0; i < 55; i ++) {
  957                 /*
  958                  * If yu is less than or equal xu, then subtract it and
  959                  * push a 1 in the quotient; otherwise, leave xu unchanged
  960                  * and push a 0.
  961                  */
  962                 uint64_t b;
  963 
  964                 b = ((xu - yu) >> 63) - 1;
  965                 xu -= b & yu;
  966                 q |= b & 1;
  967                 xu <<= 1;
  968                 q <<= 1;
  969         }
  970 
  971         /*
  972          * We got 55 bits in the quotient, followed by an extra zero. We
  973          * want that 56th bit to be "sticky": it should be a 1 if and
  974          * only if the remainder (xu) is non-zero.
  975          */
  976         q |= (xu | -xu) >> 63;
  977 
  978         /*
  979          * Quotient is at most 2^56-1. Its top bit may be zero, but in
  980          * that case the next-to-top bit will be a one, since the
  981          * initial xu and yu were both in the 2^52..2^53-1 range.
  982          * We perform a conditional shift to normalize q to the
  983          * 2^54..2^55-1 range (with the bottom bit being sticky).
  984          */
  985         q2 = (q >> 1) | (q & 1);
  986         w = q >> 55;
  987         q ^= (q ^ q2) & -w;
  988 
  989         /*
  990          * Extract exponents to compute the scaling factor:
  991          *
  992          *   - Each exponent is biased and we scaled them up by
  993          *     52 bits; but these biases will cancel out.
  994          *
  995          *   - The division loop produced a 55-bit shifted result,
  996          *     so we must scale it down by 55 bits.
  997          *
  998          *   - If w = 1, we right-shifted the integer by 1 bit,
  999          *     hence we must add 1 to the scaling.
 1000          */
 1001         ex = (int)((x >> 52) & 0x7FF);
 1002         ey = (int)((y >> 52) & 0x7FF);
 1003         e = ex - ey - 55 + (int)w;
 1004 
 1005         /*
 1006          * Sign is the XOR of the signs of the operands.
 1007          */
 1008         s = (int)((x ^ y) >> 63);
 1009 
 1010         /*
 1011          * Corrective actions for zeros: if x = 0, then the computation
 1012          * is wrong, and we must clamp e and q to 0. We do not care
 1013          * about the case y = 0 (as per assumptions in this module,
 1014          * the caller does not perform divisions by zero).
 1015          */
 1016         d = (ex + 0x7FF) >> 11;
 1017         s &= d;
 1018         e &= -d;
 1019         q &= -(uint64_t)d;
 1020 
 1021         /*
 1022          * FPR() packs the result and applies proper rounding.
 1023          */
 1024         return FPR(s, e, q);
 1025 }
 1026 
 1027 #endif // yyyASM_CORTEXM4-
 1028 
 1029 #if FALCON_ASM_CORTEXM4 // yyyASM_CORTEXM4+1
 1030 
 1031 __attribute__((naked))
 1032 fpr
 1033 fpr_sqrt(fpr x __attribute__((unused)))
 1034 {
 1035         __asm__ (
 1036         "push   { r4, r5, r6, r7, r8, r10, r11, lr }\n\t"
 1037         "\n\t"
 1038         "@ Extract mantissa (r0:r1) and exponent (r2). We assume that the\n\t"
 1039         "@ sign is positive. If the source is zero, then the mantissa is\n\t"
 1040         "@ set to 0.\n\t"
 1041         "lsrs   r2, r1, #20\n\t"
 1042         "bfc    r1, #20, #12\n\t"
 1043         "addw   r3, r2, #0x7FF\n\t"
 1044         "subw   r2, r2, #1023\n\t"
 1045         "lsrs   r3, r3, #11\n\t"
 1046         "orrs   r1, r1, r3, lsl #20\n\t"
 1047         "\n\t"
 1048         "@ If the exponent is odd, then multiply mantissa by 2 and subtract\n\t"
 1049         "@ 1 from the exponent.\n\t"
 1050         "ands   r3, r2, #1\n\t"
 1051         "subs   r2, r2, r3\n\t"
 1052         "rsbs   r3, r3, #0\n\t"
 1053         "ands   r4, r1, r3\n\t"
 1054         "ands   r3, r0\n\t"
 1055         "adds   r0, r3\n\t"
 1056         "adcs   r1, r4\n\t"
 1057         "\n\t"
 1058         "@ Left-shift the mantissa by 9 bits to put it in the\n\t"
 1059         "@ 2^61..2^63-1 range (unless it is exactly 0).\n\t"
 1060         "lsls   r1, r1, #9\n\t"
 1061         "orrs   r1, r1, r0, lsr #23\n\t"
 1062         "lsls   r0, r0, #9\n\t"
 1063         "\n\t"
 1064         "@ Compute the square root bit-by-bit.\n\t"
 1065         "@ There are 54 iterations; first 30 can work on top word only.\n\t"
 1066         "@   q = r3 (bit-reversed)\n\t"
 1067         "@   s = r5\n\t"
 1068         "eors   r3, r3\n\t"
 1069         "eors   r5, r5\n\t"
 1070 
 1071 #define SQRT_STEP_HI(bit) \
 1072         "orrs   r6, r5, #(1 << (" #bit "))\n\t" \
 1073         "subs   r7, r1, r6\n\t" \
 1074         "rrx    r3, r3\n\t" \
 1075         "ands   r6, r6, r3, asr #31\n\t" \
 1076         "subs   r1, r1, r6\n\t" \
 1077         "lsrs   r6, r3, #31\n\t" \
 1078         "orrs   r5, r5, r6, lsl #((" #bit ") + 1)\n\t" \
 1079         "adds   r0, r0\n\t" \
 1080         "adcs   r1, r1\n\t"
 1081 
 1082 #define SQRT_STEP_HIx5(b)  \
 1083                 SQRT_STEP_HI((b)+4) \
 1084                 SQRT_STEP_HI((b)+3) \
 1085                 SQRT_STEP_HI((b)+2) \
 1086                 SQRT_STEP_HI((b)+1) \
 1087                 SQRT_STEP_HI(b)
 1088 
 1089         SQRT_STEP_HIx5(25)
 1090         SQRT_STEP_HIx5(20)
 1091         SQRT_STEP_HIx5(15)
 1092         SQRT_STEP_HIx5(10)
 1093         SQRT_STEP_HIx5(5)
 1094         SQRT_STEP_HIx5(0)
 1095 
 1096 #undef SQRT_STEP_HI
 1097 #undef SQRT_STEP_HIx5
 1098 
 1099         "@ Top 30 bits of the result must be reversed: they were\n\t"
 1100         "@ accumulated with rrx (hence from the top bit).\n\t"
 1101         "rbit   r3, r3\n\t"
 1102         "\n\t"
 1103         "@ For the next 24 iterations, we must use two-word operations.\n\t"
 1104         "@   bits of q now accumulate in r4\n\t"
 1105         "@   s is in r6:r5\n\t"
 1106         "eors   r4, r4\n\t"
 1107         "eors   r6, r6\n\t"
 1108         "\n\t"
 1109         "@ First iteration is special because the potential bit goes into\n\t"
 1110         "@ r5, not r6.\n\t"
 1111         "orrs   r7, r6, #(1 << 31)\n\t"
 1112         "subs   r8, r0, r7\n\t"
 1113         "sbcs   r10, r1, r5\n\t"
 1114         "rrx    r4, r4\n\t"
 1115         "ands   r7, r7, r4, asr #31\n\t"
 1116         "ands   r8, r5, r4, asr #31\n\t"
 1117         "subs   r0, r0, r7\n\t"
 1118         "sbcs   r1, r1, r8\n\t"
 1119         "lsrs   r7, r4, #31\n\t"
 1120         "orrs   r5, r5, r4, lsr #31\n\t"
 1121         "adds   r0, r0\n\t"
 1122         "adcs   r1, r1\n\t"
 1123 
 1124 #define SQRT_STEP_LO(bit) \
 1125         "orrs   r7, r6, #(1 << (" #bit "))\n\t" \
 1126         "subs   r8, r0, r7\n\t" \
 1127         "sbcs   r10, r1, r5\n\t" \
 1128         "rrx    r4, r4\n\t" \
 1129         "ands   r7, r7, r4, asr #31\n\t" \
 1130         "ands   r8, r5, r4, asr #31\n\t" \
 1131         "subs   r0, r0, r7\n\t" \
 1132         "sbcs   r1, r1, r8\n\t" \
 1133         "lsrs   r7, r4, #31\n\t" \
 1134         "orrs   r6, r6, r7, lsl #((" #bit ") + 1)\n\t" \
 1135         "adds   r0, r0\n\t" \
 1136         "adcs   r1, r1\n\t"
 1137 
 1138 #define SQRT_STEP_LOx4(b) \
 1139                 SQRT_STEP_LO((b)+3) \
 1140                 SQRT_STEP_LO((b)+2) \
 1141                 SQRT_STEP_LO((b)+1) \
 1142                 SQRT_STEP_LO(b)
 1143 
 1144         SQRT_STEP_LO(30)
 1145         SQRT_STEP_LO(29)
 1146         SQRT_STEP_LO(28)
 1147         SQRT_STEP_LOx4(24)
 1148         SQRT_STEP_LOx4(20)
 1149         SQRT_STEP_LOx4(16)
 1150         SQRT_STEP_LOx4(12)
 1151         SQRT_STEP_LOx4(8)
 1152 
 1153 #undef SQRT_STEP_LO
 1154 #undef SQRT_STEP_LOx4
 1155 
 1156         "@ Put low 24 bits in the right order.\n\t"
 1157         "rbit   r4, r4\n\t"
 1158         "\n\t"
 1159         "@ We have a 54-bit result; compute the 55-th bit as the 'sticky'\n\t"
 1160         "@ bit: it is non-zero if and only if r0:r1 is non-zero. We put the\n\t"
 1161         "@ three low bits (including the sticky bit) in r5.\n\t"
 1162         "orrs   r0, r1\n\t"
 1163         "rsbs   r1, r0, #0\n\t"
 1164         "orrs   r0, r1\n\t"
 1165         "lsls   r5, r4, #1\n\t"
 1166         "orrs   r5, r5, r0, lsr #31\n\t"
 1167         "ands   r5, #0x7\n\t"
 1168         "\n\t"
 1169         "@ Compute the rounding: r6 is set to 0 or 1, and will be added\n\t"
 1170         "@ to the mantissa.\n\t"
 1171         "movs   r6, #0xC8\n\t"
 1172         "lsrs   r6, r5\n\t"
 1173         "ands   r6, #1\n\t"
 1174         "\n\t"
 1175         "@ Put the mantissa (53 bits, in the 2^52..2^53-1 range) in r0:r1\n\t"
 1176         "@ (rounding not applied yet).\n\t"
 1177         "lsrs   r0, r4, #1\n\t"
 1178         "orrs   r0, r0, r3, lsl #23\n\t"
 1179         "lsrs   r1, r3, #9\n\t"
 1180         "\n\t"
 1181         "@ Compute new exponent. This is half the old one (then reencoded\n\t"
 1182         "@ by adding 1023). Exception: if the mantissa is zero, then the\n\t"
 1183         "@ encoded exponent is set to 0. At that point, if the mantissa\n\t"
 1184         "@ is non-zero, then its high bit (bit 52, i.e. bit 20 of r1) is\n\t"
 1185         "@ non-zero. Note that the exponent cannot go out of range.\n\t"
 1186         "lsrs   r2, r2, #1\n\t"
 1187         "addw   r2, r2, #1023\n\t"
 1188         "lsrs   r5, r1, #20\n\t"
 1189         "rsbs   r5, r5, #0\n\t"
 1190         "ands   r2, r5\n\t"
 1191         "\n\t"
 1192         "@ Place exponent. This overwrites the high bit of the mantissa.\n\t"
 1193         "bfi    r1, r2, #20, #11\n\t"
 1194         "\n\t"
 1195         "@ Apply rounding. This may create a carry that will spill into\n\t"
 1196         "@ the exponent, which is exactly what should be done in that case\n\t"
 1197         "@ (i.e. increment the exponent).\n\t"
 1198         "adds   r0, r0, r6\n\t"
 1199         "adcs   r1, r1, #0\n\t"
 1200         "\n\t"
 1201         "pop    { r4, r5, r6, r7, r8, r10, r11, pc }\n\t"
 1202         );
 1203 }
 1204 
 1205 #else // yyyASM_CORTEXM4+0
 1206 
 1207 fpr
 1208 fpr_sqrt(fpr x)
 1209 {
 1210         uint64_t xu, q, s, r;
 1211         int ex, e;
 1212 
 1213         /*
 1214          * Extract the mantissa and the exponent. We don't care about
 1215          * the sign: by assumption, the operand is nonnegative.
 1216          * We want the "true" exponent corresponding to a mantissa
 1217          * in the 1..2 range.
 1218          */
 1219         xu = (x & (((uint64_t)1 << 52) - 1)) | ((uint64_t)1 << 52);
 1220         ex = (int)((x >> 52) & 0x7FF);
 1221         e = ex - 1023;
 1222 
 1223         /*
 1224          * If the exponent is odd, double the mantissa and decrement
 1225          * the exponent. The exponent is then halved to account for
 1226          * the square root.
 1227          */
 1228         xu += xu & -(uint64_t)(e & 1);
 1229         e >>= 1;
 1230 
 1231         /*
 1232          * Double the mantissa.
 1233          */
 1234         xu <<= 1;
 1235 
 1236         /*
 1237          * We now have a mantissa in the 2^53..2^55-1 range. It
 1238          * represents a value between 1 (inclusive) and 4 (exclusive)
 1239          * in fixed point notation (with 53 fractional bits). We
 1240          * compute the square root bit by bit.
 1241          */
 1242         q = 0;
 1243         s = 0;
 1244         r = (uint64_t)1 << 53;
 1245         for (int i = 0; i < 54; i ++) {
 1246                 uint64_t t, b;
 1247 
 1248                 t = s + r;
 1249                 b = ((xu - t) >> 63) - 1;
 1250                 s += (r << 1) & b;
 1251                 xu -= t & b;
 1252                 q += r & b;
 1253                 xu <<= 1;
 1254                 r >>= 1;
 1255         }
 1256 
 1257         /*
 1258          * Now, q is a rounded-low 54-bit value, with a leading 1,
 1259          * 52 fractional digits, and an additional guard bit. We add
 1260          * an extra sticky bit to account for what remains of the operand.
 1261          */
 1262         q <<= 1;
 1263         q |= (xu | -xu) >> 63;
 1264 
 1265         /*
 1266          * Result q is in the 2^54..2^55-1 range; we bias the exponent
 1267          * by 54 bits (the value e at that point contains the "true"
 1268          * exponent, but q is now considered an integer, i.e. scaled
 1269          * up.
 1270          */
 1271         e -= 54;
 1272 
 1273         /*
 1274          * Corrective action for an operand of value zero.
 1275          */
 1276         q &= -(uint64_t)((ex + 0x7FF) >> 11);
 1277 
 1278         /*
 1279          * Apply rounding and back result.
 1280          */
 1281         return FPR(0, e, q);
 1282 }
 1283 
 1284 #endif // yyyASM_CORTEXM4-
 1285 
 1286 uint64_t
 1287 fpr_expm_p63(fpr x)
 1288 {
 1289         /*
 1290          * Polynomial approximation of exp(-x) is taken from FACCT:
 1291          *   https://eprint.iacr.org/2018/1234
 1292          * Specifically, values are extracted from the implementation
 1293          * referenced from the FACCT article, and available at:
 1294          *   https://github.com/raykzhao/gaussian
 1295          * Here, the coefficients have been scaled up by 2^63 and
 1296          * converted to integers.
 1297          *
 1298          * Tests over more than 24 billions of random inputs in the
 1299          * 0..log(2) range have never shown a deviation larger than
 1300          * 2^(-50) from the true mathematical value.
 1301          */
 1302         static const uint64_t C[] = {
 1303                 0x00000004741183A3u,
 1304                 0x00000036548CFC06u,
 1305                 0x0000024FDCBF140Au,
 1306                 0x0000171D939DE045u,
 1307                 0x0000D00CF58F6F84u,
 1308                 0x000680681CF796E3u,
 1309                 0x002D82D8305B0FEAu,
 1310                 0x011111110E066FD0u,
 1311                 0x0555555555070F00u,
 1312                 0x155555555581FF00u,
 1313                 0x400000000002B400u,
 1314                 0x7FFFFFFFFFFF4800u,
 1315                 0x8000000000000000u
 1316         };
 1317 
 1318         uint64_t z, y;
 1319         unsigned u;
 1320 
 1321         y = C[0];
 1322         z = (uint64_t)fpr_trunc(fpr_mul(x, fpr_ptwo63)) << 1;
 1323         for (u = 1; u < (sizeof C) / sizeof(C[0]); u ++) {
 1324                 /*
 1325                  * Compute product z * y over 128 bits, but keep only
 1326                  * the top 64 bits.
 1327                  *
 1328                  * TODO: On some architectures/compilers we could use
 1329                  * some intrinsics (__umulh() on MSVC) or other compiler
 1330                  * extensions (unsigned __int128 on GCC / Clang) for
 1331                  * improved speed; however, most 64-bit architectures
 1332                  * also have appropriate IEEE754 floating-point support,
 1333                  * which is better.
 1334                  */
 1335                 uint32_t z0, z1, y0, y1;
 1336                 uint64_t a, b, c;
 1337 
 1338                 z0 = (uint32_t)z;
 1339                 z1 = (uint32_t)(z >> 32);
 1340                 y0 = (uint32_t)y;
 1341                 y1 = (uint32_t)(y >> 32);
 1342                 a = ((uint64_t)z0 * (uint64_t)y1)
 1343                         + (((uint64_t)z0 * (uint64_t)y0) >> 32);
 1344                 b = ((uint64_t)z1 * (uint64_t)y0);
 1345                 c = (a >> 32) + (b >> 32);
 1346                 c += (((uint64_t)(uint32_t)a + (uint64_t)(uint32_t)b) >> 32);
 1347                 c += (uint64_t)z1 * (uint64_t)y1;
 1348                 y = C[u] - c;
 1349         }
 1350         return y;
 1351 }
 1352 
 1353 const fpr fpr_gm_tab[] = {
 1354         0, 0,
 1355          9223372036854775808U,  4607182418800017408U,
 1356          4604544271217802189U,  4604544271217802189U,
 1357         13827916308072577997U,  4604544271217802189U,
 1358          4606496786581982534U,  4600565431771507043U,
 1359         13823937468626282851U,  4606496786581982534U,
 1360          4600565431771507043U,  4606496786581982534U,
 1361         13829868823436758342U,  4600565431771507043U,
 1362          4607009347991985328U,  4596196889902818827U,
 1363         13819568926757594635U,  4607009347991985328U,
 1364          4603179351334086856U,  4605664432017547683U,
 1365         13829036468872323491U,  4603179351334086856U,
 1366          4605664432017547683U,  4603179351334086856U,
 1367         13826551388188862664U,  4605664432017547683U,
 1368          4596196889902818827U,  4607009347991985328U,
 1369         13830381384846761136U,  4596196889902818827U,
 1370          4607139046673687846U,  4591727299969791020U,
 1371         13815099336824566828U,  4607139046673687846U,
 1372          4603889326261607894U,  4605137878724712257U,
 1373         13828509915579488065U,  4603889326261607894U,
 1374          4606118860100255153U,  4602163548591158843U,
 1375         13825535585445934651U,  4606118860100255153U,
 1376          4598900923775164166U,  4606794571824115162U,
 1377         13830166608678890970U,  4598900923775164166U,
 1378          4606794571824115162U,  4598900923775164166U,
 1379         13822272960629939974U,  4606794571824115162U,
 1380          4602163548591158843U,  4606118860100255153U,
 1381         13829490896955030961U,  4602163548591158843U,
 1382          4605137878724712257U,  4603889326261607894U,
 1383         13827261363116383702U,  4605137878724712257U,
 1384          4591727299969791020U,  4607139046673687846U,
 1385         13830511083528463654U,  4591727299969791020U,
 1386          4607171569234046334U,  4587232218149935124U,
 1387         13810604255004710932U,  4607171569234046334U,
 1388          4604224084862889120U,  4604849113969373103U,
 1389         13828221150824148911U,  4604224084862889120U,
 1390          4606317631232591731U,  4601373767755717824U,
 1391         13824745804610493632U,  4606317631232591731U,
 1392          4599740487990714333U,  4606655894547498725U,
 1393         13830027931402274533U,  4599740487990714333U,
 1394          4606912484326125783U,  4597922303871901467U,
 1395         13821294340726677275U,  4606912484326125783U,
 1396          4602805845399633902U,  4605900952042040894U,
 1397         13829272988896816702U,  4602805845399633902U,
 1398          4605409869824231233U,  4603540801876750389U,
 1399         13826912838731526197U,  4605409869824231233U,
 1400          4594454542771183930U,  4607084929468638487U,
 1401         13830456966323414295U,  4594454542771183930U,
 1402          4607084929468638487U,  4594454542771183930U,
 1403         13817826579625959738U,  4607084929468638487U,
 1404          4603540801876750389U,  4605409869824231233U,
 1405         13828781906679007041U,  4603540801876750389U,
 1406          4605900952042040894U,  4602805845399633902U,
 1407         13826177882254409710U,  4605900952042040894U,
 1408          4597922303871901467U,  4606912484326125783U,
 1409         13830284521180901591U,  4597922303871901467U,
 1410          4606655894547498725U,  4599740487990714333U,
 1411         13823112524845490141U,  4606655894547498725U,
 1412          4601373767755717824U,  4606317631232591731U,
 1413         13829689668087367539U,  4601373767755717824U,
 1414          4604849113969373103U,  4604224084862889120U,
 1415         13827596121717664928U,  4604849113969373103U,
 1416          4587232218149935124U,  4607171569234046334U,
 1417         13830543606088822142U,  4587232218149935124U,
 1418          4607179706000002317U,  4582730748936808062U,
 1419         13806102785791583870U,  4607179706000002317U,
 1420          4604386048625945823U,  4604698657331085206U,
 1421         13828070694185861014U,  4604386048625945823U,
 1422          4606409688975526202U,  4600971798440897930U,
 1423         13824343835295673738U,  4606409688975526202U,
 1424          4600154912527631775U,  4606578871587619388U,
 1425         13829950908442395196U,  4600154912527631775U,
 1426          4606963563043808649U,  4597061974398750563U,
 1427         13820434011253526371U,  4606963563043808649U,
 1428          4602994049708411683U,  4605784983948558848U,
 1429         13829157020803334656U,  4602994049708411683U,
 1430          4605539368864982914U,  4603361638657888991U,
 1431         13826733675512664799U,  4605539368864982914U,
 1432          4595327571478659014U,  4607049811591515049U,
 1433         13830421848446290857U,  4595327571478659014U,
 1434          4607114680469659603U,  4593485039402578702U,
 1435         13816857076257354510U,  4607114680469659603U,
 1436          4603716733069447353U,  4605276012900672507U,
 1437         13828648049755448315U,  4603716733069447353U,
 1438          4606012266443150634U,  4602550884377336506U,
 1439         13825922921232112314U,  4606012266443150634U,
 1440          4598476289818621559U,  4606856142606846307U,
 1441         13830228179461622115U,  4598476289818621559U,
 1442          4606727809065869586U,  4599322407794599425U,
 1443         13822694444649375233U,  4606727809065869586U,
 1444          4601771097584682078U,  4606220668805321205U,
 1445         13829592705660097013U,  4601771097584682078U,
 1446          4604995550503212910U,  4604058477489546729U,
 1447         13827430514344322537U,  4604995550503212910U,
 1448          4589965306122607094U,  4607158013403433018U,
 1449         13830530050258208826U,  4589965306122607094U,
 1450          4607158013403433018U,  4589965306122607094U,
 1451         13813337342977382902U,  4607158013403433018U,
 1452          4604058477489546729U,  4604995550503212910U,
 1453         13828367587357988718U,  4604058477489546729U,
 1454          4606220668805321205U,  4601771097584682078U,
 1455         13825143134439457886U,  4606220668805321205U,
 1456          4599322407794599425U,  4606727809065869586U,
 1457         13830099845920645394U,  4599322407794599425U,
 1458          4606856142606846307U,  4598476289818621559U,
 1459         13821848326673397367U,  4606856142606846307U,
 1460          4602550884377336506U,  4606012266443150634U,
 1461         13829384303297926442U,  4602550884377336506U,
 1462          4605276012900672507U,  4603716733069447353U,
 1463         13827088769924223161U,  4605276012900672507U,
 1464          4593485039402578702U,  4607114680469659603U,
 1465         13830486717324435411U,  4593485039402578702U,
 1466          4607049811591515049U,  4595327571478659014U,
 1467         13818699608333434822U,  4607049811591515049U,
 1468          4603361638657888991U,  4605539368864982914U,
 1469         13828911405719758722U,  4603361638657888991U,
 1470          4605784983948558848U,  4602994049708411683U,
 1471         13826366086563187491U,  4605784983948558848U,
 1472          4597061974398750563U,  4606963563043808649U,
 1473         13830335599898584457U,  4597061974398750563U,
 1474          4606578871587619388U,  4600154912527631775U,
 1475         13823526949382407583U,  4606578871587619388U,
 1476          4600971798440897930U,  4606409688975526202U,
 1477         13829781725830302010U,  4600971798440897930U,
 1478          4604698657331085206U,  4604386048625945823U,
 1479         13827758085480721631U,  4604698657331085206U,
 1480          4582730748936808062U,  4607179706000002317U,
 1481         13830551742854778125U,  4582730748936808062U,
 1482          4607181740574479067U,  4578227681973159812U,
 1483         13801599718827935620U,  4607181740574479067U,
 1484          4604465633578481725U,  4604621949701367983U,
 1485         13827993986556143791U,  4604465633578481725U,
 1486          4606453861145241227U,  4600769149537129431U,
 1487         13824141186391905239U,  4606453861145241227U,
 1488          4600360675823176935U,  4606538458821337243U,
 1489         13829910495676113051U,  4600360675823176935U,
 1490          4606987119037722413U,  4596629994023683153U,
 1491         13820002030878458961U,  4606987119037722413U,
 1492          4603087070374583113U,  4605725276488455441U,
 1493         13829097313343231249U,  4603087070374583113U,
 1494          4605602459698789090U,  4603270878689749849U,
 1495         13826642915544525657U,  4605602459698789090U,
 1496          4595762727260045105U,  4607030246558998647U,
 1497         13830402283413774455U,  4595762727260045105U,
 1498          4607127537664763515U,  4592606767730311893U,
 1499         13815978804585087701U,  4607127537664763515U,
 1500          4603803453461190356U,  4605207475328619533U,
 1501         13828579512183395341U,  4603803453461190356U,
 1502          4606066157444814153U,  4602357870542944470U,
 1503         13825729907397720278U,  4606066157444814153U,
 1504          4598688984595225406U,  4606826008603986804U,
 1505         13830198045458762612U,  4598688984595225406U,
 1506          4606761837001494797U,  4599112075441176914U,
 1507         13822484112295952722U,  4606761837001494797U,
 1508          4601967947786150793U,  4606170366472647579U,
 1509         13829542403327423387U,  4601967947786150793U,
 1510          4605067233569943231U,  4603974338538572089U,
 1511         13827346375393347897U,  4605067233569943231U,
 1512          4590846768565625881U,  4607149205763218185U,
 1513         13830521242617993993U,  4590846768565625881U,
 1514          4607165468267934125U,  4588998070480937184U,
 1515         13812370107335712992U,  4607165468267934125U,
 1516          4604141730443515286U,  4604922840319727473U,
 1517         13828294877174503281U,  4604141730443515286U,
 1518          4606269759522929756U,  4601573027631668967U,
 1519         13824945064486444775U,  4606269759522929756U,
 1520          4599531889160152938U,  4606692493141721470U,
 1521         13830064529996497278U,  4599531889160152938U,
 1522          4606884969294623682U,  4598262871476403630U,
 1523         13821634908331179438U,  4606884969294623682U,
 1524          4602710690099904183U,  4605957195211051218U,
 1525         13829329232065827026U,  4602710690099904183U,
 1526          4605343481119364930U,  4603629178146150899U,
 1527         13827001215000926707U,  4605343481119364930U,
 1528          4594016801320007031U,  4607100477024622401U,
 1529         13830472513879398209U,  4594016801320007031U,
 1530          4607068040143112603U,  4594891488091520602U,
 1531         13818263524946296410U,  4607068040143112603U,
 1532          4603451617570386922U,  4605475169017376660U,
 1533         13828847205872152468U,  4603451617570386922U,
 1534          4605843545406134034U,  4602900303344142735U,
 1535         13826272340198918543U,  4605843545406134034U,
 1536          4597492765973365521U,  4606938683557690074U,
 1537         13830310720412465882U,  4597492765973365521U,
 1538          4606618018794815019U,  4599948172872067014U,
 1539         13823320209726842822U,  4606618018794815019U,
 1540          4601173347964633034U,  4606364276725003740U,
 1541         13829736313579779548U,  4601173347964633034U,
 1542          4604774382555066977U,  4604305528345395596U,
 1543         13827677565200171404U,  4604774382555066977U,
 1544          4585465300892538317U,  4607176315382986589U,
 1545         13830548352237762397U,  4585465300892538317U,
 1546          4607176315382986589U,  4585465300892538317U,
 1547         13808837337747314125U,  4607176315382986589U,
 1548          4604305528345395596U,  4604774382555066977U,
 1549         13828146419409842785U,  4604305528345395596U,
 1550          4606364276725003740U,  4601173347964633034U,
 1551         13824545384819408842U,  4606364276725003740U,
 1552          4599948172872067014U,  4606618018794815019U,
 1553         13829990055649590827U,  4599948172872067014U,
 1554          4606938683557690074U,  4597492765973365521U,
 1555         13820864802828141329U,  4606938683557690074U,
 1556          4602900303344142735U,  4605843545406134034U,
 1557         13829215582260909842U,  4602900303344142735U,
 1558          4605475169017376660U,  4603451617570386922U,
 1559         13826823654425162730U,  4605475169017376660U,
 1560          4594891488091520602U,  4607068040143112603U,
 1561         13830440076997888411U,  4594891488091520602U,
 1562          4607100477024622401U,  4594016801320007031U,
 1563         13817388838174782839U,  4607100477024622401U,
 1564          4603629178146150899U,  4605343481119364930U,
 1565         13828715517974140738U,  4603629178146150899U,
 1566          4605957195211051218U,  4602710690099904183U,
 1567         13826082726954679991U,  4605957195211051218U,
 1568          4598262871476403630U,  4606884969294623682U,
 1569         13830257006149399490U,  4598262871476403630U,
 1570          4606692493141721470U,  4599531889160152938U,
 1571         13822903926014928746U,  4606692493141721470U,
 1572          4601573027631668967U,  4606269759522929756U,
 1573         13829641796377705564U,  4601573027631668967U,
 1574          4604922840319727473U,  4604141730443515286U,
 1575         13827513767298291094U,  4604922840319727473U,
 1576          4588998070480937184U,  4607165468267934125U,
 1577         13830537505122709933U,  4588998070480937184U,
 1578          4607149205763218185U,  4590846768565625881U,
 1579         13814218805420401689U,  4607149205763218185U,
 1580          4603974338538572089U,  4605067233569943231U,
 1581         13828439270424719039U,  4603974338538572089U,
 1582          4606170366472647579U,  4601967947786150793U,
 1583         13825339984640926601U,  4606170366472647579U,
 1584          4599112075441176914U,  4606761837001494797U,
 1585         13830133873856270605U,  4599112075441176914U,
 1586          4606826008603986804U,  4598688984595225406U,
 1587         13822061021450001214U,  4606826008603986804U,
 1588          4602357870542944470U,  4606066157444814153U,
 1589         13829438194299589961U,  4602357870542944470U,
 1590          4605207475328619533U,  4603803453461190356U,
 1591         13827175490315966164U,  4605207475328619533U,
 1592          4592606767730311893U,  4607127537664763515U,
 1593         13830499574519539323U,  4592606767730311893U,
 1594          4607030246558998647U,  4595762727260045105U,
 1595         13819134764114820913U,  4607030246558998647U,
 1596          4603270878689749849U,  4605602459698789090U,
 1597         13828974496553564898U,  4603270878689749849U,
 1598          4605725276488455441U,  4603087070374583113U,
 1599         13826459107229358921U,  4605725276488455441U,
 1600          4596629994023683153U,  4606987119037722413U,
 1601         13830359155892498221U,  4596629994023683153U,
 1602          4606538458821337243U,  4600360675823176935U,
 1603         13823732712677952743U,  4606538458821337243U,
 1604          4600769149537129431U,  4606453861145241227U,
 1605         13829825898000017035U,  4600769149537129431U,
 1606          4604621949701367983U,  4604465633578481725U,
 1607         13827837670433257533U,  4604621949701367983U,
 1608          4578227681973159812U,  4607181740574479067U,
 1609         13830553777429254875U,  4578227681973159812U,
 1610          4607182249242036882U,  4573724215515480177U,
 1611         13797096252370255985U,  4607182249242036882U,
 1612          4604505071555817232U,  4604583231088591477U,
 1613         13827955267943367285U,  4604505071555817232U,
 1614          4606475480113671417U,  4600667422348321968U,
 1615         13824039459203097776U,  4606475480113671417U,
 1616          4600463181646572228U,  4606517779747998088U,
 1617         13829889816602773896U,  4600463181646572228U,
 1618          4606998399608725124U,  4596413578358834022U,
 1619         13819785615213609830U,  4606998399608725124U,
 1620          4603133304188877240U,  4605694995810664660U,
 1621         13829067032665440468U,  4603133304188877240U,
 1622          4605633586259814045U,  4603225210076562971U,
 1623         13826597246931338779U,  4605633586259814045U,
 1624          4595979936813835462U,  4607019963775302583U,
 1625         13830392000630078391U,  4595979936813835462U,
 1626          4607133460805585796U,  4592167175087283203U,
 1627         13815539211942059011U,  4607133460805585796U,
 1628          4603846496621587377U,  4605172808754305228U,
 1629         13828544845609081036U,  4603846496621587377U,
 1630          4606092657816072624U,  4602260871257280788U,
 1631         13825632908112056596U,  4606092657816072624U,
 1632          4598795050632330097U,  4606810452769876110U,
 1633         13830182489624651918U,  4598795050632330097U,
 1634          4606778366364612594U,  4599006600037663623U,
 1635         13822378636892439431U,  4606778366364612594U,
 1636          4602065906208722008U,  4606144763310860551U,
 1637         13829516800165636359U,  4602065906208722008U,
 1638          4605102686554936490U,  4603931940768740167U,
 1639         13827303977623515975U,  4605102686554936490U,
 1640          4591287158938884897U,  4607144295058764886U,
 1641         13830516331913540694U,  4591287158938884897U,
 1642          4607168688050493276U,  4588115294056142819U,
 1643         13811487330910918627U,  4607168688050493276U,
 1644          4604183020748362039U,  4604886103475043762U,
 1645         13828258140329819570U,  4604183020748362039U,
 1646          4606293848208650998U,  4601473544562720001U,
 1647         13824845581417495809U,  4606293848208650998U,
 1648          4599636300858866724U,  4606674353838411301U,
 1649         13830046390693187109U,  4599636300858866724U,
 1650          4606898891031025132U,  4598136582470364665U,
 1651         13821508619325140473U,  4606898891031025132U,
 1652          4602758354025980442U,  4605929219593405673U,
 1653         13829301256448181481U,  4602758354025980442U,
 1654          4605376811039722786U,  4603585091850767959U,
 1655         13826957128705543767U,  4605376811039722786U,
 1656          4594235767444503503U,  4607092871118901179U,
 1657         13830464907973676987U,  4594235767444503503U,
 1658          4607076652372832968U,  4594673119063280916U,
 1659         13818045155918056724U,  4607076652372832968U,
 1660          4603496309891590679U,  4605442656228245717U,
 1661         13828814693083021525U,  4603496309891590679U,
 1662          4605872393621214213U,  4602853162432841185U,
 1663         13826225199287616993U,  4605872393621214213U,
 1664          4597707695679609371U,  4606925748668145757U,
 1665         13830297785522921565U,  4597707695679609371U,
 1666          4606637115963965612U,  4599844446633109139U,
 1667         13823216483487884947U,  4606637115963965612U,
 1668          4601273700967202825U,  4606341107699334546U,
 1669         13829713144554110354U,  4601273700967202825U,
 1670          4604811873195349477U,  4604264921241055824U,
 1671         13827636958095831632U,  4604811873195349477U,
 1672          4586348876009622851U,  4607174111710118367U,
 1673         13830546148564894175U,  4586348876009622851U,
 1674          4607178180169683960U,  4584498631466405633U,
 1675         13807870668321181441U,  4607178180169683960U,
 1676          4604345904647073908U,  4604736643460027021U,
 1677         13828108680314802829U,  4604345904647073908U,
 1678          4606387137437298591U,  4601072712526242277U,
 1679         13824444749381018085U,  4606387137437298591U,
 1680          4600051662802353687U,  4606598603759044570U,
 1681         13829970640613820378U,  4600051662802353687U,
 1682          4606951288507767453U,  4597277522845151878U,
 1683         13820649559699927686U,  4606951288507767453U,
 1684          4602947266358709886U,  4605814408482919348U,
 1685         13829186445337695156U,  4602947266358709886U,
 1686          4605507406967535927U,  4603406726595779752U,
 1687         13826778763450555560U,  4605507406967535927U,
 1688          4595109641634432498U,  4607059093103722971U,
 1689         13830431129958498779U,  4595109641634432498U,
 1690          4607107746899444102U,  4593797652641645341U,
 1691         13817169689496421149U,  4607107746899444102U,
 1692          4603673059103075106U,  4605309881318010327U,
 1693         13828681918172786135U,  4603673059103075106U,
 1694          4605984877841711338U,  4602646891659203088U,
 1695         13826018928513978896U,  4605984877841711338U,
 1696          4598369669086960528U,  4606870719641066940U,
 1697         13830242756495842748U,  4598369669086960528U,
 1698          4606710311774494716U,  4599427256825614420U,
 1699         13822799293680390228U,  4606710311774494716U,
 1700          4601672213217083403U,  4606245366082353408U,
 1701         13829617402937129216U,  4601672213217083403U,
 1702          4604959323120302796U,  4604100215502905499U,
 1703         13827472252357681307U,  4604959323120302796U,
 1704          4589524267239410099U,  4607161910007591876U,
 1705         13830533946862367684U,  4589524267239410099U,
 1706          4607153778602162496U,  4590406145430462614U,
 1707         13813778182285238422U,  4607153778602162496U,
 1708          4604016517974851588U,  4605031521104517324U,
 1709         13828403557959293132U,  4604016517974851588U,
 1710          4606195668621671667U,  4601869677011524443U,
 1711         13825241713866300251U,  4606195668621671667U,
 1712          4599217346014614711U,  4606744984357082948U,
 1713         13830117021211858756U,  4599217346014614711U,
 1714          4606841238740778884U,  4598582729657176439U,
 1715         13821954766511952247U,  4606841238740778884U,
 1716          4602454542796181607U,  4606039359984203741U,
 1717         13829411396838979549U,  4602454542796181607U,
 1718          4605241877142478242U,  4603760198400967492U,
 1719         13827132235255743300U,  4605241877142478242U,
 1720          4593046061348462537U,  4607121277474223905U,
 1721         13830493314328999713U,  4593046061348462537U,
 1722          4607040195955932526U,  4595545269419264690U,
 1723         13818917306274040498U,  4607040195955932526U,
 1724          4603316355454250015U,  4605571053506370248U,
 1725         13828943090361146056U,  4603316355454250015U,
 1726          4605755272910869620U,  4603040651631881451U,
 1727         13826412688486657259U,  4605755272910869620U,
 1728          4596846128749438754U,  4606975506703684317U,
 1729         13830347543558460125U,  4596846128749438754U,
 1730          4606558823023444576U,  4600257918160607478U,
 1731         13823629955015383286U,  4606558823023444576U,
 1732          4600870609507958271U,  4606431930490633905U,
 1733         13829803967345409713U,  4600870609507958271U,
 1734          4604660425598397818U,  4604425958770613225U,
 1735         13827797995625389033U,  4604660425598397818U,
 1736          4580962600092897021U,  4607180892816495009U,
 1737         13830552929671270817U,  4580962600092897021U,
 1738          4607180892816495009U,  4580962600092897021U,
 1739         13804334636947672829U,  4607180892816495009U,
 1740          4604425958770613225U,  4604660425598397818U,
 1741         13828032462453173626U,  4604425958770613225U,
 1742          4606431930490633905U,  4600870609507958271U,
 1743         13824242646362734079U,  4606431930490633905U,
 1744          4600257918160607478U,  4606558823023444576U,
 1745         13829930859878220384U,  4600257918160607478U,
 1746          4606975506703684317U,  4596846128749438754U,
 1747         13820218165604214562U,  4606975506703684317U,
 1748          4603040651631881451U,  4605755272910869620U,
 1749         13829127309765645428U,  4603040651631881451U,
 1750          4605571053506370248U,  4603316355454250015U,
 1751         13826688392309025823U,  4605571053506370248U,
 1752          4595545269419264690U,  4607040195955932526U,
 1753         13830412232810708334U,  4595545269419264690U,
 1754          4607121277474223905U,  4593046061348462537U,
 1755         13816418098203238345U,  4607121277474223905U,
 1756          4603760198400967492U,  4605241877142478242U,
 1757         13828613913997254050U,  4603760198400967492U,
 1758          4606039359984203741U,  4602454542796181607U,
 1759         13825826579650957415U,  4606039359984203741U,
 1760          4598582729657176439U,  4606841238740778884U,
 1761         13830213275595554692U,  4598582729657176439U,
 1762          4606744984357082948U,  4599217346014614711U,
 1763         13822589382869390519U,  4606744984357082948U,
 1764          4601869677011524443U,  4606195668621671667U,
 1765         13829567705476447475U,  4601869677011524443U,
 1766          4605031521104517324U,  4604016517974851588U,
 1767         13827388554829627396U,  4605031521104517324U,
 1768          4590406145430462614U,  4607153778602162496U,
 1769         13830525815456938304U,  4590406145430462614U,
 1770          4607161910007591876U,  4589524267239410099U,
 1771         13812896304094185907U,  4607161910007591876U,
 1772          4604100215502905499U,  4604959323120302796U,
 1773         13828331359975078604U,  4604100215502905499U,
 1774          4606245366082353408U,  4601672213217083403U,
 1775         13825044250071859211U,  4606245366082353408U,
 1776          4599427256825614420U,  4606710311774494716U,
 1777         13830082348629270524U,  4599427256825614420U,
 1778          4606870719641066940U,  4598369669086960528U,
 1779         13821741705941736336U,  4606870719641066940U,
 1780          4602646891659203088U,  4605984877841711338U,
 1781         13829356914696487146U,  4602646891659203088U,
 1782          4605309881318010327U,  4603673059103075106U,
 1783         13827045095957850914U,  4605309881318010327U,
 1784          4593797652641645341U,  4607107746899444102U,
 1785         13830479783754219910U,  4593797652641645341U,
 1786          4607059093103722971U,  4595109641634432498U,
 1787         13818481678489208306U,  4607059093103722971U,
 1788          4603406726595779752U,  4605507406967535927U,
 1789         13828879443822311735U,  4603406726595779752U,
 1790          4605814408482919348U,  4602947266358709886U,
 1791         13826319303213485694U,  4605814408482919348U,
 1792          4597277522845151878U,  4606951288507767453U,
 1793         13830323325362543261U,  4597277522845151878U,
 1794          4606598603759044570U,  4600051662802353687U,
 1795         13823423699657129495U,  4606598603759044570U,
 1796          4601072712526242277U,  4606387137437298591U,
 1797         13829759174292074399U,  4601072712526242277U,
 1798          4604736643460027021U,  4604345904647073908U,
 1799         13827717941501849716U,  4604736643460027021U,
 1800          4584498631466405633U,  4607178180169683960U,
 1801         13830550217024459768U,  4584498631466405633U,
 1802          4607174111710118367U,  4586348876009622851U,
 1803         13809720912864398659U,  4607174111710118367U,
 1804          4604264921241055824U,  4604811873195349477U,
 1805         13828183910050125285U,  4604264921241055824U,
 1806          4606341107699334546U,  4601273700967202825U,
 1807         13824645737821978633U,  4606341107699334546U,
 1808          4599844446633109139U,  4606637115963965612U,
 1809         13830009152818741420U,  4599844446633109139U,
 1810          4606925748668145757U,  4597707695679609371U,
 1811         13821079732534385179U,  4606925748668145757U,
 1812          4602853162432841185U,  4605872393621214213U,
 1813         13829244430475990021U,  4602853162432841185U,
 1814          4605442656228245717U,  4603496309891590679U,
 1815         13826868346746366487U,  4605442656228245717U,
 1816          4594673119063280916U,  4607076652372832968U,
 1817         13830448689227608776U,  4594673119063280916U,
 1818          4607092871118901179U,  4594235767444503503U,
 1819         13817607804299279311U,  4607092871118901179U,
 1820          4603585091850767959U,  4605376811039722786U,
 1821         13828748847894498594U,  4603585091850767959U,
 1822          4605929219593405673U,  4602758354025980442U,
 1823         13826130390880756250U,  4605929219593405673U,
 1824          4598136582470364665U,  4606898891031025132U,
 1825         13830270927885800940U,  4598136582470364665U,
 1826          4606674353838411301U,  4599636300858866724U,
 1827         13823008337713642532U,  4606674353838411301U,
 1828          4601473544562720001U,  4606293848208650998U,
 1829         13829665885063426806U,  4601473544562720001U,
 1830          4604886103475043762U,  4604183020748362039U,
 1831         13827555057603137847U,  4604886103475043762U,
 1832          4588115294056142819U,  4607168688050493276U,
 1833         13830540724905269084U,  4588115294056142819U,
 1834          4607144295058764886U,  4591287158938884897U,
 1835         13814659195793660705U,  4607144295058764886U,
 1836          4603931940768740167U,  4605102686554936490U,
 1837         13828474723409712298U,  4603931940768740167U,
 1838          4606144763310860551U,  4602065906208722008U,
 1839         13825437943063497816U,  4606144763310860551U,
 1840          4599006600037663623U,  4606778366364612594U,
 1841         13830150403219388402U,  4599006600037663623U,
 1842          4606810452769876110U,  4598795050632330097U,
 1843         13822167087487105905U,  4606810452769876110U,
 1844          4602260871257280788U,  4606092657816072624U,
 1845         13829464694670848432U,  4602260871257280788U,
 1846          4605172808754305228U,  4603846496621587377U,
 1847         13827218533476363185U,  4605172808754305228U,
 1848          4592167175087283203U,  4607133460805585796U,
 1849         13830505497660361604U,  4592167175087283203U,
 1850          4607019963775302583U,  4595979936813835462U,
 1851         13819351973668611270U,  4607019963775302583U,
 1852          4603225210076562971U,  4605633586259814045U,
 1853         13829005623114589853U,  4603225210076562971U,
 1854          4605694995810664660U,  4603133304188877240U,
 1855         13826505341043653048U,  4605694995810664660U,
 1856          4596413578358834022U,  4606998399608725124U,
 1857         13830370436463500932U,  4596413578358834022U,
 1858          4606517779747998088U,  4600463181646572228U,
 1859         13823835218501348036U,  4606517779747998088U,
 1860          4600667422348321968U,  4606475480113671417U,
 1861         13829847516968447225U,  4600667422348321968U,
 1862          4604583231088591477U,  4604505071555817232U,
 1863         13827877108410593040U,  4604583231088591477U,
 1864          4573724215515480177U,  4607182249242036882U,
 1865         13830554286096812690U,  4573724215515480177U,
 1866          4607182376410422530U,  4569220649180767418U,
 1867         13792592686035543226U,  4607182376410422530U,
 1868          4604524701268679793U,  4604563781218984604U,
 1869         13827935818073760412U,  4604524701268679793U,
 1870          4606486172460753999U,  4600616459743653188U,
 1871         13823988496598428996U,  4606486172460753999U,
 1872          4600514338912178239U,  4606507322377452870U,
 1873         13829879359232228678U,  4600514338912178239U,
 1874          4607003915349878877U,  4596305267720071930U,
 1875         13819677304574847738U,  4607003915349878877U,
 1876          4603156351203636159U,  4605679749231851918U,
 1877         13829051786086627726U,  4603156351203636159U,
 1878          4605649044311923410U,  4603202304363743346U,
 1879         13826574341218519154U,  4605649044311923410U,
 1880          4596088445927168004U,  4607014697483910382U,
 1881         13830386734338686190U,  4596088445927168004U,
 1882          4607136295912168606U,  4591947271803021404U,
 1883         13815319308657797212U,  4607136295912168606U,
 1884          4603867938232615808U,  4605155376589456981U,
 1885         13828527413444232789U,  4603867938232615808U,
 1886          4606105796280968177U,  4602212250118051877U,
 1887         13825584286972827685U,  4606105796280968177U,
 1888          4598848011564831930U,  4606802552898869248U,
 1889         13830174589753645056U,  4598848011564831930U,
 1890          4606786509620734768U,  4598953786765296928U,
 1891         13822325823620072736U,  4606786509620734768U,
 1892          4602114767134999006U,  4606131849150971908U,
 1893         13829503886005747716U,  4602114767134999006U,
 1894          4605120315324767624U,  4603910660507251362U,
 1895         13827282697362027170U,  4605120315324767624U,
 1896          4591507261658050721U,  4607141713064252300U,
 1897         13830513749919028108U,  4591507261658050721U,
 1898          4607170170974224083U,  4587673791460508439U,
 1899         13811045828315284247U,  4607170170974224083U,
 1900          4604203581176243359U,  4604867640218014515U,
 1901         13828239677072790323U,  4604203581176243359U,
 1902          4606305777984577632U,  4601423692641949331U,
 1903         13824795729496725139U,  4606305777984577632U,
 1904          4599688422741010356U,  4606665164148251002U,
 1905         13830037201003026810U,  4599688422741010356U,
 1906          4606905728766014348U,  4598029484874872834U,
 1907         13821401521729648642U,  4606905728766014348U,
 1908          4602782121393764535U,  4605915122243179241U,
 1909         13829287159097955049U,  4602782121393764535U,
 1910          4605393374401988274U,  4603562972219549215U,
 1911         13826935009074325023U,  4605393374401988274U,
 1912          4594345179472540681U,  4607088942243446236U,
 1913         13830460979098222044U,  4594345179472540681U,
 1914          4607080832832247697U,  4594563856311064231U,
 1915         13817935893165840039U,  4607080832832247697U,
 1916          4603518581031047189U,  4605426297151190466U,
 1917         13828798334005966274U,  4603518581031047189U,
 1918          4605886709123365959U,  4602829525820289164U,
 1919         13826201562675064972U,  4605886709123365959U,
 1920          4597815040470278984U,  4606919157647773535U,
 1921         13830291194502549343U,  4597815040470278984U,
 1922          4606646545123403481U,  4599792496117920694U,
 1923         13823164532972696502U,  4606646545123403481U,
 1924          4601323770373937522U,  4606329407841126011U,
 1925         13829701444695901819U,  4601323770373937522U,
 1926          4604830524903495634U,  4604244531615310815U,
 1927         13827616568470086623U,  4604830524903495634U,
 1928          4586790578280679046U,  4607172882816799076U,
 1929         13830544919671574884U,  4586790578280679046U,
 1930          4607178985458280057U,  4583614727651146525U,
 1931         13806986764505922333U,  4607178985458280057U,
 1932          4604366005771528720U,  4604717681185626434U,
 1933         13828089718040402242U,  4604366005771528720U,
 1934          4606398451906509788U,  4601022290077223616U,
 1935         13824394326931999424U,  4606398451906509788U,
 1936          4600103317933788342U,  4606588777269136769U,
 1937         13829960814123912577U,  4600103317933788342U,
 1938          4606957467106717424U,  4597169786279785693U,
 1939         13820541823134561501U,  4606957467106717424U,
 1940          4602970680601913687U,  4605799732098147061U,
 1941         13829171768952922869U,  4602970680601913687U,
 1942          4605523422498301790U,  4603384207141321914U,
 1943         13826756243996097722U,  4605523422498301790U,
 1944          4595218635031890910U,  4607054494135176056U,
 1945         13830426530989951864U,  4595218635031890910U,
 1946          4607111255739239816U,  4593688012422887515U,
 1947         13817060049277663323U,  4607111255739239816U,
 1948          4603694922063032361U,  4605292980606880364U,
 1949         13828665017461656172U,  4603694922063032361U,
 1950          4605998608960791335U,  4602598930031891166U,
 1951         13825970966886666974U,  4605998608960791335U,
 1952          4598423001813699022U,  4606863472012527185U,
 1953         13830235508867302993U,  4598423001813699022U,
 1954          4606719100629313491U,  4599374859150636784U,
 1955         13822746896005412592U,  4606719100629313491U,
 1956          4601721693286060937U,  4606233055365547081U,
 1957         13829605092220322889U,  4601721693286060937U,
 1958          4604977468824438271U,  4604079374282302598U,
 1959         13827451411137078406U,  4604977468824438271U,
 1960          4589744810590291021U,  4607160003989618959U,
 1961         13830532040844394767U,  4589744810590291021U,
 1962          4607155938267770208U,  4590185751760970393U,
 1963         13813557788615746201U,  4607155938267770208U,
 1964          4604037525321326463U,  4605013567986435066U,
 1965         13828385604841210874U,  4604037525321326463U,
 1966          4606208206518262803U,  4601820425647934753U,
 1967         13825192462502710561U,  4606208206518262803U,
 1968          4599269903251194481U,  4606736437002195879U,
 1969         13830108473856971687U,  4599269903251194481U,
 1970          4606848731493011465U,  4598529532600161144U,
 1971         13821901569454936952U,  4606848731493011465U,
 1972          4602502755147763107U,  4606025850160239809U,
 1973         13829397887015015617U,  4602502755147763107U,
 1974          4605258978359093269U,  4603738491917026584U,
 1975         13827110528771802392U,  4605258978359093269U,
 1976          4593265590854265407U,  4607118021058468598U,
 1977         13830490057913244406U,  4593265590854265407U,
 1978          4607045045516813836U,  4595436449949385485U,
 1979         13818808486804161293U,  4607045045516813836U,
 1980          4603339021357904144U,  4605555245917486022U,
 1981         13828927282772261830U,  4603339021357904144U,
 1982          4605770164172969910U,  4603017373458244943U,
 1983         13826389410313020751U,  4605770164172969910U,
 1984          4596954088216812973U,  4606969576261663845U,
 1985         13830341613116439653U,  4596954088216812973U,
 1986          4606568886807728474U,  4600206446098256018U,
 1987         13823578482953031826U,  4606568886807728474U,
 1988          4600921238092511730U,  4606420848538580260U,
 1989         13829792885393356068U,  4600921238092511730U,
 1990          4604679572075463103U,  4604406033021674239U,
 1991         13827778069876450047U,  4604679572075463103U,
 1992          4581846703643734566U,  4607180341788068727U,
 1993         13830552378642844535U,  4581846703643734566U,
 1994          4607181359080094673U,  4579996072175835083U,
 1995         13803368109030610891U,  4607181359080094673U,
 1996          4604445825685214043U,  4604641218080103285U,
 1997         13828013254934879093U,  4604445825685214043U,
 1998          4606442934727379583U,  4600819913163773071U,
 1999         13824191950018548879U,  4606442934727379583U,
 2000          4600309328230211502U,  4606548680329491866U,
 2001         13829920717184267674U,  4600309328230211502U,
 2002          4606981354314050484U,  4596738097012783531U,
 2003         13820110133867559339U,  4606981354314050484U,
 2004          4603063884010218172U,  4605740310302420207U,
 2005         13829112347157196015U,  4603063884010218172U,
 2006          4605586791482848547U,  4603293641160266722U,
 2007         13826665678015042530U,  4605586791482848547U,
 2008          4595654028864046335U,  4607035262954517034U,
 2009         13830407299809292842U,  4595654028864046335U,
 2010          4607124449686274900U,  4592826452951465409U,
 2011         13816198489806241217U,  4607124449686274900U,
 2012          4603781852316960384U,  4605224709411790590U,
 2013         13828596746266566398U,  4603781852316960384U,
 2014          4606052795787882823U,  4602406247776385022U,
 2015         13825778284631160830U,  4606052795787882823U,
 2016          4598635880488956483U,  4606833664420673202U,
 2017         13830205701275449010U,  4598635880488956483U,
 2018          4606753451050079834U,  4599164736579548843U,
 2019         13822536773434324651U,  4606753451050079834U,
 2020          4601918851211878557U,  4606183055233559255U,
 2021         13829555092088335063U,  4601918851211878557U,
 2022          4605049409688478101U,  4603995455647851249U,
 2023         13827367492502627057U,  4605049409688478101U,
 2024          4590626485056654602U,  4607151534426937478U,
 2025         13830523571281713286U,  4590626485056654602U,
 2026          4607163731439411601U,  4589303678145802340U,
 2027         13812675715000578148U,  4607163731439411601U,
 2028          4604121000955189926U,  4604941113561600762U,
 2029         13828313150416376570U,  4604121000955189926U,
 2030          4606257600839867033U,  4601622657843474729U,
 2031         13824994694698250537U,  4606257600839867033U,
 2032          4599479600326345459U,  4606701442584137310U,
 2033         13830073479438913118U,  4599479600326345459U,
 2034          4606877885424248132U,  4598316292140394014U,
 2035         13821688328995169822U,  4606877885424248132U,
 2036          4602686793990243041U,  4605971073215153165U,
 2037         13829343110069928973U,  4602686793990243041U,
 2038          4605326714874986465U,  4603651144395358093U,
 2039         13827023181250133901U,  4605326714874986465U,
 2040          4593907249284540294U,  4607104153983298999U,
 2041         13830476190838074807U,  4593907249284540294U,
 2042          4607063608453868552U,  4595000592312171144U,
 2043         13818372629166946952U,  4607063608453868552U,
 2044          4603429196809300824U,  4605491322423429598U,
 2045         13828863359278205406U,  4603429196809300824U,
 2046          4605829012964735987U,  4602923807199184054U,
 2047         13826295844053959862U,  4605829012964735987U,
 2048          4597385183080791534U,  4606945027305114062U,
 2049         13830317064159889870U,  4597385183080791534U,
 2050          4606608350964852124U,  4599999947619525579U,
 2051         13823371984474301387U,  4606608350964852124U,
 2052          4601123065313358619U,  4606375745674388705U,
 2053         13829747782529164513U,  4601123065313358619U,
 2054          4604755543975806820U,  4604325745441780828U,
 2055         13827697782296556636U,  4604755543975806820U,
 2056          4585023436363055487U,  4607177290141793710U,
 2057         13830549326996569518U,  4585023436363055487U,
 2058          4607175255902437396U,  4585907115494236537U,
 2059         13809279152349012345U,  4607175255902437396U,
 2060          4604285253548209224U,  4604793159020491611U,
 2061         13828165195875267419U,  4604285253548209224U,
 2062          4606352730697093817U,  4601223560006786057U,
 2063         13824595596861561865U,  4606352730697093817U,
 2064          4599896339047301634U,  4606627607157935956U,
 2065         13829999644012711764U,  4599896339047301634U,
 2066          4606932257325205256U,  4597600270510262682U,
 2067         13820972307365038490U,  4606932257325205256U,
 2068          4602876755014813164U,  4605858005670328613U,
 2069         13829230042525104421U,  4602876755014813164U,
 2070          4605458946901419122U,  4603473988668005304U,
 2071         13826846025522781112U,  4605458946901419122U,
 2072          4594782329999411347U,  4607072388129742377U,
 2073         13830444424984518185U,  4594782329999411347U,
 2074          4607096716058023245U,  4594126307716900071U,
 2075         13817498344571675879U,  4607096716058023245U,
 2076          4603607160562208225U,  4605360179893335444U,
 2077         13828732216748111252U,  4603607160562208225U,
 2078          4605943243960030558U,  4602734543519989142U,
 2079         13826106580374764950U,  4605943243960030558U,
 2080          4598209407597805010U,  4606891971185517504U,
 2081         13830264008040293312U,  4598209407597805010U,
 2082          4606683463531482757U,  4599584122834874440U,
 2083         13822956159689650248U,  4606683463531482757U,
 2084          4601523323048804569U,  4606281842017099424U,
 2085         13829653878871875232U,  4601523323048804569U,
 2086          4604904503566677638U,  4604162403772767740U,
 2087         13827534440627543548U,  4604904503566677638U,
 2088          4588556721781247689U,  4607167120476811757U,
 2089         13830539157331587565U,  4588556721781247689U,
 2090          4607146792632922887U,  4591066993883984169U,
 2091         13814439030738759977U,  4607146792632922887U,
 2092          4603953166845776383U,  4605084992581147553U,
 2093         13828457029435923361U,  4603953166845776383U,
 2094          4606157602458368090U,  4602016966272225497U,
 2095         13825389003127001305U,  4606157602458368090U,
 2096          4599059363095165615U,  4606770142132396069U,
 2097         13830142178987171877U,  4599059363095165615U,
 2098          4606818271362779153U,  4598742041476147134U,
 2099         13822114078330922942U,  4606818271362779153U,
 2100          4602309411551204896U,  4606079444829232727U,
 2101         13829451481684008535U,  4602309411551204896U,
 2102          4605190175055178825U,  4603825001630339212U,
 2103         13827197038485115020U,  4605190175055178825U,
 2104          4592387007752762956U,  4607130541380624519U,
 2105         13830502578235400327U,  4592387007752762956U,
 2106          4607025146816593591U,  4595871363584150300U,
 2107         13819243400438926108U,  4607025146816593591U,
 2108          4603248068256948438U,  4605618058006716661U,
 2109         13828990094861492469U,  4603248068256948438U,
 2110          4605710171610479304U,  4603110210506737381U,
 2111         13826482247361513189U,  4605710171610479304U,
 2112          4596521820799644122U,  4606992800820440327U,
 2113         13830364837675216135U,  4596521820799644122U,
 2114          4606528158595189433U,  4600411960456200676U,
 2115         13823783997310976484U,  4606528158595189433U,
 2116          4600718319105833937U,  4606464709641375231U,
 2117         13829836746496151039U,  4600718319105833937U,
 2118          4604602620643553229U,  4604485382263976838U,
 2119         13827857419118752646U,  4604602620643553229U,
 2120          4576459225186735875U,  4607182037296057423U,
 2121         13830554074150833231U,  4576459225186735875U,
 2122          4607182037296057423U,  4576459225186735875U,
 2123         13799831262041511683U,  4607182037296057423U,
 2124          4604485382263976838U,  4604602620643553229U,
 2125         13827974657498329037U,  4604485382263976838U,
 2126          4606464709641375231U,  4600718319105833937U,
 2127         13824090355960609745U,  4606464709641375231U,
 2128          4600411960456200676U,  4606528158595189433U,
 2129         13829900195449965241U,  4600411960456200676U,
 2130          4606992800820440327U,  4596521820799644122U,
 2131         13819893857654419930U,  4606992800820440327U,
 2132          4603110210506737381U,  4605710171610479304U,
 2133         13829082208465255112U,  4603110210506737381U,
 2134          4605618058006716661U,  4603248068256948438U,
 2135         13826620105111724246U,  4605618058006716661U,
 2136          4595871363584150300U,  4607025146816593591U,
 2137         13830397183671369399U,  4595871363584150300U,
 2138          4607130541380624519U,  4592387007752762956U,
 2139         13815759044607538764U,  4607130541380624519U,
 2140          4603825001630339212U,  4605190175055178825U,
 2141         13828562211909954633U,  4603825001630339212U,
 2142          4606079444829232727U,  4602309411551204896U,
 2143         13825681448405980704U,  4606079444829232727U,
 2144          4598742041476147134U,  4606818271362779153U,
 2145         13830190308217554961U,  4598742041476147134U,
 2146          4606770142132396069U,  4599059363095165615U,
 2147         13822431399949941423U,  4606770142132396069U,
 2148          4602016966272225497U,  4606157602458368090U,
 2149         13829529639313143898U,  4602016966272225497U,
 2150          4605084992581147553U,  4603953166845776383U,
 2151         13827325203700552191U,  4605084992581147553U,
 2152          4591066993883984169U,  4607146792632922887U,
 2153         13830518829487698695U,  4591066993883984169U,
 2154          4607167120476811757U,  4588556721781247689U,
 2155         13811928758636023497U,  4607167120476811757U,
 2156          4604162403772767740U,  4604904503566677638U,
 2157         13828276540421453446U,  4604162403772767740U,
 2158          4606281842017099424U,  4601523323048804569U,
 2159         13824895359903580377U,  4606281842017099424U,
 2160          4599584122834874440U,  4606683463531482757U,
 2161         13830055500386258565U,  4599584122834874440U,
 2162          4606891971185517504U,  4598209407597805010U,
 2163         13821581444452580818U,  4606891971185517504U,
 2164          4602734543519989142U,  4605943243960030558U,
 2165         13829315280814806366U,  4602734543519989142U,
 2166          4605360179893335444U,  4603607160562208225U,
 2167         13826979197416984033U,  4605360179893335444U,
 2168          4594126307716900071U,  4607096716058023245U,
 2169         13830468752912799053U,  4594126307716900071U,
 2170          4607072388129742377U,  4594782329999411347U,
 2171         13818154366854187155U,  4607072388129742377U,
 2172          4603473988668005304U,  4605458946901419122U,
 2173         13828830983756194930U,  4603473988668005304U,
 2174          4605858005670328613U,  4602876755014813164U,
 2175         13826248791869588972U,  4605858005670328613U,
 2176          4597600270510262682U,  4606932257325205256U,
 2177         13830304294179981064U,  4597600270510262682U,
 2178          4606627607157935956U,  4599896339047301634U,
 2179         13823268375902077442U,  4606627607157935956U,
 2180          4601223560006786057U,  4606352730697093817U,
 2181         13829724767551869625U,  4601223560006786057U,
 2182          4604793159020491611U,  4604285253548209224U,
 2183         13827657290402985032U,  4604793159020491611U,
 2184          4585907115494236537U,  4607175255902437396U,
 2185         13830547292757213204U,  4585907115494236537U,
 2186          4607177290141793710U,  4585023436363055487U,
 2187         13808395473217831295U,  4607177290141793710U,
 2188          4604325745441780828U,  4604755543975806820U,
 2189         13828127580830582628U,  4604325745441780828U,
 2190          4606375745674388705U,  4601123065313358619U,
 2191         13824495102168134427U,  4606375745674388705U,
 2192          4599999947619525579U,  4606608350964852124U,
 2193         13829980387819627932U,  4599999947619525579U,
 2194          4606945027305114062U,  4597385183080791534U,
 2195         13820757219935567342U,  4606945027305114062U,
 2196          4602923807199184054U,  4605829012964735987U,
 2197         13829201049819511795U,  4602923807199184054U,
 2198          4605491322423429598U,  4603429196809300824U,
 2199         13826801233664076632U,  4605491322423429598U,
 2200          4595000592312171144U,  4607063608453868552U,
 2201         13830435645308644360U,  4595000592312171144U,
 2202          4607104153983298999U,  4593907249284540294U,
 2203         13817279286139316102U,  4607104153983298999U,
 2204          4603651144395358093U,  4605326714874986465U,
 2205         13828698751729762273U,  4603651144395358093U,
 2206          4605971073215153165U,  4602686793990243041U,
 2207         13826058830845018849U,  4605971073215153165U,
 2208          4598316292140394014U,  4606877885424248132U,
 2209         13830249922279023940U,  4598316292140394014U,
 2210          4606701442584137310U,  4599479600326345459U,
 2211         13822851637181121267U,  4606701442584137310U,
 2212          4601622657843474729U,  4606257600839867033U,
 2213         13829629637694642841U,  4601622657843474729U,
 2214          4604941113561600762U,  4604121000955189926U,
 2215         13827493037809965734U,  4604941113561600762U,
 2216          4589303678145802340U,  4607163731439411601U,
 2217         13830535768294187409U,  4589303678145802340U,
 2218          4607151534426937478U,  4590626485056654602U,
 2219         13813998521911430410U,  4607151534426937478U,
 2220          4603995455647851249U,  4605049409688478101U,
 2221         13828421446543253909U,  4603995455647851249U,
 2222          4606183055233559255U,  4601918851211878557U,
 2223         13825290888066654365U,  4606183055233559255U,
 2224          4599164736579548843U,  4606753451050079834U,
 2225         13830125487904855642U,  4599164736579548843U,
 2226          4606833664420673202U,  4598635880488956483U,
 2227         13822007917343732291U,  4606833664420673202U,
 2228          4602406247776385022U,  4606052795787882823U,
 2229         13829424832642658631U,  4602406247776385022U,
 2230          4605224709411790590U,  4603781852316960384U,
 2231         13827153889171736192U,  4605224709411790590U,
 2232          4592826452951465409U,  4607124449686274900U,
 2233         13830496486541050708U,  4592826452951465409U,
 2234          4607035262954517034U,  4595654028864046335U,
 2235         13819026065718822143U,  4607035262954517034U,
 2236          4603293641160266722U,  4605586791482848547U,
 2237         13828958828337624355U,  4603293641160266722U,
 2238          4605740310302420207U,  4603063884010218172U,
 2239         13826435920864993980U,  4605740310302420207U,
 2240          4596738097012783531U,  4606981354314050484U,
 2241         13830353391168826292U,  4596738097012783531U,
 2242          4606548680329491866U,  4600309328230211502U,
 2243         13823681365084987310U,  4606548680329491866U,
 2244          4600819913163773071U,  4606442934727379583U,
 2245         13829814971582155391U,  4600819913163773071U,
 2246          4604641218080103285U,  4604445825685214043U,
 2247         13827817862539989851U,  4604641218080103285U,
 2248          4579996072175835083U,  4607181359080094673U,
 2249         13830553395934870481U,  4579996072175835083U,
 2250          4607180341788068727U,  4581846703643734566U,
 2251         13805218740498510374U,  4607180341788068727U,
 2252          4604406033021674239U,  4604679572075463103U,
 2253         13828051608930238911U,  4604406033021674239U,
 2254          4606420848538580260U,  4600921238092511730U,
 2255         13824293274947287538U,  4606420848538580260U,
 2256          4600206446098256018U,  4606568886807728474U,
 2257         13829940923662504282U,  4600206446098256018U,
 2258          4606969576261663845U,  4596954088216812973U,
 2259         13820326125071588781U,  4606969576261663845U,
 2260          4603017373458244943U,  4605770164172969910U,
 2261         13829142201027745718U,  4603017373458244943U,
 2262          4605555245917486022U,  4603339021357904144U,
 2263         13826711058212679952U,  4605555245917486022U,
 2264          4595436449949385485U,  4607045045516813836U,
 2265         13830417082371589644U,  4595436449949385485U,
 2266          4607118021058468598U,  4593265590854265407U,
 2267         13816637627709041215U,  4607118021058468598U,
 2268          4603738491917026584U,  4605258978359093269U,
 2269         13828631015213869077U,  4603738491917026584U,
 2270          4606025850160239809U,  4602502755147763107U,
 2271         13825874792002538915U,  4606025850160239809U,
 2272          4598529532600161144U,  4606848731493011465U,
 2273         13830220768347787273U,  4598529532600161144U,
 2274          4606736437002195879U,  4599269903251194481U,
 2275         13822641940105970289U,  4606736437002195879U,
 2276          4601820425647934753U,  4606208206518262803U,
 2277         13829580243373038611U,  4601820425647934753U,
 2278          4605013567986435066U,  4604037525321326463U,
 2279         13827409562176102271U,  4605013567986435066U,
 2280          4590185751760970393U,  4607155938267770208U,
 2281         13830527975122546016U,  4590185751760970393U,
 2282          4607160003989618959U,  4589744810590291021U,
 2283         13813116847445066829U,  4607160003989618959U,
 2284          4604079374282302598U,  4604977468824438271U,
 2285         13828349505679214079U,  4604079374282302598U,
 2286          4606233055365547081U,  4601721693286060937U,
 2287         13825093730140836745U,  4606233055365547081U,
 2288          4599374859150636784U,  4606719100629313491U,
 2289         13830091137484089299U,  4599374859150636784U,
 2290          4606863472012527185U,  4598423001813699022U,
 2291         13821795038668474830U,  4606863472012527185U,
 2292          4602598930031891166U,  4605998608960791335U,
 2293         13829370645815567143U,  4602598930031891166U,
 2294          4605292980606880364U,  4603694922063032361U,
 2295         13827066958917808169U,  4605292980606880364U,
 2296          4593688012422887515U,  4607111255739239816U,
 2297         13830483292594015624U,  4593688012422887515U,
 2298          4607054494135176056U,  4595218635031890910U,
 2299         13818590671886666718U,  4607054494135176056U,
 2300          4603384207141321914U,  4605523422498301790U,
 2301         13828895459353077598U,  4603384207141321914U,
 2302          4605799732098147061U,  4602970680601913687U,
 2303         13826342717456689495U,  4605799732098147061U,
 2304          4597169786279785693U,  4606957467106717424U,
 2305         13830329503961493232U,  4597169786279785693U,
 2306          4606588777269136769U,  4600103317933788342U,
 2307         13823475354788564150U,  4606588777269136769U,
 2308          4601022290077223616U,  4606398451906509788U,
 2309         13829770488761285596U,  4601022290077223616U,
 2310          4604717681185626434U,  4604366005771528720U,
 2311         13827738042626304528U,  4604717681185626434U,
 2312          4583614727651146525U,  4607178985458280057U,
 2313         13830551022313055865U,  4583614727651146525U,
 2314          4607172882816799076U,  4586790578280679046U,
 2315         13810162615135454854U,  4607172882816799076U,
 2316          4604244531615310815U,  4604830524903495634U,
 2317         13828202561758271442U,  4604244531615310815U,
 2318          4606329407841126011U,  4601323770373937522U,
 2319         13824695807228713330U,  4606329407841126011U,
 2320          4599792496117920694U,  4606646545123403481U,
 2321         13830018581978179289U,  4599792496117920694U,
 2322          4606919157647773535U,  4597815040470278984U,
 2323         13821187077325054792U,  4606919157647773535U,
 2324          4602829525820289164U,  4605886709123365959U,
 2325         13829258745978141767U,  4602829525820289164U,
 2326          4605426297151190466U,  4603518581031047189U,
 2327         13826890617885822997U,  4605426297151190466U,
 2328          4594563856311064231U,  4607080832832247697U,
 2329         13830452869687023505U,  4594563856311064231U,
 2330          4607088942243446236U,  4594345179472540681U,
 2331         13817717216327316489U,  4607088942243446236U,
 2332          4603562972219549215U,  4605393374401988274U,
 2333         13828765411256764082U,  4603562972219549215U,
 2334          4605915122243179241U,  4602782121393764535U,
 2335         13826154158248540343U,  4605915122243179241U,
 2336          4598029484874872834U,  4606905728766014348U,
 2337         13830277765620790156U,  4598029484874872834U,
 2338          4606665164148251002U,  4599688422741010356U,
 2339         13823060459595786164U,  4606665164148251002U,
 2340          4601423692641949331U,  4606305777984577632U,
 2341         13829677814839353440U,  4601423692641949331U,
 2342          4604867640218014515U,  4604203581176243359U,
 2343         13827575618031019167U,  4604867640218014515U,
 2344          4587673791460508439U,  4607170170974224083U,
 2345         13830542207828999891U,  4587673791460508439U,
 2346          4607141713064252300U,  4591507261658050721U,
 2347         13814879298512826529U,  4607141713064252300U,
 2348          4603910660507251362U,  4605120315324767624U,
 2349         13828492352179543432U,  4603910660507251362U,
 2350          4606131849150971908U,  4602114767134999006U,
 2351         13825486803989774814U,  4606131849150971908U,
 2352          4598953786765296928U,  4606786509620734768U,
 2353         13830158546475510576U,  4598953786765296928U,
 2354          4606802552898869248U,  4598848011564831930U,
 2355         13822220048419607738U,  4606802552898869248U,
 2356          4602212250118051877U,  4606105796280968177U,
 2357         13829477833135743985U,  4602212250118051877U,
 2358          4605155376589456981U,  4603867938232615808U,
 2359         13827239975087391616U,  4605155376589456981U,
 2360          4591947271803021404U,  4607136295912168606U,
 2361         13830508332766944414U,  4591947271803021404U,
 2362          4607014697483910382U,  4596088445927168004U,
 2363         13819460482781943812U,  4607014697483910382U,
 2364          4603202304363743346U,  4605649044311923410U,
 2365         13829021081166699218U,  4603202304363743346U,
 2366          4605679749231851918U,  4603156351203636159U,
 2367         13826528388058411967U,  4605679749231851918U,
 2368          4596305267720071930U,  4607003915349878877U,
 2369         13830375952204654685U,  4596305267720071930U,
 2370          4606507322377452870U,  4600514338912178239U,
 2371         13823886375766954047U,  4606507322377452870U,
 2372          4600616459743653188U,  4606486172460753999U,
 2373         13829858209315529807U,  4600616459743653188U,
 2374          4604563781218984604U,  4604524701268679793U,
 2375         13827896738123455601U,  4604563781218984604U,
 2376          4569220649180767418U,  4607182376410422530U,
 2377         13830554413265198338U,  4569220649180767418U
 2378 };
 2379 
 2380 const fpr fpr_p2_tab[] = {
 2381         4611686018427387904U,
 2382         4607182418800017408U,
 2383         4602678819172646912U,
 2384         4598175219545276416U,
 2385         4593671619917905920U,
 2386         4589168020290535424U,
 2387         4584664420663164928U,
 2388         4580160821035794432U,
 2389         4575657221408423936U,
 2390         4571153621781053440U,
 2391         4566650022153682944U
 2392 };
 2393 
 2394 #elif FALCON_FPNATIVE // yyyFPEMU+0 yyyFPNATIVE+1
 2395 
 2396 const fpr fpr_gm_tab[] = {
 2397         {0}, {0}, /* unused */
 2398         {-0.000000000000000000000000000}, { 1.000000000000000000000000000},
 2399         { 0.707106781186547524400844362}, { 0.707106781186547524400844362},
 2400         {-0.707106781186547524400844362}, { 0.707106781186547524400844362},
 2401         { 0.923879532511286756128183189}, { 0.382683432365089771728459984},
 2402         {-0.382683432365089771728459984}, { 0.923879532511286756128183189},
 2403         { 0.382683432365089771728459984}, { 0.923879532511286756128183189},
 2404         {-0.923879532511286756128183189}, { 0.382683432365089771728459984},
 2405         { 0.980785280403230449126182236}, { 0.195090322016128267848284868},
 2406         {-0.195090322016128267848284868}, { 0.980785280403230449126182236},
 2407         { 0.555570233019602224742830814}, { 0.831469612302545237078788378},
 2408         {-0.831469612302545237078788378}, { 0.555570233019602224742830814},
 2409         { 0.831469612302545237078788378}, { 0.555570233019602224742830814},
 2410         {-0.555570233019602224742830814}, { 0.831469612302545237078788378},
 2411         { 0.195090322016128267848284868}, { 0.980785280403230449126182236},
 2412         {-0.980785280403230449126182236}, { 0.195090322016128267848284868},
 2413         { 0.995184726672196886244836953}, { 0.098017140329560601994195564},
 2414         {-0.098017140329560601994195564}, { 0.995184726672196886244836953},
 2415         { 0.634393284163645498215171613}, { 0.773010453362736960810906610},
 2416         {-0.773010453362736960810906610}, { 0.634393284163645498215171613},
 2417         { 0.881921264348355029712756864}, { 0.471396736825997648556387626},
 2418         {-0.471396736825997648556387626}, { 0.881921264348355029712756864},
 2419         { 0.290284677254462367636192376}, { 0.956940335732208864935797887},
 2420         {-0.956940335732208864935797887}, { 0.290284677254462367636192376},
 2421         { 0.956940335732208864935797887}, { 0.290284677254462367636192376},
 2422         {-0.290284677254462367636192376}, { 0.956940335732208864935797887},
 2423         { 0.471396736825997648556387626}, { 0.881921264348355029712756864},
 2424         {-0.881921264348355029712756864}, { 0.471396736825997648556387626},
 2425         { 0.773010453362736960810906610}, { 0.634393284163645498215171613},
 2426         {-0.634393284163645498215171613}, { 0.773010453362736960810906610},
 2427         { 0.098017140329560601994195564}, { 0.995184726672196886244836953},
 2428         {-0.995184726672196886244836953}, { 0.098017140329560601994195564},
 2429         { 0.998795456205172392714771605}, { 0.049067674327418014254954977},
 2430         {-0.049067674327418014254954977}, { 0.998795456205172392714771605},
 2431         { 0.671558954847018400625376850}, { 0.740951125354959091175616897},
 2432         {-0.740951125354959091175616897}, { 0.671558954847018400625376850},
 2433         { 0.903989293123443331586200297}, { 0.427555093430282094320966857},
 2434         {-0.427555093430282094320966857}, { 0.903989293123443331586200297},
 2435         { 0.336889853392220050689253213}, { 0.941544065183020778412509403},
 2436         {-0.941544065183020778412509403}, { 0.336889853392220050689253213},
 2437         { 0.970031253194543992603984207}, { 0.242980179903263889948274162},
 2438         {-0.242980179903263889948274162}, { 0.970031253194543992603984207},
 2439         { 0.514102744193221726593693839}, { 0.857728610000272069902269984},
 2440         {-0.857728610000272069902269984}, { 0.514102744193221726593693839},
 2441         { 0.803207531480644909806676513}, { 0.595699304492433343467036529},
 2442         {-0.595699304492433343467036529}, { 0.803207531480644909806676513},
 2443         { 0.146730474455361751658850130}, { 0.989176509964780973451673738},
 2444         {-0.989176509964780973451673738}, { 0.146730474455361751658850130},
 2445         { 0.989176509964780973451673738}, { 0.146730474455361751658850130},
 2446         {-0.146730474455361751658850130}, { 0.989176509964780973451673738},
 2447         { 0.595699304492433343467036529}, { 0.803207531480644909806676513},
 2448         {-0.803207531480644909806676513}, { 0.595699304492433343467036529},
 2449         { 0.857728610000272069902269984}, { 0.514102744193221726593693839},
 2450         {-0.514102744193221726593693839}, { 0.857728610000272069902269984},
 2451         { 0.242980179903263889948274162}, { 0.970031253194543992603984207},
 2452         {-0.970031253194543992603984207}, { 0.242980179903263889948274162},
 2453         { 0.941544065183020778412509403}, { 0.336889853392220050689253213},
 2454         {-0.336889853392220050689253213}, { 0.941544065183020778412509403},
 2455         { 0.427555093430282094320966857}, { 0.903989293123443331586200297},
 2456         {-0.903989293123443331586200297}, { 0.427555093430282094320966857},
 2457         { 0.740951125354959091175616897}, { 0.671558954847018400625376850},
 2458         {-0.671558954847018400625376850}, { 0.740951125354959091175616897},
 2459         { 0.049067674327418014254954977}, { 0.998795456205172392714771605},
 2460         {-0.998795456205172392714771605}, { 0.049067674327418014254954977},
 2461         { 0.999698818696204220115765650}, { 0.024541228522912288031734529},
 2462         {-0.024541228522912288031734529}, { 0.999698818696204220115765650},
 2463         { 0.689540544737066924616730630}, { 0.724247082951466920941069243},
 2464         {-0.724247082951466920941069243}, { 0.689540544737066924616730630},
 2465         { 0.914209755703530654635014829}, { 0.405241314004989870908481306},
 2466         {-0.405241314004989870908481306}, { 0.914209755703530654635014829},
 2467         { 0.359895036534988148775104572}, { 0.932992798834738887711660256},
 2468         {-0.932992798834738887711660256}, { 0.359895036534988148775104572},
 2469         { 0.975702130038528544460395766}, { 0.219101240156869797227737547},
 2470         {-0.219101240156869797227737547}, { 0.975702130038528544460395766},
 2471         { 0.534997619887097210663076905}, { 0.844853565249707073259571205},
 2472         {-0.844853565249707073259571205}, { 0.534997619887097210663076905},
 2473         { 0.817584813151583696504920884}, { 0.575808191417845300745972454},
 2474         {-0.575808191417845300745972454}, { 0.817584813151583696504920884},
 2475         { 0.170961888760301226363642357}, { 0.985277642388941244774018433},
 2476         {-0.985277642388941244774018433}, { 0.170961888760301226363642357},
 2477         { 0.992479534598709998156767252}, { 0.122410675199216198498704474},
 2478         {-0.122410675199216198498704474}, { 0.992479534598709998156767252},
 2479         { 0.615231590580626845484913563}, { 0.788346427626606262009164705},
 2480         {-0.788346427626606262009164705}, { 0.615231590580626845484913563},
 2481         { 0.870086991108711418652292404}, { 0.492898192229784036873026689},
 2482         {-0.492898192229784036873026689}, { 0.870086991108711418652292404},
 2483         { 0.266712757474898386325286515}, { 0.963776065795439866686464356},
 2484         {-0.963776065795439866686464356}, { 0.266712757474898386325286515},
 2485         { 0.949528180593036667195936074}, { 0.313681740398891476656478846},
 2486         {-0.313681740398891476656478846}, { 0.949528180593036667195936074},
 2487         { 0.449611329654606600046294579}, { 0.893224301195515320342416447},
 2488         {-0.893224301195515320342416447}, { 0.449611329654606600046294579},
 2489         { 0.757208846506484547575464054}, { 0.653172842953776764084203014},
 2490         {-0.653172842953776764084203014}, { 0.757208846506484547575464054},
 2491         { 0.073564563599667423529465622}, { 0.997290456678690216135597140},
 2492         {-0.997290456678690216135597140}, { 0.073564563599667423529465622},
 2493         { 0.997290456678690216135597140}, { 0.073564563599667423529465622},
 2494         {-0.073564563599667423529465622}, { 0.997290456678690216135597140},
 2495         { 0.653172842953776764084203014}, { 0.757208846506484547575464054},
 2496         {-0.757208846506484547575464054}, { 0.653172842953776764084203014},
 2497         { 0.893224301195515320342416447}, { 0.449611329654606600046294579},
 2498         {-0.449611329654606600046294579}, { 0.893224301195515320342416447},
 2499         { 0.313681740398891476656478846}, { 0.949528180593036667195936074},
 2500         {-0.949528180593036667195936074}, { 0.313681740398891476656478846},
 2501         { 0.963776065795439866686464356}, { 0.266712757474898386325286515},
 2502         {-0.266712757474898386325286515}, { 0.963776065795439866686464356},
 2503         { 0.492898192229784036873026689}, { 0.870086991108711418652292404},
 2504         {-0.870086991108711418652292404}, { 0.492898192229784036873026689},
 2505         { 0.788346427626606262009164705}, { 0.615231590580626845484913563},
 2506         {-0.615231590580626845484913563}, { 0.788346427626606262009164705},
 2507         { 0.122410675199216198498704474}, { 0.992479534598709998156767252},
 2508         {-0.992479534598709998156767252}, { 0.122410675199216198498704474},
 2509         { 0.985277642388941244774018433}, { 0.170961888760301226363642357},
 2510         {-0.170961888760301226363642357}, { 0.985277642388941244774018433},
 2511         { 0.575808191417845300745972454}, { 0.817584813151583696504920884},
 2512         {-0.817584813151583696504920884}, { 0.575808191417845300745972454},
 2513         { 0.844853565249707073259571205}, { 0.534997619887097210663076905},
 2514         {-0.534997619887097210663076905}, { 0.844853565249707073259571205},
 2515         { 0.219101240156869797227737547}, { 0.975702130038528544460395766},
 2516         {-0.975702130038528544460395766}, { 0.219101240156869797227737547},
 2517         { 0.932992798834738887711660256}, { 0.359895036534988148775104572},
 2518         {-0.359895036534988148775104572}, { 0.932992798834738887711660256},
 2519         { 0.405241314004989870908481306}, { 0.914209755703530654635014829},
 2520         {-0.914209755703530654635014829}, { 0.405241314004989870908481306},
 2521         { 0.724247082951466920941069243}, { 0.689540544737066924616730630},
 2522         {-0.689540544737066924616730630}, { 0.724247082951466920941069243},
 2523         { 0.024541228522912288031734529}, { 0.999698818696204220115765650},
 2524         {-0.999698818696204220115765650}, { 0.024541228522912288031734529},
 2525         { 0.999924701839144540921646491}, { 0.012271538285719926079408262},
 2526         {-0.012271538285719926079408262}, { 0.999924701839144540921646491},
 2527         { 0.698376249408972853554813503}, { 0.715730825283818654125532623},
 2528         {-0.715730825283818654125532623}, { 0.698376249408972853554813503},
 2529         { 0.919113851690057743908477789}, { 0.393992040061048108596188661},
 2530         {-0.393992040061048108596188661}, { 0.919113851690057743908477789},
 2531         { 0.371317193951837543411934967}, { 0.928506080473215565937167396},
 2532         {-0.928506080473215565937167396}, { 0.371317193951837543411934967},
 2533         { 0.978317370719627633106240097}, { 0.207111376192218549708116020},
 2534         {-0.207111376192218549708116020}, { 0.978317370719627633106240097},
 2535         { 0.545324988422046422313987347}, { 0.838224705554838043186996856},
 2536         {-0.838224705554838043186996856}, { 0.545324988422046422313987347},
 2537         { 0.824589302785025264474803737}, { 0.565731810783613197389765011},
 2538         {-0.565731810783613197389765011}, { 0.824589302785025264474803737},
 2539         { 0.183039887955140958516532578}, { 0.983105487431216327180301155},
 2540         {-0.983105487431216327180301155}, { 0.183039887955140958516532578},
 2541         { 0.993906970002356041546922813}, { 0.110222207293883058807899140},
 2542         {-0.110222207293883058807899140}, { 0.993906970002356041546922813},
 2543         { 0.624859488142386377084072816}, { 0.780737228572094478301588484},
 2544         {-0.780737228572094478301588484}, { 0.624859488142386377084072816},
 2545         { 0.876070094195406607095844268}, { 0.482183772079122748517344481},
 2546         {-0.482183772079122748517344481}, { 0.876070094195406607095844268},
 2547         { 0.278519689385053105207848526}, { 0.960430519415565811199035138},
 2548         {-0.960430519415565811199035138}, { 0.278519689385053105207848526},
 2549         { 0.953306040354193836916740383}, { 0.302005949319228067003463232},
 2550         {-0.302005949319228067003463232}, { 0.953306040354193836916740383},
 2551         { 0.460538710958240023633181487}, { 0.887639620402853947760181617},
 2552         {-0.887639620402853947760181617}, { 0.460538710958240023633181487},
 2553         { 0.765167265622458925888815999}, { 0.643831542889791465068086063},
 2554         {-0.643831542889791465068086063}, { 0.765167265622458925888815999},
 2555         { 0.085797312344439890461556332}, { 0.996312612182778012627226190},
 2556         {-0.996312612182778012627226190}, { 0.085797312344439890461556332},
 2557         { 0.998118112900149207125155861}, { 0.061320736302208577782614593},
 2558         {-0.061320736302208577782614593}, { 0.998118112900149207125155861},
 2559         { 0.662415777590171761113069817}, { 0.749136394523459325469203257},
 2560         {-0.749136394523459325469203257}, { 0.662415777590171761113069817},
 2561         { 0.898674465693953843041976744}, { 0.438616238538527637647025738},
 2562         {-0.438616238538527637647025738}, { 0.898674465693953843041976744},
 2563         { 0.325310292162262934135954708}, { 0.945607325380521325730945387},
 2564         {-0.945607325380521325730945387}, { 0.325310292162262934135954708},
 2565         { 0.966976471044852109087220226}, { 0.254865659604514571553980779},
 2566         {-0.254865659604514571553980779}, { 0.966976471044852109087220226},
 2567         { 0.503538383725717558691867071}, { 0.863972856121586737918147054},
 2568         {-0.863972856121586737918147054}, { 0.503538383725717558691867071},
 2569         { 0.795836904608883536262791915}, { 0.605511041404325513920626941},
 2570         {-0.605511041404325513920626941}, { 0.795836904608883536262791915},
 2571         { 0.134580708507126186316358409}, { 0.990902635427780025108237011},
 2572         {-0.990902635427780025108237011}, { 0.134580708507126186316358409},
 2573         { 0.987301418157858382399815802}, { 0.158858143333861441684385360},
 2574         {-0.158858143333861441684385360}, { 0.987301418157858382399815802},
 2575         { 0.585797857456438860328080838}, { 0.810457198252594791726703434},
 2576         {-0.810457198252594791726703434}, { 0.585797857456438860328080838},
 2577         { 0.851355193105265142261290312}, { 0.524589682678468906215098464},
 2578         {-0.524589682678468906215098464}, { 0.851355193105265142261290312},
 2579         { 0.231058108280671119643236018}, { 0.972939952205560145467720114},
 2580         {-0.972939952205560145467720114}, { 0.231058108280671119643236018},
 2581         { 0.937339011912574923201899593}, { 0.348418680249434568419308588},
 2582         {-0.348418680249434568419308588}, { 0.937339011912574923201899593},
 2583         { 0.416429560097637182562598911}, { 0.909167983090522376563884788},
 2584         {-0.909167983090522376563884788}, { 0.416429560097637182562598911},
 2585         { 0.732654271672412834615546649}, { 0.680600997795453050594430464},
 2586         {-0.680600997795453050594430464}, { 0.732654271672412834615546649},
 2587         { 0.036807222941358832324332691}, { 0.999322384588349500896221011},
 2588         {-0.999322384588349500896221011}, { 0.036807222941358832324332691},
 2589         { 0.999322384588349500896221011}, { 0.036807222941358832324332691},
 2590         {-0.036807222941358832324332691}, { 0.999322384588349500896221011},
 2591         { 0.680600997795453050594430464}, { 0.732654271672412834615546649},
 2592         {-0.732654271672412834615546649}, { 0.680600997795453050594430464},
 2593         { 0.909167983090522376563884788}, { 0.416429560097637182562598911},
 2594         {-0.416429560097637182562598911}, { 0.909167983090522376563884788},
 2595         { 0.348418680249434568419308588}, { 0.937339011912574923201899593},
 2596         {-0.937339011912574923201899593}, { 0.348418680249434568419308588},
 2597         { 0.972939952205560145467720114}, { 0.231058108280671119643236018},
 2598         {-0.231058108280671119643236018}, { 0.972939952205560145467720114},
 2599         { 0.524589682678468906215098464}, { 0.851355193105265142261290312},
 2600         {-0.851355193105265142261290312}, { 0.524589682678468906215098464},
 2601         { 0.810457198252594791726703434}, { 0.585797857456438860328080838},
 2602         {-0.585797857456438860328080838}, { 0.810457198252594791726703434},
 2603         { 0.158858143333861441684385360}, { 0.987301418157858382399815802},
 2604         {-0.987301418157858382399815802}, { 0.158858143333861441684385360},
 2605         { 0.990902635427780025108237011}, { 0.134580708507126186316358409},
 2606         {-0.134580708507126186316358409}, { 0.990902635427780025108237011},
 2607         { 0.605511041404325513920626941}, { 0.795836904608883536262791915},
 2608         {-0.795836904608883536262791915}, { 0.605511041404325513920626941},
 2609         { 0.863972856121586737918147054}, { 0.503538383725717558691867071},
 2610         {-0.503538383725717558691867071}, { 0.863972856121586737918147054},
 2611         { 0.254865659604514571553980779}, { 0.966976471044852109087220226},
 2612         {-0.966976471044852109087220226}, { 0.254865659604514571553980779},
 2613         { 0.945607325380521325730945387}, { 0.325310292162262934135954708},
 2614         {-0.325310292162262934135954708}, { 0.945607325380521325730945387},
 2615         { 0.438616238538527637647025738}, { 0.898674465693953843041976744},
 2616         {-0.898674465693953843041976744}, { 0.438616238538527637647025738},
 2617         { 0.749136394523459325469203257}, { 0.662415777590171761113069817},
 2618         {-0.662415777590171761113069817}, { 0.749136394523459325469203257},
 2619         { 0.061320736302208577782614593}, { 0.998118112900149207125155861},
 2620         {-0.998118112900149207125155861}, { 0.061320736302208577782614593},
 2621         { 0.996312612182778012627226190}, { 0.085797312344439890461556332},
 2622         {-0.085797312344439890461556332}, { 0.996312612182778012627226190},
 2623         { 0.643831542889791465068086063}, { 0.765167265622458925888815999},
 2624         {-0.765167265622458925888815999}, { 0.643831542889791465068086063},
 2625         { 0.887639620402853947760181617}, { 0.460538710958240023633181487},
 2626         {-0.460538710958240023633181487}, { 0.887639620402853947760181617},
 2627         { 0.302005949319228067003463232}, { 0.953306040354193836916740383},
 2628         {-0.953306040354193836916740383}, { 0.302005949319228067003463232},
 2629         { 0.960430519415565811199035138}, { 0.278519689385053105207848526},
 2630         {-0.278519689385053105207848526}, { 0.960430519415565811199035138},
 2631         { 0.482183772079122748517344481}, { 0.876070094195406607095844268},
 2632         {-0.876070094195406607095844268}, { 0.482183772079122748517344481},
 2633         { 0.780737228572094478301588484}, { 0.624859488142386377084072816},
 2634         {-0.624859488142386377084072816}, { 0.780737228572094478301588484},
 2635         { 0.110222207293883058807899140}, { 0.993906970002356041546922813},
 2636         {-0.993906970002356041546922813}, { 0.110222207293883058807899140},
 2637         { 0.983105487431216327180301155}, { 0.183039887955140958516532578},
 2638         {-0.183039887955140958516532578}, { 0.983105487431216327180301155},
 2639         { 0.565731810783613197389765011}, { 0.824589302785025264474803737},
 2640         {-0.824589302785025264474803737}, { 0.565731810783613197389765011},
 2641         { 0.838224705554838043186996856}, { 0.545324988422046422313987347},
 2642         {-0.545324988422046422313987347}, { 0.838224705554838043186996856},
 2643         { 0.207111376192218549708116020}, { 0.978317370719627633106240097},
 2644         {-0.978317370719627633106240097}, { 0.207111376192218549708116020},
 2645         { 0.928506080473215565937167396}, { 0.371317193951837543411934967},
 2646         {-0.371317193951837543411934967}, { 0.928506080473215565937167396},
 2647         { 0.393992040061048108596188661}, { 0.919113851690057743908477789},
 2648         {-0.919113851690057743908477789}, { 0.393992040061048108596188661},
 2649         { 0.715730825283818654125532623}, { 0.698376249408972853554813503},
 2650         {-0.698376249408972853554813503}, { 0.715730825283818654125532623},
 2651         { 0.012271538285719926079408262}, { 0.999924701839144540921646491},
 2652         {-0.999924701839144540921646491}, { 0.012271538285719926079408262},
 2653         { 0.999981175282601142656990438}, { 0.006135884649154475359640235},
 2654         {-0.006135884649154475359640235}, { 0.999981175282601142656990438},
 2655         { 0.702754744457225302452914421}, { 0.711432195745216441522130290},
 2656         {-0.711432195745216441522130290}, { 0.702754744457225302452914421},
 2657         { 0.921514039342041943465396332}, { 0.388345046698826291624993541},
 2658         {-0.388345046698826291624993541}, { 0.921514039342041943465396332},
 2659         { 0.377007410216418256726567823}, { 0.926210242138311341974793388},
 2660         {-0.926210242138311341974793388}, { 0.377007410216418256726567823},
 2661         { 0.979569765685440534439326110}, { 0.201104634842091911558443546},
 2662         {-0.201104634842091911558443546}, { 0.979569765685440534439326110},
 2663         { 0.550457972936604802977289893}, { 0.834862874986380056304401383},
 2664         {-0.834862874986380056304401383}, { 0.550457972936604802977289893},
 2665         { 0.828045045257755752067527592}, { 0.560661576197336023839710223},
 2666         {-0.560661576197336023839710223}, { 0.828045045257755752067527592},
 2667         { 0.189068664149806212754997837}, { 0.981963869109555264072848154},
 2668         {-0.981963869109555264072848154}, { 0.189068664149806212754997837},
 2669         { 0.994564570734255452119106243}, { 0.104121633872054579120943880},
 2670         {-0.104121633872054579120943880}, { 0.994564570734255452119106243},
 2671         { 0.629638238914927025372981341}, { 0.776888465673232450040827983},
 2672         {-0.776888465673232450040827983}, { 0.629638238914927025372981341},
 2673         { 0.879012226428633477831323711}, { 0.476799230063322133342158117},
 2674         {-0.476799230063322133342158117}, { 0.879012226428633477831323711},
 2675         { 0.284407537211271843618310615}, { 0.958703474895871555374645792},
 2676         {-0.958703474895871555374645792}, { 0.284407537211271843618310615},
 2677         { 0.955141168305770721498157712}, { 0.296150888243623824121786128},
 2678         {-0.296150888243623824121786128}, { 0.955141168305770721498157712},
 2679         { 0.465976495767966177902756065}, { 0.884797098430937780104007041},
 2680         {-0.884797098430937780104007041}, { 0.465976495767966177902756065},
 2681         { 0.769103337645579639346626069}, { 0.639124444863775743801488193},
 2682         {-0.639124444863775743801488193}, { 0.769103337645579639346626069},
 2683         { 0.091908956497132728624990979}, { 0.995767414467659793982495643},
 2684         {-0.995767414467659793982495643}, { 0.091908956497132728624990979},
 2685         { 0.998475580573294752208559038}, { 0.055195244349689939809447526},
 2686         {-0.055195244349689939809447526}, { 0.998475580573294752208559038},
 2687         { 0.666999922303637506650154222}, { 0.745057785441465962407907310},
 2688         {-0.745057785441465962407907310}, { 0.666999922303637506650154222},
 2689         { 0.901348847046022014570746093}, { 0.433093818853151968484222638},
 2690         {-0.433093818853151968484222638}, { 0.901348847046022014570746093},
 2691         { 0.331106305759876401737190737}, { 0.943593458161960361495301445},
 2692         {-0.943593458161960361495301445}, { 0.331106305759876401737190737},
 2693         { 0.968522094274417316221088329}, { 0.248927605745720168110682816},
 2694         {-0.248927605745720168110682816}, { 0.968522094274417316221088329},
 2695         { 0.508830142543107036931749324}, { 0.860866938637767279344583877},
 2696         {-0.860866938637767279344583877}, { 0.508830142543107036931749324},
 2697         { 0.799537269107905033500246232}, { 0.600616479383868926653875896},
 2698         {-0.600616479383868926653875896}, { 0.799537269107905033500246232},
 2699         { 0.140658239332849230714788846}, { 0.990058210262297105505906464},
 2700         {-0.990058210262297105505906464}, { 0.140658239332849230714788846},
 2701         { 0.988257567730749491404792538}, { 0.152797185258443427720336613},
 2702         {-0.152797185258443427720336613}, { 0.988257567730749491404792538},
 2703         { 0.590759701858874228423887908}, { 0.806847553543799272206514313},
 2704         {-0.806847553543799272206514313}, { 0.590759701858874228423887908},
 2705         { 0.854557988365400520767862276}, { 0.519355990165589587361829932},
 2706         {-0.519355990165589587361829932}, { 0.854557988365400520767862276},
 2707         { 0.237023605994367206867735915}, { 0.971503890986251775537099622},
 2708         {-0.971503890986251775537099622}, { 0.237023605994367206867735915},
 2709         { 0.939459223602189911962669246}, { 0.342660717311994397592781983},
 2710         {-0.342660717311994397592781983}, { 0.939459223602189911962669246},
 2711         { 0.422000270799799685941287941}, { 0.906595704514915365332960588},
 2712         {-0.906595704514915365332960588}, { 0.422000270799799685941287941},
 2713         { 0.736816568877369875090132520}, { 0.676092703575315960360419228},
 2714         {-0.676092703575315960360419228}, { 0.736816568877369875090132520},
 2715         { 0.042938256934940823077124540}, { 0.999077727752645382888781997},
 2716         {-0.999077727752645382888781997}, { 0.042938256934940823077124540},
 2717         { 0.999529417501093163079703322}, { 0.030674803176636625934021028},
 2718         {-0.030674803176636625934021028}, { 0.999529417501093163079703322},
 2719         { 0.685083667772700381362052545}, { 0.728464390448225196492035438},
 2720         {-0.728464390448225196492035438}, { 0.685083667772700381362052545},
 2721         { 0.911706032005429851404397325}, { 0.410843171057903942183466675},
 2722         {-0.410843171057903942183466675}, { 0.911706032005429851404397325},
 2723         { 0.354163525420490382357395796}, { 0.935183509938947577642207480},
 2724         {-0.935183509938947577642207480}, { 0.354163525420490382357395796},
 2725         { 0.974339382785575860518721668}, { 0.225083911359792835991642120},
 2726         {-0.225083911359792835991642120}, { 0.974339382785575860518721668},
 2727         { 0.529803624686294668216054671}, { 0.848120344803297251279133563},
 2728         {-0.848120344803297251279133563}, { 0.529803624686294668216054671},
 2729         { 0.814036329705948361654516690}, { 0.580813958095764545075595272},
 2730         {-0.580813958095764545075595272}, { 0.814036329705948361654516690},
 2731         { 0.164913120489969921418189113}, { 0.986308097244598647863297524},
 2732         {-0.986308097244598647863297524}, { 0.164913120489969921418189113},
 2733         { 0.991709753669099522860049931}, { 0.128498110793793172624415589},
 2734         {-0.128498110793793172624415589}, { 0.991709753669099522860049931},
 2735         { 0.610382806276309452716352152}, { 0.792106577300212351782342879},
 2736         {-0.792106577300212351782342879}, { 0.610382806276309452716352152},
 2737         { 0.867046245515692651480195629}, { 0.498227666972781852410983869},
 2738         {-0.498227666972781852410983869}, { 0.867046245515692651480195629},
 2739         { 0.260794117915275518280186509}, { 0.965394441697689374550843858},
 2740         {-0.965394441697689374550843858}, { 0.260794117915275518280186509},
 2741         { 0.947585591017741134653387321}, { 0.319502030816015677901518272},
 2742         {-0.319502030816015677901518272}, { 0.947585591017741134653387321},
 2743         { 0.444122144570429231642069418}, { 0.895966249756185155914560282},
 2744         {-0.895966249756185155914560282}, { 0.444122144570429231642069418},
 2745         { 0.753186799043612482483430486}, { 0.657806693297078656931182264},
 2746         {-0.657806693297078656931182264}, { 0.753186799043612482483430486},
 2747         { 0.067443919563664057897972422}, { 0.997723066644191609848546728},
 2748         {-0.997723066644191609848546728}, { 0.067443919563664057897972422},
 2749         { 0.996820299291165714972629398}, { 0.079682437971430121147120656},
 2750         {-0.079682437971430121147120656}, { 0.996820299291165714972629398},
 2751         { 0.648514401022112445084560551}, { 0.761202385484261814029709836},
 2752         {-0.761202385484261814029709836}, { 0.648514401022112445084560551},
 2753         { 0.890448723244757889952150560}, { 0.455083587126343823535869268},
 2754         {-0.455083587126343823535869268}, { 0.890448723244757889952150560},
 2755         { 0.307849640041534893682063646}, { 0.951435020969008369549175569},
 2756         {-0.951435020969008369549175569}, { 0.307849640041534893682063646},
 2757         { 0.962121404269041595429604316}, { 0.272621355449948984493347477},
 2758         {-0.272621355449948984493347477}, { 0.962121404269041595429604316},
 2759         { 0.487550160148435954641485027}, { 0.873094978418290098636085973},
 2760         {-0.873094978418290098636085973}, { 0.487550160148435954641485027},
 2761         { 0.784556597155575233023892575}, { 0.620057211763289178646268191},
 2762         {-0.620057211763289178646268191}, { 0.784556597155575233023892575},
 2763         { 0.116318630911904767252544319}, { 0.993211949234794533104601012},
 2764         {-0.993211949234794533104601012}, { 0.116318630911904767252544319},
 2765         { 0.984210092386929073193874387}, { 0.177004220412148756196839844},
 2766         {-0.177004220412148756196839844}, { 0.984210092386929073193874387},
 2767         { 0.570780745886967280232652864}, { 0.821102514991104679060430820},
 2768         {-0.821102514991104679060430820}, { 0.570780745886967280232652864},
 2769         { 0.841554977436898409603499520}, { 0.540171472729892881297845480},
 2770         {-0.540171472729892881297845480}, { 0.841554977436898409603499520},
 2771         { 0.213110319916091373967757518}, { 0.977028142657754351485866211},
 2772         {-0.977028142657754351485866211}, { 0.213110319916091373967757518},
 2773         { 0.930766961078983731944872340}, { 0.365612997804773870011745909},
 2774         {-0.365612997804773870011745909}, { 0.930766961078983731944872340},
 2775         { 0.399624199845646828544117031}, { 0.916679059921042663116457013},
 2776         {-0.916679059921042663116457013}, { 0.399624199845646828544117031},
 2777         { 0.720002507961381629076682999}, { 0.693971460889654009003734389},
 2778         {-0.693971460889654009003734389}, { 0.720002507961381629076682999},
 2779         { 0.018406729905804820927366313}, { 0.999830581795823422015722275},
 2780         {-0.999830581795823422015722275}, { 0.018406729905804820927366313},
 2781         { 0.999830581795823422015722275}, { 0.018406729905804820927366313},
 2782         {-0.018406729905804820927366313}, { 0.999830581795823422015722275},
 2783         { 0.693971460889654009003734389}, { 0.720002507961381629076682999},
 2784         {-0.720002507961381629076682999}, { 0.693971460889654009003734389},
 2785         { 0.916679059921042663116457013}, { 0.399624199845646828544117031},
 2786         {-0.399624199845646828544117031}, { 0.916679059921042663116457013},
 2787         { 0.365612997804773870011745909}, { 0.930766961078983731944872340},
 2788         {-0.930766961078983731944872340}, { 0.365612997804773870011745909},
 2789         { 0.977028142657754351485866211}, { 0.213110319916091373967757518},
 2790         {-0.213110319916091373967757518}, { 0.977028142657754351485866211},
 2791         { 0.540171472729892881297845480}, { 0.841554977436898409603499520},
 2792         {-0.841554977436898409603499520}, { 0.540171472729892881297845480},
 2793         { 0.821102514991104679060430820}, { 0.570780745886967280232652864},
 2794         {-0.570780745886967280232652864}, { 0.821102514991104679060430820},
 2795         { 0.177004220412148756196839844}, { 0.984210092386929073193874387},
 2796         {-0.984210092386929073193874387}, { 0.177004220412148756196839844},
 2797         { 0.993211949234794533104601012}, { 0.116318630911904767252544319},
 2798         {-0.116318630911904767252544319}, { 0.993211949234794533104601012},
 2799         { 0.620057211763289178646268191}, { 0.784556597155575233023892575},
 2800         {-0.784556597155575233023892575}, { 0.620057211763289178646268191},
 2801         { 0.873094978418290098636085973}, { 0.487550160148435954641485027},
 2802         {-0.487550160148435954641485027}, { 0.873094978418290098636085973},
 2803         { 0.272621355449948984493347477}, { 0.962121404269041595429604316},
 2804         {-0.962121404269041595429604316}, { 0.272621355449948984493347477},
 2805         { 0.951435020969008369549175569}, { 0.307849640041534893682063646},
 2806         {-0.307849640041534893682063646}, { 0.951435020969008369549175569},
 2807         { 0.455083587126343823535869268}, { 0.890448723244757889952150560},
 2808         {-0.890448723244757889952150560}, { 0.455083587126343823535869268},
 2809         { 0.761202385484261814029709836}, { 0.648514401022112445084560551},
 2810         {-0.648514401022112445084560551}, { 0.761202385484261814029709836},
 2811         { 0.079682437971430121147120656}, { 0.996820299291165714972629398},
 2812         {-0.996820299291165714972629398}, { 0.079682437971430121147120656},
 2813         { 0.997723066644191609848546728}, { 0.067443919563664057897972422},
 2814         {-0.067443919563664057897972422}, { 0.997723066644191609848546728},
 2815         { 0.657806693297078656931182264}, { 0.753186799043612482483430486},
 2816         {-0.753186799043612482483430486}, { 0.657806693297078656931182264},
 2817         { 0.895966249756185155914560282}, { 0.444122144570429231642069418},
 2818         {-0.444122144570429231642069418}, { 0.895966249756185155914560282},
 2819         { 0.319502030816015677901518272}, { 0.947585591017741134653387321},
 2820         {-0.947585591017741134653387321}, { 0.319502030816015677901518272},
 2821         { 0.965394441697689374550843858}, { 0.260794117915275518280186509},
 2822         {-0.260794117915275518280186509}, { 0.965394441697689374550843858},
 2823         { 0.498227666972781852410983869}, { 0.867046245515692651480195629},
 2824         {-0.867046245515692651480195629}, { 0.498227666972781852410983869},
 2825         { 0.792106577300212351782342879}, { 0.610382806276309452716352152},
 2826         {-0.610382806276309452716352152}, { 0.792106577300212351782342879},
 2827         { 0.128498110793793172624415589}, { 0.991709753669099522860049931},
 2828         {-0.991709753669099522860049931}, { 0.128498110793793172624415589},
 2829         { 0.986308097244598647863297524}, { 0.164913120489969921418189113},
 2830         {-0.164913120489969921418189113}, { 0.986308097244598647863297524},
 2831         { 0.580813958095764545075595272}, { 0.814036329705948361654516690},
 2832         {-0.814036329705948361654516690}, { 0.580813958095764545075595272},
 2833         { 0.848120344803297251279133563}, { 0.529803624686294668216054671},
 2834         {-0.529803624686294668216054671}, { 0.848120344803297251279133563},
 2835         { 0.225083911359792835991642120}, { 0.974339382785575860518721668},
 2836         {-0.974339382785575860518721668}, { 0.225083911359792835991642120},
 2837         { 0.935183509938947577642207480}, { 0.354163525420490382357395796},
 2838         {-0.354163525420490382357395796}, { 0.935183509938947577642207480},
 2839         { 0.410843171057903942183466675}, { 0.911706032005429851404397325},
 2840         {-0.911706032005429851404397325}, { 0.410843171057903942183466675},
 2841         { 0.728464390448225196492035438}, { 0.685083667772700381362052545},
 2842         {-0.685083667772700381362052545}, { 0.728464390448225196492035438},
 2843         { 0.030674803176636625934021028}, { 0.999529417501093163079703322},
 2844         {-0.999529417501093163079703322}, { 0.030674803176636625934021028},
 2845         { 0.999077727752645382888781997}, { 0.042938256934940823077124540},
 2846         {-0.042938256934940823077124540}, { 0.999077727752645382888781997},
 2847         { 0.676092703575315960360419228}, { 0.736816568877369875090132520},
 2848         {-0.736816568877369875090132520}, { 0.676092703575315960360419228},
 2849         { 0.906595704514915365332960588}, { 0.422000270799799685941287941},
 2850         {-0.422000270799799685941287941}, { 0.906595704514915365332960588},
 2851         { 0.342660717311994397592781983}, { 0.939459223602189911962669246},
 2852         {-0.939459223602189911962669246}, { 0.342660717311994397592781983},
 2853         { 0.971503890986251775537099622}, { 0.237023605994367206867735915},
 2854         {-0.237023605994367206867735915}, { 0.971503890986251775537099622},
 2855         { 0.519355990165589587361829932}, { 0.854557988365400520767862276},
 2856         {-0.854557988365400520767862276}, { 0.519355990165589587361829932},
 2857         { 0.806847553543799272206514313}, { 0.590759701858874228423887908},
 2858         {-0.590759701858874228423887908}, { 0.806847553543799272206514313},
 2859         { 0.152797185258443427720336613}, { 0.988257567730749491404792538},
 2860         {-0.988257567730749491404792538}, { 0.152797185258443427720336613},
 2861         { 0.990058210262297105505906464}, { 0.140658239332849230714788846},
 2862         {-0.140658239332849230714788846}, { 0.990058210262297105505906464},
 2863         { 0.600616479383868926653875896}, { 0.799537269107905033500246232},
 2864         {-0.799537269107905033500246232}, { 0.600616479383868926653875896},
 2865         { 0.860866938637767279344583877}, { 0.508830142543107036931749324},
 2866         {-0.508830142543107036931749324}, { 0.860866938637767279344583877},
 2867         { 0.248927605745720168110682816}, { 0.968522094274417316221088329},
 2868         {-0.968522094274417316221088329}, { 0.248927605745720168110682816},
 2869         { 0.943593458161960361495301445}, { 0.331106305759876401737190737},
 2870         {-0.331106305759876401737190737}, { 0.943593458161960361495301445},
 2871         { 0.433093818853151968484222638}, { 0.901348847046022014570746093},
 2872         {-0.901348847046022014570746093}, { 0.433093818853151968484222638},
 2873         { 0.745057785441465962407907310}, { 0.666999922303637506650154222},
 2874         {-0.666999922303637506650154222}, { 0.745057785441465962407907310},
 2875         { 0.055195244349689939809447526}, { 0.998475580573294752208559038},
 2876         {-0.998475580573294752208559038}, { 0.055195244349689939809447526},
 2877         { 0.995767414467659793982495643}, { 0.091908956497132728624990979},
 2878         {-0.091908956497132728624990979}, { 0.995767414467659793982495643},
 2879         { 0.639124444863775743801488193}, { 0.769103337645579639346626069},
 2880         {-0.769103337645579639346626069}, { 0.639124444863775743801488193},
 2881         { 0.884797098430937780104007041}, { 0.465976495767966177902756065},
 2882         {-0.465976495767966177902756065}, { 0.884797098430937780104007041},
 2883         { 0.296150888243623824121786128}, { 0.955141168305770721498157712},
 2884         {-0.955141168305770721498157712}, { 0.296150888243623824121786128},
 2885         { 0.958703474895871555374645792}, { 0.284407537211271843618310615},
 2886         {-0.284407537211271843618310615}, { 0.958703474895871555374645792},
 2887         { 0.476799230063322133342158117}, { 0.879012226428633477831323711},
 2888         {-0.879012226428633477831323711}, { 0.476799230063322133342158117},
 2889         { 0.776888465673232450040827983}, { 0.629638238914927025372981341},
 2890         {-0.629638238914927025372981341}, { 0.776888465673232450040827983},
 2891         { 0.104121633872054579120943880}, { 0.994564570734255452119106243},
 2892         {-0.994564570734255452119106243}, { 0.104121633872054579120943880},
 2893         { 0.981963869109555264072848154}, { 0.189068664149806212754997837},
 2894         {-0.189068664149806212754997837}, { 0.981963869109555264072848154},
 2895         { 0.560661576197336023839710223}, { 0.828045045257755752067527592},
 2896         {-0.828045045257755752067527592}, { 0.560661576197336023839710223},
 2897         { 0.834862874986380056304401383}, { 0.550457972936604802977289893},
 2898         {-0.550457972936604802977289893}, { 0.834862874986380056304401383},
 2899         { 0.201104634842091911558443546}, { 0.979569765685440534439326110},
 2900         {-0.979569765685440534439326110}, { 0.201104634842091911558443546},
 2901         { 0.926210242138311341974793388}, { 0.377007410216418256726567823},
 2902         {-0.377007410216418256726567823}, { 0.926210242138311341974793388},
 2903         { 0.388345046698826291624993541}, { 0.921514039342041943465396332},
 2904         {-0.921514039342041943465396332}, { 0.388345046698826291624993541},
 2905         { 0.711432195745216441522130290}, { 0.702754744457225302452914421},
 2906         {-0.702754744457225302452914421}, { 0.711432195745216441522130290},
 2907         { 0.006135884649154475359640235}, { 0.999981175282601142656990438},
 2908         {-0.999981175282601142656990438}, { 0.006135884649154475359640235},
 2909         { 0.999995293809576171511580126}, { 0.003067956762965976270145365},
 2910         {-0.003067956762965976270145365}, { 0.999995293809576171511580126},
 2911         { 0.704934080375904908852523758}, { 0.709272826438865651316533772},
 2912         {-0.709272826438865651316533772}, { 0.704934080375904908852523758},
 2913         { 0.922701128333878570437264227}, { 0.385516053843918864075607949},
 2914         {-0.385516053843918864075607949}, { 0.922701128333878570437264227},
 2915         { 0.379847208924051170576281147}, { 0.925049240782677590302371869},
 2916         {-0.925049240782677590302371869}, { 0.379847208924051170576281147},
 2917         { 0.980182135968117392690210009}, { 0.198098410717953586179324918},
 2918         {-0.198098410717953586179324918}, { 0.980182135968117392690210009},
 2919         { 0.553016705580027531764226988}, { 0.833170164701913186439915922},
 2920         {-0.833170164701913186439915922}, { 0.553016705580027531764226988},
 2921         { 0.829761233794523042469023765}, { 0.558118531220556115693702964},
 2922         {-0.558118531220556115693702964}, { 0.829761233794523042469023765},
 2923         { 0.192080397049892441679288205}, { 0.981379193313754574318224190},
 2924         {-0.981379193313754574318224190}, { 0.192080397049892441679288205},
 2925         { 0.994879330794805620591166107}, { 0.101069862754827824987887585},
 2926         {-0.101069862754827824987887585}, { 0.994879330794805620591166107},
 2927         { 0.632018735939809021909403706}, { 0.774953106594873878359129282},
 2928         {-0.774953106594873878359129282}, { 0.632018735939809021909403706},
 2929         { 0.880470889052160770806542929}, { 0.474100214650550014398580015},
 2930         {-0.474100214650550014398580015}, { 0.880470889052160770806542929},
 2931         { 0.287347459544729526477331841}, { 0.957826413027532890321037029},
 2932         {-0.957826413027532890321037029}, { 0.287347459544729526477331841},
 2933         { 0.956045251349996443270479823}, { 0.293219162694258650606608599},
 2934         {-0.293219162694258650606608599}, { 0.956045251349996443270479823},
 2935         { 0.468688822035827933697617870}, { 0.883363338665731594736308015},
 2936         {-0.883363338665731594736308015}, { 0.468688822035827933697617870},
 2937         { 0.771060524261813773200605759}, { 0.636761861236284230413943435},
 2938         {-0.636761861236284230413943435}, { 0.771060524261813773200605759},
 2939         { 0.094963495329638998938034312}, { 0.995480755491926941769171600},
 2940         {-0.995480755491926941769171600}, { 0.094963495329638998938034312},
 2941         { 0.998640218180265222418199049}, { 0.052131704680283321236358216},
 2942         {-0.052131704680283321236358216}, { 0.998640218180265222418199049},
 2943         { 0.669282588346636065720696366}, { 0.743007952135121693517362293},
 2944         {-0.743007952135121693517362293}, { 0.669282588346636065720696366},
 2945         { 0.902673318237258806751502391}, { 0.430326481340082633908199031},
 2946         {-0.430326481340082633908199031}, { 0.902673318237258806751502391},
 2947         { 0.333999651442009404650865481}, { 0.942573197601446879280758735},
 2948         {-0.942573197601446879280758735}, { 0.333999651442009404650865481},
 2949         { 0.969281235356548486048290738}, { 0.245955050335794611599924709},
 2950         {-0.245955050335794611599924709}, { 0.969281235356548486048290738},
 2951         { 0.511468850437970399504391001}, { 0.859301818357008404783582139},
 2952         {-0.859301818357008404783582139}, { 0.511468850437970399504391001},
 2953         { 0.801376171723140219430247777}, { 0.598160706996342311724958652},
 2954         {-0.598160706996342311724958652}, { 0.801376171723140219430247777},
 2955         { 0.143695033150294454819773349}, { 0.989622017463200834623694454},
 2956         {-0.989622017463200834623694454}, { 0.143695033150294454819773349},
 2957         { 0.988721691960323767604516485}, { 0.149764534677321517229695737},
 2958         {-0.149764534677321517229695737}, { 0.988721691960323767604516485},
 2959         { 0.593232295039799808047809426}, { 0.805031331142963597922659282},
 2960         {-0.805031331142963597922659282}, { 0.593232295039799808047809426},
 2961         { 0.856147328375194481019630732}, { 0.516731799017649881508753876},
 2962         {-0.516731799017649881508753876}, { 0.856147328375194481019630732},
 2963         { 0.240003022448741486568922365}, { 0.970772140728950302138169611},
 2964         {-0.970772140728950302138169611}, { 0.240003022448741486568922365},
 2965         { 0.940506070593268323787291309}, { 0.339776884406826857828825803},
 2966         {-0.339776884406826857828825803}, { 0.940506070593268323787291309},
 2967         { 0.424779681209108833357226189}, { 0.905296759318118774354048329},
 2968         {-0.905296759318118774354048329}, { 0.424779681209108833357226189},
 2969         { 0.738887324460615147933116508}, { 0.673829000378756060917568372},
 2970         {-0.673829000378756060917568372}, { 0.738887324460615147933116508},
 2971         { 0.046003182130914628814301788}, { 0.998941293186856850633930266},
 2972         {-0.998941293186856850633930266}, { 0.046003182130914628814301788},
 2973         { 0.999618822495178597116830637}, { 0.027608145778965741612354872},
 2974         {-0.027608145778965741612354872}, { 0.999618822495178597116830637},
 2975         { 0.687315340891759108199186948}, { 0.726359155084345976817494315},
 2976         {-0.726359155084345976817494315}, { 0.687315340891759108199186948},
 2977         { 0.912962190428398164628018233}, { 0.408044162864978680820747499},
 2978         {-0.408044162864978680820747499}, { 0.912962190428398164628018233},
 2979         { 0.357030961233430032614954036}, { 0.934092550404258914729877883},
 2980         {-0.934092550404258914729877883}, { 0.357030961233430032614954036},
 2981         { 0.975025345066994146844913468}, { 0.222093620973203534094094721},
 2982         {-0.222093620973203534094094721}, { 0.975025345066994146844913468},
 2983         { 0.532403127877197971442805218}, { 0.846490938774052078300544488},
 2984         {-0.846490938774052078300544488}, { 0.532403127877197971442805218},
 2985         { 0.815814410806733789010772660}, { 0.578313796411655563342245019},
 2986         {-0.578313796411655563342245019}, { 0.815814410806733789010772660},
 2987         { 0.167938294974731178054745536}, { 0.985797509167567424700995000},
 2988         {-0.985797509167567424700995000}, { 0.167938294974731178054745536},
 2989         { 0.992099313142191757112085445}, { 0.125454983411546238542336453},
 2990         {-0.125454983411546238542336453}, { 0.992099313142191757112085445},
 2991         { 0.612810082429409703935211936}, { 0.790230221437310055030217152},
 2992         {-0.790230221437310055030217152}, { 0.612810082429409703935211936},
 2993         { 0.868570705971340895340449876}, { 0.495565261825772531150266670},
 2994         {-0.495565261825772531150266670}, { 0.868570705971340895340449876},
 2995         { 0.263754678974831383611349322}, { 0.964589793289812723836432159},
 2996         {-0.964589793289812723836432159}, { 0.263754678974831383611349322},
 2997         { 0.948561349915730288158494826}, { 0.316593375556165867243047035},
 2998         {-0.316593375556165867243047035}, { 0.948561349915730288158494826},
 2999         { 0.446868840162374195353044389}, { 0.894599485631382678433072126},
 3000         {-0.894599485631382678433072126}, { 0.446868840162374195353044389},
 3001         { 0.755201376896536527598710756}, { 0.655492852999615385312679701},
 3002         {-0.655492852999615385312679701}, { 0.755201376896536527598710756},
 3003         { 0.070504573389613863027351471}, { 0.997511456140303459699448390},
 3004         {-0.997511456140303459699448390}, { 0.070504573389613863027351471},
 3005         { 0.997060070339482978987989949}, { 0.076623861392031492278332463},
 3006         {-0.076623861392031492278332463}, { 0.997060070339482978987989949},
 3007         { 0.650846684996380915068975573}, { 0.759209188978388033485525443},
 3008         {-0.759209188978388033485525443}, { 0.650846684996380915068975573},
 3009         { 0.891840709392342727796478697}, { 0.452349587233770874133026703},
 3010         {-0.452349587233770874133026703}, { 0.891840709392342727796478697},
 3011         { 0.310767152749611495835997250}, { 0.950486073949481721759926101},
 3012         {-0.950486073949481721759926101}, { 0.310767152749611495835997250},
 3013         { 0.962953266873683886347921481}, { 0.269668325572915106525464462},
 3014         {-0.269668325572915106525464462}, { 0.962953266873683886347921481},
 3015         { 0.490226483288291154229598449}, { 0.871595086655951034842481435},
 3016         {-0.871595086655951034842481435}, { 0.490226483288291154229598449},
 3017         { 0.786455213599085757522319464}, { 0.617647307937803932403979402},
 3018         {-0.617647307937803932403979402}, { 0.786455213599085757522319464},
 3019         { 0.119365214810991364593637790}, { 0.992850414459865090793563344},
 3020         {-0.992850414459865090793563344}, { 0.119365214810991364593637790},
 3021         { 0.984748501801904218556553176}, { 0.173983873387463827950700807},
 3022         {-0.173983873387463827950700807}, { 0.984748501801904218556553176},
 3023         { 0.573297166698042212820171239}, { 0.819347520076796960824689637},
 3024         {-0.819347520076796960824689637}, { 0.573297166698042212820171239},
 3025         { 0.843208239641845437161743865}, { 0.537587076295645482502214932},
 3026         {-0.537587076295645482502214932}, { 0.843208239641845437161743865},
 3027         { 0.216106797076219509948385131}, { 0.976369731330021149312732194},
 3028         {-0.976369731330021149312732194}, { 0.216106797076219509948385131},
 3029         { 0.931884265581668106718557199}, { 0.362755724367397216204854462},
 3030         {-0.362755724367397216204854462}, { 0.931884265581668106718557199},
 3031         { 0.402434650859418441082533934}, { 0.915448716088267819566431292},
 3032         {-0.915448716088267819566431292}, { 0.402434650859418441082533934},
 3033         { 0.722128193929215321243607198}, { 0.691759258364157774906734132},
 3034         {-0.691759258364157774906734132}, { 0.722128193929215321243607198},
 3035         { 0.021474080275469507418374898}, { 0.999769405351215321657617036},
 3036         {-0.999769405351215321657617036}, { 0.021474080275469507418374898},
 3037         { 0.999882347454212525633049627}, { 0.015339206284988101044151868},
 3038         {-0.015339206284988101044151868}, { 0.999882347454212525633049627},
 3039         { 0.696177131491462944788582591}, { 0.717870045055731736211325329},
 3040         {-0.717870045055731736211325329}, { 0.696177131491462944788582591},
 3041         { 0.917900775621390457642276297}, { 0.396809987416710328595290911},
 3042         {-0.396809987416710328595290911}, { 0.917900775621390457642276297},
 3043         { 0.368466829953372331712746222}, { 0.929640895843181265457918066},
 3044         {-0.929640895843181265457918066}, { 0.368466829953372331712746222},
 3045         { 0.977677357824509979943404762}, { 0.210111836880469621717489972},
 3046         {-0.210111836880469621717489972}, { 0.977677357824509979943404762},
 3047         { 0.542750784864515906586768661}, { 0.839893794195999504583383987},
 3048         {-0.839893794195999504583383987}, { 0.542750784864515906586768661},
 3049         { 0.822849781375826332046780034}, { 0.568258952670131549790548489},
 3050         {-0.568258952670131549790548489}, { 0.822849781375826332046780034},
 3051         { 0.180022901405699522679906590}, { 0.983662419211730274396237776},
 3052         {-0.983662419211730274396237776}, { 0.180022901405699522679906590},
 3053         { 0.993564135520595333782021697}, { 0.113270952177564349018228733},
 3054         {-0.113270952177564349018228733}, { 0.993564135520595333782021697},
 3055         { 0.622461279374149972519166721}, { 0.782650596166575738458949301},
 3056         {-0.782650596166575738458949301}, { 0.622461279374149972519166721},
 3057         { 0.874586652278176112634431897}, { 0.484869248000791101822951699},
 3058         {-0.484869248000791101822951699}, { 0.874586652278176112634431897},
 3059         { 0.275571819310958163076425168}, { 0.961280485811320641748659653},
 3060         {-0.961280485811320641748659653}, { 0.275571819310958163076425168},
 3061         { 0.952375012719765858529893608}, { 0.304929229735402406490728633},
 3062         {-0.304929229735402406490728633}, { 0.952375012719765858529893608},
 3063         { 0.457813303598877221904961155}, { 0.889048355854664562540777729},
 3064         {-0.889048355854664562540777729}, { 0.457813303598877221904961155},
 3065         { 0.763188417263381271704838297}, { 0.646176012983316364832802220},
 3066         {-0.646176012983316364832802220}, { 0.763188417263381271704838297},
 3067         { 0.082740264549375693111987083}, { 0.996571145790554847093566910},
 3068         {-0.996571145790554847093566910}, { 0.082740264549375693111987083},
 3069         { 0.997925286198596012623025462}, { 0.064382630929857460819324537},
 3070         {-0.064382630929857460819324537}, { 0.997925286198596012623025462},
 3071         { 0.660114342067420478559490747}, { 0.751165131909686411205819422},
 3072         {-0.751165131909686411205819422}, { 0.660114342067420478559490747},
 3073         { 0.897324580705418281231391836}, { 0.441371268731716692879988968},
 3074         {-0.441371268731716692879988968}, { 0.897324580705418281231391836},
 3075         { 0.322407678801069848384807478}, { 0.946600913083283570044599823},
 3076         {-0.946600913083283570044599823}, { 0.322407678801069848384807478},
 3077         { 0.966190003445412555433832961}, { 0.257831102162159005614471295},
 3078         {-0.257831102162159005614471295}, { 0.966190003445412555433832961},
 3079         { 0.500885382611240786241285004}, { 0.865513624090569082825488358},
 3080         {-0.865513624090569082825488358}, { 0.500885382611240786241285004},
 3081         { 0.793975477554337164895083757}, { 0.607949784967773667243642671},
 3082         {-0.607949784967773667243642671}, { 0.793975477554337164895083757},
 3083         { 0.131540028702883111103387493}, { 0.991310859846115418957349799},
 3084         {-0.991310859846115418957349799}, { 0.131540028702883111103387493},
 3085         { 0.986809401814185476970235952}, { 0.161886393780111837641387995},
 3086         {-0.161886393780111837641387995}, { 0.986809401814185476970235952},
 3087         { 0.583308652937698294392830961}, { 0.812250586585203913049744181},
 3088         {-0.812250586585203913049744181}, { 0.583308652937698294392830961},
 3089         { 0.849741768000852489471268395}, { 0.527199134781901348464274575},
 3090         {-0.527199134781901348464274575}, { 0.849741768000852489471268395},
 3091         { 0.228072083170885739254457379}, { 0.973644249650811925318383912},
 3092         {-0.973644249650811925318383912}, { 0.228072083170885739254457379},
 3093         { 0.936265667170278246576310996}, { 0.351292756085567125601307623},
 3094         {-0.351292756085567125601307623}, { 0.936265667170278246576310996},
 3095         { 0.413638312238434547471944324}, { 0.910441292258067196934095369},
 3096         {-0.910441292258067196934095369}, { 0.413638312238434547471944324},
 3097         { 0.730562769227827561177758850}, { 0.682845546385248068164596123},
 3098         {-0.682845546385248068164596123}, { 0.730562769227827561177758850},
 3099         { 0.033741171851377584833716112}, { 0.999430604555461772019008327},
 3100         {-0.999430604555461772019008327}, { 0.033741171851377584833716112},
 3101         { 0.999204758618363895492950001}, { 0.039872927587739811128578738},
 3102         {-0.039872927587739811128578738}, { 0.999204758618363895492950001},
 3103         { 0.678350043129861486873655042}, { 0.734738878095963464563223604},
 3104         {-0.734738878095963464563223604}, { 0.678350043129861486873655042},
 3105         { 0.907886116487666212038681480}, { 0.419216888363223956433010020},
 3106         {-0.419216888363223956433010020}, { 0.907886116487666212038681480},
 3107         { 0.345541324963989065539191723}, { 0.938403534063108112192420774},
 3108         {-0.938403534063108112192420774}, { 0.345541324963989065539191723},
 3109         { 0.972226497078936305708321144}, { 0.234041958583543423191242045},
 3110         {-0.234041958583543423191242045}, { 0.972226497078936305708321144},
 3111         { 0.521975292937154342694258318}, { 0.852960604930363657746588082},
 3112         {-0.852960604930363657746588082}, { 0.521975292937154342694258318},
 3113         { 0.808656181588174991946968128}, { 0.588281548222645304786439813},
 3114         {-0.588281548222645304786439813}, { 0.808656181588174991946968128},
 3115         { 0.155828397654265235743101486}, { 0.987784141644572154230969032},
 3116         {-0.987784141644572154230969032}, { 0.155828397654265235743101486},
 3117         { 0.990485084256457037998682243}, { 0.137620121586486044948441663},
 3118         {-0.137620121586486044948441663}, { 0.990485084256457037998682243},
 3119         { 0.603066598540348201693430617}, { 0.797690840943391108362662755},
 3120         {-0.797690840943391108362662755}, { 0.603066598540348201693430617},
 3121         { 0.862423956111040538690933878}, { 0.506186645345155291048942344},
 3122         {-0.506186645345155291048942344}, { 0.862423956111040538690933878},
 3123         { 0.251897818154216950498106628}, { 0.967753837093475465243391912},
 3124         {-0.967753837093475465243391912}, { 0.251897818154216950498106628},
 3125         { 0.944604837261480265659265493}, { 0.328209843579092526107916817},
 3126         {-0.328209843579092526107916817}, { 0.944604837261480265659265493},
 3127         { 0.435857079922255491032544080}, { 0.900015892016160228714535267},
 3128         {-0.900015892016160228714535267}, { 0.435857079922255491032544080},
 3129         { 0.747100605980180144323078847}, { 0.664710978203344868130324985},
 3130         {-0.664710978203344868130324985}, { 0.747100605980180144323078847},
 3131         { 0.058258264500435759613979782}, { 0.998301544933892840738782163},
 3132         {-0.998301544933892840738782163}, { 0.058258264500435759613979782},
 3133         { 0.996044700901251989887944810}, { 0.088853552582524596561586535},
 3134         {-0.088853552582524596561586535}, { 0.996044700901251989887944810},
 3135         { 0.641481012808583151988739898}, { 0.767138911935820381181694573},
 3136         {-0.767138911935820381181694573}, { 0.641481012808583151988739898},
 3137         { 0.886222530148880631647990821}, { 0.463259783551860197390719637},
 3138         {-0.463259783551860197390719637}, { 0.886222530148880631647990821},
 3139         { 0.299079826308040476750336973}, { 0.954228095109105629780430732},
 3140         {-0.954228095109105629780430732}, { 0.299079826308040476750336973},
 3141         { 0.959571513081984528335528181}, { 0.281464937925757984095231007},
 3142         {-0.281464937925757984095231007}, { 0.959571513081984528335528181},
 3143         { 0.479493757660153026679839798}, { 0.877545290207261291668470750},
 3144         {-0.877545290207261291668470750}, { 0.479493757660153026679839798},
 3145         { 0.778816512381475953374724325}, { 0.627251815495144113509622565},
 3146         {-0.627251815495144113509622565}, { 0.778816512381475953374724325},
 3147         { 0.107172424956808849175529148}, { 0.994240449453187946358413442},
 3148         {-0.994240449453187946358413442}, { 0.107172424956808849175529148},
 3149         { 0.982539302287441255907040396}, { 0.186055151663446648105438304},
 3150         {-0.186055151663446648105438304}, { 0.982539302287441255907040396},
 3151         { 0.563199344013834115007363772}, { 0.826321062845663480311195452},
 3152         {-0.826321062845663480311195452}, { 0.563199344013834115007363772},
 3153         { 0.836547727223511984524285790}, { 0.547894059173100165608820571},
 3154         {-0.547894059173100165608820571}, { 0.836547727223511984524285790},
 3155         { 0.204108966092816874181696950}, { 0.978948175319062194715480124},
 3156         {-0.978948175319062194715480124}, { 0.204108966092816874181696950},
 3157         { 0.927362525650401087274536959}, { 0.374164062971457997104393020},
 3158         {-0.374164062971457997104393020}, { 0.927362525650401087274536959},
 3159         { 0.391170384302253888687512949}, { 0.920318276709110566440076541},
 3160         {-0.920318276709110566440076541}, { 0.391170384302253888687512949},
 3161         { 0.713584868780793592903125099}, { 0.700568793943248366792866380},
 3162         {-0.700568793943248366792866380}, { 0.713584868780793592903125099},
 3163         { 0.009203754782059819315102378}, { 0.999957644551963866333120920},
 3164         {-0.999957644551963866333120920}, { 0.009203754782059819315102378},
 3165         { 0.999957644551963866333120920}, { 0.009203754782059819315102378},
 3166         {-0.009203754782059819315102378}, { 0.999957644551963866333120920},
 3167         { 0.700568793943248366792866380}, { 0.713584868780793592903125099},
 3168         {-0.713584868780793592903125099}, { 0.700568793943248366792866380},
 3169         { 0.920318276709110566440076541}, { 0.391170384302253888687512949},
 3170         {-0.391170384302253888687512949}, { 0.920318276709110566440076541},
 3171         { 0.374164062971457997104393020}, { 0.927362525650401087274536959},
 3172         {-0.927362525650401087274536959}, { 0.374164062971457997104393020},
 3173         { 0.978948175319062194715480124}, { 0.204108966092816874181696950},
 3174         {-0.204108966092816874181696950}, { 0.978948175319062194715480124},
 3175         { 0.547894059173100165608820571}, { 0.836547727223511984524285790},
 3176         {-0.836547727223511984524285790}, { 0.547894059173100165608820571},
 3177         { 0.826321062845663480311195452}, { 0.563199344013834115007363772},
 3178         {-0.563199344013834115007363772}, { 0.826321062845663480311195452},
 3179         { 0.186055151663446648105438304}, { 0.982539302287441255907040396},
 3180         {-0.982539302287441255907040396}, { 0.186055151663446648105438304},
 3181         { 0.994240449453187946358413442}, { 0.107172424956808849175529148},
 3182         {-0.107172424956808849175529148}, { 0.994240449453187946358413442},
 3183         { 0.627251815495144113509622565}, { 0.778816512381475953374724325},
 3184         {-0.778816512381475953374724325}, { 0.627251815495144113509622565},
 3185         { 0.877545290207261291668470750}, { 0.479493757660153026679839798},
 3186         {-0.479493757660153026679839798}, { 0.877545290207261291668470750},
 3187         { 0.281464937925757984095231007}, { 0.959571513081984528335528181},
 3188         {-0.959571513081984528335528181}, { 0.281464937925757984095231007},
 3189         { 0.954228095109105629780430732}, { 0.299079826308040476750336973},
 3190         {-0.299079826308040476750336973}, { 0.954228095109105629780430732},
 3191         { 0.463259783551860197390719637}, { 0.886222530148880631647990821},
 3192         {-0.886222530148880631647990821}, { 0.463259783551860197390719637},
 3193         { 0.767138911935820381181694573}, { 0.641481012808583151988739898},
 3194         {-0.641481012808583151988739898}, { 0.767138911935820381181694573},
 3195         { 0.088853552582524596561586535}, { 0.996044700901251989887944810},
 3196         {-0.996044700901251989887944810}, { 0.088853552582524596561586535},
 3197         { 0.998301544933892840738782163}, { 0.058258264500435759613979782},
 3198         {-0.058258264500435759613979782}, { 0.998301544933892840738782163},
 3199         { 0.664710978203344868130324985}, { 0.747100605980180144323078847},
 3200         {-0.747100605980180144323078847}, { 0.664710978203344868130324985},
 3201         { 0.900015892016160228714535267}, { 0.435857079922255491032544080},
 3202         {-0.435857079922255491032544080}, { 0.900015892016160228714535267},
 3203         { 0.328209843579092526107916817}, { 0.944604837261480265659265493},
 3204         {-0.944604837261480265659265493}, { 0.328209843579092526107916817},
 3205         { 0.967753837093475465243391912}, { 0.251897818154216950498106628},
 3206         {-0.251897818154216950498106628}, { 0.967753837093475465243391912},
 3207         { 0.506186645345155291048942344}, { 0.862423956111040538690933878},
 3208         {-0.862423956111040538690933878}, { 0.506186645345155291048942344},
 3209         { 0.797690840943391108362662755}, { 0.603066598540348201693430617},
 3210         {-0.603066598540348201693430617}, { 0.797690840943391108362662755},
 3211         { 0.137620121586486044948441663}, { 0.990485084256457037998682243},
 3212         {-0.990485084256457037998682243}, { 0.137620121586486044948441663},
 3213         { 0.987784141644572154230969032}, { 0.155828397654265235743101486},
 3214         {-0.155828397654265235743101486}, { 0.987784141644572154230969032},
 3215         { 0.588281548222645304786439813}, { 0.808656181588174991946968128},
 3216         {-0.808656181588174991946968128}, { 0.588281548222645304786439813},
 3217         { 0.852960604930363657746588082}, { 0.521975292937154342694258318},
 3218         {-0.521975292937154342694258318}, { 0.852960604930363657746588082},
 3219         { 0.234041958583543423191242045}, { 0.972226497078936305708321144},
 3220         {-0.972226497078936305708321144}, { 0.234041958583543423191242045},
 3221         { 0.938403534063108112192420774}, { 0.345541324963989065539191723},
 3222         {-0.345541324963989065539191723}, { 0.938403534063108112192420774},
 3223         { 0.419216888363223956433010020}, { 0.907886116487666212038681480},
 3224         {-0.907886116487666212038681480}, { 0.419216888363223956433010020},
 3225         { 0.734738878095963464563223604}, { 0.678350043129861486873655042},
 3226         {-0.678350043129861486873655042}, { 0.734738878095963464563223604},
 3227         { 0.039872927587739811128578738}, { 0.999204758618363895492950001},
 3228         {-0.999204758618363895492950001}, { 0.039872927587739811128578738},
 3229         { 0.999430604555461772019008327}, { 0.033741171851377584833716112},
 3230         {-0.033741171851377584833716112}, { 0.999430604555461772019008327},
 3231         { 0.682845546385248068164596123}, { 0.730562769227827561177758850},
 3232         {-0.730562769227827561177758850}, { 0.682845546385248068164596123},
 3233         { 0.910441292258067196934095369}, { 0.413638312238434547471944324},
 3234         {-0.413638312238434547471944324}, { 0.910441292258067196934095369},
 3235         { 0.351292756085567125601307623}, { 0.936265667170278246576310996},
 3236         {-0.936265667170278246576310996}, { 0.351292756085567125601307623},
 3237         { 0.973644249650811925318383912}, { 0.228072083170885739254457379},
 3238         {-0.228072083170885739254457379}, { 0.973644249650811925318383912},
 3239         { 0.527199134781901348464274575}, { 0.849741768000852489471268395},
 3240         {-0.849741768000852489471268395}, { 0.527199134781901348464274575},
 3241         { 0.812250586585203913049744181}, { 0.583308652937698294392830961},
 3242         {-0.583308652937698294392830961}, { 0.812250586585203913049744181},
 3243         { 0.161886393780111837641387995}, { 0.986809401814185476970235952},
 3244         {-0.986809401814185476970235952}, { 0.161886393780111837641387995},
 3245         { 0.991310859846115418957349799}, { 0.131540028702883111103387493},
 3246         {-0.131540028702883111103387493}, { 0.991310859846115418957349799},
 3247         { 0.607949784967773667243642671}, { 0.793975477554337164895083757},
 3248         {-0.793975477554337164895083757}, { 0.607949784967773667243642671},
 3249         { 0.865513624090569082825488358}, { 0.500885382611240786241285004},
 3250         {-0.500885382611240786241285004}, { 0.865513624090569082825488358},
 3251         { 0.257831102162159005614471295}, { 0.966190003445412555433832961},
 3252         {-0.966190003445412555433832961}, { 0.257831102162159005614471295},
 3253         { 0.946600913083283570044599823}, { 0.322407678801069848384807478},
 3254         {-0.322407678801069848384807478}, { 0.946600913083283570044599823},
 3255         { 0.441371268731716692879988968}, { 0.897324580705418281231391836},
 3256         {-0.897324580705418281231391836}, { 0.441371268731716692879988968},
 3257         { 0.751165131909686411205819422}, { 0.660114342067420478559490747},
 3258         {-0.660114342067420478559490747}, { 0.751165131909686411205819422},
 3259         { 0.064382630929857460819324537}, { 0.997925286198596012623025462},
 3260         {-0.997925286198596012623025462}, { 0.064382630929857460819324537},
 3261         { 0.996571145790554847093566910}, { 0.082740264549375693111987083},
 3262         {-0.082740264549375693111987083}, { 0.996571145790554847093566910},
 3263         { 0.646176012983316364832802220}, { 0.763188417263381271704838297},
 3264         {-0.763188417263381271704838297}, { 0.646176012983316364832802220},
 3265         { 0.889048355854664562540777729}, { 0.457813303598877221904961155},
 3266         {-0.457813303598877221904961155}, { 0.889048355854664562540777729},
 3267         { 0.304929229735402406490728633}, { 0.952375012719765858529893608},
 3268         {-0.952375012719765858529893608}, { 0.304929229735402406490728633},
 3269         { 0.961280485811320641748659653}, { 0.275571819310958163076425168},
 3270         {-0.275571819310958163076425168}, { 0.961280485811320641748659653},
 3271         { 0.484869248000791101822951699}, { 0.874586652278176112634431897},
 3272         {-0.874586652278176112634431897}, { 0.484869248000791101822951699},
 3273         { 0.782650596166575738458949301}, { 0.622461279374149972519166721},
 3274         {-0.622461279374149972519166721}, { 0.782650596166575738458949301},
 3275         { 0.113270952177564349018228733}, { 0.993564135520595333782021697},
 3276         {-0.993564135520595333782021697}, { 0.113270952177564349018228733},
 3277         { 0.983662419211730274396237776}, { 0.180022901405699522679906590},
 3278         {-0.180022901405699522679906590}, { 0.983662419211730274396237776},
 3279         { 0.568258952670131549790548489}, { 0.822849781375826332046780034},
 3280         {-0.822849781375826332046780034}, { 0.568258952670131549790548489},
 3281         { 0.839893794195999504583383987}, { 0.542750784864515906586768661},
 3282         {-0.542750784864515906586768661}, { 0.839893794195999504583383987},
 3283         { 0.210111836880469621717489972}, { 0.977677357824509979943404762},
 3284         {-0.977677357824509979943404762}, { 0.210111836880469621717489972},
 3285         { 0.929640895843181265457918066}, { 0.368466829953372331712746222},
 3286         {-0.368466829953372331712746222}, { 0.929640895843181265457918066},
 3287         { 0.396809987416710328595290911}, { 0.917900775621390457642276297},
 3288         {-0.917900775621390457642276297}, { 0.396809987416710328595290911},
 3289         { 0.717870045055731736211325329}, { 0.696177131491462944788582591},
 3290         {-0.696177131491462944788582591}, { 0.717870045055731736211325329},
 3291         { 0.015339206284988101044151868}, { 0.999882347454212525633049627},
 3292         {-0.999882347454212525633049627}, { 0.015339206284988101044151868},
 3293         { 0.999769405351215321657617036}, { 0.021474080275469507418374898},
 3294         {-0.021474080275469507418374898}, { 0.999769405351215321657617036},
 3295         { 0.691759258364157774906734132}, { 0.722128193929215321243607198},
 3296         {-0.722128193929215321243607198}, { 0.691759258364157774906734132},
 3297         { 0.915448716088267819566431292}, { 0.402434650859418441082533934},
 3298         {-0.402434650859418441082533934}, { 0.915448716088267819566431292},
 3299         { 0.362755724367397216204854462}, { 0.931884265581668106718557199},
 3300         {-0.931884265581668106718557199}, { 0.362755724367397216204854462},
 3301         { 0.976369731330021149312732194}, { 0.216106797076219509948385131},
 3302         {-0.216106797076219509948385131}, { 0.976369731330021149312732194},
 3303         { 0.537587076295645482502214932}, { 0.843208239641845437161743865},
 3304         {-0.843208239641845437161743865}, { 0.537587076295645482502214932},
 3305         { 0.819347520076796960824689637}, { 0.573297166698042212820171239},
 3306         {-0.573297166698042212820171239}, { 0.819347520076796960824689637},
 3307         { 0.173983873387463827950700807}, { 0.984748501801904218556553176},
 3308         {-0.984748501801904218556553176}, { 0.173983873387463827950700807},
 3309         { 0.992850414459865090793563344}, { 0.119365214810991364593637790},
 3310         {-0.119365214810991364593637790}, { 0.992850414459865090793563344},
 3311         { 0.617647307937803932403979402}, { 0.786455213599085757522319464},
 3312         {-0.786455213599085757522319464}, { 0.617647307937803932403979402},
 3313         { 0.871595086655951034842481435}, { 0.490226483288291154229598449},
 3314         {-0.490226483288291154229598449}, { 0.871595086655951034842481435},
 3315         { 0.269668325572915106525464462}, { 0.962953266873683886347921481},
 3316         {-0.962953266873683886347921481}, { 0.269668325572915106525464462},
 3317         { 0.950486073949481721759926101}, { 0.310767152749611495835997250},
 3318         {-0.310767152749611495835997250}, { 0.950486073949481721759926101},
 3319         { 0.452349587233770874133026703}, { 0.891840709392342727796478697},
 3320         {-0.891840709392342727796478697}, { 0.452349587233770874133026703},
 3321         { 0.759209188978388033485525443}, { 0.650846684996380915068975573},
 3322         {-0.650846684996380915068975573}, { 0.759209188978388033485525443},
 3323         { 0.076623861392031492278332463}, { 0.997060070339482978987989949},
 3324         {-0.997060070339482978987989949}, { 0.076623861392031492278332463},
 3325         { 0.997511456140303459699448390}, { 0.070504573389613863027351471},
 3326         {-0.070504573389613863027351471}, { 0.997511456140303459699448390},
 3327         { 0.655492852999615385312679701}, { 0.755201376896536527598710756},
 3328         {-0.755201376896536527598710756}, { 0.655492852999615385312679701},
 3329         { 0.894599485631382678433072126}, { 0.446868840162374195353044389},
 3330         {-0.446868840162374195353044389}, { 0.894599485631382678433072126},
 3331         { 0.316593375556165867243047035}, { 0.948561349915730288158494826},
 3332         {-0.948561349915730288158494826}, { 0.316593375556165867243047035},
 3333         { 0.964589793289812723836432159}, { 0.263754678974831383611349322},
 3334         {-0.263754678974831383611349322}, { 0.964589793289812723836432159},
 3335         { 0.495565261825772531150266670}, { 0.868570705971340895340449876},
 3336         {-0.868570705971340895340449876}, { 0.495565261825772531150266670},
 3337         { 0.790230221437310055030217152}, { 0.612810082429409703935211936},
 3338         {-0.612810082429409703935211936}, { 0.790230221437310055030217152},
 3339         { 0.125454983411546238542336453}, { 0.992099313142191757112085445},
 3340         {-0.992099313142191757112085445}, { 0.125454983411546238542336453},
 3341         { 0.985797509167567424700995000}, { 0.167938294974731178054745536},
 3342         {-0.167938294974731178054745536}, { 0.985797509167567424700995000},
 3343         { 0.578313796411655563342245019}, { 0.815814410806733789010772660},
 3344         {-0.815814410806733789010772660}, { 0.578313796411655563342245019},
 3345         { 0.846490938774052078300544488}, { 0.532403127877197971442805218},
 3346         {-0.532403127877197971442805218}, { 0.846490938774052078300544488},
 3347         { 0.222093620973203534094094721}, { 0.975025345066994146844913468},
 3348         {-0.975025345066994146844913468}, { 0.222093620973203534094094721},
 3349         { 0.934092550404258914729877883}, { 0.357030961233430032614954036},
 3350         {-0.357030961233430032614954036}, { 0.934092550404258914729877883},
 3351         { 0.408044162864978680820747499}, { 0.912962190428398164628018233},
 3352         {-0.912962190428398164628018233}, { 0.408044162864978680820747499},
 3353         { 0.726359155084345976817494315}, { 0.687315340891759108199186948},
 3354         {-0.687315340891759108199186948}, { 0.726359155084345976817494315},
 3355         { 0.027608145778965741612354872}, { 0.999618822495178597116830637},
 3356         {-0.999618822495178597116830637}, { 0.027608145778965741612354872},
 3357         { 0.998941293186856850633930266}, { 0.046003182130914628814301788},
 3358         {-0.046003182130914628814301788}, { 0.998941293186856850633930266},
 3359         { 0.673829000378756060917568372}, { 0.738887324460615147933116508},
 3360         {-0.738887324460615147933116508}, { 0.673829000378756060917568372},
 3361         { 0.905296759318118774354048329}, { 0.424779681209108833357226189},
 3362         {-0.424779681209108833357226189}, { 0.905296759318118774354048329},
 3363         { 0.339776884406826857828825803}, { 0.940506070593268323787291309},
 3364         {-0.940506070593268323787291309}, { 0.339776884406826857828825803},
 3365         { 0.970772140728950302138169611}, { 0.240003022448741486568922365},
 3366         {-0.240003022448741486568922365}, { 0.970772140728950302138169611},
 3367         { 0.516731799017649881508753876}, { 0.856147328375194481019630732},
 3368         {-0.856147328375194481019630732}, { 0.516731799017649881508753876},
 3369         { 0.805031331142963597922659282}, { 0.593232295039799808047809426},
 3370         {-0.593232295039799808047809426}, { 0.805031331142963597922659282},
 3371         { 0.149764534677321517229695737}, { 0.988721691960323767604516485},
 3372         {-0.988721691960323767604516485}, { 0.149764534677321517229695737},
 3373         { 0.989622017463200834623694454}, { 0.143695033150294454819773349},
 3374         {-0.143695033150294454819773349}, { 0.989622017463200834623694454},
 3375         { 0.598160706996342311724958652}, { 0.801376171723140219430247777},
 3376         {-0.801376171723140219430247777}, { 0.598160706996342311724958652},
 3377         { 0.859301818357008404783582139}, { 0.511468850437970399504391001},
 3378         {-0.511468850437970399504391001}, { 0.859301818357008404783582139},
 3379         { 0.245955050335794611599924709}, { 0.969281235356548486048290738},
 3380         {-0.969281235356548486048290738}, { 0.245955050335794611599924709},
 3381         { 0.942573197601446879280758735}, { 0.333999651442009404650865481},
 3382         {-0.333999651442009404650865481}, { 0.942573197601446879280758735},
 3383         { 0.430326481340082633908199031}, { 0.902673318237258806751502391},
 3384         {-0.902673318237258806751502391}, { 0.430326481340082633908199031},
 3385         { 0.743007952135121693517362293}, { 0.669282588346636065720696366},
 3386         {-0.669282588346636065720696366}, { 0.743007952135121693517362293},
 3387         { 0.052131704680283321236358216}, { 0.998640218180265222418199049},
 3388         {-0.998640218180265222418199049}, { 0.052131704680283321236358216},
 3389         { 0.995480755491926941769171600}, { 0.094963495329638998938034312},
 3390         {-0.094963495329638998938034312}, { 0.995480755491926941769171600},
 3391         { 0.636761861236284230413943435}, { 0.771060524261813773200605759},
 3392         {-0.771060524261813773200605759}, { 0.636761861236284230413943435},
 3393         { 0.883363338665731594736308015}, { 0.468688822035827933697617870},
 3394         {-0.468688822035827933697617870}, { 0.883363338665731594736308015},
 3395         { 0.293219162694258650606608599}, { 0.956045251349996443270479823},
 3396         {-0.956045251349996443270479823}, { 0.293219162694258650606608599},
 3397         { 0.957826413027532890321037029}, { 0.287347459544729526477331841},
 3398         {-0.287347459544729526477331841}, { 0.957826413027532890321037029},
 3399         { 0.474100214650550014398580015}, { 0.880470889052160770806542929},
 3400         {-0.880470889052160770806542929}, { 0.474100214650550014398580015},
 3401         { 0.774953106594873878359129282}, { 0.632018735939809021909403706},
 3402         {-0.632018735939809021909403706}, { 0.774953106594873878359129282},
 3403         { 0.101069862754827824987887585}, { 0.994879330794805620591166107},
 3404         {-0.994879330794805620591166107}, { 0.101069862754827824987887585},
 3405         { 0.981379193313754574318224190}, { 0.192080397049892441679288205},
 3406         {-0.192080397049892441679288205}, { 0.981379193313754574318224190},
 3407         { 0.558118531220556115693702964}, { 0.829761233794523042469023765},
 3408         {-0.829761233794523042469023765}, { 0.558118531220556115693702964},
 3409         { 0.833170164701913186439915922}, { 0.553016705580027531764226988},
 3410         {-0.553016705580027531764226988}, { 0.833170164701913186439915922},
 3411         { 0.198098410717953586179324918}, { 0.980182135968117392690210009},
 3412         {-0.980182135968117392690210009}, { 0.198098410717953586179324918},
 3413         { 0.925049240782677590302371869}, { 0.379847208924051170576281147},
 3414         {-0.379847208924051170576281147}, { 0.925049240782677590302371869},
 3415         { 0.385516053843918864075607949}, { 0.922701128333878570437264227},
 3416         {-0.922701128333878570437264227}, { 0.385516053843918864075607949},
 3417         { 0.709272826438865651316533772}, { 0.704934080375904908852523758},
 3418         {-0.704934080375904908852523758}, { 0.709272826438865651316533772},
 3419         { 0.003067956762965976270145365}, { 0.999995293809576171511580126},
 3420         {-0.999995293809576171511580126}, { 0.003067956762965976270145365}
 3421 };
 3422 
 3423 const fpr fpr_p2_tab[] = {
 3424         { 2.00000000000 },
 3425         { 1.00000000000 },
 3426         { 0.50000000000 },
 3427         { 0.25000000000 },
 3428         { 0.12500000000 },
 3429         { 0.06250000000 },
 3430         { 0.03125000000 },
 3431         { 0.01562500000 },
 3432         { 0.00781250000 },
 3433         { 0.00390625000 },
 3434         { 0.00195312500 }
 3435 };
 3436 
 3437 #else // yyyFPNATIVE+0 yyyFPEMU+0
 3438 
 3439 #error No FP implementation selected
 3440 
 3441 #endif // yyyFPNATIVE- yyyFPEMU-