Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/classes/com/sun/crypto/provider/BlowfishCrypt.java
38922 views
1
/*
2
* Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
package com.sun.crypto.provider;
27
28
import java.security.InvalidKeyException;
29
30
/**
31
* This is the internal Blowfish class responsible for encryption and
32
* decryption of a byte array of size <code>BLOWFISH_BLOCK_SIZE</code>.
33
*
34
* @author Jan Luehe
35
* @author David Brownell
36
*
37
* @see BlowfishCipher
38
*/
39
40
final class BlowfishCrypt extends SymmetricCipher
41
implements BlowfishConstants {
42
43
/*
44
* Are we encrypting or decrypting?
45
*/
46
private boolean decrypting = false;
47
48
/**
49
* Gets this cipher's block size.
50
*
51
* @return this cipher's block size
52
*/
53
int getBlockSize() {
54
return BLOWFISH_BLOCK_SIZE;
55
}
56
57
void init(boolean decrypting, String algorithm, byte[] rawKey)
58
throws InvalidKeyException {
59
this.decrypting = decrypting;
60
if (!algorithm.equalsIgnoreCase("Blowfish")) {
61
throw new InvalidKeyException("Wrong algorithm: Blowfish required");
62
}
63
if (rawKey.length > BLOWFISH_MAX_KEYSIZE) {
64
throw new InvalidKeyException("Key too long (> 448 bits)");
65
}
66
// Step 1: Init P and then S arrays from pi bytes
67
int i, j, count;
68
69
System.arraycopy(pi, 0, p, 0, 18);
70
System.arraycopy(pi, 18, s0, 0, 256);
71
System.arraycopy(pi, 18 + 256, s1, 0, 256);
72
System.arraycopy(pi, 18 + 512, s2, 0, 256);
73
System.arraycopy(pi, 18 + 768, s3, 0, 256);
74
75
// Step 2: XOR all parts of P with key data
76
int tmp = 0;
77
int nLen = rawKey.length;
78
int nKeyPos = 0;
79
for (i = 0; i < 18; i++) {
80
for (j = 0; j < 4; j++) {
81
tmp <<= 8;
82
tmp |= 0x0ff & rawKey[nKeyPos];
83
if (++nKeyPos == nLen) nKeyPos = 0;
84
}
85
p[i] ^= tmp;
86
}
87
88
// Steps 3-7: Replace all P, S values with computed values
89
int[] data = new int[2];
90
91
for (i = 0; i < 18; i+=2) {
92
encryptBlock(data);
93
p[i] = data[0];
94
p[i+1] = data[1];
95
}
96
97
for (j = 0; j < 256; j+=2) {
98
encryptBlock(data);
99
s0[j] = data[0];
100
s0[j+1] = data[1];
101
}
102
for (j = 0; j < 256; j+=2) {
103
encryptBlock(data);
104
s1[j] = data[0];
105
s1[j+1] = data[1];
106
}
107
for (j = 0; j < 256; j+=2) {
108
encryptBlock(data);
109
s2[j] = data[0];
110
s2[j+1] = data[1];
111
}
112
for (j = 0; j < 256; j+=2) {
113
encryptBlock(data);
114
s3[j] = data[0];
115
s3[j+1] = data[1];
116
}
117
}
118
119
/**
120
* Performs encryption operation.
121
*
122
* <p>The input plain text <code>plain</code>, starting at
123
* <code>plainOffset</code> and ending at
124
* <code>(plainOffset + len - 1)</code>, is encrypted.
125
* The result is stored in <code>cipher</code>, starting at
126
* <code>cipherOffset</code>.
127
*
128
* <p>The subclass that implements Cipher should ensure that
129
* <code>init</code> has been called before this method is called.
130
*
131
* @param plain the buffer with the input data to be encrypted
132
* @param plainOffset the offset in <code>plain</code>
133
* @param plainLen the length of the input data
134
* @param cipher the buffer for the result
135
* @param cipherOffset the offset in <code>cipher</code>
136
*/
137
void encryptBlock(byte[] plain, int plainOffset,
138
byte[] cipher, int cipherOffset)
139
{
140
cipherBlock(plain, plainOffset, cipher, cipherOffset);
141
}
142
143
/**
144
* Performs decryption operation.
145
*
146
* <p>The input cipher text <code>cipher</code>, starting at
147
* <code>cipherOffset</code> and ending at
148
* <code>(cipherOffset + len - 1)</code>, is decrypted.
149
* The result is stored in <code>plain</code>, starting at
150
* <code>plainOffset</code>.
151
*
152
* <p>The subclass that implements Cipher should ensure that
153
* <code>init</code> has been called before this method is called.
154
*
155
* @param cipher the buffer with the input data to be decrypted
156
* @param cipherOffset the offset in <code>cipherOffset</code>
157
* @param cipherLen the length of the input data
158
* @param plain the buffer for the result
159
* @param plainOffset the offset in <code>plain</code>
160
*/
161
void decryptBlock(byte[] cipher, int cipherOffset,
162
byte[] plain, int plainOffset)
163
{
164
cipherBlock(cipher, cipherOffset, plain, plainOffset);
165
}
166
167
/**
168
* Encrypts, or decrypts, the blocks of data passed in.
169
*/
170
private void cipherBlock(byte[] in, int inOffset,
171
byte[] out, int outOffset) {
172
temp[0] = ((in[inOffset ] ) << 24) |
173
((in[inOffset + 1] & 0xff) << 16) |
174
((in[inOffset + 2] & 0xff) << 8) |
175
((in[inOffset + 3] & 0xff) );
176
177
temp[1] = ((in[inOffset + 4] ) << 24) |
178
((in[inOffset + 5] & 0xff) << 16) |
179
((in[inOffset + 6] & 0xff) << 8) |
180
((in[inOffset + 7] & 0xff) );
181
182
if (decrypting) {
183
decryptBlock(temp);
184
} else {
185
encryptBlock(temp);
186
}
187
188
int t = temp[0];
189
out[outOffset ] = (byte)(t >> 24);
190
out[outOffset + 1] = (byte)(t >> 16);
191
out[outOffset + 2] = (byte)(t >> 8);
192
out[outOffset + 3] = (byte)(t );
193
194
t = temp[1];
195
out[outOffset + 4] = (byte)(t >> 24);
196
out[outOffset + 5] = (byte)(t >> 16);
197
out[outOffset + 6] = (byte)(t >> 8);
198
out[outOffset + 7] = (byte)(t );
199
}
200
201
/**
202
* Encrypts a single block, in place.
203
*/
204
private void encryptBlock(int[] value) {
205
int left = value[0];
206
int right = value[1];
207
208
left ^= p[0];
209
210
right ^= F(left) ^ p[1];
211
left ^= F(right) ^ p[2];
212
right ^= F(left) ^ p[3];
213
left ^= F(right) ^ p[4];
214
215
right ^= F(left) ^ p[5];
216
left ^= F(right) ^ p[6];
217
right ^= F(left) ^ p[7];
218
left ^= F(right) ^ p[8];
219
220
right ^= F(left) ^ p[9];
221
left ^= F(right) ^ p[10];
222
right ^= F(left) ^ p[11];
223
left ^= F(right) ^ p[12];
224
225
right ^= F(left) ^ p[13];
226
left ^= F(right) ^ p[14];
227
right ^= F(left) ^ p[15];
228
left ^= F(right) ^ p[16];
229
230
right ^= p[17];
231
232
value[0] = right;
233
value[1] = left;
234
}
235
236
/**
237
* Decrypts a single block, in place.
238
*/
239
private void decryptBlock(int[] value) {
240
int left = value[1];
241
int right = value[0];
242
243
right ^= p[17];
244
245
left ^= p[16] ^ F(right);
246
right ^= p[15] ^ F(left);
247
left ^= p[14] ^ F(right);
248
right ^= p[13] ^ F(left);
249
250
left ^= p[12] ^ F(right);
251
right ^= p[11] ^ F(left);
252
left ^= p[10] ^ F(right);
253
right ^= p[9] ^ F(left);
254
255
left ^= p[8] ^ F(right);
256
right ^= p[7] ^ F(left);
257
left ^= p[6] ^ F(right);
258
right ^= p[5] ^ F(left);
259
260
left ^= p[4] ^ F(right);
261
right ^= p[3] ^ F(left);
262
left ^= p[2] ^ F(right);
263
right ^= p[1] ^ F(left);
264
265
left ^= p[0];
266
267
value[0] = left;
268
value[1] = right;
269
}
270
271
/**
272
* Calculates the S-Box function F().
273
*
274
* This gets used "rounds" times on each encryption/decryption.
275
*/
276
private int F(int v) {
277
return (( s0[ v >>> 24 ]
278
+ s1[(v >> 16) & 0xff])
279
^ s2[(v >> 8) & 0xff])
280
+ s3[ v & 0xff];
281
}
282
283
private final int[] p = new int[18]; // subkeys
284
private final int[] s0 = new int[256]; // s-boxes
285
private final int[] s1 = new int[256];
286
private final int[] s2 = new int[256];
287
private final int[] s3 = new int[256];
288
private final int[] temp = new int[2]; // to avoid encrypt/decrypt mallocs
289
290
// many digits of pi, for initializing p and s
291
private static final int[] pi = {
292
293
// p [rounds + 2]
294
0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,
295
0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,
296
0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
297
0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,
298
0x9216d5d9, 0x8979fb1b,
299
300
// s [4][256]
301
0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7,
302
0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
303
0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,
304
0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
305
0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,
306
0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
307
0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef,
308
0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
309
0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,
310
0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
311
0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce,
312
0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
313
0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e,
314
0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
315
0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,
316
0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
317
0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88,
318
0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
319
0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e,
320
0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
321
0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,
322
0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,
323
0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88,
324
0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
325
0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,
326
0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,
327
0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,
328
0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
329
0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba,
330
0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
331
0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f,
332
0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
333
0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,
334
0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,
335
0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,
336
0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
337
0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab,
338
0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,
339
0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,
340
0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
341
0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0,
342
0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
343
0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790,
344
0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,
345
0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,
346
0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
347
0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7,
348
0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
349
0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad,
350
0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
351
0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,
352
0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
353
0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477,
354
0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
355
0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,
356
0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
357
0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,
358
0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
359
0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41,
360
0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
361
0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400,
362
0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
363
0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,
364
0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a,
365
0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,
366
0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
367
0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,
368
0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
369
0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6,
370
0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
371
0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e,
372
0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
373
0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,
374
0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,
375
0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,
376
0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
377
0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701,
378
0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
379
0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,
380
0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
381
0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf,
382
0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
383
0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e,
384
0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,
385
0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,
386
0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,
387
0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16,
388
0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
389
0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b,
390
0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
391
0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,
392
0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,
393
0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f,
394
0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
395
0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,
396
0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,
397
0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,
398
0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
399
0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802,
400
0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
401
0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510,
402
0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
403
0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,
404
0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,
405
0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,
406
0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
407
0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8,
408
0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,
409
0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,
410
0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
411
0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128,
412
0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
413
0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0,
414
0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,
415
0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,
416
0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
417
0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3,
418
0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
419
0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00,
420
0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
421
0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,
422
0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
423
0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735,
424
0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
425
0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,
426
0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
427
0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,
428
0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7,
429
0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934,
430
0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
431
0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,
432
0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
433
0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45,
434
0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
435
0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,
436
0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
437
0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,
438
0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
439
0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42,
440
0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
441
0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2,
442
0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
443
0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,
444
0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
445
0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,
446
0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
447
0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3,
448
0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
449
0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,
450
0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
451
0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b,
452
0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
453
0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922,
454
0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
455
0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,
456
0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
457
0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37,
458
0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
459
0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804,
460
0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
461
0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,
462
0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
463
0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d,
464
0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
465
0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,
466
0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
467
0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,
468
0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
469
0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d,
470
0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
471
0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f,
472
0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
473
0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,
474
0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
475
0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,
476
0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
477
0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e,
478
0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,
479
0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,
480
0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
481
0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52,
482
0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
483
0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5,
484
0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
485
0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,
486
0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
487
0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24,
488
0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
489
0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4,
490
0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
491
0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,
492
0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0,
493
0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b,
494
0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
495
0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,
496
0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
497
0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8,
498
0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
499
0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304,
500
0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
501
0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,
502
0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,
503
0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9,
504
0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
505
0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,
506
0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
507
0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,
508
0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,
509
0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b,
510
0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
511
0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c,
512
0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,
513
0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,
514
0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
515
0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,
516
0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
517
0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991,
518
0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,
519
0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,
520
0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
521
0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae,
522
0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
523
0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5,
524
0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
525
0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,
526
0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,
527
0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84,
528
0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
529
0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8,
530
0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
531
0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,
532
0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,
533
0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38,
534
0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
535
0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,
536
0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,
537
0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,
538
0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
539
0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964,
540
0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
541
0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8,
542
0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
543
0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,
544
0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,
545
0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,
546
0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
547
0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614,
548
0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,
549
0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,
550
0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
551
0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0,
552
0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
553
0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e,
554
0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
555
0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,
556
0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6,
557
};
558
}
559
560