comnum-fec 0.3.1

Channel coding of comnum: CRC, scrambling, interleaving, convolutional codes and puncturing, turbo, LDPC, polar, Reed–Solomon and BCH codes, distribution matching
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
//! The tables of 3GPP TS 38.212 V18.5.0 for the LDPC and polar codes of NR.
//!
//! Extracted from the text of the standard (ETSI TS 138 212 V18.5.0, 2025-01) by the
//! positions of its words: the base graphs of Tables 5.3.2-2 and 5.3.2-3 (every
//! $(j, V_{i,j})$ entry, and the rows as transcribed in Sionna's `5G_bg1.csv` and
//! `5G_bg2.csv`, Apache-2.0, whose 513 entries are identical to those of the standard),
//! the polar sequence of Table 5.3.1.2-1 (identical to Sionna's `polar_5G.csv`), the
//! interleaving pattern of Table 5.3.1.1-1 and the sub-block interleaver of Table
//! 5.4.1.1-1. The tests check the structure of every table (sizes, permutations, number
//! of nonzero entries).

/// Table 5.3.2-1: the sets of lifting sizes $Z$, by set index $i_{\mathrm{LS}}$.
pub const LIFTING_SETS: [&[usize]; 8] = [
    &[2, 4, 8, 16, 32, 64, 128, 256],
    &[3, 6, 12, 24, 48, 96, 192, 384],
    &[5, 10, 20, 40, 80, 160, 320],
    &[7, 14, 28, 56, 112, 224],
    &[9, 18, 36, 72, 144, 288],
    &[11, 22, 44, 88, 176, 352],
    &[13, 26, 52, 104, 208],
    &[15, 30, 60, 120, 240],
];

