1
0
Fork 0
mirror of https://github.com/ton-blockchain/ton synced 2025-02-13 03:32:22 +00:00
ton/tdfec/td/fec/algebra/Octet.cpp
2020-04-10 23:06:01 +04:00

9242 lines
107 KiB
C++

/*
This file is part of TON Blockchain Library.
TON Blockchain Library is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
TON Blockchain Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with TON Blockchain Library. If not, see <http://www.gnu.org/licenses/>.
Copyright 2017-2020 Telegram Systems LLP
*/
#include "td/fec/algebra/Octet.h"
namespace td {
const uint8 Octet::OctMulLo[256][16] = {
{
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
},
{
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
},
{
0,
2,
4,
6,
8,
10,
12,
14,
16,
18,
20,
22,
24,
26,
28,
30,
},
{
0,
3,
6,
5,
12,
15,
10,
9,
24,
27,
30,
29,
20,
23,
18,
17,
},
{
0,
4,
8,
12,
16,
20,
24,
28,
32,
36,
40,
44,
48,
52,
56,
60,
},
{
0,
5,
10,
15,
20,
17,
30,
27,
40,
45,
34,
39,
60,
57,
54,
51,
},
{
0,
6,
12,
10,
24,
30,
20,
18,
48,
54,
60,
58,
40,
46,
36,
34,
},
{
0,
7,
14,
9,
28,
27,
18,
21,
56,
63,
54,
49,
36,
35,
42,
45,
},
{
0,
8,
16,
24,
32,
40,
48,
56,
64,
72,
80,
88,
96,
104,
112,
120,
},
{
0,
9,
18,
27,
36,
45,
54,
63,
72,
65,
90,
83,
108,
101,
126,
119,
},
{
0,
10,
20,
30,
40,
34,
60,
54,
80,
90,
68,
78,
120,
114,
108,
102,
},
{
0,
11,
22,
29,
44,
39,
58,
49,
88,
83,
78,
69,
116,
127,
98,
105,
},
{
0,
12,
24,
20,
48,
60,
40,
36,
96,
108,
120,
116,
80,
92,
72,
68,
},
{
0,
13,
26,
23,
52,
57,
46,
35,
104,
101,
114,
127,
92,
81,
70,
75,
},
{
0,
14,
28,
18,
56,
54,
36,
42,
112,
126,
108,
98,
72,
70,
84,
90,
},
{
0,
15,
30,
17,
60,
51,
34,
45,
120,
119,
102,
105,
68,
75,
90,
85,
},
{
0,
16,
32,
48,
64,
80,
96,
112,
128,
144,
160,
176,
192,
208,
224,
240,
},
{
0,
17,
34,
51,
68,
85,
102,
119,
136,
153,
170,
187,
204,
221,
238,
255,
},
{
0,
18,
36,
54,
72,
90,
108,
126,
144,
130,
180,
166,
216,
202,
252,
238,
},
{
0,
19,
38,
53,
76,
95,
106,
121,
152,
139,
190,
173,
212,
199,
242,
225,
},
{
0,
20,
40,
60,
80,
68,
120,
108,
160,
180,
136,
156,
240,
228,
216,
204,
},
{
0,
21,
42,
63,
84,
65,
126,
107,
168,
189,
130,
151,
252,
233,
214,
195,
},
{
0,
22,
44,
58,
88,
78,
116,
98,
176,
166,
156,
138,
232,
254,
196,
210,
},
{
0,
23,
46,
57,
92,
75,
114,
101,
184,
175,
150,
129,
228,
243,
202,
221,
},
{
0,
24,
48,
40,
96,
120,
80,
72,
192,
216,
240,
232,
160,
184,
144,
136,
},
{
0,
25,
50,
43,
100,
125,
86,
79,
200,
209,
250,
227,
172,
181,
158,
135,
},
{
0,
26,
52,
46,
104,
114,
92,
70,
208,
202,
228,
254,
184,
162,
140,
150,
},
{
0,
27,
54,
45,
108,
119,
90,
65,
216,
195,
238,
245,
180,
175,
130,
153,
},
{
0,
28,
56,
36,
112,
108,
72,
84,
224,
252,
216,
196,
144,
140,
168,
180,
},
{
0,
29,
58,
39,
116,
105,
78,
83,
232,
245,
210,
207,
156,
129,
166,
187,
},
{
0,
30,
60,
34,
120,
102,
68,
90,
240,
238,
204,
210,
136,
150,
180,
170,
},
{
0,
31,
62,
33,
124,
99,
66,
93,
248,
231,
198,
217,
132,
155,
186,
165,
},
{
0,
32,
64,
96,
128,
160,
192,
224,
29,
61,
93,
125,
157,
189,
221,
253,
},
{
0,
33,
66,
99,
132,
165,
198,
231,
21,
52,
87,
118,
145,
176,
211,
242,
},
{
0,
34,
68,
102,
136,
170,
204,
238,
13,
47,
73,
107,
133,
167,
193,
227,
},
{
0,
35,
70,
101,
140,
175,
202,
233,
5,
38,
67,
96,
137,
170,
207,
236,
},
{
0,
36,
72,
108,
144,
180,
216,
252,
61,
25,
117,
81,
173,
137,
229,
193,
},
{
0,
37,
74,
111,
148,
177,
222,
251,
53,
16,
127,
90,
161,
132,
235,
206,
},
{
0,
38,
76,
106,
152,
190,
212,
242,
45,
11,
97,
71,
181,
147,
249,
223,
},
{
0,
39,
78,
105,
156,
187,
210,
245,
37,
2,
107,
76,
185,
158,
247,
208,
},
{
0,
40,
80,
120,
160,
136,
240,
216,
93,
117,
13,
37,
253,
213,
173,
133,
},
{
0,
41,
82,
123,
164,
141,
246,
223,
85,
124,
7,
46,
241,
216,
163,
138,
},
{
0,
42,
84,
126,
168,
130,
252,
214,
77,
103,
25,
51,
229,
207,
177,
155,
},
{
0,
43,
86,
125,
172,
135,
250,
209,
69,
110,
19,
56,
233,
194,
191,
148,
},
{
0,
44,
88,
116,
176,
156,
232,
196,
125,
81,
37,
9,
205,
225,
149,
185,
},
{
0,
45,
90,
119,
180,
153,
238,
195,
117,
88,
47,
2,
193,
236,
155,
182,
},
{
0,
46,
92,
114,
184,
150,
228,
202,
109,
67,
49,
31,
213,
251,
137,
167,
},
{
0,
47,
94,
113,
188,
147,
226,
205,
101,
74,
59,
20,
217,
246,
135,
168,
},
{
0,
48,
96,
80,
192,
240,
160,
144,
157,
173,
253,
205,
93,
109,
61,
13,
},
{
0,
49,
98,
83,
196,
245,
166,
151,
149,
164,
247,
198,
81,
96,
51,
2,
},
{
0,
50,
100,
86,
200,
250,
172,
158,
141,
191,
233,
219,
69,
119,
33,
19,
},
{
0,
51,
102,
85,
204,
255,
170,
153,
133,
182,
227,
208,
73,
122,
47,
28,
},
{
0,
52,
104,
92,
208,
228,
184,
140,
189,
137,
213,
225,
109,
89,
5,
49,
},
{
0,
53,
106,
95,
212,
225,
190,
139,
181,
128,
223,
234,
97,
84,
11,
62,
},
{
0,
54,
108,
90,
216,
238,
180,
130,
173,
155,
193,
247,
117,
67,
25,
47,
},
{
0,
55,
110,
89,
220,
235,
178,
133,
165,
146,
203,
252,
121,
78,
23,
32,
},
{
0,
56,
112,
72,
224,
216,
144,
168,
221,
229,
173,
149,
61,
5,
77,
117,
},
{
0,
57,
114,
75,
228,
221,
150,
175,
213,
236,
167,
158,
49,
8,
67,
122,
},
{
0,
58,
116,
78,
232,
210,
156,
166,
205,
247,
185,
131,
37,
31,
81,
107,
},
{
0,
59,
118,
77,
236,
215,
154,
161,
197,
254,
179,
136,
41,
18,
95,
100,
},
{
0,
60,
120,
68,
240,
204,
136,
180,
253,
193,
133,
185,
13,
49,
117,
73,
},
{
0,
61,
122,
71,
244,
201,
142,
179,
245,
200,
143,
178,
1,
60,
123,
70,
},
{
0,
62,
124,
66,
248,
198,
132,
186,
237,
211,
145,
175,
21,
43,
105,
87,
},
{
0,
63,
126,
65,
252,
195,
130,
189,
229,
218,
155,
164,
25,
38,
103,
88,
},
{
0,
64,
128,
192,
29,
93,
157,
221,
58,
122,
186,
250,
39,
103,
167,
231,
},
{
0,
65,
130,
195,
25,
88,
155,
218,
50,
115,
176,
241,
43,
106,
169,
232,
},
{
0,
66,
132,
198,
21,
87,
145,
211,
42,
104,
174,
236,
63,
125,
187,
249,
},
{
0,
67,
134,
197,
17,
82,
151,
212,
34,
97,
164,
231,
51,
112,
181,
246,
},
{
0,
68,
136,
204,
13,
73,
133,
193,
26,
94,
146,
214,
23,
83,
159,
219,
},
{
0,
69,
138,
207,
9,
76,
131,
198,
18,
87,
152,
221,
27,
94,
145,
212,
},
{
0,
70,
140,
202,
5,
67,
137,
207,
10,
76,
134,
192,
15,
73,
131,
197,
},
{
0,
71,
142,
201,
1,
70,
143,
200,
2,
69,
140,
203,
3,
68,
141,
202,
},
{
0,
72,
144,
216,
61,
117,
173,
229,
122,
50,
234,
162,
71,
15,
215,
159,
},
{
0,
73,
146,
219,
57,
112,
171,
226,
114,
59,
224,
169,
75,
2,
217,
144,
},
{
0,
74,
148,
222,
53,
127,
161,
235,
106,
32,
254,
180,
95,
21,
203,
129,
},
{
0,
75,
150,
221,
49,
122,
167,
236,
98,
41,
244,
191,
83,
24,
197,
142,
},
{
0,
76,
152,
212,
45,
97,
181,
249,
90,
22,
194,
142,
119,
59,
239,
163,
},
{
0,
77,
154,
215,
41,
100,
179,
254,
82,
31,
200,
133,
123,
54,
225,
172,
},
{
0,
78,
156,
210,
37,
107,
185,
247,
74,
4,
214,
152,
111,
33,
243,
189,
},
{
0,
79,
158,
209,
33,
110,
191,
240,
66,
13,
220,
147,
99,
44,
253,
178,
},
{
0,
80,
160,
240,
93,
13,
253,
173,
186,
234,
26,
74,
231,
183,
71,
23,
},
{
0,
81,
162,
243,
89,
8,
251,
170,
178,
227,
16,
65,
235,
186,
73,
24,
},
{
0,
82,
164,
246,
85,
7,
241,
163,
170,
248,
14,
92,
255,
173,
91,
9,
},
{
0,
83,
166,
245,
81,
2,
247,
164,
162,
241,
4,
87,
243,
160,
85,
6,
},
{
0,
84,
168,
252,
77,
25,
229,
177,
154,
206,
50,
102,
215,
131,
127,
43,
},
{
0,
85,
170,
255,
73,
28,
227,
182,
146,
199,
56,
109,
219,
142,
113,
36,
},
{
0,
86,
172,
250,
69,
19,
233,
191,
138,
220,
38,
112,
207,
153,
99,
53,
},
{
0,
87,
174,
249,
65,
22,
239,
184,
130,
213,
44,
123,
195,
148,
109,
58,
},
{
0,
88,
176,
232,
125,
37,
205,
149,
250,
162,
74,
18,
135,
223,
55,
111,
},
{
0,
89,
178,
235,
121,
32,
203,
146,
242,
171,
64,
25,
139,
210,
57,
96,
},
{
0,
90,
180,
238,
117,
47,
193,
155,
234,
176,
94,
4,
159,
197,
43,
113,
},
{
0,
91,
182,
237,
113,
42,
199,
156,
226,
185,
84,
15,
147,
200,
37,
126,
},
{
0,
92,
184,
228,
109,
49,
213,
137,
218,
134,
98,
62,
183,
235,
15,
83,
},
{
0,
93,
186,
231,
105,
52,
211,
142,
210,
143,
104,
53,
187,
230,
1,
92,
},
{
0,
94,
188,
226,
101,
59,
217,
135,
202,
148,
118,
40,
175,
241,
19,
77,
},
{
0,
95,
190,
225,
97,
62,
223,
128,
194,
157,
124,
35,
163,
252,
29,
66,
},
{
0,
96,
192,
160,
157,
253,
93,
61,
39,
71,
231,
135,
186,
218,
122,
26,
},
{
0,
97,
194,
163,
153,
248,
91,
58,
47,
78,
237,
140,
182,
215,
116,
21,
},
{
0,
98,
196,
166,
149,
247,
81,
51,
55,
85,
243,
145,
162,
192,
102,
4,
},
{
0,
99,
198,
165,
145,
242,
87,
52,
63,
92,
249,
154,
174,
205,
104,
11,
},
{
0,
100,
200,
172,
141,
233,
69,
33,
7,
99,
207,
171,
138,
238,
66,
38,
},
{
0,
101,
202,
175,
137,
236,
67,
38,
15,
106,
197,
160,
134,
227,
76,
41,
},
{
0,
102,
204,
170,
133,
227,
73,
47,
23,
113,
219,
189,
146,
244,
94,
56,
},
{
0,
103,
206,
169,
129,
230,
79,
40,
31,
120,
209,
182,
158,
249,
80,
55,
},
{
0,
104,
208,
184,
189,
213,
109,
5,
103,
15,
183,
223,
218,
178,
10,
98,
},
{
0,
105,
210,
187,
185,
208,
107,
2,
111,
6,
189,
212,
214,
191,
4,
109,
},
{
0,
106,
212,
190,
181,
223,
97,
11,
119,
29,
163,
201,
194,
168,
22,
124,
},
{
0,
107,
214,
189,
177,
218,
103,
12,
127,
20,
169,
194,
206,
165,
24,
115,
},
{
0,
108,
216,
180,
173,
193,
117,
25,
71,
43,
159,
243,
234,
134,
50,
94,
},
{
0,
109,
218,
183,
169,
196,
115,
30,
79,
34,
149,
248,
230,
139,
60,
81,
},
{
0,
110,
220,
178,
165,
203,
121,
23,
87,
57,
139,
229,
242,
156,
46,
64,
},
{
0,
111,
222,
177,
161,
206,
127,
16,
95,
48,
129,
238,
254,
145,
32,
79,
},
{
0,
112,
224,
144,
221,
173,
61,
77,
167,
215,
71,
55,
122,
10,
154,
234,
},
{
0,
113,
226,
147,
217,
168,
59,
74,
175,
222,
77,
60,
118,
7,
148,
229,
},
{
0,
114,
228,
150,
213,
167,
49,
67,
183,
197,
83,
33,
98,
16,
134,
244,
},
{
0,
115,
230,
149,
209,
162,
55,
68,
191,
204,
89,
42,
110,
29,
136,
251,
},
{
0,
116,
232,
156,
205,
185,
37,
81,
135,
243,
111,
27,
74,
62,
162,
214,
},
{
0,
117,
234,
159,
201,
188,
35,
86,
143,
250,
101,
16,
70,
51,
172,
217,
},
{
0,
118,
236,
154,
197,
179,
41,
95,
151,
225,
123,
13,
82,
36,
190,
200,
},
{
0,
119,
238,
153,
193,
182,
47,
88,
159,
232,
113,
6,
94,
41,
176,
199,
},
{
0,
120,
240,
136,
253,
133,
13,
117,
231,
159,
23,
111,
26,
98,
234,
146,
},
{
0,
121,
242,
139,
249,
128,
11,
114,
239,
150,
29,
100,
22,
111,
228,
157,
},
{
0,
122,
244,
142,
245,
143,
1,
123,
247,
141,
3,
121,
2,
120,
246,
140,
},
{
0,
123,
246,
141,
241,
138,
7,
124,
255,
132,
9,
114,
14,
117,
248,
131,
},
{
0,
124,
248,
132,
237,
145,
21,
105,
199,
187,
63,
67,
42,
86,
210,
174,
},
{
0,
125,
250,
135,
233,
148,
19,
110,
207,
178,
53,
72,
38,
91,
220,
161,
},
{
0,
126,
252,
130,
229,
155,
25,
103,
215,
169,
43,
85,
50,
76,
206,
176,
},
{
0,
127,
254,
129,
225,
158,
31,
96,
223,
160,
33,
94,
62,
65,
192,
191,
},
{
0,
128,
29,
157,
58,
186,
39,
167,
116,
244,
105,
233,
78,
206,
83,
211,
},
{
0,
129,
31,
158,
62,
191,
33,
160,
124,
253,
99,
226,
66,
195,
93,
220,
},
{
0,
130,
25,
155,
50,
176,
43,
169,
100,
230,
125,
255,
86,
212,
79,
205,
},
{
0,
131,
27,
152,
54,
181,
45,
174,
108,
239,
119,
244,
90,
217,
65,
194,
},
{
0,
132,
21,
145,
42,
174,
63,
187,
84,
208,
65,
197,
126,
250,
107,
239,
},
{
0,
133,
23,
146,
46,
171,
57,
188,
92,
217,
75,
206,
114,
247,
101,
224,
},
{
0,
134,
17,
151,
34,
164,
51,
181,
68,
194,
85,
211,
102,
224,
119,
241,
},
{
0,
135,
19,
148,
38,
161,
53,
178,
76,
203,
95,
216,
106,
237,
121,
254,
},
{
0,
136,
13,
133,
26,
146,
23,
159,
52,
188,
57,
177,
46,
166,
35,
171,
},
{
0,
137,
15,
134,
30,
151,
17,
152,
60,
181,
51,
186,
34,
171,
45,
164,
},
{
0,
138,
9,
131,
18,
152,
27,
145,
36,
174,
45,
167,
54,
188,
63,
181,
},
{
0,
139,
11,
128,
22,
157,
29,
150,
44,
167,
39,
172,
58,
177,
49,
186,
},
{
0,
140,
5,
137,
10,
134,
15,
131,
20,
152,
17,
157,
30,
146,
27,
151,
},
{
0,
141,
7,
138,
14,
131,
9,
132,
28,
145,
27,
150,
18,
159,
21,
152,
},
{
0,
142,
1,
143,
2,
140,
3,
141,
4,
138,
5,
139,
6,
136,
7,
137,
},
{
0,
143,
3,
140,
6,
137,
5,
138,
12,
131,
15,
128,
10,
133,
9,
134,
},
{
0,
144,
61,
173,
122,
234,
71,
215,
244,
100,
201,
89,
142,
30,
179,
35,
},
{
0,
145,
63,
174,
126,
239,
65,
208,
252,
109,
195,
82,
130,
19,
189,
44,
},
{
0,
146,
57,
171,
114,
224,
75,
217,
228,
118,
221,
79,
150,
4,
175,
61,
},
{
0,
147,
59,
168,
118,
229,
77,
222,
236,
127,
215,
68,
154,
9,
161,
50,
},
{
0,
148,
53,
161,
106,
254,
95,
203,
212,
64,
225,
117,
190,
42,
139,
31,
},
{
0,
149,
55,
162,
110,
251,
89,
204,
220,
73,
235,
126,
178,
39,
133,
16,
},
{
0,
150,
49,
167,
98,
244,
83,
197,
196,
82,
245,
99,
166,
48,
151,
1,
},
{
0,
151,
51,
164,
102,
241,
85,
194,
204,
91,
255,
104,
170,
61,
153,
14,
},
{
0,
152,
45,
181,
90,
194,
119,
239,
180,
44,
153,
1,
238,
118,
195,
91,
},
{
0,
153,
47,
182,
94,
199,
113,
232,
188,
37,
147,
10,
226,
123,
205,
84,
},
{
0,
154,
41,
179,
82,
200,
123,
225,
164,
62,
141,
23,
246,
108,
223,
69,
},
{
0,
155,
43,
176,
86,
205,
125,
230,
172,
55,
135,
28,
250,
97,
209,
74,
},
{
0,
156,
37,
185,
74,
214,
111,
243,
148,
8,
177,
45,
222,
66,
251,
103,
},
{
0,
157,
39,
186,
78,
211,
105,
244,
156,
1,
187,
38,
210,
79,
245,
104,
},
{
0,
158,
33,
191,
66,
220,
99,
253,
132,
26,
165,
59,
198,
88,
231,
121,
},
{
0,
159,
35,
188,
70,
217,
101,
250,
140,
19,
175,
48,
202,
85,
233,
118,
},
{
0,
160,
93,
253,
186,
26,
231,
71,
105,
201,
52,
148,
211,
115,
142,
46,
},
{
0,
161,
95,
254,
190,
31,
225,
64,
97,
192,
62,
159,
223,
126,
128,
33,
},
{
0,
162,
89,
251,
178,
16,
235,
73,
121,
219,
32,
130,
203,
105,
146,
48,
},
{
0,
163,
91,
248,
182,
21,
237,
78,
113,
210,
42,
137,
199,
100,
156,
63,
},
{
0,
164,
85,
241,
170,
14,
255,
91,
73,
237,
28,
184,
227,
71,
182,
18,
},
{
0,
165,
87,
242,
174,
11,
249,
92,
65,
228,
22,
179,
239,
74,
184,
29,
},
{
0,
166,
81,
247,
162,
4,
243,
85,
89,
255,
8,
174,
251,
93,
170,
12,
},
{
0,
167,
83,
244,
166,
1,
245,
82,
81,
246,
2,
165,
247,
80,
164,
3,
},
{
0,
168,
77,
229,
154,
50,
215,
127,
41,
129,
100,
204,
179,
27,
254,
86,
},
{
0,
169,
79,
230,
158,
55,
209,
120,
33,
136,
110,
199,
191,
22,
240,
89,
},
{
0,
170,
73,
227,
146,
56,
219,
113,
57,
147,
112,
218,
171,
1,
226,
72,
},
{
0,
171,
75,
224,
150,
61,
221,
118,
49,
154,
122,
209,
167,
12,
236,
71,
},
{
0,
172,
69,
233,
138,
38,
207,
99,
9,
165,
76,
224,
131,
47,
198,
106,
},
{
0,
173,
71,
234,
142,
35,
201,
100,
1,
172,
70,
235,
143,
34,
200,
101,
},
{
0,
174,
65,
239,
130,
44,
195,
109,
25,
183,
88,
246,
155,
53,
218,
116,
},
{
0,
175,
67,
236,
134,
41,
197,
106,
17,
190,
82,
253,
151,
56,
212,
123,
},
{
0,
176,
125,
205,
250,
74,
135,
55,
233,
89,
148,
36,
19,
163,
110,
222,
},
{
0,
177,
127,
206,
254,
79,
129,
48,
225,
80,
158,
47,
31,
174,
96,
209,
},
{
0,
178,
121,
203,
242,
64,
139,
57,
249,
75,
128,
50,
11,
185,
114,
192,
},
{
0,
179,
123,
200,
246,
69,
141,
62,
241,
66,
138,
57,
7,
180,
124,
207,
},
{
0,
180,
117,
193,
234,
94,
159,
43,
201,
125,
188,
8,
35,
151,
86,
226,
},
{
0,
181,
119,
194,
238,
91,
153,
44,
193,
116,
182,
3,
47,
154,
88,
237,
},
{
0,
182,
113,
199,
226,
84,
147,
37,
217,
111,
168,
30,
59,
141,
74,
252,
},
{
0,
183,
115,
196,
230,
81,
149,
34,
209,
102,
162,
21,
55,
128,
68,
243,
},
{
0,
184,
109,
213,
218,
98,
183,
15,
169,
17,
196,
124,
115,
203,
30,
166,
},
{
0,
185,
111,
214,
222,
103,
177,
8,
161,
24,
206,
119,
127,
198,
16,
169,
},
{
0,
186,
105,
211,
210,
104,
187,
1,
185,
3,
208,
106,
107,
209,
2,
184,
},
{
0,
187,
107,
208,
214,
109,
189,
6,
177,
10,
218,
97,
103,
220,
12,
183,
},
{
0,
188,
101,
217,
202,
118,
175,
19,
137,
53,
236,
80,
67,
255,
38,
154,
},
{
0,
189,
103,
218,
206,
115,
169,
20,
129,
60,
230,
91,
79,
242,
40,
149,
},
{
0,
190,
97,
223,
194,
124,
163,
29,
153,
39,
248,
70,
91,
229,
58,
132,
},
{
0,
191,
99,
220,
198,
121,
165,
26,
145,
46,
242,
77,
87,
232,
52,
139,
},
{
0,
192,
157,
93,
39,
231,
186,
122,
78,
142,
211,
19,
105,
169,
244,
52,
},
{
0,
193,
159,
94,
35,
226,
188,
125,
70,
135,
217,
24,
101,
164,
250,
59,
},
{
0,
194,
153,
91,
47,
237,
182,
116,
94,
156,
199,
5,
113,
179,
232,
42,
},
{
0,
195,
155,
88,
43,
232,
176,
115,
86,
149,
205,
14,
125,
190,
230,
37,
},
{
0,
196,
149,
81,
55,
243,
162,
102,
110,
170,
251,
63,
89,
157,
204,
8,
},
{
0,
197,
151,
82,
51,
246,
164,
97,
102,
163,
241,
52,
85,
144,
194,
7,
},
{
0,
198,
145,
87,
63,
249,
174,
104,
126,
184,
239,
41,
65,
135,
208,
22,
},
{
0,
199,
147,
84,
59,
252,
168,
111,
118,
177,
229,
34,
77,
138,
222,
25,
},
{
0,
200,
141,
69,
7,
207,
138,
66,
14,
198,
131,
75,
9,
193,
132,
76,
},
{
0,
201,
143,
70,
3,
202,
140,
69,
6,
207,
137,
64,
5,
204,
138,
67,
},
{
0,
202,
137,
67,
15,
197,
134,
76,
30,
212,
151,
93,
17,
219,
152,
82,
},
{
0,
203,
139,
64,
11,
192,
128,
75,
22,
221,
157,
86,
29,
214,
150,
93,
},
{
0,
204,
133,
73,
23,
219,
146,
94,
46,
226,
171,
103,
57,
245,
188,
112,
},
{
0,
205,
135,
74,
19,
222,
148,
89,
38,
235,
161,
108,
53,
248,
178,
127,
},
{
0,
206,
129,
79,
31,
209,
158,
80,
62,
240,
191,
113,
33,
239,
160,
110,
},
{
0,
207,
131,
76,
27,
212,
152,
87,
54,
249,
181,
122,
45,
226,
174,
97,
},
{
0,
208,
189,
109,
103,
183,
218,
10,
206,
30,
115,
163,
169,
121,
20,
196,
},
{
0,
209,
191,
110,
99,
178,
220,
13,
198,
23,
121,
168,
165,
116,
26,
203,
},
{
0,
210,
185,
107,
111,
189,
214,
4,
222,
12,
103,
181,
177,
99,
8,
218,
},
{
0,
211,
187,
104,
107,
184,
208,
3,
214,
5,
109,
190,
189,
110,
6,
213,
},
{
0,
212,
181,
97,
119,
163,
194,
22,
238,
58,
91,
143,
153,
77,
44,
248,
},
{
0,
213,
183,
98,
115,
166,
196,
17,
230,
51,
81,
132,
149,
64,
34,
247,
},
{
0,
214,
177,
103,
127,
169,
206,
24,
254,
40,
79,
153,
129,
87,
48,
230,
},
{
0,
215,
179,
100,
123,
172,
200,
31,
246,
33,
69,
146,
141,
90,
62,
233,
},
{
0,
216,
173,
117,
71,
159,
234,
50,
142,
86,
35,
251,
201,
17,
100,
188,
},
{
0,
217,
175,
118,
67,
154,
236,
53,
134,
95,
41,
240,
197,
28,
106,
179,
},
{
0,
218,
169,
115,
79,
149,
230,
60,
158,
68,
55,
237,
209,
11,
120,
162,
},
{
0,
219,
171,
112,
75,
144,
224,
59,
150,
77,
61,
230,
221,
6,
118,
173,
},
{
0,
220,
165,
121,
87,
139,
242,
46,
174,
114,
11,
215,
249,
37,
92,
128,
},
{
0,
221,
167,
122,
83,
142,
244,
41,
166,
123,
1,
220,
245,
40,
82,
143,
},
{
0,
222,
161,
127,
95,
129,
254,
32,
190,
96,
31,
193,
225,
63,
64,
158,
},
{
0,
223,
163,
124,
91,
132,
248,
39,
182,
105,
21,
202,
237,
50,
78,
145,
},
{
0,
224,
221,
61,
167,
71,
122,
154,
83,
179,
142,
110,
244,
20,
41,
201,
},
{
0,
225,
223,
62,
163,
66,
124,
157,
91,
186,
132,
101,
248,
25,
39,
198,
},
{
0,
226,
217,
59,
175,
77,
118,
148,
67,
161,
154,
120,
236,
14,
53,
215,
},
{
0,
227,
219,
56,
171,
72,
112,
147,
75,
168,
144,
115,
224,
3,
59,
216,
},
{
0,
228,
213,
49,
183,
83,
98,
134,
115,
151,
166,
66,
196,
32,
17,
245,
},
{
0,
229,
215,
50,
179,
86,
100,
129,
123,
158,
172,
73,
200,
45,
31,
250,
},
{
0,
230,
209,
55,
191,
89,
110,
136,
99,
133,
178,
84,
220,
58,
13,
235,
},
{
0,
231,
211,
52,
187,
92,
104,
143,
107,
140,
184,
95,
208,
55,
3,
228,
},
{
0,
232,
205,
37,
135,
111,
74,
162,
19,
251,
222,
54,
148,
124,
89,
177,
},
{
0,
233,
207,
38,
131,
106,
76,
165,
27,
242,
212,
61,
152,
113,
87,
190,
},
{
0,
234,
201,
35,
143,
101,
70,
172,
3,
233,
202,
32,
140,
102,
69,
175,
},
{
0,
235,
203,
32,
139,
96,
64,
171,
11,
224,
192,
43,
128,
107,
75,
160,
},
{
0,
236,
197,
41,
151,
123,
82,
190,
51,
223,
246,
26,
164,
72,
97,
141,
},
{
0,
237,
199,
42,
147,
126,
84,
185,
59,
214,
252,
17,
168,
69,
111,
130,
},
{
0,
238,
193,
47,
159,
113,
94,
176,
35,
205,
226,
12,
188,
82,
125,
147,
},
{
0,
239,
195,
44,
155,
116,
88,
183,
43,
196,
232,
7,
176,
95,
115,
156,
},
{
0,
240,
253,
13,
231,
23,
26,
234,
211,
35,
46,
222,
52,
196,
201,
57,
},
{
0,
241,
255,
14,
227,
18,
28,
237,
219,
42,
36,
213,
56,
201,
199,
54,
},
{
0,
242,
249,
11,
239,
29,
22,
228,
195,
49,
58,
200,
44,
222,
213,
39,
},
{
0,
243,
251,
8,
235,
24,
16,
227,
203,
56,
48,
195,
32,
211,
219,
40,
},
{
0,
244,
245,
1,
247,
3,
2,
246,
243,
7,
6,
242,
4,
240,
241,
5,
},
{
0,
245,
247,
2,
243,
6,
4,
241,
251,
14,
12,
249,
8,
253,
255,
10,
},
{
0,
246,
241,
7,
255,
9,
14,
248,
227,
21,
18,
228,
28,
234,
237,
27,
},
{
0,
247,
243,
4,
251,
12,
8,
255,
235,
28,
24,
239,
16,
231,
227,
20,
},
{
0,
248,
237,
21,
199,
63,
42,
210,
147,
107,
126,
134,
84,
172,
185,
65,
},
{
0,
249,
239,
22,
195,
58,
44,
213,
155,
98,
116,
141,
88,
161,
183,
78,
},
{
0,
250,
233,
19,
207,
53,
38,
220,
131,
121,
106,
144,
76,
182,
165,
95,
},
{
0,
251,
235,
16,
203,
48,
32,
219,
139,
112,
96,
155,
64,
187,
171,
80,
},
{
0,
252,
229,
25,
215,
43,
50,
206,
179,
79,
86,
170,
100,
152,
129,
125,
},
{
0,
253,
231,
26,
211,
46,
52,
201,
187,
70,
92,
161,
104,
149,
143,
114,
},
{
0,
254,
225,
31,
223,
33,
62,
192,
163,
93,
66,
188,
124,
130,
157,
99,
},
{
0,
255,
227,
28,
219,
36,
56,
199,
171,
84,
72,
183,
112,
143,
147,
108,
},
};
const uint8 Octet::OctMulHi[256][16] = {
{
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
},
{
0,
16,
32,
48,
64,
80,
96,
112,
128,
144,
160,
176,
192,
208,
224,
240,
},
{
0,
32,
64,
96,
128,
160,
192,
224,
29,
61,
93,
125,
157,
189,
221,
253,
},
{
0,
48,
96,
80,
192,
240,
160,
144,
157,
173,
253,
205,
93,
109,
61,
13,
},
{
0,
64,
128,
192,
29,
93,
157,
221,
58,
122,
186,
250,
39,
103,
167,
231,
},
{
0,
80,
160,
240,
93,
13,
253,
173,
186,
234,
26,
74,
231,
183,
71,
23,
},
{
0,
96,
192,
160,
157,
253,
93,
61,
39,
71,
231,
135,
186,
218,
122,
26,
},
{
0,
112,
224,
144,
221,
173,
61,
77,
167,
215,
71,
55,
122,
10,
154,
234,
},
{
0,
128,
29,
157,
58,
186,
39,
167,
116,
244,
105,
233,
78,
206,
83,
211,
},
{
0,
144,
61,
173,
122,
234,
71,
215,
244,
100,
201,
89,
142,
30,
179,
35,
},
{
0,
160,
93,
253,
186,
26,
231,
71,
105,
201,
52,
148,
211,
115,
142,
46,
},
{
0,
176,
125,
205,
250,
74,
135,
55,
233,
89,
148,
36,
19,
163,
110,
222,
},
{
0,
192,
157,
93,
39,
231,
186,
122,
78,
142,
211,
19,
105,
169,
244,
52,
},
{
0,
208,
189,
109,
103,
183,
218,
10,
206,
30,
115,
163,
169,
121,
20,
196,
},
{
0,
224,
221,
61,
167,
71,
122,
154,
83,
179,
142,
110,
244,
20,
41,
201,
},
{
0,
240,
253,
13,
231,
23,
26,
234,
211,
35,
46,
222,
52,
196,
201,
57,
},
{
0,
29,
58,
39,
116,
105,
78,
83,
232,
245,
210,
207,
156,
129,
166,
187,
},
{
0,
13,
26,
23,
52,
57,
46,
35,
104,
101,
114,
127,
92,
81,
70,
75,
},
{
0,
61,
122,
71,
244,
201,
142,
179,
245,
200,
143,
178,
1,
60,
123,
70,
},
{
0,
45,
90,
119,
180,
153,
238,
195,
117,
88,
47,
2,
193,
236,
155,
182,
},
{
0,
93,
186,
231,
105,
52,
211,
142,
210,
143,
104,
53,
187,
230,
1,
92,
},
{
0,
77,
154,
215,
41,
100,
179,
254,
82,
31,
200,
133,
123,
54,
225,
172,
},
{
0,
125,
250,
135,
233,
148,
19,
110,
207,
178,
53,
72,
38,
91,
220,
161,
},
{
0,
109,
218,
183,
169,
196,
115,
30,
79,
34,
149,
248,
230,
139,
60,
81,
},
{
0,
157,
39,
186,
78,
211,
105,
244,
156,
1,
187,
38,
210,
79,
245,
104,
},
{
0,
141,
7,
138,
14,
131,
9,
132,
28,
145,
27,
150,
18,
159,
21,
152,
},
{
0,
189,
103,
218,
206,
115,
169,
20,
129,
60,
230,
91,
79,
242,
40,
149,
},
{
0,
173,
71,
234,
142,
35,
201,
100,
1,
172,
70,
235,
143,
34,
200,
101,
},
{
0,
221,
167,
122,
83,
142,
244,
41,
166,
123,
1,
220,
245,
40,
82,
143,
},
{
0,
205,
135,
74,
19,
222,
148,
89,
38,
235,
161,
108,
53,
248,
178,
127,
},
{
0,
253,
231,
26,
211,
46,
52,
201,
187,
70,
92,
161,
104,
149,
143,
114,
},
{
0,
237,
199,
42,
147,
126,
84,
185,
59,
214,
252,
17,
168,
69,
111,
130,
},
{
0,
58,
116,
78,
232,
210,
156,
166,
205,
247,
185,
131,
37,
31,
81,
107,
},
{
0,
42,
84,
126,
168,
130,
252,
214,
77,
103,
25,
51,
229,
207,
177,
155,
},
{
0,
26,
52,
46,
104,
114,
92,
70,
208,
202,
228,
254,
184,
162,
140,
150,
},
{
0,
10,
20,
30,
40,
34,
60,
54,
80,
90,
68,
78,
120,
114,
108,
102,
},
{
0,
122,
244,
142,
245,
143,
1,
123,
247,
141,
3,
121,
2,
120,
246,
140,
},
{
0,
106,
212,
190,
181,
223,
97,
11,
119,
29,
163,
201,
194,
168,
22,
124,
},
{
0,
90,
180,
238,
117,
47,
193,
155,
234,
176,
94,
4,
159,
197,
43,
113,
},
{
0,
74,
148,
222,
53,
127,
161,
235,
106,
32,
254,
180,
95,
21,
203,
129,
},
{
0,
186,
105,
211,
210,
104,
187,
1,
185,
3,
208,
106,
107,
209,
2,
184,
},
{
0,
170,
73,
227,
146,
56,
219,
113,
57,
147,
112,
218,
171,
1,
226,
72,
},
{
0,
154,
41,
179,
82,
200,
123,
225,
164,
62,
141,
23,
246,
108,
223,
69,
},
{
0,
138,
9,
131,
18,
152,
27,
145,
36,
174,
45,
167,
54,
188,
63,
181,
},
{
0,
250,
233,
19,
207,
53,
38,
220,
131,
121,
106,
144,
76,
182,
165,
95,
},
{
0,
234,
201,
35,
143,
101,
70,
172,
3,
233,
202,
32,
140,
102,
69,
175,
},
{
0,
218,
169,
115,
79,
149,
230,
60,
158,
68,
55,
237,
209,
11,
120,
162,
},
{
0,
202,
137,
67,
15,
197,
134,
76,
30,
212,
151,
93,
17,
219,
152,
82,
},
{
0,
39,
78,
105,
156,
187,
210,
245,
37,
2,
107,
76,
185,
158,
247,
208,
},
{
0,
55,
110,
89,
220,
235,
178,
133,
165,
146,
203,
252,
121,
78,
23,
32,
},
{
0,
7,
14,
9,
28,
27,
18,
21,
56,
63,
54,
49,
36,
35,
42,
45,
},
{
0,
23,
46,
57,
92,
75,
114,
101,
184,
175,
150,
129,
228,
243,
202,
221,
},
{
0,
103,
206,
169,
129,
230,
79,
40,
31,
120,
209,
182,
158,
249,
80,
55,
},
{
0,
119,
238,
153,
193,
182,
47,
88,
159,
232,
113,
6,
94,
41,
176,
199,
},
{
0,
71,
142,
201,
1,
70,
143,
200,
2,
69,
140,
203,
3,
68,
141,
202,
},
{
0,
87,
174,
249,
65,
22,
239,
184,
130,
213,
44,
123,
195,
148,
109,
58,
},
{
0,
167,
83,
244,
166,
1,
245,
82,
81,
246,
2,
165,
247,
80,
164,
3,
},
{
0,
183,
115,
196,
230,
81,
149,
34,
209,
102,
162,
21,
55,
128,
68,
243,
},
{
0,
135,
19,
148,
38,
161,
53,
178,
76,
203,
95,
216,
106,
237,
121,
254,
},
{
0,
151,
51,
164,
102,
241,
85,
194,
204,
91,
255,
104,
170,
61,
153,
14,
},
{
0,
231,
211,
52,
187,
92,
104,
143,
107,
140,
184,
95,
208,
55,
3,
228,
},
{
0,
247,
243,
4,
251,
12,
8,
255,
235,
28,
24,
239,
16,
231,
227,
20,
},
{
0,
199,
147,
84,
59,
252,
168,
111,
118,
177,
229,
34,
77,
138,
222,
25,
},
{
0,
215,
179,
100,
123,
172,
200,
31,
246,
33,
69,
146,
141,
90,
62,
233,
},
{
0,
116,
232,
156,
205,
185,
37,
81,
135,
243,
111,
27,
74,
62,
162,
214,
},
{
0,
100,
200,
172,
141,
233,
69,
33,
7,
99,
207,
171,
138,
238,
66,
38,
},
{
0,
84,
168,
252,
77,
25,
229,
177,
154,
206,
50,
102,
215,
131,
127,
43,
},
{
0,
68,
136,
204,
13,
73,
133,
193,
26,
94,
146,
214,
23,
83,
159,
219,
},
{
0,
52,
104,
92,
208,
228,
184,
140,
189,
137,
213,
225,
109,
89,
5,
49,
},
{
0,
36,
72,
108,
144,
180,
216,
252,
61,
25,
117,
81,
173,
137,
229,
193,
},
{
0,
20,
40,
60,
80,
68,
120,
108,
160,
180,
136,
156,
240,
228,
216,
204,
},
{
0,
4,
8,
12,
16,
20,
24,
28,
32,
36,
40,
44,
48,
52,
56,
60,
},
{
0,
244,
245,
1,
247,
3,
2,
246,
243,
7,
6,
242,
4,
240,
241,
5,
},
{
0,
228,
213,
49,
183,
83,
98,
134,
115,
151,
166,
66,
196,
32,
17,
245,
},
{
0,
212,
181,
97,
119,
163,
194,
22,
238,
58,
91,
143,
153,
77,
44,
248,
},
{
0,
196,
149,
81,
55,
243,
162,
102,
110,
170,
251,
63,
89,
157,
204,
8,
},
{
0,
180,
117,
193,
234,
94,
159,
43,
201,
125,
188,
8,
35,
151,
86,
226,
},
{
0,
164,
85,
241,
170,
14,
255,
91,
73,
237,
28,
184,
227,
71,
182,
18,
},
{
0,
148,
53,
161,
106,
254,
95,
203,
212,
64,
225,
117,
190,
42,
139,
31,
},
{
0,
132,
21,
145,
42,
174,
63,
187,
84,
208,
65,
197,
126,
250,
107,
239,
},
{
0,
105,
210,
187,
185,
208,
107,
2,
111,
6,
189,
212,
214,
191,
4,
109,
},
{
0,
121,
242,
139,
249,
128,
11,
114,
239,
150,
29,
100,
22,
111,
228,
157,
},
{
0,
73,
146,
219,
57,
112,
171,
226,
114,
59,
224,
169,
75,
2,
217,
144,
},
{
0,
89,
178,
235,
121,
32,
203,
146,
242,
171,
64,
25,
139,
210,
57,
96,
},
{
0,
41,
82,
123,
164,
141,
246,
223,
85,
124,
7,
46,
241,
216,
163,
138,
},
{
0,
57,
114,
75,
228,
221,
150,
175,
213,
236,
167,
158,
49,
8,
67,
122,
},
{
0,
9,
18,
27,
36,
45,
54,
63,
72,
65,
90,
83,
108,
101,
126,
119,
},
{
0,
25,
50,
43,
100,
125,
86,
79,
200,
209,
250,
227,
172,
181,
158,
135,
},
{
0,
233,
207,
38,
131,
106,
76,
165,
27,
242,
212,
61,
152,
113,
87,
190,
},
{
0,
249,
239,
22,
195,
58,
44,
213,
155,
98,
116,
141,
88,
161,
183,
78,
},
{
0,
201,
143,
70,
3,
202,
140,
69,
6,
207,
137,
64,
5,
204,
138,
67,
},
{
0,
217,
175,
118,
67,
154,
236,
53,
134,
95,
41,
240,
197,
28,
106,
179,
},
{
0,
169,
79,
230,
158,
55,
209,
120,
33,
136,
110,
199,
191,
22,
240,
89,
},
{
0,
185,
111,
214,
222,
103,
177,
8,
161,
24,
206,
119,
127,
198,
16,
169,
},
{
0,
137,
15,
134,
30,
151,
17,
152,
60,
181,
51,
186,
34,
171,
45,
164,
},
{
0,
153,
47,
182,
94,
199,
113,
232,
188,
37,
147,
10,
226,
123,
205,
84,
},
{
0,
78,
156,
210,
37,
107,
185,
247,
74,
4,
214,
152,
111,
33,
243,
189,
},
{
0,
94,
188,
226,
101,
59,
217,
135,
202,
148,
118,
40,
175,
241,
19,
77,
},
{
0,
110,
220,
178,
165,
203,
121,
23,
87,
57,
139,
229,
242,
156,
46,
64,
},
{
0,
126,
252,
130,
229,
155,
25,
103,
215,
169,
43,
85,
50,
76,
206,
176,
},
{
0,
14,
28,
18,
56,
54,
36,
42,
112,
126,
108,
98,
72,
70,
84,
90,
},
{
0,
30,
60,
34,
120,
102,
68,
90,
240,
238,
204,
210,
136,
150,
180,
170,
},
{
0,
46,
92,
114,
184,
150,
228,
202,
109,
67,
49,
31,
213,
251,
137,
167,
},
{
0,
62,
124,
66,
248,
198,
132,
186,
237,
211,
145,
175,
21,
43,
105,
87,
},
{
0,
206,
129,
79,
31,
209,
158,
80,
62,
240,
191,
113,
33,
239,
160,
110,
},
{
0,
222,
161,
127,
95,
129,
254,
32,
190,
96,
31,
193,
225,
63,
64,
158,
},
{
0,
238,
193,
47,
159,
113,
94,
176,
35,
205,
226,
12,
188,
82,
125,
147,
},
{
0,
254,
225,
31,
223,
33,
62,
192,
163,
93,
66,
188,
124,
130,
157,
99,
},
{
0,
142,
1,
143,
2,
140,
3,
141,
4,
138,
5,
139,
6,
136,
7,
137,
},
{
0,
158,
33,
191,
66,
220,
99,
253,
132,
26,
165,
59,
198,
88,
231,
121,
},
{
0,
174,
65,
239,
130,
44,
195,
109,
25,
183,
88,
246,
155,
53,
218,
116,
},
{
0,
190,
97,
223,
194,
124,
163,
29,
153,
39,
248,
70,
91,
229,
58,
132,
},
{
0,
83,
166,
245,
81,
2,
247,
164,
162,
241,
4,
87,
243,
160,
85,
6,
},
{
0,
67,
134,
197,
17,
82,
151,
212,
34,
97,
164,
231,
51,
112,
181,
246,
},
{
0,
115,
230,
149,
209,
162,
55,
68,
191,
204,
89,
42,
110,
29,
136,
251,
},
{
0,
99,
198,
165,
145,
242,
87,
52,
63,
92,
249,
154,
174,
205,
104,
11,
},
{
0,
19,
38,
53,
76,
95,
106,
121,
152,
139,
190,
173,
212,
199,
242,
225,
},
{
0,
3,
6,
5,
12,
15,
10,
9,
24,
27,
30,
29,
20,
23,
18,
17,
},
{
0,
51,
102,
85,
204,
255,
170,
153,
133,
182,
227,
208,
73,
122,
47,
28,
},
{
0,
35,
70,
101,
140,
175,
202,
233,
5,
38,
67,
96,
137,
170,
207,
236,
},
{
0,
211,
187,
104,
107,
184,
208,
3,
214,
5,
109,
190,
189,
110,
6,
213,
},
{
0,
195,
155,
88,
43,
232,
176,
115,
86,
149,
205,
14,
125,
190,
230,
37,
},
{
0,
243,
251,
8,
235,
24,
16,
227,
203,
56,
48,
195,
32,
211,
219,
40,
},
{
0,
227,
219,
56,
171,
72,
112,
147,
75,
168,
144,
115,
224,
3,
59,
216,
},
{
0,
147,
59,
168,
118,
229,
77,
222,
236,
127,
215,
68,
154,
9,
161,
50,
},
{
0,
131,
27,
152,
54,
181,
45,
174,
108,
239,
119,
244,
90,
217,
65,
194,
},
{
0,
179,
123,
200,
246,
69,
141,
62,
241,
66,
138,
57,
7,
180,
124,
207,
},
{
0,
163,
91,
248,
182,
21,
237,
78,
113,
210,
42,
137,
199,
100,
156,
63,
},
{
0,
232,
205,
37,
135,
111,
74,
162,
19,
251,
222,
54,
148,
124,
89,
177,
},
{
0,
248,
237,
21,
199,
63,
42,
210,
147,
107,
126,
134,
84,
172,
185,
65,
},
{
0,
200,
141,
69,
7,
207,
138,
66,
14,
198,
131,
75,
9,
193,
132,
76,
},
{
0,
216,
173,
117,
71,
159,
234,
50,
142,
86,
35,
251,
201,
17,
100,
188,
},
{
0,
168,
77,
229,
154,
50,
215,
127,
41,
129,
100,
204,
179,
27,
254,
86,
},
{
0,
184,
109,
213,
218,
98,
183,
15,
169,
17,
196,
124,
115,
203,
30,
166,
},
{
0,
136,
13,
133,
26,
146,
23,
159,
52,
188,
57,
177,
46,
166,
35,
171,
},
{
0,
152,
45,
181,
90,
194,
119,
239,
180,
44,
153,
1,
238,
118,
195,
91,
},
{
0,
104,
208,
184,
189,
213,
109,
5,
103,
15,
183,
223,
218,
178,
10,
98,
},
{
0,
120,
240,
136,
253,
133,
13,
117,
231,
159,
23,
111,
26,
98,
234,
146,
},
{
0,
72,
144,
216,
61,
117,
173,
229,
122,
50,
234,
162,
71,
15,
215,
159,
},
{
0,
88,
176,
232,
125,
37,
205,
149,
250,
162,
74,
18,
135,
223,
55,
111,
},
{
0,
40,
80,
120,
160,
136,
240,
216,
93,
117,
13,
37,
253,
213,
173,
133,
},
{
0,
56,
112,
72,
224,
216,
144,
168,
221,
229,
173,
149,
61,
5,
77,
117,
},
{
0,
8,
16,
24,
32,
40,
48,
56,
64,
72,
80,
88,
96,
104,
112,
120,
},
{
0,
24,
48,
40,
96,
120,
80,
72,
192,
216,
240,
232,
160,
184,
144,
136,
},
{
0,
245,
247,
2,
243,
6,
4,
241,
251,
14,
12,
249,
8,
253,
255,
10,
},
{
0,
229,
215,
50,
179,
86,
100,
129,
123,
158,
172,
73,
200,
45,
31,
250,
},
{
0,
213,
183,
98,
115,
166,
196,
17,
230,
51,
81,
132,
149,
64,
34,
247,
},
{
0,
197,
151,
82,
51,
246,
164,
97,
102,
163,
241,
52,
85,
144,
194,
7,
},
{
0,
181,
119,
194,
238,
91,
153,
44,
193,
116,
182,
3,
47,
154,
88,
237,
},
{
0,
165,
87,
242,
174,
11,
249,
92,
65,
228,
22,
179,
239,
74,
184,
29,
},
{
0,
149,
55,
162,
110,
251,
89,
204,
220,
73,
235,
126,
178,
39,
133,
16,
},
{
0,
133,
23,
146,
46,
171,
57,
188,
92,
217,
75,
206,
114,
247,
101,
224,
},
{
0,
117,
234,
159,
201,
188,
35,
86,
143,
250,
101,
16,
70,
51,
172,
217,
},
{
0,
101,
202,
175,
137,
236,
67,
38,
15,
106,
197,
160,
134,
227,
76,
41,
},
{
0,
85,
170,
255,
73,
28,
227,
182,
146,
199,
56,
109,
219,
142,
113,
36,
},
{
0,
69,
138,
207,
9,
76,
131,
198,
18,
87,
152,
221,
27,
94,
145,
212,
},
{
0,
53,
106,
95,
212,
225,
190,
139,
181,
128,
223,
234,
97,
84,
11,
62,
},
{
0,
37,
74,
111,
148,
177,
222,
251,
53,
16,
127,
90,
161,
132,
235,
206,
},
{
0,
21,
42,
63,
84,
65,
126,
107,
168,
189,
130,
151,
252,
233,
214,
195,
},
{
0,
5,
10,
15,
20,
17,
30,
27,
40,
45,
34,
39,
60,
57,
54,
51,
},
{
0,
210,
185,
107,
111,
189,
214,
4,
222,
12,
103,
181,
177,
99,
8,
218,
},
{
0,
194,
153,
91,
47,
237,
182,
116,
94,
156,
199,
5,
113,
179,
232,
42,
},
{
0,
242,
249,
11,
239,
29,
22,
228,
195,
49,
58,
200,
44,
222,
213,
39,
},
{
0,
226,
217,
59,
175,
77,
118,
148,
67,
161,
154,
120,
236,
14,
53,
215,
},
{
0,
146,
57,
171,
114,
224,
75,
217,
228,
118,
221,
79,
150,
4,
175,
61,
},
{
0,
130,
25,
155,
50,
176,
43,
169,
100,
230,
125,
255,
86,
212,
79,
205,
},
{
0,
178,
121,
203,
242,
64,
139,
57,
249,
75,
128,
50,
11,
185,
114,
192,
},
{
0,
162,
89,
251,
178,
16,
235,
73,
121,
219,
32,
130,
203,
105,
146,
48,
},
{
0,
82,
164,
246,
85,
7,
241,
163,
170,
248,
14,
92,
255,
173,
91,
9,
},
{
0,
66,
132,
198,
21,
87,
145,
211,
42,
104,
174,
236,
63,
125,
187,
249,
},
{
0,
114,
228,
150,
213,
167,
49,
67,
183,
197,
83,
33,
98,
16,
134,
244,
},
{
0,
98,
196,
166,
149,
247,
81,
51,
55,
85,
243,
145,
162,
192,
102,
4,
},
{
0,
18,
36,
54,
72,
90,
108,
126,
144,
130,
180,
166,
216,
202,
252,
238,
},
{
0,
2,
4,
6,
8,
10,
12,
14,
16,
18,
20,
22,
24,
26,
28,
30,
},
{
0,
50,
100,
86,
200,
250,
172,
158,
141,
191,
233,
219,
69,
119,
33,
19,
},
{
0,
34,
68,
102,
136,
170,
204,
238,
13,
47,
73,
107,
133,
167,
193,
227,
},
{
0,
207,
131,
76,
27,
212,
152,
87,
54,
249,
181,
122,
45,
226,
174,
97,
},
{
0,
223,
163,
124,
91,
132,
248,
39,
182,
105,
21,
202,
237,
50,
78,
145,
},
{
0,
239,
195,
44,
155,
116,
88,
183,
43,
196,
232,
7,
176,
95,
115,
156,
},
{
0,
255,
227,
28,
219,
36,
56,
199,
171,
84,
72,
183,
112,
143,
147,
108,
},
{
0,
143,
3,
140,
6,
137,
5,
138,
12,
131,
15,
128,
10,
133,
9,
134,
},
{
0,
159,
35,
188,
70,
217,
101,
250,
140,
19,
175,
48,
202,
85,
233,
118,
},
{
0,
175,
67,
236,
134,
41,
197,
106,
17,
190,
82,
253,
151,
56,
212,
123,
},
{
0,
191,
99,
220,
198,
121,
165,
26,
145,
46,
242,
77,
87,
232,
52,
139,
},
{
0,
79,
158,
209,
33,
110,
191,
240,
66,
13,
220,
147,
99,
44,
253,
178,
},
{
0,
95,
190,
225,
97,
62,
223,
128,
194,
157,
124,
35,
163,
252,
29,
66,
},
{
0,
111,
222,
177,
161,
206,
127,
16,
95,
48,
129,
238,
254,
145,
32,
79,
},
{
0,
127,
254,
129,
225,
158,
31,
96,
223,
160,
33,
94,
62,
65,
192,
191,
},
{
0,
15,
30,
17,
60,
51,
34,
45,
120,
119,
102,
105,
68,
75,
90,
85,
},
{
0,
31,
62,
33,
124,
99,
66,
93,
248,
231,
198,
217,
132,
155,
186,
165,
},
{
0,
47,
94,
113,
188,
147,
226,
205,
101,
74,
59,
20,
217,
246,
135,
168,
},
{
0,
63,
126,
65,
252,
195,
130,
189,
229,
218,
155,
164,
25,
38,
103,
88,
},
{
0,
156,
37,
185,
74,
214,
111,
243,
148,
8,
177,
45,
222,
66,
251,
103,
},
{
0,
140,
5,
137,
10,
134,
15,
131,
20,
152,
17,
157,
30,
146,
27,
151,
},
{
0,
188,
101,
217,
202,
118,
175,
19,
137,
53,
236,
80,
67,
255,
38,
154,
},
{
0,
172,
69,
233,
138,
38,
207,
99,
9,
165,
76,
224,
131,
47,
198,
106,
},
{
0,
220,
165,
121,
87,
139,
242,
46,
174,
114,
11,
215,
249,
37,
92,
128,
},
{
0,
204,
133,
73,
23,
219,
146,
94,
46,
226,
171,
103,
57,
245,
188,
112,
},
{
0,
252,
229,
25,
215,
43,
50,
206,
179,
79,
86,
170,
100,
152,
129,
125,
},
{
0,
236,
197,
41,
151,
123,
82,
190,
51,
223,
246,
26,
164,
72,
97,
141,
},
{
0,
28,
56,
36,
112,
108,
72,
84,
224,
252,
216,
196,
144,
140,
168,
180,
},
{
0,
12,
24,
20,
48,
60,
40,
36,
96,
108,
120,
116,
80,
92,
72,
68,
},
{
0,
60,
120,
68,
240,
204,
136,
180,
253,
193,
133,
185,
13,
49,
117,
73,
},
{
0,
44,
88,
116,
176,
156,
232,
196,
125,
81,
37,
9,
205,
225,
149,
185,
},
{
0,
92,
184,
228,
109,
49,
213,
137,
218,
134,
98,
62,
183,
235,
15,
83,
},
{
0,
76,
152,
212,
45,
97,
181,
249,
90,
22,
194,
142,
119,
59,
239,
163,
},
{
0,
124,
248,
132,
237,
145,
21,
105,
199,
187,
63,
67,
42,
86,
210,
174,
},
{
0,
108,
216,
180,
173,
193,
117,
25,
71,
43,
159,
243,
234,
134,
50,
94,
},
{
0,
129,
31,
158,
62,
191,
33,
160,
124,
253,
99,
226,
66,
195,
93,
220,
},
{
0,
145,
63,
174,
126,
239,
65,
208,
252,
109,
195,
82,
130,
19,
189,
44,
},
{
0,
161,
95,
254,
190,
31,
225,
64,
97,
192,
62,
159,
223,
126,
128,
33,
},
{
0,
177,
127,
206,
254,
79,
129,
48,
225,
80,
158,
47,
31,
174,
96,
209,
},
{
0,
193,
159,
94,
35,
226,
188,
125,
70,
135,
217,
24,
101,
164,
250,
59,
},
{
0,
209,
191,
110,
99,
178,
220,
13,
198,
23,
121,
168,
165,
116,
26,
203,
},
{
0,
225,
223,
62,
163,
66,
124,
157,
91,
186,
132,
101,
248,
25,
39,
198,
},
{
0,
241,
255,
14,
227,
18,
28,
237,
219,
42,
36,
213,
56,
201,
199,
54,
},
{
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
},
{
0,
17,
34,
51,
68,
85,
102,
119,
136,
153,
170,
187,
204,
221,
238,
255,
},
{
0,
33,
66,
99,
132,
165,
198,
231,
21,
52,
87,
118,
145,
176,
211,
242,
},
{
0,
49,
98,
83,
196,
245,
166,
151,
149,
164,
247,
198,
81,
96,
51,
2,
},
{
0,
65,
130,
195,
25,
88,
155,
218,
50,
115,
176,
241,
43,
106,
169,
232,
},
{
0,
81,
162,
243,
89,
8,
251,
170,
178,
227,
16,
65,
235,
186,
73,
24,
},
{
0,
97,
194,
163,
153,
248,
91,
58,
47,
78,
237,
140,
182,
215,
116,
21,
},
{
0,
113,
226,
147,
217,
168,
59,
74,
175,
222,
77,
60,
118,
7,
148,
229,
},
{
0,
166,
81,
247,
162,
4,
243,
85,
89,
255,
8,
174,
251,
93,
170,
12,
},
{
0,
182,
113,
199,
226,
84,
147,
37,
217,
111,
168,
30,
59,
141,
74,
252,
},
{
0,
134,
17,
151,
34,
164,
51,
181,
68,
194,
85,
211,
102,
224,
119,
241,
},
{
0,
150,
49,
167,
98,
244,
83,
197,
196,
82,
245,
99,
166,
48,
151,
1,
},
{
0,
230,
209,
55,
191,
89,
110,
136,
99,
133,
178,
84,
220,
58,
13,
235,
},
{
0,
246,
241,
7,
255,
9,
14,
248,
227,
21,
18,
228,
28,
234,
237,
27,
},
{
0,
198,
145,
87,
63,
249,
174,
104,
126,
184,
239,
41,
65,
135,
208,
22,
},
{
0,
214,
177,
103,
127,
169,
206,
24,
254,
40,
79,
153,
129,
87,
48,
230,
},
{
0,
38,
76,
106,
152,
190,
212,
242,
45,
11,
97,
71,
181,
147,
249,
223,
},
{
0,
54,
108,
90,
216,
238,
180,
130,
173,
155,
193,
247,
117,
67,
25,
47,
},
{
0,
6,
12,
10,
24,
30,
20,
18,
48,
54,
60,
58,
40,
46,
36,
34,
},
{
0,
22,
44,
58,
88,
78,
116,
98,
176,
166,
156,
138,
232,
254,
196,
210,
},
{
0,
102,
204,
170,
133,
227,
73,
47,
23,
113,
219,
189,
146,
244,
94,
56,
},
{
0,
118,
236,
154,
197,
179,
41,
95,
151,
225,
123,
13,
82,
36,
190,
200,
},
{
0,
70,
140,
202,
5,
67,
137,
207,
10,
76,
134,
192,
15,
73,
131,
197,
},
{
0,
86,
172,
250,
69,
19,
233,
191,
138,
220,
38,
112,
207,
153,
99,
53,
},
{
0,
187,
107,
208,
214,
109,
189,
6,
177,
10,
218,
97,
103,
220,
12,
183,
},
{
0,
171,
75,
224,
150,
61,
221,
118,
49,
154,
122,
209,
167,
12,
236,
71,
},
{
0,
155,
43,
176,
86,
205,
125,
230,
172,
55,
135,
28,
250,
97,
209,
74,
},
{
0,
139,
11,
128,
22,
157,
29,
150,
44,
167,
39,
172,
58,
177,
49,
186,
},
{
0,
251,
235,
16,
203,
48,
32,
219,
139,
112,
96,
155,
64,
187,
171,
80,
},
{
0,
235,
203,
32,
139,
96,
64,
171,
11,
224,
192,
43,
128,
107,
75,
160,
},
{
0,
219,
171,
112,
75,
144,
224,
59,
150,
77,
61,
230,
221,
6,
118,
173,
},
{
0,
203,
139,
64,
11,
192,
128,
75,
22,
221,
157,
86,
29,
214,
150,
93,
},
{
0,
59,
118,
77,
236,
215,
154,
161,
197,
254,
179,
136,
41,
18,
95,
100,
},
{
0,
43,
86,
125,
172,
135,
250,
209,
69,
110,
19,
56,
233,
194,
191,
148,
},
{
0,
27,
54,
45,
108,
119,
90,
65,
216,
195,
238,
245,
180,
175,
130,
153,
},
{
0,
11,
22,
29,
44,
39,
58,
49,
88,
83,
78,
69,
116,
127,
98,
105,
},
{
0,
123,
246,
141,
241,
138,
7,
124,
255,
132,
9,
114,
14,
117,
248,
131,
},
{
0,
107,
214,
189,
177,
218,
103,
12,
127,
20,
169,
194,
206,
165,
24,
115,
},
{
0,
91,
182,
237,
113,
42,
199,
156,
226,
185,
84,
15,
147,
200,
37,
126,
},
{
0,
75,
150,
221,
49,
122,
167,
236,
98,
41,
244,
191,
83,
24,
197,
142,
},
};
} // namespace td