0235544d15e84847d8b007c01f742f55698782c4
[hashcat.git] / OpenCL / m06233.cl
1 /**
2  * Authors.....: Jens Steube <jens.steube@gmail.com>
3  *               Gabriele Gristina <matrix@hashcat.net>
4  *
5  * License.....: MIT
6  */
7
8 #define _WHIRLPOOL_
9
10 #include "inc_hash_constants.h"
11 #include "inc_vendor.cl"
12
13 #define DGST_R0 0
14 #define DGST_R1 1
15 #define DGST_R2 2
16 #define DGST_R3 3
17
18 #include "inc_hash_functions.cl"
19 #include "inc_types.cl"
20 #include "inc_common.cl"
21
22 #include "inc_cipher_aes256.cl"
23 #include "inc_cipher_twofish256.cl"
24 #include "inc_cipher_serpent256.cl"
25
26 #define R 10
27
28 __constant u32 Ch[8][256] =
29 {
30   {
31     0x18186018, 0x23238c23, 0xc6c63fc6, 0xe8e887e8,
32     0x87872687, 0xb8b8dab8, 0x01010401, 0x4f4f214f,
33     0x3636d836, 0xa6a6a2a6, 0xd2d26fd2, 0xf5f5f3f5,
34     0x7979f979, 0x6f6fa16f, 0x91917e91, 0x52525552,
35     0x60609d60, 0xbcbccabc, 0x9b9b569b, 0x8e8e028e,
36     0xa3a3b6a3, 0x0c0c300c, 0x7b7bf17b, 0x3535d435,
37     0x1d1d741d, 0xe0e0a7e0, 0xd7d77bd7, 0xc2c22fc2,
38     0x2e2eb82e, 0x4b4b314b, 0xfefedffe, 0x57574157,
39     0x15155415, 0x7777c177, 0x3737dc37, 0xe5e5b3e5,
40     0x9f9f469f, 0xf0f0e7f0, 0x4a4a354a, 0xdada4fda,
41     0x58587d58, 0xc9c903c9, 0x2929a429, 0x0a0a280a,
42     0xb1b1feb1, 0xa0a0baa0, 0x6b6bb16b, 0x85852e85,
43     0xbdbdcebd, 0x5d5d695d, 0x10104010, 0xf4f4f7f4,
44     0xcbcb0bcb, 0x3e3ef83e, 0x05051405, 0x67678167,
45     0xe4e4b7e4, 0x27279c27, 0x41411941, 0x8b8b168b,
46     0xa7a7a6a7, 0x7d7de97d, 0x95956e95, 0xd8d847d8,
47     0xfbfbcbfb, 0xeeee9fee, 0x7c7ced7c, 0x66668566,
48     0xdddd53dd, 0x17175c17, 0x47470147, 0x9e9e429e,
49     0xcaca0fca, 0x2d2db42d, 0xbfbfc6bf, 0x07071c07,
50     0xadad8ead, 0x5a5a755a, 0x83833683, 0x3333cc33,
51     0x63639163, 0x02020802, 0xaaaa92aa, 0x7171d971,
52     0xc8c807c8, 0x19196419, 0x49493949, 0xd9d943d9,
53     0xf2f2eff2, 0xe3e3abe3, 0x5b5b715b, 0x88881a88,
54     0x9a9a529a, 0x26269826, 0x3232c832, 0xb0b0fab0,
55     0xe9e983e9, 0x0f0f3c0f, 0xd5d573d5, 0x80803a80,
56     0xbebec2be, 0xcdcd13cd, 0x3434d034, 0x48483d48,
57     0xffffdbff, 0x7a7af57a, 0x90907a90, 0x5f5f615f,
58     0x20208020, 0x6868bd68, 0x1a1a681a, 0xaeae82ae,
59     0xb4b4eab4, 0x54544d54, 0x93937693, 0x22228822,
60     0x64648d64, 0xf1f1e3f1, 0x7373d173, 0x12124812,
61     0x40401d40, 0x08082008, 0xc3c32bc3, 0xecec97ec,
62     0xdbdb4bdb, 0xa1a1bea1, 0x8d8d0e8d, 0x3d3df43d,
63     0x97976697, 0x00000000, 0xcfcf1bcf, 0x2b2bac2b,
64     0x7676c576, 0x82823282, 0xd6d67fd6, 0x1b1b6c1b,
65     0xb5b5eeb5, 0xafaf86af, 0x6a6ab56a, 0x50505d50,
66     0x45450945, 0xf3f3ebf3, 0x3030c030, 0xefef9bef,
67     0x3f3ffc3f, 0x55554955, 0xa2a2b2a2, 0xeaea8fea,
68     0x65658965, 0xbabad2ba, 0x2f2fbc2f, 0xc0c027c0,
69     0xdede5fde, 0x1c1c701c, 0xfdfdd3fd, 0x4d4d294d,
70     0x92927292, 0x7575c975, 0x06061806, 0x8a8a128a,
71     0xb2b2f2b2, 0xe6e6bfe6, 0x0e0e380e, 0x1f1f7c1f,
72     0x62629562, 0xd4d477d4, 0xa8a89aa8, 0x96966296,
73     0xf9f9c3f9, 0xc5c533c5, 0x25259425, 0x59597959,
74     0x84842a84, 0x7272d572, 0x3939e439, 0x4c4c2d4c,
75     0x5e5e655e, 0x7878fd78, 0x3838e038, 0x8c8c0a8c,
76     0xd1d163d1, 0xa5a5aea5, 0xe2e2afe2, 0x61619961,
77     0xb3b3f6b3, 0x21218421, 0x9c9c4a9c, 0x1e1e781e,
78     0x43431143, 0xc7c73bc7, 0xfcfcd7fc, 0x04041004,
79     0x51515951, 0x99995e99, 0x6d6da96d, 0x0d0d340d,
80     0xfafacffa, 0xdfdf5bdf, 0x7e7ee57e, 0x24249024,
81     0x3b3bec3b, 0xabab96ab, 0xcece1fce, 0x11114411,
82     0x8f8f068f, 0x4e4e254e, 0xb7b7e6b7, 0xebeb8beb,
83     0x3c3cf03c, 0x81813e81, 0x94946a94, 0xf7f7fbf7,
84     0xb9b9deb9, 0x13134c13, 0x2c2cb02c, 0xd3d36bd3,
85     0xe7e7bbe7, 0x6e6ea56e, 0xc4c437c4, 0x03030c03,
86     0x56564556, 0x44440d44, 0x7f7fe17f, 0xa9a99ea9,
87     0x2a2aa82a, 0xbbbbd6bb, 0xc1c123c1, 0x53535153,
88     0xdcdc57dc, 0x0b0b2c0b, 0x9d9d4e9d, 0x6c6cad6c,
89     0x3131c431, 0x7474cd74, 0xf6f6fff6, 0x46460546,
90     0xacac8aac, 0x89891e89, 0x14145014, 0xe1e1a3e1,
91     0x16165816, 0x3a3ae83a, 0x6969b969, 0x09092409,
92     0x7070dd70, 0xb6b6e2b6, 0xd0d067d0, 0xeded93ed,
93     0xcccc17cc, 0x42421542, 0x98985a98, 0xa4a4aaa4,
94     0x2828a028, 0x5c5c6d5c, 0xf8f8c7f8, 0x86862286,
95   },
96   {
97     0xd8181860, 0x2623238c, 0xb8c6c63f, 0xfbe8e887,
98     0xcb878726, 0x11b8b8da, 0x09010104, 0x0d4f4f21,
99     0x9b3636d8, 0xffa6a6a2, 0x0cd2d26f, 0x0ef5f5f3,
100     0x967979f9, 0x306f6fa1, 0x6d91917e, 0xf8525255,
101     0x4760609d, 0x35bcbcca, 0x379b9b56, 0x8a8e8e02,
102     0xd2a3a3b6, 0x6c0c0c30, 0x847b7bf1, 0x803535d4,
103     0xf51d1d74, 0xb3e0e0a7, 0x21d7d77b, 0x9cc2c22f,
104     0x432e2eb8, 0x294b4b31, 0x5dfefedf, 0xd5575741,
105     0xbd151554, 0xe87777c1, 0x923737dc, 0x9ee5e5b3,
106     0x139f9f46, 0x23f0f0e7, 0x204a4a35, 0x44dada4f,
107     0xa258587d, 0xcfc9c903, 0x7c2929a4, 0x5a0a0a28,
108     0x50b1b1fe, 0xc9a0a0ba, 0x146b6bb1, 0xd985852e,
109     0x3cbdbdce, 0x8f5d5d69, 0x90101040, 0x07f4f4f7,
110     0xddcbcb0b, 0xd33e3ef8, 0x2d050514, 0x78676781,
111     0x97e4e4b7, 0x0227279c, 0x73414119, 0xa78b8b16,
112     0xf6a7a7a6, 0xb27d7de9, 0x4995956e, 0x56d8d847,
113     0x70fbfbcb, 0xcdeeee9f, 0xbb7c7ced, 0x71666685,
114     0x7bdddd53, 0xaf17175c, 0x45474701, 0x1a9e9e42,
115     0xd4caca0f, 0x582d2db4, 0x2ebfbfc6, 0x3f07071c,
116     0xacadad8e, 0xb05a5a75, 0xef838336, 0xb63333cc,
117     0x5c636391, 0x12020208, 0x93aaaa92, 0xde7171d9,
118     0xc6c8c807, 0xd1191964, 0x3b494939, 0x5fd9d943,
119     0x31f2f2ef, 0xa8e3e3ab, 0xb95b5b71, 0xbc88881a,
120     0x3e9a9a52, 0x0b262698, 0xbf3232c8, 0x59b0b0fa,
121     0xf2e9e983, 0x770f0f3c, 0x33d5d573, 0xf480803a,
122     0x27bebec2, 0xebcdcd13, 0x893434d0, 0x3248483d,
123     0x54ffffdb, 0x8d7a7af5, 0x6490907a, 0x9d5f5f61,
124     0x3d202080, 0x0f6868bd, 0xca1a1a68, 0xb7aeae82,
125     0x7db4b4ea, 0xce54544d, 0x7f939376, 0x2f222288,
126     0x6364648d, 0x2af1f1e3, 0xcc7373d1, 0x82121248,
127     0x7a40401d, 0x48080820, 0x95c3c32b, 0xdfecec97,
128     0x4ddbdb4b, 0xc0a1a1be, 0x918d8d0e, 0xc83d3df4,
129     0x5b979766, 0x00000000, 0xf9cfcf1b, 0x6e2b2bac,
130     0xe17676c5, 0xe6828232, 0x28d6d67f, 0xc31b1b6c,
131     0x74b5b5ee, 0xbeafaf86, 0x1d6a6ab5, 0xea50505d,
132     0x57454509, 0x38f3f3eb, 0xad3030c0, 0xc4efef9b,
133     0xda3f3ffc, 0xc7555549, 0xdba2a2b2, 0xe9eaea8f,
134     0x6a656589, 0x03babad2, 0x4a2f2fbc, 0x8ec0c027,
135     0x60dede5f, 0xfc1c1c70, 0x46fdfdd3, 0x1f4d4d29,
136     0x76929272, 0xfa7575c9, 0x36060618, 0xae8a8a12,
137     0x4bb2b2f2, 0x85e6e6bf, 0x7e0e0e38, 0xe71f1f7c,
138     0x55626295, 0x3ad4d477, 0x81a8a89a, 0x52969662,
139     0x62f9f9c3, 0xa3c5c533, 0x10252594, 0xab595979,
140     0xd084842a, 0xc57272d5, 0xec3939e4, 0x164c4c2d,
141     0x945e5e65, 0x9f7878fd, 0xe53838e0, 0x988c8c0a,
142     0x17d1d163, 0xe4a5a5ae, 0xa1e2e2af, 0x4e616199,
143     0x42b3b3f6, 0x34212184, 0x089c9c4a, 0xee1e1e78,
144     0x61434311, 0xb1c7c73b, 0x4ffcfcd7, 0x24040410,
145     0xe3515159, 0x2599995e, 0x226d6da9, 0x650d0d34,
146     0x79fafacf, 0x69dfdf5b, 0xa97e7ee5, 0x19242490,
147     0xfe3b3bec, 0x9aabab96, 0xf0cece1f, 0x99111144,
148     0x838f8f06, 0x044e4e25, 0x66b7b7e6, 0xe0ebeb8b,
149     0xc13c3cf0, 0xfd81813e, 0x4094946a, 0x1cf7f7fb,
150     0x18b9b9de, 0x8b13134c, 0x512c2cb0, 0x05d3d36b,
151     0x8ce7e7bb, 0x396e6ea5, 0xaac4c437, 0x1b03030c,
152     0xdc565645, 0x5e44440d, 0xa07f7fe1, 0x88a9a99e,
153     0x672a2aa8, 0x0abbbbd6, 0x87c1c123, 0xf1535351,
154     0x72dcdc57, 0x530b0b2c, 0x019d9d4e, 0x2b6c6cad,
155     0xa43131c4, 0xf37474cd, 0x15f6f6ff, 0x4c464605,
156     0xa5acac8a, 0xb589891e, 0xb4141450, 0xbae1e1a3,
157     0xa6161658, 0xf73a3ae8, 0x066969b9, 0x41090924,
158     0xd77070dd, 0x6fb6b6e2, 0x1ed0d067, 0xd6eded93,
159     0xe2cccc17, 0x68424215, 0x2c98985a, 0xeda4a4aa,
160     0x752828a0, 0x865c5c6d, 0x6bf8f8c7, 0xc2868622,
161   },
162   {
163     0x30d81818, 0x46262323, 0x91b8c6c6, 0xcdfbe8e8,
164     0x13cb8787, 0x6d11b8b8, 0x02090101, 0x9e0d4f4f,
165     0x6c9b3636, 0x51ffa6a6, 0xb90cd2d2, 0xf70ef5f5,
166     0xf2967979, 0xde306f6f, 0x3f6d9191, 0xa4f85252,
167     0xc0476060, 0x6535bcbc, 0x2b379b9b, 0x018a8e8e,
168     0x5bd2a3a3, 0x186c0c0c, 0xf6847b7b, 0x6a803535,
169     0x3af51d1d, 0xddb3e0e0, 0xb321d7d7, 0x999cc2c2,
170     0x5c432e2e, 0x96294b4b, 0xe15dfefe, 0xaed55757,
171     0x2abd1515, 0xeee87777, 0x6e923737, 0xd79ee5e5,
172     0x23139f9f, 0xfd23f0f0, 0x94204a4a, 0xa944dada,
173     0xb0a25858, 0x8fcfc9c9, 0x527c2929, 0x145a0a0a,
174     0x7f50b1b1, 0x5dc9a0a0, 0xd6146b6b, 0x17d98585,
175     0x673cbdbd, 0xba8f5d5d, 0x20901010, 0xf507f4f4,
176     0x8bddcbcb, 0x7cd33e3e, 0x0a2d0505, 0xce786767,
177     0xd597e4e4, 0x4e022727, 0x82734141, 0x0ba78b8b,
178     0x53f6a7a7, 0xfab27d7d, 0x37499595, 0xad56d8d8,
179     0xeb70fbfb, 0xc1cdeeee, 0xf8bb7c7c, 0xcc716666,
180     0xa77bdddd, 0x2eaf1717, 0x8e454747, 0x211a9e9e,
181     0x89d4caca, 0x5a582d2d, 0x632ebfbf, 0x0e3f0707,
182     0x47acadad, 0xb4b05a5a, 0x1bef8383, 0x66b63333,
183     0xc65c6363, 0x04120202, 0x4993aaaa, 0xe2de7171,
184     0x8dc6c8c8, 0x32d11919, 0x923b4949, 0xaf5fd9d9,
185     0xf931f2f2, 0xdba8e3e3, 0xb6b95b5b, 0x0dbc8888,
186     0x293e9a9a, 0x4c0b2626, 0x64bf3232, 0x7d59b0b0,
187     0xcff2e9e9, 0x1e770f0f, 0xb733d5d5, 0x1df48080,
188     0x6127bebe, 0x87ebcdcd, 0x68893434, 0x90324848,
189     0xe354ffff, 0xf48d7a7a, 0x3d649090, 0xbe9d5f5f,
190     0x403d2020, 0xd00f6868, 0x34ca1a1a, 0x41b7aeae,
191     0x757db4b4, 0xa8ce5454, 0x3b7f9393, 0x442f2222,
192     0xc8636464, 0xff2af1f1, 0xe6cc7373, 0x24821212,
193     0x807a4040, 0x10480808, 0x9b95c3c3, 0xc5dfecec,
194     0xab4ddbdb, 0x5fc0a1a1, 0x07918d8d, 0x7ac83d3d,
195     0x335b9797, 0x00000000, 0x83f9cfcf, 0x566e2b2b,
196     0xece17676, 0x19e68282, 0xb128d6d6, 0x36c31b1b,
197     0x7774b5b5, 0x43beafaf, 0xd41d6a6a, 0xa0ea5050,
198     0x8a574545, 0xfb38f3f3, 0x60ad3030, 0xc3c4efef,
199     0x7eda3f3f, 0xaac75555, 0x59dba2a2, 0xc9e9eaea,
200     0xca6a6565, 0x6903baba, 0x5e4a2f2f, 0x9d8ec0c0,
201     0xa160dede, 0x38fc1c1c, 0xe746fdfd, 0x9a1f4d4d,
202     0x39769292, 0xeafa7575, 0x0c360606, 0x09ae8a8a,
203     0x794bb2b2, 0xd185e6e6, 0x1c7e0e0e, 0x3ee71f1f,
204     0xc4556262, 0xb53ad4d4, 0x4d81a8a8, 0x31529696,
205     0xef62f9f9, 0x97a3c5c5, 0x4a102525, 0xb2ab5959,
206     0x15d08484, 0xe4c57272, 0x72ec3939, 0x98164c4c,
207     0xbc945e5e, 0xf09f7878, 0x70e53838, 0x05988c8c,
208     0xbf17d1d1, 0x57e4a5a5, 0xd9a1e2e2, 0xc24e6161,
209     0x7b42b3b3, 0x42342121, 0x25089c9c, 0x3cee1e1e,
210     0x86614343, 0x93b1c7c7, 0xe54ffcfc, 0x08240404,
211     0xa2e35151, 0x2f259999, 0xda226d6d, 0x1a650d0d,
212     0xe979fafa, 0xa369dfdf, 0xfca97e7e, 0x48192424,
213     0x76fe3b3b, 0x4b9aabab, 0x81f0cece, 0x22991111,
214     0x03838f8f, 0x9c044e4e, 0x7366b7b7, 0xcbe0ebeb,
215     0x78c13c3c, 0x1ffd8181, 0x35409494, 0xf31cf7f7,
216     0x6f18b9b9, 0x268b1313, 0x58512c2c, 0xbb05d3d3,
217     0xd38ce7e7, 0xdc396e6e, 0x95aac4c4, 0x061b0303,
218     0xacdc5656, 0x885e4444, 0xfea07f7f, 0x4f88a9a9,
219     0x54672a2a, 0x6b0abbbb, 0x9f87c1c1, 0xa6f15353,
220     0xa572dcdc, 0x16530b0b, 0x27019d9d, 0xd82b6c6c,
221     0x62a43131, 0xe8f37474, 0xf115f6f6, 0x8c4c4646,
222     0x45a5acac, 0x0fb58989, 0x28b41414, 0xdfbae1e1,
223     0x2ca61616, 0x74f73a3a, 0xd2066969, 0x12410909,
224     0xe0d77070, 0x716fb6b6, 0xbd1ed0d0, 0xc7d6eded,
225     0x85e2cccc, 0x84684242, 0x2d2c9898, 0x55eda4a4,
226     0x50752828, 0xb8865c5c, 0xed6bf8f8, 0x11c28686,
227   },
228   {
229     0x7830d818, 0xaf462623, 0xf991b8c6, 0x6fcdfbe8,
230     0xa113cb87, 0x626d11b8, 0x05020901, 0x6e9e0d4f,
231     0xee6c9b36, 0x0451ffa6, 0xbdb90cd2, 0x06f70ef5,
232     0x80f29679, 0xcede306f, 0xef3f6d91, 0x07a4f852,
233     0xfdc04760, 0x766535bc, 0xcd2b379b, 0x8c018a8e,
234     0x155bd2a3, 0x3c186c0c, 0x8af6847b, 0xe16a8035,
235     0x693af51d, 0x47ddb3e0, 0xacb321d7, 0xed999cc2,
236     0x965c432e, 0x7a96294b, 0x21e15dfe, 0x16aed557,
237     0x412abd15, 0xb6eee877, 0xeb6e9237, 0x56d79ee5,
238     0xd923139f, 0x17fd23f0, 0x7f94204a, 0x95a944da,
239     0x25b0a258, 0xca8fcfc9, 0x8d527c29, 0x22145a0a,
240     0x4f7f50b1, 0x1a5dc9a0, 0xdad6146b, 0xab17d985,
241     0x73673cbd, 0x34ba8f5d, 0x50209010, 0x03f507f4,
242     0xc08bddcb, 0xc67cd33e, 0x110a2d05, 0xe6ce7867,
243     0x53d597e4, 0xbb4e0227, 0x58827341, 0x9d0ba78b,
244     0x0153f6a7, 0x94fab27d, 0xfb374995, 0x9fad56d8,
245     0x30eb70fb, 0x71c1cdee, 0x91f8bb7c, 0xe3cc7166,
246     0x8ea77bdd, 0x4b2eaf17, 0x468e4547, 0xdc211a9e,
247     0xc589d4ca, 0x995a582d, 0x79632ebf, 0x1b0e3f07,
248     0x2347acad, 0x2fb4b05a, 0xb51bef83, 0xff66b633,
249     0xf2c65c63, 0x0a041202, 0x384993aa, 0xa8e2de71,
250     0xcf8dc6c8, 0x7d32d119, 0x70923b49, 0x9aaf5fd9,
251     0x1df931f2, 0x48dba8e3, 0x2ab6b95b, 0x920dbc88,
252     0xc8293e9a, 0xbe4c0b26, 0xfa64bf32, 0x4a7d59b0,
253     0x6acff2e9, 0x331e770f, 0xa6b733d5, 0xba1df480,
254     0x7c6127be, 0xde87ebcd, 0xe4688934, 0x75903248,
255     0x24e354ff, 0x8ff48d7a, 0xea3d6490, 0x3ebe9d5f,
256     0xa0403d20, 0xd5d00f68, 0x7234ca1a, 0x2c41b7ae,
257     0x5e757db4, 0x19a8ce54, 0xe53b7f93, 0xaa442f22,
258     0xe9c86364, 0x12ff2af1, 0xa2e6cc73, 0x5a248212,
259     0x5d807a40, 0x28104808, 0xe89b95c3, 0x7bc5dfec,
260     0x90ab4ddb, 0x1f5fc0a1, 0x8307918d, 0xc97ac83d,
261     0xf1335b97, 0x00000000, 0xd483f9cf, 0x87566e2b,
262     0xb3ece176, 0xb019e682, 0xa9b128d6, 0x7736c31b,
263     0x5b7774b5, 0x2943beaf, 0xdfd41d6a, 0x0da0ea50,
264     0x4c8a5745, 0x18fb38f3, 0xf060ad30, 0x74c3c4ef,
265     0xc37eda3f, 0x1caac755, 0x1059dba2, 0x65c9e9ea,
266     0xecca6a65, 0x686903ba, 0x935e4a2f, 0xe79d8ec0,
267     0x81a160de, 0x6c38fc1c, 0x2ee746fd, 0x649a1f4d,
268     0xe0397692, 0xbceafa75, 0x1e0c3606, 0x9809ae8a,
269     0x40794bb2, 0x59d185e6, 0x361c7e0e, 0x633ee71f,
270     0xf7c45562, 0xa3b53ad4, 0x324d81a8, 0xf4315296,
271     0x3aef62f9, 0xf697a3c5, 0xb14a1025, 0x20b2ab59,
272     0xae15d084, 0xa7e4c572, 0xdd72ec39, 0x6198164c,
273     0x3bbc945e, 0x85f09f78, 0xd870e538, 0x8605988c,
274     0xb2bf17d1, 0x0b57e4a5, 0x4dd9a1e2, 0xf8c24e61,
275     0x457b42b3, 0xa5423421, 0xd625089c, 0x663cee1e,
276     0x52866143, 0xfc93b1c7, 0x2be54ffc, 0x14082404,
277     0x08a2e351, 0xc72f2599, 0xc4da226d, 0x391a650d,
278     0x35e979fa, 0x84a369df, 0x9bfca97e, 0xb4481924,
279     0xd776fe3b, 0x3d4b9aab, 0xd181f0ce, 0x55229911,
280     0x8903838f, 0x6b9c044e, 0x517366b7, 0x60cbe0eb,
281     0xcc78c13c, 0xbf1ffd81, 0xfe354094, 0x0cf31cf7,
282     0x676f18b9, 0x5f268b13, 0x9c58512c, 0xb8bb05d3,
283     0x5cd38ce7, 0xcbdc396e, 0xf395aac4, 0x0f061b03,
284     0x13acdc56, 0x49885e44, 0x9efea07f, 0x374f88a9,
285     0x8254672a, 0x6d6b0abb, 0xe29f87c1, 0x02a6f153,
286     0x8ba572dc, 0x2716530b, 0xd327019d, 0xc1d82b6c,
287     0xf562a431, 0xb9e8f374, 0x09f115f6, 0x438c4c46,
288     0x2645a5ac, 0x970fb589, 0x4428b414, 0x42dfbae1,
289     0x4e2ca616, 0xd274f73a, 0xd0d20669, 0x2d124109,
290     0xade0d770, 0x54716fb6, 0xb7bd1ed0, 0x7ec7d6ed,
291     0xdb85e2cc, 0x57846842, 0xc22d2c98, 0x0e55eda4,
292     0x88507528, 0x31b8865c, 0x3fed6bf8, 0xa411c286,
293   },
294   {
295     0xc07830d8, 0x05af4626, 0x7ef991b8, 0x136fcdfb,
296     0x4ca113cb, 0xa9626d11, 0x08050209, 0x426e9e0d,
297     0xadee6c9b, 0x590451ff, 0xdebdb90c, 0xfb06f70e,
298     0xef80f296, 0x5fcede30, 0xfcef3f6d, 0xaa07a4f8,
299     0x27fdc047, 0x89766535, 0xaccd2b37, 0x048c018a,
300     0x71155bd2, 0x603c186c, 0xff8af684, 0xb5e16a80,
301     0xe8693af5, 0x5347ddb3, 0xf6acb321, 0x5eed999c,
302     0x6d965c43, 0x627a9629, 0xa321e15d, 0x8216aed5,
303     0xa8412abd, 0x9fb6eee8, 0xa5eb6e92, 0x7b56d79e,
304     0x8cd92313, 0xd317fd23, 0x6a7f9420, 0x9e95a944,
305     0xfa25b0a2, 0x06ca8fcf, 0x558d527c, 0x5022145a,
306     0xe14f7f50, 0x691a5dc9, 0x7fdad614, 0x5cab17d9,
307     0x8173673c, 0xd234ba8f, 0x80502090, 0xf303f507,
308     0x16c08bdd, 0xedc67cd3, 0x28110a2d, 0x1fe6ce78,
309     0x7353d597, 0x25bb4e02, 0x32588273, 0x2c9d0ba7,
310     0x510153f6, 0xcf94fab2, 0xdcfb3749, 0x8e9fad56,
311     0x8b30eb70, 0x2371c1cd, 0xc791f8bb, 0x17e3cc71,
312     0xa68ea77b, 0xb84b2eaf, 0x02468e45, 0x84dc211a,
313     0x1ec589d4, 0x75995a58, 0x9179632e, 0x381b0e3f,
314     0x012347ac, 0xea2fb4b0, 0x6cb51bef, 0x85ff66b6,
315     0x3ff2c65c, 0x100a0412, 0x39384993, 0xafa8e2de,
316     0x0ecf8dc6, 0xc87d32d1, 0x7270923b, 0x869aaf5f,
317     0xc31df931, 0x4b48dba8, 0xe22ab6b9, 0x34920dbc,
318     0xa4c8293e, 0x2dbe4c0b, 0x8dfa64bf, 0xe94a7d59,
319     0x1b6acff2, 0x78331e77, 0xe6a6b733, 0x74ba1df4,
320     0x997c6127, 0x26de87eb, 0xbde46889, 0x7a759032,
321     0xab24e354, 0xf78ff48d, 0xf4ea3d64, 0xc23ebe9d,
322     0x1da0403d, 0x67d5d00f, 0xd07234ca, 0x192c41b7,
323     0xc95e757d, 0x9a19a8ce, 0xece53b7f, 0x0daa442f,
324     0x07e9c863, 0xdb12ff2a, 0xbfa2e6cc, 0x905a2482,
325     0x3a5d807a, 0x40281048, 0x56e89b95, 0x337bc5df,
326     0x9690ab4d, 0x611f5fc0, 0x1c830791, 0xf5c97ac8,
327     0xccf1335b, 0x00000000, 0x36d483f9, 0x4587566e,
328     0x97b3ece1, 0x64b019e6, 0xfea9b128, 0xd87736c3,
329     0xc15b7774, 0x112943be, 0x77dfd41d, 0xba0da0ea,
330     0x124c8a57, 0xcb18fb38, 0x9df060ad, 0x2b74c3c4,
331     0xe5c37eda, 0x921caac7, 0x791059db, 0x0365c9e9,
332     0x0fecca6a, 0xb9686903, 0x65935e4a, 0x4ee79d8e,
333     0xbe81a160, 0xe06c38fc, 0xbb2ee746, 0x52649a1f,
334     0xe4e03976, 0x8fbceafa, 0x301e0c36, 0x249809ae,
335     0xf940794b, 0x6359d185, 0x70361c7e, 0xf8633ee7,
336     0x37f7c455, 0xeea3b53a, 0x29324d81, 0xc4f43152,
337     0x9b3aef62, 0x66f697a3, 0x35b14a10, 0xf220b2ab,
338     0x54ae15d0, 0xb7a7e4c5, 0xd5dd72ec, 0x5a619816,
339     0xca3bbc94, 0xe785f09f, 0xddd870e5, 0x14860598,
340     0xc6b2bf17, 0x410b57e4, 0x434dd9a1, 0x2ff8c24e,
341     0xf1457b42, 0x15a54234, 0x94d62508, 0xf0663cee,
342     0x22528661, 0x76fc93b1, 0xb32be54f, 0x20140824,
343     0xb208a2e3, 0xbcc72f25, 0x4fc4da22, 0x68391a65,
344     0x8335e979, 0xb684a369, 0xd79bfca9, 0x3db44819,
345     0xc5d776fe, 0x313d4b9a, 0x3ed181f0, 0x88552299,
346     0x0c890383, 0x4a6b9c04, 0xd1517366, 0x0b60cbe0,
347     0xfdcc78c1, 0x7cbf1ffd, 0xd4fe3540, 0xeb0cf31c,
348     0xa1676f18, 0x985f268b, 0x7d9c5851, 0xd6b8bb05,
349     0x6b5cd38c, 0x57cbdc39, 0x6ef395aa, 0x180f061b,
350     0x8a13acdc, 0x1a49885e, 0xdf9efea0, 0x21374f88,
351     0x4d825467, 0xb16d6b0a, 0x46e29f87, 0xa202a6f1,
352     0xae8ba572, 0x58271653, 0x9cd32701, 0x47c1d82b,
353     0x95f562a4, 0x87b9e8f3, 0xe309f115, 0x0a438c4c,
354     0x092645a5, 0x3c970fb5, 0xa04428b4, 0x5b42dfba,
355     0xb04e2ca6, 0xcdd274f7, 0x6fd0d206, 0x482d1241,
356     0xa7ade0d7, 0xd954716f, 0xceb7bd1e, 0x3b7ec7d6,
357     0x2edb85e2, 0x2a578468, 0xb4c22d2c, 0x490e55ed,
358     0x5d885075, 0xda31b886, 0x933fed6b, 0x44a411c2,
359   },
360   {
361     0x18c07830, 0x2305af46, 0xc67ef991, 0xe8136fcd,
362     0x874ca113, 0xb8a9626d, 0x01080502, 0x4f426e9e,
363     0x36adee6c, 0xa6590451, 0xd2debdb9, 0xf5fb06f7,
364     0x79ef80f2, 0x6f5fcede, 0x91fcef3f, 0x52aa07a4,
365     0x6027fdc0, 0xbc897665, 0x9baccd2b, 0x8e048c01,
366     0xa371155b, 0x0c603c18, 0x7bff8af6, 0x35b5e16a,
367     0x1de8693a, 0xe05347dd, 0xd7f6acb3, 0xc25eed99,
368     0x2e6d965c, 0x4b627a96, 0xfea321e1, 0x578216ae,
369     0x15a8412a, 0x779fb6ee, 0x37a5eb6e, 0xe57b56d7,
370     0x9f8cd923, 0xf0d317fd, 0x4a6a7f94, 0xda9e95a9,
371     0x58fa25b0, 0xc906ca8f, 0x29558d52, 0x0a502214,
372     0xb1e14f7f, 0xa0691a5d, 0x6b7fdad6, 0x855cab17,
373     0xbd817367, 0x5dd234ba, 0x10805020, 0xf4f303f5,
374     0xcb16c08b, 0x3eedc67c, 0x0528110a, 0x671fe6ce,
375     0xe47353d5, 0x2725bb4e, 0x41325882, 0x8b2c9d0b,
376     0xa7510153, 0x7dcf94fa, 0x95dcfb37, 0xd88e9fad,
377     0xfb8b30eb, 0xee2371c1, 0x7cc791f8, 0x6617e3cc,
378     0xdda68ea7, 0x17b84b2e, 0x4702468e, 0x9e84dc21,
379     0xca1ec589, 0x2d75995a, 0xbf917963, 0x07381b0e,
380     0xad012347, 0x5aea2fb4, 0x836cb51b, 0x3385ff66,
381     0x633ff2c6, 0x02100a04, 0xaa393849, 0x71afa8e2,
382     0xc80ecf8d, 0x19c87d32, 0x49727092, 0xd9869aaf,
383     0xf2c31df9, 0xe34b48db, 0x5be22ab6, 0x8834920d,
384     0x9aa4c829, 0x262dbe4c, 0x328dfa64, 0xb0e94a7d,
385     0xe91b6acf, 0x0f78331e, 0xd5e6a6b7, 0x8074ba1d,
386     0xbe997c61, 0xcd26de87, 0x34bde468, 0x487a7590,
387     0xffab24e3, 0x7af78ff4, 0x90f4ea3d, 0x5fc23ebe,
388     0x201da040, 0x6867d5d0, 0x1ad07234, 0xae192c41,
389     0xb4c95e75, 0x549a19a8, 0x93ece53b, 0x220daa44,
390     0x6407e9c8, 0xf1db12ff, 0x73bfa2e6, 0x12905a24,
391     0x403a5d80, 0x08402810, 0xc356e89b, 0xec337bc5,
392     0xdb9690ab, 0xa1611f5f, 0x8d1c8307, 0x3df5c97a,
393     0x97ccf133, 0x00000000, 0xcf36d483, 0x2b458756,
394     0x7697b3ec, 0x8264b019, 0xd6fea9b1, 0x1bd87736,
395     0xb5c15b77, 0xaf112943, 0x6a77dfd4, 0x50ba0da0,
396     0x45124c8a, 0xf3cb18fb, 0x309df060, 0xef2b74c3,
397     0x3fe5c37e, 0x55921caa, 0xa2791059, 0xea0365c9,
398     0x650fecca, 0xbab96869, 0x2f65935e, 0xc04ee79d,
399     0xdebe81a1, 0x1ce06c38, 0xfdbb2ee7, 0x4d52649a,
400     0x92e4e039, 0x758fbcea, 0x06301e0c, 0x8a249809,
401     0xb2f94079, 0xe66359d1, 0x0e70361c, 0x1ff8633e,
402     0x6237f7c4, 0xd4eea3b5, 0xa829324d, 0x96c4f431,
403     0xf99b3aef, 0xc566f697, 0x2535b14a, 0x59f220b2,
404     0x8454ae15, 0x72b7a7e4, 0x39d5dd72, 0x4c5a6198,
405     0x5eca3bbc, 0x78e785f0, 0x38ddd870, 0x8c148605,
406     0xd1c6b2bf, 0xa5410b57, 0xe2434dd9, 0x612ff8c2,
407     0xb3f1457b, 0x2115a542, 0x9c94d625, 0x1ef0663c,
408     0x43225286, 0xc776fc93, 0xfcb32be5, 0x04201408,
409     0x51b208a2, 0x99bcc72f, 0x6d4fc4da, 0x0d68391a,
410     0xfa8335e9, 0xdfb684a3, 0x7ed79bfc, 0x243db448,
411     0x3bc5d776, 0xab313d4b, 0xce3ed181, 0x11885522,
412     0x8f0c8903, 0x4e4a6b9c, 0xb7d15173, 0xeb0b60cb,
413     0x3cfdcc78, 0x817cbf1f, 0x94d4fe35, 0xf7eb0cf3,
414     0xb9a1676f, 0x13985f26, 0x2c7d9c58, 0xd3d6b8bb,
415     0xe76b5cd3, 0x6e57cbdc, 0xc46ef395, 0x03180f06,
416     0x568a13ac, 0x441a4988, 0x7fdf9efe, 0xa921374f,
417     0x2a4d8254, 0xbbb16d6b, 0xc146e29f, 0x53a202a6,
418     0xdcae8ba5, 0x0b582716, 0x9d9cd327, 0x6c47c1d8,
419     0x3195f562, 0x7487b9e8, 0xf6e309f1, 0x460a438c,
420     0xac092645, 0x893c970f, 0x14a04428, 0xe15b42df,
421     0x16b04e2c, 0x3acdd274, 0x696fd0d2, 0x09482d12,
422     0x70a7ade0, 0xb6d95471, 0xd0ceb7bd, 0xed3b7ec7,
423     0xcc2edb85, 0x422a5784, 0x98b4c22d, 0xa4490e55,
424     0x285d8850, 0x5cda31b8, 0xf8933fed, 0x8644a411,
425   },
426   {
427     0x6018c078, 0x8c2305af, 0x3fc67ef9, 0x87e8136f,
428     0x26874ca1, 0xdab8a962, 0x04010805, 0x214f426e,
429     0xd836adee, 0xa2a65904, 0x6fd2debd, 0xf3f5fb06,
430     0xf979ef80, 0xa16f5fce, 0x7e91fcef, 0x5552aa07,
431     0x9d6027fd, 0xcabc8976, 0x569baccd, 0x028e048c,
432     0xb6a37115, 0x300c603c, 0xf17bff8a, 0xd435b5e1,
433     0x741de869, 0xa7e05347, 0x7bd7f6ac, 0x2fc25eed,
434     0xb82e6d96, 0x314b627a, 0xdffea321, 0x41578216,
435     0x5415a841, 0xc1779fb6, 0xdc37a5eb, 0xb3e57b56,
436     0x469f8cd9, 0xe7f0d317, 0x354a6a7f, 0x4fda9e95,
437     0x7d58fa25, 0x03c906ca, 0xa429558d, 0x280a5022,
438     0xfeb1e14f, 0xbaa0691a, 0xb16b7fda, 0x2e855cab,
439     0xcebd8173, 0x695dd234, 0x40108050, 0xf7f4f303,
440     0x0bcb16c0, 0xf83eedc6, 0x14052811, 0x81671fe6,
441     0xb7e47353, 0x9c2725bb, 0x19413258, 0x168b2c9d,
442     0xa6a75101, 0xe97dcf94, 0x6e95dcfb, 0x47d88e9f,
443     0xcbfb8b30, 0x9fee2371, 0xed7cc791, 0x856617e3,
444     0x53dda68e, 0x5c17b84b, 0x01470246, 0x429e84dc,
445     0x0fca1ec5, 0xb42d7599, 0xc6bf9179, 0x1c07381b,
446     0x8ead0123, 0x755aea2f, 0x36836cb5, 0xcc3385ff,
447     0x91633ff2, 0x0802100a, 0x92aa3938, 0xd971afa8,
448     0x07c80ecf, 0x6419c87d, 0x39497270, 0x43d9869a,
449     0xeff2c31d, 0xabe34b48, 0x715be22a, 0x1a883492,
450     0x529aa4c8, 0x98262dbe, 0xc8328dfa, 0xfab0e94a,
451     0x83e91b6a, 0x3c0f7833, 0x73d5e6a6, 0x3a8074ba,
452     0xc2be997c, 0x13cd26de, 0xd034bde4, 0x3d487a75,
453     0xdbffab24, 0xf57af78f, 0x7a90f4ea, 0x615fc23e,
454     0x80201da0, 0xbd6867d5, 0x681ad072, 0x82ae192c,
455     0xeab4c95e, 0x4d549a19, 0x7693ece5, 0x88220daa,
456     0x8d6407e9, 0xe3f1db12, 0xd173bfa2, 0x4812905a,
457     0x1d403a5d, 0x20084028, 0x2bc356e8, 0x97ec337b,
458     0x4bdb9690, 0xbea1611f, 0x0e8d1c83, 0xf43df5c9,
459     0x6697ccf1, 0x00000000, 0x1bcf36d4, 0xac2b4587,
460     0xc57697b3, 0x328264b0, 0x7fd6fea9, 0x6c1bd877,
461     0xeeb5c15b, 0x86af1129, 0xb56a77df, 0x5d50ba0d,
462     0x0945124c, 0xebf3cb18, 0xc0309df0, 0x9bef2b74,
463     0xfc3fe5c3, 0x4955921c, 0xb2a27910, 0x8fea0365,
464     0x89650fec, 0xd2bab968, 0xbc2f6593, 0x27c04ee7,
465     0x5fdebe81, 0x701ce06c, 0xd3fdbb2e, 0x294d5264,
466     0x7292e4e0, 0xc9758fbc, 0x1806301e, 0x128a2498,
467     0xf2b2f940, 0xbfe66359, 0x380e7036, 0x7c1ff863,
468     0x956237f7, 0x77d4eea3, 0x9aa82932, 0x6296c4f4,
469     0xc3f99b3a, 0x33c566f6, 0x942535b1, 0x7959f220,
470     0x2a8454ae, 0xd572b7a7, 0xe439d5dd, 0x2d4c5a61,
471     0x655eca3b, 0xfd78e785, 0xe038ddd8, 0x0a8c1486,
472     0x63d1c6b2, 0xaea5410b, 0xafe2434d, 0x99612ff8,
473     0xf6b3f145, 0x842115a5, 0x4a9c94d6, 0x781ef066,
474     0x11432252, 0x3bc776fc, 0xd7fcb32b, 0x10042014,
475     0x5951b208, 0x5e99bcc7, 0xa96d4fc4, 0x340d6839,
476     0xcffa8335, 0x5bdfb684, 0xe57ed79b, 0x90243db4,
477     0xec3bc5d7, 0x96ab313d, 0x1fce3ed1, 0x44118855,
478     0x068f0c89, 0x254e4a6b, 0xe6b7d151, 0x8beb0b60,
479     0xf03cfdcc, 0x3e817cbf, 0x6a94d4fe, 0xfbf7eb0c,
480     0xdeb9a167, 0x4c13985f, 0xb02c7d9c, 0x6bd3d6b8,
481     0xbbe76b5c, 0xa56e57cb, 0x37c46ef3, 0x0c03180f,
482     0x45568a13, 0x0d441a49, 0xe17fdf9e, 0x9ea92137,
483     0xa82a4d82, 0xd6bbb16d, 0x23c146e2, 0x5153a202,
484     0x57dcae8b, 0x2c0b5827, 0x4e9d9cd3, 0xad6c47c1,
485     0xc43195f5, 0xcd7487b9, 0xfff6e309, 0x05460a43,
486     0x8aac0926, 0x1e893c97, 0x5014a044, 0xa3e15b42,
487     0x5816b04e, 0xe83acdd2, 0xb9696fd0, 0x2409482d,
488     0xdd70a7ad, 0xe2b6d954, 0x67d0ceb7, 0x93ed3b7e,
489     0x17cc2edb, 0x15422a57, 0x5a98b4c2, 0xaaa4490e,
490     0xa0285d88, 0x6d5cda31, 0xc7f8933f, 0x228644a4,
491   },
492   {
493     0x186018c0, 0x238c2305, 0xc63fc67e, 0xe887e813,
494     0x8726874c, 0xb8dab8a9, 0x01040108, 0x4f214f42,
495     0x36d836ad, 0xa6a2a659, 0xd26fd2de, 0xf5f3f5fb,
496     0x79f979ef, 0x6fa16f5f, 0x917e91fc, 0x525552aa,
497     0x609d6027, 0xbccabc89, 0x9b569bac, 0x8e028e04,
498     0xa3b6a371, 0x0c300c60, 0x7bf17bff, 0x35d435b5,
499     0x1d741de8, 0xe0a7e053, 0xd77bd7f6, 0xc22fc25e,
500     0x2eb82e6d, 0x4b314b62, 0xfedffea3, 0x57415782,
501     0x155415a8, 0x77c1779f, 0x37dc37a5, 0xe5b3e57b,
502     0x9f469f8c, 0xf0e7f0d3, 0x4a354a6a, 0xda4fda9e,
503     0x587d58fa, 0xc903c906, 0x29a42955, 0x0a280a50,
504     0xb1feb1e1, 0xa0baa069, 0x6bb16b7f, 0x852e855c,
505     0xbdcebd81, 0x5d695dd2, 0x10401080, 0xf4f7f4f3,
506     0xcb0bcb16, 0x3ef83eed, 0x05140528, 0x6781671f,
507     0xe4b7e473, 0x279c2725, 0x41194132, 0x8b168b2c,
508     0xa7a6a751, 0x7de97dcf, 0x956e95dc, 0xd847d88e,
509     0xfbcbfb8b, 0xee9fee23, 0x7ced7cc7, 0x66856617,
510     0xdd53dda6, 0x175c17b8, 0x47014702, 0x9e429e84,
511     0xca0fca1e, 0x2db42d75, 0xbfc6bf91, 0x071c0738,
512     0xad8ead01, 0x5a755aea, 0x8336836c, 0x33cc3385,
513     0x6391633f, 0x02080210, 0xaa92aa39, 0x71d971af,
514     0xc807c80e, 0x196419c8, 0x49394972, 0xd943d986,
515     0xf2eff2c3, 0xe3abe34b, 0x5b715be2, 0x881a8834,
516     0x9a529aa4, 0x2698262d, 0x32c8328d, 0xb0fab0e9,
517     0xe983e91b, 0x0f3c0f78, 0xd573d5e6, 0x803a8074,
518     0xbec2be99, 0xcd13cd26, 0x34d034bd, 0x483d487a,
519     0xffdbffab, 0x7af57af7, 0x907a90f4, 0x5f615fc2,
520     0x2080201d, 0x68bd6867, 0x1a681ad0, 0xae82ae19,
521     0xb4eab4c9, 0x544d549a, 0x937693ec, 0x2288220d,
522     0x648d6407, 0xf1e3f1db, 0x73d173bf, 0x12481290,
523     0x401d403a, 0x08200840, 0xc32bc356, 0xec97ec33,
524     0xdb4bdb96, 0xa1bea161, 0x8d0e8d1c, 0x3df43df5,
525     0x976697cc, 0x00000000, 0xcf1bcf36, 0x2bac2b45,
526     0x76c57697, 0x82328264, 0xd67fd6fe, 0x1b6c1bd8,
527     0xb5eeb5c1, 0xaf86af11, 0x6ab56a77, 0x505d50ba,
528     0x45094512, 0xf3ebf3cb, 0x30c0309d, 0xef9bef2b,
529     0x3ffc3fe5, 0x55495592, 0xa2b2a279, 0xea8fea03,
530     0x6589650f, 0xbad2bab9, 0x2fbc2f65, 0xc027c04e,
531     0xde5fdebe, 0x1c701ce0, 0xfdd3fdbb, 0x4d294d52,
532     0x927292e4, 0x75c9758f, 0x06180630, 0x8a128a24,
533     0xb2f2b2f9, 0xe6bfe663, 0x0e380e70, 0x1f7c1ff8,
534     0x62956237, 0xd477d4ee, 0xa89aa829, 0x966296c4,
535     0xf9c3f99b, 0xc533c566, 0x25942535, 0x597959f2,
536     0x842a8454, 0x72d572b7, 0x39e439d5, 0x4c2d4c5a,
537     0x5e655eca, 0x78fd78e7, 0x38e038dd, 0x8c0a8c14,
538     0xd163d1c6, 0xa5aea541, 0xe2afe243, 0x6199612f,
539     0xb3f6b3f1, 0x21842115, 0x9c4a9c94, 0x1e781ef0,
540     0x43114322, 0xc73bc776, 0xfcd7fcb3, 0x04100420,
541     0x515951b2, 0x995e99bc, 0x6da96d4f, 0x0d340d68,
542     0xfacffa83, 0xdf5bdfb6, 0x7ee57ed7, 0x2490243d,
543     0x3bec3bc5, 0xab96ab31, 0xce1fce3e, 0x11441188,
544     0x8f068f0c, 0x4e254e4a, 0xb7e6b7d1, 0xeb8beb0b,
545     0x3cf03cfd, 0x813e817c, 0x946a94d4, 0xf7fbf7eb,
546     0xb9deb9a1, 0x134c1398, 0x2cb02c7d, 0xd36bd3d6,
547     0xe7bbe76b, 0x6ea56e57, 0xc437c46e, 0x030c0318,
548     0x5645568a, 0x440d441a, 0x7fe17fdf, 0xa99ea921,
549     0x2aa82a4d, 0xbbd6bbb1, 0xc123c146, 0x535153a2,
550     0xdc57dcae, 0x0b2c0b58, 0x9d4e9d9c, 0x6cad6c47,
551     0x31c43195, 0x74cd7487, 0xf6fff6e3, 0x4605460a,
552     0xac8aac09, 0x891e893c, 0x145014a0, 0xe1a3e15b,
553     0x165816b0, 0x3ae83acd, 0x69b9696f, 0x09240948,
554     0x70dd70a7, 0xb6e2b6d9, 0xd067d0ce, 0xed93ed3b,
555     0xcc17cc2e, 0x4215422a, 0x985a98b4, 0xa4aaa449,
556     0x28a0285d, 0x5c6d5cda, 0xf8c7f893, 0x86228644,
557   }
558 };
559
560 __constant u32 Cl[8][256] =
561 {
562   {
563     0xc07830d8, 0x05af4626, 0x7ef991b8, 0x136fcdfb,
564     0x4ca113cb, 0xa9626d11, 0x08050209, 0x426e9e0d,
565     0xadee6c9b, 0x590451ff, 0xdebdb90c, 0xfb06f70e,
566     0xef80f296, 0x5fcede30, 0xfcef3f6d, 0xaa07a4f8,
567     0x27fdc047, 0x89766535, 0xaccd2b37, 0x048c018a,
568     0x71155bd2, 0x603c186c, 0xff8af684, 0xb5e16a80,
569     0xe8693af5, 0x5347ddb3, 0xf6acb321, 0x5eed999c,
570     0x6d965c43, 0x627a9629, 0xa321e15d, 0x8216aed5,
571     0xa8412abd, 0x9fb6eee8, 0xa5eb6e92, 0x7b56d79e,
572     0x8cd92313, 0xd317fd23, 0x6a7f9420, 0x9e95a944,
573     0xfa25b0a2, 0x06ca8fcf, 0x558d527c, 0x5022145a,
574     0xe14f7f50, 0x691a5dc9, 0x7fdad614, 0x5cab17d9,
575     0x8173673c, 0xd234ba8f, 0x80502090, 0xf303f507,
576     0x16c08bdd, 0xedc67cd3, 0x28110a2d, 0x1fe6ce78,
577     0x7353d597, 0x25bb4e02, 0x32588273, 0x2c9d0ba7,
578     0x510153f6, 0xcf94fab2, 0xdcfb3749, 0x8e9fad56,
579     0x8b30eb70, 0x2371c1cd, 0xc791f8bb, 0x17e3cc71,
580     0xa68ea77b, 0xb84b2eaf, 0x02468e45, 0x84dc211a,
581     0x1ec589d4, 0x75995a58, 0x9179632e, 0x381b0e3f,
582     0x012347ac, 0xea2fb4b0, 0x6cb51bef, 0x85ff66b6,
583     0x3ff2c65c, 0x100a0412, 0x39384993, 0xafa8e2de,
584     0x0ecf8dc6, 0xc87d32d1, 0x7270923b, 0x869aaf5f,
585     0xc31df931, 0x4b48dba8, 0xe22ab6b9, 0x34920dbc,
586     0xa4c8293e, 0x2dbe4c0b, 0x8dfa64bf, 0xe94a7d59,
587     0x1b6acff2, 0x78331e77, 0xe6a6b733, 0x74ba1df4,
588     0x997c6127, 0x26de87eb, 0xbde46889, 0x7a759032,
589     0xab24e354, 0xf78ff48d, 0xf4ea3d64, 0xc23ebe9d,
590     0x1da0403d, 0x67d5d00f, 0xd07234ca, 0x192c41b7,
591     0xc95e757d, 0x9a19a8ce, 0xece53b7f, 0x0daa442f,
592     0x07e9c863, 0xdb12ff2a, 0xbfa2e6cc, 0x905a2482,
593     0x3a5d807a, 0x40281048, 0x56e89b95, 0x337bc5df,
594     0x9690ab4d, 0x611f5fc0, 0x1c830791, 0xf5c97ac8,
595     0xccf1335b, 0x00000000, 0x36d483f9, 0x4587566e,
596     0x97b3ece1, 0x64b019e6, 0xfea9b128, 0xd87736c3,
597     0xc15b7774, 0x112943be, 0x77dfd41d, 0xba0da0ea,
598     0x124c8a57, 0xcb18fb38, 0x9df060ad, 0x2b74c3c4,
599     0xe5c37eda, 0x921caac7, 0x791059db, 0x0365c9e9,
600     0x0fecca6a, 0xb9686903, 0x65935e4a, 0x4ee79d8e,
601     0xbe81a160, 0xe06c38fc, 0xbb2ee746, 0x52649a1f,
602     0xe4e03976, 0x8fbceafa, 0x301e0c36, 0x249809ae,
603     0xf940794b, 0x6359d185, 0x70361c7e, 0xf8633ee7,
604     0x37f7c455, 0xeea3b53a, 0x29324d81, 0xc4f43152,
605     0x9b3aef62, 0x66f697a3, 0x35b14a10, 0xf220b2ab,
606     0x54ae15d0, 0xb7a7e4c5, 0xd5dd72ec, 0x5a619816,
607     0xca3bbc94, 0xe785f09f, 0xddd870e5, 0x14860598,
608     0xc6b2bf17, 0x410b57e4, 0x434dd9a1, 0x2ff8c24e,
609     0xf1457b42, 0x15a54234, 0x94d62508, 0xf0663cee,
610     0x22528661, 0x76fc93b1, 0xb32be54f, 0x20140824,
611     0xb208a2e3, 0xbcc72f25, 0x4fc4da22, 0x68391a65,
612     0x8335e979, 0xb684a369, 0xd79bfca9, 0x3db44819,
613     0xc5d776fe, 0x313d4b9a, 0x3ed181f0, 0x88552299,
614     0x0c890383, 0x4a6b9c04, 0xd1517366, 0x0b60cbe0,
615     0xfdcc78c1, 0x7cbf1ffd, 0xd4fe3540, 0xeb0cf31c,
616     0xa1676f18, 0x985f268b, 0x7d9c5851, 0xd6b8bb05,
617     0x6b5cd38c, 0x57cbdc39, 0x6ef395aa, 0x180f061b,
618     0x8a13acdc, 0x1a49885e, 0xdf9efea0, 0x21374f88,
619     0x4d825467, 0xb16d6b0a, 0x46e29f87, 0xa202a6f1,
620     0xae8ba572, 0x58271653, 0x9cd32701, 0x47c1d82b,
621     0x95f562a4, 0x87b9e8f3, 0xe309f115, 0x0a438c4c,
622     0x092645a5, 0x3c970fb5, 0xa04428b4, 0x5b42dfba,
623     0xb04e2ca6, 0xcdd274f7, 0x6fd0d206, 0x482d1241,
624     0xa7ade0d7, 0xd954716f, 0xceb7bd1e, 0x3b7ec7d6,
625     0x2edb85e2, 0x2a578468, 0xb4c22d2c, 0x490e55ed,
626     0x5d885075, 0xda31b886, 0x933fed6b, 0x44a411c2,
627   },
628   {
629     0x18c07830, 0x2305af46, 0xc67ef991, 0xe8136fcd,
630     0x874ca113, 0xb8a9626d, 0x01080502, 0x4f426e9e,
631     0x36adee6c, 0xa6590451, 0xd2debdb9, 0xf5fb06f7,
632     0x79ef80f2, 0x6f5fcede, 0x91fcef3f, 0x52aa07a4,
633     0x6027fdc0, 0xbc897665, 0x9baccd2b, 0x8e048c01,
634     0xa371155b, 0x0c603c18, 0x7bff8af6, 0x35b5e16a,
635     0x1de8693a, 0xe05347dd, 0xd7f6acb3, 0xc25eed99,
636     0x2e6d965c, 0x4b627a96, 0xfea321e1, 0x578216ae,
637     0x15a8412a, 0x779fb6ee, 0x37a5eb6e, 0xe57b56d7,
638     0x9f8cd923, 0xf0d317fd, 0x4a6a7f94, 0xda9e95a9,
639     0x58fa25b0, 0xc906ca8f, 0x29558d52, 0x0a502214,
640     0xb1e14f7f, 0xa0691a5d, 0x6b7fdad6, 0x855cab17,
641     0xbd817367, 0x5dd234ba, 0x10805020, 0xf4f303f5,
642     0xcb16c08b, 0x3eedc67c, 0x0528110a, 0x671fe6ce,
643     0xe47353d5, 0x2725bb4e, 0x41325882, 0x8b2c9d0b,
644     0xa7510153, 0x7dcf94fa, 0x95dcfb37, 0xd88e9fad,
645     0xfb8b30eb, 0xee2371c1, 0x7cc791f8, 0x6617e3cc,
646     0xdda68ea7, 0x17b84b2e, 0x4702468e, 0x9e84dc21,
647     0xca1ec589, 0x2d75995a, 0xbf917963, 0x07381b0e,
648     0xad012347, 0x5aea2fb4, 0x836cb51b, 0x3385ff66,
649     0x633ff2c6, 0x02100a04, 0xaa393849, 0x71afa8e2,
650     0xc80ecf8d, 0x19c87d32, 0x49727092, 0xd9869aaf,
651     0xf2c31df9, 0xe34b48db, 0x5be22ab6, 0x8834920d,
652     0x9aa4c829, 0x262dbe4c, 0x328dfa64, 0xb0e94a7d,
653     0xe91b6acf, 0x0f78331e, 0xd5e6a6b7, 0x8074ba1d,
654     0xbe997c61, 0xcd26de87, 0x34bde468, 0x487a7590,
655     0xffab24e3, 0x7af78ff4, 0x90f4ea3d, 0x5fc23ebe,
656     0x201da040, 0x6867d5d0, 0x1ad07234, 0xae192c41,
657     0xb4c95e75, 0x549a19a8, 0x93ece53b, 0x220daa44,
658     0x6407e9c8, 0xf1db12ff, 0x73bfa2e6, 0x12905a24,
659     0x403a5d80, 0x08402810, 0xc356e89b, 0xec337bc5,
660     0xdb9690ab, 0xa1611f5f, 0x8d1c8307, 0x3df5c97a,
661     0x97ccf133, 0x00000000, 0xcf36d483, 0x2b458756,
662     0x7697b3ec, 0x8264b019, 0xd6fea9b1, 0x1bd87736,
663     0xb5c15b77, 0xaf112943, 0x6a77dfd4, 0x50ba0da0,
664     0x45124c8a, 0xf3cb18fb, 0x309df060, 0xef2b74c3,
665     0x3fe5c37e, 0x55921caa, 0xa2791059, 0xea0365c9,
666     0x650fecca, 0xbab96869, 0x2f65935e, 0xc04ee79d,
667     0xdebe81a1, 0x1ce06c38, 0xfdbb2ee7, 0x4d52649a,
668     0x92e4e039, 0x758fbcea, 0x06301e0c, 0x8a249809,
669     0xb2f94079, 0xe66359d1, 0x0e70361c, 0x1ff8633e,
670     0x6237f7c4, 0xd4eea3b5, 0xa829324d, 0x96c4f431,
671     0xf99b3aef, 0xc566f697, 0x2535b14a, 0x59f220b2,
672     0x8454ae15, 0x72b7a7e4, 0x39d5dd72, 0x4c5a6198,
673     0x5eca3bbc, 0x78e785f0, 0x38ddd870, 0x8c148605,
674     0xd1c6b2bf, 0xa5410b57, 0xe2434dd9, 0x612ff8c2,
675     0xb3f1457b, 0x2115a542, 0x9c94d625, 0x1ef0663c,
676     0x43225286, 0xc776fc93, 0xfcb32be5, 0x04201408,
677     0x51b208a2, 0x99bcc72f, 0x6d4fc4da, 0x0d68391a,
678     0xfa8335e9, 0xdfb684a3, 0x7ed79bfc, 0x243db448,
679     0x3bc5d776, 0xab313d4b, 0xce3ed181, 0x11885522,
680     0x8f0c8903, 0x4e4a6b9c, 0xb7d15173, 0xeb0b60cb,
681     0x3cfdcc78, 0x817cbf1f, 0x94d4fe35, 0xf7eb0cf3,
682     0xb9a1676f, 0x13985f26, 0x2c7d9c58, 0xd3d6b8bb,
683     0xe76b5cd3, 0x6e57cbdc, 0xc46ef395, 0x03180f06,
684     0x568a13ac, 0x441a4988, 0x7fdf9efe, 0xa921374f,
685     0x2a4d8254, 0xbbb16d6b, 0xc146e29f, 0x53a202a6,
686     0xdcae8ba5, 0x0b582716, 0x9d9cd327, 0x6c47c1d8,
687     0x3195f562, 0x7487b9e8, 0xf6e309f1, 0x460a438c,
688     0xac092645, 0x893c970f, 0x14a04428, 0xe15b42df,
689     0x16b04e2c, 0x3acdd274, 0x696fd0d2, 0x09482d12,
690     0x70a7ade0, 0xb6d95471, 0xd0ceb7bd, 0xed3b7ec7,
691     0xcc2edb85, 0x422a5784, 0x98b4c22d, 0xa4490e55,
692     0x285d8850, 0x5cda31b8, 0xf8933fed, 0x8644a411,
693   },
694   {
695     0x6018c078, 0x8c2305af, 0x3fc67ef9, 0x87e8136f,
696     0x26874ca1, 0xdab8a962, 0x04010805, 0x214f426e,
697     0xd836adee, 0xa2a65904, 0x6fd2debd, 0xf3f5fb06,
698     0xf979ef80, 0xa16f5fce, 0x7e91fcef, 0x5552aa07,
699     0x9d6027fd, 0xcabc8976, 0x569baccd, 0x028e048c,
700     0xb6a37115, 0x300c603c, 0xf17bff8a, 0xd435b5e1,
701     0x741de869, 0xa7e05347, 0x7bd7f6ac, 0x2fc25eed,
702     0xb82e6d96, 0x314b627a, 0xdffea321, 0x41578216,
703     0x5415a841, 0xc1779fb6, 0xdc37a5eb, 0xb3e57b56,
704     0x469f8cd9, 0xe7f0d317, 0x354a6a7f, 0x4fda9e95,
705     0x7d58fa25, 0x03c906ca, 0xa429558d, 0x280a5022,
706     0xfeb1e14f, 0xbaa0691a, 0xb16b7fda, 0x2e855cab,
707     0xcebd8173, 0x695dd234, 0x40108050, 0xf7f4f303,
708     0x0bcb16c0, 0xf83eedc6, 0x14052811, 0x81671fe6,
709     0xb7e47353, 0x9c2725bb, 0x19413258, 0x168b2c9d,
710     0xa6a75101, 0xe97dcf94, 0x6e95dcfb, 0x47d88e9f,
711     0xcbfb8b30, 0x9fee2371, 0xed7cc791, 0x856617e3,
712     0x53dda68e, 0x5c17b84b, 0x01470246, 0x429e84dc,
713     0x0fca1ec5, 0xb42d7599, 0xc6bf9179, 0x1c07381b,
714     0x8ead0123, 0x755aea2f, 0x36836cb5, 0xcc3385ff,
715     0x91633ff2, 0x0802100a, 0x92aa3938, 0xd971afa8,
716     0x07c80ecf, 0x6419c87d, 0x39497270, 0x43d9869a,
717     0xeff2c31d, 0xabe34b48, 0x715be22a, 0x1a883492,
718     0x529aa4c8, 0x98262dbe, 0xc8328dfa, 0xfab0e94a,
719     0x83e91b6a, 0x3c0f7833, 0x73d5e6a6, 0x3a8074ba,
720     0xc2be997c, 0x13cd26de, 0xd034bde4, 0x3d487a75,
721     0xdbffab24, 0xf57af78f, 0x7a90f4ea, 0x615fc23e,
722     0x80201da0, 0xbd6867d5, 0x681ad072, 0x82ae192c,
723     0xeab4c95e, 0x4d549a19, 0x7693ece5, 0x88220daa,
724     0x8d6407e9, 0xe3f1db12, 0xd173bfa2, 0x4812905a,
725     0x1d403a5d, 0x20084028, 0x2bc356e8, 0x97ec337b,
726     0x4bdb9690, 0xbea1611f, 0x0e8d1c83, 0xf43df5c9,
727     0x6697ccf1, 0x00000000, 0x1bcf36d4, 0xac2b4587,
728     0xc57697b3, 0x328264b0, 0x7fd6fea9, 0x6c1bd877,
729     0xeeb5c15b, 0x86af1129, 0xb56a77df, 0x5d50ba0d,
730     0x0945124c, 0xebf3cb18, 0xc0309df0, 0x9bef2b74,
731     0xfc3fe5c3, 0x4955921c, 0xb2a27910, 0x8fea0365,
732     0x89650fec, 0xd2bab968, 0xbc2f6593, 0x27c04ee7,
733     0x5fdebe81, 0x701ce06c, 0xd3fdbb2e, 0x294d5264,
734     0x7292e4e0, 0xc9758fbc, 0x1806301e, 0x128a2498,
735     0xf2b2f940, 0xbfe66359, 0x380e7036, 0x7c1ff863,
736     0x956237f7, 0x77d4eea3, 0x9aa82932, 0x6296c4f4,
737     0xc3f99b3a, 0x33c566f6, 0x942535b1, 0x7959f220,
738     0x2a8454ae, 0xd572b7a7, 0xe439d5dd, 0x2d4c5a61,
739     0x655eca3b, 0xfd78e785, 0xe038ddd8, 0x0a8c1486,
740     0x63d1c6b2, 0xaea5410b, 0xafe2434d, 0x99612ff8,
741     0xf6b3f145, 0x842115a5, 0x4a9c94d6, 0x781ef066,
742     0x11432252, 0x3bc776fc, 0xd7fcb32b, 0x10042014,
743     0x5951b208, 0x5e99bcc7, 0xa96d4fc4, 0x340d6839,
744     0xcffa8335, 0x5bdfb684, 0xe57ed79b, 0x90243db4,
745     0xec3bc5d7, 0x96ab313d, 0x1fce3ed1, 0x44118855,
746     0x068f0c89, 0x254e4a6b, 0xe6b7d151, 0x8beb0b60,
747     0xf03cfdcc, 0x3e817cbf, 0x6a94d4fe, 0xfbf7eb0c,
748     0xdeb9a167, 0x4c13985f, 0xb02c7d9c, 0x6bd3d6b8,
749     0xbbe76b5c, 0xa56e57cb, 0x37c46ef3, 0x0c03180f,
750     0x45568a13, 0x0d441a49, 0xe17fdf9e, 0x9ea92137,
751     0xa82a4d82, 0xd6bbb16d, 0x23c146e2, 0x5153a202,
752     0x57dcae8b, 0x2c0b5827, 0x4e9d9cd3, 0xad6c47c1,
753     0xc43195f5, 0xcd7487b9, 0xfff6e309, 0x05460a43,
754     0x8aac0926, 0x1e893c97, 0x5014a044, 0xa3e15b42,
755     0x5816b04e, 0xe83acdd2, 0xb9696fd0, 0x2409482d,
756     0xdd70a7ad, 0xe2b6d954, 0x67d0ceb7, 0x93ed3b7e,
757     0x17cc2edb, 0x15422a57, 0x5a98b4c2, 0xaaa4490e,
758     0xa0285d88, 0x6d5cda31, 0xc7f8933f, 0x228644a4,
759   },
760   {
761     0x186018c0, 0x238c2305, 0xc63fc67e, 0xe887e813,
762     0x8726874c, 0xb8dab8a9, 0x01040108, 0x4f214f42,
763     0x36d836ad, 0xa6a2a659, 0xd26fd2de, 0xf5f3f5fb,
764     0x79f979ef, 0x6fa16f5f, 0x917e91fc, 0x525552aa,
765     0x609d6027, 0xbccabc89, 0x9b569bac, 0x8e028e04,
766     0xa3b6a371, 0x0c300c60, 0x7bf17bff, 0x35d435b5,
767     0x1d741de8, 0xe0a7e053, 0xd77bd7f6, 0xc22fc25e,
768     0x2eb82e6d, 0x4b314b62, 0xfedffea3, 0x57415782,
769     0x155415a8, 0x77c1779f, 0x37dc37a5, 0xe5b3e57b,
770     0x9f469f8c, 0xf0e7f0d3, 0x4a354a6a, 0xda4fda9e,
771     0x587d58fa, 0xc903c906, 0x29a42955, 0x0a280a50,
772     0xb1feb1e1, 0xa0baa069, 0x6bb16b7f, 0x852e855c,
773     0xbdcebd81, 0x5d695dd2, 0x10401080, 0xf4f7f4f3,
774     0xcb0bcb16, 0x3ef83eed, 0x05140528, 0x6781671f,
775     0xe4b7e473, 0x279c2725, 0x41194132, 0x8b168b2c,
776     0xa7a6a751, 0x7de97dcf, 0x956e95dc, 0xd847d88e,
777     0xfbcbfb8b, 0xee9fee23, 0x7ced7cc7, 0x66856617,
778     0xdd53dda6, 0x175c17b8, 0x47014702, 0x9e429e84,
779     0xca0fca1e, 0x2db42d75, 0xbfc6bf91, 0x071c0738,
780     0xad8ead01, 0x5a755aea, 0x8336836c, 0x33cc3385,
781     0x6391633f, 0x02080210, 0xaa92aa39, 0x71d971af,
782     0xc807c80e, 0x196419c8, 0x49394972, 0xd943d986,
783     0xf2eff2c3, 0xe3abe34b, 0x5b715be2, 0x881a8834,
784     0x9a529aa4, 0x2698262d, 0x32c8328d, 0xb0fab0e9,
785     0xe983e91b, 0x0f3c0f78, 0xd573d5e6, 0x803a8074,
786     0xbec2be99, 0xcd13cd26, 0x34d034bd, 0x483d487a,
787     0xffdbffab, 0x7af57af7, 0x907a90f4, 0x5f615fc2,
788     0x2080201d, 0x68bd6867, 0x1a681ad0, 0xae82ae19,
789     0xb4eab4c9, 0x544d549a, 0x937693ec, 0x2288220d,
790     0x648d6407, 0xf1e3f1db, 0x73d173bf, 0x12481290,
791     0x401d403a, 0x08200840, 0xc32bc356, 0xec97ec33,
792     0xdb4bdb96, 0xa1bea161, 0x8d0e8d1c, 0x3df43df5,
793     0x976697cc, 0x00000000, 0xcf1bcf36, 0x2bac2b45,
794     0x76c57697, 0x82328264, 0xd67fd6fe, 0x1b6c1bd8,
795     0xb5eeb5c1, 0xaf86af11, 0x6ab56a77, 0x505d50ba,
796     0x45094512, 0xf3ebf3cb, 0x30c0309d, 0xef9bef2b,
797     0x3ffc3fe5, 0x55495592, 0xa2b2a279, 0xea8fea03,
798     0x6589650f, 0xbad2bab9, 0x2fbc2f65, 0xc027c04e,
799     0xde5fdebe, 0x1c701ce0, 0xfdd3fdbb, 0x4d294d52,
800     0x927292e4, 0x75c9758f, 0x06180630, 0x8a128a24,
801     0xb2f2b2f9, 0xe6bfe663, 0x0e380e70, 0x1f7c1ff8,
802     0x62956237, 0xd477d4ee, 0xa89aa829, 0x966296c4,
803     0xf9c3f99b, 0xc533c566, 0x25942535, 0x597959f2,
804     0x842a8454, 0x72d572b7, 0x39e439d5, 0x4c2d4c5a,
805     0x5e655eca, 0x78fd78e7, 0x38e038dd, 0x8c0a8c14,
806     0xd163d1c6, 0xa5aea541, 0xe2afe243, 0x6199612f,
807     0xb3f6b3f1, 0x21842115, 0x9c4a9c94, 0x1e781ef0,
808     0x43114322, 0xc73bc776, 0xfcd7fcb3, 0x04100420,
809     0x515951b2, 0x995e99bc, 0x6da96d4f, 0x0d340d68,
810     0xfacffa83, 0xdf5bdfb6, 0x7ee57ed7, 0x2490243d,
811     0x3bec3bc5, 0xab96ab31, 0xce1fce3e, 0x11441188,
812     0x8f068f0c, 0x4e254e4a, 0xb7e6b7d1, 0xeb8beb0b,
813     0x3cf03cfd, 0x813e817c, 0x946a94d4, 0xf7fbf7eb,
814     0xb9deb9a1, 0x134c1398, 0x2cb02c7d, 0xd36bd3d6,
815     0xe7bbe76b, 0x6ea56e57, 0xc437c46e, 0x030c0318,
816     0x5645568a, 0x440d441a, 0x7fe17fdf, 0xa99ea921,
817     0x2aa82a4d, 0xbbd6bbb1, 0xc123c146, 0x535153a2,
818     0xdc57dcae, 0x0b2c0b58, 0x9d4e9d9c, 0x6cad6c47,
819     0x31c43195, 0x74cd7487, 0xf6fff6e3, 0x4605460a,
820     0xac8aac09, 0x891e893c, 0x145014a0, 0xe1a3e15b,
821     0x165816b0, 0x3ae83acd, 0x69b9696f, 0x09240948,
822     0x70dd70a7, 0xb6e2b6d9, 0xd067d0ce, 0xed93ed3b,
823     0xcc17cc2e, 0x4215422a, 0x985a98b4, 0xa4aaa449,
824     0x28a0285d, 0x5c6d5cda, 0xf8c7f893, 0x86228644,
825   },
826   {
827     0x18186018, 0x23238c23, 0xc6c63fc6, 0xe8e887e8,
828     0x87872687, 0xb8b8dab8, 0x01010401, 0x4f4f214f,
829     0x3636d836, 0xa6a6a2a6, 0xd2d26fd2, 0xf5f5f3f5,
830     0x7979f979, 0x6f6fa16f, 0x91917e91, 0x52525552,
831     0x60609d60, 0xbcbccabc, 0x9b9b569b, 0x8e8e028e,
832     0xa3a3b6a3, 0x0c0c300c, 0x7b7bf17b, 0x3535d435,
833     0x1d1d741d, 0xe0e0a7e0, 0xd7d77bd7, 0xc2c22fc2,
834     0x2e2eb82e, 0x4b4b314b, 0xfefedffe, 0x57574157,
835     0x15155415, 0x7777c177, 0x3737dc37, 0xe5e5b3e5,
836     0x9f9f469f, 0xf0f0e7f0, 0x4a4a354a, 0xdada4fda,
837     0x58587d58, 0xc9c903c9, 0x2929a429, 0x0a0a280a,
838     0xb1b1feb1, 0xa0a0baa0, 0x6b6bb16b, 0x85852e85,
839     0xbdbdcebd, 0x5d5d695d, 0x10104010, 0xf4f4f7f4,
840     0xcbcb0bcb, 0x3e3ef83e, 0x05051405, 0x67678167,
841     0xe4e4b7e4, 0x27279c27, 0x41411941, 0x8b8b168b,
842     0xa7a7a6a7, 0x7d7de97d, 0x95956e95, 0xd8d847d8,
843     0xfbfbcbfb, 0xeeee9fee, 0x7c7ced7c, 0x66668566,
844     0xdddd53dd, 0x17175c17, 0x47470147, 0x9e9e429e,
845     0xcaca0fca, 0x2d2db42d, 0xbfbfc6bf, 0x07071c07,
846     0xadad8ead, 0x5a5a755a, 0x83833683, 0x3333cc33,
847     0x63639163, 0x02020802, 0xaaaa92aa, 0x7171d971,
848     0xc8c807c8, 0x19196419, 0x49493949, 0xd9d943d9,
849     0xf2f2eff2, 0xe3e3abe3, 0x5b5b715b, 0x88881a88,
850     0x9a9a529a, 0x26269826, 0x3232c832, 0xb0b0fab0,
851     0xe9e983e9, 0x0f0f3c0f, 0xd5d573d5, 0x80803a80,
852     0xbebec2be, 0xcdcd13cd, 0x3434d034, 0x48483d48,
853     0xffffdbff, 0x7a7af57a, 0x90907a90, 0x5f5f615f,
854     0x20208020, 0x6868bd68, 0x1a1a681a, 0xaeae82ae,
855     0xb4b4eab4, 0x54544d54, 0x93937693, 0x22228822,
856     0x64648d64, 0xf1f1e3f1, 0x7373d173, 0x12124812,
857     0x40401d40, 0x08082008, 0xc3c32bc3, 0xecec97ec,
858     0xdbdb4bdb, 0xa1a1bea1, 0x8d8d0e8d, 0x3d3df43d,
859     0x97976697, 0x00000000, 0xcfcf1bcf, 0x2b2bac2b,
860     0x7676c576, 0x82823282, 0xd6d67fd6, 0x1b1b6c1b,
861     0xb5b5eeb5, 0xafaf86af, 0x6a6ab56a, 0x50505d50,
862     0x45450945, 0xf3f3ebf3, 0x3030c030, 0xefef9bef,
863     0x3f3ffc3f, 0x55554955, 0xa2a2b2a2, 0xeaea8fea,
864     0x65658965, 0xbabad2ba, 0x2f2fbc2f, 0xc0c027c0,
865     0xdede5fde, 0x1c1c701c, 0xfdfdd3fd, 0x4d4d294d,
866     0x92927292, 0x7575c975, 0x06061806, 0x8a8a128a,
867     0xb2b2f2b2, 0xe6e6bfe6, 0x0e0e380e, 0x1f1f7c1f,
868     0x62629562, 0xd4d477d4, 0xa8a89aa8, 0x96966296,
869     0xf9f9c3f9, 0xc5c533c5, 0x25259425, 0x59597959,
870     0x84842a84, 0x7272d572, 0x3939e439, 0x4c4c2d4c,
871     0x5e5e655e, 0x7878fd78, 0x3838e038, 0x8c8c0a8c,
872     0xd1d163d1, 0xa5a5aea5, 0xe2e2afe2, 0x61619961,
873     0xb3b3f6b3, 0x21218421, 0x9c9c4a9c, 0x1e1e781e,
874     0x43431143, 0xc7c73bc7, 0xfcfcd7fc, 0x04041004,
875     0x51515951, 0x99995e99, 0x6d6da96d, 0x0d0d340d,
876     0xfafacffa, 0xdfdf5bdf, 0x7e7ee57e, 0x24249024,
877     0x3b3bec3b, 0xabab96ab, 0xcece1fce, 0x11114411,
878     0x8f8f068f, 0x4e4e254e, 0xb7b7e6b7, 0xebeb8beb,
879     0x3c3cf03c, 0x81813e81, 0x94946a94, 0xf7f7fbf7,
880     0xb9b9deb9, 0x13134c13, 0x2c2cb02c, 0xd3d36bd3,
881     0xe7e7bbe7, 0x6e6ea56e, 0xc4c437c4, 0x03030c03,
882     0x56564556, 0x44440d44, 0x7f7fe17f, 0xa9a99ea9,
883     0x2a2aa82a, 0xbbbbd6bb, 0xc1c123c1, 0x53535153,
884     0xdcdc57dc, 0x0b0b2c0b, 0x9d9d4e9d, 0x6c6cad6c,
885     0x3131c431, 0x7474cd74, 0xf6f6fff6, 0x46460546,
886     0xacac8aac, 0x89891e89, 0x14145014, 0xe1e1a3e1,
887     0x16165816, 0x3a3ae83a, 0x6969b969, 0x09092409,
888     0x7070dd70, 0xb6b6e2b6, 0xd0d067d0, 0xeded93ed,
889     0xcccc17cc, 0x42421542, 0x98985a98, 0xa4a4aaa4,
890     0x2828a028, 0x5c5c6d5c, 0xf8f8c7f8, 0x86862286,
891   },
892   {
893     0xd8181860, 0x2623238c, 0xb8c6c63f, 0xfbe8e887,
894     0xcb878726, 0x11b8b8da, 0x09010104, 0x0d4f4f21,
895     0x9b3636d8, 0xffa6a6a2, 0x0cd2d26f, 0x0ef5f5f3,
896     0x967979f9, 0x306f6fa1, 0x6d91917e, 0xf8525255,
897     0x4760609d, 0x35bcbcca, 0x379b9b56, 0x8a8e8e02,
898     0xd2a3a3b6, 0x6c0c0c30, 0x847b7bf1, 0x803535d4,
899     0xf51d1d74, 0xb3e0e0a7, 0x21d7d77b, 0x9cc2c22f,
900     0x432e2eb8, 0x294b4b31, 0x5dfefedf, 0xd5575741,
901     0xbd151554, 0xe87777c1, 0x923737dc, 0x9ee5e5b3,
902     0x139f9f46, 0x23f0f0e7, 0x204a4a35, 0x44dada4f,
903     0xa258587d, 0xcfc9c903, 0x7c2929a4, 0x5a0a0a28,
904     0x50b1b1fe, 0xc9a0a0ba, 0x146b6bb1, 0xd985852e,
905     0x3cbdbdce, 0x8f5d5d69, 0x90101040, 0x07f4f4f7,
906     0xddcbcb0b, 0xd33e3ef8, 0x2d050514, 0x78676781,
907     0x97e4e4b7, 0x0227279c, 0x73414119, 0xa78b8b16,
908     0xf6a7a7a6, 0xb27d7de9, 0x4995956e, 0x56d8d847,
909     0x70fbfbcb, 0xcdeeee9f, 0xbb7c7ced, 0x71666685,
910     0x7bdddd53, 0xaf17175c, 0x45474701, 0x1a9e9e42,
911     0xd4caca0f, 0x582d2db4, 0x2ebfbfc6, 0x3f07071c,
912     0xacadad8e, 0xb05a5a75, 0xef838336, 0xb63333cc,
913     0x5c636391, 0x12020208, 0x93aaaa92, 0xde7171d9,
914     0xc6c8c807, 0xd1191964, 0x3b494939, 0x5fd9d943,
915     0x31f2f2ef, 0xa8e3e3ab, 0xb95b5b71, 0xbc88881a,
916     0x3e9a9a52, 0x0b262698, 0xbf3232c8, 0x59b0b0fa,
917     0xf2e9e983, 0x770f0f3c, 0x33d5d573, 0xf480803a,
918     0x27bebec2, 0xebcdcd13, 0x893434d0, 0x3248483d,
919     0x54ffffdb, 0x8d7a7af5, 0x6490907a, 0x9d5f5f61,
920     0x3d202080, 0x0f6868bd, 0xca1a1a68, 0xb7aeae82,
921     0x7db4b4ea, 0xce54544d, 0x7f939376, 0x2f222288,
922     0x6364648d, 0x2af1f1e3, 0xcc7373d1, 0x82121248,
923     0x7a40401d, 0x48080820, 0x95c3c32b, 0xdfecec97,
924     0x4ddbdb4b, 0xc0a1a1be, 0x918d8d0e, 0xc83d3df4,
925     0x5b979766, 0x00000000, 0xf9cfcf1b, 0x6e2b2bac,
926     0xe17676c5, 0xe6828232, 0x28d6d67f, 0xc31b1b6c,
927     0x74b5b5ee, 0xbeafaf86, 0x1d6a6ab5, 0xea50505d,
928     0x57454509, 0x38f3f3eb, 0xad3030c0, 0xc4efef9b,
929     0xda3f3ffc, 0xc7555549, 0xdba2a2b2, 0xe9eaea8f,
930     0x6a656589, 0x03babad2, 0x4a2f2fbc, 0x8ec0c027,
931     0x60dede5f, 0xfc1c1c70, 0x46fdfdd3, 0x1f4d4d29,
932     0x76929272, 0xfa7575c9, 0x36060618, 0xae8a8a12,
933     0x4bb2b2f2, 0x85e6e6bf, 0x7e0e0e38, 0xe71f1f7c,
934     0x55626295, 0x3ad4d477, 0x81a8a89a, 0x52969662,
935     0x62f9f9c3, 0xa3c5c533, 0x10252594, 0xab595979,
936     0xd084842a, 0xc57272d5, 0xec3939e4, 0x164c4c2d,
937     0x945e5e65, 0x9f7878fd, 0xe53838e0, 0x988c8c0a,
938     0x17d1d163, 0xe4a5a5ae, 0xa1e2e2af, 0x4e616199,
939     0x42b3b3f6, 0x34212184, 0x089c9c4a, 0xee1e1e78,
940     0x61434311, 0xb1c7c73b, 0x4ffcfcd7, 0x24040410,
941     0xe3515159, 0x2599995e, 0x226d6da9, 0x650d0d34,
942     0x79fafacf, 0x69dfdf5b, 0xa97e7ee5, 0x19242490,
943     0xfe3b3bec, 0x9aabab96, 0xf0cece1f, 0x99111144,
944     0x838f8f06, 0x044e4e25, 0x66b7b7e6, 0xe0ebeb8b,
945     0xc13c3cf0, 0xfd81813e, 0x4094946a, 0x1cf7f7fb,
946     0x18b9b9de, 0x8b13134c, 0x512c2cb0, 0x05d3d36b,
947     0x8ce7e7bb, 0x396e6ea5, 0xaac4c437, 0x1b03030c,
948     0xdc565645, 0x5e44440d, 0xa07f7fe1, 0x88a9a99e,
949     0x672a2aa8, 0x0abbbbd6, 0x87c1c123, 0xf1535351,
950     0x72dcdc57, 0x530b0b2c, 0x019d9d4e, 0x2b6c6cad,
951     0xa43131c4, 0xf37474cd, 0x15f6f6ff, 0x4c464605,
952     0xa5acac8a, 0xb589891e, 0xb4141450, 0xbae1e1a3,
953     0xa6161658, 0xf73a3ae8, 0x066969b9, 0x41090924,
954     0xd77070dd, 0x6fb6b6e2, 0x1ed0d067, 0xd6eded93,
955     0xe2cccc17, 0x68424215, 0x2c98985a, 0xeda4a4aa,
956     0x752828a0, 0x865c5c6d, 0x6bf8f8c7, 0xc2868622,
957   },
958   {
959     0x30d81818, 0x46262323, 0x91b8c6c6, 0xcdfbe8e8,
960     0x13cb8787, 0x6d11b8b8, 0x02090101, 0x9e0d4f4f,
961     0x6c9b3636, 0x51ffa6a6, 0xb90cd2d2, 0xf70ef5f5,
962     0xf2967979, 0xde306f6f, 0x3f6d9191, 0xa4f85252,
963     0xc0476060, 0x6535bcbc, 0x2b379b9b, 0x018a8e8e,
964     0x5bd2a3a3, 0x186c0c0c, 0xf6847b7b, 0x6a803535,
965     0x3af51d1d, 0xddb3e0e0, 0xb321d7d7, 0x999cc2c2,
966     0x5c432e2e, 0x96294b4b, 0xe15dfefe, 0xaed55757,
967     0x2abd1515, 0xeee87777, 0x6e923737, 0xd79ee5e5,
968     0x23139f9f, 0xfd23f0f0, 0x94204a4a, 0xa944dada,
969     0xb0a25858, 0x8fcfc9c9, 0x527c2929, 0x145a0a0a,
970     0x7f50b1b1, 0x5dc9a0a0, 0xd6146b6b, 0x17d98585,
971     0x673cbdbd, 0xba8f5d5d, 0x20901010, 0xf507f4f4,
972     0x8bddcbcb, 0x7cd33e3e, 0x0a2d0505, 0xce786767,
973     0xd597e4e4, 0x4e022727, 0x82734141, 0x0ba78b8b,
974     0x53f6a7a7, 0xfab27d7d, 0x37499595, 0xad56d8d8,
975     0xeb70fbfb, 0xc1cdeeee, 0xf8bb7c7c, 0xcc716666,
976     0xa77bdddd, 0x2eaf1717, 0x8e454747, 0x211a9e9e,
977     0x89d4caca, 0x5a582d2d, 0x632ebfbf, 0x0e3f0707,
978     0x47acadad, 0xb4b05a5a, 0x1bef8383, 0x66b63333,
979     0xc65c6363, 0x04120202, 0x4993aaaa, 0xe2de7171,
980     0x8dc6c8c8, 0x32d11919, 0x923b4949, 0xaf5fd9d9,
981     0xf931f2f2, 0xdba8e3e3, 0xb6b95b5b, 0x0dbc8888,
982     0x293e9a9a, 0x4c0b2626, 0x64bf3232, 0x7d59b0b0,
983     0xcff2e9e9, 0x1e770f0f, 0xb733d5d5, 0x1df48080,
984     0x6127bebe, 0x87ebcdcd, 0x68893434, 0x90324848,
985     0xe354ffff, 0xf48d7a7a, 0x3d649090, 0xbe9d5f5f,
986     0x403d2020, 0xd00f6868, 0x34ca1a1a, 0x41b7aeae,
987     0x757db4b4, 0xa8ce5454, 0x3b7f9393, 0x442f2222,
988     0xc8636464, 0xff2af1f1, 0xe6cc7373, 0x24821212,
989     0x807a4040, 0x10480808, 0x9b95c3c3, 0xc5dfecec,
990     0xab4ddbdb, 0x5fc0a1a1, 0x07918d8d, 0x7ac83d3d,
991     0x335b9797, 0x00000000, 0x83f9cfcf, 0x566e2b2b,
992     0xece17676, 0x19e68282, 0xb128d6d6, 0x36c31b1b,
993     0x7774b5b5, 0x43beafaf, 0xd41d6a6a, 0xa0ea5050,
994     0x8a574545, 0xfb38f3f3, 0x60ad3030, 0xc3c4efef,
995     0x7eda3f3f, 0xaac75555, 0x59dba2a2, 0xc9e9eaea,
996     0xca6a6565, 0x6903baba, 0x5e4a2f2f, 0x9d8ec0c0,
997     0xa160dede, 0x38fc1c1c, 0xe746fdfd, 0x9a1f4d4d,
998     0x39769292, 0xeafa7575, 0x0c360606, 0x09ae8a8a,
999     0x794bb2b2, 0xd185e6e6, 0x1c7e0e0e, 0x3ee71f1f,
1000     0xc4556262, 0xb53ad4d4, 0x4d81a8a8, 0x31529696,
1001     0xef62f9f9, 0x97a3c5c5, 0x4a102525, 0xb2ab5959,
1002     0x15d08484, 0xe4c57272, 0x72ec3939, 0x98164c4c,
1003     0xbc945e5e, 0xf09f7878, 0x70e53838, 0x05988c8c,
1004     0xbf17d1d1, 0x57e4a5a5, 0xd9a1e2e2, 0xc24e6161,
1005     0x7b42b3b3, 0x42342121, 0x25089c9c, 0x3cee1e1e,
1006     0x86614343, 0x93b1c7c7, 0xe54ffcfc, 0x08240404,
1007     0xa2e35151, 0x2f259999, 0xda226d6d, 0x1a650d0d,
1008     0xe979fafa, 0xa369dfdf, 0xfca97e7e, 0x48192424,
1009     0x76fe3b3b, 0x4b9aabab, 0x81f0cece, 0x22991111,
1010     0x03838f8f, 0x9c044e4e, 0x7366b7b7, 0xcbe0ebeb,
1011     0x78c13c3c, 0x1ffd8181, 0x35409494, 0xf31cf7f7,
1012     0x6f18b9b9, 0x268b1313, 0x58512c2c, 0xbb05d3d3,
1013     0xd38ce7e7, 0xdc396e6e, 0x95aac4c4, 0x061b0303,
1014     0xacdc5656, 0x885e4444, 0xfea07f7f, 0x4f88a9a9,
1015     0x54672a2a, 0x6b0abbbb, 0x9f87c1c1, 0xa6f15353,
1016     0xa572dcdc, 0x16530b0b, 0x27019d9d, 0xd82b6c6c,
1017     0x62a43131, 0xe8f37474, 0xf115f6f6, 0x8c4c4646,
1018     0x45a5acac, 0x0fb58989, 0x28b41414, 0xdfbae1e1,
1019     0x2ca61616, 0x74f73a3a, 0xd2066969, 0x12410909,
1020     0xe0d77070, 0x716fb6b6, 0xbd1ed0d0, 0xc7d6eded,
1021     0x85e2cccc, 0x84684242, 0x2d2c9898, 0x55eda4a4,
1022     0x50752828, 0xb8865c5c, 0xed6bf8f8, 0x11c28686,
1023   },
1024   {
1025     0x7830d818, 0xaf462623, 0xf991b8c6, 0x6fcdfbe8,
1026     0xa113cb87, 0x626d11b8, 0x05020901, 0x6e9e0d4f,
1027     0xee6c9b36, 0x0451ffa6, 0xbdb90cd2, 0x06f70ef5,
1028     0x80f29679, 0xcede306f, 0xef3f6d91, 0x07a4f852,
1029     0xfdc04760, 0x766535bc, 0xcd2b379b, 0x8c018a8e,
1030     0x155bd2a3, 0x3c186c0c, 0x8af6847b, 0xe16a8035,
1031     0x693af51d, 0x47ddb3e0, 0xacb321d7, 0xed999cc2,
1032     0x965c432e, 0x7a96294b, 0x21e15dfe, 0x16aed557,
1033     0x412abd15, 0xb6eee877, 0xeb6e9237, 0x56d79ee5,
1034     0xd923139f, 0x17fd23f0, 0x7f94204a, 0x95a944da,
1035     0x25b0a258, 0xca8fcfc9, 0x8d527c29, 0x22145a0a,
1036     0x4f7f50b1, 0x1a5dc9a0, 0xdad6146b, 0xab17d985,
1037     0x73673cbd, 0x34ba8f5d, 0x50209010, 0x03f507f4,
1038     0xc08bddcb, 0xc67cd33e, 0x110a2d05, 0xe6ce7867,
1039     0x53d597e4, 0xbb4e0227, 0x58827341, 0x9d0ba78b,
1040     0x0153f6a7, 0x94fab27d, 0xfb374995, 0x9fad56d8,
1041     0x30eb70fb, 0x71c1cdee, 0x91f8bb7c, 0xe3cc7166,
1042     0x8ea77bdd, 0x4b2eaf17, 0x468e4547, 0xdc211a9e,
1043     0xc589d4ca, 0x995a582d, 0x79632ebf, 0x1b0e3f07,
1044     0x2347acad, 0x2fb4b05a, 0xb51bef83, 0xff66b633,
1045     0xf2c65c63, 0x0a041202, 0x384993aa, 0xa8e2de71,
1046     0xcf8dc6c8, 0x7d32d119, 0x70923b49, 0x9aaf5fd9,
1047     0x1df931f2, 0x48dba8e3, 0x2ab6b95b, 0x920dbc88,
1048     0xc8293e9a, 0xbe4c0b26, 0xfa64bf32, 0x4a7d59b0,
1049     0x6acff2e9, 0x331e770f, 0xa6b733d5, 0xba1df480,
1050     0x7c6127be, 0xde87ebcd, 0xe4688934, 0x75903248,
1051     0x24e354ff, 0x8ff48d7a, 0xea3d6490, 0x3ebe9d5f,
1052     0xa0403d20, 0xd5d00f68, 0x7234ca1a, 0x2c41b7ae,
1053     0x5e757db4, 0x19a8ce54, 0xe53b7f93, 0xaa442f22,
1054     0xe9c86364, 0x12ff2af1, 0xa2e6cc73, 0x5a248212,
1055     0x5d807a40, 0x28104808, 0xe89b95c3, 0x7bc5dfec,
1056     0x90ab4ddb, 0x1f5fc0a1, 0x8307918d, 0xc97ac83d,
1057     0xf1335b97, 0x00000000, 0xd483f9cf, 0x87566e2b,
1058     0xb3ece176, 0xb019e682, 0xa9b128d6, 0x7736c31b,
1059     0x5b7774b5, 0x2943beaf, 0xdfd41d6a, 0x0da0ea50,
1060     0x4c8a5745, 0x18fb38f3, 0xf060ad30, 0x74c3c4ef,
1061     0xc37eda3f, 0x1caac755, 0x1059dba2, 0x65c9e9ea,
1062     0xecca6a65, 0x686903ba, 0x935e4a2f, 0xe79d8ec0,
1063     0x81a160de, 0x6c38fc1c, 0x2ee746fd, 0x649a1f4d,
1064     0xe0397692, 0xbceafa75, 0x1e0c3606, 0x9809ae8a,
1065     0x40794bb2, 0x59d185e6, 0x361c7e0e, 0x633ee71f,
1066     0xf7c45562, 0xa3b53ad4, 0x324d81a8, 0xf4315296,
1067     0x3aef62f9, 0xf697a3c5, 0xb14a1025, 0x20b2ab59,
1068     0xae15d084, 0xa7e4c572, 0xdd72ec39, 0x6198164c,
1069     0x3bbc945e, 0x85f09f78, 0xd870e538, 0x8605988c,
1070     0xb2bf17d1, 0x0b57e4a5, 0x4dd9a1e2, 0xf8c24e61,
1071     0x457b42b3, 0xa5423421, 0xd625089c, 0x663cee1e,
1072     0x52866143, 0xfc93b1c7, 0x2be54ffc, 0x14082404,
1073     0x08a2e351, 0xc72f2599, 0xc4da226d, 0x391a650d,
1074     0x35e979fa, 0x84a369df, 0x9bfca97e, 0xb4481924,
1075     0xd776fe3b, 0x3d4b9aab, 0xd181f0ce, 0x55229911,
1076     0x8903838f, 0x6b9c044e, 0x517366b7, 0x60cbe0eb,
1077     0xcc78c13c, 0xbf1ffd81, 0xfe354094, 0x0cf31cf7,
1078     0x676f18b9, 0x5f268b13, 0x9c58512c, 0xb8bb05d3,
1079     0x5cd38ce7, 0xcbdc396e, 0xf395aac4, 0x0f061b03,
1080     0x13acdc56, 0x49885e44, 0x9efea07f, 0x374f88a9,
1081     0x8254672a, 0x6d6b0abb, 0xe29f87c1, 0x02a6f153,
1082     0x8ba572dc, 0x2716530b, 0xd327019d, 0xc1d82b6c,
1083     0xf562a431, 0xb9e8f374, 0x09f115f6, 0x438c4c46,
1084     0x2645a5ac, 0x970fb589, 0x4428b414, 0x42dfbae1,
1085     0x4e2ca616, 0xd274f73a, 0xd0d20669, 0x2d124109,
1086     0xade0d770, 0x54716fb6, 0xb7bd1ed0, 0x7ec7d6ed,
1087     0xdb85e2cc, 0x57846842, 0xc22d2c98, 0x0e55eda4,
1088     0x88507528, 0x31b8865c, 0x3fed6bf8, 0xa411c286,
1089   },
1090 };
1091
1092 #define BOX(S,n,i) (S)[(n)][(i)]
1093
1094 void whirlpool_transform (const u32 w[16], u32 dgst[16], __local u32 (*s_Ch)[256], __local u32 (*s_Cl)[256])
1095 {
1096   const u32 rch[R + 1] =
1097   {
1098     0x00000000,
1099     0x1823c6e8,
1100     0x36a6d2f5,
1101     0x60bc9b8e,
1102     0x1de0d7c2,
1103     0x157737e5,
1104     0x58c9290a,
1105     0xbd5d10f4,
1106     0xe427418b,
1107     0xfbee7c66,
1108     0xca2dbf07,
1109   };
1110
1111   const u32 rcl[R + 1] =
1112   {
1113     0x00000000,
1114     0x87b8014f,
1115     0x796f9152,
1116     0xa30c7b35,
1117     0x2e4bfe57,
1118     0x9ff04ada,
1119     0xb1a06b85,
1120     0xcb3e0567,
1121     0xa77d95d8,
1122     0xdd17479e,
1123     0xad5a8333,
1124   };
1125
1126   u32 Kh[8];
1127   u32 Kl[8];
1128
1129   Kh[0] = dgst[ 0];
1130   Kl[0] = dgst[ 1];
1131   Kh[1] = dgst[ 2];
1132   Kl[1] = dgst[ 3];
1133   Kh[2] = dgst[ 4];
1134   Kl[2] = dgst[ 5];
1135   Kh[3] = dgst[ 6];
1136   Kl[3] = dgst[ 7];
1137   Kh[4] = dgst[ 8];
1138   Kl[4] = dgst[ 9];
1139   Kh[5] = dgst[10];
1140   Kl[5] = dgst[11];
1141   Kh[6] = dgst[12];
1142   Kl[6] = dgst[13];
1143   Kh[7] = dgst[14];
1144   Kl[7] = dgst[15];
1145
1146   u32 stateh[8];
1147   u32 statel[8];
1148
1149   stateh[0] = w[ 0] ^ Kh[0];
1150   statel[0] = w[ 1] ^ Kl[0];
1151   stateh[1] = w[ 2] ^ Kh[1];
1152   statel[1] = w[ 3] ^ Kl[1];
1153   stateh[2] = w[ 4] ^ Kh[2];
1154   statel[2] = w[ 5] ^ Kl[2];
1155   stateh[3] = w[ 6] ^ Kh[3];
1156   statel[3] = w[ 7] ^ Kl[3];
1157   stateh[4] = w[ 8] ^ Kh[4];
1158   statel[4] = w[ 9] ^ Kl[4];
1159   stateh[5] = w[10] ^ Kh[5];
1160   statel[5] = w[11] ^ Kl[5];
1161   stateh[6] = w[12] ^ Kh[6];
1162   statel[6] = w[13] ^ Kl[6];
1163   stateh[7] = w[14] ^ Kh[7];
1164   statel[7] = w[15] ^ Kl[7];
1165
1166   u32 r;
1167
1168   for (r = 1; r <= R; r++)
1169   {
1170     u32 Lh[8];
1171     u32 Ll[8];
1172
1173     u32 i;
1174
1175     #ifdef _unroll
1176     #pragma unroll
1177     #endif
1178     for (i = 0; i < 8; i++)
1179     {
1180       const u8 Lp0 = Kh[(i + 8) & 7] >> 24;
1181       const u8 Lp1 = Kh[(i + 7) & 7] >> 16;
1182       const u8 Lp2 = Kh[(i + 6) & 7] >>  8;
1183       const u8 Lp3 = Kh[(i + 5) & 7] >>  0;
1184       const u8 Lp4 = Kl[(i + 4) & 7] >> 24;
1185       const u8 Lp5 = Kl[(i + 3) & 7] >> 16;
1186       const u8 Lp6 = Kl[(i + 2) & 7] >>  8;
1187       const u8 Lp7 = Kl[(i + 1) & 7] >>  0;
1188
1189       Lh[i] = BOX (s_Ch, 0, Lp0 & 0xff)
1190             ^ BOX (s_Ch, 1, Lp1 & 0xff)
1191             ^ BOX (s_Ch, 2, Lp2 & 0xff)
1192             ^ BOX (s_Ch, 3, Lp3 & 0xff)
1193             ^ BOX (s_Ch, 4, Lp4 & 0xff)
1194             ^ BOX (s_Ch, 5, Lp5 & 0xff)
1195             ^ BOX (s_Ch, 6, Lp6 & 0xff)
1196             ^ BOX (s_Ch, 7, Lp7 & 0xff);
1197
1198       Ll[i] = BOX (s_Cl, 0, Lp0 & 0xff)
1199             ^ BOX (s_Cl, 1, Lp1 & 0xff)
1200             ^ BOX (s_Cl, 2, Lp2 & 0xff)
1201             ^ BOX (s_Cl, 3, Lp3 & 0xff)
1202             ^ BOX (s_Cl, 4, Lp4 & 0xff)
1203             ^ BOX (s_Cl, 5, Lp5 & 0xff)
1204             ^ BOX (s_Cl, 6, Lp6 & 0xff)
1205             ^ BOX (s_Cl, 7, Lp7 & 0xff);
1206     }
1207
1208     Kh[0] = Lh[0] ^ rch[r];
1209     Kl[0] = Ll[0] ^ rcl[r];
1210     Kh[1] = Lh[1];
1211     Kl[1] = Ll[1];
1212     Kh[2] = Lh[2];
1213     Kl[2] = Ll[2];
1214     Kh[3] = Lh[3];
1215     Kl[3] = Ll[3];
1216     Kh[4] = Lh[4];
1217     Kl[4] = Ll[4];
1218     Kh[5] = Lh[5];
1219     Kl[5] = Ll[5];
1220     Kh[6] = Lh[6];
1221     Kl[6] = Ll[6];
1222     Kh[7] = Lh[7];
1223     Kl[7] = Ll[7];
1224
1225     #ifdef _unroll
1226     #pragma unroll
1227     #endif
1228     for (i = 0; i < 8; i++)
1229     {
1230       const u8 Lp0 = stateh[(i + 8) & 7] >> 24;
1231       const u8 Lp1 = stateh[(i + 7) & 7] >> 16;
1232       const u8 Lp2 = stateh[(i + 6) & 7] >>  8;
1233       const u8 Lp3 = stateh[(i + 5) & 7] >>  0;
1234       const u8 Lp4 = statel[(i + 4) & 7] >> 24;
1235       const u8 Lp5 = statel[(i + 3) & 7] >> 16;
1236       const u8 Lp6 = statel[(i + 2) & 7] >>  8;
1237       const u8 Lp7 = statel[(i + 1) & 7] >>  0;
1238
1239       Lh[i] = BOX (s_Ch, 0, Lp0 & 0xff)
1240             ^ BOX (s_Ch, 1, Lp1 & 0xff)
1241             ^ BOX (s_Ch, 2, Lp2 & 0xff)
1242             ^ BOX (s_Ch, 3, Lp3 & 0xff)
1243             ^ BOX (s_Ch, 4, Lp4 & 0xff)
1244             ^ BOX (s_Ch, 5, Lp5 & 0xff)
1245             ^ BOX (s_Ch, 6, Lp6 & 0xff)
1246             ^ BOX (s_Ch, 7, Lp7 & 0xff);
1247
1248       Ll[i] = BOX (s_Cl, 0, Lp0 & 0xff)
1249             ^ BOX (s_Cl, 1, Lp1 & 0xff)
1250             ^ BOX (s_Cl, 2, Lp2 & 0xff)
1251             ^ BOX (s_Cl, 3, Lp3 & 0xff)
1252             ^ BOX (s_Cl, 4, Lp4 & 0xff)
1253             ^ BOX (s_Cl, 5, Lp5 & 0xff)
1254             ^ BOX (s_Cl, 6, Lp6 & 0xff)
1255             ^ BOX (s_Cl, 7, Lp7 & 0xff);
1256     }
1257
1258     stateh[0] = Lh[0] ^ Kh[0];
1259     statel[0] = Ll[0] ^ Kl[0];
1260     stateh[1] = Lh[1] ^ Kh[1];
1261     statel[1] = Ll[1] ^ Kl[1];
1262     stateh[2] = Lh[2] ^ Kh[2];
1263     statel[2] = Ll[2] ^ Kl[2];
1264     stateh[3] = Lh[3] ^ Kh[3];
1265     statel[3] = Ll[3] ^ Kl[3];
1266     stateh[4] = Lh[4] ^ Kh[4];
1267     statel[4] = Ll[4] ^ Kl[4];
1268     stateh[5] = Lh[5] ^ Kh[5];
1269     statel[5] = Ll[5] ^ Kl[5];
1270     stateh[6] = Lh[6] ^ Kh[6];
1271     statel[6] = Ll[6] ^ Kl[6];
1272     stateh[7] = Lh[7] ^ Kh[7];
1273     statel[7] = Ll[7] ^ Kl[7];
1274   }
1275
1276   dgst[ 0] ^= stateh[0] ^ w[ 0];
1277   dgst[ 1] ^= statel[0] ^ w[ 1];
1278   dgst[ 2] ^= stateh[1] ^ w[ 2];
1279   dgst[ 3] ^= statel[1] ^ w[ 3];
1280   dgst[ 4] ^= stateh[2] ^ w[ 4];
1281   dgst[ 5] ^= statel[2] ^ w[ 5];
1282   dgst[ 6] ^= stateh[3] ^ w[ 6];
1283   dgst[ 7] ^= statel[3] ^ w[ 7];
1284   dgst[ 8] ^= stateh[4] ^ w[ 8];
1285   dgst[ 9] ^= statel[4] ^ w[ 9];
1286   dgst[10] ^= stateh[5] ^ w[10];
1287   dgst[11] ^= statel[5] ^ w[11];
1288   dgst[12] ^= stateh[6] ^ w[12];
1289   dgst[13] ^= statel[6] ^ w[13];
1290   dgst[14] ^= stateh[7] ^ w[14];
1291   dgst[15] ^= statel[7] ^ w[15];
1292 }
1293
1294 void hmac_run2 (const u32 w1[16], const u32 w2[16], const u32 ipad[16], const u32 opad[16], u32 dgst[16], __local u32 (*s_Ch)[256], __local u32 (*s_Cl)[256])
1295 {
1296   dgst[ 0] = ipad[ 0];
1297   dgst[ 1] = ipad[ 1];
1298   dgst[ 2] = ipad[ 2];
1299   dgst[ 3] = ipad[ 3];
1300   dgst[ 4] = ipad[ 4];
1301   dgst[ 5] = ipad[ 5];
1302   dgst[ 6] = ipad[ 6];
1303   dgst[ 7] = ipad[ 7];
1304   dgst[ 8] = ipad[ 8];
1305   dgst[ 9] = ipad[ 9];
1306   dgst[10] = ipad[10];
1307   dgst[11] = ipad[11];
1308   dgst[12] = ipad[12];
1309   dgst[13] = ipad[13];
1310   dgst[14] = ipad[14];
1311   dgst[15] = ipad[15];
1312
1313   whirlpool_transform (w1, dgst, s_Ch, s_Cl);
1314   whirlpool_transform (w2, dgst, s_Ch, s_Cl);
1315
1316   u32 w[16];
1317
1318   w[ 0] = dgst[ 0];
1319   w[ 1] = dgst[ 1];
1320   w[ 2] = dgst[ 2];
1321   w[ 3] = dgst[ 3];
1322   w[ 4] = dgst[ 4];
1323   w[ 5] = dgst[ 5];
1324   w[ 6] = dgst[ 6];
1325   w[ 7] = dgst[ 7];
1326   w[ 8] = dgst[ 8];
1327   w[ 9] = dgst[ 9];
1328   w[10] = dgst[10];
1329   w[11] = dgst[11];
1330   w[12] = dgst[12];
1331   w[13] = dgst[13];
1332   w[14] = dgst[14];
1333   w[15] = dgst[15];
1334
1335   dgst[ 0] = opad[ 0];
1336   dgst[ 1] = opad[ 1];
1337   dgst[ 2] = opad[ 2];
1338   dgst[ 3] = opad[ 3];
1339   dgst[ 4] = opad[ 4];
1340   dgst[ 5] = opad[ 5];
1341   dgst[ 6] = opad[ 6];
1342   dgst[ 7] = opad[ 7];
1343   dgst[ 8] = opad[ 8];
1344   dgst[ 9] = opad[ 9];
1345   dgst[10] = opad[10];
1346   dgst[11] = opad[11];
1347   dgst[12] = opad[12];
1348   dgst[13] = opad[13];
1349   dgst[14] = opad[14];
1350   dgst[15] = opad[15];
1351
1352   whirlpool_transform (w, dgst, s_Ch, s_Cl);
1353
1354   w[ 0] = 0x80000000;
1355   w[ 1] = 0;
1356   w[ 2] = 0;
1357   w[ 3] = 0;
1358   w[ 4] = 0;
1359   w[ 5] = 0;
1360   w[ 6] = 0;
1361   w[ 7] = 0;
1362   w[ 8] = 0;
1363   w[ 9] = 0;
1364   w[10] = 0;
1365   w[11] = 0;
1366   w[12] = 0;
1367   w[13] = 0;
1368   w[14] = 0;
1369   w[15] = (64 + 64) * 8;
1370
1371   whirlpool_transform (w, dgst, s_Ch, s_Cl);
1372 }
1373
1374 void hmac_init (u32 w[16], u32 ipad[16], u32 opad[16], __local u32 (*s_Ch)[256], __local u32 (*s_Cl)[256])
1375 {
1376   w[ 0] ^= 0x36363636;
1377   w[ 1] ^= 0x36363636;
1378   w[ 2] ^= 0x36363636;
1379   w[ 3] ^= 0x36363636;
1380   w[ 4] ^= 0x36363636;
1381   w[ 5] ^= 0x36363636;
1382   w[ 6] ^= 0x36363636;
1383   w[ 7] ^= 0x36363636;
1384   w[ 8] ^= 0x36363636;
1385   w[ 9] ^= 0x36363636;
1386   w[10] ^= 0x36363636;
1387   w[11] ^= 0x36363636;
1388   w[12] ^= 0x36363636;
1389   w[13] ^= 0x36363636;
1390   w[14] ^= 0x36363636;
1391   w[15] ^= 0x36363636;
1392
1393   ipad[ 0] = 0;
1394   ipad[ 1] = 0;
1395   ipad[ 2] = 0;
1396   ipad[ 3] = 0;
1397   ipad[ 4] = 0;
1398   ipad[ 5] = 0;
1399   ipad[ 6] = 0;
1400   ipad[ 7] = 0;
1401   ipad[ 8] = 0;
1402   ipad[ 9] = 0;
1403   ipad[10] = 0;
1404   ipad[11] = 0;
1405   ipad[12] = 0;
1406   ipad[13] = 0;
1407   ipad[14] = 0;
1408   ipad[15] = 0;
1409
1410   whirlpool_transform (w, ipad, s_Ch, s_Cl);
1411
1412   w[ 0] ^= 0x6a6a6a6a;
1413   w[ 1] ^= 0x6a6a6a6a;
1414   w[ 2] ^= 0x6a6a6a6a;
1415   w[ 3] ^= 0x6a6a6a6a;
1416   w[ 4] ^= 0x6a6a6a6a;
1417   w[ 5] ^= 0x6a6a6a6a;
1418   w[ 6] ^= 0x6a6a6a6a;
1419   w[ 7] ^= 0x6a6a6a6a;
1420   w[ 8] ^= 0x6a6a6a6a;
1421   w[ 9] ^= 0x6a6a6a6a;
1422   w[10] ^= 0x6a6a6a6a;
1423   w[11] ^= 0x6a6a6a6a;
1424   w[12] ^= 0x6a6a6a6a;
1425   w[13] ^= 0x6a6a6a6a;
1426   w[14] ^= 0x6a6a6a6a;
1427   w[15] ^= 0x6a6a6a6a;
1428
1429   opad[ 0] = 0;
1430   opad[ 1] = 0;
1431   opad[ 2] = 0;
1432   opad[ 3] = 0;
1433   opad[ 4] = 0;
1434   opad[ 5] = 0;
1435   opad[ 6] = 0;
1436   opad[ 7] = 0;
1437   opad[ 8] = 0;
1438   opad[ 9] = 0;
1439   opad[10] = 0;
1440   opad[11] = 0;
1441   opad[12] = 0;
1442   opad[13] = 0;
1443   opad[14] = 0;
1444   opad[15] = 0;
1445
1446   whirlpool_transform (w, opad, s_Ch, s_Cl);
1447 }
1448
1449 u32 u8add (const u32 a, const u32 b)
1450 {
1451   const u32 a1 = (a >>  0) & 0xff;
1452   const u32 a2 = (a >>  8) & 0xff;
1453   const u32 a3 = (a >> 16) & 0xff;
1454   const u32 a4 = (a >> 24) & 0xff;
1455
1456   const u32 b1 = (b >>  0) & 0xff;
1457   const u32 b2 = (b >>  8) & 0xff;
1458   const u32 b3 = (b >> 16) & 0xff;
1459   const u32 b4 = (b >> 24) & 0xff;
1460
1461   const u32 r1 = (a1 + b1) & 0xff;
1462   const u32 r2 = (a2 + b2) & 0xff;
1463   const u32 r3 = (a3 + b3) & 0xff;
1464   const u32 r4 = (a4 + b4) & 0xff;
1465
1466   const u32 r = r1 <<  0
1467                | r2 <<  8
1468                | r3 << 16
1469                | r4 << 24;
1470
1471   return r;
1472 }
1473
1474 __kernel void m06233_init (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global tc_tmp_t *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global tc_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1475 {
1476   /**
1477    * modifier
1478    */
1479
1480   const u32 gid = get_global_id (0);
1481   const u32 lid = get_local_id (0);
1482   const u32 lsz = get_local_size (0);
1483
1484   /**
1485    * shared
1486    */
1487
1488   __local u32 s_Ch[8][256];
1489   __local u32 s_Cl[8][256];
1490
1491   for (u32 i = lid; i < 256; i += lsz)
1492   {
1493     s_Ch[0][i] = Ch[0][i];
1494     s_Ch[1][i] = Ch[1][i];
1495     s_Ch[2][i] = Ch[2][i];
1496     s_Ch[3][i] = Ch[3][i];
1497     s_Ch[4][i] = Ch[4][i];
1498     s_Ch[5][i] = Ch[5][i];
1499     s_Ch[6][i] = Ch[6][i];
1500     s_Ch[7][i] = Ch[7][i];
1501
1502     s_Cl[0][i] = Cl[0][i];
1503     s_Cl[1][i] = Cl[1][i];
1504     s_Cl[2][i] = Cl[2][i];
1505     s_Cl[3][i] = Cl[3][i];
1506     s_Cl[4][i] = Cl[4][i];
1507     s_Cl[5][i] = Cl[5][i];
1508     s_Cl[6][i] = Cl[6][i];
1509     s_Cl[7][i] = Cl[7][i];
1510   }
1511
1512   barrier (CLK_LOCAL_MEM_FENCE);
1513
1514   if (gid >= gid_max) return;
1515
1516   /**
1517    * base
1518    */
1519
1520   u32 w0[4];
1521
1522   w0[0] = pws[gid].i[ 0];
1523   w0[1] = pws[gid].i[ 1];
1524   w0[2] = pws[gid].i[ 2];
1525   w0[3] = pws[gid].i[ 3];
1526
1527   u32 w1[4];
1528
1529   w1[0] = pws[gid].i[ 4];
1530   w1[1] = pws[gid].i[ 5];
1531   w1[2] = pws[gid].i[ 6];
1532   w1[3] = pws[gid].i[ 7];
1533
1534   u32 w2[4];
1535
1536   w2[0] = pws[gid].i[ 8];
1537   w2[1] = pws[gid].i[ 9];
1538   w2[2] = pws[gid].i[10];
1539   w2[3] = pws[gid].i[11];
1540
1541   u32 w3[4];
1542
1543   w3[0] = pws[gid].i[12];
1544   w3[1] = pws[gid].i[13];
1545   w3[2] = pws[gid].i[14];
1546   w3[3] = pws[gid].i[15];
1547
1548   /**
1549    * keyfile
1550    */
1551
1552   w0[0] = u8add (w0[0], esalt_bufs[salt_pos].keyfile_buf[ 0]);
1553   w0[1] = u8add (w0[1], esalt_bufs[salt_pos].keyfile_buf[ 1]);
1554   w0[2] = u8add (w0[2], esalt_bufs[salt_pos].keyfile_buf[ 2]);
1555   w0[3] = u8add (w0[3], esalt_bufs[salt_pos].keyfile_buf[ 3]);
1556   w1[0] = u8add (w1[0], esalt_bufs[salt_pos].keyfile_buf[ 4]);
1557   w1[1] = u8add (w1[1], esalt_bufs[salt_pos].keyfile_buf[ 5]);
1558   w1[2] = u8add (w1[2], esalt_bufs[salt_pos].keyfile_buf[ 6]);
1559   w1[3] = u8add (w1[3], esalt_bufs[salt_pos].keyfile_buf[ 7]);
1560   w2[0] = u8add (w2[0], esalt_bufs[salt_pos].keyfile_buf[ 8]);
1561   w2[1] = u8add (w2[1], esalt_bufs[salt_pos].keyfile_buf[ 9]);
1562   w2[2] = u8add (w2[2], esalt_bufs[salt_pos].keyfile_buf[10]);
1563   w2[3] = u8add (w2[3], esalt_bufs[salt_pos].keyfile_buf[11]);
1564   w3[0] = u8add (w3[0], esalt_bufs[salt_pos].keyfile_buf[12]);
1565   w3[1] = u8add (w3[1], esalt_bufs[salt_pos].keyfile_buf[13]);
1566   w3[2] = u8add (w3[2], esalt_bufs[salt_pos].keyfile_buf[14]);
1567   w3[3] = u8add (w3[3], esalt_bufs[salt_pos].keyfile_buf[15]);
1568
1569   /**
1570    * salt
1571    */
1572
1573   u32 salt_buf1[16];
1574
1575   salt_buf1[ 0] = swap32 (esalt_bufs[salt_pos].salt_buf[ 0]);
1576   salt_buf1[ 1] = swap32 (esalt_bufs[salt_pos].salt_buf[ 1]);
1577   salt_buf1[ 2] = swap32 (esalt_bufs[salt_pos].salt_buf[ 2]);
1578   salt_buf1[ 3] = swap32 (esalt_bufs[salt_pos].salt_buf[ 3]);
1579   salt_buf1[ 4] = swap32 (esalt_bufs[salt_pos].salt_buf[ 4]);
1580   salt_buf1[ 5] = swap32 (esalt_bufs[salt_pos].salt_buf[ 5]);
1581   salt_buf1[ 6] = swap32 (esalt_bufs[salt_pos].salt_buf[ 6]);
1582   salt_buf1[ 7] = swap32 (esalt_bufs[salt_pos].salt_buf[ 7]);
1583   salt_buf1[ 8] = swap32 (esalt_bufs[salt_pos].salt_buf[ 8]);
1584   salt_buf1[ 9] = swap32 (esalt_bufs[salt_pos].salt_buf[ 9]);
1585   salt_buf1[10] = swap32 (esalt_bufs[salt_pos].salt_buf[10]);
1586   salt_buf1[11] = swap32 (esalt_bufs[salt_pos].salt_buf[11]);
1587   salt_buf1[12] = swap32 (esalt_bufs[salt_pos].salt_buf[12]);
1588   salt_buf1[13] = swap32 (esalt_bufs[salt_pos].salt_buf[13]);
1589   salt_buf1[14] = swap32 (esalt_bufs[salt_pos].salt_buf[14]);
1590   salt_buf1[15] = swap32 (esalt_bufs[salt_pos].salt_buf[15]);
1591
1592   u32 salt_buf2[16];
1593
1594   salt_buf2[ 0] = 0;
1595   salt_buf2[ 1] = 0x80000000;
1596   salt_buf2[ 2] = 0;
1597   salt_buf2[ 3] = 0;
1598   salt_buf2[ 4] = 0;
1599   salt_buf2[ 5] = 0;
1600   salt_buf2[ 6] = 0;
1601   salt_buf2[ 7] = 0;
1602   salt_buf2[ 8] = 0;
1603   salt_buf2[ 9] = 0;
1604   salt_buf2[10] = 0;
1605   salt_buf2[11] = 0;
1606   salt_buf2[12] = 0;
1607   salt_buf2[13] = 0;
1608   salt_buf2[14] = 0;
1609   salt_buf2[15] = (64 + 64 + 4) * 8;
1610
1611   const u32 truecrypt_mdlen = salt_bufs[0].truecrypt_mdlen;
1612
1613   u32 w[16];
1614
1615   w[ 0] = swap32 (w0[0]);
1616   w[ 1] = swap32 (w0[1]);
1617   w[ 2] = swap32 (w0[2]);
1618   w[ 3] = swap32 (w0[3]);
1619   w[ 4] = swap32 (w1[0]);
1620   w[ 5] = swap32 (w1[1]);
1621   w[ 6] = swap32 (w1[2]);
1622   w[ 7] = swap32 (w1[3]);
1623   w[ 8] = swap32 (w2[0]);
1624   w[ 9] = swap32 (w2[1]);
1625   w[10] = swap32 (w2[2]);
1626   w[11] = swap32 (w2[3]);
1627   w[12] = swap32 (w3[0]);
1628   w[13] = swap32 (w3[1]);
1629   w[14] = swap32 (w3[2]);
1630   w[15] = swap32 (w3[3]);
1631
1632   u32 ipad[16];
1633   u32 opad[16];
1634
1635   hmac_init (w, ipad, opad, s_Ch, s_Cl);
1636
1637   tmps[gid].ipad[ 0] = ipad[ 0];
1638   tmps[gid].ipad[ 1] = ipad[ 1];
1639   tmps[gid].ipad[ 2] = ipad[ 2];
1640   tmps[gid].ipad[ 3] = ipad[ 3];
1641   tmps[gid].ipad[ 4] = ipad[ 4];
1642   tmps[gid].ipad[ 5] = ipad[ 5];
1643   tmps[gid].ipad[ 6] = ipad[ 6];
1644   tmps[gid].ipad[ 7] = ipad[ 7];
1645   tmps[gid].ipad[ 8] = ipad[ 8];
1646   tmps[gid].ipad[ 9] = ipad[ 9];
1647   tmps[gid].ipad[10] = ipad[10];
1648   tmps[gid].ipad[11] = ipad[11];
1649   tmps[gid].ipad[12] = ipad[12];
1650   tmps[gid].ipad[13] = ipad[13];
1651   tmps[gid].ipad[14] = ipad[14];
1652   tmps[gid].ipad[15] = ipad[15];
1653
1654   tmps[gid].opad[ 0] = opad[ 0];
1655   tmps[gid].opad[ 1] = opad[ 1];
1656   tmps[gid].opad[ 2] = opad[ 2];
1657   tmps[gid].opad[ 3] = opad[ 3];
1658   tmps[gid].opad[ 4] = opad[ 4];
1659   tmps[gid].opad[ 5] = opad[ 5];
1660   tmps[gid].opad[ 6] = opad[ 6];
1661   tmps[gid].opad[ 7] = opad[ 7];
1662   tmps[gid].opad[ 8] = opad[ 8];
1663   tmps[gid].opad[ 9] = opad[ 9];
1664   tmps[gid].opad[10] = opad[10];
1665   tmps[gid].opad[11] = opad[11];
1666   tmps[gid].opad[12] = opad[12];
1667   tmps[gid].opad[13] = opad[13];
1668   tmps[gid].opad[14] = opad[14];
1669   tmps[gid].opad[15] = opad[15];
1670
1671   for (u32 i = 0, j = 1; i < (truecrypt_mdlen / 8 / 4); i += 16, j += 1)
1672   {
1673     salt_buf2[0] = j;
1674
1675     u32 dgst[16];
1676
1677     hmac_run2 (salt_buf1, salt_buf2, ipad, opad, dgst, s_Ch, s_Cl);
1678
1679     tmps[gid].dgst[i +  0] = dgst[ 0];
1680     tmps[gid].dgst[i +  1] = dgst[ 1];
1681     tmps[gid].dgst[i +  2] = dgst[ 2];
1682     tmps[gid].dgst[i +  3] = dgst[ 3];
1683     tmps[gid].dgst[i +  4] = dgst[ 4];
1684     tmps[gid].dgst[i +  5] = dgst[ 5];
1685     tmps[gid].dgst[i +  6] = dgst[ 6];
1686     tmps[gid].dgst[i +  7] = dgst[ 7];
1687     tmps[gid].dgst[i +  8] = dgst[ 8];
1688     tmps[gid].dgst[i +  9] = dgst[ 9];
1689     tmps[gid].dgst[i + 10] = dgst[10];
1690     tmps[gid].dgst[i + 11] = dgst[11];
1691     tmps[gid].dgst[i + 12] = dgst[12];
1692     tmps[gid].dgst[i + 13] = dgst[13];
1693     tmps[gid].dgst[i + 14] = dgst[14];
1694     tmps[gid].dgst[i + 15] = dgst[15];
1695
1696     tmps[gid].out[i +  0] = dgst[ 0];
1697     tmps[gid].out[i +  1] = dgst[ 1];
1698     tmps[gid].out[i +  2] = dgst[ 2];
1699     tmps[gid].out[i +  3] = dgst[ 3];
1700     tmps[gid].out[i +  4] = dgst[ 4];
1701     tmps[gid].out[i +  5] = dgst[ 5];
1702     tmps[gid].out[i +  6] = dgst[ 6];
1703     tmps[gid].out[i +  7] = dgst[ 7];
1704     tmps[gid].out[i +  8] = dgst[ 8];
1705     tmps[gid].out[i +  9] = dgst[ 9];
1706     tmps[gid].out[i + 10] = dgst[10];
1707     tmps[gid].out[i + 11] = dgst[11];
1708     tmps[gid].out[i + 12] = dgst[12];
1709     tmps[gid].out[i + 13] = dgst[13];
1710     tmps[gid].out[i + 14] = dgst[14];
1711     tmps[gid].out[i + 15] = dgst[15];
1712   }
1713 }
1714
1715 __kernel void m06233_loop (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global tc_tmp_t *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global tc_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1716 {
1717   /**
1718    * modifier
1719    */
1720
1721   const u32 gid = get_global_id (0);
1722   const u32 lid = get_local_id (0);
1723   const u32 lsz = get_local_size (0);
1724
1725   /**
1726    * shared
1727    */
1728
1729   __local u32 s_Ch[8][256];
1730   __local u32 s_Cl[8][256];
1731
1732   for (u32 i = lid; i < 256; i += lsz)
1733   {
1734     s_Ch[0][i] = Ch[0][i];
1735     s_Ch[1][i] = Ch[1][i];
1736     s_Ch[2][i] = Ch[2][i];
1737     s_Ch[3][i] = Ch[3][i];
1738     s_Ch[4][i] = Ch[4][i];
1739     s_Ch[5][i] = Ch[5][i];
1740     s_Ch[6][i] = Ch[6][i];
1741     s_Ch[7][i] = Ch[7][i];
1742
1743     s_Cl[0][i] = Cl[0][i];
1744     s_Cl[1][i] = Cl[1][i];
1745     s_Cl[2][i] = Cl[2][i];
1746     s_Cl[3][i] = Cl[3][i];
1747     s_Cl[4][i] = Cl[4][i];
1748     s_Cl[5][i] = Cl[5][i];
1749     s_Cl[6][i] = Cl[6][i];
1750     s_Cl[7][i] = Cl[7][i];
1751   }
1752
1753   barrier (CLK_LOCAL_MEM_FENCE);
1754
1755   if (gid >= gid_max) return;
1756
1757   const u32 truecrypt_mdlen = salt_bufs[0].truecrypt_mdlen;
1758
1759   u32 ipad[16];
1760
1761   ipad[ 0] = tmps[gid].ipad[ 0];
1762   ipad[ 1] = tmps[gid].ipad[ 1],
1763   ipad[ 2] = tmps[gid].ipad[ 2];
1764   ipad[ 3] = tmps[gid].ipad[ 3];
1765   ipad[ 4] = tmps[gid].ipad[ 4];
1766   ipad[ 5] = tmps[gid].ipad[ 5];
1767   ipad[ 6] = tmps[gid].ipad[ 6],
1768   ipad[ 7] = tmps[gid].ipad[ 7];
1769   ipad[ 8] = tmps[gid].ipad[ 8];
1770   ipad[ 9] = tmps[gid].ipad[ 9];
1771   ipad[10] = tmps[gid].ipad[10];
1772   ipad[11] = tmps[gid].ipad[11],
1773   ipad[12] = tmps[gid].ipad[12];
1774   ipad[13] = tmps[gid].ipad[13];
1775   ipad[14] = tmps[gid].ipad[14];
1776   ipad[15] = tmps[gid].ipad[15];
1777
1778   u32 opad[16];
1779
1780   opad[ 0] = tmps[gid].opad[ 0];
1781   opad[ 1] = tmps[gid].opad[ 1],
1782   opad[ 2] = tmps[gid].opad[ 2];
1783   opad[ 3] = tmps[gid].opad[ 3];
1784   opad[ 4] = tmps[gid].opad[ 4];
1785   opad[ 5] = tmps[gid].opad[ 5];
1786   opad[ 6] = tmps[gid].opad[ 6],
1787   opad[ 7] = tmps[gid].opad[ 7];
1788   opad[ 8] = tmps[gid].opad[ 8];
1789   opad[ 9] = tmps[gid].opad[ 9];
1790   opad[10] = tmps[gid].opad[10];
1791   opad[11] = tmps[gid].opad[11],
1792   opad[12] = tmps[gid].opad[12];
1793   opad[13] = tmps[gid].opad[13];
1794   opad[14] = tmps[gid].opad[14];
1795   opad[15] = tmps[gid].opad[15];
1796
1797   for (u32 i = 0; i < (truecrypt_mdlen / 8 / 4); i += 16)
1798   {
1799     u32 dgst[16];
1800
1801     dgst[ 0] = tmps[gid].dgst[i +  0];
1802     dgst[ 1] = tmps[gid].dgst[i +  1];
1803     dgst[ 2] = tmps[gid].dgst[i +  2];
1804     dgst[ 3] = tmps[gid].dgst[i +  3];
1805     dgst[ 4] = tmps[gid].dgst[i +  4];
1806     dgst[ 5] = tmps[gid].dgst[i +  5];
1807     dgst[ 6] = tmps[gid].dgst[i +  6];
1808     dgst[ 7] = tmps[gid].dgst[i +  7];
1809     dgst[ 8] = tmps[gid].dgst[i +  8];
1810     dgst[ 9] = tmps[gid].dgst[i +  9];
1811     dgst[10] = tmps[gid].dgst[i + 10];
1812     dgst[11] = tmps[gid].dgst[i + 11];
1813     dgst[12] = tmps[gid].dgst[i + 12];
1814     dgst[13] = tmps[gid].dgst[i + 13];
1815     dgst[14] = tmps[gid].dgst[i + 14];
1816     dgst[15] = tmps[gid].dgst[i + 15];
1817
1818     u32 out[16];
1819
1820     out[ 0] = tmps[gid].out[i +  0];
1821     out[ 1] = tmps[gid].out[i +  1];
1822     out[ 2] = tmps[gid].out[i +  2];
1823     out[ 3] = tmps[gid].out[i +  3];
1824     out[ 4] = tmps[gid].out[i +  4];
1825     out[ 5] = tmps[gid].out[i +  5];
1826     out[ 6] = tmps[gid].out[i +  6];
1827     out[ 7] = tmps[gid].out[i +  7];
1828     out[ 8] = tmps[gid].out[i +  8];
1829     out[ 9] = tmps[gid].out[i +  9];
1830     out[10] = tmps[gid].out[i + 10];
1831     out[11] = tmps[gid].out[i + 11];
1832     out[12] = tmps[gid].out[i + 12];
1833     out[13] = tmps[gid].out[i + 13];
1834     out[14] = tmps[gid].out[i + 14];
1835     out[15] = tmps[gid].out[i + 15];
1836
1837     for (u32 j = 0; j < loop_cnt; j++)
1838     {
1839       u32 w1[16];
1840
1841       w1[ 0] = dgst[ 0];
1842       w1[ 1] = dgst[ 1];
1843       w1[ 2] = dgst[ 2];
1844       w1[ 3] = dgst[ 3];
1845       w1[ 4] = dgst[ 4];
1846       w1[ 5] = dgst[ 5];
1847       w1[ 6] = dgst[ 6];
1848       w1[ 7] = dgst[ 7];
1849       w1[ 8] = dgst[ 8];
1850       w1[ 9] = dgst[ 9];
1851       w1[10] = dgst[10];
1852       w1[11] = dgst[11];
1853       w1[12] = dgst[12];
1854       w1[13] = dgst[13];
1855       w1[14] = dgst[14];
1856       w1[15] = dgst[15];
1857
1858       u32 w2[16];
1859
1860       w2[ 0] = 0x80000000;
1861       w2[ 1] = 0;
1862       w2[ 2] = 0;
1863       w2[ 3] = 0;
1864       w2[ 4] = 0;
1865       w2[ 5] = 0;
1866       w2[ 6] = 0;
1867       w2[ 7] = 0;
1868       w2[ 8] = 0;
1869       w2[ 9] = 0;
1870       w2[10] = 0;
1871       w2[11] = 0;
1872       w2[12] = 0;
1873       w2[13] = 0;
1874       w2[14] = 0;
1875       w2[15] = (64 + 64) * 8;
1876
1877       hmac_run2 (w1, w2, ipad, opad, dgst, s_Ch, s_Cl);
1878
1879       out[ 0] ^= dgst[ 0];
1880       out[ 1] ^= dgst[ 1];
1881       out[ 2] ^= dgst[ 2];
1882       out[ 3] ^= dgst[ 3];
1883       out[ 4] ^= dgst[ 4];
1884       out[ 5] ^= dgst[ 5];
1885       out[ 6] ^= dgst[ 6];
1886       out[ 7] ^= dgst[ 7];
1887       out[ 8] ^= dgst[ 8];
1888       out[ 9] ^= dgst[ 9];
1889       out[10] ^= dgst[10];
1890       out[11] ^= dgst[11];
1891       out[12] ^= dgst[12];
1892       out[13] ^= dgst[13];
1893       out[14] ^= dgst[14];
1894       out[15] ^= dgst[15];
1895     }
1896
1897     tmps[gid].dgst[i +  0] = dgst[ 0];
1898     tmps[gid].dgst[i +  1] = dgst[ 1];
1899     tmps[gid].dgst[i +  2] = dgst[ 2];
1900     tmps[gid].dgst[i +  3] = dgst[ 3];
1901     tmps[gid].dgst[i +  4] = dgst[ 4];
1902     tmps[gid].dgst[i +  5] = dgst[ 5];
1903     tmps[gid].dgst[i +  6] = dgst[ 6];
1904     tmps[gid].dgst[i +  7] = dgst[ 7];
1905     tmps[gid].dgst[i +  8] = dgst[ 8];
1906     tmps[gid].dgst[i +  9] = dgst[ 9];
1907     tmps[gid].dgst[i + 10] = dgst[10];
1908     tmps[gid].dgst[i + 11] = dgst[11];
1909     tmps[gid].dgst[i + 12] = dgst[12];
1910     tmps[gid].dgst[i + 13] = dgst[13];
1911     tmps[gid].dgst[i + 14] = dgst[14];
1912     tmps[gid].dgst[i + 15] = dgst[15];
1913
1914     tmps[gid].out[i +  0] = out[ 0];
1915     tmps[gid].out[i +  1] = out[ 1];
1916     tmps[gid].out[i +  2] = out[ 2];
1917     tmps[gid].out[i +  3] = out[ 3];
1918     tmps[gid].out[i +  4] = out[ 4];
1919     tmps[gid].out[i +  5] = out[ 5];
1920     tmps[gid].out[i +  6] = out[ 6];
1921     tmps[gid].out[i +  7] = out[ 7];
1922     tmps[gid].out[i +  8] = out[ 8];
1923     tmps[gid].out[i +  9] = out[ 9];
1924     tmps[gid].out[i + 10] = out[10];
1925     tmps[gid].out[i + 11] = out[11];
1926     tmps[gid].out[i + 12] = out[12];
1927     tmps[gid].out[i + 13] = out[13];
1928     tmps[gid].out[i + 14] = out[14];
1929     tmps[gid].out[i + 15] = out[15];
1930   }
1931 }
1932
1933 __kernel void m06233_comp (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global tc_tmp_t *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global tc_t *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 il_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1934 {
1935   /**
1936    * base
1937    */
1938
1939   const u32 gid = get_global_id (0);
1940   const u32 lid = get_local_id (0);
1941
1942   if (gid >= gid_max) return;
1943
1944   u32 ukey1[8];
1945
1946   ukey1[0] = swap32 (tmps[gid].out[ 0]);
1947   ukey1[1] = swap32 (tmps[gid].out[ 1]);
1948   ukey1[2] = swap32 (tmps[gid].out[ 2]);
1949   ukey1[3] = swap32 (tmps[gid].out[ 3]);
1950   ukey1[4] = swap32 (tmps[gid].out[ 4]);
1951   ukey1[5] = swap32 (tmps[gid].out[ 5]);
1952   ukey1[6] = swap32 (tmps[gid].out[ 6]);
1953   ukey1[7] = swap32 (tmps[gid].out[ 7]);
1954
1955   u32 ukey2[8];
1956
1957   ukey2[0] = swap32 (tmps[gid].out[ 8]);
1958   ukey2[1] = swap32 (tmps[gid].out[ 9]);
1959   ukey2[2] = swap32 (tmps[gid].out[10]);
1960   ukey2[3] = swap32 (tmps[gid].out[11]);
1961   ukey2[4] = swap32 (tmps[gid].out[12]);
1962   ukey2[5] = swap32 (tmps[gid].out[13]);
1963   ukey2[6] = swap32 (tmps[gid].out[14]);
1964   ukey2[7] = swap32 (tmps[gid].out[15]);
1965
1966   u32 data[4];
1967
1968   data[0] = esalt_bufs[0].data_buf[0];
1969   data[1] = esalt_bufs[0].data_buf[1];
1970   data[2] = esalt_bufs[0].data_buf[2];
1971   data[3] = esalt_bufs[0].data_buf[3];
1972
1973   const u32 signature = esalt_bufs[0].signature;
1974
1975   u32 tmp[4];
1976
1977   {
1978     tmp[0] = data[0];
1979     tmp[1] = data[1];
1980     tmp[2] = data[2];
1981     tmp[3] = data[3];
1982
1983     aes256_decrypt_xts (ukey1, ukey2, tmp, tmp);
1984
1985     if (((tmp[0] == signature) && (tmp[3] == 0)) || ((tmp[0] == signature) && ((tmp[1] >> 16) <= 5)))
1986     {
1987       mark_hash (plains_buf, d_return_buf, salt_pos, 0, 0, gid, 0);
1988     }
1989   }
1990
1991   {
1992     tmp[0] = data[0];
1993     tmp[1] = data[1];
1994     tmp[2] = data[2];
1995     tmp[3] = data[3];
1996
1997     serpent256_decrypt_xts (ukey1, ukey2, tmp, tmp);
1998
1999     if (((tmp[0] == signature) && (tmp[3] == 0)) || ((tmp[0] == signature) && ((tmp[1] >> 16) <= 5)))
2000     {
2001       mark_hash (plains_buf, d_return_buf, salt_pos, 0, 0, gid, 0);
2002     }
2003   }
2004
2005   {
2006     tmp[0] = data[0];
2007     tmp[1] = data[1];
2008     tmp[2] = data[2];
2009     tmp[3] = data[3];
2010
2011     twofish256_decrypt_xts (ukey1, ukey2, tmp, tmp);
2012
2013     if (((tmp[0] == signature) && (tmp[3] == 0)) || ((tmp[0] == signature) && ((tmp[1] >> 16) <= 5)))
2014     {
2015       mark_hash (plains_buf, d_return_buf, salt_pos, 0, 0, gid, 0);
2016     }
2017   }
2018
2019   u32 ukey3[8];
2020
2021   ukey3[0] = swap32 (tmps[gid].out[16]);
2022   ukey3[1] = swap32 (tmps[gid].out[17]);
2023   ukey3[2] = swap32 (tmps[gid].out[18]);
2024   ukey3[3] = swap32 (tmps[gid].out[19]);
2025   ukey3[4] = swap32 (tmps[gid].out[20]);
2026   ukey3[5] = swap32 (tmps[gid].out[21]);
2027   ukey3[6] = swap32 (tmps[gid].out[22]);
2028   ukey3[7] = swap32 (tmps[gid].out[23]);
2029
2030   u32 ukey4[8];
2031
2032   ukey4[0] = swap32 (tmps[gid].out[24]);
2033   ukey4[1] = swap32 (tmps[gid].out[25]);
2034   ukey4[2] = swap32 (tmps[gid].out[26]);
2035   ukey4[3] = swap32 (tmps[gid].out[27]);
2036   ukey4[4] = swap32 (tmps[gid].out[28]);
2037   ukey4[5] = swap32 (tmps[gid].out[29]);
2038   ukey4[6] = swap32 (tmps[gid].out[30]);
2039   ukey4[7] = swap32 (tmps[gid].out[31]);
2040
2041   {
2042     tmp[0] = data[0];
2043     tmp[1] = data[1];
2044     tmp[2] = data[2];
2045     tmp[3] = data[3];
2046
2047     aes256_decrypt_xts     (ukey2, ukey4, tmp, tmp);
2048     twofish256_decrypt_xts (ukey1, ukey3, tmp, tmp);
2049
2050     if (((tmp[0] == signature) && (tmp[3] == 0)) || ((tmp[0] == signature) && ((tmp[1] >> 16) <= 5)))
2051     {
2052       mark_hash (plains_buf, d_return_buf, salt_pos, 0, 0, gid, 0);
2053     }
2054   }
2055
2056   {
2057     tmp[0] = data[0];
2058     tmp[1] = data[1];
2059     tmp[2] = data[2];
2060     tmp[3] = data[3];
2061
2062     serpent256_decrypt_xts (ukey2, ukey4, tmp, tmp);
2063     aes256_decrypt_xts     (ukey1, ukey3, tmp, tmp);
2064
2065     if (((tmp[0] == signature) && (tmp[3] == 0)) || ((tmp[0] == signature) && ((tmp[1] >> 16) <= 5)))
2066     {
2067       mark_hash (plains_buf, d_return_buf, salt_pos, 0, 0, gid, 0);
2068     }
2069   }
2070
2071   {
2072     tmp[0] = data[0];
2073     tmp[1] = data[1];
2074     tmp[2] = data[2];
2075     tmp[3] = data[3];
2076
2077     twofish256_decrypt_xts (ukey2, ukey4, tmp, tmp);
2078     serpent256_decrypt_xts (ukey1, ukey3, tmp, tmp);
2079
2080     if (((tmp[0] == signature) && (tmp[3] == 0)) || ((tmp[0] == signature) && ((tmp[1] >> 16) <= 5)))
2081     {
2082       mark_hash (plains_buf, d_return_buf, salt_pos, 0, 0, gid, 0);
2083     }
2084   }
2085
2086   u32 ukey5[8];
2087
2088   ukey5[0] = swap32 (tmps[gid].out[32]);
2089   ukey5[1] = swap32 (tmps[gid].out[33]);
2090   ukey5[2] = swap32 (tmps[gid].out[34]);
2091   ukey5[3] = swap32 (tmps[gid].out[35]);
2092   ukey5[4] = swap32 (tmps[gid].out[36]);
2093   ukey5[5] = swap32 (tmps[gid].out[37]);
2094   ukey5[6] = swap32 (tmps[gid].out[38]);
2095   ukey5[7] = swap32 (tmps[gid].out[39]);
2096
2097   u32 ukey6[8];
2098
2099   ukey6[0] = swap32 (tmps[gid].out[40]);
2100   ukey6[1] = swap32 (tmps[gid].out[41]);
2101   ukey6[2] = swap32 (tmps[gid].out[42]);
2102   ukey6[3] = swap32 (tmps[gid].out[43]);
2103   ukey6[4] = swap32 (tmps[gid].out[44]);
2104   ukey6[5] = swap32 (tmps[gid].out[45]);
2105   ukey6[6] = swap32 (tmps[gid].out[46]);
2106   ukey6[7] = swap32 (tmps[gid].out[47]);
2107
2108   {
2109     tmp[0] = data[0];
2110     tmp[1] = data[1];
2111     tmp[2] = data[2];
2112     tmp[3] = data[3];
2113
2114     aes256_decrypt_xts     (ukey3, ukey6, tmp, tmp);
2115     twofish256_decrypt_xts (ukey2, ukey5, tmp, tmp);
2116     serpent256_decrypt_xts (ukey1, ukey4, tmp, tmp);
2117
2118     if (((tmp[0] == signature) && (tmp[3] == 0)) || ((tmp[0] == signature) && ((tmp[1] >> 16) <= 5)))
2119     {
2120       mark_hash (plains_buf, d_return_buf, salt_pos, 0, 0, gid, 0);
2121     }
2122   }
2123
2124   {
2125     tmp[0] = data[0];
2126     tmp[1] = data[1];
2127     tmp[2] = data[2];
2128     tmp[3] = data[3];
2129
2130     serpent256_decrypt_xts (ukey3, ukey6, tmp, tmp);
2131     twofish256_decrypt_xts (ukey2, ukey5, tmp, tmp);
2132     aes256_decrypt_xts     (ukey1, ukey4, tmp, tmp);
2133
2134     if (((tmp[0] == signature) && (tmp[3] == 0)) || ((tmp[0] == signature) && ((tmp[1] >> 16) <= 5)))
2135     {
2136       mark_hash (plains_buf, d_return_buf, salt_pos, 0, 0, gid, 0);
2137     }
2138   }
2139 }