aboutsummaryrefslogtreecommitdiffstats
path: root/src/osmo-bts-trx/gsm0503_tables.c
blob: 1109ff95f6ebddcb4d6bcfe79a871bc3941631c9 (plain)
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
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
#include <stdint.h>

#include <osmocom/core/bits.h>

#include "gsm0503_tables.h"

const ubit_t gsm0503_pdtch_hl_hn_ubit[4][8] = {
	{ 1,1, 1,1, 1,1, 1,1 },
	{ 1,1, 0,0, 1,0, 0,0 },
	{ 0,0, 1,0, 0,0, 0,1 },
	{ 0,0, 0,1, 0,1, 1,0 },
};

const ubit_t gsm0503_pdtch_edge_hl_hn_ubit[3][8] = {
	{ 0,0, 0,1, 0,1, 1,0 },
	{ 0,0, 0,0, 0,0, 0,0 },
	{ 1,1, 1,0, 0,1, 1,1 },
};

const sbit_t gsm0503_pdtch_hl_hn_sbit[4][8] = {
	{ -127,-127, -127,-127, -127,-127, -127,-127 },
	{ -127,-127,  127, 127, -127, 127,  127, 127 },
	{  127, 127, -127, 127,  127, 127,  127,-127 },
	{  127, 127,  127,-127,  127,-127, -127, 127 },
};

const sbit_t gsm0503_pdtch_edge_hl_hn_sbit[3][8] = {
	{  127, 127,  127,-127,  127,-127, -127, 127 },
	{  127, 127,  127, 127,  127, 127,  127, 127 },
	{ -127,-127, -127, 127,  127,-127, -127,-127 },
};

const ubit_t gsm0503_usf2six[8][6] = {
	{ 0,0,0, 0,0,0 },
	{ 1,0,0, 1,0,1 },
	{ 0,1,0, 1,1,0 },
	{ 1,1,0, 0,1,1 },
	{ 0,0,1, 0,1,1 },
	{ 1,0,1, 1,1,0 },
	{ 0,1,1, 1,0,1 },
	{ 1,1,1, 0,0,0 },
};

const ubit_t gsm0503_usf2twelve_ubit[8][12] = {
	{ 0,0,0, 0,0,0, 0,0,0, 0,0,0 },
	{ 1,1,0, 1,0,0, 0,0,1, 0,1,1 },
	{ 0,0,1, 1,0,1, 1,1,0, 1,1,0 },
	{ 1,1,1, 0,0,1, 1,1,1, 1,0,1 },
	{ 0,0,0, 0,1,1, 0,1,1, 1,0,1 },
	{ 1,1,0, 1,1,1, 0,1,0, 1,1,0 },
	{ 0,0,1, 1,1,0, 1,0,1, 0,1,1 },
	{ 1,1,1, 0,1,0, 1,0,0, 0,0,0 },
};

const sbit_t gsm0503_usf2twelve_sbit[8][12] = {
	{  127, 127, 127,  127, 127, 127,  127, 127, 127,  127, 127, 127 },
	{ -127,-127, 127, -127, 127, 127,  127, 127,-127,  127,-127,-127 },
	{  127, 127,-127, -127, 127,-127, -127,-127, 127, -127,-127, 127 },
	{ -127,-127,-127,  127, 127,-127, -127,-127,-127, -127, 127,-127 },
	{  127, 127, 127,  127,-127,-127,  127,-127,-127, -127, 127,-127 },
	{ -127,-127, 127, -127,-127,-127,  127,-127, 127, -127,-127, 127 },
	{  127, 127,-127, -127,-127, 127, -127, 127,-127,  127,-127,-127 },
	{ -127,-127,-127,  127,-127, 127, -127, 127, 127,  127, 127, 127 },
};