/// Table 5.3.2-2: the nonzero entries $(i, j, [V_{i,j}]_{i_{\mathrm{LS}} = 0..7})$ of LDPC base graph 1
/// (46 rows, 68 columns, 316 entries), row by row.
#[rustfmt::skip]
pub const BG1: [(u8, u8, [u16; 8]); 316] = [
    (0, 0, [250, 307, 73, 223, 211, 294, 0, 135]),
    (0, 1, [69, 19, 15, 16, 198, 118, 0, 227]),
    (0, 2, [226, 50, 103, 94, 188, 167, 0, 126]),
    (0, 3, [159, 369, 49, 91, 186, 330, 0, 134]),
    (0, 5, [100, 181, 240, 74, 219, 207, 0, 84]),
    (0, 6, [10, 216, 39, 10, 4, 165, 0, 83]),
    (0, 9, [59, 317, 15, 0, 29, 243, 0, 53]),
    (0, 10, [229, 288, 162, 205, 144, 250, 0, 225]),
    (0, 11, [110, 109, 215, 216, 116, 1, 0, 205]),
    (0, 12, [191, 17, 164, 21, 216, 339, 0, 128]),
    (0, 13, [9, 357, 133, 215, 115, 201, 0, 75]),
    (0, 15, [195, 215, 298, 14, 233, 53, 0, 135]),
    (0, 16, [23, 106, 110, 70, 144, 347, 0, 217]),
    (0, 18, [190, 242, 113, 141, 95, 304, 0, 220]),
    (0, 19, [35, 180, 16, 198, 216, 167, 0, 90]),
    (0, 20, [239, 330, 189, 104, 73, 47, 0, 105]),
    (0, 21, [31, 346, 32, 81, 261, 188, 0, 137]),
    (0, 22, [1, 1, 1, 1, 1, 1, 0, 1]),
    (0, 23, [0, 0, 0, 0, 0, 0, 0, 0]),
    (1, 0, [2, 76, 303, 141, 179, 77, 22, 96]),
    (1, 2, [239, 76, 294, 45, 162, 225, 11, 236]),
    (1, 3, [117, 73, 27, 151, 223, 96, 124, 136]),
    (1, 4, [124, 288, 261, 46, 256, 338, 0, 221]),
    (1, 5, [71, 144, 161, 119, 160, 268, 10, 128]),
    (1, 7, [222, 331, 133, 157, 76, 112, 0, 92]),
    (1, 8, [104, 331, 4, 133, 202, 302, 0, 172]),
    (1, 9, [173, 178, 80, 87, 117, 50, 2, 56]),
    (1, 11, [220, 295, 129, 206, 109, 167, 16, 11]),
    (1, 12, [102, 342, 300, 93, 15, 253, 60, 189]),
    (1, 14, [109, 217, 76, 79, 72, 334, 0, 95]),
    (1, 15, [132, 99, 266, 9, 152, 242, 6, 85]),
    (1, 16, [142, 354, 72, 118, 158, 257, 30, 153]),
    (1, 17, [155, 114, 83, 194, 147, 133, 0, 87]),
    (1, 19, [255, 331, 260, 31, 156, 9, 168, 163]),
    (1, 21, [28, 112, 301, 187, 119, 302, 31, 216]),
    (1, 22, [0, 0, 0, 0, 0, 0, 105, 0]),
    (1, 23, [0, 0, 0, 0, 0, 0, 0, 0]),
    (1, 24, [0, 0, 0, 0, 0, 0, 0, 0]),
    (2, 0, [106, 205, 68, 207, 258, 226, 132, 189]),
    (2, 1, [111, 250, 7, 203, 167, 35, 37, 4]),
    (2, 2, [185, 328, 80, 31, 220, 213, 21, 225]),
    (2, 4, [63, 332, 280, 176, 133, 302, 180, 151]),
    (2, 5, [117, 256, 38, 180, 243, 111, 4, 236]),
    (2, 6, [93, 161, 227, 186, 202, 265, 149, 117]),
    (2, 7, [229, 267, 202, 95, 218, 128, 48, 179]),
    (2, 8, [177, 160, 200, 153, 63, 237, 38, 92]),
    (2, 9, [95, 63, 71, 177, 0, 294, 122, 24]),
    (2, 10, [39, 129, 106, 70, 3, 127, 195, 68]),
    (2, 13, [142, 200, 295, 77, 74, 110, 155, 6]),
    (2, 14, [225, 88, 283, 214, 229, 286, 28, 101]),
    (2, 15, [225, 53, 301, 77, 0, 125, 85, 33]),
    (2, 17, [245, 131, 184, 198, 216, 131, 47, 96]),
    (2, 18, [205, 240, 246, 117, 269, 163, 179, 125]),
    (2, 19, [251, 205, 230, 223, 200, 210, 42, 67]),
    (2, 20, [117, 13, 276, 90, 234, 7, 66, 230]),
    (2, 24, [0, 0, 0, 0, 0, 0, 0, 0]),
    (2, 25, [0, 0, 0, 0, 0, 0, 0, 0]),
    (3, 0, [121, 276, 220, 201, 187, 97, 4, 128]),
    (3, 1, [89, 87, 208, 18, 145, 94, 6, 23]),
    (3, 3, [84, 0, 30, 165, 166, 49, 33, 162]),
    (3, 4, [20, 275, 197, 5, 108, 279, 113, 220]),
    (3, 6, [150, 199, 61, 45, 82, 139, 49, 43]),
    (3, 7, [131, 153, 175, 142, 132, 166, 21, 186]),
    (3, 8, [243, 56, 79, 16, 197, 91, 6, 96]),
    (3, 10, [136, 132, 281, 34, 41, 106, 151, 1]),
    (3, 11, [86, 305, 303, 155, 162, 246, 83, 216]),
    (3, 12, [246, 231, 253, 213, 57, 345, 154, 22]),
    (3, 13, [219, 341, 164, 147, 36, 269, 87, 24]),
    (3, 14, [211, 212, 53, 69, 115, 185, 5, 167]),
    (3, 16, [240, 304, 44, 96, 242, 249, 92, 200]),
    (3, 17, [76, 300, 28, 74, 165, 215, 173, 32]),
    (3, 18, [244, 271, 77, 99, 0, 143, 120, 235]),
    (3, 20, [144, 39, 319, 30, 113, 121, 2, 172]),
    (3, 21, [12, 357, 68, 158, 108, 121, 142, 219]),
    (3, 22, [1, 1, 1, 1, 1, 1, 0, 1]),
    (3, 25, [0, 0, 0, 0, 0, 0, 0, 0]),
    (4, 0, [157, 332, 233, 170, 246, 42, 24, 64]),
    (4, 1, [102, 181, 205, 10, 235, 256, 204, 211]),
    (4, 26, [0, 0, 0, 0, 0, 0, 0, 0]),
    (5, 0, [205, 195, 83, 164, 261, 219, 185, 2]),
    (5, 1, [236, 14, 292, 59, 181, 130, 100, 171]),
    (5, 3, [194, 115, 50, 86, 72, 251, 24, 47]),
    (5, 12, [231, 166, 318, 80, 283, 322, 65, 143]),
    (5, 16, [28, 241, 201, 182, 254, 295, 207, 210]),
    (5, 21, [123, 51, 267, 130, 79, 258, 161, 180]),
    (5, 22, [115, 157, 279, 153, 144, 283, 72, 180]),
    (5, 27, [0, 0, 0, 0, 0, 0, 0, 0]),
    (6, 0, [183, 278, 289, 158, 80, 294, 6, 199]),
    (6, 6, [22, 257, 21, 119, 144, 73, 27, 22]),
    (6, 10, [28, 1, 293, 113, 169, 330, 163, 23]),
    (6, 11, [67, 351, 13, 21, 90, 99, 50, 100]),
    (6, 13, [244, 92, 232, 63, 59, 172, 48, 92]),
    (6, 17, [11, 253, 302, 51, 177, 150, 24, 207]),
    (6, 18, [157, 18, 138, 136, 151, 284, 38, 52]),
    (6, 20, [211, 225, 235, 116, 108, 305, 91, 13]),
    (6, 28, [0, 0, 0, 0, 0, 0, 0, 0]),
    (7, 0, [220, 9, 12, 17, 169, 3, 145, 77]),
    (7, 1, [44, 62, 88, 76, 189, 103, 88, 146]),
    (7, 4, [159, 316, 207, 104, 154, 224, 112, 209]),
    (7, 7, [31, 333, 50, 100, 184, 297, 153, 32]),
    (7, 8, [167, 290, 25, 150, 104, 215, 159, 166]),
    (7, 14, [104, 114, 76, 158, 164, 39, 76, 18]),
    (7, 29, [0, 0, 0, 0, 0, 0, 0, 0]),
    (8, 0, [112, 307, 295, 33, 54, 348, 172, 181]),
    (8, 1, [4, 179, 133, 95, 0, 75, 2, 105]),
    (8, 3, [7, 165, 130, 4, 252, 22, 131, 141]),
    (8, 12, [211, 18, 231, 217, 41, 312, 141, 223]),
    (8, 16, [102, 39, 296, 204, 98, 224, 96, 177]),
    (8, 19, [164, 224, 110, 39, 46, 17, 99, 145]),
    (8, 21, [109, 368, 269, 58, 15, 59, 101, 199]),
    (8, 22, [241, 67, 245, 44, 230, 314, 35, 153]),
    (8, 24, [90, 170, 154, 201, 54, 244, 116, 38]),
    (8, 30, [0, 0, 0, 0, 0, 0, 0, 0]),
    (9, 0, [103, 366, 189, 9, 162, 156, 6, 169]),
    (9, 1, [182, 232, 244, 37, 159, 88, 10, 12]),
    (9, 10, [109, 321, 36, 213, 93, 293, 145, 206]),
    (9, 11, [21, 133, 286, 105, 134, 111, 53, 221]),
    (9, 13, [142, 57, 151, 89, 45, 92, 201, 17]),
    (9, 17, [14, 303, 267, 185, 132, 152, 4, 212]),
    (9, 18, [61, 63, 135, 109, 76, 23, 164, 92]),
    (9, 20, [216, 82, 209, 218, 209, 337, 173, 205]),
    (9, 31, [0, 0, 0, 0, 0, 0, 0, 0]),
    (10, 1, [98, 101, 14, 82, 178, 175, 126, 116]),
    (10, 2, [149, 339, 80, 165, 1, 253, 77, 151]),
    (10, 4, [167, 274, 211, 174, 28, 27, 156, 70]),
    (10, 7, [160, 111, 75, 19, 267, 231, 16, 230]),
    (10, 8, [49, 383, 161, 194, 234, 49, 12, 115]),
    (10, 14, [58, 354, 311, 103, 201, 267, 70, 84]),
    (10, 32, [0, 0, 0, 0, 0, 0, 0, 0]),
    (11, 0, [77, 48, 16, 52, 55, 25, 184, 45]),
    (11, 1, [41, 102, 147, 11, 23, 322, 194, 115]),
    (11, 12, [83, 8, 290, 2, 274, 200, 123, 134]),
    (11, 16, [182, 47, 289, 35, 181, 351, 16, 1]),
    (11, 21, [78, 188, 177, 32, 273, 166, 104, 152]),
    (11, 22, [252, 334, 43, 84, 39, 338, 109, 165]),
    (11, 23, [22, 115, 280, 201, 26, 192, 124, 107]),
    (11, 33, [0, 0, 0, 0, 0, 0, 0, 0]),
    (12, 0, [160, 77, 229, 142, 225, 123, 6, 186]),
    (12, 1, [42, 186, 235, 175, 162, 217, 20, 215]),
    (12, 10, [21, 174, 169, 136, 244, 142, 203, 124]),
    (12, 11, [32, 232, 48, 3, 151, 110, 153, 180]),
    (12, 13, [234, 50, 105, 28, 238, 176, 104, 98]),
    (12, 18, [7, 74, 52, 182, 243, 76, 207, 80]),
    (12, 34, [0, 0, 0, 0, 0, 0, 0, 0]),
    (13, 0, [177, 313, 39, 81, 231, 311, 52, 220]),
    (13, 3, [248, 177, 302, 56, 0, 251, 147, 185]),
    (13, 7, [151, 266, 303, 72, 216, 265, 1, 154]),
    (13, 20, [185, 115, 160, 217, 47, 94, 16, 178]),
    (13, 23, [62, 370, 37, 78, 36, 81, 46, 150]),
    (13, 35, [0, 0, 0, 0, 0, 0, 0, 0]),
    (14, 0, [206, 142, 78, 14, 0, 22, 1, 124]),
    (14, 12, [55, 248, 299, 175, 186, 322, 202, 144]),
    (14, 15, [206, 137, 54, 211, 253, 277, 118, 182]),
    (14, 16, [127, 89, 61, 191, 16, 156, 130, 95]),
    (14, 17, [16, 347, 179, 51, 0, 66, 1, 72]),
    (14, 21, [229, 12, 258, 43, 79, 78, 2, 76]),
    (14, 36, [0, 0, 0, 0, 0, 0, 0, 0]),
    (15, 0, [40, 241, 229, 90, 170, 176, 173, 39]),
    (15, 1, [96, 2, 290, 120, 0, 348, 6, 138]),
    (15, 10, [65, 210, 60, 131, 183, 15, 81, 220]),
    (15, 13, [63, 318, 130, 209, 108, 81, 182, 173]),
    (15, 18, [75, 55, 184, 209, 68, 176, 53, 142]),
    (15, 25, [179, 269, 51, 81, 64, 113, 46, 49]),
    (15, 37, [0, 0, 0, 0, 0, 0, 0, 0]),
    (16, 1, [64, 13, 69, 154, 270, 190, 88, 78]),
    (16, 3, [49, 338, 140, 164, 13, 293, 198, 152]),
    (16, 11, [49, 57, 45, 43, 99, 332, 160, 84]),
    (16, 20, [51, 289, 115, 189, 54, 331, 122, 5]),
    (16, 22, [154, 57, 300, 101, 0, 114, 182, 205]),
    (16, 38, [0, 0, 0, 0, 0, 0, 0, 0]),
    (17, 0, [7, 260, 257, 56, 153, 110, 91, 183]),
    (17, 14, [164, 303, 147, 110, 137, 228, 184, 112]),
    (17, 16, [59, 81, 128, 200, 0, 247, 30, 106]),
    (17, 17, [1, 358, 51, 63, 0, 116, 3, 219]),
    (17, 21, [144, 375, 228, 4, 162, 190, 155, 129]),
    (17, 39, [0, 0, 0, 0, 0, 0, 0, 0]),
    (18, 1, [42, 130, 260, 199, 161, 47, 1, 183]),
    (18, 12, [233, 163, 294, 110, 151, 286, 41, 215]),
    (18, 13, [8, 280, 291, 200, 0, 246, 167, 180]),
    (18, 18, [155, 132, 141, 143, 241, 181, 68, 143]),
    (18, 19, [147, 4, 295, 186, 144, 73, 148, 14]),
    (18, 40, [0, 0, 0, 0, 0, 0, 0, 0]),
    (19, 0, [60, 145, 64, 8, 0, 87, 12, 179]),
    (19, 1, [73, 213, 181, 6, 0, 110, 6, 108]),
    (19, 7, [72, 344, 101, 103, 118, 147, 166, 159]),
    (19, 8, [127, 242, 270, 198, 144, 258, 184, 138]),
    (19, 10, [224, 197, 41, 8, 0, 204, 191, 196]),
    (19, 41, [0, 0, 0, 0, 0, 0, 0, 0]),
    (20, 0, [151, 187, 301, 105, 265, 89, 6, 77]),
    (20, 3, [186, 206, 162, 210, 81, 65, 12, 187]),
    (20, 9, [217, 264, 40, 121, 90, 155, 15, 203]),
    (20, 11, [47, 341, 130, 214, 144, 244, 5, 167]),
    (20, 22, [160, 59, 10, 183, 228, 30, 30, 130]),
    (20, 42, [0, 0, 0, 0, 0, 0, 0, 0]),
    (21, 1, [249, 205, 79, 192, 64, 162, 6, 197]),
    (21, 5, [121, 102, 175, 131, 46, 264, 86, 122]),
    (21, 16, [109, 328, 132, 220, 266, 346, 96, 215]),
    (21, 20, [131, 213, 283, 50, 9, 143, 42, 65]),
    (21, 21, [171, 97, 103, 106, 18, 109, 199, 216]),
    (21, 43, [0, 0, 0, 0, 0, 0, 0, 0]),
    (22, 0, [64, 30, 177, 53, 72, 280, 44, 25]),
    (22, 12, [142, 11, 20, 0, 189, 157, 58, 47]),
    (22, 13, [188, 233, 55, 3, 72, 236, 130, 126]),
    (22, 17, [158, 22, 316, 148, 257, 113, 131, 178]),
    (22, 44, [0, 0, 0, 0, 0, 0, 0, 0]),
    (23, 1, [156, 24, 249, 88, 180, 18, 45, 185]),
    (23, 2, [147, 89, 50, 203, 0, 6, 18, 127]),
    (23, 10, [170, 61, 133, 168, 0, 181, 132, 117]),
    (23, 18, [152, 27, 105, 122, 165, 304, 100, 199]),
    (23, 45, [0, 0, 0, 0, 0, 0, 0, 0]),
    (24, 0, [112, 298, 289, 49, 236, 38, 9, 32]),
    (24, 3, [86, 158, 280, 157, 199, 170, 125, 178]),
    (24, 4, [236, 235, 110, 64, 0, 249, 191, 2]),
    (24, 11, [116, 339, 187, 193, 266, 288, 28, 156]),
    (24, 22, [222, 234, 281, 124, 0, 194, 6, 58]),
    (24, 46, [0, 0, 0, 0, 0, 0, 0, 0]),
    (25, 1, [23, 72, 172, 1, 205, 279, 4, 27]),
    (25, 6, [136, 17, 295, 166, 0, 255, 74, 141]),
    (25, 7, [116, 383, 96, 65, 0, 111, 16, 11]),
    (25, 14, [182, 312, 46, 81, 183, 54, 28, 181]),
    (25, 47, [0, 0, 0, 0, 0, 0, 0, 0]),
    (26, 0, [195, 71, 270, 107, 0, 325, 21, 163]),
    (26, 2, [243, 81, 110, 176, 0, 326, 142, 131]),
    (26, 4, [215, 76, 318, 212, 0, 226, 192, 169]),
    (26, 15, [61, 136, 67, 127, 277, 99, 197, 98]),
    (26, 48, [0, 0, 0, 0, 0, 0, 0, 0]),
    (27, 1, [25, 194, 210, 208, 45, 91, 98, 165]),
    (27, 6, [104, 194, 29, 141, 36, 326, 140, 232]),
    (27, 8, [194, 101, 304, 174, 72, 268, 22, 9]),
    (27, 49, [0, 0, 0, 0, 0, 0, 0, 0]),
    (28, 0, [128, 222, 11, 146, 275, 102, 4, 32]),
    (28, 4, [165, 19, 293, 153, 0, 1, 1, 43]),
    (28, 19, [181, 244, 50, 217, 155, 40, 40, 200]),
    (28, 21, [63, 274, 234, 114, 62, 167, 93, 205]),
    (28, 50, [0, 0, 0, 0, 0, 0, 0, 0]),
    (29, 1, [86, 252, 27, 150, 0, 273, 92, 232]),
    (29, 14, [236, 5, 308, 11, 180, 104, 136, 32]),
    (29, 18, [84, 147, 117, 53, 0, 243, 106, 118]),
    (29, 25, [6, 78, 29, 68, 42, 107, 6, 103]),
    (29, 51, [0, 0, 0, 0, 0, 0, 0, 0]),
    (30, 0, [216, 159, 91, 34, 0, 171, 2, 170]),
    (30, 10, [73, 229, 23, 130, 90, 16, 88, 199]),
    (30, 13, [120, 260, 105, 210, 252, 95, 112, 26]),
    (30, 24, [9, 90, 135, 123, 173, 212, 20, 105]),
    (30, 52, [0, 0, 0, 0, 0, 0, 0, 0]),
    (31, 1, [95, 100, 222, 175, 144, 101, 4, 73]),
    (31, 7, [177, 215, 308, 49, 144, 297, 49, 149]),
    (31, 22, [172, 258, 66, 177, 166, 279, 125, 175]),
    (31, 25, [61, 256, 162, 128, 19, 222, 194, 108]),
    (31, 53, [0, 0, 0, 0, 0, 0, 0, 0]),
    (32, 0, [221, 102, 210, 192, 0, 351, 6, 103]),
    (32, 12, [112, 201, 22, 209, 211, 265, 126, 110]),
    (32, 14, [199, 175, 271, 58, 36, 338, 63, 151]),
    (32, 24, [121, 287, 217, 30, 162, 83, 20, 211]),
    (32, 54, [0, 0, 0, 0, 0, 0, 0, 0]),
    (33, 1, [2, 323, 170, 114, 0, 56, 10, 199]),
    (33, 2, [187, 8, 20, 49, 0, 304, 30, 132]),
    (33, 11, [41, 361, 140, 161, 76, 141, 6, 172]),
    (33, 21, [211, 105, 33, 137, 18, 101, 92, 65]),
    (33, 55, [0, 0, 0, 0, 0, 0, 0, 0]),
    (34, 0, [127, 230, 187, 82, 197, 60, 4, 161]),
    (34, 7, [167, 148, 296, 186, 0, 320, 153, 237]),
    (34, 15, [164, 202, 5, 68, 108, 112, 197, 142]),
    (34, 17, [159, 312, 44, 150, 0, 54, 155, 180]),
    (34, 56, [0, 0, 0, 0, 0, 0, 0, 0]),
    (35, 1, [161, 320, 207, 192, 199, 100, 4, 231]),
    (35, 6, [197, 335, 158, 173, 278, 210, 45, 174]),
    (35, 12, [207, 2, 55, 26, 0, 195, 168, 145]),
    (35, 22, [103, 266, 285, 187, 205, 268, 185, 100]),
    (35, 57, [0, 0, 0, 0, 0, 0, 0, 0]),
    (36, 0, [37, 210, 259, 222, 216, 135, 6, 11]),
    (36, 14, [105, 313, 179, 157, 16, 15, 200, 207]),
    (36, 15, [51, 297, 178, 0, 0, 35, 177, 42]),
    (36, 18, [120, 21, 160, 6, 0, 188, 43, 100]),
    (36, 58, [0, 0, 0, 0, 0, 0, 0, 0]),
    (37, 1, [198, 269, 298, 81, 72, 319, 82, 59]),
    (37, 13, [220, 82, 15, 195, 144, 236, 2, 204]),
    (37, 23, [122, 115, 115, 138, 0, 85, 135, 161]),
    (37, 59, [0, 0, 0, 0, 0, 0, 0, 0]),
    (38, 0, [167, 185, 151, 123, 190, 164, 91, 121]),
    (38, 9, [151, 177, 179, 90, 0, 196, 64, 90]),
    (38, 10, [157, 289, 64, 73, 0, 209, 198, 26]),
    (38, 12, [163, 214, 181, 10, 0, 246, 100, 140]),
    (38, 60, [0, 0, 0, 0, 0, 0, 0, 0]),
    (39, 1, [173, 258, 102, 12, 153, 236, 4, 115]),
    (39, 3, [139, 93, 77, 77, 0, 264, 28, 188]),
    (39, 7, [149, 346, 192, 49, 165, 37, 109, 168]),
    (39, 19, [0, 297, 208, 114, 117, 272, 188, 52]),
    (39, 61, [0, 0, 0, 0, 0, 0, 0, 0]),
    (40, 0, [157, 175, 32, 67, 216, 304, 10, 4]),
    (40, 8, [137, 37, 80, 45, 144, 237, 84, 103]),
    (40, 17, [149, 312, 197, 96, 2, 135, 12, 30]),
    (40, 62, [0, 0, 0, 0, 0, 0, 0, 0]),
    (41, 1, [167, 52, 154, 23, 0, 123, 2, 53]),
    (41, 3, [173, 314, 47, 215, 0, 77, 75, 189]),
    (41, 9, [139, 139, 124, 60, 0, 25, 142, 215]),
    (41, 18, [151, 288, 207, 167, 183, 272, 128, 24]),
    (41, 63, [0, 0, 0, 0, 0, 0, 0, 0]),
    (42, 0, [149, 113, 226, 114, 27, 288, 163, 222]),
    (42, 4, [157, 14, 65, 91, 0, 83, 10, 170]),
    (42, 24, [137, 218, 126, 78, 35, 17, 162, 71]),
    (42, 64, [0, 0, 0, 0, 0, 0, 0, 0]),
    (43, 1, [151, 113, 228, 206, 52, 210, 1, 22]),
    (43, 16, [163, 132, 69, 22, 243, 3, 163, 127]),
    (43, 18, [173, 114, 176, 134, 0, 53, 99, 49]),
    (43, 25, [139, 168, 102, 161, 270, 167, 98, 125]),
    (43, 65, [0, 0, 0, 0, 0, 0, 0, 0]),
    (44, 0, [139, 80, 234, 84, 18, 79, 4, 191]),
    (44, 7, [157, 78, 227, 4, 0, 244, 6, 211]),
    (44, 9, [163, 163, 259, 9, 0, 293, 142, 187]),
    (44, 22, [173, 274, 260, 12, 57, 272, 3, 148]),
    (44, 66, [0, 0, 0, 0, 0, 0, 0, 0]),
    (45, 1, [149, 135, 101, 184, 168, 82, 181, 177]),
    (45, 6, [151, 149, 228, 121, 0, 67, 45, 114]),
    (45, 10, [167, 15, 126, 29, 144, 235, 153, 93]),
    (45, 67, [0, 0, 0, 0, 0, 0, 0, 0]),
];

