diff --git a/README.md b/README.md index 642eef2e..54d17b40 100644 --- a/README.md +++ b/README.md @@ -5,20 +5,20 @@ SMhasher | Hash function | MiB/sec |cycl./hash|cycl./map | size| Quality problems | |:----------------------------------------------|-------------:|---------:|-----------:|----:|--------------------------------| -| [donothing32](doc/donothing32.txt) | 11149460.06 | 4.00 | -| 13 | bad seed 0, test NOP | -| [donothing64](doc/donothing64.txt) | 11787676.42 | 4.00 | -| 13 | bad seed 0, test NOP | -| [donothing128](doc/donothing128.txt) | 11745060.76 | 4.06 | -| 13 | bad seed 0, test NOP | -| [NOP_OAAT_read64](doc/NOP_OAAT_read64.txt) | 11372846.37 | 14.00 | -| 47 | test NOP | -| [BadHash](doc/BadHash.txt) | 769.94 | 73.97 | -| 47 | bad seed 0, test FAIL | -| [sumhash](doc/sumhash.txt) | 10699.57 | 29.53 | -| 363 | bad seed 0, test FAIL | -| [sumhash32](doc/sumhash32.txt) | 42877.79 | 23.12 | -| 863 | UB, test FAIL | -| [multiply_shift](doc/multiply_shift.txt) | 8026.77 | 26.05 | 226.80 (8) | 345 | bad seeds & 0xfffffff0, fails most tests | +| [donothing32](doc/donothing32.txt) | 11536809.55 | 4.00 | -| 13 | bad seed 0, test NOP | +| [donothing64](doc/donothing64.txt) | 12269832.97 | 4.00 | -| 13 | bad seed 0, test NOP | +| [donothing128](doc/donothing128.txt) | 11961841.48 | 4.08 | -| 13 | bad seed 0, test NOP | +| [NOP_OAAT_read64](doc/NOP_OAAT_read64.txt) | 11652662.97 | 14.00 | -| 47 | test NOP | +| [BadHash](doc/BadHash.txt) | 794.68 | 72.80 | -| 47 | bad seed 0, test FAIL | +| [sumhash](doc/sumhash.txt) | 10184.67 | 29.40 | -| 363 | bad seed 0, test FAIL | +| [sumhash32](doc/sumhash32.txt) | 44755.87 | 23.46 | -| 863 | UB, test FAIL | +| [multiply_shift](doc/multiply_shift.txt) | 8286.63 | 25.39 | 209.06 (2) | 345 | bad seeds & 0xfffffff0, fails most tests | | [pair_multiply_shift](doc/pair_multiply_shift)| 3716.95 | 40.22 | 186.34 (3) | 609 | fails most tests | | -------------------------- | | | | | | -| [crc32](doc/crc32.txt) | 383.12 | 134.21 | 257.50 (11)| 422 | insecure, 8590x collisions, distrib, PerlinNoise | -| [md5_32](doc/md5_32.txt) | 350.53 | 644.31 | 894.12 (10)|4419 | | -| [md5_64](doc/md5_64.txt) | 351.01 | 656.67 | 897.43 (12)|4419 | | -| [md5-128](doc/md5-128.txt) | 350.89 | 681.88 | 894.03 (13)|4419 | | +| [crc32](doc/crc32.txt) | 369.88 | 142.33 | 396.81 (101)| 422 | insecure, 8590x collisions, distrib, PerlinNoise | +| [md5_32](doc/md5_32.txt) | 359.43 | 638.92 | 865.21 (6) |4419 | | +| [md5_64](doc/md5_64.txt) | 360.20 | 640.38 | 869.55 (6) |4419 | | +| [md5-128](doc/md5-128.txt) | 344.63 | 669.59 | 856.34 (5) |4419 | | | [sha1_32](doc/sha1_32.txt) | 353.03 | 1385.80 |1759.94 (5) |5126 | Sanity, Cyclic low32, 36.6% distrib | | [sha1_64](doc/sha1_64.txt) | 353.03 | 1385.80 |1759.94 (5) |5126 | Sanity, Cyclic low32, 36.6% distrib | | [sha1-160](doc/sha1-160.txt) | 364.95 | 1470.55 |1794.16 (13)|5126 | Comb/Cyclic low32 | @@ -26,16 +26,16 @@ SMhasher | [sha2-224_64](doc/sha2-224_64.txt) | 147.60 | 1360.10 |1620.93 (13)| | Cyclic low32 | | [sha2-256](doc/sha2-256.txt) | 147.80 | 1374.90 |1606.06 (16)| | | | [sha2-256_64](doc/sha2-256_64.txt) | 148.01 | 1376.34 |1624.71 (16)| | | -| [sha1ni](doc/sha1ni.txt) | 1601.21 | 174.16 | 397.28 (6) | 989 | insecure,sanity, Permutation, Zeroes, machine-specific | -| [sha1ni_32](doc/sha1ni_32.txt) | 1576.17 | 174.04 | 405.56 (6) | 989 | machine-specific | -| [sha2ni-256](doc/sha2ni-256.txt) | 1527.38 | 184.35 | 404.40 (4) |4241 | insecure,sanity, Permutation, Zeroes, machine-specific | -| [sha2ni-256_64](doc/sha2ni-256_64.txt) | 1501.85 | 186.20 | 407.96 (5) |4241 | Zeroes, machine-specific | -| [blake3_c](doc/blake3_c.txt) | 1288.84 | 357.69 | 582.89 (6) | | no 32bit portability | -| [rmd128](doc/rmd128.txt) | 290.90 | 710.49 | 965.55 (6) | | | +| [sha1ni](doc/sha1ni.txt) | 1632.88 | 170.77 | 379.84 (5) | 989 | insecure,sanity, Permutation, Zeroes, machine-specific | +| [sha1ni_32](doc/sha1ni_32.txt) | 1583.50 | 172.17 | 387.70 (4) | 989 | machine-specific | +| [sha2ni-256](doc/sha2ni-256.txt) | 1556.66 | 180.75 | 393.79 (5) |4241 | insecure,sanity, Permutation, Zeroes, machine-specific | +| [sha2ni-256_64](doc/sha2ni-256_64.txt) | 1508.82 | 184.89 | 393.07 (6) |4241 | Zeroes, machine-specific | +| [blake3_c](doc/blake3_c.txt) | 1298.04 | 354.25 | 563.63 (4) | | no 32bit portability | +| [rmd128](doc/rmd128.txt) | 294.42 | 712.67 | 930.65 (4) | | | | [rmd160](doc/rmd160.txt) | 202.16 | 1045.79 |1287.74 (16)| | Cyclic hi32 | -| [rmd256](doc/rmd256.txt) | 364.81 | 584.86 | 835.02 (11)| | | -| [edonr224](doc/edonr224.txt) | 864.69 | 303.42 | 526.94 (6) | | | -| [edonr256](doc/edonr256.txt) | 847.85 | 305.79 | 510.01 (4) | | | +| [rmd256](doc/rmd256.txt) | 366.21 | 615.39 | 830.04 (7) | | | +| [edonr224](doc/edonr224.txt) | 863.77 | 304.76 | 496.66 (3) | | | +| [edonr256](doc/edonr256.txt) | 870.97 | 296.40 | 517.82 (6) | | | | [blake2s-128](doc/blake2s-128.txt) | 295.30 | 698.09 |1059.24 (51)| | | | [blake2s-160](doc/blake2s-160.txt) | 215.01 | 1026.74 |1239.54 (11)| | | | [blake2s-224](doc/blake2s-224.txt) | 207.06 | 1063.86 |1236.50 (20)| | | @@ -46,87 +46,91 @@ SMhasher | [blake2b-256](doc/blake2b-256.txt) | 355.97 | 1232.22 |1443.31 (19)| | | | [blake2b-256_64](doc/blake2b-256_64.txt) | 356.97 | 1222.76 |1435.03 (9) | | | | [asconhashv12](doc/asconhashv12.txt) | 144.98 | 885.02 |1324.23 (38)|4341 | | -| [asconhashv12_64](doc/asconhashv12_64.txt) | 159.68 | 386.90 | 480.86 (4) |6490 | | +| [asconhashv12_64](doc/asconhashv12_64.txt) | 159.33 | 402.54 | 473.15 (4) |6490 | | | [sha3-256](doc/sha3-256.txt) | 100.58 | 3877.18 |4159.79 (37)| | PerlinNoise | | [sha3-256_64](doc/sha3-256_64.txt) | 100.57 | 3909.00 |4174.63 (16)| | PerlinNoise | -| [hasshe2](doc/hasshe2.txt) | 2773.89 | 64.35 | 282.30 (3) | 445 | Permutation,TwoBytes,Zeroes,Seed| -| [poly_1_mersenne](doc/poly_1_mersenne.txt) | 1369.21 | 61.59 | 248.86 (4) | 479 | fails most tests | -| [poly_2_mersenne](doc/poly_2_mersenne.txt) | 1364.03 | 70.30 | 261.00 (6) | 479 | | -| [poly_3_mersenne](doc/poly_3_mersenne.txt) | 1342.82 | 80.22 | 268.79 (2) | 479 | | -| [poly_4_mersenne](doc/poly_4_mersenne.txt) | 1343.19 | 89.13 | 277.52 (3) | 479 | | -| [tabulation32](doc/tabulation32.txt) | 5781.16 | 40.00 | 241.79 (10) | 848 | collisions | -| [tabulation](doc/tabulation.txt) | 7875.01 | 39.95 | 249.49 (3) | 554 | | -| [crc32_hw](doc/crc32_hw.txt) | 6244.38 | 41.23 | 226.80 (2) | 653 | insecure, 100% bias, collisions, distrib, BIC, machine-specific (SSE4.2/NEON) | -| [crc32_hw1](doc/crc32_hw1.txt) | 7569.29 | 49.07 | 233.75 (3) | 671 | insecure, 100% bias, collisions, distrib, BIC, machine-specific (x86 SSE4.2) | -| [crc64_hw](doc/crc64_hw.txt) | 6143.62 | 40.48 | 223.13 (2) | 652 | insecure, 100% bias, collisions, distrib, BIC, machine-specific (SSE4.2/NEON) | -| [crc32_pclmul](doc/crc32_pclmul.txt) | - | - | - | | insecure, 100% bias, collisions, distrib, BIC, machine-specific (x86 SSE4.2+PCLMUL) | -| [o1hash](doc/o1hash.txt) | 11629440.57 | 18.15 | 199.35 (2) | 101 | insecure, no seed, zeros, fails all tests | -| [fibonacci](doc/fibonacci.txt) | 16878.32 | 22.94 | 803.18 (15)|1692 | UB, zeros, fails all tests | -| [FNV1a](doc/FNV1a.txt) | 760.52 | 73.83 | 254.29 (5) | 204 | bad seed, zeros, fails all tests | -| [FNV1A_Totenschiff](doc/FNV1A_Totenschiff.txt)| 6274.78 | 26.23 | 251.13 (2) | 270 | UB, zeros, fails all tests | -| [FNV1A_Pippip_Yurii](doc/FNV1A_Pippip_Yurii.txt)| 6172.14 | 27.55 | 244.80 (2) | 147 | UB, sanity, fails all tests | -| [FNV1a_YT](doc/FNV1a_YT.txt) | 13486.49 | 30.50 | 237.43 (4) | 321 | bad seed, UB, fails all tests | -| [FNV2](doc/FNV2.txt) | 6171.60 | 32.20 | 208.59 (4) | 278 | fails all tests | -| [FNV64](doc/FNV64.txt) | 774.37 | 72.43 | 201.15 (2) | 79 | fails all tests | -| [FNV128](doc/FNV128.txt) | 390.14 | 136.42 | 289.00 (3) | 171 | fails all tests | -| [k-hash32](doc/k-hash32.txt) | 2230.42 | 53.05 | 264.64 (3) | 808 | insecure, zeros, UB, bad seeds, fails all tests | -| [k-hash64](doc/k-hash64.txt) | 2451.88 | 48.66 | 249.44 (2) | 609 | insecure, zeros, UB, bad seeds, fails all tests | -| [fletcher2](doc/fletcher2.txt) | 15552.61 | 20.61 | 335.31 (3) | 248 | bad seed 0, UB, fails all tests | -| [fletcher4](doc/fletcher4.txt) | 15556.93 | 20.60 | 358.60 (3) | 371 | bad seed 0, UB, fails all tests | -| [bernstein](doc/bernstein.txt) | 1045.97 | 58.31 | 225.78 (3) | 41 | bad seed 0, fails all tests | -| [sdbm](doc/sdbm.txt) | 784.83 | 68.57 | 222.68 (5) | 41 | bad seed 0, fails all tests | -| [x17](doc/x17.txt) | 748.75 | 74.13 | 236.00 (10) | 79 | 99.98% bias, fails all tests | -| [libiberty](doc/libiberty.txt) | 628.66 | 84.95 | 225.07 (4) | 37 | insecure, 100% bias, fails all tests, bad seed | -| [gcc](doc/gcc.txt) | 611.69 | 86.47 | 231.51 (5) | 39 | insecure, 100% bias, fails all tests, bad seed | -| [JenkinsOOAT](doc/JenkinsOOAT.txt) | 627.64 | 107.04 | 252.79 (3) | 153 | bad seed 0, 53.5% bias, fails all tests | -| [JenkinsOOAT_perl](doc/JenkinsOOAT_perl.txt) | 608.10 | 94.17 | 254.09 (4) | 65 | bad seed 0, 1.5-11.5% bias, 7.2x collisions, BIC, LongNeighbors | -| [MicroOAAT](doc/MicroOAAT.txt) | 701.35 | 76.68 | 251.01 (3) | 68 | 100% bias, distrib, BIC | -| [pearsonhash64](doc/pearsonhash64.txt) | 434.17 | 124.14 | 230.79 (4) | | Avalanche, Seed, SSSE3 only. broken MSVC | -| [pearsonhash128](doc/pearsonhash128.txt) | 434.23 | 121.34 | 221.03 (7) | | Avalanche, Seed, SSSE3 only. broken MSVC | -| [pearsonhash256](doc/pearsonhash256.txt) | 444.08 | 119.11 | 229.75 (4) | | Avalanche, Seed, SSSE3 only. broken MSVC | -| [VHASH_32](doc/VHASH_32.txt) | 13053.40 | 65.84 | 289.86 (3) |1231 | sanity, Seed, MomentChi2 | -| [VHASH_64](doc/VHASH_64.txt) | 13465.50 | 63.88 | 286.38 (5) |1231 | sanity, Seed, Sparse | -| [farsh32](doc/farsh32.txt) | 27038.23 | 66.88 | 278.89 (5) | 944 | insecure: AppendedZeroes, collisions+bias, MomentChi2, LongNeighbors | -| [farsh64](doc/farsh64.txt) | 13829.32 | 112.46 | 332.59 (3) | 944 | insecure: AppendedZeroes, collisions+bias, MomentChi2, LongNeighbors | -| [farsh128](doc/farsh128.txt) | 6878.88 | 233.35 | 384.85 (3) | 944 | insecure: AppendedZeroes, collisions+bias, permut,combin,2bytes,zeroes,PerlinNoise | -| [farsh256](doc/farsh256.txt) | 3467.37 | 440.40 | 593.57 (5) | 944 | insecure: AppendedZeroes, collisions+bias, permut,combin,2bytes,zeroes,PerlinNoise | -| [jodyhash32](doc/jodyhash32.txt) | 1794.34 | 41.12 | 235.12 (4) | 102 | bias, collisions, distr, BIC LongNeighbors | -| [jodyhash64](doc/jodyhash64.txt) | 4813.10 | 40.72 | 239.22 (6) | 118 | bias, collisions, distr, BIC, LongNeighbors | -| [lookup3](doc/lookup3.txt) | 2475.35 | 39.65 | 240.10 (3) | 341 | UB, 28% bias, collisions, 30% distr, BIC | -| [superfast](doc/superfast.txt) | 2058.22 | 49.56 | 254.12 (3) | 210 | UB, bad seed 0, 91% bias, 5273.01x collisions, 37% distr, BIC | -| [MurmurOAAT](doc/MurmurOAAT.txt) | 506.66 | 103.33 | 236.89 (3) | 47 | bad seed 0, collisions, 99.998% distr., BIC, LongNeighbors | -| [Crap8](doc/Crap8.txt) | 3041.14 | 37.25 | 247.87 (4) | 342 | UB, 2.42% bias, collisions, 2% distrib | -| [Murmur1](doc/Murmur1.txt) | 2027.85 | 48.51 | 253.34 (3) | 358 | UB, 1 bad seed, 511x collisions, Diff, BIC | -| [Murmur2](doc/Murmur2.txt) | 3089.18 | 41.22 | 238.42 (4) | 358 | UB, 1 bad seed, 1.7% bias, 81x coll, 1.7% distrib, BIC | -| [Murmur2A](doc/Murmur2A.txt) | 3087.98 | 45.90 | 238.54 (4) | 407 | UB, 1 bad seed, 12.7% bias, LongNeighbors | -| [Murmur2B](doc/Murmur2B.txt) | 5919.38 | 38.18 | 215.96 (3) | 433 | UB, 1.8% bias, collisions, 3.4% distrib, BIC | -| [Murmur2C](doc/Murmur2C.txt) | 3810.98 | 49.09 | 218.51 (3) | 444 | UB, 2^32 bad seeds, 91% bias, collisions, distr, BIC, LongNeighbors | -| [Murmur3A](doc/Murmur3A.txt) | 2982.67 | 49.08 | 245.78 (4) | 351 | UB, 1 bad seed, Moment Chi2 69 | -| [PMurHash32](doc/PMurHash32.txt) | 3005.85 | 48.88 | 242.38 (3) |1862 | 1 bad seed, Moment Chi2 69 | -| [Murmur3C](doc/Murmur3C.txt) | 4833.18 | 56.87 | 250.47 (6) | 859 | UB, LongNeighbors, Text, DiffDist | +| [hasshe2](doc/hasshe2.txt) | 2879.93 | 62.47 | 272.34 (2) | 445 | Permutation,TwoBytes,Zeroes,Seed| +| [poly_1_mersenne](doc/poly_1_mersenne.txt) | 1278.37 | 63.42 | 244.41 (1) | 479 | fails most tests | +| [poly_2_mersenne](doc/poly_2_mersenne.txt) | 1391.90 | 69.97 | 255.44 (3) | 479 | | +| [poly_3_mersenne](doc/poly_3_mersenne.txt) | 1320.15 | 80.81 | 263.12 (2) | 479 | | +| [poly_4_mersenne](doc/poly_4_mersenne.txt) | 1393.93 | 89.07 | 262.97 (2) | 479 | | +| [tabulation32](doc/tabulation32.txt) | 5819.40 | 40.16 | 233.00 (3) | 848 | collisions | +| [tabulation](doc/tabulation.txt) | 7407.94 | 39.83 | 240.25 (4) | 554 | | +| [crc32_hw](doc/crc32_hw.txt) | 5537.79 | 40.80 | 225.65 (3) | 653 | insecure, 100% bias, collisions, distrib, BIC, machine-specific (SSE4.2/NEON) | +| [crc32_hw1](doc/crc32_hw1.txt) | 7626.17 | 50.21 | 228.50 (2) | 671 | insecure, 100% bias, collisions, distrib, BIC, machine-specific (x86 SSE4.2) | +| [crc64_hw](doc/crc64_hw.txt) | 5579.17 | 40.87 | 202.19 (1) | 652 | insecure, 100% bias, collisions, distrib, BIC, machine-specific (SSE4.2/NEON) | +| [crc32_pclmul](doc/crc32_pclmul.txt) | 7963.20 | 106.02 | 567.70 (3) | | insecure, 100% bias, collisions, distrib, BIC, machine-specific (x86 SSE4.2+PCLMUL) | +| [crc64_jones1](doc/crc64_jones1.txt) | 1671.71 | 81.77 | 252.03 (2) | | insecure, 100% bias, collisions, distrib, BIC, machine-specific | +| [crc64_jones2](doc/crc64_jones2.txt) | 2968.07 | 314.60 | 253.01 (3) | | insecure, 100% bias, collisions, distrib, BIC, machine-specific | +| [crc64_jones3](doc/crc64_jones3.txt) | 3398.80 | 302.59 | 258.16 (8) | | insecure, 100% bias, collisions, distrib, BIC, machine-specific | +| [crc64_jones](doc/crc64_jones.txt) | 3432.19 | 82.23 | 265.68 (1) | | insecure, 100% bias, collisions, distrib, BIC, machine-specific | +| [o1hash](doc/o1hash.txt) | 11530366.92 | 18.40 | 206.94 (1) | 101 | insecure, no seed, zeros, fails all tests | +| [fibonacci](doc/fibonacci.txt) | 15409.62 | 22.67 | 872.83 (3) |1692 | UB, zeros, fails all tests | +| [FNV1a](doc/FNV1a.txt) | 754.70 | 75.28 | 226.30 (2) | 204 | bad seed, zeros, fails all tests | +| [FNV1A_Totenschiff](doc/FNV1A_Totenschiff.txt)| 6166.85 | 26.60 | 235.71 (2) | 270 | UB, zeros, fails all tests | +| [FNV1A_Pippip_Yurii](doc/FNV1A_Pippip_Yurii.txt)| 6115.29 | 28.03 | 233.52 (2) | 147 | UB, sanity, fails all tests | +| [FNV1a_YT](doc/FNV1a_YT.txt) | 13481.70 | 30.67 | 233.71 (7) | 321 | bad seed, UB, fails all tests | +| [FNV2](doc/FNV2.txt) | 5630.87 | 32.09 | 207.08 (1) | 278 | fails all tests | +| [FNV64](doc/FNV64.txt) | 747.70 | 74.18 | 189.18 (1) | 79 | fails all tests | +| [FNV128](doc/FNV128.txt) | 408.59 | 130.82 | 299.47 (20)| 171 | fails all tests | +| [k-hash32](doc/k-hash32.txt) | 2227.90 | 53.85 | 255.78 (2) | 808 | insecure, zeros, UB, bad seeds, fails all tests | +| [k-hash64](doc/k-hash64.txt) | 2492.66 | 48.18 | 242.58 (2) | 609 | insecure, zeros, UB, bad seeds, fails all tests | +| [fletcher2](doc/fletcher2.txt) | 15410.12 | 20.72 | 345.55 (5) | 248 | bad seed 0, UB, fails all tests | +| [fletcher4](doc/fletcher4.txt) | 15603.68 | 21.24 | 320.09 (2) | 371 | bad seed 0, UB, fails all tests | +| [bernstein](doc/bernstein.txt) | 1032.00 | 59.04 | 225.09 (3) | 41 | bad seed 0, fails all tests | +| [sdbm](doc/sdbm.txt) | 772.01 | 71.67 | 220.09 (2) | 41 | bad seed 0, fails all tests | +| [x17](doc/x17.txt) | 765.01 | 75.61 | 225.81 (2) | 79 | 99.98% bias, fails all tests | +| [libiberty](doc/libiberty.txt) | 618.39 | 86.58 | 220.95 (2) | 37 | insecure, 100% bias, fails all tests, bad seed | +| [gcc](doc/gcc.txt) | 612.10 | 88.44 | 224.62 (2) | 39 | insecure, 100% bias, fails all tests, bad seed | +| [JenkinsOOAT](doc/JenkinsOOAT.txt) | 615.60 | 111.23 | 251.08 (2) | 153 | bad seed 0, 53.5% bias, fails all tests | +| [JenkinsOOAT_perl](doc/JenkinsOOAT_perl.txt) | 631.79 | 93.13 | 232.44 (1) | 65 | bad seed 0, 1.5-11.5% bias, 7.2x collisions, BIC, LongNeighbors | +| [MicroOAAT](doc/MicroOAAT.txt) | 730.89 | 78.25 | 236.07 (3) | 68 | 100% bias, distrib, BIC | +| [pearsonhash64](doc/pearsonhash64.txt) | 439.85 | 123.07 | 213.68 (1) | | Avalanche, Seed, SSSE3 only. broken MSVC | +| [pearsonhash128](doc/pearsonhash128.txt) | 438.49 | 123.81 | 212.89 (2) | | Avalanche, Seed, SSSE3 only. broken MSVC | +| [pearsonhash256](doc/pearsonhash256.txt) | 440.63 | 120.72 | 224.63 (2) | | Avalanche, Seed, SSSE3 only. broken MSVC | +| [VHASH_32](doc/VHASH_32.txt) | 13084.37 | 65.45 | 280.14 (2) |1231 | sanity, Seed, MomentChi2 | +| [VHASH_64](doc/VHASH_64.txt) | 13217.64 | 64.90 | 270.04 (2) |1231 | sanity, Seed, Sparse | +| [farsh32](doc/farsh32.txt) | 27583.89 | 65.65 | 266.64 (2) | 944 | insecure: AppendedZeroes, collisions+bias, MomentChi2, LongNeighbors | +| [farsh64](doc/farsh64.txt) | 13558.69 | 113.74 | 327.26 (3) | 944 | insecure: AppendedZeroes, collisions+bias, MomentChi2, LongNeighbors | +| [farsh128](doc/farsh128.txt) | 7055.39 | 229.42 | 375.57 (4) | 944 | insecure: AppendedZeroes, collisions+bias, permut,combin,2bytes,zeroes,PerlinNoise | +| [farsh256](doc/farsh256.txt) | 3466.26 | 444.74 | 610.23 (4) | 944 | insecure: AppendedZeroes, collisions+bias, permut,combin,2bytes,zeroes,PerlinNoise | +| [jodyhash32](doc/jodyhash32.txt) | 1762.46 | 42.66 | 236.09 (2) | 102 | bias, collisions, distr, BIC LongNeighbors | +| [jodyhash64](doc/jodyhash64.txt) | 4861.84 | 44.05 | 234.35 (2) | 118 | bias, collisions, distr, BIC, LongNeighbors | +| [lookup3](doc/lookup3.txt) | 2474.09 | 40.19 | 238.22 (3) | 341 | UB, 28% bias, collisions, 30% distr, BIC | +| [superfast](doc/superfast.txt) | 2085.79 | 49.89 | 230.76 (3) | 210 | UB, bad seed 0, 91% bias, 5273.01x collisions, 37% distr, BIC | +| [MurmurOAAT](doc/MurmurOAAT.txt) | 513.75 | 105.23 | 244.81 (4) | 47 | bad seed 0, collisions, 99.998% distr., BIC, LongNeighbors | +| [Crap8](doc/Crap8.txt) | 3081.04 | 37.15 | 234.94 (2) | 342 | UB, 2.42% bias, collisions, 2% distrib | +| [Murmur1](doc/Murmur1.txt) | 1955.36 | 48.84 | 236.25 (2) | 358 | UB, 1 bad seed, 511x collisions, Diff, BIC | +| [Murmur2](doc/Murmur2.txt) | 3082.03 | 41.62 | 250.72 (4) | 358 | UB, 1 bad seed, 1.7% bias, 81x coll, 1.7% distrib, BIC | +| [Murmur2A](doc/Murmur2A.txt) | 2850.40 | 46.60 | 284.58 (13)| 407 | UB, 1 bad seed, 12.7% bias, LongNeighbors | +| [Murmur2B](doc/Murmur2B.txt) | 6039.96 | 38.70 | 212.23 (1) | 433 | UB, 1.8% bias, collisions, 3.4% distrib, BIC | +| [Murmur2C](doc/Murmur2C.txt) | 3802.68 | 49.82 | 220.13 (2) | 444 | UB, 2^32 bad seeds, 91% bias, collisions, distr, BIC, LongNeighbors | +| [Murmur3A](doc/Murmur3A.txt) | 3027.30 | 48.99 | 234.49 (2) | 351 | UB, 1 bad seed, Moment Chi2 69 | +| [PMurHash32](doc/PMurHash32.txt) | 3001.44 | 48.99 | 240.35 (3) |1862 | 1 bad seed, Moment Chi2 69 | +| [Murmur3C](doc/Murmur3C.txt) | 4824.95 | 57.39 | 243.91 (2) | 859 | UB, LongNeighbors, Text, DiffDist | | [mirhash32low](doc/mirhash32low.txt) | 6145.39 | 36.95 | 235.09 (4) |1112 | UB, 4 bad seeds, Cyclic, LongNeighbors, machine-specific (32/64 differs) | -| [PMPML_32](doc/PMPML_32.txt) | 6639.68 | 45.33 | 257.45 (3) |1084 | Avalanche >512, unseeded: Seed, BIC, MomentChi2, PerlinNoise | -| [PMPML_64](doc/PMPML_64.txt) | 9833.77 | 50.00 | 251.64 (6) |1305 | unseeded: Seed, MomentChi2, BIC | -| [xxHash32](doc/xxHash32.txt) | 5865.17 | 49.20 | 242.74 (3) | 738 | LongNeighbors, collisions with 4bit diff, MomentChi2 220 | -| [metrohash64](doc/metrohash64.txt) | 14741.56 | 39.44 | 215.76 (2) | 624 | UB, LongNeighbors, BIC | -| [metrohash64_1](doc/metrohash64_1.txt) | 14298.77 | 40.31 | 223.25 (4) | 624 | UB, LongNeighbors, BIC, MomentChi2 | -| [metrohash64crc_1](doc/metrohash64crc_1.txt) | 6929.69 | 44.65 | 223.68 (3) | 632 | UB, Cyclic 8/8 byte, DiffDist, BIC, MomentChi2, machine-specific (SSE4.2/NEON) | -| [metrohash64crc_2](doc/metrohash64crc_2.txt) | 8150.65 | 43.72 | 219.45 (5) | 632 | UB, Cyclic 8/8 byte, DiffDist, BIC, machine-specific (SSE4.2/NEON) | -| [cmetrohash64_1o](doc/cmetrohash64_1o.txt) | 14921.73 | 38.95 | 213.25 (2) |3506 | UB, LongNeighbors, BIC, MomentChi2 | -| [cmetrohash64_1](doc/cmetrohash64_1.txt) | 14151.73 | 40.90 | 211.89 (2) | 652 | UB, LongNeighbors, BIC, MomentChi2 | -| [City64noSeed](doc/City64noSeed.txt) | 14209.19 | 31.80 | 225.90 (5) |1038 | Avalanche, Sparse, TwoBytes, MomentChi2, Seed | -| [City64](doc/City64.txt) | 13887.84 | 46.32 | 239.77 (3) |1120 | Sparse, TwoBytes | -| [t1ha1_64le](doc/t1ha1_64le.txt) | 13442.64 | 31.41 | 219.58 (3) | 517 | Avalanche | -| [t1ha1_64be](doc/t1ha1_64be.txt) | 11586.02 | 32.74 | 232.55 (3) | 555 | Avalanche | -| [t1ha0_32le](doc/t1ha0_32le.txt) | 7401.21 | 48.27 | 238.99 (3) | 509 | Sparse, LongNeighbors | -| [t1ha0_32be](doc/t1ha0_32be.txt) | 6217.37 | 50.66 | 244.51 (3) | 533 | Sparse, LongNeighbors | +| [PMPML_32](doc/PMPML_32.txt) | 6904.30 | 44.25 | 233.59 (2) |1084 | Avalanche >512, unseeded: Seed, BIC, MomentChi2, PerlinNoise | +| [PMPML_64](doc/PMPML_64.txt) | 10030.67 | 49.22 | 239.07 (5) |1305 | unseeded: Seed, MomentChi2, BIC | +| [xxHash32](doc/xxHash32.txt) | 6064.37 | 48.86 | 234.27 (3) | 738 | LongNeighbors, collisions with 4bit diff, MomentChi2 220 | +| [metrohash64](doc/metrohash64.txt) | 14209.14 | 40.85 | 225.16 (2) | 624 | UB, LongNeighbors, BIC | +| [metrohash64_1](doc/metrohash64_1.txt) | 14495.30 | 40.83 | 213.00 (2) | 624 | UB, LongNeighbors, BIC, MomentChi2 | +| [metrohash64crc_1](doc/metrohash64crc_1.txt) | 8010.90 | 44.43 | 213.94 (2) | 632 | UB, Cyclic 8/8 byte, DiffDist, BIC, MomentChi2, machine-specific (SSE4.2/NEON) | +| [metrohash64crc_2](doc/metrohash64crc_2.txt) | 7939.65 | 44.84 | 222.01 (2) | 632 | UB, Cyclic 8/8 byte, DiffDist, BIC, machine-specific (SSE4.2/NEON) | +| [cmetrohash64_1o](doc/cmetrohash64_1o.txt) | 14678.56 | 40.33 | 216.44 (2) |3506 | UB, LongNeighbors, BIC, MomentChi2 | +| [cmetrohash64_1](doc/cmetrohash64_1.txt) | 14332.75 | 41.04 | 216.05 (2) | 652 | UB, LongNeighbors, BIC, MomentChi2 | +| [City64noSeed](doc/City64noSeed.txt) | 14023.27 | 33.37 | 223.59 (2) |1038 | Avalanche, Sparse, TwoBytes, MomentChi2, Seed | +| [City64](doc/City64.txt) | 14390.09 | 46.69 | 231.99 (2) |1120 | Sparse, TwoBytes | +| [t1ha1_64le](doc/t1ha1_64le.txt) | 13425.03 | 31.37 | 221.97 (2) | 517 | Avalanche | +| [t1ha1_64be](doc/t1ha1_64be.txt) | 12002.50 | 31.57 | 226.52 (2) | 555 | Avalanche | +| [t1ha0_32le](doc/t1ha0_32le.txt) | 7276.16 | 49.11 | 236.39 (2) | 509 | Sparse, LongNeighbors | +| [t1ha0_32be](doc/t1ha0_32be.txt) | 6860.87 | 50.16 | 241.26 (2) | 533 | Sparse, LongNeighbors | | [t1ha2_stream](doc/t1ha2_stream.txt) | 14011.63 | 80.72 | 275.17 (3) |1665 | Sparse, Permutation, LongNeighbors | | [t1ha2_stream128](doc/t1ha2_stream128.txt) | 13136.06 | 97.80 | 306.11 (7) |1665 | Sparse, Permutation, LongNeighbors | -| [aesnihash](doc/aesnihash.txt) | 5579.32 | 56.83 | 258.71 (5) |1209 | fails many tests, machine-specific (x64 AES-NI) | -| [falkhash](doc/falkhash.txt) | 50631.69 | 123.02 | 322.14 (7) | 264 | Sparse, LongNeighbors, machine-specific (x64 AES-NI) | -| [MeowHash](doc/MeowHash.txt) | 29969.40 | 64.96 | 274.29 (4) |1764 | Sparse, invertible, machine-specific (x64 AES-NI) | -| [MeowHash64low](doc/MeowHash64low.txt) | 29485.59 | 65.98 | 278.05 (3) |1764 | Sparse, invertible, machine-specific (x64 AES-NI) | -| [MeowHash32low](doc/MeowHash32low.txt) | 26944.58 | 65.95 | 292.79 (9) |1764 | Sparse, invertible, machine-specific (x64 AES-NI) | +| [aesnihash](doc/aesnihash.txt) | 5365.60 | 57.21 | 255.87 (3) |1209 | fails many tests, machine-specific (x64 AES-NI) | +| [falkhash](doc/falkhash.txt) | 52401.48 | 122.70 | 316.79 (4) | 264 | Sparse, LongNeighbors, machine-specific (x64 AES-NI) | +| [MeowHash](doc/MeowHash.txt) | 29969.81 | 64.90 | 273.79 (8) |1764 | Sparse, invertible, machine-specific (x64 AES-NI) | +| [MeowHash64low](doc/MeowHash64low.txt) | 29438.45 | 63.76 | 269.41 (4) |1764 | Sparse, invertible, machine-specific (x64 AES-NI) | +| [MeowHash32low](doc/MeowHash32low.txt) | 30562.54 | 63.77 | 283.26 (3) |1764 | Sparse, invertible, machine-specific (x64 AES-NI) | | -------------------------------------- | | | | | | | [tifuhash_64](doc/tifuhash_64.txt) | 35.60 | 1679.52 |1212.75 (15)| 276 | Cyclic low32 | | [floppsyhash](doc/floppsyhash.txt) | 35.72 | 1868.92 |1411.07 (7) | 623 | | @@ -140,9 +144,9 @@ SMhasher | [SipHash](doc/SipHash.txt) | 943.53 | 147.15 | 338.74 (4) |1071 | | | [HalfSipHash](doc/HalfSipHash.txt) | 1141.57 | 79.65 | 263.96 (3) | 700 | zeroes | | [GoodOAAT](doc/GoodOAAT.txt) | 743.81 | 85.62 | 231.22 (3) | 237 | | -| [pearsonbhash64](doc/pearsonbhash64.txt) | 1794.83 | 97.80 | 268.90 (8) | 683 | | -| [pearsonbhash128](doc/pearsonbhash128.txt) | 1691.62 | 104.57 | 272.38 (4) |1134 | | -| [pearsonbhash256](doc/pearsonbhash256.txt) | 1442.59 | 126.04 | 309.34 (4) | 844 | | +| [pearsonbhash64](doc/pearsonbhash64.txt) | 1749.98 | 99.84 | 257.11 (2) | 683 | | +| [pearsonbhash128](doc/pearsonbhash128.txt) | 1656.68 | 106.78 | 276.92 (3) |1134 | | +| [pearsonbhash256](doc/pearsonbhash256.txt) | 1418.61 | 123.68 | 301.26 (3) | 844 | | | [prvhash64_64m](doc/prvhash64_64m.txt) | 3077.18 | 47.31 | 241.92 (3) | 349 | | | [prvhash64_64](doc/prvhash64_64.txt) | 3015.08 | 48.03 | 240.64 (3) | 384 | | | [prvhash64_128](doc/prvhash64_128.txt) | 3353.81 | 67.64 | 266.32 (2) | 718 | | @@ -163,27 +167,28 @@ SMhasher | [mirhashstrict32low](doc/mirhashstrict32low.txt)| 3441.35 | 50.60 | 247.19 (3) |1112 | 1 bad seed, MomentChi2 9 | | [fasthash32](doc/fasthash32.txt) | 6128.28 | 40.30 | 241.64 (4) | 566 | UB | | [fasthash64](doc/fasthash64.txt) | 5818.92 | 38.70 | 220.74 (2) | 509 | UB | -| [aesni](doc/aesni.txt) | 31232.34 | 29.21 | 230.14 (4) | 519 | machine-specific (x64 AES-NI) | -| [aesni-low](doc/aesni-low.txt) | 31221.14 | 29.64 | 226.18 (3) | 519 | machine-specific (x64 AES-NI) | +| [aesni](doc/aesni.txt) | 31185.98 | 29.45 | 226.75 (2) | 519 | machine-specific (x64 AES-NI) | +| [aesni-low](doc/aesni-low.txt) | 31027.39 | 29.47 | 232.54 (2) | 519 | machine-specific (x64 AES-NI) | | [mx3](doc/mx3.txt) | 9034.90 | 48.71 | 227.89 (2) | 734 | UB | | [pengyhash](doc/pengyhash.txt) | 13428.80 | 74.24 | 275.42 (5) | 421 | | -| [City32](doc/City32.txt) | 5551.28 | 54.40 | 261.64 (2) |1319 | | +| [City32](doc/City32.txt) | 5745.83 | 52.44 | 242.69 (2) |1319 | | | [City64low](doc/City64low.txt) | 13904.10 | 46.24 | 260.08 (3) |1120| | | [City128](doc/City128.txt) | 14031.96 | 89.09 | 290.05 (10)|1841 | | | [CityCrc128](doc/CityCrc128.txt) | 7916.44 | 55.50 | 240.79 (2) | 295 | | +| [CityCrc256](doc/CityCrc256.txt) | 7916.44 | 55.50 | 240.79 (2) | | | | [FarmHash32](doc/FarmHash32.txt) | 21755.58 | 47.54 | 258.35 (3) |11489| machine-specific (x64 SSE4/AVX) | | [FarmHash64](doc/FarmHash64.txt) | 12845.53 | 47.11 | 251.58 (3) |3758 | | | [FarmHash128](doc/FarmHash128.txt) | 13913.65 | 70.25 | 263.06 (3) | 163 | | | [farmhash32_c](doc/farmhash32_c.txt) | 21601.86 | 47.38 | 273.00 (3) | 762 | machine-specific (x64 SSE4/AVX) | | [farmhash64_c](doc/farmhash64_c.txt) | 12834.10 | 47.23 | 246.20 (2) |3688 | | | [farmhash128_c](doc/farmhash128_c.txt) | 13753.24 | 68.96 | 263.76 (3) |1890 | | -| [metrohash64_2](doc/metrohash64_2.txt) | 14316.37 | 40.23 | 218.28 (3) | 627 | UB, LongNeighbors | -| [cmetrohash64_2](doc/cmetrohash64_2.txt) | 14294.26 | 40.76 | 221.40 (4) | 655 | LongNeighbors | -| [metrohash128](doc/metrohash128.txt) | 15634.66 | 73.28 | 261.23 (4) | 773 | UB, LongNeighbors | -| [metrohash128_1](doc/metrohash128_1.txt) | 15806.97 | 72.30 | 260.90 (4) | 773 | UB, LongNeighbors | -| [metrohash128_2](doc/metrohash128_2.txt) | 15822.60 | 72.30 | 255.34 (3) | 773 | UB, LongNeighbors | -| [metrohash128crc_1](doc/metrohash128crc_1.txt)| 8009.23 | 78.72 | 281.55 (13)| 723 | UB, machine-specific (SSE4.2/NEON) | -| [metrohash128crc_2](doc/metrohash128crc_2.txt)| 7878.22 | 79.90 | 275.22 (4) | 723 | UB, machine-specific (SSE4.2/NEON) | +| [metrohash64_2](doc/metrohash64_2.txt) | 14359.39 | 41.09 | 215.53 (2) | 627 | UB, LongNeighbors | +| [cmetrohash64_2](doc/cmetrohash64_2.txt) | 14498.20 | 40.87 | 219.65 (2) | 655 | LongNeighbors | +| [metrohash128](doc/metrohash128.txt) | 15847.63 | 72.33 | 266.54 (2) | 773 | UB, LongNeighbors | +| [metrohash128_1](doc/metrohash128_1.txt) | 15556.40 | 73.49 | 259.05 (2) | 773 | UB, LongNeighbors | +| [metrohash128_2](doc/metrohash128_2.txt) | 15408.56 | 74.36 | 259.57 (2) | 773 | UB, LongNeighbors | +| [metrohash128crc_1](doc/metrohash128crc_1.txt)| 8182.02 | 77.38 | 256.80 (2) | 723 | UB, machine-specific (SSE4.2/NEON) | +| [metrohash128crc_2](doc/metrohash128crc_2.txt)| 7996.33 | 78.81 | 262.53 (2) | 723 | UB, machine-specific (SSE4.2/NEON) | | [xxHash64](doc/xxHash64.txt) | 12108.87 | 49.78 | 228.83 (2) |1999 | | | [Spooky32](doc/Spooky32.txt) | 13108.95 | 56.27 | 255.36 (3) |2221 | UB | | [Spooky64](doc/Spooky64.txt) | 13529.36 | 58.76 | 236.31 (3) |2221 | UB | @@ -204,6 +209,7 @@ SMhasher | [wyhash32](doc/wyhash32.txt) | 2532.89 | 48.40 | 484.57 (1) | 426 | 4 bad and broken seeds, 32-bit | | [wyhash32low](doc/wyhash32low.txt) | 22393.77 | 29.04 | 243.40 (3) | 474 | 5 bad seeds | | [wyhash](doc/wyhash.txt) | 22540.23 | 28.87 | 236.16 (8) | 474 | | +| [w1hash](doc/w1hash.txt) | | | | | | | [rapidhash](doc/rapidhash.txt) | 23789.79 | 22.80 | 138.71 (7) | 574 | | | [rapidhash_unrolled](doc/rapidhash_unrolled.txt)| 23892.88 | 23.41 | 139.47 (12)| 782 | | | [umash32](doc/umash32.txt) | 21427.57 | 42.12 | 255.55 (5) |1530 | | @@ -220,6 +226,7 @@ SMhasher | [k-hashv64](doc/k-hashv32.txt) | 7850.92 | 46.94 | 193.94 (1) |1279 | | | [komihash](doc/komihash.txt) | 12242.78 | 33.02 | 236.07 (2) |1323 | | | [polymur](doc/polymur.txt) | 9676.33 | 42.70 | 246.53 (3) |1128 | | +| [gxhash64](doc/gxhash64.txt) | | | | | | The sortable table variants: diff --git a/doc/BadHash.txt b/doc/BadHash.txt index 3dcd7485..5055c3fe 100644 --- a/doc/BadHash.txt +++ b/doc/BadHash.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x10295701b18 - 0x10295701ad0). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.183 bytes/cycle - 524.82 MiB/sec @ 3 ghz -Alignment 6 - 0.183 bytes/cycle - 524.82 MiB/sec @ 3 ghz -Alignment 5 - 0.183 bytes/cycle - 524.81 MiB/sec @ 3 ghz -Alignment 4 - 0.183 bytes/cycle - 524.81 MiB/sec @ 3 ghz -Alignment 3 - 0.183 bytes/cycle - 524.81 MiB/sec @ 3 ghz -Alignment 2 - 0.183 bytes/cycle - 524.82 MiB/sec @ 3 ghz -Alignment 1 - 0.183 bytes/cycle - 524.81 MiB/sec @ 3 ghz -Alignment 0 - 0.183 bytes/cycle - 524.81 MiB/sec @ 3 ghz -Average - 0.183 bytes/cycle - 524.81 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 13.65 cycles/hash -Small key speed test - 2-byte keys - 19.32 cycles/hash -Small key speed test - 3-byte keys - 24.97 cycles/hash -Small key speed test - 4-byte keys - 30.72 cycles/hash -Small key speed test - 5-byte keys - 35.92 cycles/hash -Small key speed test - 6-byte keys - 41.68 cycles/hash -Small key speed test - 7-byte keys - 46.99 cycles/hash -Small key speed test - 8-byte keys - 52.25 cycles/hash -Small key speed test - 9-byte keys - 57.57 cycles/hash -Small key speed test - 10-byte keys - 63.00 cycles/hash -Small key speed test - 11-byte keys - 68.60 cycles/hash -Small key speed test - 12-byte keys - 74.36 cycles/hash -Small key speed test - 13-byte keys - 79.77 cycles/hash -Small key speed test - 14-byte keys - 85.50 cycles/hash -Small key speed test - 15-byte keys - 90.93 cycles/hash -Small key speed test - 16-byte keys - 96.00 cycles/hash -Small key speed test - 17-byte keys - 101.79 cycles/hash -Small key speed test - 18-byte keys - 107.00 cycles/hash -Small key speed test - 19-byte keys - 112.20 cycles/hash -Small key speed test - 20-byte keys - 118.00 cycles/hash -Small key speed test - 21-byte keys - 123.73 cycles/hash -Small key speed test - 22-byte keys - 129.00 cycles/hash -Small key speed test - 23-byte keys - 134.76 cycles/hash -Small key speed test - 24-byte keys - 140.00 cycles/hash -Small key speed test - 25-byte keys - 145.87 cycles/hash -Small key speed test - 26-byte keys - 151.00 cycles/hash -Small key speed test - 27-byte keys - 156.38 cycles/hash -Small key speed test - 28-byte keys - 162.00 cycles/hash -Small key speed test - 29-byte keys - 167.82 cycles/hash -Small key speed test - 30-byte keys - 173.00 cycles/hash -Small key speed test - 31-byte keys - 178.38 cycles/hash -Average 96.198 cycles/hash +Alignment 7 - 0.278 bytes/cycle - 794.68 MiB/sec @ 3 ghz +Alignment 6 - 0.278 bytes/cycle - 794.68 MiB/sec @ 3 ghz +Alignment 5 - 0.278 bytes/cycle - 794.68 MiB/sec @ 3 ghz +Alignment 4 - 0.278 bytes/cycle - 794.68 MiB/sec @ 3 ghz +Alignment 3 - 0.278 bytes/cycle - 794.68 MiB/sec @ 3 ghz +Alignment 2 - 0.278 bytes/cycle - 794.68 MiB/sec @ 3 ghz +Alignment 1 - 0.278 bytes/cycle - 794.68 MiB/sec @ 3 ghz +Alignment 0 - 0.278 bytes/cycle - 794.68 MiB/sec @ 3 ghz +Average - 0.278 bytes/cycle - 794.68 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 14.94 cycles/hash +Small key speed test - 2-byte keys - 18.67 cycles/hash +Small key speed test - 3-byte keys - 22.00 cycles/hash +Small key speed test - 4-byte keys - 26.00 cycles/hash +Small key speed test - 5-byte keys - 30.00 cycles/hash +Small key speed test - 6-byte keys - 33.17 cycles/hash +Small key speed test - 7-byte keys - 37.00 cycles/hash +Small key speed test - 8-byte keys - 41.00 cycles/hash +Small key speed test - 9-byte keys - 44.76 cycles/hash +Small key speed test - 10-byte keys - 48.24 cycles/hash +Small key speed test - 11-byte keys - 52.00 cycles/hash +Small key speed test - 12-byte keys - 55.98 cycles/hash +Small key speed test - 13-byte keys - 59.91 cycles/hash +Small key speed test - 14-byte keys - 63.44 cycles/hash +Small key speed test - 15-byte keys - 67.46 cycles/hash +Small key speed test - 16-byte keys - 71.00 cycles/hash +Small key speed test - 17-byte keys - 74.69 cycles/hash +Small key speed test - 18-byte keys - 78.86 cycles/hash +Small key speed test - 19-byte keys - 82.41 cycles/hash +Small key speed test - 20-byte keys - 86.00 cycles/hash +Small key speed test - 21-byte keys - 89.47 cycles/hash +Small key speed test - 22-byte keys - 93.28 cycles/hash +Small key speed test - 23-byte keys - 97.00 cycles/hash +Small key speed test - 24-byte keys - 100.00 cycles/hash +Small key speed test - 25-byte keys - 104.00 cycles/hash +Small key speed test - 26-byte keys - 108.30 cycles/hash +Small key speed test - 27-byte keys - 111.54 cycles/hash +Small key speed test - 28-byte keys - 117.04 cycles/hash +Small key speed test - 29-byte keys - 120.83 cycles/hash +Small key speed test - 30-byte keys - 124.20 cycles/hash +Small key speed test - 31-byte keys - 126.51 cycles/hash +Small key speed test - 32-byte keys - 130.00 cycles/hash +Average 72.802 cycles/hash +Average, weighted by key length freq. 72.618 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 57.518 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/NOP_OAAT_read64.txt b/doc/NOP_OAAT_read64.txt index 37ceccc1..8f2191da 100644 --- a/doc/NOP_OAAT_read64.txt +++ b/doc/NOP_OAAT_read64.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest . FAIL !!!!! [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0xfeaaa5e09c - 0xfeaaa5e054). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 9.794 bytes/cycle - 28022.20 MiB/sec @ 3 ghz -Alignment 6 - 9.797 bytes/cycle - 28028.50 MiB/sec @ 3 ghz -Alignment 5 - 9.796 bytes/cycle - 28025.61 MiB/sec @ 3 ghz -Alignment 4 - 9.795 bytes/cycle - 28023.05 MiB/sec @ 3 ghz -Alignment 3 - 9.796 bytes/cycle - 28027.91 MiB/sec @ 3 ghz -Alignment 2 - 9.794 bytes/cycle - 28020.14 MiB/sec @ 3 ghz -Alignment 1 - 9.794 bytes/cycle - 28021.28 MiB/sec @ 3 ghz -Alignment 0 - 11.035 bytes/cycle - 31571.29 MiB/sec @ 3 ghz -Average - 9.950 bytes/cycle - 28467.50 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 16.00 cycles/hash -Small key speed test - 2-byte keys - 16.00 cycles/hash -Small key speed test - 3-byte keys - 17.00 cycles/hash -Small key speed test - 4-byte keys - 17.00 cycles/hash -Small key speed test - 5-byte keys - 18.00 cycles/hash -Small key speed test - 6-byte keys - 18.00 cycles/hash -Small key speed test - 7-byte keys - 19.00 cycles/hash -Small key speed test - 8-byte keys - 19.00 cycles/hash -Small key speed test - 9-byte keys - 19.99 cycles/hash -Small key speed test - 10-byte keys - 20.58 cycles/hash -Small key speed test - 11-byte keys - 20.58 cycles/hash -Small key speed test - 12-byte keys - 21.29 cycles/hash -Small key speed test - 13-byte keys - 21.26 cycles/hash -Small key speed test - 14-byte keys - 23.00 cycles/hash -Small key speed test - 15-byte keys - 22.00 cycles/hash -Small key speed test - 16-byte keys - 13.00 cycles/hash +Alignment 7 - 4040.786 bytes/cycle - 11560782.86 MiB/sec @ 3 ghz +Alignment 6 - 4058.518 bytes/cycle - 11611513.91 MiB/sec @ 3 ghz +Alignment 5 - 4079.755 bytes/cycle - 11672273.10 MiB/sec @ 3 ghz +Alignment 4 - 4080.518 bytes/cycle - 11674454.83 MiB/sec @ 3 ghz +Alignment 3 - 4077.469 bytes/cycle - 11665732.79 MiB/sec @ 3 ghz +Alignment 2 - 4088.925 bytes/cycle - 11698507.84 MiB/sec @ 3 ghz +Alignment 1 - 4073.665 bytes/cycle - 11654848.54 MiB/sec @ 3 ghz +Alignment 0 - 4083.571 bytes/cycle - 11683189.92 MiB/sec @ 3 ghz +Average - 4072.901 bytes/cycle - 11652662.97 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 14.00 cycles/hash +Small key speed test - 2-byte keys - 14.00 cycles/hash +Small key speed test - 3-byte keys - 14.00 cycles/hash +Small key speed test - 4-byte keys - 14.00 cycles/hash +Small key speed test - 5-byte keys - 14.00 cycles/hash +Small key speed test - 6-byte keys - 14.00 cycles/hash +Small key speed test - 7-byte keys - 14.00 cycles/hash +Small key speed test - 8-byte keys - 14.00 cycles/hash +Small key speed test - 9-byte keys - 14.00 cycles/hash +Small key speed test - 10-byte keys - 14.00 cycles/hash +Small key speed test - 11-byte keys - 14.00 cycles/hash +Small key speed test - 12-byte keys - 14.00 cycles/hash +Small key speed test - 13-byte keys - 14.00 cycles/hash +Small key speed test - 14-byte keys - 14.00 cycles/hash +Small key speed test - 15-byte keys - 14.00 cycles/hash +Small key speed test - 16-byte keys - 14.00 cycles/hash Small key speed test - 17-byte keys - 14.00 cycles/hash Small key speed test - 18-byte keys - 14.00 cycles/hash -Small key speed test - 19-byte keys - 15.00 cycles/hash -Small key speed test - 20-byte keys - 15.00 cycles/hash -Small key speed test - 21-byte keys - 16.00 cycles/hash -Small key speed test - 22-byte keys - 17.00 cycles/hash -Small key speed test - 23-byte keys - 17.00 cycles/hash -Small key speed test - 24-byte keys - 19.00 cycles/hash -Small key speed test - 25-byte keys - 18.57 cycles/hash -Small key speed test - 26-byte keys - 19.49 cycles/hash -Small key speed test - 27-byte keys - 19.97 cycles/hash -Small key speed test - 28-byte keys - 21.00 cycles/hash -Small key speed test - 29-byte keys - 21.00 cycles/hash -Small key speed test - 30-byte keys - 22.07 cycles/hash -Small key speed test - 31-byte keys - 22.00 cycles/hash -Average 18.478 cycles/hash +Small key speed test - 19-byte keys - 14.00 cycles/hash +Small key speed test - 20-byte keys - 14.00 cycles/hash +Small key speed test - 21-byte keys - 14.00 cycles/hash +Small key speed test - 22-byte keys - 14.00 cycles/hash +Small key speed test - 23-byte keys - 14.00 cycles/hash +Small key speed test - 24-byte keys - 14.00 cycles/hash +Small key speed test - 25-byte keys - 14.00 cycles/hash +Small key speed test - 26-byte keys - 14.00 cycles/hash +Small key speed test - 27-byte keys - 14.00 cycles/hash +Small key speed test - 28-byte keys - 14.00 cycles/hash +Small key speed test - 29-byte keys - 14.00 cycles/hash +Small key speed test - 30-byte keys - 14.00 cycles/hash +Small key speed test - 31-byte keys - 14.00 cycles/hash +Small key speed test - 32-byte keys - 14.00 cycles/hash +Average 14.000 cycles/hash +Average, weighted by key length freq. 14.000 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 14.000 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/air.html b/doc/air.html index 920dfb06..af0b75eb 100644 --- a/doc/air.html +++ b/doc/air.html @@ -248,6 +248,22 @@