const uint8_t gsm0503_puncture_cs2[588] = {
	0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1,
	0,0,0,1, 0,0,0,0, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1,
	0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,0, 0,0,0,1, 0,0,0,1,
	0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1,
	0,0,0,1, 0,0,0,0, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1,
	0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,0, 0,0,0,1, 0,0,0,1,
	0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1,
	0,0,0,1, 0,0,0,0, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1,
	0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,0, 0,0,0,1, 0,0,0,1,
	0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1,
	0,0,0,1, 0,0,0,0, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1,
	0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,0, 0,0,0,1, 0,0,0,1,
	0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1,
	0,0,0,1, 0,0,0,0, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1,
	0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,0, 0,0,0,1, 0,0,0,1,
	0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1,
	0,0,0,1, 0,0,0,0, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1,
	0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,0, 0,0,0,1, 0,0,0,1,
	0,0,0,1, 0,0,0,1, 0,0,0,1
};

const uint8_t gsm0503_puncture_cs3[676] = {
	0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,1,0,1,
	0,0,0,1,0,1, 0,0,0,1,0,1, 0,0,0,0
};

const uint8_t gsm0503_puncture_mcs1_dl_hdr[108] = {
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,1,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,1,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,1,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,1,1,
};

const uint8_t gsm0503_puncture_mcs1_ul_hdr[117] = {
	0,0,0,0,0,1,0,0,1,0,0,1,
	0,0,0,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,
};

const uint8_t gsm0503_puncture_mcs1_p1[588] = {
	0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,0,0,1,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,
	0,0,1,0,0,1,0,0,1,0,1,1,0,0,1,0,0,1,0,0,1,
};

const uint8_t gsm0503_puncture_mcs1_p2[588] = {
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,
	0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,0,
};

const uint8_t gsm0503_puncture_mcs2_p1[732] = {
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,0,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,0,1,0, 0,0,1,1,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,0,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0,
	0,0,1,1,1,0, 0,0,1,0,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0,
	0,0,1,0,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,0,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0, 0,0,1,1,1,0,
	0,0,1,1,1,0, 0,0,1,1,1,0,
};

const uint8_t gsm0503_puncture_mcs2_p2[732] = {
	1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 0,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1, 0,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 0,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1,
	0,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 0,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 0,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1, 1,1,0,0,0,1,
	1,1,0,0,0,1, 1,1,0,0,0,1,
};

const uint8_t gsm0503_puncture_mcs3_p1[948] = {
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,1,1,0,1,1,0,
	0,0,1,0,1,1,0,1,1,1,0,1,
};

const uint8_t gsm0503_puncture_mcs3_p2[948] = {
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,
};

const uint8_t gsm0503_puncture_mcs3_p3[948] = {
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,
};

const uint8_t gsm0503_puncture_mcs4_p1[1116] = {
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1,
};

const uint8_t gsm0503_puncture_mcs4_p2[1116] = {
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1,
};

const uint8_t gsm0503_puncture_mcs4_p3[1116] = {
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0,
};

const uint8_t gsm0503_puncture_mcs5_p1[1404] = {
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0, 0,0,1,0,0,1,0,0,1, 0,0,1,0,0,1,0,0,1,
};

const uint8_t gsm0503_puncture_mcs5_p2[1404] = {
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0, 0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0, 0,1,0,0,1,0,0,1,0, 0,1,0,0,1,0,0,1,0,
};

const uint8_t gsm0503_puncture_mcs6_p1[1836] = {
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,0, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,0, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,0, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,0, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,0, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,0, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,0, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,0, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,0, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,0, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,0, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,0, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,0, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,0, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,0, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,0, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,0, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,0, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,0, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,0, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,0, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,0, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,0, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,0, 0,0,1, 0,0,1, 0,0,1, 0,0,1, 0,0,1,
	0,0,1, 0,0,1,
};

const uint8_t gsm0503_puncture_mcs6_p2[1836] = {
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,0,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,0,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,0,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,0,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,0,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,0,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,0,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,0,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,0,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,0,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,0,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,0,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,0,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,0,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,0,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,0,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,0,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,0,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,0,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,0,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,0,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,0,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,0,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,0,0,
	0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0,
	0,1,0, 0,1,0,
};