/// Table 5.3.2-3: the nonzero entries $(i, j, [V_{i,j}]_{i_{\mathrm{LS}} = 0..7})$ of LDPC base graph 2
/// (42 rows, 52 columns, 197 entries), row by row.
#[rustfmt::skip]
pub const BG2: [(u8, u8, [u16; 8]); 197] = [
    (0, 0, [9, 174, 0, 72, 3, 156, 143, 145]),
    (0, 1, [117, 97, 0, 110, 26, 143, 19, 131]),
    (0, 2, [204, 166, 0, 23, 53, 14, 176, 71]),
    (0, 3, [26, 66, 0, 181, 35, 3, 165, 21]),
    (0, 6, [189, 71, 0, 95, 115, 40, 196, 23]),
    (0, 9, [205, 172, 0, 8, 127, 123, 13, 112]),
    (0, 10, [0, 0, 0, 1, 0, 0, 0, 1]),
    (0, 11, [0, 0, 0, 0, 0, 0, 0, 0]),
    (1, 0, [167, 27, 137, 53, 19, 17, 18, 142]),
    (1, 3, [166, 36, 124, 156, 94, 65, 27, 174]),
    (1, 4, [253, 48, 0, 115, 104, 63, 3, 183]),
    (1, 5, [125, 92, 0, 156, 66, 1, 102, 27]),
    (1, 6, [226, 31, 88, 115, 84, 55, 185, 96]),
    (1, 7, [156, 187, 0, 200, 98, 37, 17, 23]),
    (1, 8, [224, 185, 0, 29, 69, 171, 14, 9]),
    (1, 9, [252, 3, 55, 31, 50, 133, 180, 167]),
    (1, 11, [0, 0, 0, 0, 0, 0, 0, 0]),
    (1, 12, [0, 0, 0, 0, 0, 0, 0, 0]),
    (2, 0, [81, 25, 20, 152, 95, 98, 126, 74]),
    (2, 1, [114, 114, 94, 131, 106, 168, 163, 31]),
    (2, 3, [44, 117, 99, 46, 92, 107, 47, 3]),
    (2, 4, [52, 110, 9, 191, 110, 82, 183, 53]),
    (2, 8, [240, 114, 108, 91, 111, 142, 132, 155]),
    (2, 10, [1, 1, 1, 0, 1, 1, 1, 0]),
    (2, 12, [0, 0, 0, 0, 0, 0, 0, 0]),
    (2, 13, [0, 0, 0, 0, 0, 0, 0, 0]),
    (3, 1, [8, 136, 38, 185, 120, 53, 36, 239]),
    (3, 2, [58, 175, 15, 6, 121, 174, 48, 171]),
    (3, 4, [158, 113, 102, 36, 22, 174, 18, 95]),
    (3, 5, [104, 72, 146, 124, 4, 127, 111, 110]),
    (3, 6, [209, 123, 12, 124, 73, 17, 203, 159]),
    (3, 7, [54, 118, 57, 110, 49, 89, 3, 199]),
    (3, 8, [18, 28, 53, 156, 128, 17, 191, 43]),
    (3, 9, [128, 186, 46, 133, 79, 105, 160, 75]),
    (3, 10, [0, 0, 0, 1, 0, 0, 0, 1]),
    (3, 13, [0, 0, 0, 0, 0, 0, 0, 0]),
    (4, 0, [179, 72, 0, 200, 42, 86, 43, 29]),
    (4, 1, [214, 74, 136, 16, 24, 67, 27, 140]),
    (4, 11, [71, 29, 157, 101, 51, 83, 117, 180]),
    (4, 14, [0, 0, 0, 0, 0, 0, 0, 0]),
    (5, 0, [231, 10, 0, 185, 40, 79, 136, 121]),
    (5, 1, [41, 44, 131, 138, 140, 84, 49, 41]),
    (5, 5, [194, 121, 142, 170, 84, 35, 36, 169]),
    (5, 7, [159, 80, 141, 219, 137, 103, 132, 88]),
    (5, 11, [103, 48, 64, 193, 71, 60, 62, 207]),
    (5, 15, [0, 0, 0, 0, 0, 0, 0, 0]),
    (6, 0, [155, 129, 0, 123, 109, 47, 7, 137]),
    (6, 5, [228, 92, 124, 55, 87, 154, 34, 72]),
    (6, 7, [45, 100, 99, 31, 107, 10, 198, 172]),
    (6, 9, [28, 49, 45, 222, 133, 155, 168, 124]),
    (6, 11, [158, 184, 148, 209, 139, 29, 12, 56]),
    (6, 16, [0, 0, 0, 0, 0, 0, 0, 0]),
    (7, 1, [129, 80, 0, 103, 97, 48, 163, 86]),
    (7, 5, [147, 186, 45, 13, 135, 125, 78, 186]),
    (7, 7, [140, 16, 148, 105, 35, 24, 143, 87]),
    (7, 11, [3, 102, 96, 150, 108, 47, 107, 172]),
    (7, 13, [116, 143, 78, 181, 65, 55, 58, 154]),
    (7, 17, [0, 0, 0, 0, 0, 0, 0, 0]),
    (8, 0, [142, 118, 0, 147, 70, 53, 101, 176]),
    (8, 1, [94, 70, 65, 43, 69, 31, 177, 169]),
    (8, 12, [230, 152, 87, 152, 88, 161, 22, 225]),
    (8, 18, [0, 0, 0, 0, 0, 0, 0, 0]),
    (9, 1, [203, 28, 0, 2, 97, 104, 186, 167]),
    (9, 8, [205, 132, 97, 30, 40, 142, 27, 238]),
    (9, 10, [61, 185, 51, 184, 24, 99, 205, 48]),
    (9, 11, [247, 178, 85, 83, 49, 64, 81, 68]),
    (9, 19, [0, 0, 0, 0, 0, 0, 0, 0]),
    (10, 0, [11, 59, 0, 174, 46, 111, 125, 38]),
    (10, 1, [185, 104, 17, 150, 41, 25, 60, 217]),
    (10, 6, [0, 22, 156, 8, 101, 174, 177, 208]),
    (10, 7, [117, 52, 20, 56, 96, 23, 51, 232]),
    (10, 20, [0, 0, 0, 0, 0, 0, 0, 0]),
    (11, 0, [11, 32, 0, 99, 28, 91, 39, 178]),
    (11, 7, [236, 92, 7, 138, 30, 175, 29, 214]),
    (11, 9, [210, 174, 4, 110, 116, 24, 35, 168]),
    (11, 13, [56, 154, 2, 99, 64, 141, 8, 51]),
    (11, 21, [0, 0, 0, 0, 0, 0, 0, 0]),
    (12, 1, [63, 39, 0, 46, 33, 122, 18, 124]),
    (12, 3, [111, 93, 113, 217, 122, 11, 155, 122]),
    (12, 11, [14, 11, 48, 109, 131, 4, 49, 72]),
    (12, 22, [0, 0, 0, 0, 0, 0, 0, 0]),
    (13, 0, [83, 49, 0, 37, 76, 29, 32, 48]),
    (13, 1, [2, 125, 112, 113, 37, 91, 53, 57]),
    (13, 8, [38, 35, 102, 143, 62, 27, 95, 167]),
    (13, 13, [222, 166, 26, 140, 47, 127, 186, 219]),
    (13, 23, [0, 0, 0, 0, 0, 0, 0, 0]),
    (14, 1, [115, 19, 0, 36, 143, 11, 91, 82]),
    (14, 6, [145, 118, 138, 95, 51, 145, 20, 232]),
    (14, 11, [3, 21, 57, 40, 130, 8, 52, 204]),
    (14, 13, [232, 163, 27, 116, 97, 166, 109, 162]),
    (14, 24, [0, 0, 0, 0, 0, 0, 0, 0]),
    (15, 0, [51, 68, 0, 116, 139, 137, 174, 38]),
    (15, 10, [175, 63, 73, 200, 96, 103, 108, 217]),
    (15, 11, [213, 81, 99, 110, 128, 40, 102, 157]),
    (15, 25, [0, 0, 0, 0, 0, 0, 0, 0]),
    (16, 1, [203, 87, 0, 75, 48, 78, 125, 170]),
    (16, 9, [142, 177, 79, 158, 9, 158, 31, 23]),
    (16, 11, [8, 135, 111, 134, 28, 17, 54, 175]),
    (16, 12, [242, 64, 143, 97, 8, 165, 176, 202]),
    (16, 26, [0, 0, 0, 0, 0, 0, 0, 0]),
    (17, 1, [254, 158, 0, 48, 120, 134, 57, 196]),
    (17, 5, [124, 23, 24, 132, 43, 23, 201, 173]),
    (17, 11, [114, 9, 109, 206, 65, 62, 142, 195]),
    (17, 12, [64, 6, 18, 2, 42, 163, 35, 218]),
    (17, 27, [0, 0, 0, 0, 0, 0, 0, 0]),
    (18, 0, [220, 186, 0, 68, 17, 173, 129, 128]),
    (18, 6, [194, 6, 18, 16, 106, 31, 203, 211]),
    (18, 7, [50, 46, 86, 156, 142, 22, 140, 210]),
    (18, 28, [0, 0, 0, 0, 0, 0, 0, 0]),
    (19, 0, [87, 58, 0, 35, 79, 13, 110, 39]),
    (19, 1, [20, 42, 158, 138, 28, 135, 124, 84]),
    (19, 10, [185, 156, 154, 86, 41, 145, 52, 88]),
    (19, 29, [0, 0, 0, 0, 0, 0, 0, 0]),
    (20, 1, [26, 76, 0, 6, 2, 128, 196, 117]),
    (20, 4, [105, 61, 148, 20, 103, 52, 35, 227]),
    (20, 11, [29, 153, 104, 141, 78, 173, 114, 6]),
    (20, 30, [0, 0, 0, 0, 0, 0, 0, 0]),
    (21, 0, [76, 157, 0, 80, 91, 156, 10, 238]),
    (21, 8, [42, 175, 17, 43, 75, 166, 122, 13]),
    (21, 13, [210, 67, 33, 81, 81, 40, 23, 11]),
    (21, 31, [0, 0, 0, 0, 0, 0, 0, 0]),
    (22, 1, [222, 20, 0, 49, 54, 18, 202, 195]),
    (22, 2, [63, 52, 4, 1, 132, 163, 126, 44]),
    (22, 32, [0, 0, 0, 0, 0, 0, 0, 0]),
    (23, 0, [23, 106, 0, 156, 68, 110, 52, 5]),
    (23, 3, [235, 86, 75, 54, 115, 132, 170, 94]),
    (23, 5, [238, 95, 158, 134, 56, 150, 13, 111]),
    (23, 33, [0, 0, 0, 0, 0, 0, 0, 0]),
    (24, 1, [46, 182, 0, 153, 30, 113, 113, 81]),
    (24, 2, [139, 153, 69, 88, 42, 108, 161, 19]),
    (24, 9, [8, 64, 87, 63, 101, 61, 88, 130]),
    (24, 34, [0, 0, 0, 0, 0, 0, 0, 0]),
    (25, 0, [228, 45, 0, 211, 128, 72, 197, 66]),
    (25, 5, [156, 21, 65, 94, 63, 136, 194, 95]),
    (25, 35, [0, 0, 0, 0, 0, 0, 0, 0]),
    (26, 2, [29, 67, 0, 90, 142, 36, 164, 146]),
    (26, 7, [143, 137, 100, 6, 28, 38, 172, 66]),
    (26, 12, [160, 55, 13, 221, 100, 53, 49, 190]),
    (26, 13, [122, 85, 7, 6, 133, 145, 161, 86]),
    (26, 36, [0, 0, 0, 0, 0, 0, 0, 0]),
    (27, 0, [8, 103, 0, 27, 13, 42, 168, 64]),
    (27, 6, [151, 50, 32, 118, 10, 104, 193, 181]),
    (27, 37, [0, 0, 0, 0, 0, 0, 0, 0]),
    (28, 1, [98, 70, 0, 216, 106, 64, 14, 7]),
    (28, 2, [101, 111, 126, 212, 77, 24, 186, 144]),
    (28, 5, [135, 168, 110, 193, 43, 149, 46, 16]),
    (28, 38, [0, 0, 0, 0, 0, 0, 0, 0]),
    (29, 0, [18, 110, 0, 108, 133, 139, 50, 25]),
    (29, 4, [28, 17, 154, 61, 25, 161, 27, 57]),
    (29, 39, [0, 0, 0, 0, 0, 0, 0, 0]),
    (30, 2, [71, 120, 0, 106, 87, 84, 70, 37]),
    (30, 5, [240, 154, 35, 44, 56, 173, 17, 139]),
    (30, 7, [9, 52, 51, 185, 104, 93, 50, 221]),
    (30, 9, [84, 56, 134, 176, 70, 29, 6, 17]),
    (30, 40, [0, 0, 0, 0, 0, 0, 0, 0]),
    (31, 1, [106, 3, 0, 147, 80, 117, 115, 201]),
    (31, 13, [1, 170, 20, 182, 139, 148, 189, 46]),
    (31, 41, [0, 0, 0, 0, 0, 0, 0, 0]),
    (32, 0, [242, 84, 0, 108, 32, 116, 110, 179]),
    (32, 5, [44, 8, 20, 21, 89, 73, 0, 14]),
    (32, 12, [166, 17, 122, 110, 71, 142, 163, 116]),
    (32, 42, [0, 0, 0, 0, 0, 0, 0, 0]),
    (33, 2, [132, 165, 0, 71, 135, 105, 163, 46]),
    (33, 7, [164, 179, 88, 12, 6, 137, 173, 2]),
    (33, 10, [235, 124, 13, 109, 2, 29, 179, 106]),
    (33, 43, [0, 0, 0, 0, 0, 0, 0, 0]),
    (34, 0, [147, 173, 0, 29, 37, 11, 197, 184]),
    (34, 12, [85, 177, 19, 201, 25, 41, 191, 135]),
    (34, 13, [36, 12, 78, 69, 114, 162, 193, 141]),
    (34, 44, [0, 0, 0, 0, 0, 0, 0, 0]),
    (35, 1, [57, 77, 0, 91, 60, 126, 157, 85]),
    (35, 5, [40, 184, 157, 165, 137, 152, 167, 225]),
    (35, 11, [63, 18, 6, 55, 93, 172, 181, 175]),
    (35, 45, [0, 0, 0, 0, 0, 0, 0, 0]),
    (36, 0, [140, 25, 0, 1, 121, 73, 197, 178]),
    (36, 2, [38, 151, 63, 175, 129, 154, 167, 112]),
    (36, 7, [154, 170, 82, 83, 26, 129, 179, 106]),
    (36, 46, [0, 0, 0, 0, 0, 0, 0, 0]),
    (37, 10, [219, 37, 0, 40, 97, 167, 181, 154]),
    (37, 13, [151, 31, 144, 12, 56, 38, 193, 114]),
    (37, 47, [0, 0, 0, 0, 0, 0, 0, 0]),
    (38, 1, [31, 84, 0, 37, 1, 112, 157, 42]),
    (38, 5, [66, 151, 93, 97, 70, 7, 173, 41]),
    (38, 11, [38, 190, 19, 46, 1, 19, 191, 105]),
    (38, 48, [0, 0, 0, 0, 0, 0, 0, 0]),
    (39, 0, [239, 93, 0, 106, 119, 109, 181, 167]),
    (39, 7, [172, 132, 24, 181, 32, 6, 157, 45]),
    (39, 12, [34, 57, 138, 154, 142, 105, 173, 189]),
    (39, 49, [0, 0, 0, 0, 0, 0, 0, 0]),
    (40, 2, [0, 103, 0, 98, 6, 160, 193, 78]),
    (40, 10, [75, 107, 36, 35, 73, 156, 163, 67]),
    (40, 13, [120, 163, 143, 36, 102, 82, 179, 180]),
    (40, 50, [0, 0, 0, 0, 0, 0, 0, 0]),
    (41, 1, [129, 147, 0, 120, 48, 132, 191, 53]),
    (41, 5, [229, 7, 2, 101, 47, 6, 197, 215]),
    (41, 11, [118, 60, 55, 81, 19, 8, 167, 230]),
    (41, 51, [0, 0, 0, 0, 0, 0, 0, 0]),
];

