This repository was archived by the owner on Jan 21, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathtest_poly.py
163 lines (128 loc) · 120 KB
/
test_poly.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
from poly import poly_conditional_subq, \
compress_poly, decompress_poly, poly_to_bytes, \
poly_from_bytes, poly_from_data, poly_to_msg, get_noise_poly, \
poly_basemul_mont, poly_to_mont, poly_reduce, compress_polyvec, \
decompress_polyvec, polyvec_to_bytes, polyvec_from_bytes
subq_in = [1399, 3329, 1014, 2566, 129, 338, 2897, 121, 2554, 3236, 2841, 836, 512, 1599, 1380, 2467, 2734, 3224, 1389, 692, 859, 289, 213, 2261, 3054, 586, 2393, 1023, 2649, 1061, 3316, 2263, 482, 3233, 3020, 2746, 404, 2058, 2723, 1494, 361, 2685, 2729, 2564, 385, 2237, 2665, 489, 2967, 2018, 3205, 2318, 2468, 2449, 1215, 2619, 1712, 1318, 2154, 3105, 1177, 3114, 706, 2515, 1530, 2664, 1852, 1191, 1571, 373, 1004, 2672, 1562, 754, 3295, 2478, 2133, 1301, 560, 1701, 3326, 67, 2738, 2021, 728, 581, 1349, 1451, 2680, 3080, 2570, 1780, 251, 2276, 112, 1081, 3169, 2378, 1483, 1235, 2657, 3303, 2725, 1501, 162, 1882, 3151, 1353, 2391, 1729, 926, 527, 1481, 278, 2926, 725, 2481, 1827, 2811, 1737, 1361, 2226, 2539, 2428, 3008, 1821, 635, 729, 3313, 647, 1859, 1069, 731, 3106, 953, 1243, 2328, 2357, 553, 2633, 2689, 2080, 267, 504, 2465, 2092, 2593, 1843, 3311, 96, 877, 1365, 1957, 958, 1137, 2946, 2648, 1475, 1394, 2392, 1044, 987, 1439, 901, 326, 2116, 2318, 1971, 1116, 807, 2479, 268, 2584, 1040, 1994, 1149, 691, 450, 1743, 1973, 2967, 670, 438, 33, 1495, 2968, 295, 2640, 2245, 1411, 2876, 1267, 757, 682, 1379, 1046, 1523, 84, 1459, 590, 1451, 2891, 1440, 1032, 1804, 3175, 953, 1127, 2907, 2433, 2476, 199, 2036, 731, 934, 2084, 1745, 734, 2119, 158, 2973, 1262, 3080, 2647, 2511, 2805, 2839, 1135, 143, 2414, 1234, 2241, 2674, 1286, 1861, 49, 625, 15, 467, 2039, 1101, 1978, 526, 1080, 663, 1619, 1653, 1359, 3257, 1663, 186, 2922, 2260, 2040, 2943, 2153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
subq_out = [1399, 0, 1014, 2566, 129, 338, 2897, 121, 2554, 3236, 2841, 836, 512, 1599, 1380, 2467, 2734, 3224, 1389, 692, 859, 289, 213, 2261, 3054, 586, 2393, 1023, 2649, 1061, 3316, 2263, 482, 3233, 3020, 2746, 404, 2058, 2723, 1494, 361, 2685, 2729, 2564, 385, 2237, 2665, 489, 2967, 2018, 3205, 2318, 2468, 2449, 1215, 2619, 1712, 1318, 2154, 3105, 1177, 3114, 706, 2515, 1530, 2664, 1852, 1191, 1571, 373, 1004, 2672, 1562, 754, 3295, 2478, 2133, 1301, 560, 1701, 3326, 67, 2738, 2021, 728, 581, 1349, 1451, 2680, 3080, 2570, 1780, 251, 2276, 112, 1081, 3169, 2378, 1483, 1235, 2657, 3303, 2725, 1501, 162, 1882, 3151, 1353, 2391, 1729, 926, 527, 1481, 278, 2926, 725, 2481, 1827, 2811, 1737, 1361, 2226, 2539, 2428, 3008, 1821, 635, 729, 3313, 647, 1859, 1069, 731, 3106, 953, 1243, 2328, 2357, 553, 2633, 2689, 2080, 267, 504, 2465, 2092, 2593, 1843, 3311, 96, 877, 1365, 1957, 958, 1137, 2946, 2648, 1475, 1394, 2392, 1044, 987, 1439, 901, 326, 2116, 2318, 1971, 1116, 807, 2479, 268, 2584, 1040, 1994, 1149, 691, 450, 1743, 1973, 2967, 670, 438, 33, 1495, 2968, 295, 2640, 2245, 1411, 2876, 1267, 757, 682, 1379, 1046, 1523, 84, 1459, 590, 1451, 2891, 1440, 1032, 1804, 3175, 953, 1127, 2907, 2433, 2476, 199, 2036, 731, 934, 2084, 1745, 734, 2119, 158, 2973, 1262, 3080, 2647, 2511, 2805, 2839, 1135, 143, 2414, 1234, 2241, 2674, 1286, 1861, 49, 625, 15, 467, 2039, 1101, 1978, 526, 1080, 663, 1619, 1653, 1359, 3257, 1663, 186, 2922, 2260, 2040, 2943, 2153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
assert(poly_conditional_subq(subq_in) == subq_out)
comprin1= [238, 2797, 892, 1265, 1091, 701, 586, 2422, 1618, 1531, 239, 1135, 938, 413, 2043, 434, 234, 1704, 459, 2967, 3069, 3145, 2016, 2308, 3090, 70, 1634, 305, 1441, 1807, 2182, 179, 2671, 554, 2921, 2837, 1416, 714, 869, 2762, 1540, 1634, 2402, 1440, 1868, 2221, 1698, 438, 646, 2858, 2995, 1264, 350, 1031, 1014, 681, 630, 45, 2019, 1470, 2211, 1309, 48, 488, 1550, 1002, 1889, 1722, 2660, 1420, 296, 1054, 2060, 1758, 3186, 964, 2998, 67, 811, 571, 2992, 1753, 2082, 675, 1265, 2289, 1133, 2627, 1005, 2253, 2669, 500, 2489, 3032, 32, 1192, 1133, 1426, 3191, 1486, 2388, 572, 284, 847, 863, 2175, 2827, 3108, 1467, 2418, 461, 1744, 3127, 1600, 2653, 111, 2894, 2816, 3164, 1978, 1058, 855, 1493, 1699, 2498, 2568, 1616, 2533, 2110, 2853, 3060, 2781, 860, 1346, 3106, 1468, 2679, 912, 3312, 357, 2220, 525, 3209, 404, 1984, 2042, 1026, 3325, 1189, 1982, 1812, 820, 977, 2187, 485, 1572, 891, 669, 2523, 3269, 895, 2345, 2015, 2455, 2915, 2439, 1365, 1014, 721, 2115, 1481, 3303, 162, 274, 2881, 2350, 964, 1415, 3082, 366, 2599, 2082, 3254, 3154, 381, 424, 2622, 1418, 2041, 3295, 38, 1721, 865, 2546, 419, 108, 866, 1578, 469, 778, 2676, 2805, 946, 2497, 839, 801, 2892, 2338, 3, 1713, 2305, 1121, 2591, 1841, 2867, 3052, 3183, 1725, 1854, 2939, 114, 2265, 527, 388, 2543, 1504, 3312, 1615, 1902, 3113, 1412, 1329, 1488, 1621, 2750, 2526, 403, 1889, 216, 1612, 2584, 2564, 362, 3019, 47, 1517, 146, 2457, 3138, 2179, 3296, 2518, 1484, 1273, 2742, 3225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
comprout1 = [-47, 100, 53, -61, 120, 81, 37, 42, -127, -30, -1, -70, 15, 24, -105, 26, 61, -18, 55, -44, -121, 124, -71, 40, -29, 110, 82, 53, 3, 122, 107, 32, 87, -119, 125, 81, -118, 95, 14, 52, -114, 58, -74, -43, -75, 45, -4, 96, 117, 127, 59, 65, -92, -2, -57, -126, -113, 29, -18, -81, 69, -121, -52, -56, -22, -33, 100, 127, 77, 32, 59, 47, -86, 5, -90, 73, -75, -126, 52, 12, -76, -54, -50, 87, -93, 7, 17, -66, 117, 47, -84, -16, 34, 125, 10, -128, -60, 18, -124, 66, -35, -59, 68, -66, -128, 91, -100, -2, -113, -23, -79, 35, 124, -128, -7, 103, -121, -51, -110, -127, -52, -14, 112, -63, -81, -64, 103, 13]
comprin2 = [2361, 2489, 643, 2773, 1660, 996, 2708, 1636, 2439, 1047, 3019, 1695, 2806, 1381, 436, 1788, 2686, 221, 1210, 252, 780, 3269, 2965, 1800, 3131, 923, 2060, 2097, 2276, 2907, 2622, 3313, 2847, 374, 3127, 1749, 3237, 683, 455, 1387, 140, 2913, 2597, 998, 2309, 3239, 3196, 536, 3027, 725, 1755, 514, 3222, 1961, 2248, 2498, 1339, 1448, 1321, 981, 1662, 2878, 772, 2165, 2769, 2587, 1167, 1816, 567, 1887, 307, 3095, 284, 1624, 2283, 988, 1243, 3235, 2489, 2806, 2223, 1066, 2923, 2940, 3272, 2140, 952, 2603, 1761, 1440, 1591, 2977, 1979, 1672, 102, 1777, 2585, 1080, 2969, 348, 2191, 2337, 209, 2976, 1706, 1992, 1578, 1408, 1828, 1383, 2124, 981, 2245, 487, 3193, 1413, 1688, 692, 2072, 166, 3126, 334, 373, 2426, 2010, 3089, 2905, 651, 536, 817, 1182, 1202, 1495, 1852, 2564, 2419, 3017, 2801, 3301, 3218, 1119, 2936, 3226, 279, 413, 2863, 1028, 339, 432, 947, 1643, 2648, 2520, 2017, 1083, 1187, 1038, 1077, 2889, 901, 1185, 1634, 2180, 1453, 319, 2171, 1720, 551, 102, 3023, 1895, 243, 1239, 2286, 2750, 962, 1434, 1106, 1524, 2198, 391, 155, 720, 787, 3091, 625, 1426, 1375, 1640, 817, 164, 2778, 3317, 784, 927, 77, 662, 1083, 2544, 2485, 1283, 152, 1399, 1829, 208, 1090, 155, 1675, 2469, 655, 1576, 873, 1805, 946, 164, 113, 3288, 2460, 3167, 2418, 1327, 553, 2699, 235, 1708, 1131, 1928, 1407, 2081, 2824, 70, 1857, 2727, 1982, 1192, 1411, 474, 3102, 3294, 758, 417, 49, 2916, 2914, 1574, 2048, 1658, 1259, 707, 980, 140, 2028, 1601, 1458, 1386, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
comprout2 = [-53, -45, 88, -115, 92, -113, 125, -110, 29, 22, 4, -98, 79, -86, -21, 13, 46, -113, 48, 114, -31, 92, 11, 63, 63, 40, -97, -53, 118, 86, -24, -92, -51, -106, -109, -15, -127, 91, 6, -36, 91, -18, -96, -43, 120, -24, -118, -112, 92, 46, -69, -31, -88, 120, 121, 90, 43, 127, 56, 26, 47, -62, -6, 62, 67, 102, -105, -52, -33, -16, -27, 16, -30, 37, 82, -40, -84, 101, 85, 78, -122, 122, -94, 56, -16, 25, -74, 93, 87, -73, 18, 67, 63, 119, 72, -47, 64, 4, 83, -52, 22, -105, 81, -127, 60, 72, 89, 17, -64, -49, 54, 29, 88, 121, -22, -112, -83, 118, -14, 64, 2, -18, -88, 104, 83, -95, 120, 23]
assert(compress_poly(comprin1,2) == comprout1)
assert(compress_poly(comprin2,2) == comprout2)
dc_in1 = [-47, 100, 53, -61, 120, 81, 37, 42, -127, -30, -1, -70, 15, 24, -105, 26, 61, -18, 55, -44, -121, 124, -71, 40, -29, 110, 82, 53, 3, 122, 107, 32, 87, -119, 125, 81, -118, 95, 14, 52, -114, 58, -74, -43, -75, 45, -4, 96, 117, 127, 59, 65, -92, -2, -57, -126, -113, 29, -18, -81, 69, -121, -52, -56, -22, -33, 100, 127, 77, 32, 59, 47, -86, 5, -90, 73, -75, -126, 52, 12, -76, -54, -50, 87, -93, 7, 17, -66, 117, 47, -84, -16, 34, 125, 10, -128, -60, 18, -124, 66, -35, -59, 68, -66, -128, 91, -100, -2, -113, -23, -79, 35, 124, -128, -7, 103, -121, -51, -110, -127, -52, -14, 112, -63, -81, -64, 103, 13]
dc_out1 = [208, 2705, 832, 1248, 1040, 624, 624, 2497, 1665, 1456, 208, 1040, 1040, 416, 2081, 416, 208, 1665, 416, 2913, 3121, 3121, 2081, 2289, 3121, 0, 1665, 208, 1456, 1873, 2081, 208, 2705, 624, 2913, 2913, 1456, 624, 832, 2705, 1456, 1665, 2497, 1456, 1873, 2289, 1665, 416, 624, 2913, 2913, 1248, 416, 1040, 1040, 624, 624, 0, 2081, 1456, 2289, 1248, 0, 416, 1456, 1040, 1873, 1665, 2705, 1456, 208, 1040, 2081, 1665, 3121, 1040, 2913, 0, 832, 624, 2913, 1665, 2081, 624, 1248, 2289, 1040, 2705, 1040, 2289, 2705, 416, 2497, 3121, 0, 1248, 1040, 1456, 3121, 1456, 2289, 624, 208, 832, 832, 2081, 2913, 3121, 1456, 2497, 416, 1665, 3121, 1665, 2705, 208, 2913, 2913, 3121, 2081, 1040, 832, 1456, 1665, 2497, 2497, 1665, 2497, 2081, 2913, 3121, 2705, 832, 1248, 3121, 1456, 2705, 832, 0, 416, 2289, 624, 3121, 416, 2081, 2081, 1040, 0, 1248, 2081, 1873, 832, 1040, 2289, 416, 1665, 832, 624, 2497, 0, 832, 2289, 2081, 2497, 2913, 2497, 1456, 1040, 624, 2081, 1456, 0, 208, 208, 2913, 2289, 1040, 1456, 3121, 416, 2497, 2081, 0, 3121, 416, 416, 2705, 1456, 2081, 0, 0, 1665, 832, 2497, 416, 208, 832, 1665, 416, 832, 2705, 2705, 1040, 2497, 832, 832, 2913, 2289, 0, 1665, 2289, 1040, 2497, 1873, 2913, 3121, 3121, 1665, 1873, 2913, 208, 2289, 624, 416, 2497, 1456, 0, 1665, 1873, 3121, 1456, 1248, 1456, 1665, 2705, 2497, 416, 1873, 208, 1665, 2497, 2497, 416, 3121, 0, 1456, 208, 2497, 3121, 2081, 0, 2497, 1456, 1248, 2705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
dc_in2 = [-72, 109, 19, 22, -43, -75, -75, -22, 59, -39, 15, -127, 101, 42, 64, 33, -95, -23, -119, 2, 70, 66, 86, -89, -115, -53, -97, 37, 7, -42, -122, -102, -81, -118, -41, 14, 39, 30, 52, 125, -122, -89, -13, -84, 64, -57, -13, 111, -86, 22, -23, 39, 49, 100, 101, 19, -20, -34, -81, -84, -22, -82, 12, -100, 120, 1, -58, -47, -116, 52, -11, 1, 6, -55, 97, 106, -74, 38, -74, -85, 109, 22, 41, 62, -25, 57, -70, -15, -104, 5, -113, -28, -18, -101, 43, -121, -77, 31, 28, 58, -40, 14, -4, -60, 7, 48, 104, 115, -71, -8, 64, -85, -75, -8, 113, 42, -55, 70, -27, 21, -18, 93, -77, -113, -61, -121, -50, 91]
dc_out2 = [1665, 2289, 2705, 1248, 624, 208, 1248, 208, 1040, 2705, 1040, 2289, 1040, 2289, 2081, 2913, 2289, 624, 1873, 2705, 3121, 0, 208, 1665, 1040, 1248, 2081, 416, 0, 832, 208, 416, 208, 2081, 1873, 2913, 1873, 1665, 416, 0, 1248, 832, 416, 832, 1248, 1040, 1456, 2081, 2705, 1665, 2289, 2497, 3121, 1873, 1040, 416, 1456, 0, 1248, 2705, 1248, 1665, 2081, 1873, 3121, 2081, 2081, 1665, 1456, 2705, 2913, 0, 1456, 416, 2913, 208, 832, 624, 2705, 1456, 1248, 1665, 1456, 2081, 624, 3121, 2497, 2081, 0, 832, 1456, 2497, 624, 3121, 3121, 1248, 2081, 2081, 1248, 208, 1873, 2913, 1456, 416, 208, 624, 832, 1248, 1040, 1248, 624, 208, 2497, 2913, 2913, 2705, 3121, 2081, 2497, 2081, 2081, 2913, 2913, 2081, 2497, 0, 2497, 1873, 1665, 1456, 208, 0, 1248, 2497, 208, 2705, 2497, 1665, 832, 624, 1040, 3121, 208, 0, 1248, 0, 1873, 2497, 208, 1248, 2081, 1248, 1248, 2289, 1248, 416, 1248, 2289, 2289, 2081, 2705, 1248, 1248, 208, 1873, 416, 2913, 624, 1456, 2913, 1873, 624, 2081, 2289, 208, 3121, 1665, 1873, 1040, 0, 3121, 1665, 832, 2913, 2913, 2913, 2289, 1873, 2289, 416, 1456, 1665, 624, 2289, 3121, 208, 2497, 208, 2081, 624, 1665, 2705, 2913, 0, 2497, 3121, 832, 2497, 1456, 0, 0, 624, 1665, 1248, 624, 1456, 1873, 2289, 1665, 3121, 0, 832, 2289, 2081, 1040, 2289, 1665, 3121, 208, 1456, 2081, 416, 1873, 2497, 1248, 832, 1040, 2913, 1040, 208, 2913, 2913, 2705, 1040, 624, 2289, 3121, 1665, 624, 2497, 1456, 1665, 2913, 2497, 2289, 1040, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
assert(decompress_poly(dc_in1,2) == dc_out1)
assert(decompress_poly(dc_in2,2) == dc_out2)
poly_to_byte_in1 = [1355, 831, 321, 3181, 1432, 2999, 660, 2621, 2346, 1939, 2183, 966, 2311, 330, 797, 417, 2369, 1300, 658, 865, 2188, 2029, 2892, 466, 1472, 323, 3103, 462, 362, 1170, 465, 646, 1965, 392, 738, 1789, 1171, 171, 3051, 732, 1895, 482, 1650, 318, 876, 2491, 2746, 3283, 1597, 1919, 1257, 246, 199, 1484, 2488, 1334, 1515, 2993, 1834, 1065, 3018, 411, 1479, 1062, 1753, 192, 387, 653, 1757, 2300, 2792, 950, 3251, 2196, 671, 1474, 1395, 2222, 2309, 2867, 651, 1008, 3161, 555, 3323, 1074, 772, 1432, 538, 1410, 945, 2358, 511, 1432, 217, 2888, 1778, 2939, 1726, 179, 2790, 1754, 3306, 3103, 335, 888, 821, 1915, 2459, 3126, 2273, 1769, 2164, 2056, 1514, 519, 3048, 950, 1287, 3219, 2614, 2704, 2178, 1079, 2115, 1977, 1089, 2636, 1466, 2966, 1380, 829, 2389, 1757, 851, 754, 1453, 1854, 1697, 1243, 927, 641, 1671, 1825, 1818, 36, 1077, 2422, 1233, 2004, 2575, 3197, 2751, 1107, 488, 2706, 1205, 2548, 1651, 2280, 1221, 1612, 1748, 301, 692, 3320, 2111, 2532, 2079, 1301, 2418, 2973, 2852, 1029, 1275, 1331, 396, 304, 2195, 2026, 1647, 852, 720, 1477, 3168, 1208, 1401, 3032, 1783, 1619, 3038, 2177, 2973, 134, 1444, 2098, 2249, 555, 734, 2252, 849, 2730, 912, 379, 1863, 712, 2908, 940, 1263, 693, 1713, 1021, 2302, 1667, 945, 1735, 1550, 2458, 1209, 2977, 2069, 2840, 590, 1669, 448, 1626, 49, 1860, 1577, 2576, 864, 2571, 3181, 1022, 284, 2942, 2684, 1484, 365, 43, 2992, 238, 2823, 2948, 2171, 2732, 1232, 1014, 443, 1176, 2983, 2685, 1912, 2214, 1904, 2603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
poly_to_byte_out1 = [75, -11, 51, 65, -47, -58, -104, 117, -69, -108, -46, -93, 42, 57, 121, -121, 104, 60, 7, -87, 20, 29, 19, 26, 65, 73, 81, -110, 18, 54, -116, -40, 126, 76, 43, 29, -64, 53, 20, 31, -20, 28, 106, 33, 73, -47, 97, 40, -83, -121, 24, -30, -46, 111, -109, -76, 10, -21, -53, 45, 103, 39, 30, 114, -26, 19, 108, -77, -101, -70, 58, -51, 61, -10, 119, -23, 100, 15, -57, -64, 92, -72, 105, 83, -21, 21, -69, 42, -105, 66, -54, -69, 25, -57, 101, 66, -39, 6, 12, -125, -47, 40, -35, -58, -113, -24, 106, 59, -77, 76, -119, -97, 34, 92, 115, -27, -118, 5, 57, -77, -117, 2, 63, 89, -68, 34, -5, 44, 67, 4, -125, 89, 26, 34, 88, -79, 99, -109, -1, -127, 89, -39, -128, -76, -14, -74, -73, -66, 54, 11, -26, -86, 109, -22, -4, -63, 79, -127, 55, 53, -77, 119, -101, 105, -61, -31, -104, 110, 116, -120, -128, -22, 117, 32, -24, 107, 59, 7, 53, -55, 54, 10, -87, -126, 120, 67, 67, -104, 123, 65, -60, -92, -70, 101, -71, 100, -43, 51, 85, -39, 109, 83, 35, 47, -83, -27, 115, -95, -74, 77, -97, 19, 40, -121, 22, 114, 26, 71, 2, 53, 100, -105, -47, 68, 125, 15, -38, -57, -65, 58, 69, -24, 33, -87, -75, 68, -97, 115, -122, -114, -59, -60, 100, -44, -42, 18, -76, -126, -49, 63, 72, -98, 31, 88, 81, 114, -39, -71, 36, 91, 64, -5, 52, 83, -116, 1, 19, -109, -88, 126, 111, 70, 53, -48, 82, 92, 96, -116, 75, 121, -123, -67, -9, 54, 101, -34, 27, -120, -99, 107, 8, -92, 37, -125, -55, -72, 34, -34, -62, -116, 81, -93, -86, -112, -77, 23, 71, -121, 44, 92, -53, 58, -17, 84, 43, -79, -42, 63, -2, 56, 104, -79, 115, 108, 14, -90, -103, -71, 20, -70, 21, -120, -79, 78, 82, 104, -64, -95, 101, 49, 64, 116, 41, 6, -95, 96, -77, -96, 109, -20, 63, 28, -31, -73, 124, -54, 92, 109, -79, 2, -80, -21, 14, 7, 75, -72, 123, -56, -86, -48, 100, 63, -69, -127, 73, -89, -37, -89, 120, 103, -118, 112, -73, -94]
poly_to_byte_in2 = [899, 785, 342, 2899, 1329, 2246, 3144, 2678, 1205, 1165, 1387, 249, 210, 1183, 680, 2965, 2127, 1997, 1672, 2148, 951, 2610, 2189, 2848, 2015, 833, 1672, 2675, 431, 1150, 1195, 1488, 921, 2708, 125, 834, 1797, 1451, 1756, 1246, 1159, 1926, 51, 2617, 860, 2196, 2405, 3302, 982, 243, 2275, 609, 710, 2396, 3252, 2901, 2938, 527, 1377, 350, 735, 1315, 349, 54, 444, 2352, 2284, 165, 2344, 1734, 1899, 1068, 2861, 3256, 1584, 2330, 924, 1585, 453, 2066, 1479, 208, 2093, 3189, 1825, 1177, 2571, 2987, 2719, 1424, 2336, 2569, 906, 1463, 1955, 559, 1058, 601, 917, 1874, 1039, 905, 2045, 881, 2306, 2785, 1534, 2829, 2081, 1227, 2689, 3121, 2488, 3297, 3303, 2468, 1593, 2958, 1104, 1002, 805, 2453, 2957, 501, 2275, 812, 2453, 2746, 2331, 3067, 95, 887, 2459, 2658, 3048, 1694, 1958, 2867, 1318, 449, 488, 1305, 257, 2096, 1564, 370, 2270, 407, 1924, 1929, 2955, 1227, 2564, 2258, 2654, 1719, 193, 1691, 2714, 1607, 122, 2465, 2035, 1728, 2006, 1813, 1295, 2727, 763, 3203, 379, 1611, 2258, 2342, 448, 1599, 1489, 235, 2993, 1393, 499, 2244, 3161, 757, 2511, 1869, 969, 2296, 1351, 2777, 1010, 534, 2566, 1697, 2473, 554, 2480, 568, 3121, 1314, 2212, 2059, 490, 801, 3097, 506, 2141, 1717, 2513, 408, 902, 1516, 214, 1487, 1021, 2003, 693, 3178, 3299, 373, 609, 1295, 0, 2501, 2408, 2807, 1226, 1233, 2784, 2246, 337, 1759, 2444, 3194, 869, 2736, 92, 1726, 3306, 2155, 1669, 328, 1858, 1369, 225, 788, 2796, 61, 3079, 1067, 572, 2445, 1368, 870, 2446, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
poly_to_byte_out2 = [-125, 19, 49, 86, 49, -75, 49, 101, -116, 72, 108, -89, -75, -44, 72, 107, -107, 15, -46, -16, 73, -88, 82, -71, 79, -40, 124, -120, 70, -122, -73, 35, -93, -115, 8, -78, -33, 23, 52, -120, 54, -89, -81, -31, 71, -85, 4, 93, -103, 67, -87, 125, 32, 52, 5, -73, 90, -36, -26, 77, -121, 100, 120, 51, -112, -93, 92, 67, -119, 101, 105, -50, -42, 51, 15, -29, 24, 38, -58, -62, -107, -76, 92, -75, 122, -5, 32, 97, -27, 21, -33, 50, 82, 93, 97, 3, -68, 1, -109, -20, 88, 10, 40, 105, 108, 107, -57, 66, 45, -117, -53, 48, -90, -111, -100, 19, 99, -59, 33, -127, -57, 5, 13, 45, 88, -57, 33, -105, 73, 11, -70, -70, -97, 10, 89, 32, -103, -96, -118, 115, 91, -93, -9, 34, 34, -108, 37, -107, 35, 117, 15, -108, 56, -3, 23, 55, 2, 25, -82, -2, -43, -80, 33, -72, 76, -127, 26, -61, -72, 25, -50, -25, 76, -102, 57, -26, -72, 80, -92, 62, 37, 83, -103, -115, 91, 31, -29, -56, 50, -107, -87, -85, 27, -71, -65, 95, 112, 55, -101, 41, -90, -24, -21, 105, -90, 55, -77, 38, 21, 28, -24, -111, 81, 1, 1, -125, 28, 38, 23, -34, 120, 25, -124, -105, 120, -117, -69, 76, 4, 42, -115, 94, 122, 107, -63, -80, 105, -102, 122, 100, 122, 16, -102, -13, 7, 108, -42, 87, 113, 15, 117, -86, -5, 50, -56, 123, -79, 100, -46, 104, -110, -64, -15, 99, -47, -75, 14, -79, 27, 87, -13, 65, -116, 89, 92, 47, -49, -39, 116, -55, -125, -113, 71, -107, -83, -14, 99, 33, 6, 26, 106, -87, -87, 34, -80, -119, 35, 49, 44, 82, -92, -72, -128, -22, 17, 50, 25, -84, 31, 93, 88, 107, -47, -119, 25, -122, -61, 94, -42, -16, 92, -3, 51, 125, -75, -94, -58, -29, 92, 23, 97, -14, 80, 0, 80, -100, 104, 121, -81, -54, 20, 77, -32, 106, -116, 81, -15, 109, -116, -87, -57, 101, 3, -85, 92, -32, 107, -22, -68, -122, -123, -122, 20, 66, -105, 85, -31, 64, 49, -20, -38, 3, 7, -68, 66, 60, -46, -104, 88, 101, 54, -114, 105, 38]
assert(poly_to_bytes(poly_to_byte_in1) == poly_to_byte_out1)
assert(poly_to_bytes(poly_to_byte_in2) == poly_to_byte_out2)
poly_from_byte_in1 = [108, -119, 43, 2, -105, -87, -57, 100, 20, -109, -8, 125, -81, 53, 51, -18, -42, 31, 7, -12, 101, 32, 102, 51, 126, -41, 64, 70, -36, -57, 27, -96, 63, 48, -106, 1, 3, 22, 31, 125, -21, 83, -89, 27, 17, 97, 114, 99, -2, 42, -128, -105, 105, -50, 109, 112, -88, 95, -26, 0, -20, -30, -99, 127, 54, -95, 109, 51, 27, -117, 42, -98, 29, -72, -64, -112, 116, 45, -16, 115, -97, -16, 96, -50, -76, -20, -59, -85, 28, 94, 85, -84, -105, -69, 102, -89, -8, -107, 16, 93, 87, 120, 43, 34, -107, 56, -29, 66, 21, 68, -93, 66, 20, 8, -37, -12, 73, 16, -109, 76, -60, 35, 119, 79, 22, 118, -1, 28, 48, 111, -105, 85, 95, 87, -76, -82, -41, -90, -70, -71, 80, -88, 22, 60, -115, 49, -115, -22, 98, 117, 27, -42, -85, -59, 6, -100, 6, -56, -113, 51, 0, 38, -95, -104, 6, -96, 59, -105, -89, 105, 107, 86, -38, 33, -126, 123, -76, -24, -36, 3, 17, 82, -76, 27, -119, 42, -98, -103, -83, -10, -31, -106, 62, -106, 87, -120, 40, 21, 79, 70, 112, 51, -124, 105, 32, -5, -76, -72, 5, 68, -25, -24, -88, 26, -23, 99, -49, 54, -116, -101, -96, 55, -88, -62, -83, 98, -29, 43, 110, 97, -55, 29, 117, -50, 0, 90, -77, 15, -128, -103, -95, -14, -99, 123, 99, 5, -76, -36, 6, -30, 86, -128, -69, 0, -103, 47, 113, 127, -26, -63, 21, -88, 8, 66, 49, -52, 121, -35, 112, 14, -90, -111, 42, -57, -6, 13, -109, 123, -74, -89, 86, 102, 34, 48, 71, 12, 24, -101, 90, -95, 101, 61, -21, -109, 125, 90, -100, 37, -94, 29, -109, -79, -112, 116, -4, 35, -99, -127, 83, 83, -105, -105, -57, -44, -85, 98, 100, -99, 118, -86, 85, 55, 54, -87, 73, 2, 44, 34, -59, 43, -82, -20, 96, 91, 50, -50, -98, 91, -109, -124, -112, 53, 88, -54, -99, 106, 58, -70, -112, 66, 62, -19, -96, 28, -108, 25, -117, 25, 42, -117, -87, 6, 52, -105, -96, -59, 1, 51, 7, -35, -40, 99, 82, 100, 113, -92, -39, -107, 35, -21, 65, 127, 41, 26]
poly_from_byte_out1 = [2412, 696, 1794, 2713, 1223, 326, 2195, 2015, 1455, 819, 1774, 509, 1031, 1631, 1568, 822, 1918, 1037, 3142, 3197, 27, 1018, 1584, 25, 1539, 497, 2941, 1342, 2983, 273, 609, 1591, 2814, 2050, 2455, 3302, 109, 2695, 1631, 14, 748, 2526, 1663, 2579, 877, 435, 2699, 2530, 2077, 3083, 1168, 727, 1008, 2551, 240, 3302, 3252, 3166, 3243, 1505, 3157, 2426, 1723, 2678, 1528, 265, 1885, 1925, 555, 2386, 824, 1070, 1045, 2612, 1090, 129, 1243, 1183, 784, 1225, 964, 1906, 1615, 1889, 3327, 769, 1903, 1369, 1887, 2885, 1966, 2669, 2490, 1291, 1704, 961, 397, 2259, 746, 1878, 1563, 2749, 1733, 2496, 2054, 2300, 51, 608, 2209, 105, 2976, 2419, 2471, 1718, 2646, 541, 2946, 2887, 3304, 61, 529, 2885, 2331, 680, 2462, 2777, 502, 2414, 1598, 1401, 2184, 338, 1615, 1796, 1075, 1688, 2848, 2895, 1464, 1088, 2279, 2702, 2330, 1598, 1743, 2243, 155, 890, 680, 2780, 866, 702, 366, 3222, 1309, 3303, 2560, 2869, 15, 2456, 673, 2527, 891, 86, 3252, 109, 1762, 2053, 187, 2448, 303, 2039, 486, 348, 2216, 1056, 3121, 1948, 221, 231, 422, 681, 2759, 223, 2963, 2919, 1703, 1637, 34, 1139, 2060, 2481, 346, 1626, 2877, 2366, 2685, 2501, 549, 474, 403, 2315, 3188, 575, 413, 1336, 1875, 2425, 1223, 2749, 1122, 2518, 2678, 1370, 1591, 2707, 585, 704, 1314, 700, 3246, 1550, 603, 3299, 2974, 2357, 132, 857, 2648, 2524, 2666, 2979, 656, 996, 237, 458, 2452, 2225, 2585, 2226, 1705, 832, 151, 3162, 769, 115, 2269, 1597, 1106, 1814, 2468, 2397, 2851, 1054, 2431, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
poly_from_byte_in2 = [-84, 12, 58, 88, 27, 109, -96, 7, 50, -27, -24, 27, 31, 124, -121, -101, 22, -109, -63, 59, 111, -97, 121, 49, 98, 36, 41, -27, 66, -81, 64, 105, 34, 47, 4, 85, 68, -32, -52, 79, -78, 77, 68, 72, -49, 44, 101, -106, -11, -53, 8, 98, 75, 17, -123, 1, 59, 107, 2, 8, -110, -7, 107, -33, -44, -83, -87, 23, -99, -25, 39, -72, -39, 66, 110, 9, -106, -75, -45, 73, 72, -50, 2, -48, -61, 105, -77, 124, -69, 84, -45, 71, -98, -40, -75, -126, -23, -25, 40, -110, -101, 76, 113, -55, -66, 17, -44, 91, 32, -60, -67, -61, -57, 67, 19, 34, 63, 88, 39, 78, -117, -91, 36, 68, 71, -60, -107, -107, 11, -124, -53, 12, 60, 39, 54, 64, 16, -118, 51, -105, -108, 69, 115, 39, -109, 40, -103, 108, -36, 12, -111, 60, -107, -118, -42, 32, -70, -117, 94, 94, -53, -69, 126, 19, -53, -100, 112, -67, 90, -77, 14, -73, 72, -116, -105, 0, 28, 32, 73, -113, 29, 124, -64, 109, -89, 107, -11, 32, -58, 88, -52, -83, -6, 41, 86, 66, 69, 87, -85, -22, -118, -72, -110, 57, -63, 120, 51, -36, 58, 73, -77, 106, -102, -23, -92, -122, -108, 5, 64, -21, 68, 79, -105, 21, 35, 87, -32, 32, 53, -109, -99, 117, -93, -64, 37, -12, 26, 64, 8, 35, -126, -96, 115, 60, 57, -80, 98, 43, 116, 14, 64, 117, -110, -58, 46, -54, -21, 20, 50, -60, 69, -77, 112, 58, -122, -10, -104, 26, 39, -127, 87, -22, -107, -90, -23, 45, 85, -28, -71, 114, -7, 54, -62, -16, -90, 88, 40, 14, -94, -80, 122, 72, -103, 45, -8, -109, 126, 10, 42, -63, -36, -55, 116, -2, 0, -86, -31, -11, 97, -6, 37, -114, 45, 37, -100, 62, -122, 29, -50, 35, 96, 57, 18, 118, 6, -4, 28, -32, 9, 0, 58, 123, -84, -108, 33, 1, -36, -72, 34, -79, -13, -63, 43, -9, 50, 56, -11, 70, -32, 28, 54, -75, -90, -109, 97, -110, -103, 92, -58, -100, 99, 35, 116, 9, -53, 83, -62, -29, 93, 116, -119, 13, 24, -120, 83, 118, -6, 85, 3, -79, 7, -94, -93, -110]
poly_from_byte_out2 = [3244, 928, 2904, 1745, 1952, 800, 2277, 446, 3103, 2167, 1691, 2353, 3009, 1779, 2463, 791, 1122, 658, 741, 2804, 2368, 550, 1071, 1360, 68, 3278, 591, 1243, 2116, 3316, 1324, 2406, 3061, 140, 2914, 276, 389, 944, 619, 128, 2450, 1727, 1247, 2781, 1961, 2513, 2023, 2946, 729, 1764, 1545, 2905, 2515, 1156, 718, 3328, 2499, 2870, 2940, 1355, 2003, 2532, 1496, 2091, 2025, 654, 2962, 1225, 2417, 3052, 1041, 1469, 1056, 3036, 1987, 1084, 531, 1010, 1880, 1250, 1419, 586, 1860, 3140, 1429, 185, 2948, 204, 1852, 866, 64, 2209, 1843, 2377, 837, 631, 2195, 2450, 3180, 205, 3217, 2387, 1674, 525, 3002, 1512, 2910, 3004, 894, 3249, 156, 3031, 858, 235, 2231, 2244, 151, 448, 2336, 2292, 3101, 3079, 1901, 1722, 245, 3170, 3160, 2780, 2554, 1378, 1346, 1396, 2731, 2222, 696, 921, 2241, 823, 2780, 1171, 2739, 2470, 1257, 2154, 1428, 1024, 1259, 1268, 1431, 561, 87, 526, 821, 2521, 885, 3082, 1061, 431, 2112, 560, 130, 1850, 2364, 2819, 2914, 1858, 14, 1876, 1682, 748, 3018, 334, 1074, 1116, 179, 935, 1670, 2447, 1818, 2066, 2647, 2398, 2470, 734, 1109, 2974, 2418, 879, 194, 2671, 2136, 226, 162, 1963, 2376, 729, 1016, 2025, 2570, 3090, 2524, 1868, 254, 2720, 1505, 1567, 1530, 2274, 1325, 2498, 1598, 472, 974, 1538, 569, 1889, 3078, 463, 2528, 0, 2874, 2759, 404, 18, 2268, 555, 945, 3103, 1835, 815, 1336, 1135, 3296, 865, 1717, 2362, 609, 2457, 1628, 2508, 867, 1858, 2825, 1340, 962, 1502, 2420, 216, 2072, 1336, 2678, 1375, 259, 123, 930, 2346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
assert(poly_from_bytes(poly_from_byte_in1) == poly_from_byte_out1)
assert(poly_from_bytes(poly_from_byte_in2) == poly_from_byte_out2)
poly_from_data_in1 = [10, 85, -92, 67, 61, -70, -84, 59, 97, 109, 108, 67, 56, -4, -82, -60, -87, 104, 94, -118, -93, 125, 106, 91, -41, 77, 97, -108, -107, -51, 63, -19]
poly_from_data_out1 = [0, 1665, 0, 1665, 0, 0, 0, 0, 1665, 0, 1665, 0, 1665, 0, 1665, 0, 0, 0, 1665, 0, 0, 1665, 0, 1665, 1665, 1665, 0, 0, 0, 0, 1665, 0, 1665, 0, 1665, 1665, 1665, 1665, 0, 0, 0, 1665, 0, 1665, 1665, 1665, 0, 1665, 0, 0, 1665, 1665, 0, 1665, 0, 1665, 1665, 1665, 0, 1665, 1665, 1665, 0, 0, 1665, 0, 0, 0, 0, 1665, 1665, 0, 1665, 0, 1665, 1665, 0, 1665, 1665, 0, 0, 0, 1665, 1665, 0, 1665, 1665, 0, 1665, 1665, 0, 0, 0, 0, 1665, 0, 0, 0, 0, 1665, 1665, 1665, 0, 0, 0, 0, 1665, 1665, 1665, 1665, 1665, 1665, 0, 1665, 1665, 1665, 0, 1665, 0, 1665, 0, 0, 1665, 0, 0, 0, 1665, 1665, 1665, 0, 0, 1665, 0, 1665, 0, 1665, 0, 0, 0, 1665, 0, 1665, 1665, 0, 0, 1665, 1665, 1665, 1665, 0, 1665, 0, 0, 1665, 0, 1665, 0, 0, 0, 1665, 1665, 1665, 0, 0, 0, 1665, 0, 1665, 1665, 0, 1665, 1665, 1665, 1665, 1665, 0, 0, 1665, 0, 1665, 0, 1665, 1665, 0, 1665, 1665, 0, 1665, 1665, 0, 1665, 0, 1665, 1665, 1665, 0, 1665, 0, 1665, 1665, 1665, 0, 1665, 1665, 0, 0, 1665, 0, 1665, 0, 0, 0, 0, 1665, 1665, 0, 0, 0, 1665, 0, 1665, 0, 0, 1665, 1665, 0, 1665, 0, 1665, 0, 0, 1665, 1665, 0, 1665, 1665, 0, 0, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 0, 0, 1665, 0, 1665, 1665, 0, 1665, 1665, 1665]
poly_from_data_in2 = [-40, 120, -118, -53, -9, -119, 15, 78, 30, 97, -87, -13, 94, 47, 70, -119, -103, -103, 20, -86, -66, -46, 26, -111, 8, -117, -49, 38, 15, -73, -102, 81]
poly_from_data_out2 = [0, 0, 0, 1665, 1665, 0, 1665, 1665, 0, 0, 0, 1665, 1665, 1665, 1665, 0, 0, 1665, 0, 1665, 0, 0, 0, 1665, 1665, 1665, 0, 1665, 0, 0, 1665, 1665, 1665, 1665, 1665, 0, 1665, 1665, 1665, 1665, 1665, 0, 0, 1665, 0, 0, 0, 1665, 1665, 1665, 1665, 1665, 0, 0, 0, 0, 0, 1665, 1665, 1665, 0, 0, 1665, 0, 0, 1665, 1665, 1665, 1665, 0, 0, 0, 1665, 0, 0, 0, 0, 1665, 1665, 0, 1665, 0, 0, 1665, 0, 1665, 0, 1665, 1665, 1665, 0, 0, 1665, 1665, 1665, 1665, 0, 1665, 1665, 1665, 1665, 0, 1665, 0, 1665, 1665, 1665, 1665, 0, 1665, 0, 0, 0, 1665, 1665, 0, 0, 0, 1665, 0, 1665, 0, 0, 1665, 0, 0, 0, 1665, 1665, 0, 0, 1665, 1665, 0, 0, 1665, 1665, 0, 0, 1665, 1665, 0, 0, 1665, 0, 0, 1665, 0, 1665, 0, 0, 0, 0, 1665, 0, 1665, 0, 1665, 0, 1665, 0, 1665, 1665, 1665, 1665, 1665, 0, 1665, 0, 1665, 0, 0, 1665, 0, 1665, 1665, 0, 1665, 0, 1665, 1665, 0, 0, 0, 1665, 0, 0, 0, 1665, 0, 0, 1665, 0, 0, 0, 1665, 0, 0, 0, 0, 1665, 1665, 0, 1665, 0, 0, 0, 1665, 1665, 1665, 1665, 1665, 0, 0, 1665, 1665, 0, 1665, 1665, 0, 0, 1665, 0, 0, 1665, 1665, 1665, 1665, 0, 0, 0, 0, 1665, 1665, 1665, 0, 1665, 1665, 0, 1665, 0, 1665, 0, 1665, 1665, 0, 0, 1665, 1665, 0, 0, 0, 1665, 0, 1665, 0]
assert(poly_from_data(poly_from_data_in1) == poly_from_data_out1)
assert(poly_from_data(poly_from_data_in2) == poly_from_data_out2)
poly_to_msg_in1 = [3320, 1509, 3277, 1673, 10, 3214, 3300, 134, 1727, 3233, 1652, 3259, 1705, 82, 1655, 3325, 39, 3304, 1616, 3278, 0, 1593, 79, 1603, 1778, 1669, 49, 3211, 63, 8, 1515, 3286, 1701, 3307, 1656, 1839, 1662, 1632, 3317, 3315, 3280, 1742, 107, 1593, 1609, 1689, 52, 1697, 3289, 80, 1614, 1709, 66, 1678, 25, 1673, 1757, 1646, 156, 1700, 1788, 1617, 3245, 3266, 1561, 3298, 3309, 3222, 101, 1686, 1633, 3259, 1744, 3132, 1536, 1691, 3202, 1495, 1605, 3290, 3284, 3321, 1697, 1724, 3328, 1727, 1581, 81, 1653, 1735, 21, 20, 4, 64, 1671, 3316, 3288, 20, 3244, 1608, 1584, 1713, 3288, 0, 3295, 3172, 1719, 1635, 1683, 1810, 1594, 1589, 4, 1770, 1652, 1781, 3303, 1773, 3287, 1720, 3317, 3256, 1616, 3219, 117, 3265, 1705, 1720, 1597, 171, 34, 1508, 12, 1642, 3248, 1681, 26, 3228, 36, 1800, 59, 1807, 1556, 15, 151, 1609, 1689, 1610, 1757, 146, 1780, 43, 162, 1708, 3234, 1752, 3248, 19, 3289, 1727, 1610, 1565, 70, 102, 3260, 1717, 109, 1585, 1588, 3312, 1628, 1658, 1724, 1604, 1746, 3254, 106, 1630, 30, 1785, 3223, 1692, 1668, 3293, 1725, 1640, 86, 1674, 1605, 3232, 1646, 3167, 1536, 1632, 1579, 207, 1695, 3302, 1559, 1701, 1640, 3188, 1873, 1616, 3242, 31, 1641, 53, 1675, 3294, 40, 3282, 3274, 1709, 1742, 17, 3287, 3289, 1745, 98, 1789, 3319, 133, 1663, 1611, 3275, 1718, 25, 1644, 3301, 3327, 1583, 1586, 85, 1658, 1630, 52, 58, 1705, 1708, 1641, 1641, 1776, 1787, 1668, 1634, 120, 75, 1715, 3152, 1645, 1667, 3, 1652, 1695, 1707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
poly_to_msg_out1 = [10, 85, -92, 67, 61, -70, -84, 59, 97, 109, 108, 67, 56, -4, -82, -60, -87, 104, 94, -118, -93, 125, 106, 91, -41, 77, 97, -108, -107, -51, 63, -19]
poly_to_msg_in2 = [1637, 3159, 3281, 1577, 114, 3244, 1772, 9, 1689, 87, 49, 47, 3230, 3226, 1624, 1704, 104, 1, 1668, 3204, 3266, 1658, 1617, 1726, 3251, 100, 1749, 1583, 1711, 1553, 95, 3231, 1632, 1669, 3328, 3135, 54, 1587, 3236, 1550, 1646, 3270, 1821, 1653, 3248, 1731, 3204, 1677, 6, 67, 3202, 3294, 3324, 3290, 3309, 1705, 1736, 1612, 3279, 1672, 1729, 17, 3313, 78, 1669, 42, 131, 1634, 57, 3307, 1670, 1603, 77, 52, 1683, 3282, 3, 31, 3327, 1812, 21, 85, 1707, 1650, 1746, 1835, 30, 1735, 34, 32, 1718, 11, 1641, 1552, 1764, 28, 27, 82, 3252, 3307, 3269, 1588, 1600, 62, 1602, 3317, 1747, 1589, 6, 32, 1735, 1650, 194, 1635, 1750, 1754, 1758, 3318, 1629, 3308, 3280, 6, 1681, 1592, 1, 1621, 1612, 1686, 1582, 103, 1682, 3291, 3288, 173, 3267, 1790, 1719, 1741, 3315, 1604, 1624, 1579, 3243, 3179, 3304, 6, 3317, 64, 3245, 1667, 1646, 1745, 1608, 3289, 1768, 1797, 35, 1727, 94, 1736, 1683, 1556, 3230, 23, 3302, 3242, 1669, 72, 3324, 44, 1874, 1665, 3222, 3294, 41, 1571, 1702, 1747, 3141, 92, 1566, 3286, 3276, 1807, 3244, 3276, 102, 139, 38, 1639, 1627, 1759, 1575, 1606, 1604, 1667, 34, 3214, 1676, 122, 1672, 1799, 1683, 3243, 3305, 1749, 1726, 1604, 16, 1789, 1637, 11, 3235, 86, 1558, 1534, 1533, 1699, 1677, 1640, 1688, 3274, 1562, 1715, 1604, 1586, 1705, 1740, 48, 1612, 1714, 6, 138, 1639, 55, 1590, 3318, 161, 1776, 3230, 3257, 1613, 1717, 1617, 99, 1712, 3279, 1609, 1750, 3322, 1452, 1688, 3211, 3288, 3241, 1708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
poly_to_msg_out2 = [73, -63, -28, 60, -93, -83, -128, 27, -55, -124, -68, 116, 96, -51, 94, -20, -123, 59, -32, -83, 67, -116, -109, -32, 79, -25, -58, -33, 111, 74, -82, -115]
assert(poly_to_msg(poly_to_msg_in1) == poly_to_msg_out1)
assert(poly_to_msg(poly_to_msg_in2) == poly_to_msg_out2)
get_np_seed1 = [-128, 53, 8, -15, -92, -21, -89, 117, -36, 93, 90, -21, 102, 29, -69, -108, -42, -120, -7, 78, -58, 19, 127, -62, 65, 72, 70, 45, 35, 37, 39, -8]
get_np_nonce1 = 0
get_np_paramsk1 = 2
get_np_out1 = [-3, 0, 0, 0, 0, -3, 0, -1, 0, 1, 1, 0, 1, 1, 1, -1, 0, -1, 1, 1, 1, -2, 1, 0, 1, 1, 0, 0, 2, 0, 0, 0, -2, 1, -1, 1, -1, -2, -2, -2, -1, -2, 2, -2, -2, 2, 1, 1, 1, -2, 1, -2, 1, -2, 1, 0, -1, 0, -1, -2, 0, -1, 1, -1, 0, -2, 2, -1, 0, 0, 0, -1, 0, 1, -1, 0, 3, 2, 0, 1, 0, 0, 0, -2, -2, 1, -1, 2, -2, 0, 0, 0, 0, 1, 0, -2, -1, -2, 1, 2, 1, 1, -1, 0, 1, 1, 2, -1, 0, 0, -1, 1, 2, 1, 1, 1, 2, 1, 1, 0, 1, 2, -2, 2, 0, 1, -2, 0, 0, 1, 0, -1, 1, -1, -1, 3, 0, 1, 2, 2, 0, 0, 1, 0, 0, 1, 2, 1, 0, 1, -1, 0, -2, 1, 1, -1, 2, -1, 2, 1, 2, -1, 0, 1, -1, -2, -2, -2, -1, -1, -3, -1, -1, -1, -3, 1, 0, -2, 1, 0, 1, 0, 0, 1, -2, 1, 0, -1, -1, 2, -1, 1, 0, -1, 0, -1, -1, 0, 0, 1, -1, 0, 0, 1, -1, 0, -1, 0, 1, 1, 0, 0, -1, -2, 0, 1, 1, -1, -2, -1, 0, -1, 1, 0, -2, 1, 0, 2, 0, 1, 0, -1, 2, 1, 1, -1, 2, 0, 1, -1, 0, -1, -1, 1, -1, 1, -2, -2, -1, 0, -2, 1, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
get_np_seed2 = [-128, 53, 8, -15, -92, -21, -89, 117, -36, 93, 90, -21, 102, 29, -69, -108, -42, -120, -7, 78, -58, 19, 127, -62, 65, 72, 70, 45, 35, 37, 39, -8]
get_np_nonce2 = 2
get_np_paramsk2 = 3
get_np_out2 = [-1, 0, 0, -1, -2, 0, 0, 0, 1, -1, 1, -1, 1, 0, 2, 0, -1, 1, -1, 0, 1, 0, 1, 1, 0, 1, 0, -1, 0, 1, 0, -1, 1, 0, -1, 0, 0, -1, 2, -1, 0, -2, 0, -1, 1, 0, 2, -2, 0, -1, 0, 0, -1, 0, 0, -1, 1, -1, 0, 1, 1, -1, -1, 2, -1, 0, 0, 1, 0, 0, 0, 1, 1, -2, 1, 1, 0, -1, 1, 0, -2, 0, 0, 1, 2, 0, 0, 2, 0, 1, 1, 0, 0, 1, 1, 0, -1, -2, 0, 2, -1, 0, 0, -1, 0, 0, -1, 2, 0, 0, 0, -1, 0, -1, 0, 0, 0, 2, 0, 1, -2, 0, 0, 0, 1, 1, -1, 0, 0, 0, 2, 0, -2, 0, 0, 0, -2, 0, 1, 2, 0, 1, -1, 0, 0, 0, 0, 0, -1, 2, 0, -1, 0, 1, 0, -2, 0, 1, 0, -2, 1, 1, -1, 1, 0, 0, 0, 1, -1, -2, -1, 2, 0, 0, 1, 0, 0, -1, -1, 0, 0, 0, 2, 1, 1, -1, 0, -1, -1, 0, 0, -2, 0, 0, 0, 2, -1, 0, -1, 0, 0, -2, 1, 2, 0, 1, 1, -1, 0, 2, -1, 1, 2, 1, 0, 0, 2, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, -2, 2, 0, -1, -1, -2, -1, 1, -2, 0, 0, 0, -1, -1, 0, 2, -2, 0, 0, 1, -1, 1, 0, 2, 0, 1, 1, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
assert(get_noise_poly(get_np_seed1, get_np_nonce1, get_np_paramsk1) == get_np_out1)
assert(get_noise_poly(get_np_seed2, get_np_nonce2, get_np_paramsk2) == get_np_out2)
poly_mul_inA1 = [2412, 696, 1794, 2713, 1223, 326, 2195, 2015, 1455, 819, 1774, 509, 1031, 1631, 1568, 822, 1918, 1037, 3142, 3197, 27, 1018, 1584, 25, 1539, 497, 2941, 1342, 2983, 273, 609, 1591, 2814, 2050, 2455, 3302, 109, 2695, 1631, 14, 748, 2526, 1663, 2579, 877, 435, 2699, 2530, 2077, 3083, 1168, 727, 1008, 2551, 240, 3302, 3252, 3166, 3243, 1505, 3157, 2426, 1723, 2678, 1528, 265, 1885, 1925, 555, 2386, 824, 1070, 1045, 2612, 1090, 129, 1243, 1183, 784, 1225, 964, 1906, 1615, 1889, 3327, 769, 1903, 1369, 1887, 2885, 1966, 2669, 2490, 1291, 1704, 961, 397, 2259, 746, 1878, 1563, 2749, 1733, 2496, 2054, 2300, 51, 608, 2209, 105, 2976, 2419, 2471, 1718, 2646, 541, 2946, 2887, 3304, 61, 529, 2885, 2331, 680, 2462, 2777, 502, 2414, 1598, 1401, 2184, 338, 1615, 1796, 1075, 1688, 2848, 2895, 1464, 1088, 2279, 2702, 2330, 1598, 1743, 2243, 155, 890, 680, 2780, 866, 702, 366, 3222, 1309, 3303, 2560, 2869, 15, 2456, 673, 2527, 891, 86, 3252, 109, 1762, 2053, 187, 2448, 303, 2039, 486, 348, 2216, 1056, 3121, 1948, 221, 231, 422, 681, 2759, 223, 2963, 2919, 1703, 1637, 34, 1139, 2060, 2481, 346, 1626, 2877, 2366, 2685, 2501, 549, 474, 403, 2315, 3188, 575, 413, 1336, 1875, 2425, 1223, 2749, 1122, 2518, 2678, 1370, 1591, 2707, 585, 704, 1314, 700, 3246, 1550, 603, 3299, 2974, 2357, 132, 857, 2648, 2524, 2666, 2979, 656, 996, 237, 458, 2452, 2225, 2585, 2226, 1705, 832, 151, 3162, 769, 115, 2269, 1597, 1106, 1814, 2468, 2397, 2851, 1054, 2431, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
poly_mul_inB1 = [7044, 1504, 7072, 1418, 3454, 924, 3994, 2270, 3064, 2068, 5266, -200, 4927, 2547, 6547, 4533, 6727, 3907, 4079, 849, 4800, 1774, 2218, -1586, 3420, -1434, 2628, -3318, 6660, -1387, 3892, 179, 1376, -870, 3356, 910, 1743, 1079, 1465, 3637, 5971, -17, 3737, 1703, 2884, 4253, 180, 3185, 439, 4797, 1719, 1819, 978, 1567, 356, 3685, -50, -639, -282, 991, -112, 2486, -1760, 342, 5252, 2219, 4806, -2067, 3231, 690, 4827, 1374, 2727, 341, 5029, 641, 187, -830, 549, -3096, 1946, 1160, 450, -2486, 1595, 1494, 2933, 2192, 1028, -404, -606, -1434, -4085, -3699, -1677, -4287, 3800, 553, 922, 2053, 606, 1748, 2356, -1118, -3500, 1034, -672, 816, -945, 1455, 1849, -437, 2107, -3515, -313, -1015, 2961, -1291, 777, -2339, 4694, -767, 1636, -1943, 768, 296, -438, -3370, 6142, -1004, 6858, 490, 6592, -2613, 7100, -2073, 5744, 2707, 5584, -33, 2987, 342, 2881, 776, 2868, 1491, 2206, 4423, 1564, -626, -1158, -836, 4400, 1876, 4774, 1246, 3026, 3684, 5552, 2454, -1947, -3320, -657, -5718, 905, -4720, 563, -4686, 2764, -1284, 1512, -2550, 2565, -1697, 599, -3361, 4879, -775, 5195, -3799, 5329, -3370, 5229, -1548, 5090, 1356, 3208, -244, 2051, 528, 43, -2844, 1287, 1227, 3749, 4409, 3013, -47, 275, -513, 158, -716, -1996, 470, 1478, -640, 332, -798, 2759, -65, 1209, -1351, 4173, -1258, 4843, -1838, 816, 2709, 3556, 2069, 5083, -159, 3889, 85, 4249, 3077, 3475, -101, 3545, 1501, 2647, -1829, 5645, 2146, 2549, 4048, 398, 1246, 3396, 4056, -730, 4080, -278, 5664, 1843, 2313, 1885, 4791, -1096, 5242, -416, 4654, 2994, 2910, -90, 2986, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
poly_mul_out1 = [-2287, -824, 52, 2208, 78, -235, 650, 1179, 448, -541, 1447, 317, -1702, 2217, 450, -962, 2419, 2814, -434, 1347, 767, -1493, 151, 1403, 560, 658, 281, 2085, 962, -1927, 302, -567, -320, -1913, -1225, -784, -1173, 222, 1050, 1355, -2477, 265, 869, -1919, -459, 318, -386, 1084, -1481, -247, -2377, -155, -405, -1052, 463, 1611, 1426, -1391, 1431, 2733, 16, 453, -726, -2255, -1734, -308, -1412, -490, -1235, 1088, -1144, -579, -654, 1793, 2265, -1077, 1529, -885, 1316, -242, 2069, -1652, 673, -846, 1639, 1988, 600, -1359, -834, -1932, -668, 2126, 1666, -402, -2066, -1207, -668, 2259, 80, 618, 504, -788, -1260, 1612, 2354, -2053, 1523, -299, -1838, -1740, 117, -478, -1527, -948, -822, -285, 2206, 2639, 961, -1007, 1991, -622, 550, 693, 1815, 958, 123, 2072, 102, 2969, -1142, -1600, -613, 511, 925, 1844, 491, -252, -1968, 2390, 743, -378, 74, 1339, 2463, 408, 391, 999, -1872, 1396, 268, -2839, -1878, 380, -325, -761, -1561, -328, -2146, 647, -799, 957, -31, -2757, 2716, 683, 1082, 319, 1681, -2616, -231, -1352, 2262, -352, -800, -640, 1264, 1086, 882, 1383, 455, -223, -179, -1876, -720, 1607, 604, 1758, 882, 784, -2096, 583, -549, 1224, -687, 855, -1169, -1976, 2277, 2546, 1, -2491, 2338, -1318, 1156, -1753, -566, 273, -2936, 1982, 825, -737, 790, -253, -735, 1286, 125, 1366, 1287, -1653, 2007, 1570, -2411, 474, -2247, 1804, 2062, 435, 3290, -758, -728, 201, -2002, -331, 2800, 112, -273, -1026, 756, 2078, 1755, -2204, -1696, 635, -1477, -255, 1996, 275, -2189, -1774, 2078, -1769, -140, 1830, 1157, -597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
poly_mul_inA2 = [3244, 928, 2904, 1745, 1952, 800, 2277, 446, 3103, 2167, 1691, 2353, 3009, 1779, 2463, 791, 1122, 658, 741, 2804, 2368, 550, 1071, 1360, 68, 3278, 591, 1243, 2116, 3316, 1324, 2406, 3061, 140, 2914, 276, 389, 944, 619, 128, 2450, 1727, 1247, 2781, 1961, 2513, 2023, 2946, 729, 1764, 1545, 2905, 2515, 1156, 718, 3328, 2499, 2870, 2940, 1355, 2003, 2532, 1496, 2091, 2025, 654, 2962, 1225, 2417, 3052, 1041, 1469, 1056, 3036, 1987, 1084, 531, 1010, 1880, 1250, 1419, 586, 1860, 3140, 1429, 185, 2948, 204, 1852, 866, 64, 2209, 1843, 2377, 837, 631, 2195, 2450, 3180, 205, 3217, 2387, 1674, 525, 3002, 1512, 2910, 3004, 894, 3249, 156, 3031, 858, 235, 2231, 2244, 151, 448, 2336, 2292, 3101, 3079, 1901, 1722, 245, 3170, 3160, 2780, 2554, 1378, 1346, 1396, 2731, 2222, 696, 921, 2241, 823, 2780, 1171, 2739, 2470, 1257, 2154, 1428, 1024, 1259, 1268, 1431, 561, 87, 526, 821, 2521, 885, 3082, 1061, 431, 2112, 560, 130, 1850, 2364, 2819, 2914, 1858, 14, 1876, 1682, 748, 3018, 334, 1074, 1116, 179, 935, 1670, 2447, 1818, 2066, 2647, 2398, 2470, 734, 1109, 2974, 2418, 879, 194, 2671, 2136, 226, 162, 1963, 2376, 729, 1016, 2025, 2570, 3090, 2524, 1868, 254, 2720, 1505, 1567, 1530, 2274, 1325, 2498, 1598, 472, 974, 1538, 569, 1889, 3078, 463, 2528, 0, 2874, 2759, 404, 18, 2268, 555, 945, 3103, 1835, 815, 1336, 1135, 3296, 865, 1717, 2362, 609, 2457, 1628, 2508, 867, 1858, 2825, 1340, 962, 1502, 2420, 216, 2072, 1336, 2678, 1375, 259, 123, 930, 2346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
poly_mul_inB2 = [5575, 3028, 4199, 2404, 7096, -503, 4342, 843, 1832, 1779, 340, 2529, 3817, 2328, 2767, 3096, 3135, 5096, -611, 7088, 2405, 5766, 883, 2362, 2287, 4236, 29, 6558, 2593, 4646, 5791, 2040, 1165, 2035, 2707, 771, 538, 3330, -22, 1552, -1189, 3022, -1013, 438, -3705, 1664, -1753, 3940, 469, 859, -647, 1349, 1170, 3325, 3872, 479, 6763, -650, 4023, -1812, 2776, -565, 1342, 1303, 4579, -749, 7711, -2083, 4597, -1273, 2845, 1685, 857, 2516, 1703, 4692, 2678, 2706, 3198, 10, 7834, 1518, 5236, -1180, 3932, 2597, 3730, 1737, 4480, 640, 1736, 2538, 4082, 1337, 4018, 2765, -3509, -2032, -927, 388, -1333, -2481, 1101, -2183, 1257, -3265, -751, -407, 2080, -2092, 3170, -2928, 215, 469, 2087, 3677, -482, -1984, 1844, 714, 519, 572, 2555, -670, 1816, 655, 1190, -1777, 5365, 634, 4799, 440, 2115, -262, 4709, 484, 7087, 4408, 7891, 2732, 5918, 1069, 4076, 3767, 2360, 3830, 2476, 5032, -649, 4327, 1737, 4655, 2977, 2271, 387, 1543, 2730, 4350, 3094, 5792, 224, 2744, 2762, 414, 23, 727, -1189, -1549, 5063, 1556, 1657, 2286, 4150, -90, 1158, 8, 4246, 4395, 968, 4207, -1993, 5085, 811, 7133, 3325, 2824, 85, 3180, -308, 3684, 570, 532, 1681, 5214, 177, 2420, -301, 1114, 1835, -216, 687, 5948, 2677, 3344, -1921, 3979, 725, 6333, 2220, 5721, 2420, 5039, 3009, 1224, 4771, 3112, 1033, 3337, 2557, 4375, 3069, 5315, 1953, 4989, -701, 4154, 783, 5884, -659, 7269, 2241, 5121, 1727, 9663, 1771, 7899, 71, 6450, 2855, 9584, 6757, 7468, 3369, 5066, 3043, 4181, 3959, 5425, 5149, 8906, 6275, 11656, 2982, 8065, 1914, 5561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
poly_mul_out2 = [248, -653, 1809, 2592, 526, 1689, -950, -457, 1575, 1627, 711, -1422, 1515, -118, 614, 2809, -762, -125, -10, 105, 2522, -194, 587, -965, 604, -499, 189, -1027, 603, -51, -37, -149, 44, 583, -528, -1471, 2335, -2078, -1890, 1085, 1991, 1026, 272, 329, 1406, -1519, -75, 2331, 658, -847, -1517, -2409, 2681, 1061, 2011, -77, -659, 1956, 643, 484, -388, 107, -50, -2916, 3022, 488, 1130, -163, 937, 857, -641, -1825, -1364, -1402, 1694, -2497, -127, -670, 2562, 1561, 2100, -791, -1356, -1465, 1143, 1823, -1204, 259, 1416, -872, 2139, -1061, 501, 415, 562, -95, 1108, 2233, 705, -665, 1133, 1994, 1483, -985, -353, -1303, 2639, -40, -151, -1544, -1672, 373, -1627, 966, 333, -523, 635, 379, 578, -1169, -881, 1378, -298, -1553, 59, -2342, 779, -813, 1091, 2037, -2371, -1436, 192, 444, -2241, -660, -218, -148, -1986, -549, 272, 971, -823, 1490, 2670, 1834, -1222, 1664, -1384, -1641, -2067, 1425, 1637, -1985, 345, 295, -3, -1224, 44, 1980, -255, 2246, 1194, 1598, 1337, 264, 13, 952, 1904, 1595, 479, -168, 334, -1359, -1554, -1453, -1275, -1970, 1203, 637, -55, 1637, 907, -393, 99, -514, 1109, -310, -286, 2310, 206, -944, -1435, 657, -556, 3007, -174, 96, -984, -1360, -360, 398, -214, -97, 1740, -1067, 705, -108, 1734, -1256, -408, 319, 819, 31, -295, 650, 2013, 1237, 900, -288, 99, 2809, 840, -2213, -378, 1632, -1492, -737, 2138, 1392, 1609, 1887, 859, -577, -2312, 1232, -1370, 1150, 1783, 109, 60, 1447, -797, 226, -2715, 1259, -590, 2039, -1640, -2556, -939, 461, -3130, 151, 755, -894, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
assert(poly_basemul_mont(poly_mul_inA1, poly_mul_inB1)==poly_mul_out1)
assert(poly_basemul_mont(poly_mul_inA2, poly_mul_inB2)==poly_mul_out2)
poly_to_mont_in1 = [651, 1637, 1802, 81, 859, 2511, 1047, 1099, 1974, 90, 2184, 2256, 1947, 2828, 451, 2404, 1563, 2268, 3178, 2049, 185, 2359, 2139, 2391, 506, 3083, 2606, 2833, 188, 1468, 3151, 925, 3010, 57, 1511, 2874, 480, 974, 2746, 871, 2477, 977, 406, 1119, 1964, 1483, 3076, 2971, 3218, 891, 1807, 2601, 2460, 3251, 335, 1086, 2951, 797, 2501, 356, 586, 1107, 2476, 1291, 1940, 1980, 1727, 2786, 2909, 3103, 2455, 2416, 3297, 1229, 67, 292, 139, 1913, 690, 1848, 274, 42, 1367, 1080, 2022, 1453, 1477, 1504, 3314, 2655, 2053, 1661, 1617, 1937, 1572, 2814, 2068, 47, 2611, 2213, 97, 3237, 323, 2239, 1047, 150, 2812, 1135, 243, 2154, 2481, 1616, 2859, 1898, 896, 2723, 668, 1918, 31, 923, 2359, 2126, 2202, 1955, 2202, 2053, 2148, 204, 2811, 3276, 2251, 1277, 1201, 1747, 347, 380, 1026, 1286, 1999, 2747, 3310, 65, 2788, 896, 100, 2186, 1835, 541, 2163, 1026, 774, 2048, 2319, 399, 2253, 2058, 2882, 420, 897, 329, 1141, 904, 1944, 1335, 1298, 762, 2820, 2693, 3220, 673, 217, 379, 1631, 2957, 3302, 861, 1119, 18, 2904, 1528, 293, 2744, 1940, 2638, 1152, 670, 2147, 2298, 406, 2141, 278, 2960, 1083, 1456, 1540, 357, 1145, 624, 1692, 692, 2597, 3189, 3188, 2618, 1161, 2026, 787, 2025, 1625, 2447, 2788, 1267, 1319, 2852, 344, 1879, 2827, 2385, 2820, 619, 2781, 3283, 1687, 2418, 363, 1006, 2215, 1697, 258, 626, 2580, 391, 2943, 2625, 3217, 132, 3179, 927, 1034, 2361, 3070, 960, 378, 1151, 1301, 3280, 1445, 1656, 370, 1671, 2392, 692, 934, 1648, 371, 1242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
poly_to_mont_out1 = [-528, -1251, -403, -1339, -1295, -1561, -1156, 1149, -205, -748, 269, 1668, 1351, 391, -1455, 290, -562, -873, 1181, 1391, -58, 664, 643, 546, 1047, 491, -871, -1500, 139, -1252, -592, -290, 136, 414, 462, -1027, 1559, -1511, -555, -507, 645, -1314, -1081, 243, 248, -267, 1141, 904, -631, -1413, 1035, 1020, -1581, 1536, -195, 1405, -1519, 182, -1108, 1184, 752, -545, 1689, 441, -1328, 189, 1330, 962, -948, -415, 310, 1078, 118, -1411, -39, 1420, 1360, 228, -1296, 1508, 238, -571, 993, 1011, -382, 1092, -661, 1112, -985, 1237, 544, 325, -345, -1525, 29, 1691, 1529, 867, 567, -46, -1398, -493, -983, -558, -1156, -137, 450, 184, -688, 1628, -202, 699, 1317, -757, 25, 154, -1631, 1666, 926, -1531, 664, 899, 1451, -343, 1451, 544, 1234, 80, 1494, -1261, 230, -1588, 1189, 424, 593, -569, 794, -997, 327, -1599, -138, -1280, -1126, 25, -1201, 1510, -1565, 1126, -1110, 794, 891, -894, -853, -431, 1471, -1347, 608, 948, -1019, -589, 578, 1660, 1154, 1111, -209, 103, -1244, 1513, 610, -193, -176, 475, 1684, -1125, 1556, -54, 243, 1182, 943, -641, 376, 1533, -1328, -989, -919, -390, -1051, 1097, -1081, -1445, -609, -928, 1208, 1289, 147, 140, -269, 1028, 1251, -55, -1462, -316, 728, -83, -328, -1229, 635, -185, 1290, -1325, -1126, -1135, 1170, -1362, 396, -895, 1435, 152, -1244, -410, -476, 1418, -187, -1010, 534, -1629, 1195, -640, 297, -1060, -359, 1263, 175, -733, 413, -1319, 137, 951, -900, -1424, 747, -211, 1519, 125, -12, 1221, -543, -1113, -116, -128, -498, -55, 301, 581, -1160, 1662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
poly_to_mont_in2 = [2399, 3252, 1763, 3052, 2842, 908, 2874, 191, 941, 2538, 1161, 463, 2234, 307, 2887, 3093, 825, 2555, 1517, 1585, 1595, 1258, 2425, 2437, 3314, 2374, 2342, 1285, 251, 1357, 1132, 1421, 1257, 925, 3039, 2626, 1159, 677, 734, 991, 538, 1369, 2360, 5, 2189, 1674, 2198, 1982, 96, 2243, 4, 690, 1788, 2723, 1494, 2850, 3208, 694, 606, 469, 2861, 1498, 1329, 401, 62, 2349, 968, 2564, 2897, 1653, 2469, 1307, 1542, 2678, 768, 801, 623, 2326, 2663, 3224, 2656, 1877, 2746, 2828, 1796, 2443, 2959, 1413, 1519, 683, 2191, 2060, 271, 2337, 540, 2561, 315, 2823, 1639, 2218, 1094, 1337, 2570, 59, 1767, 1781, 1017, 1563, 2684, 3303, 889, 666, 1149, 1376, 2890, 2092, 2150, 2842, 1580, 297, 2364, 2211, 739, 1970, 1333, 2570, 2614, 1780, 1507, 3280, 1533, 501, 2580, 2018, 1972, 2191, 1533, 169, 1524, 2016, 51, 918, 422, 3164, 2750, 262, 625, 869, 2847, 1970, 1083, 2837, 803, 969, 2258, 2284, 2382, 969, 2380, 3053, 2338, 1734, 50, 2817, 1150, 2413, 1338, 1064, 616, 443, 683, 861, 2827, 1752, 2016, 584, 1727, 2464, 1201, 1752, 2410, 2214, 1287, 1217, 3139, 300, 59, 299, 1563, 979, 2581, 3189, 1235, 1178, 2666, 1925, 3213, 1367, 2096, 420, 2788, 1785, 1900, 2982, 74, 2926, 1964, 2869, 1463, 2516, 3218, 2695, 1702, 1569, 2552, 2519, 4, 3204, 2126, 1819, 184, 213, 603, 1918, 2339, 826, 1216, 13, 1333, 728, 2312, 1069, 758, 787, 1840, 2311, 2848, 1606, 1918, 568, 2974, 2783, 52, 362, 438, 2378, 1280, 2153, 460, 2798, 1671, 1536, 1827, 1919, 103, 2317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
poly_to_mont_out2 = [-1148, 492, 365, -435, -909, 813, -1027, 336, -349, 212, -328, -667, 1333, -924, -1283, 38, 911, -891, 856, -227, -680, 1603, 1669, -872, -985, 1649, -1562, 47, 947, 1446, -13, 1210, -682, -290, -179, 1552, -1569, -1040, -626, 715, 929, -1095, -380, 1438, 1707, 69, -1031, 1430, -354, -1405, -847, -1296, 897, 154, 1565, 726, -178, 1186, -154, -273, -771, 718, 717, 810, -1477, 1117, 1424, -300, 1593, -1310, -990, 382, 1388, 528, 497, -665, -1257, -1503, -457, -237, 193, 1193, -555, 391, -797, -478, 116, -425, -1232, -646, -381, -106, 41, 329, -1159, -497, 711, -1047, -10, 1392, -289, -977, 94, 1655, -482, 1547, 203, -562, 922, 512, 675, 457, -1116, 1584, -1086, -224, -854, -909, 1664, -471, -1227, -1287, 812, 642, -130, 94, 764, -738, 1309, 1221, 797, -391, -359, 465, -1446, -381, 797, 1, 206, -776, 20, 360, -1140, -848, -1402, -550, -16, 1581, 529, 642, 1208, 982, 576, 380, -420, -932, -45, 380, -1286, -1479, -715, 680, 1064, -1441, 1169, 881, 1308, 1070, -607, 239, -646, -54, 1435, -1467, -776, -489, 1330, 901, 1189, -1467, 684, -1090, 1288, 1130, -1380, -274, 1655, 770, -562, -73, -1403, -316, -1017, -1431, -260, 1016, 1260, 993, -1071, 948, -1126, 700, 484, -593, -689, 1278, 248, 864, 639, -123, -631, -575, 798, -168, -1088, 74, -847, 669, 899, -1506, 986, 671, -351, 1666, 1570, -133, -1155, -256, -130, -1020, -203, -821, 950, 635, -127, 841, -515, 1152, 1666, -430, 1101, 765, -1024, 1578, -1199, 802, -1391, -657, -864, -1579, -128, 994, 129, 622, -1004, 1235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
assert(poly_to_mont(poly_to_mont_in1) == poly_to_mont_out1)
assert(poly_to_mont(poly_to_mont_in2) == poly_to_mont_out2)
poly_red_in1 = [-2039, -1477, 1861, 4800, 604, 1454, -300, 722, 2023, 1086, 2158, -1105, -187, 2099, 1064, 1847, 1657, 2689, -444, 1452, 3289, -1687, 738, 438, 1164, 159, 470, 1058, 1565, -1978, 265, -716, -276, -1330, -1753, -2255, 1162, -1856, -840, 2440, -486, 1291, 1141, -1590, 947, -1201, -461, 3415, -823, -1094, -3894, -2564, 2276, 9, 2474, 1534, 767, 565, 2074, 3217, -372, 560, -776, -5171, 1288, 180, -282, -653, -298, 1945, -1785, -2404, -2018, 391, 3959, -3574, 1402, -1555, 3878, 1319, 4169, -2443, -683, -2311, 2782, 3811, -604, -1100, 582, -2804, 1471, 1065, 2167, 13, -1504, -1302, 440, 4492, 785, -47, 1637, 1206, 223, 627, 2001, -3356, 4162, -339, -1989, -3284, -1555, -105, -3154, 18, -489, -808, 2841, 3018, 1539, -2176, 1110, 756, 252, -860, 1874, -1384, 902, 1259, 1193, 5006, -3513, -3036, -421, 955, -1316, 1184, 273, -400, -3954, 1841, 1015, 593, -749, 2829, 5133, 2242, -831, 2663, -3256, -245, -1799, -1414, -241, -1605, 20, -466, -1564, -1552, -2102, 2627, -1054, 3203, 1163, -1159, 4053, 947, 1095, 1271, 3585, -1021, 248, -1520, 2596, -1711, -2354, -2093, -11, -884, 2085, 2020, 400, 1414, 728, -2269, -621, 1093, 1713, 1448, 596, 3094, -1890, -361, -1984, 1881, -1243, 3862, -1343, -1880, 1293, 1186, -359, -2093, 2124, -1415, 2896, -2820, 139, 165, -1202, 726, 417, -418, 1609, -222, -1030, 1936, 2138, 2603, 2187, -1941, 2106, 4379, -1571, -1739, -2625, 3436, 570, -302, 5428, 634, 881, 2088, -1143, -908, 488, 1344, -1643, 124, 2539, 2187, 1815, -757, -2493, 861, -4192, 1004, 1406, 2314, -3829, -4330, 1139, -1308, -3270, 1981, 1912, -1491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
poly_red_out1 = [1290, 1852, 1861, 1471, 604, 1454, 3029, 722, 2023, 1086, 2158, 2224, 3142, 2099, 1064, 1847, 1657, 2689, 2885, 1452, 3289, 1642, 738, 438, 1164, 159, 470, 1058, 1565, 1351, 265, 2613, 3053, 1999, 1576, 1074, 1162, 1473, 2489, 2440, 2843, 1291, 1141, 1739, 947, 2128, 2868, 86, 2506, 2235, 2764, 765, 2276, 9, 2474, 1534, 767, 565, 2074, 3217, 2957, 560, 2553, 1487, 1288, 180, 3047, 2676, 3031, 1945, 1544, 925, 1311, 391, 630, 3084, 1402, 1774, 549, 1319, 840, 886, 2646, 1018, 2782, 482, 2725, 2229, 582, 525, 1471, 1065, 2167, 13, 1825, 2027, 440, 1163, 785, 3282, 1637, 1206, 223, 627, 2001, 3302, 833, 2990, 1340, 45, 1774, 3224, 175, 18, 2840, 2521, 2841, 3018, 1539, 1153, 1110, 756, 252, 2469, 1874, 1945, 902, 1259, 1193, 1677, 3145, 293, 2908, 955, 2013, 1184, 273, 2929, 2704, 1841, 1015, 593, 2580, 2829, 1804, 2242, 2498, 2663, 73, 3084, 1530, 1915, 3088, 1724, 20, 2863, 1765, 1777, 1227, 2627, 2275, 3203, 1163, 2170, 724, 947, 1095, 1271, 256, 2308, 248, 1809, 2596, 1618, 975, 1236, 3318, 2445, 2085, 2020, 400, 1414, 728, 1060, 2708, 1093, 1713, 1448, 596, 3094, 1439, 2968, 1345, 1881, 2086, 533, 1986, 1449, 1293, 1186, 2970, 1236, 2124, 1914, 2896, 509, 139, 165, 2127, 726, 417, 2911, 1609, 3107, 2299, 1936, 2138, 2603, 2187, 1388, 2106, 1050, 1758, 1590, 704, 107, 570, 3027, 2099, 634, 881, 2088, 2186, 2421, 488, 1344, 1686, 124, 2539, 2187, 1815, 2572, 836, 861, 2466, 1004, 1406, 2314, 2829, 2328, 1139, 2021, 59, 1981, 1912, 1838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
poly_red_in2 = [-9, 1509, -52, 1673, 10, -115, -29, 3463, 1727, -96, 1652, -70, 1705, 82, 1655, -4, 39, -25, 1616, 3278, 3329, 1593, 3408, 1603, 1778, -1660, 49, -118, 63, 3337, 1515, -43, 1701, -22, 1656, 1839, 1662, 1632, -12, 3315, -49, 1742, 3436, 1593, 1609, 1689, 52, 1697, -40, 3409, 1614, 1709, 66, 1678, 25, 1673, 1757, 1646, 3485, 1700, 1788, 1617, -84, -63, 1561, -31, 3309, 3222, 3430, 1686, 1633, -70, 1744, 3132, 1536, 1691, 3202, 1495, 1605, -39, 3284, -8, 1697, 1724, -1, 1727, 1581, 3410, 1653, 1735, 3350, 20, 3333, 3393, -1658, -13, -41, 20, 3244, 1608, 1584, 1713, -41, 0, -34, 3172, 1719, 1635, 1683, 1810, 1594, 1589, 3333, 1770, 1652, 1781, 3303, 1773, 3287, 1720, -12, -73, 1616, 3219, 3446, 3265, 1705, 1720, 1597, 3500, 3363, 1508, 12, 1642, 3248, 1681, 3355, -101, 36, 1800, 3388, 1807, 1556, 15, 3480, 1609, 1689, 1610, 1757, 3475, 1780, 43, 162, 1708, -95, 1752, -81, 19, 3289, -1602, 1610, 1565, 3399, 3431, 3260, 1717, 109, 1585, 1588, 3312, 1628, -1671, 1724, 1604, 1746, 3254, 106, 1630, 3359, 1785, 3223, 1692, -1661, 3293, 1725, 1640, 3415, 1674, 1605, -97, 1646, 3167, 1536, 1632, 1579, 207, 1695, 3302, 1559, 1701, 1640, 3188, 1873, 1616, -87, 31, 1641, 3382, 1675, 3294, 3369, -47, 3274, 1709, 1742, 3346, 3287, 3289, 1745, 3427, 1789, 3319, 133, 1663, 1611, -54, -1611, 25, 1644, 3301, -2, 1583, 1586, 85, 1658, 1630, 52, 3387, 1705, 1708, 1641, 1641, 1776, 1787, -1661, 1634, 120, 3404, 1715, 3152, 1645, 1667, 3, 1652, 1695, -1622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
poly_red_out2 = [3320, 1509, 3277, 1673, 10, 3214, 3300, 134, 1727, 3233, 1652, 3259, 1705, 82, 1655, 3325, 39, 3304, 1616, 3278, 0, 1593, 79, 1603, 1778, 1669, 49, 3211, 63, 8, 1515, 3286, 1701, 3307, 1656, 1839, 1662, 1632, 3317, 3315, 3280, 1742, 107, 1593, 1609, 1689, 52, 1697, 3289, 80, 1614, 1709, 66, 1678, 25, 1673, 1757, 1646, 156, 1700, 1788, 1617, 3245, 3266, 1561, 3298, 3309, 3222, 101, 1686, 1633, 3259, 1744, 3132, 1536, 1691, 3202, 1495, 1605, 3290, 3284, 3321, 1697, 1724, 3328, 1727, 1581, 81, 1653, 1735, 21, 20, 4, 64, 1671, 3316, 3288, 20, 3244, 1608, 1584, 1713, 3288, 0, 3295, 3172, 1719, 1635, 1683, 1810, 1594, 1589, 4, 1770, 1652, 1781, 3303, 1773, 3287, 1720, 3317, 3256, 1616, 3219, 117, 3265, 1705, 1720, 1597, 171, 34, 1508, 12, 1642, 3248, 1681, 26, 3228, 36, 1800, 59, 1807, 1556, 15, 151, 1609, 1689, 1610, 1757, 146, 1780, 43, 162, 1708, 3234, 1752, 3248, 19, 3289, 1727, 1610, 1565, 70, 102, 3260, 1717, 109, 1585, 1588, 3312, 1628, 1658, 1724, 1604, 1746, 3254, 106, 1630, 30, 1785, 3223, 1692, 1668, 3293, 1725, 1640, 86, 1674, 1605, 3232, 1646, 3167, 1536, 1632, 1579, 207, 1695, 3302, 1559, 1701, 1640, 3188, 1873, 1616, 3242, 31, 1641, 53, 1675, 3294, 40, 3282, 3274, 1709, 1742, 17, 3287, 3289, 1745, 98, 1789, 3319, 133, 1663, 1611, 3275, 1718, 25, 1644, 3301, 3327, 1583, 1586, 85, 1658, 1630, 52, 58, 1705, 1708, 1641, 1641, 1776, 1787, 1668, 1634, 120, 75, 1715, 3152, 1645, 1667, 3, 1652, 1695, 1707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
assert(poly_reduce(poly_red_in1) == poly_red_out1)
assert(poly_reduce(poly_red_in2) == poly_red_out2)
comp_in1 = [
[2435, 404, 273, 2969, 2687, 2766, 331, 2493, 2090, 1078, 777, 30, 658, 2848, 3284, 773, 1113, 2707, 509, 140, 68, 1411, 2366, 812, 1521, 1358, 1989, 1989, 3238, 2842, 255, 693, 2532, 1195, 3247, 496, 2986, 2490, 1974, 677, 1877, 2739, 963, 24, 784, 1018, 535, 742, 364, 1183, 3242, 776, 37, 2273, 2557, 3240, 1565, 641, 3001, 3169, 2135, 1250, 1405, 367, 3154, 936, 1460, 2599, 2980, 183, 2120, 3261, 2159, 817, 546, 1336, 963, 54, 2102, 2133, 2340, 750, 1585, 1111, 1899, 3198, 610, 1600, 795, 2585, 535, 1692, 2179, 1564, 1056, 1580, 1890, 2703, 1798, 1119, 1922, 2438, 96, 2336, 1402, 2747, 2965, 1109, 1926, 1359, 1254, 2193, 765, 2356, 596, 345, 144, 2691, 529, 347, 2221, 2663, 2723, 1963, 2887, 879, 1943, 2421, 1701, 2167, 594, 2196, 940, 229, 1889, 2264, 2445, 542, 175, 1696, 1355, 1034, 212, 768, 1584, 2921, 1112, 579, 3108, 893, 2480, 3087, 62, 78, 341, 224, 1235, 3122, 1199, 854, 773, 2529, 176, 1555, 70, 117, 2443, 2360, 42, 1585, 977, 1728, 1356, 515, 1128, 2576, 841, 2378, 2958, 199, 1916, 1265, 1635, 1488, 2385, 2720, 2390, 2244, 2038, 2235, 1453, 3110, 2943, 1924, 3279, 886, 1472, 1994, 1481, 2077, 2735, 3003, 1084, 1041, 1437, 2518, 2600, 1871, 1529, 1391, 199, 3155, 2977, 2059, 484, 1101, 556, 1646, 1384, 1192, 52, 2773, 2388, 433, 2658, 3038, 2678, 2747, 2046, 2788, 1712, 2867, 577, 2493, 1118, 1692, 1512, 2699, 2600, 1530, 2188, 2290, 345, 2245, 1175, 126, 309, 1766, 44, 274, 2998, 1790, 2405, 1018, 1410, 1250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[2216, 2627, 3010, 3028, 2402, 3170, 3121, 3182, 49, 398, 2091, 3301, 632, 2477, 947, 2629, 2060, 2019, 3320, 260, 1185, 2529, 1967, 786, 1237, 2419, 563, 2553, 3283, 2047, 2193, 244, 43, 2198, 1713, 3176, 3186, 1290, 872, 193, 3290, 2601, 1077, 2125, 76, 2157, 1188, 818, 2291, 572, 599, 2972, 2375, 795, 272, 92, 587, 2396, 920, 1550, 1563, 1755, 1543, 2206, 1365, 2530, 2610, 1, 134, 76, 3044, 1744, 1134, 296, 1983, 3203, 1179, 134, 1624, 2379, 519, 814, 1160, 1743, 1663, 963, 236, 722, 2394, 668, 3324, 332, 3227, 660, 2642, 2115, 3094, 767, 2873, 1727, 1783, 2818, 2107, 1225, 3069, 3054, 1863, 277, 2661, 107, 2039, 2104, 0, 1479, 1255, 2741, 3041, 1335, 1540, 279, 1232, 2628, 3050, 2773, 1188, 1799, 395, 206, 1574, 1811, 1231, 1751, 3213, 88, 1184, 1395, 1378, 1847, 87, 1293, 2666, 2250, 3282, 2303, 1502, 2804, 1574, 990, 1831, 1488, 2546, 46, 1508, 949, 1376, 792, 1965, 537, 951, 489, 2800, 3117, 963, 2440, 1616, 409, 2239, 2980, 2537, 1681, 1960, 947, 2043, 943, 2644, 3037, 2778, 359, 1136, 682, 2087, 338, 2593, 1824, 2432, 2787, 2328, 1677, 2462, 1132, 979, 2382, 77, 1139, 2004, 2404, 1313, 882, 2568, 846, 1028, 2361, 2906, 2918, 176, 835, 857, 2477, 1098, 1983, 1449, 418, 2210, 2416, 1119, 2066, 1147, 2009, 449, 1438, 897, 1760, 2725, 2623, 2503, 1271, 2453, 26, 2003, 2606, 629, 774, 2236, 168, 324, 1775, 877, 1318, 2376, 2350, 2703, 1082, 949, 2521, 330, 2675, 2863, 878, 3144, 1335, 3269, 1073, 1021, 2607, 375, 1310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
]
comp_in_k1 = 2
comp_out1 = [-19, -14, 65, 69, -28, 59, 79, 109, -58, -65, -125, 50, -11, 78, 2, -54, -80, 45, -65, 59, 86, 5, -35, -55, 10, 21, -56, -122, -83, 62, -44, -119, 70, 38, -103, -28, -85, -19, 68, 53, 11, -61, 117, 126, 38, -106, -5, -5, 37, 52, 65, 46, -115, -46, 1, -15, -28, 84, 10, 57, 112, -80, 85, -2, 59, 11, -20, 58, 113, -7, -31, 21, -77, -7, -13, -111, 2, 6, 91, 28, -54, -125, 20, -36, -57, -107, -29, -64, -24, -6, -104, -18, -125, -54, 102, 40, 69, 112, 40, -92, -48, -98, -125, -98, 85, 72, 98, -49, 11, 123, -11, 108, 92, 10, -126, -98, -122, 87, -108, 121, 69, -2, -100, 34, 86, 79, -70, -21, -63, -77, -81, 53, 13, 121, 85, 80, -118, 38, -40, -88, -21, 84, 123, -117, 26, 44, -16, 60, -54, 26, -85, -50, 108, 52, -105, 120, 59, 100, 101, -70, 11, 110, 122, -53, -88, 33, 25, 81, 36, -82, -16, -98, 98, -125, -126, -95, -7, 20, 4, 59, -25, 9, 110, -107, 44, -68, 79, -76, -81, -19, 19, 96, -112, 70, 17, 124, 1, 31, -41, 65, -18, 40, 108, -125, 119, 22, -112, -16, -82, -75, 13, -96, -41, 18, -123, -95, 121, -78, 21, -58, 3, 109, -21, 120, 15, 77, 22, 118, -97, 114, -34, 22, -3, -83, -84, 115, -66, -6, 91, -17, -119, 67, 25, 127, 68, -59, -107, -119, -36, -97, 73, 115, -34, 20, 80, -70, 29, 12, 50, -112, -42, -79, -42, -125, -14, -108, -25, 89, -55, 84, -85, -24, -89, -38, 91, 16, 84, -3, 109, 33, 50, -101, -114, 115, -45, 117, 106, -3, -96, -36, -79, -4, -117, 21, -126, -47, -7, 12, -14, 117, -95, 2, -85, -58, -84, 105, -99, -16, -59, -121, 14, 80, -95, -7, -119, -28, -26, 36, 27, 96, -86, -94, -20, -7, -24, -29, 62, 15, -4, -12, 15, -24, 49, -24, -3, -62, -24, 59, 82, -54, 122, -74, -39, 63, 20, 109, 41, -36, -91, 60, 125, -95, -37, 74, -60, -14, -37, 57, -22, 18, 13, -112, -6, 96, -12, -44, 55, -58, -48, 14, -12, -125, -68, -108, -93, 23, 92, -38, 22, 63, -63, -62, -126, -117, -28, -37, -42, 67, 5, 7, -75, -124, -69, 81, 119, -31, 113, -72, -35, -87, -92, 41, 60, 50, 0, 41, 92, -128, 58, -122, 93, 109, 33, 102, -10, 107, -91, 64, 31, -73, -96, -24, 83, 22, -122, 0, -94, -108, -124, 55, -32, 54, -29, -65, 25, -31, 47, -45, -14, -94, -72, -77, 67, -9, -124, 36, -114, -115, 104, 94, -80, -81, -34, 99, 21, 51, -121, 48, -25, -95, 0, 28, 39, -40, -46, -89, 111, -90, -99, 21, 123, -95, -84, 122, -43, 109, -91, -88, -57, 15, -28, -75, -72, -41, -122, -36, 111, -64, 86, 107, -88, -31, -72, -127, 99, 52, -45, 42, 63, -79, -50, 125, 77, 94, 76, 51, 42, -9, -80, 3, -48, -111, 116, 26, 61, 92, -106, 82, -110, 37, 93, -1, -114, -46, -69, -15, -7, 17, 107, -27, 12, 23, -72, -27, 72, 116, -118, -44, -78, -23, 87, -69, -47, -107, 52, -126, -94, -31, 113, -116, -20, 102, -51, 44, -127, -11, 114, -43, 82, -73, 24, 120, -123, -26, -72, -108, 61, 100, 49, 65, 60, 89, -21, -73, -32, 54, 4, -124, -112, -66, 82, -119, -23, 91, 32, -88, -98, -117, 21, -97, 97, -87, -87, -120, 110, 20, 117, 104, -12, -55, 2, 31, 54, 47, 2, 104, -118, 28, -116, 59, -80, -46, 64, -122, -120, 14, 85, -74, -19, -76, 63, 55, 69, -46, -63, 102, -36, 28, -73, 67, -57, 111, -26, -66, 82, 58, -119, 60, -57, 100]
comp_in2 = [
[294, 2838, 1861, 1956, 2156, 877, 1639, 1259, 2523, 2416, 149, 1076, 1485, 688, 2895, 2458, 1366, 897, 1487, 3224, 1817, 2549, 14, 2815, 782, 1428, 3265, 748, 1897, 3264, 3140, 3023, 1764, 2188, 145, 1886, 2648, 1970, 466, 1794, 174, 1493, 46, 909, 2973, 1755, 1464, 203, 1572, 1323, 1720, 974, 1900, 572, 2228, 2280, 1673, 1030, 1295, 2710, 154, 690, 939, 72, 1085, 2549, 2391, 3014, 1149, 1490, 1233, 377, 590, 2184, 2693, 581, 1794, 947, 1207, 2158, 1779, 828, 347, 2024, 636, 1491, 458, 109, 976, 321, 2515, 74, 49, 2457, 3033, 1256, 2780, 702, 1334, 1749, 2869, 2474, 2082, 2002, 542, 865, 1135, 1951, 1143, 895, 973, 233, 2100, 254, 3191, 2737, 3172, 1887, 3147, 2115, 1518, 1727, 2110, 178, 2586, 1957, 815, 610, 1222, 1781, 1811, 1301, 1958, 2239, 2535, 1484, 1584, 1686, 2206, 1264, 153, 1292, 2453, 1852, 361, 2351, 2275, 2636, 2426, 2952, 1951, 2781, 819, 947, 3210, 1176, 1740, 201, 520, 1521, 1419, 787, 1447, 2511, 2563, 1166, 2773, 1926, 84, 539, 2846, 26, 176, 2469, 236, 813, 2297, 3010, 1917, 1368, 1833, 1896, 775, 1361, 1876, 1544, 1122, 874, 2510, 2387, 1754, 502, 2731, 541, 1737, 1059, 2824, 2080, 3200, 951, 914, 2493, 1093, 1869, 1218, 2133, 1211, 156, 42, 889, 2999, 705, 3012, 13, 2462, 1613, 2396, 813, 1511, 468, 1693, 3316, 121, 838, 1932, 1353, 3098, 1053, 3102, 2764, 1539, 152, 1742, 2015, 796, 3260, 2280, 696, 109, 1388, 1475, 2812, 12, 165, 1149, 317, 2966, 1647, 2282, 506, 977, 589, 2619, 3207, 1572, 2778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[693, 2651, 710, 2660, 2984, 1178, 2188, 2337, 407, 510, 1071, 825, 2466, 1405, 793, 490, 644, 1632, 2950, 1830, 968, 375, 1590, 1642, 214, 1307, 2573, 1909, 3287, 936, 315, 1227, 245, 2746, 1470, 3308, 559, 2005, 1425, 1409, 169, 1576, 1742, 449, 360, 374, 1335, 1448, 426, 2687, 606, 2559, 380, 2928, 2605, 2751, 88, 2200, 1060, 47, 1917, 2462, 1603, 3273, 3247, 1010, 1949, 956, 1338, 946, 107, 631, 316, 753, 1383, 1630, 1372, 2702, 1002, 61, 1012, 2675, 2776, 510, 2161, 3057, 1323, 616, 1726, 546, 1396, 269, 2413, 2136, 906, 2215, 2465, 1932, 981, 1865, 2455, 109, 614, 2429, 157, 653, 2009, 3271, 2349, 887, 500, 701, 3252, 2143, 380, 682, 2646, 1781, 54, 962, 3245, 50, 956, 2545, 2724, 569, 3005, 273, 1005, 2131, 268, 1217, 1019, 1858, 204, 1966, 1209, 845, 1671, 475, 2602, 1727, 2824, 2040, 2488, 1196, 2827, 480, 890, 1720, 570, 2482, 2267, 3185, 2884, 2352, 2394, 2744, 2611, 15, 2649, 804, 2642, 370, 1655, 1310, 909, 1981, 739, 2694, 2997, 1711, 103, 1042, 299, 1379, 780, 1360, 2826, 515, 674, 764, 2029, 3084, 2940, 1344, 3266, 713, 3165, 2499, 2515, 2573, 1667, 1558, 1268, 1827, 2249, 1773, 755, 250, 3225, 2218, 2018, 2097, 244, 2579, 1633, 1148, 662, 729, 2450, 1122, 850, 1585, 1059, 1811, 1889, 2869, 720, 3052, 2659, 3268, 2766, 2561, 2356, 1149, 1843, 417, 2559, 2672, 1749, 714, 1141, 906, 1061, 2067, 886, 2982, 2776, 2980, 1458, 1365, 2625, 530, 2866, 1779, 137, 80, 3005, 2142, 1956, 1674, 2517, 2231, 1658, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
]
comp_in_k2 = 2
comp_out2 = [90, -92, -51, -93, -106, -105, 58, -124, -33, 96, 8, -97, -21, -62, 82, -55, 81, -77, 55, -67, -92, 81, -108, 28, -8, 47, 66, 76, -128, -40, -15, -36, -58, -66, 57, 72, -78, 111, -68, -24, 31, -122, -38, 2, -111, 47, 123, -7, 8, -118, 54, 44, -25, 0, 70, -110, 115, 40, -100, 15, -28, 93, 22, 33, 75, 72, -62, -46, 106, -81, 3, -10, -28, -104, -48, 47, 80, 19, -110, 5, 78, 65, -4, -19, -25, 97, 41, -73, 23, 29, -75, -128, -54, -13, 44, 40, -114, 52, 23, -90, 35, -2, -77, -58, -101, -60, 44, -41, -120, 8, 44, -115, 97, -16, 5, 15, -48, 91, -70, 96, 87, 99, -93, -103, -122, 115, -25, 11, 40, -102, -89, 40, -44, 21, -106, 96, 77, -76, 18, 18, -122, 58, 97, -67, -46, -48, 19, -119, -4, -94, -45, 77, -104, -24, 13, 27, 107, -71, 15, 47, 120, -111, -40, 34, 100, 90, -58, -54, 48, 114, -25, 29, 120, 106, 97, 47, 52, 54, -81, -114, 111, 76, -53, -21, -54, -22, 50, -114, -27, -43, -4, -116, -76, -67, 90, 23, -6, 0, 10, 117, -76, -55, -45, 27, -63, 20, -97, 85, 53, -108, 26, -104, -78, 54, 2, 54, -36, -101, -124, 62, -61, 122, -18, 100, 105, 52, 30, -23, -50, 104, 65, 110, -105, 85, 67, 4, 123, -53, -95, 38, 72, -101, 98, -95, 81, 101, 3, -118, 125, 73, 25, -3, 11, -43, -113, 119, 65, 90, 23, 12, 13, 68, -92, 121, 54, -98, 19, 80, 47, 124, -31, -22, 19, 29, 36, 9, -14, 95, -126, 64, 82, -126, -106, 59, 81, -70, 75, -99, -35, 11, 24, -78, 89, -49, -6, -67, 90, 35, -62, 106, -58, -123, 77, -64, 12, 97, -119, 1, -7, 126, -66, 114, -46, 82, 45, 38, 107, 79, -34, -43, -43, -68, -84, -115, -52, -106, -85, 21, -22, -77, 125, 116, -110, -108, 63, -9, -62, 70, -49, 37, -58, -40, -73, -8, -116, 42, -51, -111, 94, 126, 66, 72, 118, -15, -110, -13, -125, 20, 70, 94, 75, 52, 77, -100, -2, -84, -92, 105, 91, 108, 52, -108, -121, -95, 34, 111, -52, -79, 89, 111, -125, -20, -84, -53, -60, 117, 20, 30, -78, -45, 27, -108, 106, -108, 3, 78, -42, -37, -34, -5, -25, -33, -124, -91, 73, -100, -115, 20, -126, 48, 97, -96, -109, 90, 125, -90, -3, 76, -45, 4, 55, -35, 108, 117, 39, -103, -78, 126, 89, 47, 19, -94, -46, -38, 20, -26, 70, 122, 81, -86, -10, 74, -23, -110, -113, -13, -118, -48, -53, -70, 48, 36, -93, -90, -5, -45, 70, -92, 9, 54, -24, 79, 90, -121, 52, 46, -109, 24, 1, 74, -26, 63, 96, -46, -61, 70, -65, -62, 57, 21, 53, 61, 42, -123, 93, 57, -15, -8, 67, -105, 116, 17, 36, -96, 36, 32, 79, 88, 54, -99, -3, -62, 101, 54, 37, 18, 69, -8, -54, -66, -71, 82, 127, -9, -76, -32, 50, 61, 114, 1, 47, -33, -45, -78, 28, -3, 77, -122, 81, -104, -29, -12, -84, -71, -125, 32, 4, -59, 5, 106, -16, -120, 86, -74, 39, -49, -84, 3, 103, -19, -120, 119, -42, -2, 54, -50, 7, 108, -16, -59, 1, 126, 103, -104, -116, -76, -122, -120, 78, 19, -32, -85, -38, 102, -95, 75, 100, 108, 95, 88, -52, -128, 35, 111, 86, 5, -95, 103, 84, -117, 69, -50, -35, -51, -22, 50, -73, 63, 53, -59, -43, -122, 117, 35, 32, 19, -37, -84, 33, 55, 95, 93, 100, 20, -97, 17, 85, 110, 117, -27, -64, -111, 118, -14, 40, 114, -113, -88, 66, 6, -100, 79, -86, -27, -128, 6, -69, -22, -33, 7]
assert(compress_polyvec(comp_in1, comp_in_k1) == comp_out1)
assert(compress_polyvec(comp_in2, comp_in_k2) == comp_out2)
poly_decomp_in1 = [-19, -14, 65, 69, -28, 59, 79, 109, -58, -65, -125, 50, -11, 78, 2, -54, -80, 45, -65, 59, 86, 5, -35, -55, 10, 21, -56, -122, -83, 62, -44, -119, 70, 38, -103, -28, -85, -19, 68, 53, 11, -61, 117, 126, 38, -106, -5, -5, 37, 52, 65, 46, -115, -46, 1, -15, -28, 84, 10, 57, 112, -80, 85, -2, 59, 11, -20, 58, 113, -7, -31, 21, -77, -7, -13, -111, 2, 6, 91, 28, -54, -125, 20, -36, -57, -107, -29, -64, -24, -6, -104, -18, -125, -54, 102, 40, 69, 112, 40, -92, -48, -98, -125, -98, 85, 72, 98, -49, 11, 123, -11, 108, 92, 10, -126, -98, -122, 87, -108, 121, 69, -2, -100, 34, 86, 79, -70, -21, -63, -77, -81, 53, 13, 121, 85, 80, -118, 38, -40, -88, -21, 84, 123, -117, 26, 44, -16, 60, -54, 26, -85, -50, 108, 52, -105, 120, 59, 100, 101, -70, 11, 110, 122, -53, -88, 33, 25, 81, 36, -82, -16, -98, 98, -125, -126, -95, -7, 20, 4, 59, -25, 9, 110, -107, 44, -68, 79, -76, -81, -19, 19, 96, -112, 70, 17, 124, 1, 31, -41, 65, -18, 40, 108, -125, 119, 22, -112, -16, -82, -75, 13, -96, -41, 18, -123, -95, 121, -78, 21, -58, 3, 109, -21, 120, 15, 77, 22, 118, -97, 114, -34, 22, -3, -83, -84, 115, -66, -6, 91, -17, -119, 67, 25, 127, 68, -59, -107, -119, -36, -97, 73, 115, -34, 20, 80, -70, 29, 12, 50, -112, -42, -79, -42, -125, -14, -108, -25, 89, -55, 84, -85, -24, -89, -38, 91, 16, 84, -3, 109, 33, 50, -101, -114, 115, -45, 117, 106, -3, -96, -36, -79, -4, -117, 21, -126, -47, -7, 12, -14, 117, -95, 2, -85, -58, -84, 105, -99, -16, -59, -121, 14, 80, -95, -7, -119, -28, -26, 36, 27, 96, -86, -94, -20, -7, -24, -29, 62, 15, -4, -12, 15, -24, 49, -24, -3, -62, -24, 59, 82, -54, 122, -74, -39, 63, 20, 109, 41, -36, -91, 60, 125, -95, -37, 74, -60, -14, -37, 57, -22, 18, 13, -112, -6, 96, -12, -44, 55, -58, -48, 14, -12, -125, -68, -108, -93, 23, 92, -38, 22, 63, -63, -62, -126, -117, -28, -37, -42, 67, 5, 7, -75, -124, -69, 81, 119, -31, 113, -72, -35, -87, -92, 41, 60, 50, 0, 41, 92, -128, 58, -122, 93, 109, 33, 102, -10, 107, -91, 64, 31, -73, -96, -24, 83, 22, -122, 0, -94, -108, -124, 55, -32, 54, -29, -65, 25, -31, 47, -45, -14, -94, -72, -77, 67, -9, -124, 36, -114, -115, 104, 94, -80, -81, -34, 99, 21, 51, -121, 48, -25, -95, 0, 28, 39, -40, -46, -89, 111, -90, -99, 21, 123, -95, -84, 122, -43, 109, -91, -88, -57, 15, -28, -75, -72, -41, -122, -36, 111, -64, 86, 107, -88, -31, -72, -127, 99, 52, -45, 42, 63, -79, -50, 125, 77, 94, 76, 51, 42, -9, -80, 3, -48, -111, 116, 26, 61, 92, -106, 82, -110, 37, 93, -1, -114, -46, -69, -15, -7, 17, 107, -27, 12, 23, -72, -27, 72, 116, -118, -44, -78, -23, 87, -69, -47, -107, 52, -126, -94, -31, 113, -116, -20, 102, -51, 44, -127, -11, 114, -43, 82, -73, 24, 120, -123, -26, -72, -108, 61, 100, 49, 65, 60, 89, -21, -73, -32, 54, 4, -124, -112, -66, 82, -119, -23, 91, 32, -88, -98, -117, 21, -97, 97, -87, -87, -120, 110, 20, 117, 104, -12, -55, 2, 31, 54, 47, 2, 104, -118, 28, -116, 59, -80, -46, 64, -122, -120, 14, 85, -74, -19, -76, 63, 55, 69, -46, -63, 102, -36, 28, -73, 67, -57, 111, -26, -66, 82, 58, -119, 60, -57, 100]
poly_decomp_out1 = [
[2435, 403, 273, 2968, 2689, 2767, 332, 2493, 2090, 1079, 777, 29, 657, 2848, 3283, 774, 1112, 2708, 510, 140, 68, 1411, 2367, 813, 1521, 1359, 1990, 1990, 3238, 2841, 254, 692, 2533, 1196, 3248, 497, 2984, 2490, 1973, 676, 1876, 2741, 962, 23, 783, 1018, 536, 741, 364, 1183, 3241, 777, 36, 2272, 2559, 3241, 1564, 640, 3001, 3170, 2136, 1248, 1404, 367, 3153, 936, 1460, 2598, 2981, 182, 2120, 3261, 2159, 816, 546, 1336, 962, 55, 2103, 2133, 2341, 751, 1586, 1112, 1899, 3199, 611, 1599, 796, 2585, 536, 1691, 2178, 1564, 1057, 1580, 1889, 2702, 1798, 1118, 1921, 2438, 98, 2337, 1401, 2747, 2965, 1109, 1925, 1359, 1255, 2194, 764, 2357, 595, 345, 143, 2692, 530, 348, 2220, 2663, 2724, 1964, 2887, 878, 1944, 2422, 1700, 2168, 595, 2194, 940, 228, 1889, 2263, 2445, 543, 176, 1697, 1356, 1034, 211, 767, 1583, 2919, 1112, 579, 3108, 894, 2480, 3088, 62, 78, 341, 224, 1235, 3121, 1200, 855, 774, 2529, 176, 1554, 72, 117, 2441, 2360, 42, 1586, 979, 1730, 1356, 514, 1128, 2575, 842, 2376, 2958, 198, 1915, 1265, 1635, 1489, 2386, 2721, 2389, 2243, 2038, 2233, 1453, 3111, 2942, 1925, 3280, 888, 1473, 1993, 1482, 2077, 2734, 3004, 1083, 1040, 1437, 2520, 2601, 1873, 1528, 1391, 198, 3153, 2978, 2058, 484, 1102, 556, 1645, 1385, 1193, 52, 2773, 2389, 432, 2659, 3036, 2679, 2747, 2045, 2789, 1713, 2867, 575, 2493, 1118, 1691, 1512, 2698, 2601, 1531, 2188, 2289, 345, 2246, 1174, 127, 309, 1765, 46, 273, 2997, 1791, 2406, 1018, 1411, 1248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[2217, 2627, 3010, 3027, 2402, 3170, 3121, 3183, 49, 397, 2090, 3300, 631, 2477, 946, 2630, 2061, 2019, 3319, 260, 1187, 2529, 1967, 787, 1239, 2419, 562, 2552, 3283, 2048, 2194, 244, 42, 2198, 1713, 3176, 3186, 1291, 871, 192, 3290, 2601, 1076, 2126, 75, 2155, 1187, 819, 2292, 572, 598, 2971, 2376, 796, 273, 91, 588, 2396, 920, 1551, 1564, 1756, 1544, 2207, 1365, 2529, 2611, 0, 133, 75, 3043, 1743, 1135, 296, 1983, 3202, 1180, 133, 1625, 2380, 520, 813, 1161, 1743, 1665, 962, 237, 722, 2393, 666, 3322, 332, 3228, 660, 2643, 2116, 3095, 767, 2874, 1726, 1782, 2819, 2107, 1226, 3069, 3053, 1863, 276, 2663, 107, 2038, 2103, 0, 1479, 1255, 2741, 3040, 1336, 1541, 280, 1232, 2627, 3049, 2773, 1187, 1798, 397, 205, 1573, 1811, 1232, 1752, 3212, 88, 1183, 1395, 1378, 1847, 88, 1294, 2666, 2250, 3283, 2302, 1502, 2806, 1573, 992, 1830, 1489, 2546, 46, 1508, 949, 1375, 793, 1964, 536, 953, 488, 2799, 3118, 962, 2441, 1616, 410, 2240, 2981, 2536, 1681, 1960, 946, 2042, 943, 2643, 3036, 2780, 358, 1135, 683, 2087, 338, 2594, 1824, 2432, 2786, 2328, 1678, 2461, 1131, 979, 2383, 78, 1138, 2003, 2402, 1313, 881, 2568, 845, 1027, 2360, 2906, 2919, 176, 836, 858, 2477, 1099, 1983, 1450, 419, 2211, 2415, 1118, 2068, 1148, 2009, 449, 1437, 897, 1759, 2724, 2624, 2503, 1271, 2454, 26, 2003, 2607, 627, 774, 2237, 169, 325, 1775, 878, 1317, 2376, 2350, 2702, 1083, 949, 2520, 332, 2676, 2864, 878, 3144, 1336, 3270, 1073, 1021, 2607, 374, 1310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
]
poly_decomp_in_k1 = 2
poly_decomp_in2 = [-108, 62, -90, 63, 32, 25, -80, -94, 88, -100, 68, 115, -46, 59, -123, -73, 91, -7, 27, -115, -32, 46, -24, 88, -44, 86, -119, 37, 64, -121, 98, 88, 0, 123, 35, 98, 18, 25, 58, -50, 59, -107, -57, -116, 89, -44, 88, 126, -19, -38, 23, 75, -50, 97, -31, -80, -124, -8, 94, 83, 67, 53, -10, 117, 125, -103, -78, 26, 119, -126, 90, 104, 98, -68, 0, -128, -79, 28, -86, 0, -104, 34, -58, 28, -2, 58, -76, 100, -57, -6, -108, -2, -66, -112, -70, 20, 45, -103, 38, 37, -35, -116, -12, -4, 15, 82, -128, 87, 84, -93, -94, 108, -112, 88, 12, -67, -44, -30, 117, 58, -114, 118, -30, -78, 66, 77, -55, 17, 26, 100, 15, -20, -62, -11, 90, 50, 95, 7, 119, 121, 48, -21, 56, -76, -76, -90, 75, -46, -108, -105, 117, -73, 98, 40, 123, 32, 38, 124, -21, 124, -91, 54, -56, -111, -70, -4, -91, 33, -89, 120, 83, -29, -25, 77, 49, 44, -114, 44, 33, -23, 120, 14, -43, -19, 7, 122, -16, -8, -103, 20, 58, -121, 9, -114, 40, -102, 3, 81, 32, 96, 63, -33, -64, 14, 72, 122, -49, -36, 49, -23, 7, 31, -98, 82, 43, -41, 18, -120, -36, 85, 57, 123, -71, -92, 77, 18, 32, 9, -34, 32, 123, 93, 78, -102, 65, 81, 4, 83, -31, 60, -40, -112, -6, 100, 49, -71, -31, -2, -42, -59, 28, 44, 54, 25, -70, -123, 28, -27, 85, -19, 22, 125, 53, 95, 82, 110, 78, -23, -55, 103, 120, -75, 44, 3, 95, -114, -106, -3, -103, -10, 89, 127, 66, -21, -106, 17, -24, 103, 46, -20, -28, 108, -26, -56, 69, -123, 25, -80, -100, 10, 13, 23, -42, -97, 72, -14, 115, 70, 9, 68, 59, 39, 81, -45, 97, -56, 104, 90, -73, 15, -63, 12, -107, -35, 30, 60, 72, 47, 44, 115, -95, -120, 75, 20, 33, -54, -39, -22, 32, 105, -12, 33, 72, 30, -51, -49, 86, -52, 98, 1, -25, -85, 62, 77, -15, 127, 104, -91, -61, -16, 104, 67, 8, 24, -112, 84, -76, -50, 109, 44, -33, 60, 51, -44, 68, -52, -73, 62, 79, -52, 14, -82, 15, 126, 61, 4, 54, 103, -64, 118, -29, -93, 23, 110, 84, -59, -72, -81, 63, 82, -9, 26, 29, -9, -30, 127, 49, 127, 116, 94, -74, 0, 105, 82, 81, -72, 63, 126, -83, 44, 18, 72, -65, 52, 99, -114, 35, 84, 21, -53, -7, 28, -18, 49, -113, 124, 74, 58, 48, -57, -96, 68, -89, -104, 24, -4, 7, -115, 1, -74, -35, -45, -87, -19, -26, 51, 42, 66, -44, 85, 63, -32, 22, 125, -94, 105, -78, 115, -37, 79, -13, -46, 38, -6, -79, -42, 95, 65, -127, 51, 98, 114, -35, -59, 126, 30, 81, -106, -59, 73, 96, 16, -3, 45, -87, -84, 109, -62, -37, 48, -67, -41, -87, -3, -66, 35, -104, 88, 44, -126, -2, 20, 47, -20, -114, 0, -6, -44, 24, 93, 46, 95, -17, -11, -55, -87, -66, 15, -119, 42, 78, 20, -25, -121, -50, 74, 61, -74, -80, 44, 2, -67, 54, -11, -86, -40, -7, 39, 76, -74, 83, 29, 17, -117, -28, 74, 4, 16, -54, -80, 101, 38, 99, 58, 114, -85, -37, -61, 38, -124, 90, -105, -126, 11, 58, 78, -26, -127, 68, -51, -77, 123, 113, -71, 48, -71, -92, -90, 48, 110, 95, -81, -9, -80, -84, -45, -46, 66, 119, 37, 104, 90, 101, 113, 80, 38, -57, -33, 86, -23, 21, 109, 46, 104, -2, 125, 11, -47, -45, 109, -21, 7, 103, -4, -102, -117, 95, 56, -6, 84, 125, 17, 55, -118, 19, -93, -58, 55, 92, -112]
poly_decomp_out2 = [
[2146, 1297, 3309, 416, 81, 559, 1281, 2032, 2718, 507, 3111, 1730, 3092, 1944, 1453, 1834, 2393, 1700, 1294, 2760, 1112, 1151, 7, 1759, 319, 72, 3069, 458, 1983, 1886, 3020, 2679, 1024, 1577, 663, 1164, 689, 2984, 2363, 2845, 2572, 2971, 1756, 2929, 572, 1772, 1609, 1083, 1050, 1291, 2806, 1629, 2162, 2224, 2864, 1694, 293, 501, 3140, 7, 1248, 2640, 2188, 7, 2159, 1274, 1495, 3303, 189, 979, 384, 3261, 2146, 3118, 868, 2425, 897, 1908, 2006, 481, 718, 946, 3170, 205, 267, 1560, 1057, 2123, 527, 88, 1278, 159, 614, 588, 2802, 757, 2126, 510, 2646, 865, 1083, 371, 1356, 1300, 49, 608, 2796, 1180, 2659, 1531, 2861, 1577, 2653, 1853, 2715, 2347, 3036, 475, 1083, 1970, 2877, 562, 2100, 1599, 1769, 2526, 2259, 1622, 2201, 1707, 923, 2425, 1651, 341, 2035, 1567, 2767, 1638, 722, 640, 1808, 2611, 1723, 3030, 2055, 1050, 2383, 101, 397, 1860, 1349, 267, 2685, 1980, 728, 527, 2997, 208, 1681, 1248, 2702, 179, 767, 936, 2893, 2663, 2591, 3030, 2520, 2936, 966, 562, 2363, 1678, 1482, 1115, 2682, 1970, 1908, 1008, 59, 1899, 1560, 426, 1232, 2988, 1365, 852, 263, 627, 1733, 790, 702, 2198, 1921, 640, 1434, 3095, 1193, 2572, 91, 1284, 1310, 2419, 432, 1063, 1138, 3085, 904, 1141, 1622, 1070, 2022, 1934, 514, 1349, 1222, 2643, 163, 1235, 2126, 2825, 1349, 3205, 2786, 517, 2250, 1960, 55, 1645, 2412, 3069, 741, 1336, 462, 907, 1265, 20, 1492, 137, 2539, 1265, 1655, 943, 3283, 1339, 481, 884, 2689, 237, 1005, 1271, 650, 2165, 2877, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[627, 1050, 1538, 400, 195, 3179, 2295, 1495, 523, 2399, 1053, 429, 1489, 2256, 1710, 1365, 1625, 1691, 1573, 2666, 2337, 2565, 1808, 16, 3248, 3049, 686, 3137, 413, 1125, 189, 3131, 2835, 1717, 1248, 1873, 273, 3059, 2380, 575, 725, 673, 1050, 894, 3160, 3059, 790, 2656, 1710, 3261, 3225, 796, 1678, 1499, 20, 1544, 3235, 1586, 2396, 1096, 640, 3270, 3309, 1066, 2467, 2724, 2864, 2949, 1245, 3160, 2728, 1226, 592, 1873, 956, 1057, 3095, 2962, 2363, 579, 59, 3179, 2741, 1287, 2958, 858, 1109, 2640, 809, 2936, 2594, 1860, 2068, 2139, 2507, 2588, 520, 1512, 1281, 319, 3316, 2708, 78, 2367, 3215, 2042, 2373, 3001, 1830, 449, 1053, 1115, 205, 1430, 3176, 2110, 2006, 767, 1427, 1037, 2454, 1417, 3023, 2311, 3192, 283, 65, 670, 1983, 2796, 302, 1648, 930, 1313, 289, 959, 312, 2718, 2389, 2198, 1391, 504, 1443, 634, 3111, 2045, 3205, 2480, 114, 1788, 2305, 1691, 826, 3137, 2295, 1856, 1665, 1034, 1291, 1209, 2646, 3196, 2802, 2624, 2214, 3274, 468, 553, 254, 1473, 410, 2685, 1073, 1297, 2533, 579, 839, 1401, 2767, 2220, 1534, 1658, 631, 2370, 1102, 231, 575, 2971, 241, 3, 523, 2298, 1993, 653, 3036, 1482, 3053, 800, 2016, 1717, 2789, 536, 598, 754, 1918, 393, 234, 2669, 3079, 306, 2988, 631, 601, 1382, 2529, 1430, 2806, 1596, 2546, 2243, 2350, 585, 2874, 484, 2003, 1112, 2568, 1044, 2620, 3280, 1187, 3033, 901, 3001, 2087, 3306, 2903, 215, 1031, 1427, 3261, 1460, 3140, 2012, 2949, 1739, 3027, 1102, 1239, 1469, 530, 254, 2194, 1616, 1466, 1876, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
]
poly_decomp_in_k2 = 2
assert(decompress_polyvec(poly_decomp_in1, poly_decomp_in_k1) == poly_decomp_out1)
assert(decompress_polyvec(poly_decomp_in2, poly_decomp_in_k2) == poly_decomp_out2)
polyvec_to_bytes_in1 = [[1049, 1042, 703, 2032, 865, 1998, 23, 3022, 2331, 1379, 2093, 7, 2255, 2904, 488, 1275, 401, 1703, 3048, 649, 1729, 438, 2972, 1316, 89, 2254, 470, 525, 610, 2967, 2421, 108, 126, 395, 438, 1845, 2267, 1336, 2483, 875, 2286, 1207, 3125, 1836, 2738, 1636, 2326, 643, 2263, 496, 2204, 1859, 3106, 2278, 833, 738, 1940, 2502, 2738, 2790, 8, 1241, 1706, 2910, 2881, 1921, 1812, 907, 2343, 760, 1551, 1631, 2564, 1945, 2372, 976, 1600, 2353, 3218, 2168, 420, 1804, 1191, 2604, 315, 3326, 1580, 2621, 1090, 2979, 1005, 435, 2953, 1447, 1810, 1362, 2201, 2838, 3302, 2138, 2783, 1471, 1639, 859, 1800, 1760, 2599, 3259, 1269, 468, 1708, 444, 272, 2850, 1336, 3089, 1883, 420, 373, 617, 3148, 2259, 1175, 2830, 261, 409, 132, 1705, 2795, 2391, 1575, 2719, 1534, 794, 1517, 1351, 901, 157, 1941, 440, 1564, 736, 1398, 2024, 3097, 2715, 2794, 2217, 2103, 2028, 1816, 1457, 1009, 376, 453, 2405, 2334, 1992, 1488, 2693, 212, 2833, 496, 3244, 597, 362, 1521, 3023, 2300, 2669, 2842, 2768, 819, 2910, 2308, 2254, 57, 2882, 708, 1475, 671, 2267, 572, 1582, 1540, 423, 202, 890, 2076, 2223, 2950, 2854, 1213, 1574, 3010, 278, 349, 1889, 607, 447, 2690, 561, 292, 606, 2425, 63, 1321, 3114, 781, 1380, 2049, 1658, 3271, 287, 1589, 3213, 691, 527, 1243, 1154, 1024, 1005, 2851, 351, 3028, 2084, 1377, 1926, 2658, 415, 2467, 2336, 1778, 1389, 674, 477, 1043, 1176, 2236, 1957, 2559, 3269, 1354, 2622, 2932, 3090, 1634, 624, 19, 358, 132, 370, 560, 2270, 2015, 1370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[2787, 2182, 296, 2729, 2977, 344, 615, 2509, 466, 391, 3252, 3203, 2836, 1539, 893, 1022, 3253, 1448, 1554, 661, 1709, 1772, 1464, 2430, 251, 1143, 1985, 2438, 2796, 848, 2538, 2422, 961, 1670, 1224, 375, 3283, 961, 1472, 533, 2697, 834, 1899, 2757, 1551, 2295, 1833, 3156, 1525, 708, 2028, 1934, 2946, 2895, 48, 896, 1913, 2523, 1113, 366, 1910, 2110, 3229, 1059, 3276, 1430, 96, 2343, 2046, 1825, 2204, 1357, 1047, 1358, 932, 209, 1195, 3220, 2441, 430, 2543, 1794, 3139, 1827, 82, 561, 911, 489, 2255, 34, 1948, 2041, 2568, 123, 2383, 48, 3305, 1598, 421, 2339, 2042, 900, 47, 2308, 1853, 1556, 922, 1432, 2672, 104, 1236, 1195, 1847, 72, 1882, 2934, 2293, 112, 852, 304, 2644, 2284, 2112, 961, 2802, 2466, 2078, 2204, 807, 843, 1361, 2845, 258, 1844, 1625, 3314, 540, 2417, 2866, 1781, 1417, 2104, 2417, 2271, 948, 2487, 976, 1498, 1184, 3314, 297, 2477, 2878, 990, 1106, 3240, 19, 2450, 1049, 3251, 3203, 994, 2682, 2509, 3107, 440, 91, 1958, 1634, 402, 3061, 1957, 2511, 1939, 773, 3166, 1465, 1237, 1609, 824, 2577, 1840, 1742, 313, 1767, 710, 675, 449, 1417, 2077, 2555, 2531, 1429, 2630, 2006, 338, 1651, 1187, 1860, 2634, 619, 1386, 2342, 2696, 2608, 2639, 2675, 908, 254, 255, 2493, 1361, 1790, 2015, 220, 1112, 662, 2343, 1617, 3215, 910, 3176, 1958, 2694, 1875, 353, 133, 2432, 461, 1000, 1761, 1843, 1058, 2458, 1439, 434, 1205, 1253, 548, 3133, 3172, 609, 336, 2744, 714, 419, 1696, 1135, 3290, 2066, 310, 582, 755, 1799, 1342, 2395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
]
polyvec_to_bytes_in_k1 = 2
polyvec_to_bytes_out1 = [25, 36, 65, -65, 2, 127, 97, -29, 124, 23, -32, -68, 27, 57, 86, 45, 120, 0, -49, -120, -75, -24, -79, 79, -111, 113, 106, -24, -101, 40, -63, 102, 27, -100, 75, 82, 89, -32, -116, -42, -47, 32, 98, 114, -71, 117, -55, 6, 126, -80, 24, -74, 81, 115, -37, -120, 83, -77, -71, 54, -18, 120, 75, 53, -52, 114, -78, 74, 102, 22, 57, 40, -41, 8, 31, -100, 56, 116, 34, 108, -114, 65, 35, 46, -108, 103, -100, -78, 106, -82, 8, -112, 77, -86, -26, -75, 65, 27, 120, 20, -73, 56, 39, -119, 47, 15, -10, 101, 4, -102, 121, 68, 9, 61, 64, 22, -109, -110, -116, -121, -92, -63, 112, -89, -60, -94, 59, -31, -49, 44, -42, -93, 66, 52, -70, -19, 51, 27, -119, 123, 90, 18, 39, 85, -103, 104, -79, -26, -84, -123, -33, -6, 91, 103, -74, 53, 8, 7, 110, 39, -70, -53, -11, 68, 29, -84, -58, 27, 16, 33, -78, 56, 21, -63, 91, 71, 26, 117, -111, 38, 76, 60, -115, -105, -28, -80, 5, -111, 25, -124, -112, 106, -21, 122, -107, 39, -10, -87, -2, -91, 49, -19, 117, 84, -123, -45, 9, -107, -121, 27, 28, 6, 46, 118, -123, 126, 25, -68, -87, -22, -102, -118, 55, -56, 126, 24, 23, 91, -15, -125, 23, -59, 81, -106, 30, -119, 124, -48, 85, -88, -44, 16, -79, -16, -63, -54, 85, -94, 22, -15, -11, -68, -4, -40, -90, 26, 11, -83, 51, -29, -75, 4, -23, -116, 57, 32, -76, -60, 50, 92, -97, -78, -115, 60, -30, 98, 4, 118, 26, -54, -96, 55, 28, -8, -118, -122, 107, -78, -67, 100, 98, -62, 107, 17, 93, 17, 118, 95, -14, 27, -126, 26, 35, 36, -31, 37, 121, -7, 3, 41, -91, -62, 13, 67, 86, 1, -88, 103, -57, -4, 17, 53, -42, -56, -77, -14, 32, -37, 36, 72, 0, -44, 62, 35, -5, 21, -44, 75, -126, 97, 101, 120, 98, -6, 25, -93, 9, -110, -14, -42, 86, -94, -46, 29, 19, -124, 73, -68, 88, 122, -1, 89, -52, 74, -27, -93, 116, 43, -63, 98, 6, 39, 19, 96, 22, -124, 32, 23, 48, -30, -115, -33, -89, 85, -29, 106, -120, 40, -111, -86, -95, -117, 21, 103, -46, -100, -46, 113, 24, -76, 60, -56, 20, 59, 96, 125, -29, 63, -75, -116, 90, 18, 86, 41, -83, -58, 110, -72, -27, -105, -5, 112, 71, -63, 103, -104, -20, 10, 53, -22, 105, -105, -63, 99, 104, -56, 116, 23, -45, 28, 60, -64, 85, 33, -119, 42, 52, 107, 87, -84, 15, 118, -113, 41, 71, -59, -11, 69, 44, -20, -25, 120, -126, -5, -76, 48, 0, 56, 121, -73, -99, 89, -28, 22, 118, -25, -125, -99, 60, 66, -52, 108, 89, 96, 112, -110, -2, 23, 114, -100, -40, 84, 23, -28, 84, -92, 19, 13, -85, 68, -55, -119, -23, 26, -17, 41, 112, 67, 60, 114, 82, 16, 35, -113, -109, 30, -49, 40, 2, -100, -105, 127, 8, -70, 7, 79, 9, 3, -23, -20, 99, -91, 49, -110, -6, 71, 56, 47, 64, -112, 61, 71, 97, -102, -125, 89, 112, -118, 6, -44, -76, 74, 55, -121, 4, 90, 103, -73, -11, 8, 7, 84, 3, 19, 84, -54, -114, 64, 24, 60, -14, 42, -102, 30, -56, -119, 39, -77, 52, 81, -43, -79, 2, 65, 115, 89, 38, -49, 28, 18, -105, 50, 91, 111, -119, -123, -125, 113, -7, -115, -76, 115, -101, -48, -93, 93, -96, 36, -49, 41, -47, -102, 62, -21, 61, 82, -124, -54, 19, 32, -103, 25, 52, -53, -125, 44, 62, 122, -38, -100, 35, -116, 27, 91, 96, 122, 98, 38, 25, -11, 91, 122, -49, 57, 121, 5, -29, -59, -71, 85, 77, 73, -122, 51, 17, 10, 115, -50, -106, 19, -25, 102, 44, -93, 18, 28, -119, -43, -127, -5, 57, -98, -107, 101, -92, -42, 39, 21, 115, 54, 74, 68, -89, -92, 107, -94, 86, 38, -119, -88, 48, -6, -92, 115, -54, 56, -2, -16, 15, -67, 25, 85, -2, -10, 125, -36, -128, 69, -106, 114, -110, 81, -10, -56, -114, -125, -58, -90, 103, -88, 83, 23, 22, -123, 0, -104, -51, -127, 62, -31, 54, 115, 34, -92, -103, -97, 37, 27, -75, 84, 78, 36, -46, -61, 100, 28, 38, 80, -127, -85, -54, 50, 26, -96, -10, 70, -38, 44, -127, 54, 97, 36, -13, 114, 112, 62, -75, -107]
polyvec_to_bytes_in2 = [[1845, 2262, 82, 3000, 820, 1261, 2583, 1715, 919, 3016, 1371, 767, 1008, 764, 2597, 1260, 2564, 3109, 2374, 3233, 1216, 85, 2184, 888, 142, 2900, 2444, 1462, 1263, 1006, 3, 2305, 2927, 3106, 130, 3134, 2697, 1425, 531, 1597, 1332, 2811, 1328, 2319, 3223, 3250, 2786, 1395, 1120, 1596, 466, 1505, 390, 1965, 1488, 2550, 3150, 669, 965, 3230, 1782, 1570, 291, 1178, 1833, 1244, 2327, 756, 1897, 1969, 2935, 369, 102, 679, 1187, 3124, 2771, 1527, 2227, 2584, 627, 1088, 1147, 3098, 1864, 3278, 3105, 88, 785, 3284, 173, 2321, 1919, 2567, 1081, 2221, 838, 640, 2522, 2068, 868, 1882, 2934, 1068, 2832, 103, 3319, 961, 940, 3163, 2347, 1661, 589, 2936, 3018, 430, 3177, 1151, 3178, 133, 85, 511, 1348, 326, 1761, 2736, 2958, 645, 1504, 1362, 2567, 855, 2359, 897, 1400, 3063, 2418, 605, 243, 1953, 3035, 1518, 1858, 3211, 2494, 873, 2467, 1561, 1467, 723, 764, 829, 14, 2464, 2883, 935, 449, 1203, 295, 1932, 888, 657, 3064, 1325, 1283, 658, 912, 3101, 152, 1421, 699, 256, 44, 3099, 2232, 1606, 2455, 490, 2854, 495, 219, 1635, 2875, 2131, 1020, 2666, 2401, 2280, 1538, 2462, 987, 1724, 117, 1781, 2809, 3208, 1394, 1174, 3211, 186, 2244, 1207, 2555, 2587, 2726, 312, 922, 1739, 1404, 1133, 1518, 2895, 1286, 1447, 3036, 2219, 1640, 2833, 2237, 2855, 1119, 843, 599, 3287, 2282, 569, 360, 2582, 2694, 2111, 2185, 978, 1797, 1214, 2324, 2525, 533, 77, 258, 83, 1169, 2917, 1850, 1886, 3067, 314, 2149, 1788, 1310, 1676, 2915, 504, 2245, 28, 3233, 2873, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[2998, 112, 2870, 1682, 1870, 2556, 1916, 2947, 99, 2543, 575, 598, 2875, 2430, 3175, 1362, 3232, 2671, 660, 1760, 718, 2928, 589, 2613, 548, 2430, 2451, 1362, 228, 2770, 3101, 1445, 3297, 3175, 683, 927, 2954, 2601, 2684, 2845, 1236, 2876, 1867, 2813, 3066, 1079, 2169, 2064, 1325, 829, 2935, 2820, 345, 2472, 1957, 885, 986, 890, 1885, 2116, 1012, 2484, 1301, 3203, 2515, 717, 295, 732, 2834, 619, 1484, 2013, 510, 889, 1325, 2725, 3087, 1173, 70, 2619, 2109, 3073, 3038, 1866, 112, 1475, 345, 1087, 3019, 2442, 2663, 3137, 352, 1788, 2042, 3145, 1851, 1808, 2416, 290, 2772, 2270, 2144, 3144, 1209, 2639, 67, 2962, 1791, 3088, 2790, 2614, 1167, 2067, 2304, 2066, 750, 1962, 2205, 1353, 3094, 2967, 424, 1525, 3171, 2993, 2001, 1576, 503, 1110, 2643, 263, 2790, 2757, 284, 2556, 2249, 2813, 1814, 391, 1487, 3264, 506, 1856, 939, 791, 2540, 165, 408, 1222, 2440, 1102, 15, 2245, 2363, 3139, 2410, 3187, 3074, 2499, 425, 1532, 1823, 1744, 3144, 887, 1424, 2691, 3266, 1454, 1014, 2997, 1035, 2049, 3176, 159, 2806, 3304, 502, 486, 2505, 1111, 1773, 2608, 2911, 220, 1151, 193, 1566, 3109, 954, 2508, 1061, 2555, 1998, 3149, 725, 2523, 1829, 360, 1574, 1057, 853, 1639, 362, 1776, 2701, 743, 623, 1849, 1530, 2743, 277, 989, 3089, 2683, 2652, 3138, 1406, 2017, 32, 1968, 723, 2931, 848, 2978, 1999, 3136, 839, 82, 735, 570, 841, 2642, 288, 1160, 1133, 1255, 389, 732, 52, 1470, 1271, 99, 2702, 2996, 1904, 815, 1782, 3025, 1557, 1376, 3237, 2242, 235, 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
]
polyvec_to_bytes_in_k2 = 2
polyvec_to_bytes_out2 = [53, 103, -115, 82, -128, -69, 52, -45, 78, 23, 58, 107, -105, -125, -68, 91, -11, 47, -16, -61, 47, 37, -54, 78, 4, 90, -62, 70, 25, -54, -64, 84, 5, -120, -120, 55, -114, 64, -75, -116, 105, 91, -17, -28, 62, 3, 16, -112, 111, 43, -62, -126, -32, -61, -119, 26, 89, 19, -46, 99, 52, -75, -81, 48, -11, -112, -105, 44, -53, -30, 58, 87, 96, -60, 99, -46, 17, 94, -122, -47, 122, -48, 101, -97, 78, -36, 41, -59, -29, -55, -10, 38, 98, 35, -95, 73, 41, -57, 77, 23, 73, 47, 105, 23, 123, 119, 27, 23, 102, 112, 42, -93, 68, -61, -45, 122, 95, -77, -120, -95, 115, 2, 68, 123, -92, -63, 72, -25, -52, 33, -116, 5, 17, 67, -51, -83, 16, -111, 127, 119, -96, 57, -44, -118, 70, 3, 40, -38, 73, -127, 100, -93, 117, 118, -53, 66, 16, 123, 6, -9, 28, 60, -84, -77, -59, 43, -39, 103, 77, -126, -73, -54, -21, 26, 105, -4, 71, 106, 92, 8, 85, -16, 31, 68, 101, 20, -31, 6, -85, -114, 91, 40, -32, 37, 85, 7, 122, 53, 55, 25, 56, 120, 117, -65, 114, -39, 37, -13, 16, 122, -37, -21, 94, 66, -73, -56, -66, -103, 54, -93, -103, 97, -69, 53, 45, -4, -46, 51, 14, 0, -102, 67, 123, 58, -63, 49, 75, 39, -63, 120, 120, 19, 41, -8, -37, 82, 3, 37, 41, -112, -45, -63, -104, -48, 88, -69, 2, 16, 44, -80, -63, -72, 104, 100, -105, -87, 30, 38, -5, 30, -37, 48, 102, 59, 59, -123, -4, -93, -90, 97, -119, -114, 2, -26, -103, -37, -61, 107, 117, 80, 111, -7, -118, -56, 114, 101, 73, -117, -84, 11, -60, 120, 75, -5, -71, -95, -90, -118, 19, -102, -77, 108, 124, -43, 70, -18, -11, -76, 6, 117, 90, -36, -69, -118, 104, 22, -79, -67, 120, -78, 95, -76, 52, 87, 114, -51, -22, -104, 35, 104, 97, -95, -122, -6, -125, -119, 40, 61, 5, -25, 75, 20, -39, -99, 21, -46, 4, 2, 49, 5, -111, 84, -74, 58, -25, 117, -5, -85, 19, 101, -56, 111, 30, -59, 104, 99, -117, 31, -59, -56, 1, -95, -100, -77, -74, 11, 7, 54, 43, 105, 78, -57, -97, 124, 55, -72, 99, -16, -98, 63, 98, 37, 59, -21, -105, 103, 44, 85, -96, -4, -90, -108, 2, 110, -50, 2, -73, 77, 82, -93, 36, -30, -105, -109, 41, 85, -28, 32, -83, 29, 92, 90, -31, 124, -58, -85, -14, 57, -118, -101, -94, 124, -38, -79, -44, -60, -77, 75, -41, -81, -6, 123, 67, 121, 8, -127, 45, -43, 51, 119, 75, -80, 89, -127, -102, -91, 87, 55, -38, -93, 55, 93, 71, -124, -12, 67, -101, 21, 53, -56, -45, -39, 44, 39, -63, 45, 18, -69, 38, -52, -43, 125, -2, -111, 55, 45, 85, -86, 15, 92, 73, 70, -80, -93, 61, 24, -64, -34, -85, 116, 112, 48, 92, 89, -15, 67, -53, -85, -104, 103, 26, -60, 96, -63, 111, -6, -105, -60, 59, 7, 113, 112, 41, 18, -44, -22, -115, 96, -120, -60, -71, -12, -92, 67, 32, -71, -1, 6, -63, -26, 106, -93, -113, 52, -127, 0, 41, -127, -18, -94, 122, -99, -104, 84, 22, 124, -71, -88, 81, 95, 99, 28, -69, -47, -121, 98, -9, 97, 69, 83, 122, 16, -26, 90, -84, 28, -63, -97, -55, -40, -81, 22, 119, 24, -49, 5, -52, -6, 1, 116, -85, 115, 49, -20, 89, 10, -104, 97, 76, -120, -23, 68, 15, 80, -116, 59, 57, -60, 106, 57, -57, 2, 60, -100, -87, -63, 95, 31, 7, 109, 72, 124, 55, -112, 53, -88, -62, -20, 90, -10, 83, -69, 11, 20, -128, 104, -4, 9, -10, -118, -50, -10, 97, 30, -55, 121, 69, -19, 6, -93, 95, -53, 13, 127, 20, 12, 30, 86, -62, -70, -61, -100, 37, -76, -97, -50, -41, -60, -43, -78, -99, 37, -121, 22, 38, 22, 66, 85, 115, 102, 106, 1, 111, -115, 122, 46, 111, -110, 115, -6, 117, -85, 21, -47, 61, 17, -68, -89, 92, 42, -60, 126, 21, 126, 32, 0, 123, -45, 50, -73, 80, 35, -70, -49, 7, -60, 71, 35, 5, -33, -94, 35, 73, 35, -91, 32, -127, 72, 109, 116, 78, -123, -63, 45, 52, -32, 91, -9, 52, 6, -114, 74, -69, 112, -9, 50, -10, 22, -67, 21, 6, 86, -91, 44, -116, -21, 80, 36]
assert(polyvec_to_bytes(polyvec_to_bytes_in1, polyvec_to_bytes_in_k1)==polyvec_to_bytes_out1)
assert(polyvec_to_bytes(polyvec_to_bytes_in2, polyvec_to_bytes_in_k2)==polyvec_to_bytes_out2)
polyvec_from_bytes_in1 = [108, -119, 43, 2, -105, -87, -57, 100, 20, -109, -8, 125, -81, 53, 51, -18, -42, 31, 7, -12, 101, 32, 102, 51, 126, -41, 64, 70, -36, -57, 27, -96, 63, 48, -106, 1, 3, 22, 31, 125, -21, 83, -89, 27, 17, 97, 114, 99, -2, 42, -128, -105, 105, -50, 109, 112, -88, 95, -26, 0, -20, -30, -99, 127, 54, -95, 109, 51, 27, -117, 42, -98, 29, -72, -64, -112, 116, 45, -16, 115, -97, -16, 96, -50, -76, -20, -59, -85, 28, 94, 85, -84, -105, -69, 102, -89, -8, -107, 16, 93, 87, 120, 43, 34, -107, 56, -29, 66, 21, 68, -93, 66, 20, 8, -37, -12, 73, 16, -109, 76, -60, 35, 119, 79, 22, 118, -1, 28, 48, 111, -105, 85, 95, 87, -76, -82, -41, -90, -70, -71, 80, -88, 22, 60, -115, 49, -115, -22, 98, 117, 27, -42, -85, -59, 6, -100, 6, -56, -113, 51, 0, 38, -95, -104, 6, -96, 59, -105, -89, 105, 107, 86, -38, 33, -126, 123, -76, -24, -36, 3, 17, 82, -76, 27, -119, 42, -98, -103, -83, -10, -31, -106, 62, -106, 87, -120, 40, 21, 79, 70, 112, 51, -124, 105, 32, -5, -76, -72, 5, 68, -25, -24, -88, 26, -23, 99, -49, 54, -116, -101, -96, 55, -88, -62, -83, 98, -29, 43, 110, 97, -55, 29, 117, -50, 0, 90, -77, 15, -128, -103, -95, -14, -99, 123, 99, 5, -76, -36, 6, -30, 86, -128, -69, 0, -103, 47, 113, 127, -26, -63, 21, -88, 8, 66, 49, -52, 121, -35, 112, 14, -90, -111, 42, -57, -6, 13, -109, 123, -74, -89, 86, 102, 34, 48, 71, 12, 24, -101, 90, -95, 101, 61, -21, -109, 125, 90, -100, 37, -94, 29, -109, -79, -112, 116, -4, 35, -99, -127, 83, 83, -105, -105, -57, -44, -85, 98, 100, -99, 118, -86, 85, 55, 54, -87, 73, 2, 44, 34, -59, 43, -82, -20, 96, 91, 50, -50, -98, 91, -109, -124, -112, 53, 88, -54, -99, 106, 58, -70, -112, 66, 62, -19, -96, 28, -108, 25, -117, 25, 42, -117, -87, 6, 52, -105, -96, -59, 1, 51, 7, -35, -40, 99, 82, 100, 113, -92, -39, -107, 35, -21, 65, 127, 41, 26, -84, 12, 58, 88, 27, 109, -96, 7, 50, -27, -24, 27, 31, 124, -121, -101, 22, -109, -63, 59, 111, -97, 121, 49, 98, 36, 41, -27, 66, -81, 64, 105, 34, 47, 4, 85, 68, -32, -52, 79, -78, 77, 68, 72, -49, 44, 101, -106, -11, -53, 8, 98, 75, 17, -123, 1, 59, 107, 2, 8, -110, -7, 107, -33, -44, -83, -87, 23, -99, -25, 39, -72, -39, 66, 110, 9, -106, -75, -45, 73, 72, -50, 2, -48, -61, 105, -77, 124, -69, 84, -45, 71, -98, -40, -75, -126, -23, -25, 40, -110, -101, 76, 113, -55, -66, 17, -44, 91, 32, -60, -67, -61, -57, 67, 19, 34, 63, 88, 39, 78, -117, -91, 36, 68, 71, -60, -107, -107, 11, -124, -53, 12, 60, 39, 54, 64, 16, -118, 51, -105, -108, 69, 115, 39, -109, 40, -103, 108, -36, 12, -111, 60, -107, -118, -42, 32, -70, -117, 94, 94, -53, -69, 126, 19, -53, -100, 112, -67, 90, -77, 14, -73, 72, -116, -105, 0, 28, 32, 73, -113, 29, 124, -64, 109, -89, 107, -11, 32, -58, 88, -52, -83, -6, 41, 86, 66, 69, 87, -85, -22, -118, -72, -110, 57, -63, 120, 51, -36, 58, 73, -77, 106, -102, -23, -92, -122, -108, 5, 64, -21, 68, 79, -105, 21, 35, 87, -32, 32, 53, -109, -99, 117, -93, -64, 37, -12, 26, 64, 8, 35, -126, -96, 115, 60, 57, -80, 98, 43, 116, 14, 64, 117, -110, -58, 46, -54, -21, 20, 50, -60, 69, -77, 112, 58, -122, -10, -104, 26, 39, -127, 87, -22, -107, -90, -23, 45, 85, -28, -71, 114, -7, 54, -62, -16, -90, 88, 40, 14, -94, -80, 122, 72, -103, 45, -8, -109, 126, 10, 42, -63, -36, -55, 116, -2, 0, -86, -31, -11, 97, -6, 37, -114, 45, 37, -100, 62, -122, 29, -50, 35, 96, 57, 18, 118, 6, -4, 28, -32, 9, 0, 58, 123, -84, -108, 33, 1, -36, -72, 34, -79, -13, -63, 43, -9, 50, 56, -11, 70, -32, 28, 54, -75, -90, -109, 97, -110, -103, 92, -58, -100, 99, 35, 116, 9, -53, 83, -62, -29, 93, 116, -119, 13, 24, -120, 83, 118, -6, 85, 3, -79, 7, -94, -93, -110]
polyvec_from_bytes_in_k1 = 2
polyvec_from_bytes_out1 = [
[2412, 696, 1794, 2713, 1223, 326, 2195, 2015, 1455, 819, 1774, 509, 1031, 1631, 1568, 822, 1918, 1037, 3142, 3197, 27, 1018, 1584, 25, 1539, 497, 2941, 1342, 2983, 273, 609, 1591, 2814, 2050, 2455, 3302, 109, 2695, 1631, 14, 748, 2526, 1663, 2579, 877, 435, 2699, 2530, 2077, 3083, 1168, 727, 1008, 2551, 240, 3302, 3252, 3166, 3243, 1505, 3157, 2426, 1723, 2678, 1528, 265, 1885, 1925, 555, 2386, 824, 1070, 1045, 2612, 1090, 129, 1243, 1183, 784, 1225, 964, 1906, 1615, 1889, 3327, 769, 1903, 1369, 1887, 2885, 1966, 2669, 2490, 1291, 1704, 961, 397, 2259, 746, 1878, 1563, 2749, 1733, 2496, 2054, 2300, 51, 608, 2209, 105, 2976, 2419, 2471, 1718, 2646, 541, 2946, 2887, 3304, 61, 529, 2885, 2331, 680, 2462, 2777, 502, 2414, 1598, 1401, 2184, 338, 1615, 1796, 1075, 1688, 2848, 2895, 1464, 1088, 2279, 2702, 2330, 1598, 1743, 2243, 155, 890, 680, 2780, 866, 702, 366, 3222, 1309, 3303, 2560, 2869, 15, 2456, 673, 2527, 891, 86, 3252, 109, 1762, 2053, 187, 2448, 303, 2039, 486, 348, 2216, 1056, 3121, 1948, 221, 231, 422, 681, 2759, 223, 2963, 2919, 1703, 1637, 34, 1139, 2060, 2481, 346, 1626, 2877, 2366, 2685, 2501, 549, 474, 403, 2315, 3188, 575, 413, 1336, 1875, 2425, 1223, 2749, 1122, 2518, 2678, 1370, 1591, 2707, 585, 704, 1314, 700, 3246, 1550, 603, 3299, 2974, 2357, 132, 857, 2648, 2524, 2666, 2979, 656, 996, 237, 458, 2452, 2225, 2585, 2226, 1705, 832, 151, 3162, 769, 115, 2269, 1597, 1106, 1814, 2468, 2397, 2851, 1054, 2431, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[3244, 928, 2904, 1745, 1952, 800, 2277, 446, 3103, 2167, 1691, 2353, 3009, 1779, 2463, 791, 1122, 658, 741, 2804, 2368, 550, 1071, 1360, 68, 3278, 591, 1243, 2116, 3316, 1324, 2406, 3061, 140, 2914, 276, 389, 944, 619, 128, 2450, 1727, 1247, 2781, 1961, 2513, 2023, 2946, 729, 1764, 1545, 2905, 2515, 1156, 718, 3328, 2499, 2870, 2940, 1355, 2003, 2532, 1496, 2091, 2025, 654, 2962, 1225, 2417, 3052, 1041, 1469, 1056, 3036, 1987, 1084, 531, 1010, 1880, 1250, 1419, 586, 1860, 3140, 1429, 185, 2948, 204, 1852, 866, 64, 2209, 1843, 2377, 837, 631, 2195, 2450, 3180, 205, 3217, 2387, 1674, 525, 3002, 1512, 2910, 3004, 894, 3249, 156, 3031, 858, 235, 2231, 2244, 151, 448, 2336, 2292, 3101, 3079, 1901, 1722, 245, 3170, 3160, 2780, 2554, 1378, 1346, 1396, 2731, 2222, 696, 921, 2241, 823, 2780, 1171, 2739, 2470, 1257, 2154, 1428, 1024, 1259, 1268, 1431, 561, 87, 526, 821, 2521, 885, 3082, 1061, 431, 2112, 560, 130, 1850, 2364, 2819, 2914, 1858, 14, 1876, 1682, 748, 3018, 334, 1074, 1116, 179, 935, 1670, 2447, 1818, 2066, 2647, 2398, 2470, 734, 1109, 2974, 2418, 879, 194, 2671, 2136, 226, 162, 1963, 2376, 729, 1016, 2025, 2570, 3090, 2524, 1868, 254, 2720, 1505, 1567, 1530, 2274, 1325, 2498, 1598, 472, 974, 1538, 569, 1889, 3078, 463, 2528, 0, 2874, 2759, 404, 18, 2268, 555, 945, 3103, 1835, 815, 1336, 1135, 3296, 865, 1717, 2362, 609, 2457, 1628, 2508, 867, 1858, 2825, 1340, 962, 1502, 2420, 216, 2072, 1336, 2678, 1375, 259, 123, 930, 2346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
]
polyvec_from_bytes_in2 = [17, 90, -50, 14, 100, 103, 124, -69, 125, -49, -55, 60, 22, -45, -93, 5, -10, 118, 21, -92, -120, -41, 17, -86, 86, 105, -116, 86, 99, -85, 122, -55, -50, 102, -43, 71, -64, 89, 95, -104, -92, 63, 70, 80, -69, -32, -116, 54, 77, -105, 103, -119, 17, 125, 52, -10, -82, 81, -84, 6, 60, -75, 92, 108, -93, 37, 88, 34, 125, -2, -8, 7, -47, -100, 48, -34, 65, 68, 36, 9, 127, 106, -94, 54, -95, 5, 59, 74, 7, -89, 107, -29, 114, -91, -58, -74, 0, 39, -111, -21, -32, -81, -38, -11, 78, 28, -94, 55, -1, 84, 91, -90, -125, 67, -25, 69, -64, 74, -47, 99, -99, -68, 89, 3, 70, -74, -71, 86, -101, 86, -37, -65, -27, 49, 81, -111, 48, 102, -27, -56, 85, 39, -36, -108, 104, 17, 10, 19, 106, 65, 20, -105, -62, 39, -36, -72, -55, -78, 85, 112, -73, -96, -28, 42, -83, -90, 112, -97, 35, 32, -113, 93, 73, 110, -70, -73, -124, 63, 100, -125, -65, 12, 12, 115, -92, 2, -106, -20, 44, 100, 64, 0, 19, -108, -55, -100, -95, 115, -43, -57, 117, -73, -12, 21, -48, 42, 90, 38, -96, 116, 7, -111, -123, -121, -60, 17, 105, -14, -73, 23, -121, 85, -84, -62, 127, -56, -79, -100, 76, 75, 63, -51, 65, 5, 63, 44, 116, -56, -95, 10, -125, 33, 36, 27, 40, 2, 67, 40, 117, -82, -128, -117, -98, -15, 54, 92, 123, -118, 82, -112, 47, 19, 23, -70, 47, -80, 38, -97, 71, -109, 6, 114, 16, 123, 71, 38, -2, -10, 69, 71, 57, 77, 51, 32, -56, -15, 32, -77, -62, -12, 114, 91, 3, 5, -6, -72, -116, -57, -104, 31, -53, 9, -89, 106, 28, -65, 127, 23, -97, 67, -69, 10, 76, -117, 5, -112, -123, 127, 30, 105, 112, -124, 102, -57, -8, 96, 115, -111, -25, -68, 82, 104, -65, -45, -41, -95, -33, -4, -76, -20, -94, -95, -55, -75, -105, 89, 48, 19, -43, -4, 66, 2, -20, 43, 116, -27, 122, -73, 107, -68, -13, 99, 43, -70, -7, 124, -36, 65, -118, 111, 22, 57, 40, 56, -54, -101, -12, 93, -33, 2, 55, 119, -73, 86, 24, 51, -63, 5, 25, 15, -108, -13, 2, -59, -101, 83, 25, 0, -69, -56, 22, 54, 31, -86, 91, 51, -128, -54, 58, -119, 49, 4, -54, 115, -120, -79, -123, 103, 27, 62, 95, -29, 121, 14, -102, 98, 110, -60, 109, -101, 11, 51, -57, -92, 25, -81, 123, 50, -74, -123, -104, -108, -11, 117, -40, 42, -59, 69, 107, 84, -112, -89, -81, -113, -26, 16, 70, 54, 5, -119, -20, -70, 114, 68, 35, 111, 65, 35, 17, 107, 97, 116, -86, 23, -110, 73, -92, -111, -107, -77, 86, -57, 47, -58, 100, 31, 2, 81, -127, 46, -86, -104, 87, 11, 4, 102, -103, 7, 14, 8, 25, -36, 39, 19, -12, 105, 19, 125, -4, 106, 61, 123, -110, -78, -104, -103, 94, -25, -128, 54, -111, 83, -84, 54, 107, 6, -41, 36, -100, -48, -98, 27, 51, 120, -5, 4, 57, -100, -20, -72, 101, 5, -127, -42, 55, -57, -102, -26, 125, 111, 44, -81, 106, -70, -49, 89, -127, 89, -89, 121, 44, -77, -55, 113, -47, 73, -99, 35, 115, -83, 32, -10, 63, 3, -69, 89, -19, 19, 115, -124, -84, 97, -89, 21, 81, 67, -72, -54, 73, 50, 97, 46, -55, 21, -28, -54, 52, 106, -101, -50, 93, -42, 4, 23, -58, -78, -88, -101, 28, -60, 53, 100, 63, -121, 91, -36, 90, 126, 91, 52, -127, -49, -111, -98, -96, -111, 114, -2, -68, 70, -44, -4, 63, -80, -53, -107, -111, 112, 78, -30, -37, -74, 24, 68, -78, -13, 49, 74, 6, -69, 108, 109, 52, 0, 94, 72, 92, -26, 103, -67, -57, -48, -104, 88, 105, 40, -46, -39, 19, 64, -16, 4, 25, -22, 64, 19, 81, -94, 64, -96, -80, 65, 5, -117, -17, -80, -62, -3, 50, 100, 91, 122, 45, -8, -11, -53, -3, -121, 51, 39, -55, 120, -41, -77, 81, -94, -128, -120, 67, -120, 55, 2, 76, 82, -71, -62, -107, -51, 113, 54, 70, -5, 93, 108, 12, -49, -76, 112, 115, 74, -62, -78, -68, -127, 35, -62, -63, 61, -10, -109, -114, -110, 69, 90, -122, 38, 57, -2, -72, -90, 75, -123, 22, 62, 50, 112, 126, 3, 123, 56, -40, -84, 57, 34, -76, 81, -121, -69]
polyvec_from_bytes_in_k2 = 2
polyvec_from_bytes_out2 = [
[2577, 3301, 1038, 1654, 2940, 2011, 2511, 972, 790, 2621, 1541, 1903, 1045, 2186, 471, 2721, 2390, 2246, 854, 2742, 2426, 3308, 1382, 1149, 2496, 1525, 1176, 1018, 70, 2997, 3296, 872, 1869, 1657, 393, 2001, 1588, 2799, 3153, 106, 1340, 1483, 876, 602, 600, 2002, 2302, 127, 3281, 777, 478, 1092, 2340, 2032, 618, 874, 1441, 944, 1866, 2672, 875, 1838, 1701, 2924, 1792, 2322, 235, 2814, 1498, 1263, 540, 890, 1279, 1461, 934, 1080, 1511, 3076, 330, 1597, 3229, 1435, 1539, 2916, 1721, 2485, 2902, 3069, 485, 1299, 145, 1635, 2277, 1372, 3111, 2381, 360, 161, 2579, 1046, 1812, 3113, 3111, 2957, 713, 1371, 1904, 2571, 2788, 2770, 166, 2551, 35, 2290, 2397, 1764, 1978, 2123, 1087, 2102, 3263, 192, 1139, 42, 3222, 718, 100, 4, 1043, 3225, 412, 1850, 2005, 1884, 1207, 351, 2768, 1442, 38, 1866, 263, 2137, 1159, 284, 617, 2943, 1815, 1368, 684, 2044, 456, 2507, 2892, 1012, 461, 84, 3135, 1858, 456, 170, 387, 578, 2075, 34, 2115, 1874, 174, 2232, 414, 879, 2908, 2215, 82, 761, 1811, 2977, 47, 619, 1951, 2356, 518, 263, 1915, 612, 1790, 1119, 2375, 1235, 51, 3202, 241, 2866, 1218, 1839, 859, 80, 2298, 2251, 2247, 505, 2507, 2672, 3178, 3057, 1919, 2545, 2883, 171, 2892, 88, 1424, 2040, 2334, 1798, 1668, 3190, 248, 1846, 1937, 3022, 2130, 3062, 2003, 2589, 3295, 2895, 748, 2586, 1481, 2427, 89, 307, 3285, 1071, 3074, 702, 1396, 1966, 2999, 3014, 1011, 694, 2490, 1999, 476, 2212, 1647, 913, 2088, 3235, 1179, 1503, 735, 880, 1911, 1387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[792, 3091, 2309, 241, 916, 47, 3013, 1337, 25, 2992, 1736, 865, 2591, 1466, 51, 3240, 2362, 792, 2564, 1852, 392, 2139, 2919, 993, 863, 1950, 2574, 1577, 1134, 1756, 2971, 816, 1223, 410, 2991, 807, 1462, 2440, 1428, 1887, 2776, 3154, 2885, 1350, 1936, 2810, 1679, 270, 1606, 83, 3209, 2990, 1138, 564, 367, 564, 2833, 1558, 2676, 378, 2450, 2628, 1425, 2873, 1878, 764, 1222, 502, 258, 2069, 2606, 2442, 2903, 64, 2406, 121, 2062, 400, 2012, 306, 2548, 310, 3197, 1711, 2877, 2343, 2226, 2457, 1886, 2062, 310, 1337, 1708, 1715, 1798, 589, 156, 2541, 795, 1923, 1275, 912, 3228, 2958, 1381, 2064, 2006, 3187, 1690, 2014, 3183, 2802, 2666, 3323, 345, 1432, 2471, 711, 2483, 1820, 2513, 2516, 803, 2775, 1568, 1023, 2819, 1435, 1005, 1841, 3204, 1562, 1447, 1297, 2115, 3243, 585, 1555, 2350, 348, 2788, 844, 2922, 3305, 1629, 77, 1559, 2860, 2984, 457, 1476, 1603, 1855, 1464, 2780, 2021, 1115, 2067, 463, 2537, 416, 1833, 3326, 1131, 3284, 1023, 2992, 2396, 145, 1255, 3042, 2925, 1048, 2852, 499, 1187, 2822, 1739, 1133, 3, 2142, 1476, 2022, 3030, 199, 2445, 2392, 646, 2514, 317, 64, 79, 2585, 1038, 275, 2597, 64, 2826, 1345, 2224, 239, 3115, 765, 1603, 2651, 727, 1528, 3263, 2045, 824, 2343, 1932, 983, 1307, 162, 2184, 2115, 888, 3074, 1316, 697, 2396, 461, 871, 2886, 1503, 3180, 3312, 180, 1847, 586, 2860, 444, 568, 450, 988, 1014, 2281, 1426, 1444, 1670, 914, 2302, 2667, 1355, 360, 574, 1795, 894, 1968, 2104, 2765, 569, 2882, 1873, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
]
assert(polyvec_from_bytes(polyvec_from_bytes_in1, polyvec_from_bytes_in_k1)==polyvec_from_bytes_out1)
assert(polyvec_from_bytes(polyvec_from_bytes_in2, polyvec_from_bytes_in_k2)==polyvec_from_bytes_out2)