const uint8_t gsm0503_puncture_mcs7_dl_hdr[135] = {
	0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,1,0,0,0,0,0,
	0,0,0,1,0,0,0,0,0,0,
	0,0,0,1,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,
	1,0,0,0,0,0,0,0,0,1,
	0,0,0,0,0,0,0,0,0,1,
	0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,1,0,0,0,
	0,0,0,0,0,1,0,0,0,0,
	0,0,0,0,0,1,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,
	0,0,1,0,0,0,0,0,0,0,
	0,1,0,0,0,
};

const uint8_t gsm0503_puncture_mcs7_ul_hdr[162] = {
	0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,1,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,
	0,1,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,
	0,0,
};

const uint8_t gsm0503_puncture_mcs7_p1[1404] = {
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,0,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
	0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,
};

const uint8_t gsm0503_puncture_mcs7_p2[1404] = {
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,1,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,1,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,1,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,1,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,1,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,1,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,1,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,1,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,1,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,1,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,1,0,
	1,1,0,0,1,0,0,1,1,1,0,1,1,1,0,1,1,0,
};

const uint8_t gsm0503_puncture_mcs7_p3[1404] = {
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
	1,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,1,
};

const uint8_t gsm0503_puncture_mcs8_p1[1692] = {
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
	0,1,0,1,1,0,0,1,1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,0,1,1,1,0,
};

const uint8_t gsm0503_puncture_mcs8_p2[1692] = {
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,0,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
	1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,1,
};

const uint8_t gsm0503_puncture_mcs8_p3[1692] = {
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,0,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
	1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,1,0,1,
};

const uint8_t gsm0503_puncture_mcs9_p1[1836] = {
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
	0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1, 0,1,1,
};

const uint8_t gsm0503_puncture_mcs9_p2[1836] = {
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
	1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1, 1,0,1,
};

const uint8_t gsm0503_puncture_mcs9_p3[1836] = {
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
	1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0,
};

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

/* this corresponds to the bit-lengths of the individual codec
 * parameters as indicated in Table 1.1 of TS 06.10 */
const uint8_t gsm0503_gsm_fr_map[76] = {
	6, 6, 5, 5, 4, 4, 3, 3, 7, 2, 2, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 7, 2, 2, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 2, 2, 6, 3, 3,
	3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 2, 2, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3,
	3, 3, 3, 3
};

/* this table describes the 65 most importaint bits from EFR coded
 * bits as indicated in TS 05.03 (3.1.1.1) */
const uint8_t gsm0503_gsm_efr_protected_bits[65] = {
	 39, 40, 41, 42, 43, 44, 48, 87, 45,  2,
	  3,  8, 10, 18, 19, 24, 46, 47,142,143,
	144,145,146,147, 92, 93,195,196, 98,137,
	148, 94,197,149,150, 95,198,  4,  5, 11,
	 12, 16,  9,  6,  7, 13, 17, 20, 96,199,
	  1, 14, 15, 21, 25, 26, 28,151,201,190,
	240, 88,138,191,241
};

/* Encoded in-band data for speech frames */
const ubit_t gsm0503_afs_ic_ubit[4][8] = {
	{ 0,0,0,0,0,0,0,0 },
	{ 0,1,0,1,1,1,0,1 },
	{ 1,0,1,1,1,0,1,0 },
	{ 1,1,1,0,0,1,1,1 },
};

const sbit_t gsm0503_afs_ic_sbit[4][8] = {
	{  127, 127, 127, 127, 127, 127, 127, 127 },
	{  127,-127, 127,-127,-127,-127, 127,-127 },
	{ -127, 127,-127,-127,-127, 127,-127, 127 },
	{ -127,-127,-127, 127, 127,-127,-127,-127 },
};