/// Table 5.3.1.2-1: the polar sequence $Q_{0}^{N_{\max}-1}$, $N_{\max} = 1024$, in increasing
/// order of reliability.
#[rustfmt::skip]
pub const POLAR_SEQUENCE: [u16; 1024] = [
    0, 1, 2, 4, 8, 16, 32, 3, 5, 64, 9, 6, 17, 10, 18, 128, 12, 33, 65, 20, 256, 34, 24, 36, 7,
    129, 66, 512, 11, 40, 68, 130, 19, 13, 48, 14, 72, 257, 21, 132, 35, 258, 26, 513, 80, 37, 25,
    22, 136, 260, 264, 38, 514, 96, 67, 41, 144, 28, 69, 42, 516, 49, 74, 272, 160, 520, 288, 528,
    192, 544, 70, 44, 131, 81, 50, 73, 15, 320, 133, 52, 23, 134, 384, 76, 137, 82, 56, 27, 97, 39,
    259, 84, 138, 145, 261, 29, 43, 98, 515, 88, 140, 30, 146, 71, 262, 265, 161, 576, 45, 100,
    640, 51, 148, 46, 75, 266, 273, 517, 104, 162, 53, 193, 152, 77, 164, 768, 268, 274, 518, 54,
    83, 57, 521, 112, 135, 78, 289, 194, 85, 276, 522, 58, 168, 139, 99, 86, 60, 280, 89, 290, 529,
    524, 196, 141, 101, 147, 176, 142, 530, 321, 31, 200, 90, 545, 292, 322, 532, 263, 149, 102,
    105, 304, 296, 163, 92, 47, 267, 385, 546, 324, 208, 386, 150, 153, 165, 106, 55, 328, 536,
    577, 548, 113, 154, 79, 269, 108, 578, 224, 166, 519, 552, 195, 270, 641, 523, 275, 580, 291,
    59, 169, 560, 114, 277, 156, 87, 197, 116, 170, 61, 531, 525, 642, 281, 278, 526, 177, 293,
    388, 91, 584, 769, 198, 172, 120, 201, 336, 62, 282, 143, 103, 178, 294, 93, 644, 202, 592,
    323, 392, 297, 770, 107, 180, 151, 209, 284, 648, 94, 204, 298, 400, 608, 352, 325, 533, 155,
    210, 305, 547, 300, 109, 184, 534, 537, 115, 167, 225, 326, 306, 772, 157, 656, 329, 110, 117,
    212, 171, 776, 330, 226, 549, 538, 387, 308, 216, 416, 271, 279, 158, 337, 550, 672, 118, 332,
    579, 540, 389, 173, 121, 553, 199, 784, 179, 228, 338, 312, 704, 390, 174, 554, 581, 393, 283,
    122, 448, 353, 561, 203, 63, 340, 394, 527, 582, 556, 181, 295, 285, 232, 124, 205, 182, 643,
    562, 286, 585, 299, 354, 211, 401, 185, 396, 344, 586, 645, 593, 535, 240, 206, 95, 327, 564,
    800, 402, 356, 307, 301, 417, 213, 568, 832, 588, 186, 646, 404, 227, 896, 594, 418, 302, 649,
    771, 360, 539, 111, 331, 214, 309, 188, 449, 217, 408, 609, 596, 551, 650, 229, 159, 420, 310,
    541, 773, 610, 657, 333, 119, 600, 339, 218, 368, 652, 230, 391, 313, 450, 542, 334, 233, 555,
    774, 175, 123, 658, 612, 341, 777, 220, 314, 424, 395, 673, 583, 355, 287, 183, 234, 125, 557,
    660, 616, 342, 316, 241, 778, 563, 345, 452, 397, 403, 207, 674, 558, 785, 432, 357, 187, 236,
    664, 624, 587, 780, 705, 126, 242, 565, 398, 346, 456, 358, 405, 303, 569, 244, 595, 189, 566,
    676, 361, 706, 589, 215, 786, 647, 348, 419, 406, 464, 680, 801, 362, 590, 409, 570, 788, 597,
    572, 219, 311, 708, 598, 601, 651, 421, 792, 802, 611, 602, 410, 231, 688, 653, 248, 369, 190,
    364, 654, 659, 335, 480, 315, 221, 370, 613, 422, 425, 451, 614, 543, 235, 412, 343, 372, 775,
    317, 222, 426, 453, 237, 559, 833, 804, 712, 834, 661, 808, 779, 617, 604, 433, 720, 816, 836,
    347, 897, 243, 662, 454, 318, 675, 618, 898, 781, 376, 428, 665, 736, 567, 840, 625, 238, 359,
    457, 399, 787, 591, 678, 434, 677, 349, 245, 458, 666, 620, 363, 127, 191, 782, 407, 436, 626,
    571, 465, 681, 246, 707, 350, 599, 668, 790, 460, 249, 682, 573, 411, 803, 789, 709, 365, 440,
    628, 689, 374, 423, 466, 793, 250, 371, 481, 574, 413, 603, 366, 468, 655, 900, 805, 615, 684,
    710, 429, 794, 252, 373, 605, 848, 690, 713, 632, 482, 806, 427, 904, 414, 223, 663, 692, 835,
    619, 472, 455, 796, 809, 714, 721, 837, 716, 864, 810, 606, 912, 722, 696, 377, 435, 817, 319,
    621, 812, 484, 430, 838, 667, 488, 239, 378, 459, 622, 627, 437, 380, 818, 461, 496, 669, 679,
    724, 841, 629, 351, 467, 438, 737, 251, 462, 442, 441, 469, 247, 683, 842, 738, 899, 670, 783,
    849, 820, 728, 928, 791, 367, 901, 630, 685, 844, 633, 711, 253, 691, 824, 902, 686, 740, 850,
    375, 444, 470, 483, 415, 485, 905, 795, 473, 634, 744, 852, 960, 865, 693, 797, 906, 715, 807,
    474, 636, 694, 254, 717, 575, 913, 798, 811, 379, 697, 431, 607, 489, 866, 723, 486, 908, 718,
    813, 476, 856, 839, 725, 698, 914, 752, 868, 819, 814, 439, 929, 490, 623, 671, 739, 916, 463,
    843, 381, 497, 930, 821, 726, 961, 872, 492, 631, 729, 700, 443, 741, 845, 920, 382, 822, 851,
    730, 498, 880, 742, 445, 471, 635, 932, 687, 903, 825, 500, 846, 745, 826, 732, 446, 962, 936,
    475, 853, 867, 637, 907, 487, 695, 746, 828, 753, 854, 857, 504, 799, 255, 964, 909, 719, 477,
    915, 638, 748, 944, 869, 491, 699, 754, 858, 478, 968, 383, 910, 815, 976, 870, 917, 727, 493,
    873, 701, 931, 756, 860, 499, 731, 823, 922, 874, 918, 502, 933, 743, 760, 881, 494, 702, 921,
    501, 876, 847, 992, 447, 733, 827, 934, 882, 937, 963, 747, 505, 855, 924, 734, 829, 965, 938,
    884, 506, 749, 945, 966, 755, 859, 940, 830, 911, 871, 639, 888, 479, 946, 750, 969, 508, 861,
    757, 970, 919, 875, 862, 758, 948, 977, 923, 972, 761, 877, 952, 495, 703, 935, 978, 883, 762,
    503, 925, 878, 735, 993, 885, 939, 994, 980, 926, 764, 941, 967, 886, 831, 947, 507, 889, 984,
    751, 942, 996, 971, 890, 509, 949, 973, 1000, 892, 950, 863, 759, 1008, 510, 979, 953, 763,
    974, 954, 879, 981, 982, 927, 995, 765, 956, 887, 985, 997, 986, 943, 891, 998, 766, 511, 988,
    1001, 951, 1002, 893, 975, 894, 1009, 955, 1004, 1010, 957, 983, 958, 987, 1012, 999, 1016,
    767, 989, 1003, 990, 1005, 959, 1011, 1013, 895, 1006, 1014, 1017, 1018, 991, 1020, 1007, 1015,
    1019, 1021, 1022, 1023,
];

