github.com/cryptoecc/eth-ecc@v0.0.3/consensus/ethash/algorithm.go (about) 1 // Copyright 2017 The go-ethereum Authors 2 // This file is part of the go-ethereum library. 3 // 4 // The go-ethereum library is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU Lesser General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // The go-ethereum library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU Lesser General Public License for more details. 13 // 14 // You should have received a copy of the GNU Lesser General Public License 15 // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. 16 17 package ethash 18 19 import ( 20 "encoding/binary" 21 "hash" 22 "math/big" 23 "reflect" 24 "runtime" 25 "sync" 26 "sync/atomic" 27 "time" 28 "unsafe" 29 30 "github.com/cryptoecc/ETH-ECC/common" 31 "github.com/cryptoecc/ETH-ECC/common/bitutil" 32 "github.com/cryptoecc/ETH-ECC/crypto" 33 "github.com/cryptoecc/ETH-ECC/log" 34 "golang.org/x/crypto/sha3" 35 ) 36 37 const ( 38 datasetInitBytes = 1 << 30 // Bytes in dataset at genesis 39 datasetGrowthBytes = 1 << 23 // Dataset growth per epoch 40 cacheInitBytes = 1 << 24 // Bytes in cache at genesis 41 cacheGrowthBytes = 1 << 17 // Cache growth per epoch 42 epochLength = 30000 // Blocks per epoch 43 mixBytes = 128 // Width of mix 44 hashBytes = 64 // Hash length in bytes 45 hashWords = 16 // Number of 32 bit ints in a hash 46 datasetParents = 256 // Number of parents of each dataset element 47 cacheRounds = 3 // Number of rounds in cache production 48 loopAccesses = 64 // Number of accesses in hashimoto loop 49 ) 50 51 // cacheSize returns the size of the ethash verification cache that belongs to a certain 52 // block number. 53 func cacheSize(block uint64) uint64 { 54 epoch := int(block / epochLength) 55 if epoch < maxEpoch { 56 return cacheSizes[epoch] 57 } 58 return calcCacheSize(epoch) 59 } 60 61 // calcCacheSize calculates the cache size for epoch. The cache size grows linearly, 62 // however, we always take the highest prime below the linearly growing threshold in order 63 // to reduce the risk of accidental regularities leading to cyclic behavior. 64 func calcCacheSize(epoch int) uint64 { 65 size := cacheInitBytes + cacheGrowthBytes*uint64(epoch) - hashBytes 66 for !new(big.Int).SetUint64(size / hashBytes).ProbablyPrime(1) { // Always accurate for n < 2^64 67 size -= 2 * hashBytes 68 } 69 return size 70 } 71 72 // datasetSize returns the size of the ethash mining dataset that belongs to a certain 73 // block number. 74 func datasetSize(block uint64) uint64 { 75 epoch := int(block / epochLength) 76 if epoch < maxEpoch { 77 return datasetSizes[epoch] 78 } 79 return calcDatasetSize(epoch) 80 } 81 82 // calcDatasetSize calculates the dataset size for epoch. The dataset size grows linearly, 83 // however, we always take the highest prime below the linearly growing threshold in order 84 // to reduce the risk of accidental regularities leading to cyclic behavior. 85 func calcDatasetSize(epoch int) uint64 { 86 size := datasetInitBytes + datasetGrowthBytes*uint64(epoch) - mixBytes 87 for !new(big.Int).SetUint64(size / mixBytes).ProbablyPrime(1) { // Always accurate for n < 2^64 88 size -= 2 * mixBytes 89 } 90 return size 91 } 92 93 // hasher is a repetitive hasher allowing the same hash data structures to be 94 // reused between hash runs instead of requiring new ones to be created. 95 type hasher func(dest []byte, data []byte) 96 97 // makeHasher creates a repetitive hasher, allowing the same hash data structures to 98 // be reused between hash runs instead of requiring new ones to be created. The returned 99 // function is not thread safe! 100 func makeHasher(h hash.Hash) hasher { 101 // sha3.state supports Read to get the sum, use it to avoid the overhead of Sum. 102 // Read alters the state but we reset the hash before every operation. 103 type readerHash interface { 104 hash.Hash 105 Read([]byte) (int, error) 106 } 107 rh, ok := h.(readerHash) 108 if !ok { 109 panic("can't find Read method on hash") 110 } 111 outputLen := rh.Size() 112 return func(dest []byte, data []byte) { 113 rh.Reset() 114 rh.Write(data) 115 rh.Read(dest[:outputLen]) 116 } 117 } 118 119 // seedHash is the seed to use for generating a verification cache and the mining 120 // dataset. 121 func seedHash(block uint64) []byte { 122 seed := make([]byte, 32) 123 if block < epochLength { 124 return seed 125 } 126 keccak256 := makeHasher(sha3.NewLegacyKeccak256()) 127 for i := 0; i < int(block/epochLength); i++ { 128 keccak256(seed, seed) 129 } 130 return seed 131 } 132 133 // generateCache creates a verification cache of a given size for an input seed. 134 // The cache production process involves first sequentially filling up 32 MB of 135 // memory, then performing two passes of Sergio Demian Lerner's RandMemoHash 136 // algorithm from Strict Memory Hard Hashing Functions (2014). The output is a 137 // set of 524288 64-byte values. 138 // This method places the result into dest in machine byte order. 139 func generateCache(dest []uint32, epoch uint64, seed []byte) { 140 // Print some debug logs to allow analysis on low end devices 141 logger := log.New("epoch", epoch) 142 143 start := time.Now() 144 defer func() { 145 elapsed := time.Since(start) 146 147 logFn := logger.Debug 148 if elapsed > 3*time.Second { 149 logFn = logger.Info 150 } 151 logFn("Generated ethash verification cache", "elapsed", common.PrettyDuration(elapsed)) 152 }() 153 // Convert our destination slice to a byte buffer 154 header := *(*reflect.SliceHeader)(unsafe.Pointer(&dest)) 155 header.Len *= 4 156 header.Cap *= 4 157 cache := *(*[]byte)(unsafe.Pointer(&header)) 158 159 // Calculate the number of theoretical rows (we'll store in one buffer nonetheless) 160 size := uint64(len(cache)) 161 rows := int(size) / hashBytes 162 163 // Start a monitoring goroutine to report progress on low end devices 164 var progress uint32 165 166 done := make(chan struct{}) 167 defer close(done) 168 169 go func() { 170 for { 171 select { 172 case <-done: 173 return 174 case <-time.After(3 * time.Second): 175 logger.Info("Generating ethash verification cache", "percentage", atomic.LoadUint32(&progress)*100/uint32(rows)/4, "elapsed", common.PrettyDuration(time.Since(start))) 176 } 177 } 178 }() 179 // Create a hasher to reuse between invocations 180 keccak512 := makeHasher(sha3.NewLegacyKeccak512()) 181 182 // Sequentially produce the initial dataset 183 keccak512(cache, seed) 184 for offset := uint64(hashBytes); offset < size; offset += hashBytes { 185 keccak512(cache[offset:], cache[offset-hashBytes:offset]) 186 atomic.AddUint32(&progress, 1) 187 } 188 // Use a low-round version of randmemohash 189 temp := make([]byte, hashBytes) 190 191 for i := 0; i < cacheRounds; i++ { 192 for j := 0; j < rows; j++ { 193 var ( 194 srcOff = ((j - 1 + rows) % rows) * hashBytes 195 dstOff = j * hashBytes 196 xorOff = (binary.LittleEndian.Uint32(cache[dstOff:]) % uint32(rows)) * hashBytes 197 ) 198 bitutil.XORBytes(temp, cache[srcOff:srcOff+hashBytes], cache[xorOff:xorOff+hashBytes]) 199 keccak512(cache[dstOff:], temp) 200 201 atomic.AddUint32(&progress, 1) 202 } 203 } 204 // Swap the byte order on big endian systems and return 205 if !isLittleEndian() { 206 swap(cache) 207 } 208 } 209 210 // swap changes the byte order of the buffer assuming a uint32 representation. 211 func swap(buffer []byte) { 212 for i := 0; i < len(buffer); i += 4 { 213 binary.BigEndian.PutUint32(buffer[i:], binary.LittleEndian.Uint32(buffer[i:])) 214 } 215 } 216 217 // fnv is an algorithm inspired by the FNV hash, which in some cases is used as 218 // a non-associative substitute for XOR. Note that we multiply the prime with 219 // the full 32-bit input, in contrast with the FNV-1 spec which multiplies the 220 // prime with one byte (octet) in turn. 221 func fnv(a, b uint32) uint32 { 222 return a*0x01000193 ^ b 223 } 224 225 // fnvHash mixes in data into mix using the ethash fnv method. 226 func fnvHash(mix []uint32, data []uint32) { 227 for i := 0; i < len(mix); i++ { 228 mix[i] = mix[i]*0x01000193 ^ data[i] 229 } 230 } 231 232 // generateDatasetItem combines data from 256 pseudorandomly selected cache nodes, 233 // and hashes that to compute a single dataset node. 234 func generateDatasetItem(cache []uint32, index uint32, keccak512 hasher) []byte { 235 // Calculate the number of theoretical rows (we use one buffer nonetheless) 236 rows := uint32(len(cache) / hashWords) 237 238 // Initialize the mix 239 mix := make([]byte, hashBytes) 240 241 binary.LittleEndian.PutUint32(mix, cache[(index%rows)*hashWords]^index) 242 for i := 1; i < hashWords; i++ { 243 binary.LittleEndian.PutUint32(mix[i*4:], cache[(index%rows)*hashWords+uint32(i)]) 244 } 245 keccak512(mix, mix) 246 247 // Convert the mix to uint32s to avoid constant bit shifting 248 intMix := make([]uint32, hashWords) 249 for i := 0; i < len(intMix); i++ { 250 intMix[i] = binary.LittleEndian.Uint32(mix[i*4:]) 251 } 252 // fnv it with a lot of random cache nodes based on index 253 for i := uint32(0); i < datasetParents; i++ { 254 parent := fnv(index^i, intMix[i%16]) % rows 255 fnvHash(intMix, cache[parent*hashWords:]) 256 } 257 // Flatten the uint32 mix into a binary one and return 258 for i, val := range intMix { 259 binary.LittleEndian.PutUint32(mix[i*4:], val) 260 } 261 keccak512(mix, mix) 262 return mix 263 } 264 265 // generateDataset generates the entire ethash dataset for mining. 266 // This method places the result into dest in machine byte order. 267 func generateDataset(dest []uint32, epoch uint64, cache []uint32) { 268 // Print some debug logs to allow analysis on low end devices 269 logger := log.New("epoch", epoch) 270 271 start := time.Now() 272 defer func() { 273 elapsed := time.Since(start) 274 275 logFn := logger.Debug 276 if elapsed > 3*time.Second { 277 logFn = logger.Info 278 } 279 logFn("Generated ethash verification cache", "elapsed", common.PrettyDuration(elapsed)) 280 }() 281 282 // Figure out whether the bytes need to be swapped for the machine 283 swapped := !isLittleEndian() 284 285 // Convert our destination slice to a byte buffer 286 header := *(*reflect.SliceHeader)(unsafe.Pointer(&dest)) 287 header.Len *= 4 288 header.Cap *= 4 289 dataset := *(*[]byte)(unsafe.Pointer(&header)) 290 291 // Generate the dataset on many goroutines since it takes a while 292 threads := runtime.NumCPU() 293 size := uint64(len(dataset)) 294 295 var pend sync.WaitGroup 296 pend.Add(threads) 297 298 var progress uint32 299 for i := 0; i < threads; i++ { 300 go func(id int) { 301 defer pend.Done() 302 303 // Create a hasher to reuse between invocations 304 keccak512 := makeHasher(sha3.NewLegacyKeccak512()) 305 306 // Calculate the data segment this thread should generate 307 batch := uint32((size + hashBytes*uint64(threads) - 1) / (hashBytes * uint64(threads))) 308 first := uint32(id) * batch 309 limit := first + batch 310 if limit > uint32(size/hashBytes) { 311 limit = uint32(size / hashBytes) 312 } 313 // Calculate the dataset segment 314 percent := uint32(size / hashBytes / 100) 315 for index := first; index < limit; index++ { 316 item := generateDatasetItem(cache, index, keccak512) 317 if swapped { 318 swap(item) 319 } 320 copy(dataset[index*hashBytes:], item) 321 322 if status := atomic.AddUint32(&progress, 1); status%percent == 0 { 323 logger.Info("Generating DAG in progress", "percentage", uint64(status*100)/(size/hashBytes), "elapsed", common.PrettyDuration(time.Since(start))) 324 } 325 } 326 }(i) 327 } 328 // Wait for all the generators to finish and return 329 pend.Wait() 330 } 331 332 // hashimoto aggregates data from the full dataset in order to produce our final 333 // value for a particular header hash and nonce. 334 func hashimoto(hash []byte, nonce uint64, size uint64, lookup func(index uint32) []uint32) ([]byte, []byte) { 335 // Calculate the number of theoretical rows (we use one buffer nonetheless) 336 rows := uint32(size / mixBytes) 337 338 // Combine header+nonce into a 64 byte seed 339 seed := make([]byte, 40) 340 copy(seed, hash) 341 binary.LittleEndian.PutUint64(seed[32:], nonce) 342 343 seed = crypto.Keccak512(seed) 344 seedHead := binary.LittleEndian.Uint32(seed) 345 346 // Start the mix with replicated seed 347 mix := make([]uint32, mixBytes/4) 348 for i := 0; i < len(mix); i++ { 349 mix[i] = binary.LittleEndian.Uint32(seed[i%16*4:]) 350 } 351 // Mix in random dataset nodes 352 temp := make([]uint32, len(mix)) 353 354 for i := 0; i < loopAccesses; i++ { 355 parent := fnv(uint32(i)^seedHead, mix[i%len(mix)]) % rows 356 for j := uint32(0); j < mixBytes/hashBytes; j++ { 357 copy(temp[j*hashWords:], lookup(2*parent+j)) 358 } 359 fnvHash(mix, temp) 360 } 361 // Compress mix 362 for i := 0; i < len(mix); i += 4 { 363 mix[i/4] = fnv(fnv(fnv(mix[i], mix[i+1]), mix[i+2]), mix[i+3]) 364 } 365 mix = mix[:len(mix)/4] 366 367 digest := make([]byte, common.HashLength) 368 for i, val := range mix { 369 binary.LittleEndian.PutUint32(digest[i*4:], val) 370 } 371 372 parameters := setParameters(hash) 373 H := generateH(parameters) 374 colInRow, rowInCol := generateQ(parameters, H) 375 376 hashVector := generateHv(parameters, seed) 377 _, outputWord, _ := OptimizedDecoding(parameters, hashVector, H, rowInCol, colInRow) 378 379 var byteOutputWord []byte 380 for i := range outputWord { 381 if outputWord[i] == 0 { 382 byteOutputWord = append(byteOutputWord, 0) 383 } else { 384 byteOutputWord = append(byteOutputWord, 1) 385 } 386 } 387 388 return digest, crypto.Keccak256(append(byteOutputWord, append(seed, digest...)...)) 389 //return digest, crypto.Keccak256(append(seed, digest...)) 390 } 391 392 // hashimotoLight aggregates data from the full dataset (using only a small 393 // in-memory cache) in order to produce our final value for a particular header 394 // hash and nonce. 395 func hashimotoLight(size uint64, cache []uint32, hash []byte, nonce uint64) ([]byte, []byte) { 396 keccak512 := makeHasher(sha3.NewLegacyKeccak512()) 397 398 lookup := func(index uint32) []uint32 { 399 rawData := generateDatasetItem(cache, index, keccak512) 400 401 data := make([]uint32, len(rawData)/4) 402 for i := 0; i < len(data); i++ { 403 data[i] = binary.LittleEndian.Uint32(rawData[i*4:]) 404 } 405 return data 406 } 407 return hashimoto(hash, nonce, size, lookup) 408 } 409 410 // hashimotoFull aggregates data from the full dataset (using the full in-memory 411 // dataset) in order to produce our final value for a particular header hash and 412 // nonce. 413 func hashimotoFull(dataset []uint32, hash []byte, nonce uint64) ([]byte, []byte) { 414 lookup := func(index uint32) []uint32 { 415 offset := index * hashWords 416 return dataset[offset : offset+hashWords] 417 } 418 return hashimoto(hash, nonce, uint64(len(dataset))*4, lookup) 419 } 420 421 const maxEpoch = 2048 422 423 // datasetSizes is a lookup table for the ethash dataset size for the first 2048 424 // epochs (i.e. 61440000 blocks). 425 var datasetSizes = [maxEpoch]uint64{ 426 1073739904, 1082130304, 1090514816, 1098906752, 1107293056, 427 1115684224, 1124070016, 1132461952, 1140849536, 1149232768, 428 1157627776, 1166013824, 1174404736, 1182786944, 1191180416, 429 1199568512, 1207958912, 1216345216, 1224732032, 1233124736, 430 1241513344, 1249902464, 1258290304, 1266673792, 1275067264, 431 1283453312, 1291844992, 1300234112, 1308619904, 1317010048, 432 1325397376, 1333787776, 1342176128, 1350561664, 1358954368, 433 1367339392, 1375731584, 1384118144, 1392507008, 1400897408, 434 1409284736, 1417673344, 1426062464, 1434451072, 1442839168, 435 1451229056, 1459615616, 1468006016, 1476394112, 1484782976, 436 1493171584, 1501559168, 1509948032, 1518337664, 1526726528, 437 1535114624, 1543503488, 1551892096, 1560278656, 1568669056, 438 1577056384, 1585446272, 1593831296, 1602219392, 1610610304, 439 1619000192, 1627386752, 1635773824, 1644164224, 1652555648, 440 1660943488, 1669332608, 1677721216, 1686109312, 1694497664, 441 1702886272, 1711274624, 1719661184, 1728047744, 1736434816, 442 1744829056, 1753218944, 1761606272, 1769995904, 1778382464, 443 1786772864, 1795157888, 1803550592, 1811937664, 1820327552, 444 1828711552, 1837102976, 1845488768, 1853879936, 1862269312, 445 1870656896, 1879048064, 1887431552, 1895825024, 1904212096, 446 1912601216, 1920988544, 1929379456, 1937765504, 1946156672, 447 1954543232, 1962932096, 1971321728, 1979707264, 1988093056, 448 1996487552, 2004874624, 2013262208, 2021653888, 2030039936, 449 2038430848, 2046819968, 2055208576, 2063596672, 2071981952, 450 2080373632, 2088762752, 2097149056, 2105539712, 2113928576, 451 2122315136, 2130700672, 2139092608, 2147483264, 2155872128, 452 2164257664, 2172642176, 2181035392, 2189426048, 2197814912, 453 2206203008, 2214587264, 2222979712, 2231367808, 2239758208, 454 2248145024, 2256527744, 2264922752, 2273312128, 2281701248, 455 2290086272, 2298476672, 2306867072, 2315251072, 2323639168, 456 2332032128, 2340420224, 2348808064, 2357196416, 2365580416, 457 2373966976, 2382363008, 2390748544, 2399139968, 2407530368, 458 2415918976, 2424307328, 2432695424, 2441084288, 2449472384, 459 2457861248, 2466247808, 2474637184, 2483026816, 2491414144, 460 2499803776, 2508191872, 2516582272, 2524970368, 2533359232, 461 2541743488, 2550134144, 2558525056, 2566913408, 2575301504, 462 2583686528, 2592073856, 2600467328, 2608856192, 2617240448, 463 2625631616, 2634022016, 2642407552, 2650796416, 2659188352, 464 2667574912, 2675965312, 2684352896, 2692738688, 2701130624, 465 2709518464, 2717907328, 2726293376, 2734685056, 2743073152, 466 2751462016, 2759851648, 2768232832, 2776625536, 2785017728, 467 2793401984, 2801794432, 2810182016, 2818571648, 2826959488, 468 2835349376, 2843734144, 2852121472, 2860514432, 2868900992, 469 2877286784, 2885676928, 2894069632, 2902451584, 2910843008, 470 2919234688, 2927622784, 2936011648, 2944400768, 2952789376, 471 2961177728, 2969565568, 2977951616, 2986338944, 2994731392, 472 3003120256, 3011508352, 3019895936, 3028287104, 3036675968, 473 3045063808, 3053452928, 3061837696, 3070228352, 3078615424, 474 3087003776, 3095394944, 3103782272, 3112173184, 3120562048, 475 3128944768, 3137339264, 3145725056, 3154109312, 3162505088, 476 3170893184, 3179280256, 3187669376, 3196056704, 3204445568, 477 3212836736, 3221224064, 3229612928, 3238002304, 3246391168, 478 3254778496, 3263165824, 3271556224, 3279944576, 3288332416, 479 3296719232, 3305110912, 3313500032, 3321887104, 3330273152, 480 3338658944, 3347053184, 3355440512, 3363827072, 3372220288, 481 3380608384, 3388997504, 3397384576, 3405774208, 3414163072, 482 3422551936, 3430937984, 3439328384, 3447714176, 3456104576, 483 3464493952, 3472883584, 3481268864, 3489655168, 3498048896, 484 3506434432, 3514826368, 3523213952, 3531603584, 3539987072, 485 3548380288, 3556763264, 3565157248, 3573545344, 3581934464, 486 3590324096, 3598712704, 3607098752, 3615488384, 3623877248, 487 3632265856, 3640646528, 3649043584, 3657430144, 3665821568, 488 3674207872, 3682597504, 3690984832, 3699367808, 3707764352, 489 3716152448, 3724541056, 3732925568, 3741318016, 3749706368, 490 3758091136, 3766481536, 3774872704, 3783260032, 3791650432, 491 3800036224, 3808427648, 3816815488, 3825204608, 3833592704, 492 3841981568, 3850370432, 3858755968, 3867147904, 3875536256, 493 3883920512, 3892313728, 3900702592, 3909087872, 3917478784, 494 3925868416, 3934256512, 3942645376, 3951032192, 3959422336, 495 3967809152, 3976200064, 3984588416, 3992974976, 4001363584, 496 4009751168, 4018141312, 4026530432, 4034911616, 4043308928, 497 4051695488, 4060084352, 4068472448, 4076862848, 4085249408, 498 4093640576, 4102028416, 4110413696, 4118805632, 4127194496, 499 4135583104, 4143971968, 4152360832, 4160746112, 4169135744, 500 4177525888, 4185912704, 4194303616, 4202691968, 4211076736, 501 4219463552, 4227855488, 4236246656, 4244633728, 4253022848, 502 4261412224, 4269799808, 4278184832, 4286578048, 4294962304, 503 4303349632, 4311743104, 4320130432, 4328521088, 4336909184, 504 4345295488, 4353687424, 4362073472, 4370458496, 4378852736, 505 4387238528, 4395630208, 4404019072, 4412407424, 4420790656, 506 4429182848, 4437571456, 4445962112, 4454344064, 4462738048, 507 4471119232, 4479516544, 4487904128, 4496289664, 4504682368, 508 4513068416, 4521459584, 4529846144, 4538232704, 4546619776, 509 4555010176, 4563402112, 4571790208, 4580174464, 4588567936, 510 4596957056, 4605344896, 4613734016, 4622119808, 4630511488, 511 4638898816, 4647287936, 4655675264, 4664065664, 4672451968, 512 4680842624, 4689231488, 4697620352, 4706007424, 4714397056, 513 4722786176, 4731173248, 4739562368, 4747951744, 4756340608, 514 4764727936, 4773114496, 4781504384, 4789894784, 4798283648, 515 4806667648, 4815059584, 4823449472, 4831835776, 4840226176, 516 4848612224, 4857003392, 4865391488, 4873780096, 4882169728, 517 4890557312, 4898946944, 4907333248, 4915722368, 4924110976, 518 4932499328, 4940889728, 4949276032, 4957666432, 4966054784, 519 4974438016, 4982831488, 4991221376, 4999607168, 5007998848, 520 5016386432, 5024763776, 5033164672, 5041544576, 5049941888, 521 5058329728, 5066717056, 5075107456, 5083494272, 5091883904, 522 5100273536, 5108662144, 5117048192, 5125436032, 5133827456, 523 5142215296, 5150605184, 5158993024, 5167382144, 5175769472, 524 5184157568, 5192543872, 5200936064, 5209324928, 5217711232, 525 5226102656, 5234490496, 5242877312, 5251263872, 5259654016, 526 5268040832, 5276434304, 5284819328, 5293209728, 5301598592, 527 5309986688, 5318374784, 5326764416, 5335151488, 5343542144, 528 5351929472, 5360319872, 5368706944, 5377096576, 5385484928, 529 5393871232, 5402263424, 5410650496, 5419040384, 5427426944, 530 5435816576, 5444205952, 5452594816, 5460981376, 5469367936, 531 5477760896, 5486148736, 5494536832, 5502925952, 5511315328, 532 5519703424, 5528089984, 5536481152, 5544869504, 5553256064, 533 5561645696, 5570032768, 5578423936, 5586811264, 5595193216, 534 5603585408, 5611972736, 5620366208, 5628750464, 5637143936, 535 5645528192, 5653921408, 5662310272, 5670694784, 5679082624, 536 5687474048, 5695864448, 5704251008, 5712641408, 5721030272, 537 5729416832, 5737806208, 5746194304, 5754583936, 5762969984, 538 5771358592, 5779748224, 5788137856, 5796527488, 5804911232, 539 5813300608, 5821692544, 5830082176, 5838468992, 5846855552, 540 5855247488, 5863636096, 5872024448, 5880411008, 5888799872, 541 5897186432, 5905576832, 5913966976, 5922352768, 5930744704, 542 5939132288, 5947522432, 5955911296, 5964299392, 5972688256, 543 5981074304, 5989465472, 5997851008, 6006241408, 6014627968, 544 6023015552, 6031408256, 6039796096, 6048185216, 6056574848, 545 6064963456, 6073351808, 6081736064, 6090128768, 6098517632, 546 6106906496, 6115289216, 6123680896, 6132070016, 6140459648, 547 6148849024, 6157237376, 6165624704, 6174009728, 6182403712, 548 6190792064, 6199176064, 6207569792, 6215952256, 6224345216, 549 6232732544, 6241124224, 6249510272, 6257899136, 6266287744, 550 6274676864, 6283065728, 6291454336, 6299843456, 6308232064, 551 6316620928, 6325006208, 6333395584, 6341784704, 6350174848, 552 6358562176, 6366951296, 6375337856, 6383729536, 6392119168, 553 6400504192, 6408895616, 6417283456, 6425673344, 6434059136, 554 6442444672, 6450837376, 6459223424, 6467613056, 6476004224, 555 6484393088, 6492781952, 6501170048, 6509555072, 6517947008, 556 6526336384, 6534725504, 6543112832, 6551500672, 6559888768, 557 6568278656, 6576662912, 6585055616, 6593443456, 6601834112, 558 6610219648, 6618610304, 6626999168, 6635385472, 6643777408, 559 6652164224, 6660552832, 6668941952, 6677330048, 6685719424, 560 6694107776, 6702493568, 6710882176, 6719274112, 6727662976, 561 6736052096, 6744437632, 6752825984, 6761213824, 6769604224, 562 6777993856, 6786383488, 6794770816, 6803158144, 6811549312, 563 6819937664, 6828326528, 6836706176, 6845101696, 6853491328, 564 6861880448, 6870269312, 6878655104, 6887046272, 6895433344, 565 6903822208, 6912212864, 6920596864, 6928988288, 6937377152, 566 6945764992, 6954149248, 6962544256, 6970928768, 6979317376, 567 6987709312, 6996093824, 7004487296, 7012875392, 7021258624, 568 7029652352, 7038038912, 7046427776, 7054818944, 7063207808, 569 7071595136, 7079980928, 7088372608, 7096759424, 7105149824, 570 7113536896, 7121928064, 7130315392, 7138699648, 7147092352, 571 7155479168, 7163865728, 7172249984, 7180648064, 7189036672, 572 7197424768, 7205810816, 7214196608, 7222589824, 7230975104, 573 7239367552, 7247755904, 7256145536, 7264533376, 7272921472, 574 7281308032, 7289694848, 7298088832, 7306471808, 7314864512, 575 7323253888, 7331643008, 7340029568, 7348419712, 7356808832, 576 7365196672, 7373585792, 7381973888, 7390362752, 7398750592, 577 7407138944, 7415528576, 7423915648, 7432302208, 7440690304, 578 7449080192, 7457472128, 7465860992, 7474249088, 7482635648, 579 7491023744, 7499412608, 7507803008, 7516192384, 7524579968, 580 7532967296, 7541358464, 7549745792, 7558134656, 7566524032, 581 7574912896, 7583300992, 7591690112, 7600075136, 7608466816, 582 7616854912, 7625244544, 7633629824, 7642020992, 7650410368, 583 7658794112, 7667187328, 7675574912, 7683961984, 7692349568, 584 7700739712, 7709130368, 7717519232, 7725905536, 7734295424, 585 7742683264, 7751069056, 7759457408, 7767849088, 7776238208, 586 7784626816, 7793014912, 7801405312, 7809792128, 7818179968, 587 7826571136, 7834957184, 7843347328, 7851732352, 7860124544, 588 7868512384, 7876902016, 7885287808, 7893679744, 7902067072, 589 7910455936, 7918844288, 7927230848, 7935622784, 7944009344, 590 7952400256, 7960786048, 7969176704, 7977565312, 7985953408, 591 7994339968, 8002730368, 8011119488, 8019508096, 8027896192, 592 8036285056, 8044674688, 8053062272, 8061448832, 8069838464, 593 8078227328, 8086616704, 8095006592, 8103393664, 8111783552, 594 8120171392, 8128560256, 8136949376, 8145336704, 8153726848, 595 8162114944, 8170503296, 8178891904, 8187280768, 8195669632, 596 8204058496, 8212444544, 8220834176, 8229222272, 8237612672, 597 8246000768, 8254389376, 8262775168, 8271167104, 8279553664, 598 8287944064, 8296333184, 8304715136, 8313108352, 8321497984, 599 8329885568, 8338274432, 8346663296, 8355052928, 8363441536, 600 8371828352, 8380217984, 8388606592, 8396996224, 8405384576, 601 8413772672, 8422161536, 8430549376, 8438939008, 8447326592, 602 8455715456, 8464104832, 8472492928, 8480882048, 8489270656, 603 8497659776, 8506045312, 8514434944, 8522823808, 8531208832, 604 8539602304, 8547990656, 8556378752, 8564768384, 8573154176, 605 8581542784, 8589933952, 8598322816, 8606705024, 8615099264, 606 8623487872, 8631876992, 8640264064, 8648653952, 8657040256, 607 8665430656, 8673820544, 8682209152, 8690592128, 8698977152, 608 8707374464, 8715763328, 8724151424, 8732540032, 8740928384, 609 8749315712, 8757704576, 8766089344, 8774480768, 8782871936, 610 8791260032, 8799645824, 8808034432, 8816426368, 8824812928, 611 8833199488, 8841591424, 8849976448, 8858366336, 8866757248, 612 8875147136, 8883532928, 8891923328, 8900306816, 8908700288, 613 8917088384, 8925478784, 8933867392, 8942250368, 8950644608, 614 8959032704, 8967420544, 8975809664, 8984197504, 8992584064, 615 9000976256, 9009362048, 9017752448, 9026141312, 9034530688, 616 9042917504, 9051307904, 9059694208, 9068084864, 9076471424, 617 9084861824, 9093250688, 9101638528, 9110027648, 9118416512, 618 9126803584, 9135188096, 9143581312, 9151969664, 9160356224, 619 9168747136, 9177134464, 9185525632, 9193910144, 9202302848, 620 9210690688, 9219079552, 9227465344, 9235854464, 9244244864, 621 9252633472, 9261021824, 9269411456, 9277799296, 9286188928, 622 9294574208, 9302965888, 9311351936, 9319740032, 9328131968, 623 9336516736, 9344907392, 9353296768, 9361685888, 9370074752, 624 9378463616, 9386849408, 9395239808, 9403629184, 9412016512, 625 9420405376, 9428795008, 9437181568, 9445570688, 9453960832, 626 9462346624, 9470738048, 9479121536, 9487515008, 9495903616, 627 9504289664, 9512678528, 9521067904, 9529456256, 9537843584, 628 9546233728, 9554621312, 9563011456, 9571398784, 9579788672, 629 9588178304, 9596567168, 9604954496, 9613343104, 9621732992, 630 9630121856, 9638508416, 9646898816, 9655283584, 9663675776, 631 9672061312, 9680449664, 9688840064, 9697230464, 9705617536, 632 9714003584, 9722393984, 9730772608, 9739172224, 9747561088, 633 9755945344, 9764338816, 9772726144, 9781116544, 9789503872, 634 9797892992, 9806282624, 9814670464, 9823056512, 9831439232, 635 9839833984, 9848224384, 9856613504, 9865000576, 9873391232, 636 9881772416, 9890162816, 9898556288, 9906940544, 9915333248, 637 9923721088, 9932108672, 9940496512, 9948888448, 9957276544, 638 9965666176, 9974048384, 9982441088, 9990830464, 9999219584, 639 10007602816, 10015996544, 10024385152, 10032774016, 10041163648, 640 10049548928, 10057940096, 10066329472, 10074717824, 10083105152, 641 10091495296, 10099878784, 10108272256, 10116660608, 10125049216, 642 10133437312, 10141825664, 10150213504, 10158601088, 10166991232, 643 10175378816, 10183766144, 10192157312, 10200545408, 10208935552, 644 10217322112, 10225712768, 10234099328, 10242489472, 10250876032, 645 10259264896, 10267656064, 10276042624, 10284429184, 10292820352, 646 10301209472, 10309598848, 10317987712, 10326375296, 10334763392, 647 10343153536, 10351541632, 10359930752, 10368318592, 10376707456, 648 10385096576, 10393484672, 10401867136, 10410262144, 10418647424, 649 10427039104, 10435425664, 10443810176, 10452203648, 10460589952, 650 10468982144, 10477369472, 10485759104, 10494147712, 10502533504, 651 10510923392, 10519313536, 10527702656, 10536091264, 10544478592, 652 10552867712, 10561255808, 10569642368, 10578032768, 10586423168, 653 10594805632, 10603200128, 10611588992, 10619976064, 10628361344, 654 10636754048, 10645143424, 10653531776, 10661920384, 10670307968, 655 10678696832, 10687086464, 10695475072, 10703863168, 10712246144, 656 10720639616, 10729026688, 10737414784, 10745806208, 10754190976, 657 10762581376, 10770971264, 10779356288, 10787747456, 10796135552, 658 10804525184, 10812915584, 10821301888, 10829692288, 10838078336, 659 10846469248, 10854858368, 10863247232, 10871631488, 10880023424, 660 10888412032, 10896799616, 10905188992, 10913574016, 10921964672, 661 10930352768, 10938742912, 10947132544, 10955518592, 10963909504, 662 10972298368, 10980687488, 10989074816, 10997462912, 11005851776, 663 11014241152, 11022627712, 11031017344, 11039403904, 11047793024, 664 11056184704, 11064570752, 11072960896, 11081343872, 11089737856, 665 11098128256, 11106514816, 11114904448, 11123293568, 11131680128, 666 11140065152, 11148458368, 11156845696, 11165236864, 11173624192, 667 11182013824, 11190402688, 11198790784, 11207179136, 11215568768, 668 11223957376, 11232345728, 11240734592, 11249122688, 11257511296, 669 11265899648, 11274285952, 11282675584, 11291065472, 11299452544, 670 11307842432, 11316231296, 11324616832, 11333009024, 11341395584, 671 11349782656, 11358172288, 11366560384, 11374950016, 11383339648, 672 11391721856, 11400117376, 11408504192, 11416893568, 11425283456, 673 11433671552, 11442061184, 11450444672, 11458837888, 11467226752, 674 11475611776, 11484003968, 11492392064, 11500780672, 11509169024, 675 11517550976, 11525944448, 11534335616, 11542724224, 11551111808, 676 11559500672, 11567890304, 11576277376, 11584667008, 11593056128, 677 11601443456, 11609830016, 11618221952, 11626607488, 11634995072, 678 11643387776, 11651775104, 11660161664, 11668552576, 11676940928, 679 11685330304, 11693718656, 11702106496, 11710496128, 11718882688, 680 11727273088, 11735660416, 11744050048, 11752437376, 11760824704, 681 11769216128, 11777604736, 11785991296, 11794381952, 11802770048, 682 11811157888, 11819548544, 11827932544, 11836324736, 11844713344, 683 11853100928, 11861486464, 11869879936, 11878268032, 11886656896, 684 11895044992, 11903433088, 11911822976, 11920210816, 11928600448, 685 11936987264, 11945375872, 11953761152, 11962151296, 11970543488, 686 11978928512, 11987320448, 11995708288, 12004095104, 12012486272, 687 12020875136, 12029255552, 12037652096, 12046039168, 12054429568, 688 12062813824, 12071206528, 12079594624, 12087983744, 12096371072, 689 12104759936, 12113147264, 12121534592, 12129924992, 12138314624, 690 12146703232, 12155091584, 12163481216, 12171864704, 12180255872, 691 12188643968, 12197034112, 12205424512, 12213811328, 12222199424, 692 12230590336, 12238977664, 12247365248, 12255755392, 12264143488, 693 12272531584, 12280920448, 12289309568, 12297694592, 12306086528, 694 12314475392, 12322865024, 12331253632, 12339640448, 12348029312, 695 12356418944, 12364805248, 12373196672, 12381580928, 12389969024, 696 12398357632, 12406750592, 12415138432, 12423527552, 12431916416, 697 12440304512, 12448692352, 12457081216, 12465467776, 12473859968, 698 12482245504, 12490636672, 12499025536, 12507411584, 12515801728, 699 12524190592, 12532577152, 12540966272, 12549354368, 12557743232, 700 12566129536, 12574523264, 12582911872, 12591299456, 12599688064, 701 12608074624, 12616463488, 12624845696, 12633239936, 12641631616, 702 12650019968, 12658407296, 12666795136, 12675183232, 12683574656, 703 12691960192, 12700350592, 12708740224, 12717128576, 12725515904, 704 12733906816, 12742295168, 12750680192, 12759071872, 12767460736, 705 12775848832, 12784236928, 12792626816, 12801014656, 12809404288, 706 12817789312, 12826181504, 12834568832, 12842954624, 12851345792, 707 12859732352, 12868122496, 12876512128, 12884901248, 12893289088, 708 12901672832, 12910067584, 12918455168, 12926842496, 12935232896, 709 12943620736, 12952009856, 12960396928, 12968786816, 12977176192, 710 12985563776, 12993951104, 13002341504, 13010730368, 13019115392, 711 13027506304, 13035895168, 13044272512, 13052673152, 13061062528, 712 13069446272, 13077838976, 13086227072, 13094613632, 13103000192, 713 13111393664, 13119782528, 13128157568, 13136559232, 13144945024, 714 13153329536, 13161724288, 13170111872, 13178502784, 13186884736, 715 13195279744, 13203667072, 13212057472, 13220445824, 13228832128, 716 13237221248, 13245610624, 13254000512, 13262388352, 13270777472, 717 13279166336, 13287553408, 13295943296, 13304331904, 13312719488, 718 13321108096, 13329494656, 13337885824, 13346274944, 13354663808, 719 13363051136, 13371439232, 13379825024, 13388210816, 13396605056, 720 13404995456, 13413380224, 13421771392, 13430159744, 13438546048, 721 13446937216, 13455326848, 13463708288, 13472103808, 13480492672, 722 13488875648, 13497269888, 13505657728, 13514045312, 13522435712, 723 13530824576, 13539210112, 13547599232, 13555989376, 13564379008, 724 13572766336, 13581154432, 13589544832, 13597932928, 13606320512, 725 13614710656, 13623097472, 13631477632, 13639874944, 13648264064, 726 13656652928, 13665041792, 13673430656, 13681818496, 13690207616, 727 13698595712, 13706982272, 13715373184, 13723762048, 13732150144, 728 13740536704, 13748926592, 13757316224, 13765700992, 13774090112, 729 13782477952, 13790869376, 13799259008, 13807647872, 13816036736, 730 13824425344, 13832814208, 13841202304, 13849591424, 13857978752, 731 13866368896, 13874754688, 13883145344, 13891533184, 13899919232, 732 13908311168, 13916692096, 13925085056, 13933473152, 13941866368, 733 13950253696, 13958643584, 13967032192, 13975417216, 13983807616, 734 13992197504, 14000582272, 14008973696, 14017363072, 14025752192, 735 14034137984, 14042528384, 14050918016, 14059301504, 14067691648, 736 14076083584, 14084470144, 14092852352, 14101249664, 14109635968, 737 14118024832, 14126407552, 14134804352, 14143188608, 14151577984, 738 14159968384, 14168357248, 14176741504, 14185127296, 14193521024, 739 14201911424, 14210301824, 14218685056, 14227067264, 14235467392, 740 14243855488, 14252243072, 14260630144, 14269021568, 14277409408, 741 14285799296, 14294187904, 14302571392, 14310961792, 14319353728, 742 14327738752, 14336130944, 14344518784, 14352906368, 14361296512, 743 14369685376, 14378071424, 14386462592, 14394848128, 14403230848, 744 14411627392, 14420013952, 14428402304, 14436793472, 14445181568, 745 14453569664, 14461959808, 14470347904, 14478737024, 14487122816, 746 14495511424, 14503901824, 14512291712, 14520677504, 14529064832, 747 14537456768, 14545845632, 14554234496, 14562618496, 14571011456, 748 14579398784, 14587789184, 14596172672, 14604564608, 14612953984, 749 14621341312, 14629724288, 14638120832, 14646503296, 14654897536, 750 14663284864, 14671675264, 14680061056, 14688447616, 14696835968, 751 14705228416, 14713616768, 14722003328, 14730392192, 14738784128, 752 14747172736, 14755561088, 14763947648, 14772336512, 14780725376, 753 14789110144, 14797499776, 14805892736, 14814276992, 14822670208, 754 14831056256, 14839444352, 14847836032, 14856222848, 14864612992, 755 14872997504, 14881388672, 14889775744, 14898165376, 14906553472, 756 14914944896, 14923329664, 14931721856, 14940109696, 14948497024, 757 14956887424, 14965276544, 14973663616, 14982053248, 14990439808, 758 14998830976, 15007216768, 15015605888, 15023995264, 15032385152, 759 15040768384, 15049154944, 15057549184, 15065939072, 15074328448, 760 15082715008, 15091104128, 15099493504, 15107879296, 15116269184, 761 15124659584, 15133042304, 15141431936, 15149824384, 15158214272, 762 15166602368, 15174991232, 15183378304, 15191760512, 15200154496, 763 15208542592, 15216931712, 15225323392, 15233708416, 15242098048, 764 15250489216, 15258875264, 15267265408, 15275654528, 15284043136, 765 15292431488, 15300819584, 15309208192, 15317596544, 15325986176, 766 15334374784, 15342763648, 15351151744, 15359540608, 15367929728, 767 15376318336, 15384706432, 15393092992, 15401481856, 15409869952, 768 15418258816, 15426649984, 15435037568, 15443425664, 15451815296, 769 15460203392, 15468589184, 15476979328, 15485369216, 15493755776, 770 15502146944, 15510534272, 15518924416, 15527311232, 15535699072, 771 15544089472, 15552478336, 15560866688, 15569254528, 15577642624, 772 15586031488, 15594419072, 15602809472, 15611199104, 15619586432, 773 15627975296, 15636364928, 15644753792, 15653141888, 15661529216, 774 15669918848, 15678305152, 15686696576, 15695083136, 15703474048, 775 15711861632, 15720251264, 15728636288, 15737027456, 15745417088, 776 15753804928, 15762194048, 15770582656, 15778971008, 15787358336, 777 15795747712, 15804132224, 15812523392, 15820909696, 15829300096, 778 15837691264, 15846071936, 15854466944, 15862855808, 15871244672, 779 15879634816, 15888020608, 15896409728, 15904799104, 15913185152, 780 15921577088, 15929966464, 15938354816, 15946743424, 15955129472, 781 15963519872, 15971907968, 15980296064, 15988684928, 15997073024, 782 16005460864, 16013851264, 16022241152, 16030629248, 16039012736, 783 16047406976, 16055794816, 16064181376, 16072571264, 16080957824, 784 16089346688, 16097737856, 16106125184, 16114514816, 16122904192, 785 16131292544, 16139678848, 16148066944, 16156453504, 16164839552, 786 16173236096, 16181623424, 16190012032, 16198401152, 16206790528, 787 16215177344, 16223567744, 16231956352, 16240344704, 16248731008, 788 16257117824, 16265504384, 16273898624, 16282281856, 16290668672, 789 16299064192, 16307449216, 16315842176, 16324230016, 16332613504, 790 16341006464, 16349394304, 16357783168, 16366172288, 16374561664, 791 16382951296, 16391337856, 16399726208, 16408116352, 16416505472, 792 16424892032, 16433282176, 16441668224, 16450058624, 16458448768, 793 16466836864, 16475224448, 16483613056, 16492001408, 16500391808, 794 16508779648, 16517166976, 16525555328, 16533944192, 16542330752, 795 16550719616, 16559110528, 16567497088, 16575888512, 16584274816, 796 16592665472, 16601051008, 16609442944, 16617832064, 16626218624, 797 16634607488, 16642996096, 16651385728, 16659773824, 16668163712, 798 16676552576, 16684938112, 16693328768, 16701718144, 16710095488, 799 16718492288, 16726883968, 16735272832, 16743661184, 16752049792, 800 16760436608, 16768827008, 16777214336, 16785599104, 16793992832, 801 16802381696, 16810768768, 16819151744, 16827542656, 16835934848, 802 16844323712, 16852711552, 16861101952, 16869489536, 16877876864, 803 16886265728, 16894653056, 16903044736, 16911431296, 16919821696, 804 16928207488, 16936592768, 16944987776, 16953375616, 16961763968, 805 16970152832, 16978540928, 16986929536, 16995319168, 17003704448, 806 17012096896, 17020481152, 17028870784, 17037262208, 17045649536, 807 17054039936, 17062426496, 17070814336, 17079205504, 17087592064, 808 17095978112, 17104369024, 17112759424, 17121147776, 17129536384, 809 17137926016, 17146314368, 17154700928, 17163089792, 17171480192, 810 17179864192, 17188256896, 17196644992, 17205033856, 17213423488, 811 17221811072, 17230198912, 17238588032, 17246976896, 17255360384, 812 17263754624, 17272143232, 17280530048, 17288918912, 17297309312, 813 17305696384, 17314085504, 17322475136, 17330863744, 17339252096, 814 17347640192, 17356026496, 17364413824, 17372796544, 17381190016, 815 17389583488, 17397972608, 17406360704, 17414748544, 17423135872, 816 17431527296, 17439915904, 17448303232, 17456691584, 17465081728, 817 17473468288, 17481857408, 17490247552, 17498635904, 17507022464, 818 17515409024, 17523801728, 17532189824, 17540577664, 17548966016, 819 17557353344, 17565741184, 17574131584, 17582519168, 17590907008, 820 17599296128, 17607687808, 17616076672, 17624455808, 17632852352, 821 17641238656, 17649630848, 17658018944, 17666403968, 17674794112, 822 17683178368, 17691573376, 17699962496, 17708350592, 17716739968, 823 17725126528, 17733517184, 17741898112, 17750293888, 17758673024, 824 17767070336, 17775458432, 17783848832, 17792236928, 17800625536, 825 17809012352, 17817402752, 17825785984, 17834178944, 17842563968, 826 17850955648, 17859344512, 17867732864, 17876119424, 17884511872, 827 17892900224, 17901287296, 17909677696, 17918058112, 17926451072, 828 17934843776, 17943230848, 17951609216, 17960008576, 17968397696, 829 17976784256, 17985175424, 17993564032, 18001952128, 18010339712, 830 18018728576, 18027116672, 18035503232, 18043894144, 18052283264, 831 18060672128, 18069056384, 18077449856, 18085837184, 18094225792, 832 18102613376, 18111004544, 18119388544, 18127781248, 18136170368, 833 18144558976, 18152947328, 18161336192, 18169724288, 18178108544, 834 18186498944, 18194886784, 18203275648, 18211666048, 18220048768, 835 18228444544, 18236833408, 18245220736} 836 837 // cacheSizes is a lookup table for the ethash verification cache size for the 838 // first 2048 epochs (i.e. 61440000 blocks). 839 var cacheSizes = [maxEpoch]uint64{ 840 16776896, 16907456, 17039296, 17170112, 17301056, 17432512, 17563072, 841 17693888, 17824192, 17955904, 18087488, 18218176, 18349504, 18481088, 842 18611392, 18742336, 18874304, 19004224, 19135936, 19267264, 19398208, 843 19529408, 19660096, 19791424, 19922752, 20053952, 20184896, 20315968, 844 20446912, 20576576, 20709184, 20840384, 20971072, 21102272, 21233216, 845 21364544, 21494848, 21626816, 21757376, 21887552, 22019392, 22151104, 846 22281536, 22412224, 22543936, 22675264, 22806464, 22935872, 23068096, 847 23198272, 23330752, 23459008, 23592512, 23723968, 23854912, 23986112, 848 24116672, 24247616, 24378688, 24509504, 24640832, 24772544, 24903488, 849 25034432, 25165376, 25296704, 25427392, 25558592, 25690048, 25820096, 850 25951936, 26081728, 26214208, 26345024, 26476096, 26606656, 26737472, 851 26869184, 26998208, 27131584, 27262528, 27393728, 27523904, 27655744, 852 27786688, 27917888, 28049344, 28179904, 28311488, 28441792, 28573504, 853 28700864, 28835648, 28966208, 29096768, 29228608, 29359808, 29490752, 854 29621824, 29752256, 29882816, 30014912, 30144448, 30273728, 30406976, 855 30538432, 30670784, 30799936, 30932672, 31063744, 31195072, 31325248, 856 31456192, 31588288, 31719232, 31850432, 31981504, 32110784, 32243392, 857 32372672, 32505664, 32636608, 32767808, 32897344, 33029824, 33160768, 858 33289664, 33423296, 33554368, 33683648, 33816512, 33947456, 34076992, 859 34208704, 34340032, 34471744, 34600256, 34734016, 34864576, 34993984, 860 35127104, 35258176, 35386688, 35518528, 35650624, 35782336, 35910976, 861 36044608, 36175808, 36305728, 36436672, 36568384, 36699968, 36830656, 862 36961984, 37093312, 37223488, 37355072, 37486528, 37617472, 37747904, 863 37879232, 38009792, 38141888, 38272448, 38403392, 38535104, 38660672, 864 38795584, 38925632, 39059264, 39190336, 39320768, 39452096, 39581632, 865 39713984, 39844928, 39974848, 40107968, 40238144, 40367168, 40500032, 866 40631744, 40762816, 40894144, 41023552, 41155904, 41286208, 41418304, 867 41547712, 41680448, 41811904, 41942848, 42073792, 42204992, 42334912, 868 42467008, 42597824, 42729152, 42860096, 42991552, 43122368, 43253696, 869 43382848, 43515712, 43646912, 43777088, 43907648, 44039104, 44170432, 870 44302144, 44433344, 44564288, 44694976, 44825152, 44956864, 45088448, 871 45219008, 45350464, 45481024, 45612608, 45744064, 45874496, 46006208, 872 46136768, 46267712, 46399424, 46529344, 46660672, 46791488, 46923328, 873 47053504, 47185856, 47316928, 47447872, 47579072, 47710144, 47839936, 874 47971648, 48103232, 48234176, 48365248, 48496192, 48627136, 48757312, 875 48889664, 49020736, 49149248, 49283008, 49413824, 49545152, 49675712, 876 49807168, 49938368, 50069056, 50200256, 50331584, 50462656, 50593472, 877 50724032, 50853952, 50986048, 51117632, 51248576, 51379904, 51510848, 878 51641792, 51773248, 51903296, 52035136, 52164032, 52297664, 52427968, 879 52557376, 52690112, 52821952, 52952896, 53081536, 53213504, 53344576, 880 53475776, 53608384, 53738816, 53870528, 54000832, 54131776, 54263744, 881 54394688, 54525248, 54655936, 54787904, 54918592, 55049152, 55181248, 882 55312064, 55442752, 55574336, 55705024, 55836224, 55967168, 56097856, 883 56228672, 56358592, 56490176, 56621888, 56753728, 56884928, 57015488, 884 57146816, 57278272, 57409216, 57540416, 57671104, 57802432, 57933632, 885 58064576, 58195264, 58326976, 58457408, 58588864, 58720192, 58849984, 886 58981696, 59113024, 59243456, 59375552, 59506624, 59637568, 59768512, 887 59897792, 60030016, 60161984, 60293056, 60423872, 60554432, 60683968, 888 60817216, 60948032, 61079488, 61209664, 61341376, 61471936, 61602752, 889 61733696, 61865792, 61996736, 62127808, 62259136, 62389568, 62520512, 890 62651584, 62781632, 62910784, 63045056, 63176128, 63307072, 63438656, 891 63569216, 63700928, 63831616, 63960896, 64093888, 64225088, 64355392, 892 64486976, 64617664, 64748608, 64879424, 65009216, 65142464, 65273792, 893 65402816, 65535424, 65666752, 65797696, 65927744, 66060224, 66191296, 894 66321344, 66453056, 66584384, 66715328, 66846656, 66977728, 67108672, 895 67239104, 67370432, 67501888, 67631296, 67763776, 67895104, 68026304, 896 68157248, 68287936, 68419264, 68548288, 68681408, 68811968, 68942912, 897 69074624, 69205568, 69337024, 69467584, 69599168, 69729472, 69861184, 898 69989824, 70122944, 70253888, 70385344, 70515904, 70647232, 70778816, 899 70907968, 71040832, 71171648, 71303104, 71432512, 71564992, 71695168, 900 71826368, 71958464, 72089536, 72219712, 72350144, 72482624, 72613568, 901 72744512, 72875584, 73006144, 73138112, 73268672, 73400128, 73530944, 902 73662272, 73793344, 73924544, 74055104, 74185792, 74316992, 74448832, 903 74579392, 74710976, 74841664, 74972864, 75102784, 75233344, 75364544, 904 75497024, 75627584, 75759296, 75890624, 76021696, 76152256, 76283072, 905 76414144, 76545856, 76676672, 76806976, 76937792, 77070016, 77200832, 906 77331392, 77462464, 77593664, 77725376, 77856448, 77987776, 78118336, 907 78249664, 78380992, 78511424, 78642496, 78773056, 78905152, 79033664, 908 79166656, 79297472, 79429568, 79560512, 79690816, 79822784, 79953472, 909 80084672, 80214208, 80346944, 80477632, 80608576, 80740288, 80870848, 910 81002048, 81133504, 81264448, 81395648, 81525952, 81657536, 81786304, 911 81919808, 82050112, 82181312, 82311616, 82443968, 82573376, 82705984, 912 82835776, 82967744, 83096768, 83230528, 83359552, 83491264, 83622464, 913 83753536, 83886016, 84015296, 84147776, 84277184, 84409792, 84540608, 914 84672064, 84803008, 84934336, 85065152, 85193792, 85326784, 85458496, 915 85589312, 85721024, 85851968, 85982656, 86112448, 86244416, 86370112, 916 86506688, 86637632, 86769344, 86900672, 87031744, 87162304, 87293632, 917 87424576, 87555392, 87687104, 87816896, 87947968, 88079168, 88211264, 918 88341824, 88473152, 88603712, 88735424, 88862912, 88996672, 89128384, 919 89259712, 89390272, 89521984, 89652544, 89783872, 89914816, 90045376, 920 90177088, 90307904, 90438848, 90569152, 90700096, 90832832, 90963776, 921 91093696, 91223744, 91356992, 91486784, 91618496, 91749824, 91880384, 922 92012224, 92143552, 92273344, 92405696, 92536768, 92666432, 92798912, 923 92926016, 93060544, 93192128, 93322816, 93453632, 93583936, 93715136, 924 93845056, 93977792, 94109504, 94240448, 94371776, 94501184, 94632896, 925 94764224, 94895552, 95023424, 95158208, 95287744, 95420224, 95550016, 926 95681216, 95811904, 95943872, 96075328, 96203584, 96337856, 96468544, 927 96599744, 96731072, 96860992, 96992576, 97124288, 97254848, 97385536, 928 97517248, 97647808, 97779392, 97910464, 98041408, 98172608, 98303168, 929 98434496, 98565568, 98696768, 98827328, 98958784, 99089728, 99220928, 930 99352384, 99482816, 99614272, 99745472, 99876416, 100007104, 931 100138048, 100267072, 100401088, 100529984, 100662592, 100791872, 932 100925248, 101056064, 101187392, 101317952, 101449408, 101580608, 933 101711296, 101841728, 101973824, 102104896, 102235712, 102366016, 934 102498112, 102628672, 102760384, 102890432, 103021888, 103153472, 935 103284032, 103415744, 103545152, 103677248, 103808576, 103939648, 936 104070976, 104201792, 104332736, 104462528, 104594752, 104725952, 937 104854592, 104988608, 105118912, 105247808, 105381184, 105511232, 938 105643072, 105774784, 105903296, 106037056, 106167872, 106298944, 939 106429504, 106561472, 106691392, 106822592, 106954304, 107085376, 940 107216576, 107346368, 107478464, 107609792, 107739712, 107872192, 941 108003136, 108131392, 108265408, 108396224, 108527168, 108657344, 942 108789568, 108920384, 109049792, 109182272, 109312576, 109444928, 943 109572928, 109706944, 109837888, 109969088, 110099648, 110230976, 944 110362432, 110492992, 110624704, 110755264, 110886208, 111017408, 945 111148864, 111279296, 111410752, 111541952, 111673024, 111803456, 946 111933632, 112066496, 112196416, 112328512, 112457792, 112590784, 947 112715968, 112852672, 112983616, 113114944, 113244224, 113376448, 948 113505472, 113639104, 113770304, 113901376, 114031552, 114163264, 949 114294592, 114425536, 114556864, 114687424, 114818624, 114948544, 950 115080512, 115212224, 115343296, 115473472, 115605184, 115736128, 951 115867072, 115997248, 116128576, 116260288, 116391488, 116522944, 952 116652992, 116784704, 116915648, 117046208, 117178304, 117308608, 953 117440192, 117569728, 117701824, 117833024, 117964096, 118094656, 954 118225984, 118357312, 118489024, 118617536, 118749632, 118882112, 955 119012416, 119144384, 119275328, 119406016, 119537344, 119668672, 956 119798464, 119928896, 120061376, 120192832, 120321728, 120454336, 957 120584512, 120716608, 120848192, 120979136, 121109056, 121241408, 958 121372352, 121502912, 121634752, 121764416, 121895744, 122027072, 959 122157632, 122289088, 122421184, 122550592, 122682944, 122813888, 960 122945344, 123075776, 123207488, 123338048, 123468736, 123600704, 961 123731264, 123861952, 123993664, 124124608, 124256192, 124386368, 962 124518208, 124649024, 124778048, 124911296, 125041088, 125173696, 963 125303744, 125432896, 125566912, 125696576, 125829056, 125958592, 964 126090304, 126221248, 126352832, 126483776, 126615232, 126746432, 965 126876608, 127008704, 127139392, 127270336, 127401152, 127532224, 966 127663552, 127794752, 127925696, 128055232, 128188096, 128319424, 967 128449856, 128581312, 128712256, 128843584, 128973632, 129103808, 968 129236288, 129365696, 129498944, 129629888, 129760832, 129892288, 969 130023104, 130154048, 130283968, 130416448, 130547008, 130678336, 970 130807616, 130939456, 131071552, 131202112, 131331776, 131464384, 971 131594048, 131727296, 131858368, 131987392, 132120256, 132250816, 972 132382528, 132513728, 132644672, 132774976, 132905792, 133038016, 973 133168832, 133299392, 133429312, 133562048, 133692992, 133823296, 974 133954624, 134086336, 134217152, 134348608, 134479808, 134607296, 975 134741056, 134872384, 135002944, 135134144, 135265472, 135396544, 976 135527872, 135659072, 135787712, 135921472, 136052416, 136182848, 977 136313792, 136444864, 136576448, 136707904, 136837952, 136970048, 978 137099584, 137232064, 137363392, 137494208, 137625536, 137755712, 979 137887424, 138018368, 138149824, 138280256, 138411584, 138539584, 980 138672832, 138804928, 138936128, 139066688, 139196864, 139328704, 981 139460032, 139590208, 139721024, 139852864, 139984576, 140115776, 982 140245696, 140376512, 140508352, 140640064, 140769856, 140902336, 983 141032768, 141162688, 141294016, 141426496, 141556544, 141687488, 984 141819584, 141949888, 142080448, 142212544, 142342336, 142474432, 985 142606144, 142736192, 142868288, 142997824, 143129408, 143258944, 986 143392448, 143523136, 143653696, 143785024, 143916992, 144045632, 987 144177856, 144309184, 144440768, 144570688, 144701888, 144832448, 988 144965056, 145096384, 145227584, 145358656, 145489856, 145620928, 989 145751488, 145883072, 146011456, 146144704, 146275264, 146407232, 990 146538176, 146668736, 146800448, 146931392, 147062336, 147193664, 991 147324224, 147455936, 147586624, 147717056, 147848768, 147979456, 992 148110784, 148242368, 148373312, 148503232, 148635584, 148766144, 993 148897088, 149028416, 149159488, 149290688, 149420224, 149551552, 994 149683136, 149814976, 149943616, 150076352, 150208064, 150338624, 995 150470464, 150600256, 150732224, 150862784, 150993088, 151125952, 996 151254976, 151388096, 151519168, 151649728, 151778752, 151911104, 997 152042944, 152174144, 152304704, 152435648, 152567488, 152698816, 998 152828992, 152960576, 153091648, 153222976, 153353792, 153484096, 999 153616192, 153747008, 153878336, 154008256, 154139968, 154270912, 1000 154402624, 154533824, 154663616, 154795712, 154926272, 155057984, 1001 155188928, 155319872, 155450816, 155580608, 155712064, 155843392, 1002 155971136, 156106688, 156237376, 156367424, 156499264, 156630976, 1003 156761536, 156892352, 157024064, 157155008, 157284416, 157415872, 1004 157545536, 157677248, 157810496, 157938112, 158071744, 158203328, 1005 158334656, 158464832, 158596288, 158727616, 158858048, 158988992, 1006 159121216, 159252416, 159381568, 159513152, 159645632, 159776192, 1007 159906496, 160038464, 160169536, 160300352, 160430656, 160563008, 1008 160693952, 160822208, 160956352, 161086784, 161217344, 161349184, 1009 161480512, 161611456, 161742272, 161873216, 162002752, 162135872, 1010 162266432, 162397888, 162529216, 162660032, 162790976, 162922048, 1011 163052096, 163184576, 163314752, 163446592, 163577408, 163707968, 1012 163839296, 163969984, 164100928, 164233024, 164364224, 164494912, 1013 164625856, 164756672, 164887616, 165019072, 165150016, 165280064, 1014 165412672, 165543104, 165674944, 165805888, 165936832, 166067648, 1015 166198336, 166330048, 166461248, 166591552, 166722496, 166854208, 1016 166985408, 167116736, 167246656, 167378368, 167508416, 167641024, 1017 167771584, 167903168, 168034112, 168164032, 168295744, 168427456, 1018 168557632, 168688448, 168819136, 168951616, 169082176, 169213504, 1019 169344832, 169475648, 169605952, 169738048, 169866304, 169999552, 1020 170131264, 170262464, 170393536, 170524352, 170655424, 170782016, 1021 170917696, 171048896, 171179072, 171310784, 171439936, 171573184, 1022 171702976, 171835072, 171966272, 172097216, 172228288, 172359232, 1023 172489664, 172621376, 172747712, 172883264, 173014208, 173144512, 1024 173275072, 173407424, 173539136, 173669696, 173800768, 173931712, 1025 174063424, 174193472, 174325696, 174455744, 174586816, 174718912, 1026 174849728, 174977728, 175109696, 175242688, 175374272, 175504832, 1027 175636288, 175765696, 175898432, 176028992, 176159936, 176291264, 1028 176422592, 176552512, 176684864, 176815424, 176946496, 177076544, 1029 177209152, 177340096, 177470528, 177600704, 177731648, 177864256, 1030 177994816, 178126528, 178257472, 178387648, 178518464, 178650176, 1031 178781888, 178912064, 179044288, 179174848, 179305024, 179436736, 1032 179568448, 179698496, 179830208, 179960512, 180092608, 180223808, 1033 180354752, 180485696, 180617152, 180748096, 180877504, 181009984, 1034 181139264, 181272512, 181402688, 181532608, 181663168, 181795136, 1035 181926592, 182057536, 182190016, 182320192, 182451904, 182582336, 1036 182713792, 182843072, 182976064, 183107264, 183237056, 183368384, 1037 183494848, 183631424, 183762752, 183893824, 184024768, 184154816, 1038 184286656, 184417984, 184548928, 184680128, 184810816, 184941248, 1039 185072704, 185203904, 185335616, 185465408, 185596352, 185727296, 1040 185859904, 185989696, 186121664, 186252992, 186383552, 186514112, 1041 186645952, 186777152, 186907328, 187037504, 187170112, 187301824, 1042 187429184, 187562048, 187693504, 187825472, 187957184, 188087104, 1043 188218304, 188349376, 188481344, 188609728, 188743616, 188874304, 1044 189005248, 189136448, 189265088, 189396544, 189528128, 189660992, 1045 189791936, 189923264, 190054208, 190182848, 190315072, 190447424, 1046 190577984, 190709312, 190840768, 190971328, 191102656, 191233472, 1047 191364032, 191495872, 191626816, 191758016, 191888192, 192020288, 1048 192148928, 192282176, 192413504, 192542528, 192674752, 192805952, 1049 192937792, 193068608, 193198912, 193330496, 193462208, 193592384, 1050 193723456, 193854272, 193985984, 194116672, 194247232, 194379712, 1051 194508352, 194641856, 194772544, 194900672, 195035072, 195166016, 1052 195296704, 195428032, 195558592, 195690304, 195818176, 195952576, 1053 196083392, 196214336, 196345792, 196476736, 196607552, 196739008, 1054 196869952, 197000768, 197130688, 197262784, 197394368, 197523904, 1055 197656384, 197787584, 197916608, 198049472, 198180544, 198310208, 1056 198442432, 198573632, 198705088, 198834368, 198967232, 199097792, 1057 199228352, 199360192, 199491392, 199621696, 199751744, 199883968, 1058 200014016, 200146624, 200276672, 200408128, 200540096, 200671168, 1059 200801984, 200933312, 201062464, 201194944, 201326144, 201457472, 1060 201588544, 201719744, 201850816, 201981632, 202111552, 202244032, 1061 202374464, 202505152, 202636352, 202767808, 202898368, 203030336, 1062 203159872, 203292608, 203423296, 203553472, 203685824, 203816896, 1063 203947712, 204078272, 204208192, 204341056, 204472256, 204603328, 1064 204733888, 204864448, 204996544, 205125568, 205258304, 205388864, 1065 205517632, 205650112, 205782208, 205913536, 206044736, 206176192, 1066 206307008, 206434496, 206569024, 206700224, 206831168, 206961856, 1067 207093056, 207223616, 207355328, 207486784, 207616832, 207749056, 1068 207879104, 208010048, 208141888, 208273216, 208404032, 208534336, 1069 208666048, 208796864, 208927424, 209059264, 209189824, 209321792, 1070 209451584, 209582656, 209715136, 209845568, 209976896, 210106432, 1071 210239296, 210370112, 210501568, 210630976, 210763712, 210894272, 1072 211024832, 211156672, 211287616, 211418176, 211549376, 211679296, 1073 211812032, 211942592, 212074432, 212204864, 212334016, 212467648, 1074 212597824, 212727616, 212860352, 212991424, 213120832, 213253952, 1075 213385024, 213515584, 213645632, 213777728, 213909184, 214040128, 1076 214170688, 214302656, 214433728, 214564544, 214695232, 214826048, 1077 214956992, 215089088, 215219776, 215350592, 215482304, 215613248, 1078 215743552, 215874752, 216005312, 216137024, 216267328, 216399296, 1079 216530752, 216661696, 216790592, 216923968, 217054528, 217183168, 1080 217316672, 217448128, 217579072, 217709504, 217838912, 217972672, 1081 218102848, 218233024, 218364736, 218496832, 218627776, 218759104, 1082 218888896, 219021248, 219151936, 219281728, 219413056, 219545024, 1083 219675968, 219807296, 219938624, 220069312, 220200128, 220331456, 1084 220461632, 220592704, 220725184, 220855744, 220987072, 221117888, 1085 221249216, 221378368, 221510336, 221642048, 221772736, 221904832, 1086 222031808, 222166976, 222297536, 222428992, 222559936, 222690368, 1087 222820672, 222953152, 223083968, 223213376, 223345984, 223476928, 1088 223608512, 223738688, 223869376, 224001472, 224132672, 224262848, 1089 224394944, 224524864, 224657344, 224788288, 224919488, 225050432, 1090 225181504, 225312704, 225443776, 225574592, 225704768, 225834176, 1091 225966784, 226097216, 226229824, 226360384, 226491712, 226623424, 1092 226754368, 226885312, 227015104, 227147456, 227278528, 227409472, 1093 227539904, 227669696, 227802944, 227932352, 228065216, 228196288, 1094 228326464, 228457792, 228588736, 228720064, 228850112, 228981056, 1095 229113152, 229243328, 229375936, 229505344, 229636928, 229769152, 1096 229894976, 230030272, 230162368, 230292416, 230424512, 230553152, 1097 230684864, 230816704, 230948416, 231079616, 231210944, 231342016, 1098 231472448, 231603776, 231733952, 231866176, 231996736, 232127296, 1099 232259392, 232388672, 232521664, 232652608, 232782272, 232914496, 1100 233043904, 233175616, 233306816, 233438528, 233569984, 233699776, 1101 233830592, 233962688, 234092224, 234221888, 234353984, 234485312, 1102 234618304, 234749888, 234880832, 235011776, 235142464, 235274048, 1103 235403456, 235535936, 235667392, 235797568, 235928768, 236057152, 1104 236190272, 236322752, 236453312, 236583616, 236715712, 236846528, 1105 236976448, 237108544, 237239104, 237371072, 237501632, 237630784, 1106 237764416, 237895232, 238026688, 238157632, 238286912, 238419392, 1107 238548032, 238681024, 238812608, 238941632, 239075008, 239206336, 1108 239335232, 239466944, 239599168, 239730496, 239861312, 239992384, 1109 240122816, 240254656, 240385856, 240516928, 240647872, 240779072, 1110 240909632, 241040704, 241171904, 241302848, 241433408, 241565248, 1111 241696192, 241825984, 241958848, 242088256, 242220224, 242352064, 1112 242481856, 242611648, 242744896, 242876224, 243005632, 243138496, 1113 243268672, 243400384, 243531712, 243662656, 243793856, 243924544, 1114 244054592, 244187072, 244316608, 244448704, 244580032, 244710976, 1115 244841536, 244972864, 245104448, 245233984, 245365312, 245497792, 1116 245628736, 245759936, 245889856, 246021056, 246152512, 246284224, 1117 246415168, 246545344, 246675904, 246808384, 246939584, 247070144, 1118 247199552, 247331648, 247463872, 247593536, 247726016, 247857088, 1119 247987648, 248116928, 248249536, 248380736, 248512064, 248643008, 1120 248773312, 248901056, 249036608, 249167552, 249298624, 249429184, 1121 249560512, 249692096, 249822784, 249954112, 250085312, 250215488, 1122 250345792, 250478528, 250608704, 250739264, 250870976, 251002816, 1123 251133632, 251263552, 251395136, 251523904, 251657792, 251789248, 1124 251919424, 252051392, 252182464, 252313408, 252444224, 252575552, 1125 252706624, 252836032, 252968512, 253099712, 253227584, 253361728, 1126 253493056, 253623488, 253754432, 253885504, 254017216, 254148032, 1127 254279488, 254410432, 254541376, 254672576, 254803264, 254933824, 1128 255065792, 255196736, 255326528, 255458752, 255589952, 255721408, 1129 255851072, 255983296, 256114624, 256244416, 256374208, 256507712, 1130 256636096, 256768832, 256900544, 257031616, 257162176, 257294272, 1131 257424448, 257555776, 257686976, 257818432, 257949632, 258079552, 1132 258211136, 258342464, 258473408, 258603712, 258734656, 258867008, 1133 258996544, 259127744, 259260224, 259391296, 259522112, 259651904, 1134 259784384, 259915328, 260045888, 260175424, 260308544, 260438336, 1135 260570944, 260700992, 260832448, 260963776, 261092672, 261226304, 1136 261356864, 261487936, 261619648, 261750592, 261879872, 262011968, 1137 262143424, 262274752, 262404416, 262537024, 262667968, 262799296, 1138 262928704, 263061184, 263191744, 263322944, 263454656, 263585216, 1139 263716672, 263847872, 263978944, 264108608, 264241088, 264371648, 1140 264501184, 264632768, 264764096, 264895936, 265024576, 265158464, 1141 265287488, 265418432, 265550528, 265681216, 265813312, 265943488, 1142 266075968, 266206144, 266337728, 266468032, 266600384, 266731072, 1143 266862272, 266993344, 267124288, 267255616, 267386432, 267516992, 1144 267648704, 267777728, 267910592, 268040512, 268172096, 268302784, 1145 268435264, 268566208, 268696256, 268828096, 268959296, 269090368, 1146 269221312, 269352256, 269482688, 269614784, 269745856, 269876416, 1147 270007616, 270139328, 270270272, 270401216, 270531904, 270663616, 1148 270791744, 270924736, 271056832, 271186112, 271317184, 271449536, 1149 271580992, 271711936, 271843136, 271973056, 272105408, 272236352, 1150 272367296, 272498368, 272629568, 272759488, 272891456, 273022784, 1151 273153856, 273284672, 273415616, 273547072, 273677632, 273808448, 1152 273937088, 274071488, 274200896, 274332992, 274463296, 274595392, 1153 274726208, 274857536, 274988992, 275118656, 275250496, 275382208, 1154 275513024, 275643968, 275775296, 275906368, 276037184, 276167872, 1155 276297664, 276429376, 276560576, 276692672, 276822976, 276955072, 1156 277085632, 277216832, 277347008, 277478848, 277609664, 277740992, 1157 277868608, 278002624, 278134336, 278265536, 278395328, 278526784, 1158 278657728, 278789824, 278921152, 279052096, 279182912, 279313088, 1159 279443776, 279576256, 279706048, 279838528, 279969728, 280099648, 1160 280230976, 280361408, 280493632, 280622528, 280755392, 280887104, 1161 281018176, 281147968, 281278912, 281411392, 281542592, 281673152, 1162 281803712, 281935552, 282066496, 282197312, 282329024, 282458816, 1163 282590272, 282720832, 282853184, 282983744, 283115072, 283246144, 1164 283377344, 283508416, 283639744, 283770304, 283901504, 284032576, 1165 284163136, 284294848, 284426176, 284556992, 284687296, 284819264, 1166 284950208, 285081536}