const ubit_t gsm0503_ahs_ic_ubit[4][4] = {
	{ 0,0,0,0 },
	{ 1,0,0,1 },
	{ 1,1,1,0 },
	{ 0,1,1,1 },
};

const sbit_t gsm0503_ahs_ic_sbit[4][4] = {
	{  127, 127, 127, 127 },
	{ -127, 127, 127,-127 },
	{ -127,-127,-127, 127 },
	{  127,-127,-127,-127 },
};

const uint8_t gsm0503_tch_hr_interleaving[228][2] = {
	{ 0  ,0 }, { 1  ,2 }, { 78 ,1 }, { 79 ,3 }, { 48 ,0 }, { 49 ,2 },
	{ 54 ,1 }, { 55 ,3 }, { 24 ,0 }, { 25 ,2 }, { 30 ,1 }, { 31 ,3 },
	{ 72 ,0 }, { 73 ,2 }, { 6  ,1 }, { 7  ,3 }, { 96 ,0 }, { 97 ,2 },
	{ 12 ,0 }, { 13 ,2 }, { 102,1 }, { 103,3 }, { 60 ,0 }, { 61 ,2 },
	{ 66 ,1 }, { 67 ,3 }, { 90 ,1 }, { 91 ,3 }, { 36 ,0 }, { 37 ,2 },
	{ 42 ,1 }, { 43 ,3 }, { 18 ,1 }, { 19 ,3 }, { 84 ,0 }, { 85 ,2 },
	{ 108,0 }, { 109,2 }, { 2  ,0 }, { 3  ,2 }, { 80 ,1 }, { 81 ,3 },
	{ 50 ,0 }, { 51 ,2 }, { 56 ,1 }, { 57 ,3 }, { 26 ,0 }, { 27 ,2 },
	{ 32 ,1 }, { 33 ,3 }, { 74 ,0 }, { 75 ,2 }, { 8  ,1 }, { 9  ,3 },
	{ 98 ,0 }, { 99 ,2 }, { 14 ,0 }, { 15 ,2 }, { 104,1 }, { 105,3 },
	{ 62 ,0 }, { 63 ,2 }, { 68 ,1 }, { 69 ,3 }, { 92 ,1 }, { 93 ,3 },
	{ 38 ,0 }, { 39 ,2 }, { 44 ,1 }, { 45 ,3 }, { 20 ,1 }, { 21 ,3 },
	{ 86 ,0 }, { 87 ,2 }, { 110,0 }, { 111,2 }, { 4  ,0 }, { 5  ,2 },
	{ 82 ,1 }, { 83 ,3 }, { 52 ,0 }, { 53 ,2 }, { 58 ,1 }, { 59 ,3 },
	{ 28 ,0 }, { 29 ,2 }, { 34 ,1 }, { 35 ,3 }, { 76 ,0 }, { 77 ,2 },
	{ 10 ,1 }, { 11 ,3 }, { 100,0 }, { 101,2 }, { 16 ,0 }, { 17 ,2 },
	{ 106,1 }, { 107,3 }, { 64 ,0 }, { 65 ,2 }, { 70 ,1 }, { 71 ,3 },
	{ 94 ,1 }, { 95 ,3 }, { 40 ,0 }, { 41 ,2 }, { 46 ,1 }, { 47 ,3 },
	{ 22 ,1 }, { 23 ,3 }, { 88 ,0 }, { 89 ,2 }, { 112,0 }, { 113,2 },
	{ 6  ,0 }, { 7  ,2 }, { 84 ,1 }, { 85 ,3 }, { 54 ,0 }, { 55 ,2 },
	{ 60 ,1 }, { 61 ,3 }, { 30 ,0 }, { 31 ,2 }, { 36 ,1 }, { 37 ,3 },
	{ 78 ,0 }, { 79 ,2 }, { 12 ,1 }, { 13 ,3 }, { 102,0 }, { 103,2 },
	{ 18 ,0 }, { 19 ,2 }, { 108,1 }, { 109,3 }, { 66 ,0 }, { 67 ,2 },
	{ 72 ,1 }, { 73 ,3 }, { 96 ,1 }, { 97 ,3 }, { 42 ,0 }, { 43 ,2 },
	{ 48 ,1 }, { 49 ,3 }, { 24 ,1 }, { 25 ,3 }, { 90 ,0 }, { 91 ,2 },
	{ 0  ,1 }, { 1  ,3 }, { 8  ,0 }, { 9  ,2 }, { 86 ,1 }, { 87 ,3 },
	{ 56 ,0 }, { 57 ,2 }, { 62 ,1 }, { 63 ,3 }, { 32 ,0 }, { 33 ,2 },
	{ 38 ,1 }, { 39 ,3 }, { 80 ,0 }, { 81 ,2 }, { 14 ,1 }, { 15 ,3 },
	{ 104,0 }, { 105,2 }, { 20 ,0 }, { 21 ,2 }, { 110,1 }, { 111,3 },
	{ 68 ,0 }, { 69 ,2 }, { 74 ,1 }, { 75 ,3 }, { 98 ,1 }, { 99 ,3 },
	{ 44 ,0 }, { 45 ,2 }, { 50 ,1 }, { 51 ,3 }, { 26 ,1 }, { 27 ,3 },
	{ 92 ,0 }, { 93 ,2 }, { 2  ,1 }, { 3  ,3 }, { 10 ,0 }, { 11 ,2 },
	{ 88 ,1 }, { 89 ,3 }, { 58 ,0 }, { 59 ,2 }, { 64 ,1 }, { 65 ,3 },
	{ 34 ,0 }, { 35 ,2 }, { 40 ,1 }, { 41 ,3 }, { 82 ,0 }, { 83 ,2 },
	{ 16 ,1 }, { 17 ,3 }, { 106,0 }, { 107,2 }, { 22 ,0 }, { 23 ,2 },
	{ 112,1 }, { 113,3 }, { 70 ,0 }, { 71 ,2 }, { 76 ,1 }, { 77 ,3 },
	{ 100,1 }, { 101,3 }, { 46 ,0 }, { 47 ,2 }, { 52 ,1 }, { 53 ,3 },
	{ 28 ,1 }, { 29 ,3 }, { 94 ,0 }, { 95 ,2 }, { 4  ,1 }, { 5  ,3 },
};

