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