-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathfalcon_test.go
424 lines (357 loc) · 85.9 KB
/
falcon_test.go
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
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
package falcon
import (
"bytes"
"crypto/rand"
"encoding/hex"
"fmt"
mathrand "math/rand"
"strings"
"testing"
"time"
"golang.org/x/crypto/sha3"
)
var kats = []string{
"ba00016f9c02418a51eb4f319248ad88e1ee98ab130a2e4b2cc2aca6d6166e0be7f63954af9a1dc328d9499cae5daec5979d13a64dc4747c4b3563984257e7957cd6c6754983da51f39c89ee335d52cca7b9f885369b275ad99b73908ac0d8256b2f28a130a4f71782c66b924adee306cf5bbfb103df89439ddd8f9b9a5bf8a55bcf28db3ddcaf1ea69afdb0ad44ed2ec969b893db3d4b8cd5c99e573fa77b32431b9e684dbc889835a372d5f41e561baa9f91444918abcae41065e97781ae534515f7dcc9494fc21382a749e62a1551091f662a26567ed15eb35f1d73f9f27912c7e64b6cf8d2ebd61cb57259759a55f831acb6adedf49f58a156449dbbab8107ca541b8e5a4ab67763941830adc1ea1b896201bf40f4e6f18a8aac1e64b13f77ab043f93926ea9fe2512ef0a4e389fed7906cb4f3574f77e671240c729a46c24acd6dedffb6c34296ed446511dbec671438e91b11fdea247d66044b834dd4c26751eeb95e22f01f730d8c9eb6d7bf5450ea261565e1a15a210a7bf4c3dfa4904fd54fb99fab4e22320972c997e665b388990a503f592df904d8e0a0ad3fa90559203098011dfb19f4d52a83dba44aace1c7f92a4ff43d986bd2449af86c27a652408f896ea6b4c4bb7dc96e519e6df07aa77fa0eda0fa2bad5bd7e5943324a371e7436d19d1d8347f673b76d547b799398d812a9a5a04a2853bc654dcce34d994210c425860e1dd381e27988b4c957ab4da314c67ed7a6428cd66b2fe3792c6c4b6bafcb6edc79cc50deab75eaf3dc9d50a796599f6eb8f13e7d1bdfff57ac2e9072d080a08d566faad9252eff7bf96d55abea091097b6ec2e24c8349af24d92c9912866214e641166336b7fc76a324bd244e0313baaa75fd684b139e47d27d70724d149f3ad567c8a920f1534b4b08c112425fee6771eb5977e2ead722028bba4daf8824afdab9c16a7090caef756e44a7ac96534cc0a7156405ab91223e048fa3408e7edd9998b325711811d03bd7562d91ebe6cb9922df7730bba90c230e9d9c8b56ed2fb9566bb1fdcd3c83711c79e15f4077b7acb5aa33e9cda43c0a67e2d70e4d1c1f0732f46339b54244ca4f10c72f23054f28bae77f4795984b61124691a987942d4a9515a69062aa4837d8846cb148bb1a0d72591b2251ad83b759849aa28093145926b692c1b3a4b6878c2dba24a3fb63d12bc9e607aa9df7d1c85d078e7778c829f8c8d2e65cf8ce50ea4fa1b85c624943cd3cd137bb26ade6cc3499fb9c75b2b86cdf1a8755ab989c4c490d91bc902f4d0ab29429b179c17bb78e2ab55390c2a479ddf5827104f2bc880d7b3b4be2681a4c5f88569becc306842450caac3f87d3cd60f11ac99f6d9daa2ab41e610c40e8a831f0b8ce0e8b2cc3e11d1cb5677ea5d306c0bfd79306c58e41fa70a583d5aa6fa9b68a339b24248cfd3383dd76fd6ab92fa9fff5df88bd671685c79db7c19f45b4bf76f150cfa15e4b5725bbb532989f44124b976a6eb54b1de5384f18277dc6aee57ffc7a13a357238f3966dda0b8b982046e5d1d5cd270c60e3fa7c0d23d9168010f204675432f6b3c5b635d94cb573d831832e532c253fb71edc1e88d1ca2aefbc9d5091741beea62e32dca7bb87fd9923dc0874a11881448c231696d4ecd184cd3b69e96947b9a944b390a91698d0c7b571ecc94fe8fbf1c39ef4b68600d3b82d962aab0cd794238ec4379b2721fda843e0",
"ba00f7d73d7f195795cf6a7390d5a70cd222cd65350e6f915d0ca19f6da9fbd57e1e893acacb31636d6b5455ae7f0f356725b8ed4b322895ddb9e9eb5764d314e751fbfccb643782ed63e32a71799d6e8d4a569924e891ee79b10f643296cf3fd475c9874bf6c4d793388c79213c54be348622f118021faa69eb53e489f7dd982dd30b45f54a4ce506cebd65be3e6f1cda704751d511608d8f2e34a9ec65b9d4f510492a4976e13cc3604b813c2d358c14d847612bd8c359b7b67de290af1055df73e279aaa882f7c9af51d129563991c8a05f18daa33546d934990ed677366d8241c7e4490dbcc36bf7b5b49be92cfcbbae1a7607e4519bcfcbcdc24037db0cf6a18162d9f73f21b27d88d72b63a78ff7fea9d477a22848523a6b74f0fe6efb379171a65bae2b847f3cb4e7e2bafd085a4b6bf07cd638d5f5ba72135a98d07945d2b706c42b0e54861317da248dba5d1b609e4eeb0e670ef4a10da468155fe51da09eb0f85515aeb37ce670b6e7b4625498cec16cdc29648c621c68ae7f3c72ff08e43ac1ffa272f20396cc160672c031bb6c2472a3db8ef671e9df57792910f567dff8acf61a36b5132b5293dfdd8c944b2762be3df40ee3a7bbb4b683646ab4d35cecf60cdf71f7cd0e67b44ccbcaccbec0c6ab5281042d1895c934bc0319176651a52b1a849b0a24fd11a5be3a7ae6410243127337239f664bbe6eef21f36e61f1ee892b6918c5a897def4be9992a9f6d9d86eb2b6d8d49cba8e0dd6c370b96951ed745b22348e285f1e741852ef332efd5ac3248234fa21678c44da4ac9061e0e7151f635b04c6a4d7b2dd188015b4ebf14286b1e6f5b341c7e792682cd28471dafe635172ae61f527a93ecaaa31323aa19652139775b20690c5c8771aee10c76198a1013308d23c561c85e220df62ab79d8864719f5480b1c72e48ba6b2d44640882ca9afa2f1cf538ac47e2d8e5a53fd8c0d050efb403f6c432ea4cd5969bc0b9ceec36475a600ad4ca2d94314f6659a6892f08d3b5838ef78a5344ad18053bccb0b2bdffa5b77c8b946d8a5d7cf6b48d1655a341cca3872c65f9564633c62068ca92fa93dec12ed6cda9f4dd226d49db897b1b366f1d6aae28b1224c9a9eccdd33490f58abf276ad02ba821c82e88b419f5b3f9926bbd172a8e47bdee5c47468e9ea5bd99638fc695143c42d71bc9c8fe66a4c8328fbf6186a8320aeef69d6afd31efc4ba4bb193aa74a34f546309cca6489e9d3c9adedc1da57a02c2667ad3a634e9634b7cfe0a8d92455f42a95efa333ad60a3f7175ad52b79a43d2c1e092769168e1275b84ad1b2c2a543add25f0ff6d14ff57afe58184be1b018367e79d980220bd5c96ba85c7a09ffa9862c8abf860d0a4b4c923e866666b4219822949f7609bc6c1068714ebacd8cdee77cc422d98dbc15a9ffa635d819e447f767feff606cb5bffab5eb3ad42b2e0b9a7c22551d93ad6fd2b2a7156be110ad3527db41e6f63727c31fa8da5179fa95675371d3a1d61ce9d2966a513d138ad719c487c52542cdae1d5e40774e0d1aeb3dc7da2d38d4f746ecaa253b4e9f4c7207853acbc76357b47bcb264796f70be3cf9e106b049e678c8de5aa93db56aaecc45f369da44e3636b515ae966a9a9ca892c9f17768b26737485b6e444e8c441987d737b83a3d24abb51cb45389eeda132a8bb539375536261294b24b037092dd8735483b68f34eb11007e901260652b87570a2",
"ba00bff2509b95067f0d67a2cd01043fb3b77bfffcc1adc76735ae9327acc5d7568363bca9899c7a46555956aa7b15e51ee3b74f0ab1c2fe944b77b1a880ceb40f673dcd9ee6851cd8cf11bd126a6ecf6e9a3add455b3fea44a4872d6250159691adc929f7f9bdf31e665e756698aee33190cc964fe5b9cca013ec28ca63ea966b8e7d1dc2695833f996c13433538338e0ced3342b0d0b3649dd25a6f646b8cb44ba57393d947dd411b69a671b30f83a7116573455e065176aab508610c5d27ad363af309b9ac095de2996e58d4cc5636e4996992bcf7e7290fe5ad731c0d039a8ea49cb548dfce92763f34db497659394f0e80646ade5ff24b47cf3f7362fd403e5de46043381ff931d973a486ab3441962e9b309fa390cbc4dd8de65aac1bee924d35d86aafd9e4225fb497d2ed15db1a99586b9e7aee81872a9963da80d91f5c8e490c30c89e520c783f5fcdbb02638853fee85d9f1ca6427884bb9e13bd8bdf9306fb5261fe05d1454f95098b37e8db5ae2f4466d04b65e0fa7811e4b075956b7ddbd4f3c4a52cba76de4d8e1b15debda8ee26edbda519dfe4c112610c9c5108105aed41c2495cb6ec5868b017ed78f312a5dec312b1b3aa0cdbeecda599088c84634fdd153be7f428f9f6e70d23657eaceecf06e0675162cdfd7db0e6ba59cb4210bd34355d442012d76fd7a6435953beb8a3e8d2aa807a639d0ef5732d11d6c4e7591690997c66be6fbda19f56db8d12126be7782d5a47ed4ed13cc372bcb0b927461969726a93991b68d2fc1813878528581cdcad5663a635ba4ed4a090396ccd3844b4fa67677f94a5153d7c3bed83b0df31dbf632930d518ebe4587f3ef862e32fe5ed3456a5ba5e05f2a37d8e613a982ddb6e76d89869fbe250d986a226679e7f0599bbffa8e72b2f4c8547119a474562552959eae5b7a71c71487ced58e9aa8d43a66ef15549e0dc710cb4d8b3fd6aad237bbe275ef4b7a3b1c8f4a985935adea246625cc6f332f47c4d8231904fb1103d9a37228b2338c2ed7774d5b56f4486bbc946debfbac66760f66ca5998275d9f8eb93025a73d312847838cc64412b3d286b43892bc8f3d15aeaed6bab3e5b712c20e9be4e4348dcc95d43789d0949a635f5090e5a431b2008dcc117b7e00875198ff5a18cbb3774e6e889015e742bea996477b45f522c4e10bb5efd4f8790911bc9c4f4b89bac67b99a569284484b1c38de510d927199fbba4b76c486aa7bd1801c060ae5851ec519fd889a9d5afc89eab630010dcf57f94b74ffcf9fac5e219baa6e1119834460c4be7da4b4de20293b8e948d09c9c8ef75ee7ea28519eda6c8f4d027ed430f0bc937e596388bb74bc9a4cc1263bad0eecf969fa46f954d0781475bcc6b1ddc82dbbae5fd174b9a5842174ea6bb785afcbb0936cf6da1991507f5b0beed258e87196e815259572de7a730dbebe9c55124f01ba9ff6d6b793310dbc58dd1c12f9f8dbbb4a92a28f20f435e50b404e54d246d4287ab9d1829837e95fd23a98cb0c97390020b72d4cdf8f68c2075479943c12c0c026092121e32d3326d7d99eb5d392b8ba1ae8baca0f1fc8c8309ab3807794afc417a0b8f0ed91641747ad5d1a2307a25f997c895dcd2ba7d24082b8399c83ef1090dc6dd76634d1339d690953a6981807b5c78fa4c671046737aa8bcad9e1460daf79b2baacce7d81ca53742dc22786641bcc20d3bbae9220ebcfb3290b5a31481ba3",
"ba008b20c7791b8a9619b6bd9a2a79eee999a167d71d7641a6cbd1358c5b5d035532c3dfc4f1bef11883b9387f7c1b697f519d277b01c4b4e7b430ed5222bec5df8a520720b6c513f24fb34c762c0cdbc484650fbe58a3bdc7415745697b0cf640d36291fde75d0cee4de99e0dae199a9f506d5bf48354bbe6ddb50b53778c20d8a913eb9e88d54bcaf9865eeef321819ada3e69db4b6bd63d15b37bd483f76f31b48fc295bc991904254e4860cc2ce1cff1d8e05393818a96c0a5a1c9f7ebd7e75a4427861af323804611b9f6a32932f98616c949820dff7ba756df634f15b45d7c585c7a6879993c2986a4c7087342e2c91df8a58f82a6dc0d293192956c45d5d2cdb368eb5adfb0b8c63ba06ca4519a3413cd2d88204cfdb9dd32d824c65de02d893b7c6d7773cb15416a9aa16eacb38905ba6cb2d83580db5f4fd22ee1bcdbaa0c04414ddb5d00f1c1a96e7c476294c412640250b1c9ffa4a8a56da1bc4c5fc196d9c359e6db535272baae9aebaa398a3a0d2467a06df3918db5534efd1572cebb6d224a652838728315933f9ab4b4c5418d7e671134f3576bd35c62798d3e49c324b471d6870c9b536e719d5e0cada8856d8f2b9728b1940c2f34856296fb676ee58ada774f7bf93d435fd38931e1c833b1655722c024658f0d3476da323f087b1e0751faecce26471500d4362c86b321113547dfbf23a4527751173991522b787f5e3d7beb4e6f8fc46cbbaa17a67b85045371c4552ad036b53bffebf324ab207caeafbec5a3cd1cdd9310c8b0edb64f0c9feb106db674fa1af2b5925df2f3a8d91abfec88ad1f8973341affed4e76cafb239444c3848509f20ecea5b759033ed12ccb25cf911b8559b86f651decf4fe22b0472dec6856d22373acd733fb03fdc050a55338f1e2cd91a9728e4858a31df0d50993a178eb75e6f8a6dbdf34b3d41bcb7cf55ee870fbaee19b54a828fb048926b88c5a17e8e0561daa4bffa37ba10ecf4f0b749fb710487b97d0c8c714cefeec404ccc728f3ef7cf259ea7b7a165e9c5e00d1d66e0556872a77f0b88b25bb893da8a7d93acc78477cb6023391745249ee26fe8cd2734b2501bd98daf428ec0ad2a10f45dd124d77677ea9a4390e0ec212cdedfdb66fbd1dc6d891a68da49974eeea2d0b79b05fec1ea604fae6f545b60cef9874995a5178b23b20acea4b7efbfb2853d49a34b14383e4a6dc2dd7312e56f654fecacd759276bf51bec3b6c60f6ff53110bf275e0fad5028932df87b714a85e0c4074f60d141f984fe18ef10b396995b263b98e5990287266e532deaa2eb32ed4b1f309af9d807ad8455b8acd5c224c5bc1e74b6765aa53b353f409f5e18b40a06604ebdcb54409582f8c49e59f24f94cb1878dadca876536531dce26488443a78f3ef725bcf9d84efd41b482efde2e3f46ffbdf06d6b48458545cfa7b27fb6d886afa60cea4f9b792440f7e3a208e89befcf0a5f46d8d598c20571e87d3317ec79aee8aa10470564e95e619fca18823c366925648ab1d871436251cd3e1c4c4de312691bfc32f76d6e54f7a94b6cb1480a71c58109edba288fe09876b917e7a50a92216ce1c690f705977f20acb5df325e3f462ad44db10f44a6d9ba7b62b0f8930b865016ffcbf9199345b29358f8a9182d823b50696d06af0043e3a425a55e7d4c1f595fb76f7271e9075983110933a3ff7f080ac722be61f36f41d66b12b7facc8d90c522",
"ba00a38d437928dc3ac18584d25e121433681f4f5b232a7be27088ef0bf195bfd518655217ecaad2d8327119615a144be13c9adf7dc9a206572adbc4068b43c29b0ab77d7a6ca554de4ba4733d3353ee86b879aa8a7a67553da1aed2494d120d636f51b733751c3cedb2722e1bfc7710b979840c99ee5a1f023a516c52060d1d6a18f8e9968dad8cd33945efd9ff586f83a4e7b8f8338281b9b11484f6556eb3a53d4099a6a8c117ece8fed6249f2526e536b0b3b09d5b917896ee367bea9106c55f2849e723656078be672b4d048153a0e23573694c45e14cbdc9657a9934319eef7dcab56aad0b71d115f98e69f97d077af7bf2a4836f90e0d6d822d09e4c0083bbbb4318d84dd67e0b1ad16f285b0881bc3590978a7f89ecc29d3f9f7f8a59de764657a0d53f8db18c79a5e9b8dde3d8c6ea6799ae5db4e5536599ace83faadbb33e2c7ae80a7fda4a5f499a58f6f36a0912238cf6b97436e3ba50224d498a5aaf9ec4220550c837e61a4795d4f051b4aa6987853b9da74ee5406648ef591912baf120696418942b18e5fa13c6911b3b5f68090e4a4ff21fc4c53a3a124d92643b839441e13a452da52632ffe16fd5d3261cef24fcd575af8a34090b5d30c5515fd221ec9b7d41ebf1cc3260bbe4dde459b94ff087a1442208ea4731f37814c36f03c7a26b3c99cc5194d62e9bfee6ec8eb2344d36f1d6331d1fa034110b2c493a47adb0b51f9ecdaefb14e661d0bb598c7a2507f2a51a2e0cee611d889184bffdd59ebf32ad8b038517b355c3c562fc4cc465b2edf9de8a66bab3a842a627b09fd92bcb25a096d8e9b8fab9038c2eb3b2b10b9410ec7d9f2c3478b9626aa33930d99c1582bea41f8e83925409e0fac6a9ae65833d2fb47e68ae5bd3b34653a83a1f145ba0991bd624d87fb1ea94e9085422481936c43d3f14e8939077acf0aa16656ed495e9ae9893c9c57e104dc4cb58c42d58b60dcab1b90a392dead7160b0b07286ea8dc2c4624e5bdd7c6dcd4b71f6e2ee9ec5b65145dad0373dc3ad8561b15a725ba0408d3b6f954b9c1507307237447ed71a7fcc986dd15e752e908b4be6f4655e5e9941a2f5c373ccdcf4fb90aea64bef5d7a9edeef6faa964a202f43024ed2d8ea2fbcdf794c5246985ca788a92ab0e72bea2dbca1cc0a828fe18e7ba20f172b58ca7833cdef047534a89e33a73683cc798335bf9b6e519612289629d4841f169fb0d1859f2344baa711bee7a709a0621bfa063fe7fc6a9a963bfe93c5e4a688af242ecbe7bae5d8755431ad55add7e2e6d637ed5649a6143b399cd39dded2ebdc21ec866a26f23a2b3b693b4259164d84d4a1f15e8b1d7fb0e68f1ad5d0465d3da555f98eb6394dfcd76ffe6c76797a44cbb0c5c5a2f91c1d42004358778f28699cbc1e4da28a3cd3cdab890e451a6fce44c3190740f8401a61314154a8dc7196429a78a501bd2b1a7816be01e3669235f12428db86cd2d19798cb4a3693caaf5b6b3945e35b92506b144457a787600f40902909418bb51805188bef6c06178990b7a6a9fc45ab0dccf606a718ac2c7761e470688a537c78d54de34d43b6eb8e46219e3e894515af6f25d3d943117dca67f0d69d19bf3338b3b9d6216d47d20094a9b5253f9503c111dbc39be3a6ad10eee71fd899e71a46ccac28aed5fe95a755cd25b53cdd10848f93025dd2399ecb7a8d4eb104830d0ce0961a8f99c8d1c31016c7570fd4650f122ae14",
"ba004446d51c163de76eae635f728412081af8ea5c7e59cd9103621a4cbb559595aa5895879cdebdc6a67ab6c3dad9e5390097265afc4e712f1893d3d28927bf5d016d566f08dce7544bdf96645534975227db57a6464dd927f0c32ffc44094a3bd480627b78c125439c0e257ad6b4c936d8755f4452a70c468bb5c793b93a0a0416bd0124fb9c2c17fcb399d7aab8e90c4eb66a5c376dbbf28288f1556ceb63f6cb60e51e56d0b38c8a3f3174e2c85256d9dd5dc89ae0ba3112f8f4bf606ab776d4461c8110fb439f581b1ed4dbec77bedf5775e5c84ba78f7469c741e2c4fe716ae6b1f7bfd469e639d9e4cd89c0275d61e79dd82a9bce346e91bf672798ad4153d8e83285c534dc8b9b5883fb98db9b2c328ddda98d7c062a66ac235aa3caab8e5a3bc2a2e8ebfbff95abc138e3c2ee0ece9f9308cc6f6bed7b0e4f6479a82b11ce68f585ef0b736fb1d9ee6fa2827694873dcb46a055e57a01f5adfe230e0ca269b75662577c1a46708aad170304c8f89f4d0c8f0abdee24bbedbc0cb96c5767517282c6c4f4dafc990485da4cac73127d42d5f4d3cebeb702a3c15cab13c8822d852275a1ea1dbd9ab908ca23af3c77135d29f494058e6cbf5b926baed72af1c912c88c1e4d9a838456ee485c2156e23a49ce86d1f02c5cc207d585dc3c885e9f3e79fef8de9d01ba30aeb7232962dec114ec191ee038cada392a55204539444f61936e65e16ee1a42aaae39779db04e596bb40796bc37f8d7714f5dd44d6f7d52827d5b684791c42ce9d79a8bcd7923255e91a486bd934406cf1a85b2751e9c7488c49c57a3a2a9d04a866273775f205a1502b175d110b994f5033046af0b4c78bde9a255897870c9944b7954b4062bbdbfe87f654ab247fcede91f9d6babaf4876ccb2e9e251f18a44f218709911ef208a4de12e9f4721cbb443525898738bc3f6b071f14acdafdb925ca8ffad73aff6b517b93d49bcf5f8f6fa379e2fa625befdf29286f5b6cc2003554ccda1b1f518bd1003a3aee727491b7f60994d221dbe34d77a7596b81a44985fe2500c256e04453dfb6d0c39ba219d2f60cadc106835512720d53820aac672ab4d49118125ad430696e8278b2945615f58b331da4ca24bbbcb5c9625bebd9b653f59fed359f6a06314db8b82a462cd68812f3fc59951192e19117734324f96d7733c8424041dab5c45a175bc9098c903614b67c6132fc93d89d687782a947c5c35e5252dbe7887546b28967899a59c74faac9d3cfcfe9dc48c452658cb06de2c3ffab6e4fe37af5edbef883f7d0832eefebc78d42735c7509b581ccaa975cc9af6accbe5f3d469a62fe750ec1a2cf521d59e6471fa471d3b27f48a6629e050715ed8d58d1583fa5d8de3e564e04bf36e2e33084dc8c989560a9cdd91f4f4d477521ea5c48989930a52d4d92b7dbf3bfeb51d0bc6644374b32de292573429d66a5f2d78bb29b48d27d44606a2d13d48af9e24565684124dbf05b9a318a9ad62491b4e4e564791b550f9f54597e9d98e1749caa3cdbae411322e8e9b85bbe113ddd1caef9d62cc15f6a3a74c43e9ad5cba4ac57e21893f2a60c6dacd8df9a8a227ed6fbc50a858cca5c7adca5fa4b054713fd94f70f434fe1d902850f240d41bdd9c65812b73ecfb1fc2744f70bbc138cdaf92f97345684ff1f5fea2d6d2f9a3e1b8bcd6d914b3428ce36bb8336941a557309018d7222f68c195384e8dd8795554957f9a4",
"ba00c9882818bc132571cec7e0eff4ad85cfd1b131736fbd832b98b654be4e0c0ef705e2a86c6ce4be059fcbac335f5fa9f229da4279414a8c8f58c7ab8849be95669fe81eed00a7e123afa6de83a0e86913b8256ff393e9adf9459b246b13328bd865d83cce69d4a9b29386efbe3b9094457bf36c3244715e3148c1a7b8d457d7fe9044520f4ec5288f59346b4cdfb72aa3ffd8ecd92fe046323b3aab0b35fd58f8529265984969d73f0d9b31b02bbd89236f60269429f9a64a9312b18c525b3a1c1b0cdf31d6194324cfd54d313072a2eb6d6eded6268dc3d77e6d90ca72d997c923fd6ec23a66106d368e34b4ba3329bfb7b720ef474d9ace889a46173f32cec75da68dfe83b48c1c1e9516c434937f7d36adca419bc2dfcaeeeab62de23a82e505f555708ae59d17811659dc78acf1de6a599767778acf7e8f8de7f711e7e72d13d5d270c669590db58ebf8d7d9f5216afbb3cdd0fb904b6f60e75ff292bc72406e89550a10a7bcd4ad5320e1db8cc0d83c19393f4ad798dae0e81572d8acb82567bb2148785982b8e075f4687a404d1dabe245468c7a971a328922e8aa720b1db1c6d3cf7547ebbad2b85182e106cac87dcf0b24870ee56f6b56b72283dfc0c5a21e421adca1ec1dc9b448e07b7ecf9e5865269cf9794d4b0d8d3eae9945f08a3e404b685af4096ec3b7d6ee7cad57e4d66ba58eb7ab268da13676f3ef4c10e59777db21afee6f110a8dc7071ab1a6138c7c6b00539fac1d3e1398754a415353653e972e816e67fa84f5906e094167e1d0a3ecf745f9f5307a6f3fda0be493db9ce65d07d19d255da084220e2aae37951c9ab916c0c5db3cca691a50391d1f4f126a8ee536bf4454ee6a1e0944eb24d1b3d0144dd4b2aa7139fae5240d344e872bc59795294c453ab83cbe413d3fec861916b62713aafe7e0264628e1d2732cb976287696522d289d5b9dfb96273cf369f3d123084ed904fe313e7050d38f6b75994db4bd946af451a6098d6b2370acc44f813e4993d42cf27bb0228f83c522ac3b2f5e43439761d2185a5c0f81e7c24e8afb297e97206afdab8a92ba8e7e37538cd64d1a6952009bbfee1567facf4add7eac5260bcd0a38b9e4a70c49eb34f27dbcbe4f05feb8913dded4c930aace45f4480b26260972bf2b52c1a06a7ad094ffc661785087e3aea4c99bb24310766574ffda8da091bf18a6d5d4ccf231d51bbb8ff9b24965f24d63b2ec24d4e4a0c020302b673a52ecf010ff4b168312d6c785183593f695f1c36911cc72161aeaeacc4543d979f03917af6d319c779f38cc4d3919368fcc4995567973dbe04f44c10e70e4d28c1bbcd3d2b09508ea91ca8a560edd3f18b8da79585a8c0da2d635185b4c2555ce2f4faa3ddee7320da4752156220a197671348ac36b11d8c8583de2af0d186b712fc2ef65e3c3bd929f6e2197266e1623bd408bfc3feb6e1c6bee4b6fd4cb4b5bf6e16b9668abf39b21e08b2988f42a22997232e6db9d9c448e034068e41007a7a8ba6bb3280ee8d0e1f251772575f5a69af4dda6a86d377b1521b010b2b38e43070a21789fc9709d2547573cf4ca9c2ac229b3a6d324e62365944a68d4da86423ab6b8eb825f884fde98bdecc4759b44768161e6f39aff4cd900e5251307b9fb76f06fb384c55830d18ab5b3777cb44a9d25c18326fc8c9f70821ec658c9fb5c1625636b5c42f3d68643714bf6a942da211456d55a8",
"ba0008a1bcfa27e9d9651a87092537999ab662916b52df9acd56531cccf857baae8293db9cb2a65e8350d1322c660dc3e1cb7ee3bab275702e49a5455964d5c1d04d63f169f4a549be52ecb73ec394fe74340e5eb75c875e2bf7af3e4463396801ae4d7cedd4fd3b7f90940edcc554e5cb025090bb148cf376651b3939b886eca1a8e3bf37ec24996bfa26d165f7aada97ba9e61ceb46f7f0bbda41c864a808e8aa5d1be2bcfb1c63f3d34af02b8baeeedcabf0b7a69922c890813351b22f638a94a58f1b71a38f0414d7142cd135c32debc75df09f8b841f89b5ecd82518a7f32faf59a569afba7995d317dacece7e8d1728ecad0badd1d086162d2bd4fcb8f323a1d2849d2f0b46cee658efd4078171963799f2bdda4b4822f8a0ad925c996ea51755a2de8ac1a97f692a994cf0a01246a37096b7d4a6e3e5174ed79a96392fae37197a7af2c6e4f13811d21ec5b660c52b2d5cd51025c300d713178e2ca0fd44b94cf9c3c6913760dc3d37ed46dc17f4eba5729a4a9bfd9e75855bdcbb26e60e97798ff35649641a0fb48555aa74a0743fb441237772e9a0df29eef221ccb5d1619d98efc92cddbc158fa927a7c21f0cf59b08a2211b565bbe68bff6ee42d59290e247de0036709e68fbe5fcf813aaa2a06804ff31a0923655a5e38fe2ca8683792397e3d4ed2df636fa640edc68cb7116a361c3447668d2103dac029d4bfc4eec57e45a71a525bdac6274a663136e234dac1dc6e99c77184d4a9319f9fd52bf0f33bbe55877e92dc547ac3df8f1cf6d100213aa82c1c889b3a091a8573eaab2a6950fec718612371fef10d4aaf34e96b3486977a6d934d7197dde327d52cc56cd76415053be5408c2778066622fc5cb2a8a9e0c0d7a7dd7e8fe35f0f5fb6552ddb8ac9e8b3b7bb7a9cad749febdfd2a710667bb9041b58cef2da9402a959b3d6602fa0ef11c8b569874dff78522fc26d6c4d6eeee3b3b9d3372f6b9364ed71328fc63d6472432da761b469d69288e21415c2305b2e886405a02589a257e8e4732ad9877d8421eb53f1fe94ed56294b6eccb130acb9676237f9df7be972f1302db7a7568ccc1ebc1c75428436b81d1cd12e8c55f6105d26f2c30b765803e3dc270c379dbc18b84e04648a3750ae5d16f922d7e084c86c0ebe348372320da52761954a37aa1c2e0081884d2eff168398d4a1553e06519e96d7d1be2526255698b2f5349db97d5dfde2cec467a7da823b609deeadb9b2644788d73a9bc09ce6ad4f9ffecb9a8191d47687ceb23711560b004b4bb47a60ca978dac8dc68845ab3c7fc91ac8b58c124dce99d148c9c8d8aa2c7337063be6d308b9a8fe6b4ebdffb4b78bb2d8aae25ccf2b5088475a1c612a40f0d684950c68e6319d8e2bbf92ebe6f9196cca5352cb284c733a7d22321e3127673bf4ee158d4d88a290fc3a7c40a5cea32833fb03ae88211853b9e211a340ac4cb8104e77f98480e3a50bbcd3970ed75fe34639afe9c1d9616a669a7694b7c76694bb8f8a41b9aa7ee4443d036173a48b1b6c4ff74e5aef149e484e2e24eb1ca8c236505efef741929941d023e193acc4df499297f9f9dd704350b6b38e54f3e9b09b91faab3bd887216cfc8def1a12cbeb919fab1a823ed3331dd3c02ab29a66ac573dfb1a0d195290c83ef46ff2d9329fc4d502b6c435c7b2cfe7deea31881afb17961f58e62353d3af6b51fbb230863d1864b6426cf3cb412dd1c0",
"ba00cf530a4f8a4bda88097326afbc57484384e25c7777fcf7a12c754a44467e7670573c0a3d82eba68bed84a66d1b834f6b5be425b33d73c945c9191b1c02c30e4e1043dbba6cb48c428bb2d918ea6cd2ac88fc6106f1022bcabe371d22ca42cba61225f4c32d4df4710e2f46a2a709e020030cc01ed9d39b6571347a082a9e9fe25a063d3dee58388628fed34e8f3ca3b26ab7ad7a3af5f87b9c6ad1d591fa21d974a0dd96edebbf0528f41a4b2db06b923fcefcc930656ce190cf5fd1c8474da92c85566c0bd6b085fb7448ccd12c2e65879137cd19bfa399efb532b988060c9f69b174b82a29f84320599d3b3e91eb7bdc1a943ab491ab6a89c9ca25941f0ed1b5c7358df62a34d62c17cb83ada72e3832526ce2d7055acf3af5bc0d83c2d36a3478b7068d0a6c7f8993287d25e939b2959788571ce3993b760a2edcf92eb7064123b9748c5471f5963897e82c34cd77766d2615d8592d5666af0d19296954a4c5b9dd766617b4426a7b040b59666ba695172b0ba032871f4c7257d5da8308827b7eaf7be8b6474541ac425b9baa5aa37c3eef532901447f452abd0f6ee1e822f33beea9a368542a2ed76d756aae12dac62caf3a4cc7a9c59b46642dd55dd08b229f5a446f184a4aaa2c852e7756eb493fe8f11a045a857862578c996dcdf1dcb40cbaf04e8c9303219f5f2e22ebfdb660d29ed48158b741680ac4708377f2ef46ef00256a41116808829791e0ad721401b5aef8736eb377174ff87a37aa1567c4201222130a5350f6d77e60f7487e76a56b91b758a3e36ab06214098795ea9e5e23f0b415158faa1d2eef5bbf8466dffc11e7cf8b3bc8681b76588f63db9a4f85e78a251e04958e7371e31a4789cc269e65caee9eb33cefa87ec4288cd488c46d7c8a21d2dc5269acb82879e36d2b9048f23465718a84b39e28663145906ab9480cc2d39557b1c8bdf3c4af77ad69d25395915d24dd7dae1dc28260d3c70b3c11162dd0c10912b718f721ea4c863c6c7be9e796e3b3c73858cb520062851f118f6697999bf3243b3e7747a3ea7174d07f4b0ff5421869e68db72ef603dd8cec65e950328b9af94076cd1ee2e79f963184b46ff9d25d0113c196653a2b307e3495922d2cf17a3c5e222b30eec8986a83bd015b7a29399792b1b64db294b6263ad9a1db83c2de18b40c94e46f1836bdcd7050fb65ce8687c69c894ef102537e76bd5679367066f1edacee9106679cbfbc0cc99159f9155a6051c22597646b45afe8ecfea9783b6d17308ca4d93d57972de08d7ad30a7c85e2c3626df4faa2631e55825d279c2b4af294873dcd0b7533a0ccca85535f84e7a7bace8c1e718e2ffb6391fa50aba7c7deaf78a81c47da7c901e5cfa87548b926ad4b38fdd5eb20613c0d943b55c0dddff5672345984c498d056dcc9b548af1008dcf2934078495c8894b75c75a0812352bc8ef69d9a56bab3ac3a946a535e969b34e538767dde3e6b8a4587ead3b6969bd3d7067a27948d95456ce76aef108a5ede2add910428db6bcdcfda007f250d5c8d43e2c0f259d2179c5c666708618b1e573f29cac4a8fee31458160abd31b672202b57b9c1f12352ac592cef3a166e793a65e63d6e69243b8fc48e270dc0a259b4861b84be54536f743e4c40e26cdaad769aee1595f8b19e793a2dbe67ee8ead6de7f81b19b63e6ab56e0f324c4416bc1a34b22f1b8b0a8f5963ed43169409bd6999a5fc2990",
"ba00e17395ce1999c210ebee562e89fce42235333b7a425bc2c9adf093b2b130667bff4b835ddd64624173a93f73344947e8c5a04dc5b60bf1bafce9dddfd463098fc86710a4cbe9be4a533c5c20ed438f045a59476e6724848a11c7991cc63d327f5bff6af2d513960134d74886d4f9a5296d364ec674b008590fd56bac64aa4c46335b8e3430451a13c6eeb16fcd6e75bd711a8d30d13997328d23685af7b10944d1cca0c0b7586ee6658e7ef5fdd1f9c61583edca23c49d1151a46e9c7d96bdc17670b80dda5e748ed6eb7c92c4ae7dbf7bc3256e48dbb56496ec2d1f39b624c9a477ee5fc9c3508c89b1b14a4c1202d27a9aa6a5a4610b5d4edcda13116e99da6ed48def269054546a093c65e2a9fbd0c2cb372d3e21d488a31b244dda507da9d13d936d14ad68c53b08f4d0a3f4b27bd54784506ad556b96c2ede7e11c882a8850aa89ecb7611ec34333e7b8b1211d5f8d97278d8a59573e33bd16b1f9d49b67e5041498067e2b3f437174966e1877ae54fc7ea6f7fbc954342ba4d3e6575f936f435724efda446811035eb2ea62cee430e4cc673c2cd5ef5e66d0632cf547077650e7edfb300f43eee12a07f4c1696575ecf955b5b753bc1163e4be3a6a5d4a4be05065e389459bde0d92163c3a7af279c36f7dfc25572258e81d9e8d0dd7a9c694563f04ddec14448d9c7c840f699996c366eac5bba13daad98da7558414844c8171305ad68174d3499be7a70069f7a8914ae89994865e21b0e6fb988c8f7473b57cc66c223a4338c52eb0e57b68e1ae2c872cbe645b18bd9fa54fe78a44de49ffe8f65b57136cededfeaa3429d3d56418132dbe5cb358b4812642be5105efd30debc44b6aed8ceecf31550eb586e08f39f8d95a11c3cfe9d02737af991a6c566d88810cfd4d4dec3c6c53f9824061951f77326ec5f9e3db6e167d48bfa57308c4b10dec5d506c7b00ca2f08c5fba79ddba02540dab6d4cd0a9a98baae3123e96b90a4944a197cb6cd87614d4e51d73c1bab05b1e12d64bd71d1d526eed26f53fb5abeb8b1d27ad36dc6b5961b7c69812aff9b3635529c3d2efcc6d921652e072894ea5b4ebc59c5e8c8aa33be4b0ddd703a568e9629c458a316db859b2b89efa550b73af322441bf68e6116ba9055b8e45a63661aae8910dae659c0c86be23148c7cd489f6f2ba92fc3d0e850928f1352a633552c254e951141f21944addacfbf936b05b59c9d7b6adf7f7e159037350de4d56ed517f98d3b2073a9dba651592001442065ed6b49d1f4399451608a5369b0c23bb86ca33fe9c63f4bea1d72f6dfa389b5874ab86c8f8a0fcb4fe7cdedd1eda6364d128bb043b873ae7ee7c5f1802b185609203c70185f0fdd064033adc2d51cd5a4929e81801b15f9c9611b72427cb7bbc6ed17b57a75b109630b086f74477e12d1273c2d6e5e6f1147113adb7f2d9e28128353ad424927495e9039cdce77904070692285d672728a00b341a45e4b3a2d9361ecaf03cf47c70697f3a0ff418f6c2a3df9c9997a020b61a3a33ca434bf15eaf645286e2136fa946f758f90ad72fc12165ab172b8ab68fbc331de2565c3a055ebb91f42691839a86ed68ff2d91f36f6b1f23b34c7205bd9886a7d39756a55ef23bca6af3ffc325650d16308d2f9acd18c9287334aeed6dc429290ec5ef449cedaf9b91216c22ec75751d343986aa5aff6e12bb643cc74b11d89adf374171b41956ed173f9248",
"ba00c1ebb20f3f748aceaba85ca397b56154b4b8dc4c77875ba2e1216d632c46b4476ba64507d33e7279160c5d9b0839278d2f8b336d44f598c754a2ac80929d9f59978758e5b3566db1e9b4f16199dbcedabfcc1ec0e7101a2aa8e243d141114e44f26ebee538a9feb2cc8d54d409a74b8b35e1ed59a73a4cdd3da59f2bdfdd774e8b118416ce298051359a3f226b88fc51dec6dd96dca811bc5dc5104aeafcad3b1ee3b457d6f3868bc6fd0d97b9a6c0d4bd15d90625f9315c3efd0aeede98049da35db32fa77d55953f51c680c9e2f9c76243dd5058750f66e8c25f79398cfb4dceb5a93c8eaa2f14311b39d2e41ab4279cf6618deae9133a413fcac05d15cb82da7b92068dea819e94ab36f8f3203bcf7efb18c933cbb6b1326379109c32b9092add4c930aa9a9834e2f8f0241b2c51b5b84558036ec115337eb34759a857921910d1608e44afe4816c0c26a1b2461868551b990978ef0e2ac66f938605acf426f09c54fe31113fbdd98abe3439730e9b216c0fc723aa72d8b300e5bd1e7912644710d7d72f2b7bedad42071ad2ad96ad3218ee7acd5a3acecd3af6ca0668e2ba6420c94a169e76b3aa3b2c2b32572bf2ad1221ceaaf0d1b558e5c49e57f62693e0cc39c8477e3cb5bee9aa6238992338d33953898bf3aa777f532ab4a22cf4354cda2f97b58a3bc427e4d9af7157156681447e33e52902f72af7780691c0fb469aefd5146136a8d38e9368992b621f068bce15b64ea521affecbd224cd8fff1c8a0df7b2634bc029bba610cfa8648a69b0d221bb954ac7c7de567af35cbf4ae0e8a3b9294afac29d0feb21eaf1347f6b8ab50f2f249a99be68e2aaee37c0cc508eaa170258bb2f44771cdd479fd96c4d6219eca9856e37c9d381b85434fe0436a48cc54c392349f55bbc09b87ece538d5f2dce123be84af4aed5925b44828e3ccf20afef0f54939d5fdcb65d7597a65286df1b05fbf560984f7322fc2ecbceadbecfeb6198f7309d5e091b6d7fc4e752561cde6390563a7d814aac8d2b6393c56d763b5ac657b68deb26f843b336fb766773bc3a34a1305d7628df8b7f4b4643b992d74dfca25274f90537eb448c338470b5d39f4d97234e7e50bcff7d1c7e208f16f9a18498466d21473437b717129d1ff8eab2c3b1ce0501a7b0cb92b6018be0ec2f4b2dab282f3b62e08c308dd53346d10f06fbbd44abdefb6809c9a8e32c34040349592a3169a75bea76bcb52dea2bea1a58e56d0df3b104af5a869a8864936bc7825db5822ab0414fea58abba39c4f4e44f22b4152bb5e3e0601856c7b9e8200a97de3cb63832ecaf1f856a4891a62584215b8ba54f5e46ac1ab98a3724c9b825f71b91c178b0cdacd1e6fa76ae6ef5317d55341b5eefc7bb79e720d97308cc6a2e1bbb7cb2eb774db914166e0794cc3aed63ded1981be53e85b4515b85a23dbbaf995812649f45370a4353d72d50b12482a85caba2a74d8e72b566ed94667fb89a1ca8a9439c2944a79f9b6b67c99f2d822167321857f3c9b9e67b95f676cb5bf3f331cb6f32824c74677754eec8dd2c9967de9d4903c75171f7f0b4ad90360c113fe6689b5258ae7a929c4ca26bb99b952af971cb1b678b5d7e9bde3062588cb08c79d1a91a79679ee290419d95bf7af36335a8bcf5dbeec1d4594dfed98370b272e6b0e398f9bc8e71b79eeb2773580e48eb4108b92d87b2cae5a290eba41377f9fcff744a63f314ccdb64e40",
"ba0007306cad6e2d9c60da69126e82a5b348cb5aa87558a6ae544f91937498e0102d1c676cf328c82afb45dad10f917242c3146d477d66f0f95f8e4a42af131cbec62b656aeb39b3350ea3c777edd94c6757ee337487b0f0921b411e1b44b11f64e16d6cf26724a8435e9be41692eba10ef6de9888a88c372f426f523c73e77858e8e8617b51b55872c8d1eda4d08faca7ab58ecb7c62928a45824ae11cc78f11cc23ff180b2bac81199430afa2d1a621158f377d3527d78e5951ad2232286a44b1187c5fbf2269fc49267ac44bb59462e8fcd76250ced3bd290d9354892753418988d2937e2e46e682e055bebeb10bc29a9df624859d67153982267c85e1a08b25e2d1fa86911adca8aefcdeb87d5a6beaf7d57b36fe8536c0a6e39dfc8aa165f1ba76e2403868fa8ece123ade9a9b07f13204c4b2e7f66853a4854fec9e810d2e52eb6b0bf2cf9b8b7b5cd44ef3c8f6512f340a1e39fd7f61a9d47b9d5bd77ab959c586b19153b73952be97b5589bdc96b0b9ee988f5685bda652c4463ed017b79ffb8b5a2fac7b7ed5352c3bd196689ab3d2c3bd7a87da3688090215f87cd55882229c5fa087772056521682b3ac57ed07c34bb3c8f6189391252f14cc0a43adf4d51dae743953d50bd258636cd1d3fed54df82845290257e5d824b1a357b751a2259e2c3c95ade8e04591ace239068c92d91b4d87bacb3eb234b23a55fffa8d7b8efcc3ac070a9137cdc6faefb71b1ecca3113ce479b064d457ae0723e759308577e7b04eab7017ef18d2eca13124c6e54d98b4493240d53909b77929e84951948ea71f771fdc3a18ea1f56c145c465555e91686c78f2c54727744f2adfa6232d8b34f58fb2558a69779309ef1217b13cc435c31b651d48a27cd857a97b2a8eb51f331073226893d7218baa97fa14abfb61e9c4dd037ccea96c6d398fed58def763270b870c8d82e32ddc52340bd68e078a48633b0e6969661d2edcc9936b2b1c574d5594782a3b4518dc34d35813afefcdf76c7d6a919f54e04589974112656d1e8940a25fdeaecd5e65889204cdef6a98f873f132405a9698555d24eb90cb1a94474a30ec165f4c9f3b6829a87690266a7edb2e52ece7a6b8d893eebf92632dcd14969a18edd179b91cdc49f7d0eaf3d4bfe68f69bf7d761bb97a81cfeca02f2d975eda0c8af9b13eacf307d0f02c9f1699aa529568f29aaf15b23cd1edd382f1a0df9a053f86d897732ccc670e172bf19454e127f6174097bbbd8de7e77858eed4c696db66fa439ee58262c44be8e82bd51e44e353c9853d0a7ff1adaa51f05df35a5921a48c267acee4a60ca9ee978f3c6705377ef65a2cbbf0c46cfcd1345175dae7c6906a4fd5725b8b330da1a719c7d906129465f74ba7aa36b6470d5532aa1b3987651e3aa585072634f81d7b84fc33ab26b1886554b761bcf1fd5a18c676165eb2e5c29099fe741a7f8b05d878e24d6c7bdccb7bf0eead723902bf1536acf93f547bd4e11eaf18043d91426a6531dae3db74b8363d33db4cff04ba3c5094fa44b3910fdd54ba2f6cc775d046e549438160c446be4e2a5f20dd3245b563d0b7284c5ee4b74863ebe55638fb9d46f203d6320836f3f644391e6a7b7a811b33e1fc74ddd80b488f5d2142548237e4523989fb20f1a6cd8798c2d109e3247930bca9dac8f1f17a19386690c14f92443549c9d80e9db60721bcfd9f13e940fc244a1e5dbb9e99244eb6dab37",
"ba00c1ead2a25697ef74e3e4260e612e5368ed930d1e3bf66aaa938182b8834dc454dd247633725db0d057967265af303485d59b4e16e6a6f8572e32861e3fd7fc661c68072e65cf40d2ef77d2e72161bb5b2fd7b9cfe330916a1cf5ec81b2bdcc740c77109f4e86933b4c17143beb08a1459d6716fef268bb52fce42b9fa7c54371467fe912c1f170f5c6fb24e3ac3923039caab7531cca750b242d8eff1af299744aa5ef637688af94e023f5bd6282eac8583cdfbea15a89daea8b8b326612622edb5277c149c367ecd1e7061ae53457dffb148508e6ed07c61fdc328d8663b579f4831c67602818d81405bfe712bae834ceb916bb46e6f7683e4de04b9ba6e5b94667c43afb939b541d08a72b03a7debe5798fc126c84dcb32eb5bbed30efc833293cbd0217323d9042dbef9c20a289740ed465c9c7177db4ec6b73121e132071934383e1eeb762f9dfaae84b36298d48bcee1bb19ddc192f57b3b36e350b7d062d57ded465788bb638fcf15bfc88c2b4cac472951db614e6fa2a8ca97d54b8517025efc8a3bf14382e439a51b5957a83e94f65a4db0c2649b4e468a71bd25f6296cef8d79e09366b883247753589cdca4a732c3d45c344c67c632bfb526c991c29ccaf5661e7663a4a37d12fdba2e2a84d15c3a684a18b0eabb314f6bb291e0907741b6ce4fa0c98253c4f7e1a1e817c97d62e50c092c5e310ecc00da6f5f2efcfe3b4d47486e291a91997c44c1035d9784727b8f7cc71d6cba3a06a467867a604b253ce310e421a99ca7004656b80ce213e58c332d0c87f383297fc88aa66d555634b74b550809b7b0fbe5b16dee1bf062f0fb8d63edc5d5679348439a3050efa35c47231996acaec6f68a26d28686a274ea743489758c1a8f2c67e81d6ce2e7b6b4fb6679091cf9419e66206d325957da671ff92c2d5cf1e97f9184166498cbf8d37c456cb02aedc8e76cd78ebb0c449c02efa743276635e4eab1851108767f8943db4bac42d527f3815854a36a071caa60773428ae2e2c4e8a3637885fdbbde41742cedc1e68ffd3988471d996011ff0ac77f6aacda22f7948e7be1879a3731159e02588bdbecb1866e9fe69cbe85daa5585053eedb272a6888cfcf18d4a43e14d9a3f6e7cbfc5e7ea6c1748a671a7de86995c7fd8618447fcb8bd9dfef2865ceccd6239459deccb5b358f8a4fa18f4b99938e4cd38d06051a8ea3d1231903560c0c810ee6c12577fee628c190fb8273aafd67b77976563ae7be5862af4e633049218a70d7e312ba3b318ffb7acfaf7488e2f34beb2f3e9c0188436d6c398e6ecc03a7c0d29974398f6252ee46bc8c19459cbfabd7aab796f6ad65eb08cba0fbb759fc9775786d940ce9a2aaf1202fd61ddc8b28c571dfeb69b6f0cfab669f9a889c85d0d36930bba60b72174c6edb92ed7b2feb0a167b9e66b4c1edff6fd25cadd2e3e60bd37f322f0456bd565e7055cb2f670a600d43e9112176f86fd1e6712d8d5dd66f13a3b314f64579c7ea9103f19e5d327782289ee4593ee058ef34fd96cd1eafba4cccc116685dd51a31d9bbb6ae17f2d275592e4e152e51575a7b33279b4392597a26e461a14e9cabb5ca8c62b50c024cecf3cd73d1a01799ce48c7308d7e0e38b64125e4f8ea680c8b5dfd2e4dcceb08e67d68a82d362f8ef3b2098a2b8e428a4b06da57ab19d8ee495952ec9e5c3b4cf191061d8c40b5b09a9917b251fa5cf6e163c399420",
"ba00822ffd3422259da2ff1106df2f3e5677224ad9a344a5ccbbd5a99cbb950772431f0641dfc97cb735e27c5252c63531bafb7a6c65608e11852c4d888fb2739930b0b4d139c25553b857dfb28b29fa979a8c4150ad83996b26cab6eb20d46fe9620af323f848947a917ba4d0645b50c67f383ffe5b7d6950e48a8e2181e7d663503c2e878b31c9d3916ce9816c0da51572728a16e990c5b59dcc08fa591c84be62aac628c37dc582661ac7f12cb69537d5fc9e512892682b3b94ba46e60346e09d3247efe0405f2cc7b142ad34a54fb2e3fcaa742cc295a7e6685acd197326d3af6bd9c0975ff6534932b592bfe2ebae7ed77beb31fb941a6c71cda7394f829006f248ef9c65389b69309047891fd390195a379f282b2fbfdd22d5459b38d299f7295a65a7ade674d89f0ae0cb5908e2e493bdb44ffdfb12cd3fb886579f0429bb14539ab937ebcf360f99e56321ad9a9b4c8543b0b56dabc5b280e30a52b8c977dc2ac311339c656031eed60707ca7911fcd5a22c88f47b5f988a679131c62149e3c1fb06a257585ea6c8af9591e376727054de61e3bd22253636b2e7bf9a3f958f67465d04f0cea9550862e3b1d1cb2bd93e8eaac51054b81398cff7e30e2a689cb18de7ef23922fbeb53fb1ad0a4a9bfdbe911826523aeac36904fb226951943918ca41b5d4ed5bf2dc218d3f8bbc485c6a7d1a7b73d7c2d1e659e368564ef30ccc200bcb1da07f5329efae77cb9a0931e88fd496e40ef8b1eff1452e64c99a3fdb304e2a337b9c67ba8d9486491064d1b78597717944047713689d909b903ee42ced6abb49247efc48f2171c87a9a696a11231549c75e8117ae160d4a8472d9648136661f46b48f613634f32127c14b59a4a54e67989504b45f6c4c3608d87720310ce7dca272e2eec273fecd60665e4cc59ee351c320724e97b91cc1333497b889fae7af2959dafe648f5d7d2c12436674e6dbcdbe993c7c607fc898c3734cbf30e5edf31dacaa7a449a9b5da1e41a0482abac85c82c25b758f95027ca7ea16091a4d89356cbec738b6b7a4c7ac529b1d24b4462aeba5c2988003b043d518f7b86128d4873ec2126c24ea499cd6476f3fc4690946759e6407f93deb62502a63cd1e68b774793e92234ecefe97ca14b7b576614fcd87d141bc4ae0ce8d0e9e51606ec6d10a57ab341a9c32ed1be8647323c638ac6bff4554f9c6533462671e79ee895f3b7a144d9e60cbeafcd0c80c8587b682db30537dfad1008d3b6b2397cd39ce0b82b033adf197d6fb964493255d901b5e6b2cf036183cfa48a94b059e1b20a4ca69b20c84685290ddbdde034b86e65d3c22efec7ef076a3d92747ef9d2701b0712dd923cfa393e335a4f168cc47a18826caf786cae399fbc96dfbce71931979b75a7fc9657227a0237ecda5562685777de92d9768914d24f9cadb9ae224cff56d879a312cb3098edc4c0f7efc4a9bec3546a7a4befa5d7c16650cac1b5667c15dc2c8e19f1eff8a2339628df72d35f3096b24ffd4adfe64c2b4522a1117bbbf555a66874e869e3c17beffa1908111f4fb6ed0bbe91bca62758c87eeac902dc8df55166508a7872e1f0e4e008f279616c96959d9427565e2ab491cee10a1fda1a6f492926dcb7fef9823154faefd3fdced8edf6f2cd59f822f69e828b675da53036e51f26ee27264953aefef77aadb18020197e221cb9a6a9035657a836aeec7318c44427aa3ca90",
"ba00b54c31377455348737e902bac421c4646d92050dbe9338fa0bb729f8dcc6ee2a9f8e8302b7a7b6092ce13ce854b5162a4e8d844b15ebbebdfc313398cad91fb5b5ac218f1f54c225022ababdedbe1e3a7a8979c0c19817eb910adda7695b0e3c09e5c526d638517ceed5eb9ac3aae8876f7ade2c88462736836661165c84b764cf6b3b78984410c846f9580739ceb5f94ba74368b07c398e0a6f6a80f4ac7bb81464f6553af6922bc29d362868f8ec509ead4905dfa810c2066f5c32355744e8598814e71642db3ce913d94e08d131b4c9b97efe36349fc4b7190c240d344faa7689e460a0e2d64e05ed6ea5ec35c5850bfbf3b7088c4a9500edcda24700e96336351f3e2183c43a452e2c69bc3825f9ea7b60b6bc81f768a1143e0bd4e1ad5379ebb0e7a1cc739795aa1be27cc6e3160b8d63a096ec22e7b7997ba0292a6ca7234db2aad08a81e2d0c3082a038d6958d2035ac037c4789ec87a9abffeda066a707b881c6a52c8f2ab827ec5c9a584e712b823aa0c0b4339d743da2d6c2d33e5563ad73595d846320a9a916dca6959ba2be040acd7d87218beb1cbd21e70282c6c92056d71e36b2e46558e245665aa1e52b40372b17b2949a42615cde52e7c3272e6aafb8ba3f14db96128df8514dd2a4c3bd7f283d7ab885933d363d068ee74625aa6775a49707d512be41e58faca813b470110531cdc82e3f661d82e2219fcd8e930027abce96c2bf539f2d67c7738469d29ec16543541d1ce6b33391a2fc86a49420ada5a925a9a144770b908aeef1318c6565f65c582d664be7298e312a715b81b16619ae547cc961969aab4c93e4537efaf6188aaf92f38ad1711fa94b0d033c4e1a30c467111dcf853d86c8ec3dfc3b5f6ebea453cdd2294766199aaa08c1271a7cfc08cacfb18a34f549dccc37e6627b91c0b11e2e524f764c379319ee4d125ab8f87c6f6f65ba51acb1e5ad455a667175a3cbe0b6a838bad4150c4f5ef8c2ed8691f3287e1591b3b9a19f58f42aaad7c004b52256d0cd0da3e1ac3d451484bbdd0de27084a1715604c33a4e9c8d4975b81ee58a9cb1b73ed114515b6eebf4d4b3ee14a68e59eb5d7312a5308c219ecebeb965ed3cc726aa09173c69ccc1d130b376d6cd0d8ae5f9863fc7eb8eb6d82a7e66b6cd26aa8c77f5d5a18c4120d3a75ed766ebc699fe1ef91abb343b92fd31dfd1ad13ee6ce3dd014afff27e20886c2bcaa65ce339adea299992a37904de00d9a1446e9dd5db183361eef13537c44ee7d588b58d0ceebe81b8e6feb2c7c023b09627c1eab5efedd457ff6e3bcda93aeb20d925025d2ef9b814e8369ab0cb5d184731913fd76e3fae718b66a4523d5dc5ef9f58244614c618693e908abb9a97edcd91bc3358e95a8943f4fceb3c621844f5f1a4eabe9f51194b84e67ad53653c6f53651b8ec9b676e8ccafff5784a477a6c22520855d1d6a573e30c1e976936428b29f69d3526e1b36392dd343880b8bb47810ddee1a94e0ea1c9a49c16ef1861f7797d75b9eada9d932524d33daa5b45f5e9591a251b48977e0de6de45a69d343356debacab8e9554e42ff52ff05421b799da35cbc4231e6a7a9e564c71ba3df0c76c829b7df9ce223eaf87eb77d9645e9cee3d9c507306596f5910e631b6c2e9963aa4b4c320a49b4d341096f7d8bdb591e6b1b5378a220a89a86281b73dc6052ff872a31493b1647c328cc918806fe0101a1c0351db20",
"ba00905f1215e2c6fe547c6a0c24a8b25537f77b5af7639fe98cddc996368b1ab7e627e5e7214069b82dec8bfe92270704b0da29ae353afbf8a60f4abf7b3575acb1ec631066bea24316fc72f2c9ec7d2b06988fa1375680cbb8450c91288c5170e7bad0ef8c9f76c93f4922eac655fcff48ca26a2b6b17b76fe71d59db0fe96a5a7e8636434f3bd97a157f07ef920d12f6f15de3131b21145f5d275275c49d771b44e226e5ac1d53e7e5a5411203b69920ed31d1f46a19e127492d18ecaae8de326e3ea908a532bade78cd3849fe3fc0a17951cc54eef47711d68ca9acbd2e34752531637facbbc3e3c435845230b0fec9a8dccd8b5f114c393f4544c8760e04f34fe357dd5b1eefa521299f3a0451ea823878c7ffab016594af459ad4a8e126c95206d6304914e315a71045170cab69bc5709848166c5ebf14439930a33c30f7ad88531fc8d3aae0ea5161d7e332b969ca7e896fcb4497b94bd813cac2428def2699556e08835633ac45471f62d7c551d4b58a1e1a7e4d48ca6df083cefe59b24436dd285bfc6c394990dcdd83e763d01e95e1c2ced99e5a22d9faa564b7ceb4e741cb9c4cdbc2d252bbed6adf79d5acb9279266f4575266fbfce6ab64198cede4b4feebdc2146441755d0a37337b2635e9427f8e8f3651477be987d5695edf24ec7738b8f849898269200dcb248adb3a3ca9bb3c9e3848ce6f6f0c665712889fcd93598d7b7b97b95c5a9f5d0a7ceec91c36d1d0673d78912bade92bad7fa6b2841b5498e5263c64a3c3f137889176b738579e108ec863883bdd327292b797bc976008330595542148021af3a447121fdc251d0dfe606f272c1af0eebc728c7f844f9466094628760e9f494d55f4a61a79377ba4043703c2de521c977456a032b6f95acec7e26fe4b0ea6cb99fe45f107350724e5fe896050974c17c62c6b7aecafebcca95e252acd91c95673ce12d4e232d84dc13f9b39b89250c3503b15a3f1fdd624aec351d5c4b62a9ed4973a176936f7792225183d939db8c72ff7da1b7b46e91cac33314535b64b9a082766148efe5bea1ba9516111c4076444734c7b2859f1f18186df26b03c8b854f58a4e651f6ac6d48dfad3241205244d20ac21edd50e0a533ac6287d7ce89a4d990fa1c3c6179a461f7c804ad3f12165de3d0e4cb49f9d4bf5c0413c306aa8631b9fb150a7c4ef2d4d412767275e4c089a366b9b414ee664faacdbb1998233054cdc76c95e9fa708ae48907bd69d716f0f3e49f661ed9db422b93c7544959bd0313b59393b291599bfc6be4f7fbc1f110214675aaf0957fd5b44dde35b2d6c972a91a4f2bc72652e116bd2b47539f51f2673de84eb3f79cc4e3954ba9b626e3c1c62cb2afadfddc574924be4c665f08c20f4491fc9e6d541e72c9fdfd845f57b0a090e5811f822094d4ff6cafd16dd07392a73ed91bd028a84a44c7d712cd3b632039bb0655cf7dc9ea3ee0e69768ab1132e638872176ef76739e346f69a27e530c0ea98a8abf74751eaaa6a3df883bbabfa21199391452a4df8cd0d9ab32048baf1c7cf94c72809fa09ffbe49714e1b8e441c8d0b790cd27aed6c8edb79345b8ecda9dc454cc2ccd4a289e462b1692f13d91338b5fe9d757f428ad79c581ef205c768cf8313886059bb31154e16052d20dea29d3b368fe97a853bbcb260bbc9b2322f0d76ee5a57da7ce5eb441f752dac723c10f9777541fd90b977f19951a2eddff3fd1a8f4",
"ba0010a9230c9e4a24c9c99297db6c8b5872f6dcc4e5d2998f54afcd7b8753b8ed58d0d92b4972bffae16bd2c4d6b54085fa9129f2bcbbafde485b94e0a2e9c6ce7acb6ab5e4829ce56865fbd461a5e6eb54c3bf17cd0a6472ae27859736c2b6a7b94aeccb63efcf67f942bdd1e62f1f4793ca7cd0ac589456353e6566225eee37a34482b8b9e29cf17968d59480fb6124626ac67d388aa749f7da79203e69e160ed45ac9c17ced2d69fcedc631878247b2da628920c4a2c4dd5c4a92b28f9dd2a1861dcadacd4ba10de471c22ac967b17e7a774269339698269657d794b6b1967bf66267a41252c4ba711f0d9198e7230a8a3f52ee51e5bb4a94718e987c598fc2bd3f84ce50457a8de7b6a297df49add20b3fcd9c7158f3c1449623aec90195d5644709277b27d82dc3656fd216a29534226eaa6e4763bdd812a74ff2efd08b0f61c03484d2a52ce0380c1496fb47963a7abcb16bb0aa9e5b05e947c9f9664ca6c6212f63aa77b79993c5545d646d52ea704ff50846febc96e376906548ec51cd586b5676065f0c79fae614c13f1d83cc7fa98d9723d7b453f9195520962618279b8641c8e43352635c8250a8e6722adb5985dba76d6e62054c88a08c5cf21ef21b36e7b3836b137779e35826dc5d4e6f81b2619b3403c175bbc08df48c40c9731a901588bc29799b1fd7c69edc533678b8d28b393c32bc6b62b4b0750b94de099d3e263bb19d50cffa36a8d5d1d76f49183bb8ecb37b567623f6edda8f2a8574afec69805ad7ef6ccff3f4b2b88ec3070042566767b72e657ce86a2f3aa43569465dbc389dd4885cb83168d63bb685a350fb9251448c660b86868fcfd1de35759667c1b3d93870af8394cc2aed83f9dff7717ac840cd983aa40156e4cc4e436d41d37631f78c143a39b242e290acf13aef3774531ff5c6e41de81267cc8dcb225a064289dff86a91ecb996425075f730846ea1dd2c455bf4f346910b4ed75ca9ef1b87ca848663f3077629b374eaa33570645e18bf962db5cf5b314ae5652cd21926c17432f9d348f86c17b61cdbdb255ff67302e920ca5a8ade6dfd985aca6f04415c6dee5d649d225b4de6ca58446049962dcab9edbde4f73d08467524548314c9b699b76214e4ebf8537b70a650519cb0f2b1fe5ca13e86cba19b5573715f474526d29a6a726c8fceadf0e22abdc6fe64d0d488be1f726da73e3a1c6f7e8d4d4aed75624173f9061c873b496298eb49a8332a7ea1e043aeeeda2b52df2b6e95bdd67d7cd69fe4410e6b4a4f8f77bec9ba652283335049df6e3e69b248ca1f58c165ed17370c2f91f91dc6d292d2b08b8c3365eec7e6d27d7cd5d2c350f3168e8d050a202e5b8097cc2312cd040b89923d4d710cbd5b32d537cda62ad20409508893d540c8f8f8771596858ae8682c7cacd1bb447c915a742496d9a46c26e692e3ef18ce5ac93cf1689ce8ac3659b91a1aff7e302119781952b573359ab84f7f159f7c3ac843b03bd9fcfcc9219e90e7e167d834f7049511586a84afb1297e3dbdefd365a543f7d033923b72a3c903aa5c608cf92055c8fefd32ed6c93dae448d573dab88401163d5fac7c2b4f018f20acc91d79cb1f3a174c7a4c32c1616a64b0f54bea9d71d1ce57bab7a28eda271e4707526e6b08d5739dd516f94668f2d25306e49e765c1b7fc195ce6753b626a5839b6ebeb97f75508459203fb71e33304dda550d38cfa6d7740",
"ba0064640a37f5b04f20d52ab9494359d9a4cd658131aceb34e96d0ab51633eeb051c9cbdbc8a41239b69f234ed2fc2a4f492183ff0934ae2cadcb3179234dad89357457a7e29657f437396a9df1b9f718488bf1934243e3b77568d876fad3c585cd9e3b52c984c5b408d1faa9e3fb7efedfb2f5bed219d95cd50199cba990140da25495f54d8370caa41fb3c9fe4fa6ac68b09363f318eeac15dcaa9b8dcfc4a54d612b9838d024d6ddbbc4cb707d0e8c3116aa60e8270900cc4ea91c772f29139a44f4487c8f38358ffc68c29d15295c4c790419d741a532a6b479adac01dce7b03eb7c9d8d2fdaab8886089b73756060e9e7e71240ea52cc97a3025fec7b5a7c02232ef3c0f21f7e0be5ae973796282692144052c9d9178459378fabb5b3dc2a8c935c70174cf2358664f5c93a74f85b141ded3df4286fe48610cbdda2d198ec01f3edff6ed867abcd789af83af9c41bb3923baf5e49a3926153a281318ccce91bfe8ba48abe7018490939b2e769a4cb90c8e31a270e8e3c259338c9d662c82b85a890efe4b86affa7fb175ce44e0e5be0bb642cacc16c13a4bb9066e5ed0ae5fd8c350c532ce6c574e9d47797b64db6dba4eec7aad6386888e36a3ef44cab6c61530402872778558c3302f3f65293cb5e65591ff1ae5c380a07130e74188dcca91690b5f94246d867793b826fb24095b89a43c3d3224a9938c5e646d06c767d02ddef3a295770da3adb67036144612c69d929475456628728bdfc6b5d3afa83badf5b5ae8fb105bbb117a1e3594afc66f5c01f4df49132244c0e9585300806d727b39a487295dd7ac2f52d3968c2d8d8d58ea99ddca5e440b5b3c9eda79ada491a4b76b5bc28cf728af65e0806ea7ee16759af8cf44ea2ce69439ca08357fb4b0c6e4a1456ffda6444b6de38b7dc8379739573249c6a5791df8cd1b464258d9c614c6a4cb86de3e8ab4c5b9e0ed276a0f7e8361f24fdc64c69882e657eb6c37cdf94b663cc85b74bff04f33af5fbf4648c6064ec322a9eb6dc94a16140d51e07c215109447674ceb51c9f85a5635daa259e764ff5a9bae6b923c90597868437759bc6f7ab3d4308ce8b3d6832b21ed778fcc82a75a7cd203d98c146457cab4be49467a6539874487dda0d729ed1d37b3c9aacaaa133ed2afe0632bc2b107b7498e875da8fe7668b01198689d155b539bcedf5241a06277d22409be5ebc9164424cd3a7db28d7d20c99c4ce57053c8477ed31f1e1aad1f1f4f2550971cfecfefdc1aad26af5c369c1c2aae8f29c48f9ad3b511f331879490fd5c27325daa3a87a12420445adb902202703d922573174cb2b7c94962e928ed5a744c7ed21e7aa90550352c543736d1cb1323dadaae452f6647bc5f694e9b2c265c1201e1722ce507e8ef4c900c53975fa5a571f64567b0ed76f266651a0dac325e9b69628d0b9cf9527c4ddb6299f43b631cdfb7bf6511b57b7a082a1aa8b8371a4aba9cd07bd3497e9d99e3d869eeef378b4cedf5172d1ba05561ff4ed63a70f2ed3071e56f94cc239054551005b9a9811898811b6f55ae75b95caea6e4ceb054a3cdfdfd328d351e81242181b8d05d602a657ddbcbebd0d681a544f90a713ff119c4bc80b06d23143c775a3e8719a46d6b8cd3753cd6e27caa8d0f9f6aea79f3f25c32c7aa75c77d6780d7abdadfd58fbe67523473308d9bec4e210025cc88a874e98f8d38e4bd2f76b51bb56574ca7b41d1abc2d",
"ba00923a9c2ab177cfc669c91cf51110519aaa5b71cc46858f62cf7b25d2a23b12cc753a78ddc1d2d4096448ec56849a81be63e9e479ed44b8165ced1de2cc4128cbaa79fead35cdf91d19c3fd90b6a57a731c5339b6d942b5a355a7682b26a86aa36bf503365dbad95451d733ff68f32f52d5ed32831958a975bc46c98a871ef8baf125d6e07671284ecac071ed89858f4427f3044f1ee94e5c4213df37a8bc0354924e0815789eba35f414593adf5cc71fdf4574bb17c6fcf4cd22a7b3ddf6627fbf15651745cdeedbdef26ff8d9754f91c051b919c6b35d28b05cf456dabef2cbad6549cf76ed185d270dba0670b8b1932cdc7a4b8a271db79105927f79e9edcfcaefc789eb89a3466f350c9aaa8252a7f1c177981bbccd376ce9f7a6699bc8cb9a15e8dc2ce6d186c91a690161959455a30895224fb41105a4cd923c533dff64d004cb6ecf58e39b5d1b7d475f2e6e05662c9acca0d408c152a9cc8c3fe600ca90713dd34761519381d3c959dc77a15bc8675283ce2eb826717fe7785f8dee4dc3e5a1744b2a432baacee5251a0ed3bb5086dbc283610d49eea17d5ad844ef0b00354b7f61224262764813668d767b32d8e7388b18d8a29f597ba07a78a2465abd2f6a322771144a08cdc98fff9d3622bf3cfe65278b33a40e4c9ec40c83b6ca7cb387894d89928cf1d017a80dd6fd7f80c927ecf3988716d5ffed34492daa7d1c999a2f2c313bc4d7a825591e3edceadc5fab65dfe5f7138984812fc2682b98f683b1ce5579feeb2430fa237f877791478f903210436769b8398eac65d8558bfdf65316ed38c9d1124f68ad7dbf11d4d59d9f9dc572b16a6619059a1a9f3c0a229bb3bdb685220411455600a3a07baad14b569599a7cb0f2a6d5e6dc3af2c4dd16696212421fcbfed0e757776f50e7e8beec9be2b62a7f3562b909450c82a56b8d20aa27933f6795461d176ad6d54bd3c6179c936051dec3bb0c435f14cecde4d675497a71592e8f8ffd2b92233b72c8d8379af84fb4e54b2f7124597fcc75b6a6c31ef779b5aa8638c246b048a6a13677a23169dc5efec399d92690be36d14cea19de4fa6c29f0d66f228f9832a68dba464aa4801488de2a938059da44bdc569f68a9f54a188199798b5ff570cc29f1c6b16ba5860696b730c2c947bb9fd8db80a5444d893873315234ae22a112fa4e6d52b27c217033cb565756bcc7472f2ff7b54964be29d04029329b97059b4651462cb930f948bfebd92cfc60d0ca1d724f9768130bbd226e35506a3d3d8fd3aa0e1deb0dc4ee5876b0a53f2196347e3fb2f68a7b2b897107ea210a07b6baa54eda147d11e44211db4f52108136136253348f973f72055f76d8ac7de2acdf61fb14ab96b5273f28ec3f36374f741cf35f0a0c0579874edafb65765cb4c18c0beaa9e55ba446164ae4d42b39f12eebcf72a5a0b1bc8abdc6706d63a822c2d59da59f1f48afec164b7ce20482b0775f20ba6fd999e60f12d690f958c413afde1ce848bb293e995c4ae12739b680bab0e95cb2dd3522575d075f259ee45361df8e190c158d74adbe8af26190e12fc44171e8dfcdbd9af9cb6d05d44204fa01879069b5b5db3610b03381fc7909eb888ba4755e2f726494a8892d121cea722c22ef4dc342194a92d11e383c891b0da7cce81ad5a7073d60b0b21ad27945d891c7815be8514c36470e89334b9e4350674c84f09c8d97a65b868a61db34cebef4bc680",
"ba00b0d92b0c3217b9439926fab2ef44c92274db1cabae11549e34eb032b88409d11137e504655d8893163c2dea8e67e9399287944edfa644e5473f9984e1938b88695f4148ab213acd59f9ad63514422907a47705227cce228c1279f4d7d756c9ec2f9f65c4b1b42f5b6bc7f846626b94db6ee0f9e43f61f55c6dd0ca4dea14a2d47de9528be6a50c6abb72d776de2cb144e4557453688d46bab93e9cac39001e7acb54d2142d4ab87d5d39feb5224ffca96c6d0dd8c48d1280fc4c9439d757ea95d8d967e5d49835b215af7d2460eea831d1d3c8ac723d931e555aeacb95634b8a8bb9abd51884fe3137a3a5e86cadced6f2ea3b7307449aa4c87b84f3faa9f1980c7d073066bcfeaa721ec4a1b4cc9c8db545989347a71c36d919a536f2931525b7eb303293e28737e81e0550d17e24f34c58a4a3dce430f31e2cb2393c9f144dc505b4265217c9e58b040694d33a5aefc45fd0ba44fcc9b2b4fd7cfadad544977d5dddd3d5b646095ce928482def211a5355c69088d01f299d361fb46a6c0b0af769f36408892b62f45b3dab90d3237adc196dbb213cd4550a7cb72e55e76989b978e36499b89b3dab757726469cc6f6ef9bdc50135695585a589b76856d9030bcc3a4378a1aa681e8525ecc7f64d7b2ff7dfbbc60e4281ad9fdb296fa4e20f5dfe99348933b587a0faee65f0697bc3ef2ace62791bd64c54563d8985dfe87eaa44321e68fb104766cd26d83892b92a70c851d3580f6b14de6bdaa4c5914c63ef9918df2a3458b9a75ab6d007819f42b15ab8c35cc5d9e9b1ce9fe60c99b2b39486110827749c8e44628cb270e5b26bed3a534b8a276b4a768ac0fe70d46aa2f69ef41a1d34449c0d31c3df9aa52d7a91ccd6b487fbb2c463e3e303ab879e69770d9da233da13230569842b255c8ea26c94ba888cb68e430f5a9cd3a1461a29d952eb4c734f8362101441b1d034c8a46581256e172708bedf4cb939b47c6812390951f9b092cd9b78af3402beca32ca40dfca095c99f0c9b18ffd7e2913d3509c052b9d176ad6387e56528bacded4f5dc21cc5ada335a0eead951f1e5602cba9d63398a6a173dec63f44d1d4ab477d3a5a919b81464ce7abcd94f7e8b10b5e5d2237e81ae788c63936a25dcf5aad13fb64fb78ec704ac6958b3e19769f915391a08c0a052718f5535b525113282d79388ef5cba7ccac71c6cf2269149e8fb8c1431f8e44ba76c0918cb593846627481461e5d3605ff451cfe158a96adc0df6c397f794d06cfb77ce421ee548ab082b270e302525ea97dae3b0732ec4bd5825c36da0d39b07e54f6b88bd82e32787265ecf7aef63ddbc50038e82f05a552d5f357cb8f17b28ac24935c6b0685885ab1f942d76122f9c61acf5ee967b34b2ecbb9a3494fe48b429041b3c3690a361a6a8ed1885efd52d831c8d7f29a19b961d8f6a590c10afa13393dd9b54f8de53eb3a74c590b7ea6629bc435389d03c040566441035e1865761892283f0cc5b5a341310fb328a1a91ce4a200e7756049429bcfc68ab7e3dc9a660c0a7db78e5e6237759fd2d26d22db384a259e78698dfea991411b88a19ac2d577a48620f928282cba24b36b0478d62c2a31e2e89296b327ad7da9b50586a9738caef38130615c74faeb4247d38425679afce9ff7130200b36a60cf438e96d1b7a33bf6e12d9c9e15211382ece36e2639db94e4d67c4d459272e4eb113e43ba588d3fca9513642a98e3b88",
"ba00814d92d539bf64c9994cc2126d9cc61917e5ad6c02e7d66ab1f119b9a982cc5024cfd0bc48485da2b992222c7ea31f94348e9cbb2dde691d8b5e694af6713263c4dff38d5d176afb43bb035b9c6bd1575ded96e2699564f12a2ffce9f79c8bc7db4852d15b5c1f92710d6cd58d6b2a8956af599845a9c3dbe94f2a4aafad36e697d44ba07038b6ede1ed13d971086515f7528860b78e2ce6b4e66a951a7ec88a226bcd624f94edf27df648af2b8b57cf3a5b84e50dd8e2ddb73dd27f63d5cc2a7b32de3417d96eb1437938694703fcbbd4cf6c3605017732f0d97931662edd0a921436d2b9e4d385344bb5b39a83a49fafb7e2567d62ae3df793e66efab7244f84a246cb0d07dff7e3efae743b84730b2fe244366bf9d63623155bd3332d4eb19fd82f6ce4e36686a3d6c817af83d99e4b5955a6457f4f89a67e832a922a34e61dd9ca4fb995d8690dd96ff1ebd6c44631a8470e9a9946a0f2f6e27ad567bfd5c4e6f95d91519ea883e1d290a5322671fcdac34b434c93b3cc516352f504d1a72517c60ca398525393372a7f7791d88a710699afd1de8aab136c24e9cdd6cfd5438d721270603076274a920b37a70824320c32c30ee939f018661174d9f48bee66efae867c682a359756e4b303b56c4a16299af897aefa495427fd419e105c44b668a23acb0b7a8ec7901511a9ddf88c0346de3f984981d0b8e9fda8727194e3b1989f3e5517da32b9932ba062e26278aa6a6e39db95859ec64235ab348579e04d7cf17f562f09162277393fbf439f5abf362934105de9160a85bf9d44cf2c33adadc7610ed0a584ce2923d6441933378f9b1148c2d3018ae74aaece468c6fe1e7a32a2e98feb3ed4fcac93537fcd09adf6ad8168123f0d2b191fc2c59f1f7c8b8504b2cd7cf14ae6ca78cbbf887a1dbae25f512ad43fc5f8ff77377ef95fdf38b8d0540209ae8aca3f589c39ed380cfb079dcfec458cc9f46c7bce4cef5d3b6f319ab9d6ad2052d10ed22a7035d519239101341a17fad2a4c2b036bb962f2062f919e51366894febf8d43d4d9abaab250f80293a08a5baad64e73a0d95d9f7aca80d448caae3a34c640e032731e585375bebd1416ac995125d7cdda8961839003bd882509246ce01627f9bf4252283a45bdd94ac98cb5536b62282a0342ee659a93028cb0a9043cde53b46b211ee9c11c3646accf4ca33dc61259bed93054638fb57fd844f67d74a7b5bf26bae4cf983584a1b09dc5d983de09be47a70821b69502064571f43e24653dea31ce531950a9cee148cc7ba8abbf503713edc4fb54a17d9152c57297a31eeac2a65876133dc177a88e8f8bbaeffc28567e67bf8be7305865517225ea63b2a6ede306817258096f0bd09128d236c2febc16c91f33e78ad62812e41bf4e6fb4e69ccfcebefd13cd3f53b88f4dbe3efb14fa875c93ee30a5cf50d828847cc14a3d35e48ef55f819fccdb8a6214182b5c6fdcba3cf53dd2f7929bf6d541561e4bfd261ab230bd58d57198c12d1e1792e370811373f355db30cebf489a2f711e1acde56f1001d8632906224ac5b4d9760ca56552fb723a8d27d5d6954ee8dfe57a743a94619a769d62efde20480ac9af56798861b9c8233b04ca4290bbdd541d636a367bad46f9afd7cf7b72c91a218e60f830a1e0621ca378fdc93fd1ecff563e84ab2b3c470955af5b237a40910915dbe2e3f2a237afec248cee11aef1ab8",
"ba00a0f049de864103bb4a2273aeab2064be991da50558c8c0a1264ffaca25f98bbf8ddc79a3af22aa86497efb96eb71148bf19b24c76caffac4786ca825ae68cd79d60d6cd94eaa563ee5323284462454c9d9d54717987901f961cfa2086faab4fecb6aced11ce55da6fb6712aeb76f95208132d9f446793f7949a9d0abbab22247591f4d9c09923dad76ab0d03be4da41fcdbb7a5d4886a9a59920656937157de36ac4a41ed82d1e8b5c8aa9d91f69028f2ec8d4f9dc9d4827f176a54a5861b8183143c9b6eefbdb52952c735643730f70b9aa2f4f75a9373888444526f1e8922cbced792096b8fc958b61a99c182ca261b4a88a7a364cb62386b2765967132dccbac390f4722fb7d02d39fd97ceb57c90ed3a35297e1764661b2ab52f6b005b6138ed8579d2959fee61856e9b0f8987bbc6e331a7ca79bc7da01ee7ae8a455907ef72cf9102f69fc249c98469372e50d1e04cb6171307a72bf126db8b63f0ae33885432b0cc9e8c998c8236cd62c15fa5d1a3712871018a40f9f135c566c0207975bdd810cdcd8c86735415c32093b05b3c4fc31cc7382a9f4309edc3582d1b89991c932636280d8a7eed531b1d0a12a8f4194cf0c113a65a63d991a4c84247abe3b374da694d3eeb0e89c4f5a2bb4f1727fdeff26861678b077a48eed58ab1ba0a37a9e08ef5e0c7290a40520bde298133ff3fec4288d892a325dae6236551d5a32a0549eae22117f699f05b9efdb6c05b5e78c8523339566b8998962db134163a6afa986a24bd856e483929ab19149e1b70c3761c1e3646eeb09c0d1b3552aec687cedb5ea51ed66990d97ea8d3a5bbd152ea5b252b528eb457d3a7e7d7bf4afa06d5207c7e37c6768d5ccfd015be9e910a822778c74a40abb37d62d3e42951211b8e7a43bdd1c0a0d8ec79409fb651bcc3b5b8b7ab1153bb927a6853eedf2a0e7458d4622fdbd3a5fcae452ea98b68105964a591379b2228e7cb78f896f22f5c643fd487ef68639eb4398489875500a1c8a82258e9a2a433748d978523230620308c9f123546aa2f51046f6f62cb650ba5445e6cbb56f6571e4a629195a12298323708155dc68573173b928c9733c95c99061945211b7abfabfc2375ababa81da669537e7e8499e825d3092983f3276eb488ceb14e0309ccac325609c25fd8b30927af8ac566f9b9de1a1e63e3b78b43d1d743eee9968f7fa74317995486905ad82994ac96b9997d843cd27945d206f84b2c8984f269c71aa4111446584258775f16cf9e82b39b03745b721e656ad53271ab1b2446c6c4b24925e123486a5277c11da3eb35491bd692b5c91a49ea9563b56d6f855479d88328909e076f87bdc023651ceec2262dda524187d4cc11223663e1cfb54112d2a78cef016d97c722d3acdea5eeed6238ad21858509c29ff4df6a2268b238966819f80905a1af667e48912069bb2fb7c39cfe9ce6db3ee042acf8d66d8e1fe2af43e696fa8369a3d557f0c781c9c513f3a5a087521397d2e9ba752bb1bef96e9be250167ff98ecebd29fa4d8d91e72a1068a1c34118d97a6743db6db2b993b10a4b1aa7e1baf24d18fc5c377edb91e4798c22a8d24c293a2cb9bf672304ce2569693371954181d9ff9dc26be8ac07e953d64c901698aa45ed665e03ba4d86317d88127322479963fae449a88cccaf74f62279e7ecd1c5755288177338b113ae3b454ae759754872424cd274a976775b85f344ffd569f1d6ea",
"ba002a80989cc63565de93861218cc2b4a1915eb365872d535202a844b6664ca22e5c960eed8c439495ce01be68660f44660b20a2be6d49e6c61356fc8b219068c55e039ad6a7597a2234e9d97d946cba7b459aab39acf8ed4837530ceaad9fd66cbaf0cd2f2f578d5458732a496951353c817eaca8c45ace8dbf6a74c9b565620e4c032065f7d21f0a01151f2c09ebe61f4c72e0eaa12bb655fe6b231a7290f27167e826b235ab8fd8aa84c9e6203863d176b0f7a60cf120b3b7c6091a59ad8644e836add2fbccd6321628feb529d87192af178d4244a229940900427e519820608d52abfad89bd979edffe514cb262d1886947efd1f04d3b34cfb4b84febd33b32f9ae7713c1a4dc2d6a5498247b880bf487f609fc80e0978c5a25a8c8c036137468d425564a12a726f26ae2bf78eaa910307e8a661240a06aa0785d9c74eb33271e75113b500e0abe96605bca93a171ee44a14f8eca76b4225967afabfe852f132b493a6d5ebaa7f66398713159fded3d8746ca9e0bff4d1de894a148f4b97ca73ab30bd05b080c5628e22a3c0f0aa4871d3b0983c94db8b8a6ff62c7e8dbd296e3c25db44633a0c3d4fcffd837bf2cbac3c68a911187abc5f31ed99dce65c24e717d7e1c6ebfd6cfa1b89376400eea47587573ad1b12ecada9b7c7728f4bd3ee8444940af53b7cf2d2db180a2e1adac74faf8389a6d9b75f81ced255ea1d5b339bc63a65351b99c10e0bb1ea17b842274647d978e7288bf67406b341627c8dea1decdb30313e65019167662864eccfe711346d62c65451a701114b19450b037fc6ad321d3d593c62d16d7c9e0f08f46ab6d1bcc171c325adaa54a455e5070c56204f5601abfe7613c2cdbd765b596919c0c197ad1c29fe731a6a899e682fc812066b557f5ac69f3652a2430e639ca7e707c6ca2890f2c4dd3ed1951e15967bb05e33a1ac37d1d3221d963307304820d10fd92afbbc4dc333e3e3684d495a4a76cf8a2b8f139821f29bc49467e68e56b92a52110c3fcb0b89f3793efda78c87b8b2df7aae9aeafaadd487fd8db7179f7a911a2329cebe8b43a11134522788eea0654e975361627d7b9372d9c0e77146bd54ca31d25670e0eb147863a506a6c0ea5e4a8b38acbb9146334d457bb7e8d6472351c2669fd35a76b9add4a1ebc57c44c31bafa9d253748230b1caf5fc7959316173dc4bbcf9a94412c6216b7456f2365262be730d45a16811292febb1144e1c8f43f497c7f0f67455298599fcbe707724d174ff4049ec3fe48930292e836249c851f9a36b175eded3b29366aa709eca26c839f9d8fcb9229634d2ebf0daad38e4698faa12f6304d748b73947288eeeb0da9e02047d4eb4e1dcc0c519e228d863b3074a3ccff81d1d7a5eee639bf66cbca1c412fb9c332d3939932068e9b071ecf48ad902a9aaea4394f51ad6cf48af312a46507298546b1aae1a635b929ea64f2c8b918539b35f1dae61c186aa6bdd6dea4f69dcec42c7d7c334fbde5f7240d7ae876b150c25b4265881a5f3bd446336f3e447464bf1aeb7d9a6c360535184eea080d8693e0ab716a57c8aef285457cb270c12599cc52c93e2644a7292e67438e9d2432813883e24f85c1dee0b43034ced481208bae3336212468bb11c573a481d5e76b370514c4a6cb8db9052f5f64638700d83d512e7320931cc885357cfcbdd0851f514e505734073d80581e9b137091a37e0574eafb465e951865d5f21d2080",
"ba003cd075b515d60aad5d469218aa12aaf92fba6c6aa8bdb909c98347bd2e7d9531d7d17b4dcced98ff3a87e35b2dec76119b26f3a657d6dd2900d3a2e6ae511632f45d1f7127583ce77588b1531024ff91600f5ca9b635426e390a934623bfa65e4b3126124ec7db610cfacbe12d12aac5c8bc0656d0314e058e357f776bb00cf4ca7e8ab89b39e3f4d79176ee8ae51b28cf6661c66d6d3a35e2fbd9205bb42abc451407bb9e9e68d59cb3c0b3250746ab52c98954d0a540992eea65734bd3e8e6d969c7a75938438261c6f2d502ef6a443271b64fc4205baed4f926d3c70495587e4475a589ffe3a36336d0cd218a2b6dd38ced0b475c9391f9521119c9e4a08ea08e687b123c83d58565ee93d25788c8e4db85fff260f06cb42e8c66afdc830bc3cdf0a948b5475fe16fb0558dbb7b0c802172ccdfe532b535972b37f78ddee85d5047327f41bf660dec999252f8342a7c011195411b6af33ba94cdae7f50fe4ce7cf0f56b3c82e69fa4966029333aa6ea43b383b6dadcef9a5a5678f856de2c7c95f7923ac89aae1429083b884c9adb0ad6c44ede05c2e6466b9847a9f5e9de2532938fdac2c97b12dc2c858ae412a5d347dadfcbfd377affccdbc8e84d4400942e8931f5702e7ab4b9216cc2195699265382a2d5155984cb72d46365e504d3d96c4d320f2ceca1a8bb0caea0586dc92346f3d39a22359bc01804292d872be6a7d7f33b37889c59f883103624d9f8d4e7937dfdb060ea54b606730331f09336b43008b610cf52821e53b2a655ece5496c196397fa4899ef219497c9dbd97883cb5dbc731082c13c182d0c76df8ad69fc826fa08322d9a58e8b19ab61b8dd4736e32f6e51fbb9c1c0e7cd9896d1dc046cd5415bcb3a064138b284217f4d3bcfac110210b6747be19df3df7b69e170647b0af4d8e44c85ab80d838d242b85315280f0bab307ca979c38868194d9a8ed62f8bf691f26420ec21ed7c1917a34c24ce4c5271364390a211842fa8b30652f1b73bc96082b81b6a0df7c8952292466b60c7a42bd5e5ff4e96081b53f04708964ac6c975ab753a2b1be229583715c789aabbddd57d3270a6dd642db7b5eee46a8e46a6dcf570e94f525c6451757e02744c37d3509e58264cdea37514a9bf5f838b58333732dd7a58e138d9b300a29afa2ab3171a048f75094013143d4b679e9696d07d2b78f7e7f99758599ffaa0e9f6e97f4db35b8251527a2c58a476ba0d9f9b745bfb66a76ca2770e16f5ec66647a6ba6b66cfd38b4e766e7965e559f95dbfd262e313304d620c98d17c5e97795ba0b16be37cc0a7d0671f36edee9004f25adde5367a07177706e4355895e58cfb5c5b5e42658a856b08553a4bf4adf0dd96ea9de3cc6c32882ee52e37fc175257fe5568653de86328ec75aa42eea6ae46fc82ca33ccd90faca7c81fddfbb9922e45cf3acca08a2b755280a3873b4e56126457c25813b68f56c0a4cebd368be56f5c69c726bf37a536d0dd2ea559cfd61d58b9d8dbaa3af361bd7f68582492bce5a437690e7b4ca72dbe417fecad36a5a6ff8e21846678ec6398d30991633fb49adc5251cf5dad594c5d2f315899d90dae0d24786228a6e7b3b3719db8323aae47dcc460f81bad269b42b27655fe1b8022baeb36d5298922b48d5a29b2831d8510cd4f51af8681908b517479bd533031b1185ef215919251e3aa1d91c261900c5300a5747d23e6a2bc11773b92c3c520",
"ba00f96a2230ba54209a48e47d9e042334b459e38b36ea197f6ce8b75b15835432cc2cc981eff0aa69e5338fa9401be87352a8fe7865620afe6bc8272b88efcad5b314748abae5a0d791d84b71ba3b2afca29cd89a1343e96056869b315d61914c8538c91c7c1c613c8415f9ce3fabdb701bd8e6170a84b091c23fba709824b26c993b2e3f05849ef089d3f5e4568bcedeeda194c967df2ce4c669a294cabf8a04c0464b9e1f58deeda009c2773a7c77f15471a642453d10a3f433d26b260b4e8fa7d6aa1d6286cc582f5e52d95c6dc69f9b259947f23275d16298ffbcd92f139bcac8e61b33da9f5ad86aaa2e5faae952d9c484e5b2791d47aad13bed367854caffd293a2db17752a832fddc8cb98e4e615dded7aad644bbdb0da9270fa3b7d469b6909433f88ee91fdcd5612779ec78962a372ef56d2d3b9ffea23c7d26a5315177cabae1918430e9f48264ee3fe6b17883c7e169c67b97d9d59022b0e01a1b7cf33912536c1b661c7d92584c6df5a565cc0bf31d9e77bd98348da98cdfa192dd6597cdc78d4f2730d7bffde8e0e7b9f97f3470eec522282f51a8383125649e758dc967aa5b67184490e9c4b02c9dbdf3ff646d4481317521c7374ec4841d11e2c49a8806417ccb49e39b81b532e3824ccd053208a525add3fb1ebe582e98a5be6fe0ba56e2d991b71d650286cf6455cc2c108dea5a7a2bed54ca39e7ce73abf21e4a41b34ed9e8f3e9e0fd21868860f5da8f7af1504bf708214eb6a8fac576759ace4053121319b7ea66497e91dce35df796aefbc70510818975f13626887caef19d1bf99edf5678fc7a0e93cf47bfbb4a3c254d919be77932d42ec46ab28db0ad27f18f4ede64b5ce57f3fb46a730ac3b56333bf5b7e352d59f20c3fd690ec40cdd3aabdd5f3f28a8935e6bdaa87bbff9f6418ab3f21fcd659a1b9e8c9a6ade91b48a2418ecb9f18034e7ffa84fbbdcd91208f225bfb716046112c7116f4ba0db1424d26047febc2e444d9453a792e65f31b1c2c1ce3cd50c6cf2182c8d827ade366efe81d1a41ce60cda8907d10d61b248aa294a8999329ac167ce89286aaf65bfbcc96eb4a98346ede626694a64e6df7bf1fb8c6fd546fba5323a39db4893cb5620d4fdf9e9d64a9f57cd3c0bc133f367b4366d81b0546f3ab136515126162d68d94119c8e6ca6739782e1185dce7ec9ab4fac51f9a6d3cc77e76bcb64864714cd65f6148b935511e2ca39f2cb1ba9b284d05cdd95d369e251ca96c597faab49cd271926be9dc83bc644d5f203df4621499a8486b144e30f6cde38af599b30a43b77b0928844cfaaf61d73efe6e82d08dfee0ccffb5ef36ea6f5e11c84324ff19835c8d53defae5f2c4e1c4d1b99c95d36c317abc2a9eea73280e3647797cd09cd41a6117f124b08747cb1f92eb0e4531e277b94c2d065de4852afbe44f52f8db2a92f773fa56554c291c2b88db8f7593322b368fa7f6961b6d49d4eb3b11e42d4ade4ebff2556365c94693b95d3c81a2fd3606cd9422a93559c0936ed5f987918f73e5c8cb1c8351f53c7101e6f3d27e9cc6339e3055a2b9976410eb2adfcbdd42e0b62eb4011b1fba1405818d0b6a32223f44e6672441ef55d206c7367efa7b267921ab0680f455ebb192f907b78cc29b80529ff47349b3bf41e6afbe79f2888d3efc8df68a5b748dc7abc741487d64956248f4794d2edaa6883eddfa39b76f733fe4cf71f291bb4bba0",
"ba001eaf672432f32e4cb355f2c10e99f188256d45ac73d1ab95d2af5a792551aa74df42c3d47053629ac1566f96cfc986f75da62c8fd6637d7fae1febbf32947b6ed61a0f8101202457a8813de985f132c5bf5993a64c65e926fb50e37011dfaff2672c82b6dde711bfa75a28510a8d55cfa72d2cfc319ab9b8ec7ab6c251cf840460b71e9901ee2c1b3d35c1af842f646e0ca845ea76da8a27e0e179b85ae6a5cec1e78a45026d0cdb5698a1c04c164fa10f9e27d85de939a3ebac5d12567d31040b2b726574afb2828f35bfa592cd4a6b98d11bf9e709d2bd9986a1cf35f984eb65bd8435fbd7f318e5af728d11f1892e0c11bca2b9ad4f078f1289077b81d481e4c8e3c22d33278d215bd6bc1308c0a67012add4ad4908b71214a19fda16233b0acd8cd29add46ad50a6460cadcef5feb75f9ec81d8c6c729f46c0d2f133579af7924659b6cbb395d59e975cf3276ffecf5ef7c3d2d1264d268d94ea47cf44a04dc0a2d6d2c63b3d59b5ddab5cb1e041c66d843f39c4251829ce97033aca22aa7e45839117b40bfba663c46fba445a948421c8cec5cb66736e3dfa3fa8a4454d445b93990bbf4a3f8175f4a783431452f53f1e8e41ab3c598cdb6425e42af30b41d49725c951daa6b840d8ec733a4c197605b56fe36f151a63814a95985355a6934d1a36b37b001928c6acf4c76dad57159c81c5b0be08769d73bc65e72c6b03998299a6959f55267836c30293d59d4599e6cc796aedbebd162e7b03fface9c8d137aa4440b190f7efac8d4cd4e6d274404c2ca85f6632d9f589469e3c93bf1ffe816eb74b93aaa67a1b2f68e8b7b9b4566105a439a53f71aed9aa94362ceffd35c8d610d1d808a390ab76edf9480a46c3fb3cba8fee508e2d51f1fc9947b43e0d7ba1bd9792fc6af2aac6744217847973decb3c2a3b33dc205f4a023eb11589e218e363d6f45713a639b8aa5a90fb58d69bce0f8d9c8c6823d3ede2a42cc9143edf5dfc319c5cc9a338efeeafffe75a3be5872b248abaac7114a1d13726ac8fd0a206ca74d7c4692d9ca7359d216b2de9277ada40a4ccd3dcbcacca66769cc8f6af6a95a4cb3ba3b36114d8d266feefec4a4740e1540eb57286659254a128ac960ee4029a4d624476aca24e6146a0dd3cd4dceaf51588c63bf38f9d761f9b46d11e76261c24a7ffbd0041143feb3ed44350a7670cd13c55b8f93cf5b72d299d4356f35ab52a5215a2d7ac5d306f0f5163c38c5ac3121d6f950b1bb143517f4b30a33cf7453f28ae2673762dd947cd13d58f8d22b25914b6c0b96f60c8cb6bf9621316f9ab8b15a8dd14ba3fb3d85a6ad040b2d9f4a79d1d8789abab32cc30cd176e41506b924762ed4288d9ebc9fcc61a8fa2496eef6ede2b52b4a0a4629a3734345cbabc2d2255f393a66a6ae5e1c4c9f9d3680bc4dd3e7477ba0fdf2e268a8b3a51ffcf7af94e7245d1dba764666193bf589209d878b36a7afb834009b61590332ccd5acf307461853ab3e4d2e85eb9827f081355489033e40696205e3fbab3376a7892eaba69f4f5bb28e357a45be4ee4e420ea565f7cd091e631c9d253e372bc749e34638dafea42c9322a7a29986ad4a3763b53dd0bf158432a421c866530cfc268e4335ca4ae447bcaf34d26df3ecb3c1cf2ae2aa67317a86ae92dc2c91597bb1f8afdb5ac9c4710621524606b583e9ac57af46c95f8945ee55f6b1a68dbc5cba10f953ed94f447b539721908",
"ba000b66655cd54a5c97b0690d3ad724d0d84db42342444f7a0f052d11b7468bf0b45abd2946b5cab4625bda7c3cb6c8e7e6146b7b38ec9345e03311a9bb1c41a9eb1c79a3dde16598a886190a445c648057af16d4e19776d05e2a8773d33089e1707291f9674b0abf775e7cd7308cc449141e969bcabdb61cf70bb0b8c1519cba6aa14dd3cd030723f4210ea61e71ca4c4e5d59008335330312dc6432061a49622a712c625056e164a4e627f6b89337487dd3ca2faad2ec59208c55a8e5a46a2ee9fee6ecc8e38b0ad0d1b40a717d9cc927dd0c7d6759d7b9ef0d2d65e14f2683ace5fb5b15e7a95eeb6d12dd8c7d78bdcd91c7564d924a91e4f515e2a084719b56bf652eecd2107ce532c2ace561d9241843f33acb0aeed570a41ec35cc7dfa0b85746de9867f9da3882e24e2e1ab8c309005ee6a9445e1b2e3f0d3a80b172b6d025e3df8b45171829c68ac4e3eac4862c9e491b2a4ae575614a060089aaf8727f10a5cbd074433e98b81bfb2ec10ce9fcdcb9a5233e82f52e8212653dda5f66126edc1dfb7d7559c571a53e7cb7c2898f89c73c3bafeb55e21cd4e92ef3680e27f7351972f53ca7bcc25a77900c790df47baeaa0fbd083c947a010f5717e5e251fc802bb6a89d9bd3066618d61a348eda17e95b9ab3334f6f1e4fcd93c59668b4c22bf09f638523819dc2b9729625a5be9b4e0e54472446418138ab322f1f61922adfd5796ae1537cf2c6a826b6531cdac3ace9fa12e9ae49a46e0768471f6de159ac5d31b3e4323109203bfa778f5a919e8e7d264ec8e51f88c6a53451947a87193131163fea7a876c520a5796ae4965f456e1a45cb1499aa6a5a592b43f99ec94a8691b19c4a2531cff5daf08c8a4aa870b1e93e54a2acf7ba491546bc91f448f089d60a3765c6f93879630498ceb2dc3e73b8da6da49f7f49afdca4b1438384505ab8b1ffe9cb56b797eb7639288dda7daa3b9b69e6b49972ea6bb71ea9cc469ddbdf62798b482dcea17c73b4fd568dbaa15eb34b03ecacf1904bbb84c4a195fa6b8166bef5b0cc66304eb0a64ec79c10b62509361e7a0fbd399f1d69da7688486ef28c54656fa2c1eaca962494a75074b60f622315b56a36906834b503d8c2bbbd8fee6d97e0b23248a1363b8d4ec86a5f9cc3264262fecb4c4bc8c7daf8c71584356d1be1b458e03b375e58c099cd9bb71721756afb519a4ac88fd97a4bc905232280ec29f3df8cc137698c249d0de9e58aa24f20437b2509c1c2d3d8aac985ba32dbc952cd25739e2e34f90db1bc1a2454dbd2562795f8d21bcd92e9ed8b95055b577df07f70457e04e374679cd7475af4c008135190675d722eebe6091c11501a19e43111e7649e083553bf01c6cf57aa7136e65714366917c85ae56bbb29204aff8dc11a8b2ad7fd1f4bc3fbad1967f561ce99bddb8e49f1ef42f2d18b05e534869854595c535bd4b9096e91320701f04996c4f8e7d2d0c421f43f73985079100768c2f5e2d54d4d91426a5945a34198a840de2a749cecf30d76c65491c0132a647886145ccaa53ec427f8dddbe32537e89a34343913171cee4ecd010f8c35b95733cd97e04232695f126bb86b16390c220397dc30e463ece0a208e523578e476cb4d4a7e71721532699e399128e76450b510f95df7ed0a12628dcad9a8c3a42ef705355d58130cb5cb267279fe7219b27f63b69ca74708c8b81819b12759982716c3f1fb1d65091240",
"ba0055d599066a2393e5f8a2c74112e0e52ef38349f2806e585de6958777976cba44cc22d8fa8f03b97553133e9c78342e561d214b32b137dad7c58be63b298e7af4f39bd2bb75a8b70d125883e925e755474fb2aec90d8321a263db2627ee630a6b9042348695fb9c1e18d2577ac64362caa7ecbb07ab5eea8e85ddbf61683ab69ca0e4fbb883a68ca272553981d6b099f5da8fb9645b88d266c99d671ac2e6e8265212293e7a173f0c9233972f2966963cf9f08f2cca2e8b27cd730f33f648eb4d73a124c288db1fd245d046f22e8a93299bfa9a241a746113a1509af3353a98c1992dcac9cc6a9496fb49c26cf044aa2962542bbfb4db40c472d856abbd5da92f1a34d8c30cf222cfe6699029ae51afa27cb7896e5714c36e66338459b5d3e953e71ee044550abd458433ec4afb0ca2b4bdfd62cff385b64e1a04834f783d6e61bf883f916631f3c0cfd46f7e89aee58d068a0979608beac0db8b6389c3265b17fb5e9d5ed0e72b06dce237ecb63b13a08259d2c98c856b48131fae1219fdeff29f8e2a9abbdeb9d6f535e3e09bff7290dc7ae8882c18da660daf09e2def22ef095e9bb707b88b6598d679e8f05fd374c3e936e12853747ddac343f45236a96acf2b33d45b5a10fd3250f5fd304d36190ef753eb177d6b53ae69b3909a76a9c58f19deafff4eeee7f3ffc65f64cd8a9e7995d69e7743242b53d5cae7fe47cff4018dc6fecca4f19550f96eeb8ea84116ca0d12771ca72485920c4c98351eb8ec4499c8e2d53f32b6476106e312e5de3579c567651832b7ae533b3c28fd64b3a22628cb7119ad5e17139cc3b31034ebabe6cd0aef9edf5edfcd11537cbef7d71ffa772b40dd34b9a469539fcb8b62e4e5956d766a225bd90b46015ac1961edc550a45171cf76a66ed39ff5aa934f276306e93b9358b11ca7596cfc06ae2584645d51b4808b2ee72682d210878f715e645dd6da755092ca856742cb1d560d33a21f5c0093499e98c45675e0c613f7894b86491378f9d28bd8bd86e9ffb975ad8dfe41cd50c8255f0298cb729a01f38ce5dafd788db104b25d30428b377d50d470689753ee5d563cc091b5dbbb0b966d94e884b8b530a3fa7b3fc8aa14ceb6fcdd95abcba280a8beff9565813b1b7efc23ac8d302d2ca0df5e5943bf1b4013b39269fadb3e125e448d0e0af8287974d8ba4124d604621e3434aa6449721a156f63a4c9bf544846bd8fb4362d2ba05e99193a0ffcb6948ed32e7d97dfaa31be62b2cb5647fbfbe97a49e5838b3c84ab4a6a9aee357aecb3d23f0fef516ac9a64d84456c870877ced04b5d18450110d4987c8fee679f5471d2251b868eeb1194bcacec215087359f76726e792a8dea72fbe480efe9361048ad04aeef5b9ee44e0f80471e0dbfea59e235d824022c4848e6fda66edd716d21a5975122f53c11c84a69f928fbfc9797a8beb29aed96c2969517ae76fd83f543bbccd6704c84364ec1b0c8293346bbf19d1a830a25dc759b8574de2938cc9d7ac7adab20e7a2adbbdc8d82f1969e69eb4de3754374b9b3b688b1dd35986679232e0e46af170d56d6cda35d3ddecd23b26ede73fd9a99d2a14a549d6487fb66ddf51d72a76e18c73ba4daccb492dc1637171e55ef5f87a7b954bb41dcc31f904766c3c8ef7464c6c54c9247509d1229a8b4e97c2fc31c431118f085216579aee8fcda176b06c7211a984a9ee84c0b5e58a31fbf9782eda13374c8",
"ba000c4011b1f1b32704b1246615a473bf20cd4c1566f111ae4817dc76127be068e7e82888bd67553bc96a58f1a5c823a834fde684cb6d52a56b5970dc3aeb2d060a5439f82626a0e50a299d39f5dde240db1c1cd96ada51edca9155f4c2767f253dc386090c41f745ae9611c8ce6cf98b6cef06e974a23dc73a330529d9e287ce41d8edc162d460d1e66d2066f699e9f3904e0ac53a4fd65126f8a2c0681ac3328e58fbf3c7d0f94a63a47165d4cced7af44f4e54b42a723c4bd815a6a6ba19bcd2f7bf1dc819ae97bfb2d6d92eb4ce154b6c234a74baf00885d54bf773aaf7d939a5cb2adffd1acd7346dd2e165ca5c33acea7f5e1a54d5015eedf38b2e07b0aa515baa6593c290304c8df5a0bee8ef58f2bf1add6dca38c733cac11f43598d013eefc61ac1a78ae0b753fb510728ce2f10b951f208ceb1ab9b38cd52aca9e3c86a238588de5f5ddcd2cd1a39f28e376fbd162b7b194bc33ecca1863dd0c086ddad858f3336ab4b1aa5159fe039256316f0c4befb2b170925889b2b240248e14d728d79a971e557871aa4b0e693fcc35ee77b19e6a5a8ed502649bab251fab28acd879ee847d3566972dbc10a2ee5b588293074f76e4618e2e27b103a82aad9d0ef338ae3c308fa3794a9055f6796e5ed9be4d49425e5e2b458722e94a35345e33be436d36ec5693ab4daf527db1b505c4641d7d97e10ceecaac3bb80353c12644226f5f47b1a89f5fbb189d69d931bca39bf6c19d6a63298ee6a7985616f4a111d3f9dc7f364581bcfeb86b964ea7ed67e8da0c1915e4e15d257748f8b42f73b522874af144962ed9eaa39cddbe5b9e8c54d2938d48565ee554a3981db131b3249689bc60ad5d2772bd933152a79bd64b28197acb12ff25d9c7312b902830427d89fc6998a857eecb09694945e36de7804a193d7338c64ee5f34c1a5097eed2170542db4fae577cc68f55e941392bfcd8cdc3ba4e231453e46f9b02484cb24967bfa7367571e4c2220c26b2c1cde993394abac0f1147c53b044f0dc3e2feaebf1d4f9fb899099e3a185b8f5663a3a2a52aed6b8d1ae64e833a7a125ca694d5255f2d876a3360811e7ca44db8a22617be176e7c9ce01e5c663cf3ca9d468640db26128b1fd20b77fa4a0ce3809fb34c0e50f64821d31a1f0cd3172ff265c44586af2efd57576c447e015a24a242d59287aab8b0e2ab1bbd9a13c987add50db7a60f4c97cdab6ab77acdc08dd75b6d83294a9eb2dd3ea479e515e71fb90b8a45253bb409797034cc6f3bd3b746cfccf98c9f9a5604fa8d13122f9eee0394e0630edc070686b7e4010e5adc2cc30dc7cca32c79ae27303ab41844b0ff3d26f5b75c58e4874bc5a1a094bf2e6fa10da836467d7962b99d34e4a6276d4cb9f1a5889e410a4fdebc2ff9cc87d5d23dc304b660ef5fbbe4695aeffadf09ef544fd8226866108f07ff43b02cd06f5319cf6094ae621b908f6e5ed8746525e8e05b53aa8bc432650cf2e8e44cbad0be6b133500f54c250a6b1922891bf9519520f1b4830ad32af5f248efb16cb6a098ecdd330eebe2d3080ea2fbb5f29127245b118c165398255e4cb3368ee5717cfe03470e5669f6d8b31c4d53e7456a3c1ad4a786f3eb60dee2cf9b43caf9c59a8c0a41718f300184fadcad4e4d661e368a0b83fe43b6d9770f17a19f644af28297650b66afa64c94a532c041c6ff20d0aab39d02af7a2608a20f42683106370ab4dcf9cbef9d418",
"ba00e653ae688fb9f245a02fa7e754caf2795e8e078bb898d2681a171309189e4ef7d6b7713493e92726f39b14d657b57b8e02ec57a36d30c466767b67513d2392c79e4c6638b2b48f8d147013062903d65625ba6f761e20b62b53c5dde6aac4b04d121a48b3d37b5f40bd565ce680fa36700f7c7b08a211c8d2713d55d0be3fb8a654383da4c5a8469c043634a8b291f5449e700448f625f03679d03d751bde767538a74b473b42812d37ac4b85c8b6acea66a9eab463b1a5ab630c5be7bddf898024ce35677ae67a197649ea7b4ac372bb6b32421a941c29952614cbb5ce6b3eab9bb83a82ceca37fcf3627c19a320ddd4db063581c4e509d51f8d4483741c038b22ee338b5c07f111e06f5182cff5abcda292f662b785707d6e7e3d7fdcfc7972df3ca93a4f033248d45a1be943ee6052fae566cb985cde73cae96a5106b18bf828acbbc69cb5b1b414adf2a3dcc8afc95e9920ea725ad02c9a1424d7a385e34464124b0e6f3b94d4d75cc4fca95bb6b7980b114442c45d32f4c70da31bdc81a46fa2577583c49409fa834b52bc399648f1b7779b7f1666aa65e2f331b872d62218f233dd7acf2a2f2c31ea3e48836d4b13e4d77da7d82bc8d3c7d456727a47a8348b34f5a361ef951d628bb0f9f1f138a34864ff9854b9d9c48b019ac8495141adc4a9b79bb56fb4f35363ebe476aba6fdb1088a7ac630ee6dd2810962748546c3162a1885a5da468d8d5e50808dae2b31804d33353cb4f181199b665b94a832144709434433ed22e86b2da38597f4c054c6864c34fe94fa26e2cce432a8a12ed2d0c98617b67bd1931d11716111784f25b3811885e53c491559b9c1f4febad2245ed3a947748d76860fdcf06817db12c85769c48a4fbe5ed18339963b5f4884a135505a9d43194689e1e5b906d3a0922428e63be05d33cd2cbacec1a43b28825173fae5f115b7b728fe30cd836d4f5410122eaa9b5d5218d353a012faed8f39cd4ea14c0bfd53466f5e4355916e539d67f8fa18da25a723319d423a2d8e4d94c9a970cb960595788885ff37437a35c95ec897b914425088eeb0d9acaa311246620516db7d2b2742e763c018b749d59271f31cf9ebbbebd2b1060a552bd2b19f399c3ddacceb346dafbe71d47521f92e76f835163d2ecf396b3d569a8ddb24d91693259b9d9f892a2333a1b39e49ee6da6a8d99c2c3d73c37cc35438e3d8b5be929a1a68d894db2274a6a5d133365343270f5d78623298f67e369d01eb96b4ebc63ca81be3155b52e4a49756aea7ee6ff71b09d7a46ca4f604db7a37dcef76f621fbef5463b472487c7d74ebc6d2c6a3a4bed48e3cc732687b50a35d18a41c91d18a93d16ce6ed33fc8500df5732b53913d89bfada63223614edb987d7f20e0c9b7d9521450249cd63a0f3fd45099d3919bc82748291b3a3092366c49a68bd8a7fee3d9ab9c59846b4c7de325c8d0963f9611095970e425546b29c94d0db89913867897b38844e3f90a24314e44aa00fe65fcb1137262176d64e669f2e5e00a14bd4df2188fc0c02c15abd428846d6591e59dd3c23306bb25ac595508df65ee7d706dcd3ef50db3cb936645498a52f0979c8a21cd43968c9911b6474ce65dfd73689b67363abedad99b63b47666874c537db0a12a72db456940c71fdf5d2dc0e24ad8f545c946cab9617613646e5baaacd7bfe8cd7b60fb684d3d0e7271197405b335e82a99db55b0f1fdaa537445a",
"ba00c9d7a3eb3aacbceb28e83452b154fc55ffadb9c4548c9a3b0fb2c6f4d3deee5a3310412630c54d7b4619947f218aebd1a932a87e14669f668a59dea77771c4ea62215b9de8872ebd1986d10e7e394913cdd093c8d6ed8f553dd9a14fff8949726897ac836b152468a6ea7f668c2bca7b6ecc99aa3f1507917da66bca84d0a045bcb9b3dd5e8a8b046e725a4b5a12a61c1d7df1f7ec7b113e46439bddb63e0eb7b8d4aa25c2b71a11af4241c99bbf54ac493254177fe24cd63112c627611d569c8a7c1e3e9d65d18f4debe0a045f4eff344ecec9b234e1b4d15ba610ebfd757ec7484dbd0dd62dcd64832dd0d51dc384ad4b4950d0b944a25e848a757d97af6c23c8f0f61a131aef7737273dfc8e31772eaf4390d34739b3f95c14cf1f3b2f59ec23ac22c14883d195b64bff9ed3896ec30a9baec52c5f8deb18b44296ca790a6ee3d16187f710ae7c27bb2f779f84fce13b8955272f72f5ee0b5deac5cc8be7d8d36acb3665297390c51f9ba41157fd511ee5a306551c0cdeb37709911a5d262ce3c94a8d23104933bb1def13c1098fbebab67a570bd79f4df7bcaa5a9fe4d963ffdaef9536c918ad1e3a0feeeed24a49ebdb41aecd5545924747e168227d4d9203a14eb184fb444ec66fd4bae057552644d34aa12e0d62c17a3dec6c9d89639688a5cd0f844d8a290b237097838d066a912231abd2e454aeed5e0382c60a5bacc3e9dc3aaa96d34215ab8e77ccc21a076777cf4d6f7565e740b0682c0b9b2d9deb39aff247f0bda7a65fc4a2b197f9c4d9826d35a5a9b468c8b51dc771718c0191a0b6be52811877a612dd36f18ef75eb69f1c947eaee4f3c8ec21bfcc9937ef6cbd791c147dbb427768554f744c1618bf7e850897aab32257143aabdcf29a897099b6b9a284d8c82f3b191d304f351f1fa23a584781dc9fed490d6faaebf210d582a0febff1bd6c40f6cb26fffed6210ceaa88d824d58566c0b1705d18a31179dbf28a9f95a7f44e6f1b17633ac19bddc54b4121e7eb9e6b0ec5da626689a59692903333882d8684843a086170fddd1a8d764db9d5220eded208d40d8e4749feb85818b7cf0dc171d08896649071597c3715b876a8782360395d466a4b6095752c3736619e818c730bd4bf58683c6ef259075e941f0d59086ff7a8467116fd9035ae372f8aa2529234f119285668425e19bd1342b97ea59aa8ed89a16c91342b1e686443cc8eb739429191c8a306196dcdf675e48d0a9dcc6aa1e190421635a178acbdf6d2382610b530e39bb36d5a579bf7026edbbaa83ae28fc93231d6efc5c15fa626d629ff709d2eb7c99119a0c9b9eec61faf18fb789384ef34c95e511a3fa5988c962cdbcd4646175b2a25a7952ca9f66e87ec11cb1f4d4792de2ca3f78e70e91ce475dda861a50ecf693a99f0b571e3571258779baecf438919eee69d7fc33a80a56a28b2a8bc2c84b978dee79ba6bf6cf34537734c12b3cadff71373231971e2d1f6939ad4a2a7c759b088100ffd0713c3fef7385a8ddacac12b46d92edd989d04f4d9f97bdc4e8d11b2d8949759cca32e68aa11457cdacd6c75c357770c261d0ecec4fb5785f8d256f38dd18b6e11dc8d47a5ddaaa56fda04ca5c3f04397163e4155d1ad6d15296f7c519f069d208910e64d226159bf73329db168d188462b57ac39087b6ba6326c7aa171087326de7d5ad45c8133e7108664210bbe97cd8429dcfed6c23dee8c39240",
"ba00cfaaf6780c6984464f34352dd241ff140c9c0d1043ad5bd61f60a598559e75b5ce7792d5f264975cea9c94cf5072e5949258a942ead34b9cf90472886a4b2dcc6489c692b49f413c8a8f009040212f23a6e5f9a39827275582f6d7502e322a7ba76ad521246c143506621c6a66da066b2a505248c9ea6766b0f367937cfe6cc29538a1b9e8b14905c9f44d3dc6f529db3e4c011b1b93eb07b5f34df215b668f05b5c4a793187fbb50869e9670a989df6cab4335edd0abc7a1d24cdd2971a97566eb0e539cdbd55527b4ba2dff8953053588d4d6a8d1de97b163d765b8d96539e7c9b1e43d1a4f53cccfd0ad71e651e566ff9d0db8e0d1b2ece6e86bdf1e0c61ff4f22786b3ea965493913f443213747b24a0a719fb3a4e3bdebb07147be44d06fad90398529a8a2400e2c1d138ebc2813b6a8222899fddf398e87594a6fd1c20cf0f8dc747ff2ce7b204780f450fc99f2a1cc86d18c64f9e0cf9768ba52b04e0949747ec8120aa9fa6032f72f0068b9c4715264ef6cca2c902f5c3b32a2bae211ebd5659eb5d1255ac61167d7b03a930c6fd1e4f6998451704d555a3273ebfad9278a4255b3e436d4d13fb10ab4639fe0c84de5ad791e18966316c86cd52423b78572361db31c9e6334a91210be709d7b5c963a6ed07d4a7b3697f47715336942c111237651aab1b625236a0b84ebe388b877b3690c7e72f5f5b58b2e39feed34bb125120efc39c3bd2d1086a6acb633bade55a73e7191564b2305227aa69a218eb64a792635926999e81b3f4f40063d6697b3b1ea6b88aaf1f92a54cb0aee5d5e5d7da1dc62080903eb52670c637eb8d8e60e7971896adb9c4437250fede62dd33562a7091e9e4a9aaa3cf79919d246d94a2b1dac7d0f317bf5126428a29217679149d5cb940de38787afff20a5e2716d33f73c5a48bf2f39d47b74569ad26fe164c44d8e6a19d96625a359ebb32c2ea9beba2c71247af54fd8a2f20405dcedd19368e6a32bfc892a1cab6de6748e41e43b2e49b06ad84c37bda0ee5b45f597680ab664af37e2a19dfdecddd21d53cf47358f0da7486724e9c31c843c3d24c760ad746a33662447f8a9766e82d14673c42d187db56ed60497a8b11112b3f33e295f3608c4165c2f7f3bd1d53d7146ece734d371126ebbc853cda0b71dae954d2f81a833646377488cc55c65da3b1ab05526f0bb7b9d22ecc01a3e014664d1eaf412a0cf75b50fcfd1086bd748a69541861494afe8432e73d5496c7d187c6d51c6d521b6a9d3ae8badf278b1d3c94e6299e601abce22aa0b50d743be1b0b3b0c8923c65d6af53a790a367ccc4817bea68d257a3ef16cc66ae19f6b4f7692531b4f8afb7bacfdeeb191a9aac6926e1ddcb30b9846e673ef7dcf9ce6a0d474c1ab5570f6f509c9477792a1edcf69ca7e2ec70737eab787686d31992369577433b9672b608794174e1b389fd7844df5b2e852dd22d3d725585bca5284b1cc373220ac5a88cca72b40c80e97786a1a5b39b3f49468444f0b197e6497daf34275718dac4dafd5c3d03612a3cc5c6b2d6c69b98a6dd9f9b2344112ea35521511cebf903793d38494f36829afdfd55b40aa50072c98a7ce9f4525769b7cd573b71948caa6e4f6c7e5b5686b0ace38521e3392f8cc26dae7d19feee2b5e6cd419e2f3a9895e6c5028a26e99f2ac29f671c7dd3cf38ca4c0e0f6220ab2142b6c52419bf726186854f5babab36fcdbb38f9c",
}
func testKAT(t *testing.T, msgLen int) {
msgrng := sha3.NewShake256()
fmt.Fprintf(msgrng, "msg-%04d", msgLen)
msg := make([]byte, msgLen)
msgrng.Read(msg)
keySeed := fmt.Sprintf("key-%04d", msgLen)
_, priv, err := GenerateKey([]byte(keySeed))
if err != nil {
t.Fatalf("failed to generate keys. err message: %s", err)
}
sig, err := priv.SignCompressed(msg)
if err != nil {
t.Fatalf("failed to sign keys. err message: %s", err)
}
if s := hex.EncodeToString(sig); s != kats[msgLen] {
t.Fatalf("kat %d: got %s, want %s", msgLen, s, kats[msgLen])
}
}
func TestKATs(t *testing.T) {
for i := range kats {
testKAT(t, i)
}
}
func TestFalcon(t *testing.T) {
mathrand.Seed(time.Now().Unix())
for count := 0; count < 64; count++ {
seed := make([]byte, 64)
rand.Read(seed)
pub, priv, err := GenerateKey(seed)
if err != nil {
t.Fatalf("failed to generate keys. err message: %s", err)
}
msg := make([]byte, 500)
rand.Read(msg)
sig, err := priv.SignCompressed(msg)
if err != nil {
t.Fatalf("failed to sign message. err message: %s on pk: %v , sk: %v, msg: %v", err, pub, priv, msg)
}
err = pub.Verify(sig, msg)
if err != nil {
t.Fatalf("failed to verify message. err message: %s on pk: %v , sk: %v, msg: %v", err, pub, priv, msg)
}
v := sig.SaltVersion()
if v != CurrentSaltVersion {
t.Fatalf("unexpected salt version: %d", v)
}
badmsg := make([]byte, len(msg))
copy(badmsg, msg)
// Flip a random bit in the message.
badmsg[mathrand.Intn(len(msg))] ^= 1 << mathrand.Intn(8)
err = pub.Verify(sig, badmsg)
if err == nil {
t.Fatalf("expected verify to fail on modified message. on pk: %v , sk: %v, msg: %v", pub, priv, msg)
}
badpub := PublicKey{}
copy(badpub[:], pub[:])
badpub[mathrand.Intn(len(pub))] ^= 1 << mathrand.Intn(8)
err = badpub.Verify(sig, msg)
if err == nil {
t.Fatalf("expected verify to fail with modified public key. on pk: %v , sk: %v, msg: %v", pub, priv, msg)
}
sigCT, err := sig.ConvertToCT()
if err != nil {
t.Fatalf("failed to conver sign to CT. err: %s on pk: %v , sk: %v, msg: %v", err, pub, priv, msg)
}
err = pub.VerifyCTSignature(sigCT, msg)
if err != nil {
t.Fatalf("verify_ct failed err msg %s on pk: %v , sk: %v, msg: %v", err, pub, priv, msg)
}
h, err := pub.Coefficients()
if err != nil {
t.Fatalf("pubkey coefficients failed: %s", err)
}
c := HashToPointCoefficients(msg, sigCT.SaltVersion())
s2, err := sigCT.S2Coefficients()
if err != nil {
t.Fatalf("s2 coefficients failed: %s", err)
}
s1, err := S1Coefficients(h, c, s2)
if err != nil {
t.Fatalf("s1 coefficients failed: %s", err)
}
_ = s1
}
}
func TestFalconCompressedSignatureSizes(t *testing.T) {
seed := make([]byte, 64)
rand.Read(seed)
pub, priv, err := GenerateKey(seed)
if err != nil {
t.Fatalf("failed to generate keys. err message: %s", err)
}
msg := make([]byte, 500)
rand.Read(msg)
sig, err := priv.SignCompressed(msg)
if err != nil {
t.Fatalf("failed to sign message. err message: %s", err)
}
var sig2 [SignatureMaxSize + 1]byte
copy(sig2[:], sig)
err = pub.Verify(sig2[:], msg)
if err == nil || !strings.Contains(err.Error(), "-4") {
t.Fatalf("verification succeeded. should have failed.")
}
}
func TestFalconSignNilMessage(t *testing.T) {
seed := make([]byte, 64)
rand.Read(seed)
pub, priv, err := GenerateKey(seed)
if err != nil {
t.Fatalf("failed to generate keys. err message: %s", err)
}
sig, err := priv.SignCompressed(nil)
if err != nil {
t.Fatalf("failed to sign message. err message: %s", err)
}
err = pub.Verify(sig, nil)
if err != nil {
t.Fatalf("failed to verify message. err message: %s", err)
}
err = pub.Verify(sig, []byte{})
if err != nil {
t.Fatalf("failed to verify message. err message: %s", err)
}
ctSignature, err := sig.ConvertToCT()
if err != nil {
t.Fatalf("failed to verify message. err message: %s", err)
}
err = pub.VerifyCTSignature(ctSignature, nil)
if err != nil {
t.Fatalf("failed to verify message. err message: %s", err)
}
err = pub.VerifyCTSignature(ctSignature, []byte{})
if err != nil {
t.Fatalf("failed to verify message. err message: %s", err)
}
}
func TestFalconGenerateKeysDifferentSeed(t *testing.T) {
seed := make([]byte, 64)
rand.Read(seed)
pub, sk, err := GenerateKey(seed)
if err != nil {
t.Fatalf("failed to generate keys. err message: %s", err)
}
seed2 := make([]byte, 64)
rand.Read(seed2)
if bytes.Compare(seed, seed2) == 0 {
t.Fatalf("Seeds are the same")
}
pub2, sk2, err := GenerateKey(seed2)
if err != nil {
t.Fatalf("failed to generate keys. err message: %s", err)
}
if pub == pub2 {
t.Fatalf("public keys are the same")
}
if sk == sk2 {
t.Fatalf("private keys are the same")
}
}
func TestFalconNilSignature(t *testing.T) {
seed := make([]byte, 64)
rand.Read(seed)
pub, _, err := GenerateKey(seed)
if err != nil {
t.Fatalf("failed to generate keys. err message: %s", err)
}
msg := make([]byte, 500)
rand.Read(msg)
err = pub.Verify(nil, msg)
if err == nil {
t.Fatalf("verification succeeded. should have failed.")
}
err = pub.Verify([]byte{}, msg)
if err == nil {
t.Fatalf("verification succeeded. should have failed.")
}
}
func TestFalconNilSeed(t *testing.T) {
_, _, err := GenerateKey(nil)
if err != nil {
t.Fatalf("failed to generate keys with nil. err message: %v", err)
}
_, _, err = GenerateKey([]byte{})
if err != nil {
t.Fatalf("failed to generate keys with empty byte slice. err message: %v", err)
}
}
func TestSaltedVersions(t *testing.T) {
emptyCTSig := CTSignature{}
if emptyCTSig.SaltVersion() != 0 {
t.Fatalf("expected salt value to be error")
}
emptyCompressSig := CompressedSignature{}
if emptyCompressSig.SaltVersion() != 0 {
t.Fatalf("expected salt value to be error")
}
emptyCompressSig = []byte{0x0}
if emptyCompressSig.SaltVersion() != 0 {
t.Fatalf("expected salt value to be error")
}
}
type PointerToPointerPanicGenerator struct {
seed [32]byte
msg [128]byte
sig CompressedSignature
ctsig CTSignature
pub PublicKey
priv PrivateKey
p *int
}
func TestPointerToPointer(t *testing.T) {
r := 42
v := &PointerToPointerPanicGenerator{
p: &r,
}
rand.Read(v.seed[:])
rand.Read(v.msg[:])
var err error
v.pub, v.priv, err = GenerateKey(v.seed[:])
if err != nil {
t.Fatalf("failed to generate keys: %s", err)
}
_, _, err = GenerateKey(nil)
if err != nil {
t.Fatalf("failed to generate keys from empty seed: %s", err)
}
v.sig, err = v.priv.SignCompressed(v.msg[:])
if err != nil {
t.Fatalf("failed to sign message: %s", err)
}
if err := v.pub.Verify(v.sig, v.msg[:]); err != nil {
t.Fatalf("failed to verify sig: %s", err)
}
sig2, err := v.priv.SignCompressed(nil)
if err != nil {
t.Fatalf("failed to sign empty message. err message: %s", err)
}
if err := v.pub.Verify(sig2, nil); err != nil {
t.Fatalf("failed to verify sig on empty message: %s", err)
}
v.ctsig, err = v.sig.ConvertToCT()
if err != nil {
t.Fatalf("failed to convert signature: %s", err)
}
if err := v.pub.VerifyCTSignature(v.ctsig, v.msg[:]); err != nil {
t.Fatalf("failed to verify ct signature: %s", err)
}
ctSig2, err := sig2.ConvertToCT()
if err != nil {
t.Fatalf("failed to convert signature of empty message: %s", err)
}
if err := v.pub.VerifyCTSignature(ctSig2, nil); err != nil {
t.Fatalf("failed to verify ct signature of empty message: %s", err)
}
_, err = v.pub.Coefficients()
if err != nil {
t.Fatalf("failed to compute pubkey coefficients: %s", err)
}
_, err = v.ctsig.S2Coefficients()
if err != nil {
t.Fatalf("failed to compute s2 coefficients: %s", err)
}
_ = HashToPointCoefficients(nil, 0)
_ = HashToPointCoefficients(v.msg[:], 0)
}
func BenchmarkFalconKeyGen(b *testing.B) {
var seed [48]byte
rand.Read(seed[:])
b.ResetTimer()
for i := 0; i < b.N; i++ {
GenerateKey(seed[:])
}
}
func BenchmarkFalconSignCompressed(b *testing.B) {
_, sk, err := GenerateKey([]byte("seed"))
if err != nil {
b.Fatalf("GenerateKey with error %v", err)
}
strs := make([][64]byte, b.N)
for i := 0; i < b.N; i++ {
var msg [64]byte
rand.Read(msg[:])
strs[i] = msg
}
b.ResetTimer()
for i := 0; i < b.N; i++ {
sk.SignCompressed(strs[i][:])
}
}
func BenchmarkFalconVerify(b *testing.B) {
pk, sk, err := GenerateKey([]byte("seed"))
if err != nil {
b.Fatalf("GenerateKey with error %v", err)
}
strs := make([][64]byte, b.N)
sigs := make([]CompressedSignature, b.N)
for i := 0; i < b.N; i++ {
var msg [64]byte
rand.Read(msg[:])
strs[i] = msg
sigs[i], err = sk.SignCompressed(msg[:])
if err != nil {
b.Fatalf("SignCompressed failed with error %v", err)
}
}
b.ResetTimer()
for i := 0; i < b.N; i++ {
pk.Verify(sigs[i], strs[i][:])
}
}