xref: /openbmc/linux/lib/crc32test.c (revision 1b3dce8b)
15fb7f874SGeert Uytterhoeven /*
25fb7f874SGeert Uytterhoeven  * Aug 8, 2011 Bob Pearson with help from Joakim Tjernlund and George Spelvin
35fb7f874SGeert Uytterhoeven  * cleaned up code to current version of sparse and added the slicing-by-8
45fb7f874SGeert Uytterhoeven  * algorithm to the closely similar existing slicing-by-4 algorithm.
55fb7f874SGeert Uytterhoeven  *
65fb7f874SGeert Uytterhoeven  * Oct 15, 2000 Matt Domsch <Matt_Domsch@dell.com>
75fb7f874SGeert Uytterhoeven  * Nicer crc32 functions/docs submitted by linux@horizon.com.  Thanks!
85fb7f874SGeert Uytterhoeven  * Code was from the public domain, copyright abandoned.  Code was
95fb7f874SGeert Uytterhoeven  * subsequently included in the kernel, thus was re-licensed under the
105fb7f874SGeert Uytterhoeven  * GNU GPL v2.
115fb7f874SGeert Uytterhoeven  *
125fb7f874SGeert Uytterhoeven  * Oct 12, 2000 Matt Domsch <Matt_Domsch@dell.com>
135fb7f874SGeert Uytterhoeven  * Same crc32 function was used in 5 other places in the kernel.
145fb7f874SGeert Uytterhoeven  * I made one version, and deleted the others.
155fb7f874SGeert Uytterhoeven  * There are various incantations of crc32().  Some use a seed of 0 or ~0.
165fb7f874SGeert Uytterhoeven  * Some xor at the end with ~0.  The generic crc32() function takes
175fb7f874SGeert Uytterhoeven  * seed as an argument, and doesn't xor at the end.  Then individual
185fb7f874SGeert Uytterhoeven  * users can do whatever they need.
195fb7f874SGeert Uytterhoeven  *   drivers/net/smc9194.c uses seed ~0, doesn't xor with ~0.
205fb7f874SGeert Uytterhoeven  *   fs/jffs2 uses seed 0, doesn't xor with ~0.
215fb7f874SGeert Uytterhoeven  *   fs/partitions/efi.c uses seed ~0, xor's with ~0.
225fb7f874SGeert Uytterhoeven  *
235fb7f874SGeert Uytterhoeven  * This source code is licensed under the GNU General Public License,
245fb7f874SGeert Uytterhoeven  * Version 2.  See the file COPYING for more details.
255fb7f874SGeert Uytterhoeven  */
265fb7f874SGeert Uytterhoeven 
275fb7f874SGeert Uytterhoeven #include <linux/crc32.h>
285fb7f874SGeert Uytterhoeven #include <linux/module.h>
295fb7f874SGeert Uytterhoeven #include <linux/sched.h>
305fb7f874SGeert Uytterhoeven 
315fb7f874SGeert Uytterhoeven #include "crc32defs.h"
325fb7f874SGeert Uytterhoeven 
335fb7f874SGeert Uytterhoeven /* 4096 random bytes */
345fb7f874SGeert Uytterhoeven static u8 const __aligned(8) test_buf[] __initconst =
355fb7f874SGeert Uytterhoeven {
365fb7f874SGeert Uytterhoeven 	0x5b, 0x85, 0x21, 0xcb, 0x09, 0x68, 0x7d, 0x30,
375fb7f874SGeert Uytterhoeven 	0xc7, 0x69, 0xd7, 0x30, 0x92, 0xde, 0x59, 0xe4,
385fb7f874SGeert Uytterhoeven 	0xc9, 0x6e, 0x8b, 0xdb, 0x98, 0x6b, 0xaa, 0x60,
395fb7f874SGeert Uytterhoeven 	0xa8, 0xb5, 0xbc, 0x6c, 0xa9, 0xb1, 0x5b, 0x2c,
405fb7f874SGeert Uytterhoeven 	0xea, 0xb4, 0x92, 0x6a, 0x3f, 0x79, 0x91, 0xe4,
415fb7f874SGeert Uytterhoeven 	0xe9, 0x70, 0x51, 0x8c, 0x7f, 0x95, 0x6f, 0x1a,
425fb7f874SGeert Uytterhoeven 	0x56, 0xa1, 0x5c, 0x27, 0x03, 0x67, 0x9f, 0x3a,
435fb7f874SGeert Uytterhoeven 	0xe2, 0x31, 0x11, 0x29, 0x6b, 0x98, 0xfc, 0xc4,
445fb7f874SGeert Uytterhoeven 	0x53, 0x24, 0xc5, 0x8b, 0xce, 0x47, 0xb2, 0xb9,
455fb7f874SGeert Uytterhoeven 	0x32, 0xcb, 0xc1, 0xd0, 0x03, 0x57, 0x4e, 0xd4,
465fb7f874SGeert Uytterhoeven 	0xe9, 0x3c, 0xa1, 0x63, 0xcf, 0x12, 0x0e, 0xca,
475fb7f874SGeert Uytterhoeven 	0xe1, 0x13, 0xd1, 0x93, 0xa6, 0x88, 0x5c, 0x61,
485fb7f874SGeert Uytterhoeven 	0x5b, 0xbb, 0xf0, 0x19, 0x46, 0xb4, 0xcf, 0x9e,
495fb7f874SGeert Uytterhoeven 	0xb6, 0x6b, 0x4c, 0x3a, 0xcf, 0x60, 0xf9, 0x7a,
505fb7f874SGeert Uytterhoeven 	0x8d, 0x07, 0x63, 0xdb, 0x40, 0xe9, 0x0b, 0x6f,
515fb7f874SGeert Uytterhoeven 	0xad, 0x97, 0xf1, 0xed, 0xd0, 0x1e, 0x26, 0xfd,
525fb7f874SGeert Uytterhoeven 	0xbf, 0xb7, 0xc8, 0x04, 0x94, 0xf8, 0x8b, 0x8c,
535fb7f874SGeert Uytterhoeven 	0xf1, 0xab, 0x7a, 0xd4, 0xdd, 0xf3, 0xe8, 0x88,
545fb7f874SGeert Uytterhoeven 	0xc3, 0xed, 0x17, 0x8a, 0x9b, 0x40, 0x0d, 0x53,
555fb7f874SGeert Uytterhoeven 	0x62, 0x12, 0x03, 0x5f, 0x1b, 0x35, 0x32, 0x1f,
565fb7f874SGeert Uytterhoeven 	0xb4, 0x7b, 0x93, 0x78, 0x0d, 0xdb, 0xce, 0xa4,
575fb7f874SGeert Uytterhoeven 	0xc0, 0x47, 0xd5, 0xbf, 0x68, 0xe8, 0x5d, 0x74,
585fb7f874SGeert Uytterhoeven 	0x8f, 0x8e, 0x75, 0x1c, 0xb2, 0x4f, 0x9a, 0x60,
595fb7f874SGeert Uytterhoeven 	0xd1, 0xbe, 0x10, 0xf4, 0x5c, 0xa1, 0x53, 0x09,
605fb7f874SGeert Uytterhoeven 	0xa5, 0xe0, 0x09, 0x54, 0x85, 0x5c, 0xdc, 0x07,
615fb7f874SGeert Uytterhoeven 	0xe7, 0x21, 0x69, 0x7b, 0x8a, 0xfd, 0x90, 0xf1,
625fb7f874SGeert Uytterhoeven 	0x22, 0xd0, 0xb4, 0x36, 0x28, 0xe6, 0xb8, 0x0f,
635fb7f874SGeert Uytterhoeven 	0x39, 0xde, 0xc8, 0xf3, 0x86, 0x60, 0x34, 0xd2,
645fb7f874SGeert Uytterhoeven 	0x5e, 0xdf, 0xfd, 0xcf, 0x0f, 0xa9, 0x65, 0xf0,
655fb7f874SGeert Uytterhoeven 	0xd5, 0x4d, 0x96, 0x40, 0xe3, 0xdf, 0x3f, 0x95,
665fb7f874SGeert Uytterhoeven 	0x5a, 0x39, 0x19, 0x93, 0xf4, 0x75, 0xce, 0x22,
675fb7f874SGeert Uytterhoeven 	0x00, 0x1c, 0x93, 0xe2, 0x03, 0x66, 0xf4, 0x93,
685fb7f874SGeert Uytterhoeven 	0x73, 0x86, 0x81, 0x8e, 0x29, 0x44, 0x48, 0x86,
695fb7f874SGeert Uytterhoeven 	0x61, 0x7c, 0x48, 0xa3, 0x43, 0xd2, 0x9c, 0x8d,
705fb7f874SGeert Uytterhoeven 	0xd4, 0x95, 0xdd, 0xe1, 0x22, 0x89, 0x3a, 0x40,
715fb7f874SGeert Uytterhoeven 	0x4c, 0x1b, 0x8a, 0x04, 0xa8, 0x09, 0x69, 0x8b,
725fb7f874SGeert Uytterhoeven 	0xea, 0xc6, 0x55, 0x8e, 0x57, 0xe6, 0x64, 0x35,
735fb7f874SGeert Uytterhoeven 	0xf0, 0xc7, 0x16, 0x9f, 0x5d, 0x5e, 0x86, 0x40,
745fb7f874SGeert Uytterhoeven 	0x46, 0xbb, 0xe5, 0x45, 0x88, 0xfe, 0xc9, 0x63,
755fb7f874SGeert Uytterhoeven 	0x15, 0xfb, 0xf5, 0xbd, 0x71, 0x61, 0xeb, 0x7b,
765fb7f874SGeert Uytterhoeven 	0x78, 0x70, 0x07, 0x31, 0x03, 0x9f, 0xb2, 0xc8,
775fb7f874SGeert Uytterhoeven 	0xa7, 0xab, 0x47, 0xfd, 0xdf, 0xa0, 0x78, 0x72,
785fb7f874SGeert Uytterhoeven 	0xa4, 0x2a, 0xe4, 0xb6, 0xba, 0xc0, 0x1e, 0x86,
795fb7f874SGeert Uytterhoeven 	0x71, 0xe6, 0x3d, 0x18, 0x37, 0x70, 0xe6, 0xff,
805fb7f874SGeert Uytterhoeven 	0xe0, 0xbc, 0x0b, 0x22, 0xa0, 0x1f, 0xd3, 0xed,
815fb7f874SGeert Uytterhoeven 	0xa2, 0x55, 0x39, 0xab, 0xa8, 0x13, 0x73, 0x7c,
825fb7f874SGeert Uytterhoeven 	0x3f, 0xb2, 0xd6, 0x19, 0xac, 0xff, 0x99, 0xed,
835fb7f874SGeert Uytterhoeven 	0xe8, 0xe6, 0xa6, 0x22, 0xe3, 0x9c, 0xf1, 0x30,
845fb7f874SGeert Uytterhoeven 	0xdc, 0x01, 0x0a, 0x56, 0xfa, 0xe4, 0xc9, 0x99,
855fb7f874SGeert Uytterhoeven 	0xdd, 0xa8, 0xd8, 0xda, 0x35, 0x51, 0x73, 0xb4,
865fb7f874SGeert Uytterhoeven 	0x40, 0x86, 0x85, 0xdb, 0x5c, 0xd5, 0x85, 0x80,
875fb7f874SGeert Uytterhoeven 	0x14, 0x9c, 0xfd, 0x98, 0xa9, 0x82, 0xc5, 0x37,
885fb7f874SGeert Uytterhoeven 	0xff, 0x32, 0x5d, 0xd0, 0x0b, 0xfa, 0xdc, 0x04,
895fb7f874SGeert Uytterhoeven 	0x5e, 0x09, 0xd2, 0xca, 0x17, 0x4b, 0x1a, 0x8e,
905fb7f874SGeert Uytterhoeven 	0x15, 0xe1, 0xcc, 0x4e, 0x52, 0x88, 0x35, 0xbd,
915fb7f874SGeert Uytterhoeven 	0x48, 0xfe, 0x15, 0xa0, 0x91, 0xfd, 0x7e, 0x6c,
925fb7f874SGeert Uytterhoeven 	0x0e, 0x5d, 0x79, 0x1b, 0x81, 0x79, 0xd2, 0x09,
935fb7f874SGeert Uytterhoeven 	0x34, 0x70, 0x3d, 0x81, 0xec, 0xf6, 0x24, 0xbb,
945fb7f874SGeert Uytterhoeven 	0xfb, 0xf1, 0x7b, 0xdf, 0x54, 0xea, 0x80, 0x9b,
955fb7f874SGeert Uytterhoeven 	0xc7, 0x99, 0x9e, 0xbd, 0x16, 0x78, 0x12, 0x53,
965fb7f874SGeert Uytterhoeven 	0x5e, 0x01, 0xa7, 0x4e, 0xbd, 0x67, 0xe1, 0x9b,
975fb7f874SGeert Uytterhoeven 	0x4c, 0x0e, 0x61, 0x45, 0x97, 0xd2, 0xf0, 0x0f,
985fb7f874SGeert Uytterhoeven 	0xfe, 0x15, 0x08, 0xb7, 0x11, 0x4c, 0xe7, 0xff,
995fb7f874SGeert Uytterhoeven 	0x81, 0x53, 0xff, 0x91, 0x25, 0x38, 0x7e, 0x40,
1005fb7f874SGeert Uytterhoeven 	0x94, 0xe5, 0xe0, 0xad, 0xe6, 0xd9, 0x79, 0xb6,
1015fb7f874SGeert Uytterhoeven 	0x92, 0xc9, 0xfc, 0xde, 0xc3, 0x1a, 0x23, 0xbb,
1025fb7f874SGeert Uytterhoeven 	0xdd, 0xc8, 0x51, 0x0c, 0x3a, 0x72, 0xfa, 0x73,
1035fb7f874SGeert Uytterhoeven 	0x6f, 0xb7, 0xee, 0x61, 0x39, 0x03, 0x01, 0x3f,
1045fb7f874SGeert Uytterhoeven 	0x7f, 0x94, 0x2e, 0x2e, 0xba, 0x3a, 0xbb, 0xb4,
1055fb7f874SGeert Uytterhoeven 	0xfa, 0x6a, 0x17, 0xfe, 0xea, 0xef, 0x5e, 0x66,
1065fb7f874SGeert Uytterhoeven 	0x97, 0x3f, 0x32, 0x3d, 0xd7, 0x3e, 0xb1, 0xf1,
1075fb7f874SGeert Uytterhoeven 	0x6c, 0x14, 0x4c, 0xfd, 0x37, 0xd3, 0x38, 0x80,
1085fb7f874SGeert Uytterhoeven 	0xfb, 0xde, 0xa6, 0x24, 0x1e, 0xc8, 0xca, 0x7f,
1095fb7f874SGeert Uytterhoeven 	0x3a, 0x93, 0xd8, 0x8b, 0x18, 0x13, 0xb2, 0xe5,
1105fb7f874SGeert Uytterhoeven 	0xe4, 0x93, 0x05, 0x53, 0x4f, 0x84, 0x66, 0xa7,
1115fb7f874SGeert Uytterhoeven 	0x58, 0x5c, 0x7b, 0x86, 0x52, 0x6d, 0x0d, 0xce,
1125fb7f874SGeert Uytterhoeven 	0xa4, 0x30, 0x7d, 0xb6, 0x18, 0x9f, 0xeb, 0xff,
1135fb7f874SGeert Uytterhoeven 	0x22, 0xbb, 0x72, 0x29, 0xb9, 0x44, 0x0b, 0x48,
1145fb7f874SGeert Uytterhoeven 	0x1e, 0x84, 0x71, 0x81, 0xe3, 0x6d, 0x73, 0x26,
1155fb7f874SGeert Uytterhoeven 	0x92, 0xb4, 0x4d, 0x2a, 0x29, 0xb8, 0x1f, 0x72,
1165fb7f874SGeert Uytterhoeven 	0xed, 0xd0, 0xe1, 0x64, 0x77, 0xea, 0x8e, 0x88,
1175fb7f874SGeert Uytterhoeven 	0x0f, 0xef, 0x3f, 0xb1, 0x3b, 0xad, 0xf9, 0xc9,
1185fb7f874SGeert Uytterhoeven 	0x8b, 0xd0, 0xac, 0xc6, 0xcc, 0xa9, 0x40, 0xcc,
1195fb7f874SGeert Uytterhoeven 	0x76, 0xf6, 0x3b, 0x53, 0xb5, 0x88, 0xcb, 0xc8,
1205fb7f874SGeert Uytterhoeven 	0x37, 0xf1, 0xa2, 0xba, 0x23, 0x15, 0x99, 0x09,
1215fb7f874SGeert Uytterhoeven 	0xcc, 0xe7, 0x7a, 0x3b, 0x37, 0xf7, 0x58, 0xc8,
1225fb7f874SGeert Uytterhoeven 	0x46, 0x8c, 0x2b, 0x2f, 0x4e, 0x0e, 0xa6, 0x5c,
1235fb7f874SGeert Uytterhoeven 	0xea, 0x85, 0x55, 0xba, 0x02, 0x0e, 0x0e, 0x48,
1245fb7f874SGeert Uytterhoeven 	0xbc, 0xe1, 0xb1, 0x01, 0x35, 0x79, 0x13, 0x3d,
1255fb7f874SGeert Uytterhoeven 	0x1b, 0xc0, 0x53, 0x68, 0x11, 0xe7, 0x95, 0x0f,
1265fb7f874SGeert Uytterhoeven 	0x9d, 0x3f, 0x4c, 0x47, 0x7b, 0x4d, 0x1c, 0xae,
1275fb7f874SGeert Uytterhoeven 	0x50, 0x9b, 0xcb, 0xdd, 0x05, 0x8d, 0x9a, 0x97,
1285fb7f874SGeert Uytterhoeven 	0xfd, 0x8c, 0xef, 0x0c, 0x1d, 0x67, 0x73, 0xa8,
1295fb7f874SGeert Uytterhoeven 	0x28, 0x36, 0xd5, 0xb6, 0x92, 0x33, 0x40, 0x75,
1305fb7f874SGeert Uytterhoeven 	0x0b, 0x51, 0xc3, 0x64, 0xba, 0x1d, 0xc2, 0xcc,
1315fb7f874SGeert Uytterhoeven 	0xee, 0x7d, 0x54, 0x0f, 0x27, 0x69, 0xa7, 0x27,
1325fb7f874SGeert Uytterhoeven 	0x63, 0x30, 0x29, 0xd9, 0xc8, 0x84, 0xd8, 0xdf,
1335fb7f874SGeert Uytterhoeven 	0x9f, 0x68, 0x8d, 0x04, 0xca, 0xa6, 0xc5, 0xc7,
1345fb7f874SGeert Uytterhoeven 	0x7a, 0x5c, 0xc8, 0xd1, 0xcb, 0x4a, 0xec, 0xd0,
1355fb7f874SGeert Uytterhoeven 	0xd8, 0x20, 0x69, 0xc5, 0x17, 0xcd, 0x78, 0xc8,
1365fb7f874SGeert Uytterhoeven 	0x75, 0x23, 0x30, 0x69, 0xc9, 0xd4, 0xea, 0x5c,
1375fb7f874SGeert Uytterhoeven 	0x4f, 0x6b, 0x86, 0x3f, 0x8b, 0xfe, 0xee, 0x44,
1385fb7f874SGeert Uytterhoeven 	0xc9, 0x7c, 0xb7, 0xdd, 0x3e, 0xe5, 0xec, 0x54,
1395fb7f874SGeert Uytterhoeven 	0x03, 0x3e, 0xaa, 0x82, 0xc6, 0xdf, 0xb2, 0x38,
1405fb7f874SGeert Uytterhoeven 	0x0e, 0x5d, 0xb3, 0x88, 0xd9, 0xd3, 0x69, 0x5f,
1415fb7f874SGeert Uytterhoeven 	0x8f, 0x70, 0x8a, 0x7e, 0x11, 0xd9, 0x1e, 0x7b,
1425fb7f874SGeert Uytterhoeven 	0x38, 0xf1, 0x42, 0x1a, 0xc0, 0x35, 0xf5, 0xc7,
1435fb7f874SGeert Uytterhoeven 	0x36, 0x85, 0xf5, 0xf7, 0xb8, 0x7e, 0xc7, 0xef,
1445fb7f874SGeert Uytterhoeven 	0x18, 0xf1, 0x63, 0xd6, 0x7a, 0xc6, 0xc9, 0x0e,
1455fb7f874SGeert Uytterhoeven 	0x4d, 0x69, 0x4f, 0x84, 0xef, 0x26, 0x41, 0x0c,
1465fb7f874SGeert Uytterhoeven 	0xec, 0xc7, 0xe0, 0x7e, 0x3c, 0x67, 0x01, 0x4c,
1475fb7f874SGeert Uytterhoeven 	0x62, 0x1a, 0x20, 0x6f, 0xee, 0x47, 0x4d, 0xc0,
1485fb7f874SGeert Uytterhoeven 	0x99, 0x13, 0x8d, 0x91, 0x4a, 0x26, 0xd4, 0x37,
1495fb7f874SGeert Uytterhoeven 	0x28, 0x90, 0x58, 0x75, 0x66, 0x2b, 0x0a, 0xdf,
1505fb7f874SGeert Uytterhoeven 	0xda, 0xee, 0x92, 0x25, 0x90, 0x62, 0x39, 0x9e,
1515fb7f874SGeert Uytterhoeven 	0x44, 0x98, 0xad, 0xc1, 0x88, 0xed, 0xe4, 0xb4,
1525fb7f874SGeert Uytterhoeven 	0xaf, 0xf5, 0x8c, 0x9b, 0x48, 0x4d, 0x56, 0x60,
1535fb7f874SGeert Uytterhoeven 	0x97, 0x0f, 0x61, 0x59, 0x9e, 0xa6, 0x27, 0xfe,
1545fb7f874SGeert Uytterhoeven 	0xc1, 0x91, 0x15, 0x38, 0xb8, 0x0f, 0xae, 0x61,
1555fb7f874SGeert Uytterhoeven 	0x7d, 0x26, 0x13, 0x5a, 0x73, 0xff, 0x1c, 0xa3,
1565fb7f874SGeert Uytterhoeven 	0x61, 0x04, 0x58, 0x48, 0x55, 0x44, 0x11, 0xfe,
1575fb7f874SGeert Uytterhoeven 	0x15, 0xca, 0xc3, 0xbd, 0xca, 0xc5, 0xb4, 0x40,
1585fb7f874SGeert Uytterhoeven 	0x5d, 0x1b, 0x7f, 0x39, 0xb5, 0x9c, 0x35, 0xec,
1595fb7f874SGeert Uytterhoeven 	0x61, 0x15, 0x32, 0x32, 0xb8, 0x4e, 0x40, 0x9f,
1605fb7f874SGeert Uytterhoeven 	0x17, 0x1f, 0x0a, 0x4d, 0xa9, 0x91, 0xef, 0xb7,
1615fb7f874SGeert Uytterhoeven 	0xb0, 0xeb, 0xc2, 0x83, 0x9a, 0x6c, 0xd2, 0x79,
1625fb7f874SGeert Uytterhoeven 	0x43, 0x78, 0x5e, 0x2f, 0xe5, 0xdd, 0x1a, 0x3c,
1635fb7f874SGeert Uytterhoeven 	0x45, 0xab, 0x29, 0x40, 0x3a, 0x37, 0x5b, 0x6f,
1645fb7f874SGeert Uytterhoeven 	0xd7, 0xfc, 0x48, 0x64, 0x3c, 0x49, 0xfb, 0x21,
1655fb7f874SGeert Uytterhoeven 	0xbe, 0xc3, 0xff, 0x07, 0xfb, 0x17, 0xe9, 0xc9,
1665fb7f874SGeert Uytterhoeven 	0x0c, 0x4c, 0x5c, 0x15, 0x9e, 0x8e, 0x22, 0x30,
1675fb7f874SGeert Uytterhoeven 	0x0a, 0xde, 0x48, 0x7f, 0xdb, 0x0d, 0xd1, 0x2b,
1685fb7f874SGeert Uytterhoeven 	0x87, 0x38, 0x9e, 0xcc, 0x5a, 0x01, 0x16, 0xee,
1695fb7f874SGeert Uytterhoeven 	0x75, 0x49, 0x0d, 0x30, 0x01, 0x34, 0x6a, 0xb6,
1705fb7f874SGeert Uytterhoeven 	0x9a, 0x5a, 0x2a, 0xec, 0xbb, 0x48, 0xac, 0xd3,
1715fb7f874SGeert Uytterhoeven 	0x77, 0x83, 0xd8, 0x08, 0x86, 0x4f, 0x48, 0x09,
1725fb7f874SGeert Uytterhoeven 	0x29, 0x41, 0x79, 0xa1, 0x03, 0x12, 0xc4, 0xcd,
1735fb7f874SGeert Uytterhoeven 	0x90, 0x55, 0x47, 0x66, 0x74, 0x9a, 0xcc, 0x4f,
1745fb7f874SGeert Uytterhoeven 	0x35, 0x8c, 0xd6, 0x98, 0xef, 0xeb, 0x45, 0xb9,
1755fb7f874SGeert Uytterhoeven 	0x9a, 0x26, 0x2f, 0x39, 0xa5, 0x70, 0x6d, 0xfc,
1765fb7f874SGeert Uytterhoeven 	0xb4, 0x51, 0xee, 0xf4, 0x9c, 0xe7, 0x38, 0x59,
1775fb7f874SGeert Uytterhoeven 	0xad, 0xf4, 0xbc, 0x46, 0xff, 0x46, 0x8e, 0x60,
1785fb7f874SGeert Uytterhoeven 	0x9c, 0xa3, 0x60, 0x1d, 0xf8, 0x26, 0x72, 0xf5,
1795fb7f874SGeert Uytterhoeven 	0x72, 0x9d, 0x68, 0x80, 0x04, 0xf6, 0x0b, 0xa1,
1805fb7f874SGeert Uytterhoeven 	0x0a, 0xd5, 0xa7, 0x82, 0x3a, 0x3e, 0x47, 0xa8,
1815fb7f874SGeert Uytterhoeven 	0x5a, 0xde, 0x59, 0x4f, 0x7b, 0x07, 0xb3, 0xe9,
1825fb7f874SGeert Uytterhoeven 	0x24, 0x19, 0x3d, 0x34, 0x05, 0xec, 0xf1, 0xab,
1835fb7f874SGeert Uytterhoeven 	0x6e, 0x64, 0x8f, 0xd3, 0xe6, 0x41, 0x86, 0x80,
1845fb7f874SGeert Uytterhoeven 	0x70, 0xe3, 0x8d, 0x60, 0x9c, 0x34, 0x25, 0x01,
1855fb7f874SGeert Uytterhoeven 	0x07, 0x4d, 0x19, 0x41, 0x4e, 0x3d, 0x5c, 0x7e,
1865fb7f874SGeert Uytterhoeven 	0xa8, 0xf5, 0xcc, 0xd5, 0x7b, 0xe2, 0x7d, 0x3d,
1875fb7f874SGeert Uytterhoeven 	0x49, 0x86, 0x7d, 0x07, 0xb7, 0x10, 0xe3, 0x35,
1885fb7f874SGeert Uytterhoeven 	0xb8, 0x84, 0x6d, 0x76, 0xab, 0x17, 0xc6, 0x38,
1895fb7f874SGeert Uytterhoeven 	0xb4, 0xd3, 0x28, 0x57, 0xad, 0xd3, 0x88, 0x5a,
1905fb7f874SGeert Uytterhoeven 	0xda, 0xea, 0xc8, 0x94, 0xcc, 0x37, 0x19, 0xac,
1915fb7f874SGeert Uytterhoeven 	0x9c, 0x9f, 0x4b, 0x00, 0x15, 0xc0, 0xc8, 0xca,
1925fb7f874SGeert Uytterhoeven 	0x1f, 0x15, 0xaa, 0xe0, 0xdb, 0xf9, 0x2f, 0x57,
1935fb7f874SGeert Uytterhoeven 	0x1b, 0x24, 0xc7, 0x6f, 0x76, 0x29, 0xfb, 0xed,
1945fb7f874SGeert Uytterhoeven 	0x25, 0x0d, 0xc0, 0xfe, 0xbd, 0x5a, 0xbf, 0x20,
1955fb7f874SGeert Uytterhoeven 	0x08, 0x51, 0x05, 0xec, 0x71, 0xa3, 0xbf, 0xef,
1965fb7f874SGeert Uytterhoeven 	0x5e, 0x99, 0x75, 0xdb, 0x3c, 0x5f, 0x9a, 0x8c,
1975fb7f874SGeert Uytterhoeven 	0xbb, 0x19, 0x5c, 0x0e, 0x93, 0x19, 0xf8, 0x6a,
1985fb7f874SGeert Uytterhoeven 	0xbc, 0xf2, 0x12, 0x54, 0x2f, 0xcb, 0x28, 0x64,
1995fb7f874SGeert Uytterhoeven 	0x88, 0xb3, 0x92, 0x0d, 0x96, 0xd1, 0xa6, 0xe4,
2005fb7f874SGeert Uytterhoeven 	0x1f, 0xf1, 0x4d, 0xa4, 0xab, 0x1c, 0xee, 0x54,
2015fb7f874SGeert Uytterhoeven 	0xf2, 0xad, 0x29, 0x6d, 0x32, 0x37, 0xb2, 0x16,
2025fb7f874SGeert Uytterhoeven 	0x77, 0x5c, 0xdc, 0x2e, 0x54, 0xec, 0x75, 0x26,
2035fb7f874SGeert Uytterhoeven 	0xc6, 0x36, 0xd9, 0x17, 0x2c, 0xf1, 0x7a, 0xdc,
2045fb7f874SGeert Uytterhoeven 	0x4b, 0xf1, 0xe2, 0xd9, 0x95, 0xba, 0xac, 0x87,
2055fb7f874SGeert Uytterhoeven 	0xc1, 0xf3, 0x8e, 0x58, 0x08, 0xd8, 0x87, 0x60,
2065fb7f874SGeert Uytterhoeven 	0xc9, 0xee, 0x6a, 0xde, 0xa4, 0xd2, 0xfc, 0x0d,
2075fb7f874SGeert Uytterhoeven 	0xe5, 0x36, 0xc4, 0x5c, 0x52, 0xb3, 0x07, 0x54,
2085fb7f874SGeert Uytterhoeven 	0x65, 0x24, 0xc1, 0xb1, 0xd1, 0xb1, 0x53, 0x13,
2095fb7f874SGeert Uytterhoeven 	0x31, 0x79, 0x7f, 0x05, 0x76, 0xeb, 0x37, 0x59,
2105fb7f874SGeert Uytterhoeven 	0x15, 0x2b, 0xd1, 0x3f, 0xac, 0x08, 0x97, 0xeb,
2115fb7f874SGeert Uytterhoeven 	0x91, 0x98, 0xdf, 0x6c, 0x09, 0x0d, 0x04, 0x9f,
2125fb7f874SGeert Uytterhoeven 	0xdc, 0x3b, 0x0e, 0x60, 0x68, 0x47, 0x23, 0x15,
2135fb7f874SGeert Uytterhoeven 	0x16, 0xc6, 0x0b, 0x35, 0xf8, 0x77, 0xa2, 0x78,
2145fb7f874SGeert Uytterhoeven 	0x50, 0xd4, 0x64, 0x22, 0x33, 0xff, 0xfb, 0x93,
2155fb7f874SGeert Uytterhoeven 	0x71, 0x46, 0x50, 0x39, 0x1b, 0x9c, 0xea, 0x4e,
2165fb7f874SGeert Uytterhoeven 	0x8d, 0x0c, 0x37, 0xe5, 0x5c, 0x51, 0x3a, 0x31,
2175fb7f874SGeert Uytterhoeven 	0xb2, 0x85, 0x84, 0x3f, 0x41, 0xee, 0xa2, 0xc1,
2185fb7f874SGeert Uytterhoeven 	0xc6, 0x13, 0x3b, 0x54, 0x28, 0xd2, 0x18, 0x37,
2195fb7f874SGeert Uytterhoeven 	0xcc, 0x46, 0x9f, 0x6a, 0x91, 0x3d, 0x5a, 0x15,
2205fb7f874SGeert Uytterhoeven 	0x3c, 0x89, 0xa3, 0x61, 0x06, 0x7d, 0x2e, 0x78,
2215fb7f874SGeert Uytterhoeven 	0xbe, 0x7d, 0x40, 0xba, 0x2f, 0x95, 0xb1, 0x2f,
2225fb7f874SGeert Uytterhoeven 	0x87, 0x3b, 0x8a, 0xbe, 0x6a, 0xf4, 0xc2, 0x31,
2235fb7f874SGeert Uytterhoeven 	0x74, 0xee, 0x91, 0xe0, 0x23, 0xaa, 0x5d, 0x7f,
2245fb7f874SGeert Uytterhoeven 	0xdd, 0xf0, 0x44, 0x8c, 0x0b, 0x59, 0x2b, 0xfc,
2255fb7f874SGeert Uytterhoeven 	0x48, 0x3a, 0xdf, 0x07, 0x05, 0x38, 0x6c, 0xc9,
2265fb7f874SGeert Uytterhoeven 	0xeb, 0x18, 0x24, 0x68, 0x8d, 0x58, 0x98, 0xd3,
2275fb7f874SGeert Uytterhoeven 	0x31, 0xa3, 0xe4, 0x70, 0x59, 0xb1, 0x21, 0xbe,
2285fb7f874SGeert Uytterhoeven 	0x7e, 0x65, 0x7d, 0xb8, 0x04, 0xab, 0xf6, 0xe4,
2295fb7f874SGeert Uytterhoeven 	0xd7, 0xda, 0xec, 0x09, 0x8f, 0xda, 0x6d, 0x24,
2305fb7f874SGeert Uytterhoeven 	0x07, 0xcc, 0x29, 0x17, 0x05, 0x78, 0x1a, 0xc1,
2315fb7f874SGeert Uytterhoeven 	0xb1, 0xce, 0xfc, 0xaa, 0x2d, 0xe7, 0xcc, 0x85,
2325fb7f874SGeert Uytterhoeven 	0x84, 0x84, 0x03, 0x2a, 0x0c, 0x3f, 0xa9, 0xf8,
2335fb7f874SGeert Uytterhoeven 	0xfd, 0x84, 0x53, 0x59, 0x5c, 0xf0, 0xd4, 0x09,
2345fb7f874SGeert Uytterhoeven 	0xf0, 0xd2, 0x6c, 0x32, 0x03, 0xb0, 0xa0, 0x8c,
2355fb7f874SGeert Uytterhoeven 	0x52, 0xeb, 0x23, 0x91, 0x88, 0x43, 0x13, 0x46,
2365fb7f874SGeert Uytterhoeven 	0xf6, 0x1e, 0xb4, 0x1b, 0xf5, 0x8e, 0x3a, 0xb5,
2375fb7f874SGeert Uytterhoeven 	0x3d, 0x00, 0xf6, 0xe5, 0x08, 0x3d, 0x5f, 0x39,
2385fb7f874SGeert Uytterhoeven 	0xd3, 0x21, 0x69, 0xbc, 0x03, 0x22, 0x3a, 0xd2,
2395fb7f874SGeert Uytterhoeven 	0x5c, 0x84, 0xf8, 0x15, 0xc4, 0x80, 0x0b, 0xbc,
2405fb7f874SGeert Uytterhoeven 	0x29, 0x3c, 0xf3, 0x95, 0x98, 0xcd, 0x8f, 0x35,
2415fb7f874SGeert Uytterhoeven 	0xbc, 0xa5, 0x3e, 0xfc, 0xd4, 0x13, 0x9e, 0xde,
2425fb7f874SGeert Uytterhoeven 	0x4f, 0xce, 0x71, 0x9d, 0x09, 0xad, 0xf2, 0x80,
2435fb7f874SGeert Uytterhoeven 	0x6b, 0x65, 0x7f, 0x03, 0x00, 0x14, 0x7c, 0x15,
2445fb7f874SGeert Uytterhoeven 	0x85, 0x40, 0x6d, 0x70, 0xea, 0xdc, 0xb3, 0x63,
2455fb7f874SGeert Uytterhoeven 	0x35, 0x4f, 0x4d, 0xe0, 0xd9, 0xd5, 0x3c, 0x58,
2465fb7f874SGeert Uytterhoeven 	0x56, 0x23, 0x80, 0xe2, 0x36, 0xdd, 0x75, 0x1d,
2475fb7f874SGeert Uytterhoeven 	0x94, 0x11, 0x41, 0x8e, 0xe0, 0x81, 0x8e, 0xcf,
2485fb7f874SGeert Uytterhoeven 	0xe0, 0xe5, 0xf6, 0xde, 0xd1, 0xe7, 0x04, 0x12,
2495fb7f874SGeert Uytterhoeven 	0x79, 0x92, 0x2b, 0x71, 0x2a, 0x79, 0x8b, 0x7c,
2505fb7f874SGeert Uytterhoeven 	0x44, 0x79, 0x16, 0x30, 0x4e, 0xf4, 0xf6, 0x9b,
2515fb7f874SGeert Uytterhoeven 	0xb7, 0x40, 0xa3, 0x5a, 0xa7, 0x69, 0x3e, 0xc1,
2525fb7f874SGeert Uytterhoeven 	0x3a, 0x04, 0xd0, 0x88, 0xa0, 0x3b, 0xdd, 0xc6,
2535fb7f874SGeert Uytterhoeven 	0x9e, 0x7e, 0x1e, 0x1e, 0x8f, 0x44, 0xf7, 0x73,
2545fb7f874SGeert Uytterhoeven 	0x67, 0x1e, 0x1a, 0x78, 0xfa, 0x62, 0xf4, 0xa9,
2555fb7f874SGeert Uytterhoeven 	0xa8, 0xc6, 0x5b, 0xb8, 0xfa, 0x06, 0x7d, 0x5e,
2565fb7f874SGeert Uytterhoeven 	0x38, 0x1c, 0x9a, 0x39, 0xe9, 0x39, 0x98, 0x22,
2575fb7f874SGeert Uytterhoeven 	0x0b, 0xa7, 0xac, 0x0b, 0xf3, 0xbc, 0xf1, 0xeb,
2585fb7f874SGeert Uytterhoeven 	0x8c, 0x81, 0xe3, 0x48, 0x8a, 0xed, 0x42, 0xc2,
2595fb7f874SGeert Uytterhoeven 	0x38, 0xcf, 0x3e, 0xda, 0xd2, 0x89, 0x8d, 0x9c,
2605fb7f874SGeert Uytterhoeven 	0x53, 0xb5, 0x2f, 0x41, 0x01, 0x26, 0x84, 0x9c,
2615fb7f874SGeert Uytterhoeven 	0xa3, 0x56, 0xf6, 0x49, 0xc7, 0xd4, 0x9f, 0x93,
2625fb7f874SGeert Uytterhoeven 	0x1b, 0x96, 0x49, 0x5e, 0xad, 0xb3, 0x84, 0x1f,
2635fb7f874SGeert Uytterhoeven 	0x3c, 0xa4, 0xe0, 0x9b, 0xd1, 0x90, 0xbc, 0x38,
2645fb7f874SGeert Uytterhoeven 	0x6c, 0xdd, 0x95, 0x4d, 0x9d, 0xb1, 0x71, 0x57,
2655fb7f874SGeert Uytterhoeven 	0x2d, 0x34, 0xe8, 0xb8, 0x42, 0xc7, 0x99, 0x03,
2665fb7f874SGeert Uytterhoeven 	0xc7, 0x07, 0x30, 0x65, 0x91, 0x55, 0xd5, 0x90,
2675fb7f874SGeert Uytterhoeven 	0x70, 0x97, 0x37, 0x68, 0xd4, 0x11, 0xf9, 0xe8,
2685fb7f874SGeert Uytterhoeven 	0xce, 0xec, 0xdc, 0x34, 0xd5, 0xd3, 0xb7, 0xc4,
2695fb7f874SGeert Uytterhoeven 	0xb8, 0x97, 0x05, 0x92, 0xad, 0xf8, 0xe2, 0x36,
2705fb7f874SGeert Uytterhoeven 	0x64, 0x41, 0xc9, 0xc5, 0x41, 0x77, 0x52, 0xd7,
2715fb7f874SGeert Uytterhoeven 	0x2c, 0xa5, 0x24, 0x2f, 0xd9, 0x34, 0x0b, 0x47,
2725fb7f874SGeert Uytterhoeven 	0x35, 0xa7, 0x28, 0x8b, 0xc5, 0xcd, 0xe9, 0x46,
2735fb7f874SGeert Uytterhoeven 	0xac, 0x39, 0x94, 0x3c, 0x10, 0xc6, 0x29, 0x73,
2745fb7f874SGeert Uytterhoeven 	0x0e, 0x0e, 0x5d, 0xe0, 0x71, 0x03, 0x8a, 0x72,
2755fb7f874SGeert Uytterhoeven 	0x0e, 0x26, 0xb0, 0x7d, 0x84, 0xed, 0x95, 0x23,
2765fb7f874SGeert Uytterhoeven 	0x49, 0x5a, 0x45, 0x83, 0x45, 0x60, 0x11, 0x4a,
2775fb7f874SGeert Uytterhoeven 	0x46, 0x31, 0xd4, 0xd8, 0x16, 0x54, 0x98, 0x58,
2785fb7f874SGeert Uytterhoeven 	0xed, 0x6d, 0xcc, 0x5d, 0xd6, 0x50, 0x61, 0x9f,
2795fb7f874SGeert Uytterhoeven 	0x9d, 0xc5, 0x3e, 0x9d, 0x32, 0x47, 0xde, 0x96,
2805fb7f874SGeert Uytterhoeven 	0xe1, 0x5d, 0xd8, 0xf8, 0xb4, 0x69, 0x6f, 0xb9,
2815fb7f874SGeert Uytterhoeven 	0x15, 0x90, 0x57, 0x7a, 0xf6, 0xad, 0xb0, 0x5b,
2825fb7f874SGeert Uytterhoeven 	0xf5, 0xa6, 0x36, 0x94, 0xfd, 0x84, 0xce, 0x1c,
2835fb7f874SGeert Uytterhoeven 	0x0f, 0x4b, 0xd0, 0xc2, 0x5b, 0x6b, 0x56, 0xef,
2845fb7f874SGeert Uytterhoeven 	0x73, 0x93, 0x0b, 0xc3, 0xee, 0xd9, 0xcf, 0xd3,
2855fb7f874SGeert Uytterhoeven 	0xa4, 0x22, 0x58, 0xcd, 0x50, 0x6e, 0x65, 0xf4,
2865fb7f874SGeert Uytterhoeven 	0xe9, 0xb7, 0x71, 0xaf, 0x4b, 0xb3, 0xb6, 0x2f,
2875fb7f874SGeert Uytterhoeven 	0x0f, 0x0e, 0x3b, 0xc9, 0x85, 0x14, 0xf5, 0x17,
2885fb7f874SGeert Uytterhoeven 	0xe8, 0x7a, 0x3a, 0xbf, 0x5f, 0x5e, 0xf8, 0x18,
2895fb7f874SGeert Uytterhoeven 	0x48, 0xa6, 0x72, 0xab, 0x06, 0x95, 0xe9, 0xc8,
2905fb7f874SGeert Uytterhoeven 	0xa7, 0xf4, 0x32, 0x44, 0x04, 0x0c, 0x84, 0x98,
2915fb7f874SGeert Uytterhoeven 	0x73, 0xe3, 0x89, 0x8d, 0x5f, 0x7e, 0x4a, 0x42,
2925fb7f874SGeert Uytterhoeven 	0x8f, 0xc5, 0x28, 0xb1, 0x82, 0xef, 0x1c, 0x97,
2935fb7f874SGeert Uytterhoeven 	0x31, 0x3b, 0x4d, 0xe0, 0x0e, 0x10, 0x10, 0x97,
2945fb7f874SGeert Uytterhoeven 	0x93, 0x49, 0x78, 0x2f, 0x0d, 0x86, 0x8b, 0xa1,
2955fb7f874SGeert Uytterhoeven 	0x53, 0xa9, 0x81, 0x20, 0x79, 0xe7, 0x07, 0x77,
2965fb7f874SGeert Uytterhoeven 	0xb6, 0xac, 0x5e, 0xd2, 0x05, 0xcd, 0xe9, 0xdb,
2975fb7f874SGeert Uytterhoeven 	0x8a, 0x94, 0x82, 0x8a, 0x23, 0xb9, 0x3d, 0x1c,
2985fb7f874SGeert Uytterhoeven 	0xa9, 0x7d, 0x72, 0x4a, 0xed, 0x33, 0xa3, 0xdb,
2995fb7f874SGeert Uytterhoeven 	0x21, 0xa7, 0x86, 0x33, 0x45, 0xa5, 0xaa, 0x56,
3005fb7f874SGeert Uytterhoeven 	0x45, 0xb5, 0x83, 0x29, 0x40, 0x47, 0x79, 0x04,
3015fb7f874SGeert Uytterhoeven 	0x6e, 0xb9, 0x95, 0xd0, 0x81, 0x77, 0x2d, 0x48,
3025fb7f874SGeert Uytterhoeven 	0x1e, 0xfe, 0xc3, 0xc2, 0x1e, 0xe5, 0xf2, 0xbe,
3035fb7f874SGeert Uytterhoeven 	0xfd, 0x3b, 0x94, 0x9f, 0xc4, 0xc4, 0x26, 0x9d,
3045fb7f874SGeert Uytterhoeven 	0xe4, 0x66, 0x1e, 0x19, 0xee, 0x6c, 0x79, 0x97,
3055fb7f874SGeert Uytterhoeven 	0x11, 0x31, 0x4b, 0x0d, 0x01, 0xcb, 0xde, 0xa8,
3065fb7f874SGeert Uytterhoeven 	0xf6, 0x6d, 0x7c, 0x39, 0x46, 0x4e, 0x7e, 0x3f,
3075fb7f874SGeert Uytterhoeven 	0x94, 0x17, 0xdf, 0xa1, 0x7d, 0xd9, 0x1c, 0x8e,
3085fb7f874SGeert Uytterhoeven 	0xbc, 0x7d, 0x33, 0x7d, 0xe3, 0x12, 0x40, 0xca,
3095fb7f874SGeert Uytterhoeven 	0xab, 0x37, 0x11, 0x46, 0xd4, 0xae, 0xef, 0x44,
3105fb7f874SGeert Uytterhoeven 	0xa2, 0xb3, 0x6a, 0x66, 0x0e, 0x0c, 0x90, 0x7f,
3115fb7f874SGeert Uytterhoeven 	0xdf, 0x5c, 0x66, 0x5f, 0xf2, 0x94, 0x9f, 0xa6,
3125fb7f874SGeert Uytterhoeven 	0x73, 0x4f, 0xeb, 0x0d, 0xad, 0xbf, 0xc0, 0x63,
3135fb7f874SGeert Uytterhoeven 	0x5c, 0xdc, 0x46, 0x51, 0xe8, 0x8e, 0x90, 0x19,
3145fb7f874SGeert Uytterhoeven 	0xa8, 0xa4, 0x3c, 0x91, 0x79, 0xfa, 0x7e, 0x58,
3155fb7f874SGeert Uytterhoeven 	0x85, 0x13, 0x55, 0xc5, 0x19, 0x82, 0x37, 0x1b,
3165fb7f874SGeert Uytterhoeven 	0x0a, 0x02, 0x1f, 0x99, 0x6b, 0x18, 0xf1, 0x28,
3175fb7f874SGeert Uytterhoeven 	0x08, 0xa2, 0x73, 0xb8, 0x0f, 0x2e, 0xcd, 0xbf,
3185fb7f874SGeert Uytterhoeven 	0xf3, 0x86, 0x7f, 0xea, 0xef, 0xd0, 0xbb, 0xa6,
3195fb7f874SGeert Uytterhoeven 	0x21, 0xdf, 0x49, 0x73, 0x51, 0xcc, 0x36, 0xd3,
3205fb7f874SGeert Uytterhoeven 	0x3e, 0xa0, 0xf8, 0x44, 0xdf, 0xd3, 0xa6, 0xbe,
3215fb7f874SGeert Uytterhoeven 	0x8a, 0xd4, 0x57, 0xdd, 0x72, 0x94, 0x61, 0x0f,
3225fb7f874SGeert Uytterhoeven 	0x82, 0xd1, 0x07, 0xb8, 0x7c, 0x18, 0x83, 0xdf,
3235fb7f874SGeert Uytterhoeven 	0x3a, 0xe5, 0x50, 0x6a, 0x82, 0x20, 0xac, 0xa9,
3245fb7f874SGeert Uytterhoeven 	0xa8, 0xff, 0xd9, 0xf3, 0x77, 0x33, 0x5a, 0x9e,
3255fb7f874SGeert Uytterhoeven 	0x7f, 0x6d, 0xfe, 0x5d, 0x33, 0x41, 0x42, 0xe7,
3265fb7f874SGeert Uytterhoeven 	0x6c, 0x19, 0xe0, 0x44, 0x8a, 0x15, 0xf6, 0x70,
3275fb7f874SGeert Uytterhoeven 	0x98, 0xb7, 0x68, 0x4d, 0xfa, 0x97, 0x39, 0xb0,
3285fb7f874SGeert Uytterhoeven 	0x8e, 0xe8, 0x84, 0x8b, 0x75, 0x30, 0xb7, 0x7d,
3295fb7f874SGeert Uytterhoeven 	0x92, 0x69, 0x20, 0x9c, 0x81, 0xfb, 0x4b, 0xf4,
3305fb7f874SGeert Uytterhoeven 	0x01, 0x50, 0xeb, 0xce, 0x0c, 0x1c, 0x6c, 0xb5,
3315fb7f874SGeert Uytterhoeven 	0x4a, 0xd7, 0x27, 0x0c, 0xce, 0xbb, 0xe5, 0x85,
3325fb7f874SGeert Uytterhoeven 	0xf0, 0xb6, 0xee, 0xd5, 0x70, 0xdd, 0x3b, 0xfc,
3335fb7f874SGeert Uytterhoeven 	0xd4, 0x99, 0xf1, 0x33, 0xdd, 0x8b, 0xc4, 0x2f,
3345fb7f874SGeert Uytterhoeven 	0xae, 0xab, 0x74, 0x96, 0x32, 0xc7, 0x4c, 0x56,
3355fb7f874SGeert Uytterhoeven 	0x3c, 0x89, 0x0f, 0x96, 0x0b, 0x42, 0xc0, 0xcb,
3365fb7f874SGeert Uytterhoeven 	0xee, 0x0f, 0x0b, 0x8c, 0xfb, 0x7e, 0x47, 0x7b,
3375fb7f874SGeert Uytterhoeven 	0x64, 0x48, 0xfd, 0xb2, 0x00, 0x80, 0x89, 0xa5,
3385fb7f874SGeert Uytterhoeven 	0x13, 0x55, 0x62, 0xfc, 0x8f, 0xe2, 0x42, 0x03,
3395fb7f874SGeert Uytterhoeven 	0xb7, 0x4e, 0x2a, 0x79, 0xb4, 0x82, 0xea, 0x23,
3405fb7f874SGeert Uytterhoeven 	0x49, 0xda, 0xaf, 0x52, 0x63, 0x1e, 0x60, 0x03,
3415fb7f874SGeert Uytterhoeven 	0x89, 0x06, 0x44, 0x46, 0x08, 0xc3, 0xc4, 0x87,
3425fb7f874SGeert Uytterhoeven 	0x70, 0x2e, 0xda, 0x94, 0xad, 0x6b, 0xe0, 0xe4,
3435fb7f874SGeert Uytterhoeven 	0xd1, 0x8a, 0x06, 0xc2, 0xa8, 0xc0, 0xa7, 0x43,
3445fb7f874SGeert Uytterhoeven 	0x3c, 0x47, 0x52, 0x0e, 0xc3, 0x77, 0x81, 0x11,
3455fb7f874SGeert Uytterhoeven 	0x67, 0x0e, 0xa0, 0x70, 0x04, 0x47, 0x29, 0x40,
3465fb7f874SGeert Uytterhoeven 	0x86, 0x0d, 0x34, 0x56, 0xa7, 0xc9, 0x35, 0x59,
3475fb7f874SGeert Uytterhoeven 	0x68, 0xdc, 0x93, 0x81, 0x70, 0xee, 0x86, 0xd9,
3485fb7f874SGeert Uytterhoeven 	0x80, 0x06, 0x40, 0x4f, 0x1a, 0x0d, 0x40, 0x30,
3495fb7f874SGeert Uytterhoeven 	0x0b, 0xcb, 0x96, 0x47, 0xc1, 0xb7, 0x52, 0xfd,
3505fb7f874SGeert Uytterhoeven 	0x56, 0xe0, 0x72, 0x4b, 0xfb, 0xbd, 0x92, 0x45,
3515fb7f874SGeert Uytterhoeven 	0x61, 0x71, 0xc2, 0x33, 0x11, 0xbf, 0x52, 0x83,
3525fb7f874SGeert Uytterhoeven 	0x79, 0x26, 0xe0, 0x49, 0x6b, 0xb7, 0x05, 0x8b,
3535fb7f874SGeert Uytterhoeven 	0xe8, 0x0e, 0x87, 0x31, 0xd7, 0x9d, 0x8a, 0xf5,
3545fb7f874SGeert Uytterhoeven 	0xc0, 0x5f, 0x2e, 0x58, 0x4a, 0xdb, 0x11, 0xb3,
3555fb7f874SGeert Uytterhoeven 	0x6c, 0x30, 0x2a, 0x46, 0x19, 0xe3, 0x27, 0x84,
3565fb7f874SGeert Uytterhoeven 	0x1f, 0x63, 0x6e, 0xf6, 0x57, 0xc7, 0xc9, 0xd8,
3575fb7f874SGeert Uytterhoeven 	0x5e, 0xba, 0xb3, 0x87, 0xd5, 0x83, 0x26, 0x34,
3585fb7f874SGeert Uytterhoeven 	0x21, 0x9e, 0x65, 0xde, 0x42, 0xd3, 0xbe, 0x7b,
3595fb7f874SGeert Uytterhoeven 	0xbc, 0x91, 0x71, 0x44, 0x4d, 0x99, 0x3b, 0x31,
3605fb7f874SGeert Uytterhoeven 	0xe5, 0x3f, 0x11, 0x4e, 0x7f, 0x13, 0x51, 0x3b,
3615fb7f874SGeert Uytterhoeven 	0xae, 0x79, 0xc9, 0xd3, 0x81, 0x8e, 0x25, 0x40,
3625fb7f874SGeert Uytterhoeven 	0x10, 0xfc, 0x07, 0x1e, 0xf9, 0x7b, 0x9a, 0x4b,
3635fb7f874SGeert Uytterhoeven 	0x6c, 0xe3, 0xb3, 0xad, 0x1a, 0x0a, 0xdd, 0x9e,
3645fb7f874SGeert Uytterhoeven 	0x59, 0x0c, 0xa2, 0xcd, 0xae, 0x48, 0x4a, 0x38,
3655fb7f874SGeert Uytterhoeven 	0x5b, 0x47, 0x41, 0x94, 0x65, 0x6b, 0xbb, 0xeb,
3665fb7f874SGeert Uytterhoeven 	0x5b, 0xe3, 0xaf, 0x07, 0x5b, 0xd4, 0x4a, 0xa2,
3675fb7f874SGeert Uytterhoeven 	0xc9, 0x5d, 0x2f, 0x64, 0x03, 0xd7, 0x3a, 0x2c,
3685fb7f874SGeert Uytterhoeven 	0x6e, 0xce, 0x76, 0x95, 0xb4, 0xb3, 0xc0, 0xf1,
3695fb7f874SGeert Uytterhoeven 	0xe2, 0x45, 0x73, 0x7a, 0x5c, 0xab, 0xc1, 0xfc,
3705fb7f874SGeert Uytterhoeven 	0x02, 0x8d, 0x81, 0x29, 0xb3, 0xac, 0x07, 0xec,
3715fb7f874SGeert Uytterhoeven 	0x40, 0x7d, 0x45, 0xd9, 0x7a, 0x59, 0xee, 0x34,
3725fb7f874SGeert Uytterhoeven 	0xf0, 0xe9, 0xd5, 0x7b, 0x96, 0xb1, 0x3d, 0x95,
3735fb7f874SGeert Uytterhoeven 	0xcc, 0x86, 0xb5, 0xb6, 0x04, 0x2d, 0xb5, 0x92,
3745fb7f874SGeert Uytterhoeven 	0x7e, 0x76, 0xf4, 0x06, 0xa9, 0xa3, 0x12, 0x0f,
3755fb7f874SGeert Uytterhoeven 	0xb1, 0xaf, 0x26, 0xba, 0x7c, 0xfc, 0x7e, 0x1c,
3765fb7f874SGeert Uytterhoeven 	0xbc, 0x2c, 0x49, 0x97, 0x53, 0x60, 0x13, 0x0b,
3775fb7f874SGeert Uytterhoeven 	0xa6, 0x61, 0x83, 0x89, 0x42, 0xd4, 0x17, 0x0c,
3785fb7f874SGeert Uytterhoeven 	0x6c, 0x26, 0x52, 0xc3, 0xb3, 0xd4, 0x67, 0xf5,
3795fb7f874SGeert Uytterhoeven 	0xe3, 0x04, 0xb7, 0xf4, 0xcb, 0x80, 0xb8, 0xcb,
3805fb7f874SGeert Uytterhoeven 	0x77, 0x56, 0x3e, 0xaa, 0x57, 0x54, 0xee, 0xb4,
3815fb7f874SGeert Uytterhoeven 	0x2c, 0x67, 0xcf, 0xf2, 0xdc, 0xbe, 0x55, 0xf9,
3825fb7f874SGeert Uytterhoeven 	0x43, 0x1f, 0x6e, 0x22, 0x97, 0x67, 0x7f, 0xc4,
3835fb7f874SGeert Uytterhoeven 	0xef, 0xb1, 0x26, 0x31, 0x1e, 0x27, 0xdf, 0x41,
3845fb7f874SGeert Uytterhoeven 	0x80, 0x47, 0x6c, 0xe2, 0xfa, 0xa9, 0x8c, 0x2a,
3855fb7f874SGeert Uytterhoeven 	0xf6, 0xf2, 0xab, 0xf0, 0x15, 0xda, 0x6c, 0xc8,
3865fb7f874SGeert Uytterhoeven 	0xfe, 0xb5, 0x23, 0xde, 0xa9, 0x05, 0x3f, 0x06,
3875fb7f874SGeert Uytterhoeven 	0x54, 0x4c, 0xcd, 0xe1, 0xab, 0xfc, 0x0e, 0x62,
3885fb7f874SGeert Uytterhoeven 	0x33, 0x31, 0x73, 0x2c, 0x76, 0xcb, 0xb4, 0x47,
3895fb7f874SGeert Uytterhoeven 	0x1e, 0x20, 0xad, 0xd8, 0xf2, 0x31, 0xdd, 0xc4,
3905fb7f874SGeert Uytterhoeven 	0x8b, 0x0c, 0x77, 0xbe, 0xe1, 0x8b, 0x26, 0x00,
3915fb7f874SGeert Uytterhoeven 	0x02, 0x58, 0xd6, 0x8d, 0xef, 0xad, 0x74, 0x67,
3925fb7f874SGeert Uytterhoeven 	0xab, 0x3f, 0xef, 0xcb, 0x6f, 0xb0, 0xcc, 0x81,
3935fb7f874SGeert Uytterhoeven 	0x44, 0x4c, 0xaf, 0xe9, 0x49, 0x4f, 0xdb, 0xa0,
3945fb7f874SGeert Uytterhoeven 	0x25, 0xa4, 0xf0, 0x89, 0xf1, 0xbe, 0xd8, 0x10,
3955fb7f874SGeert Uytterhoeven 	0xff, 0xb1, 0x3b, 0x4b, 0xfa, 0x98, 0xf5, 0x79,
3965fb7f874SGeert Uytterhoeven 	0x6d, 0x1e, 0x69, 0x4d, 0x57, 0xb1, 0xc8, 0x19,
3975fb7f874SGeert Uytterhoeven 	0x1b, 0xbd, 0x1e, 0x8c, 0x84, 0xb7, 0x7b, 0xe8,
3985fb7f874SGeert Uytterhoeven 	0xd2, 0x2d, 0x09, 0x41, 0x41, 0x37, 0x3d, 0xb1,
3995fb7f874SGeert Uytterhoeven 	0x6f, 0x26, 0x5d, 0x71, 0x16, 0x3d, 0xb7, 0x83,
4005fb7f874SGeert Uytterhoeven 	0x27, 0x2c, 0xa7, 0xb6, 0x50, 0xbd, 0x91, 0x86,
4015fb7f874SGeert Uytterhoeven 	0xab, 0x24, 0xa1, 0x38, 0xfd, 0xea, 0x71, 0x55,
4025fb7f874SGeert Uytterhoeven 	0x7e, 0x9a, 0x07, 0x77, 0x4b, 0xfa, 0x61, 0x66,
4035fb7f874SGeert Uytterhoeven 	0x20, 0x1e, 0x28, 0x95, 0x18, 0x1b, 0xa4, 0xa0,
4045fb7f874SGeert Uytterhoeven 	0xfd, 0xc0, 0x89, 0x72, 0x43, 0xd9, 0x3b, 0x49,
4055fb7f874SGeert Uytterhoeven 	0x5a, 0x3f, 0x9d, 0xbf, 0xdb, 0xb4, 0x46, 0xea,
4065fb7f874SGeert Uytterhoeven 	0x42, 0x01, 0x77, 0x23, 0x68, 0x95, 0xb6, 0x24,
4075fb7f874SGeert Uytterhoeven 	0xb3, 0xa8, 0x6c, 0x28, 0x3b, 0x11, 0x40, 0x7e,
4085fb7f874SGeert Uytterhoeven 	0x18, 0x65, 0x6d, 0xd8, 0x24, 0x42, 0x7d, 0x88,
4095fb7f874SGeert Uytterhoeven 	0xc0, 0x52, 0xd9, 0x05, 0xe4, 0x95, 0x90, 0x87,
4105fb7f874SGeert Uytterhoeven 	0x8c, 0xf4, 0xd0, 0x6b, 0xb9, 0x83, 0x99, 0x34,
4115fb7f874SGeert Uytterhoeven 	0x6d, 0xfe, 0x54, 0x40, 0x94, 0x52, 0x21, 0x4f,
4125fb7f874SGeert Uytterhoeven 	0x14, 0x25, 0xc5, 0xd6, 0x5e, 0x95, 0xdc, 0x0a,
4135fb7f874SGeert Uytterhoeven 	0x2b, 0x89, 0x20, 0x11, 0x84, 0x48, 0xd6, 0x3a,
4145fb7f874SGeert Uytterhoeven 	0xcd, 0x5c, 0x24, 0xad, 0x62, 0xe3, 0xb1, 0x93,
4155fb7f874SGeert Uytterhoeven 	0x25, 0x8d, 0xcd, 0x7e, 0xfc, 0x27, 0xa3, 0x37,
4165fb7f874SGeert Uytterhoeven 	0xfd, 0x84, 0xfc, 0x1b, 0xb2, 0xf1, 0x27, 0x38,
4175fb7f874SGeert Uytterhoeven 	0x5a, 0xb7, 0xfc, 0xf2, 0xfa, 0x95, 0x66, 0xd4,
4185fb7f874SGeert Uytterhoeven 	0xfb, 0xba, 0xa7, 0xd7, 0xa3, 0x72, 0x69, 0x48,
4195fb7f874SGeert Uytterhoeven 	0x48, 0x8c, 0xeb, 0x28, 0x89, 0xfe, 0x33, 0x65,
4205fb7f874SGeert Uytterhoeven 	0x5a, 0x36, 0x01, 0x7e, 0x06, 0x79, 0x0a, 0x09,
4215fb7f874SGeert Uytterhoeven 	0x3b, 0x74, 0x11, 0x9a, 0x6e, 0xbf, 0xd4, 0x9e,
4225fb7f874SGeert Uytterhoeven 	0x58, 0x90, 0x49, 0x4f, 0x4d, 0x08, 0xd4, 0xe5,
4235fb7f874SGeert Uytterhoeven 	0x4a, 0x09, 0x21, 0xef, 0x8b, 0xb8, 0x74, 0x3b,
4245fb7f874SGeert Uytterhoeven 	0x91, 0xdd, 0x36, 0x85, 0x60, 0x2d, 0xfa, 0xd4,
4255fb7f874SGeert Uytterhoeven 	0x45, 0x7b, 0x45, 0x53, 0xf5, 0x47, 0x87, 0x7e,
4265fb7f874SGeert Uytterhoeven 	0xa6, 0x37, 0xc8, 0x78, 0x7a, 0x68, 0x9d, 0x8d,
4275fb7f874SGeert Uytterhoeven 	0x65, 0x2c, 0x0e, 0x91, 0x5c, 0xa2, 0x60, 0xf0,
4285fb7f874SGeert Uytterhoeven 	0x8e, 0x3f, 0xe9, 0x1a, 0xcd, 0xaa, 0xe7, 0xd5,
4295fb7f874SGeert Uytterhoeven 	0x77, 0x18, 0xaf, 0xc9, 0xbc, 0x18, 0xea, 0x48,
4305fb7f874SGeert Uytterhoeven 	0x1b, 0xfb, 0x22, 0x48, 0x70, 0x16, 0x29, 0x9e,
4315fb7f874SGeert Uytterhoeven 	0x5b, 0xc1, 0x2c, 0x66, 0x23, 0xbc, 0xf0, 0x1f,
4325fb7f874SGeert Uytterhoeven 	0xef, 0xaf, 0xe4, 0xd6, 0x04, 0x19, 0x82, 0x7a,
4335fb7f874SGeert Uytterhoeven 	0x0b, 0xba, 0x4b, 0x46, 0xb1, 0x6a, 0x85, 0x5d,
4345fb7f874SGeert Uytterhoeven 	0xb4, 0x73, 0xd6, 0x21, 0xa1, 0x71, 0x60, 0x14,
4355fb7f874SGeert Uytterhoeven 	0xee, 0x0a, 0x77, 0xc4, 0x66, 0x2e, 0xf9, 0x69,
4365fb7f874SGeert Uytterhoeven 	0x30, 0xaf, 0x41, 0x0b, 0xc8, 0x83, 0x3c, 0x53,
4375fb7f874SGeert Uytterhoeven 	0x99, 0x19, 0x27, 0x46, 0xf7, 0x41, 0x6e, 0x56,
4385fb7f874SGeert Uytterhoeven 	0xdc, 0x94, 0x28, 0x67, 0x4e, 0xb7, 0x25, 0x48,
4395fb7f874SGeert Uytterhoeven 	0x8a, 0xc2, 0xe0, 0x60, 0x96, 0xcc, 0x18, 0xf4,
4405fb7f874SGeert Uytterhoeven 	0x84, 0xdd, 0xa7, 0x5e, 0x3e, 0x05, 0x0b, 0x26,
4415fb7f874SGeert Uytterhoeven 	0x26, 0xb2, 0x5c, 0x1f, 0x57, 0x1a, 0x04, 0x7e,
4425fb7f874SGeert Uytterhoeven 	0x6a, 0xe3, 0x2f, 0xb4, 0x35, 0xb6, 0x38, 0x40,
4435fb7f874SGeert Uytterhoeven 	0x40, 0xcd, 0x6f, 0x87, 0x2e, 0xef, 0xa3, 0xd7,
4445fb7f874SGeert Uytterhoeven 	0xa9, 0xc2, 0xe8, 0x0d, 0x27, 0xdf, 0x44, 0x62,
4455fb7f874SGeert Uytterhoeven 	0x99, 0xa0, 0xfc, 0xcf, 0x81, 0x78, 0xcb, 0xfe,
4465fb7f874SGeert Uytterhoeven 	0xe5, 0xa0, 0x03, 0x4e, 0x6c, 0xd7, 0xf4, 0xaf,
4475fb7f874SGeert Uytterhoeven 	0x7a, 0xbb, 0x61, 0x82, 0xfe, 0x71, 0x89, 0xb2,
4485fb7f874SGeert Uytterhoeven 	0x22, 0x7c, 0x8e, 0x83, 0x04, 0xce, 0xf6, 0x5d,
4495fb7f874SGeert Uytterhoeven 	0x84, 0x8f, 0x95, 0x6a, 0x7f, 0xad, 0xfd, 0x32,
4505fb7f874SGeert Uytterhoeven 	0x9c, 0x5e, 0xe4, 0x9c, 0x89, 0x60, 0x54, 0xaa,
4515fb7f874SGeert Uytterhoeven 	0x96, 0x72, 0xd2, 0xd7, 0x36, 0x85, 0xa9, 0x45,
4525fb7f874SGeert Uytterhoeven 	0xd2, 0x2a, 0xa1, 0x81, 0x49, 0x6f, 0x7e, 0x04,
4535fb7f874SGeert Uytterhoeven 	0xfa, 0xe2, 0xfe, 0x90, 0x26, 0x77, 0x5a, 0x33,
4545fb7f874SGeert Uytterhoeven 	0xb8, 0x04, 0x9a, 0x7a, 0xe6, 0x4c, 0x4f, 0xad,
4555fb7f874SGeert Uytterhoeven 	0x72, 0x96, 0x08, 0x28, 0x58, 0x13, 0xf8, 0xc4,
4565fb7f874SGeert Uytterhoeven 	0x1c, 0xf0, 0xc3, 0x45, 0x95, 0x49, 0x20, 0x8c,
4575fb7f874SGeert Uytterhoeven 	0x9f, 0x39, 0x70, 0xe1, 0x77, 0xfe, 0xd5, 0x4b,
4585fb7f874SGeert Uytterhoeven 	0xaf, 0x86, 0xda, 0xef, 0x22, 0x06, 0x83, 0x36,
4595fb7f874SGeert Uytterhoeven 	0x29, 0x12, 0x11, 0x40, 0xbc, 0x3b, 0x86, 0xaa,
4605fb7f874SGeert Uytterhoeven 	0xaa, 0x65, 0x60, 0xc3, 0x80, 0xca, 0xed, 0xa9,
4615fb7f874SGeert Uytterhoeven 	0xf3, 0xb0, 0x79, 0x96, 0xa2, 0x55, 0x27, 0x28,
4625fb7f874SGeert Uytterhoeven 	0x55, 0x73, 0x26, 0xa5, 0x50, 0xea, 0x92, 0x4b,
4635fb7f874SGeert Uytterhoeven 	0x3c, 0x5c, 0x82, 0x33, 0xf0, 0x01, 0x3f, 0x03,
4645fb7f874SGeert Uytterhoeven 	0xc1, 0x08, 0x05, 0xbf, 0x98, 0xf4, 0x9b, 0x6d,
4655fb7f874SGeert Uytterhoeven 	0xa5, 0xa8, 0xb4, 0x82, 0x0c, 0x06, 0xfa, 0xff,
4665fb7f874SGeert Uytterhoeven 	0x2d, 0x08, 0xf3, 0x05, 0x4f, 0x57, 0x2a, 0x39,
4675fb7f874SGeert Uytterhoeven 	0xd4, 0x83, 0x0d, 0x75, 0x51, 0xd8, 0x5b, 0x1b,
4685fb7f874SGeert Uytterhoeven 	0xd3, 0x51, 0x5a, 0x32, 0x2a, 0x9b, 0x32, 0xb2,
4695fb7f874SGeert Uytterhoeven 	0xf2, 0xa4, 0x96, 0x12, 0xf2, 0xae, 0x40, 0x34,
4705fb7f874SGeert Uytterhoeven 	0x67, 0xa8, 0xf5, 0x44, 0xd5, 0x35, 0x53, 0xfe,
4715fb7f874SGeert Uytterhoeven 	0xa3, 0x60, 0x96, 0x63, 0x0f, 0x1f, 0x6e, 0xb0,
4725fb7f874SGeert Uytterhoeven 	0x5a, 0x42, 0xa6, 0xfc, 0x51, 0x0b, 0x60, 0x27,
4735fb7f874SGeert Uytterhoeven 	0xbc, 0x06, 0x71, 0xed, 0x65, 0x5b, 0x23, 0x86,
4745fb7f874SGeert Uytterhoeven 	0x4a, 0x07, 0x3b, 0x22, 0x07, 0x46, 0xe6, 0x90,
4755fb7f874SGeert Uytterhoeven 	0x3e, 0xf3, 0x25, 0x50, 0x1b, 0x4c, 0x7f, 0x03,
4765fb7f874SGeert Uytterhoeven 	0x08, 0xa8, 0x36, 0x6b, 0x87, 0xe5, 0xe3, 0xdb,
4775fb7f874SGeert Uytterhoeven 	0x9a, 0x38, 0x83, 0xff, 0x9f, 0x1a, 0x9f, 0x57,
4785fb7f874SGeert Uytterhoeven 	0xa4, 0x2a, 0xf6, 0x37, 0xbc, 0x1a, 0xff, 0xc9,
4795fb7f874SGeert Uytterhoeven 	0x1e, 0x35, 0x0c, 0xc3, 0x7c, 0xa3, 0xb2, 0xe5,
4805fb7f874SGeert Uytterhoeven 	0xd2, 0xc6, 0xb4, 0x57, 0x47, 0xe4, 0x32, 0x16,
4815fb7f874SGeert Uytterhoeven 	0x6d, 0xa9, 0xae, 0x64, 0xe6, 0x2d, 0x8d, 0xc5,
4825fb7f874SGeert Uytterhoeven 	0x8d, 0x50, 0x8e, 0xe8, 0x1a, 0x22, 0x34, 0x2a,
4835fb7f874SGeert Uytterhoeven 	0xd9, 0xeb, 0x51, 0x90, 0x4a, 0xb1, 0x41, 0x7d,
4845fb7f874SGeert Uytterhoeven 	0x64, 0xf9, 0xb9, 0x0d, 0xf6, 0x23, 0x33, 0xb0,
4855fb7f874SGeert Uytterhoeven 	0x33, 0xf4, 0xf7, 0x3f, 0x27, 0x84, 0xc6, 0x0f,
4865fb7f874SGeert Uytterhoeven 	0x54, 0xa5, 0xc0, 0x2e, 0xec, 0x0b, 0x3a, 0x48,
4875fb7f874SGeert Uytterhoeven 	0x6e, 0x80, 0x35, 0x81, 0x43, 0x9b, 0x90, 0xb1,
4885fb7f874SGeert Uytterhoeven 	0xd0, 0x2b, 0xea, 0x21, 0xdc, 0xda, 0x5b, 0x09,
4895fb7f874SGeert Uytterhoeven 	0xf4, 0xcc, 0x10, 0xb4, 0xc7, 0xfe, 0x79, 0x51,
4905fb7f874SGeert Uytterhoeven 	0xc3, 0xc5, 0xac, 0x88, 0x74, 0x84, 0x0b, 0x4b,
4915fb7f874SGeert Uytterhoeven 	0xca, 0x79, 0x16, 0x29, 0xfb, 0x69, 0x54, 0xdf,
4925fb7f874SGeert Uytterhoeven 	0x41, 0x7e, 0xe9, 0xc7, 0x8e, 0xea, 0xa5, 0xfe,
4935fb7f874SGeert Uytterhoeven 	0xfc, 0x76, 0x0e, 0x90, 0xc4, 0x92, 0x38, 0xad,
4945fb7f874SGeert Uytterhoeven 	0x7b, 0x48, 0xe6, 0x6e, 0xf7, 0x21, 0xfd, 0x4e,
4955fb7f874SGeert Uytterhoeven 	0x93, 0x0a, 0x7b, 0x41, 0x83, 0x68, 0xfb, 0x57,
4965fb7f874SGeert Uytterhoeven 	0x51, 0x76, 0x34, 0xa9, 0x6c, 0x00, 0xaa, 0x4f,
4975fb7f874SGeert Uytterhoeven 	0x66, 0x65, 0x98, 0x4a, 0x4f, 0xa3, 0xa0, 0xef,
4985fb7f874SGeert Uytterhoeven 	0x69, 0x3f, 0xe3, 0x1c, 0x92, 0x8c, 0xfd, 0xd8,
4995fb7f874SGeert Uytterhoeven 	0xe8, 0xde, 0x7c, 0x7f, 0x3e, 0x84, 0x8e, 0x69,
5005fb7f874SGeert Uytterhoeven 	0x3c, 0xf1, 0xf2, 0x05, 0x46, 0xdc, 0x2f, 0x9d,
5015fb7f874SGeert Uytterhoeven 	0x5e, 0x6e, 0x4c, 0xfb, 0xb5, 0x99, 0x2a, 0x59,
5025fb7f874SGeert Uytterhoeven 	0x63, 0xc1, 0x34, 0xbc, 0x57, 0xc0, 0x0d, 0xb9,
5035fb7f874SGeert Uytterhoeven 	0x61, 0x25, 0xf3, 0x33, 0x23, 0x51, 0xb6, 0x0d,
5045fb7f874SGeert Uytterhoeven 	0x07, 0xa6, 0xab, 0x94, 0x4a, 0xb7, 0x2a, 0xea,
5055fb7f874SGeert Uytterhoeven 	0xee, 0xac, 0xa3, 0xc3, 0x04, 0x8b, 0x0e, 0x56,
5065fb7f874SGeert Uytterhoeven 	0xfe, 0x44, 0xa7, 0x39, 0xe2, 0xed, 0xed, 0xb4,
5075fb7f874SGeert Uytterhoeven 	0x22, 0x2b, 0xac, 0x12, 0x32, 0x28, 0x91, 0xd8,
5085fb7f874SGeert Uytterhoeven 	0xa5, 0xab, 0xff, 0x5f, 0xe0, 0x4b, 0xda, 0x78,
5095fb7f874SGeert Uytterhoeven 	0x17, 0xda, 0xf1, 0x01, 0x5b, 0xcd, 0xe2, 0x5f,
5105fb7f874SGeert Uytterhoeven 	0x50, 0x45, 0x73, 0x2b, 0xe4, 0x76, 0x77, 0xf4,
5115fb7f874SGeert Uytterhoeven 	0x64, 0x1d, 0x43, 0xfb, 0x84, 0x7a, 0xea, 0x91,
5125fb7f874SGeert Uytterhoeven 	0xae, 0xf9, 0x9e, 0xb7, 0xb4, 0xb0, 0x91, 0x5f,
5135fb7f874SGeert Uytterhoeven 	0x16, 0x35, 0x9a, 0x11, 0xb8, 0xc7, 0xc1, 0x8c,
5145fb7f874SGeert Uytterhoeven 	0xc6, 0x10, 0x8d, 0x2f, 0x63, 0x4a, 0xa7, 0x57,
5155fb7f874SGeert Uytterhoeven 	0x3a, 0x51, 0xd6, 0x32, 0x2d, 0x64, 0x72, 0xd4,
5165fb7f874SGeert Uytterhoeven 	0x66, 0xdc, 0x10, 0xa6, 0x67, 0xd6, 0x04, 0x23,
5175fb7f874SGeert Uytterhoeven 	0x9d, 0x0a, 0x11, 0x77, 0xdd, 0x37, 0x94, 0x17,
5185fb7f874SGeert Uytterhoeven 	0x3c, 0xbf, 0x8b, 0x65, 0xb0, 0x2e, 0x5e, 0x66,
5195fb7f874SGeert Uytterhoeven 	0x47, 0x64, 0xac, 0xdd, 0xf0, 0x84, 0xfd, 0x39,
5205fb7f874SGeert Uytterhoeven 	0xfa, 0x15, 0x5d, 0xef, 0xae, 0xca, 0xc1, 0x36,
5215fb7f874SGeert Uytterhoeven 	0xa7, 0x5c, 0xbf, 0xc7, 0x08, 0xc2, 0x66, 0x00,
5225fb7f874SGeert Uytterhoeven 	0x74, 0x74, 0x4e, 0x27, 0x3f, 0x55, 0x8a, 0xb7,
5235fb7f874SGeert Uytterhoeven 	0x38, 0x66, 0x83, 0x6d, 0xcf, 0x99, 0x9e, 0x60,
5245fb7f874SGeert Uytterhoeven 	0x8f, 0xdd, 0x2e, 0x62, 0x22, 0x0e, 0xef, 0x0c,
5255fb7f874SGeert Uytterhoeven 	0x98, 0xa7, 0x85, 0x74, 0x3b, 0x9d, 0xec, 0x9e,
5265fb7f874SGeert Uytterhoeven 	0xa9, 0x19, 0x72, 0xa5, 0x7f, 0x2c, 0x39, 0xb7,
5275fb7f874SGeert Uytterhoeven 	0x7d, 0xb7, 0xf1, 0x12, 0x65, 0x27, 0x4b, 0x5a,
5285fb7f874SGeert Uytterhoeven 	0xde, 0x17, 0xfe, 0xad, 0x44, 0xf3, 0x20, 0x4d,
5295fb7f874SGeert Uytterhoeven 	0xfd, 0xe4, 0x1f, 0xb5, 0x81, 0xb0, 0x36, 0x37,
5305fb7f874SGeert Uytterhoeven 	0x08, 0x6f, 0xc3, 0x0c, 0xe9, 0x85, 0x98, 0x82,
5315fb7f874SGeert Uytterhoeven 	0xa9, 0x62, 0x0c, 0xc4, 0x97, 0xc0, 0x50, 0xc8,
5325fb7f874SGeert Uytterhoeven 	0xa7, 0x3c, 0x50, 0x9f, 0x43, 0xb9, 0xcd, 0x5e,
5335fb7f874SGeert Uytterhoeven 	0x4d, 0xfa, 0x1c, 0x4b, 0x0b, 0xa9, 0x98, 0x85,
5345fb7f874SGeert Uytterhoeven 	0x38, 0x92, 0xac, 0x8d, 0xe4, 0xad, 0x9b, 0x98,
5355fb7f874SGeert Uytterhoeven 	0xab, 0xd9, 0x38, 0xac, 0x62, 0x52, 0xa3, 0x22,
5365fb7f874SGeert Uytterhoeven 	0x63, 0x0f, 0xbf, 0x95, 0x48, 0xdf, 0x69, 0xe7,
5375fb7f874SGeert Uytterhoeven 	0x8b, 0x33, 0xd5, 0xb2, 0xbd, 0x05, 0x49, 0x49,
5385fb7f874SGeert Uytterhoeven 	0x9d, 0x57, 0x73, 0x19, 0x33, 0xae, 0xfa, 0x33,
5395fb7f874SGeert Uytterhoeven 	0xf1, 0x19, 0xa8, 0x80, 0xce, 0x04, 0x9f, 0xbc,
5405fb7f874SGeert Uytterhoeven 	0x1d, 0x65, 0x82, 0x1b, 0xe5, 0x3a, 0x51, 0xc8,
5415fb7f874SGeert Uytterhoeven 	0x1c, 0x21, 0xe3, 0x5d, 0xf3, 0x7d, 0x9b, 0x2f,
5425fb7f874SGeert Uytterhoeven 	0x2c, 0x1d, 0x4a, 0x7f, 0x9b, 0x68, 0x35, 0xa3,
5435fb7f874SGeert Uytterhoeven 	0xb2, 0x50, 0xf7, 0x62, 0x79, 0xcd, 0xf4, 0x98,
5445fb7f874SGeert Uytterhoeven 	0x4f, 0xe5, 0x63, 0x7c, 0x3e, 0x45, 0x31, 0x8c,
5455fb7f874SGeert Uytterhoeven 	0x16, 0xa0, 0x12, 0xc8, 0x58, 0xce, 0x39, 0xa6,
5465fb7f874SGeert Uytterhoeven 	0xbc, 0x54, 0xdb, 0xc5, 0xe0, 0xd5, 0xba, 0xbc,
5475fb7f874SGeert Uytterhoeven 	0xb9, 0x04, 0xf4, 0x8d, 0xe8, 0x2f, 0x15, 0x9d,
5485fb7f874SGeert Uytterhoeven };
5495fb7f874SGeert Uytterhoeven 
5505fb7f874SGeert Uytterhoeven /* 100 test cases */
5515fb7f874SGeert Uytterhoeven static struct crc_test {
5525fb7f874SGeert Uytterhoeven 	u32 crc;	/* random starting crc */
5535fb7f874SGeert Uytterhoeven 	u32 start;	/* random 6 bit offset in buf */
5545fb7f874SGeert Uytterhoeven 	u32 length;	/* random 11 bit length of test */
5555fb7f874SGeert Uytterhoeven 	u32 crc_le;	/* expected crc32_le result */
5565fb7f874SGeert Uytterhoeven 	u32 crc_be;	/* expected crc32_be result */
5575fb7f874SGeert Uytterhoeven 	u32 crc32c_le;	/* expected crc32c_le result */
5585fb7f874SGeert Uytterhoeven } const test[] __initconst =
5595fb7f874SGeert Uytterhoeven {
5605fb7f874SGeert Uytterhoeven 	{0x674bf11d, 0x00000038, 0x00000542, 0x0af6d466, 0xd8b6e4c1, 0xf6e93d6c},
5615fb7f874SGeert Uytterhoeven 	{0x35c672c6, 0x0000003a, 0x000001aa, 0xc6d3dfba, 0x28aaf3ad, 0x0fe92aca},
5625fb7f874SGeert Uytterhoeven 	{0x496da28e, 0x00000039, 0x000005af, 0xd933660f, 0x5d57e81f, 0x52e1ebb8},
5635fb7f874SGeert Uytterhoeven 	{0x09a9b90e, 0x00000027, 0x000001f8, 0xb45fe007, 0xf45fca9a, 0x0798af9a},
5645fb7f874SGeert Uytterhoeven 	{0xdc97e5a9, 0x00000025, 0x000003b6, 0xf81a3562, 0xe0126ba2, 0x18eb3152},
5655fb7f874SGeert Uytterhoeven 	{0x47c58900, 0x0000000a, 0x000000b9, 0x8e58eccf, 0xf3afc793, 0xd00d08c7},
5665fb7f874SGeert Uytterhoeven 	{0x292561e8, 0x0000000c, 0x00000403, 0xa2ba8aaf, 0x0b797aed, 0x8ba966bc},
5675fb7f874SGeert Uytterhoeven 	{0x415037f6, 0x00000003, 0x00000676, 0xa17d52e8, 0x7f0fdf35, 0x11d694a2},
5685fb7f874SGeert Uytterhoeven 	{0x3466e707, 0x00000026, 0x00000042, 0x258319be, 0x75c484a2, 0x6ab3208d},
5695fb7f874SGeert Uytterhoeven 	{0xafd1281b, 0x00000023, 0x000002ee, 0x4428eaf8, 0x06c7ad10, 0xba4603c5},
5705fb7f874SGeert Uytterhoeven 	{0xd3857b18, 0x00000028, 0x000004a2, 0x5c430821, 0xb062b7cb, 0xe6071c6f},
5715fb7f874SGeert Uytterhoeven 	{0x1d825a8f, 0x0000002b, 0x0000050b, 0xd2c45f0c, 0xd68634e0, 0x179ec30a},
5725fb7f874SGeert Uytterhoeven 	{0x5033e3bc, 0x0000000b, 0x00000078, 0xa3ea4113, 0xac6d31fb, 0x0903beb8},
5735fb7f874SGeert Uytterhoeven 	{0x94f1fb5e, 0x0000000f, 0x000003a2, 0xfbfc50b1, 0x3cfe50ed, 0x6a7cb4fa},
5745fb7f874SGeert Uytterhoeven 	{0xc9a0fe14, 0x00000009, 0x00000473, 0x5fb61894, 0x87070591, 0xdb535801},
5755fb7f874SGeert Uytterhoeven 	{0x88a034b1, 0x0000001c, 0x000005ad, 0xc1b16053, 0x46f95c67, 0x92bed597},
5765fb7f874SGeert Uytterhoeven 	{0xf0f72239, 0x00000020, 0x0000026d, 0xa6fa58f3, 0xf8c2c1dd, 0x192a3f1b},
5775fb7f874SGeert Uytterhoeven 	{0xcc20a5e3, 0x0000003b, 0x0000067a, 0x7740185a, 0x308b979a, 0xccbaec1a},
5785fb7f874SGeert Uytterhoeven 	{0xce589c95, 0x0000002b, 0x00000641, 0xd055e987, 0x40aae25b, 0x7eabae4d},
5795fb7f874SGeert Uytterhoeven 	{0x78edc885, 0x00000035, 0x000005be, 0xa39cb14b, 0x035b0d1f, 0x28c72982},
5805fb7f874SGeert Uytterhoeven 	{0x9d40a377, 0x0000003b, 0x00000038, 0x1f47ccd2, 0x197fbc9d, 0xc3cd4d18},
5815fb7f874SGeert Uytterhoeven 	{0x703d0e01, 0x0000003c, 0x000006f1, 0x88735e7c, 0xfed57c5a, 0xbca8f0e7},
5825fb7f874SGeert Uytterhoeven 	{0x776bf505, 0x0000000f, 0x000005b2, 0x5cc4fc01, 0xf32efb97, 0x713f60b3},
5835fb7f874SGeert Uytterhoeven 	{0x4a3e7854, 0x00000027, 0x000004b8, 0x8d923c82, 0x0cbfb4a2, 0xebd08fd5},
5845fb7f874SGeert Uytterhoeven 	{0x209172dd, 0x0000003b, 0x00000356, 0xb89e9c2b, 0xd7868138, 0x64406c59},
5855fb7f874SGeert Uytterhoeven 	{0x3ba4cc5b, 0x0000002f, 0x00000203, 0xe51601a9, 0x5b2a1032, 0x7421890e},
5865fb7f874SGeert Uytterhoeven 	{0xfc62f297, 0x00000000, 0x00000079, 0x71a8e1a2, 0x5d88685f, 0xe9347603},
5875fb7f874SGeert Uytterhoeven 	{0x64280b8b, 0x00000016, 0x000007ab, 0x0fa7a30c, 0xda3a455f, 0x1bef9060},
5885fb7f874SGeert Uytterhoeven 	{0x97dd724b, 0x00000033, 0x000007ad, 0x5788b2f4, 0xd7326d32, 0x34720072},
5895fb7f874SGeert Uytterhoeven 	{0x61394b52, 0x00000035, 0x00000571, 0xc66525f1, 0xcabe7fef, 0x48310f59},
5905fb7f874SGeert Uytterhoeven 	{0x29b4faff, 0x00000024, 0x0000006e, 0xca13751e, 0x993648e0, 0x783a4213},
5915fb7f874SGeert Uytterhoeven 	{0x29bfb1dc, 0x0000000b, 0x00000244, 0x436c43f7, 0x429f7a59, 0x9e8efd41},
5925fb7f874SGeert Uytterhoeven 	{0x86ae934b, 0x00000035, 0x00000104, 0x0760ec93, 0x9cf7d0f4, 0xfc3d34a5},
5935fb7f874SGeert Uytterhoeven 	{0xc4c1024e, 0x0000002e, 0x000006b1, 0x6516a3ec, 0x19321f9c, 0x17a52ae2},
5945fb7f874SGeert Uytterhoeven 	{0x3287a80a, 0x00000026, 0x00000496, 0x0b257eb1, 0x754ebd51, 0x886d935a},
5955fb7f874SGeert Uytterhoeven 	{0xa4db423e, 0x00000023, 0x0000045d, 0x9b3a66dc, 0x873e9f11, 0xeaaeaeb2},
5965fb7f874SGeert Uytterhoeven 	{0x7a1078df, 0x00000015, 0x0000014a, 0x8c2484c5, 0x6a628659, 0x8e900a4b},
5975fb7f874SGeert Uytterhoeven 	{0x6048bd5b, 0x00000006, 0x0000006a, 0x897e3559, 0xac9961af, 0xd74662b1},
5985fb7f874SGeert Uytterhoeven 	{0xd8f9ea20, 0x0000003d, 0x00000277, 0x60eb905b, 0xed2aaf99, 0xd26752ba},
5995fb7f874SGeert Uytterhoeven 	{0xea5ec3b4, 0x0000002a, 0x000004fe, 0x869965dc, 0x6c1f833b, 0x8b1fcd62},
6005fb7f874SGeert Uytterhoeven 	{0x2dfb005d, 0x00000016, 0x00000345, 0x6a3b117e, 0xf05e8521, 0xf54342fe},
6015fb7f874SGeert Uytterhoeven 	{0x5a214ade, 0x00000020, 0x000005b6, 0x467f70be, 0xcb22ccd3, 0x5b95b988},
6025fb7f874SGeert Uytterhoeven 	{0xf0ab9cca, 0x00000032, 0x00000515, 0xed223df3, 0x7f3ef01d, 0x2e1176be},
6035fb7f874SGeert Uytterhoeven 	{0x91b444f9, 0x0000002e, 0x000007f8, 0x84e9a983, 0x5676756f, 0x66120546},
6045fb7f874SGeert Uytterhoeven 	{0x1b5d2ddb, 0x0000002e, 0x0000012c, 0xba638c4c, 0x3f42047b, 0xf256a5cc},
6055fb7f874SGeert Uytterhoeven 	{0xd824d1bb, 0x0000003a, 0x000007b5, 0x6288653b, 0x3a3ebea0, 0x4af1dd69},
6065fb7f874SGeert Uytterhoeven 	{0x0470180c, 0x00000034, 0x000001f0, 0x9d5b80d6, 0x3de08195, 0x56f0a04a},
6075fb7f874SGeert Uytterhoeven 	{0xffaa3a3f, 0x00000036, 0x00000299, 0xf3a82ab8, 0x53e0c13d, 0x74f6b6b2},
6085fb7f874SGeert Uytterhoeven 	{0x6406cfeb, 0x00000023, 0x00000600, 0xa920b8e8, 0xe4e2acf4, 0x085951fd},
6095fb7f874SGeert Uytterhoeven 	{0xb24aaa38, 0x0000003e, 0x000004a1, 0x657cc328, 0x5077b2c3, 0xc65387eb},
6105fb7f874SGeert Uytterhoeven 	{0x58b2ab7c, 0x00000039, 0x000002b4, 0x3a17ee7e, 0x9dcb3643, 0x1ca9257b},
6115fb7f874SGeert Uytterhoeven 	{0x3db85970, 0x00000006, 0x000002b6, 0x95268b59, 0xb9812c10, 0xfd196d76},
6125fb7f874SGeert Uytterhoeven 	{0x857830c5, 0x00000003, 0x00000590, 0x4ef439d5, 0xf042161d, 0x5ef88339},
6135fb7f874SGeert Uytterhoeven 	{0xe1fcd978, 0x0000003e, 0x000007d8, 0xae8d8699, 0xce0a1ef5, 0x2c3714d9},
6145fb7f874SGeert Uytterhoeven 	{0xb982a768, 0x00000016, 0x000006e0, 0x62fad3df, 0x5f8a067b, 0x58576548},
6155fb7f874SGeert Uytterhoeven 	{0x1d581ce8, 0x0000001e, 0x0000058b, 0xf0f5da53, 0x26e39eee, 0xfd7c57de},
6165fb7f874SGeert Uytterhoeven 	{0x2456719b, 0x00000025, 0x00000503, 0x4296ac64, 0xd50e4c14, 0xd5fedd59},
6175fb7f874SGeert Uytterhoeven 	{0xfae6d8f2, 0x00000000, 0x0000055d, 0x057fdf2e, 0x2a31391a, 0x1cc3b17b},
6185fb7f874SGeert Uytterhoeven 	{0xcba828e3, 0x00000039, 0x000002ce, 0xe3f22351, 0x8f00877b, 0x270eed73},
6195fb7f874SGeert Uytterhoeven 	{0x13d25952, 0x0000000a, 0x0000072d, 0x76d4b4cc, 0x5eb67ec3, 0x91ecbb11},
6205fb7f874SGeert Uytterhoeven 	{0x0342be3f, 0x00000015, 0x00000599, 0xec75d9f1, 0x9d4d2826, 0x05ed8d0c},
6215fb7f874SGeert Uytterhoeven 	{0xeaa344e0, 0x00000014, 0x000004d8, 0x72a4c981, 0x2064ea06, 0x0b09ad5b},
6225fb7f874SGeert Uytterhoeven 	{0xbbb52021, 0x0000003b, 0x00000272, 0x04af99fc, 0xaf042d35, 0xf8d511fb},
6235fb7f874SGeert Uytterhoeven 	{0xb66384dc, 0x0000001d, 0x000007fc, 0xd7629116, 0x782bd801, 0x5ad832cc},
6245fb7f874SGeert Uytterhoeven 	{0x616c01b6, 0x00000022, 0x000002c8, 0x5b1dab30, 0x783ce7d2, 0x1214d196},
6255fb7f874SGeert Uytterhoeven 	{0xce2bdaad, 0x00000016, 0x0000062a, 0x932535c8, 0x3f02926d, 0x5747218a},
6265fb7f874SGeert Uytterhoeven 	{0x00fe84d7, 0x00000005, 0x00000205, 0x850e50aa, 0x753d649c, 0xde8f14de},
6275fb7f874SGeert Uytterhoeven 	{0xbebdcb4c, 0x00000006, 0x0000055d, 0xbeaa37a2, 0x2d8c9eba, 0x3563b7b9},
6285fb7f874SGeert Uytterhoeven 	{0xd8b1a02a, 0x00000010, 0x00000387, 0x5017d2fc, 0x503541a5, 0x071475d0},
6295fb7f874SGeert Uytterhoeven 	{0x3b96cad2, 0x00000036, 0x00000347, 0x1d2372ae, 0x926cd90b, 0x54c79d60},
6305fb7f874SGeert Uytterhoeven 	{0xc94c1ed7, 0x00000005, 0x0000038b, 0x9e9fdb22, 0x144a9178, 0x4c53eee6},
6315fb7f874SGeert Uytterhoeven 	{0x1aad454e, 0x00000025, 0x000002b2, 0xc3f6315c, 0x5c7a35b3, 0x10137a3c},
6325fb7f874SGeert Uytterhoeven 	{0xa4fec9a6, 0x00000000, 0x000006d6, 0x90be5080, 0xa4107605, 0xaa9d6c73},
6335fb7f874SGeert Uytterhoeven 	{0x1bbe71e2, 0x0000001f, 0x000002fd, 0x4e504c3b, 0x284ccaf1, 0xb63d23e7},
6345fb7f874SGeert Uytterhoeven 	{0x4201c7e4, 0x00000002, 0x000002b7, 0x7822e3f9, 0x0cc912a9, 0x7f53e9cf},
6355fb7f874SGeert Uytterhoeven 	{0x23fddc96, 0x00000003, 0x00000627, 0x8a385125, 0x07767e78, 0x13c1cd83},
6365fb7f874SGeert Uytterhoeven 	{0xd82ba25c, 0x00000016, 0x0000063e, 0x98e4148a, 0x283330c9, 0x49ff5867},
6375fb7f874SGeert Uytterhoeven 	{0x786f2032, 0x0000002d, 0x0000060f, 0xf201600a, 0xf561bfcd, 0x8467f211},
6385fb7f874SGeert Uytterhoeven 	{0xfebe4e1f, 0x0000002a, 0x000004f2, 0x95e51961, 0xfd80dcab, 0x3f9683b2},
6395fb7f874SGeert Uytterhoeven 	{0x1a6e0a39, 0x00000008, 0x00000672, 0x8af6c2a5, 0x78dd84cb, 0x76a3f874},
6405fb7f874SGeert Uytterhoeven 	{0x56000ab8, 0x0000000e, 0x000000e5, 0x36bacb8f, 0x22ee1f77, 0x863b702f},
6415fb7f874SGeert Uytterhoeven 	{0x4717fe0c, 0x00000000, 0x000006ec, 0x8439f342, 0x5c8e03da, 0xdc6c58ff},
6425fb7f874SGeert Uytterhoeven 	{0xd5d5d68e, 0x0000003c, 0x000003a3, 0x46fff083, 0x177d1b39, 0x0622cc95},
6435fb7f874SGeert Uytterhoeven 	{0xc25dd6c6, 0x00000024, 0x000006c0, 0x5ceb8eb4, 0x892b0d16, 0xe85605cd},
6445fb7f874SGeert Uytterhoeven 	{0xe9b11300, 0x00000023, 0x00000683, 0x07a5d59a, 0x6c6a3208, 0x31da5f06},
6455fb7f874SGeert Uytterhoeven 	{0x95cd285e, 0x00000001, 0x00000047, 0x7b3a4368, 0x0202c07e, 0xa1f2e784},
6465fb7f874SGeert Uytterhoeven 	{0xd9245a25, 0x0000001e, 0x000003a6, 0xd33c1841, 0x1936c0d5, 0xb07cc616},
6475fb7f874SGeert Uytterhoeven 	{0x103279db, 0x00000006, 0x0000039b, 0xca09b8a0, 0x77d62892, 0xbf943b6c},
6485fb7f874SGeert Uytterhoeven 	{0x1cba3172, 0x00000027, 0x000001c8, 0xcb377194, 0xebe682db, 0x2c01af1c},
6495fb7f874SGeert Uytterhoeven 	{0x8f613739, 0x0000000c, 0x000001df, 0xb4b0bc87, 0x7710bd43, 0x0fe5f56d},
6505fb7f874SGeert Uytterhoeven 	{0x1c6aa90d, 0x0000001b, 0x0000053c, 0x70559245, 0xda7894ac, 0xf8943b2d},
6515fb7f874SGeert Uytterhoeven 	{0xaabe5b93, 0x0000003d, 0x00000715, 0xcdbf42fa, 0x0c3b99e7, 0xe4d89272},
6525fb7f874SGeert Uytterhoeven 	{0xf15dd038, 0x00000006, 0x000006db, 0x6e104aea, 0x8d5967f2, 0x7c2f6bbb},
6535fb7f874SGeert Uytterhoeven 	{0x584dd49c, 0x00000020, 0x000007bc, 0x36b6cfd6, 0xad4e23b2, 0xabbf388b},
6545fb7f874SGeert Uytterhoeven 	{0x5d8c9506, 0x00000020, 0x00000470, 0x4c62378e, 0x31d92640, 0x1dca1f4e},
6555fb7f874SGeert Uytterhoeven 	{0xb80d17b0, 0x00000032, 0x00000346, 0x22a5bb88, 0x9a7ec89f, 0x5c170e23},
6565fb7f874SGeert Uytterhoeven 	{0xdaf0592e, 0x00000023, 0x000007b0, 0x3cab3f99, 0x9b1fdd99, 0xc0e9d672},
6575fb7f874SGeert Uytterhoeven 	{0x4793cc85, 0x0000000d, 0x00000706, 0xe82e04f6, 0xed3db6b7, 0xc18bdc86},
6585fb7f874SGeert Uytterhoeven 	{0x82ebf64e, 0x00000009, 0x000007c3, 0x69d590a9, 0x9efa8499, 0xa874fcdd},
6595fb7f874SGeert Uytterhoeven 	{0xb18a0319, 0x00000026, 0x000007db, 0x1cf98dcc, 0x8fa9ad6a, 0x9dc0bb48},
6605fb7f874SGeert Uytterhoeven };
6615fb7f874SGeert Uytterhoeven 
6625fb7f874SGeert Uytterhoeven #include <linux/time.h>
6635fb7f874SGeert Uytterhoeven 
crc32c_test(void)6645fb7f874SGeert Uytterhoeven static int __init crc32c_test(void)
6655fb7f874SGeert Uytterhoeven {
6665fb7f874SGeert Uytterhoeven 	int i;
6675fb7f874SGeert Uytterhoeven 	int errors = 0;
6685fb7f874SGeert Uytterhoeven 	int bytes = 0;
6695fb7f874SGeert Uytterhoeven 	u64 nsec;
6705fb7f874SGeert Uytterhoeven 	unsigned long flags;
6715fb7f874SGeert Uytterhoeven 
6725fb7f874SGeert Uytterhoeven 	/* keep static to prevent cache warming code from
6735fb7f874SGeert Uytterhoeven 	 * getting eliminated by the compiler */
6745fb7f874SGeert Uytterhoeven 	static u32 crc;
6755fb7f874SGeert Uytterhoeven 
6765fb7f874SGeert Uytterhoeven 	/* pre-warm the cache */
6775fb7f874SGeert Uytterhoeven 	for (i = 0; i < 100; i++) {
678*1b3dce8bSKevin Bracey 		bytes += test[i].length;
6795fb7f874SGeert Uytterhoeven 
6805fb7f874SGeert Uytterhoeven 		crc ^= __crc32c_le(test[i].crc, test_buf +
6815fb7f874SGeert Uytterhoeven 		    test[i].start, test[i].length);
6825fb7f874SGeert Uytterhoeven 	}
6835fb7f874SGeert Uytterhoeven 
6845fb7f874SGeert Uytterhoeven 	/* reduce OS noise */
6855fb7f874SGeert Uytterhoeven 	local_irq_save(flags);
6865fb7f874SGeert Uytterhoeven 
6875fb7f874SGeert Uytterhoeven 	nsec = ktime_get_ns();
6885fb7f874SGeert Uytterhoeven 	for (i = 0; i < 100; i++) {
6895fb7f874SGeert Uytterhoeven 		if (test[i].crc32c_le != __crc32c_le(test[i].crc, test_buf +
6905fb7f874SGeert Uytterhoeven 		    test[i].start, test[i].length))
6915fb7f874SGeert Uytterhoeven 			errors++;
6925fb7f874SGeert Uytterhoeven 	}
6935fb7f874SGeert Uytterhoeven 	nsec = ktime_get_ns() - nsec;
6945fb7f874SGeert Uytterhoeven 
6955fb7f874SGeert Uytterhoeven 	local_irq_restore(flags);
6965fb7f874SGeert Uytterhoeven 
6975fb7f874SGeert Uytterhoeven 	pr_info("crc32c: CRC_LE_BITS = %d\n", CRC_LE_BITS);
6985fb7f874SGeert Uytterhoeven 
6995fb7f874SGeert Uytterhoeven 	if (errors)
7005fb7f874SGeert Uytterhoeven 		pr_warn("crc32c: %d self tests failed\n", errors);
7015fb7f874SGeert Uytterhoeven 	else {
7025fb7f874SGeert Uytterhoeven 		pr_info("crc32c: self tests passed, processed %d bytes in %lld nsec\n",
7035fb7f874SGeert Uytterhoeven 			bytes, nsec);
7045fb7f874SGeert Uytterhoeven 	}
7055fb7f874SGeert Uytterhoeven 
7065fb7f874SGeert Uytterhoeven 	return 0;
7075fb7f874SGeert Uytterhoeven }
7085fb7f874SGeert Uytterhoeven 
crc32c_combine_test(void)7095fb7f874SGeert Uytterhoeven static int __init crc32c_combine_test(void)
7105fb7f874SGeert Uytterhoeven {
7115fb7f874SGeert Uytterhoeven 	int i, j;
7125fb7f874SGeert Uytterhoeven 	int errors = 0, runs = 0;
7135fb7f874SGeert Uytterhoeven 
7145fb7f874SGeert Uytterhoeven 	for (i = 0; i < 10; i++) {
7155fb7f874SGeert Uytterhoeven 		u32 crc_full;
7165fb7f874SGeert Uytterhoeven 
7175fb7f874SGeert Uytterhoeven 		crc_full = __crc32c_le(test[i].crc, test_buf + test[i].start,
7185fb7f874SGeert Uytterhoeven 				       test[i].length);
7195fb7f874SGeert Uytterhoeven 		for (j = 0; j <= test[i].length; ++j) {
7205fb7f874SGeert Uytterhoeven 			u32 crc1, crc2;
7215fb7f874SGeert Uytterhoeven 			u32 len1 = j, len2 = test[i].length - j;
7225fb7f874SGeert Uytterhoeven 
7235fb7f874SGeert Uytterhoeven 			crc1 = __crc32c_le(test[i].crc, test_buf +
7245fb7f874SGeert Uytterhoeven 					   test[i].start, len1);
7255fb7f874SGeert Uytterhoeven 			crc2 = __crc32c_le(0, test_buf + test[i].start +
7265fb7f874SGeert Uytterhoeven 					   len1, len2);
7275fb7f874SGeert Uytterhoeven 
7285fb7f874SGeert Uytterhoeven 			if (!(crc_full == __crc32c_le_combine(crc1, crc2, len2) &&
7295fb7f874SGeert Uytterhoeven 			      crc_full == test[i].crc32c_le))
7305fb7f874SGeert Uytterhoeven 				errors++;
7315fb7f874SGeert Uytterhoeven 			runs++;
7325fb7f874SGeert Uytterhoeven 			cond_resched();
7335fb7f874SGeert Uytterhoeven 		}
7345fb7f874SGeert Uytterhoeven 	}
7355fb7f874SGeert Uytterhoeven 
7365fb7f874SGeert Uytterhoeven 	if (errors)
7375fb7f874SGeert Uytterhoeven 		pr_warn("crc32c_combine: %d/%d self tests failed\n", errors, runs);
7385fb7f874SGeert Uytterhoeven 	else
7395fb7f874SGeert Uytterhoeven 		pr_info("crc32c_combine: %d self tests passed\n", runs);
7405fb7f874SGeert Uytterhoeven 
7415fb7f874SGeert Uytterhoeven 	return 0;
7425fb7f874SGeert Uytterhoeven }
7435fb7f874SGeert Uytterhoeven 
crc32_test(void)7445fb7f874SGeert Uytterhoeven static int __init crc32_test(void)
7455fb7f874SGeert Uytterhoeven {
7465fb7f874SGeert Uytterhoeven 	int i;
7475fb7f874SGeert Uytterhoeven 	int errors = 0;
7485fb7f874SGeert Uytterhoeven 	int bytes = 0;
7495fb7f874SGeert Uytterhoeven 	u64 nsec;
7505fb7f874SGeert Uytterhoeven 	unsigned long flags;
7515fb7f874SGeert Uytterhoeven 
7525fb7f874SGeert Uytterhoeven 	/* keep static to prevent cache warming code from
7535fb7f874SGeert Uytterhoeven 	 * getting eliminated by the compiler */
7545fb7f874SGeert Uytterhoeven 	static u32 crc;
7555fb7f874SGeert Uytterhoeven 
7565fb7f874SGeert Uytterhoeven 	/* pre-warm the cache */
7575fb7f874SGeert Uytterhoeven 	for (i = 0; i < 100; i++) {
7585fb7f874SGeert Uytterhoeven 		bytes += 2*test[i].length;
7595fb7f874SGeert Uytterhoeven 
7605fb7f874SGeert Uytterhoeven 		crc ^= crc32_le(test[i].crc, test_buf +
7615fb7f874SGeert Uytterhoeven 		    test[i].start, test[i].length);
7625fb7f874SGeert Uytterhoeven 
7635fb7f874SGeert Uytterhoeven 		crc ^= crc32_be(test[i].crc, test_buf +
7645fb7f874SGeert Uytterhoeven 		    test[i].start, test[i].length);
7655fb7f874SGeert Uytterhoeven 	}
7665fb7f874SGeert Uytterhoeven 
7675fb7f874SGeert Uytterhoeven 	/* reduce OS noise */
7685fb7f874SGeert Uytterhoeven 	local_irq_save(flags);
7695fb7f874SGeert Uytterhoeven 
7705fb7f874SGeert Uytterhoeven 	nsec = ktime_get_ns();
7715fb7f874SGeert Uytterhoeven 	for (i = 0; i < 100; i++) {
7725fb7f874SGeert Uytterhoeven 		if (test[i].crc_le != crc32_le(test[i].crc, test_buf +
7735fb7f874SGeert Uytterhoeven 		    test[i].start, test[i].length))
7745fb7f874SGeert Uytterhoeven 			errors++;
7755fb7f874SGeert Uytterhoeven 
7765fb7f874SGeert Uytterhoeven 		if (test[i].crc_be != crc32_be(test[i].crc, test_buf +
7775fb7f874SGeert Uytterhoeven 		    test[i].start, test[i].length))
7785fb7f874SGeert Uytterhoeven 			errors++;
7795fb7f874SGeert Uytterhoeven 	}
7805fb7f874SGeert Uytterhoeven 	nsec = ktime_get_ns() - nsec;
7815fb7f874SGeert Uytterhoeven 
7825fb7f874SGeert Uytterhoeven 	local_irq_restore(flags);
7835fb7f874SGeert Uytterhoeven 
7845fb7f874SGeert Uytterhoeven 	pr_info("crc32: CRC_LE_BITS = %d, CRC_BE BITS = %d\n",
7855fb7f874SGeert Uytterhoeven 		 CRC_LE_BITS, CRC_BE_BITS);
7865fb7f874SGeert Uytterhoeven 
7875fb7f874SGeert Uytterhoeven 	if (errors)
7885fb7f874SGeert Uytterhoeven 		pr_warn("crc32: %d self tests failed\n", errors);
7895fb7f874SGeert Uytterhoeven 	else {
7905fb7f874SGeert Uytterhoeven 		pr_info("crc32: self tests passed, processed %d bytes in %lld nsec\n",
7915fb7f874SGeert Uytterhoeven 			bytes, nsec);
7925fb7f874SGeert Uytterhoeven 	}
7935fb7f874SGeert Uytterhoeven 
7945fb7f874SGeert Uytterhoeven 	return 0;
7955fb7f874SGeert Uytterhoeven }
7965fb7f874SGeert Uytterhoeven 
crc32_combine_test(void)7975fb7f874SGeert Uytterhoeven static int __init crc32_combine_test(void)
7985fb7f874SGeert Uytterhoeven {
7995fb7f874SGeert Uytterhoeven 	int i, j;
8005fb7f874SGeert Uytterhoeven 	int errors = 0, runs = 0;
8015fb7f874SGeert Uytterhoeven 
8025fb7f874SGeert Uytterhoeven 	for (i = 0; i < 10; i++) {
8035fb7f874SGeert Uytterhoeven 		u32 crc_full;
8045fb7f874SGeert Uytterhoeven 
8055fb7f874SGeert Uytterhoeven 		crc_full = crc32_le(test[i].crc, test_buf + test[i].start,
8065fb7f874SGeert Uytterhoeven 				    test[i].length);
8075fb7f874SGeert Uytterhoeven 		for (j = 0; j <= test[i].length; ++j) {
8085fb7f874SGeert Uytterhoeven 			u32 crc1, crc2;
8095fb7f874SGeert Uytterhoeven 			u32 len1 = j, len2 = test[i].length - j;
8105fb7f874SGeert Uytterhoeven 
8115fb7f874SGeert Uytterhoeven 			crc1 = crc32_le(test[i].crc, test_buf +
8125fb7f874SGeert Uytterhoeven 					test[i].start, len1);
8135fb7f874SGeert Uytterhoeven 			crc2 = crc32_le(0, test_buf + test[i].start +
8145fb7f874SGeert Uytterhoeven 					len1, len2);
8155fb7f874SGeert Uytterhoeven 
8165fb7f874SGeert Uytterhoeven 			if (!(crc_full == crc32_le_combine(crc1, crc2, len2) &&
8175fb7f874SGeert Uytterhoeven 			      crc_full == test[i].crc_le))
8185fb7f874SGeert Uytterhoeven 				errors++;
8195fb7f874SGeert Uytterhoeven 			runs++;
8205fb7f874SGeert Uytterhoeven 			cond_resched();
8215fb7f874SGeert Uytterhoeven 		}
8225fb7f874SGeert Uytterhoeven 	}
8235fb7f874SGeert Uytterhoeven 
8245fb7f874SGeert Uytterhoeven 	if (errors)
8255fb7f874SGeert Uytterhoeven 		pr_warn("crc32_combine: %d/%d self tests failed\n", errors, runs);
8265fb7f874SGeert Uytterhoeven 	else
8275fb7f874SGeert Uytterhoeven 		pr_info("crc32_combine: %d self tests passed\n", runs);
8285fb7f874SGeert Uytterhoeven 
8295fb7f874SGeert Uytterhoeven 	return 0;
8305fb7f874SGeert Uytterhoeven }
8315fb7f874SGeert Uytterhoeven 
crc32test_init(void)8325fb7f874SGeert Uytterhoeven static int __init crc32test_init(void)
8335fb7f874SGeert Uytterhoeven {
8345fb7f874SGeert Uytterhoeven 	crc32_test();
8355fb7f874SGeert Uytterhoeven 	crc32c_test();
8365fb7f874SGeert Uytterhoeven 
8375fb7f874SGeert Uytterhoeven 	crc32_combine_test();
8385fb7f874SGeert Uytterhoeven 	crc32c_combine_test();
8395fb7f874SGeert Uytterhoeven 
8405fb7f874SGeert Uytterhoeven 	return 0;
8415fb7f874SGeert Uytterhoeven }
8425fb7f874SGeert Uytterhoeven 
crc32_exit(void)8435fb7f874SGeert Uytterhoeven static void __exit crc32_exit(void)
8445fb7f874SGeert Uytterhoeven {
8455fb7f874SGeert Uytterhoeven }
8465fb7f874SGeert Uytterhoeven 
8475fb7f874SGeert Uytterhoeven module_init(crc32test_init);
8485fb7f874SGeert Uytterhoeven module_exit(crc32_exit);
8495fb7f874SGeert Uytterhoeven 
8505fb7f874SGeert Uytterhoeven MODULE_AUTHOR("Matt Domsch <Matt_Domsch@dell.com>");
8515fb7f874SGeert Uytterhoeven MODULE_DESCRIPTION("CRC32 selftest");
8525fb7f874SGeert Uytterhoeven MODULE_LICENSE("GPL");
853