/// Table 5.3.1.1-1: the interleaving pattern $\Pi_{\mathrm{IL}}^{\max}(m)$, $K_{\mathrm{IL}}^{\max} = 164$.
#[rustfmt::skip]
pub const POLAR_INTERLEAVER: [u8; 164] = [
    0, 2, 4, 7, 9, 14, 19, 20, 24, 25, 26, 28, 31, 34, 42, 45, 49, 50, 51, 53, 54, 56, 58, 59, 61,
    62, 65, 66, 67, 69, 70, 71, 72, 76, 77, 81, 82, 83, 87, 88, 89, 91, 93, 95, 98, 101, 104, 106,
    108, 110, 111, 113, 115, 118, 119, 120, 122, 123, 126, 127, 129, 132, 134, 138, 139, 140, 1, 3,
    5, 8, 10, 15, 21, 27, 29, 32, 35, 43, 46, 52, 55, 57, 60, 63, 68, 73, 78, 84, 90, 92, 94, 96,
    99, 102, 105, 107, 109, 112, 114, 116, 121, 124, 128, 130, 133, 135, 141, 6, 11, 16, 22, 30,
    33, 36, 44, 47, 64, 74, 79, 85, 97, 100, 103, 117, 125, 131, 136, 142, 12, 17, 23, 37, 48, 75,
    80, 86, 137, 143, 13, 18, 38, 144, 39, 145, 40, 146, 41, 147, 148, 149, 150, 151, 152, 153,
    154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
];

/// Table 5.4.1.1-1: the sub-block interleaver pattern $P(i)$.
pub const SUBBLOCK_PATTERN: [u8; 32] = [
    0, 1, 2, 4, 3, 5, 6, 7, 8, 16, 9, 17, 10, 18, 11, 19, 12, 20, 13, 21, 14, 22, 15, 23, 24, 25, 26, 28, 27, 29, 30,
    31,
];