-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathmasks.h
216 lines (209 loc) · 20.1 KB
/
masks.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
/*
Clarity
Copyright (C) 2024 Joseph Pasfield
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// something something header guards
#pragma once
#include "globals.h"
// these first few sets of masks for move generation are generated by RedBedHed, the developer of Homura.
constexpr uint64_t knightAttacks[] = {
0x0000000000020400ULL, 0x0000000000050800ULL,
0x00000000000A1100ULL, 0x0000000000142200ULL,
0x0000000000284400ULL, 0x0000000000508800ULL,
0x0000000000A01000ULL, 0x0000000000402000ULL,
0x0000000002040004ULL, 0x0000000005080008ULL,
0x000000000A110011ULL, 0x0000000014220022ULL,
0x0000000028440044ULL, 0x0000000050880088ULL,
0x00000000A0100010ULL, 0x0000000040200020ULL,
0x0000000204000402ULL, 0x0000000508000805ULL,
0x0000000A1100110AULL, 0x0000001422002214ULL,
0x0000002844004428ULL, 0x0000005088008850ULL,
0x000000A0100010A0ULL, 0x0000004020002040ULL,
0x0000020400040200ULL, 0x0000050800080500ULL,
0x00000A1100110A00ULL, 0x0000142200221400ULL,
0x0000284400442800ULL, 0x0000508800885000ULL,
0x0000A0100010A000ULL, 0x0000402000204000ULL,
0x0002040004020000ULL, 0x0005080008050000ULL,
0x000A1100110A0000ULL, 0x0014220022140000ULL,
0x0028440044280000ULL, 0x0050880088500000ULL,
0x00A0100010A00000ULL, 0x0040200020400000ULL,
0x0204000402000000ULL, 0x0508000805000000ULL,
0x0A1100110A000000ULL, 0x1422002214000000ULL,
0x2844004428000000ULL, 0x5088008850000000ULL,
0xA0100010A0000000ULL, 0x4020002040000000ULL,
0x0400040200000000ULL, 0x0800080500000000ULL,
0x1100110A00000000ULL, 0x2200221400000000ULL,
0x4400442800000000ULL, 0x8800885000000000ULL,
0x100010A000000000ULL, 0x2000204000000000ULL,
0x0004020000000000ULL, 0x0008050000000000ULL,
0x00110A0000000000ULL, 0x0022140000000000ULL,
0x0044280000000000ULL, 0x0088500000000000ULL,
0x0010A00000000000ULL, 0x0020400000000000ULL
};
constexpr uint64_t kingAttacks[] = {
0x0000000000000302ULL, 0x0000000000000705ULL,
0x0000000000000E0AULL, 0x0000000000001C14ULL,
0x0000000000003828ULL, 0x0000000000007050ULL,
0x000000000000E0A0ULL, 0x000000000000C040ULL,
0x0000000000030203ULL, 0x0000000000070507ULL,
0x00000000000E0A0EULL, 0x00000000001C141CULL,
0x0000000000382838ULL, 0x0000000000705070ULL,
0x0000000000E0A0E0ULL, 0x0000000000C040C0ULL,
0x0000000003020300ULL, 0x0000000007050700ULL,
0x000000000E0A0E00ULL, 0x000000001C141C00ULL,
0x0000000038283800ULL, 0x0000000070507000ULL,
0x00000000E0A0E000ULL, 0x00000000C040C000ULL,
0x0000000302030000ULL, 0x0000000705070000ULL,
0x0000000E0A0E0000ULL, 0x0000001C141C0000ULL,
0x0000003828380000ULL, 0x0000007050700000ULL,
0x000000E0A0E00000ULL, 0x000000C040C00000ULL,
0x0000030203000000ULL, 0x0000070507000000ULL,
0x00000E0A0E000000ULL, 0x00001C141C000000ULL,
0x0000382838000000ULL, 0x0000705070000000ULL,
0x0000E0A0E0000000ULL, 0x0000C040C0000000ULL,
0x0003020300000000ULL, 0x0007050700000000ULL,
0x000E0A0E00000000ULL, 0x001C141C00000000ULL,
0x0038283800000000ULL, 0x0070507000000000ULL,
0x00E0A0E000000000ULL, 0x00C040C000000000ULL,
0x0302030000000000ULL, 0x0705070000000000ULL,
0x0E0A0E0000000000ULL, 0x1C141C0000000000ULL,
0x3828380000000000ULL, 0x7050700000000000ULL,
0xE0A0E00000000000ULL, 0xC040C00000000000ULL,
0x0203000000000000ULL, 0x0507000000000000ULL,
0x0A0E000000000000ULL, 0x141C000000000000ULL,
0x2838000000000000ULL, 0x5070000000000000ULL,
0xA0E0000000000000ULL, 0x40C0000000000000ULL
};
constexpr uint64_t pawnAttacks[2][64] = {
{
0x0000000000000000ULL,0x0000000000000000ULL,
0x0000000000000000ULL,0x0000000000000000ULL,
0x0000000000000000ULL,0x0000000000000000ULL,
0x0000000000000000ULL,0x0000000000000000ULL,
0x0000000000000002ULL,0x0000000000000005ULL,
0x000000000000000AULL,0x0000000000000014ULL,
0x0000000000000028ULL,0x0000000000000050ULL,
0x00000000000000A0ULL,0x0000000000000040ULL,
0x0000000000000200ULL,0x0000000000000500ULL,
0x0000000000000A00ULL,0x0000000000001400ULL,
0x0000000000002800ULL,0x0000000000005000ULL,
0x000000000000A000ULL,0x0000000000004000ULL,
0x0000000000020000ULL,0x0000000000050000ULL,
0x00000000000A0000ULL,0x0000000000140000ULL,
0x0000000000280000ULL,0x0000000000500000ULL,
0x0000000000A00000ULL,0x0000000000400000ULL,
0x0000000002000000ULL,0x0000000005000000ULL,
0x000000000A000000ULL,0x0000000014000000ULL,
0x0000000028000000ULL,0x0000000050000000ULL,
0x00000000A0000000ULL,0x0000000040000000ULL,
0x0000000200000000ULL,0x0000000500000000ULL,
0x0000000A00000000ULL,0x0000001400000000ULL,
0x0000002800000000ULL,0x0000005000000000ULL,
0x000000A000000000ULL,0x0000004000000000ULL,
0x0000020000000000ULL,0x0000050000000000ULL,
0x00000A0000000000ULL,0x0000140000000000ULL,
0x0000280000000000ULL,0x0000500000000000ULL,
0x0000A00000000000ULL,0x0000400000000000ULL,
0x0002000000000000ULL,0x0005000000000000ULL,
0x000A000000000000ULL,0x0014000000000000ULL,
0x0028000000000000ULL,0x0050000000000000ULL,
0x00A0000000000000ULL,0x0040000000000000ULL
},
{
0x0000000000000200ULL,0x0000000000000500ULL,
0x0000000000000A00ULL,0x0000000000001400ULL,
0x0000000000002800ULL,0x0000000000005000ULL,
0x000000000000A000ULL,0x0000000000004000ULL,
0x0000000000020000ULL,0x0000000000050000ULL,
0x00000000000A0000ULL,0x0000000000140000ULL,
0x0000000000280000ULL,0x0000000000500000ULL,
0x0000000000A00000ULL,0x0000000000400000ULL,
0x0000000002000000ULL,0x0000000005000000ULL,
0x000000000A000000ULL,0x0000000014000000ULL,
0x0000000028000000ULL,0x0000000050000000ULL,
0x00000000A0000000ULL,0x0000000040000000ULL,
0x0000000200000000ULL,0x0000000500000000ULL,
0x0000000A00000000ULL,0x0000001400000000ULL,
0x0000002800000000ULL,0x0000005000000000ULL,
0x000000A000000000ULL,0x0000004000000000ULL,
0x0000020000000000ULL,0x0000050000000000ULL,
0x00000A0000000000ULL,0x0000140000000000ULL,
0x0000280000000000ULL,0x0000500000000000ULL,
0x0000A00000000000ULL,0x0000400000000000ULL,
0x0002000000000000ULL,0x0005000000000000ULL,
0x000A000000000000ULL,0x0014000000000000ULL,
0x0028000000000000ULL,0x0050000000000000ULL,
0x00A0000000000000ULL,0x0040000000000000ULL,
0x0200000000000000ULL,0x0500000000000000ULL,
0x0A00000000000000ULL,0x1400000000000000ULL,
0x2800000000000000ULL,0x5000000000000000ULL,
0xA000000000000000ULL,0x4000000000000000ULL,
0x0000000000000000ULL,0x0000000000000000ULL,
0x0000000000000000ULL,0x0000000000000000ULL,
0x0000000000000000ULL,0x0000000000000000ULL,
0x0000000000000000ULL,0x0000000000000000ULL
}
};
// Values here were generated from my c# engine
// I've double checked them manually, these all are correct
constexpr uint64_t slideyPieceRays[8][64] = {
{72340172838076672ULL, 144680345676153344ULL, 289360691352306688ULL, 578721382704613376ULL, 1157442765409226752ULL, 2314885530818453504ULL, 4629771061636907008ULL, 9259542123273814016ULL, 72340172838076416ULL, 144680345676152832ULL, 289360691352305664ULL, 578721382704611328ULL, 1157442765409222656ULL, 2314885530818445312ULL, 4629771061636890624ULL, 9259542123273781248ULL, 72340172838010880ULL, 144680345676021760ULL, 289360691352043520ULL, 578721382704087040ULL, 1157442765408174080ULL, 2314885530816348160ULL, 4629771061632696320ULL, 9259542123265392640ULL, 72340172821233664ULL, 144680345642467328ULL, 289360691284934656ULL, 578721382569869312ULL, 1157442765139738624ULL, 2314885530279477248ULL, 4629771060558954496ULL, 9259542121117908992ULL, 72340168526266368ULL, 144680337052532736ULL, 289360674105065472ULL, 578721348210130944ULL, 1157442696420261888ULL, 2314885392840523776ULL, 4629770785681047552ULL, 9259541571362095104ULL, 72339069014638592ULL, 144678138029277184ULL, 289356276058554368ULL, 578712552117108736ULL, 1157425104234217472ULL, 2314850208468434944ULL, 4629700416936869888ULL, 9259400833873739776ULL, 72057594037927936ULL, 144115188075855872ULL, 288230376151711744ULL, 576460752303423488ULL, 1152921504606846976ULL, 2305843009213693952ULL, 4611686018427387904ULL, 9223372036854775808ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0},
{0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 1ULL, 2ULL, 4ULL, 8ULL, 16ULL, 32ULL, 64ULL, 128ULL, 257ULL, 514ULL, 1028ULL, 2056ULL, 4112ULL, 8224ULL, 16448ULL, 32896ULL, 65793ULL, 131586ULL, 263172ULL, 526344ULL, 1052688ULL, 2105376ULL, 4210752ULL, 8421504ULL, 16843009ULL, 33686018ULL, 67372036ULL, 134744072ULL, 269488144ULL, 538976288ULL, 1077952576ULL, 2155905152ULL, 4311810305ULL, 8623620610ULL, 17247241220ULL, 34494482440ULL, 68988964880ULL, 137977929760ULL, 275955859520ULL, 551911719040ULL, 1103823438081ULL, 2207646876162ULL, 4415293752324ULL, 8830587504648ULL, 17661175009296ULL, 35322350018592ULL, 70644700037184ULL, 141289400074368ULL, 282578800148737ULL, 565157600297474ULL, 1130315200594948ULL, 2260630401189896ULL, 4521260802379792ULL, 9042521604759584ULL, 18085043209519168ULL, 36170086419038336},
{254ULL, 252ULL, 248ULL, 240ULL, 224ULL, 192ULL, 128ULL, 0ULL, 65024ULL, 64512ULL, 63488ULL, 61440ULL, 57344ULL, 49152ULL, 32768ULL, 0ULL, 16646144ULL, 16515072ULL, 16252928ULL, 15728640ULL, 14680064ULL, 12582912ULL, 8388608ULL, 0ULL, 4261412864ULL, 4227858432ULL, 4160749568ULL, 4026531840ULL, 3758096384ULL, 3221225472ULL, 2147483648ULL, 0ULL, 1090921693184ULL, 1082331758592ULL, 1065151889408ULL, 1030792151040ULL, 962072674304ULL, 824633720832ULL, 549755813888ULL, 0ULL, 279275953455104ULL, 277076930199552ULL, 272678883688448ULL, 263882790666240ULL, 246290604621824ULL, 211106232532992ULL, 140737488355328ULL, 0ULL, 71494644084506624ULL, 70931694131085312ULL, 69805794224242688ULL, 67553994410557440ULL, 63050394783186944ULL, 54043195528445952ULL, 36028797018963968ULL, 0ULL, 18302628885633695744ULL, 18158513697557839872ULL, 17870283321406128128ULL, 17293822569102704640ULL, 16140901064495857664ULL, 13835058055282163712ULL, 9223372036854775808ULL, 0},
{0ULL, 1ULL, 3ULL, 7ULL, 15ULL, 31ULL, 63ULL, 127ULL, 0ULL, 256ULL, 768ULL, 1792ULL, 3840ULL, 7936ULL, 16128ULL, 32512ULL, 0ULL, 65536ULL, 196608ULL, 458752ULL, 983040ULL, 2031616ULL, 4128768ULL, 8323072ULL, 0ULL, 16777216ULL, 50331648ULL, 117440512ULL, 251658240ULL, 520093696ULL, 1056964608ULL, 2130706432ULL, 0ULL, 4294967296ULL, 12884901888ULL, 30064771072ULL, 64424509440ULL, 133143986176ULL, 270582939648ULL, 545460846592ULL, 0ULL, 1099511627776ULL, 3298534883328ULL, 7696581394432ULL, 16492674416640ULL, 34084860461056ULL, 69269232549888ULL, 139637976727552ULL, 0ULL, 281474976710656ULL, 844424930131968ULL, 1970324836974592ULL, 4222124650659840ULL, 8725724278030336ULL, 17732923532771328ULL, 35747322042253312ULL, 0ULL, 72057594037927936ULL, 216172782113783808ULL, 504403158265495552ULL, 1080863910568919040ULL, 2233785415175766016ULL, 4539628424389459968ULL, 9151314442816847872},
{0ULL, 256ULL, 66048ULL, 16909312ULL, 4328785920ULL, 1108169199616ULL, 283691315109888ULL, 72624976668147712ULL, 0ULL, 65536ULL, 16908288ULL, 4328783872ULL, 1108169195520ULL, 283691315101696ULL, 72624976668131328ULL, 145249953336262656ULL, 0ULL, 16777216ULL, 4328521728ULL, 1108168671232ULL, 283691314053120ULL, 72624976666034176ULL, 145249953332068352ULL, 290499906664136704ULL, 0ULL, 4294967296ULL, 1108101562368ULL, 283691179835392ULL, 72624976397598720ULL, 145249952795197440ULL, 290499905590394880ULL, 580999811180789760ULL, 0ULL, 1099511627776ULL, 283673999966208ULL, 72624942037860352ULL, 145249884075720704ULL, 290499768151441408ULL, 580999536302882816ULL, 1161999072605765632ULL, 0ULL, 281474976710656ULL, 72620543991349248ULL, 145241087982698496ULL, 290482175965396992ULL, 580964351930793984ULL, 1161928703861587968ULL, 2323857407723175936ULL, 0ULL, 72057594037927936ULL, 144115188075855872ULL, 288230376151711744ULL, 576460752303423488ULL, 1152921504606846976ULL, 2305843009213693952ULL, 4611686018427387904ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0},
{0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 2ULL, 4ULL, 8ULL, 16ULL, 32ULL, 64ULL, 128ULL, 0ULL, 516ULL, 1032ULL, 2064ULL, 4128ULL, 8256ULL, 16512ULL, 32768ULL, 0ULL, 132104ULL, 264208ULL, 528416ULL, 1056832ULL, 2113664ULL, 4227072ULL, 8388608ULL, 0ULL, 33818640ULL, 67637280ULL, 135274560ULL, 270549120ULL, 541097984ULL, 1082130432ULL, 2147483648ULL, 0ULL, 8657571872ULL, 17315143744ULL, 34630287488ULL, 69260574720ULL, 138521083904ULL, 277025390592ULL, 549755813888ULL, 0ULL, 2216338399296ULL, 4432676798592ULL, 8865353596928ULL, 17730707128320ULL, 35461397479424ULL, 70918499991552ULL, 140737488355328ULL, 0ULL, 567382630219904ULL, 1134765260439552ULL, 2269530520813568ULL, 4539061024849920ULL, 9078117754732544ULL, 18155135997837312ULL, 36028797018963968ULL, 0},
{9241421688590303744ULL, 36099303471055872ULL, 141012904183808ULL, 550831656960ULL, 2151686144ULL, 8404992ULL, 32768ULL, 0ULL, 4620710844295151616ULL, 9241421688590303232ULL, 36099303471054848ULL, 141012904181760ULL, 550831652864ULL, 2151677952ULL, 8388608ULL, 0ULL, 2310355422147510272ULL, 4620710844295020544ULL, 9241421688590041088ULL, 36099303470530560ULL, 141012903133184ULL, 550829555712ULL, 2147483648ULL, 0ULL, 1155177711056977920ULL, 2310355422113955840ULL, 4620710844227911680ULL, 9241421688455823360ULL, 36099303202095104ULL, 141012366262272ULL, 549755813888ULL, 0ULL, 577588851233521664ULL, 1155177702467043328ULL, 2310355404934086656ULL, 4620710809868173312ULL, 9241421619736346624ULL, 36099165763141632ULL, 140737488355328ULL, 0ULL, 288793326105133056ULL, 577586652210266112ULL, 1155173304420532224ULL, 2310346608841064448ULL, 4620693217682128896ULL, 9241386435364257792ULL, 36028797018963968ULL, 0ULL, 144115188075855872ULL, 288230376151711744ULL, 576460752303423488ULL, 1152921504606846976ULL, 2305843009213693952ULL, 4611686018427387904ULL, 9223372036854775808ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0},
{0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 1ULL, 2ULL, 4ULL, 8ULL, 16ULL, 32ULL, 64ULL, 0ULL, 256ULL, 513ULL, 1026ULL, 2052ULL, 4104ULL, 8208ULL, 16416ULL, 0ULL, 65536ULL, 131328ULL, 262657ULL, 525314ULL, 1050628ULL, 2101256ULL, 4202512ULL, 0ULL, 16777216ULL, 33619968ULL, 67240192ULL, 134480385ULL, 268960770ULL, 537921540ULL, 1075843080ULL, 0ULL, 4294967296ULL, 8606711808ULL, 17213489152ULL, 34426978560ULL, 68853957121ULL, 137707914242ULL, 275415828484ULL, 0ULL, 1099511627776ULL, 2203318222848ULL, 4406653222912ULL, 8813306511360ULL, 17626613022976ULL, 35253226045953ULL, 70506452091906ULL, 0ULL, 281474976710656ULL, 564049465049088ULL, 1128103225065472ULL, 2256206466908160ULL, 4512412933881856ULL, 9024825867763968ULL, 18049651735527937}
};
constexpr uint64_t bishopMasks[64] = {
18049651735527936ULL, 70506452091904ULL, 275415828992ULL, 1075975168ULL,
38021120ULL, 8657588224ULL, 2216338399232ULL, 567382630219776ULL,
9024825867763712ULL, 18049651735527424ULL, 70506452221952ULL, 275449643008ULL,
9733406720ULL, 2216342585344ULL, 567382630203392ULL, 1134765260406784ULL,
4512412933816832ULL, 9024825867633664ULL, 18049651768822272ULL, 70515108615168ULL,
2491752130560ULL, 567383701868544ULL, 1134765256220672ULL, 2269530512441344ULL,
2256206450263040ULL, 4512412900526080ULL, 9024834391117824ULL, 18051867805491712ULL,
637888545440768ULL, 1135039602493440ULL, 2269529440784384ULL, 4539058881568768ULL,
1128098963916800ULL, 2256197927833600ULL, 4514594912477184ULL, 9592139778506752ULL,
19184279556981248ULL, 2339762086609920ULL, 4538784537380864ULL, 9077569074761728ULL,
562958610993152ULL, 1125917221986304ULL, 2814792987328512ULL, 5629586008178688ULL,
11259172008099840ULL, 22518341868716544ULL, 9007336962655232ULL, 18014673925310464ULL,
2216338399232ULL, 4432676798464ULL, 11064376819712ULL, 22137335185408ULL,
44272556441600ULL, 87995357200384ULL, 35253226045952ULL, 70506452091904ULL,
567382630219776ULL, 1134765260406784ULL, 2832480465846272ULL, 5667157807464448ULL,
11333774449049600ULL, 22526811443298304ULL, 9024825867763712ULL, 18049651735527936
};
constexpr uint64_t rookMasks[64] = {
282578800148862ULL, 565157600297596ULL, 1130315200595066ULL, 2260630401190006ULL,
4521260802379886ULL, 9042521604759646ULL, 18085043209519166ULL, 36170086419038334ULL,
282578800180736ULL, 565157600328704ULL, 1130315200625152ULL, 2260630401218048ULL,
4521260802403840ULL, 9042521604775424ULL, 18085043209518592ULL, 36170086419037696ULL,
282578808340736ULL, 565157608292864ULL, 1130315208328192ULL, 2260630408398848ULL,
4521260808540160ULL, 9042521608822784ULL, 18085043209388032ULL, 36170086418907136ULL,
282580897300736ULL, 565159647117824ULL, 1130317180306432ULL, 2260632246683648ULL,
4521262379438080ULL, 9042522644946944ULL, 18085043175964672ULL, 36170086385483776ULL,
283115671060736ULL, 565681586307584ULL, 1130822006735872ULL, 2261102847592448ULL,
4521664529305600ULL, 9042787892731904ULL, 18085034619584512ULL, 36170077829103616ULL,
420017753620736ULL, 699298018886144ULL, 1260057572672512ULL, 2381576680245248ULL,
4624614895390720ULL, 9110691325681664ULL, 18082844186263552ULL, 36167887395782656ULL,
35466950888980736ULL, 34905104758997504ULL, 34344362452452352ULL, 33222877839362048ULL,
30979908613181440ULL, 26493970160820224ULL, 17522093256097792ULL, 35607136465616896ULL,
9079539427579068672ULL, 8935706818303361536ULL, 8792156787827803136ULL, 8505056726876686336ULL,
7930856604974452736ULL, 6782456361169985536ULL, 4485655873561051136ULL, 9115426935197958144
};
// these were generated by the code contained in the Generator Code folde
constexpr uint64_t passedPawnMasks[2][64] = {
{0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 3ULL, 7ULL, 14ULL, 28ULL, 56ULL, 112ULL, 224ULL, 192ULL, 771ULL, 1799ULL, 3598ULL, 7196ULL, 14392ULL, 28784ULL, 57568ULL, 49344ULL, 197379ULL, 460551ULL, 921102ULL, 1842204ULL, 3684408ULL, 7368816ULL, 14737632ULL, 12632256ULL, 50529027ULL, 117901063ULL, 235802126ULL, 471604252ULL, 943208504ULL, 1886417008ULL, 3772834016ULL, 3233857728ULL, 12935430915ULL, 30182672135ULL, 60365344270ULL, 120730688540ULL, 241461377080ULL, 482922754160ULL, 965845508320ULL, 827867578560ULL, 3311470314243ULL, 7726764066567ULL, 15453528133134ULL, 30907056266268ULL, 61814112532536ULL, 123628225065072ULL, 247256450130144ULL, 211934100111552ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0},
{0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 217020518514229248ULL, 506381209866534912ULL, 1012762419733069824ULL, 2025524839466139648ULL, 4051049678932279296ULL, 8102099357864558592ULL, 16204198715729117184ULL, 13889313184910671872ULL, 217020518514032640ULL, 506381209866076160ULL, 1012762419732152320ULL, 2025524839464304640ULL, 4051049678928609280ULL, 8102099357857218560ULL, 16204198715714437120ULL, 13889313184898088960ULL, 217020518463700992ULL, 506381209748635648ULL, 1012762419497271296ULL, 2025524838994542592ULL, 4051049677989085184ULL, 8102099355978170368ULL, 16204198711956340736ULL, 13889313181676863488ULL, 217020505578799104ULL, 506381179683864576ULL, 1012762359367729152ULL, 2025524718735458304ULL, 4051049437470916608ULL, 8102098874941833216ULL, 16204197749883666432ULL, 13889312357043142656ULL, 217017207043915776ULL, 506373483102470144ULL, 1012746966204940288ULL, 2025493932409880576ULL, 4050987864819761152ULL, 8101975729639522304ULL, 16203951459279044608ULL, 13889101250810609664ULL, 216172782113783808ULL, 504403158265495552ULL, 1008806316530991104ULL, 2017612633061982208ULL, 4035225266123964416ULL, 8070450532247928832ULL, 16140901064495857664ULL, 13835058055282163712ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0}
};