SMhasher

+edonr224 +525.27 +365.89 +504.28 (4) + + + + +edonr256 +525.27 +365.89 +504.28 (4) + + + + blake2s-128 306.43 670.08 @@ -440,6 +456,38 @@

SMhasher

insecure, 100% bias, collisions, distrib, machine-specific (x86 PCLMUL) +crc64_jones1 + + + + +insecure, 100% bias, collisions, distrib + + +crc64_jones2 + + + + +insecure, 100% bias, collisions, distrib + + +crc64_jones3 + + + + +insecure, 100% bias, collisions, distrib + + +crc64_jones + + + + +insecure, 100% bias, collisions, distrib + + o1hash 5525178.01 15.81 @@ -1080,6 +1128,46 @@

SMhasher

0.9% bias +discohash1 +4131.12 +199.00 +398.35 (5) +1294 +bad seeds + + +discohash1-128 +4072.95 +234.17 +438.43 (5) +1294 + + + +discohash2 +3986.52 +207.52 +421.99 (2) +1294 + + + +discohash2-128 +4094.73 +236.61 +433.35 (4) +1294 + + + +discoNONG +3698.45 +399.67 +597.78 (9) + +bad seeds + + TSip 4218.38 52.96 @@ -1088,6 +1176,22 @@

SMhasher

!msvc +aesni +32360.68 +25.66 +629.14 (50) +519 +machine-specific (x64 AES-NI) + + +aesni-low +34262.67 +25.92 +642.08 (68) +519 +machine-specific (x64 AES-NI) + + seahash 7848.36 62.64 @@ -1248,6 +1352,14 @@

SMhasher

+CityCrc256 +19603.25 +42.27 +149.40 (4) + + + + FarmHash32 11957.83 42.76 @@ -1496,6 +1608,30 @@

SMhasher

5 bad seeds +w1hash +2532.89 +37.95 +222.17 (4) + + + + +rapidhash +23789.79 +22.80 +138.71 (7) +574 + + + +rapidhash_unrolled +23892.88 +23.41 +139.47 (12) +782 + + + umash32 15939.18 44.41 @@ -1575,14 +1711,56 @@

SMhasher

