2 * Aug 8, 2011 Bob Pearson with help from Joakim Tjernlund and George Spelvin
3 * cleaned up code to current version of sparse and added the slicing-by-8
4 * algorithm to the closely similar existing slicing-by-4 algorithm.
6 * Oct 15, 2000 Matt Domsch <Matt_Domsch@dell.com>
7 * Nicer crc32 functions/docs submitted by linux@horizon.com. Thanks!
8 * Code was from the public domain, copyright abandoned. Code was
9 * subsequently included in the kernel, thus was re-licensed under the
12 * Oct 12, 2000 Matt Domsch <Matt_Domsch@dell.com>
13 * Same crc32 function was used in 5 other places in the kernel.
14 * I made one version, and deleted the others.
15 * There are various incantations of crc32(). Some use a seed of 0 or ~0.
16 * Some xor at the end with ~0. The generic crc32() function takes
17 * seed as an argument, and doesn't xor at the end. Then individual
18 * users can do whatever they need.
19 * drivers/net/smc9194.c uses seed ~0, doesn't xor with ~0.
20 * fs/jffs2 uses seed 0, doesn't xor with ~0.
21 * fs/partitions/efi.c uses seed ~0, xor's with ~0.
23 * This source code is licensed under the GNU General Public License,
24 * Version 2. See the file COPYING for more details.
27 /* see: Documentation/crc32.txt for a description of algorithms */
29 #include <linux/crc32.h>
30 #include <linux/module.h>
31 #include <linux/types.h>
32 #include "crc32defs.h"
35 # define tole(x) ((__force u32) __constant_cpu_to_le32(x))
41 # define tobe(x) ((__force u32) __constant_cpu_to_be32(x))
46 #include "crc32table.h"
48 MODULE_AUTHOR("Matt Domsch <Matt_Domsch@dell.com>");
49 MODULE_DESCRIPTION("Various CRC32 calculations");
50 MODULE_LICENSE("GPL");
52 #if CRC_LE_BITS > 8 || CRC_BE_BITS > 8
54 /* implements slicing-by-4 or slicing-by-8 algorithm */
56 crc32_body(u32 crc, unsigned char const *buf, size_t len, const u32 (*tab)[256])
58 # ifdef __LITTLE_ENDIAN
59 # define DO_CRC(x) crc = t0[(crc ^ (x)) & 255] ^ (crc >> 8)
60 # define DO_CRC4 (t3[(q) & 255] ^ t2[(q >> 8) & 255] ^ \
61 t1[(q >> 16) & 255] ^ t0[(q >> 24) & 255])
62 # define DO_CRC8 (t7[(q) & 255] ^ t6[(q >> 8) & 255] ^ \
63 t5[(q >> 16) & 255] ^ t4[(q >> 24) & 255])
65 # define DO_CRC(x) crc = t0[((crc >> 24) ^ (x)) & 255] ^ (crc << 8)
66 # define DO_CRC4 (t0[(q) & 255] ^ t1[(q >> 8) & 255] ^ \
67 t2[(q >> 16) & 255] ^ t3[(q >> 24) & 255])
68 # define DO_CRC8 (t4[(q) & 255] ^ t5[(q >> 8) & 255] ^ \
69 t6[(q >> 16) & 255] ^ t7[(q >> 24) & 255])
76 const u32 *t0=tab[0], *t1=tab[1], *t2=tab[2], *t3=tab[3];
77 # if CRC_LE_BITS != 32
78 const u32 *t4 = tab[4], *t5 = tab[5], *t6 = tab[6], *t7 = tab[7];
83 if (unlikely((long)buf & 3 && len)) {
86 } while ((--len) && ((long)buf)&3);
89 # if CRC_LE_BITS == 32
100 for (i = 0; i < len; i++) {
102 for (--b; len; --len) {
104 q = crc ^ *++b; /* use pre increment for speed */
105 # if CRC_LE_BITS == 32
114 /* And the last few bytes */
116 u8 *p = (u8 *)(b + 1) - 1;
118 for (i = 0; i < len; i++)
119 DO_CRC(*++p); /* use pre increment for speed */
122 DO_CRC(*++p); /* use pre increment for speed */
134 * crc32_le() - Calculate bitwise little-endian Ethernet AUTODIN II CRC32
135 * @crc: seed value for computation. ~0 for Ethernet, sometimes 0 for
136 * other uses, or the previous crc32 value if computing incrementally.
137 * @p: pointer to buffer over which CRC is run
138 * @len: length of buffer @p
140 static inline u32 __pure crc32_le_generic(u32 crc, unsigned char const *p,
141 size_t len, const u32 (*tab)[256],
148 for (i = 0; i < 8; i++)
149 crc = (crc >> 1) ^ ((crc & 1) ? polynomial : 0);
151 # elif CRC_LE_BITS == 2
154 crc = (crc >> 2) ^ tab[0][crc & 3];
155 crc = (crc >> 2) ^ tab[0][crc & 3];
156 crc = (crc >> 2) ^ tab[0][crc & 3];
157 crc = (crc >> 2) ^ tab[0][crc & 3];
159 # elif CRC_LE_BITS == 4
162 crc = (crc >> 4) ^ tab[0][crc & 15];
163 crc = (crc >> 4) ^ tab[0][crc & 15];
165 # elif CRC_LE_BITS == 8
166 /* aka Sarwate algorithm */
169 crc = (crc >> 8) ^ tab[0][crc & 255];
172 crc = (__force u32) __cpu_to_le32(crc);
173 crc = crc32_body(crc, p, len, tab);
174 crc = __le32_to_cpu((__force __le32)crc);
180 u32 __pure crc32_le(u32 crc, unsigned char const *p, size_t len)
182 return crc32_le_generic(crc, p, len, NULL, CRCPOLY_LE);
184 u32 __pure __crc32c_le(u32 crc, unsigned char const *p, size_t len)
186 return crc32_le_generic(crc, p, len, NULL, CRC32C_POLY_LE);
189 u32 __pure crc32_le(u32 crc, unsigned char const *p, size_t len)
191 return crc32_le_generic(crc, p, len, crc32table_le, CRCPOLY_LE);
193 u32 __pure __crc32c_le(u32 crc, unsigned char const *p, size_t len)
195 return crc32_le_generic(crc, p, len, crc32ctable_le, CRC32C_POLY_LE);
198 EXPORT_SYMBOL(crc32_le);
199 EXPORT_SYMBOL(__crc32c_le);
202 * crc32_be() - Calculate bitwise big-endian Ethernet AUTODIN II CRC32
203 * @crc: seed value for computation. ~0 for Ethernet, sometimes 0 for
204 * other uses, or the previous crc32 value if computing incrementally.
205 * @p: pointer to buffer over which CRC is run
206 * @len: length of buffer @p
208 static inline u32 __pure crc32_be_generic(u32 crc, unsigned char const *p,
209 size_t len, const u32 (*tab)[256],
216 for (i = 0; i < 8; i++)
218 (crc << 1) ^ ((crc & 0x80000000) ? polynomial :
221 # elif CRC_BE_BITS == 2
224 crc = (crc << 2) ^ tab[0][crc >> 30];
225 crc = (crc << 2) ^ tab[0][crc >> 30];
226 crc = (crc << 2) ^ tab[0][crc >> 30];
227 crc = (crc << 2) ^ tab[0][crc >> 30];
229 # elif CRC_BE_BITS == 4
232 crc = (crc << 4) ^ tab[0][crc >> 28];
233 crc = (crc << 4) ^ tab[0][crc >> 28];
235 # elif CRC_BE_BITS == 8
238 crc = (crc << 8) ^ tab[0][crc >> 24];
241 crc = (__force u32) __cpu_to_be32(crc);
242 crc = crc32_body(crc, p, len, tab);
243 crc = __be32_to_cpu((__force __be32)crc);
249 u32 __pure crc32_be(u32 crc, unsigned char const *p, size_t len)
251 return crc32_be_generic(crc, p, len, NULL, CRCPOLY_BE);
254 u32 __pure crc32_be(u32 crc, unsigned char const *p, size_t len)
256 return crc32_be_generic(crc, p, len, crc32table_be, CRCPOLY_BE);
259 EXPORT_SYMBOL(crc32_be);
261 #ifdef CONFIG_CRC32_SELFTEST
263 /* 4096 random bytes */
264 static u8 __attribute__((__aligned__(8))) test_buf[] =
266 0x5b, 0x85, 0x21, 0xcb, 0x09, 0x68, 0x7d, 0x30,
267 0xc7, 0x69, 0xd7, 0x30, 0x92, 0xde, 0x59, 0xe4,
268 0xc9, 0x6e, 0x8b, 0xdb, 0x98, 0x6b, 0xaa, 0x60,
269 0xa8, 0xb5, 0xbc, 0x6c, 0xa9, 0xb1, 0x5b, 0x2c,
270 0xea, 0xb4, 0x92, 0x6a, 0x3f, 0x79, 0x91, 0xe4,
271 0xe9, 0x70, 0x51, 0x8c, 0x7f, 0x95, 0x6f, 0x1a,
272 0x56, 0xa1, 0x5c, 0x27, 0x03, 0x67, 0x9f, 0x3a,
273 0xe2, 0x31, 0x11, 0x29, 0x6b, 0x98, 0xfc, 0xc4,
274 0x53, 0x24, 0xc5, 0x8b, 0xce, 0x47, 0xb2, 0xb9,
275 0x32, 0xcb, 0xc1, 0xd0, 0x03, 0x57, 0x4e, 0xd4,
276 0xe9, 0x3c, 0xa1, 0x63, 0xcf, 0x12, 0x0e, 0xca,
277 0xe1, 0x13, 0xd1, 0x93, 0xa6, 0x88, 0x5c, 0x61,
278 0x5b, 0xbb, 0xf0, 0x19, 0x46, 0xb4, 0xcf, 0x9e,
279 0xb6, 0x6b, 0x4c, 0x3a, 0xcf, 0x60, 0xf9, 0x7a,
280 0x8d, 0x07, 0x63, 0xdb, 0x40, 0xe9, 0x0b, 0x6f,
281 0xad, 0x97, 0xf1, 0xed, 0xd0, 0x1e, 0x26, 0xfd,
282 0xbf, 0xb7, 0xc8, 0x04, 0x94, 0xf8, 0x8b, 0x8c,
283 0xf1, 0xab, 0x7a, 0xd4, 0xdd, 0xf3, 0xe8, 0x88,
284 0xc3, 0xed, 0x17, 0x8a, 0x9b, 0x40, 0x0d, 0x53,
285 0x62, 0x12, 0x03, 0x5f, 0x1b, 0x35, 0x32, 0x1f,
286 0xb4, 0x7b, 0x93, 0x78, 0x0d, 0xdb, 0xce, 0xa4,
287 0xc0, 0x47, 0xd5, 0xbf, 0x68, 0xe8, 0x5d, 0x74,
288 0x8f, 0x8e, 0x75, 0x1c, 0xb2, 0x4f, 0x9a, 0x60,
289 0xd1, 0xbe, 0x10, 0xf4, 0x5c, 0xa1, 0x53, 0x09,
290 0xa5, 0xe0, 0x09, 0x54, 0x85, 0x5c, 0xdc, 0x07,
291 0xe7, 0x21, 0x69, 0x7b, 0x8a, 0xfd, 0x90, 0xf1,
292 0x22, 0xd0, 0xb4, 0x36, 0x28, 0xe6, 0xb8, 0x0f,
293 0x39, 0xde, 0xc8, 0xf3, 0x86, 0x60, 0x34, 0xd2,
294 0x5e, 0xdf, 0xfd, 0xcf, 0x0f, 0xa9, 0x65, 0xf0,
295 0xd5, 0x4d, 0x96, 0x40, 0xe3, 0xdf, 0x3f, 0x95,
296 0x5a, 0x39, 0x19, 0x93, 0xf4, 0x75, 0xce, 0x22,
297 0x00, 0x1c, 0x93, 0xe2, 0x03, 0x66, 0xf4, 0x93,
298 0x73, 0x86, 0x81, 0x8e, 0x29, 0x44, 0x48, 0x86,
299 0x61, 0x7c, 0x48, 0xa3, 0x43, 0xd2, 0x9c, 0x8d,
300 0xd4, 0x95, 0xdd, 0xe1, 0x22, 0x89, 0x3a, 0x40,
301 0x4c, 0x1b, 0x8a, 0x04, 0xa8, 0x09, 0x69, 0x8b,
302 0xea, 0xc6, 0x55, 0x8e, 0x57, 0xe6, 0x64, 0x35,
303 0xf0, 0xc7, 0x16, 0x9f, 0x5d, 0x5e, 0x86, 0x40,
304 0x46, 0xbb, 0xe5, 0x45, 0x88, 0xfe, 0xc9, 0x63,
305 0x15, 0xfb, 0xf5, 0xbd, 0x71, 0x61, 0xeb, 0x7b,
306 0x78, 0x70, 0x07, 0x31, 0x03, 0x9f, 0xb2, 0xc8,
307 0xa7, 0xab, 0x47, 0xfd, 0xdf, 0xa0, 0x78, 0x72,
308 0xa4, 0x2a, 0xe4, 0xb6, 0xba, 0xc0, 0x1e, 0x86,
309 0x71, 0xe6, 0x3d, 0x18, 0x37, 0x70, 0xe6, 0xff,
310 0xe0, 0xbc, 0x0b, 0x22, 0xa0, 0x1f, 0xd3, 0xed,
311 0xa2, 0x55, 0x39, 0xab, 0xa8, 0x13, 0x73, 0x7c,
312 0x3f, 0xb2, 0xd6, 0x19, 0xac, 0xff, 0x99, 0xed,
313 0xe8, 0xe6, 0xa6, 0x22, 0xe3, 0x9c, 0xf1, 0x30,
314 0xdc, 0x01, 0x0a, 0x56, 0xfa, 0xe4, 0xc9, 0x99,
315 0xdd, 0xa8, 0xd8, 0xda, 0x35, 0x51, 0x73, 0xb4,
316 0x40, 0x86, 0x85, 0xdb, 0x5c, 0xd5, 0x85, 0x80,
317 0x14, 0x9c, 0xfd, 0x98, 0xa9, 0x82, 0xc5, 0x37,
318 0xff, 0x32, 0x5d, 0xd0, 0x0b, 0xfa, 0xdc, 0x04,
319 0x5e, 0x09, 0xd2, 0xca, 0x17, 0x4b, 0x1a, 0x8e,
320 0x15, 0xe1, 0xcc, 0x4e, 0x52, 0x88, 0x35, 0xbd,
321 0x48, 0xfe, 0x15, 0xa0, 0x91, 0xfd, 0x7e, 0x6c,
322 0x0e, 0x5d, 0x79, 0x1b, 0x81, 0x79, 0xd2, 0x09,
323 0x34, 0x70, 0x3d, 0x81, 0xec, 0xf6, 0x24, 0xbb,
324 0xfb, 0xf1, 0x7b, 0xdf, 0x54, 0xea, 0x80, 0x9b,
325 0xc7, 0x99, 0x9e, 0xbd, 0x16, 0x78, 0x12, 0x53,
326 0x5e, 0x01, 0xa7, 0x4e, 0xbd, 0x67, 0xe1, 0x9b,
327 0x4c, 0x0e, 0x61, 0x45, 0x97, 0xd2, 0xf0, 0x0f,
328 0xfe, 0x15, 0x08, 0xb7, 0x11, 0x4c, 0xe7, 0xff,
329 0x81, 0x53, 0xff, 0x91, 0x25, 0x38, 0x7e, 0x40,
330 0x94, 0xe5, 0xe0, 0xad, 0xe6, 0xd9, 0x79, 0xb6,
331 0x92, 0xc9, 0xfc, 0xde, 0xc3, 0x1a, 0x23, 0xbb,
332 0xdd, 0xc8, 0x51, 0x0c, 0x3a, 0x72, 0xfa, 0x73,
333 0x6f, 0xb7, 0xee, 0x61, 0x39, 0x03, 0x01, 0x3f,
334 0x7f, 0x94, 0x2e, 0x2e, 0xba, 0x3a, 0xbb, 0xb4,
335 0xfa, 0x6a, 0x17, 0xfe, 0xea, 0xef, 0x5e, 0x66,
336 0x97, 0x3f, 0x32, 0x3d, 0xd7, 0x3e, 0xb1, 0xf1,
337 0x6c, 0x14, 0x4c, 0xfd, 0x37, 0xd3, 0x38, 0x80,
338 0xfb, 0xde, 0xa6, 0x24, 0x1e, 0xc8, 0xca, 0x7f,
339 0x3a, 0x93, 0xd8, 0x8b, 0x18, 0x13, 0xb2, 0xe5,
340 0xe4, 0x93, 0x05, 0x53, 0x4f, 0x84, 0x66, 0xa7,
341 0x58, 0x5c, 0x7b, 0x86, 0x52, 0x6d, 0x0d, 0xce,
342 0xa4, 0x30, 0x7d, 0xb6, 0x18, 0x9f, 0xeb, 0xff,
343 0x22, 0xbb, 0x72, 0x29, 0xb9, 0x44, 0x0b, 0x48,
344 0x1e, 0x84, 0x71, 0x81, 0xe3, 0x6d, 0x73, 0x26,
345 0x92, 0xb4, 0x4d, 0x2a, 0x29, 0xb8, 0x1f, 0x72,
346 0xed, 0xd0, 0xe1, 0x64, 0x77, 0xea, 0x8e, 0x88,
347 0x0f, 0xef, 0x3f, 0xb1, 0x3b, 0xad, 0xf9, 0xc9,
348 0x8b, 0xd0, 0xac, 0xc6, 0xcc, 0xa9, 0x40, 0xcc,
349 0x76, 0xf6, 0x3b, 0x53, 0xb5, 0x88, 0xcb, 0xc8,
350 0x37, 0xf1, 0xa2, 0xba, 0x23, 0x15, 0x99, 0x09,
351 0xcc, 0xe7, 0x7a, 0x3b, 0x37, 0xf7, 0x58, 0xc8,
352 0x46, 0x8c, 0x2b, 0x2f, 0x4e, 0x0e, 0xa6, 0x5c,
353 0xea, 0x85, 0x55, 0xba, 0x02, 0x0e, 0x0e, 0x48,
354 0xbc, 0xe1, 0xb1, 0x01, 0x35, 0x79, 0x13, 0x3d,
355 0x1b, 0xc0, 0x53, 0x68, 0x11, 0xe7, 0x95, 0x0f,
356 0x9d, 0x3f, 0x4c, 0x47, 0x7b, 0x4d, 0x1c, 0xae,
357 0x50, 0x9b, 0xcb, 0xdd, 0x05, 0x8d, 0x9a, 0x97,
358 0xfd, 0x8c, 0xef, 0x0c, 0x1d, 0x67, 0x73, 0xa8,
359 0x28, 0x36, 0xd5, 0xb6, 0x92, 0x33, 0x40, 0x75,
360 0x0b, 0x51, 0xc3, 0x64, 0xba, 0x1d, 0xc2, 0xcc,
361 0xee, 0x7d, 0x54, 0x0f, 0x27, 0x69, 0xa7, 0x27,
362 0x63, 0x30, 0x29, 0xd9, 0xc8, 0x84, 0xd8, 0xdf,
363 0x9f, 0x68, 0x8d, 0x04, 0xca, 0xa6, 0xc5, 0xc7,
364 0x7a, 0x5c, 0xc8, 0xd1, 0xcb, 0x4a, 0xec, 0xd0,
365 0xd8, 0x20, 0x69, 0xc5, 0x17, 0xcd, 0x78, 0xc8,
366 0x75, 0x23, 0x30, 0x69, 0xc9, 0xd4, 0xea, 0x5c,
367 0x4f, 0x6b, 0x86, 0x3f, 0x8b, 0xfe, 0xee, 0x44,
368 0xc9, 0x7c, 0xb7, 0xdd, 0x3e, 0xe5, 0xec, 0x54,
369 0x03, 0x3e, 0xaa, 0x82, 0xc6, 0xdf, 0xb2, 0x38,
370 0x0e, 0x5d, 0xb3, 0x88, 0xd9, 0xd3, 0x69, 0x5f,
371 0x8f, 0x70, 0x8a, 0x7e, 0x11, 0xd9, 0x1e, 0x7b,
372 0x38, 0xf1, 0x42, 0x1a, 0xc0, 0x35, 0xf5, 0xc7,
373 0x36, 0x85, 0xf5, 0xf7, 0xb8, 0x7e, 0xc7, 0xef,
374 0x18, 0xf1, 0x63, 0xd6, 0x7a, 0xc6, 0xc9, 0x0e,
375 0x4d, 0x69, 0x4f, 0x84, 0xef, 0x26, 0x41, 0x0c,
376 0xec, 0xc7, 0xe0, 0x7e, 0x3c, 0x67, 0x01, 0x4c,
377 0x62, 0x1a, 0x20, 0x6f, 0xee, 0x47, 0x4d, 0xc0,
378 0x99, 0x13, 0x8d, 0x91, 0x4a, 0x26, 0xd4, 0x37,
379 0x28, 0x90, 0x58, 0x75, 0x66, 0x2b, 0x0a, 0xdf,
380 0xda, 0xee, 0x92, 0x25, 0x90, 0x62, 0x39, 0x9e,
381 0x44, 0x98, 0xad, 0xc1, 0x88, 0xed, 0xe4, 0xb4,
382 0xaf, 0xf5, 0x8c, 0x9b, 0x48, 0x4d, 0x56, 0x60,
383 0x97, 0x0f, 0x61, 0x59, 0x9e, 0xa6, 0x27, 0xfe,
384 0xc1, 0x91, 0x15, 0x38, 0xb8, 0x0f, 0xae, 0x61,
385 0x7d, 0x26, 0x13, 0x5a, 0x73, 0xff, 0x1c, 0xa3,
386 0x61, 0x04, 0x58, 0x48, 0x55, 0x44, 0x11, 0xfe,
387 0x15, 0xca, 0xc3, 0xbd, 0xca, 0xc5, 0xb4, 0x40,
388 0x5d, 0x1b, 0x7f, 0x39, 0xb5, 0x9c, 0x35, 0xec,
389 0x61, 0x15, 0x32, 0x32, 0xb8, 0x4e, 0x40, 0x9f,
390 0x17, 0x1f, 0x0a, 0x4d, 0xa9, 0x91, 0xef, 0xb7,
391 0xb0, 0xeb, 0xc2, 0x83, 0x9a, 0x6c, 0xd2, 0x79,
392 0x43, 0x78, 0x5e, 0x2f, 0xe5, 0xdd, 0x1a, 0x3c,
393 0x45, 0xab, 0x29, 0x40, 0x3a, 0x37, 0x5b, 0x6f,
394 0xd7, 0xfc, 0x48, 0x64, 0x3c, 0x49, 0xfb, 0x21,
395 0xbe, 0xc3, 0xff, 0x07, 0xfb, 0x17, 0xe9, 0xc9,
396 0x0c, 0x4c, 0x5c, 0x15, 0x9e, 0x8e, 0x22, 0x30,
397 0x0a, 0xde, 0x48, 0x7f, 0xdb, 0x0d, 0xd1, 0x2b,
398 0x87, 0x38, 0x9e, 0xcc, 0x5a, 0x01, 0x16, 0xee,
399 0x75, 0x49, 0x0d, 0x30, 0x01, 0x34, 0x6a, 0xb6,
400 0x9a, 0x5a, 0x2a, 0xec, 0xbb, 0x48, 0xac, 0xd3,
401 0x77, 0x83, 0xd8, 0x08, 0x86, 0x4f, 0x48, 0x09,
402 0x29, 0x41, 0x79, 0xa1, 0x03, 0x12, 0xc4, 0xcd,
403 0x90, 0x55, 0x47, 0x66, 0x74, 0x9a, 0xcc, 0x4f,
404 0x35, 0x8c, 0xd6, 0x98, 0xef, 0xeb, 0x45, 0xb9,
405 0x9a, 0x26, 0x2f, 0x39, 0xa5, 0x70, 0x6d, 0xfc,
406 0xb4, 0x51, 0xee, 0xf4, 0x9c, 0xe7, 0x38, 0x59,
407 0xad, 0xf4, 0xbc, 0x46, 0xff, 0x46, 0x8e, 0x60,
408 0x9c, 0xa3, 0x60, 0x1d, 0xf8, 0x26, 0x72, 0xf5,
409 0x72, 0x9d, 0x68, 0x80, 0x04, 0xf6, 0x0b, 0xa1,
410 0x0a, 0xd5, 0xa7, 0x82, 0x3a, 0x3e, 0x47, 0xa8,
411 0x5a, 0xde, 0x59, 0x4f, 0x7b, 0x07, 0xb3, 0xe9,
412 0x24, 0x19, 0x3d, 0x34, 0x05, 0xec, 0xf1, 0xab,
413 0x6e, 0x64, 0x8f, 0xd3, 0xe6, 0x41, 0x86, 0x80,
414 0x70, 0xe3, 0x8d, 0x60, 0x9c, 0x34, 0x25, 0x01,
415 0x07, 0x4d, 0x19, 0x41, 0x4e, 0x3d, 0x5c, 0x7e,
416 0xa8, 0xf5, 0xcc, 0xd5, 0x7b, 0xe2, 0x7d, 0x3d,
417 0x49, 0x86, 0x7d, 0x07, 0xb7, 0x10, 0xe3, 0x35,
418 0xb8, 0x84, 0x6d, 0x76, 0xab, 0x17, 0xc6, 0x38,
419 0xb4, 0xd3, 0x28, 0x57, 0xad, 0xd3, 0x88, 0x5a,
420 0xda, 0xea, 0xc8, 0x94, 0xcc, 0x37, 0x19, 0xac,
421 0x9c, 0x9f, 0x4b, 0x00, 0x15, 0xc0, 0xc8, 0xca,
422 0x1f, 0x15, 0xaa, 0xe0, 0xdb, 0xf9, 0x2f, 0x57,
423 0x1b, 0x24, 0xc7, 0x6f, 0x76, 0x29, 0xfb, 0xed,
424 0x25, 0x0d, 0xc0, 0xfe, 0xbd, 0x5a, 0xbf, 0x20,
425 0x08, 0x51, 0x05, 0xec, 0x71, 0xa3, 0xbf, 0xef,
426 0x5e, 0x99, 0x75, 0xdb, 0x3c, 0x5f, 0x9a, 0x8c,
427 0xbb, 0x19, 0x5c, 0x0e, 0x93, 0x19, 0xf8, 0x6a,
428 0xbc, 0xf2, 0x12, 0x54, 0x2f, 0xcb, 0x28, 0x64,
429 0x88, 0xb3, 0x92, 0x0d, 0x96, 0xd1, 0xa6, 0xe4,
430 0x1f, 0xf1, 0x4d, 0xa4, 0xab, 0x1c, 0xee, 0x54,
431 0xf2, 0xad, 0x29, 0x6d, 0x32, 0x37, 0xb2, 0x16,
432 0x77, 0x5c, 0xdc, 0x2e, 0x54, 0xec, 0x75, 0x26,
433 0xc6, 0x36, 0xd9, 0x17, 0x2c, 0xf1, 0x7a, 0xdc,
434 0x4b, 0xf1, 0xe2, 0xd9, 0x95, 0xba, 0xac, 0x87,
435 0xc1, 0xf3, 0x8e, 0x58, 0x08, 0xd8, 0x87, 0x60,
436 0xc9, 0xee, 0x6a, 0xde, 0xa4, 0xd2, 0xfc, 0x0d,
437 0xe5, 0x36, 0xc4, 0x5c, 0x52, 0xb3, 0x07, 0x54,
438 0x65, 0x24, 0xc1, 0xb1, 0xd1, 0xb1, 0x53, 0x13,
439 0x31, 0x79, 0x7f, 0x05, 0x76, 0xeb, 0x37, 0x59,
440 0x15, 0x2b, 0xd1, 0x3f, 0xac, 0x08, 0x97, 0xeb,
441 0x91, 0x98, 0xdf, 0x6c, 0x09, 0x0d, 0x04, 0x9f,
442 0xdc, 0x3b, 0x0e, 0x60, 0x68, 0x47, 0x23, 0x15,
443 0x16, 0xc6, 0x0b, 0x35, 0xf8, 0x77, 0xa2, 0x78,
444 0x50, 0xd4, 0x64, 0x22, 0x33, 0xff, 0xfb, 0x93,
445 0x71, 0x46, 0x50, 0x39, 0x1b, 0x9c, 0xea, 0x4e,
446 0x8d, 0x0c, 0x37, 0xe5, 0x5c, 0x51, 0x3a, 0x31,
447 0xb2, 0x85, 0x84, 0x3f, 0x41, 0xee, 0xa2, 0xc1,
448 0xc6, 0x13, 0x3b, 0x54, 0x28, 0xd2, 0x18, 0x37,
449 0xcc, 0x46, 0x9f, 0x6a, 0x91, 0x3d, 0x5a, 0x15,
450 0x3c, 0x89, 0xa3, 0x61, 0x06, 0x7d, 0x2e, 0x78,
451 0xbe, 0x7d, 0x40, 0xba, 0x2f, 0x95, 0xb1, 0x2f,
452 0x87, 0x3b, 0x8a, 0xbe, 0x6a, 0xf4, 0xc2, 0x31,
453 0x74, 0xee, 0x91, 0xe0, 0x23, 0xaa, 0x5d, 0x7f,
454 0xdd, 0xf0, 0x44, 0x8c, 0x0b, 0x59, 0x2b, 0xfc,
455 0x48, 0x3a, 0xdf, 0x07, 0x05, 0x38, 0x6c, 0xc9,
456 0xeb, 0x18, 0x24, 0x68, 0x8d, 0x58, 0x98, 0xd3,
457 0x31, 0xa3, 0xe4, 0x70, 0x59, 0xb1, 0x21, 0xbe,
458 0x7e, 0x65, 0x7d, 0xb8, 0x04, 0xab, 0xf6, 0xe4,
459 0xd7, 0xda, 0xec, 0x09, 0x8f, 0xda, 0x6d, 0x24,
460 0x07, 0xcc, 0x29, 0x17, 0x05, 0x78, 0x1a, 0xc1,
461 0xb1, 0xce, 0xfc, 0xaa, 0x2d, 0xe7, 0xcc, 0x85,
462 0x84, 0x84, 0x03, 0x2a, 0x0c, 0x3f, 0xa9, 0xf8,
463 0xfd, 0x84, 0x53, 0x59, 0x5c, 0xf0, 0xd4, 0x09,
464 0xf0, 0xd2, 0x6c, 0x32, 0x03, 0xb0, 0xa0, 0x8c,
465 0x52, 0xeb, 0x23, 0x91, 0x88, 0x43, 0x13, 0x46,
466 0xf6, 0x1e, 0xb4, 0x1b, 0xf5, 0x8e, 0x3a, 0xb5,
467 0x3d, 0x00, 0xf6, 0xe5, 0x08, 0x3d, 0x5f, 0x39,
468 0xd3, 0x21, 0x69, 0xbc, 0x03, 0x22, 0x3a, 0xd2,
469 0x5c, 0x84, 0xf8, 0x15, 0xc4, 0x80, 0x0b, 0xbc,
470 0x29, 0x3c, 0xf3, 0x95, 0x98, 0xcd, 0x8f, 0x35,
471 0xbc, 0xa5, 0x3e, 0xfc, 0xd4, 0x13, 0x9e, 0xde,
472 0x4f, 0xce, 0x71, 0x9d, 0x09, 0xad, 0xf2, 0x80,
473 0x6b, 0x65, 0x7f, 0x03, 0x00, 0x14, 0x7c, 0x15,
474 0x85, 0x40, 0x6d, 0x70, 0xea, 0xdc, 0xb3, 0x63,
475 0x35, 0x4f, 0x4d, 0xe0, 0xd9, 0xd5, 0x3c, 0x58,
476 0x56, 0x23, 0x80, 0xe2, 0x36, 0xdd, 0x75, 0x1d,
477 0x94, 0x11, 0x41, 0x8e, 0xe0, 0x81, 0x8e, 0xcf,
478 0xe0, 0xe5, 0xf6, 0xde, 0xd1, 0xe7, 0x04, 0x12,
479 0x79, 0x92, 0x2b, 0x71, 0x2a, 0x79, 0x8b, 0x7c,
480 0x44, 0x79, 0x16, 0x30, 0x4e, 0xf4, 0xf6, 0x9b,
481 0xb7, 0x40, 0xa3, 0x5a, 0xa7, 0x69, 0x3e, 0xc1,
482 0x3a, 0x04, 0xd0, 0x88, 0xa0, 0x3b, 0xdd, 0xc6,
483 0x9e, 0x7e, 0x1e, 0x1e, 0x8f, 0x44, 0xf7, 0x73,
484 0x67, 0x1e, 0x1a, 0x78, 0xfa, 0x62, 0xf4, 0xa9,
485 0xa8, 0xc6, 0x5b, 0xb8, 0xfa, 0x06, 0x7d, 0x5e,
486 0x38, 0x1c, 0x9a, 0x39, 0xe9, 0x39, 0x98, 0x22,
487 0x0b, 0xa7, 0xac, 0x0b, 0xf3, 0xbc, 0xf1, 0xeb,
488 0x8c, 0x81, 0xe3, 0x48, 0x8a, 0xed, 0x42, 0xc2,
489 0x38, 0xcf, 0x3e, 0xda, 0xd2, 0x89, 0x8d, 0x9c,
490 0x53, 0xb5, 0x2f, 0x41, 0x01, 0x26, 0x84, 0x9c,
491 0xa3, 0x56, 0xf6, 0x49, 0xc7, 0xd4, 0x9f, 0x93,
492 0x1b, 0x96, 0x49, 0x5e, 0xad, 0xb3, 0x84, 0x1f,
493 0x3c, 0xa4, 0xe0, 0x9b, 0xd1, 0x90, 0xbc, 0x38,
494 0x6c, 0xdd, 0x95, 0x4d, 0x9d, 0xb1, 0x71, 0x57,
495 0x2d, 0x34, 0xe8, 0xb8, 0x42, 0xc7, 0x99, 0x03,
496 0xc7, 0x07, 0x30, 0x65, 0x91, 0x55, 0xd5, 0x90,
497 0x70, 0x97, 0x37, 0x68, 0xd4, 0x11, 0xf9, 0xe8,
498 0xce, 0xec, 0xdc, 0x34, 0xd5, 0xd3, 0xb7, 0xc4,
499 0xb8, 0x97, 0x05, 0x92, 0xad, 0xf8, 0xe2, 0x36,
500 0x64, 0x41, 0xc9, 0xc5, 0x41, 0x77, 0x52, 0xd7,
501 0x2c, 0xa5, 0x24, 0x2f, 0xd9, 0x34, 0x0b, 0x47,
502 0x35, 0xa7, 0x28, 0x8b, 0xc5, 0xcd, 0xe9, 0x46,
503 0xac, 0x39, 0x94, 0x3c, 0x10, 0xc6, 0x29, 0x73,
504 0x0e, 0x0e, 0x5d, 0xe0, 0x71, 0x03, 0x8a, 0x72,
505 0x0e, 0x26, 0xb0, 0x7d, 0x84, 0xed, 0x95, 0x23,
506 0x49, 0x5a, 0x45, 0x83, 0x45, 0x60, 0x11, 0x4a,
507 0x46, 0x31, 0xd4, 0xd8, 0x16, 0x54, 0x98, 0x58,
508 0xed, 0x6d, 0xcc, 0x5d, 0xd6, 0x50, 0x61, 0x9f,
509 0x9d, 0xc5, 0x3e, 0x9d, 0x32, 0x47, 0xde, 0x96,
510 0xe1, 0x5d, 0xd8, 0xf8, 0xb4, 0x69, 0x6f, 0xb9,
511 0x15, 0x90, 0x57, 0x7a, 0xf6, 0xad, 0xb0, 0x5b,
512 0xf5, 0xa6, 0x36, 0x94, 0xfd, 0x84, 0xce, 0x1c,
513 0x0f, 0x4b, 0xd0, 0xc2, 0x5b, 0x6b, 0x56, 0xef,
514 0x73, 0x93, 0x0b, 0xc3, 0xee, 0xd9, 0xcf, 0xd3,
515 0xa4, 0x22, 0x58, 0xcd, 0x50, 0x6e, 0x65, 0xf4,
516 0xe9, 0xb7, 0x71, 0xaf, 0x4b, 0xb3, 0xb6, 0x2f,
517 0x0f, 0x0e, 0x3b, 0xc9, 0x85, 0x14, 0xf5, 0x17,
518 0xe8, 0x7a, 0x3a, 0xbf, 0x5f, 0x5e, 0xf8, 0x18,
519 0x48, 0xa6, 0x72, 0xab, 0x06, 0x95, 0xe9, 0xc8,
520 0xa7, 0xf4, 0x32, 0x44, 0x04, 0x0c, 0x84, 0x98,
521 0x73, 0xe3, 0x89, 0x8d, 0x5f, 0x7e, 0x4a, 0x42,
522 0x8f, 0xc5, 0x28, 0xb1, 0x82, 0xef, 0x1c, 0x97,
523 0x31, 0x3b, 0x4d, 0xe0, 0x0e, 0x10, 0x10, 0x97,
524 0x93, 0x49, 0x78, 0x2f, 0x0d, 0x86, 0x8b, 0xa1,
525 0x53, 0xa9, 0x81, 0x20, 0x79, 0xe7, 0x07, 0x77,
526 0xb6, 0xac, 0x5e, 0xd2, 0x05, 0xcd, 0xe9, 0xdb,
527 0x8a, 0x94, 0x82, 0x8a, 0x23, 0xb9, 0x3d, 0x1c,
528 0xa9, 0x7d, 0x72, 0x4a, 0xed, 0x33, 0xa3, 0xdb,
529 0x21, 0xa7, 0x86, 0x33, 0x45, 0xa5, 0xaa, 0x56,
530 0x45, 0xb5, 0x83, 0x29, 0x40, 0x47, 0x79, 0x04,
531 0x6e, 0xb9, 0x95, 0xd0, 0x81, 0x77, 0x2d, 0x48,
532 0x1e, 0xfe, 0xc3, 0xc2, 0x1e, 0xe5, 0xf2, 0xbe,
533 0xfd, 0x3b, 0x94, 0x9f, 0xc4, 0xc4, 0x26, 0x9d,
534 0xe4, 0x66, 0x1e, 0x19, 0xee, 0x6c, 0x79, 0x97,
535 0x11, 0x31, 0x4b, 0x0d, 0x01, 0xcb, 0xde, 0xa8,
536 0xf6, 0x6d, 0x7c, 0x39, 0x46, 0x4e, 0x7e, 0x3f,
537 0x94, 0x17, 0xdf, 0xa1, 0x7d, 0xd9, 0x1c, 0x8e,
538 0xbc, 0x7d, 0x33, 0x7d, 0xe3, 0x12, 0x40, 0xca,
539 0xab, 0x37, 0x11, 0x46, 0xd4, 0xae, 0xef, 0x44,
540 0xa2, 0xb3, 0x6a, 0x66, 0x0e, 0x0c, 0x90, 0x7f,
541 0xdf, 0x5c, 0x66, 0x5f, 0xf2, 0x94, 0x9f, 0xa6,
542 0x73, 0x4f, 0xeb, 0x0d, 0xad, 0xbf, 0xc0, 0x63,
543 0x5c, 0xdc, 0x46, 0x51, 0xe8, 0x8e, 0x90, 0x19,
544 0xa8, 0xa4, 0x3c, 0x91, 0x79, 0xfa, 0x7e, 0x58,
545 0x85, 0x13, 0x55, 0xc5, 0x19, 0x82, 0x37, 0x1b,
546 0x0a, 0x02, 0x1f, 0x99, 0x6b, 0x18, 0xf1, 0x28,
547 0x08, 0xa2, 0x73, 0xb8, 0x0f, 0x2e, 0xcd, 0xbf,
548 0xf3, 0x86, 0x7f, 0xea, 0xef, 0xd0, 0xbb, 0xa6,
549 0x21, 0xdf, 0x49, 0x73, 0x51, 0xcc, 0x36, 0xd3,
550 0x3e, 0xa0, 0xf8, 0x44, 0xdf, 0xd3, 0xa6, 0xbe,
551 0x8a, 0xd4, 0x57, 0xdd, 0x72, 0x94, 0x61, 0x0f,
552 0x82, 0xd1, 0x07, 0xb8, 0x7c, 0x18, 0x83, 0xdf,
553 0x3a, 0xe5, 0x50, 0x6a, 0x82, 0x20, 0xac, 0xa9,
554 0xa8, 0xff, 0xd9, 0xf3, 0x77, 0x33, 0x5a, 0x9e,
555 0x7f, 0x6d, 0xfe, 0x5d, 0x33, 0x41, 0x42, 0xe7,
556 0x6c, 0x19, 0xe0, 0x44, 0x8a, 0x15, 0xf6, 0x70,
557 0x98, 0xb7, 0x68, 0x4d, 0xfa, 0x97, 0x39, 0xb0,
558 0x8e, 0xe8, 0x84, 0x8b, 0x75, 0x30, 0xb7, 0x7d,
559 0x92, 0x69, 0x20, 0x9c, 0x81, 0xfb, 0x4b, 0xf4,
560 0x01, 0x50, 0xeb, 0xce, 0x0c, 0x1c, 0x6c, 0xb5,
561 0x4a, 0xd7, 0x27, 0x0c, 0xce, 0xbb, 0xe5, 0x85,
562 0xf0, 0xb6, 0xee, 0xd5, 0x70, 0xdd, 0x3b, 0xfc,
563 0xd4, 0x99, 0xf1, 0x33, 0xdd, 0x8b, 0xc4, 0x2f,
564 0xae, 0xab, 0x74, 0x96, 0x32, 0xc7, 0x4c, 0x56,
565 0x3c, 0x89, 0x0f, 0x96, 0x0b, 0x42, 0xc0, 0xcb,
566 0xee, 0x0f, 0x0b, 0x8c, 0xfb, 0x7e, 0x47, 0x7b,
567 0x64, 0x48, 0xfd, 0xb2, 0x00, 0x80, 0x89, 0xa5,
568 0x13, 0x55, 0x62, 0xfc, 0x8f, 0xe2, 0x42, 0x03,
569 0xb7, 0x4e, 0x2a, 0x79, 0xb4, 0x82, 0xea, 0x23,
570 0x49, 0xda, 0xaf, 0x52, 0x63, 0x1e, 0x60, 0x03,
571 0x89, 0x06, 0x44, 0x46, 0x08, 0xc3, 0xc4, 0x87,
572 0x70, 0x2e, 0xda, 0x94, 0xad, 0x6b, 0xe0, 0xe4,
573 0xd1, 0x8a, 0x06, 0xc2, 0xa8, 0xc0, 0xa7, 0x43,
574 0x3c, 0x47, 0x52, 0x0e, 0xc3, 0x77, 0x81, 0x11,
575 0x67, 0x0e, 0xa0, 0x70, 0x04, 0x47, 0x29, 0x40,
576 0x86, 0x0d, 0x34, 0x56, 0xa7, 0xc9, 0x35, 0x59,
577 0x68, 0xdc, 0x93, 0x81, 0x70, 0xee, 0x86, 0xd9,
578 0x80, 0x06, 0x40, 0x4f, 0x1a, 0x0d, 0x40, 0x30,
579 0x0b, 0xcb, 0x96, 0x47, 0xc1, 0xb7, 0x52, 0xfd,
580 0x56, 0xe0, 0x72, 0x4b, 0xfb, 0xbd, 0x92, 0x45,
581 0x61, 0x71, 0xc2, 0x33, 0x11, 0xbf, 0x52, 0x83,
582 0x79, 0x26, 0xe0, 0x49, 0x6b, 0xb7, 0x05, 0x8b,
583 0xe8, 0x0e, 0x87, 0x31, 0xd7, 0x9d, 0x8a, 0xf5,
584 0xc0, 0x5f, 0x2e, 0x58, 0x4a, 0xdb, 0x11, 0xb3,
585 0x6c, 0x30, 0x2a, 0x46, 0x19, 0xe3, 0x27, 0x84,
586 0x1f, 0x63, 0x6e, 0xf6, 0x57, 0xc7, 0xc9, 0xd8,
587 0x5e, 0xba, 0xb3, 0x87, 0xd5, 0x83, 0x26, 0x34,
588 0x21, 0x9e, 0x65, 0xde, 0x42, 0xd3, 0xbe, 0x7b,
589 0xbc, 0x91, 0x71, 0x44, 0x4d, 0x99, 0x3b, 0x31,
590 0xe5, 0x3f, 0x11, 0x4e, 0x7f, 0x13, 0x51, 0x3b,
591 0xae, 0x79, 0xc9, 0xd3, 0x81, 0x8e, 0x25, 0x40,
592 0x10, 0xfc, 0x07, 0x1e, 0xf9, 0x7b, 0x9a, 0x4b,
593 0x6c, 0xe3, 0xb3, 0xad, 0x1a, 0x0a, 0xdd, 0x9e,
594 0x59, 0x0c, 0xa2, 0xcd, 0xae, 0x48, 0x4a, 0x38,
595 0x5b, 0x47, 0x41, 0x94, 0x65, 0x6b, 0xbb, 0xeb,
596 0x5b, 0xe3, 0xaf, 0x07, 0x5b, 0xd4, 0x4a, 0xa2,
597 0xc9, 0x5d, 0x2f, 0x64, 0x03, 0xd7, 0x3a, 0x2c,
598 0x6e, 0xce, 0x76, 0x95, 0xb4, 0xb3, 0xc0, 0xf1,
599 0xe2, 0x45, 0x73, 0x7a, 0x5c, 0xab, 0xc1, 0xfc,
600 0x02, 0x8d, 0x81, 0x29, 0xb3, 0xac, 0x07, 0xec,
601 0x40, 0x7d, 0x45, 0xd9, 0x7a, 0x59, 0xee, 0x34,
602 0xf0, 0xe9, 0xd5, 0x7b, 0x96, 0xb1, 0x3d, 0x95,
603 0xcc, 0x86, 0xb5, 0xb6, 0x04, 0x2d, 0xb5, 0x92,
604 0x7e, 0x76, 0xf4, 0x06, 0xa9, 0xa3, 0x12, 0x0f,
605 0xb1, 0xaf, 0x26, 0xba, 0x7c, 0xfc, 0x7e, 0x1c,
606 0xbc, 0x2c, 0x49, 0x97, 0x53, 0x60, 0x13, 0x0b,
607 0xa6, 0x61, 0x83, 0x89, 0x42, 0xd4, 0x17, 0x0c,
608 0x6c, 0x26, 0x52, 0xc3, 0xb3, 0xd4, 0x67, 0xf5,
609 0xe3, 0x04, 0xb7, 0xf4, 0xcb, 0x80, 0xb8, 0xcb,
610 0x77, 0x56, 0x3e, 0xaa, 0x57, 0x54, 0xee, 0xb4,
611 0x2c, 0x67, 0xcf, 0xf2, 0xdc, 0xbe, 0x55, 0xf9,
612 0x43, 0x1f, 0x6e, 0x22, 0x97, 0x67, 0x7f, 0xc4,
613 0xef, 0xb1, 0x26, 0x31, 0x1e, 0x27, 0xdf, 0x41,
614 0x80, 0x47, 0x6c, 0xe2, 0xfa, 0xa9, 0x8c, 0x2a,
615 0xf6, 0xf2, 0xab, 0xf0, 0x15, 0xda, 0x6c, 0xc8,
616 0xfe, 0xb5, 0x23, 0xde, 0xa9, 0x05, 0x3f, 0x06,
617 0x54, 0x4c, 0xcd, 0xe1, 0xab, 0xfc, 0x0e, 0x62,
618 0x33, 0x31, 0x73, 0x2c, 0x76, 0xcb, 0xb4, 0x47,
619 0x1e, 0x20, 0xad, 0xd8, 0xf2, 0x31, 0xdd, 0xc4,
620 0x8b, 0x0c, 0x77, 0xbe, 0xe1, 0x8b, 0x26, 0x00,
621 0x02, 0x58, 0xd6, 0x8d, 0xef, 0xad, 0x74, 0x67,
622 0xab, 0x3f, 0xef, 0xcb, 0x6f, 0xb0, 0xcc, 0x81,
623 0x44, 0x4c, 0xaf, 0xe9, 0x49, 0x4f, 0xdb, 0xa0,
624 0x25, 0xa4, 0xf0, 0x89, 0xf1, 0xbe, 0xd8, 0x10,
625 0xff, 0xb1, 0x3b, 0x4b, 0xfa, 0x98, 0xf5, 0x79,
626 0x6d, 0x1e, 0x69, 0x4d, 0x57, 0xb1, 0xc8, 0x19,
627 0x1b, 0xbd, 0x1e, 0x8c, 0x84, 0xb7, 0x7b, 0xe8,
628 0xd2, 0x2d, 0x09, 0x41, 0x41, 0x37, 0x3d, 0xb1,
629 0x6f, 0x26, 0x5d, 0x71, 0x16, 0x3d, 0xb7, 0x83,
630 0x27, 0x2c, 0xa7, 0xb6, 0x50, 0xbd, 0x91, 0x86,
631 0xab, 0x24, 0xa1, 0x38, 0xfd, 0xea, 0x71, 0x55,
632 0x7e, 0x9a, 0x07, 0x77, 0x4b, 0xfa, 0x61, 0x66,
633 0x20, 0x1e, 0x28, 0x95, 0x18, 0x1b, 0xa4, 0xa0,
634 0xfd, 0xc0, 0x89, 0x72, 0x43, 0xd9, 0x3b, 0x49,
635 0x5a, 0x3f, 0x9d, 0xbf, 0xdb, 0xb4, 0x46, 0xea,
636 0x42, 0x01, 0x77, 0x23, 0x68, 0x95, 0xb6, 0x24,
637 0xb3, 0xa8, 0x6c, 0x28, 0x3b, 0x11, 0x40, 0x7e,
638 0x18, 0x65, 0x6d, 0xd8, 0x24, 0x42, 0x7d, 0x88,
639 0xc0, 0x52, 0xd9, 0x05, 0xe4, 0x95, 0x90, 0x87,
640 0x8c, 0xf4, 0xd0, 0x6b, 0xb9, 0x83, 0x99, 0x34,
641 0x6d, 0xfe, 0x54, 0x40, 0x94, 0x52, 0x21, 0x4f,
642 0x14, 0x25, 0xc5, 0xd6, 0x5e, 0x95, 0xdc, 0x0a,
643 0x2b, 0x89, 0x20, 0x11, 0x84, 0x48, 0xd6, 0x3a,
644 0xcd, 0x5c, 0x24, 0xad, 0x62, 0xe3, 0xb1, 0x93,
645 0x25, 0x8d, 0xcd, 0x7e, 0xfc, 0x27, 0xa3, 0x37,
646 0xfd, 0x84, 0xfc, 0x1b, 0xb2, 0xf1, 0x27, 0x38,
647 0x5a, 0xb7, 0xfc, 0xf2, 0xfa, 0x95, 0x66, 0xd4,
648 0xfb, 0xba, 0xa7, 0xd7, 0xa3, 0x72, 0x69, 0x48,
649 0x48, 0x8c, 0xeb, 0x28, 0x89, 0xfe, 0x33, 0x65,
650 0x5a, 0x36, 0x01, 0x7e, 0x06, 0x79, 0x0a, 0x09,
651 0x3b, 0x74, 0x11, 0x9a, 0x6e, 0xbf, 0xd4, 0x9e,
652 0x58, 0x90, 0x49, 0x4f, 0x4d, 0x08, 0xd4, 0xe5,
653 0x4a, 0x09, 0x21, 0xef, 0x8b, 0xb8, 0x74, 0x3b,
654 0x91, 0xdd, 0x36, 0x85, 0x60, 0x2d, 0xfa, 0xd4,
655 0x45, 0x7b, 0x45, 0x53, 0xf5, 0x47, 0x87, 0x7e,
656 0xa6, 0x37, 0xc8, 0x78, 0x7a, 0x68, 0x9d, 0x8d,
657 0x65, 0x2c, 0x0e, 0x91, 0x5c, 0xa2, 0x60, 0xf0,
658 0x8e, 0x3f, 0xe9, 0x1a, 0xcd, 0xaa, 0xe7, 0xd5,
659 0x77, 0x18, 0xaf, 0xc9, 0xbc, 0x18, 0xea, 0x48,
660 0x1b, 0xfb, 0x22, 0x48, 0x70, 0x16, 0x29, 0x9e,
661 0x5b, 0xc1, 0x2c, 0x66, 0x23, 0xbc, 0xf0, 0x1f,
662 0xef, 0xaf, 0xe4, 0xd6, 0x04, 0x19, 0x82, 0x7a,
663 0x0b, 0xba, 0x4b, 0x46, 0xb1, 0x6a, 0x85, 0x5d,
664 0xb4, 0x73, 0xd6, 0x21, 0xa1, 0x71, 0x60, 0x14,
665 0xee, 0x0a, 0x77, 0xc4, 0x66, 0x2e, 0xf9, 0x69,
666 0x30, 0xaf, 0x41, 0x0b, 0xc8, 0x83, 0x3c, 0x53,
667 0x99, 0x19, 0x27, 0x46, 0xf7, 0x41, 0x6e, 0x56,
668 0xdc, 0x94, 0x28, 0x67, 0x4e, 0xb7, 0x25, 0x48,
669 0x8a, 0xc2, 0xe0, 0x60, 0x96, 0xcc, 0x18, 0xf4,
670 0x84, 0xdd, 0xa7, 0x5e, 0x3e, 0x05, 0x0b, 0x26,
671 0x26, 0xb2, 0x5c, 0x1f, 0x57, 0x1a, 0x04, 0x7e,
672 0x6a, 0xe3, 0x2f, 0xb4, 0x35, 0xb6, 0x38, 0x40,
673 0x40, 0xcd, 0x6f, 0x87, 0x2e, 0xef, 0xa3, 0xd7,
674 0xa9, 0xc2, 0xe8, 0x0d, 0x27, 0xdf, 0x44, 0x62,
675 0x99, 0xa0, 0xfc, 0xcf, 0x81, 0x78, 0xcb, 0xfe,
676 0xe5, 0xa0, 0x03, 0x4e, 0x6c, 0xd7, 0xf4, 0xaf,
677 0x7a, 0xbb, 0x61, 0x82, 0xfe, 0x71, 0x89, 0xb2,
678 0x22, 0x7c, 0x8e, 0x83, 0x04, 0xce, 0xf6, 0x5d,
679 0x84, 0x8f, 0x95, 0x6a, 0x7f, 0xad, 0xfd, 0x32,
680 0x9c, 0x5e, 0xe4, 0x9c, 0x89, 0x60, 0x54, 0xaa,
681 0x96, 0x72, 0xd2, 0xd7, 0x36, 0x85, 0xa9, 0x45,
682 0xd2, 0x2a, 0xa1, 0x81, 0x49, 0x6f, 0x7e, 0x04,
683 0xfa, 0xe2, 0xfe, 0x90, 0x26, 0x77, 0x5a, 0x33,
684 0xb8, 0x04, 0x9a, 0x7a, 0xe6, 0x4c, 0x4f, 0xad,
685 0x72, 0x96, 0x08, 0x28, 0x58, 0x13, 0xf8, 0xc4,
686 0x1c, 0xf0, 0xc3, 0x45, 0x95, 0x49, 0x20, 0x8c,
687 0x9f, 0x39, 0x70, 0xe1, 0x77, 0xfe, 0xd5, 0x4b,
688 0xaf, 0x86, 0xda, 0xef, 0x22, 0x06, 0x83, 0x36,
689 0x29, 0x12, 0x11, 0x40, 0xbc, 0x3b, 0x86, 0xaa,
690 0xaa, 0x65, 0x60, 0xc3, 0x80, 0xca, 0xed, 0xa9,
691 0xf3, 0xb0, 0x79, 0x96, 0xa2, 0x55, 0x27, 0x28,
692 0x55, 0x73, 0x26, 0xa5, 0x50, 0xea, 0x92, 0x4b,
693 0x3c, 0x5c, 0x82, 0x33, 0xf0, 0x01, 0x3f, 0x03,
694 0xc1, 0x08, 0x05, 0xbf, 0x98, 0xf4, 0x9b, 0x6d,
695 0xa5, 0xa8, 0xb4, 0x82, 0x0c, 0x06, 0xfa, 0xff,
696 0x2d, 0x08, 0xf3, 0x05, 0x4f, 0x57, 0x2a, 0x39,
697 0xd4, 0x83, 0x0d, 0x75, 0x51, 0xd8, 0x5b, 0x1b,
698 0xd3, 0x51, 0x5a, 0x32, 0x2a, 0x9b, 0x32, 0xb2,
699 0xf2, 0xa4, 0x96, 0x12, 0xf2, 0xae, 0x40, 0x34,
700 0x67, 0xa8, 0xf5, 0x44, 0xd5, 0x35, 0x53, 0xfe,
701 0xa3, 0x60, 0x96, 0x63, 0x0f, 0x1f, 0x6e, 0xb0,
702 0x5a, 0x42, 0xa6, 0xfc, 0x51, 0x0b, 0x60, 0x27,
703 0xbc, 0x06, 0x71, 0xed, 0x65, 0x5b, 0x23, 0x86,
704 0x4a, 0x07, 0x3b, 0x22, 0x07, 0x46, 0xe6, 0x90,
705 0x3e, 0xf3, 0x25, 0x50, 0x1b, 0x4c, 0x7f, 0x03,
706 0x08, 0xa8, 0x36, 0x6b, 0x87, 0xe5, 0xe3, 0xdb,
707 0x9a, 0x38, 0x83, 0xff, 0x9f, 0x1a, 0x9f, 0x57,
708 0xa4, 0x2a, 0xf6, 0x37, 0xbc, 0x1a, 0xff, 0xc9,
709 0x1e, 0x35, 0x0c, 0xc3, 0x7c, 0xa3, 0xb2, 0xe5,
710 0xd2, 0xc6, 0xb4, 0x57, 0x47, 0xe4, 0x32, 0x16,
711 0x6d, 0xa9, 0xae, 0x64, 0xe6, 0x2d, 0x8d, 0xc5,
712 0x8d, 0x50, 0x8e, 0xe8, 0x1a, 0x22, 0x34, 0x2a,
713 0xd9, 0xeb, 0x51, 0x90, 0x4a, 0xb1, 0x41, 0x7d,
714 0x64, 0xf9, 0xb9, 0x0d, 0xf6, 0x23, 0x33, 0xb0,
715 0x33, 0xf4, 0xf7, 0x3f, 0x27, 0x84, 0xc6, 0x0f,
716 0x54, 0xa5, 0xc0, 0x2e, 0xec, 0x0b, 0x3a, 0x48,
717 0x6e, 0x80, 0x35, 0x81, 0x43, 0x9b, 0x90, 0xb1,
718 0xd0, 0x2b, 0xea, 0x21, 0xdc, 0xda, 0x5b, 0x09,
719 0xf4, 0xcc, 0x10, 0xb4, 0xc7, 0xfe, 0x79, 0x51,
720 0xc3, 0xc5, 0xac, 0x88, 0x74, 0x84, 0x0b, 0x4b,
721 0xca, 0x79, 0x16, 0x29, 0xfb, 0x69, 0x54, 0xdf,
722 0x41, 0x7e, 0xe9, 0xc7, 0x8e, 0xea, 0xa5, 0xfe,
723 0xfc, 0x76, 0x0e, 0x90, 0xc4, 0x92, 0x38, 0xad,
724 0x7b, 0x48, 0xe6, 0x6e, 0xf7, 0x21, 0xfd, 0x4e,
725 0x93, 0x0a, 0x7b, 0x41, 0x83, 0x68, 0xfb, 0x57,
726 0x51, 0x76, 0x34, 0xa9, 0x6c, 0x00, 0xaa, 0x4f,
727 0x66, 0x65, 0x98, 0x4a, 0x4f, 0xa3, 0xa0, 0xef,
728 0x69, 0x3f, 0xe3, 0x1c, 0x92, 0x8c, 0xfd, 0xd8,
729 0xe8, 0xde, 0x7c, 0x7f, 0x3e, 0x84, 0x8e, 0x69,
730 0x3c, 0xf1, 0xf2, 0x05, 0x46, 0xdc, 0x2f, 0x9d,
731 0x5e, 0x6e, 0x4c, 0xfb, 0xb5, 0x99, 0x2a, 0x59,
732 0x63, 0xc1, 0x34, 0xbc, 0x57, 0xc0, 0x0d, 0xb9,
733 0x61, 0x25, 0xf3, 0x33, 0x23, 0x51, 0xb6, 0x0d,
734 0x07, 0xa6, 0xab, 0x94, 0x4a, 0xb7, 0x2a, 0xea,
735 0xee, 0xac, 0xa3, 0xc3, 0x04, 0x8b, 0x0e, 0x56,
736 0xfe, 0x44, 0xa7, 0x39, 0xe2, 0xed, 0xed, 0xb4,
737 0x22, 0x2b, 0xac, 0x12, 0x32, 0x28, 0x91, 0xd8,
738 0xa5, 0xab, 0xff, 0x5f, 0xe0, 0x4b, 0xda, 0x78,
739 0x17, 0xda, 0xf1, 0x01, 0x5b, 0xcd, 0xe2, 0x5f,
740 0x50, 0x45, 0x73, 0x2b, 0xe4, 0x76, 0x77, 0xf4,
741 0x64, 0x1d, 0x43, 0xfb, 0x84, 0x7a, 0xea, 0x91,
742 0xae, 0xf9, 0x9e, 0xb7, 0xb4, 0xb0, 0x91, 0x5f,
743 0x16, 0x35, 0x9a, 0x11, 0xb8, 0xc7, 0xc1, 0x8c,
744 0xc6, 0x10, 0x8d, 0x2f, 0x63, 0x4a, 0xa7, 0x57,
745 0x3a, 0x51, 0xd6, 0x32, 0x2d, 0x64, 0x72, 0xd4,
746 0x66, 0xdc, 0x10, 0xa6, 0x67, 0xd6, 0x04, 0x23,
747 0x9d, 0x0a, 0x11, 0x77, 0xdd, 0x37, 0x94, 0x17,
748 0x3c, 0xbf, 0x8b, 0x65, 0xb0, 0x2e, 0x5e, 0x66,
749 0x47, 0x64, 0xac, 0xdd, 0xf0, 0x84, 0xfd, 0x39,
750 0xfa, 0x15, 0x5d, 0xef, 0xae, 0xca, 0xc1, 0x36,
751 0xa7, 0x5c, 0xbf, 0xc7, 0x08, 0xc2, 0x66, 0x00,
752 0x74, 0x74, 0x4e, 0x27, 0x3f, 0x55, 0x8a, 0xb7,
753 0x38, 0x66, 0x83, 0x6d, 0xcf, 0x99, 0x9e, 0x60,
754 0x8f, 0xdd, 0x2e, 0x62, 0x22, 0x0e, 0xef, 0x0c,
755 0x98, 0xa7, 0x85, 0x74, 0x3b, 0x9d, 0xec, 0x9e,
756 0xa9, 0x19, 0x72, 0xa5, 0x7f, 0x2c, 0x39, 0xb7,
757 0x7d, 0xb7, 0xf1, 0x12, 0x65, 0x27, 0x4b, 0x5a,
758 0xde, 0x17, 0xfe, 0xad, 0x44, 0xf3, 0x20, 0x4d,
759 0xfd, 0xe4, 0x1f, 0xb5, 0x81, 0xb0, 0x36, 0x37,
760 0x08, 0x6f, 0xc3, 0x0c, 0xe9, 0x85, 0x98, 0x82,
761 0xa9, 0x62, 0x0c, 0xc4, 0x97, 0xc0, 0x50, 0xc8,
762 0xa7, 0x3c, 0x50, 0x9f, 0x43, 0xb9, 0xcd, 0x5e,
763 0x4d, 0xfa, 0x1c, 0x4b, 0x0b, 0xa9, 0x98, 0x85,
764 0x38, 0x92, 0xac, 0x8d, 0xe4, 0xad, 0x9b, 0x98,
765 0xab, 0xd9, 0x38, 0xac, 0x62, 0x52, 0xa3, 0x22,
766 0x63, 0x0f, 0xbf, 0x95, 0x48, 0xdf, 0x69, 0xe7,
767 0x8b, 0x33, 0xd5, 0xb2, 0xbd, 0x05, 0x49, 0x49,
768 0x9d, 0x57, 0x73, 0x19, 0x33, 0xae, 0xfa, 0x33,
769 0xf1, 0x19, 0xa8, 0x80, 0xce, 0x04, 0x9f, 0xbc,
770 0x1d, 0x65, 0x82, 0x1b, 0xe5, 0x3a, 0x51, 0xc8,
771 0x1c, 0x21, 0xe3, 0x5d, 0xf3, 0x7d, 0x9b, 0x2f,
772 0x2c, 0x1d, 0x4a, 0x7f, 0x9b, 0x68, 0x35, 0xa3,
773 0xb2, 0x50, 0xf7, 0x62, 0x79, 0xcd, 0xf4, 0x98,
774 0x4f, 0xe5, 0x63, 0x7c, 0x3e, 0x45, 0x31, 0x8c,
775 0x16, 0xa0, 0x12, 0xc8, 0x58, 0xce, 0x39, 0xa6,
776 0xbc, 0x54, 0xdb, 0xc5, 0xe0, 0xd5, 0xba, 0xbc,
777 0xb9, 0x04, 0xf4, 0x8d, 0xe8, 0x2f, 0x15, 0x9d,
781 static struct crc_test {
782 u32 crc; /* random starting crc */
783 u32 start; /* random 6 bit offset in buf */
784 u32 length; /* random 11 bit length of test */
785 u32 crc_le; /* expected crc32_le result */
786 u32 crc_be; /* expected crc32_be result */
787 u32 crc32c_le; /* expected crc32c_le result */
790 {0x674bf11d, 0x00000038, 0x00000542, 0x0af6d466, 0xd8b6e4c1,
792 {0x35c672c6, 0x0000003a, 0x000001aa, 0xc6d3dfba, 0x28aaf3ad,
794 {0x496da28e, 0x00000039, 0x000005af, 0xd933660f, 0x5d57e81f,
796 {0x09a9b90e, 0x00000027, 0x000001f8, 0xb45fe007, 0xf45fca9a,
798 {0xdc97e5a9, 0x00000025, 0x000003b6, 0xf81a3562, 0xe0126ba2,
800 {0x47c58900, 0x0000000a, 0x000000b9, 0x8e58eccf, 0xf3afc793,
802 {0x292561e8, 0x0000000c, 0x00000403, 0xa2ba8aaf, 0x0b797aed,
804 {0x415037f6, 0x00000003, 0x00000676, 0xa17d52e8, 0x7f0fdf35,
806 {0x3466e707, 0x00000026, 0x00000042, 0x258319be, 0x75c484a2,
808 {0xafd1281b, 0x00000023, 0x000002ee, 0x4428eaf8, 0x06c7ad10,
810 {0xd3857b18, 0x00000028, 0x000004a2, 0x5c430821, 0xb062b7cb,
812 {0x1d825a8f, 0x0000002b, 0x0000050b, 0xd2c45f0c, 0xd68634e0,
814 {0x5033e3bc, 0x0000000b, 0x00000078, 0xa3ea4113, 0xac6d31fb,
816 {0x94f1fb5e, 0x0000000f, 0x000003a2, 0xfbfc50b1, 0x3cfe50ed,
818 {0xc9a0fe14, 0x00000009, 0x00000473, 0x5fb61894, 0x87070591,
820 {0x88a034b1, 0x0000001c, 0x000005ad, 0xc1b16053, 0x46f95c67,
822 {0xf0f72239, 0x00000020, 0x0000026d, 0xa6fa58f3, 0xf8c2c1dd,
824 {0xcc20a5e3, 0x0000003b, 0x0000067a, 0x7740185a, 0x308b979a,
826 {0xce589c95, 0x0000002b, 0x00000641, 0xd055e987, 0x40aae25b,
828 {0x78edc885, 0x00000035, 0x000005be, 0xa39cb14b, 0x035b0d1f,
830 {0x9d40a377, 0x0000003b, 0x00000038, 0x1f47ccd2, 0x197fbc9d,
832 {0x703d0e01, 0x0000003c, 0x000006f1, 0x88735e7c, 0xfed57c5a,
834 {0x776bf505, 0x0000000f, 0x000005b2, 0x5cc4fc01, 0xf32efb97,
836 {0x4a3e7854, 0x00000027, 0x000004b8, 0x8d923c82, 0x0cbfb4a2,
838 {0x209172dd, 0x0000003b, 0x00000356, 0xb89e9c2b, 0xd7868138,
840 {0x3ba4cc5b, 0x0000002f, 0x00000203, 0xe51601a9, 0x5b2a1032,
842 {0xfc62f297, 0x00000000, 0x00000079, 0x71a8e1a2, 0x5d88685f,
844 {0x64280b8b, 0x00000016, 0x000007ab, 0x0fa7a30c, 0xda3a455f,
846 {0x97dd724b, 0x00000033, 0x000007ad, 0x5788b2f4, 0xd7326d32,
848 {0x61394b52, 0x00000035, 0x00000571, 0xc66525f1, 0xcabe7fef,
850 {0x29b4faff, 0x00000024, 0x0000006e, 0xca13751e, 0x993648e0,
852 {0x29bfb1dc, 0x0000000b, 0x00000244, 0x436c43f7, 0x429f7a59,
854 {0x86ae934b, 0x00000035, 0x00000104, 0x0760ec93, 0x9cf7d0f4,
856 {0xc4c1024e, 0x0000002e, 0x000006b1, 0x6516a3ec, 0x19321f9c,
858 {0x3287a80a, 0x00000026, 0x00000496, 0x0b257eb1, 0x754ebd51,
860 {0xa4db423e, 0x00000023, 0x0000045d, 0x9b3a66dc, 0x873e9f11,
862 {0x7a1078df, 0x00000015, 0x0000014a, 0x8c2484c5, 0x6a628659,
864 {0x6048bd5b, 0x00000006, 0x0000006a, 0x897e3559, 0xac9961af,
866 {0xd8f9ea20, 0x0000003d, 0x00000277, 0x60eb905b, 0xed2aaf99,
868 {0xea5ec3b4, 0x0000002a, 0x000004fe, 0x869965dc, 0x6c1f833b,
870 {0x2dfb005d, 0x00000016, 0x00000345, 0x6a3b117e, 0xf05e8521,
872 {0x5a214ade, 0x00000020, 0x000005b6, 0x467f70be, 0xcb22ccd3,
874 {0xf0ab9cca, 0x00000032, 0x00000515, 0xed223df3, 0x7f3ef01d,
876 {0x91b444f9, 0x0000002e, 0x000007f8, 0x84e9a983, 0x5676756f,
878 {0x1b5d2ddb, 0x0000002e, 0x0000012c, 0xba638c4c, 0x3f42047b,
880 {0xd824d1bb, 0x0000003a, 0x000007b5, 0x6288653b, 0x3a3ebea0,
882 {0x0470180c, 0x00000034, 0x000001f0, 0x9d5b80d6, 0x3de08195,
884 {0xffaa3a3f, 0x00000036, 0x00000299, 0xf3a82ab8, 0x53e0c13d,
886 {0x6406cfeb, 0x00000023, 0x00000600, 0xa920b8e8, 0xe4e2acf4,
888 {0xb24aaa38, 0x0000003e, 0x000004a1, 0x657cc328, 0x5077b2c3,
890 {0x58b2ab7c, 0x00000039, 0x000002b4, 0x3a17ee7e, 0x9dcb3643,
892 {0x3db85970, 0x00000006, 0x000002b6, 0x95268b59, 0xb9812c10,
894 {0x857830c5, 0x00000003, 0x00000590, 0x4ef439d5, 0xf042161d,
896 {0xe1fcd978, 0x0000003e, 0x000007d8, 0xae8d8699, 0xce0a1ef5,
898 {0xb982a768, 0x00000016, 0x000006e0, 0x62fad3df, 0x5f8a067b,
900 {0x1d581ce8, 0x0000001e, 0x0000058b, 0xf0f5da53, 0x26e39eee,
902 {0x2456719b, 0x00000025, 0x00000503, 0x4296ac64, 0xd50e4c14,
904 {0xfae6d8f2, 0x00000000, 0x0000055d, 0x057fdf2e, 0x2a31391a,
906 {0xcba828e3, 0x00000039, 0x000002ce, 0xe3f22351, 0x8f00877b,
908 {0x13d25952, 0x0000000a, 0x0000072d, 0x76d4b4cc, 0x5eb67ec3,
910 {0x0342be3f, 0x00000015, 0x00000599, 0xec75d9f1, 0x9d4d2826,
912 {0xeaa344e0, 0x00000014, 0x000004d8, 0x72a4c981, 0x2064ea06,
914 {0xbbb52021, 0x0000003b, 0x00000272, 0x04af99fc, 0xaf042d35,
916 {0xb66384dc, 0x0000001d, 0x000007fc, 0xd7629116, 0x782bd801,
918 {0x616c01b6, 0x00000022, 0x000002c8, 0x5b1dab30, 0x783ce7d2,
920 {0xce2bdaad, 0x00000016, 0x0000062a, 0x932535c8, 0x3f02926d,
922 {0x00fe84d7, 0x00000005, 0x00000205, 0x850e50aa, 0x753d649c,
924 {0xbebdcb4c, 0x00000006, 0x0000055d, 0xbeaa37a2, 0x2d8c9eba,
926 {0xd8b1a02a, 0x00000010, 0x00000387, 0x5017d2fc, 0x503541a5,
928 {0x3b96cad2, 0x00000036, 0x00000347, 0x1d2372ae, 0x926cd90b,
930 {0xc94c1ed7, 0x00000005, 0x0000038b, 0x9e9fdb22, 0x144a9178,
932 {0x1aad454e, 0x00000025, 0x000002b2, 0xc3f6315c, 0x5c7a35b3,
934 {0xa4fec9a6, 0x00000000, 0x000006d6, 0x90be5080, 0xa4107605,
936 {0x1bbe71e2, 0x0000001f, 0x000002fd, 0x4e504c3b, 0x284ccaf1,
938 {0x4201c7e4, 0x00000002, 0x000002b7, 0x7822e3f9, 0x0cc912a9,
940 {0x23fddc96, 0x00000003, 0x00000627, 0x8a385125, 0x07767e78,
942 {0xd82ba25c, 0x00000016, 0x0000063e, 0x98e4148a, 0x283330c9,
944 {0x786f2032, 0x0000002d, 0x0000060f, 0xf201600a, 0xf561bfcd,
946 {0xfebe4e1f, 0x0000002a, 0x000004f2, 0x95e51961, 0xfd80dcab,
948 {0x1a6e0a39, 0x00000008, 0x00000672, 0x8af6c2a5, 0x78dd84cb,
950 {0x56000ab8, 0x0000000e, 0x000000e5, 0x36bacb8f, 0x22ee1f77,
952 {0x4717fe0c, 0x00000000, 0x000006ec, 0x8439f342, 0x5c8e03da,
954 {0xd5d5d68e, 0x0000003c, 0x000003a3, 0x46fff083, 0x177d1b39,
956 {0xc25dd6c6, 0x00000024, 0x000006c0, 0x5ceb8eb4, 0x892b0d16,
958 {0xe9b11300, 0x00000023, 0x00000683, 0x07a5d59a, 0x6c6a3208,
960 {0x95cd285e, 0x00000001, 0x00000047, 0x7b3a4368, 0x0202c07e,
962 {0xd9245a25, 0x0000001e, 0x000003a6, 0xd33c1841, 0x1936c0d5,
964 {0x103279db, 0x00000006, 0x0000039b, 0xca09b8a0, 0x77d62892,
966 {0x1cba3172, 0x00000027, 0x000001c8, 0xcb377194, 0xebe682db,
968 {0x8f613739, 0x0000000c, 0x000001df, 0xb4b0bc87, 0x7710bd43,
970 {0x1c6aa90d, 0x0000001b, 0x0000053c, 0x70559245, 0xda7894ac,
972 {0xaabe5b93, 0x0000003d, 0x00000715, 0xcdbf42fa, 0x0c3b99e7,
974 {0xf15dd038, 0x00000006, 0x000006db, 0x6e104aea, 0x8d5967f2,
976 {0x584dd49c, 0x00000020, 0x000007bc, 0x36b6cfd6, 0xad4e23b2,
978 {0x5d8c9506, 0x00000020, 0x00000470, 0x4c62378e, 0x31d92640,
980 {0xb80d17b0, 0x00000032, 0x00000346, 0x22a5bb88, 0x9a7ec89f,
982 {0xdaf0592e, 0x00000023, 0x000007b0, 0x3cab3f99, 0x9b1fdd99,
984 {0x4793cc85, 0x0000000d, 0x00000706, 0xe82e04f6, 0xed3db6b7,
986 {0x82ebf64e, 0x00000009, 0x000007c3, 0x69d590a9, 0x9efa8499,
988 {0xb18a0319, 0x00000026, 0x000007db, 0x1cf98dcc, 0x8fa9ad6a,
992 #include <linux/time.h>
994 static int __init crc32c_test(void)
999 struct timespec start, stop;
1001 unsigned long flags;
1003 /* keep static to prevent cache warming code from
1004 * getting eliminated by the compiler */
1007 /* pre-warm the cache */
1008 for (i = 0; i < 100; i++) {
1009 bytes += 2*test[i].length;
1011 crc ^= __crc32c_le(test[i].crc, test_buf +
1012 test[i].start, test[i].length);
1015 /* reduce OS noise */
1016 local_irq_save(flags);
1017 local_irq_disable();
1019 getnstimeofday(&start);
1020 for (i = 0; i < 100; i++) {
1021 if (test[i].crc32c_le != __crc32c_le(test[i].crc, test_buf +
1022 test[i].start, test[i].length))
1025 getnstimeofday(&stop);
1027 local_irq_restore(flags);
1030 nsec = stop.tv_nsec - start.tv_nsec +
1031 1000000000 * (stop.tv_sec - start.tv_sec);
1033 pr_info("crc32c: CRC_LE_BITS = %d\n", CRC_LE_BITS);
1036 pr_warn("crc32c: %d self tests failed\n", errors);
1038 pr_info("crc32c: self tests passed, processed %d bytes in %lld nsec\n",
1045 static int __init crc32_test(void)
1050 struct timespec start, stop;
1052 unsigned long flags;
1054 /* keep static to prevent cache warming code from
1055 * getting eliminated by the compiler */
1058 /* pre-warm the cache */
1059 for (i = 0; i < 100; i++) {
1060 bytes += 2*test[i].length;
1062 crc ^= crc32_le(test[i].crc, test_buf +
1063 test[i].start, test[i].length);
1065 crc ^= crc32_be(test[i].crc, test_buf +
1066 test[i].start, test[i].length);
1069 /* reduce OS noise */
1070 local_irq_save(flags);
1071 local_irq_disable();
1073 getnstimeofday(&start);
1074 for (i = 0; i < 100; i++) {
1075 if (test[i].crc_le != crc32_le(test[i].crc, test_buf +
1076 test[i].start, test[i].length))
1079 if (test[i].crc_be != crc32_be(test[i].crc, test_buf +
1080 test[i].start, test[i].length))
1083 getnstimeofday(&stop);
1085 local_irq_restore(flags);
1088 nsec = stop.tv_nsec - start.tv_nsec +
1089 1000000000 * (stop.tv_sec - start.tv_sec);
1091 pr_info("crc32: CRC_LE_BITS = %d, CRC_BE BITS = %d\n",
1092 CRC_LE_BITS, CRC_BE_BITS);
1095 pr_warn("crc32: %d self tests failed\n", errors);
1097 pr_info("crc32: self tests passed, processed %d bytes in %lld nsec\n",
1104 static int __init crc32test_init(void)
1111 static void __exit crc32_exit(void)
1115 module_init(crc32test_init);
1116 module_exit(crc32_exit);
1117 #endif /* CONFIG_CRC32_SELFTEST */