/*
 * 3GPP TS 05.03 5.1.9.1.2 "USF precoding"
 */
const ubit_t gsm0503_mcs5_usf_precode_table[8][36] = {
	{ 0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0, },
	{ 1,1,1,1,1,0,0,0,0, 1,1,1,1,0,0,0,0,0, 1,1,1,1,1,1,0,0,0, 1,1,1,1,1,0,0,0,1, },
	{ 1,1,1,0,0,1,1,1,0, 1,1,1,0,1,1,1,0,0, 1,1,0,0,0,0,1,1,0, 1,1,0,0,0,1,1,0,0, },
	{ 1,0,0,1,1,1,1,0,0, 1,1,0,0,0,0,0,1,1, 1,0,1,1,1,0,1,1,1, 0,0,1,0,0,1,1,1,1, },
	{ 0,0,0,1,1,0,0,1,1, 0,0,1,0,1,1,0,1,0, 1,0,0,0,0,1,1,0,1, 1,1,1,1,1,1,1,1,0, },
	{ 1,1,0,1,0,1,0,1,1, 0,0,0,1,1,0,1,0,1, 0,1,1,1,0,1,0,1,1, 1,0,0,1,0,1,0,1,1, },
	{ 0,0,1,0,0,1,1,0,1, 1,0,1,1,1,1,1,1,1, 0,1,1,0,1,0,0,0,1, 0,0,1,1,1,0,1,0,0, },
	{ 0,1,1,0,1,0,1,1,1, 0,1,0,1,0,1,1,1,1, 0,0,0,1,1,1,1,1,0, 0,1,0,0,1,0,0,1,1, },
};