1494 + +k-hashv32 +10843.74 +38.41 +157.94 (2) +1280 + + + +k-hashv64 +10820.69 +37.75 +129.51 (2) +1279 + + + +komihash +18568.42 +24.53 +128.57 (1) +728 + + + +polymur +1017.15 +178.25 +313.64 (9) +1128 + + + +gxhash64 +1017.15 +178.25 +313.64 (9) + + + Other timings: diff --git a/doc/asconhashv12.txt b/doc/asconhashv12.txt index 2421d48c..7ebfc414 100644 --- a/doc/asconhashv12.txt +++ b/doc/asconhashv12.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0xdca534e3a04 - 0xdca534e39bc). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.030 bytes/cycle - 86.73 MiB/sec @ 3 ghz -Alignment 6 - 0.030 bytes/cycle - 86.72 MiB/sec @ 3 ghz -Alignment 5 - 0.030 bytes/cycle - 86.72 MiB/sec @ 3 ghz -Alignment 4 - 0.030 bytes/cycle - 86.71 MiB/sec @ 3 ghz -Alignment 3 - 0.030 bytes/cycle - 86.71 MiB/sec @ 3 ghz -Alignment 2 - 0.030 bytes/cycle - 86.73 MiB/sec @ 3 ghz -Alignment 1 - 0.030 bytes/cycle - 86.71 MiB/sec @ 3 ghz -Alignment 0 - 0.030 bytes/cycle - 86.78 MiB/sec @ 3 ghz -Average - 0.030 bytes/cycle - 86.73 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 1079.61 cycles/hash -Small key speed test - 2-byte keys - 1079.75 cycles/hash -Small key speed test - 3-byte keys - 1079.57 cycles/hash -Small key speed test - 4-byte keys - 1079.55 cycles/hash -Small key speed test - 5-byte keys - 1079.80 cycles/hash -Small key speed test - 6-byte keys - 1079.84 cycles/hash -Small key speed test - 7-byte keys - 1079.78 cycles/hash -Small key speed test - 8-byte keys - 1334.20 cycles/hash -Small key speed test - 9-byte keys - 1350.22 cycles/hash -Small key speed test - 10-byte keys - 1350.24 cycles/hash -Small key speed test - 11-byte keys - 1364.23 cycles/hash -Small key speed test - 12-byte keys - 1350.31 cycles/hash -Small key speed test - 13-byte keys - 1350.25 cycles/hash -Small key speed test - 14-byte keys - 1350.22 cycles/hash -Small key speed test - 15-byte keys - 1350.23 cycles/hash -Small key speed test - 16-byte keys - 1596.39 cycles/hash -Small key speed test - 17-byte keys - 1612.31 cycles/hash -Small key speed test - 18-byte keys - 1612.20 cycles/hash -Small key speed test - 19-byte keys - 1612.29 cycles/hash -Small key speed test - 20-byte keys - 1612.28 cycles/hash -Small key speed test - 21-byte keys - 1612.37 cycles/hash -Small key speed test - 22-byte keys - 1612.32 cycles/hash -Small key speed test - 23-byte keys - 1612.36 cycles/hash -Small key speed test - 24-byte keys - 1859.12 cycles/hash -Small key speed test - 25-byte keys - 1874.60 cycles/hash -Small key speed test - 26-byte keys - 1874.55 cycles/hash -Small key speed test - 27-byte keys - 1874.58 cycles/hash -Small key speed test - 28-byte keys - 1874.61 cycles/hash -Small key speed test - 29-byte keys - 1874.56 cycles/hash -Small key speed test - 30-byte keys - 1874.47 cycles/hash -Small key speed test - 31-byte keys - 1874.61 cycles/hash -Average 1491.014 cycles/hash +Alignment 7 - 0.057 bytes/cycle - 163.59 MiB/sec @ 3 ghz +Alignment 6 - 0.057 bytes/cycle - 163.58 MiB/sec @ 3 ghz +Alignment 5 - 0.057 bytes/cycle - 163.59 MiB/sec @ 3 ghz +Alignment 4 - 0.057 bytes/cycle - 163.59 MiB/sec @ 3 ghz +Alignment 3 - 0.057 bytes/cycle - 163.59 MiB/sec @ 3 ghz +Alignment 2 - 0.057 bytes/cycle - 163.59 MiB/sec @ 3 ghz +Alignment 1 - 0.057 bytes/cycle - 163.59 MiB/sec @ 3 ghz +Alignment 0 - 0.056 bytes/cycle - 158.84 MiB/sec @ 3 ghz +Average - 0.057 bytes/cycle - 162.99 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 615.11 cycles/hash +Small key speed test - 2-byte keys - 615.40 cycles/hash +Small key speed test - 3-byte keys - 613.57 cycles/hash +Small key speed test - 4-byte keys - 613.52 cycles/hash +Small key speed test - 5-byte keys - 614.58 cycles/hash +Small key speed test - 6-byte keys - 613.61 cycles/hash +Small key speed test - 7-byte keys - 613.04 cycles/hash +Small key speed test - 8-byte keys - 737.62 cycles/hash +Small key speed test - 9-byte keys - 749.98 cycles/hash +Small key speed test - 10-byte keys - 751.57 cycles/hash +Small key speed test - 11-byte keys - 750.38 cycles/hash +Small key speed test - 12-byte keys - 751.39 cycles/hash +Small key speed test - 13-byte keys - 750.54 cycles/hash +Small key speed test - 14-byte keys - 750.91 cycles/hash +Small key speed test - 15-byte keys - 750.54 cycles/hash +Small key speed test - 16-byte keys - 878.00 cycles/hash +Small key speed test - 17-byte keys - 893.94 cycles/hash +Small key speed test - 18-byte keys - 895.42 cycles/hash +Small key speed test - 19-byte keys - 894.63 cycles/hash +Small key speed test - 20-byte keys - 894.72 cycles/hash +Small key speed test - 21-byte keys - 894.33 cycles/hash +Small key speed test - 22-byte keys - 894.11 cycles/hash +Small key speed test - 23-byte keys - 893.64 cycles/hash +Small key speed test - 24-byte keys - 1025.10 cycles/hash +Small key speed test - 25-byte keys - 1036.57 cycles/hash +Small key speed test - 26-byte keys - 1037.38 cycles/hash +Small key speed test - 27-byte keys - 1036.56 cycles/hash +Small key speed test - 28-byte keys - 1036.63 cycles/hash +Small key speed test - 29-byte keys - 1035.20 cycles/hash +Small key speed test - 30-byte keys - 1037.21 cycles/hash +Small key speed test - 31-byte keys - 1038.41 cycles/hash +Small key speed test - 32-byte keys - 1175.82 cycles/hash +Average 840.294 cycles/hash +Average, weighted by key length freq. 838.178 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 793.330 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/asconhashv12_64.txt b/doc/asconhashv12_64.txt index 5b1f4975..db82c5f5 100644 --- a/doc/asconhashv12_64.txt +++ b/doc/asconhashv12_64.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0xe69238de300 - 0xe69238de294). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.030 bytes/cycle - 86.72 MiB/sec @ 3 ghz -Alignment 6 - 0.030 bytes/cycle - 86.72 MiB/sec @ 3 ghz -Alignment 5 - 0.030 bytes/cycle - 86.73 MiB/sec @ 3 ghz -Alignment 4 - 0.030 bytes/cycle - 86.73 MiB/sec @ 3 ghz -Alignment 3 - 0.030 bytes/cycle - 86.72 MiB/sec @ 3 ghz -Alignment 2 - 0.030 bytes/cycle - 86.73 MiB/sec @ 3 ghz -Alignment 1 - 0.030 bytes/cycle - 86.73 MiB/sec @ 3 ghz -Alignment 0 - 0.030 bytes/cycle - 86.78 MiB/sec @ 3 ghz -Average - 0.030 bytes/cycle - 86.73 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 276.25 cycles/hash -Small key speed test - 2-byte keys - 276.25 cycles/hash -Small key speed test - 3-byte keys - 276.00 cycles/hash -Small key speed test - 4-byte keys - 276.00 cycles/hash -Small key speed test - 5-byte keys - 276.00 cycles/hash -Small key speed test - 6-byte keys - 276.00 cycles/hash -Small key speed test - 7-byte keys - 276.00 cycles/hash -Small key speed test - 8-byte keys - 528.06 cycles/hash -Small key speed test - 9-byte keys - 542.88 cycles/hash -Small key speed test - 10-byte keys - 542.83 cycles/hash -Small key speed test - 11-byte keys - 542.89 cycles/hash -Small key speed test - 12-byte keys - 542.95 cycles/hash -Small key speed test - 13-byte keys - 542.87 cycles/hash -Small key speed test - 14-byte keys - 542.81 cycles/hash -Small key speed test - 15-byte keys - 542.91 cycles/hash -Small key speed test - 16-byte keys - 789.71 cycles/hash -Small key speed test - 17-byte keys - 805.05 cycles/hash -Small key speed test - 18-byte keys - 804.91 cycles/hash -Small key speed test - 19-byte keys - 805.05 cycles/hash -Small key speed test - 20-byte keys - 804.94 cycles/hash -Small key speed test - 21-byte keys - 805.05 cycles/hash -Small key speed test - 22-byte keys - 805.02 cycles/hash -Small key speed test - 23-byte keys - 805.10 cycles/hash -Small key speed test - 24-byte keys - 1051.14 cycles/hash -Small key speed test - 25-byte keys - 1066.93 cycles/hash -Small key speed test - 26-byte keys - 1066.75 cycles/hash -Small key speed test - 27-byte keys - 1066.89 cycles/hash -Small key speed test - 28-byte keys - 1066.87 cycles/hash -Small key speed test - 29-byte keys - 1066.97 cycles/hash -Small key speed test - 30-byte keys - 1066.80 cycles/hash -Small key speed test - 31-byte keys - 1066.88 cycles/hash -Average 684.025 cycles/hash +Alignment 7 - 0.056 bytes/cycle - 159.73 MiB/sec @ 3 ghz +Alignment 6 - 0.056 bytes/cycle - 159.73 MiB/sec @ 3 ghz +Alignment 5 - 0.056 bytes/cycle - 159.73 MiB/sec @ 3 ghz +Alignment 4 - 0.056 bytes/cycle - 159.73 MiB/sec @ 3 ghz +Alignment 3 - 0.056 bytes/cycle - 159.73 MiB/sec @ 3 ghz +Alignment 2 - 0.056 bytes/cycle - 159.73 MiB/sec @ 3 ghz +Alignment 1 - 0.055 bytes/cycle - 158.22 MiB/sec @ 3 ghz +Alignment 0 - 0.055 bytes/cycle - 158.07 MiB/sec @ 3 ghz +Average - 0.056 bytes/cycle - 159.33 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 166.51 cycles/hash +Small key speed test - 2-byte keys - 166.48 cycles/hash +Small key speed test - 3-byte keys - 166.48 cycles/hash +Small key speed test - 4-byte keys - 166.49 cycles/hash +Small key speed test - 5-byte keys - 166.45 cycles/hash +Small key speed test - 6-byte keys - 166.47 cycles/hash +Small key speed test - 7-byte keys - 166.51 cycles/hash +Small key speed test - 8-byte keys - 305.01 cycles/hash +Small key speed test - 9-byte keys - 314.07 cycles/hash +Small key speed test - 10-byte keys - 314.09 cycles/hash +Small key speed test - 11-byte keys - 314.06 cycles/hash +Small key speed test - 12-byte keys - 314.02 cycles/hash +Small key speed test - 13-byte keys - 314.00 cycles/hash +Small key speed test - 14-byte keys - 314.05 cycles/hash +Small key speed test - 15-byte keys - 314.07 cycles/hash +Small key speed test - 16-byte keys - 450.20 cycles/hash +Small key speed test - 17-byte keys - 459.25 cycles/hash +Small key speed test - 18-byte keys - 459.23 cycles/hash +Small key speed test - 19-byte keys - 459.01 cycles/hash +Small key speed test - 20-byte keys - 459.26 cycles/hash +Small key speed test - 21-byte keys - 458.73 cycles/hash +Small key speed test - 22-byte keys - 458.63 cycles/hash +Small key speed test - 23-byte keys - 458.72 cycles/hash +Small key speed test - 24-byte keys - 588.70 cycles/hash +Small key speed test - 25-byte keys - 602.91 cycles/hash +Small key speed test - 26-byte keys - 602.95 cycles/hash +Small key speed test - 27-byte keys - 602.94 cycles/hash +Small key speed test - 28-byte keys - 603.59 cycles/hash +Small key speed test - 29-byte keys - 602.96 cycles/hash +Small key speed test - 30-byte keys - 602.86 cycles/hash +Small key speed test - 31-byte keys - 602.81 cycles/hash +Small key speed test - 32-byte keys - 739.82 cycles/hash +Average 402.541 cycles/hash +Average, weighted by key length freq. 402.632 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 359.746 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/blake2b-160.txt b/doc/blake2b-160.txt index 2cff1b51..3d4a4105 100644 --- a/doc/blake2b-160.txt +++ b/doc/blake2b-160.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 144 (0x90) ticks (0xbccfa0988f8 - 0xbccfa098868). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 6 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 5 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 4 - 0.129 bytes/cycle - 368.73 MiB/sec @ 3 ghz -Alignment 3 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 2 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 1 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 0 - 0.129 bytes/cycle - 369.60 MiB/sec @ 3 ghz -Average - 0.129 bytes/cycle - 368.85 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 1154.61 cycles/hash -Small key speed test - 2-byte keys - 1151.35 cycles/hash -Small key speed test - 3-byte keys - 1150.73 cycles/hash -Small key speed test - 4-byte keys - 1155.13 cycles/hash -Small key speed test - 5-byte keys - 1153.00 cycles/hash -Small key speed test - 6-byte keys - 1153.00 cycles/hash -Small key speed test - 7-byte keys - 1153.00 cycles/hash -Small key speed test - 8-byte keys - 1172.01 cycles/hash -Small key speed test - 9-byte keys - 1174.28 cycles/hash -Small key speed test - 10-byte keys - 1174.34 cycles/hash -Small key speed test - 11-byte keys - 1173.93 cycles/hash -Small key speed test - 12-byte keys - 1173.96 cycles/hash -Small key speed test - 13-byte keys - 1173.29 cycles/hash -Small key speed test - 14-byte keys - 1173.24 cycles/hash -Small key speed test - 15-byte keys - 1173.47 cycles/hash -Small key speed test - 16-byte keys - 1174.46 cycles/hash -Small key speed test - 17-byte keys - 1173.90 cycles/hash -Small key speed test - 18-byte keys - 1174.00 cycles/hash -Small key speed test - 19-byte keys - 1173.75 cycles/hash -Small key speed test - 20-byte keys - 1174.03 cycles/hash -Small key speed test - 21-byte keys - 1173.78 cycles/hash -Small key speed test - 22-byte keys - 1173.78 cycles/hash -Small key speed test - 23-byte keys - 1173.77 cycles/hash -Small key speed test - 24-byte keys - 1177.99 cycles/hash -Small key speed test - 25-byte keys - 1177.49 cycles/hash -Small key speed test - 26-byte keys - 1177.49 cycles/hash -Small key speed test - 27-byte keys - 1177.51 cycles/hash -Small key speed test - 28-byte keys - 1177.93 cycles/hash -Small key speed test - 29-byte keys - 1177.50 cycles/hash -Small key speed test - 30-byte keys - 1177.50 cycles/hash -Small key speed test - 31-byte keys - 1177.49 cycles/hash -Average 1170.056 cycles/hash +Alignment 7 - 0.201 bytes/cycle - 576.31 MiB/sec @ 3 ghz +Alignment 6 - 0.202 bytes/cycle - 578.71 MiB/sec @ 3 ghz +Alignment 5 - 0.202 bytes/cycle - 578.66 MiB/sec @ 3 ghz +Alignment 4 - 0.202 bytes/cycle - 578.70 MiB/sec @ 3 ghz +Alignment 3 - 0.202 bytes/cycle - 578.80 MiB/sec @ 3 ghz +Alignment 2 - 0.202 bytes/cycle - 578.02 MiB/sec @ 3 ghz +Alignment 1 - 0.202 bytes/cycle - 578.69 MiB/sec @ 3 ghz +Alignment 0 - 0.202 bytes/cycle - 578.70 MiB/sec @ 3 ghz +Average - 0.202 bytes/cycle - 578.32 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 761.73 cycles/hash +Small key speed test - 2-byte keys - 766.80 cycles/hash +Small key speed test - 3-byte keys - 769.83 cycles/hash +Small key speed test - 4-byte keys - 768.27 cycles/hash +Small key speed test - 5-byte keys - 762.93 cycles/hash +Small key speed test - 6-byte keys - 762.12 cycles/hash +Small key speed test - 7-byte keys - 760.45 cycles/hash +Small key speed test - 8-byte keys - 791.85 cycles/hash +Small key speed test - 9-byte keys - 784.32 cycles/hash +Small key speed test - 10-byte keys - 784.39 cycles/hash +Small key speed test - 11-byte keys - 784.01 cycles/hash +Small key speed test - 12-byte keys - 791.16 cycles/hash +Small key speed test - 13-byte keys - 782.13 cycles/hash +Small key speed test - 14-byte keys - 783.65 cycles/hash +Small key speed test - 15-byte keys - 783.19 cycles/hash +Small key speed test - 16-byte keys - 781.72 cycles/hash +Small key speed test - 17-byte keys - 779.29 cycles/hash +Small key speed test - 18-byte keys - 776.97 cycles/hash +Small key speed test - 19-byte keys - 777.00 cycles/hash +Small key speed test - 20-byte keys - 786.39 cycles/hash +Small key speed test - 21-byte keys - 780.20 cycles/hash +Small key speed test - 22-byte keys - 779.53 cycles/hash +Small key speed test - 23-byte keys - 777.67 cycles/hash +Small key speed test - 24-byte keys - 790.50 cycles/hash +Small key speed test - 25-byte keys - 785.74 cycles/hash +Small key speed test - 26-byte keys - 786.46 cycles/hash +Small key speed test - 27-byte keys - 786.63 cycles/hash +Small key speed test - 28-byte keys - 790.77 cycles/hash +Small key speed test - 29-byte keys - 785.11 cycles/hash +Small key speed test - 30-byte keys - 786.28 cycles/hash +Small key speed test - 31-byte keys - 785.46 cycles/hash +Small key speed test - 32-byte keys - 801.69 cycles/hash +Average 780.445 cycles/hash +Average, weighted by key length freq. 783.019 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 782.230 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/blake2b-224.txt b/doc/blake2b-224.txt index c034e015..c2eb0e27 100644 --- a/doc/blake2b-224.txt +++ b/doc/blake2b-224.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0xc4e4306bedc - 0xc4e4306be70). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 6 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 5 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 4 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 3 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 2 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 1 - 0.129 bytes/cycle - 368.74 MiB/sec @ 3 ghz -Alignment 0 - 0.129 bytes/cycle - 369.58 MiB/sec @ 3 ghz -Average - 0.129 bytes/cycle - 368.85 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 1156.76 cycles/hash -Small key speed test - 2-byte keys - 1152.14 cycles/hash -Small key speed test - 3-byte keys - 1152.12 cycles/hash -Small key speed test - 4-byte keys - 1160.77 cycles/hash -Small key speed test - 5-byte keys - 1160.66 cycles/hash -Small key speed test - 6-byte keys - 1160.94 cycles/hash -Small key speed test - 7-byte keys - 1160.59 cycles/hash -Small key speed test - 8-byte keys - 1175.22 cycles/hash -Small key speed test - 9-byte keys - 1175.29 cycles/hash -Small key speed test - 10-byte keys - 1175.36 cycles/hash -Small key speed test - 11-byte keys - 1175.32 cycles/hash -Small key speed test - 12-byte keys - 1174.82 cycles/hash -Small key speed test - 13-byte keys - 1175.03 cycles/hash -Small key speed test - 14-byte keys - 1175.09 cycles/hash -Small key speed test - 15-byte keys - 1174.66 cycles/hash -Small key speed test - 16-byte keys - 1174.93 cycles/hash -Small key speed test - 17-byte keys - 1173.91 cycles/hash -Small key speed test - 18-byte keys - 1173.88 cycles/hash -Small key speed test - 19-byte keys - 1173.75 cycles/hash -Small key speed test - 20-byte keys - 1174.34 cycles/hash -Small key speed test - 21-byte keys - 1172.98 cycles/hash -Small key speed test - 22-byte keys - 1172.98 cycles/hash -Small key speed test - 23-byte keys - 1172.98 cycles/hash -Small key speed test - 24-byte keys - 1177.75 cycles/hash -Small key speed test - 25-byte keys - 1177.65 cycles/hash -Small key speed test - 26-byte keys - 1177.65 cycles/hash -Small key speed test - 27-byte keys - 1177.57 cycles/hash -Small key speed test - 28-byte keys - 1177.79 cycles/hash -Small key speed test - 29-byte keys - 1177.67 cycles/hash -Small key speed test - 30-byte keys - 1177.68 cycles/hash -Small key speed test - 31-byte keys - 1177.65 cycles/hash -Average 1171.482 cycles/hash +Alignment 7 - 0.204 bytes/cycle - 582.55 MiB/sec @ 3 ghz +Alignment 6 - 0.203 bytes/cycle - 579.48 MiB/sec @ 3 ghz +Alignment 5 - 0.200 bytes/cycle - 573.37 MiB/sec @ 3 ghz +Alignment 4 - 0.203 bytes/cycle - 580.27 MiB/sec @ 3 ghz +Alignment 3 - 0.202 bytes/cycle - 578.74 MiB/sec @ 3 ghz +Alignment 2 - 0.202 bytes/cycle - 578.88 MiB/sec @ 3 ghz +Alignment 1 - 0.202 bytes/cycle - 577.76 MiB/sec @ 3 ghz +Alignment 0 - 0.202 bytes/cycle - 577.48 MiB/sec @ 3 ghz +Average - 0.202 bytes/cycle - 578.57 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 762.85 cycles/hash +Small key speed test - 2-byte keys - 768.42 cycles/hash +Small key speed test - 3-byte keys - 766.96 cycles/hash +Small key speed test - 4-byte keys - 766.95 cycles/hash +Small key speed test - 5-byte keys - 759.01 cycles/hash +Small key speed test - 6-byte keys - 761.20 cycles/hash +Small key speed test - 7-byte keys - 762.11 cycles/hash +Small key speed test - 8-byte keys - 791.54 cycles/hash +Small key speed test - 9-byte keys - 782.69 cycles/hash +Small key speed test - 10-byte keys - 788.86 cycles/hash +Small key speed test - 11-byte keys - 783.29 cycles/hash +Small key speed test - 12-byte keys - 791.21 cycles/hash +Small key speed test - 13-byte keys - 782.70 cycles/hash +Small key speed test - 14-byte keys - 767.69 cycles/hash +Small key speed test - 15-byte keys - 758.43 cycles/hash +Small key speed test - 16-byte keys - 758.34 cycles/hash +Small key speed test - 17-byte keys - 763.90 cycles/hash +Small key speed test - 18-byte keys - 766.08 cycles/hash +Small key speed test - 19-byte keys - 765.18 cycles/hash +Small key speed test - 20-byte keys - 758.11 cycles/hash +Small key speed test - 21-byte keys - 764.73 cycles/hash +Small key speed test - 22-byte keys - 762.59 cycles/hash +Small key speed test - 23-byte keys - 764.18 cycles/hash +Small key speed test - 24-byte keys - 767.41 cycles/hash +Small key speed test - 25-byte keys - 759.22 cycles/hash +Small key speed test - 26-byte keys - 760.13 cycles/hash +Small key speed test - 27-byte keys - 761.05 cycles/hash +Small key speed test - 28-byte keys - 764.01 cycles/hash +Small key speed test - 29-byte keys - 762.39 cycles/hash +Small key speed test - 30-byte keys - 758.48 cycles/hash +Small key speed test - 31-byte keys - 763.97 cycles/hash +Small key speed test - 32-byte keys - 764.38 cycles/hash +Average 767.440 cycles/hash +Average, weighted by key length freq. 770.444 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 771.449 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/blake2b-256.txt b/doc/blake2b-256.txt index 0e8c1040..7b3ca3c3 100644 --- a/doc/blake2b-256.txt +++ b/doc/blake2b-256.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0xccda100cd44 - 0xccda100ccfc). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.209 bytes/cycle - 597.06 MiB/sec @ 3 ghz -Alignment 6 - 0.209 bytes/cycle - 597.89 MiB/sec @ 3 ghz -Alignment 5 - 0.209 bytes/cycle - 597.63 MiB/sec @ 3 ghz -Alignment 4 - 0.209 bytes/cycle - 597.89 MiB/sec @ 3 ghz -Alignment 3 - 0.209 bytes/cycle - 597.87 MiB/sec @ 3 ghz -Alignment 2 - 0.208 bytes/cycle - 595.60 MiB/sec @ 3 ghz -Alignment 1 - 0.207 bytes/cycle - 591.32 MiB/sec @ 3 ghz -Alignment 0 - 0.185 bytes/cycle - 529.05 MiB/sec @ 3 ghz -Average - 0.206 bytes/cycle - 588.04 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 744.48 cycles/hash -Small key speed test - 2-byte keys - 751.44 cycles/hash -Small key speed test - 3-byte keys - 749.51 cycles/hash -Small key speed test - 4-byte keys - 748.15 cycles/hash -Small key speed test - 5-byte keys - 743.56 cycles/hash -Small key speed test - 6-byte keys - 744.97 cycles/hash -Small key speed test - 7-byte keys - 742.13 cycles/hash -Small key speed test - 8-byte keys - 769.17 cycles/hash -Small key speed test - 9-byte keys - 772.36 cycles/hash -Small key speed test - 10-byte keys - 764.64 cycles/hash -Small key speed test - 11-byte keys - 762.07 cycles/hash -Small key speed test - 12-byte keys - 766.97 cycles/hash -Small key speed test - 13-byte keys - 764.21 cycles/hash -Small key speed test - 14-byte keys - 765.57 cycles/hash -Small key speed test - 15-byte keys - 765.41 cycles/hash -Small key speed test - 16-byte keys - 771.03 cycles/hash -Small key speed test - 17-byte keys - 772.86 cycles/hash -Small key speed test - 18-byte keys - 768.48 cycles/hash -Small key speed test - 19-byte keys - 769.67 cycles/hash -Small key speed test - 20-byte keys - 770.24 cycles/hash -Small key speed test - 21-byte keys - 769.36 cycles/hash -Small key speed test - 22-byte keys - 760.45 cycles/hash -Small key speed test - 23-byte keys - 759.89 cycles/hash -Small key speed test - 24-byte keys - 774.39 cycles/hash -Small key speed test - 25-byte keys - 761.49 cycles/hash -Small key speed test - 26-byte keys - 764.74 cycles/hash -Small key speed test - 27-byte keys - 767.61 cycles/hash -Small key speed test - 28-byte keys - 770.63 cycles/hash -Small key speed test - 29-byte keys - 765.31 cycles/hash -Small key speed test - 30-byte keys - 775.36 cycles/hash -Small key speed test - 31-byte keys - 779.89 cycles/hash -Average 763.099 cycles/hash +Alignment 7 - 0.204 bytes/cycle - 582.66 MiB/sec @ 3 ghz +Alignment 6 - 0.204 bytes/cycle - 582.68 MiB/sec @ 3 ghz +Alignment 5 - 0.204 bytes/cycle - 582.50 MiB/sec @ 3 ghz +Alignment 4 - 0.204 bytes/cycle - 582.64 MiB/sec @ 3 ghz +Alignment 3 - 0.204 bytes/cycle - 582.55 MiB/sec @ 3 ghz +Alignment 2 - 0.203 bytes/cycle - 581.89 MiB/sec @ 3 ghz +Alignment 1 - 0.204 bytes/cycle - 582.54 MiB/sec @ 3 ghz +Alignment 0 - 0.204 bytes/cycle - 582.43 MiB/sec @ 3 ghz +Average - 0.204 bytes/cycle - 582.49 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 741.67 cycles/hash +Small key speed test - 2-byte keys - 751.89 cycles/hash +Small key speed test - 3-byte keys - 750.57 cycles/hash +Small key speed test - 4-byte keys - 744.22 cycles/hash +Small key speed test - 5-byte keys - 737.41 cycles/hash +Small key speed test - 6-byte keys - 737.91 cycles/hash +Small key speed test - 7-byte keys - 738.44 cycles/hash +Small key speed test - 8-byte keys - 762.73 cycles/hash +Small key speed test - 9-byte keys - 761.67 cycles/hash +Small key speed test - 10-byte keys - 760.93 cycles/hash +Small key speed test - 11-byte keys - 759.49 cycles/hash +Small key speed test - 12-byte keys - 766.41 cycles/hash +Small key speed test - 13-byte keys - 758.61 cycles/hash +Small key speed test - 14-byte keys - 762.06 cycles/hash +Small key speed test - 15-byte keys - 759.88 cycles/hash +Small key speed test - 16-byte keys - 763.35 cycles/hash +Small key speed test - 17-byte keys - 760.25 cycles/hash +Small key speed test - 18-byte keys - 760.60 cycles/hash +Small key speed test - 19-byte keys - 762.97 cycles/hash +Small key speed test - 20-byte keys - 761.28 cycles/hash +Small key speed test - 21-byte keys - 760.50 cycles/hash +Small key speed test - 22-byte keys - 756.80 cycles/hash +Small key speed test - 23-byte keys - 762.10 cycles/hash +Small key speed test - 24-byte keys - 761.99 cycles/hash +Small key speed test - 25-byte keys - 762.22 cycles/hash +Small key speed test - 26-byte keys - 761.54 cycles/hash +Small key speed test - 27-byte keys - 760.52 cycles/hash +Small key speed test - 28-byte keys - 761.99 cycles/hash +Small key speed test - 29-byte keys - 763.03 cycles/hash +Small key speed test - 30-byte keys - 761.81 cycles/hash +Small key speed test - 31-byte keys - 765.63 cycles/hash +Small key speed test - 32-byte keys - 763.76 cycles/hash +Average 757.633 cycles/hash +Average, weighted by key length freq. 760.928 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 760.674 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/blake2b-256_64.txt b/doc/blake2b-256_64.txt index 3763380b..b261e444 100644 --- a/doc/blake2b-256_64.txt +++ b/doc/blake2b-256_64.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0xd4b53e86ed8 - 0xd4b53e86e6c). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.129 bytes/cycle - 368.73 MiB/sec @ 3 ghz -Alignment 6 - 0.129 bytes/cycle - 368.73 MiB/sec @ 3 ghz -Alignment 5 - 0.129 bytes/cycle - 368.73 MiB/sec @ 3 ghz -Alignment 4 - 0.129 bytes/cycle - 368.73 MiB/sec @ 3 ghz -Alignment 3 - 0.129 bytes/cycle - 368.73 MiB/sec @ 3 ghz -Alignment 2 - 0.129 bytes/cycle - 368.73 MiB/sec @ 3 ghz -Alignment 1 - 0.129 bytes/cycle - 368.73 MiB/sec @ 3 ghz -Alignment 0 - 0.129 bytes/cycle - 369.61 MiB/sec @ 3 ghz -Average - 0.129 bytes/cycle - 368.84 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 1177.60 cycles/hash -Small key speed test - 2-byte keys - 1181.24 cycles/hash -Small key speed test - 3-byte keys - 1181.11 cycles/hash -Small key speed test - 4-byte keys - 1182.49 cycles/hash -Small key speed test - 5-byte keys - 1182.49 cycles/hash -Small key speed test - 6-byte keys - 1182.57 cycles/hash -Small key speed test - 7-byte keys - 1182.37 cycles/hash -Small key speed test - 8-byte keys - 1204.89 cycles/hash -Small key speed test - 9-byte keys - 1202.90 cycles/hash -Small key speed test - 10-byte keys - 1202.90 cycles/hash -Small key speed test - 11-byte keys - 1202.89 cycles/hash -Small key speed test - 12-byte keys - 1202.50 cycles/hash -Small key speed test - 13-byte keys - 1202.94 cycles/hash -Small key speed test - 14-byte keys - 1202.89 cycles/hash -Small key speed test - 15-byte keys - 1202.87 cycles/hash -Small key speed test - 16-byte keys - 1200.21 cycles/hash -Small key speed test - 17-byte keys - 1204.33 cycles/hash -Small key speed test - 18-byte keys - 1202.63 cycles/hash -Small key speed test - 19-byte keys - 1202.56 cycles/hash -Small key speed test - 20-byte keys - 1205.74 cycles/hash -Small key speed test - 21-byte keys - 1202.71 cycles/hash -Small key speed test - 22-byte keys - 1202.72 cycles/hash -Small key speed test - 23-byte keys - 1202.74 cycles/hash -Small key speed test - 24-byte keys - 1203.14 cycles/hash -Small key speed test - 25-byte keys - 1202.44 cycles/hash -Small key speed test - 26-byte keys - 1202.46 cycles/hash -Small key speed test - 27-byte keys - 1202.46 cycles/hash -Small key speed test - 28-byte keys - 1202.51 cycles/hash -Small key speed test - 29-byte keys - 1202.50 cycles/hash -Small key speed test - 30-byte keys - 1202.50 cycles/hash -Small key speed test - 31-byte keys - 1202.52 cycles/hash -Average 1198.027 cycles/hash +Alignment 7 - 0.202 bytes/cycle - 579.26 MiB/sec @ 3 ghz +Alignment 6 - 0.202 bytes/cycle - 579.28 MiB/sec @ 3 ghz +Alignment 5 - 0.202 bytes/cycle - 579.27 MiB/sec @ 3 ghz +Alignment 4 - 0.202 bytes/cycle - 579.28 MiB/sec @ 3 ghz +Alignment 3 - 0.202 bytes/cycle - 579.26 MiB/sec @ 3 ghz +Alignment 2 - 0.202 bytes/cycle - 579.30 MiB/sec @ 3 ghz +Alignment 1 - 0.202 bytes/cycle - 579.28 MiB/sec @ 3 ghz +Alignment 0 - 0.202 bytes/cycle - 579.29 MiB/sec @ 3 ghz +Average - 0.202 bytes/cycle - 579.28 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 744.08 cycles/hash +Small key speed test - 2-byte keys - 742.96 cycles/hash +Small key speed test - 3-byte keys - 745.75 cycles/hash +Small key speed test - 4-byte keys - 752.87 cycles/hash +Small key speed test - 5-byte keys - 755.51 cycles/hash +Small key speed test - 6-byte keys - 763.55 cycles/hash +Small key speed test - 7-byte keys - 757.01 cycles/hash +Small key speed test - 8-byte keys - 764.13 cycles/hash +Small key speed test - 9-byte keys - 759.89 cycles/hash +Small key speed test - 10-byte keys - 767.60 cycles/hash +Small key speed test - 11-byte keys - 759.92 cycles/hash +Small key speed test - 12-byte keys - 762.00 cycles/hash +Small key speed test - 13-byte keys - 760.35 cycles/hash +Small key speed test - 14-byte keys - 761.03 cycles/hash +Small key speed test - 15-byte keys - 762.77 cycles/hash +Small key speed test - 16-byte keys - 765.27 cycles/hash +Small key speed test - 17-byte keys - 768.51 cycles/hash +Small key speed test - 18-byte keys - 767.82 cycles/hash +Small key speed test - 19-byte keys - 760.80 cycles/hash +Small key speed test - 20-byte keys - 763.82 cycles/hash +Small key speed test - 21-byte keys - 764.50 cycles/hash +Small key speed test - 22-byte keys - 762.94 cycles/hash +Small key speed test - 23-byte keys - 760.87 cycles/hash +Small key speed test - 24-byte keys - 777.56 cycles/hash +Small key speed test - 25-byte keys - 779.40 cycles/hash +Small key speed test - 26-byte keys - 778.01 cycles/hash +Small key speed test - 27-byte keys - 777.29 cycles/hash +Small key speed test - 28-byte keys - 780.21 cycles/hash +Small key speed test - 29-byte keys - 777.71 cycles/hash +Small key speed test - 30-byte keys - 776.85 cycles/hash +Small key speed test - 31-byte keys - 777.15 cycles/hash +Small key speed test - 32-byte keys - 782.70 cycles/hash +Average 765.025 cycles/hash +Average, weighted by key length freq. 765.123 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 762.826 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/blake2s-128.txt b/doc/blake2s-128.txt index e7a32ef1..f9e84858 100644 --- a/doc/blake2s-128.txt +++ b/doc/blake2s-128.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x9895a602254 - 0x9895a6021e8). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz -Alignment 6 - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz -Alignment 5 - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz -Alignment 4 - 0.077 bytes/cycle - 221.06 MiB/sec @ 3 ghz -Alignment 3 - 0.077 bytes/cycle - 221.06 MiB/sec @ 3 ghz -Alignment 2 - 0.077 bytes/cycle - 221.06 MiB/sec @ 3 ghz -Alignment 1 - 0.077 bytes/cycle - 221.06 MiB/sec @ 3 ghz -Alignment 0 - 0.077 bytes/cycle - 221.27 MiB/sec @ 3 ghz -Average - 0.077 bytes/cycle - 221.08 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 966.00 cycles/hash -Small key speed test - 2-byte keys - 970.00 cycles/hash -Small key speed test - 3-byte keys - 970.00 cycles/hash -Small key speed test - 4-byte keys - 961.00 cycles/hash -Small key speed test - 5-byte keys - 961.88 cycles/hash -Small key speed test - 6-byte keys - 961.59 cycles/hash -Small key speed test - 7-byte keys - 961.51 cycles/hash -Small key speed test - 8-byte keys - 984.74 cycles/hash -Small key speed test - 9-byte keys - 984.00 cycles/hash -Small key speed test - 10-byte keys - 984.00 cycles/hash -Small key speed test - 11-byte keys - 984.00 cycles/hash -Small key speed test - 12-byte keys - 984.80 cycles/hash -Small key speed test - 13-byte keys - 982.98 cycles/hash -Small key speed test - 14-byte keys - 982.98 cycles/hash -Small key speed test - 15-byte keys - 982.98 cycles/hash -Small key speed test - 16-byte keys - 976.83 cycles/hash -Small key speed test - 17-byte keys - 974.00 cycles/hash -Small key speed test - 18-byte keys - 974.00 cycles/hash -Small key speed test - 19-byte keys - 974.95 cycles/hash -Small key speed test - 20-byte keys - 977.38 cycles/hash -Small key speed test - 21-byte keys - 977.36 cycles/hash -Small key speed test - 22-byte keys - 977.36 cycles/hash -Small key speed test - 23-byte keys - 977.35 cycles/hash -Small key speed test - 24-byte keys - 973.00 cycles/hash -Small key speed test - 25-byte keys - 973.00 cycles/hash -Small key speed test - 26-byte keys - 973.00 cycles/hash -Small key speed test - 27-byte keys - 973.00 cycles/hash -Small key speed test - 28-byte keys - 973.00 cycles/hash -Small key speed test - 29-byte keys - 973.28 cycles/hash -Small key speed test - 30-byte keys - 973.00 cycles/hash -Small key speed test - 31-byte keys - 973.00 cycles/hash -Average 974.709 cycles/hash +Alignment 7 - 0.120 bytes/cycle - 343.24 MiB/sec @ 3 ghz +Alignment 6 - 0.120 bytes/cycle - 342.12 MiB/sec @ 3 ghz +Alignment 5 - 0.120 bytes/cycle - 342.10 MiB/sec @ 3 ghz +Alignment 4 - 0.120 bytes/cycle - 343.24 MiB/sec @ 3 ghz +Alignment 3 - 0.120 bytes/cycle - 343.24 MiB/sec @ 3 ghz +Alignment 2 - 0.120 bytes/cycle - 343.24 MiB/sec @ 3 ghz +Alignment 1 - 0.120 bytes/cycle - 343.24 MiB/sec @ 3 ghz +Alignment 0 - 0.120 bytes/cycle - 343.33 MiB/sec @ 3 ghz +Average - 0.120 bytes/cycle - 342.97 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 618.76 cycles/hash +Small key speed test - 2-byte keys - 620.18 cycles/hash +Small key speed test - 3-byte keys - 621.20 cycles/hash +Small key speed test - 4-byte keys - 619.45 cycles/hash +Small key speed test - 5-byte keys - 627.85 cycles/hash +Small key speed test - 6-byte keys - 623.64 cycles/hash +Small key speed test - 7-byte keys - 622.54 cycles/hash +Small key speed test - 8-byte keys - 640.83 cycles/hash +Small key speed test - 9-byte keys - 639.96 cycles/hash +Small key speed test - 10-byte keys - 641.56 cycles/hash +Small key speed test - 11-byte keys - 641.14 cycles/hash +Small key speed test - 12-byte keys - 642.18 cycles/hash +Small key speed test - 13-byte keys - 640.79 cycles/hash +Small key speed test - 14-byte keys - 641.05 cycles/hash +Small key speed test - 15-byte keys - 641.86 cycles/hash +Small key speed test - 16-byte keys - 629.39 cycles/hash +Small key speed test - 17-byte keys - 647.10 cycles/hash +Small key speed test - 18-byte keys - 649.18 cycles/hash +Small key speed test - 19-byte keys - 649.29 cycles/hash +Small key speed test - 20-byte keys - 642.98 cycles/hash +Small key speed test - 21-byte keys - 638.67 cycles/hash +Small key speed test - 22-byte keys - 639.40 cycles/hash +Small key speed test - 23-byte keys - 638.05 cycles/hash +Small key speed test - 24-byte keys - 640.20 cycles/hash +Small key speed test - 25-byte keys - 645.43 cycles/hash +Small key speed test - 26-byte keys - 644.98 cycles/hash +Small key speed test - 27-byte keys - 644.73 cycles/hash +Small key speed test - 28-byte keys - 643.45 cycles/hash +Small key speed test - 29-byte keys - 645.34 cycles/hash +Small key speed test - 30-byte keys - 652.75 cycles/hash +Small key speed test - 31-byte keys - 653.12 cycles/hash +Small key speed test - 32-byte keys - 655.42 cycles/hash +Average 638.826 cycles/hash +Average, weighted by key length freq. 641.703 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 635.196 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/blake2s-160.txt b/doc/blake2s-160.txt index 5ce8c0c4..e18f9871 100644 --- a/doc/blake2s-160.txt +++ b/doc/blake2s-160.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x9fa9eebce24 - 0x9fa9eebcdb8). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.077 bytes/cycle - 221.03 MiB/sec @ 3 ghz -Alignment 6 - 0.077 bytes/cycle - 221.03 MiB/sec @ 3 ghz -Alignment 5 - 0.077 bytes/cycle - 221.03 MiB/sec @ 3 ghz -Alignment 4 - 0.077 bytes/cycle - 221.04 MiB/sec @ 3 ghz -Alignment 3 - 0.077 bytes/cycle - 220.99 MiB/sec @ 3 ghz -Alignment 2 - 0.077 bytes/cycle - 220.99 MiB/sec @ 3 ghz -Alignment 1 - 0.077 bytes/cycle - 220.99 MiB/sec @ 3 ghz -Alignment 0 - 0.077 bytes/cycle - 221.36 MiB/sec @ 3 ghz -Average - 0.077 bytes/cycle - 221.06 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 978.00 cycles/hash -Small key speed test - 2-byte keys - 972.00 cycles/hash -Small key speed test - 3-byte keys - 972.59 cycles/hash -Small key speed test - 4-byte keys - 969.72 cycles/hash -Small key speed test - 5-byte keys - 973.56 cycles/hash -Small key speed test - 6-byte keys - 969.81 cycles/hash -Small key speed test - 7-byte keys - 973.61 cycles/hash -Small key speed test - 8-byte keys - 992.98 cycles/hash -Small key speed test - 9-byte keys - 987.77 cycles/hash -Small key speed test - 10-byte keys - 987.92 cycles/hash -Small key speed test - 11-byte keys - 987.92 cycles/hash -Small key speed test - 12-byte keys - 993.00 cycles/hash -Small key speed test - 13-byte keys - 991.13 cycles/hash -Small key speed test - 14-byte keys - 991.14 cycles/hash -Small key speed test - 15-byte keys - 991.14 cycles/hash -Small key speed test - 16-byte keys - 986.41 cycles/hash -Small key speed test - 17-byte keys - 985.00 cycles/hash -Small key speed test - 18-byte keys - 985.00 cycles/hash -Small key speed test - 19-byte keys - 985.00 cycles/hash -Small key speed test - 20-byte keys - 987.00 cycles/hash -Small key speed test - 21-byte keys - 987.05 cycles/hash -Small key speed test - 22-byte keys - 987.05 cycles/hash -Small key speed test - 23-byte keys - 987.04 cycles/hash -Small key speed test - 24-byte keys - 987.06 cycles/hash -Small key speed test - 25-byte keys - 987.02 cycles/hash -Small key speed test - 26-byte keys - 987.02 cycles/hash -Small key speed test - 27-byte keys - 987.02 cycles/hash -Small key speed test - 28-byte keys - 987.06 cycles/hash -Small key speed test - 29-byte keys - 987.02 cycles/hash -Small key speed test - 30-byte keys - 987.03 cycles/hash -Small key speed test - 31-byte keys - 987.03 cycles/hash -Average 984.456 cycles/hash +Alignment 7 - 0.119 bytes/cycle - 341.78 MiB/sec @ 3 ghz +Alignment 6 - 0.119 bytes/cycle - 341.77 MiB/sec @ 3 ghz +Alignment 5 - 0.119 bytes/cycle - 341.78 MiB/sec @ 3 ghz +Alignment 4 - 0.119 bytes/cycle - 341.77 MiB/sec @ 3 ghz +Alignment 3 - 0.119 bytes/cycle - 341.72 MiB/sec @ 3 ghz +Alignment 2 - 0.119 bytes/cycle - 341.76 MiB/sec @ 3 ghz +Alignment 1 - 0.119 bytes/cycle - 341.78 MiB/sec @ 3 ghz +Alignment 0 - 0.119 bytes/cycle - 341.54 MiB/sec @ 3 ghz +Average - 0.119 bytes/cycle - 341.74 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 640.15 cycles/hash +Small key speed test - 2-byte keys - 642.06 cycles/hash +Small key speed test - 3-byte keys - 642.24 cycles/hash +Small key speed test - 4-byte keys - 641.03 cycles/hash +Small key speed test - 5-byte keys - 646.11 cycles/hash +Small key speed test - 6-byte keys - 644.73 cycles/hash +Small key speed test - 7-byte keys - 644.77 cycles/hash +Small key speed test - 8-byte keys - 661.67 cycles/hash +Small key speed test - 9-byte keys - 662.72 cycles/hash +Small key speed test - 10-byte keys - 661.12 cycles/hash +Small key speed test - 11-byte keys - 661.94 cycles/hash +Small key speed test - 12-byte keys - 661.13 cycles/hash +Small key speed test - 13-byte keys - 661.98 cycles/hash +Small key speed test - 14-byte keys - 661.31 cycles/hash +Small key speed test - 15-byte keys - 661.14 cycles/hash +Small key speed test - 16-byte keys - 650.81 cycles/hash +Small key speed test - 17-byte keys - 671.35 cycles/hash +Small key speed test - 18-byte keys - 672.32 cycles/hash +Small key speed test - 19-byte keys - 670.50 cycles/hash +Small key speed test - 20-byte keys - 664.66 cycles/hash +Small key speed test - 21-byte keys - 660.61 cycles/hash +Small key speed test - 22-byte keys - 659.70 cycles/hash +Small key speed test - 23-byte keys - 658.39 cycles/hash +Small key speed test - 24-byte keys - 662.71 cycles/hash +Small key speed test - 25-byte keys - 666.23 cycles/hash +Small key speed test - 26-byte keys - 667.28 cycles/hash +Small key speed test - 27-byte keys - 666.39 cycles/hash +Small key speed test - 28-byte keys - 662.45 cycles/hash +Small key speed test - 29-byte keys - 666.63 cycles/hash +Small key speed test - 30-byte keys - 667.45 cycles/hash +Small key speed test - 31-byte keys - 666.30 cycles/hash +Small key speed test - 32-byte keys - 669.27 cycles/hash +Average 659.286 cycles/hash +Average, weighted by key length freq. 662.619 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 656.554 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/blake2s-224.txt b/doc/blake2s-224.txt index a9f07fcb..04b164a8 100644 --- a/doc/blake2s-224.txt +++ b/doc/blake2s-224.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0xa6f08318a20 - 0xa6f083189b4). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.077 bytes/cycle - 221.04 MiB/sec @ 3 ghz -Alignment 6 - 0.077 bytes/cycle - 221.04 MiB/sec @ 3 ghz -Alignment 5 - 0.077 bytes/cycle - 221.04 MiB/sec @ 3 ghz -Alignment 4 - 0.077 bytes/cycle - 221.04 MiB/sec @ 3 ghz -Alignment 3 - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz -Alignment 2 - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz -Alignment 1 - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz -Alignment 0 - 0.077 bytes/cycle - 221.27 MiB/sec @ 3 ghz -Average - 0.077 bytes/cycle - 221.07 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 970.98 cycles/hash -Small key speed test - 2-byte keys - 977.00 cycles/hash -Small key speed test - 3-byte keys - 977.00 cycles/hash -Small key speed test - 4-byte keys - 972.00 cycles/hash -Small key speed test - 5-byte keys - 972.00 cycles/hash -Small key speed test - 6-byte keys - 972.00 cycles/hash -Small key speed test - 7-byte keys - 972.28 cycles/hash -Small key speed test - 8-byte keys - 994.30 cycles/hash -Small key speed test - 9-byte keys - 988.86 cycles/hash -Small key speed test - 10-byte keys - 988.84 cycles/hash -Small key speed test - 11-byte keys - 988.86 cycles/hash -Small key speed test - 12-byte keys - 993.93 cycles/hash -Small key speed test - 13-byte keys - 994.09 cycles/hash -Small key speed test - 14-byte keys - 994.08 cycles/hash -Small key speed test - 15-byte keys - 994.08 cycles/hash -Small key speed test - 16-byte keys - 986.59 cycles/hash -Small key speed test - 17-byte keys - 985.00 cycles/hash -Small key speed test - 18-byte keys - 985.00 cycles/hash -Small key speed test - 19-byte keys - 985.00 cycles/hash -Small key speed test - 20-byte keys - 986.35 cycles/hash -Small key speed test - 21-byte keys - 986.08 cycles/hash -Small key speed test - 22-byte keys - 986.08 cycles/hash -Small key speed test - 23-byte keys - 986.07 cycles/hash -Small key speed test - 24-byte keys - 983.00 cycles/hash -Small key speed test - 25-byte keys - 984.54 cycles/hash -Small key speed test - 26-byte keys - 984.72 cycles/hash -Small key speed test - 27-byte keys - 984.71 cycles/hash -Small key speed test - 28-byte keys - 983.00 cycles/hash -Small key speed test - 29-byte keys - 984.81 cycles/hash -Small key speed test - 30-byte keys - 984.82 cycles/hash -Small key speed test - 31-byte keys - 984.81 cycles/hash -Average 984.222 cycles/hash +Alignment 7 - 0.118 bytes/cycle - 338.31 MiB/sec @ 3 ghz +Alignment 6 - 0.118 bytes/cycle - 338.34 MiB/sec @ 3 ghz +Alignment 5 - 0.118 bytes/cycle - 338.70 MiB/sec @ 3 ghz +Alignment 4 - 0.118 bytes/cycle - 338.69 MiB/sec @ 3 ghz +Alignment 3 - 0.118 bytes/cycle - 338.69 MiB/sec @ 3 ghz +Alignment 2 - 0.118 bytes/cycle - 338.70 MiB/sec @ 3 ghz +Alignment 1 - 0.118 bytes/cycle - 338.70 MiB/sec @ 3 ghz +Alignment 0 - 0.118 bytes/cycle - 338.79 MiB/sec @ 3 ghz +Average - 0.118 bytes/cycle - 338.62 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 645.93 cycles/hash +Small key speed test - 2-byte keys - 647.97 cycles/hash +Small key speed test - 3-byte keys - 648.40 cycles/hash +Small key speed test - 4-byte keys - 647.99 cycles/hash +Small key speed test - 5-byte keys - 650.82 cycles/hash +Small key speed test - 6-byte keys - 651.59 cycles/hash +Small key speed test - 7-byte keys - 651.74 cycles/hash +Small key speed test - 8-byte keys - 661.45 cycles/hash +Small key speed test - 9-byte keys - 663.14 cycles/hash +Small key speed test - 10-byte keys - 664.18 cycles/hash +Small key speed test - 11-byte keys - 669.42 cycles/hash +Small key speed test - 12-byte keys - 668.81 cycles/hash +Small key speed test - 13-byte keys - 668.99 cycles/hash +Small key speed test - 14-byte keys - 667.98 cycles/hash +Small key speed test - 15-byte keys - 662.93 cycles/hash +Small key speed test - 16-byte keys - 650.50 cycles/hash +Small key speed test - 17-byte keys - 669.58 cycles/hash +Small key speed test - 18-byte keys - 669.96 cycles/hash +Small key speed test - 19-byte keys - 669.94 cycles/hash +Small key speed test - 20-byte keys - 658.11 cycles/hash +Small key speed test - 21-byte keys - 660.00 cycles/hash +Small key speed test - 22-byte keys - 659.40 cycles/hash +Small key speed test - 23-byte keys - 664.26 cycles/hash +Small key speed test - 24-byte keys - 670.29 cycles/hash +Small key speed test - 25-byte keys - 673.28 cycles/hash +Small key speed test - 26-byte keys - 674.66 cycles/hash +Small key speed test - 27-byte keys - 667.60 cycles/hash +Small key speed test - 28-byte keys - 667.00 cycles/hash +Small key speed test - 29-byte keys - 670.45 cycles/hash +Small key speed test - 30-byte keys - 673.68 cycles/hash +Small key speed test - 31-byte keys - 673.87 cycles/hash +Small key speed test - 32-byte keys - 677.17 cycles/hash +Average 663.159 cycles/hash +Average, weighted by key length freq. 665.409 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 658.362 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/blake2s-256.txt b/doc/blake2s-256.txt index 29fe391d..e36e70ac 100644 --- a/doc/blake2s-256.txt +++ b/doc/blake2s-256.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0xae41add46fc - 0xae41add4690). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.077 bytes/cycle - 221.04 MiB/sec @ 3 ghz -Alignment 6 - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz -Alignment 5 - 0.077 bytes/cycle - 221.04 MiB/sec @ 3 ghz -Alignment 4 - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz -Alignment 3 - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz -Alignment 2 - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz -Alignment 1 - 0.077 bytes/cycle - 221.04 MiB/sec @ 3 ghz -Alignment 0 - 0.077 bytes/cycle - 221.25 MiB/sec @ 3 ghz -Average - 0.077 bytes/cycle - 221.07 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 963.00 cycles/hash -Small key speed test - 2-byte keys - 970.65 cycles/hash -Small key speed test - 3-byte keys - 970.40 cycles/hash -Small key speed test - 4-byte keys - 965.50 cycles/hash -Small key speed test - 5-byte keys - 964.97 cycles/hash -Small key speed test - 6-byte keys - 965.07 cycles/hash -Small key speed test - 7-byte keys - 963.47 cycles/hash -Small key speed test - 8-byte keys - 983.97 cycles/hash -Small key speed test - 9-byte keys - 983.00 cycles/hash -Small key speed test - 10-byte keys - 983.00 cycles/hash -Small key speed test - 11-byte keys - 983.00 cycles/hash -Small key speed test - 12-byte keys - 983.98 cycles/hash -Small key speed test - 13-byte keys - 985.24 cycles/hash -Small key speed test - 14-byte keys - 985.25 cycles/hash -Small key speed test - 15-byte keys - 985.24 cycles/hash -Small key speed test - 16-byte keys - 976.51 cycles/hash -Small key speed test - 17-byte keys - 977.63 cycles/hash -Small key speed test - 18-byte keys - 975.85 cycles/hash -Small key speed test - 19-byte keys - 976.77 cycles/hash -Small key speed test - 20-byte keys - 979.18 cycles/hash -Small key speed test - 21-byte keys - 979.22 cycles/hash -Small key speed test - 22-byte keys - 979.22 cycles/hash -Small key speed test - 23-byte keys - 979.22 cycles/hash -Small key speed test - 24-byte keys - 977.16 cycles/hash -Small key speed test - 25-byte keys - 977.14 cycles/hash -Small key speed test - 26-byte keys - 977.14 cycles/hash -Small key speed test - 27-byte keys - 977.14 cycles/hash -Small key speed test - 28-byte keys - 977.16 cycles/hash -Small key speed test - 29-byte keys - 977.14 cycles/hash -Small key speed test - 30-byte keys - 977.14 cycles/hash -Small key speed test - 31-byte keys - 977.14 cycles/hash -Average 976.661 cycles/hash +Alignment 7 - 0.119 bytes/cycle - 341.61 MiB/sec @ 3 ghz +Alignment 6 - 0.119 bytes/cycle - 341.64 MiB/sec @ 3 ghz +Alignment 5 - 0.119 bytes/cycle - 341.68 MiB/sec @ 3 ghz +Alignment 4 - 0.119 bytes/cycle - 341.66 MiB/sec @ 3 ghz +Alignment 3 - 0.119 bytes/cycle - 341.60 MiB/sec @ 3 ghz +Alignment 2 - 0.119 bytes/cycle - 341.65 MiB/sec @ 3 ghz +Alignment 1 - 0.119 bytes/cycle - 341.64 MiB/sec @ 3 ghz +Alignment 0 - 0.119 bytes/cycle - 341.72 MiB/sec @ 3 ghz +Average - 0.119 bytes/cycle - 341.65 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 627.32 cycles/hash +Small key speed test - 2-byte keys - 630.88 cycles/hash +Small key speed test - 3-byte keys - 630.87 cycles/hash +Small key speed test - 4-byte keys - 627.29 cycles/hash +Small key speed test - 5-byte keys - 634.24 cycles/hash +Small key speed test - 6-byte keys - 636.22 cycles/hash +Small key speed test - 7-byte keys - 635.78 cycles/hash +Small key speed test - 8-byte keys - 645.62 cycles/hash +Small key speed test - 9-byte keys - 649.18 cycles/hash +Small key speed test - 10-byte keys - 649.49 cycles/hash +Small key speed test - 11-byte keys - 649.46 cycles/hash +Small key speed test - 12-byte keys - 649.13 cycles/hash +Small key speed test - 13-byte keys - 649.13 cycles/hash +Small key speed test - 14-byte keys - 649.42 cycles/hash +Small key speed test - 15-byte keys - 649.51 cycles/hash +Small key speed test - 16-byte keys - 647.98 cycles/hash +Small key speed test - 17-byte keys - 651.77 cycles/hash +Small key speed test - 18-byte keys - 649.52 cycles/hash +Small key speed test - 19-byte keys - 651.78 cycles/hash +Small key speed test - 20-byte keys - 652.20 cycles/hash +Small key speed test - 21-byte keys - 650.49 cycles/hash +Small key speed test - 22-byte keys - 650.63 cycles/hash +Small key speed test - 23-byte keys - 650.64 cycles/hash +Small key speed test - 24-byte keys - 647.54 cycles/hash +Small key speed test - 25-byte keys - 649.15 cycles/hash +Small key speed test - 26-byte keys - 646.30 cycles/hash +Small key speed test - 27-byte keys - 645.98 cycles/hash +Small key speed test - 28-byte keys - 655.95 cycles/hash +Small key speed test - 29-byte keys - 646.03 cycles/hash +Small key speed test - 30-byte keys - 645.84 cycles/hash +Small key speed test - 31-byte keys - 648.16 cycles/hash +Small key speed test - 32-byte keys - 661.09 cycles/hash +Average 645.769 cycles/hash +Average, weighted by key length freq. 649.359 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 647.666 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/blake2s-256_64.txt b/doc/blake2s-256_64.txt index c5c7ae78..4e0c5e3c 100644 --- a/doc/blake2s-256_64.txt +++ b/doc/blake2s-256_64.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0xb568ea52df4 - 0xb568ea52d88). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.077 bytes/cycle - 221.01 MiB/sec @ 3 ghz -Alignment 6 - 0.077 bytes/cycle - 221.01 MiB/sec @ 3 ghz -Alignment 5 - 0.077 bytes/cycle - 221.01 MiB/sec @ 3 ghz -Alignment 4 - 0.077 bytes/cycle - 221.02 MiB/sec @ 3 ghz -Alignment 3 - 0.077 bytes/cycle - 221.00 MiB/sec @ 3 ghz -Alignment 2 - 0.077 bytes/cycle - 220.99 MiB/sec @ 3 ghz -Alignment 1 - 0.077 bytes/cycle - 220.99 MiB/sec @ 3 ghz -Alignment 0 - 0.077 bytes/cycle - 221.35 MiB/sec @ 3 ghz -Average - 0.077 bytes/cycle - 221.05 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 1031.40 cycles/hash -Small key speed test - 2-byte keys - 1029.42 cycles/hash -Small key speed test - 3-byte keys - 1029.47 cycles/hash -Small key speed test - 4-byte keys - 1026.45 cycles/hash -Small key speed test - 5-byte keys - 1029.94 cycles/hash -Small key speed test - 6-byte keys - 1029.92 cycles/hash -Small key speed test - 7-byte keys - 1030.84 cycles/hash -Small key speed test - 8-byte keys - 1051.25 cycles/hash -Small key speed test - 9-byte keys - 1051.55 cycles/hash -Small key speed test - 10-byte keys - 1051.50 cycles/hash -Small key speed test - 11-byte keys - 1051.85 cycles/hash -Small key speed test - 12-byte keys - 1051.59 cycles/hash -Small key speed test - 13-byte keys - 1051.49 cycles/hash -Small key speed test - 14-byte keys - 1051.55 cycles/hash -Small key speed test - 15-byte keys - 1051.85 cycles/hash -Small key speed test - 16-byte keys - 1050.58 cycles/hash -Small key speed test - 17-byte keys - 1050.54 cycles/hash -Small key speed test - 18-byte keys - 1050.53 cycles/hash -Small key speed test - 19-byte keys - 1050.60 cycles/hash -Small key speed test - 20-byte keys - 1050.66 cycles/hash -Small key speed test - 21-byte keys - 1050.56 cycles/hash -Small key speed test - 22-byte keys - 1050.48 cycles/hash -Small key speed test - 23-byte keys - 1050.50 cycles/hash -Small key speed test - 24-byte keys - 1050.58 cycles/hash -Small key speed test - 25-byte keys - 1050.50 cycles/hash -Small key speed test - 26-byte keys - 1050.46 cycles/hash -Small key speed test - 27-byte keys - 1050.50 cycles/hash -Small key speed test - 28-byte keys - 1050.63 cycles/hash -Small key speed test - 29-byte keys - 1050.43 cycles/hash -Small key speed test - 30-byte keys - 1050.50 cycles/hash -Small key speed test - 31-byte keys - 1050.49 cycles/hash -Average 1046.084 cycles/hash +Alignment 7 - 0.118 bytes/cycle - 338.76 MiB/sec @ 3 ghz +Alignment 6 - 0.118 bytes/cycle - 338.77 MiB/sec @ 3 ghz +Alignment 5 - 0.118 bytes/cycle - 338.76 MiB/sec @ 3 ghz +Alignment 4 - 0.118 bytes/cycle - 338.76 MiB/sec @ 3 ghz +Alignment 3 - 0.118 bytes/cycle - 338.76 MiB/sec @ 3 ghz +Alignment 2 - 0.118 bytes/cycle - 338.91 MiB/sec @ 3 ghz +Alignment 1 - 0.117 bytes/cycle - 336.11 MiB/sec @ 3 ghz +Alignment 0 - 0.118 bytes/cycle - 338.84 MiB/sec @ 3 ghz +Average - 0.118 bytes/cycle - 338.46 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 642.21 cycles/hash +Small key speed test - 2-byte keys - 647.20 cycles/hash +Small key speed test - 3-byte keys - 650.00 cycles/hash +Small key speed test - 4-byte keys - 646.23 cycles/hash +Small key speed test - 5-byte keys - 651.76 cycles/hash +Small key speed test - 6-byte keys - 651.44 cycles/hash +Small key speed test - 7-byte keys - 659.12 cycles/hash +Small key speed test - 8-byte keys - 679.91 cycles/hash +Small key speed test - 9-byte keys - 671.89 cycles/hash +Small key speed test - 10-byte keys - 678.53 cycles/hash +Small key speed test - 11-byte keys - 674.00 cycles/hash +Small key speed test - 12-byte keys - 674.13 cycles/hash +Small key speed test - 13-byte keys - 681.29 cycles/hash +Small key speed test - 14-byte keys - 686.86 cycles/hash +Small key speed test - 15-byte keys - 687.08 cycles/hash +Small key speed test - 16-byte keys - 684.20 cycles/hash +Small key speed test - 17-byte keys - 674.16 cycles/hash +Small key speed test - 18-byte keys - 675.36 cycles/hash +Small key speed test - 19-byte keys - 686.71 cycles/hash +Small key speed test - 20-byte keys - 678.05 cycles/hash +Small key speed test - 21-byte keys - 670.29 cycles/hash +Small key speed test - 22-byte keys - 683.23 cycles/hash +Small key speed test - 23-byte keys - 677.69 cycles/hash +Small key speed test - 24-byte keys - 671.31 cycles/hash +Small key speed test - 25-byte keys - 673.83 cycles/hash +Small key speed test - 26-byte keys - 682.39 cycles/hash +Small key speed test - 27-byte keys - 676.07 cycles/hash +Small key speed test - 28-byte keys - 673.70 cycles/hash +Small key speed test - 29-byte keys - 679.05 cycles/hash +Small key speed test - 30-byte keys - 685.65 cycles/hash +Small key speed test - 31-byte keys - 685.81 cycles/hash +Small key speed test - 32-byte keys - 687.87 cycles/hash +Average 672.720 cycles/hash +Average, weighted by key length freq. 678.748 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 677.625 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/blake3_c.txt b/doc/blake3_c.txt index 8162ef58..26f9f6df 100644 --- a/doc/blake3_c.txt +++ b/doc/blake3_c.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x94d62935ab0 - 0x94d62935a44). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.449 bytes/cycle - 1283.43 MiB/sec @ 3 ghz -Alignment 6 - 0.449 bytes/cycle - 1283.44 MiB/sec @ 3 ghz -Alignment 5 - 0.449 bytes/cycle - 1283.45 MiB/sec @ 3 ghz -Alignment 4 - 0.449 bytes/cycle - 1284.02 MiB/sec @ 3 ghz -Alignment 3 - 0.449 bytes/cycle - 1283.43 MiB/sec @ 3 ghz -Alignment 2 - 0.449 bytes/cycle - 1283.46 MiB/sec @ 3 ghz -Alignment 1 - 0.449 bytes/cycle - 1283.45 MiB/sec @ 3 ghz -Alignment 0 - 0.455 bytes/cycle - 1302.57 MiB/sec @ 3 ghz -Average - 0.449 bytes/cycle - 1285.91 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 331.00 cycles/hash -Small key speed test - 2-byte keys - 332.00 cycles/hash -Small key speed test - 3-byte keys - 332.00 cycles/hash -Small key speed test - 4-byte keys - 332.84 cycles/hash -Small key speed test - 5-byte keys - 332.84 cycles/hash -Small key speed test - 6-byte keys - 332.84 cycles/hash -Small key speed test - 7-byte keys - 332.86 cycles/hash -Small key speed test - 8-byte keys - 341.29 cycles/hash -Small key speed test - 9-byte keys - 341.50 cycles/hash -Small key speed test - 10-byte keys - 341.50 cycles/hash -Small key speed test - 11-byte keys - 341.50 cycles/hash -Small key speed test - 12-byte keys - 340.00 cycles/hash -Small key speed test - 13-byte keys - 341.50 cycles/hash -Small key speed test - 14-byte keys - 341.50 cycles/hash -Small key speed test - 15-byte keys - 341.50 cycles/hash -Small key speed test - 16-byte keys - 340.00 cycles/hash -Small key speed test - 17-byte keys - 341.50 cycles/hash -Small key speed test - 18-byte keys - 353.17 cycles/hash -Small key speed test - 19-byte keys - 343.43 cycles/hash -Small key speed test - 20-byte keys - 340.00 cycles/hash -Small key speed test - 21-byte keys - 341.50 cycles/hash -Small key speed test - 22-byte keys - 341.50 cycles/hash -Small key speed test - 23-byte keys - 341.50 cycles/hash -Small key speed test - 24-byte keys - 340.00 cycles/hash -Small key speed test - 25-byte keys - 342.00 cycles/hash -Small key speed test - 26-byte keys - 342.00 cycles/hash -Small key speed test - 27-byte keys - 342.00 cycles/hash -Small key speed test - 28-byte keys - 341.00 cycles/hash -Small key speed test - 29-byte keys - 342.00 cycles/hash -Small key speed test - 30-byte keys - 342.00 cycles/hash -Small key speed test - 31-byte keys - 350.00 cycles/hash -Average 340.009 cycles/hash +Alignment 7 - 0.452 bytes/cycle - 1292.25 MiB/sec @ 3 ghz +Alignment 6 - 0.452 bytes/cycle - 1292.20 MiB/sec @ 3 ghz +Alignment 5 - 0.453 bytes/cycle - 1297.25 MiB/sec @ 3 ghz +Alignment 4 - 0.454 bytes/cycle - 1300.28 MiB/sec @ 3 ghz +Alignment 3 - 0.454 bytes/cycle - 1299.73 MiB/sec @ 3 ghz +Alignment 2 - 0.454 bytes/cycle - 1299.64 MiB/sec @ 3 ghz +Alignment 1 - 0.454 bytes/cycle - 1299.30 MiB/sec @ 3 ghz +Alignment 0 - 0.456 bytes/cycle - 1303.66 MiB/sec @ 3 ghz +Average - 0.454 bytes/cycle - 1298.04 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 346.69 cycles/hash +Small key speed test - 2-byte keys - 350.69 cycles/hash +Small key speed test - 3-byte keys - 350.27 cycles/hash +Small key speed test - 4-byte keys - 351.05 cycles/hash +Small key speed test - 5-byte keys - 352.26 cycles/hash +Small key speed test - 6-byte keys - 353.12 cycles/hash +Small key speed test - 7-byte keys - 352.16 cycles/hash +Small key speed test - 8-byte keys - 347.18 cycles/hash +Small key speed test - 9-byte keys - 352.79 cycles/hash +Small key speed test - 10-byte keys - 353.09 cycles/hash +Small key speed test - 11-byte keys - 352.76 cycles/hash +Small key speed test - 12-byte keys - 352.86 cycles/hash +Small key speed test - 13-byte keys - 353.16 cycles/hash +Small key speed test - 14-byte keys - 352.95 cycles/hash +Small key speed test - 15-byte keys - 353.27 cycles/hash +Small key speed test - 16-byte keys - 352.62 cycles/hash +Small key speed test - 17-byte keys - 352.69 cycles/hash +Small key speed test - 18-byte keys - 352.67 cycles/hash +Small key speed test - 19-byte keys - 352.81 cycles/hash +Small key speed test - 20-byte keys - 352.78 cycles/hash +Small key speed test - 21-byte keys - 358.23 cycles/hash +Small key speed test - 22-byte keys - 358.08 cycles/hash +Small key speed test - 23-byte keys - 358.34 cycles/hash +Small key speed test - 24-byte keys - 359.10 cycles/hash +Small key speed test - 25-byte keys - 359.16 cycles/hash +Small key speed test - 26-byte keys - 358.98 cycles/hash +Small key speed test - 27-byte keys - 359.02 cycles/hash +Small key speed test - 28-byte keys - 358.96 cycles/hash +Small key speed test - 29-byte keys - 359.10 cycles/hash +Small key speed test - 30-byte keys - 359.27 cycles/hash +Small key speed test - 31-byte keys - 354.04 cycles/hash +Small key speed test - 32-byte keys - 355.77 cycles/hash +Average 354.247 cycles/hash +Average, weighted by key length freq. 353.982 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 352.567 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/crc32.txt b/doc/crc32.txt index 7dc400e5..b76fac11 100644 --- a/doc/crc32.txt +++ b/doc/crc32.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x131aba4df34 - 0x131aba4dec8). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.137 bytes/cycle - 392.12 MiB/sec @ 3 ghz -Alignment 6 - 0.137 bytes/cycle - 392.07 MiB/sec @ 3 ghz -Alignment 5 - 0.137 bytes/cycle - 392.12 MiB/sec @ 3 ghz -Alignment 4 - 0.137 bytes/cycle - 392.08 MiB/sec @ 3 ghz -Alignment 3 - 0.137 bytes/cycle - 392.12 MiB/sec @ 3 ghz -Alignment 2 - 0.137 bytes/cycle - 392.07 MiB/sec @ 3 ghz -Alignment 1 - 0.137 bytes/cycle - 392.12 MiB/sec @ 3 ghz -Alignment 0 - 0.137 bytes/cycle - 392.08 MiB/sec @ 3 ghz -Average - 0.137 bytes/cycle - 392.10 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 20.72 cycles/hash -Small key speed test - 2-byte keys - 27.60 cycles/hash -Small key speed test - 3-byte keys - 35.00 cycles/hash -Small key speed test - 4-byte keys - 43.00 cycles/hash -Small key speed test - 5-byte keys - 50.00 cycles/hash -Small key speed test - 6-byte keys - 57.00 cycles/hash -Small key speed test - 7-byte keys - 65.00 cycles/hash -Small key speed test - 8-byte keys - 71.99 cycles/hash -Small key speed test - 9-byte keys - 79.00 cycles/hash -Small key speed test - 10-byte keys - 86.00 cycles/hash -Small key speed test - 11-byte keys - 93.00 cycles/hash -Small key speed test - 12-byte keys - 100.52 cycles/hash -Small key speed test - 13-byte keys - 108.00 cycles/hash -Small key speed test - 14-byte keys - 115.84 cycles/hash -Small key speed test - 15-byte keys - 123.00 cycles/hash -Small key speed test - 16-byte keys - 129.00 cycles/hash -Small key speed test - 17-byte keys - 137.00 cycles/hash -Small key speed test - 18-byte keys - 145.00 cycles/hash -Small key speed test - 19-byte keys - 157.00 cycles/hash -Small key speed test - 20-byte keys - 165.00 cycles/hash -Small key speed test - 21-byte keys - 172.00 cycles/hash -Small key speed test - 22-byte keys - 180.00 cycles/hash -Small key speed test - 23-byte keys - 187.77 cycles/hash -Small key speed test - 24-byte keys - 194.00 cycles/hash -Small key speed test - 25-byte keys - 202.00 cycles/hash -Small key speed test - 26-byte keys - 209.24 cycles/hash -Small key speed test - 27-byte keys - 210.23 cycles/hash -Small key speed test - 28-byte keys - 217.91 cycles/hash -Small key speed test - 29-byte keys - 226.19 cycles/hash -Small key speed test - 30-byte keys - 232.21 cycles/hash -Small key speed test - 31-byte keys - 240.00 cycles/hash -Average 131.620 cycles/hash +Alignment 7 - 0.111 bytes/cycle - 318.19 MiB/sec @ 3 ghz +Alignment 6 - 0.131 bytes/cycle - 373.94 MiB/sec @ 3 ghz +Alignment 5 - 0.130 bytes/cycle - 370.91 MiB/sec @ 3 ghz +Alignment 4 - 0.134 bytes/cycle - 382.08 MiB/sec @ 3 ghz +Alignment 3 - 0.135 bytes/cycle - 386.63 MiB/sec @ 3 ghz +Alignment 2 - 0.134 bytes/cycle - 383.33 MiB/sec @ 3 ghz +Alignment 1 - 0.132 bytes/cycle - 378.05 MiB/sec @ 3 ghz +Alignment 0 - 0.128 bytes/cycle - 365.91 MiB/sec @ 3 ghz +Average - 0.129 bytes/cycle - 369.88 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 22.70 cycles/hash +Small key speed test - 2-byte keys - 29.61 cycles/hash +Small key speed test - 3-byte keys - 38.48 cycles/hash +Small key speed test - 4-byte keys - 45.26 cycles/hash +Small key speed test - 5-byte keys - 53.03 cycles/hash +Small key speed test - 6-byte keys - 61.35 cycles/hash +Small key speed test - 7-byte keys - 68.53 cycles/hash +Small key speed test - 8-byte keys - 75.65 cycles/hash +Small key speed test - 9-byte keys - 83.13 cycles/hash +Small key speed test - 10-byte keys - 90.00 cycles/hash +Small key speed test - 11-byte keys - 103.36 cycles/hash +Small key speed test - 12-byte keys - 108.74 cycles/hash +Small key speed test - 13-byte keys - 117.42 cycles/hash +Small key speed test - 14-byte keys - 127.12 cycles/hash +Small key speed test - 15-byte keys - 133.18 cycles/hash +Small key speed test - 16-byte keys - 140.07 cycles/hash +Small key speed test - 17-byte keys - 146.07 cycles/hash +Small key speed test - 18-byte keys - 151.65 cycles/hash +Small key speed test - 19-byte keys - 160.28 cycles/hash +Small key speed test - 20-byte keys - 173.64 cycles/hash +Small key speed test - 21-byte keys - 175.22 cycles/hash +Small key speed test - 22-byte keys - 182.39 cycles/hash +Small key speed test - 23-byte keys - 191.72 cycles/hash +Small key speed test - 24-byte keys - 198.52 cycles/hash +Small key speed test - 25-byte keys - 206.45 cycles/hash +Small key speed test - 26-byte keys - 215.50 cycles/hash +Small key speed test - 27-byte keys - 225.06 cycles/hash +Small key speed test - 28-byte keys - 230.61 cycles/hash +Small key speed test - 29-byte keys - 240.00 cycles/hash +Small key speed test - 30-byte keys - 246.80 cycles/hash +Small key speed test - 31-byte keys - 252.89 cycles/hash +Small key speed test - 32-byte keys - 260.03 cycles/hash +Average 142.327 cycles/hash +Average, weighted by key length freq. 142.497 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 111.392 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/crc32_hw.txt b/doc/crc32_hw.txt index 7c0b0e33..ed71a437 100644 --- a/doc/crc32_hw.txt +++ b/doc/crc32_hw.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x13308c57fee8 - 0x13308c57fea0). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 2.180 bytes/cycle - 6238.39 MiB/sec @ 3 ghz -Alignment 6 - 2.184 bytes/cycle - 6247.14 MiB/sec @ 3 ghz -Alignment 5 - 2.183 bytes/cycle - 6246.94 MiB/sec @ 3 ghz -Alignment 4 - 2.183 bytes/cycle - 6246.73 MiB/sec @ 3 ghz -Alignment 3 - 2.183 bytes/cycle - 6246.61 MiB/sec @ 3 ghz -Alignment 2 - 2.183 bytes/cycle - 6246.60 MiB/sec @ 3 ghz -Alignment 1 - 2.179 bytes/cycle - 6235.06 MiB/sec @ 3 ghz -Alignment 0 - 2.184 bytes/cycle - 6247.54 MiB/sec @ 3 ghz -Average - 2.183 bytes/cycle - 6244.38 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 26.78 cycles/hash -Small key speed test - 2-byte keys - 29.48 cycles/hash -Small key speed test - 3-byte keys - 32.96 cycles/hash -Small key speed test - 4-byte keys - 32.88 cycles/hash -Small key speed test - 5-byte keys - 37.43 cycles/hash -Small key speed test - 6-byte keys - 38.22 cycles/hash -Small key speed test - 7-byte keys - 40.34 cycles/hash -Small key speed test - 8-byte keys - 32.98 cycles/hash -Small key speed test - 9-byte keys - 37.29 cycles/hash -Small key speed test - 10-byte keys - 37.94 cycles/hash -Small key speed test - 11-byte keys - 41.93 cycles/hash -Small key speed test - 12-byte keys - 34.98 cycles/hash -Small key speed test - 13-byte keys - 41.15 cycles/hash -Small key speed test - 14-byte keys - 41.53 cycles/hash -Small key speed test - 15-byte keys - 44.02 cycles/hash -Small key speed test - 16-byte keys - 39.28 cycles/hash -Small key speed test - 17-byte keys - 43.58 cycles/hash -Small key speed test - 18-byte keys - 43.97 cycles/hash -Small key speed test - 19-byte keys - 46.26 cycles/hash -Small key speed test - 20-byte keys - 38.96 cycles/hash -Small key speed test - 21-byte keys - 44.33 cycles/hash -Small key speed test - 22-byte keys - 44.83 cycles/hash -Small key speed test - 23-byte keys - 48.73 cycles/hash -Small key speed test - 24-byte keys - 42.37 cycles/hash -Small key speed test - 25-byte keys - 47.05 cycles/hash -Small key speed test - 26-byte keys - 47.53 cycles/hash -Small key speed test - 27-byte keys - 49.05 cycles/hash -Small key speed test - 28-byte keys - 43.00 cycles/hash -Small key speed test - 29-byte keys - 47.98 cycles/hash -Small key speed test - 30-byte keys - 48.87 cycles/hash -Small key speed test - 31-byte keys - 52.45 cycles/hash -Average 41.230 cycles/hash +Alignment 7 - 2.188 bytes/cycle - 6261.33 MiB/sec @ 3 ghz +Alignment 6 - 1.807 bytes/cycle - 5169.63 MiB/sec @ 3 ghz +Alignment 5 - 1.769 bytes/cycle - 5062.08 MiB/sec @ 3 ghz +Alignment 4 - 1.769 bytes/cycle - 5061.94 MiB/sec @ 3 ghz +Alignment 3 - 1.769 bytes/cycle - 5061.68 MiB/sec @ 3 ghz +Alignment 2 - 1.785 bytes/cycle - 5105.98 MiB/sec @ 3 ghz +Alignment 1 - 2.202 bytes/cycle - 6300.93 MiB/sec @ 3 ghz +Alignment 0 - 2.195 bytes/cycle - 6278.77 MiB/sec @ 3 ghz +Average - 1.936 bytes/cycle - 5537.79 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 26.52 cycles/hash +Small key speed test - 2-byte keys - 29.27 cycles/hash +Small key speed test - 3-byte keys - 32.83 cycles/hash +Small key speed test - 4-byte keys - 32.76 cycles/hash +Small key speed test - 5-byte keys - 37.19 cycles/hash +Small key speed test - 6-byte keys - 37.41 cycles/hash +Small key speed test - 7-byte keys - 40.15 cycles/hash +Small key speed test - 8-byte keys - 32.61 cycles/hash +Small key speed test - 9-byte keys - 36.93 cycles/hash +Small key speed test - 10-byte keys - 37.43 cycles/hash +Small key speed test - 11-byte keys - 41.59 cycles/hash +Small key speed test - 12-byte keys - 34.62 cycles/hash +Small key speed test - 13-byte keys - 40.65 cycles/hash +Small key speed test - 14-byte keys - 41.10 cycles/hash +Small key speed test - 15-byte keys - 43.64 cycles/hash +Small key speed test - 16-byte keys - 38.96 cycles/hash +Small key speed test - 17-byte keys - 42.59 cycles/hash +Small key speed test - 18-byte keys - 43.08 cycles/hash +Small key speed test - 19-byte keys - 45.98 cycles/hash +Small key speed test - 20-byte keys - 38.50 cycles/hash +Small key speed test - 21-byte keys - 44.11 cycles/hash +Small key speed test - 22-byte keys - 44.49 cycles/hash +Small key speed test - 23-byte keys - 48.28 cycles/hash +Small key speed test - 24-byte keys - 42.02 cycles/hash +Small key speed test - 25-byte keys - 46.09 cycles/hash +Small key speed test - 26-byte keys - 47.06 cycles/hash +Small key speed test - 27-byte keys - 48.58 cycles/hash +Small key speed test - 28-byte keys - 41.61 cycles/hash +Small key speed test - 29-byte keys - 47.03 cycles/hash +Small key speed test - 30-byte keys - 48.28 cycles/hash +Small key speed test - 31-byte keys - 51.84 cycles/hash +Small key speed test - 32-byte keys - 42.37 cycles/hash +Average 40.799 cycles/hash +Average, weighted by key length freq. 41.411 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 38.392 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/crc32_hw1.txt b/doc/crc32_hw1.txt index 7944620d..724463ea 100644 --- a/doc/crc32_hw1.txt +++ b/doc/crc32_hw1.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x1343d7887fe4 - 0x1343d7887f78). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 2.650 bytes/cycle - 7580.95 MiB/sec @ 3 ghz -Alignment 6 - 2.652 bytes/cycle - 7587.64 MiB/sec @ 3 ghz -Alignment 5 - 2.646 bytes/cycle - 7570.42 MiB/sec @ 3 ghz -Alignment 4 - 2.650 bytes/cycle - 7580.64 MiB/sec @ 3 ghz -Alignment 3 - 2.650 bytes/cycle - 7581.03 MiB/sec @ 3 ghz -Alignment 2 - 2.639 bytes/cycle - 7550.38 MiB/sec @ 3 ghz -Alignment 1 - 2.637 bytes/cycle - 7545.67 MiB/sec @ 3 ghz -Alignment 0 - 2.642 bytes/cycle - 7557.60 MiB/sec @ 3 ghz -Average - 2.646 bytes/cycle - 7569.29 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 28.17 cycles/hash -Small key speed test - 2-byte keys - 30.45 cycles/hash -Small key speed test - 3-byte keys - 32.95 cycles/hash -Small key speed test - 4-byte keys - 35.86 cycles/hash -Small key speed test - 5-byte keys - 48.78 cycles/hash -Small key speed test - 6-byte keys - 48.50 cycles/hash -Small key speed test - 7-byte keys - 47.68 cycles/hash -Small key speed test - 8-byte keys - 40.89 cycles/hash -Small key speed test - 9-byte keys - 44.09 cycles/hash -Small key speed test - 10-byte keys - 48.84 cycles/hash -Small key speed test - 11-byte keys - 50.46 cycles/hash -Small key speed test - 12-byte keys - 43.69 cycles/hash -Small key speed test - 13-byte keys - 46.88 cycles/hash -Small key speed test - 14-byte keys - 52.28 cycles/hash -Small key speed test - 15-byte keys - 52.37 cycles/hash -Small key speed test - 16-byte keys - 45.09 cycles/hash -Small key speed test - 17-byte keys - 49.21 cycles/hash -Small key speed test - 18-byte keys - 53.69 cycles/hash -Small key speed test - 19-byte keys - 56.12 cycles/hash -Small key speed test - 20-byte keys - 48.91 cycles/hash -Small key speed test - 21-byte keys - 52.08 cycles/hash -Small key speed test - 22-byte keys - 57.20 cycles/hash -Small key speed test - 23-byte keys - 58.25 cycles/hash -Small key speed test - 24-byte keys - 49.71 cycles/hash -Small key speed test - 25-byte keys - 53.45 cycles/hash -Small key speed test - 26-byte keys - 57.56 cycles/hash -Small key speed test - 27-byte keys - 60.31 cycles/hash -Small key speed test - 28-byte keys - 51.89 cycles/hash -Small key speed test - 29-byte keys - 54.83 cycles/hash -Small key speed test - 30-byte keys - 59.83 cycles/hash -Small key speed test - 31-byte keys - 61.16 cycles/hash -Average 49.071 cycles/hash +Alignment 7 - 2.669 bytes/cycle - 7634.73 MiB/sec @ 3 ghz +Alignment 6 - 2.668 bytes/cycle - 7634.50 MiB/sec @ 3 ghz +Alignment 5 - 2.667 bytes/cycle - 7630.51 MiB/sec @ 3 ghz +Alignment 4 - 2.666 bytes/cycle - 7626.28 MiB/sec @ 3 ghz +Alignment 3 - 2.661 bytes/cycle - 7612.20 MiB/sec @ 3 ghz +Alignment 2 - 2.662 bytes/cycle - 7616.15 MiB/sec @ 3 ghz +Alignment 1 - 2.665 bytes/cycle - 7624.92 MiB/sec @ 3 ghz +Alignment 0 - 2.667 bytes/cycle - 7630.04 MiB/sec @ 3 ghz +Average - 2.666 bytes/cycle - 7626.17 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 28.65 cycles/hash +Small key speed test - 2-byte keys - 30.46 cycles/hash +Small key speed test - 3-byte keys - 34.12 cycles/hash +Small key speed test - 4-byte keys - 36.99 cycles/hash +Small key speed test - 5-byte keys - 41.72 cycles/hash +Small key speed test - 6-byte keys - 43.90 cycles/hash +Small key speed test - 7-byte keys - 47.40 cycles/hash +Small key speed test - 8-byte keys - 40.18 cycles/hash +Small key speed test - 9-byte keys - 43.74 cycles/hash +Small key speed test - 10-byte keys - 48.66 cycles/hash +Small key speed test - 11-byte keys - 50.23 cycles/hash +Small key speed test - 12-byte keys - 43.39 cycles/hash +Small key speed test - 13-byte keys - 47.03 cycles/hash +Small key speed test - 14-byte keys - 51.88 cycles/hash +Small key speed test - 15-byte keys - 51.94 cycles/hash +Small key speed test - 16-byte keys - 44.76 cycles/hash +Small key speed test - 17-byte keys - 48.46 cycles/hash +Small key speed test - 18-byte keys - 65.00 cycles/hash +Small key speed test - 19-byte keys - 68.62 cycles/hash +Small key speed test - 20-byte keys - 60.60 cycles/hash +Small key speed test - 21-byte keys - 62.72 cycles/hash +Small key speed test - 22-byte keys - 66.59 cycles/hash +Small key speed test - 23-byte keys - 56.17 cycles/hash +Small key speed test - 24-byte keys - 48.47 cycles/hash +Small key speed test - 25-byte keys - 53.00 cycles/hash +Small key speed test - 26-byte keys - 56.97 cycles/hash +Small key speed test - 27-byte keys - 60.01 cycles/hash +Small key speed test - 28-byte keys - 52.05 cycles/hash +Small key speed test - 29-byte keys - 53.61 cycles/hash +Small key speed test - 30-byte keys - 58.99 cycles/hash +Small key speed test - 31-byte keys - 58.95 cycles/hash +Small key speed test - 32-byte keys - 51.30 cycles/hash +Average 50.206 cycles/hash +Average, weighted by key length freq. 52.507 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 45.432 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/crc32_pclmul.txt b/doc/crc32_pclmul.txt index 6910b823..1b7294dd 100644 --- a/doc/crc32_pclmul.txt +++ b/doc/crc32_pclmul.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest . FAIL !!!!! [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x134e82784df8 - 0x134e82784d8c). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 2.767 bytes/cycle - 7915.39 MiB/sec @ 3 ghz -Alignment 6 - 2.723 bytes/cycle - 7791.36 MiB/sec @ 3 ghz -Alignment 5 - 2.714 bytes/cycle - 7765.22 MiB/sec @ 3 ghz -Alignment 4 - 2.695 bytes/cycle - 7711.13 MiB/sec @ 3 ghz -Alignment 3 - 2.755 bytes/cycle - 7883.33 MiB/sec @ 3 ghz -Alignment 2 - 2.760 bytes/cycle - 7897.43 MiB/sec @ 3 ghz -Alignment 1 - 2.721 bytes/cycle - 7783.42 MiB/sec @ 3 ghz -Alignment 0 - 4.361 bytes/cycle - 12477.43 MiB/sec @ 3 ghz -Average - 2.937 bytes/cycle - 8403.09 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 101.58 cycles/hash -Small key speed test - 2-byte keys - 103.38 cycles/hash -Small key speed test - 3-byte keys - 103.06 cycles/hash -Small key speed test - 4-byte keys - 106.60 cycles/hash -Small key speed test - 5-byte keys - 103.24 cycles/hash -Small key speed test - 6-byte keys - 103.26 cycles/hash -Small key speed test - 7-byte keys - 103.04 cycles/hash -Small key speed test - 8-byte keys - 108.52 cycles/hash -Small key speed test - 9-byte keys - 102.78 cycles/hash -Small key speed test - 10-byte keys - 102.86 cycles/hash -Small key speed test - 11-byte keys - 103.61 cycles/hash -Small key speed test - 12-byte keys - 105.06 cycles/hash -Small key speed test - 13-byte keys - 105.33 cycles/hash -Small key speed test - 14-byte keys - 105.38 cycles/hash -Small key speed test - 15-byte keys - 105.34 cycles/hash -Small key speed test - 16-byte keys - 100.97 cycles/hash -Small key speed test - 17-byte keys - 106.82 cycles/hash -Small key speed test - 18-byte keys - 106.74 cycles/hash -Small key speed test - 19-byte keys - 107.08 cycles/hash -Small key speed test - 20-byte keys - 106.75 cycles/hash -Small key speed test - 21-byte keys - 107.18 cycles/hash -Small key speed test - 22-byte keys - 106.96 cycles/hash -Small key speed test - 23-byte keys - 106.82 cycles/hash -Small key speed test - 24-byte keys - 106.76 cycles/hash -Small key speed test - 25-byte keys - 106.89 cycles/hash -Small key speed test - 26-byte keys - 106.85 cycles/hash -Small key speed test - 27-byte keys - 106.83 cycles/hash -Small key speed test - 28-byte keys - 107.00 cycles/hash -Small key speed test - 29-byte keys - 107.13 cycles/hash -Small key speed test - 30-byte keys - 107.11 cycles/hash -Small key speed test - 31-byte keys - 107.03 cycles/hash -Average 105.419 cycles/hash +Alignment 7 - 2.330 bytes/cycle - 6666.15 MiB/sec @ 3 ghz +Alignment 6 - 2.311 bytes/cycle - 6612.02 MiB/sec @ 3 ghz +Alignment 5 - 2.668 bytes/cycle - 7633.50 MiB/sec @ 3 ghz +Alignment 4 - 2.674 bytes/cycle - 7649.15 MiB/sec @ 3 ghz +Alignment 3 - 2.701 bytes/cycle - 7726.54 MiB/sec @ 3 ghz +Alignment 2 - 2.673 bytes/cycle - 7647.96 MiB/sec @ 3 ghz +Alignment 1 - 2.711 bytes/cycle - 7756.34 MiB/sec @ 3 ghz +Alignment 0 - 4.199 bytes/cycle - 12013.98 MiB/sec @ 3 ghz +Average - 2.783 bytes/cycle - 7963.20 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 101.97 cycles/hash +Small key speed test - 2-byte keys - 105.35 cycles/hash +Small key speed test - 3-byte keys - 105.31 cycles/hash +Small key speed test - 4-byte keys - 105.37 cycles/hash +Small key speed test - 5-byte keys - 105.41 cycles/hash +Small key speed test - 6-byte keys - 105.44 cycles/hash +Small key speed test - 7-byte keys - 105.42 cycles/hash +Small key speed test - 8-byte keys - 105.41 cycles/hash +Small key speed test - 9-byte keys - 105.37 cycles/hash +Small key speed test - 10-byte keys - 105.40 cycles/hash +Small key speed test - 11-byte keys - 105.40 cycles/hash +Small key speed test - 12-byte keys - 105.36 cycles/hash +Small key speed test - 13-byte keys - 105.36 cycles/hash +Small key speed test - 14-byte keys - 105.36 cycles/hash +Small key speed test - 15-byte keys - 105.38 cycles/hash +Small key speed test - 16-byte keys - 100.19 cycles/hash +Small key speed test - 17-byte keys - 107.46 cycles/hash +Small key speed test - 18-byte keys - 107.49 cycles/hash +Small key speed test - 19-byte keys - 107.45 cycles/hash +Small key speed test - 20-byte keys - 107.47 cycles/hash +Small key speed test - 21-byte keys - 107.47 cycles/hash +Small key speed test - 22-byte keys - 107.46 cycles/hash +Small key speed test - 23-byte keys - 107.50 cycles/hash +Small key speed test - 24-byte keys - 107.49 cycles/hash +Small key speed test - 25-byte keys - 107.47 cycles/hash +Small key speed test - 26-byte keys - 107.56 cycles/hash +Small key speed test - 27-byte keys - 107.71 cycles/hash +Small key speed test - 28-byte keys - 107.49 cycles/hash +Small key speed test - 29-byte keys - 107.90 cycles/hash +Small key speed test - 30-byte keys - 107.82 cycles/hash +Small key speed test - 31-byte keys - 107.86 cycles/hash +Small key speed test - 32-byte keys - 101.62 cycles/hash +Average 106.023 cycles/hash +Average, weighted by key length freq. 105.908 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 103.388 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/crc64_hw.txt b/doc/crc64_hw.txt index d3b49719..49d4397c 100644 --- a/doc/crc64_hw.txt +++ b/doc/crc64_hw.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x133a2f229f40 - 0x133a2f229ed4). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 2.147 bytes/cycle - 6142.46 MiB/sec @ 3 ghz -Alignment 6 - 2.147 bytes/cycle - 6142.72 MiB/sec @ 3 ghz -Alignment 5 - 2.149 bytes/cycle - 6148.58 MiB/sec @ 3 ghz -Alignment 4 - 2.146 bytes/cycle - 6138.69 MiB/sec @ 3 ghz -Alignment 3 - 2.148 bytes/cycle - 6144.82 MiB/sec @ 3 ghz -Alignment 2 - 2.148 bytes/cycle - 6144.84 MiB/sec @ 3 ghz -Alignment 1 - 2.148 bytes/cycle - 6144.20 MiB/sec @ 3 ghz -Alignment 0 - 2.147 bytes/cycle - 6142.70 MiB/sec @ 3 ghz -Average - 2.147 bytes/cycle - 6143.62 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 26.82 cycles/hash -Small key speed test - 2-byte keys - 27.90 cycles/hash -Small key speed test - 3-byte keys - 31.04 cycles/hash -Small key speed test - 4-byte keys - 31.85 cycles/hash -Small key speed test - 5-byte keys - 34.25 cycles/hash -Small key speed test - 6-byte keys - 33.59 cycles/hash -Small key speed test - 7-byte keys - 41.29 cycles/hash -Small key speed test - 8-byte keys - 33.29 cycles/hash -Small key speed test - 9-byte keys - 38.81 cycles/hash -Small key speed test - 10-byte keys - 37.27 cycles/hash -Small key speed test - 11-byte keys - 43.06 cycles/hash -Small key speed test - 12-byte keys - 35.34 cycles/hash -Small key speed test - 13-byte keys - 42.43 cycles/hash -Small key speed test - 14-byte keys - 41.84 cycles/hash -Small key speed test - 15-byte keys - 44.17 cycles/hash -Small key speed test - 16-byte keys - 38.85 cycles/hash -Small key speed test - 17-byte keys - 44.42 cycles/hash -Small key speed test - 18-byte keys - 43.84 cycles/hash -Small key speed test - 19-byte keys - 43.93 cycles/hash +Alignment 7 - 1.769 bytes/cycle - 5062.20 MiB/sec @ 3 ghz +Alignment 6 - 1.769 bytes/cycle - 5062.23 MiB/sec @ 3 ghz +Alignment 5 - 1.769 bytes/cycle - 5061.95 MiB/sec @ 3 ghz +Alignment 4 - 1.769 bytes/cycle - 5061.86 MiB/sec @ 3 ghz +Alignment 3 - 2.136 bytes/cycle - 6112.39 MiB/sec @ 3 ghz +Alignment 2 - 2.130 bytes/cycle - 6092.73 MiB/sec @ 3 ghz +Alignment 1 - 2.128 bytes/cycle - 6089.39 MiB/sec @ 3 ghz +Alignment 0 - 2.129 bytes/cycle - 6090.61 MiB/sec @ 3 ghz +Average - 1.950 bytes/cycle - 5579.17 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 27.02 cycles/hash +Small key speed test - 2-byte keys - 28.23 cycles/hash +Small key speed test - 3-byte keys - 31.39 cycles/hash +Small key speed test - 4-byte keys - 32.25 cycles/hash +Small key speed test - 5-byte keys - 34.74 cycles/hash +Small key speed test - 6-byte keys - 34.00 cycles/hash +Small key speed test - 7-byte keys - 41.26 cycles/hash +Small key speed test - 8-byte keys - 33.69 cycles/hash +Small key speed test - 9-byte keys - 39.24 cycles/hash +Small key speed test - 10-byte keys - 37.57 cycles/hash +Small key speed test - 11-byte keys - 43.55 cycles/hash +Small key speed test - 12-byte keys - 35.49 cycles/hash +Small key speed test - 13-byte keys - 42.76 cycles/hash +Small key speed test - 14-byte keys - 42.02 cycles/hash +Small key speed test - 15-byte keys - 44.43 cycles/hash +Small key speed test - 16-byte keys - 39.09 cycles/hash +Small key speed test - 17-byte keys - 44.71 cycles/hash +Small key speed test - 18-byte keys - 44.12 cycles/hash +Small key speed test - 19-byte keys - 44.34 cycles/hash Small key speed test - 20-byte keys - 39.60 cycles/hash -Small key speed test - 21-byte keys - 45.36 cycles/hash -Small key speed test - 22-byte keys - 44.39 cycles/hash -Small key speed test - 23-byte keys - 45.57 cycles/hash -Small key speed test - 24-byte keys - 39.42 cycles/hash -Small key speed test - 25-byte keys - 43.95 cycles/hash -Small key speed test - 26-byte keys - 45.87 cycles/hash -Small key speed test - 27-byte keys - 48.83 cycles/hash -Small key speed test - 28-byte keys - 42.15 cycles/hash -Small key speed test - 29-byte keys - 49.36 cycles/hash -Small key speed test - 30-byte keys - 44.22 cycles/hash -Small key speed test - 31-byte keys - 52.32 cycles/hash -Average 40.485 cycles/hash +Small key speed test - 21-byte keys - 45.38 cycles/hash +Small key speed test - 22-byte keys - 44.68 cycles/hash +Small key speed test - 23-byte keys - 45.93 cycles/hash +Small key speed test - 24-byte keys - 39.73 cycles/hash +Small key speed test - 25-byte keys - 44.13 cycles/hash +Small key speed test - 26-byte keys - 46.41 cycles/hash +Small key speed test - 27-byte keys - 49.38 cycles/hash +Small key speed test - 28-byte keys - 42.48 cycles/hash +Small key speed test - 29-byte keys - 49.65 cycles/hash +Small key speed test - 30-byte keys - 44.62 cycles/hash +Small key speed test - 31-byte keys - 52.66 cycles/hash +Small key speed test - 32-byte keys - 43.25 cycles/hash +Average 40.868 cycles/hash +Average, weighted by key length freq. 42.067 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 39.267 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/crc64_jones.txt b/doc/crc64_jones.txt new file mode 100644 index 00000000..a6a45ad2 --- /dev/null +++ b/doc/crc64_jones.txt @@ -0,0 +1,2079 @@ +------------------------------------------------------------------------------- +--- Testing crc64_jones "crc64, jones polynomial, auto 1-3 pipelines depending on length, joined at the end" POOR + +[[[ Sanity Tests ]]] + +Verification value 0x7DC1B496 ....... PASS +Running sanity check 1 .......... PASS +Running AppendedZeroesTest .......... PASS + +[[[ Speed Tests ]]] + +WARNING: timer resolution is 72 (0x48) ticks (0x8c2624041924 - 0x8c26240418dc). Broken VDSO? +Bulk speed test - 262144-byte keys +Alignment 7 - 1.200 bytes/cycle - 3434.45 MiB/sec @ 3 ghz +Alignment 6 - 1.200 bytes/cycle - 3434.18 MiB/sec @ 3 ghz +Alignment 5 - 1.205 bytes/cycle - 3448.88 MiB/sec @ 3 ghz +Alignment 4 - 1.192 bytes/cycle - 3410.18 MiB/sec @ 3 ghz +Alignment 3 - 1.191 bytes/cycle - 3406.16 MiB/sec @ 3 ghz +Alignment 2 - 1.205 bytes/cycle - 3447.96 MiB/sec @ 3 ghz +Alignment 1 - 1.203 bytes/cycle - 3441.02 MiB/sec @ 3 ghz +Alignment 0 - 1.201 bytes/cycle - 3434.73 MiB/sec @ 3 ghz +Average - 1.200 bytes/cycle - 3432.19 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 34.31 cycles/hash +Small key speed test - 2-byte keys - 39.49 cycles/hash +Small key speed test - 3-byte keys - 46.78 cycles/hash +Small key speed test - 4-byte keys - 53.75 cycles/hash +Small key speed test - 5-byte keys - 61.84 cycles/hash +Small key speed test - 6-byte keys - 68.75 cycles/hash +Small key speed test - 7-byte keys - 76.20 cycles/hash +Small key speed test - 8-byte keys - 60.65 cycles/hash +Small key speed test - 9-byte keys - 68.51 cycles/hash +Small key speed test - 10-byte keys - 75.66 cycles/hash +Small key speed test - 11-byte keys - 83.02 cycles/hash +Small key speed test - 12-byte keys - 68.02 cycles/hash +Small key speed test - 13-byte keys - 75.65 cycles/hash +Small key speed test - 14-byte keys - 83.00 cycles/hash +Small key speed test - 15-byte keys - 90.60 cycles/hash +Small key speed test - 16-byte keys - 74.37 cycles/hash +Small key speed test - 17-byte keys - 82.19 cycles/hash +Small key speed test - 18-byte keys - 89.84 cycles/hash +Small key speed test - 19-byte keys - 96.94 cycles/hash +Small key speed test - 20-byte keys - 81.58 cycles/hash +Small key speed test - 21-byte keys - 89.50 cycles/hash +Small key speed test - 22-byte keys - 96.53 cycles/hash +Small key speed test - 23-byte keys - 104.18 cycles/hash +Small key speed test - 24-byte keys - 88.78 cycles/hash +Small key speed test - 25-byte keys - 96.10 cycles/hash +Small key speed test - 26-byte keys - 103.36 cycles/hash +Small key speed test - 27-byte keys - 111.28 cycles/hash +Small key speed test - 28-byte keys - 96.28 cycles/hash +Small key speed test - 29-byte keys - 103.25 cycles/hash +Small key speed test - 30-byte keys - 110.80 cycles/hash +Small key speed test - 31-byte keys - 117.61 cycles/hash +Small key speed test - 32-byte keys - 102.50 cycles/hash +Average 82.228 cycles/hash +Average, weighted by key length freq. 84.208 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 73.442 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) + +[[[ 'Hashmap' Speed Tests ]]] + +std::unordered_map +Init std HashMapTest: 465.363 cycles/op (104334 inserts, 1% deletions) +Running std HashMapTest: 372.192 cycles/op (9.8 stdv) + +greg7mdp/parallel-hashmap +Init fast HashMapTest: 310.430 cycles/op (104334 inserts, 1% deletions) +Running fast HashMapTest: 265.677 cycles/op (1.3 stdv) ....... PASS + +[[[ Avalanche Tests ]]] + +Testing 24-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +Testing 32-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 40-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 48-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 56-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 64-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 72-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 80-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 96-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 112-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 128-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 160-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 512-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 1024-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +*********FAIL********* + +[[[ Keyset 'Sparse' Tests ]]] + +Keyset 'Sparse' - 16-bit keys with up to 9 bits set - 50643 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 0.3, actual 0 (0.00x) +Testing collisions (high 19-25 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing collisions (low 32-bit) - Expected 0.3, actual 0 (0.00x) +Testing collisions (low 19-25 bits) - Worst is 25 bits: 19702/38 (515.80x) !!!!! +Testing distribution - Worst bias is the 13-bit window at bit 0 - 87.512% !!!!! + +Keyset 'Sparse' - 24-bit keys with up to 8 bits set - 1271626 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 188.2, actual 0 (0.00x) +Testing collisions (high 24-35 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing collisions (low 32-bit) - Expected 188.2, actual 0 (0.00x) +Testing collisions (low 24-35 bits) - Worst is 24 bits: 353795/46996 (7.53x) !!!!! +Testing distribution - Worst bias is the 17-bit window at bit 0 - 89.254% !!!!! + +Keyset 'Sparse' - 32-bit keys with up to 7 bits set - 4514873 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2372.2, actual 0 (0.00x) +Testing collisions (high 25-38 bits) - Worst is 25 bits: 225634/290569 (0.78x) +Testing collisions (low 32-bit) - Expected 2372.2, actual 1716 (0.72x) +Testing collisions (low 25-38 bits) - Worst is 29 bits: 32949/18931 (1.74x) +Testing distribution - Worst bias is the 19-bit window at bit 63 - 48.502% !!!!! + +Keyset 'Sparse' - 40-bit keys with up to 6 bits set - 4598479 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2460.8, actual 2770 (1.13x) (310) +Testing collisions (high 25-38 bits) - Worst is 25 bits: 471339/301185 (1.56x) +Testing collisions (low 32-bit) - Expected 2460.8, actual 4578 (1.86x) (2118) +Testing collisions (low 25-38 bits) - Worst is 29 bits: 62236/19637 (3.17x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 55 - 26.366% !!!!! + +Keyset 'Sparse' - 48-bit keys with up to 6 bits set - 14196869 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 23437.8, actual 86718 (3.70x) (63281) !!!!! +Testing collisions (high 27-42 bits) - Worst is 32 bits: 86718/23437 (3.70x) !!!!! +Testing collisions (low 32-bit) - Expected 23437.8, actual 10206 (0.44x) +Testing collisions (low 27-42 bits) - Worst is 28 bits: 439497/368886 (1.19x) +Testing distribution - Worst bias is the 20-bit window at bit 49 - 8.182% !!!!! + +Keyset 'Sparse' - 56-bit keys with up to 5 bits set - 4216423 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2069.0, actual 4550 (2.20x) (2482) !!!!! +Testing collisions (high 25-38 bits) - Worst is 31 bits: 9100/4136 (2.20x) !!!!! +Testing collisions (low 32-bit) - Expected 2069.0, actual 1008 (0.49x) +Testing collisions (low 25-38 bits) - Worst is 31 bits: 6188/4136 (1.50x) +Testing distribution - Worst bias is the 19-bit window at bit 60 - 4.589% !!!!! + +Keyset 'Sparse' - 64-bit keys with up to 5 bits set - 8303633 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 8021.7, actual 10388 (1.29x) (2367) +Testing collisions (high 26-40 bits) - Worst is 32 bits: 10388/8021 (1.29x) +Testing collisions (low 32-bit) - Expected 8021.7, actual 6460 (0.81x) +Testing collisions (low 26-40 bits) - Worst is 27 bits: 298840/251643 (1.19x) +Testing distribution - Worst bias is the 20-bit window at bit 50 - 2.290% !!!!! + +Keyset 'Sparse' - 72-bit keys with up to 5 bits set - 15082603 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 26451.8, actual 21148 (0.80x) +Testing collisions (high 27-42 bits) - Worst is 27 bits: 797203/816575 (0.98x) +Testing collisions (low 32-bit) - Expected 26451.8, actual 34232 (1.29x) (7781) +Testing collisions (low 27-42 bits) - Worst is 35 bits: 6174/3309 (1.87x) +Testing distribution - Worst bias is the 20-bit window at bit 24 - 1.509% !!!!! + +Keyset 'Sparse' - 96-bit keys with up to 4 bits set - 3469497 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1401.0, actual 1435 (1.02x) (35) +Testing collisions (high 25-38 bits) - Worst is 38 bits: 70/21 (3.20x) !!!!! +Testing collisions (low 32-bit) - Expected 1401.0, actual 840 (0.60x) +Testing collisions (low 25-38 bits) - Worst is 27 bits: 50326/44458 (1.13x) +Testing distribution - Worst bias is the 19-bit window at bit 29 - 2.053% !!!!! + +Keyset 'Sparse' - 160-bit keys with up to 4 bits set - 26977161 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 84546.1, actual 82294 (0.97x) +Testing collisions (high 28-44 bits) - Worst is 43 bits: 105/41 (2.54x) !!!!! +Testing collisions (low 32-bit) - Expected 84546.1, actual 92626 (1.10x) (8080) +Testing collisions (low 28-44 bits) - Worst is 43 bits: 140/41 (3.38x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 37 - 0.407% + +Keyset 'Sparse' - 256-bit keys with up to 3 bits set - 2796417 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 910.2, actual 1110 (1.22x) (200) +Testing collisions (high 25-37 bits) - Worst is 33 bits: 610/455 (1.34x) +Testing collisions (low 32-bit) - Expected 910.2, actual 1279 (1.41x) (369) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 70/28 (2.46x) !!!!! +Testing distribution - Worst bias is the 17-bit window at bit 45 - 0.363% + +Keyset 'Sparse' - 512-bit keys with up to 3 bits set - 22370049 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 58155.4, actual 58555 (1.01x) (400) +Testing collisions (high 28-43 bits) - Worst is 43 bits: 80/28 (2.81x) !!!!! +Testing collisions (low 32-bit) - Expected 58155.4, actual 58907 (1.01x) (752) +Testing collisions (low 28-43 bits) - Worst is 42 bits: 90/56 (1.58x) +Testing distribution - Worst bias is the 20-bit window at bit 42 - 0.108% + +Keyset 'Sparse' - 1024-bit keys with up to 2 bits set - 524801 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 32.1, actual 3 (0.09x) +Testing collisions (high 22-32 bits) - Worst is 22 bits: 31328/31504 (0.99x) +Testing collisions (low 32-bit) - Expected 32.1, actual 3 (0.09x) +Testing collisions (low 22-32 bits) - Worst is 22 bits: 31137/31504 (0.99x) +Testing distribution - Worst bias is the 16-bit window at bit 31 - 0.592% + +Keyset 'Sparse' - 2048-bit keys with up to 2 bits set - 2098177 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 512.4, actual 513 (1.00x) (1) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 51/32 (1.59x) +Testing collisions (low 32-bit) - Expected 512.4, actual 570 (1.11x) (58) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 60/32 (1.87x) +Testing distribution - Worst bias is the 18-bit window at bit 29 - 0.264% + +*********FAIL********* + +[[[ Keyset 'Permutation' Tests ]]] + +Combination Lowbits Tests: +Keyset 'Combination' - up to 7 blocks from a set of 8 - 2396744 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 299592 (1924140646392.73x) (299592) !!!!! +Testing collisions (high 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (high 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing collisions (low 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (low 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 33 - 74.318% !!!!! + +*********FAIL********* + +Combination Highbits Tests +Keyset 'Combination' - up to 7 blocks from a set of 8 - 2396744 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 299592 (1924140646392.73x) (299592) !!!!! +Testing collisions (high 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (high 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing collisions (low 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (low 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing distribution - Worst bias is the 16-bit window at bit 59 - 50.100% !!!!! + +*********FAIL********* + +Combination Hi-Lo Tests: +Keyset 'Combination' - up to 6 blocks from a set of 15 - 12204240 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 813615 (201533487953.56x) (813615) !!!!! +Testing collisions (high 32-bit) - Expected 17322.9, actual 822958 (47.51x) (805636) !!!!! +Testing collisions (high 27-41 bits) - Worst is 41 bits: 813615/33 (24024.71x) !!!!! +Testing collisions (low 32-bit) - Expected 17322.9, actual 817759 (47.21x) (800437) !!!!! +Testing collisions (low 27-41 bits) - Worst is 41 bits: 813615/33 (24024.71x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 36 - 6.110% !!!!! + +*********FAIL********* + +Combination 0x80000000 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 38 - 58.033% !!!!! + +*********FAIL********* + +Combination 0x00000001 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 47 - 74.395% !!!!! + +*********FAIL********* + +Combination 0x8000000000000000 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 1 - 74.666% !!!!! + +*********FAIL********* + +Combination 0x0000000000000001 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 37 - 74.784% !!!!! + +*********FAIL********* + +Combination 16-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 56 - 50.698% !!!!! + +*********FAIL********* + +Combination 16-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 34 - 51.902% !!!!! + +*********FAIL********* + +Combination 32-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 31 - 63.227% !!!!! + +*********FAIL********* + +Combination 32-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 37 - 74.245% !!!!! + +*********FAIL********* + +Combination 64-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 56 - 58.340% !!!!! + +*********FAIL********* + +Combination 64-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 52 - 52.995% !!!!! + +*********FAIL********* + +Combination 128-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 14 - 51.561% !!!!! + +*********FAIL********* + +Combination 128-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 45 - 50.195% !!!!! + +*********FAIL********* + +[[[ Keyset 'Window' Tests ]]] + +Keyset 'Window' - 32-bit key, 25-bit window - 32 tests, 33554432 keys per test +Window at 0 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 1 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 2 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 3 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 4 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 5 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 6 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 7 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 8 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 9 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 10 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 11 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 12 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 13 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 14 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 15 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 16 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 17 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 18 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 19 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 20 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 21 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 22 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 23 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 24 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 25 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 26 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 27 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 28 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 29 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 30 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 31 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 32 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) + +[[[ Keyset 'Cyclic' Tests ]]] + +Keyset 'Cyclic' - 8 cycles of 8 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 103 (0.88x) +Testing collisions (high 23-34 bits) - Worst is 24 bits: 29243/29218 (1.00x) +Testing collisions (low 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (low 23-34 bits) - Worst is 33 bits: 70/58 (1.20x) +Testing distribution - Worst bias is the 17-bit window at bit 23 - 0.109% + +Keyset 'Cyclic' - 8 cycles of 9 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (high 23-34 bits) - Worst is 33 bits: 66/58 (1.13x) +Testing collisions (low 32-bit) - Expected 116.4, actual 118 (1.01x) (2) +Testing collisions (low 23-34 bits) - Worst is 30 bits: 492/465 (1.06x) +Testing distribution - Worst bias is the 17-bit window at bit 52 - 0.085% + +Keyset 'Cyclic' - 8 cycles of 10 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 98 (0.84x) +Testing collisions (high 23-34 bits) - Worst is 27 bits: 3766/3716 (1.01x) +Testing collisions (low 32-bit) - Expected 116.4, actual 106 (0.91x) +Testing collisions (low 23-34 bits) - Worst is 30 bits: 472/465 (1.01x) +Testing distribution - Worst bias is the 17-bit window at bit 23 - 0.079% + +Keyset 'Cyclic' - 8 cycles of 11 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 115 (0.99x) (-1) +Testing collisions (high 23-34 bits) - Worst is 25 bits: 15081/14754 (1.02x) +Testing collisions (low 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (low 23-34 bits) - Worst is 33 bits: 62/58 (1.07x) +Testing distribution - Worst bias is the 17-bit window at bit 39 - 0.142% + +Keyset 'Cyclic' - 8 cycles of 12 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 98 (0.84x) +Testing collisions (high 23-34 bits) - Worst is 26 bits: 7435/7413 (1.00x) +Testing collisions (low 32-bit) - Expected 116.4, actual 105 (0.90x) +Testing collisions (low 23-34 bits) - Worst is 26 bits: 7475/7413 (1.01x) +Testing distribution - Worst bias is the 17-bit window at bit 8 - 0.094% + +Keyset 'Cyclic' - 8 cycles of 16 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 117 (1.01x) (1) +Testing collisions (high 23-34 bits) - Worst is 34 bits: 34/29 (1.17x) +Testing collisions (low 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (low 23-34 bits) - Worst is 32 bits: 120/116 (1.03x) +Testing distribution - Worst bias is the 16-bit window at bit 7 - 0.114% + + +[[[ Keyset 'TwoBytes' Tests ]]] + +Keyset 'TwoBytes' - up-to-4-byte keys, 652545 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 261375 (22646103971038.65x) (261375) !!!!! +Testing collisions (high 32-bit) - Expected 49.6, actual 261375 (5272.97x) (261326) !!!!! +Testing collisions (high 23-33 bits) - Worst is 33 bits: 261375/24 (10545.68x) !!!!! +Testing collisions (low 32-bit) - Expected 49.6, actual 261378 (5273.03x) (261329) !!!!! +Testing collisions (low 23-33 bits) - Worst is 33 bits: 261378/24 (10545.80x) !!!!! +Testing distribution - Worst bias is the 16-bit window at bit 0 - 87.354% !!!!! + +Keyset 'TwoBytes' - up-to-8-byte keys, 5471025 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 3648285 (4496774986619.34x) (3648285) !!!!! +Testing collisions (high 32-bit) - Expected 3483.1, actual 3650943 (1048.19x) (3647460) !!!!! +Testing collisions (high 26-39 bits) - Worst is 39 bits: 3648306/27 (134015.55x) !!!!! +Testing collisions (low 32-bit) - Expected 3483.1, actual 3648528 (1047.50x) (3645045) !!!!! +Testing collisions (low 26-39 bits) - Worst is 39 bits: 3648285/27 (134014.78x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 88.627% !!!!! + +Keyset 'TwoBytes' - up-to-12-byte keys, 18616785 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 14322075 (1524566310736.38x) (14322075) !!!!! +Testing collisions (high 32-bit) - Expected 40289.5, actual 14326031 (355.58x) (14285742) !!!!! +Testing collisions (high 27-42 bits) - Worst is 42 bits: 14322075/39 (363485.45x) !!!!! +Testing collisions (low 32-bit) - Expected 40289.5, actual 14324456 (355.54x) (14284167) !!!!! +Testing collisions (low 27-42 bits) - Worst is 42 bits: 14322075/39 (363485.45x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 64.751% !!!!! + +Keyset 'TwoBytes' - up-to-16-byte keys, 44251425 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 36444345 (686634081469.61x) (36444345) !!!!! +Testing collisions (high 32-bit) - Expected 227182.3, actual 36453640 (160.46x) (36226458) !!!!! +Testing collisions (high 29-45 bits) - Worst is 45 bits: 36444345/27 (1309651.13x) !!!!! +Testing collisions (low 32-bit) - Expected 227182.3, actual 36451340 (160.45x) (36224158) !!!!! +Testing collisions (low 29-45 bits) - Worst is 45 bits: 36444345/27 (1309651.13x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 40.372% !!!!! + +Keyset 'TwoBytes' - up-to-20-byte keys, 86536545 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 74176695 (365441696655.85x) (74176695) !!!!! +Testing collisions (high 32-bit) - Expected 865959.1, actual 74196456 (85.68x) (73330497) !!!!! +Testing collisions (high 30-47 bits) - Worst is 47 bits: 74176695/26 (2788099.45x) !!!!! +Testing collisions (low 32-bit) - Expected 865959.1, actual 74193744 (85.68x) (73327785) !!!!! +Testing collisions (low 30-47 bits) - Worst is 47 bits: 74176695/26 (2788099.45x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 24.319% !!!!! + +*********FAIL********* + +[[[ Keyset 'Text' Tests ]]] + +Keyset 'Text' - keys of form "FooXXXXBar" - 14776336 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (high 27-42 bits) - Worst is 29 bits: 940540/201492 (4.67x) !!!!! +Testing collisions (low 32-bit) - Expected 25389.0, actual 88000 (3.47x) (62611) !!!!! +Testing collisions (low 27-42 bits) - Worst is 32 bits: 88000/25389 (3.47x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 63 - 31.683% !!!!! + +Keyset 'Text' - keys of form "FooBarXXXX" - 14776336 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (high 27-42 bits) - Worst is 27 bits: 532272/784335 (0.68x) +Testing collisions (low 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (low 27-42 bits) - Worst is 29 bits: 929280/201492 (4.61x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 52.279% !!!!! + +Keyset 'Text' - keys of form "XXXXFooBar" - 14776336 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (high 27-42 bits) - Worst is 28 bits: 1408000/399329 (3.53x) !!!!! +Testing collisions (low 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (low 27-42 bits) - Worst is 27 bits: 80000/784335 (0.10x) +Testing distribution - Worst bias is the 20-bit window at bit 61 - 24.026% !!!!! + +Keyset 'Words' - 4000000 random keys of len 6-16 from alnum charset +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1862.1, actual 1802 (0.97x) +Testing collisions (high 25-38 bits) - Worst is 38 bits: 35/29 (1.20x) +Testing collisions (low 32-bit) - Expected 1862.1, actual 1897 (1.02x) (35) +Testing collisions (low 25-38 bits) - Worst is 33 bits: 962/931 (1.03x) +Testing distribution - Worst bias is the 19-bit window at bit 59 - 0.057% + +Keyset 'Words' - 4000000 random keys of len 6-16 from password charset +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1862.1, actual 1872 (1.01x) (10) +Testing collisions (high 25-38 bits) - Worst is 33 bits: 949/931 (1.02x) +Testing collisions (low 32-bit) - Expected 1862.1, actual 1907 (1.02x) (45) +Testing collisions (low 25-38 bits) - Worst is 34 bits: 483/465 (1.04x) +Testing distribution - Worst bias is the 19-bit window at bit 10 - 0.052% + +Keyset 'Words' - 104334 dict words +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1.3, actual 0 (0.00x) +Testing collisions (high 20-28 bits) - Worst is 22 bits: 1303/1286 (1.01x) +Testing collisions (low 32-bit) - Expected 1.3, actual 0 (0.00x) +Testing collisions (low 20-28 bits) - Worst is 28 bits: 23/20 (1.13x) +Testing distribution - Worst bias is the 14-bit window at bit 62 - 0.676% + +*********FAIL********* + +[[[ Keyset 'Zeroes' Tests ]]] + +Keyset 'Zeroes' - 204800 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 204799 (180143985094819.84x) (204799) !!!!! +Testing collisions (high 32-bit) - Expected 4.9, actual 204799 (41943.71x) (204795) !!!!! +Testing collisions (high 21-29 bits) - Worst is 29 bits: 204799/39 (5243.55x) !!!!! +Testing collisions (low 32-bit) - Expected 4.9, actual 204799 (41943.71x) (204795) !!!!! +Testing collisions (low 21-29 bits) - Worst is 29 bits: 204799/39 (5243.55x) !!!!! +Testing distribution - Worst bias is the 15-bit window at bit 0 - 99.997% !!!!! + +*********FAIL********* + +[[[ Keyset 'Seed' Tests ]]] + +Keyset 'Seed' - 5000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2909.3, actual 0 (0.00x) +Testing collisions (high 26-39 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing collisions (low 32-bit) - Expected 2909.3, actual 0 (0.00x) +Testing collisions (low 26-39 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing distribution - Worst bias is the 19-bit window at bit 49 - 64.465% !!!!! + +*********FAIL********* + +[[[ Keyset 'PerlinNoise' Tests ]]] + +Testing 16777216 coordinates (L2) : +Testing collisions ( 64-bit) - Expected 0.0, actual 16773120 (2198486515680.01x) (16773120) !!!!! +Testing collisions (high 32-bit) - Expected 32725.4, actual 16773120 (512.54x) (16740395) !!!!! +Testing collisions (high 27-42 bits) - Worst is 42 bits: 16773120/31 (524160.70x) !!!!! +Testing collisions (low 32-bit) - Expected 32725.4, actual 16773120 (512.54x) (16740395) !!!!! +Testing collisions (low 27-42 bits) - Worst is 42 bits: 16773120/31 (524160.70x) !!!!! + +Testing AV variant, 128 count with 4 spacing, 4-12: +Testing collisions ( 64-bit) - Expected 0.0, actual 796431 (3063942940256.29x) (796431) +Testing collisions (high 32-bit) - Expected 1116.2, actual 797014 (714.07x) (795898) !!!!! +Testing collisions (high 25-37 bits) - Worst is 37 bits: 796449/34 (22828.84x) !!!!! +Testing collisions (low 32-bit) - Expected 1116.2, actual 797035 (714.09x) (795919) !!!!! +Testing collisions (low 25-37 bits) - Worst is 37 bits: 796463/34 (22829.24x) !!!!! + +*********FAIL********* + +[[[ Diff 'Differential' Tests ]]] + +Testing 8303632 up-to-5-bit differentials in 64-bit keys -> 64 bit hashes. +1000 reps, 8303632000 total tests, expecting 0.00 random collisions.......... +0 total collisions, of which 0 single collisions were ignored + +Testing 11017632 up-to-4-bit differentials in 128-bit keys -> 64 bit hashes. +1000 reps, 11017632000 total tests, expecting 0.00 random collisions.......... +0 total collisions, of which 0 single collisions were ignored + +Testing 2796416 up-to-3-bit differentials in 256-bit keys -> 64 bit hashes. +1000 reps, 2796416000 total tests, expecting 0.00 random collisions.......... +0 total collisions, of which 0 single collisions were ignored + + +[[[ DiffDist 'Differential Distribution' Tests ]]] + +Testing bit 0 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 1 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 2 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 3 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 4 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 5 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 6 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 7 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 8 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 9 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 10 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 11 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 12 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 13 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 14 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 15 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 16 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 17 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 18 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 19 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 20 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 21 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 22 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 23 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 24 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 25 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 26 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 27 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 28 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 29 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 30 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 31 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 32 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 33 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 34 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 35 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 36 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 37 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 38 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 39 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 40 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 41 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 42 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 43 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 44 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 45 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 46 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 47 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 48 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 49 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 50 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 51 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 52 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 53 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 54 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 55 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 56 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 57 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 58 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 59 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 60 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 61 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 62 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 63 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +*********FAIL********* + +[[[ MomentChi2 Tests ]]] + +Analyze hashes produced from a serie of linearly increasing numbers of 32-bit, using a step of 2 ... +Target values to approximate : 38918200.000000 - 273633.333333 +8 threads starting... done +Popcount 1 stats : 38918912.000000 - 273643.176129 +Popcount 0 stats : 38918912.000000 - 273643.178030 +MomentChi2 for bits 1 : 0.926303 +MomentChi2 for bits 0 : 0.926303 + +Derivative stats (transition from 2 consecutive values) : +Popcount 1 stats : 42600335.340257 - 233974.301184 +Popcount 0 stats : 32312867.472151 - 105358.370683 +MomentChi2 for deriv b1 : 2.67098e+07 +MomentChi2 for deriv b0 : 1.15122e+08 + + FAIL !!!! + + +*********FAIL********* + +[[[ Prng Tests ]]] + +Generating 33554432 random numbers : +Testing collisions ( 64-bit) - Expected 0.0, actual 33554431 (1099511627776.00x) (33554431) !!!!! +Testing collisions (high 32-bit) - Expected 130731.3, actual 33554431 (256.67x) (33423700) !!!!! +Testing collisions (high 28-44 bits) - Worst is 44 bits: 33554431/31 (1048576.67x) !!!!! +Testing collisions (low 32-bit) - Expected 130731.3, actual 33554431 (256.67x) (33423700) !!!!! +Testing collisions (low 28-44 bits) - Worst is 44 bits: 33554431/31 (1048576.67x) !!!!! + +*********FAIL********* + +[[[ BadSeeds Tests ]]] + +Testing 1 internal secrets: +0xdeadbeef PASS + + +Input vcode 0x00000001, Output vcode 0x00000001, Result vcode 0x00000001 +Verification value is 0x00000001 - Testing took 890.231476 seconds +------------------------------------------------------------------------------- +[[[ BadSeeds Tests ]]] + +Testing 1 internal secrets: +0xdeadbeef PASS +Testing the first 0xffffffff seeds ... +8 threads starting... +at 0 +Broken seed 0x00000000 => 0 with key[16] of all 0 bytes +at 20000000 at 40000000 at 60000000 at 80000000 at a0000000 at c0000000 at e0000000 0x81ffffff 0x41ffffff 0xe1ffffff 0x01ffffff 0x21ffffff 0xc1ffffff 0x61ffffff 0xa1ffffff 0xe3ffffff 0x23ffffff 0xc3ffffff 0x83ffffff 0x03ffffff 0x43ffffff 0xa3ffffff 0x63ffffff 0xe5ffffff 0x05ffffff 0x85ffffff 0x45ffffff 0x25ffffff 0xa5ffffff 0xc5ffffff 0x65ffffff 0xe7ffffff 0x07ffffff 0x27ffffff 0x87ffffff 0x47ffffff 0xa7ffffff 0xc7ffffff 0x67ffffff 0xe9ffffff 0x29ffffff 0x49ffffff 0x09ffffff 0xa9ffffff 0xc9ffffff 0x89ffffff 0x69ffffff 0xebffffff 0x4bffffff 0x2bffffff 0x0bffffff 0xcbffffff 0x8bffffff 0xabffffff 0x6bffffff 0xedffffff 0x2dffffff 0x4dffffff 0xcdffffff 0x0dffffff 0x8dffffff 0xadffffff 0x6dffffff 0xefffffff 0x0fffffff 0x4fffffff 0xcfffffff 0x8fffffff 0x2fffffff 0xafffffff 0x6fffffff 0xf1ffffff 0x11ffffff 0xd1ffffff 0x51ffffff 0x91ffffff 0x31ffffff 0xb1ffffff 0x71ffffff 0xf3ffffff 0xd3ffffff 0x13ffffff 0x53ffffff 0x33ffffff 0x93ffffff 0xb3ffffff 0x73ffffff 0xf5ffffff 0xd5ffffff 0x15ffffff 0x35ffffff 0x55ffffff 0x95ffffff 0xb5ffffff 0x75ffffff 0xf7ffffff 0xd7ffffff 0x17ffffff 0x37ffffff 0x57ffffff 0x97ffffff 0xb7ffffff 0x77ffffff 0xf9ffffff 0xd9ffffff 0x19ffffff 0x39ffffff 0x99ffffff 0x59ffffff 0xb9ffffff 0x79ffffff 0xfbffffff 0xdbffffff 0x1bffffff 0x9bffffff 0x3bffffff 0x5bffffff 0xbbffffff 0x7bffffff 0xfdffffff 0xddffffff 0x1dffffff 0x9dffffff 0x3dffffff 0x5dffffff 0xbdffffff 0x7dffffff 0xffffffff 0xdfffffff 0x1fffffff 0x9fffffff 0x3fffffff 0x5fffffff 0xbfffffff 0x7fffffff All 8 threads ended +FAIL +Ensure to add these bad seeds to the list of secrets in main.cpp + +*********FAIL********* + + diff --git a/doc/crc64_jones1.txt b/doc/crc64_jones1.txt new file mode 100644 index 00000000..8eac17f8 --- /dev/null +++ b/doc/crc64_jones1.txt @@ -0,0 +1,2079 @@ +------------------------------------------------------------------------------- +--- Testing crc64_jones1 "crc64, jones polynomial, standard fast software method from Mark Adler" POOR + +[[[ Sanity Tests ]]] + +Verification value 0x7DC1B496 ....... PASS +Running sanity check 1 .......... PASS +Running AppendedZeroesTest .......... PASS + +[[[ Speed Tests ]]] + +WARNING: timer resolution is 72 (0x48) ticks (0x92f2a8cd80e0 - 0x92f2a8cd8098). Broken VDSO? +Bulk speed test - 262144-byte keys +Alignment 7 - 0.584 bytes/cycle - 1672.19 MiB/sec @ 3 ghz +Alignment 6 - 0.584 bytes/cycle - 1672.10 MiB/sec @ 3 ghz +Alignment 5 - 0.584 bytes/cycle - 1671.06 MiB/sec @ 3 ghz +Alignment 4 - 0.584 bytes/cycle - 1672.12 MiB/sec @ 3 ghz +Alignment 3 - 0.584 bytes/cycle - 1671.45 MiB/sec @ 3 ghz +Alignment 2 - 0.584 bytes/cycle - 1671.45 MiB/sec @ 3 ghz +Alignment 1 - 0.584 bytes/cycle - 1671.40 MiB/sec @ 3 ghz +Alignment 0 - 0.584 bytes/cycle - 1671.88 MiB/sec @ 3 ghz +Average - 0.584 bytes/cycle - 1671.71 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 32.88 cycles/hash +Small key speed test - 2-byte keys - 38.99 cycles/hash +Small key speed test - 3-byte keys - 47.12 cycles/hash +Small key speed test - 4-byte keys - 54.28 cycles/hash +Small key speed test - 5-byte keys - 60.92 cycles/hash +Small key speed test - 6-byte keys - 68.71 cycles/hash +Small key speed test - 7-byte keys - 76.02 cycles/hash +Small key speed test - 8-byte keys - 61.81 cycles/hash +Small key speed test - 9-byte keys - 67.61 cycles/hash +Small key speed test - 10-byte keys - 75.50 cycles/hash +Small key speed test - 11-byte keys - 82.65 cycles/hash +Small key speed test - 12-byte keys - 68.17 cycles/hash +Small key speed test - 13-byte keys - 75.55 cycles/hash +Small key speed test - 14-byte keys - 82.39 cycles/hash +Small key speed test - 15-byte keys - 90.17 cycles/hash +Small key speed test - 16-byte keys - 74.69 cycles/hash +Small key speed test - 17-byte keys - 82.21 cycles/hash +Small key speed test - 18-byte keys - 89.08 cycles/hash +Small key speed test - 19-byte keys - 96.39 cycles/hash +Small key speed test - 20-byte keys - 81.48 cycles/hash +Small key speed test - 21-byte keys - 88.39 cycles/hash +Small key speed test - 22-byte keys - 96.80 cycles/hash +Small key speed test - 23-byte keys - 103.70 cycles/hash +Small key speed test - 24-byte keys - 88.01 cycles/hash +Small key speed test - 25-byte keys - 95.10 cycles/hash +Small key speed test - 26-byte keys - 103.04 cycles/hash +Small key speed test - 27-byte keys - 110.05 cycles/hash +Small key speed test - 28-byte keys - 95.09 cycles/hash +Small key speed test - 29-byte keys - 101.74 cycles/hash +Small key speed test - 30-byte keys - 110.08 cycles/hash +Small key speed test - 31-byte keys - 116.44 cycles/hash +Small key speed test - 32-byte keys - 101.66 cycles/hash +Average 81.771 cycles/hash +Average, weighted by key length freq. 83.875 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 73.306 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) + +[[[ 'Hashmap' Speed Tests ]]] + +std::unordered_map +Init std HashMapTest: 462.206 cycles/op (104334 inserts, 1% deletions) +Running std HashMapTest: 364.366 cycles/op (3.4 stdv) + +greg7mdp/parallel-hashmap +Init fast HashMapTest: 293.221 cycles/op (104334 inserts, 1% deletions) +Running fast HashMapTest: 252.031 cycles/op (2.0 stdv) ....... PASS + +[[[ Avalanche Tests ]]] + +Testing 24-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXX] +Testing 32-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 40-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 48-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 56-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 64-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 72-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 80-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 96-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 112-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 128-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 160-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 512-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +Testing 1024-bit keys -> 64-bit hashes, 300000 reps.......... worst bias is 100.000000% !!!!! +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] +*********FAIL********* + +[[[ Keyset 'Sparse' Tests ]]] + +Keyset 'Sparse' - 16-bit keys with up to 9 bits set - 50643 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 0.3, actual 0 (0.00x) +Testing collisions (high 19-25 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing collisions (low 32-bit) - Expected 0.3, actual 0 (0.00x) +Testing collisions (low 19-25 bits) - Worst is 25 bits: 19702/38 (515.80x) !!!!! +Testing distribution - Worst bias is the 13-bit window at bit 0 - 87.512% !!!!! + +Keyset 'Sparse' - 24-bit keys with up to 8 bits set - 1271626 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 188.2, actual 0 (0.00x) +Testing collisions (high 24-35 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing collisions (low 32-bit) - Expected 188.2, actual 0 (0.00x) +Testing collisions (low 24-35 bits) - Worst is 24 bits: 353795/46996 (7.53x) !!!!! +Testing distribution - Worst bias is the 17-bit window at bit 0 - 89.254% !!!!! + +Keyset 'Sparse' - 32-bit keys with up to 7 bits set - 4514873 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2372.2, actual 0 (0.00x) +Testing collisions (high 25-38 bits) - Worst is 25 bits: 225634/290569 (0.78x) +Testing collisions (low 32-bit) - Expected 2372.2, actual 1716 (0.72x) +Testing collisions (low 25-38 bits) - Worst is 29 bits: 32949/18931 (1.74x) +Testing distribution - Worst bias is the 19-bit window at bit 63 - 48.502% !!!!! + +Keyset 'Sparse' - 40-bit keys with up to 6 bits set - 4598479 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2460.8, actual 2770 (1.13x) (310) +Testing collisions (high 25-38 bits) - Worst is 25 bits: 471339/301185 (1.56x) +Testing collisions (low 32-bit) - Expected 2460.8, actual 4578 (1.86x) (2118) +Testing collisions (low 25-38 bits) - Worst is 29 bits: 62236/19637 (3.17x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 55 - 26.366% !!!!! + +Keyset 'Sparse' - 48-bit keys with up to 6 bits set - 14196869 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 23437.8, actual 86718 (3.70x) (63281) !!!!! +Testing collisions (high 27-42 bits) - Worst is 32 bits: 86718/23437 (3.70x) !!!!! +Testing collisions (low 32-bit) - Expected 23437.8, actual 10206 (0.44x) +Testing collisions (low 27-42 bits) - Worst is 28 bits: 439497/368886 (1.19x) +Testing distribution - Worst bias is the 20-bit window at bit 49 - 8.182% !!!!! + +Keyset 'Sparse' - 56-bit keys with up to 5 bits set - 4216423 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2069.0, actual 4550 (2.20x) (2482) !!!!! +Testing collisions (high 25-38 bits) - Worst is 31 bits: 9100/4136 (2.20x) !!!!! +Testing collisions (low 32-bit) - Expected 2069.0, actual 1008 (0.49x) +Testing collisions (low 25-38 bits) - Worst is 31 bits: 6188/4136 (1.50x) +Testing distribution - Worst bias is the 19-bit window at bit 60 - 4.589% !!!!! + +Keyset 'Sparse' - 64-bit keys with up to 5 bits set - 8303633 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 8021.7, actual 10388 (1.29x) (2367) +Testing collisions (high 26-40 bits) - Worst is 32 bits: 10388/8021 (1.29x) +Testing collisions (low 32-bit) - Expected 8021.7, actual 6460 (0.81x) +Testing collisions (low 26-40 bits) - Worst is 27 bits: 298840/251643 (1.19x) +Testing distribution - Worst bias is the 20-bit window at bit 50 - 2.290% !!!!! + +Keyset 'Sparse' - 72-bit keys with up to 5 bits set - 15082603 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 26451.8, actual 21148 (0.80x) +Testing collisions (high 27-42 bits) - Worst is 27 bits: 797203/816575 (0.98x) +Testing collisions (low 32-bit) - Expected 26451.8, actual 34232 (1.29x) (7781) +Testing collisions (low 27-42 bits) - Worst is 35 bits: 6174/3309 (1.87x) +Testing distribution - Worst bias is the 20-bit window at bit 24 - 1.509% !!!!! + +Keyset 'Sparse' - 96-bit keys with up to 4 bits set - 3469497 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1401.0, actual 1435 (1.02x) (35) +Testing collisions (high 25-38 bits) - Worst is 38 bits: 70/21 (3.20x) !!!!! +Testing collisions (low 32-bit) - Expected 1401.0, actual 840 (0.60x) +Testing collisions (low 25-38 bits) - Worst is 27 bits: 50326/44458 (1.13x) +Testing distribution - Worst bias is the 19-bit window at bit 29 - 2.053% !!!!! + +Keyset 'Sparse' - 160-bit keys with up to 4 bits set - 26977161 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 84546.1, actual 82294 (0.97x) +Testing collisions (high 28-44 bits) - Worst is 43 bits: 105/41 (2.54x) !!!!! +Testing collisions (low 32-bit) - Expected 84546.1, actual 92626 (1.10x) (8080) +Testing collisions (low 28-44 bits) - Worst is 43 bits: 140/41 (3.38x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 37 - 0.407% + +Keyset 'Sparse' - 256-bit keys with up to 3 bits set - 2796417 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 910.2, actual 1110 (1.22x) (200) +Testing collisions (high 25-37 bits) - Worst is 33 bits: 610/455 (1.34x) +Testing collisions (low 32-bit) - Expected 910.2, actual 1279 (1.41x) (369) +Testing collisions (low 25-37 bits) - Worst is 37 bits: 70/28 (2.46x) !!!!! +Testing distribution - Worst bias is the 17-bit window at bit 45 - 0.363% + +Keyset 'Sparse' - 512-bit keys with up to 3 bits set - 22370049 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 58155.4, actual 58555 (1.01x) (400) +Testing collisions (high 28-43 bits) - Worst is 43 bits: 80/28 (2.81x) !!!!! +Testing collisions (low 32-bit) - Expected 58155.4, actual 58907 (1.01x) (752) +Testing collisions (low 28-43 bits) - Worst is 42 bits: 90/56 (1.58x) +Testing distribution - Worst bias is the 20-bit window at bit 42 - 0.108% + +Keyset 'Sparse' - 1024-bit keys with up to 2 bits set - 524801 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 32.1, actual 3 (0.09x) +Testing collisions (high 22-32 bits) - Worst is 22 bits: 31328/31504 (0.99x) +Testing collisions (low 32-bit) - Expected 32.1, actual 3 (0.09x) +Testing collisions (low 22-32 bits) - Worst is 22 bits: 31137/31504 (0.99x) +Testing distribution - Worst bias is the 16-bit window at bit 31 - 0.592% + +Keyset 'Sparse' - 2048-bit keys with up to 2 bits set - 2098177 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 512.4, actual 513 (1.00x) (1) +Testing collisions (high 24-36 bits) - Worst is 36 bits: 51/32 (1.59x) +Testing collisions (low 32-bit) - Expected 512.4, actual 570 (1.11x) (58) +Testing collisions (low 24-36 bits) - Worst is 36 bits: 60/32 (1.87x) +Testing distribution - Worst bias is the 18-bit window at bit 29 - 0.264% + +*********FAIL********* + +[[[ Keyset 'Permutation' Tests ]]] + +Combination Lowbits Tests: +Keyset 'Combination' - up to 7 blocks from a set of 8 - 2396744 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 299592 (1924140646392.73x) (299592) !!!!! +Testing collisions (high 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (high 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing collisions (low 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (low 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 33 - 74.318% !!!!! + +*********FAIL********* + +Combination Highbits Tests +Keyset 'Combination' - up to 7 blocks from a set of 8 - 2396744 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 299592 (1924140646392.73x) (299592) !!!!! +Testing collisions (high 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (high 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing collisions (low 32-bit) - Expected 668.6, actual 299592 (448.08x) (298924) !!!!! +Testing collisions (low 24-37 bits) - Worst is 37 bits: 299592/20 (14336.05x) !!!!! +Testing distribution - Worst bias is the 16-bit window at bit 59 - 50.100% !!!!! + +*********FAIL********* + +Combination Hi-Lo Tests: +Keyset 'Combination' - up to 6 blocks from a set of 15 - 12204240 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 813615 (201533487953.56x) (813615) !!!!! +Testing collisions (high 32-bit) - Expected 17322.9, actual 822958 (47.51x) (805636) !!!!! +Testing collisions (high 27-41 bits) - Worst is 41 bits: 813615/33 (24024.71x) !!!!! +Testing collisions (low 32-bit) - Expected 17322.9, actual 817759 (47.21x) (800437) !!!!! +Testing collisions (low 27-41 bits) - Worst is 41 bits: 813615/33 (24024.71x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 36 - 6.110% !!!!! + +*********FAIL********* + +Combination 0x80000000 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 38 - 58.033% !!!!! + +*********FAIL********* + +Combination 0x00000001 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 47 - 74.395% !!!!! + +*********FAIL********* + +Combination 0x8000000000000000 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 1 - 74.666% !!!!! + +*********FAIL********* + +Combination 0x0000000000000001 Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 37 - 74.784% !!!!! + +*********FAIL********* + +Combination 16-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 56 - 50.698% !!!!! + +*********FAIL********* + +Combination 16-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 34 - 51.902% !!!!! + +*********FAIL********* + +Combination 32-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 31 - 63.227% !!!!! + +*********FAIL********* + +Combination 32-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 37 - 74.245% !!!!! + +*********FAIL********* + +Combination 64-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 56 - 58.340% !!!!! + +*********FAIL********* + +Combination 64-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 52 - 52.995% !!!!! + +*********FAIL********* + +Combination 128-bytes [0-1] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 19-bit window at bit 14 - 51.561% !!!!! + +*********FAIL********* + +Combination 128-bytes [0-last] Tests: +Keyset 'Combination' - up to 22 blocks from a set of 2 - 8388606 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 4194302 (2199023517695.97x) (4194302) !!!!! +Testing collisions (high 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (high 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing collisions (low 32-bit) - Expected 8186.7, actual 4194302 (512.33x) (4186116) !!!!! +Testing collisions (low 26-40 bits) - Worst is 40 bits: 4194302/31 (131072.35x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 45 - 50.195% !!!!! + +*********FAIL********* + +[[[ Keyset 'Window' Tests ]]] + +Keyset 'Window' - 32-bit key, 25-bit window - 32 tests, 33554432 keys per test +Window at 0 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 1 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 2 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 3 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 4 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 5 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 6 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 7 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 8 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 9 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 10 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 11 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 12 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 13 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 14 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 15 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 16 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 17 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 18 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 19 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 20 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 21 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 22 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 23 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 24 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 25 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 26 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 27 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 28 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 29 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 30 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 31 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Window at 32 - Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) + +[[[ Keyset 'Cyclic' Tests ]]] + +Keyset 'Cyclic' - 8 cycles of 8 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 103 (0.88x) +Testing collisions (high 23-34 bits) - Worst is 24 bits: 29243/29218 (1.00x) +Testing collisions (low 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (low 23-34 bits) - Worst is 33 bits: 70/58 (1.20x) +Testing distribution - Worst bias is the 17-bit window at bit 23 - 0.109% + +Keyset 'Cyclic' - 8 cycles of 9 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (high 23-34 bits) - Worst is 33 bits: 66/58 (1.13x) +Testing collisions (low 32-bit) - Expected 116.4, actual 118 (1.01x) (2) +Testing collisions (low 23-34 bits) - Worst is 30 bits: 492/465 (1.06x) +Testing distribution - Worst bias is the 17-bit window at bit 52 - 0.085% + +Keyset 'Cyclic' - 8 cycles of 10 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 98 (0.84x) +Testing collisions (high 23-34 bits) - Worst is 27 bits: 3766/3716 (1.01x) +Testing collisions (low 32-bit) - Expected 116.4, actual 106 (0.91x) +Testing collisions (low 23-34 bits) - Worst is 30 bits: 472/465 (1.01x) +Testing distribution - Worst bias is the 17-bit window at bit 23 - 0.079% + +Keyset 'Cyclic' - 8 cycles of 11 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 115 (0.99x) (-1) +Testing collisions (high 23-34 bits) - Worst is 25 bits: 15081/14754 (1.02x) +Testing collisions (low 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (low 23-34 bits) - Worst is 33 bits: 62/58 (1.07x) +Testing distribution - Worst bias is the 17-bit window at bit 39 - 0.142% + +Keyset 'Cyclic' - 8 cycles of 12 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 98 (0.84x) +Testing collisions (high 23-34 bits) - Worst is 26 bits: 7435/7413 (1.00x) +Testing collisions (low 32-bit) - Expected 116.4, actual 105 (0.90x) +Testing collisions (low 23-34 bits) - Worst is 26 bits: 7475/7413 (1.01x) +Testing distribution - Worst bias is the 17-bit window at bit 8 - 0.094% + +Keyset 'Cyclic' - 8 cycles of 16 bytes - 1000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 116.4, actual 117 (1.01x) (1) +Testing collisions (high 23-34 bits) - Worst is 34 bits: 34/29 (1.17x) +Testing collisions (low 32-bit) - Expected 116.4, actual 120 (1.03x) (4) +Testing collisions (low 23-34 bits) - Worst is 32 bits: 120/116 (1.03x) +Testing distribution - Worst bias is the 16-bit window at bit 7 - 0.114% + + +[[[ Keyset 'TwoBytes' Tests ]]] + +Keyset 'TwoBytes' - up-to-4-byte keys, 652545 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 261375 (22646103971038.65x) (261375) !!!!! +Testing collisions (high 32-bit) - Expected 49.6, actual 261375 (5272.97x) (261326) !!!!! +Testing collisions (high 23-33 bits) - Worst is 33 bits: 261375/24 (10545.68x) !!!!! +Testing collisions (low 32-bit) - Expected 49.6, actual 261378 (5273.03x) (261329) !!!!! +Testing collisions (low 23-33 bits) - Worst is 33 bits: 261378/24 (10545.80x) !!!!! +Testing distribution - Worst bias is the 16-bit window at bit 0 - 87.354% !!!!! + +Keyset 'TwoBytes' - up-to-8-byte keys, 5471025 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 3648285 (4496774986619.34x) (3648285) !!!!! +Testing collisions (high 32-bit) - Expected 3483.1, actual 3650943 (1048.19x) (3647460) !!!!! +Testing collisions (high 26-39 bits) - Worst is 39 bits: 3648306/27 (134015.55x) !!!!! +Testing collisions (low 32-bit) - Expected 3483.1, actual 3648528 (1047.50x) (3645045) !!!!! +Testing collisions (low 26-39 bits) - Worst is 39 bits: 3648285/27 (134014.78x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 88.627% !!!!! + +Keyset 'TwoBytes' - up-to-12-byte keys, 18616785 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 14322075 (1524566310736.38x) (14322075) !!!!! +Testing collisions (high 32-bit) - Expected 40289.5, actual 14326031 (355.58x) (14285742) !!!!! +Testing collisions (high 27-42 bits) - Worst is 42 bits: 14322075/39 (363485.45x) !!!!! +Testing collisions (low 32-bit) - Expected 40289.5, actual 14324456 (355.54x) (14284167) !!!!! +Testing collisions (low 27-42 bits) - Worst is 42 bits: 14322075/39 (363485.45x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 64.751% !!!!! + +Keyset 'TwoBytes' - up-to-16-byte keys, 44251425 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 36444345 (686634081469.61x) (36444345) !!!!! +Testing collisions (high 32-bit) - Expected 227182.3, actual 36453640 (160.46x) (36226458) !!!!! +Testing collisions (high 29-45 bits) - Worst is 45 bits: 36444345/27 (1309651.13x) !!!!! +Testing collisions (low 32-bit) - Expected 227182.3, actual 36451340 (160.45x) (36224158) !!!!! +Testing collisions (low 29-45 bits) - Worst is 45 bits: 36444345/27 (1309651.13x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 40.372% !!!!! + +Keyset 'TwoBytes' - up-to-20-byte keys, 86536545 total keys +Testing collisions ( 64-bit) - Expected 0.0, actual 74176695 (365441696655.85x) (74176695) !!!!! +Testing collisions (high 32-bit) - Expected 865959.1, actual 74196456 (85.68x) (73330497) !!!!! +Testing collisions (high 30-47 bits) - Worst is 47 bits: 74176695/26 (2788099.45x) !!!!! +Testing collisions (low 32-bit) - Expected 865959.1, actual 74193744 (85.68x) (73327785) !!!!! +Testing collisions (low 30-47 bits) - Worst is 47 bits: 74176695/26 (2788099.45x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 24.319% !!!!! + +*********FAIL********* + +[[[ Keyset 'Text' Tests ]]] + +Keyset 'Text' - keys of form "FooXXXXBar" - 14776336 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (high 27-42 bits) - Worst is 29 bits: 940540/201492 (4.67x) !!!!! +Testing collisions (low 32-bit) - Expected 25389.0, actual 88000 (3.47x) (62611) !!!!! +Testing collisions (low 27-42 bits) - Worst is 32 bits: 88000/25389 (3.47x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 63 - 31.683% !!!!! + +Keyset 'Text' - keys of form "FooBarXXXX" - 14776336 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (high 27-42 bits) - Worst is 27 bits: 532272/784335 (0.68x) +Testing collisions (low 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (low 27-42 bits) - Worst is 29 bits: 929280/201492 (4.61x) !!!!! +Testing distribution - Worst bias is the 20-bit window at bit 0 - 52.279% !!!!! + +Keyset 'Text' - keys of form "XXXXFooBar" - 14776336 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (high 27-42 bits) - Worst is 28 bits: 1408000/399329 (3.53x) !!!!! +Testing collisions (low 32-bit) - Expected 25389.0, actual 0 (0.00x) +Testing collisions (low 27-42 bits) - Worst is 27 bits: 80000/784335 (0.10x) +Testing distribution - Worst bias is the 20-bit window at bit 61 - 24.026% !!!!! + +Keyset 'Words' - 4000000 random keys of len 6-16 from alnum charset +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1862.1, actual 1802 (0.97x) +Testing collisions (high 25-38 bits) - Worst is 38 bits: 35/29 (1.20x) +Testing collisions (low 32-bit) - Expected 1862.1, actual 1897 (1.02x) (35) +Testing collisions (low 25-38 bits) - Worst is 33 bits: 962/931 (1.03x) +Testing distribution - Worst bias is the 19-bit window at bit 59 - 0.057% + +Keyset 'Words' - 4000000 random keys of len 6-16 from password charset +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1862.1, actual 1872 (1.01x) (10) +Testing collisions (high 25-38 bits) - Worst is 33 bits: 949/931 (1.02x) +Testing collisions (low 32-bit) - Expected 1862.1, actual 1907 (1.02x) (45) +Testing collisions (low 25-38 bits) - Worst is 34 bits: 483/465 (1.04x) +Testing distribution - Worst bias is the 19-bit window at bit 10 - 0.052% + +Keyset 'Words' - 104334 dict words +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 1.3, actual 0 (0.00x) +Testing collisions (high 20-28 bits) - Worst is 22 bits: 1303/1286 (1.01x) +Testing collisions (low 32-bit) - Expected 1.3, actual 0 (0.00x) +Testing collisions (low 20-28 bits) - Worst is 28 bits: 23/20 (1.13x) +Testing distribution - Worst bias is the 14-bit window at bit 62 - 0.676% + +*********FAIL********* + +[[[ Keyset 'Zeroes' Tests ]]] + +Keyset 'Zeroes' - 204800 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 204799 (180143985094819.84x) (204799) !!!!! +Testing collisions (high 32-bit) - Expected 4.9, actual 204799 (41943.71x) (204795) !!!!! +Testing collisions (high 21-29 bits) - Worst is 29 bits: 204799/39 (5243.55x) !!!!! +Testing collisions (low 32-bit) - Expected 4.9, actual 204799 (41943.71x) (204795) !!!!! +Testing collisions (low 21-29 bits) - Worst is 29 bits: 204799/39 (5243.55x) !!!!! +Testing distribution - Worst bias is the 15-bit window at bit 0 - 99.997% !!!!! + +*********FAIL********* + +[[[ Keyset 'Seed' Tests ]]] + +Keyset 'Seed' - 5000000 keys +Testing collisions ( 64-bit) - Expected 0.0, actual 0 (0.00x) +Testing collisions (high 32-bit) - Expected 2909.3, actual 0 (0.00x) +Testing collisions (high 26-39 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing collisions (low 32-bit) - Expected 2909.3, actual 0 (0.00x) +Testing collisions (low 26-39 bits) - Worst is 0 bits: 0/ 1 (0.00x) +Testing distribution - Worst bias is the 19-bit window at bit 49 - 64.465% !!!!! + +*********FAIL********* + +[[[ Keyset 'PerlinNoise' Tests ]]] + +Testing 16777216 coordinates (L2) : +Testing collisions ( 64-bit) - Expected 0.0, actual 16773120 (2198486515680.01x) (16773120) !!!!! +Testing collisions (high 32-bit) - Expected 32725.4, actual 16773120 (512.54x) (16740395) !!!!! +Testing collisions (high 27-42 bits) - Worst is 42 bits: 16773120/31 (524160.70x) !!!!! +Testing collisions (low 32-bit) - Expected 32725.4, actual 16773120 (512.54x) (16740395) !!!!! +Testing collisions (low 27-42 bits) - Worst is 42 bits: 16773120/31 (524160.70x) !!!!! + +Testing AV variant, 128 count with 4 spacing, 4-12: +Testing collisions ( 64-bit) - Expected 0.0, actual 796431 (3063942940256.29x) (796431) +Testing collisions (high 32-bit) - Expected 1116.2, actual 797014 (714.07x) (795898) !!!!! +Testing collisions (high 25-37 bits) - Worst is 37 bits: 796449/34 (22828.84x) !!!!! +Testing collisions (low 32-bit) - Expected 1116.2, actual 797035 (714.09x) (795919) !!!!! +Testing collisions (low 25-37 bits) - Worst is 37 bits: 796463/34 (22829.24x) !!!!! + +*********FAIL********* + +[[[ Diff 'Differential' Tests ]]] + +Testing 8303632 up-to-5-bit differentials in 64-bit keys -> 64 bit hashes. +1000 reps, 8303632000 total tests, expecting 0.00 random collisions.......... +0 total collisions, of which 0 single collisions were ignored + +Testing 11017632 up-to-4-bit differentials in 128-bit keys -> 64 bit hashes. +1000 reps, 11017632000 total tests, expecting 0.00 random collisions.......... +0 total collisions, of which 0 single collisions were ignored + +Testing 2796416 up-to-3-bit differentials in 256-bit keys -> 64 bit hashes. +1000 reps, 2796416000 total tests, expecting 0.00 random collisions.......... +0 total collisions, of which 0 single collisions were ignored + + +[[[ DiffDist 'Differential Distribution' Tests ]]] + +Testing bit 0 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 1 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 2 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 3 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 4 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 5 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 6 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 7 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 8 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 9 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 10 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 11 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 12 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 13 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 14 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 15 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 16 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 17 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 18 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 19 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 20 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 21 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 22 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 23 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 24 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 25 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 26 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 27 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 28 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 29 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 30 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 31 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 32 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 33 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 34 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 35 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 36 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 37 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 38 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 39 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 40 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 41 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 42 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 43 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 44 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 45 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 46 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 47 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 48 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 49 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 50 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 51 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 52 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 53 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 54 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 55 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 56 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 57 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 58 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 59 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 60 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 61 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 62 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +Testing bit 63 +Testing collisions ( 64-bit) - Expected 0.0, actual 2097151 (17592186044416.00x) (2097151) !!!!! +Testing collisions (high 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (high 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing collisions (low 32-bit) - Expected 511.9, actual 2097151 (4096.67x) (2096640) !!!!! +Testing collisions (low 24-36 bits) - Worst is 36 bits: 2097151/31 (65536.67x) !!!!! +Testing distribution - Worst bias is the 18-bit window at bit 0 - 100.000% !!!!! + +*********FAIL********* + +[[[ MomentChi2 Tests ]]] + +Analyze hashes produced from a serie of linearly increasing numbers of 32-bit, using a step of 2 ... +Target values to approximate : 38918200.000000 - 273633.333333 +8 threads starting... done +Popcount 1 stats : 38918912.000000 - 273643.176129 +Popcount 0 stats : 38918912.000000 - 273643.178030 +MomentChi2 for bits 1 : 0.926303 +MomentChi2 for bits 0 : 0.926303 + +Derivative stats (transition from 2 consecutive values) : +Popcount 1 stats : 42600335.340257 - 233974.301184 +Popcount 0 stats : 32312867.472151 - 105358.370683 +MomentChi2 for deriv b1 : 2.67098e+07 +MomentChi2 for deriv b0 : 1.15122e+08 + + FAIL !!!! + + +*********FAIL********* + +[[[ Prng Tests ]]] + +Generating 33554432 random numbers : +Testing collisions ( 64-bit) - Expected 0.0, actual 33554431 (1099511627776.00x) (33554431) !!!!! +Testing collisions (high 32-bit) - Expected 130731.3, actual 33554431 (256.67x) (33423700) !!!!! +Testing collisions (high 28-44 bits) - Worst is 44 bits: 33554431/31 (1048576.67x) !!!!! +Testing collisions (low 32-bit) - Expected 130731.3, actual 33554431 (256.67x) (33423700) !!!!! +Testing collisions (low 28-44 bits) - Worst is 44 bits: 33554431/31 (1048576.67x) !!!!! + +*********FAIL********* + +[[[ BadSeeds Tests ]]] + +Testing 1 internal secrets: +0xdeadbeef PASS + + +Input vcode 0x00000001, Output vcode 0x00000001, Result vcode 0x00000001 +Verification value is 0x00000001 - Testing took 1485.944470 seconds +------------------------------------------------------------------------------- +[[[ BadSeeds Tests ]]] + +Testing 1 internal secrets: +0xdeadbeef PASS +Testing the first 0xffffffff seeds ... +8 threads starting... +at 0 +Broken seed 0x00000000 => 0 with key[16] of all 0 bytes +at 20000000 at 40000000 at 60000000 at 80000000 at a0000000 at c0000000 at e0000000 0x81ffffff 0x41ffffff 0xc1ffffff 0x21ffffff 0x01ffffff 0xa1ffffff 0xe1ffffff 0x61ffffff 0x83ffffff 0xa3ffffff 0x03ffffff 0x23ffffff 0x43ffffff 0xc3ffffff 0xe3ffffff 0x63ffffff 0x85ffffff 0xa5ffffff 0x05ffffff 0x45ffffff 0xc5ffffff 0x25ffffff 0x65ffffff 0xe5ffffff 0x47ffffff 0x87ffffff 0xa7ffffff 0x07ffffff 0xc7ffffff 0x67ffffff 0x27ffffff 0xe7ffffff 0x49ffffff 0xa9ffffff 0x69ffffff 0x09ffffff 0xc9ffffff 0x89ffffff 0x29ffffff 0xe9ffffff 0x4bffffff 0xabffffff 0x6bffffff 0xcbffffff 0x8bffffff 0x0bffffff 0xebffffff 0x2bffffff 0x4dffffff 0x6dffffff 0xcdffffff 0xadffffff 0x0dffffff 0x8dffffff 0xedffffff 0x2dffffff 0x4fffffff 0xcfffffff 0x6fffffff 0xafffffff 0x0fffffff 0x8fffffff 0xefffffff 0x2fffffff 0x51ffffff 0xd1ffffff 0xb1ffffff 0x71ffffff 0x11ffffff 0x91ffffff 0xf1ffffff 0x31ffffff 0x53ffffff 0x73ffffff 0xb3ffffff 0xd3ffffff 0x13ffffff 0x93ffffff 0xf3ffffff 0x33ffffff 0x55ffffff 0x15ffffff 0xb5ffffff 0xd5ffffff 0x75ffffff 0x95ffffff 0xf5ffffff 0x35ffffff 0x57ffffff 0xd7ffffff 0x17ffffff 0xb7ffffff 0x77ffffff 0x97ffffff 0xf7ffffff 0x37ffffff 0xd9ffffff 0x19ffffff 0x59ffffff 0x99ffffff 0x79ffffff 0xb9ffffff 0xf9ffffff 0x39ffffff 0x1bffffff 0xdbffffff 0x5bffffff 0x7bffffff 0x9bffffff 0xbbffffff 0xfbffffff 0x3bffffff 0xddffffff 0x7dffffff 0x1dffffff 0x5dffffff 0x9dffffff 0xfdffffff 0xbdffffff 0x3dffffff 0x1fffffff 0x7fffffff 0x5fffffff 0xdfffffff 0x9fffffff 0xffffffff 0xbfffffff 0x3fffffff All 8 threads ended +FAIL +Ensure to add these bad seeds to the list of secrets in main.cpp + +*********FAIL********* + + diff --git a/doc/donothing128.txt b/doc/donothing128.txt index 36b00e95..38675b05 100644 --- a/doc/donothing128.txt +++ b/doc/donothing128.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest . FAIL !!!!! [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0xfc2ff5f164 - 0xfc2ff5f0f8). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 5324.001 bytes/cycle - 15232088.66 MiB/sec @ 3 ghz -Alignment 6 - 5312.054 bytes/cycle - 15197907.37 MiB/sec @ 3 ghz -Alignment 5 - 5341.769 bytes/cycle - 15282922.68 MiB/sec @ 3 ghz -Alignment 4 - 5344.057 bytes/cycle - 15289469.75 MiB/sec @ 3 ghz -Alignment 3 - 5323.893 bytes/cycle - 15231779.11 MiB/sec @ 3 ghz -Alignment 2 - 5346.893 bytes/cycle - 15297583.41 MiB/sec @ 3 ghz -Alignment 1 - 5355.747 bytes/cycle - 15322915.89 MiB/sec @ 3 ghz -Alignment 0 - 5374.720 bytes/cycle - 15377197.84 MiB/sec @ 3 ghz -Average - 5340.392 bytes/cycle - 15278983.09 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 6.00 cycles/hash -Small key speed test - 2-byte keys - 6.00 cycles/hash -Small key speed test - 3-byte keys - 6.00 cycles/hash -Small key speed test - 4-byte keys - 6.00 cycles/hash -Small key speed test - 5-byte keys - 6.00 cycles/hash -Small key speed test - 6-byte keys - 6.00 cycles/hash -Small key speed test - 7-byte keys - 6.00 cycles/hash -Small key speed test - 8-byte keys - 6.00 cycles/hash -Small key speed test - 9-byte keys - 6.00 cycles/hash -Small key speed test - 10-byte keys - 6.00 cycles/hash -Small key speed test - 11-byte keys - 6.00 cycles/hash -Small key speed test - 12-byte keys - 6.00 cycles/hash -Small key speed test - 13-byte keys - 6.00 cycles/hash -Small key speed test - 14-byte keys - 6.00 cycles/hash -Small key speed test - 15-byte keys - 6.00 cycles/hash -Small key speed test - 16-byte keys - 6.00 cycles/hash -Small key speed test - 17-byte keys - 6.00 cycles/hash -Small key speed test - 18-byte keys - 6.00 cycles/hash -Small key speed test - 19-byte keys - 6.00 cycles/hash -Small key speed test - 20-byte keys - 6.00 cycles/hash -Small key speed test - 21-byte keys - 6.00 cycles/hash -Small key speed test - 22-byte keys - 6.00 cycles/hash -Small key speed test - 23-byte keys - 6.00 cycles/hash -Small key speed test - 24-byte keys - 6.00 cycles/hash -Small key speed test - 25-byte keys - 6.00 cycles/hash -Small key speed test - 26-byte keys - 6.00 cycles/hash -Small key speed test - 27-byte keys - 6.00 cycles/hash -Small key speed test - 28-byte keys - 6.00 cycles/hash -Small key speed test - 29-byte keys - 6.00 cycles/hash -Small key speed test - 30-byte keys - 6.00 cycles/hash -Small key speed test - 31-byte keys - 6.00 cycles/hash -Average 6.000 cycles/hash +Alignment 7 - 4182.140 bytes/cycle - 11965197.96 MiB/sec @ 3 ghz +Alignment 6 - 4187.756 bytes/cycle - 11981264.79 MiB/sec @ 3 ghz +Alignment 5 - 4177.338 bytes/cycle - 11951460.65 MiB/sec @ 3 ghz +Alignment 4 - 4194.192 bytes/cycle - 11999679.80 MiB/sec @ 3 ghz +Alignment 3 - 4175.740 bytes/cycle - 11946888.55 MiB/sec @ 3 ghz +Alignment 2 - 4162.206 bytes/cycle - 11908166.51 MiB/sec @ 3 ghz +Alignment 1 - 4171.750 bytes/cycle - 11935473.60 MiB/sec @ 3 ghz +Alignment 0 - 4196.611 bytes/cycle - 12006600.03 MiB/sec @ 3 ghz +Average - 4180.967 bytes/cycle - 11961841.48 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 4.00 cycles/hash +Small key speed test - 2-byte keys - 4.00 cycles/hash +Small key speed test - 3-byte keys - 4.00 cycles/hash +Small key speed test - 4-byte keys - 4.00 cycles/hash +Small key speed test - 5-byte keys - 4.00 cycles/hash +Small key speed test - 6-byte keys - 4.00 cycles/hash +Small key speed test - 7-byte keys - 4.00 cycles/hash +Small key speed test - 8-byte keys - 4.37 cycles/hash +Small key speed test - 9-byte keys - 4.00 cycles/hash +Small key speed test - 10-byte keys - 4.00 cycles/hash +Small key speed test - 11-byte keys - 4.00 cycles/hash +Small key speed test - 12-byte keys - 4.00 cycles/hash +Small key speed test - 13-byte keys - 4.00 cycles/hash +Small key speed test - 14-byte keys - 4.00 cycles/hash +Small key speed test - 15-byte keys - 4.00 cycles/hash +Small key speed test - 16-byte keys - 4.00 cycles/hash +Small key speed test - 17-byte keys - 4.26 cycles/hash +Small key speed test - 18-byte keys - 4.00 cycles/hash +Small key speed test - 19-byte keys - 4.00 cycles/hash +Small key speed test - 20-byte keys - 4.00 cycles/hash +Small key speed test - 21-byte keys - 4.00 cycles/hash +Small key speed test - 22-byte keys - 4.00 cycles/hash +Small key speed test - 23-byte keys - 5.48 cycles/hash +Small key speed test - 24-byte keys - 4.00 cycles/hash +Small key speed test - 25-byte keys - 4.00 cycles/hash +Small key speed test - 26-byte keys - 4.00 cycles/hash +Small key speed test - 27-byte keys - 4.00 cycles/hash +Small key speed test - 28-byte keys - 4.00 cycles/hash +Small key speed test - 29-byte keys - 4.00 cycles/hash +Small key speed test - 30-byte keys - 4.00 cycles/hash +Small key speed test - 31-byte keys - 4.39 cycles/hash +Small key speed test - 32-byte keys - 4.00 cycles/hash +Average 4.078 cycles/hash +Average, weighted by key length freq. 4.069 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 4.017 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/donothing32.txt b/doc/donothing32.txt index 84c0ad55..e3a1d430 100644 --- a/doc/donothing32.txt +++ b/doc/donothing32.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest . FAIL !!!!! [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0xf750f5d2dc - 0xf750f5d294). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 5328.224 bytes/cycle - 15244171.15 MiB/sec @ 3 ghz -Alignment 6 - 5339.918 bytes/cycle - 15277626.79 MiB/sec @ 3 ghz -Alignment 5 - 5352.355 bytes/cycle - 15313210.84 MiB/sec @ 3 ghz -Alignment 4 - 5327.213 bytes/cycle - 15241277.87 MiB/sec @ 3 ghz -Alignment 3 - 5395.013 bytes/cycle - 15435255.68 MiB/sec @ 3 ghz -Alignment 2 - 5343.330 bytes/cycle - 15287390.71 MiB/sec @ 3 ghz -Alignment 1 - 5346.456 bytes/cycle - 15296334.59 MiB/sec @ 3 ghz -Alignment 0 - 5395.457 bytes/cycle - 15436527.28 MiB/sec @ 3 ghz -Average - 5353.496 bytes/cycle - 15316474.36 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 6.00 cycles/hash -Small key speed test - 2-byte keys - 6.00 cycles/hash -Small key speed test - 3-byte keys - 6.00 cycles/hash -Small key speed test - 4-byte keys - 6.00 cycles/hash -Small key speed test - 5-byte keys - 6.00 cycles/hash -Small key speed test - 6-byte keys - 6.00 cycles/hash -Small key speed test - 7-byte keys - 6.00 cycles/hash -Small key speed test - 8-byte keys - 6.00 cycles/hash -Small key speed test - 9-byte keys - 6.00 cycles/hash -Small key speed test - 10-byte keys - 6.00 cycles/hash -Small key speed test - 11-byte keys - 6.00 cycles/hash -Small key speed test - 12-byte keys - 6.00 cycles/hash -Small key speed test - 13-byte keys - 6.00 cycles/hash -Small key speed test - 14-byte keys - 6.00 cycles/hash -Small key speed test - 15-byte keys - 6.00 cycles/hash -Small key speed test - 16-byte keys - 6.00 cycles/hash -Small key speed test - 17-byte keys - 6.00 cycles/hash -Small key speed test - 18-byte keys - 6.00 cycles/hash -Small key speed test - 19-byte keys - 6.00 cycles/hash -Small key speed test - 20-byte keys - 6.00 cycles/hash -Small key speed test - 21-byte keys - 6.00 cycles/hash -Small key speed test - 22-byte keys - 6.00 cycles/hash -Small key speed test - 23-byte keys - 6.00 cycles/hash -Small key speed test - 24-byte keys - 6.00 cycles/hash -Small key speed test - 25-byte keys - 6.00 cycles/hash -Small key speed test - 26-byte keys - 6.00 cycles/hash -Small key speed test - 27-byte keys - 6.00 cycles/hash -Small key speed test - 28-byte keys - 6.00 cycles/hash -Small key speed test - 29-byte keys - 6.00 cycles/hash -Small key speed test - 30-byte keys - 6.00 cycles/hash -Small key speed test - 31-byte keys - 6.00 cycles/hash -Average 6.000 cycles/hash +Alignment 7 - 4019.617 bytes/cycle - 11500215.17 MiB/sec @ 3 ghz +Alignment 6 - 4036.594 bytes/cycle - 11548787.26 MiB/sec @ 3 ghz +Alignment 5 - 4030.022 bytes/cycle - 11529986.44 MiB/sec @ 3 ghz +Alignment 4 - 4046.632 bytes/cycle - 11577507.88 MiB/sec @ 3 ghz +Alignment 3 - 4021.561 bytes/cycle - 11505777.86 MiB/sec @ 3 ghz +Alignment 2 - 4038.690 bytes/cycle - 11554783.95 MiB/sec @ 3 ghz +Alignment 1 - 4047.685 bytes/cycle - 11580518.44 MiB/sec @ 3 ghz +Alignment 0 - 4018.458 bytes/cycle - 11496899.37 MiB/sec @ 3 ghz +Average - 4032.407 bytes/cycle - 11536809.55 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 4.00 cycles/hash +Small key speed test - 2-byte keys - 4.00 cycles/hash +Small key speed test - 3-byte keys - 4.00 cycles/hash +Small key speed test - 4-byte keys - 4.00 cycles/hash +Small key speed test - 5-byte keys - 4.00 cycles/hash +Small key speed test - 6-byte keys - 4.00 cycles/hash +Small key speed test - 7-byte keys - 4.00 cycles/hash +Small key speed test - 8-byte keys - 4.00 cycles/hash +Small key speed test - 9-byte keys - 4.00 cycles/hash +Small key speed test - 10-byte keys - 4.00 cycles/hash +Small key speed test - 11-byte keys - 4.00 cycles/hash +Small key speed test - 12-byte keys - 4.00 cycles/hash +Small key speed test - 13-byte keys - 4.00 cycles/hash +Small key speed test - 14-byte keys - 4.00 cycles/hash +Small key speed test - 15-byte keys - 4.00 cycles/hash +Small key speed test - 16-byte keys - 4.00 cycles/hash +Small key speed test - 17-byte keys - 4.00 cycles/hash +Small key speed test - 18-byte keys - 4.00 cycles/hash +Small key speed test - 19-byte keys - 4.00 cycles/hash +Small key speed test - 20-byte keys - 4.00 cycles/hash +Small key speed test - 21-byte keys - 4.00 cycles/hash +Small key speed test - 22-byte keys - 4.00 cycles/hash +Small key speed test - 23-byte keys - 4.00 cycles/hash +Small key speed test - 24-byte keys - 4.00 cycles/hash +Small key speed test - 25-byte keys - 4.00 cycles/hash +Small key speed test - 26-byte keys - 4.00 cycles/hash +Small key speed test - 27-byte keys - 4.00 cycles/hash +Small key speed test - 28-byte keys - 4.00 cycles/hash +Small key speed test - 29-byte keys - 4.00 cycles/hash +Small key speed test - 30-byte keys - 4.00 cycles/hash +Small key speed test - 31-byte keys - 4.00 cycles/hash +Small key speed test - 32-byte keys - 4.00 cycles/hash +Average 4.000 cycles/hash +Average, weighted by key length freq. 4.000 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 4.000 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/donothing64.txt b/doc/donothing64.txt index a2022f5f..a3c5a1e7 100644 --- a/doc/donothing64.txt +++ b/doc/donothing64.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest . FAIL !!!!! [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0xf9c6586350 - 0xf9c6586308). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 5344.275 bytes/cycle - 15290093.57 MiB/sec @ 3 ghz -Alignment 6 - 5339.373 bytes/cycle - 15276069.87 MiB/sec @ 3 ghz -Alignment 5 - 5393.199 bytes/cycle - 15430065.47 MiB/sec @ 3 ghz -Alignment 4 - 5328.549 bytes/cycle - 15245101.36 MiB/sec @ 3 ghz -Alignment 3 - 5381.971 bytes/cycle - 15397942.83 MiB/sec @ 3 ghz -Alignment 2 - 5361.374 bytes/cycle - 15339013.69 MiB/sec @ 3 ghz -Alignment 1 - 5365.400 bytes/cycle - 15350532.85 MiB/sec @ 3 ghz -Alignment 0 - 5351.699 bytes/cycle - 15311333.86 MiB/sec @ 3 ghz -Average - 5358.230 bytes/cycle - 15330019.19 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 6.00 cycles/hash -Small key speed test - 2-byte keys - 6.00 cycles/hash -Small key speed test - 3-byte keys - 6.00 cycles/hash -Small key speed test - 4-byte keys - 6.00 cycles/hash -Small key speed test - 5-byte keys - 6.00 cycles/hash -Small key speed test - 6-byte keys - 6.00 cycles/hash -Small key speed test - 7-byte keys - 6.00 cycles/hash -Small key speed test - 8-byte keys - 6.00 cycles/hash -Small key speed test - 9-byte keys - 6.00 cycles/hash -Small key speed test - 10-byte keys - 6.00 cycles/hash -Small key speed test - 11-byte keys - 6.00 cycles/hash -Small key speed test - 12-byte keys - 6.00 cycles/hash -Small key speed test - 13-byte keys - 6.00 cycles/hash -Small key speed test - 14-byte keys - 6.00 cycles/hash -Small key speed test - 15-byte keys - 6.00 cycles/hash -Small key speed test - 16-byte keys - 6.00 cycles/hash -Small key speed test - 17-byte keys - 6.00 cycles/hash -Small key speed test - 18-byte keys - 6.00 cycles/hash -Small key speed test - 19-byte keys - 6.00 cycles/hash -Small key speed test - 20-byte keys - 6.00 cycles/hash -Small key speed test - 21-byte keys - 6.00 cycles/hash -Small key speed test - 22-byte keys - 6.00 cycles/hash -Small key speed test - 23-byte keys - 6.00 cycles/hash -Small key speed test - 24-byte keys - 6.00 cycles/hash -Small key speed test - 25-byte keys - 6.00 cycles/hash -Small key speed test - 26-byte keys - 6.00 cycles/hash -Small key speed test - 27-byte keys - 6.00 cycles/hash -Small key speed test - 28-byte keys - 6.00 cycles/hash -Small key speed test - 29-byte keys - 6.00 cycles/hash -Small key speed test - 30-byte keys - 6.00 cycles/hash -Small key speed test - 31-byte keys - 6.00 cycles/hash -Average 6.000 cycles/hash +Alignment 7 - 4247.231 bytes/cycle - 12151426.72 MiB/sec @ 3 ghz +Alignment 6 - 4296.550 bytes/cycle - 12292527.72 MiB/sec @ 3 ghz +Alignment 5 - 4269.660 bytes/cycle - 12215594.24 MiB/sec @ 3 ghz +Alignment 4 - 4299.088 bytes/cycle - 12299789.94 MiB/sec @ 3 ghz +Alignment 3 - 4275.513 bytes/cycle - 12232341.04 MiB/sec @ 3 ghz +Alignment 2 - 4277.188 bytes/cycle - 12237134.27 MiB/sec @ 3 ghz +Alignment 1 - 4291.482 bytes/cycle - 12278028.96 MiB/sec @ 3 ghz +Alignment 0 - 4352.227 bytes/cycle - 12451820.84 MiB/sec @ 3 ghz +Average - 4288.617 bytes/cycle - 12269832.97 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 4.00 cycles/hash +Small key speed test - 2-byte keys - 4.00 cycles/hash +Small key speed test - 3-byte keys - 4.00 cycles/hash +Small key speed test - 4-byte keys - 4.00 cycles/hash +Small key speed test - 5-byte keys - 4.00 cycles/hash +Small key speed test - 6-byte keys - 4.00 cycles/hash +Small key speed test - 7-byte keys - 4.00 cycles/hash +Small key speed test - 8-byte keys - 4.00 cycles/hash +Small key speed test - 9-byte keys - 4.00 cycles/hash +Small key speed test - 10-byte keys - 4.00 cycles/hash +Small key speed test - 11-byte keys - 4.00 cycles/hash +Small key speed test - 12-byte keys - 4.00 cycles/hash +Small key speed test - 13-byte keys - 4.00 cycles/hash +Small key speed test - 14-byte keys - 4.00 cycles/hash +Small key speed test - 15-byte keys - 4.00 cycles/hash +Small key speed test - 16-byte keys - 4.00 cycles/hash +Small key speed test - 17-byte keys - 4.00 cycles/hash +Small key speed test - 18-byte keys - 4.00 cycles/hash +Small key speed test - 19-byte keys - 4.00 cycles/hash +Small key speed test - 20-byte keys - 4.00 cycles/hash +Small key speed test - 21-byte keys - 4.00 cycles/hash +Small key speed test - 22-byte keys - 4.00 cycles/hash +Small key speed test - 23-byte keys - 4.00 cycles/hash +Small key speed test - 24-byte keys - 4.00 cycles/hash +Small key speed test - 25-byte keys - 4.00 cycles/hash +Small key speed test - 26-byte keys - 4.00 cycles/hash +Small key speed test - 27-byte keys - 4.00 cycles/hash +Small key speed test - 28-byte keys - 4.00 cycles/hash +Small key speed test - 29-byte keys - 4.00 cycles/hash +Small key speed test - 30-byte keys - 4.00 cycles/hash +Small key speed test - 31-byte keys - 4.00 cycles/hash +Small key speed test - 32-byte keys - 4.00 cycles/hash +Average 4.000 cycles/hash +Average, weighted by key length freq. 4.000 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 4.000 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/edonr224.txt b/doc/edonr224.txt index 431729e0..9951f813 100644 --- a/doc/edonr224.txt +++ b/doc/edonr224.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x8e2169c3470 - 0x8e2169c3404). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.302 bytes/cycle - 864.14 MiB/sec @ 3 ghz -Alignment 6 - 0.302 bytes/cycle - 864.11 MiB/sec @ 3 ghz -Alignment 5 - 0.301 bytes/cycle - 861.89 MiB/sec @ 3 ghz -Alignment 4 - 0.304 bytes/cycle - 869.03 MiB/sec @ 3 ghz -Alignment 3 - 0.302 bytes/cycle - 863.69 MiB/sec @ 3 ghz -Alignment 2 - 0.301 bytes/cycle - 861.62 MiB/sec @ 3 ghz -Alignment 1 - 0.302 bytes/cycle - 863.71 MiB/sec @ 3 ghz -Alignment 0 - 0.304 bytes/cycle - 869.33 MiB/sec @ 3 ghz -Average - 0.302 bytes/cycle - 864.69 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 302.72 cycles/hash -Small key speed test - 2-byte keys - 304.56 cycles/hash -Small key speed test - 3-byte keys - 304.63 cycles/hash -Small key speed test - 4-byte keys - 299.53 cycles/hash -Small key speed test - 5-byte keys - 302.38 cycles/hash -Small key speed test - 6-byte keys - 302.44 cycles/hash -Small key speed test - 7-byte keys - 302.44 cycles/hash -Small key speed test - 8-byte keys - 303.15 cycles/hash -Small key speed test - 9-byte keys - 303.93 cycles/hash -Small key speed test - 10-byte keys - 303.83 cycles/hash -Small key speed test - 11-byte keys - 303.88 cycles/hash -Small key speed test - 12-byte keys - 303.47 cycles/hash -Small key speed test - 13-byte keys - 303.56 cycles/hash -Small key speed test - 14-byte keys - 303.52 cycles/hash -Small key speed test - 15-byte keys - 303.59 cycles/hash -Small key speed test - 16-byte keys - 303.98 cycles/hash -Small key speed test - 17-byte keys - 309.58 cycles/hash -Small key speed test - 18-byte keys - 309.61 cycles/hash -Small key speed test - 19-byte keys - 309.00 cycles/hash -Small key speed test - 20-byte keys - 301.49 cycles/hash +Alignment 7 - 0.302 bytes/cycle - 864.04 MiB/sec @ 3 ghz +Alignment 6 - 0.301 bytes/cycle - 861.13 MiB/sec @ 3 ghz +Alignment 5 - 0.300 bytes/cycle - 859.42 MiB/sec @ 3 ghz +Alignment 4 - 0.303 bytes/cycle - 866.84 MiB/sec @ 3 ghz +Alignment 3 - 0.302 bytes/cycle - 863.44 MiB/sec @ 3 ghz +Alignment 2 - 0.302 bytes/cycle - 863.47 MiB/sec @ 3 ghz +Alignment 1 - 0.302 bytes/cycle - 863.45 MiB/sec @ 3 ghz +Alignment 0 - 0.304 bytes/cycle - 868.35 MiB/sec @ 3 ghz +Average - 0.302 bytes/cycle - 863.77 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 306.00 cycles/hash +Small key speed test - 2-byte keys - 311.00 cycles/hash +Small key speed test - 3-byte keys - 312.92 cycles/hash +Small key speed test - 4-byte keys - 303.95 cycles/hash +Small key speed test - 5-byte keys - 306.97 cycles/hash +Small key speed test - 6-byte keys - 307.63 cycles/hash +Small key speed test - 7-byte keys - 307.72 cycles/hash +Small key speed test - 8-byte keys - 304.00 cycles/hash +Small key speed test - 9-byte keys - 303.00 cycles/hash +Small key speed test - 10-byte keys - 303.55 cycles/hash +Small key speed test - 11-byte keys - 303.48 cycles/hash +Small key speed test - 12-byte keys - 304.59 cycles/hash +Small key speed test - 13-byte keys - 307.19 cycles/hash +Small key speed test - 14-byte keys - 307.62 cycles/hash +Small key speed test - 15-byte keys - 307.64 cycles/hash +Small key speed test - 16-byte keys - 303.26 cycles/hash +Small key speed test - 17-byte keys - 315.00 cycles/hash +Small key speed test - 18-byte keys - 315.40 cycles/hash +Small key speed test - 19-byte keys - 315.00 cycles/hash +Small key speed test - 20-byte keys - 300.00 cycles/hash Small key speed test - 21-byte keys - 301.00 cycles/hash -Small key speed test - 22-byte keys - 301.63 cycles/hash +Small key speed test - 22-byte keys - 301.00 cycles/hash Small key speed test - 23-byte keys - 301.00 cycles/hash -Small key speed test - 24-byte keys - 301.64 cycles/hash -Small key speed test - 25-byte keys - 302.85 cycles/hash -Small key speed test - 26-byte keys - 302.96 cycles/hash -Small key speed test - 27-byte keys - 303.55 cycles/hash -Small key speed test - 28-byte keys - 301.00 cycles/hash -Small key speed test - 29-byte keys - 303.41 cycles/hash -Small key speed test - 30-byte keys - 303.28 cycles/hash -Small key speed test - 31-byte keys - 302.45 cycles/hash -Average 303.421 cycles/hash +Small key speed test - 24-byte keys - 299.82 cycles/hash +Small key speed test - 25-byte keys - 300.29 cycles/hash +Small key speed test - 26-byte keys - 300.91 cycles/hash +Small key speed test - 27-byte keys - 300.36 cycles/hash +Small key speed test - 28-byte keys - 299.97 cycles/hash +Small key speed test - 29-byte keys - 300.00 cycles/hash +Small key speed test - 30-byte keys - 300.00 cycles/hash +Small key speed test - 31-byte keys - 300.00 cycles/hash +Small key speed test - 32-byte keys - 302.00 cycles/hash +Average 304.758 cycles/hash +Average, weighted by key length freq. 305.677 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 303.938 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/edonr256.txt b/doc/edonr256.txt index 08f49c66..dd41d211 100644 --- a/doc/edonr256.txt +++ b/doc/edonr256.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest .......... PASS [[[ Speed Tests ]]] +WARNING: timer resolution is 72 (0x48) ticks (0x91861d0fa60 - 0x91861d0fa18). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.296 bytes/cycle - 846.55 MiB/sec @ 3 ghz -Alignment 6 - 0.296 bytes/cycle - 846.52 MiB/sec @ 3 ghz -Alignment 5 - 0.295 bytes/cycle - 844.71 MiB/sec @ 3 ghz -Alignment 4 - 0.298 bytes/cycle - 853.52 MiB/sec @ 3 ghz -Alignment 3 - 0.296 bytes/cycle - 846.07 MiB/sec @ 3 ghz -Alignment 2 - 0.296 bytes/cycle - 845.83 MiB/sec @ 3 ghz -Alignment 1 - 0.296 bytes/cycle - 846.02 MiB/sec @ 3 ghz -Alignment 0 - 0.298 bytes/cycle - 853.58 MiB/sec @ 3 ghz -Average - 0.296 bytes/cycle - 847.85 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 303.70 cycles/hash -Small key speed test - 2-byte keys - 308.23 cycles/hash -Small key speed test - 3-byte keys - 308.02 cycles/hash -Small key speed test - 4-byte keys - 304.58 cycles/hash -Small key speed test - 5-byte keys - 304.93 cycles/hash -Small key speed test - 6-byte keys - 304.39 cycles/hash -Small key speed test - 7-byte keys - 305.03 cycles/hash -Small key speed test - 8-byte keys - 302.41 cycles/hash -Small key speed test - 9-byte keys - 304.83 cycles/hash -Small key speed test - 10-byte keys - 305.03 cycles/hash -Small key speed test - 11-byte keys - 305.34 cycles/hash -Small key speed test - 12-byte keys - 302.76 cycles/hash -Small key speed test - 13-byte keys - 304.43 cycles/hash -Small key speed test - 14-byte keys - 304.86 cycles/hash -Small key speed test - 15-byte keys - 304.35 cycles/hash -Small key speed test - 16-byte keys - 303.64 cycles/hash -Small key speed test - 17-byte keys - 310.52 cycles/hash -Small key speed test - 18-byte keys - 310.23 cycles/hash -Small key speed test - 19-byte keys - 317.34 cycles/hash -Small key speed test - 20-byte keys - 306.93 cycles/hash -Small key speed test - 21-byte keys - 306.91 cycles/hash -Small key speed test - 22-byte keys - 307.10 cycles/hash -Small key speed test - 23-byte keys - 306.89 cycles/hash -Small key speed test - 24-byte keys - 304.63 cycles/hash -Small key speed test - 25-byte keys - 304.68 cycles/hash -Small key speed test - 26-byte keys - 304.86 cycles/hash -Small key speed test - 27-byte keys - 304.77 cycles/hash -Small key speed test - 28-byte keys - 304.41 cycles/hash -Small key speed test - 29-byte keys - 304.37 cycles/hash -Small key speed test - 30-byte keys - 304.71 cycles/hash -Small key speed test - 31-byte keys - 304.53 cycles/hash -Average 305.788 cycles/hash +Alignment 7 - 0.278 bytes/cycle - 796.77 MiB/sec @ 3 ghz +Alignment 6 - 0.307 bytes/cycle - 877.99 MiB/sec @ 3 ghz +Alignment 5 - 0.307 bytes/cycle - 878.11 MiB/sec @ 3 ghz +Alignment 4 - 0.309 bytes/cycle - 885.43 MiB/sec @ 3 ghz +Alignment 3 - 0.308 bytes/cycle - 880.28 MiB/sec @ 3 ghz +Alignment 2 - 0.308 bytes/cycle - 880.31 MiB/sec @ 3 ghz +Alignment 1 - 0.308 bytes/cycle - 880.31 MiB/sec @ 3 ghz +Alignment 0 - 0.311 bytes/cycle - 888.54 MiB/sec @ 3 ghz +Average - 0.304 bytes/cycle - 870.97 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 293.12 cycles/hash +Small key speed test - 2-byte keys - 299.35 cycles/hash +Small key speed test - 3-byte keys - 299.60 cycles/hash +Small key speed test - 4-byte keys - 290.81 cycles/hash +Small key speed test - 5-byte keys - 293.20 cycles/hash +Small key speed test - 6-byte keys - 293.44 cycles/hash +Small key speed test - 7-byte keys - 293.24 cycles/hash +Small key speed test - 8-byte keys - 289.37 cycles/hash +Small key speed test - 9-byte keys - 294.00 cycles/hash +Small key speed test - 10-byte keys - 294.00 cycles/hash +Small key speed test - 11-byte keys - 295.34 cycles/hash +Small key speed test - 12-byte keys - 289.65 cycles/hash +Small key speed test - 13-byte keys - 295.63 cycles/hash +Small key speed test - 14-byte keys - 294.69 cycles/hash +Small key speed test - 15-byte keys - 295.01 cycles/hash +Small key speed test - 16-byte keys - 296.43 cycles/hash +Small key speed test - 17-byte keys - 309.64 cycles/hash +Small key speed test - 18-byte keys - 310.80 cycles/hash +Small key speed test - 19-byte keys - 310.52 cycles/hash +Small key speed test - 20-byte keys - 295.97 cycles/hash +Small key speed test - 21-byte keys - 296.46 cycles/hash +Small key speed test - 22-byte keys - 296.98 cycles/hash +Small key speed test - 23-byte keys - 297.10 cycles/hash +Small key speed test - 24-byte keys - 294.42 cycles/hash +Small key speed test - 25-byte keys - 296.35 cycles/hash +Small key speed test - 26-byte keys - 295.86 cycles/hash +Small key speed test - 27-byte keys - 296.38 cycles/hash +Small key speed test - 28-byte keys - 294.99 cycles/hash +Small key speed test - 29-byte keys - 295.53 cycles/hash +Small key speed test - 30-byte keys - 294.74 cycles/hash +Small key speed test - 31-byte keys - 295.68 cycles/hash +Small key speed test - 32-byte keys - 296.50 cycles/hash +Average 296.400 cycles/hash +Average, weighted by key length freq. 297.382 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 294.783 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests ]]] diff --git a/doc/epyc.html b/doc/epyc.html new file mode 100644 index 00000000..8b62b5bd --- /dev/null +++ b/doc/epyc.html @@ -0,0 +1,1927 @@ + + + + + + + + +

SMhasher

+ +

Alternative timings with a fast AMD EPYC 9554P 64-Core Processor (Server from 2024)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Hash functionMiB/seccycl./hashcycl./mapsizeQuality problems
donothing3213553281.724.00-13test NOP
donothing6413541357.624.00-13test NOP
donothing12813541295.404.00-13test NOP
NOP_OAAT_read6413331965.846.00-47test NOP
BadHash864.1957.97-47test FAIL
sumhash24548.6821.89-363test FAIL
sumhash32100902.8212.90-863UB, test FAIL
multiply_shift7545.6417.13113.71 (1)345fails all tests
pair_multiply_shift8074.0327.09114.46 (1)609fails all tests

crc32431.31114.96135.40 (1)422insecure, 8590x collisions, distrib
md5_32394.22528.58666.88 (1)4419
md5_64394.25536.05667.01 (1)4419
md5-128394.26542.95676.78 (1)4419
sha1_32695.43392.33564.22 (1)5126Sanity, Cyclic low32, collisions, 36.6% distrib
sha1_64696.39401.69571.37 (1)5126Sanity, Cyclic low32, collisions, 36.6% distrib
sha1-160695.69454.58610.97 (1)5126Comb/Cyclic low32
sha2-224237.47846.901016.77 (1)Cyclic low32
sha2-224_64237.61848.431014.99 (2)Cyclic low32
sha2-256238.66843.581007.11 (1)
sha2-256_64237.48846.181015.99 (2)
sha1ni1830.17145.19264.69 (1)989insecure,sanity, Permutation, Zeroes, amd epyc only
sha1ni_321830.19137.47276.48 (0)989insecure,sanity, Permutation, Zeroes, TwoBytes, amd epyc only
sha2ni-2561716.21154.79277.64 (1)4241insecure,sanity, Permutation, Zeroes, amd epyc only
sha2ni-256_641716.59147.99270.44 (1)4241insecure,sanity, Permutation, Zeroes, TwoBytes, amd epyc only
blake3_c1801.36315.27445.99 (16)no 32bit portability
rmd128355.57550.15704.03 (1)
rmd160187.931006.901186.82 (2)
rmd256394.80503.14656.81 (2)
edonr224622.92344.19468.41 (1)
edonr256622.52343.77465.60 (2)
blake2s-128165.101167.721343.40 (1)
blake2s-160165.011174.441362.35 (8)
blake2s-224165.081175.121343.20 (2)
blake2s-256165.021176.591384.37 (1)
blake2s-256_64165.141180.711357.44 (1)
blake2b-160282.591351.971545.04 (1)
blake2b-224282.571352.011524.89 (2)
blake2b-256282.411353.611536.79 (1)Sparse high 32-bit
blake2b-256_64282.181408.581543.69 (1)
asconhashv12194.41675.45705.48 (1)6490
asconhashv12_64194.44323.58330.37 (1)4341
sha3-256170.382333.112562.86 (18)PerlinNoise
sha3-256_64170.432335.552564.19 (10)PerlinNoise
hasshe22884.7458.16172.95 (2)445Permutation,TwoBytes,Zeroes,Seed
poly_1_mersenne1730.2542.07156.71 (1)479fails most tests
poly_2_mersenne1730.2249.00161.78 (1)479
poly_3_mersenne1730.2055.46168.07 (1)479
poly_4_mersenne1730.1762.80173.56 (1)479
tabulation3236432.7222.93150.62 (1)848collisions
tabulation7883.2727.87128.94 (1)554
crc32_hw9223.3524.11142.62 (1)653insecure, 100% bias, collisions, distrib, machine-specific (SSE4.2/NEON)
crc32_hw126518.7230.22139.68 (1)671insecure, 100% bias, collisions, distrib, machine-specific (x86 SSE4.2)
crc64_hw9223.5423.83109.81 (0)652insecure, 100% bias, collisions, distrib, machine-specific (SSE4.2/NEON)
crc32_pclmul11163.0183.31291.51 (3)481insecure, 100% bias, collisions, distrib, machine-specific (x86 PCLMUL)
crc64_jones1insecure, 100% bias, collisions, distrib
crc64_jones2insecure, 100% bias, collisions, distrib
crc64_jones3insecure, 100% bias, collisions, distrib
crc64_jonesinsecure, 100% bias, collisions, distrib
o1hash13351023.109.09101.49 (1)101insecure, zeros, fails all tests
fibonacci100430.6514.91422.62 (1)1692UB, zeros, fails all tests
FNV1a863.6859.48132.37 (1)204zeros, fails all tests
FNV1A_Totenschiff6918.9016.80144.67 (0)270UB, zeros, fails all tests
FNV1A_Pippip_Yurii6918.7518.20145.23 (1)147UB, sanity, fails all tests
FNV1a_YT17678.6020.43143.28 (1)321UB, fails all tests
FNV26919.2422.0792.51 (1)278fails all tests
FNV64863.8959.8374.41 (1)79fails all tests
FNV128431.31121.85133.73 (1)171fails all tests
k-hash3214854.8939.41161.51 (1)808UB, insecure, zeros, fails all tests
k-hash6414133.9028.97145.11 (1)609UB, insecure, zeros, fails all tests
fletcher224835.0311.26188.60 (0)248UB, fails all tests
fletcher424828.9611.25188.82 (1)371UB, fails all tests
bernstein1153.5744.91134.59 (1)41fails all tests
sdbm863.9257.36132.34 (0)41fails all tests
x171153.5646.44135.52 (1)7999.98% bias, fails all tests
libiberty692.1669.72132.77 (1)37insecure, 100% bias, fails all tests
gcc692.1670.70133.84 (1)39insecure, 100% bias, fails all tests
JenkinsOOAT692.1591.26138.71 (1)15353.5% bias, fails all tests
JenkinsOOAT_perl692.1677.17136.62 (1)651.5-11.5% bias, 7.2x collisions, LongNeighbors
MicroOAAT1153.5646.67135.28 (1)68100% bias, distrib
beamsplitter534.89827.06858.12 (1)UB, too many bad seeds
discohash2951.62222.03343.63 (4)1294
pearsonhash64431.42117.5083.31 (1) Avalanche, Seed, SSSE3 only. broken MSVC
pearsonhash128431.40120.5485.08 (1) Avalanche, Seed, SSSE3 only. broken MSVC
pearsonhash256424.97124.5994.41 (0) Avalanche, Seed, SSSE3 only. broken MSVC
VHASH_3213868.7449.88185.85 (1)1231sanity, Seed, MomentChi2
VHASH_6413863.0049.90170.18 (1)1231sanity, Seed, Sparse
farsh3254178.8446.31173.01 (1)944insecure: AppendedZeroes, collisions+bias, MomentChi2, LongNeighbors
farsh6427066.1088.09214.66 (1)944insecure: AppendedZeroes, collisions+bias, MomentChi2, LongNeighbors
farsh12813584.69175.25232.81 (2) ??
farsh2566796.97347.33402.81 (1) ??
jodyhash322768.3025.57146.20 (1)102bias, collisions, distr, LongNeighbors
jodyhash646105.1722.53117.98 (1)118bias, collisions, distr, LongNeighbors
lookup32965.9826.94146.43 (1)341UB, 28% bias, collisions, 30% distr
superfast2306.9236.88147.52 (1)210UB, bad seed 0, 91% bias, 5273.01x collisions, 37% distr, BIC
MurmurOAAT575.2986.71135.26 (1)47collisions, 99.998% distr., BIC, bad seed 0, LongNeighbors
Crap83460.1225.97147.54 (1)342UB, 2.42% bias, collisions, 2% distrib
Murmur12306.9436.14153.79 (1)UB, fails all tests, 1 bad seed
Murmur23459.8130.22151.61 (1)358UB, 1 bad seed, 1.7% bias, 81x coll, 1.7% distrib, BIC
Murmur2A3459.6634.28155.44 (1)407UB, 1 bad seed, 12.7% bias, LongNeighbors
Murmur2B6916.7726.8898.73 (0)433UB, 1.8% bias, collisions, 3.4% distrib, BIC
Murmur2C4611.6336.97120.91 (1)444UB, 2^32 bad seeds, 91% bias, collisions, distr, BIC, LongNeighbors
Murmur3A3295.1736.50155.47 (1)351UB, Moment Chi2 69
PMurHash323372.0236.67154.57 (1)1862Moment Chi2 69
Murmur3C4710.4844.19143.79 (1)859UB, LongNeighbors, DiffDist
PMPML_3212125.0831.59157.83 (1)1084Avalanche >512, unseeded: Seed, MomentChi2
PMPML_6418188.3731.12129.21 (1)1305unseeded: Seed, MomentChi2
xxHash326914.1337.53158.27 (1)738LongNeighbors, collisions with 4bit diff, MomentChi2 220
metrohash64_118482.9029.23123.22 (1)624UB, LongNeighbors, BIC, MomentChi2
metrohash64_218586.3929.80123.42 (1)627UB, LongNeighbors
metrohash64crc_124893.2032.23126.27 (1)632UB, cyclic collisions 8 byte, BIC, MomentChi2, machine-specific (SSE4.2/NEON)
metrohash64crc_224896.8732.23126.58 (1)632UB, cyclic collisions 8 byte, BIC, machine-specific (SSE4.2/NEON)
metrohash128_120149.0364.51172.86 (1)773UB, LongNeighbors
metrohash128_220148.7564.43172.38 (1)773UB, LongNeighbors
cmetrohash64_1o14841.2830.60124.64 (1)3506LongNeighbors, MomentChi2
cmetrohash64_118548.7429.23123.28 (0)652LongNeighbors, BIC, MomentChi2
cmetrohash64_218504.6229.80124.87 (1)655LongNeighbors
City64noSeed15796.0521.72117.22 (1)1038Avalanche, Sparse, TwoBytes, MomentChi2, Seed
City6415791.0533.49128.12 (1)1120Sparse, TwoBytes
t1ha1_64be13826.4420.37120.27 (1)555Avalanche
t1ha0_32le7905.2036.06123.51 (0)509Sparse, LongNeighbors
t1ha0_32be7545.5037.72123.94 (1)533Sparse, LongNeighbors
t1ha2_stream15786.5856.76159.22 (1)1665Sparse, Permutation, LongNeighbors
t1ha2_stream12815783.1371.63174.11 (1)1665Sparse, Permutation, LongNeighbors
aesnihash6150.1942.24153.76 (1)1209fails many tests, machine-specific (x64 AES-NI)
falkhash66674.4583.69197.94 (1)264Sparse, LongNeighbors, machine-specific (x64 AES-NI)
MeowHash41878.9457.37173.31 (1)1764Sparse, machine-specific (x64 AES-NI)
MeowHash64low41883.3457.32174.01 (1)1764Sparse, machine-specific (x64 AES-NI)
MeowHash32low41888.7557.42183.70 (1)1764Sparse, machine-specific (x64 AES-NI)
t1ha1_64le16532.2719.71119.32 (1)517Avalanche
tifuhash_64172.43416.72328.84 (2)276
floppsyhash170.71482.13405.13 (1)623
chaskey1496.3889.69187.58 (1)1609PerlinNoise
SipHash1327.84106.92206.44 (1)1071
HalfSipHash1537.9457.21168.21 (1)700zeroes
GoodOAAT1153.5554.36136.28 (1)237
pearsonbhash641977.4183.26133.74 (1)683
pearsonbhash1281977.3695.75140.26 (1)1134
pearsonbhash2561977.3596.98141.75 (0)844
prvhash64_64m3459.9334.36126.31 (1)349
prvhash64_643365.9035.25127.63 (1)384
prvhash64_1283952.6553.25156.32 (1)718
prvhash64s_646496.17231.86325.00 (1)2640
prvhash64s_1286694.05303.41388.48 (1)2799
SipHash132511.9678.33184.19 (1)7780.9% bias
discohash12869.00177.16281.62 (1)1294bad seeds
discohash1-1282858.71213.13318.91 (1)1294
discohash22861.12179.98280.35 (1)1294
discohash2-1282867.73214.01318.93 (1)1294
discoNONG3114.34390.56497.82 (1)bad seeds
TSip5425.3439.88148.19 (1)519!msvc
aesni29051.5328.63126.17 (1)519machine-specific (x64 AES-NI)
aesni-low29025.6628.63125.00 (1)519machine-specific (x64 AES-NI)
seahash7502.7441.48142.39 (1)871PerlinNoise, !msvc
seahash32low7502.8241.49170.74 (1)871PerlinNoise, !msvc
clhash25785.6052.77167.66 (1)1809PerlinNoise, machine-specific (SSE4.2/NEON)
HighwayHash646242.5899.55248.41 (3)2546
Murmur3F7504.2545.6993.19 (1)699UB
fasthash326914.0528.43146.59 (1)566UB
fasthash646914.2726.68101.37 (1)509UB, Moment Chi2 5159 !
MUM12875.1826.63121.17 (1)1912UB, too many bad seeds, machine-specific (32/64 differs)
MUMlow12777.2426.62151.29 (1)1912UB, 5 bad seeds
xmsx322306.9435.55151.34 (1)1922 bad seeds
mirhash4180.2326.69121.08 (1)11122^36 bad seeds, UB, LongNeighbors, machine-specific (32/64 differs)
mirhash32low4174.9026.71152.31 (1)11124 bad seeds, UB, Cyclic, LongNeighbors, machine-specific (32/64 differs)
mirhashstrict3256.3438.89127.81 (1)1112
mirhashstrict32low3256.3439.29160.31 (1)11121 bad seed, MomentChi2 9
mx37903.3536.63107.46 (1)734UB
pengyhash16751.8050.45156.07 (1)421
City325499.3342.69159.11 (1)1319
City64low15791.4633.34159.78 (1)1120
City12815862.5774.78182.38 (1)1841
CityCrc12818368.7975.35181.49 (1)295
CityCrc25618385.35159.50351.06 (1)
FarmHash3229054.4533.34160.20 (1)11489machine-specific (x64 SSE4/AVX/NEON)
FarmHash6415787.6833.47128.34 (1)3758
FarmHash12814744.8160.16149.85 (1)163
farmhash32_c28997.2933.34161.92 (1)762machine-specific (x64 SSE4/AVX/NEON)
farmhash64_c15787.0633.47128.43 (1)3688
farmhash128_c14708.8061.24149.39 (1)1890
metrohash6418557.6929.63124.03 (1)624LongNeighbors
metrohash12814950.6263.70173.05 (1)624UB
metrohash128crc_124882.4568.24177.15 (1)723UB, machine-specific (SSE4.2/NEON)
metrohash128crc_224883.0968.23177.39 (1)723UB, machine-specific (SSE4.2/NEON)
xxHash6410056.4537.32130.57 (1)1999
Spooky3216149.7935.01156.25 (1)2221UB
Spooky6416149.9234.96125.91 (1)2221UB
Spooky12816150.3648.58136.77 (1)2221UB
SpookyV2_3216144.8335.92158.32 (1)2069
SpookyV2_6416145.8735.89126.17 (1)2069
SpookyV2_12816144.3149.90137.70 (1)2069
t1ha2_atonce15793.7526.50123.56 (0)541
t1ha2_atonce12815790.5649.34145.55 (1)613LongNeighbors
t1ha0_aes_noavx31307.5927.00123.67 (1)925LongNeighbors, machine-specific (x86 AES-NI)
t1ha0_aes_avx131329.3726.51123.17 (1)843LongNeighbors, machine-specific (x64 AVX)
t1ha0_aes_avx280055.0526.52124.04 (1)792LongNeighbors, machine-specific (x64 AVX2)
ahash6410923.4931.33528.54 (14)412rust
xxh345761.9920.57115.13 (1)744Moment Chi2 14974, BIC
xxh3low45985.2820.57149.19 (1)756Moment Chi2 1.8e+9 !
xxh12845404.5922.72118.73 (1)1012Moment Chi2 14974
xxh128low45594.0522.65118.31 (1)1012Moment Chi2 14974, BIC
MeowHash41878.9457.37173.31 (1)1764Sparse low32, machine-specific (x64 AES-NI)
MeowHash32low41888.7557.42183.70 (1)1764Sparse, machine-specific (x64 AES-NI)
wyhash24518.9518.90108.28 (1)474
wyhash322532.8937.95222.17 (4) 4264 bad and broken seeds, 32-bit
wyhash32low24515.9818.91145.84 (1)4745 bad seeds
w1hash16950.3124.53115.22 (1)
rapidhash24480.1620.11110.33 (1)574
rapidhash_unrolled24198.1919.58109.39 (1)782
umash3240085.2728.59152.60 (1)1530
umash32_hi40050.0529.18152.17 (1)1530
umash6440087.2028.12121.30 (1)1530
umash12825929.9428.61123.04 (1)1530
halftime_hash647407.7280.64187.80 (1)1530
halftime_hash12822952.8770.56192.21 (1)1530
halftime_hash25640050.3977.73201.87 (1)1530
halftime_hash51240355.0389.53213.99 (1)1530
nmhash3226048.4041.39161.78 (1)2445
nmhash32x26004.4131.23149.38 (1)1494
k-hashv327439.7049.75168.97 (1)1280
k-hashv647463.6748.83142.47 (1)1279
komihash18957.7823.26116.93 (1)728
polymur14155.4832.45123.59 (1)1128
gxhash64103530.0827.00147.16 (1)
+ +Other timings: + + +

Summary

+

I added some SSE assisted hashes and fast intel/arm CRC32-C and AES HW variants, but not the fastest crcutil yet. See our crcutil results. See also the old https://code.google.com/p/smhasher/w/list.

+

So the fastest hash functions on x86_64 without quality problems are:

+ +

Hash functions for symbol tables or hash tables typically use 32 bit hashes, for databases, file systems and file checksums typically 64 or 128bit, for crypto now starting with 256 bit.

+

Typical median key size in perl5 is 20, the most common 4. Similar for all other dynamic languages. See github.com/rurban/perl-hash-stats

+

When used in a hash table the instruction cache will usually beat the CPU and throughput measured here. In my tests the smallest FNV1A beats the fastest crc32_hw1 with Perl 5 hash tables. Even if those worse hash functions will lead to more collisions, the overall speed advantage and inline-ability beats the slightly worse quality. See e.g. A Seven-Dimensional Analysis of Hashing Methods and its Implications on Query Processing for a concise overview of the best hash table strategies, confirming that the simplest Mult hashing (bernstein, FNV*, x17, sdbm) always beat "better" hash functions (Tabulation, Murmur, Farm, ...) when used in a hash table.

+

The fast hash functions tested here are recommendable as fast for file digests and maybe bigger databases, but not for 32bit hash tables. The "Quality problems" lead to less uniform distribution, i.e. more collisions and worse performance, but are rarely related to real security attacks, just the 2nd sanity zeroes test against \0 invariance is security relevant.

+

Columns

+

MiB/sec: The average of the Bulk key speed test for alignments 0-7 with 262144-byte keys. The higher the better.

+

cycl./hash: The average of the Small key speed test for 1-31 byte keys. The smaller the better.

+

cycl./map: The result of the Hashmap test for /usr/dict/words with std::unordered_map get queries, with the standard deviation in brackets. This tests the inlinability of the hash function (see size). The smaller the better.

+

size: The object size in byte on AMD64. This affects the inlinability in e.g. hash tables. The smaller the better.

+

Quality problems: See the failures in the linked doc. The less the better.

+

Other

+ +

SECURITY

+

The hash table attacks described in SipHash against City, Murmur or Perl JenkinsOAAT or at Hash Function Lounge are not included here.

+

Such an attack avoidance cannot be the problem of the hash function, but only the hash table collision resolution scheme. You can attack every single hash function, even the best and most secure if you detect the seed, e.g. from language (mis-)features, side-channel attacks, collision timings and independly the sort-order, so you need to protect your collision handling scheme from the worst-case O(n), i.e. separate chaining with linked lists. Linked lists chaining allows high load factors, but is very cache-unfriendly. The only recommendable linked list scheme is inlining the key or hash into the array. Nowadays everybody uses fast open addressing, even if the load factor needs to be ~50%, unless you use Cuckoo Hashing.

+

I.e. the usage of SipHash for their hash table in Python 3.4, ruby, rust, systemd, OpenDNS, Haskell and OpenBSD is pure security theatre. SipHash is not secure enough for security purposes and not fast enough for general usage. Brute-force generation of ~32k collisions need 2-4m for all these hashes. siphash being the slowest needs max 4m, other typically max 2m30s, with <10s for practical 16k collision attacks with all hash functions. Using Murmur is usually slower than a simple Mult, even in the worst case. Provable secure is only uniform hashing, i.e. 2-5 independent Mult or Tabulation, or using a guaranteed logarithmic collision scheme (a tree) or a linear collision scheme, such as Robin Hood or Cockoo hashing with collision counting.

+

One more note regarding security: Nowadays even SHA1 can be solved in a solver, like Z3 (or faster ones) for practical hash table collision attacks (i.e. 14-20 bits). All hash functions with less than 160 bits tested here cannot be considered "secure" at all.

+

The '' vulnerability attack with binary keys is tested in the 2nd Sanity Zero test.

+

CRYPTO

+

The official NIST hash function testsuite does not do such extensive statistical tests, to search for weak ranges in the bits. Also crypto does not change the initial state, which we do here for our random 32bit seed. Crypto mostly cares about unreversable key -> hash functions without changing the initial fixed state and timings/sidechannel attacks.

+

The NIST "Cryptographic Algorithm Validation Program" (CAVP) involves the testing of the implementations of FIPS-approved and NIST-recommended cryptographic algorithms. During the NIST SHA-3 competition, the testing methodology was borrowed from the "CAVP", as the KATs and MCTs of the SHA-3 Competition Test Suite were based on the CAVP tests for SHA-2. In addition to this, the “Extremely Long Message Test,” not present in the CAVP for SHA-2, required the submitters to generate the hash value corresponding to a message with a length of 1 GiB. “NIST - Cryptographic Algorithm Validation Program (CAVP),” June 2017. Available: http://csrc.nist.gov/groups/STM/cavp (No testing source code provided, just high-level descriptions)

+

Two other independent third party testsuites found an extensive number of bugs and weaknesses in the SHA3 candidates. "Finding Bugs in Cryptographic Hash Function Implementations", Nicky Mouha, Mohammad S Raunak, D. Richard Kuhn, and Raghu Kacker, 2017. https://eprint.iacr.org/2017/891.pdf

+

Maybe independent researchers should come together to do a better public SHA-4 round, based on better and more testing methods, open source code for the tests, and using standard industry practices, such as valgrind, address-sanitizer and ubsan to detect obvious bugs.

+

PROBLEMS

+ +

Typical undefined behaviour (UB) problems:

+ + + diff --git a/doc/hasshe2.txt b/doc/hasshe2.txt index c08948d1..a853d05f 100644 --- a/doc/hasshe2.txt +++ b/doc/hasshe2.txt @@ -9,49 +9,53 @@ Running AppendedZeroesTest . FAIL !!!!! [[[ Speed Tests ]]] +WARNING: timer resolution is 108 (0x6c) ticks (0x12c9e943aca4 - 0x12c9e943ac38). Broken VDSO? Bulk speed test - 262144-byte keys -Alignment 7 - 0.971 bytes/cycle - 2778.15 MiB/sec @ 3 ghz -Alignment 6 - 0.970 bytes/cycle - 2773.99 MiB/sec @ 3 ghz -Alignment 5 - 0.969 bytes/cycle - 2773.45 MiB/sec @ 3 ghz -Alignment 4 - 0.970 bytes/cycle - 2774.48 MiB/sec @ 3 ghz -Alignment 3 - 0.969 bytes/cycle - 2772.73 MiB/sec @ 3 ghz -Alignment 2 - 0.970 bytes/cycle - 2774.19 MiB/sec @ 3 ghz -Alignment 1 - 0.969 bytes/cycle - 2771.42 MiB/sec @ 3 ghz -Alignment 0 - 0.969 bytes/cycle - 2772.73 MiB/sec @ 3 ghz -Average - 0.970 bytes/cycle - 2773.89 MiB/sec @ 3 ghz - -Small key speed test - 1-byte keys - 56.59 cycles/hash -Small key speed test - 2-byte keys - 56.59 cycles/hash -Small key speed test - 3-byte keys - 56.62 cycles/hash -Small key speed test - 4-byte keys - 56.00 cycles/hash -Small key speed test - 5-byte keys - 56.67 cycles/hash -Small key speed test - 6-byte keys - 56.00 cycles/hash -Small key speed test - 7-byte keys - 56.55 cycles/hash -Small key speed test - 8-byte keys - 56.00 cycles/hash -Small key speed test - 9-byte keys - 56.62 cycles/hash -Small key speed test - 10-byte keys - 56.55 cycles/hash -Small key speed test - 11-byte keys - 56.60 cycles/hash -Small key speed test - 12-byte keys - 56.61 cycles/hash -Small key speed test - 13-byte keys - 56.57 cycles/hash -Small key speed test - 14-byte keys - 56.66 cycles/hash -Small key speed test - 15-byte keys - 56.85 cycles/hash -Small key speed test - 16-byte keys - 56.32 cycles/hash -Small key speed test - 17-byte keys - 72.46 cycles/hash -Small key speed test - 18-byte keys - 72.42 cycles/hash -Small key speed test - 19-byte keys - 72.42 cycles/hash -Small key speed test - 20-byte keys - 72.52 cycles/hash -Small key speed test - 21-byte keys - 72.77 cycles/hash -Small key speed test - 22-byte keys - 72.88 cycles/hash -Small key speed test - 23-byte keys - 72.87 cycles/hash -Small key speed test - 24-byte keys - 72.77 cycles/hash -Small key speed test - 25-byte keys - 72.77 cycles/hash -Small key speed test - 26-byte keys - 72.92 cycles/hash -Small key speed test - 27-byte keys - 72.89 cycles/hash -Small key speed test - 28-byte keys - 72.77 cycles/hash -Small key speed test - 29-byte keys - 72.79 cycles/hash -Small key speed test - 30-byte keys - 72.83 cycles/hash -Small key speed test - 31-byte keys - 72.87 cycles/hash -Average 64.347 cycles/hash +Alignment 7 - 1.010 bytes/cycle - 2889.43 MiB/sec @ 3 ghz +Alignment 6 - 1.011 bytes/cycle - 2892.91 MiB/sec @ 3 ghz +Alignment 5 - 1.008 bytes/cycle - 2882.90 MiB/sec @ 3 ghz +Alignment 4 - 0.997 bytes/cycle - 2852.78 MiB/sec @ 3 ghz +Alignment 3 - 1.008 bytes/cycle - 2882.91 MiB/sec @ 3 ghz +Alignment 2 - 1.007 bytes/cycle - 2881.86 MiB/sec @ 3 ghz +Alignment 1 - 1.008 bytes/cycle - 2883.29 MiB/sec @ 3 ghz +Alignment 0 - 1.004 bytes/cycle - 2873.32 MiB/sec @ 3 ghz +Average - 1.007 bytes/cycle - 2879.93 MiB/sec @ 3 ghz + +Small key speed test - 1-byte keys - 54.83 cycles/hash +Small key speed test - 2-byte keys - 54.74 cycles/hash +Small key speed test - 3-byte keys - 54.74 cycles/hash +Small key speed test - 4-byte keys - 54.82 cycles/hash +Small key speed test - 5-byte keys - 54.78 cycles/hash +Small key speed test - 6-byte keys - 54.74 cycles/hash +Small key speed test - 7-byte keys - 54.62 cycles/hash +Small key speed test - 8-byte keys - 54.65 cycles/hash +Small key speed test - 9-byte keys - 54.77 cycles/hash +Small key speed test - 10-byte keys - 54.76 cycles/hash +Small key speed test - 11-byte keys - 54.76 cycles/hash +Small key speed test - 12-byte keys - 54.74 cycles/hash +Small key speed test - 13-byte keys - 54.74 cycles/hash +Small key speed test - 14-byte keys - 54.75 cycles/hash +Small key speed test - 15-byte keys - 54.78 cycles/hash +Small key speed test - 16-byte keys - 54.00 cycles/hash +Small key speed test - 17-byte keys - 70.23 cycles/hash +Small key speed test - 18-byte keys - 70.24 cycles/hash +Small key speed test - 19-byte keys - 70.22 cycles/hash +Small key speed test - 20-byte keys - 70.23 cycles/hash +Small key speed test - 21-byte keys - 70.23 cycles/hash +Small key speed test - 22-byte keys - 70.25 cycles/hash +Small key speed test - 23-byte keys - 70.22 cycles/hash +Small key speed test - 24-byte keys - 70.23 cycles/hash +Small key speed test - 25-byte keys - 70.23 cycles/hash +Small key speed test - 26-byte keys - 70.23 cycles/hash +Small key speed test - 27-byte keys - 70.25 cycles/hash +Small key speed test - 28-byte keys - 70.27 cycles/hash +Small key speed test - 29-byte keys - 70.22 cycles/hash +Small key speed test - 30-byte keys - 70.23 cycles/hash +Small key speed test - 31-byte keys - 70.22 cycles/hash +Small key speed test - 32-byte keys - 70.16 cycles/hash +Average 62.465 cycles/hash +Average, weighted by key length freq. 61.474 cycles/hash (using 93.0% of top-7m Tranco DNS names dataset) +Average, weighted by key length freq. 54.665 cycles/hash (using 27.1% of startup-1M UMASH trace dataset) [[[ 'Hashmap' Speed Tests (when inlined) ]]] diff --git a/doc/i686.html b/doc/i686.html index be394994..1610e9ee 100644 --- a/doc/i686.html +++ b/doc/i686.html @@ -1200,6 +1200,14 @@

SMhasher

+CityCrc256 +19603.25 +42.27 +149.40 (4) + + + + FarmHash32 11215.25 59.39 @@ -1519,12 +1527,22 @@

SMhasher

1128 + +gxhash64 +1017.15 +178.25 +313.64 (9) + + + Other timings: