From adfa46466583861d54b5f3497cd802f0fcfb577a Mon Sep 17 00:00:00 2001 From: Jan-Henrik Bruhn Date: Wed, 1 Apr 2020 12:04:42 +0200 Subject: [PATCH] Basic software prototype of stm32 stereo_mix finished --- stereo_mix/drivers/adc.cc | 109 + stereo_mix/drivers/adc.h | 60 + stereo_mix/drivers/dac.h | 10 +- stereo_mix/resources.cc | 3748 ++++++++++++++++++++----- stereo_mix/resources.h | 6 +- stereo_mix/resources/lookup_tables.py | 4 +- stereo_mix/stereo_mix.cc | 45 +- 7 files changed, 3245 insertions(+), 737 deletions(-) create mode 100755 stereo_mix/drivers/adc.cc create mode 100644 stereo_mix/drivers/adc.h diff --git a/stereo_mix/drivers/adc.cc b/stereo_mix/drivers/adc.cc new file mode 100755 index 0000000..8135ca3 --- /dev/null +++ b/stereo_mix/drivers/adc.cc @@ -0,0 +1,109 @@ +#include "stereo_mix/drivers/adc.h" + +#include + +namespace stereo_mix { + +void Adc::Init() +{ + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); + + ADC_InitTypeDef adc_init; + GPIO_InitTypeDef gpio_init; + + gpio_init.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; + gpio_init.GPIO_Pin |= GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; + gpio_init.GPIO_Pin |= GPIO_Pin_6 | GPIO_Pin_7; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_Mode = GPIO_Mode_AN; + GPIO_Init(GPIOA, &gpio_init); + + gpio_init.GPIO_Pin = GPIO_Pin_0; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_Mode = GPIO_Mode_AN; + GPIO_Init(GPIOB, &gpio_init); + + // Configure the address lines for the MUX. + gpio_init.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14; + gpio_init.GPIO_Mode = GPIO_Mode_OUT; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOB, &gpio_init); + GPIO_ResetBits(GPIOB, GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14); + this->mux_index_ = 0; + + adc_init.ADC_Resolution = ADC_Resolution_12b; + adc_init.ADC_ContinuousConvMode = ENABLE; + adc_init.ADC_DataAlign = ADC_DataAlign_Left; + adc_init.ADC_ScanDirection = ADC_ScanDirection_Upward; + ADC_Init(ADC1, &adc_init); + + ADC_ClockModeConfig(ADC1, ADC_ClockMode_SynClkDiv2); + ADC_ChannelConfig(ADC1, ADC_Channel_0, ADC_SampleTime_239_5Cycles); + ADC_ChannelConfig(ADC1, ADC_Channel_1, ADC_SampleTime_239_5Cycles); + ADC_ChannelConfig(ADC1, ADC_Channel_2, ADC_SampleTime_239_5Cycles); + ADC_ChannelConfig(ADC1, ADC_Channel_3, ADC_SampleTime_239_5Cycles); + ADC_ChannelConfig(ADC1, ADC_Channel_4, ADC_SampleTime_239_5Cycles); + ADC_ChannelConfig(ADC1, ADC_Channel_5, ADC_SampleTime_239_5Cycles); + ADC_ChannelConfig(ADC1, ADC_Channel_6, ADC_SampleTime_239_5Cycles); + ADC_ChannelConfig(ADC1, ADC_Channel_7, ADC_SampleTime_239_5Cycles); + ADC_ChannelConfig(ADC1, ADC_Channel_8, ADC_SampleTime_239_5Cycles); + + ADC_Cmd(ADC1, ENABLE); + ADC_DMACmd(ADC1, ENABLE); + + DMA_InitTypeDef dma_init; + DMA_StructInit(&dma_init); + dma_init.DMA_DIR = DMA_DIR_PeripheralSRC; + dma_init.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR; + dma_init.DMA_MemoryBaseAddr = (uint32_t)&values_[0]; + dma_init.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + dma_init.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + dma_init.DMA_BufferSize = ADC_CHANNEL_NUM_DIRECT; + dma_init.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + dma_init.DMA_MemoryInc = DMA_MemoryInc_Enable; + dma_init.DMA_Mode = DMA_Mode_Circular; + dma_init.DMA_Priority = DMA_Priority_High; + dma_init.DMA_M2M = DMA_M2M_Disable; + DMA_Init(DMA1_Channel1, &dma_init); + + NVIC_EnableIRQ(DMA1_Channel1_IRQn); + NVIC_SetPriority(DMA1_Channel1_IRQn, 0); + DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE); + DMA_Cmd(DMA1_Channel1, ENABLE); + ADC_DMARequestModeConfig(ADC1, ADC_DMAMode_OneShot); + + /*NVIC_InitTypeDef NVIC_InitStructure; + NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); +*/ + ADC_StartOfConversion(ADC1); +} + +void Adc::DeInit() +{ + ADC_Cmd(ADC1, DISABLE); + ADC_DeInit(ADC1); +} + +void Adc::OnDMAFinish() +{ + this->values_[ADC_CHANNEL_FIRST_MUXED + this->mux_index_] = this->values_[ADC_CHANNEL_MUX]; + + this->mux_index_ = (this->mux_index_ + 1) % ADC_CHANNEL_NUM_MUXED; + uint8_t address = this->mux_index_; + + // Write the mux address. + GPIO_WriteBit(GPIOB, GPIO_Pin_12, static_cast(address & 1)); + GPIO_WriteBit(GPIOB, GPIO_Pin_13, static_cast(address & 2)); + GPIO_WriteBit(GPIOB, GPIO_Pin_14, static_cast(address & 4)); + ADC_StartOfConversion(ADC1); +} + +} // namespace rings diff --git a/stereo_mix/drivers/adc.h b/stereo_mix/drivers/adc.h new file mode 100644 index 0000000..54bdaca --- /dev/null +++ b/stereo_mix/drivers/adc.h @@ -0,0 +1,60 @@ +#pragma once + +#include "stmlib/stmlib.h" + +namespace stereo_mix { + +enum AdcChannel { + ADC_CHANNEL_MUX, + ADC_CHANNEL_CV_PAN_4, + ADC_CHANNEL_CV_PAN_3, + ADC_CHANNEL_CV_PAN_2, + ADC_CHANNEL_CV_PAN_1, + ADC_CHANNEL_CV_VOL_4, + ADC_CHANNEL_CV_VOL_3, + ADC_CHANNEL_CV_VOL_2, + ADC_CHANNEL_CV_VOL_1, + ADC_CHANNEL_POT_VOL_1, + ADC_CHANNEL_POT_VOL_2, + ADC_CHANNEL_POT_VOL_3, + ADC_CHANNEL_POT_VOL_4, + ADC_CHANNEL_POT_PAN_1, + ADC_CHANNEL_POT_PAN_2, + ADC_CHANNEL_POT_PAN_3, + ADC_CHANNEL_POT_PAN_4, + ADC_CHANNEL_LAST, + + ADC_CHANNEL_FIRST_DIRECT = ADC_CHANNEL_MUX, + ADC_CHANNEL_LAST_DIRECT = ADC_CHANNEL_CV_VOL_1, + ADC_CHANNEL_FIRST_MUXED = ADC_CHANNEL_POT_VOL_1, + ADC_CHANNEL_LAST_MUXED = ADC_CHANNEL_POT_PAN_4, + ADC_CHANNEL_NUM_DIRECT = ADC_CHANNEL_CV_VOL_1 + 1, + ADC_CHANNEL_NUM_MUXED = ADC_CHANNEL_LAST - ADC_CHANNEL_FIRST_MUXED, +}; + +class Adc { + public: + Adc() {} + ~Adc() {} + + void Init(); + void DeInit(); + void OnDMAFinish(); + inline const uint16_t* values() { return &values_[0]; } + inline int32_t value(int32_t channel) const + { + return static_cast(values_[channel]); + } + inline float float_value(int32_t index) const + { + return static_cast(values_[index]) / 65536.0f; + } + + private: + uint16_t values_[ADC_CHANNEL_LAST]; + uint8_t mux_index_; + + DISALLOW_COPY_AND_ASSIGN(Adc); +}; + +} // namespace stereo_mix diff --git a/stereo_mix/drivers/dac.h b/stereo_mix/drivers/dac.h index 81a2e7f..5da2d75 100644 --- a/stereo_mix/drivers/dac.h +++ b/stereo_mix/drivers/dac.h @@ -1,11 +1,9 @@ #pragma once -#include -#include "stm32f0xx_gpio.h" #include "stmlib/stmlib.h" -#include -#include -#include +#include + +namespace stereo_mix { class Dac { // MCP4xx2 dac implementation public: @@ -101,3 +99,5 @@ class Dac { // MCP4xx2 dac implementation GPIO_TypeDef* ssGpioPort; uint16_t ssGpioPin; }; + +} diff --git a/stereo_mix/resources.cc b/stereo_mix/resources.cc index 47889f3..61a5e35 100644 --- a/stereo_mix/resources.cc +++ b/stereo_mix/resources.cc @@ -53,11 +53,11 @@ const uint16_t lut_linear_to_exp[] = { 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, - 20, 20, 21, 22, + 20, 20, 21, 21, 22, 23, 23, 24, 25, 25, 26, 26, 27, 28, 28, 29, - 30, 31, 31, 32, + 30, 30, 31, 32, 33, 33, 34, 35, 36, 36, 37, 38, 39, 39, 40, 41, @@ -70,743 +70,3047 @@ const uint16_t lut_linear_to_exp[] = { 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 80, + 76, 77, 78, 79, 81, 82, 83, 84, - 85, 86, 88, 89, - 90, 91, 92, 94, + 85, 86, 87, 89, + 90, 91, 92, 93, 95, 96, 97, 98, 100, 101, 102, 103, - 105, 106, 107, 109, - 110, 111, 113, 114, - 115, 117, 118, 119, - 121, 122, 124, 125, - 126, 128, 129, 131, + 105, 106, 107, 108, + 110, 111, 112, 114, + 115, 116, 118, 119, + 121, 122, 123, 125, + 126, 128, 129, 130, 132, 133, 135, 136, 138, 139, 141, 142, 144, 145, 147, 148, 150, 151, 153, 154, - 156, 158, 159, 161, - 162, 164, 166, 167, - 169, 170, 172, 174, - 175, 177, 179, 180, - 182, 184, 186, 187, - 189, 191, 192, 194, - 196, 198, 199, 201, - 203, 205, 207, 208, - 210, 212, 214, 216, + 156, 157, 159, 161, + 162, 164, 165, 167, + 169, 170, 172, 173, + 175, 177, 178, 180, + 182, 184, 185, 187, + 189, 190, 192, 194, + 196, 197, 199, 201, + 203, 204, 206, 208, + 210, 212, 213, 215, 217, 219, 221, 223, - 225, 227, 229, 231, - 233, 234, 236, 238, + 225, 226, 228, 230, + 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, - 272, 274, 276, 279, - 281, 283, 285, 287, + 272, 274, 276, 278, + 280, 282, 284, 287, 289, 291, 293, 295, - 298, 300, 302, 304, - 306, 309, 311, 313, - 315, 317, 320, 322, - 324, 326, 329, 331, - 333, 336, 338, 340, - 342, 345, 347, 349, - 352, 354, 356, 359, - 361, 364, 366, 368, - 371, 373, 376, 378, - 380, 383, 385, 388, - 390, 393, 395, 398, - 400, 403, 405, 408, - 410, 413, 415, 418, - 421, 423, 426, 428, - 431, 434, 436, 439, - 441, 444, 447, 449, - 452, 455, 457, 460, - 463, 465, 468, 471, - 473, 476, 479, 482, - 484, 487, 490, 493, - 496, 498, 501, 504, - 507, 510, 512, 515, - 518, 521, 524, 527, - 530, 532, 535, 538, - 541, 544, 547, 550, - 553, 556, 559, 562, - 565, 568, 571, 574, - 577, 580, 583, 586, - 589, 592, 595, 598, - 601, 604, 607, 610, - 613, 616, 619, 623, - 626, 629, 632, 635, - 638, 641, 645, 648, - 651, 654, 657, 661, - 664, 667, 670, 674, - 677, 680, 683, 687, - 690, 693, 697, 700, - 703, 706, 710, 713, - 716, 720, 723, 727, - 730, 733, 737, 740, - 744, 747, 750, 754, - 757, 761, 764, 768, - 771, 775, 778, 782, - 785, 789, 792, 796, - 799, 803, 806, 810, - 813, 817, 820, 824, - 828, 831, 835, 839, - 842, 846, 849, 853, - 857, 860, 864, 868, - 871, 875, 879, 883, - 886, 890, 894, 898, - 901, 905, 909, 913, - 916, 920, 924, 928, - 932, 935, 939, 943, - 947, 951, 955, 959, - 962, 966, 970, 974, - 978, 982, 986, 990, - 994, 998, 1002, 1006, - 1010, 1014, 1018, 1021, - 1026, 1030, 1034, 1038, - 1042, 1046, 1050, 1054, - 1058, 1062, 1066, 1070, - 1074, 1078, 1082, 1087, - 1091, 1095, 1099, 1103, - 1107, 1111, 1116, 1120, - 1124, 1128, 1132, 1137, - 1141, 1145, 1149, 1154, - 1158, 1162, 1166, 1171, - 1175, 1179, 1183, 1188, - 1192, 1196, 1201, 1205, - 1209, 1214, 1218, 1223, - 1227, 1231, 1236, 1240, - 1244, 1249, 1253, 1258, - 1262, 1267, 1271, 1276, - 1280, 1285, 1289, 1294, - 1298, 1303, 1307, 1312, - 1316, 1321, 1325, 1330, - 1334, 1339, 1344, 1348, - 1353, 1357, 1362, 1367, - 1371, 1376, 1380, 1385, - 1390, 1394, 1399, 1404, - 1409, 1413, 1418, 1423, - 1427, 1432, 1437, 1442, - 1446, 1451, 1456, 1461, - 1465, 1470, 1475, 1480, - 1485, 1489, 1494, 1499, - 1504, 1509, 1514, 1519, - 1523, 1528, 1533, 1538, - 1543, 1548, 1553, 1558, - 1563, 1568, 1573, 1578, - 1583, 1588, 1593, 1598, - 1603, 1608, 1613, 1618, - 1623, 1628, 1633, 1638, - 1643, 1648, 1653, 1658, - 1663, 1668, 1674, 1679, - 1684, 1689, 1694, 1699, - 1704, 1710, 1715, 1720, - 1725, 1730, 1736, 1741, - 1746, 1751, 1756, 1762, - 1767, 1772, 1777, 1783, - 1788, 1793, 1799, 1804, - 1809, 1815, 1820, 1825, - 1831, 1836, 1841, 1847, - 1852, 1858, 1863, 1868, - 1874, 1879, 1885, 1890, - 1895, 1901, 1906, 1912, - 1917, 1923, 1928, 1934, - 1939, 1945, 1950, 1956, - 1961, 1967, 1972, 1978, - 1984, 1989, 1995, 2000, - 2006, 2012, 2017, 2023, - 2028, 2034, 2040, 2045, - 2051, 2057, 2062, 2068, - 2074, 2080, 2085, 2091, - 2097, 2102, 2108, 2114, - 2120, 2125, 2131, 2137, - 2143, 2149, 2154, 2160, - 2166, 2172, 2178, 2183, - 2189, 2195, 2201, 2207, - 2213, 2219, 2225, 2231, - 2236, 2242, 2248, 2254, - 2260, 2266, 2272, 2278, - 2284, 2290, 2296, 2302, - 2308, 2314, 2320, 2326, - 2332, 2338, 2344, 2350, - 2356, 2362, 2369, 2375, - 2381, 2387, 2393, 2399, - 2405, 2411, 2417, 2424, - 2430, 2436, 2442, 2448, - 2455, 2461, 2467, 2473, - 2479, 2486, 2492, 2498, - 2504, 2511, 2517, 2523, - 2530, 2536, 2542, 2548, - 2555, 2561, 2567, 2574, - 2580, 2586, 2593, 2599, - 2606, 2612, 2618, 2625, - 2631, 2638, 2644, 2650, - 2657, 2663, 2670, 2676, - 2683, 2689, 2696, 2702, - 2709, 2715, 2722, 2728, - 2735, 2741, 2748, 2755, - 2761, 2768, 2774, 2781, - 2788, 2794, 2801, 2807, - 2814, 2821, 2827, 2834, - 2841, 2847, 2854, 2861, - 2867, 2874, 2881, 2887, - 2894, 2901, 2908, 2914, - 2921, 2928, 2935, 2942, - 2948, 2955, 2962, 2969, - 2976, 2982, 2989, 2996, - 3003, 3010, 3017, 3024, - 3030, 3037, 3044, 3051, - 3058, 3065, 3072, 3079, - 3086, 3093, 3100, 3107, - 3114, 3121, 3128, 3135, - 3142, 3149, 3156, 3163, - 3170, 3177, 3184, 3191, - 3198, 3205, 3212, 3219, - 3226, 3233, 3241, 3248, - 3255, 3262, 3269, 3276, - 3283, 3291, 3298, 3305, - 3312, 3319, 3327, 3334, - 3341, 3348, 3356, 3363, - 3370, 3377, 3385, 3392, - 3399, 3406, 3414, 3421, - 3428, 3436, 3443, 3450, - 3458, 3465, 3473, 3480, - 3487, 3495, 3502, 3510, - 3517, 3524, 3532, 3539, - 3547, 3554, 3562, 3569, - 3577, 3584, 3592, 3599, - 3607, 3614, 3622, 3629, - 3637, 3644, 3652, 3659, - 3667, 3674, 3682, 3690, - 3697, 3705, 3713, 3720, - 3728, 3735, 3743, 3751, - 3758, 3766, 3774, 3781, - 3789, 3797, 3805, 3812, - 3820, 3828, 3836, 3843, - 3851, 3859, 3867, 3874, - 3882, 3890, 3898, 3906, - 3913, 3921, 3929, 3937, - 3945, 3953, 3960, 3968, - 3976, 3984, 3992, 4000, - 4008, 4016, 4024, 4032, - 4040, 4048, 4056, 4064, - 4072, 4080, 4087, 4096, + 297, 299, 302, 304, + 306, 308, 310, 312, + 315, 317, 319, 321, + 324, 326, 328, 330, + 333, 335, 337, 340, + 342, 344, 347, 349, + 351, 354, 356, 358, + 361, 363, 365, 368, + 370, 373, 375, 377, + 380, 382, 385, 387, + 390, 392, 395, 397, + 400, 402, 405, 407, + 410, 412, 415, 417, + 420, 423, 425, 428, + 430, 433, 435, 438, + 441, 443, 446, 449, + 451, 454, 457, 459, + 462, 465, 467, 470, + 473, 476, 478, 481, + 484, 486, 489, 492, + 495, 498, 500, 503, + 506, 509, 512, 514, + 517, 520, 523, 526, + 529, 532, 535, 537, + 540, 543, 546, 549, + 552, 555, 558, 561, + 564, 567, 570, 573, + 576, 579, 582, 585, + 588, 591, 594, 597, + 600, 603, 606, 609, + 612, 615, 619, 622, + 625, 628, 631, 634, + 637, 641, 644, 647, + 650, 653, 656, 660, + 663, 666, 669, 673, + 676, 679, 682, 686, + 689, 692, 695, 699, + 702, 705, 709, 712, + 715, 719, 722, 725, + 729, 732, 736, 739, + 742, 746, 749, 753, + 756, 760, 763, 766, + 770, 773, 777, 780, + 784, 787, 791, 794, + 798, 801, 805, 809, + 812, 816, 819, 823, + 826, 830, 834, 837, + 841, 845, 848, 852, + 855, 859, 863, 866, + 870, 874, 878, 881, + 885, 889, 892, 896, + 900, 904, 907, 911, + 915, 919, 923, 926, + 930, 934, 938, 942, + 946, 949, 953, 957, + 961, 965, 969, 973, + 977, 980, 984, 988, + 992, 996, 1000, 1004, + 1008, 1012, 1016, 1020, + 1024, 1028, 1032, 1036, + 1040, 1044, 1048, 1052, + 1056, 1060, 1064, 1068, + 1073, 1077, 1081, 1085, + 1089, 1093, 1097, 1101, + 1106, 1110, 1114, 1118, + 1122, 1126, 1131, 1135, + 1139, 1143, 1148, 1152, + 1156, 1160, 1165, 1169, + 1173, 1177, 1182, 1186, + 1190, 1195, 1199, 1203, + 1208, 1212, 1216, 1221, + 1225, 1229, 1234, 1238, + 1243, 1247, 1251, 1256, + 1260, 1265, 1269, 1274, + 1278, 1283, 1287, 1292, + 1296, 1301, 1305, 1310, + 1314, 1319, 1323, 1328, + 1332, 1337, 1342, 1346, + 1351, 1355, 1360, 1365, + 1369, 1374, 1378, 1383, + 1388, 1392, 1397, 1402, + 1406, 1411, 1416, 1421, + 1425, 1430, 1435, 1439, + 1444, 1449, 1454, 1458, + 1463, 1468, 1473, 1478, + 1482, 1487, 1492, 1497, + 1502, 1507, 1511, 1516, + 1521, 1526, 1531, 1536, + 1541, 1546, 1551, 1556, + 1560, 1565, 1570, 1575, + 1580, 1585, 1590, 1595, + 1600, 1605, 1610, 1615, + 1620, 1625, 1630, 1635, + 1641, 1646, 1651, 1656, + 1661, 1666, 1671, 1676, + 1681, 1686, 1692, 1697, + 1702, 1707, 1712, 1717, + 1723, 1728, 1733, 1738, + 1743, 1749, 1754, 1759, + 1764, 1770, 1775, 1780, + 1785, 1791, 1796, 1801, + 1807, 1812, 1817, 1823, + 1828, 1833, 1839, 1844, + 1849, 1855, 1860, 1866, + 1871, 1876, 1882, 1887, + 1893, 1898, 1904, 1909, + 1914, 1920, 1925, 1931, + 1936, 1942, 1947, 1953, + 1958, 1964, 1970, 1975, + 1981, 1986, 1992, 1997, + 2003, 2009, 2014, 2020, + 2025, 2031, 2037, 2042, + 2048, 2054, 2059, 2065, + 2071, 2076, 2082, 2088, + 2094, 2099, 2105, 2111, + 2117, 2122, 2128, 2134, + 2140, 2145, 2151, 2157, + 2163, 2169, 2174, 2180, + 2186, 2192, 2198, 2204, + 2210, 2215, 2221, 2227, + 2233, 2239, 2245, 2251, + 2257, 2263, 2269, 2275, + 2281, 2287, 2293, 2299, + 2305, 2311, 2317, 2323, + 2329, 2335, 2341, 2347, + 2353, 2359, 2365, 2371, + 2377, 2383, 2389, 2396, + 2402, 2408, 2414, 2420, + 2426, 2432, 2439, 2445, + 2451, 2457, 2463, 2470, + 2476, 2482, 2488, 2494, + 2501, 2507, 2513, 2519, + 2526, 2532, 2538, 2545, + 2551, 2557, 2564, 2570, + 2576, 2583, 2589, 2595, + 2602, 2608, 2615, 2621, + 2627, 2634, 2640, 2647, + 2653, 2659, 2666, 2672, + 2679, 2685, 2692, 2698, + 2705, 2711, 2718, 2724, + 2731, 2737, 2744, 2750, + 2757, 2764, 2770, 2777, + 2783, 2790, 2797, 2803, + 2810, 2816, 2823, 2830, + 2836, 2843, 2850, 2856, + 2863, 2870, 2877, 2883, + 2890, 2897, 2903, 2910, + 2917, 2924, 2930, 2937, + 2944, 2951, 2958, 2964, + 2971, 2978, 2985, 2992, + 2998, 3005, 3012, 3019, + 3026, 3033, 3040, 3047, + 3054, 3060, 3067, 3074, + 3081, 3088, 3095, 3102, + 3109, 3116, 3123, 3130, + 3137, 3144, 3151, 3158, + 3165, 3172, 3179, 3186, + 3193, 3200, 3207, 3214, + 3222, 3229, 3236, 3243, + 3250, 3257, 3264, 3271, + 3279, 3286, 3293, 3300, + 3307, 3315, 3322, 3329, + 3336, 3343, 3351, 3358, + 3365, 3372, 3380, 3387, + 3394, 3401, 3409, 3416, + 3423, 3431, 3438, 3445, + 3453, 3460, 3467, 3475, + 3482, 3490, 3497, 3504, + 3512, 3519, 3527, 3534, + 3541, 3549, 3556, 3564, + 3571, 3579, 3586, 3594, + 3601, 3609, 3616, 3624, + 3631, 3639, 3646, 3654, + 3661, 3669, 3677, 3684, + 3692, 3699, 3707, 3715, + 3722, 3730, 3738, 3745, + 3753, 3761, 3768, 3776, + 3784, 3791, 3799, 3807, + 3814, 3822, 3830, 3838, + 3845, 3853, 3861, 3869, + 3876, 3884, 3892, 3900, + 3908, 3915, 3923, 3931, + 3939, 3947, 3955, 3963, + 3970, 3978, 3986, 3994, + 4002, 4010, 4018, 4026, + 4034, 4042, 4050, 4058, + 4065, 4073, 4081, 4089, + 4097, 4105, 4113, 4121, + 4130, 4138, 4146, 4154, + 4162, 4170, 4178, 4186, + 4194, 4202, 4210, 4218, + 4226, 4235, 4243, 4251, + 4259, 4267, 4275, 4284, + 4292, 4300, 4308, 4316, + 4325, 4333, 4341, 4349, + 4358, 4366, 4374, 4382, + 4391, 4399, 4407, 4416, + 4424, 4432, 4440, 4449, + 4457, 4466, 4474, 4482, + 4491, 4499, 4507, 4516, + 4524, 4533, 4541, 4549, + 4558, 4566, 4575, 4583, + 4592, 4600, 4609, 4617, + 4626, 4634, 4643, 4651, + 4660, 4668, 4677, 4685, + 4694, 4703, 4711, 4720, + 4728, 4737, 4746, 4754, + 4763, 4771, 4780, 4789, + 4797, 4806, 4815, 4823, + 4832, 4841, 4849, 4858, + 4867, 4876, 4884, 4893, + 4902, 4911, 4919, 4928, + 4937, 4946, 4954, 4963, + 4972, 4981, 4990, 4999, + 5007, 5016, 5025, 5034, + 5043, 5052, 5061, 5070, + 5078, 5087, 5096, 5105, + 5114, 5123, 5132, 5141, + 5150, 5159, 5168, 5177, + 5186, 5195, 5204, 5213, + 5222, 5231, 5240, 5249, + 5258, 5267, 5276, 5285, + 5295, 5304, 5313, 5322, + 5331, 5340, 5349, 5358, + 5368, 5377, 5386, 5395, + 5404, 5414, 5423, 5432, + 5441, 5450, 5460, 5469, + 5478, 5487, 5497, 5506, + 5515, 5524, 5534, 5543, + 5552, 5562, 5571, 5580, + 5590, 5599, 5608, 5618, + 5627, 5637, 5646, 5655, + 5665, 5674, 5684, 5693, + 5702, 5712, 5721, 5731, + 5740, 5750, 5759, 5769, + 5778, 5788, 5797, 5807, + 5816, 5826, 5835, 5845, + 5855, 5864, 5874, 5883, + 5893, 5902, 5912, 5922, + 5931, 5941, 5951, 5960, + 5970, 5980, 5989, 5999, + 6009, 6018, 6028, 6038, + 6047, 6057, 6067, 6077, + 6086, 6096, 6106, 6116, + 6125, 6135, 6145, 6155, + 6165, 6174, 6184, 6194, + 6204, 6214, 6224, 6234, + 6243, 6253, 6263, 6273, + 6283, 6293, 6303, 6313, + 6323, 6333, 6343, 6353, + 6363, 6373, 6383, 6393, + 6403, 6413, 6423, 6433, + 6443, 6453, 6463, 6473, + 6483, 6493, 6503, 6513, + 6523, 6533, 6543, 6553, + 6564, 6574, 6584, 6594, + 6604, 6614, 6625, 6635, + 6645, 6655, 6665, 6676, + 6686, 6696, 6706, 6716, + 6727, 6737, 6747, 6757, + 6768, 6778, 6788, 6799, + 6809, 6819, 6830, 6840, + 6850, 6861, 6871, 6881, + 6892, 6902, 6913, 6923, + 6933, 6944, 6954, 6965, + 6975, 6985, 6996, 7006, + 7017, 7027, 7038, 7048, + 7059, 7069, 7080, 7090, + 7101, 7111, 7122, 7133, + 7143, 7154, 7164, 7175, + 7185, 7196, 7207, 7217, + 7228, 7239, 7249, 7260, + 7271, 7281, 7292, 7303, + 7313, 7324, 7335, 7345, + 7356, 7367, 7378, 7388, + 7399, 7410, 7421, 7431, + 7442, 7453, 7464, 7474, + 7485, 7496, 7507, 7518, + 7529, 7539, 7550, 7561, + 7572, 7583, 7594, 7605, + 7616, 7627, 7638, 7648, + 7659, 7670, 7681, 7692, + 7703, 7714, 7725, 7736, + 7747, 7758, 7769, 7780, + 7791, 7802, 7813, 7824, + 7835, 7847, 7858, 7869, + 7880, 7891, 7902, 7913, + 7924, 7935, 7947, 7958, + 7969, 7980, 7991, 8002, + 8014, 8025, 8036, 8047, + 8058, 8070, 8081, 8092, + 8103, 8115, 8126, 8137, + 8148, 8160, 8171, 8182, + 8194, 8205, 8216, 8228, + 8239, 8250, 8262, 8273, + 8284, 8296, 8307, 8319, + 8330, 8341, 8353, 8364, + 8376, 8387, 8399, 8410, + 8422, 8433, 8445, 8456, + 8468, 8479, 8491, 8502, + 8514, 8525, 8537, 8548, + 8560, 8571, 8583, 8595, + 8606, 8618, 8629, 8641, + 8653, 8664, 8676, 8688, + 8699, 8711, 8723, 8734, + 8746, 8758, 8769, 8781, + 8793, 8804, 8816, 8828, + 8840, 8851, 8863, 8875, + 8887, 8899, 8910, 8922, + 8934, 8946, 8958, 8969, + 8981, 8993, 9005, 9017, + 9029, 9041, 9053, 9064, + 9076, 9088, 9100, 9112, + 9124, 9136, 9148, 9160, + 9172, 9184, 9196, 9208, + 9220, 9232, 9244, 9256, + 9268, 9280, 9292, 9304, + 9316, 9328, 9340, 9352, + 9364, 9377, 9389, 9401, + 9413, 9425, 9437, 9449, + 9462, 9474, 9486, 9498, + 9510, 9522, 9535, 9547, + 9559, 9571, 9584, 9596, + 9608, 9620, 9633, 9645, + 9657, 9669, 9682, 9694, + 9706, 9719, 9731, 9743, + 9756, 9768, 9780, 9793, + 9805, 9818, 9830, 9842, + 9855, 9867, 9880, 9892, + 9904, 9917, 9929, 9942, + 9954, 9967, 9979, 9992, + 10004, 10017, 10029, 10042, + 10054, 10067, 10079, 10092, + 10105, 10117, 10130, 10142, + 10155, 10167, 10180, 10193, + 10205, 10218, 10231, 10243, + 10256, 10269, 10281, 10294, + 10307, 10319, 10332, 10345, + 10357, 10370, 10383, 10396, + 10408, 10421, 10434, 10447, + 10460, 10472, 10485, 10498, + 10511, 10524, 10536, 10549, + 10562, 10575, 10588, 10601, + 10614, 10626, 10639, 10652, + 10665, 10678, 10691, 10704, + 10717, 10730, 10743, 10756, + 10769, 10782, 10795, 10808, + 10821, 10834, 10847, 10860, + 10873, 10886, 10899, 10912, + 10925, 10938, 10951, 10964, + 10977, 10990, 11003, 11017, + 11030, 11043, 11056, 11069, + 11082, 11095, 11109, 11122, + 11135, 11148, 11161, 11175, + 11188, 11201, 11214, 11228, + 11241, 11254, 11267, 11281, + 11294, 11307, 11320, 11334, + 11347, 11360, 11374, 11387, + 11400, 11414, 11427, 11441, + 11454, 11467, 11481, 11494, + 11508, 11521, 11534, 11548, + 11561, 11575, 11588, 11602, + 11615, 11629, 11642, 11656, + 11669, 11683, 11696, 11710, + 11723, 11737, 11750, 11764, + 11777, 11791, 11804, 11818, + 11832, 11845, 11859, 11872, + 11886, 11900, 11913, 11927, + 11941, 11954, 11968, 11982, + 11995, 12009, 12023, 12037, + 12050, 12064, 12078, 12091, + 12105, 12119, 12133, 12147, + 12160, 12174, 12188, 12202, + 12216, 12229, 12243, 12257, + 12271, 12285, 12299, 12312, + 12326, 12340, 12354, 12368, + 12382, 12396, 12410, 12424, + 12438, 12452, 12466, 12480, + 12493, 12507, 12521, 12535, + 12549, 12563, 12577, 12591, + 12606, 12620, 12634, 12648, + 12662, 12676, 12690, 12704, + 12718, 12732, 12746, 12760, + 12775, 12789, 12803, 12817, + 12831, 12845, 12859, 12874, + 12888, 12902, 12916, 12930, + 12945, 12959, 12973, 12987, + 13002, 13016, 13030, 13044, + 13059, 13073, 13087, 13102, + 13116, 13130, 13145, 13159, + 13173, 13188, 13202, 13216, + 13231, 13245, 13260, 13274, + 13288, 13303, 13317, 13332, + 13346, 13361, 13375, 13389, + 13404, 13418, 13433, 13447, + 13462, 13476, 13491, 13505, + 13520, 13534, 13549, 13564, + 13578, 13593, 13607, 13622, + 13637, 13651, 13666, 13680, + 13695, 13710, 13724, 13739, + 13754, 13768, 13783, 13798, + 13812, 13827, 13842, 13856, + 13871, 13886, 13901, 13915, + 13930, 13945, 13960, 13974, + 13989, 14004, 14019, 14034, + 14048, 14063, 14078, 14093, + 14108, 14123, 14137, 14152, + 14167, 14182, 14197, 14212, + 14227, 14242, 14257, 14272, + 14287, 14301, 14316, 14331, + 14346, 14361, 14376, 14391, + 14406, 14421, 14436, 14451, + 14466, 14481, 14496, 14512, + 14527, 14542, 14557, 14572, + 14587, 14602, 14617, 14632, + 14647, 14663, 14678, 14693, + 14708, 14723, 14738, 14754, + 14769, 14784, 14799, 14814, + 14830, 14845, 14860, 14875, + 14891, 14906, 14921, 14936, + 14952, 14967, 14982, 14998, + 15013, 15028, 15044, 15059, + 15074, 15090, 15105, 15120, + 15136, 15151, 15166, 15182, + 15197, 15213, 15228, 15244, + 15259, 15274, 15290, 15305, + 15321, 15336, 15352, 15367, + 15383, 15398, 15414, 15429, + 15445, 15460, 15476, 15492, + 15507, 15523, 15538, 15554, + 15569, 15585, 15601, 15616, + 15632, 15648, 15663, 15679, + 15694, 15710, 15726, 15742, + 15757, 15773, 15789, 15804, + 15820, 15836, 15852, 15867, + 15883, 15899, 15915, 15930, + 15946, 15962, 15978, 15994, + 16009, 16025, 16041, 16057, + 16073, 16089, 16104, 16120, + 16136, 16152, 16168, 16184, + 16200, 16216, 16232, 16248, + 16263, 16279, 16295, 16311, + 16327, 16343, 16359, 16375, + 16391, 16407, 16423, 16439, + 16455, 16471, 16487, 16503, + 16520, 16536, 16552, 16568, + 16584, 16600, 16616, 16632, + 16648, 16665, 16681, 16697, + 16713, 16729, 16745, 16761, + 16778, 16794, 16810, 16826, + 16843, 16859, 16875, 16891, + 16907, 16924, 16940, 16956, + 16973, 16989, 17005, 17021, + 17038, 17054, 17070, 17087, + 17103, 17120, 17136, 17152, + 17169, 17185, 17201, 17218, + 17234, 17251, 17267, 17283, + 17300, 17316, 17333, 17349, + 17366, 17382, 17399, 17415, + 17432, 17448, 17465, 17481, + 17498, 17514, 17531, 17547, + 17564, 17581, 17597, 17614, + 17630, 17647, 17664, 17680, + 17697, 17714, 17730, 17747, + 17763, 17780, 17797, 17813, + 17830, 17847, 17864, 17880, + 17897, 17914, 17930, 17947, + 17964, 17981, 17998, 18014, + 18031, 18048, 18065, 18081, + 18098, 18115, 18132, 18149, + 18166, 18183, 18199, 18216, + 18233, 18250, 18267, 18284, + 18301, 18318, 18335, 18351, + 18368, 18385, 18402, 18419, + 18436, 18453, 18470, 18487, + 18504, 18521, 18538, 18555, + 18572, 18589, 18606, 18624, + 18641, 18658, 18675, 18692, + 18709, 18726, 18743, 18760, + 18777, 18795, 18812, 18829, + 18846, 18863, 18880, 18898, + 18915, 18932, 18949, 18966, + 18984, 19001, 19018, 19035, + 19053, 19070, 19087, 19104, + 19122, 19139, 19156, 19174, + 19191, 19208, 19225, 19243, + 19260, 19278, 19295, 19312, + 19330, 19347, 19364, 19382, + 19399, 19417, 19434, 19452, + 19469, 19486, 19504, 19521, + 19539, 19556, 19574, 19591, + 19609, 19626, 19644, 19661, + 19679, 19696, 19714, 19732, + 19749, 19767, 19784, 19802, + 19819, 19837, 19855, 19872, + 19890, 19908, 19925, 19943, + 19961, 19978, 19996, 20014, + 20031, 20049, 20067, 20084, + 20102, 20120, 20138, 20155, + 20173, 20191, 20209, 20226, + 20244, 20262, 20280, 20298, + 20315, 20333, 20351, 20369, + 20387, 20405, 20422, 20440, + 20458, 20476, 20494, 20512, + 20530, 20548, 20566, 20584, + 20601, 20619, 20637, 20655, + 20673, 20691, 20709, 20727, + 20745, 20763, 20781, 20799, + 20817, 20835, 20854, 20872, + 20890, 20908, 20926, 20944, + 20962, 20980, 20998, 21016, + 21034, 21053, 21071, 21089, + 21107, 21125, 21143, 21162, + 21180, 21198, 21216, 21234, + 21253, 21271, 21289, 21307, + 21326, 21344, 21362, 21380, + 21399, 21417, 21435, 21454, + 21472, 21490, 21509, 21527, + 21545, 21564, 21582, 21600, + 21619, 21637, 21656, 21674, + 21692, 21711, 21729, 21748, + 21766, 21784, 21803, 21821, + 21840, 21858, 21877, 21895, + 21914, 21932, 21951, 21969, + 21988, 22007, 22025, 22044, + 22062, 22081, 22099, 22118, + 22137, 22155, 22174, 22192, + 22211, 22230, 22248, 22267, + 22286, 22304, 22323, 22342, + 22360, 22379, 22398, 22416, + 22435, 22454, 22473, 22491, + 22510, 22529, 22548, 22566, + 22585, 22604, 22623, 22642, + 22660, 22679, 22698, 22717, + 22736, 22755, 22774, 22792, + 22811, 22830, 22849, 22868, + 22887, 22906, 22925, 22944, + 22963, 22982, 23001, 23019, + 23038, 23057, 23076, 23095, + 23114, 23133, 23152, 23171, + 23191, 23210, 23229, 23248, + 23267, 23286, 23305, 23324, + 23343, 23362, 23381, 23400, + 23420, 23439, 23458, 23477, + 23496, 23515, 23535, 23554, + 23573, 23592, 23611, 23631, + 23650, 23669, 23688, 23707, + 23727, 23746, 23765, 23785, + 23804, 23823, 23842, 23862, + 23881, 23900, 23920, 23939, + 23958, 23978, 23997, 24016, + 24036, 24055, 24075, 24094, + 24113, 24133, 24152, 24172, + 24191, 24211, 24230, 24250, + 24269, 24289, 24308, 24328, + 24347, 24367, 24386, 24406, + 24425, 24445, 24464, 24484, + 24503, 24523, 24542, 24562, + 24582, 24601, 24621, 24641, + 24660, 24680, 24699, 24719, + 24739, 24758, 24778, 24798, + 24817, 24837, 24857, 24877, + 24896, 24916, 24936, 24956, + 24975, 24995, 25015, 25035, + 25054, 25074, 25094, 25114, + 25134, 25153, 25173, 25193, + 25213, 25233, 25253, 25273, + 25292, 25312, 25332, 25352, + 25372, 25392, 25412, 25432, + 25452, 25472, 25492, 25512, + 25532, 25552, 25572, 25592, + 25612, 25632, 25652, 25672, + 25692, 25712, 25732, 25752, + 25772, 25792, 25812, 25832, + 25852, 25872, 25893, 25913, + 25933, 25953, 25973, 25993, + 26013, 26034, 26054, 26074, + 26094, 26114, 26135, 26155, + 26175, 26195, 26215, 26236, + 26256, 26276, 26296, 26317, + 26337, 26357, 26378, 26398, + 26418, 26439, 26459, 26479, + 26500, 26520, 26540, 26561, + 26581, 26601, 26622, 26642, + 26663, 26683, 26704, 26724, + 26744, 26765, 26785, 26806, + 26826, 26847, 26867, 26888, + 26908, 26929, 26949, 26970, + 26990, 27011, 27031, 27052, + 27073, 27093, 27114, 27134, + 27155, 27176, 27196, 27217, + 27237, 27258, 27279, 27299, + 27320, 27341, 27361, 27382, + 27403, 27423, 27444, 27465, + 27486, 27506, 27527, 27548, + 27569, 27589, 27610, 27631, + 27652, 27672, 27693, 27714, + 27735, 27756, 27777, 27797, + 27818, 27839, 27860, 27881, + 27902, 27923, 27943, 27964, + 27985, 28006, 28027, 28048, + 28069, 28090, 28111, 28132, + 28153, 28174, 28195, 28216, + 28237, 28258, 28279, 28300, + 28321, 28342, 28363, 28384, + 28405, 28426, 28447, 28468, + 28490, 28511, 28532, 28553, + 28574, 28595, 28616, 28637, + 28659, 28680, 28701, 28722, + 28743, 28765, 28786, 28807, + 28828, 28849, 28871, 28892, + 28913, 28934, 28956, 28977, + 28998, 29020, 29041, 29062, + 29084, 29105, 29126, 29148, + 29169, 29190, 29212, 29233, + 29254, 29276, 29297, 29319, + 29340, 29361, 29383, 29404, + 29426, 29447, 29469, 29490, + 29512, 29533, 29554, 29576, + 29597, 29619, 29641, 29662, + 29684, 29705, 29727, 29748, + 29770, 29791, 29813, 29835, + 29856, 29878, 29899, 29921, + 29943, 29964, 29986, 30008, + 30029, 30051, 30073, 30094, + 30116, 30138, 30159, 30181, + 30203, 30225, 30246, 30268, + 30290, 30312, 30333, 30355, + 30377, 30399, 30421, 30442, + 30464, 30486, 30508, 30530, + 30552, 30573, 30595, 30617, + 30639, 30661, 30683, 30705, + 30727, 30749, 30770, 30792, + 30814, 30836, 30858, 30880, + 30902, 30924, 30946, 30968, + 30990, 31012, 31034, 31056, + 31078, 31100, 31122, 31144, + 31166, 31189, 31211, 31233, + 31255, 31277, 31299, 31321, + 31343, 31365, 31388, 31410, + 31432, 31454, 31476, 31498, + 31521, 31543, 31565, 31587, + 31610, 31632, 31654, 31676, + 31698, 31721, 31743, 31765, + 31788, 31810, 31832, 31855, + 31877, 31899, 31921, 31944, + 31966, 31989, 32011, 32033, + 32056, 32078, 32100, 32123, + 32145, 32168, 32190, 32213, + 32235, 32257, 32280, 32302, + 32325, 32347, 32370, 32392, + 32415, 32437, 32460, 32482, + 32505, 32527, 32550, 32573, + 32595, 32618, 32640, 32663, + 32686, 32708, 32731, 32753, + 32776, 32799, 32821, 32844, + 32867, 32889, 32912, 32935, + 32957, 32980, 33003, 33025, + 33048, 33071, 33094, 33116, + 33139, 33162, 33185, 33207, + 33230, 33253, 33276, 33299, + 33322, 33344, 33367, 33390, + 33413, 33436, 33459, 33481, + 33504, 33527, 33550, 33573, + 33596, 33619, 33642, 33665, + 33688, 33711, 33734, 33757, + 33780, 33803, 33826, 33849, + 33872, 33895, 33918, 33941, + 33964, 33987, 34010, 34033, + 34056, 34079, 34102, 34125, + 34148, 34171, 34194, 34218, + 34241, 34264, 34287, 34310, + 34333, 34356, 34380, 34403, + 34426, 34449, 34472, 34496, + 34519, 34542, 34565, 34589, + 34612, 34635, 34658, 34682, + 34705, 34728, 34752, 34775, + 34798, 34822, 34845, 34868, + 34892, 34915, 34938, 34962, + 34985, 35008, 35032, 35055, + 35079, 35102, 35126, 35149, + 35172, 35196, 35219, 35243, + 35266, 35290, 35313, 35337, + 35360, 35384, 35407, 35431, + 35454, 35478, 35501, 35525, + 35549, 35572, 35596, 35619, + 35643, 35667, 35690, 35714, + 35737, 35761, 35785, 35808, + 35832, 35856, 35879, 35903, + 35927, 35950, 35974, 35998, + 36022, 36045, 36069, 36093, + 36117, 36140, 36164, 36188, + 36212, 36235, 36259, 36283, + 36307, 36331, 36355, 36378, + 36402, 36426, 36450, 36474, + 36498, 36522, 36546, 36569, + 36593, 36617, 36641, 36665, + 36689, 36713, 36737, 36761, + 36785, 36809, 36833, 36857, + 36881, 36905, 36929, 36953, + 36977, 37001, 37025, 37049, + 37073, 37097, 37121, 37146, + 37170, 37194, 37218, 37242, + 37266, 37290, 37314, 37339, + 37363, 37387, 37411, 37435, + 37459, 37484, 37508, 37532, + 37556, 37581, 37605, 37629, + 37653, 37678, 37702, 37726, + 37750, 37775, 37799, 37823, + 37848, 37872, 37896, 37921, + 37945, 37969, 37994, 38018, + 38042, 38067, 38091, 38116, + 38140, 38165, 38189, 38213, + 38238, 38262, 38287, 38311, + 38336, 38360, 38385, 38409, + 38434, 38458, 38483, 38507, + 38532, 38556, 38581, 38605, + 38630, 38655, 38679, 38704, + 38728, 38753, 38778, 38802, + 38827, 38852, 38876, 38901, + 38925, 38950, 38975, 39000, + 39024, 39049, 39074, 39098, + 39123, 39148, 39173, 39197, + 39222, 39247, 39272, 39296, + 39321, 39346, 39371, 39396, + 39420, 39445, 39470, 39495, + 39520, 39545, 39569, 39594, + 39619, 39644, 39669, 39694, + 39719, 39744, 39769, 39794, + 39819, 39844, 39868, 39893, + 39918, 39943, 39968, 39993, + 40018, 40043, 40068, 40093, + 40119, 40144, 40169, 40194, + 40219, 40244, 40269, 40294, + 40319, 40344, 40369, 40394, + 40420, 40445, 40470, 40495, + 40520, 40545, 40571, 40596, + 40621, 40646, 40671, 40697, + 40722, 40747, 40772, 40798, + 40823, 40848, 40873, 40899, + 40924, 40949, 40975, 41000, + 41025, 41050, 41076, 41101, + 41127, 41152, 41177, 41203, + 41228, 41253, 41279, 41304, + 41330, 41355, 41380, 41406, + 41431, 41457, 41482, 41508, + 41533, 41559, 41584, 41610, + 41635, 41661, 41686, 41712, + 41737, 41763, 41788, 41814, + 41840, 41865, 41891, 41916, + 41942, 41968, 41993, 42019, + 42044, 42070, 42096, 42121, + 42147, 42173, 42198, 42224, + 42250, 42275, 42301, 42327, + 42353, 42378, 42404, 42430, + 42456, 42481, 42507, 42533, + 42559, 42584, 42610, 42636, + 42662, 42688, 42714, 42739, + 42765, 42791, 42817, 42843, + 42869, 42895, 42921, 42946, + 42972, 42998, 43024, 43050, + 43076, 43102, 43128, 43154, + 43180, 43206, 43232, 43258, + 43284, 43310, 43336, 43362, + 43388, 43414, 43440, 43466, + 43492, 43518, 43544, 43571, + 43597, 43623, 43649, 43675, + 43701, 43727, 43753, 43780, + 43806, 43832, 43858, 43884, + 43911, 43937, 43963, 43989, + 44015, 44042, 44068, 44094, + 44120, 44147, 44173, 44199, + 44225, 44252, 44278, 44304, + 44331, 44357, 44383, 44410, + 44436, 44462, 44489, 44515, + 44542, 44568, 44594, 44621, + 44647, 44674, 44700, 44726, + 44753, 44779, 44806, 44832, + 44859, 44885, 44912, 44938, + 44965, 44991, 45018, 45044, + 45071, 45097, 45124, 45151, + 45177, 45204, 45230, 45257, + 45283, 45310, 45337, 45363, + 45390, 45417, 45443, 45470, + 45497, 45523, 45550, 45577, + 45603, 45630, 45657, 45683, + 45710, 45737, 45764, 45790, + 45817, 45844, 45871, 45897, + 45924, 45951, 45978, 46005, + 46032, 46058, 46085, 46112, + 46139, 46166, 46193, 46219, + 46246, 46273, 46300, 46327, + 46354, 46381, 46408, 46435, + 46462, 46489, 46516, 46543, + 46570, 46597, 46624, 46651, + 46678, 46705, 46732, 46759, + 46786, 46813, 46840, 46867, + 46894, 46921, 46948, 46975, + 47002, 47029, 47057, 47084, + 47111, 47138, 47165, 47192, + 47219, 47247, 47274, 47301, + 47328, 47355, 47383, 47410, + 47437, 47464, 47491, 47519, + 47546, 47573, 47601, 47628, + 47655, 47682, 47710, 47737, + 47764, 47792, 47819, 47846, + 47874, 47901, 47928, 47956, + 47983, 48011, 48038, 48065, + 48093, 48120, 48148, 48175, + 48203, 48230, 48257, 48285, + 48312, 48340, 48367, 48395, + 48422, 48450, 48477, 48505, + 48533, 48560, 48588, 48615, + 48643, 48670, 48698, 48726, + 48753, 48781, 48808, 48836, + 48864, 48891, 48919, 48947, + 48974, 49002, 49030, 49057, + 49085, 49113, 49140, 49168, + 49196, 49224, 49251, 49279, + 49307, 49335, 49362, 49390, + 49418, 49446, 49474, 49501, + 49529, 49557, 49585, 49613, + 49641, 49668, 49696, 49724, + 49752, 49780, 49808, 49836, + 49864, 49892, 49920, 49947, + 49975, 50003, 50031, 50059, + 50087, 50115, 50143, 50171, + 50199, 50227, 50255, 50283, + 50311, 50339, 50367, 50396, + 50424, 50452, 50480, 50508, + 50536, 50564, 50592, 50620, + 50648, 50677, 50705, 50733, + 50761, 50789, 50817, 50846, + 50874, 50902, 50930, 50958, + 50987, 51015, 51043, 51071, + 51100, 51128, 51156, 51184, + 51213, 51241, 51269, 51298, + 51326, 51354, 51383, 51411, + 51439, 51468, 51496, 51524, + 51553, 51581, 51610, 51638, + 51666, 51695, 51723, 51752, + 51780, 51809, 51837, 51866, + 51894, 51923, 51951, 51980, + 52008, 52037, 52065, 52094, + 52122, 52151, 52179, 52208, + 52236, 52265, 52294, 52322, + 52351, 52379, 52408, 52437, + 52465, 52494, 52523, 52551, + 52580, 52609, 52637, 52666, + 52695, 52723, 52752, 52781, + 52810, 52838, 52867, 52896, + 52925, 52953, 52982, 53011, + 53040, 53068, 53097, 53126, + 53155, 53184, 53213, 53241, + 53270, 53299, 53328, 53357, + 53386, 53415, 53444, 53472, + 53501, 53530, 53559, 53588, + 53617, 53646, 53675, 53704, + 53733, 53762, 53791, 53820, + 53849, 53878, 53907, 53936, + 53965, 53994, 54023, 54052, + 54081, 54110, 54139, 54169, + 54198, 54227, 54256, 54285, + 54314, 54343, 54372, 54402, + 54431, 54460, 54489, 54518, + 54548, 54577, 54606, 54635, + 54664, 54694, 54723, 54752, + 54781, 54811, 54840, 54869, + 54899, 54928, 54957, 54986, + 55016, 55045, 55074, 55104, + 55133, 55163, 55192, 55221, + 55251, 55280, 55309, 55339, + 55368, 55398, 55427, 55457, + 55486, 55515, 55545, 55574, + 55604, 55633, 55663, 55692, + 55722, 55751, 55781, 55810, + 55840, 55870, 55899, 55929, + 55958, 55988, 56017, 56047, + 56077, 56106, 56136, 56165, + 56195, 56225, 56254, 56284, + 56314, 56343, 56373, 56403, + 56432, 56462, 56492, 56522, + 56551, 56581, 56611, 56641, + 56670, 56700, 56730, 56760, + 56789, 56819, 56849, 56879, + 56909, 56938, 56968, 56998, + 57028, 57058, 57088, 57118, + 57148, 57177, 57207, 57237, + 57267, 57297, 57327, 57357, + 57387, 57417, 57447, 57477, + 57507, 57537, 57567, 57597, + 57627, 57657, 57687, 57717, + 57747, 57777, 57807, 57837, + 57867, 57897, 57927, 57957, + 57987, 58018, 58048, 58078, + 58108, 58138, 58168, 58198, + 58229, 58259, 58289, 58319, + 58349, 58380, 58410, 58440, + 58470, 58500, 58531, 58561, + 58591, 58621, 58652, 58682, + 58712, 58743, 58773, 58803, + 58834, 58864, 58894, 58925, + 58955, 58985, 59016, 59046, + 59076, 59107, 59137, 59168, + 59198, 59228, 59259, 59289, + 59320, 59350, 59381, 59411, + 59442, 59472, 59503, 59533, + 59564, 59594, 59625, 59655, + 59686, 59716, 59747, 59777, + 59808, 59839, 59869, 59900, + 59930, 59961, 59992, 60022, + 60053, 60084, 60114, 60145, + 60176, 60206, 60237, 60268, + 60298, 60329, 60360, 60390, + 60421, 60452, 60483, 60513, + 60544, 60575, 60606, 60636, + 60667, 60698, 60729, 60760, + 60791, 60821, 60852, 60883, + 60914, 60945, 60976, 61006, + 61037, 61068, 61099, 61130, + 61161, 61192, 61223, 61254, + 61285, 61316, 61347, 61378, + 61409, 61440, 61471, 61502, + 61533, 61564, 61595, 61626, + 61657, 61688, 61719, 61750, + 61781, 61812, 61843, 61874, + 61905, 61936, 61968, 61999, + 62030, 62061, 62092, 62123, + 62154, 62186, 62217, 62248, + 62279, 62310, 62342, 62373, + 62404, 62435, 62467, 62498, + 62529, 62560, 62592, 62623, + 62654, 62685, 62717, 62748, + 62779, 62811, 62842, 62873, + 62905, 62936, 62968, 62999, + 63030, 63062, 63093, 63125, + 63156, 63187, 63219, 63250, + 63282, 63313, 63345, 63376, + 63408, 63439, 63471, 63502, + 63534, 63565, 63597, 63628, + 63660, 63691, 63723, 63754, + 63786, 63818, 63849, 63881, + 63912, 63944, 63976, 64007, + 64039, 64070, 64102, 64134, + 64165, 64197, 64229, 64260, + 64292, 64324, 64356, 64387, + 64419, 64451, 64483, 64514, + 64546, 64578, 64610, 64641, + 64673, 64705, 64737, 64769, + 64800, 64832, 64864, 64896, + 64928, 64960, 64992, 65023, + 65055, 65087, 65119, 65151, + 65183, 65215, 65247, 65279, + 65311, 65343, 65375, 65407, + 65439, 65471, 65502, 65535, }; const uint16_t lut_left_sin_pan[] = { - 0, 6, 13, 19, - 25, 31, 38, 44, - 50, 57, 63, 69, - 75, 82, 88, 94, - 101, 107, 113, 119, - 126, 132, 138, 145, - 151, 157, 163, 170, - 176, 182, 189, 195, - 201, 207, 214, 220, - 226, 233, 239, 245, - 251, 258, 264, 270, - 277, 283, 289, 295, - 302, 308, 314, 320, - 327, 333, 339, 346, - 352, 358, 364, 371, - 377, 383, 389, 396, - 402, 408, 414, 421, - 427, 433, 439, 446, - 452, 458, 464, 471, - 477, 483, 489, 496, - 502, 508, 514, 521, - 527, 533, 539, 546, - 552, 558, 564, 570, - 577, 583, 589, 595, - 602, 608, 614, 620, - 626, 633, 639, 645, - 651, 658, 664, 670, - 676, 682, 689, 695, - 701, 707, 713, 720, - 726, 732, 738, 744, - 750, 757, 763, 769, - 775, 781, 788, 794, - 800, 806, 812, 818, - 825, 831, 837, 843, - 849, 855, 861, 868, - 874, 880, 886, 892, - 898, 904, 911, 917, - 923, 929, 935, 941, - 947, 953, 960, 966, - 972, 978, 984, 990, - 996, 1002, 1008, 1014, - 1021, 1027, 1033, 1039, - 1045, 1051, 1057, 1063, - 1069, 1075, 1081, 1087, - 1093, 1100, 1106, 1112, - 1118, 1124, 1130, 1136, - 1142, 1148, 1154, 1160, - 1166, 1172, 1178, 1184, - 1190, 1196, 1202, 1208, - 1214, 1220, 1226, 1232, - 1238, 1244, 1250, 1256, - 1262, 1268, 1274, 1280, - 1286, 1292, 1298, 1304, - 1310, 1316, 1322, 1328, - 1334, 1340, 1346, 1352, - 1357, 1363, 1369, 1375, - 1381, 1387, 1393, 1399, - 1405, 1411, 1417, 1423, - 1428, 1434, 1440, 1446, - 1452, 1458, 1464, 1470, - 1476, 1481, 1487, 1493, - 1499, 1505, 1511, 1516, - 1522, 1528, 1534, 1540, - 1546, 1551, 1557, 1563, - 1569, 1575, 1581, 1586, - 1592, 1598, 1604, 1610, - 1615, 1621, 1627, 1633, - 1638, 1644, 1650, 1656, - 1661, 1667, 1673, 1679, - 1684, 1690, 1696, 1702, - 1707, 1713, 1719, 1724, - 1730, 1736, 1741, 1747, - 1753, 1759, 1764, 1770, - 1776, 1781, 1787, 1793, - 1798, 1804, 1809, 1815, - 1821, 1826, 1832, 1838, - 1843, 1849, 1854, 1860, - 1866, 1871, 1877, 1882, - 1888, 1894, 1899, 1905, - 1910, 1916, 1921, 1927, - 1933, 1938, 1944, 1949, - 1955, 1960, 1966, 1971, - 1977, 1982, 1988, 1993, - 1999, 2004, 2010, 2015, - 2021, 2026, 2032, 2037, - 2043, 2048, 2053, 2059, - 2064, 2070, 2075, 2081, - 2086, 2091, 2097, 2102, - 2108, 2113, 2118, 2124, - 2129, 2135, 2140, 2145, - 2151, 2156, 2161, 2167, - 2172, 2177, 2183, 2188, - 2193, 2199, 2204, 2209, - 2214, 2220, 2225, 2230, - 2236, 2241, 2246, 2251, - 2257, 2262, 2267, 2272, - 2278, 2283, 2288, 2293, - 2298, 2304, 2309, 2314, - 2319, 2324, 2330, 2335, - 2340, 2345, 2350, 2355, - 2361, 2366, 2371, 2376, - 2381, 2386, 2391, 2396, - 2401, 2407, 2412, 2417, - 2422, 2427, 2432, 2437, - 2442, 2447, 2452, 2457, - 2462, 2467, 2472, 2477, - 2482, 2487, 2492, 2497, - 2502, 2507, 2512, 2517, - 2522, 2527, 2532, 2537, - 2542, 2547, 2552, 2557, - 2562, 2566, 2571, 2576, - 2581, 2586, 2591, 2596, - 2601, 2605, 2610, 2615, - 2620, 2625, 2630, 2634, - 2639, 2644, 2649, 2654, - 2658, 2663, 2668, 2673, - 2678, 2682, 2687, 2692, - 2697, 2701, 2706, 2711, - 2715, 2720, 2725, 2730, - 2734, 2739, 2744, 2748, - 2753, 2758, 2762, 2767, - 2771, 2776, 2781, 2785, - 2790, 2795, 2799, 2804, - 2808, 2813, 2817, 2822, - 2827, 2831, 2836, 2840, - 2845, 2849, 2854, 2858, - 2863, 2867, 2872, 2876, - 2881, 2885, 2890, 2894, - 2899, 2903, 2907, 2912, - 2916, 2921, 2925, 2929, - 2934, 2938, 2943, 2947, - 2951, 2956, 2960, 2964, - 2969, 2973, 2977, 2982, - 2986, 2990, 2995, 2999, - 3003, 3007, 3012, 3016, - 3020, 3024, 3029, 3033, - 3037, 3041, 3046, 3050, - 3054, 3058, 3062, 3067, - 3071, 3075, 3079, 3083, - 3087, 3091, 3096, 3100, - 3104, 3108, 3112, 3116, - 3120, 3124, 3128, 3132, - 3136, 3140, 3144, 3148, - 3152, 3157, 3161, 3165, - 3168, 3172, 3176, 3180, - 3184, 3188, 3192, 3196, - 3200, 3204, 3208, 3212, - 3216, 3220, 3224, 3227, - 3231, 3235, 3239, 3243, - 3247, 3251, 3254, 3258, - 3262, 3266, 3270, 3273, - 3277, 3281, 3285, 3288, - 3292, 3296, 3300, 3303, - 3307, 3311, 3314, 3318, - 3322, 3326, 3329, 3333, - 3337, 3340, 3344, 3347, - 3351, 3355, 3358, 3362, - 3365, 3369, 3373, 3376, - 3380, 3383, 3387, 3390, - 3394, 3397, 3401, 3404, - 3408, 3411, 3415, 3418, - 3422, 3425, 3429, 3432, - 3436, 3439, 3442, 3446, - 3449, 3453, 3456, 3459, - 3463, 3466, 3469, 3473, - 3476, 3479, 3483, 3486, - 3489, 3493, 3496, 3499, - 3502, 3506, 3509, 3512, - 3515, 3519, 3522, 3525, - 3528, 3531, 3535, 3538, - 3541, 3544, 3547, 3550, - 3554, 3557, 3560, 3563, - 3566, 3569, 3572, 3575, - 3578, 3581, 3584, 3587, - 3590, 3593, 3596, 3599, - 3602, 3605, 3608, 3611, - 3614, 3617, 3620, 3623, - 3626, 3629, 3632, 3635, - 3638, 3641, 3644, 3646, - 3649, 3652, 3655, 3658, - 3661, 3663, 3666, 3669, - 3672, 3675, 3677, 3680, - 3683, 3686, 3688, 3691, - 3694, 3697, 3699, 3702, - 3705, 3707, 3710, 3713, - 3715, 3718, 3721, 3723, - 3726, 3728, 3731, 3734, - 3736, 3739, 3741, 3744, - 3746, 3749, 3752, 3754, - 3757, 3759, 3762, 3764, - 3767, 3769, 3771, 3774, - 3776, 3779, 3781, 3784, - 3786, 3788, 3791, 3793, - 3796, 3798, 3800, 3803, - 3805, 3807, 3810, 3812, - 3814, 3816, 3819, 3821, - 3823, 3826, 3828, 3830, - 3832, 3834, 3837, 3839, - 3841, 3843, 3845, 3848, - 3850, 3852, 3854, 3856, - 3858, 3860, 3862, 3865, - 3867, 3869, 3871, 3873, - 3875, 3877, 3879, 3881, - 3883, 3885, 3887, 3889, - 3891, 3893, 3895, 3897, - 3899, 3901, 3902, 3904, - 3906, 3908, 3910, 3912, - 3914, 3916, 3917, 3919, - 3921, 3923, 3925, 3927, - 3928, 3930, 3932, 3934, - 3935, 3937, 3939, 3941, - 3942, 3944, 3946, 3947, - 3949, 3951, 3952, 3954, - 3956, 3957, 3959, 3960, - 3962, 3964, 3965, 3967, - 3968, 3970, 3971, 3973, - 3975, 3976, 3978, 3979, - 3981, 3982, 3983, 3985, - 3986, 3988, 3989, 3991, - 3992, 3994, 3995, 3996, - 3998, 3999, 4000, 4002, - 4003, 4004, 4006, 4007, - 4008, 4010, 4011, 4012, - 4013, 4015, 4016, 4017, - 4018, 4020, 4021, 4022, - 4023, 4024, 4026, 4027, - 4028, 4029, 4030, 4031, - 4032, 4033, 4034, 4036, - 4037, 4038, 4039, 4040, - 4041, 4042, 4043, 4044, - 4045, 4046, 4047, 4048, - 4049, 4050, 4051, 4052, - 4052, 4053, 4054, 4055, - 4056, 4057, 4058, 4059, - 4060, 4060, 4061, 4062, - 4063, 4064, 4064, 4065, - 4066, 4067, 4067, 4068, - 4069, 4070, 4070, 4071, - 4072, 4072, 4073, 4074, - 4074, 4075, 4076, 4076, - 4077, 4077, 4078, 4079, - 4079, 4080, 4080, 4081, - 4081, 4082, 4082, 4083, - 4083, 4084, 4084, 4085, - 4085, 4086, 4086, 4087, - 4087, 4087, 4088, 4088, - 4089, 4089, 4089, 4090, - 4090, 4090, 4091, 4091, - 4091, 4092, 4092, 4092, - 4092, 4093, 4093, 4093, - 4093, 4094, 4094, 4094, - 4094, 4094, 4095, 4095, - 4095, 4095, 4095, 4095, - 4095, 4096, 4096, 4096, - 4096, 4096, 4096, 4096, - 4096, 4096, 4096, 4096, + 0, 25, 50, 75, + 101, 126, 151, 176, + 201, 226, 251, 277, + 302, 327, 352, 377, + 402, 427, 452, 478, + 503, 528, 553, 578, + 603, 628, 654, 679, + 704, 729, 754, 779, + 804, 830, 855, 880, + 905, 930, 955, 980, + 1006, 1031, 1056, 1081, + 1106, 1131, 1156, 1181, + 1207, 1232, 1257, 1282, + 1307, 1332, 1357, 1383, + 1408, 1433, 1458, 1483, + 1508, 1533, 1558, 1584, + 1609, 1634, 1659, 1684, + 1709, 1734, 1759, 1785, + 1810, 1835, 1860, 1885, + 1910, 1935, 1961, 1986, + 2011, 2036, 2061, 2086, + 2111, 2136, 2162, 2187, + 2212, 2237, 2262, 2287, + 2312, 2337, 2363, 2388, + 2413, 2438, 2463, 2488, + 2513, 2538, 2563, 2589, + 2614, 2639, 2664, 2689, + 2714, 2739, 2764, 2790, + 2815, 2840, 2865, 2890, + 2915, 2940, 2965, 2990, + 3016, 3041, 3066, 3091, + 3116, 3141, 3166, 3191, + 3216, 3242, 3267, 3292, + 3317, 3342, 3367, 3392, + 3417, 3442, 3467, 3493, + 3518, 3543, 3568, 3593, + 3618, 3643, 3668, 3693, + 3718, 3744, 3769, 3794, + 3819, 3844, 3869, 3894, + 3919, 3944, 3969, 3995, + 4020, 4045, 4070, 4095, + 4120, 4145, 4170, 4195, + 4220, 4245, 4271, 4296, + 4321, 4346, 4371, 4396, + 4421, 4446, 4471, 4496, + 4521, 4546, 4571, 4597, + 4622, 4647, 4672, 4697, + 4722, 4747, 4772, 4797, + 4822, 4847, 4872, 4897, + 4923, 4948, 4973, 4998, + 5023, 5048, 5073, 5098, + 5123, 5148, 5173, 5198, + 5223, 5248, 5273, 5298, + 5323, 5349, 5374, 5399, + 5424, 5449, 5474, 5499, + 5524, 5549, 5574, 5599, + 5624, 5649, 5674, 5699, + 5724, 5749, 5774, 5799, + 5824, 5849, 5875, 5900, + 5925, 5950, 5975, 6000, + 6025, 6050, 6075, 6100, + 6125, 6150, 6175, 6200, + 6225, 6250, 6275, 6300, + 6325, 6350, 6375, 6400, + 6425, 6450, 6475, 6500, + 6525, 6550, 6575, 6600, + 6625, 6650, 6675, 6700, + 6725, 6750, 6775, 6800, + 6825, 6850, 6875, 6900, + 6925, 6950, 6975, 7000, + 7025, 7050, 7075, 7100, + 7125, 7150, 7175, 7200, + 7225, 7250, 7275, 7300, + 7325, 7350, 7375, 7400, + 7425, 7450, 7475, 7500, + 7525, 7550, 7575, 7600, + 7625, 7650, 7675, 7700, + 7725, 7750, 7775, 7800, + 7825, 7849, 7874, 7899, + 7924, 7949, 7974, 7999, + 8024, 8049, 8074, 8099, + 8124, 8149, 8174, 8199, + 8224, 8249, 8274, 8299, + 8323, 8348, 8373, 8398, + 8423, 8448, 8473, 8498, + 8523, 8548, 8573, 8598, + 8623, 8647, 8672, 8697, + 8722, 8747, 8772, 8797, + 8822, 8847, 8872, 8897, + 8922, 8946, 8971, 8996, + 9021, 9046, 9071, 9096, + 9121, 9146, 9170, 9195, + 9220, 9245, 9270, 9295, + 9320, 9345, 9370, 9394, + 9419, 9444, 9469, 9494, + 9519, 9544, 9569, 9593, + 9618, 9643, 9668, 9693, + 9718, 9743, 9767, 9792, + 9817, 9842, 9867, 9892, + 9917, 9941, 9966, 9991, + 10016, 10041, 10066, 10091, + 10115, 10140, 10165, 10190, + 10215, 10240, 10264, 10289, + 10314, 10339, 10364, 10388, + 10413, 10438, 10463, 10488, + 10513, 10537, 10562, 10587, + 10612, 10637, 10661, 10686, + 10711, 10736, 10761, 10785, + 10810, 10835, 10860, 10885, + 10909, 10934, 10959, 10984, + 11008, 11033, 11058, 11083, + 11108, 11132, 11157, 11182, + 11207, 11231, 11256, 11281, + 11306, 11331, 11355, 11380, + 11405, 11430, 11454, 11479, + 11504, 11529, 11553, 11578, + 11603, 11628, 11652, 11677, + 11702, 11726, 11751, 11776, + 11801, 11825, 11850, 11875, + 11900, 11924, 11949, 11974, + 11998, 12023, 12048, 12073, + 12097, 12122, 12147, 12171, + 12196, 12221, 12245, 12270, + 12295, 12320, 12344, 12369, + 12394, 12418, 12443, 12468, + 12492, 12517, 12542, 12566, + 12591, 12616, 12640, 12665, + 12690, 12714, 12739, 12764, + 12788, 12813, 12838, 12862, + 12887, 12912, 12936, 12961, + 12986, 13010, 13035, 13059, + 13084, 13109, 13133, 13158, + 13183, 13207, 13232, 13256, + 13281, 13306, 13330, 13355, + 13380, 13404, 13429, 13453, + 13478, 13503, 13527, 13552, + 13576, 13601, 13625, 13650, + 13675, 13699, 13724, 13748, + 13773, 13798, 13822, 13847, + 13871, 13896, 13920, 13945, + 13970, 13994, 14019, 14043, + 14068, 14092, 14117, 14141, + 14166, 14191, 14215, 14240, + 14264, 14289, 14313, 14338, + 14362, 14387, 14411, 14436, + 14460, 14485, 14509, 14534, + 14558, 14583, 14607, 14632, + 14656, 14681, 14705, 14730, + 14754, 14779, 14803, 14828, + 14852, 14877, 14901, 14926, + 14950, 14975, 14999, 15024, + 15048, 15073, 15097, 15122, + 15146, 15170, 15195, 15219, + 15244, 15268, 15293, 15317, + 15342, 15366, 15390, 15415, + 15439, 15464, 15488, 15513, + 15537, 15561, 15586, 15610, + 15635, 15659, 15684, 15708, + 15732, 15757, 15781, 15806, + 15830, 15854, 15879, 15903, + 15928, 15952, 15976, 16001, + 16025, 16049, 16074, 16098, + 16123, 16147, 16171, 16196, + 16220, 16244, 16269, 16293, + 16317, 16342, 16366, 16390, + 16415, 16439, 16463, 16488, + 16512, 16536, 16561, 16585, + 16609, 16634, 16658, 16682, + 16707, 16731, 16755, 16780, + 16804, 16828, 16852, 16877, + 16901, 16925, 16950, 16974, + 16998, 17022, 17047, 17071, + 17095, 17119, 17144, 17168, + 17192, 17217, 17241, 17265, + 17289, 17314, 17338, 17362, + 17386, 17410, 17435, 17459, + 17483, 17507, 17532, 17556, + 17580, 17604, 17629, 17653, + 17677, 17701, 17725, 17750, + 17774, 17798, 17822, 17846, + 17870, 17895, 17919, 17943, + 17967, 17991, 18016, 18040, + 18064, 18088, 18112, 18136, + 18161, 18185, 18209, 18233, + 18257, 18281, 18305, 18330, + 18354, 18378, 18402, 18426, + 18450, 18474, 18498, 18523, + 18547, 18571, 18595, 18619, + 18643, 18667, 18691, 18715, + 18739, 18764, 18788, 18812, + 18836, 18860, 18884, 18908, + 18932, 18956, 18980, 19004, + 19028, 19052, 19076, 19100, + 19125, 19149, 19173, 19197, + 19221, 19245, 19269, 19293, + 19317, 19341, 19365, 19389, + 19413, 19437, 19461, 19485, + 19509, 19533, 19557, 19581, + 19605, 19629, 19653, 19677, + 19701, 19725, 19749, 19773, + 19797, 19821, 19845, 19869, + 19892, 19916, 19940, 19964, + 19988, 20012, 20036, 20060, + 20084, 20108, 20132, 20156, + 20180, 20204, 20228, 20251, + 20275, 20299, 20323, 20347, + 20371, 20395, 20419, 20443, + 20466, 20490, 20514, 20538, + 20562, 20586, 20610, 20634, + 20657, 20681, 20705, 20729, + 20753, 20777, 20801, 20824, + 20848, 20872, 20896, 20920, + 20943, 20967, 20991, 21015, + 21039, 21063, 21086, 21110, + 21134, 21158, 21182, 21205, + 21229, 21253, 21277, 21300, + 21324, 21348, 21372, 21396, + 21419, 21443, 21467, 21491, + 21514, 21538, 21562, 21586, + 21609, 21633, 21657, 21680, + 21704, 21728, 21752, 21775, + 21799, 21823, 21846, 21870, + 21894, 21917, 21941, 21965, + 21989, 22012, 22036, 22060, + 22083, 22107, 22131, 22154, + 22178, 22202, 22225, 22249, + 22272, 22296, 22320, 22343, + 22367, 22391, 22414, 22438, + 22462, 22485, 22509, 22532, + 22556, 22580, 22603, 22627, + 22650, 22674, 22698, 22721, + 22745, 22768, 22792, 22815, + 22839, 22863, 22886, 22910, + 22933, 22957, 22980, 23004, + 23027, 23051, 23074, 23098, + 23121, 23145, 23169, 23192, + 23216, 23239, 23263, 23286, + 23310, 23333, 23357, 23380, + 23403, 23427, 23450, 23474, + 23497, 23521, 23544, 23568, + 23591, 23615, 23638, 23662, + 23685, 23708, 23732, 23755, + 23779, 23802, 23826, 23849, + 23872, 23896, 23919, 23943, + 23966, 23989, 24013, 24036, + 24060, 24083, 24106, 24130, + 24153, 24176, 24200, 24223, + 24247, 24270, 24293, 24317, + 24340, 24363, 24387, 24410, + 24433, 24457, 24480, 24503, + 24527, 24550, 24573, 24596, + 24620, 24643, 24666, 24690, + 24713, 24736, 24759, 24783, + 24806, 24829, 24853, 24876, + 24899, 24922, 24946, 24969, + 24992, 25015, 25039, 25062, + 25085, 25108, 25131, 25155, + 25178, 25201, 25224, 25247, + 25271, 25294, 25317, 25340, + 25363, 25387, 25410, 25433, + 25456, 25479, 25502, 25526, + 25549, 25572, 25595, 25618, + 25641, 25664, 25688, 25711, + 25734, 25757, 25780, 25803, + 25826, 25849, 25872, 25896, + 25919, 25942, 25965, 25988, + 26011, 26034, 26057, 26080, + 26103, 26126, 26149, 26172, + 26195, 26218, 26241, 26265, + 26288, 26311, 26334, 26357, + 26380, 26403, 26426, 26449, + 26472, 26495, 26518, 26541, + 26564, 26587, 26610, 26633, + 26655, 26678, 26701, 26724, + 26747, 26770, 26793, 26816, + 26839, 26862, 26885, 26908, + 26931, 26954, 26977, 27000, + 27022, 27045, 27068, 27091, + 27114, 27137, 27160, 27183, + 27206, 27228, 27251, 27274, + 27297, 27320, 27343, 27366, + 27388, 27411, 27434, 27457, + 27480, 27502, 27525, 27548, + 27571, 27594, 27617, 27639, + 27662, 27685, 27708, 27730, + 27753, 27776, 27799, 27822, + 27844, 27867, 27890, 27913, + 27935, 27958, 27981, 28003, + 28026, 28049, 28072, 28094, + 28117, 28140, 28162, 28185, + 28208, 28231, 28253, 28276, + 28299, 28321, 28344, 28367, + 28389, 28412, 28435, 28457, + 28480, 28502, 28525, 28548, + 28570, 28593, 28616, 28638, + 28661, 28683, 28706, 28729, + 28751, 28774, 28796, 28819, + 28842, 28864, 28887, 28909, + 28932, 28954, 28977, 28999, + 29022, 29045, 29067, 29090, + 29112, 29135, 29157, 29180, + 29202, 29225, 29247, 29270, + 29292, 29315, 29337, 29360, + 29382, 29405, 29427, 29449, + 29472, 29494, 29517, 29539, + 29562, 29584, 29607, 29629, + 29651, 29674, 29696, 29719, + 29741, 29763, 29786, 29808, + 29831, 29853, 29875, 29898, + 29920, 29942, 29965, 29987, + 30010, 30032, 30054, 30077, + 30099, 30121, 30144, 30166, + 30188, 30211, 30233, 30255, + 30277, 30300, 30322, 30344, + 30367, 30389, 30411, 30433, + 30456, 30478, 30500, 30522, + 30545, 30567, 30589, 30611, + 30634, 30656, 30678, 30700, + 30722, 30745, 30767, 30789, + 30811, 30833, 30856, 30878, + 30900, 30922, 30944, 30966, + 30989, 31011, 31033, 31055, + 31077, 31099, 31121, 31143, + 31166, 31188, 31210, 31232, + 31254, 31276, 31298, 31320, + 31342, 31364, 31387, 31409, + 31431, 31453, 31475, 31497, + 31519, 31541, 31563, 31585, + 31607, 31629, 31651, 31673, + 31695, 31717, 31739, 31761, + 31783, 31805, 31827, 31849, + 31871, 31893, 31915, 31937, + 31959, 31981, 32003, 32025, + 32046, 32068, 32090, 32112, + 32134, 32156, 32178, 32200, + 32222, 32244, 32266, 32287, + 32309, 32331, 32353, 32375, + 32397, 32419, 32440, 32462, + 32484, 32506, 32528, 32550, + 32571, 32593, 32615, 32637, + 32659, 32680, 32702, 32724, + 32746, 32767, 32789, 32811, + 32833, 32855, 32876, 32898, + 32920, 32942, 32963, 32985, + 33007, 33028, 33050, 33072, + 33094, 33115, 33137, 33159, + 33180, 33202, 33224, 33245, + 33267, 33289, 33310, 33332, + 33354, 33375, 33397, 33418, + 33440, 33462, 33483, 33505, + 33526, 33548, 33570, 33591, + 33613, 33634, 33656, 33678, + 33699, 33721, 33742, 33764, + 33785, 33807, 33828, 33850, + 33871, 33893, 33914, 33936, + 33958, 33979, 34000, 34022, + 34043, 34065, 34086, 34108, + 34129, 34151, 34172, 34194, + 34215, 34237, 34258, 34279, + 34301, 34322, 34344, 34365, + 34387, 34408, 34429, 34451, + 34472, 34493, 34515, 34536, + 34558, 34579, 34600, 34622, + 34643, 34664, 34686, 34707, + 34728, 34750, 34771, 34792, + 34813, 34835, 34856, 34877, + 34899, 34920, 34941, 34962, + 34984, 35005, 35026, 35047, + 35069, 35090, 35111, 35132, + 35154, 35175, 35196, 35217, + 35238, 35260, 35281, 35302, + 35323, 35344, 35366, 35387, + 35408, 35429, 35450, 35471, + 35492, 35514, 35535, 35556, + 35577, 35598, 35619, 35640, + 35661, 35682, 35703, 35725, + 35746, 35767, 35788, 35809, + 35830, 35851, 35872, 35893, + 35914, 35935, 35956, 35977, + 35998, 36019, 36040, 36061, + 36082, 36103, 36124, 36145, + 36166, 36187, 36208, 36229, + 36250, 36271, 36292, 36313, + 36333, 36354, 36375, 36396, + 36417, 36438, 36459, 36480, + 36501, 36522, 36542, 36563, + 36584, 36605, 36626, 36647, + 36668, 36688, 36709, 36730, + 36751, 36772, 36792, 36813, + 36834, 36855, 36876, 36896, + 36917, 36938, 36959, 36979, + 37000, 37021, 37042, 37062, + 37083, 37104, 37125, 37145, + 37166, 37187, 37207, 37228, + 37249, 37269, 37290, 37311, + 37331, 37352, 37373, 37393, + 37414, 37435, 37455, 37476, + 37497, 37517, 37538, 37558, + 37579, 37600, 37620, 37641, + 37661, 37682, 37703, 37723, + 37744, 37764, 37785, 37805, + 37826, 37846, 37867, 37887, + 37908, 37928, 37949, 37969, + 37990, 38010, 38031, 38051, + 38072, 38092, 38113, 38133, + 38154, 38174, 38194, 38215, + 38235, 38256, 38276, 38296, + 38317, 38337, 38358, 38378, + 38398, 38419, 38439, 38459, + 38480, 38500, 38521, 38541, + 38561, 38581, 38602, 38622, + 38642, 38663, 38683, 38703, + 38724, 38744, 38764, 38784, + 38805, 38825, 38845, 38865, + 38886, 38906, 38926, 38946, + 38967, 38987, 39007, 39027, + 39047, 39068, 39088, 39108, + 39128, 39148, 39168, 39189, + 39209, 39229, 39249, 39269, + 39289, 39309, 39329, 39350, + 39370, 39390, 39410, 39430, + 39450, 39470, 39490, 39510, + 39530, 39550, 39570, 39590, + 39610, 39630, 39650, 39670, + 39690, 39710, 39730, 39750, + 39770, 39790, 39810, 39830, + 39850, 39870, 39890, 39910, + 39930, 39950, 39970, 39990, + 40010, 40030, 40050, 40069, + 40089, 40109, 40129, 40149, + 40169, 40189, 40209, 40228, + 40248, 40268, 40288, 40308, + 40328, 40347, 40367, 40387, + 40407, 40427, 40446, 40466, + 40486, 40506, 40525, 40545, + 40565, 40585, 40604, 40624, + 40644, 40664, 40683, 40703, + 40723, 40742, 40762, 40782, + 40801, 40821, 40841, 40860, + 40880, 40900, 40919, 40939, + 40959, 40978, 40998, 41017, + 41037, 41057, 41076, 41096, + 41115, 41135, 41155, 41174, + 41194, 41213, 41233, 41252, + 41272, 41291, 41311, 41330, + 41350, 41369, 41389, 41408, + 41428, 41447, 41467, 41486, + 41506, 41525, 41545, 41564, + 41583, 41603, 41622, 41642, + 41661, 41681, 41700, 41719, + 41739, 41758, 41777, 41797, + 41816, 41836, 41855, 41874, + 41894, 41913, 41932, 41952, + 41971, 41990, 42009, 42029, + 42048, 42067, 42087, 42106, + 42125, 42144, 42164, 42183, + 42202, 42221, 42241, 42260, + 42279, 42298, 42317, 42337, + 42356, 42375, 42394, 42413, + 42432, 42452, 42471, 42490, + 42509, 42528, 42547, 42566, + 42585, 42605, 42624, 42643, + 42662, 42681, 42700, 42719, + 42738, 42757, 42776, 42795, + 42814, 42833, 42852, 42871, + 42890, 42909, 42928, 42947, + 42966, 42985, 43004, 43023, + 43042, 43061, 43080, 43099, + 43118, 43137, 43156, 43175, + 43194, 43213, 43231, 43250, + 43269, 43288, 43307, 43326, + 43345, 43364, 43382, 43401, + 43420, 43439, 43458, 43477, + 43495, 43514, 43533, 43552, + 43571, 43589, 43608, 43627, + 43646, 43664, 43683, 43702, + 43721, 43739, 43758, 43777, + 43795, 43814, 43833, 43851, + 43870, 43889, 43907, 43926, + 43945, 43963, 43982, 44001, + 44019, 44038, 44057, 44075, + 44094, 44112, 44131, 44150, + 44168, 44187, 44205, 44224, + 44242, 44261, 44279, 44298, + 44316, 44335, 44354, 44372, + 44391, 44409, 44427, 44446, + 44464, 44483, 44501, 44520, + 44538, 44557, 44575, 44594, + 44612, 44630, 44649, 44667, + 44686, 44704, 44722, 44741, + 44759, 44777, 44796, 44814, + 44832, 44851, 44869, 44887, + 44906, 44924, 44942, 44961, + 44979, 44997, 45015, 45034, + 45052, 45070, 45089, 45107, + 45125, 45143, 45161, 45180, + 45198, 45216, 45234, 45252, + 45271, 45289, 45307, 45325, + 45343, 45361, 45380, 45398, + 45416, 45434, 45452, 45470, + 45488, 45506, 45524, 45543, + 45561, 45579, 45597, 45615, + 45633, 45651, 45669, 45687, + 45705, 45723, 45741, 45759, + 45777, 45795, 45813, 45831, + 45849, 45867, 45885, 45903, + 45921, 45939, 45956, 45974, + 45992, 46010, 46028, 46046, + 46064, 46082, 46100, 46118, + 46135, 46153, 46171, 46189, + 46207, 46225, 46242, 46260, + 46278, 46296, 46314, 46331, + 46349, 46367, 46385, 46402, + 46420, 46438, 46456, 46473, + 46491, 46509, 46527, 46544, + 46562, 46580, 46597, 46615, + 46633, 46650, 46668, 46686, + 46703, 46721, 46738, 46756, + 46774, 46791, 46809, 46826, + 46844, 46862, 46879, 46897, + 46914, 46932, 46949, 46967, + 46984, 47002, 47020, 47037, + 47055, 47072, 47090, 47107, + 47124, 47142, 47159, 47177, + 47194, 47212, 47229, 47247, + 47264, 47281, 47299, 47316, + 47334, 47351, 47368, 47386, + 47403, 47420, 47438, 47455, + 47472, 47490, 47507, 47524, + 47542, 47559, 47576, 47594, + 47611, 47628, 47645, 47663, + 47680, 47697, 47714, 47732, + 47749, 47766, 47783, 47800, + 47818, 47835, 47852, 47869, + 47886, 47904, 47921, 47938, + 47955, 47972, 47989, 48006, + 48023, 48041, 48058, 48075, + 48092, 48109, 48126, 48143, + 48160, 48177, 48194, 48211, + 48228, 48245, 48262, 48279, + 48296, 48313, 48330, 48347, + 48364, 48381, 48398, 48415, + 48432, 48449, 48466, 48483, + 48500, 48517, 48533, 48550, + 48567, 48584, 48601, 48618, + 48635, 48652, 48668, 48685, + 48702, 48719, 48736, 48752, + 48769, 48786, 48803, 48820, + 48836, 48853, 48870, 48887, + 48903, 48920, 48937, 48954, + 48970, 48987, 49004, 49020, + 49037, 49054, 49070, 49087, + 49104, 49120, 49137, 49154, + 49170, 49187, 49203, 49220, + 49237, 49253, 49270, 49286, + 49303, 49319, 49336, 49353, + 49369, 49386, 49402, 49419, + 49435, 49452, 49468, 49485, + 49501, 49518, 49534, 49550, + 49567, 49583, 49600, 49616, + 49633, 49649, 49665, 49682, + 49698, 49715, 49731, 49747, + 49764, 49780, 49796, 49813, + 49829, 49845, 49862, 49878, + 49894, 49911, 49927, 49943, + 49960, 49976, 49992, 50008, + 50025, 50041, 50057, 50073, + 50089, 50106, 50122, 50138, + 50154, 50170, 50187, 50203, + 50219, 50235, 50251, 50267, + 50283, 50300, 50316, 50332, + 50348, 50364, 50380, 50396, + 50412, 50428, 50444, 50460, + 50476, 50492, 50508, 50524, + 50540, 50556, 50572, 50588, + 50604, 50620, 50636, 50652, + 50668, 50684, 50700, 50716, + 50732, 50748, 50764, 50780, + 50796, 50811, 50827, 50843, + 50859, 50875, 50891, 50907, + 50922, 50938, 50954, 50970, + 50986, 51001, 51017, 51033, + 51049, 51064, 51080, 51096, + 51112, 51127, 51143, 51159, + 51175, 51190, 51206, 51222, + 51237, 51253, 51269, 51284, + 51300, 51316, 51331, 51347, + 51362, 51378, 51394, 51409, + 51425, 51440, 51456, 51472, + 51487, 51503, 51518, 51534, + 51549, 51565, 51580, 51596, + 51611, 51627, 51642, 51658, + 51673, 51689, 51704, 51720, + 51735, 51750, 51766, 51781, + 51797, 51812, 51827, 51843, + 51858, 51874, 51889, 51904, + 51920, 51935, 51950, 51966, + 51981, 51996, 52012, 52027, + 52042, 52057, 52073, 52088, + 52103, 52118, 52134, 52149, + 52164, 52179, 52195, 52210, + 52225, 52240, 52255, 52270, + 52286, 52301, 52316, 52331, + 52346, 52361, 52376, 52391, + 52407, 52422, 52437, 52452, + 52467, 52482, 52497, 52512, + 52527, 52542, 52557, 52572, + 52587, 52602, 52617, 52632, + 52647, 52662, 52677, 52692, + 52707, 52722, 52737, 52752, + 52767, 52782, 52796, 52811, + 52826, 52841, 52856, 52871, + 52886, 52900, 52915, 52930, + 52945, 52960, 52975, 52989, + 53004, 53019, 53034, 53048, + 53063, 53078, 53093, 53107, + 53122, 53137, 53152, 53166, + 53181, 53196, 53210, 53225, + 53240, 53254, 53269, 53284, + 53298, 53313, 53328, 53342, + 53357, 53371, 53386, 53400, + 53415, 53430, 53444, 53459, + 53473, 53488, 53502, 53517, + 53531, 53546, 53560, 53575, + 53589, 53604, 53618, 53633, + 53647, 53661, 53676, 53690, + 53705, 53719, 53734, 53748, + 53762, 53777, 53791, 53805, + 53820, 53834, 53848, 53863, + 53877, 53891, 53906, 53920, + 53934, 53949, 53963, 53977, + 53991, 54006, 54020, 54034, + 54048, 54062, 54077, 54091, + 54105, 54119, 54133, 54148, + 54162, 54176, 54190, 54204, + 54218, 54232, 54246, 54261, + 54275, 54289, 54303, 54317, + 54331, 54345, 54359, 54373, + 54387, 54401, 54415, 54429, + 54443, 54457, 54471, 54485, + 54499, 54513, 54527, 54541, + 54555, 54569, 54583, 54597, + 54611, 54624, 54638, 54652, + 54666, 54680, 54694, 54708, + 54721, 54735, 54749, 54763, + 54777, 54791, 54804, 54818, + 54832, 54846, 54859, 54873, + 54887, 54901, 54914, 54928, + 54942, 54955, 54969, 54983, + 54996, 55010, 55024, 55037, + 55051, 55065, 55078, 55092, + 55106, 55119, 55133, 55146, + 55160, 55174, 55187, 55201, + 55214, 55228, 55241, 55255, + 55268, 55282, 55295, 55309, + 55322, 55336, 55349, 55363, + 55376, 55390, 55403, 55416, + 55430, 55443, 55457, 55470, + 55483, 55497, 55510, 55523, + 55537, 55550, 55564, 55577, + 55590, 55603, 55617, 55630, + 55643, 55657, 55670, 55683, + 55696, 55710, 55723, 55736, + 55749, 55763, 55776, 55789, + 55802, 55815, 55828, 55842, + 55855, 55868, 55881, 55894, + 55907, 55920, 55934, 55947, + 55960, 55973, 55986, 55999, + 56012, 56025, 56038, 56051, + 56064, 56077, 56090, 56103, + 56116, 56129, 56142, 56155, + 56168, 56181, 56194, 56207, + 56220, 56233, 56246, 56258, + 56271, 56284, 56297, 56310, + 56323, 56336, 56348, 56361, + 56374, 56387, 56400, 56413, + 56425, 56438, 56451, 56464, + 56476, 56489, 56502, 56515, + 56527, 56540, 56553, 56565, + 56578, 56591, 56604, 56616, + 56629, 56642, 56654, 56667, + 56679, 56692, 56705, 56717, + 56730, 56742, 56755, 56768, + 56780, 56793, 56805, 56818, + 56830, 56843, 56855, 56868, + 56880, 56893, 56905, 56918, + 56930, 56943, 56955, 56967, + 56980, 56992, 57005, 57017, + 57029, 57042, 57054, 57067, + 57079, 57091, 57104, 57116, + 57128, 57141, 57153, 57165, + 57177, 57190, 57202, 57214, + 57227, 57239, 57251, 57263, + 57275, 57288, 57300, 57312, + 57324, 57336, 57349, 57361, + 57373, 57385, 57397, 57409, + 57421, 57434, 57446, 57458, + 57470, 57482, 57494, 57506, + 57518, 57530, 57542, 57554, + 57566, 57578, 57590, 57602, + 57614, 57626, 57638, 57650, + 57662, 57674, 57686, 57698, + 57710, 57722, 57734, 57746, + 57757, 57769, 57781, 57793, + 57805, 57817, 57829, 57840, + 57852, 57864, 57876, 57888, + 57899, 57911, 57923, 57935, + 57946, 57958, 57970, 57982, + 57993, 58005, 58017, 58028, + 58040, 58052, 58063, 58075, + 58087, 58098, 58110, 58122, + 58133, 58145, 58156, 58168, + 58180, 58191, 58203, 58214, + 58226, 58237, 58249, 58260, + 58272, 58283, 58295, 58306, + 58318, 58329, 58341, 58352, + 58364, 58375, 58386, 58398, + 58409, 58421, 58432, 58443, + 58455, 58466, 58477, 58489, + 58500, 58511, 58523, 58534, + 58545, 58557, 58568, 58579, + 58591, 58602, 58613, 58624, + 58635, 58647, 58658, 58669, + 58680, 58692, 58703, 58714, + 58725, 58736, 58747, 58758, + 58770, 58781, 58792, 58803, + 58814, 58825, 58836, 58847, + 58858, 58869, 58880, 58891, + 58902, 58913, 58924, 58935, + 58946, 58957, 58968, 58979, + 58990, 59001, 59012, 59023, + 59034, 59045, 59056, 59067, + 59078, 59089, 59099, 59110, + 59121, 59132, 59143, 59154, + 59164, 59175, 59186, 59197, + 59208, 59218, 59229, 59240, + 59251, 59261, 59272, 59283, + 59294, 59304, 59315, 59326, + 59336, 59347, 59358, 59368, + 59379, 59390, 59400, 59411, + 59421, 59432, 59443, 59453, + 59464, 59474, 59485, 59495, + 59506, 59516, 59527, 59538, + 59548, 59559, 59569, 59579, + 59590, 59600, 59611, 59621, + 59632, 59642, 59653, 59663, + 59673, 59684, 59694, 59704, + 59715, 59725, 59736, 59746, + 59756, 59767, 59777, 59787, + 59797, 59808, 59818, 59828, + 59838, 59849, 59859, 59869, + 59879, 59890, 59900, 59910, + 59920, 59930, 59941, 59951, + 59961, 59971, 59981, 59991, + 60001, 60011, 60022, 60032, + 60042, 60052, 60062, 60072, + 60082, 60092, 60102, 60112, + 60122, 60132, 60142, 60152, + 60162, 60172, 60182, 60192, + 60202, 60212, 60222, 60232, + 60241, 60251, 60261, 60271, + 60281, 60291, 60301, 60311, + 60320, 60330, 60340, 60350, + 60360, 60369, 60379, 60389, + 60399, 60408, 60418, 60428, + 60438, 60447, 60457, 60467, + 60476, 60486, 60496, 60505, + 60515, 60525, 60534, 60544, + 60554, 60563, 60573, 60582, + 60592, 60602, 60611, 60621, + 60630, 60640, 60649, 60659, + 60668, 60678, 60687, 60697, + 60706, 60716, 60725, 60735, + 60744, 60754, 60763, 60772, + 60782, 60791, 60801, 60810, + 60819, 60829, 60838, 60847, + 60857, 60866, 60875, 60885, + 60894, 60903, 60913, 60922, + 60931, 60940, 60950, 60959, + 60968, 60977, 60986, 60996, + 61005, 61014, 61023, 61032, + 61041, 61051, 61060, 61069, + 61078, 61087, 61096, 61105, + 61114, 61123, 61133, 61142, + 61151, 61160, 61169, 61178, + 61187, 61196, 61205, 61214, + 61223, 61232, 61241, 61250, + 61258, 61267, 61276, 61285, + 61294, 61303, 61312, 61321, + 61330, 61338, 61347, 61356, + 61365, 61374, 61383, 61391, + 61400, 61409, 61418, 61427, + 61435, 61444, 61453, 61461, + 61470, 61479, 61488, 61496, + 61505, 61514, 61522, 61531, + 61540, 61548, 61557, 61566, + 61574, 61583, 61591, 61600, + 61609, 61617, 61626, 61634, + 61643, 61651, 61660, 61668, + 61677, 61685, 61694, 61702, + 61711, 61719, 61728, 61736, + 61744, 61753, 61761, 61770, + 61778, 61786, 61795, 61803, + 61812, 61820, 61828, 61837, + 61845, 61853, 61862, 61870, + 61878, 61886, 61895, 61903, + 61911, 61919, 61928, 61936, + 61944, 61952, 61960, 61969, + 61977, 61985, 61993, 62001, + 62009, 62018, 62026, 62034, + 62042, 62050, 62058, 62066, + 62074, 62082, 62090, 62098, + 62106, 62114, 62122, 62130, + 62138, 62146, 62154, 62162, + 62170, 62178, 62186, 62194, + 62202, 62210, 62218, 62226, + 62234, 62241, 62249, 62257, + 62265, 62273, 62281, 62289, + 62296, 62304, 62312, 62320, + 62327, 62335, 62343, 62351, + 62358, 62366, 62374, 62382, + 62389, 62397, 62405, 62412, + 62420, 62428, 62435, 62443, + 62451, 62458, 62466, 62473, + 62481, 62489, 62496, 62504, + 62511, 62519, 62526, 62534, + 62541, 62549, 62556, 62564, + 62571, 62579, 62586, 62594, + 62601, 62609, 62616, 62623, + 62631, 62638, 62646, 62653, + 62660, 62668, 62675, 62682, + 62690, 62697, 62704, 62712, + 62719, 62726, 62734, 62741, + 62748, 62755, 62763, 62770, + 62777, 62784, 62791, 62799, + 62806, 62813, 62820, 62827, + 62834, 62842, 62849, 62856, + 62863, 62870, 62877, 62884, + 62891, 62898, 62905, 62912, + 62920, 62927, 62934, 62941, + 62948, 62955, 62962, 62968, + 62975, 62982, 62989, 62996, + 63003, 63010, 63017, 63024, + 63031, 63038, 63045, 63051, + 63058, 63065, 63072, 63079, + 63086, 63092, 63099, 63106, + 63113, 63120, 63126, 63133, + 63140, 63146, 63153, 63160, + 63167, 63173, 63180, 63187, + 63193, 63200, 63207, 63213, + 63220, 63227, 63233, 63240, + 63246, 63253, 63259, 63266, + 63273, 63279, 63286, 63292, + 63299, 63305, 63312, 63318, + 63325, 63331, 63338, 63344, + 63350, 63357, 63363, 63370, + 63376, 63383, 63389, 63395, + 63402, 63408, 63414, 63421, + 63427, 63433, 63440, 63446, + 63452, 63459, 63465, 63471, + 63477, 63484, 63490, 63496, + 63502, 63508, 63515, 63521, + 63527, 63533, 63539, 63546, + 63552, 63558, 63564, 63570, + 63576, 63582, 63588, 63594, + 63600, 63607, 63613, 63619, + 63625, 63631, 63637, 63643, + 63649, 63655, 63661, 63667, + 63673, 63679, 63684, 63690, + 63696, 63702, 63708, 63714, + 63720, 63726, 63732, 63737, + 63743, 63749, 63755, 63761, + 63767, 63772, 63778, 63784, + 63790, 63795, 63801, 63807, + 63813, 63818, 63824, 63830, + 63835, 63841, 63847, 63853, + 63858, 63864, 63869, 63875, + 63881, 63886, 63892, 63897, + 63903, 63909, 63914, 63920, + 63925, 63931, 63936, 63942, + 63947, 63953, 63958, 63964, + 63969, 63975, 63980, 63986, + 63991, 63996, 64002, 64007, + 64013, 64018, 64023, 64029, + 64034, 64040, 64045, 64050, + 64055, 64061, 64066, 64071, + 64077, 64082, 64087, 64092, + 64098, 64103, 64108, 64113, + 64119, 64124, 64129, 64134, + 64139, 64144, 64150, 64155, + 64160, 64165, 64170, 64175, + 64180, 64185, 64190, 64195, + 64201, 64206, 64211, 64216, + 64221, 64226, 64231, 64236, + 64241, 64246, 64251, 64255, + 64260, 64265, 64270, 64275, + 64280, 64285, 64290, 64295, + 64300, 64304, 64309, 64314, + 64319, 64324, 64329, 64333, + 64338, 64343, 64348, 64352, + 64357, 64362, 64367, 64371, + 64376, 64381, 64385, 64390, + 64395, 64399, 64404, 64409, + 64413, 64418, 64423, 64427, + 64432, 64436, 64441, 64446, + 64450, 64455, 64459, 64464, + 64468, 64473, 64477, 64482, + 64486, 64491, 64495, 64500, + 64504, 64509, 64513, 64517, + 64522, 64526, 64531, 64535, + 64539, 64544, 64548, 64552, + 64557, 64561, 64565, 64570, + 64574, 64578, 64583, 64587, + 64591, 64595, 64600, 64604, + 64608, 64612, 64616, 64621, + 64625, 64629, 64633, 64637, + 64641, 64646, 64650, 64654, + 64658, 64662, 64666, 64670, + 64674, 64678, 64682, 64686, + 64690, 64694, 64698, 64702, + 64706, 64710, 64714, 64718, + 64722, 64726, 64730, 64734, + 64738, 64742, 64746, 64750, + 64754, 64757, 64761, 64765, + 64769, 64773, 64777, 64780, + 64784, 64788, 64792, 64796, + 64799, 64803, 64807, 64811, + 64814, 64818, 64822, 64825, + 64829, 64833, 64836, 64840, + 64844, 64847, 64851, 64855, + 64858, 64862, 64865, 64869, + 64872, 64876, 64880, 64883, + 64887, 64890, 64894, 64897, + 64901, 64904, 64908, 64911, + 64915, 64918, 64921, 64925, + 64928, 64932, 64935, 64939, + 64942, 64945, 64949, 64952, + 64955, 64959, 64962, 64965, + 64969, 64972, 64975, 64978, + 64982, 64985, 64988, 64991, + 64995, 64998, 65001, 65004, + 65007, 65011, 65014, 65017, + 65020, 65023, 65026, 65030, + 65033, 65036, 65039, 65042, + 65045, 65048, 65051, 65054, + 65057, 65060, 65063, 65066, + 65069, 65072, 65075, 65078, + 65081, 65084, 65087, 65090, + 65093, 65096, 65099, 65102, + 65104, 65107, 65110, 65113, + 65116, 65119, 65122, 65124, + 65127, 65130, 65133, 65135, + 65138, 65141, 65144, 65147, + 65149, 65152, 65155, 65157, + 65160, 65163, 65165, 65168, + 65171, 65173, 65176, 65179, + 65181, 65184, 65186, 65189, + 65192, 65194, 65197, 65199, + 65202, 65204, 65207, 65209, + 65212, 65214, 65217, 65219, + 65222, 65224, 65227, 65229, + 65231, 65234, 65236, 65239, + 65241, 65243, 65246, 65248, + 65251, 65253, 65255, 65257, + 65260, 65262, 65264, 65267, + 65269, 65271, 65273, 65276, + 65278, 65280, 65282, 65285, + 65287, 65289, 65291, 65293, + 65295, 65298, 65300, 65302, + 65304, 65306, 65308, 65310, + 65312, 65314, 65316, 65318, + 65320, 65322, 65325, 65327, + 65329, 65331, 65332, 65334, + 65336, 65338, 65340, 65342, + 65344, 65346, 65348, 65350, + 65352, 65354, 65355, 65357, + 65359, 65361, 65363, 65365, + 65366, 65368, 65370, 65372, + 65374, 65375, 65377, 65379, + 65381, 65382, 65384, 65386, + 65387, 65389, 65391, 65392, + 65394, 65396, 65397, 65399, + 65401, 65402, 65404, 65405, + 65407, 65409, 65410, 65412, + 65413, 65415, 65416, 65418, + 65419, 65421, 65422, 65424, + 65425, 65427, 65428, 65429, + 65431, 65432, 65434, 65435, + 65436, 65438, 65439, 65441, + 65442, 65443, 65445, 65446, + 65447, 65448, 65450, 65451, + 65452, 65454, 65455, 65456, + 65457, 65458, 65460, 65461, + 65462, 65463, 65464, 65466, + 65467, 65468, 65469, 65470, + 65471, 65472, 65473, 65475, + 65476, 65477, 65478, 65479, + 65480, 65481, 65482, 65483, + 65484, 65485, 65486, 65487, + 65488, 65489, 65490, 65491, + 65491, 65492, 65493, 65494, + 65495, 65496, 65497, 65498, + 65499, 65499, 65500, 65501, + 65502, 65503, 65503, 65504, + 65505, 65506, 65506, 65507, + 65508, 65509, 65509, 65510, + 65511, 65511, 65512, 65513, + 65513, 65514, 65515, 65515, + 65516, 65516, 65517, 65518, + 65518, 65519, 65519, 65520, + 65520, 65521, 65521, 65522, + 65522, 65523, 65523, 65524, + 65524, 65525, 65525, 65526, + 65526, 65526, 65527, 65527, + 65528, 65528, 65528, 65529, + 65529, 65529, 65530, 65530, + 65530, 65531, 65531, 65531, + 65531, 65532, 65532, 65532, + 65532, 65533, 65533, 65533, + 65533, 65533, 65534, 65534, + 65534, 65534, 65534, 65534, + 65534, 65535, 65535, 65535, + 65535, 65535, 65535, 65535, + 65535, 65535, 65535, 65535, }; const uint16_t lut_right_cos_pan[] = { - 4096, 4096, 4096, 4096, - 4096, 4096, 4096, 4096, - 4096, 4096, 4096, 4095, - 4095, 4095, 4095, 4095, - 4095, 4095, 4094, 4094, - 4094, 4094, 4094, 4093, - 4093, 4093, 4093, 4092, - 4092, 4092, 4092, 4091, - 4091, 4091, 4090, 4090, - 4090, 4089, 4089, 4089, - 4088, 4088, 4087, 4087, - 4087, 4086, 4086, 4085, - 4085, 4084, 4084, 4083, - 4083, 4082, 4082, 4081, - 4081, 4080, 4080, 4079, - 4079, 4078, 4077, 4077, - 4076, 4076, 4075, 4074, - 4074, 4073, 4072, 4072, - 4071, 4070, 4070, 4069, - 4068, 4067, 4067, 4066, - 4065, 4064, 4064, 4063, - 4062, 4061, 4060, 4060, - 4059, 4058, 4057, 4056, - 4055, 4054, 4053, 4052, - 4052, 4051, 4050, 4049, - 4048, 4047, 4046, 4045, - 4044, 4043, 4042, 4041, - 4040, 4039, 4038, 4037, - 4036, 4034, 4033, 4032, - 4031, 4030, 4029, 4028, - 4027, 4026, 4024, 4023, - 4022, 4021, 4020, 4018, - 4017, 4016, 4015, 4013, - 4012, 4011, 4010, 4008, - 4007, 4006, 4004, 4003, - 4002, 4000, 3999, 3998, - 3996, 3995, 3994, 3992, - 3991, 3989, 3988, 3986, - 3985, 3983, 3982, 3981, - 3979, 3978, 3976, 3975, - 3973, 3971, 3970, 3968, - 3967, 3965, 3964, 3962, - 3960, 3959, 3957, 3956, - 3954, 3952, 3951, 3949, - 3947, 3946, 3944, 3942, - 3941, 3939, 3937, 3935, - 3934, 3932, 3930, 3928, - 3927, 3925, 3923, 3921, - 3919, 3917, 3916, 3914, - 3912, 3910, 3908, 3906, - 3904, 3902, 3901, 3899, - 3897, 3895, 3893, 3891, - 3889, 3887, 3885, 3883, - 3881, 3879, 3877, 3875, - 3873, 3871, 3869, 3867, - 3865, 3862, 3860, 3858, - 3856, 3854, 3852, 3850, - 3848, 3845, 3843, 3841, - 3839, 3837, 3834, 3832, - 3830, 3828, 3826, 3823, - 3821, 3819, 3816, 3814, - 3812, 3810, 3807, 3805, - 3803, 3800, 3798, 3796, - 3793, 3791, 3788, 3786, - 3784, 3781, 3779, 3776, - 3774, 3771, 3769, 3767, - 3764, 3762, 3759, 3757, - 3754, 3752, 3749, 3746, - 3744, 3741, 3739, 3736, - 3734, 3731, 3728, 3726, - 3723, 3721, 3718, 3715, - 3713, 3710, 3707, 3705, - 3702, 3699, 3697, 3694, - 3691, 3688, 3686, 3683, - 3680, 3677, 3675, 3672, - 3669, 3666, 3663, 3661, - 3658, 3655, 3652, 3649, - 3646, 3644, 3641, 3638, - 3635, 3632, 3629, 3626, - 3623, 3620, 3617, 3614, - 3611, 3608, 3605, 3602, - 3599, 3596, 3593, 3590, - 3587, 3584, 3581, 3578, - 3575, 3572, 3569, 3566, - 3563, 3560, 3557, 3554, - 3550, 3547, 3544, 3541, - 3538, 3535, 3531, 3528, - 3525, 3522, 3519, 3515, - 3512, 3509, 3506, 3502, - 3499, 3496, 3493, 3489, - 3486, 3483, 3479, 3476, - 3473, 3469, 3466, 3463, - 3459, 3456, 3453, 3449, - 3446, 3442, 3439, 3436, - 3432, 3429, 3425, 3422, - 3418, 3415, 3411, 3408, - 3404, 3401, 3397, 3394, - 3390, 3387, 3383, 3380, - 3376, 3373, 3369, 3365, - 3362, 3358, 3355, 3351, - 3347, 3344, 3340, 3337, - 3333, 3329, 3326, 3322, - 3318, 3314, 3311, 3307, - 3303, 3300, 3296, 3292, - 3288, 3285, 3281, 3277, - 3273, 3270, 3266, 3262, - 3258, 3254, 3251, 3247, - 3243, 3239, 3235, 3231, - 3227, 3224, 3220, 3216, - 3212, 3208, 3204, 3200, - 3196, 3192, 3188, 3184, - 3180, 3176, 3172, 3168, - 3165, 3161, 3157, 3152, - 3148, 3144, 3140, 3136, - 3132, 3128, 3124, 3120, - 3116, 3112, 3108, 3104, - 3100, 3096, 3091, 3087, - 3083, 3079, 3075, 3071, - 3067, 3062, 3058, 3054, - 3050, 3046, 3041, 3037, - 3033, 3029, 3024, 3020, - 3016, 3012, 3007, 3003, - 2999, 2995, 2990, 2986, - 2982, 2977, 2973, 2969, - 2964, 2960, 2956, 2951, - 2947, 2943, 2938, 2934, - 2929, 2925, 2921, 2916, - 2912, 2907, 2903, 2899, - 2894, 2890, 2885, 2881, - 2876, 2872, 2867, 2863, - 2858, 2854, 2849, 2845, - 2840, 2836, 2831, 2827, - 2822, 2817, 2813, 2808, - 2804, 2799, 2795, 2790, - 2785, 2781, 2776, 2771, - 2767, 2762, 2758, 2753, - 2748, 2744, 2739, 2734, - 2730, 2725, 2720, 2715, - 2711, 2706, 2701, 2697, - 2692, 2687, 2682, 2678, - 2673, 2668, 2663, 2658, - 2654, 2649, 2644, 2639, - 2634, 2630, 2625, 2620, - 2615, 2610, 2605, 2601, - 2596, 2591, 2586, 2581, - 2576, 2571, 2566, 2562, - 2557, 2552, 2547, 2542, - 2537, 2532, 2527, 2522, - 2517, 2512, 2507, 2502, - 2497, 2492, 2487, 2482, - 2477, 2472, 2467, 2462, - 2457, 2452, 2447, 2442, - 2437, 2432, 2427, 2422, - 2417, 2412, 2407, 2401, - 2396, 2391, 2386, 2381, - 2376, 2371, 2366, 2361, - 2355, 2350, 2345, 2340, - 2335, 2330, 2324, 2319, - 2314, 2309, 2304, 2298, - 2293, 2288, 2283, 2278, - 2272, 2267, 2262, 2257, - 2251, 2246, 2241, 2236, - 2230, 2225, 2220, 2214, - 2209, 2204, 2199, 2193, - 2188, 2183, 2177, 2172, - 2167, 2161, 2156, 2151, - 2145, 2140, 2135, 2129, - 2124, 2118, 2113, 2108, - 2102, 2097, 2091, 2086, - 2081, 2075, 2070, 2064, - 2059, 2053, 2048, 2043, - 2037, 2032, 2026, 2021, - 2015, 2010, 2004, 1999, - 1993, 1988, 1982, 1977, - 1971, 1966, 1960, 1955, - 1949, 1944, 1938, 1933, - 1927, 1921, 1916, 1910, - 1905, 1899, 1894, 1888, - 1882, 1877, 1871, 1866, - 1860, 1854, 1849, 1843, - 1838, 1832, 1826, 1821, - 1815, 1809, 1804, 1798, - 1793, 1787, 1781, 1776, - 1770, 1764, 1759, 1753, - 1747, 1741, 1736, 1730, - 1724, 1719, 1713, 1707, - 1702, 1696, 1690, 1684, - 1679, 1673, 1667, 1661, - 1656, 1650, 1644, 1638, - 1633, 1627, 1621, 1615, - 1610, 1604, 1598, 1592, - 1586, 1581, 1575, 1569, - 1563, 1557, 1551, 1546, - 1540, 1534, 1528, 1522, - 1516, 1511, 1505, 1499, - 1493, 1487, 1481, 1476, - 1470, 1464, 1458, 1452, - 1446, 1440, 1434, 1428, - 1423, 1417, 1411, 1405, - 1399, 1393, 1387, 1381, - 1375, 1369, 1363, 1357, - 1352, 1346, 1340, 1334, - 1328, 1322, 1316, 1310, - 1304, 1298, 1292, 1286, - 1280, 1274, 1268, 1262, - 1256, 1250, 1244, 1238, - 1232, 1226, 1220, 1214, - 1208, 1202, 1196, 1190, - 1184, 1178, 1172, 1166, - 1160, 1154, 1148, 1142, - 1136, 1130, 1124, 1118, - 1112, 1106, 1100, 1093, - 1087, 1081, 1075, 1069, - 1063, 1057, 1051, 1045, - 1039, 1033, 1027, 1021, - 1014, 1008, 1002, 996, - 990, 984, 978, 972, - 966, 960, 953, 947, - 941, 935, 929, 923, - 917, 911, 904, 898, - 892, 886, 880, 874, - 868, 861, 855, 849, - 843, 837, 831, 825, - 818, 812, 806, 800, - 794, 788, 781, 775, - 769, 763, 757, 750, - 744, 738, 732, 726, - 720, 713, 707, 701, - 695, 689, 682, 676, - 670, 664, 658, 651, - 645, 639, 633, 626, - 620, 614, 608, 602, - 595, 589, 583, 577, - 570, 564, 558, 552, - 546, 539, 533, 527, - 521, 514, 508, 502, - 496, 489, 483, 477, - 471, 464, 458, 452, - 446, 439, 433, 427, - 421, 414, 408, 402, - 396, 389, 383, 377, - 371, 364, 358, 352, - 346, 339, 333, 327, - 320, 314, 308, 302, - 295, 289, 283, 277, - 270, 264, 258, 251, - 245, 239, 233, 226, - 220, 214, 207, 201, - 195, 189, 182, 176, - 170, 163, 157, 151, - 145, 138, 132, 126, - 119, 113, 107, 101, - 94, 88, 82, 75, - 69, 63, 57, 50, - 44, 38, 31, 25, - 19, 13, 6, 0, + 65535, 65535, 65535, 65535, + 65535, 65535, 65535, 65535, + 65535, 65535, 65535, 65534, + 65534, 65534, 65534, 65534, + 65534, 65534, 65533, 65533, + 65533, 65533, 65533, 65532, + 65532, 65532, 65532, 65531, + 65531, 65531, 65531, 65530, + 65530, 65530, 65529, 65529, + 65529, 65528, 65528, 65528, + 65527, 65527, 65526, 65526, + 65526, 65525, 65525, 65524, + 65524, 65523, 65523, 65522, + 65522, 65521, 65521, 65520, + 65520, 65519, 65519, 65518, + 65518, 65517, 65516, 65516, + 65515, 65515, 65514, 65513, + 65513, 65512, 65511, 65511, + 65510, 65509, 65509, 65508, + 65507, 65506, 65506, 65505, + 65504, 65503, 65503, 65502, + 65501, 65500, 65499, 65499, + 65498, 65497, 65496, 65495, + 65494, 65493, 65492, 65491, + 65491, 65490, 65489, 65488, + 65487, 65486, 65485, 65484, + 65483, 65482, 65481, 65480, + 65479, 65478, 65477, 65476, + 65475, 65473, 65472, 65471, + 65470, 65469, 65468, 65467, + 65466, 65464, 65463, 65462, + 65461, 65460, 65458, 65457, + 65456, 65455, 65454, 65452, + 65451, 65450, 65448, 65447, + 65446, 65445, 65443, 65442, + 65441, 65439, 65438, 65436, + 65435, 65434, 65432, 65431, + 65429, 65428, 65427, 65425, + 65424, 65422, 65421, 65419, + 65418, 65416, 65415, 65413, + 65412, 65410, 65409, 65407, + 65405, 65404, 65402, 65401, + 65399, 65397, 65396, 65394, + 65392, 65391, 65389, 65387, + 65386, 65384, 65382, 65381, + 65379, 65377, 65375, 65374, + 65372, 65370, 65368, 65366, + 65365, 65363, 65361, 65359, + 65357, 65355, 65354, 65352, + 65350, 65348, 65346, 65344, + 65342, 65340, 65338, 65336, + 65334, 65332, 65331, 65329, + 65327, 65325, 65322, 65320, + 65318, 65316, 65314, 65312, + 65310, 65308, 65306, 65304, + 65302, 65300, 65298, 65295, + 65293, 65291, 65289, 65287, + 65285, 65282, 65280, 65278, + 65276, 65273, 65271, 65269, + 65267, 65264, 65262, 65260, + 65257, 65255, 65253, 65251, + 65248, 65246, 65243, 65241, + 65239, 65236, 65234, 65231, + 65229, 65227, 65224, 65222, + 65219, 65217, 65214, 65212, + 65209, 65207, 65204, 65202, + 65199, 65197, 65194, 65192, + 65189, 65186, 65184, 65181, + 65179, 65176, 65173, 65171, + 65168, 65165, 65163, 65160, + 65157, 65155, 65152, 65149, + 65147, 65144, 65141, 65138, + 65135, 65133, 65130, 65127, + 65124, 65122, 65119, 65116, + 65113, 65110, 65107, 65104, + 65102, 65099, 65096, 65093, + 65090, 65087, 65084, 65081, + 65078, 65075, 65072, 65069, + 65066, 65063, 65060, 65057, + 65054, 65051, 65048, 65045, + 65042, 65039, 65036, 65033, + 65030, 65026, 65023, 65020, + 65017, 65014, 65011, 65007, + 65004, 65001, 64998, 64995, + 64991, 64988, 64985, 64982, + 64978, 64975, 64972, 64969, + 64965, 64962, 64959, 64955, + 64952, 64949, 64945, 64942, + 64939, 64935, 64932, 64928, + 64925, 64921, 64918, 64915, + 64911, 64908, 64904, 64901, + 64897, 64894, 64890, 64887, + 64883, 64880, 64876, 64872, + 64869, 64865, 64862, 64858, + 64855, 64851, 64847, 64844, + 64840, 64836, 64833, 64829, + 64825, 64822, 64818, 64814, + 64811, 64807, 64803, 64799, + 64796, 64792, 64788, 64784, + 64780, 64777, 64773, 64769, + 64765, 64761, 64757, 64754, + 64750, 64746, 64742, 64738, + 64734, 64730, 64726, 64722, + 64718, 64714, 64710, 64706, + 64702, 64698, 64694, 64690, + 64686, 64682, 64678, 64674, + 64670, 64666, 64662, 64658, + 64654, 64650, 64646, 64641, + 64637, 64633, 64629, 64625, + 64621, 64616, 64612, 64608, + 64604, 64600, 64595, 64591, + 64587, 64583, 64578, 64574, + 64570, 64565, 64561, 64557, + 64552, 64548, 64544, 64539, + 64535, 64531, 64526, 64522, + 64517, 64513, 64509, 64504, + 64500, 64495, 64491, 64486, + 64482, 64477, 64473, 64468, + 64464, 64459, 64455, 64450, + 64446, 64441, 64436, 64432, + 64427, 64423, 64418, 64413, + 64409, 64404, 64399, 64395, + 64390, 64385, 64381, 64376, + 64371, 64367, 64362, 64357, + 64352, 64348, 64343, 64338, + 64333, 64329, 64324, 64319, + 64314, 64309, 64304, 64300, + 64295, 64290, 64285, 64280, + 64275, 64270, 64265, 64260, + 64255, 64251, 64246, 64241, + 64236, 64231, 64226, 64221, + 64216, 64211, 64206, 64201, + 64195, 64190, 64185, 64180, + 64175, 64170, 64165, 64160, + 64155, 64150, 64144, 64139, + 64134, 64129, 64124, 64119, + 64113, 64108, 64103, 64098, + 64092, 64087, 64082, 64077, + 64071, 64066, 64061, 64055, + 64050, 64045, 64040, 64034, + 64029, 64023, 64018, 64013, + 64007, 64002, 63996, 63991, + 63986, 63980, 63975, 63969, + 63964, 63958, 63953, 63947, + 63942, 63936, 63931, 63925, + 63920, 63914, 63909, 63903, + 63897, 63892, 63886, 63881, + 63875, 63869, 63864, 63858, + 63853, 63847, 63841, 63835, + 63830, 63824, 63818, 63813, + 63807, 63801, 63795, 63790, + 63784, 63778, 63772, 63767, + 63761, 63755, 63749, 63743, + 63737, 63732, 63726, 63720, + 63714, 63708, 63702, 63696, + 63690, 63684, 63679, 63673, + 63667, 63661, 63655, 63649, + 63643, 63637, 63631, 63625, + 63619, 63613, 63607, 63600, + 63594, 63588, 63582, 63576, + 63570, 63564, 63558, 63552, + 63546, 63539, 63533, 63527, + 63521, 63515, 63508, 63502, + 63496, 63490, 63484, 63477, + 63471, 63465, 63459, 63452, + 63446, 63440, 63433, 63427, + 63421, 63414, 63408, 63402, + 63395, 63389, 63383, 63376, + 63370, 63363, 63357, 63350, + 63344, 63338, 63331, 63325, + 63318, 63312, 63305, 63299, + 63292, 63286, 63279, 63273, + 63266, 63259, 63253, 63246, + 63240, 63233, 63227, 63220, + 63213, 63207, 63200, 63193, + 63187, 63180, 63173, 63167, + 63160, 63153, 63146, 63140, + 63133, 63126, 63120, 63113, + 63106, 63099, 63092, 63086, + 63079, 63072, 63065, 63058, + 63051, 63045, 63038, 63031, + 63024, 63017, 63010, 63003, + 62996, 62989, 62982, 62975, + 62968, 62962, 62955, 62948, + 62941, 62934, 62927, 62920, + 62912, 62905, 62898, 62891, + 62884, 62877, 62870, 62863, + 62856, 62849, 62842, 62834, + 62827, 62820, 62813, 62806, + 62799, 62791, 62784, 62777, + 62770, 62763, 62755, 62748, + 62741, 62734, 62726, 62719, + 62712, 62704, 62697, 62690, + 62682, 62675, 62668, 62660, + 62653, 62646, 62638, 62631, + 62623, 62616, 62609, 62601, + 62594, 62586, 62579, 62571, + 62564, 62556, 62549, 62541, + 62534, 62526, 62519, 62511, + 62504, 62496, 62489, 62481, + 62473, 62466, 62458, 62451, + 62443, 62435, 62428, 62420, + 62412, 62405, 62397, 62389, + 62382, 62374, 62366, 62358, + 62351, 62343, 62335, 62327, + 62320, 62312, 62304, 62296, + 62289, 62281, 62273, 62265, + 62257, 62249, 62241, 62234, + 62226, 62218, 62210, 62202, + 62194, 62186, 62178, 62170, + 62162, 62154, 62146, 62138, + 62130, 62122, 62114, 62106, + 62098, 62090, 62082, 62074, + 62066, 62058, 62050, 62042, + 62034, 62026, 62018, 62009, + 62001, 61993, 61985, 61977, + 61969, 61960, 61952, 61944, + 61936, 61928, 61919, 61911, + 61903, 61895, 61886, 61878, + 61870, 61862, 61853, 61845, + 61837, 61828, 61820, 61812, + 61803, 61795, 61786, 61778, + 61770, 61761, 61753, 61744, + 61736, 61728, 61719, 61711, + 61702, 61694, 61685, 61677, + 61668, 61660, 61651, 61643, + 61634, 61626, 61617, 61609, + 61600, 61591, 61583, 61574, + 61566, 61557, 61548, 61540, + 61531, 61522, 61514, 61505, + 61496, 61488, 61479, 61470, + 61461, 61453, 61444, 61435, + 61427, 61418, 61409, 61400, + 61391, 61383, 61374, 61365, + 61356, 61347, 61338, 61330, + 61321, 61312, 61303, 61294, + 61285, 61276, 61267, 61258, + 61250, 61241, 61232, 61223, + 61214, 61205, 61196, 61187, + 61178, 61169, 61160, 61151, + 61142, 61133, 61123, 61114, + 61105, 61096, 61087, 61078, + 61069, 61060, 61051, 61041, + 61032, 61023, 61014, 61005, + 60996, 60986, 60977, 60968, + 60959, 60950, 60940, 60931, + 60922, 60913, 60903, 60894, + 60885, 60875, 60866, 60857, + 60847, 60838, 60829, 60819, + 60810, 60801, 60791, 60782, + 60772, 60763, 60754, 60744, + 60735, 60725, 60716, 60706, + 60697, 60687, 60678, 60668, + 60659, 60649, 60640, 60630, + 60621, 60611, 60602, 60592, + 60582, 60573, 60563, 60554, + 60544, 60534, 60525, 60515, + 60505, 60496, 60486, 60476, + 60467, 60457, 60447, 60438, + 60428, 60418, 60408, 60399, + 60389, 60379, 60369, 60360, + 60350, 60340, 60330, 60320, + 60311, 60301, 60291, 60281, + 60271, 60261, 60251, 60241, + 60232, 60222, 60212, 60202, + 60192, 60182, 60172, 60162, + 60152, 60142, 60132, 60122, + 60112, 60102, 60092, 60082, + 60072, 60062, 60052, 60042, + 60032, 60022, 60011, 60001, + 59991, 59981, 59971, 59961, + 59951, 59941, 59930, 59920, + 59910, 59900, 59890, 59879, + 59869, 59859, 59849, 59838, + 59828, 59818, 59808, 59797, + 59787, 59777, 59767, 59756, + 59746, 59736, 59725, 59715, + 59704, 59694, 59684, 59673, + 59663, 59653, 59642, 59632, + 59621, 59611, 59600, 59590, + 59579, 59569, 59559, 59548, + 59538, 59527, 59516, 59506, + 59495, 59485, 59474, 59464, + 59453, 59443, 59432, 59421, + 59411, 59400, 59390, 59379, + 59368, 59358, 59347, 59336, + 59326, 59315, 59304, 59294, + 59283, 59272, 59261, 59251, + 59240, 59229, 59218, 59208, + 59197, 59186, 59175, 59164, + 59154, 59143, 59132, 59121, + 59110, 59099, 59089, 59078, + 59067, 59056, 59045, 59034, + 59023, 59012, 59001, 58990, + 58979, 58968, 58957, 58946, + 58935, 58924, 58913, 58902, + 58891, 58880, 58869, 58858, + 58847, 58836, 58825, 58814, + 58803, 58792, 58781, 58770, + 58758, 58747, 58736, 58725, + 58714, 58703, 58692, 58680, + 58669, 58658, 58647, 58635, + 58624, 58613, 58602, 58591, + 58579, 58568, 58557, 58545, + 58534, 58523, 58511, 58500, + 58489, 58477, 58466, 58455, + 58443, 58432, 58421, 58409, + 58398, 58386, 58375, 58364, + 58352, 58341, 58329, 58318, + 58306, 58295, 58283, 58272, + 58260, 58249, 58237, 58226, + 58214, 58203, 58191, 58180, + 58168, 58156, 58145, 58133, + 58122, 58110, 58098, 58087, + 58075, 58063, 58052, 58040, + 58028, 58017, 58005, 57993, + 57982, 57970, 57958, 57946, + 57935, 57923, 57911, 57899, + 57888, 57876, 57864, 57852, + 57840, 57829, 57817, 57805, + 57793, 57781, 57769, 57757, + 57746, 57734, 57722, 57710, + 57698, 57686, 57674, 57662, + 57650, 57638, 57626, 57614, + 57602, 57590, 57578, 57566, + 57554, 57542, 57530, 57518, + 57506, 57494, 57482, 57470, + 57458, 57446, 57434, 57421, + 57409, 57397, 57385, 57373, + 57361, 57349, 57336, 57324, + 57312, 57300, 57288, 57275, + 57263, 57251, 57239, 57227, + 57214, 57202, 57190, 57177, + 57165, 57153, 57141, 57128, + 57116, 57104, 57091, 57079, + 57067, 57054, 57042, 57029, + 57017, 57005, 56992, 56980, + 56967, 56955, 56943, 56930, + 56918, 56905, 56893, 56880, + 56868, 56855, 56843, 56830, + 56818, 56805, 56793, 56780, + 56768, 56755, 56742, 56730, + 56717, 56705, 56692, 56679, + 56667, 56654, 56642, 56629, + 56616, 56604, 56591, 56578, + 56565, 56553, 56540, 56527, + 56515, 56502, 56489, 56476, + 56464, 56451, 56438, 56425, + 56413, 56400, 56387, 56374, + 56361, 56348, 56336, 56323, + 56310, 56297, 56284, 56271, + 56258, 56246, 56233, 56220, + 56207, 56194, 56181, 56168, + 56155, 56142, 56129, 56116, + 56103, 56090, 56077, 56064, + 56051, 56038, 56025, 56012, + 55999, 55986, 55973, 55960, + 55947, 55934, 55920, 55907, + 55894, 55881, 55868, 55855, + 55842, 55828, 55815, 55802, + 55789, 55776, 55763, 55749, + 55736, 55723, 55710, 55696, + 55683, 55670, 55657, 55643, + 55630, 55617, 55603, 55590, + 55577, 55564, 55550, 55537, + 55523, 55510, 55497, 55483, + 55470, 55457, 55443, 55430, + 55416, 55403, 55390, 55376, + 55363, 55349, 55336, 55322, + 55309, 55295, 55282, 55268, + 55255, 55241, 55228, 55214, + 55201, 55187, 55174, 55160, + 55146, 55133, 55119, 55106, + 55092, 55078, 55065, 55051, + 55037, 55024, 55010, 54996, + 54983, 54969, 54955, 54942, + 54928, 54914, 54901, 54887, + 54873, 54859, 54846, 54832, + 54818, 54804, 54791, 54777, + 54763, 54749, 54735, 54721, + 54708, 54694, 54680, 54666, + 54652, 54638, 54624, 54611, + 54597, 54583, 54569, 54555, + 54541, 54527, 54513, 54499, + 54485, 54471, 54457, 54443, + 54429, 54415, 54401, 54387, + 54373, 54359, 54345, 54331, + 54317, 54303, 54289, 54275, + 54261, 54246, 54232, 54218, + 54204, 54190, 54176, 54162, + 54148, 54133, 54119, 54105, + 54091, 54077, 54062, 54048, + 54034, 54020, 54006, 53991, + 53977, 53963, 53949, 53934, + 53920, 53906, 53891, 53877, + 53863, 53848, 53834, 53820, + 53805, 53791, 53777, 53762, + 53748, 53734, 53719, 53705, + 53690, 53676, 53661, 53647, + 53633, 53618, 53604, 53589, + 53575, 53560, 53546, 53531, + 53517, 53502, 53488, 53473, + 53459, 53444, 53430, 53415, + 53400, 53386, 53371, 53357, + 53342, 53328, 53313, 53298, + 53284, 53269, 53254, 53240, + 53225, 53210, 53196, 53181, + 53166, 53152, 53137, 53122, + 53107, 53093, 53078, 53063, + 53048, 53034, 53019, 53004, + 52989, 52975, 52960, 52945, + 52930, 52915, 52900, 52886, + 52871, 52856, 52841, 52826, + 52811, 52796, 52782, 52767, + 52752, 52737, 52722, 52707, + 52692, 52677, 52662, 52647, + 52632, 52617, 52602, 52587, + 52572, 52557, 52542, 52527, + 52512, 52497, 52482, 52467, + 52452, 52437, 52422, 52407, + 52391, 52376, 52361, 52346, + 52331, 52316, 52301, 52286, + 52270, 52255, 52240, 52225, + 52210, 52195, 52179, 52164, + 52149, 52134, 52118, 52103, + 52088, 52073, 52057, 52042, + 52027, 52012, 51996, 51981, + 51966, 51950, 51935, 51920, + 51904, 51889, 51874, 51858, + 51843, 51827, 51812, 51797, + 51781, 51766, 51750, 51735, + 51720, 51704, 51689, 51673, + 51658, 51642, 51627, 51611, + 51596, 51580, 51565, 51549, + 51534, 51518, 51503, 51487, + 51472, 51456, 51440, 51425, + 51409, 51394, 51378, 51362, + 51347, 51331, 51316, 51300, + 51284, 51269, 51253, 51237, + 51222, 51206, 51190, 51175, + 51159, 51143, 51127, 51112, + 51096, 51080, 51064, 51049, + 51033, 51017, 51001, 50986, + 50970, 50954, 50938, 50922, + 50907, 50891, 50875, 50859, + 50843, 50827, 50811, 50796, + 50780, 50764, 50748, 50732, + 50716, 50700, 50684, 50668, + 50652, 50636, 50620, 50604, + 50588, 50572, 50556, 50540, + 50524, 50508, 50492, 50476, + 50460, 50444, 50428, 50412, + 50396, 50380, 50364, 50348, + 50332, 50316, 50300, 50283, + 50267, 50251, 50235, 50219, + 50203, 50187, 50170, 50154, + 50138, 50122, 50106, 50089, + 50073, 50057, 50041, 50025, + 50008, 49992, 49976, 49960, + 49943, 49927, 49911, 49894, + 49878, 49862, 49845, 49829, + 49813, 49796, 49780, 49764, + 49747, 49731, 49715, 49698, + 49682, 49665, 49649, 49633, + 49616, 49600, 49583, 49567, + 49550, 49534, 49518, 49501, + 49485, 49468, 49452, 49435, + 49419, 49402, 49386, 49369, + 49353, 49336, 49319, 49303, + 49286, 49270, 49253, 49237, + 49220, 49203, 49187, 49170, + 49154, 49137, 49120, 49104, + 49087, 49070, 49054, 49037, + 49020, 49004, 48987, 48970, + 48954, 48937, 48920, 48903, + 48887, 48870, 48853, 48836, + 48820, 48803, 48786, 48769, + 48752, 48736, 48719, 48702, + 48685, 48668, 48652, 48635, + 48618, 48601, 48584, 48567, + 48550, 48533, 48517, 48500, + 48483, 48466, 48449, 48432, + 48415, 48398, 48381, 48364, + 48347, 48330, 48313, 48296, + 48279, 48262, 48245, 48228, + 48211, 48194, 48177, 48160, + 48143, 48126, 48109, 48092, + 48075, 48058, 48041, 48023, + 48006, 47989, 47972, 47955, + 47938, 47921, 47904, 47886, + 47869, 47852, 47835, 47818, + 47800, 47783, 47766, 47749, + 47732, 47714, 47697, 47680, + 47663, 47645, 47628, 47611, + 47594, 47576, 47559, 47542, + 47524, 47507, 47490, 47472, + 47455, 47438, 47420, 47403, + 47386, 47368, 47351, 47334, + 47316, 47299, 47281, 47264, + 47247, 47229, 47212, 47194, + 47177, 47159, 47142, 47124, + 47107, 47090, 47072, 47055, + 47037, 47020, 47002, 46984, + 46967, 46949, 46932, 46914, + 46897, 46879, 46862, 46844, + 46826, 46809, 46791, 46774, + 46756, 46738, 46721, 46703, + 46686, 46668, 46650, 46633, + 46615, 46597, 46580, 46562, + 46544, 46527, 46509, 46491, + 46473, 46456, 46438, 46420, + 46402, 46385, 46367, 46349, + 46331, 46314, 46296, 46278, + 46260, 46242, 46225, 46207, + 46189, 46171, 46153, 46135, + 46118, 46100, 46082, 46064, + 46046, 46028, 46010, 45992, + 45974, 45956, 45939, 45921, + 45903, 45885, 45867, 45849, + 45831, 45813, 45795, 45777, + 45759, 45741, 45723, 45705, + 45687, 45669, 45651, 45633, + 45615, 45597, 45579, 45561, + 45543, 45524, 45506, 45488, + 45470, 45452, 45434, 45416, + 45398, 45380, 45361, 45343, + 45325, 45307, 45289, 45271, + 45252, 45234, 45216, 45198, + 45180, 45161, 45143, 45125, + 45107, 45089, 45070, 45052, + 45034, 45015, 44997, 44979, + 44961, 44942, 44924, 44906, + 44887, 44869, 44851, 44832, + 44814, 44796, 44777, 44759, + 44741, 44722, 44704, 44686, + 44667, 44649, 44630, 44612, + 44594, 44575, 44557, 44538, + 44520, 44501, 44483, 44464, + 44446, 44427, 44409, 44391, + 44372, 44354, 44335, 44316, + 44298, 44279, 44261, 44242, + 44224, 44205, 44187, 44168, + 44150, 44131, 44112, 44094, + 44075, 44057, 44038, 44019, + 44001, 43982, 43963, 43945, + 43926, 43907, 43889, 43870, + 43851, 43833, 43814, 43795, + 43777, 43758, 43739, 43721, + 43702, 43683, 43664, 43646, + 43627, 43608, 43589, 43571, + 43552, 43533, 43514, 43495, + 43477, 43458, 43439, 43420, + 43401, 43382, 43364, 43345, + 43326, 43307, 43288, 43269, + 43250, 43231, 43213, 43194, + 43175, 43156, 43137, 43118, + 43099, 43080, 43061, 43042, + 43023, 43004, 42985, 42966, + 42947, 42928, 42909, 42890, + 42871, 42852, 42833, 42814, + 42795, 42776, 42757, 42738, + 42719, 42700, 42681, 42662, + 42643, 42624, 42605, 42585, + 42566, 42547, 42528, 42509, + 42490, 42471, 42452, 42432, + 42413, 42394, 42375, 42356, + 42337, 42317, 42298, 42279, + 42260, 42241, 42221, 42202, + 42183, 42164, 42144, 42125, + 42106, 42087, 42067, 42048, + 42029, 42009, 41990, 41971, + 41952, 41932, 41913, 41894, + 41874, 41855, 41836, 41816, + 41797, 41777, 41758, 41739, + 41719, 41700, 41681, 41661, + 41642, 41622, 41603, 41583, + 41564, 41545, 41525, 41506, + 41486, 41467, 41447, 41428, + 41408, 41389, 41369, 41350, + 41330, 41311, 41291, 41272, + 41252, 41233, 41213, 41194, + 41174, 41155, 41135, 41115, + 41096, 41076, 41057, 41037, + 41017, 40998, 40978, 40959, + 40939, 40919, 40900, 40880, + 40860, 40841, 40821, 40801, + 40782, 40762, 40742, 40723, + 40703, 40683, 40664, 40644, + 40624, 40604, 40585, 40565, + 40545, 40525, 40506, 40486, + 40466, 40446, 40427, 40407, + 40387, 40367, 40347, 40328, + 40308, 40288, 40268, 40248, + 40228, 40209, 40189, 40169, + 40149, 40129, 40109, 40089, + 40069, 40050, 40030, 40010, + 39990, 39970, 39950, 39930, + 39910, 39890, 39870, 39850, + 39830, 39810, 39790, 39770, + 39750, 39730, 39710, 39690, + 39670, 39650, 39630, 39610, + 39590, 39570, 39550, 39530, + 39510, 39490, 39470, 39450, + 39430, 39410, 39390, 39370, + 39350, 39329, 39309, 39289, + 39269, 39249, 39229, 39209, + 39189, 39168, 39148, 39128, + 39108, 39088, 39068, 39047, + 39027, 39007, 38987, 38967, + 38946, 38926, 38906, 38886, + 38865, 38845, 38825, 38805, + 38784, 38764, 38744, 38724, + 38703, 38683, 38663, 38642, + 38622, 38602, 38581, 38561, + 38541, 38521, 38500, 38480, + 38459, 38439, 38419, 38398, + 38378, 38358, 38337, 38317, + 38296, 38276, 38256, 38235, + 38215, 38194, 38174, 38154, + 38133, 38113, 38092, 38072, + 38051, 38031, 38010, 37990, + 37969, 37949, 37928, 37908, + 37887, 37867, 37846, 37826, + 37805, 37785, 37764, 37744, + 37723, 37703, 37682, 37661, + 37641, 37620, 37600, 37579, + 37558, 37538, 37517, 37497, + 37476, 37455, 37435, 37414, + 37393, 37373, 37352, 37331, + 37311, 37290, 37269, 37249, + 37228, 37207, 37187, 37166, + 37145, 37125, 37104, 37083, + 37062, 37042, 37021, 37000, + 36979, 36959, 36938, 36917, + 36896, 36876, 36855, 36834, + 36813, 36792, 36772, 36751, + 36730, 36709, 36688, 36668, + 36647, 36626, 36605, 36584, + 36563, 36542, 36522, 36501, + 36480, 36459, 36438, 36417, + 36396, 36375, 36354, 36333, + 36313, 36292, 36271, 36250, + 36229, 36208, 36187, 36166, + 36145, 36124, 36103, 36082, + 36061, 36040, 36019, 35998, + 35977, 35956, 35935, 35914, + 35893, 35872, 35851, 35830, + 35809, 35788, 35767, 35746, + 35725, 35703, 35682, 35661, + 35640, 35619, 35598, 35577, + 35556, 35535, 35514, 35492, + 35471, 35450, 35429, 35408, + 35387, 35366, 35344, 35323, + 35302, 35281, 35260, 35238, + 35217, 35196, 35175, 35154, + 35132, 35111, 35090, 35069, + 35047, 35026, 35005, 34984, + 34962, 34941, 34920, 34899, + 34877, 34856, 34835, 34813, + 34792, 34771, 34750, 34728, + 34707, 34686, 34664, 34643, + 34622, 34600, 34579, 34558, + 34536, 34515, 34493, 34472, + 34451, 34429, 34408, 34387, + 34365, 34344, 34322, 34301, + 34279, 34258, 34237, 34215, + 34194, 34172, 34151, 34129, + 34108, 34086, 34065, 34043, + 34022, 34000, 33979, 33958, + 33936, 33914, 33893, 33871, + 33850, 33828, 33807, 33785, + 33764, 33742, 33721, 33699, + 33678, 33656, 33634, 33613, + 33591, 33570, 33548, 33526, + 33505, 33483, 33462, 33440, + 33418, 33397, 33375, 33354, + 33332, 33310, 33289, 33267, + 33245, 33224, 33202, 33180, + 33159, 33137, 33115, 33094, + 33072, 33050, 33028, 33007, + 32985, 32963, 32942, 32920, + 32898, 32876, 32855, 32833, + 32811, 32789, 32768, 32746, + 32724, 32702, 32680, 32659, + 32637, 32615, 32593, 32571, + 32550, 32528, 32506, 32484, + 32462, 32440, 32419, 32397, + 32375, 32353, 32331, 32309, + 32287, 32266, 32244, 32222, + 32200, 32178, 32156, 32134, + 32112, 32090, 32068, 32046, + 32025, 32003, 31981, 31959, + 31937, 31915, 31893, 31871, + 31849, 31827, 31805, 31783, + 31761, 31739, 31717, 31695, + 31673, 31651, 31629, 31607, + 31585, 31563, 31541, 31519, + 31497, 31475, 31453, 31431, + 31409, 31387, 31364, 31342, + 31320, 31298, 31276, 31254, + 31232, 31210, 31188, 31166, + 31143, 31121, 31099, 31077, + 31055, 31033, 31011, 30989, + 30966, 30944, 30922, 30900, + 30878, 30856, 30833, 30811, + 30789, 30767, 30745, 30722, + 30700, 30678, 30656, 30634, + 30611, 30589, 30567, 30545, + 30522, 30500, 30478, 30456, + 30433, 30411, 30389, 30367, + 30344, 30322, 30300, 30277, + 30255, 30233, 30211, 30188, + 30166, 30144, 30121, 30099, + 30077, 30054, 30032, 30010, + 29987, 29965, 29942, 29920, + 29898, 29875, 29853, 29831, + 29808, 29786, 29763, 29741, + 29719, 29696, 29674, 29651, + 29629, 29607, 29584, 29562, + 29539, 29517, 29494, 29472, + 29449, 29427, 29405, 29382, + 29360, 29337, 29315, 29292, + 29270, 29247, 29225, 29202, + 29180, 29157, 29135, 29112, + 29090, 29067, 29045, 29022, + 28999, 28977, 28954, 28932, + 28909, 28887, 28864, 28842, + 28819, 28796, 28774, 28751, + 28729, 28706, 28683, 28661, + 28638, 28616, 28593, 28570, + 28548, 28525, 28502, 28480, + 28457, 28435, 28412, 28389, + 28367, 28344, 28321, 28299, + 28276, 28253, 28231, 28208, + 28185, 28162, 28140, 28117, + 28094, 28072, 28049, 28026, + 28003, 27981, 27958, 27935, + 27913, 27890, 27867, 27844, + 27822, 27799, 27776, 27753, + 27730, 27708, 27685, 27662, + 27639, 27617, 27594, 27571, + 27548, 27525, 27502, 27480, + 27457, 27434, 27411, 27388, + 27366, 27343, 27320, 27297, + 27274, 27251, 27228, 27206, + 27183, 27160, 27137, 27114, + 27091, 27068, 27045, 27022, + 27000, 26977, 26954, 26931, + 26908, 26885, 26862, 26839, + 26816, 26793, 26770, 26747, + 26724, 26701, 26678, 26655, + 26633, 26610, 26587, 26564, + 26541, 26518, 26495, 26472, + 26449, 26426, 26403, 26380, + 26357, 26334, 26311, 26288, + 26265, 26241, 26218, 26195, + 26172, 26149, 26126, 26103, + 26080, 26057, 26034, 26011, + 25988, 25965, 25942, 25919, + 25896, 25872, 25849, 25826, + 25803, 25780, 25757, 25734, + 25711, 25688, 25664, 25641, + 25618, 25595, 25572, 25549, + 25526, 25502, 25479, 25456, + 25433, 25410, 25387, 25363, + 25340, 25317, 25294, 25271, + 25247, 25224, 25201, 25178, + 25155, 25131, 25108, 25085, + 25062, 25039, 25015, 24992, + 24969, 24946, 24922, 24899, + 24876, 24853, 24829, 24806, + 24783, 24759, 24736, 24713, + 24690, 24666, 24643, 24620, + 24596, 24573, 24550, 24527, + 24503, 24480, 24457, 24433, + 24410, 24387, 24363, 24340, + 24317, 24293, 24270, 24247, + 24223, 24200, 24176, 24153, + 24130, 24106, 24083, 24060, + 24036, 24013, 23989, 23966, + 23943, 23919, 23896, 23872, + 23849, 23826, 23802, 23779, + 23755, 23732, 23708, 23685, + 23662, 23638, 23615, 23591, + 23568, 23544, 23521, 23497, + 23474, 23450, 23427, 23403, + 23380, 23357, 23333, 23310, + 23286, 23263, 23239, 23216, + 23192, 23169, 23145, 23121, + 23098, 23074, 23051, 23027, + 23004, 22980, 22957, 22933, + 22910, 22886, 22863, 22839, + 22815, 22792, 22768, 22745, + 22721, 22698, 22674, 22650, + 22627, 22603, 22580, 22556, + 22532, 22509, 22485, 22462, + 22438, 22414, 22391, 22367, + 22343, 22320, 22296, 22272, + 22249, 22225, 22202, 22178, + 22154, 22131, 22107, 22083, + 22060, 22036, 22012, 21989, + 21965, 21941, 21917, 21894, + 21870, 21846, 21823, 21799, + 21775, 21752, 21728, 21704, + 21680, 21657, 21633, 21609, + 21586, 21562, 21538, 21514, + 21491, 21467, 21443, 21419, + 21396, 21372, 21348, 21324, + 21300, 21277, 21253, 21229, + 21205, 21182, 21158, 21134, + 21110, 21086, 21063, 21039, + 21015, 20991, 20967, 20943, + 20920, 20896, 20872, 20848, + 20824, 20801, 20777, 20753, + 20729, 20705, 20681, 20657, + 20634, 20610, 20586, 20562, + 20538, 20514, 20490, 20466, + 20443, 20419, 20395, 20371, + 20347, 20323, 20299, 20275, + 20251, 20228, 20204, 20180, + 20156, 20132, 20108, 20084, + 20060, 20036, 20012, 19988, + 19964, 19940, 19916, 19892, + 19869, 19845, 19821, 19797, + 19773, 19749, 19725, 19701, + 19677, 19653, 19629, 19605, + 19581, 19557, 19533, 19509, + 19485, 19461, 19437, 19413, + 19389, 19365, 19341, 19317, + 19293, 19269, 19245, 19221, + 19197, 19173, 19149, 19125, + 19100, 19076, 19052, 19028, + 19004, 18980, 18956, 18932, + 18908, 18884, 18860, 18836, + 18812, 18788, 18764, 18739, + 18715, 18691, 18667, 18643, + 18619, 18595, 18571, 18547, + 18523, 18498, 18474, 18450, + 18426, 18402, 18378, 18354, + 18330, 18305, 18281, 18257, + 18233, 18209, 18185, 18161, + 18136, 18112, 18088, 18064, + 18040, 18016, 17991, 17967, + 17943, 17919, 17895, 17870, + 17846, 17822, 17798, 17774, + 17750, 17725, 17701, 17677, + 17653, 17629, 17604, 17580, + 17556, 17532, 17507, 17483, + 17459, 17435, 17410, 17386, + 17362, 17338, 17314, 17289, + 17265, 17241, 17217, 17192, + 17168, 17144, 17119, 17095, + 17071, 17047, 17022, 16998, + 16974, 16950, 16925, 16901, + 16877, 16852, 16828, 16804, + 16780, 16755, 16731, 16707, + 16682, 16658, 16634, 16609, + 16585, 16561, 16536, 16512, + 16488, 16463, 16439, 16415, + 16390, 16366, 16342, 16317, + 16293, 16269, 16244, 16220, + 16196, 16171, 16147, 16123, + 16098, 16074, 16049, 16025, + 16001, 15976, 15952, 15928, + 15903, 15879, 15854, 15830, + 15806, 15781, 15757, 15732, + 15708, 15684, 15659, 15635, + 15610, 15586, 15561, 15537, + 15513, 15488, 15464, 15439, + 15415, 15390, 15366, 15342, + 15317, 15293, 15268, 15244, + 15219, 15195, 15170, 15146, + 15122, 15097, 15073, 15048, + 15024, 14999, 14975, 14950, + 14926, 14901, 14877, 14852, + 14828, 14803, 14779, 14754, + 14730, 14705, 14681, 14656, + 14632, 14607, 14583, 14558, + 14534, 14509, 14485, 14460, + 14436, 14411, 14387, 14362, + 14338, 14313, 14289, 14264, + 14240, 14215, 14191, 14166, + 14141, 14117, 14092, 14068, + 14043, 14019, 13994, 13970, + 13945, 13920, 13896, 13871, + 13847, 13822, 13798, 13773, + 13748, 13724, 13699, 13675, + 13650, 13625, 13601, 13576, + 13552, 13527, 13503, 13478, + 13453, 13429, 13404, 13380, + 13355, 13330, 13306, 13281, + 13256, 13232, 13207, 13183, + 13158, 13133, 13109, 13084, + 13059, 13035, 13010, 12986, + 12961, 12936, 12912, 12887, + 12862, 12838, 12813, 12788, + 12764, 12739, 12714, 12690, + 12665, 12640, 12616, 12591, + 12566, 12542, 12517, 12492, + 12468, 12443, 12418, 12394, + 12369, 12344, 12320, 12295, + 12270, 12245, 12221, 12196, + 12171, 12147, 12122, 12097, + 12073, 12048, 12023, 11998, + 11974, 11949, 11924, 11900, + 11875, 11850, 11825, 11801, + 11776, 11751, 11726, 11702, + 11677, 11652, 11628, 11603, + 11578, 11553, 11529, 11504, + 11479, 11454, 11430, 11405, + 11380, 11355, 11331, 11306, + 11281, 11256, 11231, 11207, + 11182, 11157, 11132, 11108, + 11083, 11058, 11033, 11008, + 10984, 10959, 10934, 10909, + 10885, 10860, 10835, 10810, + 10785, 10761, 10736, 10711, + 10686, 10661, 10637, 10612, + 10587, 10562, 10537, 10513, + 10488, 10463, 10438, 10413, + 10388, 10364, 10339, 10314, + 10289, 10264, 10240, 10215, + 10190, 10165, 10140, 10115, + 10091, 10066, 10041, 10016, + 9991, 9966, 9941, 9917, + 9892, 9867, 9842, 9817, + 9792, 9767, 9743, 9718, + 9693, 9668, 9643, 9618, + 9593, 9569, 9544, 9519, + 9494, 9469, 9444, 9419, + 9394, 9370, 9345, 9320, + 9295, 9270, 9245, 9220, + 9195, 9170, 9146, 9121, + 9096, 9071, 9046, 9021, + 8996, 8971, 8946, 8922, + 8897, 8872, 8847, 8822, + 8797, 8772, 8747, 8722, + 8697, 8672, 8647, 8623, + 8598, 8573, 8548, 8523, + 8498, 8473, 8448, 8423, + 8398, 8373, 8348, 8323, + 8299, 8274, 8249, 8224, + 8199, 8174, 8149, 8124, + 8099, 8074, 8049, 8024, + 7999, 7974, 7949, 7924, + 7899, 7874, 7849, 7825, + 7800, 7775, 7750, 7725, + 7700, 7675, 7650, 7625, + 7600, 7575, 7550, 7525, + 7500, 7475, 7450, 7425, + 7400, 7375, 7350, 7325, + 7300, 7275, 7250, 7225, + 7200, 7175, 7150, 7125, + 7100, 7075, 7050, 7025, + 7000, 6975, 6950, 6925, + 6900, 6875, 6850, 6825, + 6800, 6775, 6750, 6725, + 6700, 6675, 6650, 6625, + 6600, 6575, 6550, 6525, + 6500, 6475, 6450, 6425, + 6400, 6375, 6350, 6325, + 6300, 6275, 6250, 6225, + 6200, 6175, 6150, 6125, + 6100, 6075, 6050, 6025, + 6000, 5975, 5950, 5925, + 5900, 5875, 5849, 5824, + 5799, 5774, 5749, 5724, + 5699, 5674, 5649, 5624, + 5599, 5574, 5549, 5524, + 5499, 5474, 5449, 5424, + 5399, 5374, 5349, 5323, + 5298, 5273, 5248, 5223, + 5198, 5173, 5148, 5123, + 5098, 5073, 5048, 5023, + 4998, 4973, 4948, 4923, + 4897, 4872, 4847, 4822, + 4797, 4772, 4747, 4722, + 4697, 4672, 4647, 4622, + 4597, 4571, 4546, 4521, + 4496, 4471, 4446, 4421, + 4396, 4371, 4346, 4321, + 4296, 4271, 4245, 4220, + 4195, 4170, 4145, 4120, + 4095, 4070, 4045, 4020, + 3995, 3969, 3944, 3919, + 3894, 3869, 3844, 3819, + 3794, 3769, 3744, 3718, + 3693, 3668, 3643, 3618, + 3593, 3568, 3543, 3518, + 3493, 3467, 3442, 3417, + 3392, 3367, 3342, 3317, + 3292, 3267, 3242, 3216, + 3191, 3166, 3141, 3116, + 3091, 3066, 3041, 3016, + 2990, 2965, 2940, 2915, + 2890, 2865, 2840, 2815, + 2790, 2764, 2739, 2714, + 2689, 2664, 2639, 2614, + 2589, 2563, 2538, 2513, + 2488, 2463, 2438, 2413, + 2388, 2363, 2337, 2312, + 2287, 2262, 2237, 2212, + 2187, 2162, 2136, 2111, + 2086, 2061, 2036, 2011, + 1986, 1961, 1935, 1910, + 1885, 1860, 1835, 1810, + 1785, 1759, 1734, 1709, + 1684, 1659, 1634, 1609, + 1584, 1558, 1533, 1508, + 1483, 1458, 1433, 1408, + 1383, 1357, 1332, 1307, + 1282, 1257, 1232, 1207, + 1181, 1156, 1131, 1106, + 1081, 1056, 1031, 1006, + 980, 955, 930, 905, + 880, 855, 830, 804, + 779, 754, 729, 704, + 679, 654, 628, 603, + 578, 553, 528, 503, + 478, 452, 427, 402, + 377, 352, 327, 302, + 277, 251, 226, 201, + 176, 151, 126, 101, + 75, 50, 25, 0, }; diff --git a/stereo_mix/resources.h b/stereo_mix/resources.h index c6d14f6..1d51b1b 100644 --- a/stereo_mix/resources.h +++ b/stereo_mix/resources.h @@ -48,11 +48,11 @@ extern const uint16_t lut_linear_to_exp[]; extern const uint16_t lut_left_sin_pan[]; extern const uint16_t lut_right_cos_pan[]; #define LUT_LINEAR_TO_EXP 0 -#define LUT_LINEAR_TO_EXP_SIZE 1024 +#define LUT_LINEAR_TO_EXP_SIZE 4096 #define LUT_LEFT_SIN_PAN 1 -#define LUT_LEFT_SIN_PAN_SIZE 1024 +#define LUT_LEFT_SIN_PAN_SIZE 4096 #define LUT_RIGHT_COS_PAN 2 -#define LUT_RIGHT_COS_PAN_SIZE 1024 +#define LUT_RIGHT_COS_PAN_SIZE 4096 } // namespace stereo_mix diff --git a/stereo_mix/resources/lookup_tables.py b/stereo_mix/resources/lookup_tables.py index bb599ab..6fcd8fe 100644 --- a/stereo_mix/resources/lookup_tables.py +++ b/stereo_mix/resources/lookup_tables.py @@ -1,8 +1,8 @@ import numpy as np lookup_tables_u16 = [] -ADC_RESOLUTION = 1024 -OUTPUT_RESOLUTION = 4096 +ADC_RESOLUTION = 4096 +OUTPUT_RESOLUTION = 2 ** 16 - 1 # linear to exponential conversion diff --git a/stereo_mix/stereo_mix.cc b/stereo_mix/stereo_mix.cc index b6f4857..10bd785 100644 --- a/stereo_mix/stereo_mix.cc +++ b/stereo_mix/stereo_mix.cc @@ -1,4 +1,11 @@ +#include "drivers/adc.h" #include "drivers/dac.h" +#include "resources.h" + +using namespace stereo_mix; + +Dac dacs[8]; +Adc adc; // Default interrupt handlers. extern "C" { @@ -31,13 +38,22 @@ void PendSV_Handler() {} void SysTick_Handler() { } -} -Dac dacs[8]; +void DMA1_Channel1_IRQHandler(void) +{ + if (DMA_GetITStatus(DMA1_IT_TC1) == SET) /* Test if transfer completed on DMA channel 1 */ + { + adc.OnDMAFinish(); + DMA_ClearITPendingBit(DMA1_IT_TC1); + } +} +} int main(void) { SystemInit(); + + dacs[0].Init(GPIOB, GPIO_Pin_8); dacs[1].Init(GPIOB, GPIO_Pin_9); dacs[2].Init(GPIOB, GPIO_Pin_10); @@ -47,10 +63,29 @@ int main(void) dacs[6].Init(GPIOA, GPIO_Pin_10); dacs[7].Init(GPIOA, GPIO_Pin_11); + adc.Init(); while (true) { - for (uint16_t i = 0; i < 65535; i++) { - dacs[0].Write16(0, i); - dacs[0].Write16(1, 65535 - i); + for(int i = 0; i < 4; i++) { + uint32_t value_l; + uint32_t value_r; + + uint16_t pan_pot = adc.value(ADC_CHANNEL_POT_PAN_1 + i) >> (16 - 12); // adc is only 12 bit anyways + uint16_t vol_pot = adc.value(ADC_CHANNEL_POT_VOL_1 + i) >> (16 - 12); + int16_t pan_cv = (adc.value(ADC_CHANNEL_CV_PAN_1 - i) - 32768) >> (16 - 12); + uint16_t vol_cv = adc.value(ADC_CHANNEL_CV_VOL_1 - i) >> (16 - 12); + int32_t pan = pan_pot + pan_cv; + int32_t vol = vol_pot + vol_cv; + + CONSTRAIN(pan, 0, (1 << 12) - 1); + CONSTRAIN(vol, 0, (1 << 12) - 1); + + value_l = (lut_left_sin_pan[pan] * lut_linear_to_exp[vol]) >> 16; + value_r = (lut_right_cos_pan[pan] * lut_linear_to_exp[vol]) >> 16; + + dacs[i].Write16(0, value_r); + dacs[i + 4].Write16(0, value_r); + dacs[i].Write16(1, value_l); + dacs[i + 4].Write16(1, value_l); } } }