summaryrefslogtreecommitdiffstats
path: root/test/mirror_vfd.c
blob: 7047146c1446dca70eee28c4de0de71c4f4db402 (plain)
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
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Copyright by The HDF Group.                                               *
 * All rights reserved.                                                      *
 *                                                                           *
 * This file is part of HDF5.  The full HDF5 copyright notice, including     *
 * terms governing use, modification, and redistribution, is contained in    *
 * the COPYING file, which can be found at the root of the source code       *
 * distribution tree, or in https://www.hdfgroup.org/licenses.               *
 * If you do not have access to either file, you may request a copy from     *
 * help@hdfgroup.org.                                                        *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

/*
 * Purpose: Test the Mirror VFD functionality.
 */

/* WARNING: The use of realpath() is probably system-dependent, as are
 * other things here such as the socket calls.
 * Notable to realpath() in particular is the use of "PATH_MAX", which
 * apparently has some major potential issues if paths are abused.
 * http://insanecoding.blogspot.com/2007/11/pathmax-simply-isnt.html
 * so BE CAREFUL about the paths we throw around?
 */

#include "h5test.h"
#include "cache_common.h"
#include "genall5.h"

#ifdef H5_HAVE_MIRROR_VFD

#include "H5FDmirror_priv.h" /* Private header for the mirror VFD */

/* For future consideration, IP address and port number might be
 * environment variables?
 */
#define SERVER_IP_ADDRESS "127.0.0.1"

/* Primary listening port on server. */
#define SERVER_HANDSHAKE_PORT 3000

#define DATABUFFER_SIZE 128
#define DSET_NAME_LEN   16

/* Parameters for the "large chunked dataset" writing */
#define MAX_DSET_COUNT 255
#define DSET_DIM       32
#define CHUNK_DIM      8

#define CONCURRENT_COUNT 3 /* Number of files in concurrent test */

/* Macro: LOGPRINT()
 * Prints logging and debugging messages to the output stream based
 * on the level of verbosity.
 *     0 : no logging
 *     1 : errors only
 *     2 : details
 *     3 : all
 */
#define DEFAULT_VERBOSITY 1
static unsigned int g_verbosity = DEFAULT_VERBOSITY;

/* Macro for selective debug printing / logging */
#define LOGPRINT(lvl, ...)                                                                                   \
    do {                                                                                                     \
        if ((lvl) <= g_verbosity) {                                                                          \
            HDfprintf(g_log_stream, __VA_ARGS__);                                                            \
            HDfflush(g_log_stream);                                                                          \
        }                                                                                                    \
    } while (0)

#define MIRROR_RW_DIR "mirror_rw/"
#define MIRROR_WO_DIR "mirror_wo/"

/* String buffer for error messages */
#define MIRR_MESG_SIZE 128
static char mesg[MIRR_MESG_SIZE + 1];

/* Convenience structure for passing file names via helper functions.
 */
struct mirrortest_filenames {
    char rw[H5FD_SPLITTER_PATH_MAX + 1];
    char wo[H5FD_SPLITTER_PATH_MAX + 1];
    char log[H5FD_SPLITTER_PATH_MAX + 1];
};

static FILE *g_log_stream = NULL; /* initialized at runtime */

static herr_t _verify_datasets(unsigned min_dset, unsigned max_dset, hid_t *filespace_id, hid_t *dataset_id,
                               hid_t memspace_id);

static herr_t _create_chunking_ids(hid_t file_id, unsigned min_dset, unsigned max_dset, hsize_t *chunk_dims,
                                   hsize_t *dset_dims, hid_t *dataspace_ids, hid_t *filespace_ids,
                                   hid_t *dataset_ids, hid_t *memspace_id);

static herr_t _close_chunking_ids(unsigned min_dset, unsigned max_dset, hid_t *dataspace_ids,
                                  hid_t *filespace_ids, hid_t *dataset_ids, hid_t *memspace_id);

static herr_t _populate_filepath(const char *dirname, const char *_basename, hid_t fapl_id, char *path_out,
                                 hbool_t h5suffix);

static hid_t create_mirroring_split_fapl(const char *_basename, struct mirrortest_filenames *names);

static void mybzero(void *dest, size_t size);

/* ----------------------------------------------------------------------------
 * Function:   mybzero
 *
 * Purpose:    Have bzero simplicity and abstraction in (possible) absence of
 *             it being available.
 *
 * Programmer: Jacob Smith
 *             2020-03-30
 * ----------------------------------------------------------------------------
 */
static void
mybzero(void *dest, size_t size)
{
    size_t i = 0;
    char * s = NULL;
    HDassert(dest != NULL);
    s = (char *)dest;
    for (i = 0; i < size; i++) {
        *(s + i) = 0;
    }
} /* end mybzero() */

/* ----------------------------------------------------------------------------
 * Function:   _populate_filepath
 *
 * Purpose:    Given a directory name and a base name, concatenate the two and
 *             run h5fixname() to get the "actual" path to the intended target.
 *             `h5suffix' should be FALSE to keep the base name unaltered;
 *             TRUE will append the '.h5' h5suffix to the basename...
 *             FALSE -> h5fixname_no_suffix(), TRUE -> h5fixname()
 *             <h5fixname_prefix> / <dirname> / <_basename> <h5prefix?>
 *
 * Programmer: Jacob Smith
 *             2019-08-16
 * ----------------------------------------------------------------------------
 */
static herr_t
_populate_filepath(const char *dirname, const char *_basename, hid_t fapl_id, char *path_out,
                   hbool_t h5suffix)
{
    char _path[H5FD_SPLITTER_PATH_MAX];

    if ((_basename == NULL) || (*_basename == 0) || (dirname == NULL) || (*dirname == 0) ||
        (path_out == NULL)) {
        TEST_ERROR;
    }

    if (HDsnprintf(_path, H5FD_SPLITTER_PATH_MAX, "%s%s%s", dirname,
                   (dirname[HDstrlen(dirname)] == '/') ? "" : "/", /* slash iff needed */
                   _basename) > H5FD_SPLITTER_PATH_MAX) {
        TEST_ERROR;
    }

    if (h5suffix == TRUE) {
        if (h5_fixname(_path, fapl_id, path_out, H5FD_SPLITTER_PATH_MAX) == NULL) {
            TEST_ERROR;
        }
    }
    else {
        if (h5_fixname_no_suffix(_path, fapl_id, path_out, H5FD_SPLITTER_PATH_MAX) == NULL) {
            TEST_ERROR;
        }
    }

    return SUCCEED;

error:
    return FAIL;
} /* end _populate_filepath() */

/* ---------------------------------------------------------------------------
 * Function:    build_paths
 *
 * Purpose:     Convenience function to create the three file paths used in
 *              most mirror tests.
 *
 * Return:      SUCCEED/FAIL
 *
 * Programmer:  Jacob Smith
 *              2019-08-16
 * ---------------------------------------------------------------------------
 */
static herr_t
build_paths(const char *_basename, H5FD_splitter_vfd_config_t *splitter_config,
            struct mirrortest_filenames *names)
{
    char baselogname[H5FD_SPLITTER_PATH_MAX];

    if (_populate_filepath(MIRROR_RW_DIR, _basename, splitter_config->rw_fapl_id, names->rw, TRUE) == FAIL) {
        TEST_ERROR;
    }

    if (_populate_filepath(MIRROR_WO_DIR, _basename, splitter_config->wo_fapl_id, names->wo, TRUE) == FAIL) {
        TEST_ERROR;
    }

    if (_basename == NULL || *_basename == 0)
        return FAIL;
    if (HDsnprintf(baselogname, H5FD_SPLITTER_PATH_MAX, "%s_err.log", _basename) > H5FD_SPLITTER_PATH_MAX) {
        TEST_ERROR;
    }

    if (_populate_filepath(MIRROR_WO_DIR, baselogname, splitter_config->wo_fapl_id, names->log, FALSE) ==
        FAIL) {
        TEST_ERROR;
    }

    return SUCCEED;

error:
    return FAIL;
} /* end build_paths() */

/* ---------------------------------------------------------------------------
 * Function:    test_fapl_configuration
 *
 * Purpose:     Test FAPL configuration and examination.
 *
 * Return:      Success: 0
 *              Failure: -1
 *
 * Programmer:  Jacob Smith
 *              2019-03-12
 * ---------------------------------------------------------------------------
 */
static int
test_fapl_configuration(void)
{
    hid_t              fapl_id;
    H5FD_mirror_fapl_t mirror_conf = {
        H5FD_MIRROR_FAPL_MAGIC,          /* magic */
        H5FD_MIRROR_CURR_FAPL_T_VERSION, /* version */
        SERVER_HANDSHAKE_PORT,           /* handhake_port */
        SERVER_IP_ADDRESS,               /* remote_ip "IP address" */
    };
    H5FD_mirror_fapl_t fa_out = {0, 0, 0, ""};

    TESTING("Mirror fapl configuration (set/get)");

    fapl_id = H5Pcreate(H5P_FILE_ACCESS);
    if (H5I_INVALID_HID == fapl_id) {
        TEST_ERROR;
    }

    if (H5Pset_fapl_mirror(fapl_id, &mirror_conf) == FAIL) {
        TEST_ERROR;
    }

    if (H5Pget_fapl_mirror(fapl_id, &fa_out) == FAIL) {
        TEST_ERROR;
    }
    if (H5FD_MIRROR_FAPL_MAGIC != fa_out.magic) {
        TEST_ERROR;
    }
    if (H5FD_MIRROR_CURR_FAPL_T_VERSION != fa_out.version) {
        TEST_ERROR;
    }
    if (SERVER_HANDSHAKE_PORT != fa_out.handshake_port) {
        TEST_ERROR;
    }
    if (HDstrncmp(SERVER_IP_ADDRESS, (const char *)fa_out.remote_ip, H5FD_MIRROR_MAX_IP_LEN)) {
        TEST_ERROR;
    }

    if (H5Pclose(fapl_id) == FAIL) {
        TEST_ERROR;
    }

    PASSED();
    return 0;

error:
    if (H5I_INVALID_HID != fapl_id) {
        (void)H5Pclose(fapl_id);
    }
    return -1;
} /* end test_fapl_configuration() */

#define PRINT_BUFFER_DIFF(act, exp, len)                                                                     \
    do {                                                                                                     \
        size_t _x = 0;                                                                                       \
        while ((act)[_x] == (exp)[_x]) {                                                                     \
            _x++;                                                                                            \
        }                                                                                                    \
        if (_x != (len)) {                                                                                   \
            size_t _y = 0;                                                                                   \
            HDprintf("First bytes differ at %zu\n", _x);                                                     \
            HDprintf("exp  ");                                                                               \
            for (_y = _x; _y < (len); _y++) {                                                                \
                HDprintf("%02X", (unsigned char)(exp)[_y]);                                                  \
            }                                                                                                \
            HDprintf("\nact  ");                                                                             \
            for (_y = _x; _y < (len); _y++) {                                                                \
                HDprintf("%02X", (unsigned char)(act)[_y]);                                                  \
            }                                                                                                \
            HDprintf("\n");                                                                                  \
        }                                                                                                    \
    } while (0); /* end PRINT_BUFFER_DIFF */

/* ---------------------------------------------------------------------------
 * Function:    test_xmit_encode_decode
 *
 * Purpose:     Test byte-encoding operations for network transport.
 *
 * Return:      Success: 0
 *              Failure: -1
 *
 * Programmer:  Jacob Smith
 *              2020-02-02
 * ---------------------------------------------------------------------------
 */
static int
test_xmit_encode_decode(void)
{
    H5FD_mirror_xmit_t xmit_mock; /* re-used header in various xmit tests */

    TESTING("Mirror encode/decode of xmit elements");

    /* Set bogus values matching expected; encoding doesn't care
     * Use sequential values to easily generate the expected buffer with a
     * for loop.
     */
    xmit_mock.magic         = 0x00010203;
    xmit_mock.version       = 0x04;
    xmit_mock.session_token = 0x05060708;
    xmit_mock.xmit_count    = 0x090A0B0C;
    xmit_mock.op            = 0x0D;

    /* Test uint8_t encode/decode
     */
    do {
        unsigned char buf[8];
        unsigned char expected[8];
        const uint8_t v   = 200;
        unsigned char out = 0;

        /* Start of buffer uint8_t
         */
        mybzero(buf, 8);
        mybzero(expected, 8);
        expected[0] = 200;
        out         = 0;
        if (H5FD__mirror_xmit_encode_uint8(buf, v) != 1) {
            TEST_ERROR;
        }
        if (HDmemcmp(buf, expected, 8) != 0) {
            PRINT_BUFFER_DIFF(buf, expected, 8);
            TEST_ERROR;
        }
        if (H5FD__mirror_xmit_decode_uint8(&out, buf) != 1) {
            TEST_ERROR;
        }
        if (v != out) {
            TEST_ERROR;
        }

        /* Middle of buffer uint8_t
         */
        mybzero(buf, 8);
        mybzero(expected, 8);
        expected[3] = v;
        out         = 0;
        if (H5FD__mirror_xmit_encode_uint8((buf + 3), v) != 1) {
            TEST_ERROR;
        }
        if (HDmemcmp(buf, expected, 8) != 0) {
            PRINT_BUFFER_DIFF(buf, expected, 8);
            TEST_ERROR;
        }
        if (H5FD__mirror_xmit_decode_uint8(&out, (buf + 3)) != 1) {
            TEST_ERROR;
        }
        if (v != out) {
            TEST_ERROR;
        }

        /* End of buffer uint8_t
         */
        mybzero(buf, 8);
        mybzero(expected, 8);
        expected[7] = v;
        out         = 0;
        if (H5FD__mirror_xmit_encode_uint8((buf + 7), v) != 1) {
            TEST_ERROR;
        }
        if (HDmemcmp(buf, expected, 8) != 0) {
            PRINT_BUFFER_DIFF(buf, expected, 8);
            TEST_ERROR;
        }
        if (H5FD__mirror_xmit_decode_uint8(&out, (buf + 7)) != 1) {
            TEST_ERROR;
        }
        if (v != out) {
            TEST_ERROR;
        }

    } while (0); /* end uint8_t en/decode */

    /* Test uint16_t encode/decode
     */
    do {
        unsigned char  buf[8];
        unsigned char  expected[8];
        const uint16_t v   = 0x8F02;
        uint16_t       out = 0;

        /* Start of buffer uint16_t
         */
        mybzero(buf, 8);
        mybzero(expected, 8);
        expected[0] = 0x8F;
        expected[1] = 0x02;
        out         = 0;
        if (H5FD__mirror_xmit_encode_uint16(buf, v) != 2) {
            TEST_ERROR;
        }
        if (HDmemcmp(buf, expected, 8) != 0) {
            PRINT_BUFFER_DIFF(buf, expected, 8);
            TEST_ERROR;
        }
        if (H5FD__mirror_xmit_decode_uint16(&out, buf) != 2) {
            TEST_ERROR;
        }
        if (out != v) {
            TEST_ERROR;
        }

        /* Middle of buffer uint16_t
         */
        mybzero(buf, 8);
        mybzero(expected, 8);
        expected[3] = 0x8F;
        expected[4] = 0x02;
        out         = 0;
        if (H5FD__mirror_xmit_encode_uint16((buf + 3), v) != 2) {
            TEST_ERROR;
        }
        if (HDmemcmp(buf, expected, 8) != 0) {
            PRINT_BUFFER_DIFF(buf, expected, 8);
            TEST_ERROR;
        }
        if (H5FD__mirror_xmit_decode_uint16(&out, (buf + 3)) != 2) {
            TEST_ERROR;
        }
        if (out != v) {
            TEST_ERROR;
        }
        /* slice */
        if (H5FD__mirror_xmit_decode_uint16(&out, (buf + 4)) != 2) {
            TEST_ERROR;
        }
        if (out != 0x0200) {
            TEST_ERROR;
        }

        /* End of buffer uint16_t
         */
        mybzero(buf, 8);
        mybzero(expected, 8);
        expected[6] = 0x8F;
        expected[7] = 0x02;
        out         = 0;
        if (H5FD__mirror_xmit_encode_uint16((buf + 6), v) != 2) {
            TEST_ERROR;
        }
        if (HDmemcmp(buf, expected, 8) != 0) {
            PRINT_BUFFER_DIFF(buf, expected, 8);
            TEST_ERROR;
        }
        if (H5FD__mirror_xmit_decode_uint16(&out, (buf + 6)) != 2) {
            TEST_ERROR;
        }
        if (out != v) {
            TEST_ERROR;
        }

    } while (0); /* end uint16_t en/decode */

    /* Test uint32_t encode/decode
     */
    do {
        unsigned char  buf[8];
        unsigned char  expected[8];
        const uint32_t v   = 0x8F020048;
        uint32_t       out = 0;

        /* Start of buffer uint32_t
         */
        mybzero(buf, 8);
        mybzero(expected, 8);
        expected[0] = 0x8F;
        expected[1] = 0x02;
        expected[2] = 0x00;
        expected[3] = 0x48;
        out         = 0;
        if (H5FD__mirror_xmit_encode_uint32(buf, v) != 4) {
            TEST_ERROR;
        }
        if (HDmemcmp(buf, expected, 8) != 0) {
            PRINT_BUFFER_DIFF(buf, expected, 8);
            TEST_ERROR;
        }
        if (H5FD__mirror_xmit_decode_uint32(&out, buf) != 4) {
            TEST_ERROR;
        }
        if (out != v) {
            TEST_ERROR;
        }

        /* Middle of buffer uint32_t
         */
        mybzero(buf, 8);
        mybzero(expected, 8);
        expected[3] = 0x8F;
        expected[4] = 0x02;
        expected[5] = 0x00;
        expected[6] = 0x48;
        out         = 0;
        if (H5FD__mirror_xmit_encode_uint32((buf + 3), v) != 4) {
            TEST_ERROR;
        }
        if (HDmemcmp(buf, expected, 8) != 0) {
            PRINT_BUFFER_DIFF(buf, expected, 8);
            TEST_ERROR;
        }
        if (H5FD__mirror_xmit_decode_uint32(&out, (buf + 3)) != 4) {
            TEST_ERROR;
        }
        if (out != v) {
            TEST_ERROR;
        }
        /* slice */
        if (H5FD__mirror_xmit_decode_uint32(&out, (buf + 4)) != 4) {
            TEST_ERROR;
        }
        if (out != 0x02004800) {
            TEST_ERROR;
        }

        /* End of buffer uint32_t
         */
        mybzero(buf, 8);
        mybzero(expected, 8);
        expected[4] = 0x8F;
        expected[5] = 0x02;
        expected[6] = 0x00;
        expected[7] = 0x48;
        out         = 0;
        if (H5FD__mirror_xmit_encode_uint32((buf + 4), v) != 4) {
            TEST_ERROR;
        }
        if (HDmemcmp(buf, expected, 8) != 0) {
            PRINT_BUFFER_DIFF(buf, expected, 8);
            TEST_ERROR;
        }
        if (H5FD__mirror_xmit_decode_uint32(&out, (buf + 4)) != 4) {
            TEST_ERROR;
        }
        if (out != v) {
            TEST_ERROR;
        }

    } while (0); /* end uint32_t en/decode */

    /* Test uint64_t encode/decode
     */
    do {
        unsigned char  buf[16];
        unsigned char  expected[16];
        const uint64_t v   = 0x90DCBE17939CE4BB;
        uint64_t       out = 0;

        /* Start of buffer uint64_t
         */
        mybzero(buf, 16);
        mybzero(expected, 16);
        expected[0] = 0x90;
        expected[1] = 0xDC;
        expected[2] = 0xBE;
        expected[3] = 0x17;
        expected[4] = 0x93;
        expected[5] = 0x9C;
        expected[6] = 0xE4;
        expected[7] = 0xBB;
        out         = 0;
        if (H5FD__mirror_xmit_encode_uint64(buf, v) != 8) {
            TEST_ERROR;
        }
        if (HDmemcmp(buf, expected, 16) != 0) {
            PRINT_BUFFER_DIFF(buf, expected, 16);
            TEST_ERROR;
        }
        if (H5FD__mirror_xmit_decode_uint64(&out, buf) != 8) {
            TEST_ERROR;
        }
        if (out != v) {
            TEST_ERROR;
        }

        /* Middle of buffer uint64_t
         */
        mybzero(buf, 16);
        mybzero(expected, 16);
        expected[3]  = 0x90;
        expected[4]  = 0xDC;
        expected[5]  = 0xBE;
        expected[6]  = 0x17;
        expected[7]  = 0x93;
        expected[8]  = 0x9C;
        expected[9]  = 0xE4;
        expected[10] = 0xBB;
        out          = 0;
        if (H5FD__mirror_xmit_encode_uint64((buf + 3), v) != 8) {
            TEST_ERROR;
        }
        if (HDmemcmp(buf, expected, 16) != 0) {
            PRINT_BUFFER_DIFF(buf, expected, 16);
            TEST_ERROR;
        }
        if (H5FD__mirror_xmit_decode_uint64(&out, (buf + 3)) != 8) {
            TEST_ERROR;
        }
        if (out != v) {
            TEST_ERROR;
        }
        /* slice */
        if (H5FD__mirror_xmit_decode_uint64(&out, (buf + 6)) != 8) {
            TEST_ERROR;
        }
        if (out != 0x17939CE4BB000000) {
            TEST_ERROR;
        }

        /* End of buffer uint64_t
         */
        mybzero(buf, 16);
        mybzero(expected, 16);
        expected[8]  = 0x90;
        expected[9]  = 0xDC;
        expected[10] = 0xBE;
        expected[11] = 0x17;
        expected[12] = 0x93;
        expected[13] = 0x9C;
        expected[14] = 0xE4;
        expected[15] = 0xBB;
        out          = 0;
        if (H5FD__mirror_xmit_encode_uint64((buf + 8), v) != 8) {
            TEST_ERROR;
        }
        if (HDmemcmp(buf, expected, 16) != 0) {
            PRINT_BUFFER_DIFF(buf, expected, 16);
            TEST_ERROR;
        }
        if (H5FD__mirror_xmit_decode_uint64(&out, (buf + 8)) != 8) {
            TEST_ERROR;
        }
        if (out != v) {
            TEST_ERROR;
        }

    } while (0); /* end uint64_t en/decode */

    /* Test xmit header structure encode/decode
     * Write bogus but easily verifiable data to inside a buffer, and compare.
     * Then decode the buffer and compare the structure contents.
     * Then repeat from a different offset in the buffer and compare.
     */
    do {
        unsigned char      buf[H5FD_MIRROR_XMIT_HEADER_SIZE + 8];
        unsigned char      expected[H5FD_MIRROR_XMIT_HEADER_SIZE + 8];
        H5FD_mirror_xmit_t xmit_out;
        size_t             i = 0;

        /* sanity check */
        if (14 != H5FD_MIRROR_XMIT_HEADER_SIZE) {
            FAIL_PUTS_ERROR("Header size definition does not match test\n");
        }

        /* Populate the expected buffer; expect end padding of 0xFF
         */
        HDmemset(expected, 0xFF, H5FD_MIRROR_XMIT_HEADER_SIZE + 8);
        for (i = 0; i < H5FD_MIRROR_XMIT_HEADER_SIZE; i++) {
            expected[i + 2] = (unsigned char)i;
        }

        /* Encode, and compare buffer contents
         * Initial buffer is filled with 0xFF to match expected padding
         */
        HDmemset(buf, 0xFF, H5FD_MIRROR_XMIT_HEADER_SIZE + 8);
        if (H5FD_mirror_xmit_encode_header((buf + 2), &xmit_mock) != H5FD_MIRROR_XMIT_HEADER_SIZE) {
            TEST_ERROR;
        }
        if (HDmemcmp(buf, expected, H5FD_MIRROR_XMIT_HEADER_SIZE + 8) != 0) {
            PRINT_BUFFER_DIFF(buf, expected, H5FD_MIRROR_XMIT_HEADER_SIZE + 8);
            TEST_ERROR;
        }

        /* Decode from buffer
         */
        if (H5FD_mirror_xmit_decode_header(&xmit_out, (buf + 2)) != H5FD_MIRROR_XMIT_HEADER_SIZE) {
            TEST_ERROR;
        }
        if (xmit_out.magic != xmit_mock.magic)
            TEST_ERROR;
        if (xmit_out.version != xmit_mock.version)
            TEST_ERROR;
        if (xmit_out.session_token != xmit_mock.session_token)
            TEST_ERROR;
        if (xmit_out.xmit_count != xmit_mock.xmit_count)
            TEST_ERROR;
        if (xmit_out.op != xmit_mock.op)
            TEST_ERROR;

        /* Decode from different offset in buffer
         * Observe changes when ingesting the padding
         */
        if (H5FD_mirror_xmit_decode_header(&xmit_out, (buf)) != H5FD_MIRROR_XMIT_HEADER_SIZE) {
            TEST_ERROR;
        }
        if (xmit_out.magic != 0xFFFF0001)
            TEST_ERROR;
        if (xmit_out.version != 0x02)
            TEST_ERROR;
        if (xmit_out.session_token != 0x03040506)
            TEST_ERROR;
        if (xmit_out.xmit_count != 0x0708090A)
            TEST_ERROR;
        if (xmit_out.op != 0x0B)
            TEST_ERROR;

    } while (0); /* end xmit header en/decode */

    /* Test xmit set-eoa structure encode/decode
     * Write bogus but easily verifiable data to inside a buffer, and compare.
     * Then decode the buffer and compare the structure contents.
     * Then repeat from a different offset in the buffer and compare.
     */
    do {
        unsigned char          buf[H5FD_MIRROR_XMIT_EOA_SIZE + 8];
        unsigned char          expected[H5FD_MIRROR_XMIT_EOA_SIZE + 8];
        H5FD_mirror_xmit_eoa_t xmit_in;
        H5FD_mirror_xmit_eoa_t xmit_out;
        size_t                 i = 0;

        /* sanity check */
        if ((14 + 9) != H5FD_MIRROR_XMIT_EOA_SIZE) {
            FAIL_PUTS_ERROR("Header size definition does not match test\n");
        }
        if (xmit_mock.op != 0x0D) {
            FAIL_PUTS_ERROR("shared header structure is not in expected state");
        }

        /* Populate the expected buffer; expect end padding of 0xFF
         */
        HDmemset(expected, 0xFF, H5FD_MIRROR_XMIT_EOA_SIZE + 8);
        for (i = 0; i < H5FD_MIRROR_XMIT_EOA_SIZE; i++) {
            expected[i + 2] = (unsigned char)i;
        }

        /* Set xmit_in
         */
        xmit_in.pub      = xmit_mock; /* shared/common */
        xmit_in.type     = 0x0E;
        xmit_in.eoa_addr = 0x0F10111213141516;

        /* Encode, and compare buffer contents
         * Initial buffer is filled with 0xFF to match expected padding
         */
        HDmemset(buf, 0xFF, H5FD_MIRROR_XMIT_EOA_SIZE + 8);
        if (H5FD_mirror_xmit_encode_set_eoa((buf + 2), &xmit_in) != H5FD_MIRROR_XMIT_EOA_SIZE) {
            TEST_ERROR;
        }
        if (HDmemcmp(buf, expected, H5FD_MIRROR_XMIT_EOA_SIZE + 8) != 0) {
            PRINT_BUFFER_DIFF(buf, expected, H5FD_MIRROR_XMIT_EOA_SIZE + 8);
            TEST_ERROR;
        }

        /* Decode from buffer
         */
        if (H5FD_mirror_xmit_decode_set_eoa(&xmit_out, (buf + 2)) != H5FD_MIRROR_XMIT_EOA_SIZE) {
            TEST_ERROR;
        }
        if (xmit_out.pub.magic != xmit_mock.magic)
            TEST_ERROR;
        if (xmit_out.pub.version != xmit_mock.version)
            TEST_ERROR;
        if (xmit_out.pub.session_token != xmit_mock.session_token)
            TEST_ERROR;
        if (xmit_out.pub.xmit_count != xmit_mock.xmit_count)
            TEST_ERROR;
        if (xmit_out.pub.op != xmit_mock.op)
            TEST_ERROR;
        if (xmit_out.type != 0x0E)
            TEST_ERROR;
        if (xmit_out.eoa_addr != 0x0F10111213141516)
            TEST_ERROR;

        /* Decode from different offset in buffer
         * Observe changes when ingesting the padding
         */
        if (H5FD_mirror_xmit_decode_set_eoa(&xmit_out, (buf)) != H5FD_MIRROR_XMIT_EOA_SIZE) {
            TEST_ERROR;
        }
        if (xmit_out.pub.magic != 0xFFFF0001)
            TEST_ERROR;
        if (xmit_out.pub.version != 0x02)
            TEST_ERROR;
        if (xmit_out.pub.session_token != 0x03040506)
            TEST_ERROR;
        if (xmit_out.pub.xmit_count != 0x0708090A)
            TEST_ERROR;
        if (xmit_out.pub.op != 0x0B)
            TEST_ERROR;
        if (xmit_out.type != 0x0C)
            TEST_ERROR;
        if (xmit_out.eoa_addr != 0x0D0E0F1011121314)
            TEST_ERROR;

    } while (0); /* end xmit set-eoa en/decode */

    /* Test xmit lock structure encode/decode
     * Write bogus but easily verifiable data to inside a buffer, and compare.
     * Then decode the buffer and compare the structure contents.
     * Then repeat from a different offset in the buffer and compare.
     */
    do {
        unsigned char           buf[H5FD_MIRROR_XMIT_LOCK_SIZE + 8];
        unsigned char           expected[H5FD_MIRROR_XMIT_LOCK_SIZE + 8];
        H5FD_mirror_xmit_lock_t xmit_in;
        H5FD_mirror_xmit_lock_t xmit_out;
        size_t                  i = 0;

        /* sanity check */
        if ((14 + 8) != H5FD_MIRROR_XMIT_LOCK_SIZE) {
            FAIL_PUTS_ERROR("Header size definition does not match test\n");
        }
        if (xmit_mock.op != 0x0D) {
            FAIL_PUTS_ERROR("shared header structure is not in expected state");
        }

        /* Populate the expected buffer; expect end padding of 0xFF
         */
        HDmemset(expected, 0xFF, H5FD_MIRROR_XMIT_LOCK_SIZE + 8);
        for (i = 0; i < H5FD_MIRROR_XMIT_LOCK_SIZE; i++) {
            expected[i + 2] = (unsigned char)i;
        }

        /* Set xmit_in
         */
        xmit_in.pub = xmit_mock; /* shared/common */
        xmit_in.rw  = 0x0E0F101112131415;

        /* Encode, and compare buffer contents
         * Initial buffer is filled with 0xFF to match expected padding
         */
        HDmemset(buf, 0xFF, H5FD_MIRROR_XMIT_LOCK_SIZE + 8);
        if (H5FD_mirror_xmit_encode_lock((buf + 2), &xmit_in) != H5FD_MIRROR_XMIT_LOCK_SIZE) {
            TEST_ERROR;
        }
        if (HDmemcmp(buf, expected, H5FD_MIRROR_XMIT_LOCK_SIZE + 8) != 0) {
            PRINT_BUFFER_DIFF(buf, expected, H5FD_MIRROR_XMIT_LOCK_SIZE + 8);
            TEST_ERROR;
        }

        /* Decode from buffer
         */
        if (H5FD_mirror_xmit_decode_lock(&xmit_out, (buf + 2)) != H5FD_MIRROR_XMIT_LOCK_SIZE) {
            TEST_ERROR;
        }
        if (xmit_out.pub.magic != xmit_mock.magic)
            TEST_ERROR;
        if (xmit_out.pub.version != xmit_mock.version)
            TEST_ERROR;
        if (xmit_out.pub.session_token != xmit_mock.session_token)
            TEST_ERROR;
        if (xmit_out.pub.xmit_count != xmit_mock.xmit_count)
            TEST_ERROR;
        if (xmit_out.pub.op != xmit_mock.op)
            TEST_ERROR;
        if (xmit_out.rw != 0x0E0F101112131415)
            TEST_ERROR;

        /* Decode from different offset in buffer
         * Observe changes when ingesting the padding
         */
        if (H5FD_mirror_xmit_decode_lock(&xmit_out, (buf)) != H5FD_MIRROR_XMIT_LOCK_SIZE) {
            TEST_ERROR;
        }
        if (xmit_out.pub.magic != 0xFFFF0001)
            TEST_ERROR;
        if (xmit_out.pub.version != 0x02)
            TEST_ERROR;
        if (xmit_out.pub.session_token != 0x03040506)
            TEST_ERROR;
        if (xmit_out.pub.xmit_count != 0x0708090A)
            TEST_ERROR;
        if (xmit_out.pub.op != 0x0B)
            TEST_ERROR;
        if (xmit_out.rw != 0x0C0D0E0F10111213)
            TEST_ERROR;

    } while (0); /* end xmit lock en/decode */

    /* Test xmit open structure encode/decode
     * Write bogus but easily verifiable data to inside a buffer, and compare.
     * Then decode the buffer and compare the structure contents.
     * Then repeat from a different offset in the buffer and compare.
     *
     * Verifies that the first zero character in the filepath will end the
     * string, with all following bytes in the encoded buffer being zeroed.
     */
    do {
        unsigned char           buf[H5FD_MIRROR_XMIT_OPEN_SIZE + 8];
        unsigned char           expected[H5FD_MIRROR_XMIT_OPEN_SIZE + 8];
        H5FD_mirror_xmit_open_t xmit_in;
        H5FD_mirror_xmit_open_t xmit_out;
        size_t                  i = 0;

        /* sanity check */
        if ((14 + 20 + 4097) != H5FD_MIRROR_XMIT_OPEN_SIZE) {
            FAIL_PUTS_ERROR("Header size definition does not match test\n");
        }
        if (xmit_mock.op != 0x0D) {
            FAIL_PUTS_ERROR("shared header structure is not in expected state");
        }

        /* Populate the expected buffer; expect end padding of 0xFF
         */
        HDmemset(expected, 0xFF, H5FD_MIRROR_XMIT_OPEN_SIZE + 8);
        for (i = 0; i < H5FD_MIRROR_XMIT_OPEN_SIZE; i++) {
            /* 0x100 is "zero" in a byte, so encode will treat it as a NULL-
             * terminator in the filepath string. Expect all zeroes following.
             */
            expected[i + 2] = (i > 0xFF) ? 0 : (unsigned char)i;
        }

        /* Set xmit_in
         */
        xmit_in.pub         = xmit_mock; /* shared/common */
        xmit_in.flags       = 0x0E0F1011;
        xmit_in.maxaddr     = 0x1213141516171819;
        xmit_in.size_t_blob = 0x1A1B1C1D1E1F2021;
        for (i = 0x22; i < H5FD_MIRROR_XMIT_FILEPATH_MAX + 0x22; i++) {
            /* nonzero values repeat after 0x100, but will not be encoded */
            xmit_in.filename[i - 0x22] = (char)(i % 0x100);
        }
        xmit_in.filename[H5FD_MIRROR_XMIT_FILEPATH_MAX - 1] = 0;

        /* Encode, and compare buffer contents
         * Initial buffer is filled with 0xFF to match expected padding
         */
        HDmemset(buf, 0xFF, H5FD_MIRROR_XMIT_OPEN_SIZE + 8);
        if (H5FD_mirror_xmit_encode_open((buf + 2), &xmit_in) != H5FD_MIRROR_XMIT_OPEN_SIZE) {
            TEST_ERROR;
        }
        if (HDmemcmp(buf, expected, H5FD_MIRROR_XMIT_OPEN_SIZE + 8) != 0) {
            PRINT_BUFFER_DIFF(buf, expected, H5FD_MIRROR_XMIT_OPEN_SIZE + 8);
            TEST_ERROR;
        }

        /* Decode from buffer
         */
        if (H5FD_mirror_xmit_decode_open(&xmit_out, (buf + 2)) != H5FD_MIRROR_XMIT_OPEN_SIZE) {
            TEST_ERROR;
        }
        if (xmit_out.pub.magic != xmit_mock.magic)
            TEST_ERROR;
        if (xmit_out.pub.version != xmit_mock.version)
            TEST_ERROR;
        if (xmit_out.pub.session_token != xmit_mock.session_token)
            TEST_ERROR;
        if (xmit_out.pub.xmit_count != xmit_mock.xmit_count)
            TEST_ERROR;
        if (xmit_out.pub.op != xmit_mock.op)
            TEST_ERROR;
        if (xmit_out.flags != xmit_in.flags)
            TEST_ERROR;
        if (xmit_out.maxaddr != xmit_in.maxaddr)
            TEST_ERROR;
        if (xmit_out.size_t_blob != xmit_in.size_t_blob)
            TEST_ERROR;
        if (HDstrncmp(xmit_out.filename, xmit_in.filename, H5FD_MIRROR_XMIT_FILEPATH_MAX) != 0) {
            PRINT_BUFFER_DIFF(xmit_out.filename, xmit_in.filename, H5FD_MIRROR_XMIT_FILEPATH_MAX);
            TEST_ERROR;
        }

        /* Decode from different offset in buffer
         * Observe changes when ingesting the padding
         */
        if (H5FD_mirror_xmit_decode_open(&xmit_out, (buf)) != H5FD_MIRROR_XMIT_OPEN_SIZE) {
            TEST_ERROR;
        }
        if (xmit_out.pub.magic != 0xFFFF0001)
            TEST_ERROR;
        if (xmit_out.pub.version != 0x02)
            TEST_ERROR;
        if (xmit_out.pub.session_token != 0x03040506)
            TEST_ERROR;
        if (xmit_out.pub.xmit_count != 0x0708090A)
            TEST_ERROR;
        if (xmit_out.pub.op != 0x0B)
            TEST_ERROR;
        if (xmit_out.flags != 0x0C0D0E0F)
            TEST_ERROR;
        if (xmit_out.maxaddr != 0x1011121314151617)
            TEST_ERROR;
        if (xmit_out.size_t_blob != 0x18191A1B1C1D1E1F)
            TEST_ERROR;
        /* update expected "filepath" in structure */
        for (i = 0x20; i < H5FD_MIRROR_XMIT_FILEPATH_MAX + 0x20; i++) {
            xmit_in.filename[i - 0x20] = (i > 0xFF) ? 0 : (char)i;
        }
        if (HDstrncmp(xmit_out.filename, xmit_in.filename, H5FD_MIRROR_XMIT_FILEPATH_MAX) != 0) {
            PRINT_BUFFER_DIFF(xmit_out.filename, xmit_in.filename, H5FD_MIRROR_XMIT_FILEPATH_MAX);
            TEST_ERROR;
        }

    } while (0); /* end xmit open en/decode */

    /* Test xmit reply structure encode/decode
     * Write bogus but easily verifiable data to inside a buffer, and compare.
     * Then decode the buffer and compare the structure contents.
     * Then repeat from a different offset in the buffer and compare.
     *
     * Verifies that the first zero character in the filepath will end the
     * string, with all following bytes in the encoded buffer being zeroed.
     */
    do {
        unsigned char            buf[H5FD_MIRROR_XMIT_REPLY_SIZE + 8];
        unsigned char            expected[H5FD_MIRROR_XMIT_REPLY_SIZE + 8];
        H5FD_mirror_xmit_reply_t xmit_in;
        H5FD_mirror_xmit_reply_t xmit_out;
        size_t                   i = 0;

        /* sanity check */
        if ((14 + 4 + 256) != H5FD_MIRROR_XMIT_REPLY_SIZE) {
            FAIL_PUTS_ERROR("Header size definition does not match test\n");
        }
        if (xmit_mock.op != 0x0D) {
            FAIL_PUTS_ERROR("shared header structure is not in expected state");
        }

        /* Populate the expected buffer; expect end padding of 0xFF
         */
        HDmemset(expected, 0xFF, H5FD_MIRROR_XMIT_REPLY_SIZE + 8);
        for (i = 0; i < H5FD_MIRROR_XMIT_REPLY_SIZE; i++) {
            /* 0x100 is "zero" in a byte, so encode will treat it as a NULL-
             * terminator in the filepath string. Expect all zeroes following.
             */
            expected[i + 2] = (i > 0xFF) ? 0 : (unsigned char)i;
        }

        /* Set xmit_in
         */
        xmit_in.pub    = xmit_mock; /* shared/common */
        xmit_in.status = 0x0E0F1011;
        for (i = 0x12; i < H5FD_MIRROR_STATUS_MESSAGE_MAX + 0x12; i++) {
            /* nonzero values repeat after 0x100, but will not be encoded */
            xmit_in.message[i - 0x12] = (char)(i % 0x100);
        }
        xmit_in.message[H5FD_MIRROR_STATUS_MESSAGE_MAX - 1] = 0;

        /* Encode, and compare buffer contents
         * Initial buffer is filled with 0xFF to match expected padding
         */
        HDmemset(buf, 0xFF, H5FD_MIRROR_XMIT_REPLY_SIZE + 8);
        if (H5FD_mirror_xmit_encode_reply((buf + 2), &xmit_in) != H5FD_MIRROR_XMIT_REPLY_SIZE) {
            TEST_ERROR;
        }
        if (HDmemcmp(buf, expected, H5FD_MIRROR_XMIT_REPLY_SIZE + 8) != 0) {
            PRINT_BUFFER_DIFF(buf, expected, H5FD_MIRROR_XMIT_REPLY_SIZE + 8);
            TEST_ERROR;
        }

        /* Decode from buffer
         */
        if (H5FD_mirror_xmit_decode_reply(&xmit_out, (buf + 2)) != H5FD_MIRROR_XMIT_REPLY_SIZE) {
            TEST_ERROR;
        }
        if (xmit_out.pub.magic != xmit_mock.magic)
            TEST_ERROR;
        if (xmit_out.pub.version != xmit_mock.version)
            TEST_ERROR;
        if (xmit_out.pub.session_token != xmit_mock.session_token)
            TEST_ERROR;
        if (xmit_out.pub.xmit_count != xmit_mock.xmit_count)
            TEST_ERROR;
        if (xmit_out.pub.op != xmit_mock.op)
            TEST_ERROR;
        if (xmit_out.status != xmit_in.status)
            TEST_ERROR;
        if (HDstrncmp(xmit_out.message, xmit_in.message, H5FD_MIRROR_STATUS_MESSAGE_MAX) != 0) {
            PRINT_BUFFER_DIFF(xmit_out.message, xmit_in.message, H5FD_MIRROR_STATUS_MESSAGE_MAX);
            TEST_ERROR;
        }

        /* Decode from different offset in buffer
         * Observe changes when ingesting the padding
         */
        if (H5FD_mirror_xmit_decode_reply(&xmit_out, (buf)) != H5FD_MIRROR_XMIT_REPLY_SIZE) {
            TEST_ERROR;
        }
        if (xmit_out.pub.magic != 0xFFFF0001)
            TEST_ERROR;
        if (xmit_out.pub.version != 0x02)
            TEST_ERROR;
        if (xmit_out.pub.session_token != 0x03040506)
            TEST_ERROR;
        if (xmit_out.pub.xmit_count != 0x0708090A)
            TEST_ERROR;
        if (xmit_out.pub.op != 0x0B)
            TEST_ERROR;
        if (xmit_out.status != 0x0C0D0E0F)
            TEST_ERROR;
        /* update expected "message" in structure */
        for (i = 0x10; i < H5FD_MIRROR_STATUS_MESSAGE_MAX + 0x10; i++) {
            xmit_in.message[i - 0x10] = (i > 0xFF) ? 0 : (char)i;
        }
        if (HDstrncmp(xmit_out.message, xmit_in.message, H5FD_MIRROR_STATUS_MESSAGE_MAX) != 0) {
            PRINT_BUFFER_DIFF(xmit_out.message, xmit_in.message, H5FD_MIRROR_STATUS_MESSAGE_MAX);
            TEST_ERROR;
        }

    } while (0); /* end xmit reply en/decode */

    /* Test xmit write structure encode/decode
     * Write bogus but easily verifiable data to inside a buffer, and compare.
     * Then decode the buffer and compare the structure contents.
     * Then repeat from a different offset in the buffer and compare.
     */
    do {
        unsigned char            buf[H5FD_MIRROR_XMIT_WRITE_SIZE + 8];
        unsigned char            expected[H5FD_MIRROR_XMIT_WRITE_SIZE + 8];
        H5FD_mirror_xmit_write_t xmit_in;
        H5FD_mirror_xmit_write_t xmit_out;
        size_t                   i = 0;

        /* sanity check */
        if ((14 + 17) != H5FD_MIRROR_XMIT_WRITE_SIZE) {
            FAIL_PUTS_ERROR("Header size definition does not match test\n");
        }
        if (xmit_mock.op != 0x0D) {
            FAIL_PUTS_ERROR("shared header structure is not in expected state");
        }

        /* Populate the expected buffer; expect end padding of 0xFF
         */
        HDmemset(expected, 0xFF, H5FD_MIRROR_XMIT_WRITE_SIZE + 8);
        for (i = 0; i < H5FD_MIRROR_XMIT_WRITE_SIZE; i++) {
            expected[i + 2] = (unsigned char)i;
        }

        /* Set xmit_in
         */
        xmit_in.pub    = xmit_mock; /* shared/common */
        xmit_in.type   = 0x0E;
        xmit_in.offset = 0x0F10111213141516;
        xmit_in.size   = 0x1718191A1B1C1D1E;

        /* Encode, and compare buffer contents
         * Initial buffer is filled with 0xFF to match expected padding
         */
        HDmemset(buf, 0xFF, H5FD_MIRROR_XMIT_WRITE_SIZE + 8);
        if (H5FD_mirror_xmit_encode_write((buf + 2), &xmit_in) != H5FD_MIRROR_XMIT_WRITE_SIZE) {
            TEST_ERROR;
        }
        if (HDmemcmp(buf, expected, H5FD_MIRROR_XMIT_WRITE_SIZE + 8) != 0) {
            PRINT_BUFFER_DIFF(buf, expected, H5FD_MIRROR_XMIT_WRITE_SIZE + 8);
            TEST_ERROR;
        }

        /* Decode from buffer
         */
        if (H5FD_mirror_xmit_decode_write(&xmit_out, (buf + 2)) != H5FD_MIRROR_XMIT_WRITE_SIZE) {
            TEST_ERROR;
        }
        if (xmit_out.pub.magic != xmit_mock.magic)
            TEST_ERROR;
        if (xmit_out.pub.version != xmit_mock.version)
            TEST_ERROR;
        if (xmit_out.pub.session_token != xmit_mock.session_token)
            TEST_ERROR;
        if (xmit_out.pub.xmit_count != xmit_mock.xmit_count)
            TEST_ERROR;
        if (xmit_out.pub.op != xmit_mock.op)
            TEST_ERROR;
        if (xmit_out.type != 0x0E)
            TEST_ERROR;
        if (xmit_out.offset != 0x0F10111213141516)
            TEST_ERROR;
        if (xmit_out.size != 0x1718191A1B1C1D1E)
            TEST_ERROR;

        /* Decode from different offset in buffer
         * Observe changes when ingesting the padding
         */
        if (H5FD_mirror_xmit_decode_write(&xmit_out, (buf)) != H5FD_MIRROR_XMIT_WRITE_SIZE) {
            TEST_ERROR;
        }
        if (xmit_out.pub.magic != 0xFFFF0001)
            TEST_ERROR;
        if (xmit_out.pub.version != 0x02)
            TEST_ERROR;
        if (xmit_out.pub.session_token != 0x03040506)
            TEST_ERROR;
        if (xmit_out.pub.xmit_count != 0x0708090A)
            TEST_ERROR;
        if (xmit_out.pub.op != 0x0B)
            TEST_ERROR;
        if (xmit_out.type != 0x0C)
            TEST_ERROR;
        if (xmit_out.offset != 0x0D0E0F1011121314)
            TEST_ERROR;
        if (xmit_out.size != 0x15161718191A1B1C)
            TEST_ERROR;

    } while (0); /* end xmit write en/decode */

    PASSED();
    return 0;

error:
    return -1;
} /* end test_xmit_encode_decode */

/* ---------------------------------------------------------------------------
 * Function:    create_mirroring_split_fapl
 *
 * Purpose:     Create and populate a mirroring FAPL ID.
 *              Creates target files with the given base name -- ideally the
 *              test name -- and creates mirroring/split FAPL set to use the
 *              global mirroring info and a sec2 R/W channel driver.
 *
 *              TODO: receive target IP from caller?
 *
 * Return:      Success: HID of the top-level (splitter) FAPL, a non-negative
 *                       value.
 *              Failure: H5I_INVALID_HID, a negative value.
 *
 * Programmer:  Jacob Smith
 *              2019
 * ---------------------------------------------------------------------------
 */
static hid_t
create_mirroring_split_fapl(const char *_basename, struct mirrortest_filenames *names)
{
    H5FD_splitter_vfd_config_t splitter_config;
    H5FD_mirror_fapl_t         mirror_conf;
    hid_t                      ret_value = H5I_INVALID_HID;

    if (_basename == NULL || *_basename == '\0') {
        TEST_ERROR;
    }

    splitter_config.magic          = H5FD_SPLITTER_MAGIC;
    splitter_config.version        = H5FD_CURR_SPLITTER_VFD_CONFIG_VERSION;
    splitter_config.ignore_wo_errs = FALSE;

    /* Create Splitter R/W channel driver (sec2)
     */
    splitter_config.rw_fapl_id = H5Pcreate(H5P_FILE_ACCESS);
    if (H5I_INVALID_HID == splitter_config.rw_fapl_id) {
        TEST_ERROR;
    }
    if (H5Pset_fapl_sec2(splitter_config.rw_fapl_id) == FAIL) {
        TEST_ERROR;
    }

    /* Create Splitter W/O channel driver (mirror)
     */
    mirror_conf.magic          = H5FD_MIRROR_FAPL_MAGIC;
    mirror_conf.version        = H5FD_MIRROR_CURR_FAPL_T_VERSION;
    mirror_conf.handshake_port = SERVER_HANDSHAKE_PORT;
    if (HDstrncpy(mirror_conf.remote_ip, SERVER_IP_ADDRESS, H5FD_MIRROR_MAX_IP_LEN) == NULL) {
        TEST_ERROR;
    }
    splitter_config.wo_fapl_id = H5Pcreate(H5P_FILE_ACCESS);
    if (H5I_INVALID_HID == splitter_config.wo_fapl_id) {
        TEST_ERROR;
    }
    if (H5Pset_fapl_mirror(splitter_config.wo_fapl_id, &mirror_conf) == FAIL) {
        TEST_ERROR;
    }

    /* Build r/w, w/o, and log file paths
     */
    if (build_paths(_basename, &splitter_config, names) < 0) {
        TEST_ERROR;
    }

    /* Set file paths for w/o and logfile
     */
    if (HDstrncpy(splitter_config.wo_path, (const char *)names->wo, H5FD_SPLITTER_PATH_MAX) == NULL) {
        TEST_ERROR;
    }
    if (HDstrncpy(splitter_config.log_file_path, (const char *)names->log, H5FD_SPLITTER_PATH_MAX) == NULL) {
        TEST_ERROR;
    }

    /* Create Splitter FAPL
     */
    ret_value = H5Pcreate(H5P_FILE_ACCESS);
    if (H5I_INVALID_HID == ret_value) {
        TEST_ERROR;
    }
    if (H5Pset_fapl_splitter(ret_value, &splitter_config) == FAIL) {
        TEST_ERROR;
    }

    /* Close FAPLs created for child channels
     */
    if (H5Pclose(splitter_config.rw_fapl_id) < 0) {
        TEST_ERROR;
    }
    splitter_config.rw_fapl_id = H5I_INVALID_HID;
    if (H5Pclose(splitter_config.wo_fapl_id) < 0) {
        TEST_ERROR;
    }
    splitter_config.wo_fapl_id = H5I_INVALID_HID;

    return ret_value;

error:
    if (splitter_config.wo_fapl_id >= 0) {
        (void)H5Pclose(splitter_config.wo_fapl_id);
    }
    if (splitter_config.rw_fapl_id >= 0) {
        (void)H5Pclose(splitter_config.rw_fapl_id);
    }
    if (ret_value >= 0) {
        (void)H5Pclose(ret_value);
    }
    return H5I_INVALID_HID;
} /* end create_mirroring_split_fapl() */

/* ---------------------------------------------------------------------------
 * Function:    test_create_and_close
 *
 * Purpose:     Test/demonstrate a do-nothing file open and close.
 *
 *              Verifying file existence and contents is part of other tests.
 *
 *              TODO: receive target IP from caller?
 *
 * Return:      Success: 0
 *              Failure: -1
 *
 * Programmer:  Jacob Smith
 *              2019-12-17
 * ---------------------------------------------------------------------------
 */
static int
test_create_and_close(void)
{
    struct mirrortest_filenames names;
    hid_t                       file_id = H5I_INVALID_HID;
    hid_t                       fapl_id = H5P_DEFAULT;

    TESTING("File creation and immediate close");

    /* Create FAPL for Splitter[sec2|mirror]
     */
    fapl_id = create_mirroring_split_fapl("basic_create", &names);
    if (H5I_INVALID_HID == fapl_id) {
        TEST_ERROR;
    }

    /* -------------------- */
    /* TEST: Create and Close */

    file_id = H5Fcreate(names.rw, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
    if (H5I_INVALID_HID == file_id) {
        TEST_ERROR;
    }

    /* -------------------- */
    /* Standard cleanup */

    if (H5Fclose(file_id) == FAIL) {
        TEST_ERROR;
    }
    if (fapl_id != H5P_DEFAULT && fapl_id >= 0) {
        if (H5Pclose(fapl_id) == FAIL) {
            TEST_ERROR;
        }
    }

    PASSED();
    return 0;

error:
    H5E_BEGIN_TRY
    {
        (void)H5Fclose(file_id);
        (void)H5Pclose(fapl_id);
    }
    H5E_END_TRY;
    return -1;
} /* end test_create_and_close() */

/* ----------------------------------------------------------------------------
 * Function:    create_datasets
 *
 * Purpose:     Given a file ID and least and greateset dataset indices, create
 *              populated chunked datasets in the target file from min_dset to
 *              (and including) max_dset.
 *              Uses #defined constants to determine chunk and dataset sizes
 *              and values.
 *
 * Return:      SUCCEED/FAIL
 *
 * Programmer:  Jacob Smith
 *              2019-08-14
 * ----------------------------------------------------------------------------
 */
static herr_t
create_datasets(hid_t file_id, unsigned min_dset, unsigned max_dset)
{
    hid_t        dataspace_ids[MAX_DSET_COUNT + 1];
    hid_t        dataset_ids[MAX_DSET_COUNT + 1];
    hid_t        filespace_ids[MAX_DSET_COUNT + 1];
    int          data_chunk[CHUNK_DIM][CHUNK_DIM];
    unsigned int i, j, k, l, m;
    hsize_t      offset[2];
    hid_t        memspace_id   = H5I_INVALID_HID;
    hsize_t      a_size[2]     = {CHUNK_DIM, CHUNK_DIM};
    hsize_t      chunk_dims[2] = {CHUNK_DIM, CHUNK_DIM};
    hsize_t      dset_dims[2]  = {DSET_DIM, DSET_DIM};

    HDassert(file_id >= 0);
    HDassert(min_dset <= max_dset);
    HDassert(max_dset <= MAX_DSET_COUNT);

    LOGPRINT(2, "create_dataset()\n");

    /* ---------------------------------
     * "Clear" ID arrays
     */

    for (i = 0; i < MAX_DSET_COUNT; i++) {
        LOGPRINT(3, "clearing IDs [%d]\n", i);
        dataspace_ids[i] = H5I_INVALID_HID;
        dataset_ids[i]   = H5I_INVALID_HID;
        filespace_ids[i] = H5I_INVALID_HID;
    }

    /* ---------------------------------
     * Generate dataspace, dataset, and 'filespace' IDs
     */

    if (_create_chunking_ids(file_id, min_dset, max_dset, chunk_dims, dset_dims, dataspace_ids, filespace_ids,
                             dataset_ids, &memspace_id) == FAIL) {
        TEST_ERROR;
    }

    /* ---------------------------------
     * Initialize (write) all datasets in a "round robin"...
     * for a given chunk 'location', write chunk data to each dataset.
     */

    for (i = 0; i < DSET_DIM; i += CHUNK_DIM) {
        LOGPRINT(3, "i: %d\n", i);
        for (j = 0; j < DSET_DIM; j += CHUNK_DIM) {
            LOGPRINT(3, "  j: %d\n", j);
            for (m = min_dset; m <= max_dset; m++) {
                LOGPRINT(3, "    m: %d\n", m);
                for (k = 0; k < CHUNK_DIM; k++) {
                    for (l = 0; l < CHUNK_DIM; l++) {
                        data_chunk[k][l] = (int)((DSET_DIM * DSET_DIM * m) + (DSET_DIM * (i + k)) + j + l);
                        LOGPRINT(3, "      data_chunk[%d][%d]: %d\n", k, l, data_chunk[k][l]);
                    }
                }

                /* select on disk hyperslab */
                offset[0] = (hsize_t)i;
                offset[1] = (hsize_t)j;
                LOGPRINT(3, "    H5Sselect_hyperslab()\n");
                if (H5Sselect_hyperslab(filespace_ids[m], H5S_SELECT_SET, offset, NULL, a_size, NULL) < 0) {
                    TEST_ERROR;
                }

                LOGPRINT(3, "    H5Dwrite()\n");
                if (H5Dwrite(dataset_ids[m], H5T_NATIVE_INT, memspace_id, filespace_ids[m], H5P_DEFAULT,
                             data_chunk) < 0) {
                    TEST_ERROR;
                }
            }
        }
    }

    /* ---------------------------------
     * Read and verify data from datasets
     */

    if (_verify_datasets(min_dset, max_dset, filespace_ids, dataset_ids, memspace_id) == FAIL) {
        TEST_ERROR;
    }

    /* ---------------------------------
     * Cleanup
     */

    if (_close_chunking_ids(min_dset, max_dset, dataspace_ids, filespace_ids, dataset_ids, &memspace_id) ==
        FAIL) {
        TEST_ERROR;
    }

    return SUCCEED;

error:
    (void)_close_chunking_ids(min_dset, max_dset, dataspace_ids, filespace_ids, dataset_ids, &memspace_id);
    LOGPRINT(1, "create_datasets() FAILED\n");
    return FAIL;
} /* end create_datasets() */

/* ----------------------------------------------------------------------------
 * Function:   _create_chunking_ids
 *
 * Purpose:    Create new IDs to be used with the associated file.
 *
 * Return:     SUCCEED/FAIL
 *
 * Programer:  Jacob Smith
 *             2019
 * ----------------------------------------------------------------------------
 */
static herr_t
_create_chunking_ids(hid_t file_id, unsigned min_dset, unsigned max_dset, hsize_t *chunk_dims,
                     hsize_t *dset_dims, hid_t *dataspace_ids, hid_t *filespace_ids, hid_t *dataset_ids,
                     hid_t *memspace_id)
{
    char     dset_name[DSET_NAME_LEN + 1];
    unsigned m       = 0;
    hid_t    dcpl_id = H5I_INVALID_HID;

    LOGPRINT(2, "_create_chunking_ids()\n");

    /* --------------------
     * Create chunking DCPL
     */

    dcpl_id = H5Pcreate(H5P_DATASET_CREATE);
    if (dcpl_id < 0) {
        TEST_ERROR;
    }
    if (H5Pset_chunk(dcpl_id, 2, chunk_dims) == FAIL) {
        TEST_ERROR;
    }

    /* --------------------
     * Create dataspace IDs
     */

    for (m = min_dset; m <= max_dset; m++) {
        dataspace_ids[m] = H5Screate_simple(2, dset_dims, NULL);
        if (dataspace_ids[m] < 0) {
            HDsnprintf(mesg, MIRR_MESG_SIZE, "unable to create dataspace ID %d\n", m);
            FAIL_PUTS_ERROR(mesg);
        }
    }

    /* --------------------
     * Create dataset IDs
     */

    for (m = min_dset; m <= max_dset; m++) {
        if (HDsnprintf(dset_name, DSET_NAME_LEN, "/dset%03d", m) > DSET_NAME_LEN) {
            HDsnprintf(mesg, MIRR_MESG_SIZE, "unable to compose dset name %d\n", m);
            FAIL_PUTS_ERROR(mesg);
        }

        dataset_ids[m] =
            H5Dcreate(file_id, dset_name, H5T_STD_I32BE, dataspace_ids[m], H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
        if (dataset_ids[m] < 0) {
            HDsnprintf(mesg, MIRR_MESG_SIZE, "unable to create dset ID %d\n", m);
            FAIL_PUTS_ERROR(mesg);
        }
    }

    /* --------------------
     * Get file space IDs
     */

    for (m = min_dset; m <= max_dset; m++) {
        filespace_ids[m] = H5Dget_space(dataset_ids[m]);
        if (filespace_ids[m] < 0) {
            HDsnprintf(mesg, MIRR_MESG_SIZE, "unable to create filespace ID %d\n", m);
            FAIL_PUTS_ERROR(mesg);
        }
    }

    /* --------------------
     * Create mem space to be used to read and write chunks
     */

    *memspace_id = H5Screate_simple(2, chunk_dims, NULL);
    if (*memspace_id < 0) {
        TEST_ERROR;
    }

    /* --------------------
     * Clean up the DCPL, even if there were errors before
     */

    if (dcpl_id != H5P_DEFAULT && dcpl_id != H5I_INVALID_HID) {
        if (H5Pclose(dcpl_id) == FAIL) {
            TEST_ERROR;
        }
    }

    return SUCCEED;

error:
    if (dcpl_id != H5P_DEFAULT && dcpl_id != H5I_INVALID_HID) {
        (void)H5Pclose(dcpl_id);
    }
    LOGPRINT(1, "_create_chunking_ids() FAILED\n");
    return FAIL;
} /* end _create_chunking_ids() */

/* ----------------------------------------------------------------------------
 * Function:    _open_chunking_ids
 *
 * Purpose:     Open/access IDs from the given file.
 *
 * Return:      SUCCEED/FAIL
 *
 * Programmer:  Jacob Smith
 *              2019
 * ----------------------------------------------------------------------------
 */
static herr_t
_open_chunking_ids(hid_t file_id, unsigned min_dset, unsigned max_dset, hsize_t *chunk_dims,
                   hid_t *filespace_ids, hid_t *dataset_ids, hid_t *memspace_id)
{
    char     dset_name[DSET_NAME_LEN + 1];
    unsigned m = 0;

    LOGPRINT(2, "_open_chunking_ids()\n");

    /* --------------------
     * Open dataset IDs
     */

    for (m = min_dset; m <= max_dset; m++) {
        if (HDsnprintf(dset_name, DSET_NAME_LEN, "/dset%03d", m) > DSET_NAME_LEN) {
            HDsnprintf(mesg, MIRR_MESG_SIZE, "unable to compose dset name %d\n", m);
            FAIL_PUTS_ERROR(mesg);
        }

        dataset_ids[m] = H5Dopen2(file_id, dset_name, H5P_DEFAULT);
        if (dataset_ids[m] < 0) {
            HDsnprintf(mesg, MIRR_MESG_SIZE, "unable to open dset ID %d\n", m);
            FAIL_PUTS_ERROR(mesg);
        }
    }

    /* --------------------
     * Open filespace IDs
     */

    for (m = min_dset; m <= max_dset; m++) {
        filespace_ids[m] = H5Dget_space(dataset_ids[m]);
        if (filespace_ids[m] < 0) {
            HDsnprintf(mesg, MIRR_MESG_SIZE, "unable to get filespace ID %d\n", m);
            FAIL_PUTS_ERROR(mesg);
        }
    }

    /* --------------------
     * Create mem space to be used to read and write chunks
     */

    *memspace_id = H5Screate_simple(2, chunk_dims, NULL);
    if (*memspace_id < 0) {
        TEST_ERROR;
    }

    return SUCCEED;

error:
    LOGPRINT(1, "_open_chunking_ids() FAILED\n");
    return FAIL;
} /* end _open_chunking_ids() */

/* ---------------------------------------------------------------------------
 * Function:    _close_chunking_ids
 *
 * Purpose:     Close IDs that were created or opened.
 *              Pass NULL into `dataspace_ids` when closing items opened with
 *              _open_chunking_ids(). (as opposed to created IDs)
 *
 * Return:      SUCCEED/FAIL
 *
 * Programmer:  Jacob Smith
 *              2019
 * ---------------------------------------------------------------------------
 */
static herr_t
_close_chunking_ids(unsigned min_dset, unsigned max_dset, hid_t *dataspace_ids, hid_t *filespace_ids,
                    hid_t *dataset_ids, hid_t *memspace_id)
{
    unsigned m;

    LOGPRINT(2, "_close_chunking_ids()\n");

    for (m = min_dset; m <= max_dset; m++) {
        LOGPRINT(3, "closing ids[%d]\n", m);
        if (dataspace_ids) {
            if (H5Sclose(dataspace_ids[m]) < 0) {
                HDsnprintf(mesg, MIRR_MESG_SIZE, "unable to close dataspace_id[%d]\n", m);
                FAIL_PUTS_ERROR(mesg);
            }
        }
        if (H5Dclose(dataset_ids[m]) < 0) {
            HDsnprintf(mesg, MIRR_MESG_SIZE, "unable to close dataset_id[%d]\n", m);
            FAIL_PUTS_ERROR(mesg);
        }
        if (H5Sclose(filespace_ids[m]) < 0) {
            HDsnprintf(mesg, MIRR_MESG_SIZE, "unable to close filespace_id[%d]\n", m);
            FAIL_PUTS_ERROR(mesg);
        }
    }

    if ((*memspace_id != H5I_INVALID_HID) && (H5Sclose(*memspace_id) < 0)) {
        TEST_ERROR;
    }

    return SUCCEED;

error:
    LOGPRINT(1, "_close_chunking_ids() FAILED\n");
    return FAIL;
} /* end _close_chunking_ids() */

/* ---------------------------------------------------------------------------
 * Function:    _verify_datasets
 *
 * Purpose:     Check that each chunk's contents are as expected, as pertaining
 *              to create_datasets().
 *
 * Return:      SUCCEED/FAIL
 *
 * Programmer:  Jacob Smith
 *              2019
 * ---------------------------------------------------------------------------
 */
static herr_t
_verify_datasets(unsigned min_dset, unsigned max_dset, hid_t *filespace_ids, hid_t *dataset_ids,
                 hid_t memspace_id)
{
    unsigned i, j, k, l, m;
    int      data_chunk[CHUNK_DIM][CHUNK_DIM];
    hsize_t  offset[2];
    hsize_t  a_size[2] = {CHUNK_DIM, CHUNK_DIM};

    LOGPRINT(2, "_verify_datasets()\n");

    for (i = 0; i < DSET_DIM; i += CHUNK_DIM) {
        LOGPRINT(3, "i: %d\n", i);
        for (j = 0; j < DSET_DIM; j += CHUNK_DIM) {
            LOGPRINT(3, "  j: %d\n", j);
            for (m = min_dset; m <= max_dset; m++) {
                LOGPRINT(3, "    m: %d\n", m);

                /* select on disk hyperslab */
                offset[0] = (hsize_t)i;
                offset[1] = (hsize_t)j;
                if (H5Sselect_hyperslab(filespace_ids[m], H5S_SELECT_SET, offset, NULL, a_size, NULL) < 0) {
                    TEST_ERROR;
                }

                if (H5Dread(dataset_ids[m], H5T_NATIVE_INT, memspace_id, filespace_ids[m], H5P_DEFAULT,
                            data_chunk) < 0) {
                    HDsnprintf(mesg, MIRR_MESG_SIZE, "      H5Dread() [%d][%d][%d]\n", i, j, m);
                    FAIL_PUTS_ERROR(mesg);
                }

                for (k = 0; k < CHUNK_DIM; k++) {
                    for (l = 0; l < CHUNK_DIM; l++) {
                        if ((unsigned)data_chunk[k][l] !=
                            ((DSET_DIM * DSET_DIM * m) + (DSET_DIM * (i + k)) + j + l)) {
                            HDsnprintf(mesg, MIRR_MESG_SIZE, "      MISMATCH [%d][%d][%d][%d][%d]\n", i, j, m,
                                       k, l);
                            FAIL_PUTS_ERROR(mesg);
                        }
                    }
                }
            }
        }
    }

    return SUCCEED;

error:
    LOGPRINT(1, "_verify_datasets() FAILED\n");
    return FAIL;
} /* end _verify_datasets() */

/* ---------------------------------------------------------------------------
 * Function:    verify_datasets
 *
 * Purpose:     Inspect the datasets in the file created by create_datasets().
 *              Wrapper for _verify_datasets() -- this function sets up and
 *              tears down accessor information.
 *
 * Return:      SUCCEED/FAIL
 *
 * Programmer:  Jacob Smith
 *              2019
 * ---------------------------------------------------------------------------
 */
static herr_t
verify_datasets(hid_t file_id, unsigned min_dset, unsigned max_dset)
{
    hid_t    dataset_ids[MAX_DSET_COUNT + 1];
    hid_t    filespace_ids[MAX_DSET_COUNT + 1];
    unsigned i;
    hid_t    memspace_id   = H5I_INVALID_HID;
    hsize_t  chunk_dims[2] = {CHUNK_DIM, CHUNK_DIM};

    HDassert(file_id >= 0);
    HDassert(min_dset <= max_dset);
    HDassert(max_dset <= MAX_DSET_COUNT);

    LOGPRINT(2, "verify_datasets()\n");

    /* ---------------------------------
     * "Clear" ID arrays
     */

    for (i = 0; i < MAX_DSET_COUNT; i++) {
        LOGPRINT(3, "clearing IDs [%d]\n", i);
        dataset_ids[i]   = H5I_INVALID_HID;
        filespace_ids[i] = H5I_INVALID_HID;
    }

    /* ---------------------------------
     * Generate dataspace, dataset, and 'filespace' IDs
     */

    if (_open_chunking_ids(file_id, min_dset, max_dset, chunk_dims, filespace_ids, dataset_ids,
                           &memspace_id) == FAIL) {
        TEST_ERROR;
    }

    /* ---------------------------------
     * Read and verify data from datasets
     */

    if (_verify_datasets(min_dset, max_dset, filespace_ids, dataset_ids, memspace_id) == FAIL) {
        TEST_ERROR;
    }

    /* ---------------------------------
     * Cleanup
     */

    if (_close_chunking_ids(min_dset, max_dset, NULL, filespace_ids, dataset_ids, &memspace_id) == FAIL) {
        TEST_ERROR;
    }

    return SUCCEED;

error:
    LOGPRINT(1, "verify_datasets() FAILED\n");
    (void)_close_chunking_ids(min_dset, max_dset, NULL, filespace_ids, dataset_ids, &memspace_id);
    return FAIL;

} /* end verify_datasets() */

/* ---------------------------------------------------------------------------
 * Function:    test_basic_dataset_write
 *
 * Purpose:     Create and close files; repoen files and write a dataset,
 *              close; compare files.
 *
 *              TODO: receive target IP from caller?
 *
 * Return:      Success: 0
 *              Failure: -1
 *
 * Programmer:  Jacob Smith
 *              2019
 * ---------------------------------------------------------------------------
 */
static int
test_basic_dataset_write(void)
{
    struct mirrortest_filenames names;
    hid_t                       file_id   = H5I_INVALID_HID;
    hid_t                       fapl_id   = H5P_DEFAULT;
    hid_t                       dset_id   = H5I_INVALID_HID;
    hid_t                       dspace_id = H5I_INVALID_HID;
    hid_t                       dtype_id  = H5T_NATIVE_INT;
    hsize_t                     dims[2]   = {DATABUFFER_SIZE, DATABUFFER_SIZE};
    int *                       buf       = NULL;
    int                         i         = 0;
    int                         j         = 0;

    TESTING("Mirror open and dataset writing");

    /* Create FAPL for Splitter[sec2|mirror]
     */
    fapl_id = create_mirroring_split_fapl("basic_write", &names);
    if (H5I_INVALID_HID == fapl_id) {
        TEST_ERROR;
    }

    /* Prepare data to be written
     */
    buf = (int *)HDmalloc(DATABUFFER_SIZE * DATABUFFER_SIZE * sizeof(int));
    if (NULL == buf) {
        TEST_ERROR;
    }
    for (i = 0; i < DATABUFFER_SIZE; i++) {
        for (j = 0; j < DATABUFFER_SIZE; j++) {
            int k  = i * DATABUFFER_SIZE + j;
            buf[k] = k;
        }
    }

    /* -------------------- */
    /* TEST: Create and Close */

    file_id = H5Fcreate(names.rw, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
    if (H5I_INVALID_HID == file_id) {
        TEST_ERROR;
    }
    if (H5Fclose(file_id) == FAIL) {
        TEST_ERROR;
    }
    file_id = H5I_INVALID_HID;

    /* -------------------- */
    /* TEST: Repoen and Write */

    file_id = H5Fopen(names.rw, H5F_ACC_RDWR, fapl_id);
    if (H5I_INVALID_HID == file_id) {
        TEST_ERROR;
    }

    dspace_id = H5Screate_simple(2, dims, NULL);
    if (H5I_INVALID_HID == dspace_id) {
        TEST_ERROR;
    }
    dset_id = H5Dcreate2(file_id, "dataset", dtype_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
    if (H5I_INVALID_HID == dset_id) {
        TEST_ERROR;
    }

    if (H5Dwrite(dset_id, dtype_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) == FAIL) {
        TEST_ERROR;
    }

    /* -------------------- */
    /* Standard cleanup */

    HDfree(buf);
    buf = NULL;
    if (H5Dclose(dset_id) == FAIL) {
        TEST_ERROR;
    }
    if (H5Sclose(dspace_id) == FAIL) {
        TEST_ERROR;
    }
    if (H5Fclose(file_id) == FAIL) {
        TEST_ERROR;
    }
    if (fapl_id != H5P_DEFAULT && fapl_id > 0) {
        if (H5Pclose(fapl_id) == FAIL) {
            TEST_ERROR;
        }
    }

    /* -------------------- */
    /* TEST: Verify that the R/W and W/O files are identical */

    if (h5_compare_file_bytes(names.rw, names.wo) < 0) {
        TEST_ERROR;
    }

    PASSED();
    return 0;

error:
    H5E_BEGIN_TRY
    {
        (void)H5Fclose(file_id);
        if (buf) {
            HDfree(buf);
        }
        (void)H5Dclose(dset_id);
        (void)H5Sclose(dspace_id);
        if (fapl_id != H5P_DEFAULT && fapl_id > 0) {
            (void)H5Pclose(fapl_id);
        }
    }
    H5E_END_TRY;
    return -1;
} /* end test_basic_dataset_write() */

/* ---------------------------------------------------------------------------
 * Function:    test_chunked_dataset_write
 *
 * Purpose:     Create and close files; repoen files and write a dataset,
 *              close; compare files.
 *
 *              TODO: receive target IP from caller?
 *
 * Return:      Success: 0
 *              Failure: -1
 *
 * Programmer:  Jacob Smith
 *              2019
 * ---------------------------------------------------------------------------
 */
static int
test_chunked_dataset_write(void)
{
    struct mirrortest_filenames names;
    hid_t                       file_id = H5I_INVALID_HID;
    hid_t                       fapl_id = H5P_DEFAULT;

    TESTING("Mirror open and dataset writing (chunked)");

    /* Create FAPL for Splitter[sec2|mirror]
     */
    fapl_id = create_mirroring_split_fapl("chunked_write", &names);
    if (H5I_INVALID_HID == fapl_id) {
        TEST_ERROR;
    }

    /* -------------------- */
    /* TEST: Create and Close */

    file_id = H5Fcreate(names.rw, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
    if (H5I_INVALID_HID == file_id) {
        TEST_ERROR;
    }
    if (H5Fclose(file_id) == FAIL) {
        TEST_ERROR;
    }
    file_id = H5I_INVALID_HID;

    /* -------------------- */
    /* TEST: Reopen and Write */

    file_id = H5Fopen(names.rw, H5F_ACC_RDWR, fapl_id);
    if (H5I_INVALID_HID == file_id) {
        TEST_ERROR;
    }

    /* Write datasets to file
     */
    if (create_datasets(file_id, 0, MAX_DSET_COUNT) == FAIL) {
        TEST_ERROR;
    }

    /* Close to 'flush to disk', and reopen file
     */
    if (H5Fclose(file_id) == FAIL) {
        TEST_ERROR;
    }
    file_id = H5I_INVALID_HID;

    /* Reopen file
     */
    file_id = H5Fopen(names.rw, H5F_ACC_RDWR, fapl_id);
    if (H5I_INVALID_HID == file_id) {
        TEST_ERROR;
    }

    /* Verify written data integrity
     */
    if (verify_datasets(file_id, 0, MAX_DSET_COUNT) == FAIL) {
        TEST_ERROR;
    }

    /* -------------------- */
    /* Standard cleanup */

    if (H5Fclose(file_id) == FAIL) {
        TEST_ERROR;
    }
    file_id = H5I_INVALID_HID;
    if (fapl_id != H5P_DEFAULT && fapl_id > 0) {
        if (H5Pclose(fapl_id) == FAIL) {
            TEST_ERROR;
        }
        fapl_id = H5I_INVALID_HID;
    }

    /* -------------------- */
    /* TEST: Verify that the R/W and W/O files are identical */

    if (h5_compare_file_bytes(names.rw, names.wo) < 0) {
        TEST_ERROR;
    }

    PASSED();
    return 0;

error:
    H5E_BEGIN_TRY
    {
        (void)H5Fclose(file_id);
        if (fapl_id != H5P_DEFAULT && fapl_id > 0) {
            (void)H5Pclose(fapl_id);
        }
    }
    H5E_END_TRY;
    return -1;
} /* end test_chunked_dataset_write() */

/* ---------------------------------------------------------------------------
 * Function:    test_on_disk_zoo
 *
 * Purpose:     Verify that the mirror can handle the passing of all the
 *              various on-disk data structures over the wire, as implemented
 *              in genall5.c:create_zoo().
 *
 *              TODO: receive target IP from caller?
 *
 * Return:      Success: 0
 *              Failure: -1
 *
 * Programmer:  Jacob Smith
 *              2019
 * ---------------------------------------------------------------------------
 */
static int
test_on_disk_zoo(void)
{
    const char                  grp_name[] = "/only";
    struct mirrortest_filenames names;
    hid_t                       file_id = H5I_INVALID_HID;
    hid_t                       grp_id  = H5I_INVALID_HID;
    hid_t                       fapl_id = H5P_DEFAULT;

    TESTING("'Zoo' of on-disk structures");

    /* Create FAPL for Splitter[sec2|mirror]
     */
    fapl_id = create_mirroring_split_fapl("zoo", &names);
    if (H5I_INVALID_HID == fapl_id) {
        TEST_ERROR;
    }

    /* -------------------- */
    /* TEST: Create file    */
    file_id = H5Fcreate(names.rw, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
    if (H5I_INVALID_HID == file_id) {
        TEST_ERROR;
    }

    grp_id = H5Gcreate2(file_id, grp_name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
    if (grp_id == H5I_INVALID_HID) {
        TEST_ERROR;
    }

    /* Create datasets in file, close (flush) and reopen, validate.
     * Use of ( pass ) a conceit required for using create_ and validate_zoo()
     * from cache_common and/or genall5.
     */

    if (pass) {
        create_zoo(file_id, grp_name, 0);
    }
    if (pass) {
        if (H5Fclose(file_id) == FAIL) {
            TEST_ERROR;
        }
        file_id = H5Fopen(names.rw, H5F_ACC_RDWR, fapl_id);
        if (H5I_INVALID_HID == file_id) {
            TEST_ERROR;
        }
    }
    if (pass) {
        validate_zoo(file_id, grp_name, 0); /* sanity-check */
    }
    if (!pass) {
        HDprintf(failure_mssg);
        TEST_ERROR;
    }

    /* -------------------- */
    /* Standard cleanup */

    if (fapl_id != H5P_DEFAULT && fapl_id >= 0) {
        if (H5Pclose(fapl_id) == FAIL) {
            TEST_ERROR;
        }
    }
    if (H5Gclose(grp_id) == FAIL) {
        TEST_ERROR;
    }
    if (H5Fclose(file_id) == FAIL) {
        TEST_ERROR;
    }

    /* -------------------- */
    /* TEST: Verify that the R/W and W/O files are identical */

    if (h5_compare_file_bytes(names.rw, names.wo) < 0) {
        TEST_ERROR;
    }

    PASSED();
    return 0;

error:
    H5E_BEGIN_TRY
    {
        (void)H5Fclose(file_id);
        (void)H5Gclose(grp_id);
        if (fapl_id != H5P_DEFAULT && fapl_id > 0) {
            (void)H5Pclose(fapl_id);
        }
    }
    H5E_END_TRY;
    return -1;
} /* end test_on_disk_zoo() */

/* ---------------------------------------------------------------------------
 * Function:    test_vanishing_datasets
 *
 * Purpose:     Verify behavior when writing to a file where data is deleted.
 *
 *              Each dataset is populated with the value of its suffix
 *              (dset5 is all fives).
 *
 *              Opens 0..15 create one new dataset each, '/dset[i]'.
 *              Opens 3..18 delete '/dset[1-3]'
 *
 *              Should end with no data in file.
 *
 * Return:      Success:  0
 *              Failure: -1
 *
 * Programmer:  Jacob Smith
 *              2019
 * ---------------------------------------------------------------------------
 */
static int
test_vanishing_datasets(void)
{
    struct mirrortest_filenames names;
    hid_t                       file_id        = H5I_INVALID_HID;
    hid_t                       fapl_id        = H5I_INVALID_HID;
    hid_t                       dset_id        = H5I_INVALID_HID;
    hid_t                       dspace_id      = H5I_INVALID_HID;
    hid_t                       mirror_fapl_id = H5I_INVALID_HID;
    hsize_t                     dims[2]        = {DATABUFFER_SIZE, DATABUFFER_SIZE};
    uint32_t                    buf[DATABUFFER_SIZE][DATABUFFER_SIZE]; /* consider malloc? */
    H5G_info_t                  group_info;
    unsigned int                i, j, k;
    const unsigned int          max_loops       = 20;
    const unsigned int          max_at_one_time = 3;

    TESTING("Vanishing Datasets");

    /* -------------------- */
    /* Set up recurrent data (FAPL, dataspace) */

    /* Create FAPL for Splitter[sec2|mirror]
     */
    fapl_id = create_mirroring_split_fapl("vanishing", &names);
    if (H5I_INVALID_HID == fapl_id) {
        TEST_ERROR;
    }

    dspace_id = H5Screate_simple(2, dims, NULL);
    if (dspace_id < 0) {
        TEST_ERROR;
    }

    /* create file */
    file_id = H5Fcreate(names.rw, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
    if (H5I_INVALID_HID == file_id) {
        TEST_ERROR;
    }

    for (i = 0; i < max_loops; i++) {
        char namebuf[DSET_NAME_LEN + 1];

        /* deleting datasets */
        if (i >= max_at_one_time) {
            if (HDsnprintf(namebuf, DSET_NAME_LEN, "/dset%02d", (i - max_at_one_time)) > DSET_NAME_LEN) {
                TEST_ERROR;
            }
            if (H5Ldelete(file_id, namebuf, H5P_DEFAULT) < 0) {
                TEST_ERROR;
            }
        } /* end if deleting a dataset */

        /* writing datasets */
        if (i < (max_loops - max_at_one_time)) {
            if (HDsnprintf(namebuf, DSET_NAME_LEN, "/dset%02d", i) > DSET_NAME_LEN) {
                TEST_ERROR;
            }
            dset_id =
                H5Dcreate2(file_id, namebuf, H5T_STD_U32LE, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
            if (H5I_INVALID_HID == dset_id) {
                TEST_ERROR;
            }

            for (j = 0; j < DATABUFFER_SIZE; j++) {
                for (k = 0; k < DATABUFFER_SIZE; k++) {
                    buf[j][k] = (uint32_t)i;
                }
            }

            if (H5Dwrite(dset_id, H5T_STD_U32LE, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0) {
                TEST_ERROR;
            }

            if (H5Dclose(dset_id) < 0) {
                TEST_ERROR;
            }
            dset_id = H5I_INVALID_HID;
        } /* end if writing a dataset */

    } /* end for dataset create-destroy cycles */

    if (H5Fclose(file_id) < 0) {
        TEST_ERROR;
    }
    file_id = H5I_INVALID_HID;

    /* verify there are no datasets in file */
    file_id = H5Fopen(names.rw, H5F_ACC_RDONLY, H5P_DEFAULT);
    if (file_id < 0) {
        TEST_ERROR;
    }
    if (H5Gget_info(file_id, &group_info) < 0) {
        TEST_ERROR;
    }
    if (group_info.nlinks > 0) {
        HDfprintf(stderr, "links in rw file: %" PRIuHSIZE "\n", group_info.nlinks);
        HDfflush(stderr);
        TEST_ERROR;
    }
    if (H5Fclose(file_id) < 0) {
        TEST_ERROR;
    }
    file_id = H5Fopen(names.wo, H5F_ACC_RDONLY, H5P_DEFAULT);
    if (file_id < 0) {
        TEST_ERROR;
    }
    if (H5Gget_info(file_id, &group_info) < 0) {
        TEST_ERROR;
    }
    if (group_info.nlinks > 0) {
        HDfprintf(stderr, "links in wo file: %" PRIuHSIZE "\n", group_info.nlinks);
        HDfflush(stderr);
        TEST_ERROR;
    }
    if (H5Fclose(file_id) < 0) {
        TEST_ERROR;
    }
    file_id = H5I_INVALID_HID;

    if (h5_compare_file_bytes(names.rw, names.wo) < 0)
        TEST_ERROR;

    /* -------------------- */
    /* Teardown */

    if (H5Sclose(dspace_id) < 0) {
        TEST_ERROR;
    }
    if (H5Pclose(fapl_id) < 0) {
        TEST_ERROR;
    }

    PASSED();
    return 0;

error:
    H5E_BEGIN_TRY
    {
        if (mirror_fapl_id != H5I_INVALID_HID) {
            H5Pclose(mirror_fapl_id);
        }
        if (fapl_id != H5I_INVALID_HID) {
            H5Pclose(fapl_id);
        }
        if (file_id != H5I_INVALID_HID) {
            H5Fclose(file_id);
        }
        if (dset_id != H5I_INVALID_HID) {
            H5Dclose(dset_id);
        }
        if (dspace_id != H5I_INVALID_HID) {
            H5Sclose(dspace_id);
        }
    }
    H5E_END_TRY;
    return -1;
} /* test_vanishing_datasets() */

/* ---------------------------------------------------------------------------
 * Function:    test_concurrent_access
 *
 * Purpose:     Verify that more than one file may be opened at a time.
 *
 *              TODO: receive target IP from caller?
 *
 * Return:      Success: 0
 *              Failure: -1
 *
 * Programmer:  Jacob Smith
 *              2020-03-09
 * ---------------------------------------------------------------------------
 */
static int
test_concurrent_access(void)
{
    struct file_bundle {
        struct mirrortest_filenames names;
        hid_t                       dset_id;
        hid_t                       fapl_id;
        hid_t                       file_id;
    } bundle[CONCURRENT_COUNT];
    hid_t   dspace_id = H5I_INVALID_HID;
    hid_t   dtype_id  = H5T_NATIVE_INT;
    hsize_t dims[2]   = {DATABUFFER_SIZE, DATABUFFER_SIZE};
    int *   buf       = NULL;
    int     i         = 0;
    int     j         = 0;

    TESTING("Concurrent opened mirrored files");

    /* blank bundle */
    for (i = 0; i < CONCURRENT_COUNT; i++) {
        bundle[i].dset_id    = H5I_INVALID_HID;
        bundle[i].fapl_id    = H5I_INVALID_HID;
        bundle[i].file_id    = H5I_INVALID_HID;
        *bundle[i].names.rw  = '\0';
        *bundle[i].names.wo  = '\0';
        *bundle[i].names.log = '\0';
    }

    /* Create FAPL for Splitter[sec2|mirror]
     */
    for (i = 0; i < CONCURRENT_COUNT; i++) {
        char  _name[16] = "";
        hid_t _fapl_id  = H5I_INVALID_HID;
        HDsnprintf(_name, 15, "concurrent%d", i);
        _fapl_id = create_mirroring_split_fapl(_name, &bundle[i].names);
        if (H5I_INVALID_HID == _fapl_id) {
            TEST_ERROR;
        }
        bundle[i].fapl_id = _fapl_id;
    }

    /* Prepare data to be written
     */
    buf = (int *)HDmalloc(DATABUFFER_SIZE * DATABUFFER_SIZE * sizeof(int));
    if (NULL == buf) {
        TEST_ERROR;
    }
    for (i = 0; i < DATABUFFER_SIZE; i++) {
        for (j = 0; j < DATABUFFER_SIZE; j++) {
            int k  = i * DATABUFFER_SIZE + j;
            buf[k] = k;
        }
    }

    /* Prepare generic dataspace
     */
    dspace_id = H5Screate_simple(2, dims, NULL);
    if (H5I_INVALID_HID == dspace_id) {
        TEST_ERROR;
    }

    /* -------------------- */
    /* TEST: Create file and open elements */

    for (i = 0; i < CONCURRENT_COUNT; i++) {
        hid_t _file_id = H5I_INVALID_HID;
        hid_t _dset_id = H5I_INVALID_HID;

        _file_id = H5Fcreate(bundle[i].names.rw, H5F_ACC_TRUNC, H5P_DEFAULT, bundle[i].fapl_id);
        if (H5I_INVALID_HID == _file_id) {
            TEST_ERROR;
        }

        bundle[i].file_id = _file_id;

        _dset_id =
            H5Dcreate2(_file_id, "dataset", dtype_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
        if (H5I_INVALID_HID == _dset_id) {
            TEST_ERROR;
        }
        bundle[i].dset_id = _dset_id;
    }

    /* -------------------- */
    /* TEST: Write to files */

    for (i = 0; i < CONCURRENT_COUNT; i++) {
        if (H5Dwrite(bundle[i].dset_id, dtype_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) == FAIL) {
            TEST_ERROR;
        }
    }

    /* -------------------- */
    /* TEST: Close elements  */

    for (i = 0; i < CONCURRENT_COUNT; i++) {
        if (H5Dclose(bundle[i].dset_id) == FAIL) {
            TEST_ERROR;
        }
        if (H5Fclose(bundle[i].file_id) == FAIL) {
            TEST_ERROR;
        }
        if (H5Pclose(bundle[i].fapl_id) == FAIL) {
            TEST_ERROR;
        }
    }

    /* -------------------- */
    /* Standard cleanup */

    HDfree(buf);
    buf = NULL;
    if (H5Sclose(dspace_id) == FAIL) {
        TEST_ERROR;
    }

    /* -------------------- */
    /* TEST: Verify that the R/W and W/O files are identical */

    for (i = 0; i < CONCURRENT_COUNT; i++) {
        if (h5_compare_file_bytes(bundle[i].names.rw, bundle[i].names.wo) < 0) {
            TEST_ERROR;
        }
    }

    PASSED();
    return 0;

error:
    H5E_BEGIN_TRY
    {
        if (buf) {
            HDfree(buf);
        }
        (void)H5Sclose(dspace_id);
        for (i = 0; i < CONCURRENT_COUNT; i++) {
            (void)H5Dclose(bundle[i].dset_id);
            (void)H5Fclose(bundle[i].file_id);
            (void)H5Pclose(bundle[i].fapl_id);
        }
    }
    H5E_END_TRY;
    return -1;
} /* end test_concurrent_access() */

/* ---------------------------------------------------------------------------
 * Function:    main
 *
 * Purpose:     Run tests.
 *
 * Return:      Success: 0
 *              Failure: 1
 *
 * Programmer:  Jacob Smith
 *              2019
 * ---------------------------------------------------------------------------
 */
int
main(void)
{
    int nerrors = 0;

    h5_reset();

    g_log_stream = stdout; /* default debug/logging output stream */

    HDprintf("Testing Mirror VFD functionality.\n");

    /* -------------------- */
    /* SETUP */

    /* Create directories for test-generated .h5 files
     */
    if (nerrors == 0) {
        if ((HDmkdir(MIRROR_RW_DIR, (mode_t)0755) < 0) && (errno != EEXIST)) {
            nerrors++;
        }
    }
    if (nerrors == 0) {
        if ((HDmkdir(MIRROR_WO_DIR, (mode_t)0755) < 0) && (errno != EEXIST)) {
            nerrors++;
        }
    }

    /* -------------------- */
    /* TESTS */
    /* Tests return negative values; `-=' increments nerrors count */

    if (nerrors == 0) {
        nerrors -= test_fapl_configuration();
        nerrors -= test_xmit_encode_decode();
        nerrors -= test_create_and_close();
        nerrors -= test_basic_dataset_write();
        nerrors -= test_chunked_dataset_write();
        nerrors -= test_on_disk_zoo();
        nerrors -= test_vanishing_datasets();
        nerrors -= test_concurrent_access();
    }

    if (nerrors) {
        HDprintf("***** %d Mirror VFD TEST%s FAILED! *****\n", nerrors, nerrors > 1 ? "S" : "");
        return EXIT_FAILURE;
    }

    HDprintf("All Mirror Virtual File Driver tests passed.\n");
    return EXIT_SUCCESS;
} /* end main() */

#else /* H5_HAVE_MIRROR_VFD */

int
main(void)
{
    h5_reset();
    HDprintf("Testing Mirror VFD functionality.\n");
    HDprintf("SKIPPED - Mirror VFD not built.\n");
    return EXIT_SUCCESS;
}

#endif /* H5_HAVE_MIRROR_VFD */
 MӤ" ('nycء4~C'4! ?BO.`s:i F!z5Ow3z뉇-yp>e0Ur ե}e?g̖""WS>wNj:y}^%!& H3~ҙ̓C =`t sOR1䙇d? '̦7xL +s ΉR*T9憃^?'o+e=vyvO%2&t S͕  @M:&zeGQV"Gte' @@`9o7Lb}~{Snݹ5lܪDc"%oB,Mrg_jmM<ӫ>;~ipřѡ'QTg +C`ےvfC,~d*THm~6hd1bT\2vM6JUuفӸPt<ꘊÌQTXd|?&EJPs=0AW}6ѳ.s~<&Z~ 7#c8qlì">d_ۨ9”vH$ H\fH96UUkǏ | ۪riUUU{;mN, ﲁ)E0,q32E7H;xwf(ݠ4l޾t&&zspu) ÏRZ){999eE/TRڑ lBG˰}0@L[XwBЂ}yqi@y: ʥ;"L}[nѿ-ă99:&)!flmhܖt @eBQ PQEb5*>.9H JfIW;Ū) IM&t˻E7I)H̄P PI@ m(n o#@3D0ߗzb9i|x0Aj"Ojrh2(,k JE;:n_㷌x>p6('Le+˚Q4ڃ05iCf/77DHJa%!DXLk7Mf9dq!TT^VH(qb_m Zvu)AٸT? -z ?asz(Oii6u cߦ Mr /xҁ֎#CS~IVtu$*i=E-YLt:4XL~#JU9ٖ`{ -˳=-QdQI 0Ic;`0*A*E 9;S{sgM[[ul@C\V.^4QH(aDT ň` 5e$G0[*fUYR*H`\ogtgݼoY>ʏ[~Gvaԥ|fJ-fqR^w^B4'%q~[` E0w(J"Rb?lCnb$F$xA=g>2Ϡ6oA #]7Lot%mšgcjɾWZl";o#|`]/w|>]LoG uNp״Q Ho-^v7f Xy/:㱃߶} }!*d4.@;i]9(Nҡ>=! BU *= 'H 2dH9Dj(ăޡȝүo;wRN&l=s(%H4Р O:G/F=MSBAǜ&ǎ|8o_^2DYp~ʷÈkCyꛨϜxPkj03_ma>ߍ@Ѩ Cz7uQ< u Ó <)dT@fV1~rKCy0sq3WX5w!O53E (Ü|]TPυhpZ (ۯP\uvr9RY>vyn8G^>QR|)4=:% ܅Ӑ>_6ƧkzjR| 1g!?Pe)U NÇ 5R+8Zf_&2,Œ*2ʲ! J"Zy3F TúP̾^ Ew=;.4xB#8Sp˕" 6.}]d-,wg]BI뚳/hSBtJPlV̄ Deχ~RWxkO@H7HFE/O|ӷ{ f>(r8CUPSpz\wR^N5pޜ cM]IŠ7i7a(Gel7vvn\){t:k-H(H,b@k!Icе2gB0==Yռ9(7NYUNt-VA#˹\MP8AaK[ɋ֊ElseuxޮSz"ԿЇI9^У\׏VLv2M[k\v}q#+7Fu,{gJt,f)k)ipFzkI5G/vn<rbS'ӺɝPǀ|#)ۚ"[z/Ӥ=_^Zr@iRa[r"{Gt8:*@`ia`>!@W$]UP4 D yt ~^1<O\`ByOG]]}ںqDŽxR:/!F|.z AϤ$zjz#!w,â6ϫJE셄R&p)5x($C+X\`6'xpʽh ( T4ӟylvR/6y05 *@$%*4VqMA` fSeJa&10p㟗O~6{WGo&e#(('Td7 o TADZG&6MfYP]M*I`F==Ӹ@0㯍zĉQ쩍Xi[qX\= <%)<bd,yN |#kkR+EUz@h(4<>o]zupٞ@{ )|q/oiQzbakjeUQ÷d ݒW@<Թs(E/F/%=\|%<#.^fAE=Gb%B]Pv7#x)j7b g-8p׆W v6#!(xѿ R9%^8 C B"8#xbVy E~&/ fCV9MF Dfh#4Ha1n-sbs( i" ))Jj"f h6w%:M馩;ѣJ!ZsSXu)Zwg%D1>:gP D!H2k)Z)zLG`˛6+x^'2;+}OõxsaPQ2PĢ'y?|4oiu;^_vn^IG4(峽}]F{w.8j^=7%UzB : 6# &v[;SB/wW \II!3[."kTF *)|}+=)OOY LaR=>2! dkb#"(A;&w 4rr>*(&X<5u52>0ʙE#;ZwuGظ&gɟ裈K:7` @z-*@( zKa1@M9'Q*>8COYBR(-+V 88;ղ JePU3ec76! 4FfI \1m?5` &YC `hAqցJ (B 3.zߗ@e}a5p*],}yaAI@*ѻ^quۦ`89cEm(5LS-Xvz01v?$< ꇻt'MaF@0@[7302O5J(,/Ob>@v"}~Hlich)ρJJ?Wc̦ ) m j2]Wؘ|3L1!O,sbHB ~R'yXAW*CrJ"2q4)ϭGihGÅvSGO錷-&Y:V:,rY:DO涞 ޷ 0|O  4RsopߟVl91??u6e 0(QD"#ՏLxa>'蠬F<_:lI݅>=Np8( ~):`Mn6IYHc71DOn`j f%iߕGAwឳAsƝ.~<¶.s`-傊"O]rQ1  R<3p?C{Ms-J7@Fi%@Р ɴ{/]8I\GEDƬ5")Q3ZQSJHDN3gnOc`aYc!sSܴ{3BrوiCד!G0{мiJ|vK>͔9eCPWw1 Pu*)O؃3b=@'U~= ?__؄΋ uǩL n:BB `Lbs19]NG@QK04zu)pkN)צi*>= F}qtn=(ЋA8K9u@zs!_Վc Ô0"'$P DpFS$^/4Ivn~>txCEp}nҫְrHM)CtVIݎ‘ Y墔kr6XjkAZD|e2P}7p̢$Z{ BcSۋpt} ƃcjBEP|,=_;^")mG4+ʚtV45X'66Lu= e|ޢ_"Ȉe!HCC {#nS bf"N A!)i]I%TLJ"aUFR\М([(d^PB,* `C =9&&&#ϰɤPz3nYf9z b7s8Z<$Hq@bb9Q vѻ{hD.+EY AEJ ʈQh"'(SU)IKy_v,RBA;pk`_ˇ)xo=~+  Z,`%']#}3aXHbZ/Tא~Lu2Ӯv_Ű.Ç.&s2CwD=a7۳ò#o(Qg85s4]V77 mYwTgrV4e}xmNة#ϒ'EhgD"P_ly<3fz8")Ve %q7^IrWߤt$I[pqu|hG.QpzzYQb4e.˾W|#CDBokw +zZG Ms=2= G5w/8}3uG|C}@D|0coI?!&d0PV>&PQ.tJh)%"0 s򈩄׽ǸIӴկxi ˷^1z-6Vu|{ʢcn=VwCvoP//P[ !ffȿ QWC*G1}5E|Tw U/=P{>37FqG*?WũP!MɃXb//. f!ݥ}v-׏"pZNM\s+J?`lG)Ӿ?^@D&q,_T\>_+2|ݘ xc<RӱD9E@x4h%t(sADveG"2Y1ZMgӮa0O$Ƒ Rm겾v$ >G FR|s҆uNvu]Qׅ1u u]=;M">hN N:rگ*x?'oXh"yCscjD։ZQU0Y8E)A.TϨ0p{nQ0}X_T~"\ ?$&OY aA@$HG%ΐȨ` (0$ߊ~\~Iq" }=:E/gI}2kNBИ}k=*PJ@B  (Vmb}|W5K$; ) F=:”hZ!tuR8%dCY9y!sJ#2*y@or G >m!}\* 5&P(|lB88Svޞ$ lB:DiE,A p5"<|z3_J ݓ>!˖&RаȢ\%W(b1F.z95}149._ESVUx9B?e#{!a>~T 玔q {$tOr^'_3EST1h3M&0[cytXĩӌX0|wqcw97/s4u u ZHb)0ؒpfj':D< *_?Tlz?7;}gE. N}GWƻ=q8{> v0~dǸvˡ7TiG' DSWp q; @!x,TM3<FL>C76NYѲdi v덝굕&O@4qc)fww`Of0l~ElS&>b:lmEk~y-9T@* l Sðkm=BiAܫA 7aGtBP(A `7 TCcU 6,ubpѵDCHN pO&APJQnw_X(:??\^<`QƾGa zN/d_(PU ?hfo`Ϩ~NٞM`Q1QbsY R@(ReQY~:QFyJ=# 9=4 yF'>d Tn`mϧs1,_u¯O4Pո: ^gwm'ѐ/ "$RB P@$ R];g=P&6DK".e@Ezl"%_/v1Ǣ6zpC7Ύ|'oJZ$ p*b\s}%d0I K);/vuOߓ_Ã1>ޟh}|rGz?ո2S#<0j8 ΔDDW!;vLwY5@ Ad]hAzs؎Gь3B(  [k#'LӏR95#g2=}Wo__#@7OrsHg;Gvt4Ӹh:E#!:m}gRV!`tT2""Tu!A&\7X,nw_L'G@NHn)E yE_W?1/iƨWsW,w9Z"qd6 טD}U(!tGJ 7?yΌbG1 Q@RA@+Gh}wށzp?D}=|#s&CaGy?sهpGb;?`w?R9FQ>X-O4?7 sTxq\wma`T1 -- R b7FaeuQR4efϫǦ]Hݽ֭Gh7D>ӭur~\.>C^:GG(:gF:t<ߏnշ țNғoHI6m?ꑈYɜ9!R>\3럣|~tDрC TY{Nrs3d@U@ FϿ,#>i40 =7v}?2f61ԏe 1|~qy?56iG# ח;#걵|_w`+/?ڏ><}7vpksiGhm1(RM#0ݞ:f?$'?䍣TAXÈ~_g9­6QUU\7 nw99yH ,yQ>]?:?Q1Fޮ̀;@Ҏ6D"9c&v5R8 :]QLs2VrВ`'volԥ{9 ɟЕJە8y,`2u &et+2^Ciْ~퇜#DEb;zH ^`:Cp2h`!GX9?.3zx6ȠJ<;O}(|!ҿKTLJ ?IKt4mm)S8lhØM6sl; :27j8@1+ϳΗ1EmB79K 鉞@yᅴϝ]f7W[ylcM-Iɸ 怈u vf ~ڿ\4&*eE{uWt R(%ĂA@öՓ|ݸQaW[85?1Qsonz@RNl7g\t(ե emVJ2[G!"p(@`>TEp?CR5q\ ͧӲCHWlb~zc zuP90'Sƭ806dz(5Vh/ ؟^-I)IL .1dp gh`I( *U%a|ΓSnŲt۵WuhF 8BQ Sv- C@ɐt){B@9+NgR >;O-Cی0C;Lc+MZݕ>;.s=R#5C=P4}|nv2g:~YNuDVi uCo88~c0}9@J"94~p }JTHWu]Gwǣ /ٍ &B(E%7dCz)PT]wa(iJ#Gʀ=l:P mׄ YP [ؔv kppP,cduyڑn7\9)̮V$GT&9!F= ؠ4鸉\-Kl )H2ł d$U\N`D&>))Uha8pŦ2 -I*2VD3R3Z~  VThOɅeY&p^ (kMP={"`TpC > 8"u oH*W"DeOn4$B0 a"CQh^ܩBH1k:TsGBVѾl9.,3Ǘ|NCy ۰z. 1!H/ ]{0&rUKɔaY$Y;eDWG& O/,DŽ-US9n%%CXg69gC*<:w`o0T_֟I1@:x?2p,4‡qgL [4g4G&/9` *)jyL' IϾ$A7Q\Uǒvs*bPC9(8q#lW֗ sr:҉)(9R &z杄8B*3HOwk4QR RE h2^f~zПLOq#:0N3L~:qͫ_#+ʹg׷4b=໚=]G Qp3V4 Gn4* r`v!f/$C1 -&3*q8.7붋WGZ- /ZW浨"JÎ Yc8s^D,ߑ1 &[J4;|z^6o[v+Lw㱛 \xCGS]uc@fИ=MM9<ZO|ycCIju˗[ hn;;._ F:JΥ4w pr72IdV!diZz 2m[ɅқPcR#]p4 b*zSjuN1=o\?USkHjg A xhrjH%^Oq00'ZӊN›]ҪZN1'inuxi-q+9;\n3H#HAإǼdx+>٠cɲ9ꦞ mōppܾrfg\:9,a'VV9e@3L|v}B9ޞc4%f {$aK{zDP ل)L!"H?yq dQNg}D.8~};SS /h@1_ztĀD[Chͯ˖K}E6+s\W׭vl٫ -5 YoN'w~^O?IHgLfOTz9gz:Lq53Go 5 H+ i'>UC61E vm{kIwDb% %Wo=b32M~TZQΕBĘxܕR87aT2TڙB`Yn\3e7|=i6\-]!TLgV`\亙-/웫^x"]N،,r(}g _Io  #:B/EJ&T.Q >R) s$Ztt`;˧(b:0( =gRQR1)!8 )pNƔܲh=+bH B'h)I!'XsChc5 p-?fDN֜sͧ R$@:&("w,Lô7\噔139m2񚸘behF ņb5\NgQmDrҲ& 3tT',!AB- Em&SE$DULE0SU@#3A!1Mũ$bvu$a6 ҐHѦڂgH 6&b~0;W :)S]j5ǭmf9?RK܆ #_ +RsaDZ4P2Α9r@$Dw`R%鑘!Ms|r\q/@>pvӺXLQ(J2yLBwʔvVGqqAc2n*GNZ `T^lbYFTx^GDSW -!uAF^EAJ梎(rZI(>'~ ͩkKz--@5jq`qRq#P& Pn]EuUhk1`36}G/ ,]eNmOXx>{Pa+S흲7`nom 2$ƚ]J7xXj(vwd?O>t?ka ɴˆ  C,HmƭLhoʡzJeD'Yi?xvX?o~O"bbIؠwO@Փ~mplǢ]x&a&I<NZ4`3ѝj"8bUOX*霣@$fv!&$ui~lSOIj_Ǔ+Qib" DÁRٖIՏCχC>dtAʚ'L >kE:,v5Z_ ܒ35Z3$=!*@kB[⸺MR2cM≸;琉bd/(uKOvcAĂ":$` *R-&! ))6U M! \0r/6^KI#>,H |t?n%CaJJ-7s+rP"*'(At+q#y(WȆ45dq 7Ig%"ӵ\Db&B|]Ĩd.n=9id\z5@5Aev]i`i*F[h?Cm]>}4>o!cV}SPK()hU>~#oD / ?n~P8yaB(>[6 T/QR CXhۤ 6g$p9ʼnΉ;] ω[/[?;ؓIJ_Mc+SULkj2ΊZԂC 90>NT&_mLi/h~ Iކ>QR­ڣaM,Iu<7*0P 06 $ EJer`0i; sG@q8YnqL((Ìb ¯.TDd 4A_pܺ!H$ːه4=!^[ym1z4@W=Y#s!PDbDnt±[Co{,u;*/60m7=XH6BM_~<0q@x,*ܤzU -9;2 2 %18_1eZΓR aqIK= Pc2LA(GAsM4' >daD.w|mf>}E cs>R182ĆWl8@U\ bG!Zί ٠A(Lbd)1@a$ewm(khP\+pI@?GfueZ}s0S%PyyFF (;i\j8= -F Ȑ%dq$1,qђF!v맭z|B6GОTCE,܀IKsBew7ߠCEw0T(|L) l:֩R̳:hr)h9 zBjVO .ap !z9C!^0oVƒUp"iG:(GB꬚&1$A jے,5b4{hS \>푞|م F-Lo߯ƱBtAn>_=U>~}{wGh e4DS8x!zlQF,φD^3۝55âb`C; &pa_Be6 @`yR2wFEI(zࠁ׺^k.4Gq}\iKqZEډK9RbY֤djy]5bHGlHu炞D(5) fra H6 [2>s% #|Ξ#5rƽkEO~5Lu38!J 8W֜*Ab"30w_ A!Dg/D-\5AaExE_$?$BB` !W袩́AKlQS*HT#YS[SBwz6~Y)l}~Lre -Q_@0$ ڣJ2م~  * Hd^H1a]pCqǢ24|6$f9a?5ps +y,&#̄Г}2O/D"T!bn :nd%wN& e(r G'r`](3 M$pZ%8)K+;`42)Ν#%Ӹ~{hRs^m΀kI4O/æ㠰@@(逜ZNwrs@ iQC`XI:+!k.^G \r$~9w0 f[LGD$ӆuK2T򂑞JQFE1R F$$^ڃVn K0'Z\٦".m[2QC6zҌlPTI ݲ9q(aD0-H 'Tr5#%oVqAQ+@RP,z1qsU߄ 5]-V E&"@$".c->1RNU_><>} fƩ>&,aF|Ύb}=^Ot NDuNOf0VMU0fM;1_u # '~gF N7Z9;y ^'D>C{$ZKybK̨v?˷$QB*>y&b8=[Ծ(IQm@; 'xkcdBbi!fOQﮰ&6w<(0zuAs%fj(3-lEesޙ5g\5=;h`Rlu}pd󣏨>9[N"nYNBpb}ZӪaA4-CgXUGLPT٥A1n*#{<\~kX b<2@ }N?W(^MK+easi{3*Bo'b U: n#ArB F/$1KD4v+KuuN2t0邒rQ:al6ضrkx-Pk%8E[G΀AjNJELoK.h%Y@w(;0;r.+5rNPuPrbΗG=b6@A҇!݅Vh4`T\<l !"@X3CF,?@G둂`+dG)V׀u("b7 [-XD#.n<'.b?12kרƉ)O[>LuHF AX!2.AV@wxOFϯֵ~K3s_! IUFB0#*gh[?9w?Ǝѥyc3c#+Wa;"ZB²RB""Sn/5#=M|e~߫zJ0A2w,d_a6(jެE@ F&x+`E^< ֭}c)Rٶk6XK!* P)݆Y0;Z3֦ ȶQ=pcuӢ#FQ}`.3r k7o`EO gl?]I2C*GIf@3KڢD7 yD|nf@̄$~05k'%jijLN2L,~BՓv%swmA&.7:׀-;ڴ0$MtmҌFVTiU@0D~c`a<|J!c0-B#ąaV)f C%Tme+\()*CТhR|U3#na1du}_T}#c䶦$/E:JD6WqXaj!vvEpH$CۏӈSuOhs'ѪلXc2˽To,5v_V-e#֣[L)h2JmTeytx9֬ $,Dd" /,"pq4%6LiZաCeڿgCE'p#ZFZ,㵀{ bxo";02{>ͫI @싂8 vZ^!#RN\)Hb7w!W>>U:+Pr̈́2XE#;:'A79Neu?(2 1* b!\(/K_R|?2% 9G! ;J}#|[{c, C@mԃU E ޜ{@[ BT00q,]ZZa*$H쨂?,wDqmX=}L(݀7b$OKO'd::c-qYJ.bWaj4o2HЃLG& ) 7?@f b<̘ysV^a)۾g{E& ;UYiQ#$za~v)5jBd`hML'ԊJ7'ufe ؈P^{j=\^PR$t21ePი!A 1`FlLcg㜁,֫4tpģ& ȳ~gr8ap!q9)uXzͫc<`Eiv/U h A 51æ2TG|69-F3_BgrcRs"}KMiUނ*Z 4!{cHqٺra8u`aԬ(R,I11>TU)R9aΥ< Ah>xə*z'K3o[Pߙ„o(B/[Z2 {B~#>`mA=J:CzyFК$ MPl(嘜d_$_׏ECcX;n1Fg>Zr`hI%ׇ~5_zGwb倅 .>~Y (=tşiz)90M!%O5:#ܭRȠ HӐـ 4R NgpOFf!,d0Ê-*k6;txx d(Ab16¶V`O/: Fh/N=xL]dރt6u ;H} I^tI -& Bhii/BB|G/0?S% =k 3{u^+]A_Nх @u r(8uBDb3:4FG2lêx8oP:ۣ[^TtB1aD !H% ;ڨ+*YtEj68}Tb/$QSH10**_"DO; h~N+D a<Γ8'R@>BhӳmGQߙl~a u3ͫw)HVpk y0W5=SDȧ,5,nb82G]pAy?;ۄܖRgaZ+(:C)b.-ddq8AhѩhgʼntaL%u")0Z7$ O9^6C'oq"1 ٯJl "bO)gM"7K|ۃI6º]k3Iv J>+LyQ߫IJ+F 7#輼2&8zs5uJۅ]\# R&M5,Dk'SPלVLwxwyw<;`W~47ts3%tK# nA{…Hl'\xux[QUE 10v y*+SQcȾ=<G$gvFsΫE, 2W!*xS n4:uYTZk>t)+4ϰTnhVY*- l=@0u_ Àm~ui_/w` o5 dP)xˇ|oe aY>^a|`qcy{8LSyYP:dj| tQ[ ~TݐB`Ni2,I!aD &C@, n8 ٞ1sF*A"I *wVEiIPY|}q2^}H V<B[tel}XÄ,[tYD e7TiUDcQD]7g4,ϣrm`^x8`/Q7 87rg8(QŤ5u?c1^JS-}Si:r~ g]/Pm>k)9>gg{3"{XIF4.L=|u6>Q2IA@؀1m4@U4vRﯣf𤋮$z‚DQEOP+@.@qH"'G@mx +\x(&*:߯l-T%.WmX"Ao`E<HQ?m9,RU}T~=rʴ l ib#l;鸤Ђ r|d>~*u%{r `h+ADGjeIv+D~EOC 正<6EzĴ " :Fm?RPFSa+~y`0)NrS*<@wFFDpq`$WzYEp!UQGAqa;2*"Ԡfҽ5?.LHna8US%!gfM'0"VEM uPVCGdaӽNR20FSUOfLP,E_ U;iEO/mӞ) 0lּ,~\u_PҺH! GV?)EuE9 ]g'2׻ usMA)KwoE})$ds`¹ d/լ0XPˉdO\势7EJ Fr6'+18 +(,5,ߤH7aGߢʜwOr^P 1Y%?d7o V+Qo2 e P*,w.xXA(lmFq+m[|3{3R#.*}gu"Utzr@ 1y12@E\2{\6q`ܩ"=KnC0L'pNrF)QI9渠S%V =(fdňj^"YQR Ί×cyoHȀ(Ca`W?P1!PdL{?$BV]u{fꛉG6}pVIل,2TW+heaA2.idT\kyǀaVf ""`l JfPKrU];gĘXGpt>> _%AŠkw3 MRv9"6cyVH0`3YBO[g5B41T/UXTrCGR?͓bzAE: 9u0bq!VOZAH#!ns{q{vUA(i[ϳs|ZPc6(̱(HD aApMPtPഋAUH6 tӜ#04  Đ-8ndqnKdArT&`6 9@ Fn)0ᑏXU|u553$w%0x ``P芥]/nPP.Psyʱ!0(&8 =aUY$[_# oSa:2*\KbhC_3]yvHf`ujPPwKAʓBݧ瞂L,tT`.幂P>f((:݁qH{Z!D|wYsdY|7jv %R@?S (D%"DFp j ??ΪmmHA!D0H`PjC{b_5R0oGA"lZ;ɍ~rX_m*B#k. Qj*xjRC<L'+7ID^f$RE)Q(Wz䈩]] @DH "u؁ 8!~I!V(]]·z4-|J2p9 ,<Ȱn#H!+K BcmRiD̄;,$ڗm b prd㶄 V"4hA+3z :r~B&8;(k׺2ԙ$}$$A(7c6 S h)R Ri5G/h"J|lnM߶$0F"r*˜뙇KHʛ\gWO{qwwk`1`S +`$ÊФHv#YCd)F `^&t< 9Dȼ"r'_ɲVE9z &B|L\s(O Gӫf`1DUGc*H[y%BmܚaKl4|1V4I%Qc̕uVAu} *^!$ 8q.<;ҕ%TQőquR:"x}'{ŕM(#RѺ Q-r2\B担# %.* PB m ?7|ϟ{>.v`#1Z5__:D PLP}2L, (eq4Sg x顚2DG`9&\Yb{HZtUʄ&gZʴMF&*Cf睍Thpe50 $^O ktAJ$BǞ~9yi嚱,Cy+䘣Z V-2E"Q#%'&jxЇ8tDG$KW@^!HLPdtpĨHwX"r'kZXa=&G\8,؝p֪.E2H@| )l\l&ق$ ݠh Nh2P"eJPٽDm"#u(P!s5\lPաIa"fO~Όh'ΦːspQBsa-pKFW<$\x{@݅2q̥kjHJE#P~,p.O&629C"8ov#zXP@+ƭ!pV_ּ $GQ=X=SX,Q#}Z84rs2LJw  .t7@G<\Ie6$!&}[LҾ2AP@znQӦ|[9 ?8G'eN&5w09kԀDھ'7CO^HR}ع#I^)N]fiЍnQ v .H\t?>}zP*=(~/Ѻ1;t17KJ&C+t F&d gU3(@ cjl=￶x20)\P$IP/8(Pw]Qc$H$EKol$j#[B^ ?!i~?AZB W[B98(PMP#&9}ge 2]R)qrB<[8.ƔyPD@&Lftf[V>M<ح![ ]`_ }=ʰj4(v9Ɗt_ҡss,p<:_8-|;ƑӇ!ޢ_Ա0cZ;ONB]z#6&G)nA  !k \jRrsf3k%֬,-Py{EA$GBbJGt*5yxW"c:` Pb&[6)ЅI :u:Q|.p.[#FaBB(@ߝa-0edǎ̿օN3C{s.~Y@V*~kBW0P!i 'R"Z3xdUqt`\Y[B2P Jfkio Zkn"3-,C|,<R$c,ZI}K`ِC_?QJtcCSM6|gmDDehs' Q&8]BJ#3 j"ý|JI ):۫c_77a4 @@]>mY\"v_g_/Q'*f$r\굽qކU FlF ~_§f aG(L"*oeS}a`Chc 0V?&wǣ8TNnLH%я30A`QQ)T'COcH= K(fk aH6~"c 2X]b;*nBgH0r G,58SYvу(s&u"$)Y~;ES4V?|X WuB[c9_T=.{1|.A5-Fk&;GgrI}^ 5l eMOmT`nt$CE@P{t*a8 K%p @_4h{;٥mհnЊYʐ!\=h 6 S?jLxI?2Ac%[&<}Xsp˷Mu(E6"M|H"ض{xrM`Ű8 46?9זoHgGq35Q,݄NxUq$tG4uuL*#\[uiB pC_8dkfgra'Wd#\p" } ^6pnWBmFǷ-1z&7'z >q)@ec88UHV>֐"!+sh - Ya ZE~@hӟ%*#=d <8jZo@EJy8c-]nz!@$tY(*.;Br^T.۰bpYTFcr{9|lT\dӨu+%;Svy<#B̬ 2 ` ˇ~eR$`q߸Ĺ,zY XғڹdjKRLyXfE9:8 BK"*1bhoƱa$xb00GCƺk¢-˕pRJ~6u; 1ZL&@Ηl;JfQ+7wZĈ76OnIY.BWR{7)V~3҈mo6 (g%j`՘q5Q3dꚁڻX{3a"KXVE#Vϭ_tXpF* (@`E! P J!U( HA =8@%{G 4(0uS$p;n=;GTy$}`0#0 1z8xJO~L(s#n1FceR/kr{7΍ "00 FkJ9 k>@n[||L)m]13_ 1B]xoH{MDMz @ҧ ᢇ61)FbC}u˜-p$IʼXwC@̤(q1jP.@Q PMI$$j{uD J෮+)Ḁ@OW&Ȏ 280ѦZ&, ^6yoRI BtM hÀ`JK‘e b# Dٳ4GI[s!)e tioNQ4i5]Q{ڌ8 .jȟHYN) A#6QX0^,aMBflJ\A) z:J^ߐf6(0B !Q asdwkq)8S{Ӈ5+{ok1 LH!hLaiy~ M)tz=D2D`w2S#?< q[R9 :xh4B -z/ .z9*EKDDQ]Z$9T F`DgHxގW [ DgH7D%9it!.].sm"dʠP>?g8>|z ɌbpX (quxϠbيGM~8ᯉnK̾۾Ap@0pH'' *9l:eL}&W"M$8p =I{1 nZMO~8BPtEVQy+AT;rn2i tր8g*J`Vm(M%I 7!6*|r@'캽T hJ;[= OO8N~B$$6A 3E(7(痊3 D.}h#B!ABS@Z_QMػ;#}sunaz1{ ra4@"$M6GYNL 4 fZ -Cpa/TKN:$;cDq[ZX)?nWWt{]^o9x&>L >Hpkbw;w-r{LZWulQ;*MH 6+|K֮w8yGHydNP CkMh_S'ĭ+>z/5[tfuyIȗs ּKw\3VNY=57J fyY#.uCw<:\ALBh X Qd!E8 юo&Yci;?76EǟS>:Cl1WX1H|^\%kt(+ghc&""xc*\GbڋEPQ*ĴhsR5 hƞ ڪ"B yU+GpO!C lhN< ؞z3u!ϏYc]`c1yl\"G4D!r8F'޺w)m1|9kc4^jS7rc6m3iFk".iAx,'XftN3ay#pƅMiEEj-U5a*fˀu|TăIͮ9#a.~p` R7رYi]8Ul`agT&+9HRIE W\l.k+عCݪ,@:EO,󝍎 8Su $\c]j!jfz㥜 9BsC}ҬƘbYHc\C"U$L*^.xZNCulhbsVU!חMsBMH˔&UŸߪ_9n*`ͨ}nnw;z웾kd%ի̸Y7q4Z3Q1p0ԁ٧e3 Ey"c~5ZBh P`^g:z`Ics;\lq>IE@vV=gȾGh@P3O0bPzbHF{ijԂmS"`䫣ڳd9:CL"j$[RxuI*,QB$BҀ ;L==%1rN,|T0 UHQGp*DH[䯇dgĻn.bSK3$Qh0dh1! VKxR W СܹJAbϬx?տw! πn_+ל #uۚQTvdf5b@QIO.h<{ $~T*(a9~:Xx>WKȣX&?ҨyJr>Fdn;1$.K,M&w` OZICHB 0"VÅDǎPrOj˗=vsO]H<}^n^"HF`I+Wd_6{a  )a5RĔe|0n_Rok6%BgAz2hߋH nf 3S|H.tuYJ6k;=MhaVF#g5 :a$y; IOݣNJ ;m1Dn~@'LOLI ;;9}ְj03u<ҏۋX9Ç9w:uTyfU?d"EJHuI ^%exXbQqvh7zUEĜPq[hD`P6dĻqTT"A3ΜvƲ/s%ETYY;X_QoG@Rު/.cX`I ~ P{L0U}}1#mZ:%b>#0lh[Tz_6#;  ^ KI֣2cvx%: (i8,Nt쎓vZ"4vR2z.?8%,Sw_)Ae7WpBHJ./0"BV?i |b2"#U^S/pjk.>bDlhNiHBQb8_ڭo&OЪR)H{ֵzQ'eb5\^աlH0ND WFsa\O[F>҂c }W L%.`Ah)/ '];sg b8,bf 3ҁS"  cr3b-`';oDup<{NbȲ^/0IJ X])XXc]a7nmȵ)t0Q΢s@W,S} Ye.I5 d@Ҳ96n,0Y 0uFr'[zmw =Jl J|N $fLjU(!N&eux{`,=D,ޙ(/\|yo~%+( D*bV "L%TSB?WgͽxCK B=(o~$qr*EH@@\Z 6{:=>Py9.CSA[ V(pѷvؠ0./sSF܅#t'VI @<}Pʛ`fFDzd2mZBI!A+s7RD#lrtzn.AA"jXy"(1DHZ^_$|uwtP"˂zZԌ>Gx=():-p!(_W֘VڥfMHv;-o1,6ܤFyDr`0# fЄ!uEGz/zg֯6تe+j0F[LE&7o4]B.:܍IGeG6X` ` T1*JC C߽?ϧˌ%8ie(q Zs0an1 *8HYeG&}Ν?u]@or;L+wBU #jj_/Jc E(^m:ݽ/r8L1]53B-һ W&l{+tּhgocjBCTCvaY^uʿY Oѝf@*Vn+yRPZÖm4P/ Wt(?1ZTǎrut/#zRD\T,V> x>Ck`5 \[fB5WuE t`hx:Xy#"dEO@EF1 FToז?0㕭9Dy{GGG,/B"@r?jBwFRU;D/NS<\>{Bo4kZ1fckQ[nN%8цHB_E–S05)d de~(AEiR!~Jd( 1a] 1~ 0 ,O@#w-ng_U}-WTr5ceKUO) ll\ Քcq`ԉѱX[ޙ Dw2rae v!Rch%+SVqp:8B>?t>9TbƼ3:Ч;dw:-zΪ3vE\W ]HA!uuf7zu7¸[R\ h>Is|x&k89^ C!pB`Sq pRO^O>.w•lzy :.y0F{%{T }⣁7̀P 4lRT"c;?z@Ax@R |~Q u~PA:O7-?|j^`bb ;9 ? Tӿ@^~ݛzcw E7 ϫ˘~)_?g&?%C2u.Qֿ?LoBwt -ݯ:z_/Ox:?7FvhJqZQ_= 탏~nG :+t^%F.~Gf "'YM]i|BrW:=uY`_D;=S~jF_y>oy*f+湸b3[/g'ۓ\U]we;y_fC& h hJBJąxqxK|L6Kh^ H`C@Ⱥz;{F?|Fz8I@G{}}rO|Dd; {u8^  zXv:6<S?ݤ=ߜ+|۷wP@ |8/)/y0?G61 }ٜX'217:|> @@tx^_oǵߏ=%񁿒AB&ìyf$;P7wOɼyL(UD2}O>O@ڑO7tQ:S3Oç_}=w1uK}.OӮOoxW~>hn~=#֡I?B?c_wuwϗO~ͩ~_׈U?z}_IڄQB $wq|Ktb[>ܒE*e182$z +l'rѪ##@p 靴-,LJ4rr !?GL _i>|'ު>ཽ|>#: ˗k ( I1Amc~r, 芲@55 jNZ꺘4z:\C)^̄R(h86Z-Y9J%S hp*D=$IPZ66v?q+K eiFY(Mfu3_bDra[c #N?lDau6"4?L('٨w| BӹP@G~4CgqK[}?_mÇo_{SVWW}7?7U|;%.4@?i?E A  TpS55 c*c ?SQ??^`{&47W cd B|pCo2:d2x;D: :oY`(,wrP2y FOv!zO<)음?׆u8v4QrS/YA%v)rlz¥P\7qO$d<-<{CȍLG7$w' R!ӱ?8 XNOp_I<%K}pX3b[!B[נpzAl2dD+;2Q1# c;r C.¢oIc\!s q=R)ԗDAA>lǬ~?w/HO đ4˦l`|Ɓ&ߗm8OeYA#}TjTdIae=0 p;{/FASfo8?CL.=tɭ,H=HOC NBO;;&:?HMr{VbZi\_̓vSWN['э~մCÒ11HKx.EӒ8ϩ "Ҵ$!9w*H"&jJj+G6}14Qp~k] `˓=1(+E;cv> < pl8dLh!e}l:{ 3PQ Ce{Pr`"ߒiJ" %j@/B]LqX .z),TDc#[A4 '1,Lc=~?wc9wÇ!k&8ε&1O&^X+ݸ1 vaqު WI"$UARA$ :0$*Eot }I+fRj&@!h>&J7{&mz|1)A %vebD UrWhBcf,/Y"QH֡:PLW~ 'G?B>\_v{yn&y C~X _tɁ?^|ڏS<'qB:@NPW54_["L*$i.1 0/+!3Gw#(!͎B0_|y}ڎ x#(F P0>G?w,Fz֗WnO,]hɆ~x۷=Q{!ꆔa#GyOˠ߹p/TDqLj|GbL#@W=ךĒ $Dc0h:M9_2v &2狑o|yI1R`O!b#CA.Jp2d+=[]kߠHqe O=M3< aΞ#]}Ơ/(N}POe97!SrF)ʈ2w`H0:!NzH*=$B{E6ѳ힏i|'q# _J (1Glw );=q4]P 4PǞQ _7E\i<:{5%U"yq@Bxmsf+1XPd:jn2@" :7Ml?DA*mޚ13pA9>#z}C]ϯܜU5u2h< #/N2nq7f췶Ie÷~}^RIVPEGu%'DM<.WX9ނTq˯6cμgϼ?ǍcAǨ-#30 @; ^\mmv֮~!Gx=BBa7 wccemp-}G~ư4 Ce~x`T :giXs&}>sGk/ϯ`VIצ>Nʏ*}}ef ucH/4a/Ͼ헚}[vwK^>Pӄcv,Ns,GPrKn=~qc y꠩в]qۧH b>^KD {g~Fd"9{f#GQtx*9_?WՀjU f{\o#ë^V^)tc#\vN T""APGJ' p0c@W(+?}WE\D1o9Y kws[aS>#Gv^θGNPt ^C,g_rJ]k5/P7vsltNeSSYxF 7y[W j2*'?D@-]>qW>L071J&G1SpGvoB\7wmz_lk../W}JGd4P]wN}j/J.)DzAV|gD2n8֛T['\)q\ߢt@)vqhעݪ.B`̅s Bz KhHuP1u|W'A!1jlcW֐eU~Uoz/]IDPQѤhim?&ǹ9 `Q ?*!o!FP"Z~?<&笮9nj<|i/46ث̛z(d^4`;jcZ}Z'A2 N#O8v "-?ոt ZHoEh9"hEH^ b%d,?!Saj'y{&2"ąPr#,*$JELQD@2дUR4Х @ d?õJ)ZMɢYeH Z bF ;P*!b)mih]8#l(0A`ƍ&m @PHj )b)5XFGZаc"U$kRب$j]iO}(p * 钊` R UtiƍPTU]pKѶ*44RU%ݩ ]pRcZ `* T>vJhC*njDK%0&bAL(z "-ղ1CX0H_M'$Pl`j(QYGiPUA6[XcDG~im |Y6qqG ['U$tDdֆAh"#((&D5C:)v$ % z|w& E!1T?{ sghbs@SS$PA?vgG( "Jl₢Xd6kQ1qFg `N&"O[h$.]ݮBP"hP[OrI? S˺aTH)}@4J0Q >c#ҿ}"RQDMDu`"H RPPU 4(SB$T%!ġB Q| p~Mvwh>sϽ)| DB=qI a\HxX$x)!U9#e XxP܂@C!חX[D` Qk QqA3?Pb$&* 2~b^# 죧h/yx@)@4>&N~`}iA! !DMEŠF2~~8zp 3u?嘀̏ t 7),C؈7l?x("(yG?/@^O^<ܞ.=HAgPzb2RDPF@%A>e]߳a33f\*9`EhDP"AY+TPPA!#9 A24!J&T?onMnO9%Q< 68-97mg˯ig@؁=́5Q>KՔGցWż9lAauQrn5rJ}! Н+: cZf 0^K-H/r(f{9ҙr G?wd`ټg]?nv&\'Okgth0c7g9q6!8"+&MD3~5F^Sj@Br^j1ǛoW/gNTZ4/hBJŜGvyNbeb׶V/gv|<%66)_/+y>O7O,u@Ih~p`̕!~{ 9!ظȇӜ#"POT6bqs| E@L}!Vj0@:vb}q8=PwBikҞtJ&NΌU&ȑԏ'OT[`CXO5ZW,1c,r1c3,_1c1B hqa! [kNCW!ݍ1<{;ĉrC5CA >-8,ބбq:V-': (p9 VNqFslbKk!bf,9iJZR JR)̥@.#+Njį3_a';߯l]N\L/  I6VEfr3vY tQCC)ĨS~⩑|!΀T9W5 H yUV4,hP(NGG]ubG#]k7֜F rtM r;ir I^& .Hc%0?~돟@O*¬tWǼ ?::1bF  2s& :?Nb@8g_Vt D q& ~\#Q_/y_4(9xt1UUFGoG' <`<=no'oDx##goZtUH3O $)@T(\z547N m2=ZąB~ )fYΖIVzB$JLgv@ Ҁ0`* !F%?ٛ[Q4gḧ́F_&z@LHJ3> /ҝ_Œ6 =TzǢ |.9^pD X'd?W*X7lqd Q~fHt=KD(_uY_n+<UR}wbUuVMY+5f:KQQ:oKk{%6i(wVtduIyDJZ|iKC &+'䞙-ݯn @d:ѱ.;+l5 l>ob=L$)od'+>Qax\βk8(Ϗ|chl26p8GR 1$Txv>݇nn=@x6pZ|c=~FFS68c"z8DqcU0 30%FG9yZK۞<CFh'` r BH$+$(%'Yx_IVqT/A!J LfZvwO0;?)`.YO|U1% )-R7 5jATQS1v\鵉3dw:6n=eb,c  f MTR C;~7j0wu+TUy<󲬝Ek:3 9cIῷ-RL-y2x~pslom t.a;!<3:({(Ł%W TpgRbާ^f! @Odf SFlVKi)wT@v>.D4fw@{ԧPQ98 (Q/rg{uVWJKCjYti3uÞrvPV0ϳz.Sǒv_QRs/؄|V~|zgGlv(.yYHYSy Qw@YZ΁6"L*宒&A?~7,:V{^GUԢ1ё$"s?}a]FG3XjGчޕ>ܬA{;srw续 _]3뻉?~7 )}V(Z G["My\x- !Hv;T{:oGٮ$t#;O7 tg_g`8vuqɉ$ЬHJH "DZ@$,FYK5QQ>aS`ߨj)@Móޘ..` ^ʭ?$ǴBJA(}=a~>KHRfvx-6_dy  X $J>^Q?}ibBuYc` S@QT~0I>]`ɚ"]坰>& AX<OSy `Ae<&6NebBhCaU4rsd4jyUu붚4[EpĈf12|RwP@{rygtSL@5y> \ZF5.DvO.IlB csy0CH313'O!T<ػWQ: )znLn`x^Hh9x|qbp]"SLx=iȣj=|rB((fx/| +4DTtXL015PE\;?Vڣ@=&w9 oNbM?&=SՀ2F$(LyK!E|`P >6Ԩ>DDQ=ɠٻyjS7 8ڂG%!">EGsYd֊{UDǔDjT(1 iuyE0:u% DZYi{ߚO_b ,apndg-5 !0SM&nXUF^^:Nc)uhri@EM{ ~;O 8<{}w2cߤ O3olv?#N,N~ ڇd"Ե1V3>+%j5{ Dk:GAo,\&r!Qr !23#s(8ebgP7ء\P X sN 0LlHBBAlQ9B6#_bT(H#oIz 2k#B1︔rߦlN7dwCaz +]7q %BR [=\tA)_(#NTve|hx^TʄV*2VS9ʭIRDr ATyzbPIA2?isW9鋵ڌ5reAtr᱕5-\h+pR6=z*).bZӔ"'YBJU!8_(MX<SNm= q0xrFҹ\A-t&|眮8=T$: [kC)\ϡIUиYfM!^n-?w>zV*j^hQGnO8.NPew$"|9bWR;1Df8޴R)zn3%m]b49\OZ*ʕ jV \@D$k=r-Ʊrh.)  "jP: Edu J5Aɞ|Y]gi:p'[:է8t,pC\grP"w`1S5Klw|t2CeZ*Z=;c[4fEޅy5pę{[^ ~ntQqytf5I3*Y1늵ൖ"EkVM*ҟ516024i,f:e dMϻ7 e" ڢ3((ɠvUKᦗ{~(oUVZ3yH z֓wN ɠ6!A]{:&ő^/zǎK~S)-ޭYcmŒ6]cQqOq9 US"*ixr.R"C{WF]! )h7s*4qE uwz |l<{. L̻;S\;?]oDJCq`{tr^Xg{JkR찠QͨrAf=HA/qx=8(r?$߶ _`ұ3nC( oɳ8IbsxR4r uRx іMDHs Dhiճ'&YkJ< (ʊyFtyQ*Drf( s4Wh˃~c/cܐZ;T3Q ӡf!(&Э$ͅ(H oE;t(wb`A+¡$oT@34׉k4*D#8/G.yG#x10?25(G?i>9Oq=]:ת#>>w@환O_UlN3>̦532Jn:I:saSs3+$g^*ܠיI'2F1wm73h6`v@ߣK;ԟ4vu"( -HR J,*~@0(x7?[ȬbPv#:|~aݴ"|x?F/׏QxO5-9th,^3]::/C@7߀FW uq+ZuC*K AٍpM0Ee0 :@×C+~hh`ӱY1u@oZiW963+ʜAHb4ǝ^W=BB,zs愾cώ>;91y7'_'zY!wW _f2pF)O!SIbpDa@p݄vywU_T*H@'(bCE ZitLlɓbFhI|KO+qvy}([*iEPֱApP!/83q7h eE o7LME+&0@aX('BtHe 8)tRQ:q%JD1)4aLkbBl"idzzDh] 4@JAҵ}'Zz@R h)N6M.AJ(G~=/g_& וƆ'O. a@('G3+PDƈ7r>ОqzE#')9LDDOMW(}<5$LӰ]&O3~.Q.v2cC-m{@Knv G 98Mӣ rwwg\JT$dZBгW6?|PSN&Co2?N[ 遞Dbi>% Wۡ :R">ywW{Ԃsֶ𜭬`!*'BȖL (9i [ Q ?УϳO F*@r B =[|6^kGʁ|;FThN'%+U*jQ ^p0"¢*qkф'4pPDf 0*+DȂ0,2p[:KeZ֥oWxX8 )1 Cnζ jᮐȀdGDL< &fykǟi0-> y)'i(LSw㽠E'H@ !i}#~,jpP|pFϿF#Yظ0{3?Q{rtHl0Jy?yߎg*Aa8xv;t0gm䥣'l(iQSソُ^ UV'QQ AJR@P:PiX CJѣIz ANf*i&""E꣈! F "PLHTLUQkTTEEEDmӈ"iE1Q8٨** b(HŊ"X""$4""""" C""""b""*"(AHTI*""5QU15""ͥD(QQZ;b"*b""""bCIqD@D'E E E E E# *DA3S0ELA"i:VF"hb(ѠiUUUUUUUEUUUj"*"UUUUQUUUUUUS*"UUUUUUUWUUM^UUUUUUUUUUUZɊ*UUUUUUUUUUUU1 b"/1qU $T"""*_&a0D7YAnr|D+Xt0h+L$?7_>8a4S|bT*5`U7Ň/SUA(#:}TmA#0.`E{#?gaAA4 A@Gvrajuxs8eLk[l^|菱? MUJ!BK>I=}@!_s~;SnMwRۡs(%m4GR3X0ui,Z``HqAE5W]LrlHn՟_#`C˿!! *xa:G_Aky㎔~r^eH4 A Sw)-C3f~f[ X!ǰ\k8O@AO&^7D$@"( S c]U IO$hr!!=򴳭Y ~Xݙfcs=l98;-KDĄ>Zqc}ҸKUUUUT )*B@$AuQ•UBV$H$b6a29]uX>UU-S蒐I VfxB\7r[f(}2i >bhvAPuXxx}?f{0uS\q@ILFc8f?+G{4!ܓz~@: ,((()  z.ۡ  #ؤh_'8ouѶmmkM㇍D{e[9B)_´9YZZֵkbŭkZֵkZֵkZֵkZֵkZֵkZֵkekF933kZֵkZֵkV[^_AD mQcg 5*r'0o-d@D 2,zT ~C(Uhvz@dFHOU)`L=/X\5rh!zJf}e^nLfWW>ߨ`Ψ~~?~Cnx $ jwAIiv> }^x$=Z䖄)Ї*h-Q 1a"JGL6U RoΈA4 )HNflB̡fdÖ]2f? FkD!1ѻ ƹq)JRδ)JRyyyyyyyyyyyyyyyyyyyyyyyyyyy9s<<<<<<<<<,6MHU@$oPsmiSDII; ~ihS2p߿~$)8pFR(NlQ1]u]u1Y1XJ:固b $!'ߌ4ͭG@P,ch( @L}~Ld)Hp 7kMGW|>aPa H_⭞yJ,^ʗj> fWq 0D&?eIe/mIA2PrevG$.BQ}d0(9x*xiwt!B#hdB0]=8gWNHKpݲy "!D @Mڶv۲ˇ sR2Rrv,8WAZ7%XAb 6%Z_|7+0! r=㋭"7$?L0VZUq9/:ޏD"`k!+|枖Q'c^kuzTjP!7~< G  Pg1 8 $u\aVL >?}>dz8J! k}pک1F34t dׯ>r\L6*ߦSJ(i@fkgv G.^R8^ocIy Adb~g^z"dL i Uj}_ӥyY)e@DsQ$w_D8AH!U<@(7B"I2( \NBCZ 'dgwҟ)E!xsdXpAi!1z(eRgTD$jTM2cP( «8$<S>o~,6Zvխ!V)rQQ A 0Åqe:KYR #0V͔ɳE^L FL 5䪧!.;Α2*lINUp +h6R,1ߍc+)JpKHޫJJD {ݬx"j$P@ k>죶YY0'`* _'FؚkTk, A)g ih0F֤ft -[zH钸`96s=+̊ XPy.Ÿ`^ CG B'xӑA,f-0!FlF Ik.aDϴ~"L5';0(h-b'hZR~@ԤKS=v\3:^ 3 (ɆYD3M*O&ђnQI 3gRl!Aa!͇g1[Z2 S!X B[i)[-sL3(t\D,beWYf%n_ HD`eV A spuxM^NաX9 ƒƍڈ8 Ii9~3Pq1ɸWO(1|CK* q|֕ٽ fjNnloz;2iէAδ5pN7'ZS:RIU%7H_,eH[nû`c!g (ZV:b"&œBQ5[VO9m,o{+UmR[LGn;|yNV'ױt=szxIX p`ϔkJ ]ld?pqmɸz^ɿo0 zH}RxπP5~|Ѫډ/Kl7sAMB0%}b8֦r OPTdu٘ pKhYGc >* +H:Q5G(|<߳a덆Ð̤!׷' 6oaN]b!;ɩoG^UWD "G U|gοK) F5x=qyv40zqQeb9o$SQ wK:P>ڛWiu- 1Yt&6txE@LWޝwcA4b_Yق)23XY!P Z ^cHdUA?"`H | ׌Y"0J m{>I]@rٲ~t+BF\*}L!uC-TP3B![jo"ǿpOl1R`nl \N`7Uj7M49¦mH ;ι7sPd>(Ϛښ9iCv se-Zb) >hWp&A=8&0aPFA- k[sfX4E801vQtOxYgqw:(8h+o{, ,I/oQ)H>r=5Ԭ@$*ƀPf@io ywe9:v6 <\OS)R<4_6y ||0#擤D7^ROK9sr& =Zc(q*wWYX=3ok: pc --NMAn NZc7p6#/A"8Xa "eo:-nTT@F2XN(M%&sJ5)`.SXI?;mav;`>s 7J@R'ڮ!D5(tAH&ҢQIZ!L^ 蝇*>vz&di?[ȡ7%ޝ"لrF80Dƈ ϴII\<;GPm. uQAx2 jB. rQ+w=d9 J&_"ݟ#*b#.xd.Fy!< K. qTNA8c\³[Yqzn٬ xGRz@c SVAuCdu!{h5op-u:wa :} "Ds]<|sqc,,7q/&Y~( 3NΗL.*iUGDܣR'Z[5 WVF&(Cd0$rhW"[ 3A*\QJ3snovv{dϾ)kC>XaȠqiAިl~tQ(4@9HHRL˥KսTԩԢ0aB*dlǢ Dݪf'zSkѝ3#@A% ?B(A"t:F X}Љ {u⬬~,@Κځc]78ђЉvH Ro0`[kb w|ֻtkp[~SIt;j:e9:o'=ѽaK5$߿~UEwy@oxrEs-H'-gMQ{Zɹze ׿rƒ >]rEnA$nZZ dl{EÁ$\\}>J#~DK/'yĚx/dިFՌGh/~)yu$slQ 94'$L=wn7L+Yգv4Ą) oƟkpOEAg\"; "&DRJ}v)<)0є3d뤔03x{g;M pW@iDmNjWiݕ j1(F -@tHmSQ ͒ p(d!M _ }`XtPNT]DM1T_eZ!S CR (Z(ݰ*HEmht@dL/ҝ1;YRq6I5/%IMN`[4:( $=U.l%f&\ {0`&*aJf!B `(d)@"L%{l$DV3̔Ht=^cGݓ Hh60:>c} {!{vBvvJTٌPjeLpa'ՠ:h`I#EEx4)ֻLYM55 Ć4D0iAGpuic`HB(|=:琺;dCN~|O3im3h%aÔtGèMrx7qTCScn v  )Σ>}wACx \QCÇz{9󣳯DZOi?ZPT`mFI2E,PQ 4S3S5$1c}?WEāMy p*0Y2*?/tm_@$IE#0&!L8=_j(@?yw?f>Z[s-&os7cFŪ7d.Igg)pO!آG+ɦ`$zqOh}[B*& I@'):lD} 9rXN@sodPӧz=#+eDF=6J{ UOIYg0WjNv(JbaRtx^n:=*zvw^1~$H=(pi*W/A]dUC ΃yɩ-䨏63TM7m CCw\2q(eL&9#y`3']#'V#)5F vKNj@℃JQE 3(/-yQ6m9"O9`Z= eWuPaL1P9|60ʇnU9ń\ Ӱo<  Isˆ|9< PXs:JR{a0^C*9ZitU6'DFa*bFQUUH:,Q}TXb5,ڢ6 0voC*"%Ԃ9Øu9ɵUn8^sprY^_Nc;Ga|0РR |m@=eQAN~OqbTuG1?\"V}RX&V2`WЧC=2^x]tTr U1PcTB`< qc3W.D k9SI]P?߾<ο):n~LR***1 %}̯Di$R!zЄKb;F;-xkX~.u#PX+*)ݮaQl;($DE1iHzHEQY0q8.q6T`0@v6 p` W_A=k%TvHC5bi lެ멐0' Hng"PuF@;J2: @#@P!znun}߂P;22ˡɀl#w+Ydw8R h4 l"1v@vl6ÿs3KL,Y~VPğD䢯-_;,|zv%ͳ fx}n4C4pxoo?;qy1?6Y") *&"*7+2)9yz64"R5wsYr<<# QڎJwt}{'M>5 Щƽh5wr2sC].=uڈs6;܄ZZ?S_s(2 )D}K[<= +UPDO&vuA=4Pν@w7Tڧ@|'_ \?Y<Ύϋɧcs>e=RrȏY`,* @fA6TLuZA2pvsXēZY k!!_|IZ$gz3;^,(JFfe!R 2ة˩!>c'.Xc 3vD%4h`"̏1yf% <ֺ瞸7䇨+xC}`rzGN{#ͻGPGn<06id]7^t;; &Gg,'I&uνM/;!sYTx9̝86 g {ID&t X9c;Q PW*u2e"lm0=q ЏpaS%˸G ≚] n&xtAy@KpӒ#ΏoB16c= Ba9+un)A}EwN'ӷ 8zSє=0`Sx:6&Й=qAKى Q\JDAA - ggAxϢ f@>F2DH{Rp݌}[| r2 (vg=e# 4X`e @ߟc/5YPƻM>QTHilļ>fsz z 'sǗv؈A3R5ϳ}^#}`kQf_`#]"Aq: qGyNT; O߀ z0~Xy|T0'b=]x} ی^4o#e@p5B>oUW>AΑ/~ +En7=¿o_98Fէ>_8'_׼oq3dO&I*"f Nh$"&Jb"|u5d >YBHLmB/GG= dhcABB&"dG~]~`LE%4s@ P#A_:B9 !@ w?Qڛ`&w2$;z4t~}@^g.zQ )@$J) *D*(p#`=VFDM,Jna"}Vuw|M -,!#t _OvPG*?c30'̱8JgrqGnt{a7ͼ>Pr lT 4jJ@]7s9/>r2ӚgGO`;z#\^}>:MhHւ4k[wF<#K&|ޝ^zo5Xy4#Kg>N0#zOB3|i]_r@A:~!I&2hPMcb)sT7*B)b)")$f"*%b &*f "*BJj&* *ha"j &<ࡤ*& h U7҂E/DTQT m6l6VOIa> VQ0?]NaxSo0=Nofa1Hy5l1̍;|'pxw߾ _&dę)ZM}E0.4d0&o@xA?2 'Qnf( "hȮ*)DaqE|/lƞ jeSR4SLög&dHN@D6U~ Ƕ¼-oΙN. I @Dʨ=?T!杧٠Ag"+gATO:ÖĒ~E?'`|a֗MƗ1eyBr>~NRj;EWl@{J>I oO/Huza }> B>oҏB=w!3hȈFj ڠ P2EDɠ@}Vi@1X?O'Щ!D+gWfo6lsMzt&nNgm?| \=N xrrC >l>_y32Vəy`n-6l Q\1G84@Dr-?'_0Sk? /.Ky!H_' NbHA~/ F ĐTL R,]lR- `@_=.(=U\$AFj?gœ*ovdQnڇ_s~! ćNn% ACH~sQw#B  :Zdz<"= &iǣw V8ߌr F3_W̘;*6:]a]nQGǏ=y;}<,aHz1*3FQ]':Ɛ`G;qq|(5Vz$!Mi Z5נqwnC\3Nh"$.qtHߴH Dr|uk0Щ+)٦v%Q$Ĩ'UyR aE6wGA~(蟜3+k?2<}k"P50BٴA '^33)1܎}x4G1)O>3YdNqrr(mfCOH3\HED?hA̺R&7b/:뺑H0pr `? |߅?C<.䴍GHHҡ,`*P{=*nF YG:ם,030 , !d&@>[@>݁H8jaD$$~;:NΦ6ޏ@6iq# ev}^y`3`i(+CRC daH!:%Ib"t`Ji.A-' (UjQ9a7h( n)u8 0QM'V rhLg\2!NQ^I4I`ONÁ13 &M|=[ H{!뉭q*p}AAJ@:?'G0*~`9x۵zmTO\#bO&TE%2IgԒs9yBh2`BY:^$`f9:OXv|NM'1Wr0@}^!d6mۇrJ @mچ[LCmۆ a:'#) 鋕cl:ڒiwo[3vHoZH\x67ńީ;qzJ4Hǃ}yۜA.SG"P__W~ϟoZbegUvWYIF|C C0UY*:R`8һ|ҩ=޾81w(c#, "Oo2bzAJQ dw5h6H%~Ϸ?4@bʊZHFn࣫5v| ݔ  C!#[ jӖ5LJNމ1 j"h()uA/b!&(`(*I#,+8);a F] H#y|yZ,(uB< ˾-0d"u`]H*8?h zb ݢpϙ4βHD|1^ӐkC@qT Ey5NȎB46sP9pp`|4j_NM:tCO߃n9iҚ)1 bM=9 i{d A 32'8h6;*sEI/@e!=|OfC$s)MU6oGNkq>ACO38Gb2>+9 [po7nxd"^ylSi*0%(rtNMSWwmM32&>s~ &2*! sqjk8n834h;>~Ct6탒ZY$  $P}-֋1OM4 ]NApe^mubiшt QB`QtЉq!ma00t' H֠H/+ 5lu_C~G߻ֲ >iTBuǜ :/Q[e4 H.:Ñx9<98 ^\#nuq;84^Y(*Zd$@-<r ҁ p/-0ol;IA͚qҏrG=?;w;si|U 2yϤz\ʎS&O^&0GÈ,CJ?Ct0DOφWR҇ NZiH:󐆤Bsva4)0U h4pNS; {;M0`cGTw*9bSDHk>cyA4k _~O^h߽xb9CPÀIq1/$qW]9esmy~pшY5-y|Pt$CL QE|AD<'W ި qC_6qYAnS|YQ^I Xֲ TpCB! D 1 u6v QA#}]G 12ϳ]ۙYL᳗;44v٢1}J}P}65qtYaWh=bfH) Z h""Bk͔"(L0?OW(aW?2Fo_,}bdE:D54pP[vQ3)C&zL!0c={Q5jf5s ɩ7XBtNY8\RIę֓ 1-((aCQN,5ؓR!0̶Nf[mədi"Il6 (d6Nf[mA%% 幉-S-Ne%5SbZƖd#->ކӌ7F Yraדq4*Q:slܺ8 = 4uA$v' zh i+V<[±: 2b_0iջ:G$FeimN2U PmXMTCqơZg|C4N N5yQ2ڬ"1 Z؊CP(9a }bFA|Gx_o_Qq9P2rmiY4.՞|S; 5*{|UaϓW;{6댅|"@7cxS GU0H<|fOGTv\To885ު˿{ n'nOpok燰bhb*Zi(5O z?l7?{I`̚_I5AOvmO`yׯg_4g˒ zO6Z& Gh G9!ЀWjsGܜ5a@ (򣿔G2> x pj"ΖGXJ#k`22} P@«mdHvIMyKn1/Ck{WO=vOݺi~PՏ͹4uaA?X{nOA=)_',R% !h &Domcy?0tr;#yyh-4?؇ig~VfyI =́ݥg!4s.h8o;T1&**$U>݇!nS4zT)Qzuh6N|]U蚔ܮw9><@~_E *SR|zrKՅ́tdbW0lxרxc?gݳ2p O2 =&D`1|u%5Q d_CӨzX :-s?s:L_pcpy dMX1 $ğ6@GWOC,)D`@Qa)Uઈh'롃P-EKGAPCQETETwhɒ!Q:""*("h(dpS@DA454UP3Yb JaZ"JNeR zdac4b6(ĔŰhQhU`6&AT5m`O(FEOƊ k9nCþ $2d6 io-QPT ETD%EPPL~t Yh=]),"$tIu*/v5((%ePmQ&4` jj$kf*))(j(L8Hp0D4P DST%ERKQi Qܓ%1a $R{9"bJx0QIb!TI$v DTUQ )BX)cPPUQ4M$U 06j .,3GETea 0 vPT PEAC7l#ӆ~{ЌEf&!SB@!A DrM~F`bI1OV @gU X4U n $(:@~[od)(G bۅY A?;|q^4Қ0$C с9za̒,=xH)4S8pLRGHiWX4d';܋Gp4tLDNBWA@;8PF-z%H)0CE2҆!/J+e] UAi^KWO@[ #it#AFt$(QB/Cjfa9xTI_*a>xz&تP,NT& bp򒇂81r? ַiJ41JB*k0owg{|H2*,Vt9:7)/ eDonae iLJRI@>̏i$3G\|TspQ (蔨n)ш!nkvF~@!hfy2UliFb$8i>>0έ*g 0{&OS;wxc-;@tXT@18?fj?ƬH ohVmWo t~9ӌַ1#tJ:cb͋?ÌEr[G~C5N6Ncw?o#e&TH7LbnI"z#?}_^~.1&MÏN~Gwn8ia/ql 6aFrxNB_2맢#VP߻WK%=?z(yFîW_07Ay ;<`C֙kxpV|8?ˣ=~ !93l=φDE|6?]c/6>cWUR=[N G,L 1?唏ѱ񾮏+Ě&(1e/ p~_8d\ v(|NweQRUЕOɯ!+:pI;CSjL>U]ZF.9+881xt򲵤n;vz;  KcHXYbE."j0HtX+Ϥ${I n* T?3JnYAU'ϑˇ6׎ͷDtt(0ޛ8pk'Q@2^2WbD8b`օ^k)~C/#Pi&zْ^[-B1b8q:/np!ik fOϯڶQ Lh!Ipnhpb1 WK8e,4gZ+i6 u 3nHe")sM gʹ #:K*鐿"BҠvtqF^ݣky(Y*nnx ]_1(H?,:Ѕ$T0&AOdjj\s0# 4 Or%f2HWFW@p [m;Pc Ix ))&eаnߥߪ-\3%@ZU+N` }0 lDܪ.|dk.9wN1Xy^"d3EX&bqa5/ e*AGD60J#Ɵ.jE }*N'D7Ϯ0UE.PLMar$(UC{AENHszC&c=2snZjKK[x`8<9}Kn^=ߧEY|ccDgi>WrۙoB?ݯz}׿.=-VGVSwvCџtC8~gK19ϔ~I}.]s΃K(Fc%`ńϲֱUK nҲc7)} w|7B%1h&90 9ʧKǫ*MH{he;xnm>uGv2ڋnC?eIscƱdA-yJg} ?]aʼ,;|5,d5T`P"7;LhXQ>R Y@+F4A( 6Puw+ªcYrnCO6h0$>dLٚ&d iK#[cƬ3/=#p` WT^j9˛uc@޽a@pWRKx(PX*6RU={Ђ"9D_cEݳ0I@pCΡ/qm5qDjOtн}yW?~_A`KAR;agR 3>£ۏWG/Z$_&*in:]#f7nC G<%8T:!Mf.#utrcxq=72'E I$ǎ0#a!sxrRuW7& )c3rl0A  g؋yl dY*<\˜{(H::Y#5 mǻ@gx|U*yDL}/#܏zrqn>St*>J[Nx;P& 0po'kNe Eu$~0<=~x T[ "LD: fCjvĥ MybQ"&8޹ `'za/fxFc%762)@C_!-y'FxտAsˈls:۹vwD='ub&* `>?@ /E Hno 03}Q M<%]ixG @RИ4y8_M$)5-9?G\8IB@!B-*dw͚@2)( 5+)ܝ(ՒhTM"e]/t'@U`=A:@ F b9»&9c)wN[(T0,q:'}hF$QcD!PA!܆Ðc"3U\xx#5烃eP|{SjJ&e |e.gC)O>v@}|/HS'D&$ZrIV=7C,g[COm!W={O>4 .HJj&z`Q0 &vtz;yeYe.<w ;`,Jp` UUCnL*?/'?I_&`߆NT&@-@,0A_0,?ӻ6BsOx$l:t؋6t.uD*g'a4%.D@dԘAakZAho0n9q!rOп10Ri>\Fsi&R%@ (!)Z)QA@ن Zl&TAHFf Cd(4LBӟMdꆊwi7cΈ1{=z q4 @"P<) k8f&g$"A Aɍ "D@gAĈtN Q QTZ[dNiIf(bx0aAA'cEGn5 g8@PiNrv:J5wrHs& $L IZ  "+SDTDPH[)@C'U4覢Q[‘ƃA˻ze" Cd4z?%Tq P`S@?aP*@aH P'O1J"*7`BP "rS h4%L_-"a'`湳 (%DuNh|vpb!Ij5ACq[bQR@v3 SM0JDiDċLEn!$& && $1aH8ZU~(0>J BG v49`dCNPCb(DU,,4A6)(irU 1fu>Dއ!((DĔS, '毛wt2&@4>9>l}ЍL P%?~缘0>hHIЅ.l5oXdu'0+&êy$99B2-r.XT1+ՂsǾu$ $8k @GoF!Hdz20Cs[U#S=7<':fHNe߶.B%?PM> |%@>xlr-WPÛ)e5sW'ͻhs MGAtT'-lULH)Rɐ&nL2SYPx"\8VB@sd'"BG1Q@:;ptkշ ҠOZgBe1p͇ހ@# PJHDą)BPAL1L0 PP'ܬE/+x*{vm f ba)M9f%⠠:7cj Ax^(Mf\BRhzHyȅ"5ABl5SfdiN"v$Y"v^Y&I) !)iB15C82bJb$&&iJ"%" i"&"JbaJX!A{BP%ĔC@P)R"RBIb0_ް'dJ!6M~'!|S.~#&Z?ZƁrELP(R'C<:J #@б! PBu TԔ`NT!i)m/Ze')xC}<}Maċfɹ Dd.ubbx`,\C5$XQc|&|;O1?Je('@~={da~J ;K1LACDm4LSLHDDJA"11#UGl:h4U:)L@c$0*Z4&B҄AX-[(2FcZ`f5b]%&tjR>vl$KK 0TM-@v0@n 2qA#%dJh S&IeF1DA1iqVtv!E$C%E%4D tI(;HE01DU6:  Py& XCНIHAl`JP١7ƍ@Vآ!@~, xn@14TR@RJRR=AʨjGm"i)E {]wӬ/ ) JV )*CKqDI@[(fXM|uE<ʼ9&0ne ^Cldi8 0SB&ǯ^-8ss8bԝ&:Y0S༞;kZyU P?eth4eىMEE &!X  q&$4!́冠|l* :hT g\b 1庡) Ny(vs?fOzM!ME%U ]0aR>p6-_O/DM>^J 4C&@Ts~Ni֎JSAU6v19Dx8AfCuހ?.8<<vU H)@10G ɄҕRe9ʪ_P:S=&b 1DL14oӍ«5O<`NT3M̻:yOUG%Oe쐟|~سkV0.n޲5i456={IR҂*)a/t:']Y3G2?L("" y0+T!` J<4~2 4:GO&%( 1Hq:*@|tQCJ +i2f  b(Y6MPc1ÔrV }'ѻD.vG2o;K3_1Ba]5 0B?N:OP4L|V%$&% BFBP7EQ0 ya1dv Fe14Pbs Aky!\˸fhJ9pfyaƍ#Ni% .N,8/WFq5 &dV(+62L32M7 r 3lɃhXs:ҐY(yh 0{b2sD07ŕnSabj Ϡm|ndC 8 3b:Z0tF#)Mb"7 CLqȲ I^h!?z+'<R0>7yE!|;+$R#)ABJ >@FZ)a+H JnRH0|]31Iϕ.[p4 Ț'SXioZqOɈBN'W)i|O.pJGuwpR(P nb t{:)y*878<yJ .P qR(,5Jt B|@T:#bFC$2w +A`H{ 4J4wC$m:sTU^GXO3}<,MK'Xz~~!#$CDL5T)J)@D-19C/q !?Is׈pf# U :vRIӬR/4JhqS1hD!{?w;Zw{$( ']<heUT;)hQdL1ɁpRS5qbEp`@waA3ˣi}&w(3w8{:MT$2|*2(up(kpT:V7:5m}$t쏣$* SKh,#TmF-Z-1'Guus&%s|t)S@{ k 0R;xb8]MՊUZ xN+Ks9LE*@*S;i)H+R̒Y|xc8a.r$9RWYǙՄwY0V[l;Ccvq֥d|_1!%v~\P(A_/cd@LS#o\@0/x.."'0=P $/H *-% !#JPB(RRJt:@iiZi0Dn^&m1}q)ML 讒%%-4B{-d(&(?5|˃6$ʄ@m`f&o_`RЉRJiGP<vsQf;<|< 7{=8"1u^߫=qNjL!>6:CA-7P8Hb, !$)M 23ByHIJC@hWW295BPS J5HF$aN()hbV& )"i*#IHQHX4Ud$t@aJF܉XMSEf} p/;__?}pJDD1u!%t6\ vX${z3Kl`eFzMzG#Gp,^A .ha9L]ʉ؆6? Gϭ"zk>C9KnY?o&s`nQ~j&ȟNQOPBsQ`Ma`BRӧDwP2?LȞJd|QȈЮdBr|q%_z/-ǘh ιN&$S?"jI?.?տ H# hXh4i-9?gM"`C @ "P)KJ.DFi(iX Z793Q c:Rd'b@)E@* B~Y_O{#0>HQOGHz\%H!|ct$8"D(;v~ݸ6WOSf ㉢Iۍphop<h4Pzlb2L!x*SVeBX!!o/,xN1ZDTe S=99e21dpAPL[@uNȄ!ô_|PȤY67`rH #s3N#L0p=Dj# M@,n׻{0b11c23@q"ZĒC1$/k̈́ґM֜$E#j"mKǎ:ų[N5¥!δ2ӣN']z:X/QMaF$.M0iV">7q]÷Q)˓\,si!z0 = y jQߓc3Q: Ir %;m<( 0`>{ g\^=z_Խ~Cm42baIޕ~Rvt @L 4b?` 4h@PPi"4&?yM`ӂa$9y@:fMU(y39A NK]_UEH@=~) o883뷆_POd/ o̔rF |g@93L'-+ND~'LB!b;LJ&XH"d*b"VFb"d**b tW:e)"Tx=z9߯o$ Z[HBDS؆Ie{DnH0M gVb(T]3n Xj" BI);K6V5*+!iZ% ea SSUD$h?ꮯow9/VG~_;^f|cRxN@RnIϠdD+,'L0LX4T n&P$n(T2]q9k `fnjƽ\Y' sJc(Hc,x\V#9SvMiq.CPa A K ;Fg ,mgw$RGвbN!h QoH4vXH⥊e yY1w$46PD̦8ޝ^[άDGso SH\"M%LP %  }!@V.E}A8 /@~1]X؂.n+ɶ@KHk*(IL**DK4Gi BD-RfE?`w + a9H@,U00ZV`} М(0f&F70cag' *s<,)Cz<.bbaSD0!A It}!.%{d}06 %ʨp] b/!s#YzTA%n:hIebf$$Цvge`ưHQ$l`Uqfn+ L0|-FAX%phMmѦiBkVߓvKos2CGcdaKEÂE9!=?J !V Q)J$D!aH%$YjR)J"UEO˔Uab?lF{Mtj9 o. ~rpOtwޕL@X~ $[?bgŜKl'FMuS&LUyl#'r0r~)m n{N A` (8%0OS0v+d\n0a^RI~ 3NvWY =df "a gC}E. +J'j|\^L@2Nz?^u ̶t.'tGJ)mcŽ_h>/X"ۑr" fzᘝ{1/P-te"C.M7Lxn]Tbȫ`QaY"|}9'P“9օpyِ\E/5-:(߫ogɬ%e[8wZ<0ĜхJ@ze%Nd4|\Y`@'@LG/= MZ_m}036}YX33gׇRՇGj\c,9t=DfJHdB J(H:B&BT4DE)Bh5M,CCT4-T ǖH E](`ꍀ}?!Z- Ѡ1V!h+-oCWf!~o}oԆv{_Lvc &ʁ v n= GiiKZu|H?;%)Oa}pӘ3Ag;)g[" ʔ Q&aD [XZBn$4RAJt́'D`6hSCNhZ䉃$4& 070ï|:4M$KX ]fTb:8O0Mc}q}q~Hy8ip r!BxS C+_hhQyg9+}F$3"C)"2| '8^^l ݔ-Ѕ;}x#>UBH`(#nz҅xq }kT0E .Z$P̏d5 Jm@悼؉dûN]hh%SZa-V.nL9o-32LԡS1,Dň 1|vx)D=p135&0kӢ͚ʈ}F 0f#&]Nk~]w?Gs<rNقx"وkPD#Z\,j3 DAHT}iThHQGsA`S2)AdINHY`anIJ!IAU1cq c 0]^s_;OFGY(2o˼2eSpemIKnaӘh([ن ^ t1J4Ev;%vA`FۯCb18 *d  eRHXk5!ܒu-xʙ^L1 !+T"|O@g|FOYq<{ˠDQ)ސb$xP0_Ysj)XXUg8"ib|ۺKyŢU>Dl2j(%23r  @AIAH!JSMA8}H|O]i 4t:"j]MqH̃і&.Xv:g$DUT9$;H4QGQJD!u j @J>.FL^$Δ빣lUϳλa~f#Ę1,̡5!88XD}$DZm.S\ăQx0}S+ 3i H $%w< cf=\;UvZYQ\1>_&@t³\M MkD 8o{VツV ĝ.LSnQFtE4[C-(n,z)a 2IhwD`c/Bᖸhy3 b bH{uI"ȝv(`3O;QP%"I$!tH14V\LK`t[0h h{䆊)"K2[Kȁ#EKY$HaJcX+_+\X= TY+w뙣 fsr(*_Y'; `dVOv=xA{fJ!jb  % >oO)گ+5 6=y㦻Yr2ePp/ye;޵֐/G'~jq9gl?= #IMs !뮺}Ǚ3  #~/@[{޸YzTX$ּ:BcZtvA0^OQ CC<c1g&$؂֧F@Lح^?9,*bW i@ωGE{aCJRHfZ()&d<d1b׭g<'`I56BCd4x9Cd:]##!3 v*A= rOaO-_3f:fct~?ZRSR1tYb`7ivKÁFZMaFhT́T/[Q0љ6#rEYaGAQ4?f~xc=2.e `>jGD6_5|͐D?NE@? ,%t[4:+FDAC$e"CzÇHaMg>hėx wͷuC[wnMܬb ‚kV~ApH X_ h XZ(a?.z8ôDG9( .CSI8%AM.aSv(nAIKܾ~8 wX XI`RJUI4BQ3&0B8RQ3d T+#@@!pmc˾ϓ6g9k S)`tҠ艂0heAaq0nB5.nw"0ͦ;#NndhqKW~S-*v>XRDHR0̳TmN(Jb b (lE~§\SJ90w)GHsĴ1P4E5A%BIKTBA )J. VP(?*lP2'ap c`1IBj2_Y4ˢw[!E&Z??&iN!u۷(hNtaӳ5>on]e4 )H 33qĨ`2JمY! ଥ$hƭ]%Bdž `9w"U15]MR~ODr ٫mSZ5mёS"jZ7^㣒SL_ *o˨ (?ϐdQC_7;>"4+j)q1m;w:WDh7}W|}f)ЈdHSHKm>&|{o)QSg)8Zf9a2BL.iig[ IH2 z\0e G B+U% 5ql]F$tĎ=&V62m!ެx&]{𚨇tBR1'@ |=rͷTܚwkG=%~g_Ld> LG k*.)Xx3t/KzR^db9H^Y9Bڥyi6T$K7"vqsaaLbBPPcbA~/ISsRN~R Vܤe#2oL~Mօ- I[J[|5@ TNSs%E(aN($1!>~2Sa$Tx(yAH⯎ |{pc;}vil6@B fU\]riYV-!LR6͒2eToU~؅"O;o|~gmq,u=sNF=>^M ( IgzJ`@#т`=_lEl:Oa{!:Djؠ@@nLJ"xCAxЅcV/U4#0C]β.ސ {U, 7Nj8 MoaG1V؈A𡾐Ţ.HJזI0=[Qt.LUp`nrNi-Z36p Y|=tmD56#<1``20lcl2 b#V–Ik&BA$.H)ADļy= /rE01yADfdԐz!1[WJ6D  {w*'_GVoSH'3e*2$I P) 5l9 TD؛~q_#]@Kt ht:wXGjfw" b!) h'|gF"]DmW\ 9׎PkD#*s+`t( i7/ZL\5jLeUHP8Q#Ģ,k@{ڈ:CGJR @JZx"g)##!HIܛ Dw3㿷bhCwՑ l=;SJ8{& 7^ [k϶Oz;HIMxa׬;ys5^@$rֈC`k7 !N NEfʐ`:"(jȶ0s _H^;A o}qiTƕRWFrn ۙϤ,W.$N99LYIS/=6 wu0/ Շ} q(p0wz8x3(VV6S: ]^NocĄ;QwCtHD^V@ NQ`[["@((7>p<:=>SaNǣדCÐ=k:@-DH䎔/P`czA]@E5c=%q5[o:Fw_ck,kj4eD~w.CCRjP+|L6)=sPs(I:=z<>#<#H*N7s,=aqׁ{FG,o:7wSws?:"4yL gǗ _=ρtzNY̱?n s\m_uIRDCM<`f?7|Pd|-jOPb8{yB$'{t{SWQٵ'XG's}㮸w9A:s [P"ۨF B= DhKDPA(gY?n+\Ǎ`4y>p/qF W:9xeC@$@-#īℑ1u1޾ 0r[ 0t]ذIkp!q0Mc8j(EIɂ);Ir/s\v<_AG4NqfbGFh6 4vE_| Y j\d1 la/nŐ-g@ 9}2C.s {s3^d, f(3 € Bh+)Z9QCؼ>Ǯ {EVFEb%bFl~-5Z;b(ڡD)p˹pDʄDok\u9zDJ@ ,XP){}ۯ&ÌBcb5U@SCWNc 8 Br9#9XIA>zI3]ٽ̹!FQS IHoZQwjq4+Aj,8*QQ Alz =uZ;Ht:g4OpEQJ7H.[IO.$N9n:AK{ tPfy3őIO6w $VPa#KZsޔXi! HcӸ AFXX!g}\OFiryp0808%|_.{{¬x"[1Ix;߅ECQ<΍t%N 1*"p]W/0 {2I;`/ 6"&ߞF[AK73! ۉ>Ǻ7v_#~O7:G A`;>@:"Ky1=w҄֌d=aئGMyRj3T(4(œQgTUbֹ"`nd0,PӁ*@#-ޮ>48 qfĂq}py{O㍟Rwk.&'(H|j^fh(pm!E;Y._6![ q" ӰƄ8>{ P#a(f DGHtIo~a;ML p|p;Enp6aѽrF:aنU!ߓ}&?zpW4`187Z#B而Ix:0b$)Ad@1z4gJ*{=P8NdAO$ Vgv@e 1Vz#W ^7@P[lB]&$y8DFTWQ &Kn `! UuWg$tйPA@aE6)"dS u=dߧm)I@(vP#& =@C͚a/By vuMI@f`K&9%ZCr2JmGMpvx+X*!Hk 5Pfv. ڊ uWD\\D@e}l AEd R=ތz1@dIFt%;CP^o;wΆwt;x ާdwvђ#F$qmP@;r\ A֐ǻ-WG .APC :=ْN70g4="~XBߋg鞏\$I&"1([qn{ՄLPшL26gգd1GG50崍Ody^84ua N* o~ \pUb6&tr1WI!Ss=Mا]n T氋 D ѭs hJj]$4xNj̎yStriz5A=ԙƴ3aG!vV Ep+[CJky Th1:܎c~Mjz'oOք Q"o0i+Vм#`Hr4*4NǎwPD VE{ZU|>bc2&/2BֽU+#\\YNg*I#k :(2\Ӿ`pO]ɴ4jf/vx7~GkϪE[2|"#Z2j\P͞t<|-1ώuO|*s." |447q?"v^ϧX!!%r;v4|5^cE1Aat[|fgm =2|gGb caTEϷ@v95V(@U!bt =ގiQ]xBmh^ǰ W`o COOS~s`H}( E`07֗h Aqo;;VV%h=t p*ʨ,BS ֗U A Beq̇@ h;yϦV]Ϝbx}wg8w 'Q$p4seHayՕ_1,Q E8 /b;HM(^YgNy犓z#eX|꯰W0c2lQDfP&;  o#^ev@( d 1Ӂ0 aD% ȅu:t`/5+NaI$)Y F3v( Ŏ`rr0O"zy dY:씡@H2̓-`gb]oό|1,lO~3Rj,/KD.DbIr4UOIJ&˫}sH4 3<#g$@$Dseˀ$$r񷘂4BUIb}J5 +/GޏWק~14Q|NXH8v^ZhR;jpAJ۹;9NXHp$\ܝliדpBdT%Bظ n,S;{h@J$-rm!*a\8bj 7 $s }y}@R>{z17oQ>8=tb>x;cO?^|׏s~ޞWs=gXYT6 (TBL .`\UAHXMg*1xV*֐5)GYs7,fk`.3dusģ;(ғn,0T @Iŷ aT4DDea={nx'1*4*86@@K "la莁 DZ<ݍ_zT.J%dqA&8#>*zEN|7b(uszwKQUƀPcZ,a[u I ;.EhӃ'g^=yzIO"% ) &/Mt|E{rf.1HLdIN )S `?nbKyF52Va[c>٨j[y2g`z*cFLKLMDmWJf"))aYH%,QɆ@H`,pf"" K~xbE $A H'})%Ff'bxJJ1RB`!ݾ ɟ>"cb@pS) گxy1fRC gQڹQK)9z#ұŽHVقDJDA g^|QDEGcKFMLx1P4&2 e ܠg_/ɴ}k"G0) {' yӹ y׀w.S@v ̳>'8c<߯nP5rW1DWJ^W)vN8!"=YKȜCphmydsNuV N%9Vni-&+{QzƤ*@ւR% op: ,"@rI?"W+MG_-_"sv>GP?Y. b } OWYٶ;MJ+V@CC괱( 8G] ɗvxcK&0 (|逌>D}0="G׾x` 7BB\2Nױ!$I 3֧~'yZ-k:@ٳ[zriK35Bģ'OĶ"&Xu6XO=A!zʍ3WFWjUu Q#7"1TR}hH}RmO?gԪ hӐ>=CQH/s4>^M0p859*]ϢgB=ob\hȌ֨Tx mLlG@<:=AU6k]fձdAke(!qW.D !/6.z!Lb,5r)Y߷X٩3*EK=s KCQ^H]fyq>&`j6?3(|uLuS<3H7Ɨ48HQiׇD}w@3j@>lR䏃_#;E-@'A:(.m>1fdX}0xY0DuL:3T5eTnJµ3֦lkRPba\] F(`gD jT!+0Al9L`2EjF$hZ\q'NoQgq{f!èvwɍmpdh,kY<*F=.8|L 4>;gmw#vNdLH`Zۄ,HӴH B[̲P.C{ۺ: h^҅]+<{Kq >Y]|[]x1V7VTnC1jGT$هZWKpB)FWQW6'h= @Yژ\ S4ہ41~x1:8ΘtDnjENlYG1:ku-=bJ1zޘ8֧4emW` qM!R(Lo A,4Ws#Cb%C$P<-(˖$R瞅1`]Mr?xbь%Pu)7: NGG[Vǜ(U_2f?mQ.|EAqyL8Z  a5D.n  qB%L[}y5:u)=9;CK#it^t]b8{DIi5!FG2?>hDRl03#2\B1\P"@ A?T>xvK$C6HמĔ+I$<XA Im 7O )HF6OuLAL]i(k {k(p͵"&}|-0ybQ#D]]oeR !>F  JA d%(ZB bMM~;S0P PV=='\HPV.:*`W!TN%_@?AB P(h!j(p'&# ebة suȴ>=z%?,RNpC3ܦ_N`hc0 {cMG2@E ]B  ""d$%SKD(L]]ǹȽ@rhM/R;'‡D~@h.B%D4sz9)BH! &"(i ; pP,A|xZ1QmHhc,GR|' IS~*$ʂꂛf"$`"fAڇY{pŌ``U:hf{c'dm7|Y+AXsԐh(u6:CMvmCQ6EPbPHF@\cL|u˸CҁC鷋!Ǔzp*9.)B"q(@%k9ІaF!  9 H)CHNihb @~۔2n4JPu̻I״^xb " 97_d}^@ u% 1t;v4\dP(nW+N1 f/kAaġ *2۳엷f0ިN10DAܭH"JNuU X12;CFÖ뙻X漹g #Kv`g3vK,eA]#~~}8.qf4MB15Y{Q2^\3gI(HEC pABX [t޳Y弛iU]i`;I^_=}L2 ݇FpIc'C L2tMNy{v`uI灦jvN9;XSE"wOGʙ rvɣQ0#}{\엔⺋$e1X X|~ȐsFH6dښ mro g+Fd$Psr؂Pqۜa)9dK[<("J ^M }@%gSh\z9eC ]AxnH2Ռ~t>`w2ZK i2 Y`>MLc {?z"u^Z)W$pT%ihN=Qt͇NӅßG´ xRz@~8) D(hb3܉ʟ΁QlO@BCzTSXhEB !8<| Su1,)r'Q~=p(wuvӜr^=$Sl8YξfMgxb T^3B&4bt& ;/!4mMy]QycJ ^~:TmbRE|/HPO`ƎXUZiitEA~>>}j,"#s.*B?CJh2cD=#_xk14S{d?+%Z# #?cGob hgUXS>VxA2\h| 16,;%k'C=w;gSU[#w}#;zƇZ`s 8R Nh~d < 8DtcdQf^K"1)ǧT=lיglիevkw m'dys z4APmie2b T37ĩ{Q詁{^}D@ @HGyz *k%0?6VH TXZƗc~$/> ?/qG-e7KE}cXjTs[=&"hvت{by4-p,Rښ\ Q!<5{ Ћ٨NЖu{8MO.)^ 8!<4߇ z y㱛Q&>t λ(lUjqb \ plZ')F)И=nL;‚|&֍0Q:0`ɾG 'e+ )J9Pɵ$(LUBI$E)D4TES,R`2!;{͡P:LͣxY\<1 _6~CQM>j`g)Fv,oz7 lBH=T1< P?@;@(hU1!Q}GD}? ^P>/H1bc (~Cl'C%#nJQYva׸if'9/\>,yA@vfNn{pa`({d\5DC̼]#8x~'^w猑ԏ-CXN \Җ$Fa IC[pEfR'}wZ+ilvft{qd^ 38q z20Į'o~2xF>GySG>t;߃R8#ˈ0 0W^u|,:4ƇKGx,S0_ɞRvF1&^N ռM!߇~/'!Kup=iYw|bw|u;ߪ)@0|Mu: uQb'NZ/8~U<^>ca*c[!Igek$z;UcZ WR+0R:eg t\'^Vx nj6EsE}jKݡR [[1sǶv$QП.k|o' 5Aր@iW:s ]E=o B E+Ywe P 8"jXjJT9>tWCjm"VAۮ4(E "袠!;w| ǁ0E(!wN149B (%^18NE݀L:g`DPӏoxL=k* KT žǎB 1?02JceJ"`fZ 2 ^O*h) " @eQ׌ͦLm,f )"&?Bjbm,PAO(9p|E j_gyW-{뻨rJH2^a)RD DrVԱC(LdDY3%uڈc'v8dXE NkQh* ;'OQhjREC"*#rqj6f'a[E1ӭ }+Gc(Cq7Mv;bHw(h !Z S8DDhY! rŢ=A^.RGp=OLu.XQ.1 V {%c4&%TaA2BO,D* P"HQ*1S$3!JUL50K%!!C#CQEADKUQUTHsG'_O"O ׃1ψ A{/:IAiSzv XJQY 󣌄1O}Y8ߙ?̘C48: .!|G| hXn2n:7|U _&o<`&hbTzF"JAIB(PłP3E5^^Ld%`:(O'w" B'O.5"F ) N)JRLLAWL*e} ?adYc D3'pkҠ!AМ":C1>A=9-I?ҿDh*a4օᭌ)JETP7Bl DO m+t2*1BXʖđ"h à>`1"v0etT[QmiF+YfTLITJ6"ZL5Z(J6t!Kh$b8tHMKF0ѠN{i) ZCHWF# J)HA:iz i1'[m.*2h` fr q"!K4dRꚒhI&&Z8Igk|0#Ev )hR%M!H;h :ӳ 45Sa)t\e@{yAJy!@2Ko!RHcX(hPQhւ5`U NvҚbSt8:eXlյ4 6:mX†$đYh҅D$h:Mр8C dClb1B8̕QLV%br@ŶhPhOM{SBb35[|UQT W͏ߪdB̰RCC̎ (zt6`{8NḱABt"T  S~;wekovRhnP(85qx)B1\e1S;at߹nᠠn )"$'m[ 7Awzγ{l&\ѫJ:ɛmpFCRC ZA(.i0uA3zzczeGg>ǦJ!Adqh 78yD40p)e)~$0?Hc&49Af^|4"txqᯯX!&<چC.V "n"3mzz~orzÞt0E4)*`$'`:0uM6:Cw&+dT% |`rB)D/%|zӶM3 s~d$&Z4nTφ!|k@`hyQvrsgHoɔTU 9 GGn偄 @~R#  IZ/)v0.u䂈P= pOw?L!(Q9-94x&#8IfGlIAsJ'qB}ճHi`4@AF̲gGe)vh9h<<郛:; 7@sACeϖ"R.2@Z09QEH$ p I$Hj)E!Ҕ(4 )ЧBPR@.*4 CKt!HJQE  @@y +Jl AI1P坣> vjVŠ$(l1GXX.~]Sxat#0=|Ar_Jw؈=P:#05Hڱ>BiճVC<*N ;=hҿj $&L;=p5XdHbO, .eٽ=S*9b 0Y'8ae\pɳMh4PP*z%&ATJ+B1Z 2B9٘UwJ` imLSlgDh"?uDHBzL}ibpw$"& Hh&Iڿ{sh&XvƓ4d?H]c8AJ'Ռge*grϗtFhC슪~/.J:oL{5 dT3|S0n/GIq fOl3xvu"'Pr#ZCh%|8eJN4I("Pv]Ea"G%|M h JJZess!50ajW2&p=RO?`KT,,\4inl yH AP@ .AM0BcϟO M$(8ln$<+dfNL0`Lؙ3k:h]ݥ5@AX)7R P Nh>08m%Ĵp<2sTtQs& hP)(^DID@]ElB IX #DDDH@CI4T%P1PKH2mDS%`?R}1 ʝrNo)`hJCs0+ D'1RI4DE1T5d4COb*hC;3@TJJ)HCzN{hS$dXW=v!äsS@Nyy}y?C&#!8@E@MM۶QzA#dziМhTt툁Ӣ G ~݂K'saM?"퓝:qU>OE:i0G-a*;kZ32 *DG,hRJ\ebFCUـsc)ws=<# fޱg4ٍ4lQ7Y5/ɸ C^mE=: lTUTHh#SD:4QMPKԽf'whoE nIK@ex({O>؇4A4S @ҧf )`_׃). q5@"]1DjPb4'0b)w` Hќ@OjCP5\FtPCqsi˲P)w(b#wkG1F*2$ j2+IE$T!(eMrxj' p/AA@OeFLPv-d0^̂HQR)R$8cˌHш?x> ix#Ս'Lt~~='Z1x^.&vփn~|C&5vn+ @<МN!;*t!:DZS].N; 6I8ڑJĤm @i=LyL! E0XJy]I`ff*duwIDeb[Jl/ [;\炟= Q[ #E`[H:N&H sbdۯH&R!ЕeWDA!He4&~Q4P`nC2 KN4<^1.ԾIAX{4?ͮ/L.B(>wlqcҾI)ynр`ILMb5=:GmƂDTLZ/At=I)J1H3[['c`zo?^٧[תIĔjus޿bS)HlD~ugƧV5ٳ2c@UL0P{ (ؐ7󗤮±xX䠂&葩\-spjR a[a|dذl5;y9ŒgiDsۇ]k=^ w!"%pjq<̱4 KE &PKy@6HZmL.He&Yű rrDyLGRǦ#v1հim`Cd_Zם.|# s;BAdr(ATH@,;G /C֞ G~zQ]Cʘж28"@sQuk[J \Gr<ހ$4)Ѥ j`,кbuM@U) -ٛBUq Љ`SU`Auw< 1D'\UYGEkY^x@cǝ;ss*c@޹pZCNgޮo'Ӵ[g`؛rDY<{QA]rzƵ2D#$Kֹ=u޶)j4.D+"Rje@u"Q+OqR!G&Rbo0s3e ߾lz2xZd BXRk`9TƜӿK,%d}w(?ccr+ϱT+ & æ̠R6Zf%;{'6^((Gjgս^ьKh{g.4!(1&:QviUiCYT尢GSO*qĕ.cB??LJvj|nu@Y%NCKG2S4- Cl4)o>?LTD* "wal*D94›w7y^N)Zc#0elf~|iϻٽ2'd #i vObM1CS:Lj?OtCG/f/o~?om4a/&@}9c@g~WX}{ : $D_"VCӇ99ibn :7d&ns"e44(R!UXLI1!ZԆE%)TT%AQ@ BRJBc[@~ _H " \b@tE6nCN$=(aUoTSJ E*) ā I}{NIEHDLR%4  "AQD  Q堌444DATPҴR4 $0EBHKQPPT E)@RA4*ABPe be( JD"dJ[!J/BF _ja*RE 214C@4aA/|baa(JUP)4 BQI,(H~ 1>uОiBj% *!AdJL1̚@A &*#4)t2K0l0(IIBAMhM v3!RhZ,P@Xى KVrP R(JBHĻi+IG@aB>`2C`(:p: hq˜O6n?F@6a{0[%+l m~/8ы#aE?뱨.3"'Tv'XJt'nd ¹}̋zFBpB&B P?}H(\h4@ $! 邈fH)#DlY()(`hiw,)}äG =^7O;k=f?穡ɉ)k_>E;xӃL1E${9l8c=oelrOp 0Г4fg4뎜fW 03DGoOJp`Ȋo1 5S1їN-_yk3zڴ?<0NDZDbW(a4!`L@r.NAN$#f`#-)F-DéjJ D%@~s ~!wIO,4>gX}-TgkH5,:d^ΰhw;98W T@}C b:;J6z79NHeRpK0{ChרDa_ɘLUTGK mU&光+ l+Ӏ^2G>dDNC aHpyvD!*1M oѶhSF+q[ hپn_%nƧ0WtLVRA`sh 5 \!kħgT"i=2Pp"&xM?%:<?ڙXxCAH?~_Nua 2,yhtLLNz2Zai5'Hq'c'L t Y1wSRS'J)1 {N|4%! gt7d:2NN3gOL9-_{iz`tDo)a۩ /\YQPY.\x4uqt#pi"G J\cc#5`܎nH2'w.Ec&:(sg439!; % h1 @Hj\@ 6 056--%&!Ns4!ǘ=X^^ CSM u5=G a&Ry:;GB:|d> 1Ş`U`nqvޡPP ,HLU8C2e=T4\k4JCq̐ bv=tl8(B<e|#:8vdťFʹzC–%@?Y@}=ސTU:jt1PܠvLL@*)[ zg^قm#+<9=;%TX*fEs9]hx ^Xwf2M;góOݰydw`2efҢyJŋcirRM]8& 1: h#̷8qӳcb ¦bsd|λRPFq,0HkM`Rxd t۬_&=ڙ y{lF*ߢy` Oe:NkBASѮ31t_1% QcOSC墸h91b98v/΢Hc̖"(?) %jP JC=@{޼)@t"ؑчFd{'1;prGCjD9̞qihրА@e N[1Gmnd]GlV6эJU-fڈɍL ՈXhX%J-j(Uo, 0vurJS9(;Ţ~Y锵G3dn}?z38N==!C2*Q_q~\&$lSv=h0CiO&2(*]Xz@l2C hk{.*MCHzHzD/ˑөAQICAB+b0ARPQkx|ê&R"y3v. yQm4qRE` ,VvG`*ocEf)n0ePCY)%tRiȱf/#,7h X '5\Tĝ`vk?tHHR'T=PT-28 YeC8  Dv ('2HC@jkDs9`JjO ՆLZA% @F6kDR P_%LODEc("/cHP%2l|tg8!^F@xlC% @9@DyT̔:"&H jlod~Nٰ_Kkv JxNSGo9'+}HsL$ai>0Riԏ8ohP0l8sِlT6NyPO, ˖[^oIlv "5 d,OHi휴q 8αBATTT`">y|9S.N<*H)n'F9NLJD3 Ka2tCRVd@ԉ򙪚q^C"ФE ;5yrц N_u?8CHҟ*tLTi 5<#|؄cmy6xeT(2j#fcJ˃ Zf(Noo&dTm C*^X]EVS~lvIMO 7"RJxZS K1{Wy%1A)4[i)gcSA2U45Lh-9URQ 4Nd{8r{N틘)wv:M% aPy?&TɤO%=ːN`qC;$yX@ ?>u7Eo{xE*DhbB\ְиfQ.t?zw8ҡ{Ăciՠ(R54Ҥ z8l{" 5!E:CBn;&,@"(y̆tLeiMPR _ZڪhKr L%zۈ`Z?`Fa)(>~=2b\,.φe((FvI#BO-pT@UDA4ē@HpH3D%B\gd1r(zRv^dIT tyf*)J Zws`O\tN{BVpf Lqc[ aĒN0N_y2IE4q 4uwL'˛q1lust)T'- + s1[AnӢ8 ,0%_BJD7@8NR_iM|.3phɸk盪e,ܙ4Y:竱6TX =NzCP憚,-ؼ3qWiJe|reBz$'u9]·̄ pfl;͐6=E;J98QY:ih28KKlAMhYM>bc2۔gkQ6՗2i)b r&3XDunf2LihYJr2Z+!nfJ¦2 RbS&72ifJ6‡%q8"Ab^&yB!-%!dtKGS/ͱ[V壔"X'ĞY+|>4JR YGR\&8egyN{0:.uF&@` t% ps'6_~DqMSu1J)"P@dDDy47"ǓAy*f 3e$Y a|d 3L Xu(9 .L9Fp䴴ܹZf;x@Ft[9vb톷%Xg+õMKF!jSnk4nG2zT o`Ƙhby](bJ'FsvFUo9K"<X(¢quMe lY#stȣڇg#*;BhZW1Y4es\]g0wx9J JUX^qcsGF;f_!441sLM3lIe2<6󞃉C,>>|xftlBtJD.e1r]ҸZ( J bHijA;J"q43=F7a$ws^KxG,kKSf1MH X܆T аŽ8CA(KO_ͰUG:9ۭݜش2˧AcGXjhrk 郮hqB˂qad eE{ 1ڠjbc* 0<3 =bH0xS|:LJz!1,尚'a0X3zӉS6a<}} u8ŇY.9qWhm`ç8Wpqhݙ&eqa?}KX/c[?m5H:'/%IB9vIrdY172Oo[տks@ncu?@7^/8?Z|PVM 'l-k-g/J.|Mu ҅ EHRdC؏nrCPt&/#4b@J{ fUMjCJJmd#>>Bi TļAC4iEBb7;US^X N4t'pPPїH'UAIT BMKK rnKxMHzqB@gh_`OaGLI@Jw:_$)גJxvAzUu`)K3iI8h$Rux倓mIuGņB6R&M`y8gI6qET+1D!DįX$J JfaZj(!M0'@P I"}?B:JCد9D_ W _;jq[SbR@4`vɻ`٨9E&Et^@j͘ J !$(HEV XS5EM5JSS1K HY(" &E)@"ZWE(#DNDTɚf b %*h iBJdb*e\cHU5RQ-6!EAn<94 y4u{&۷S؈RB5Gf'Aѳm? ȕPpDQ#USJ)(/J0Թ;eAJ{rM'L=8NdCP9dwwqIAﮐPP9%w\WD ^6 &L)2&݁LBfQ>1K%ӃPvђ?Ρa+R+B}_Y@Vӥad4|=a;w8՘  r[ݢSNonvJq</w7'pSR!n-PR4~?V͸bd"@`)R0\]hߌ9mQ@)ii095@äŶYK4$4!V1"yY(f: )!Aa/h&mݳ6fݷMg(`sC"wiUTV"+)?h:LeT r5fS:"{ߺUS˖`z,&13s# 6۰l1o0L/܉1Q-ة1!BL X !%S5 ND b"">zlQF'S!h3]/ 鹉S`H4 ag}&i$870y\P;?:'\k5dJ;cPER~^kA4 &&:ll 4#?~y15DD~vqF3F@gCKDK'l&ih|> (, '083)5P02bGc KM({"4h!z4??ɾ;ƌ9C);#)ۃG.&D"gnjuN) 1"ڜP+" )K1ķ7~*xIi)iZ] R˝ KvF͑6( )iTESڤ-V0EECqfшh@Nǚ c%?D>EZD(TCCh((TBTiJhB PJE( )Z@ ("bP(JTHSJ% HH%T @4%4DKB#J4RJS`Ʒk4- ɝ@HW6%_@#wg'qtE?`Rh@=^3N>L&y7^T]Q;SjR!* @"$ @7ՓM Eቃ>c:8 E!7:oHCaoQӜzWЬ;$ 8.OyM 4FdIISRY@!=y LLJHA:rS JBf_ L@tdRv.ө)) `Hx:fܔXD)bP)TZ RJEU"P(ZYa$F((@TfaF$J $1+RR(A,PU)ΔqόrAAi F a o,O:B߾AcL ,_KXe$뱆7SI- IJBq-iq%|nYĒ`έkf=`~*HhH !D2Liq”֓M%#@R@P Hz!C(1CSZ*,bR2i;ɠu@ipvzieO'1DN=#lb%2p$Dz[~~p(>Gza=t@R&?\]c+"@dK#su ̇j4LdW<)đ l ?hcyQSh: 9 f-]SBLD%(lX~QF24` b(XBd>$P2Qn kuЇ,;^(e%fIbTȃHJ ,BA$!ppqT>2ĢbI n (hP)"QɒP% @WD1P#^b0?R$AD}}|Qq_=ۢA,Tqra B.<Oq\=+!_OVm4 !ă6_̕AA{V"EdlC}8\fnX1t00:k 7Ǖ+1EM')yɀ{B 0QGӼ\NtRN91>1HSV(C0(Ã?"a{q*kH{t06-!:mz(9FRmpN>CșJ԰Qb~qX\3.~6 >YQj#mWtbVJްl'DCOn\N5tzhv|)i6Rd]{ %LӢ[jK3%9Kq5!P b~ĴD!}rtiHC($rtA{fJ;LhY"6{{2۝l*3Qp9c}sa3͔8d>sծLbퟣ!ТퟤS]OٻKH0@qq9\ Wy6*j2uD1 3hR3.`4Q bD`vyMnW|i\aTX9]Njd#|<ȴmK ^ɊFzyZ}x;#Bq<$Wj#Ip` d"H& "`nPHDT;V"VxOpHySU=_Ѻh* `t~oٰP*6(4#KR+GVt01H}\xOl5. SBMJȁ5!:8%FҲq5IQ%RJ}EЕ,!M44$$KILETR PD6'YAKv=iSUQTEUUUAX]Ȯ V"Z(0t,>$ w;|gqMI D"XtOXOt&#FL:ӡ\\ st1jw<M$$@PjQH@y!jMuԺOv-$ʐ)jP=qQ{)bB7(B SRBE KQUNB'8qU}i 4A H4đ-#AC@  hLwُEPrq~?/Ӄ1)ZSli\BD'6lmabt% @mݿQ(Dil"Rcim8X!U4OXA8,"A 4 @}]A3悐5@ PPvCzX—pr!  U֩@1q"?vX˻t։Cqg73S.O'fls*Q*)맣HuM~'KR)씤)~~۶M]@|YXlFiCNI( Ycf01۠ukD5T-PdOݰHN]D,z횸7&TC7/]!BOii<ːǀ8OF3SvtD4L?^) O. a!8!A80PޘG¡tr\j9(R] A'oKeT1m#cč$j Nhn"Ɍ|cpvLE:U$QAځ)gNc~0H>`t &P>`V\ 3F#2L&R4òhtW!~Tg\s+*˴~w2TEAJ  `\7êγmӏ_=>&bva9&/2 =cw)| %4: y~:;u i5 (B4`0O9Mqci@)0D (b8YLvA )/'!=]t S R{(+b/Gˌ #U.f-)QHDȦCX\HI_n玴 P}inHc_94ٮLb^Ig y9vcǣשp&NMg,6HzSfT|ᒰևfxbv  P)Bk`-(P%D =%J7O(xl7?}m2aǸ7&2s!ܤ d8Bk tٯB4shL^:}os:Ҩ"rO$:A-8%%l$CEBLGn蘠ERO\3Lt9! / TȴsVYA)̆p`1jh"ND]EK;<]+Vpc3/R{:%_W _54pTTVh-8 i!`)(j%jk[? #FTA![%A v}½@þL:lJ PS8IhكX5LH|1 IuXiû`ПT'2ȶ݄uctz uƸ-=~:oQHk¥فwB (V"!ѷ#:a~U /32vDW|33|hKM!fEH,#OOǠЋb@&"$%R)"""&n&" j*Pbý,cJ< BV&B`( VBT6LD*de avfV$q^^ZsWm}a;C Ym*%܆}NlgPp U*$*_M .K b"dP{(V*MDT ye1t_6@)hݤ( *rb֡H $>{MT-ӌ+  xɠ&&协ih>2uh"(2_ZnɆvݭh(6EtDhk3dQDvTFpW4&6H1/zsqMI֩h p!{)ֲT5涂^iyE,ibXX}06jSy=!ѣM;PybH!&zKRE3w·tGNa^xXc<%QN@ Wa"qδiOF_H4R E %H-PjW1U֍j* f_:Mm=#pn9֬c,3,)cURUvOzL2Q|m[4IlQQ݈abdG]R m+Gm2ƃQ|&3vDj䌄 4MRCm*hZb h"bh"h!jB$ )xㄉ㌧JО9-5IMMyL"q1dIA5 TIK1=1ozu/[j'E0wpJB e.;aIJl&)ӏ 艰F[m]]GUd]cv Ι1 MDD{adt!?Lμb[C1]}]n̚P`Xv&08ϕJK/߇IjWbh$6>Hqv؎@nTzJtȽECˉCVi|Zꚉk^vMjaHf5"CXT/Ed>{|'!+.HV'^N&t֜h~Z9T_9(J%iNRw2wZ8^i8yҒP9HbI×N1=֝Vb AュA {Kh_KݽXQ?ffFbB}RW+(|'JذPӊNS0;"I]&>KIh!DRҴ g6C`d j& 1sVc4(L{_TUO= CcqdD &I }TEDN4+t~߉4_[śGxߘ+#ɟׯ FDOgo@r@ P`z@?Hhz>2Q4[: IHDO?%GdP@d@R?rtC'/S; &2Q#1AHS1#vkH&^?X;PF^d7Y\ UX) ?a@?ʗ5SOR#J Q@ĭ Ĕ; 0H 7B!( sEDmg0M%) !cFjRVNCAKa1V)@^ UX~2[.\{t^r.KR.Vb+d10ś_s9؄vᗂS"À M ty;5 ̛s.ݗJ" 7mBҏSujD͐7nFgoq)ͺ5!iNS saSc j ƥn VMgNVgNBP PB"vAY P*B93QYP"Ll7i 8gn ^Is. Jrm@o2KMhX"v53LLLR"R(]v3 L#u9d*;3],"a!3P SnC$&vNדtg\친vt+-6KN0{ faBtԢc~;c3MIYW)Ff5$Ǣɼz(|vg FbBRv"|YE1DW7ُA8L-j{VyʥN'i{0'-`ȅGޮ4Fi|h2k:"I0GDl/,SGoga`=诿)h %hJJj((IJ s&}/dX.}~p! D}^77u΋49JL9y3@۰sK)tx3Rd L\qir2uX!%(j$bH4cc8#WhsQ;b&Hᙡ"S'F(v JY. )%2pJ&T }~Ďb"Mch  )d>r|/m*Q<8Zqmjv ,x?i?IЋvƠZVim,@hk-swtPX{ A F&`4%9`]"ZBsH]>Gf@5a}{ʛ s`u yp<]OhJsXcLC*5'@DhM&v(Z&&I$RJl!㟭&捯3o1؜HSHMaSJyCCH-CN(бC%ӎп?d)H9 g+>{ `SCf?d2p/p&4y1. HCS% 5:UtBpxZ\$3%w'>);4Pԁaُ:.ڜp DR̰40Gb"FJ\tbKd4-1HbgLT?>AHWqײeΚ#mQ $RF34Rߍ9YvXs:nP*!R(b ((Z*5K~? W@ ۧ??`W&˜(؄}0@IC0?HER\ (0RUvZP:2  O[. ³֫Q@NNeh1ܕF0֏PyO6u QESLG1 d(r q9CZPPtb60ɟ8#gc\A R =" =! HAB"5`M{h@=!MȽ(*$E0NTdu2R|Yӡ4Md%S ΛS1PDP@O e!0%T;O8cB䉆:v2BF06䐜aD;R=:3ļX⻀S ($0f#+@Ą  P)$Bd%bj ))B BM"Ii@L:D2Pҩ${GHD $*eb*iHhJV X;Q@SD1S14L 4TRC$@@0@҅24@RЅ ,3 *BM P ƕOX }҂P*R*Jh9CҠ^?0}~h8u v<|;Y0E}!k(A70wl@<% *Œ "% %IA=$.'D$)BS "?0t1"1 D_T^|XX.N"UZ@"JZ*'ĦN<=8ɦ û !Nl~ugL.$LXBw'ĩ 'Gw|ӝ!/sMW{ 탶B%ㆃZMPҭqӫµ:Ȩ%Ù]2=3Y &&1m FpׅezzyӃJRޜ2R 3FS@i`tT@J  $gxmP&a tѠ,B)b $֩) IQ(SX#Ħ %HTDRQM!#NiQ  6KX3BfH`?>SvH$h 1P`UrLg.)u,0C3Ahh"!y :1 x=*xHར +g?{l=:c~Ӑ5`M;̥ʦuNiv^r=48w, +4܄1.AQFXn+YS"n<=4LSǣ7)K60GܜBL2Ig gѵ*&f5Aj65v"6 DQ,qHv5P$L,)#|G=B&F%>u`DiK H]kKyLJ{-}U+H &nD()G Yagn5A! FifG<""&>o'xu:IuaQ0dOwh sLc8. A) Ť3a̙I$latf(W:G1LM9v}yMzo7viaxuy!a\jouS_ k4a?x/xj>3GXvs!2谈" <g[: 7rz1uzUk$P:śU#0V`u0@#@B,v,ԕhe%zgXQήZ Y$|szM(1s’BLҠH`㩐zCZ \k(M\=t@5BM T Yyr,>f99WV#q*#a  { uafqtx?pf,KC2D:tO8!LBUG`־$E@ C? ?$`, ^Zhuvy;4$#E @cS1CjB}Bmecs\ڣ]B>b @}Ο+2**&Ȳ,LY\*aHA-$%@D ʘi' _ɓʠ1`&ɱ-_YptxsQTz޼ +4uG\qvVav9PJ@+,CB!4[Ld0%xZ*sŘLkiW(Dd5k /3"mB 4!CR$)\JC aQl0UTIljQ>}Sg7-S֕Ğ))ߦrFߥ~|{}}ϱCt^ϑ(ה|DYڏ,{xՊĒaes031[b\Jhu)rH嘪$' GͶBI|_H e *# 2nFE8iME YwA8-;TD6t~O CNS% cͱF(I=4pofC/HQH>&TJP洸l&P-NFPfK!d죮g{K("etQ}ol}L Xi)%&HI/ @c7@*YR4ڋ 2-b-|늱MB 6 }H2^O`Q! AFGp!30"CP2 t\Lz>LT>ֽqڨrE H(,fS&1qƼ0E#N{ag|;0FL!7I I/DĜ^t!,M}yـ8=0D(~}GT V—"oڦ þ1@lFBa;fROTH',L4N"3GVDl;} 8K<<GfIill-- kjoӣ$A`:88x {/^T#be|D}  PP3/ɂ=wBo}v{;;MZ $+[Lt wtB dLV4}i3Ĭ7D#ЁQ#;sB*a09#ɚ#icNu33hM镇:ǰ6 FjF#DLb \h9kbAP+5] ,f|O(PB~!>k ukDYZ@- 7PLfidmM}h)|)Y: ?g{C A&u^xb3SxܚS{736 vL$ =t `5HZ|> 00:& bALBQ xz&:2DLAgį\(dhd?^Sﮎٶ<;-C܄k !*+IBDsN(_KvFxɇ S>F*`_O<P}(EUM=^oyz(H HL"oGن'C۔:H#2^<ӯ,ɉͰ27L~"m ,E GD1zGݷP"Of ntì y[& ٌanvttO%oJ[P$ w> TثQ1`,DYv8U<$+_"I^aݒXF*yB@cLj|4`<02Ds­u%s`敀GZb``X>O UD=QЎGE$IR`U%엙I0?5vK҂ye!B{y&uΕ+zw̢(J"X)y-A.[Ę[ۉ##EYli HRєTAkBӐCW2€daM^ pQ5ISK@Q'D/rR셸!]BL+$C PJoDQ[or+Z͒(8bbRc6 h;kh'wqC *#{S N[Bݼʦ5hKD_If=&  Ӣ &1LbvdI raj *$qz5e %!j_u(01I}0 7c\XGHuJ,Nt¡nXHswElpHW8"D G`83 $pD Wcy~UJ8Y#Cb>> }R2 2|5@*3WAܡ//xT>PA3 O+Ɵ2VP\#NI"w>tx₤kdMF.)7Zze>./p9,Πd`^v0+3yL5Xg+$wXnIz 7(MR301Io KT*x_^~>.ynfhh %MqX ue-.߆w2a ai98~'}k/3TN -}gn%‘:bت& HͱC_jF\xZ!eKN?̉buU_lOT7Pk-ނ:TQ!_R.6'֒,{zurj胔1e`9)Y rւkzdKF, Z -j.Tvzw=zB<8ua*#J/$gT R4D?ԙud:wOƂ. lhppz\}[[L@/QC[;ny_3Ou2.FGaCzg3*61jL[0$k~/zݮrۑ |&s{֤صe;Dڝ1N’/1kHm67ÕqY\-@`֋ɵ.1pY-E=ŖA*sG S{lP0CC 4Uncuy =  Dz:"@,̥ExA%E XXeq8,q?ߔI0 |woWJERIc=q,H۳V^ * 2,n/ӫ/*qzDacɃb+1 Iͅz!{Tfakpj)R%_y5={'~9DO(w[6>R4E%>BmOG]~tZ12<8P:8 伖S0.cÂsgN 4!>nU`yd,ACMf9 %{pvH9M!EK5@|~)SYi.}1Np!|ZSz=@ iGUCU7 sp&a0 g3 K8i M۴YWtܼcq/zМֆ,\YYFs3L1Qb2g}ٴ{߿|hWQ\l闇)JMщB[KK2"P`iw ӼC.fqmb@aH5-V)+VQsz^=L 3a6( :1qw r EӒnMp΄-)rT9KJ]Hk'm7ጽ( Ok}}# G0SB-O01oyPCYBgk_vC{`qχ8wcދS ׯD`pCڄmD3`1ͷ2fK Z?< 4M'Ј=Pud/Hyzpt4"ՠ6k-b%qY磢??qFsRKc43i1v n k aǑS}/tPC_kFld񑊉Ñ2%1 RMm QOGIn뎶)* [4bۡvrit}Q`@ӵQIa:D(a@glNKڦBF]84.E"3 ݄`@h1Qa=tL r8`'; $׀~|cZ'$,0'l1{| Ԃ ~(o5֭\m]'5$8݁Kk!L%qO9l؇Hkj?$X?Hg_3$dUAIXPjzX bj"!PmS'NVE%;d=lh$iQm6'f#仸d O|P#[vY>ˉ ' pДMC{努aa33>b IٓvJhj&dI)h\RɢHӥ2Zx64& .4 GƘP"(Țh@)M وXR Hg߃ T*)ě%%p(.!馾p{1@h/Gv $aJAXJJiPЅR,BCH@RӧȺ`C'st<(>G٨𞇩?-嬻{?혮`-!hs:΄r9oEneUMa 5kqђ6]Jc]f, BQ+C{mBeέn[ZiyxGx*flwr :JÓ/떡*s2иM!`Wj\0 a\&*s&e9M\me6cðR'K;J@2nJh:~"%UUUUUUUUUUTUUUUTMQքFSc(J$j)j GqEIwSLuV,ԘoA3<Ӎ\&i >/P1ʛ3,r#1"Zhz 5!߅5E=";&BjfU?uSoxz8-|I֊yJm>x@v} O="OÁ{1h3ff8xR@(9|3= c%LY|7 Ƕ'SҨ ,MɁ^Y݆s,.*|4 >UI4BePĈ|JRhh CcD^SRxi;H @rD1pN7>u >x3ߖb|P7n#Qy >4(Hfhom!2lrPI>(td6S]sz4Ѡ` oĎD׼98.7k/ z3:2[B⑋ F hI-StHŇ=_[S nzW\Hsz޵<*롄MаBp KhDej|7N$28Pc`-UHlH.CF;>\4iYm8֪|xÞQ`BkfKgY˦46o85d|SsƑ0c@H 4M>~>սL0_6 O ۅA | f$o0`> g<C|v͢Ee#,D&+. *<`"|%1#-(J|>wuB{jS p,S%A^,仼.5'f )ePs\tl[ ׽{^X$VŘʁCFҮ.\BNDI0PG sП-/>|7@b!~9sվ4<\< ""$L2BABE%)}l)nǒT@>9hU&_rOH R|'%@zbTN'lxӾL#\]h:vwWmk9{';Mm5vٽ4@;HNޕTh&ZVh'~ѩ03מœG6Gu*]Sao\8\ %9'0 +ZLCE<cKo@0=-/N/%` Cީ^[ !cD1Zr40!waC ߜGV##JV[O)S5(rP̶ 5V{@O ӡȈ@;bINnI9Yi⣾2uPغ󷦹VeK.SO<㱞v<5{8d懲j,e+=x67t` 穁'mM怀#AS/'Z9 4b_RzUa@^Alω -[ :3T~Hj;=cX83ҫ^yTLC.ykfyR$]WvWW"JQ- uEgYPT&zATNI:./TEȠցp,IUaRF`z>H'Hx=ʁi'3q:r"{,QLPlJN"Fz׷!^=.Rwq"3 P:MQcpd¥KVo$PnÜ U aժTL@%(M0zqĝs*" t s,N<&n9@/toahHÊâCXx,$y\E 17B (̢ @J2EBRNy0htcu-x^2y'biuW(C )j&O"t1`f@Yh6BGϣQ`uDqWA^ qEJ)ӓφ)&W.UKdGh ̖5(!Zu,"g((dhU0V DBm} Ii8Z GnMHPUbD-G*(R#~wVѓ`E“Sɘ .TB1%GIxsN{{X/&ӻAO{2w"'o){|n=#ΏC1F\{V(%dyx}=R|4Äwh0tt1cx[K٠bX]DڋL$e:LI.QŌTe*v9ƍGr4ђbcy9w4CSy8^⇌y3vCD$>,At)D"9#^fQa = $b\ ;V5CFȠbA&tar9Q;a@XLuC_W:xԖMYطçoKv*;N|I8M (Ȭ< nfȕ.%&!sIp5(`JƌH9j\bm6z"ȂI& QaΓ{{m911O;ƈ0D0p&Bvټ9"1 fOUBimobG C;.W QmzOu(8P9$FP;2 p}zñ#E;iP=8 ڔQ;\J&7ڀ! i <ĝ>/b#.\C3XgdwF|h(*D,Y]3&XuBǧ{%}m~fVQjj)#OokkUHkx |CT1B rEJL ĪRG)@fCcwΓ)N^0{3=h !/YJ79wFlN 1䙣'@ akl=0`@ku9|RarBbS"H/дCsV׶^"$鴬!z)""SxN:rBQA qL1H^Yَ߫$kB0@AR@Qi~_?giϣC# J*|RL"jm=[X C.Qa2cKe5#6}zA#ŀp8vEP~i yby)OlC;|l#htaZA3z yy'5u݄3qx\|kwz/ه-p":8f |`l٦G|;Ri ' K ]ge/g㗈u+!ߍ$$f(>擝 Z42wsgnup:2xgsӯ~QcfeMz::Ra3 ^ri,DKOwW|4:ssp潖(70`""eĆ1` $eF",S (@QzwYvzON^cdP `s/zϛͥց9fe!\lw Yͱs4HsLk\u\q\&*n( aDfF`[!(R)AD)&ARD&ҁƹ5Tl;hܽ{+  kX0i 4ǻcFk(kk s &Ȕzkc1 [^e3x:䡥Pwq8vJ磨  }@BJyqQR|~x?nkߟ};C&D溶[~\mgHc6/ ֢جKS5G VV01T]q  @2A=aL~>H) ker@_)E!M @A (sUR50 C@"}fehȦ|5V@ =tbzwߗf# 񂄔)K@!IN-*PPR R JE1 "|"l̢A^mÂGo?Ow?_wGOuO| QI}ɓAqS1ѩ(!+Q3#pBt,Yj`c<.;G^,*Zc "2yǾ?Xn\)9xxYPU$풔;BBnCڗqV-4ĠakmvȪJ&5i^E\ Dmc۹9#1.ˡG9JJ-0meȠ† Tfjb *l! .]Q!.˕[m137Z,hiijj!*GLDDywc)T>}OGVa Hmff( F5ʏUd(1IvӤ(L6Bp@cW<;۾Y5ܧq 3xyxypUMfu(TPcXT&dlLo=a2:7CȬ Zq30ÉuR(a刨. H0Z* 0@љ(C'Vj . xp_qxBJ@.f#Qd7DlA 4‰fʼnh#)*\WɔI*;mtBj.jUjD5Q8 h:2sԈ yKjJLJ1^1EoD7o!P6a"?~`v|jP1(c߸O;ţެ#2"õ:ѫ vy0ӫ;Rٙ2Kݢq*ә)+2#V sjNk0apNό_c$R  F[d/mh墬0YW.+RsKF",xs&`cha8bcb dC߿',\^0`/@M1%W[7X#Hs+J5d0F%G)$ätS@Pĥ*#HUU (Q@%%iAMLI@ =S=n93RYJJQ\QАT =c,t HG=KjF̦%5nJh|qpo.X" "av'hR3R!A5^&ţhR&(Ӥ2Uz_>BWhH_s} ̦ T<|Nu҆'ԹavÒQ O>r*1(_k!.n3b+JsGW'?9s+xF&tâF \ӿ &xO&(ʈ 9azW|v)M|+ĉ 4]R#v1:5l#5FbĸF4x l3#kVRE1@t&,W(2qDh(Ċ" ͡XNrh\km tB#F㉣yE) $F ̛ێWurLdv=$]I (aH!W^7l&Wpc+b4408[&%ŭ1lwA5AzhzFR>xAZ @4iTl(񇮸ap\qxUr 4F`a6. `jJ %f,Klcap\ن:QcqŕieZR\3pц2v"DKCè2L$SID}OZNO\:S!QEKK4A@PR>xLzL $ :_ϩ$O0d`DP4JZAtTl%RAU4J.$*WhYLIwǜp,$ Ϝ9\]5h.6e O=vP: ;f~9dPd>{acGm[sCKy`(|ΩSvkIi4@BE Ӹl9CJ7%lpMB$B @-,J @R +$XȤ8EQ(M}‰)U4ͩmΧ4!YL)ju-oj.C2J/_\jC#  8. y>6_yzGf,ၝVyJ#n7*]* M{]J#{٩X^uې0W^21PT[} O{ڻ3'/Γ-0@2wL,n TLE^i۶pvwYRX)@㊜s[݄'3z.5bE'{,$OwXYyɆ^hkR<'u/(E;`g[c;;O`""I:vβeq U0F4To@ X1Ѱ4pHn,Zy<90/=Nd_LTy HA Wl 4oWַlq&8!QF1ӻ"6^S!,ݝ]xA5NDIM&4<)u!(PGM1<q!ƃZI!zwLca]Np痨Nz5yh*B%(,u4K@*@R8Éi ˀ7DZ 7r-@T<M 0"YEρ/`Cg&ˆbHL} D~xy5\/@-@R%*ДR)2$B@ MƀxW@p=vlN+Ccs0 {Zҩd*g%*6J;Ks9XdaF|:$(Nd>e zԾV:}܀_4HE$? )M#G;!ցzxx$GlB(cظn n;wWSì BqtMe2Zz"v1@PQĬy%]BDij'$t"PbWMdGgZ$V/4$QzNE'b!#Am o12=ioRa_4bLESML%QA@QEE@LS*ԱD2K$ȒbV3 EC1e~̡PDS_R2D(R U"=)(!i)ڧD1JA+ٹqN0>;A $"$"3EBT`Ʉ+ZA8*0HTR;j f2&`{6Dž4Q$4UGIZ#'靡ik\~v9 4 ?J"aM(* "Q9: ~z5ɻ~0c)i-nY@ S,LL"=uXkLNP?ڤ }uA!UG z=:")b) " M:4H֌TN:+[/R @$NC9R!Buv'/[NC@rLUOɇxV TwM@M8;vp@RɄ 1S,FH$8jBDbjR"{FV`~<_ l!;zukESQXw:2cmlLFқv]%|-S&o@KF 1db#Zf|pqP@TpQV`mQF9Sd((!=cK4`2/'۰{4be% "V511TGCM/Dub"I;뉊?Wh٪/9 "R+yf õktk*bT?+@д%PRP N5*DаDDTSڐ4"" 6꘵*kF\X"CS)p#q:=@?G9 ^S?P4neO0G#rID(O* #u 0 'Ύv䡙$fHs" )2EC 0 EaiJ\0L'1'Ų\~|y+\nqzws&w13OLnpHI wzTIB) ?=d̤09 Y u%tr3:;$C`ÆF|sqSYa CrPk/%98Ԫq1}Wa 0lɁ;ߜF7V9~dPTS@G`:fJpJM@RJR B;=G5AlNa b?ܒo=JJC[Lߨ>W S`?ӄjc*SĄYJ<1Vߔf| mi)%s 5JR/G8gfeQ z1ܿ˵pTN NC)7`5X*UFSy0*jiB"- ] yi4Gq80QID5DLMՌiCgMEK\rqEE!T)!% I < !#ۦ -{VDC"i0NA@(%}qe)!TNIJ(*jзG4hkN|E *tڪ8א$la6#ZuSBɆNFwLEo麖gg_Hj^ ʃTGA#Qn(']N1U\-2A!Yu0y:{vv$ T +3NĢ2s#ۮ_\cQCAگY&,F]k)Ͱ,FL,?MLTJ d/{r~<0Xl9ސ?|lD9 O1`crz *"PDL^S@k`fCSvy?{9ceGT % wt6;H7R6?ˤZ5aD%v,B4:M4!EysCMmYسUW(R%)C4 b J- ҭcb<#PS~ۭm1 ;JOI<%-4!CIIHRH%! H4CI@I3TP{oaJ}:E)'DRԍD(GL@@4% 2)(h)X)ZDb\DG,3!B^{E'>o?l**$CD,QVGXoV6o>+}' ܜ0KAGVǙd_@whϭ Ҏ,+&.%,`{GTWOW{8y vNO?4R(ʙƪ+D!5P1 c&7uܬgܟi迬K0]N_/_la`K0 )PIG:1{-Ґً%/>ۼh,"PN%(0=R<$u ucj/SsT+I\; )LgkoYˆIܝB-5ymݏZԚGt.oNU'iѓ{ܐ+ 'N,ss iV,ցȧ32vo8aKowDIӧ ҝ;ppRJTVҔ-J_hۿO{gEpeGW) {oZ]0BxRWss N $u1i7Uhx2g5:O4=v'|1oS9i<00!F3GKH= {2I(QmCb)I,:SR V%D&a7b`4h~/׹=sFD%8S{13ub)CLR, mR`&M`$^+%Cݻ6Ӷi6}|`!5"qBꖌ&K Ϣt V \)PIyܤKhdD6~S!_=}{tf}߇s<*1OkX}Y/L(2"L- O)2  ipy3M&aѮƌ28VE*Rh j><* %JJh@Hf e)( *X"iJ)`*dX%BH) "9 EjutT<*$R"VI` 9*{2G@ &>cYc}o?E R"DR%ۊh30#Hw$:~Q0Ub)* b)h)j)(bj)$(b ai (JJ " ((*$H )ih )ih)iiiih)iij!()iyacӌ5Oy99=$-`I/<A/P47XSc_ IL-(sDOG_vL=A>x|BC)ly, n! 5$NLdL™ay%dchZj"lORe oL~<$d䒻PDM_w)mrxiװ#֨2nHGWgv8Y~y__?z\ް|;65fLά>W4ZU؞Gm#^8;[F+=>JEX}Y@8z;a5∺v03̊e#< |ԞVせ=.gX0VN;fț/=occxvL#UIy,Bmyǃ:;eXPGF$˙ ޫQYTǞSFmsµQefa@A@P"! St"6T:L0%12V|r!~z!Oz:S{G) (aa7cvעZf0#v6?= w]2t bLV.Z}@@Ʀ>٨f_sxd0Zrt-&"hUj>n6{ދ{{ݫ]QHO;5Fw;pc=}6vRFs..=ؕ>{{;m;-dz) (C]AS6nwhtݚ3fP-/w}ۊ:@ N3(v;Fݷ[QMT2g\PHR}@jb7wB{7[o|uwAl74 R}ڀ@TT$F(JPf*aݚH$wha2;bU5@ 4%"ea::]-C)EQi-.R(M`PUJ(aAP5H=Uwzh󏤦E|_:퍎K-6mgnn{ 4٠@tt(PJ*)651o{ǣX:+Tw޾O^H  Ӻi0J)HEU'T>˱ݼ>$nn[| t_a*Ilb(UHu@!TvCM4bDC@.=Q!OС|̟CJz;:o񜽾V޷/.^vPgϨ4N펗{n{({w<| }s⮵N{3MҜ6Uaۡwlc$ף! Hp)wm}^vLzܻf-N9 :iր{Xە{5rp;b]wolϽϩ@}k7Վsu]}CO뛫7{XWe/M+w{nmx1xp|R]Mu+nD>VurɬFa05Uۺ YO{:VРvccj@Vq|ή^{}*} }V.cgrMmD4h P  [@P>؂^{n +zUW۾gv8٭Sj}x)/mhįWjr`wOn Jء}yh}tG}ݼܴ*z=KD'jJzqRu]Q**:+6[Lj=_c:zd{t5-@0}4rATol֞ڳa}w$iW׎u.+ )EƔA*5 ݟw|-4]_oc%i%ttܤӷvJ:{;:]#j7!FLgrݚ:gq940 QgCM/_n91C0U Ѧ/'R퉶%)#,}}b4Q,)vzn̎&>>"}Lm·EE h`m4뻽jwvウetӫ>+kev2ww`4G@u1bҀuթTy=ÝV|j\DFۭ u{fn${{΂f[k⯶QؔY4He>J=Tq}_}Хo{gձhǾۛZ_=յ24ݼvhcIДMLM 524@MABЙ4i0(j~OSfꘌ M4$J$2jM))zMS6jd@ @#@'R"MQyOBF FFh@@" LhS< %?I➣h$$zdҚ;Wfd&/ku)H-%,T/CzСΚMi6mCըi7S3J(`4dG~,mm;)zR׽o}vʗ'RWvi!$_挛R4ٷETC?/͟ 3Șk>:x- o"DEND]L8>'2*{z,XY/T"k | By{yg jAJGul.vG%E_ut)p9q{ǟ[GwD &%Bq.v~gAD.tx@.ȸrMmTjJYi(Rd2(V-~Nj1b$M4Xͥl5+6$ԥLX%Q3/k),vQIlJJ߫.lShi4S3*˦e(FP5&ґڻ^e ى& J54TVV!P#~B]p1= #֡[^/JE feY,&EaD lRѦִl& SJS#-lfd(DJ32Sh̙iJ&Łib)k2RX44PMM1d,}'LjjTWDּtZ*2Mh̴m&1&LShX+YDiX-!ٯ;hfTQ4,ɔ6JS*DYLIX(Ib)ch,$E--&)X64ZZM66QaH͉6j$3IB(HRlZ6[xeJjeF9Y&MR[d&PԚԉFaF2MYu۶L)R"6֓I"-D R!m-Kj>2d"6DcFbQ,i FME iJ*4Z662Պ^}ztIR!_^r5Q)&R6,I b <|lT5*uDb@b $ "b2((&HQɋ,;n F6*PM$lMa&RZ` I2dFI4f"D%V[bZj-|n_gT5{oݷD\)͈BhšY$% 8DRjBgqZ,&KY0٨ w& zd{vR̯.6kBbjJT^ UjC a*$BEUNP-TšZ\a B?.ș EʍtjSF ?]jP=$M30U)BZ`lQ I$4K2XwdsLn\7wpcDYH㘔*O,<}=g7->"\_n$~h2(q|?{Mٹ7#uǂtܣrۙޥIH1& Ì&L?;cݻ <%UzE],JAl6SG28gt |fv4򼺻$e%9fRy>:9m"eۃQxM{iiCE9ZTz.HiơK4j-f"~tp_#{1:+c;o۰6E((K^:c~.ֹH.s5=gD!H<5 )Ep, p#s8>cY̩KPØ0PR64'BcFCFclM 1KA *5$XrSYj[nnM" ui 4DJAd2Q` bmXE`3EPQ ]alai^aw,M.в%X SMN}j{|]7WeUb~L|zalIzLʶM\\㌭T $ګ른͎/qfH8iN*p0R'4+b"s#DK].[_yn^>xgBi1 O7K:O9wQj~d[> $tI4 \rz|kym7n{Ga꓋'bſbX{( dLD!1g}>yǺ"/!'C> ]nb #G: 􌪾j JITع@ ,XzjwwӻmD _oNX!*q)9E猃G71I_z'{ǝ.]Ϻ:pB̂]|-1cG ]'m~ycWC&)T ۘtLDE.E=m|_UEJQMllh -hɱQFwbsF*M%A6Ѵ&$U_OL6ALݕ_X|++ʈ)m~+Vמg6wYrpuLj,ۈ?J)7|O;pp Y1ra;BjU&XwQV/sxuvZ9N?>@`Jy2eH)ƺo%wc+GgVuO޻z*ncxzwue ʮSxs3O/b8^lm,ªF'ʓ.[Z?2{wdES4Ʒ:CJ?^?q=>&  ݀{=3R|2w>fvL #!8Iw0Tˏ;8܇* `؉78ȞQNm?D'VBm4 LL!2RBO}m8GwBw#4y]^{܍{xae|ǽ` پW#~w1YB6OND᰻ޥ{$R8nP~~F>0SyS*cmӄ0M~%LS)r܅iDdx Q -܎j䚮 ݗtib,h25ImZ$ hu+&1Ltӻ ˑݮEHTD3QW:քDJSPMfTE$E0yQY!gs,tXU N*sDb@ۧ(L>͉Ӂ+TPK0١&d3-θL/vI$ZHOY 18u\]vslEZ?9w VPBxi\U8ADTAG"IZ\YrYE\}c XFPA02,/$=HYZ̑R4"!vOz/v'r /uMKJ#& @AJ, ;:͒ќQ(MŎ>''9'ELV? ¼LRT1># 5)+cL"")vgM("҄MPGH<e{7{ U^PJT)+'o-z, h;#(d4M,'* Mݴԍ>xǷ:ǫf'i\ I0. 8BpH h2tL$ gGM]|e%5&j7z.et'lH-eII)V T +HIKPUo5yn~],lm*P BtRR8Ҹ]ތSo|& Q^~zWJ`]S",Dn!cv6!늖 貭 (7͹ܓ*HCaᒈ=(J,A˴K ˙5Uₛ ]Cp J|2hy2%'/q-#0*BOJiFm(DٔcNChƫ;FiYATm;u;_8o =;TLSZAxr9$Ϯxs?:1d[{}˹"WKPe'lWAM%M 8),05U6.{#R$4 5.AH%%p)N%Rr.纨!5/3cvyzPj׾/mhܸt̞p>EbO{^Ty/JI؃㻎ahu)N'Y6H$N''K 'L'cOX{?://?l*9 *X?0lXnIE[ NTRڲL0AiHS>Is~'JI$@b*Z.ffS2a$hY.DB4ZjbRX^}P'|{}~xb8}~;7 @\%M SwiJ[#%$.t8MCLL-I7ZWvCI"m]Q@FP eo7ak&3K%eˊt(6hm/KtCH]a Ay!Ja}FGdh1:&lZ;OY/>㓅#t{N'wviO>sۺ:'+H@hV[r "5z>w5Ė;8;w AaJD?ÎU7E<&;7ξDNUW|yۅUԂYHrDkn+ d(Rm~?w:.XzY*o_MAضǎ$44wHNtc(l,Ǔj[{}d)r( "q0[?.8g 5 u]/DDPM>rꔠfMkN3W>6QK-SQ;a̢fTxQT1EZϧn׻ڹiH%#I@HPs psllb)ƨ6HVQEBlkt5-_-ѪU s.HsΜl!`q&;($M1jM!>{;8j{~J~tߪ"im}N.9reɪyʔ6ثʹCUʋ']EX6xw=0!QJDs9K?mMۄdeqn_5c) lǙ#$V5Xv/6v:r|>~9Sf3|8KIU]B[ZU%")YUI@V'!)Os!\⑶Zz=gVҺ.·- wLm-oyZEjOyE;2i-||xqD=?ǧʻoCNw\$ǩpP|d:k3۞YYN>8'9ZMA;s/\b5.M'/H&? ; g 9JL> k~l hqO2$b#7 #OXh:_u]:BsY5cA[ňQ3"ʀ&DR;AB#)2,3#lXS$n!t<oq1ji6-0;Gf QtTy8:?Qֲ*8f0dw+|}GOyアN-mRn HLJ!Ӻ?_9|P4FϷ)p/LfH'\x<잻zPZ|{1U?׃hQw`tXtzr yܯ,6)Rok|go"W)SݱxwvmӫZ2EjHB5R 3wt,(S'>^*!8J9T$޼{~_Up)ϝQ iŴۥ&wJեǡ*jghCirpC5Z 秔{m&dR{FMfG/Tw3m(m+Gd"MpvnCGT|FCꃩ]nA2 vcNƂSZփlC-ysPq- v]&-v׺}z??GcFfۢYe</t{,ZO5Zpﮮ֊̮K;x޲w3˦\wq/]u9sH7eiVfkb[MgD6IQ `&;u* 9Au":KTމ"=ə'<0Wvoc9L zz£Hʲ@(_jϓۗq:H=p% ̠/{L%@̆R55fwK<ú'jU3pQqk&O~~ޗ͌C=h![ < ~X/[ؗcn 4z3"'DJ<^zCJr@znɳI+UZh)!9gR04鄈)]LP֕i2tݥI~Y7^zm(Q%" ;@aa$}3G+,FӔH]IJ(vT/ç'cEEXI#mEkQ$ZڹQ$F}"^-cB0E,`TͰ#ee$¢26h6S[D͐FYP6,)P eDĤ4՚EY -FRBM Ei"T̚ LH@,TQMlHY52YJMcQ!;\2FhjgkWY"+DZlͪQE6$6llBPVM*(SIDk$ƚTfj0XY2e,jeRj1K1?݉umƭu-"4L(ҙ(IMQhTJPmJ+"F)Bji2D5*+E1DSbXf0lM#4(b"eAD,Lƨ 06-5`5$%fdY)* M*1feif4ȲVRe4ћ Ŕ%b&ҬED)f-bębD$Ңʅi,ZJ5DlETj5FTAlYJUhV l4"I[DIb #f b4i3FRIe YLi DEF4Cb-0*6c)6l("mQI%MhĔBYkhEYHF"X,,f-i4f4Sl6FSY465͓2)&‘-+QNL* Dh҅jg]uJm&j&xyuʺE3i $M ŭm5jRV҅ѱ4T$f̚J$ RMIPF 0*66-E5Q&AE&RlD&-M#5LY(l3LDc ` ajIPT`&UPI$TfA&%3Z2mFC %1D[h !JRG6hX$h%@ QJylz9ABQEУB,-xvhPHPR!@%>:˯ѠaHgy$ΗY_Nۀf#z<oDqSXbMFXwrO7/!|㣢 3T%:E_7 \lq!A5\Zena4ieJk]+bM;--&ѴZKiДT5ԧ_0 CM!Xsœ`'в7JSZMcd-@68MyC{ʜ _[J;Z5C9о"nF)o~Aʧ\r47 0}&c_YS@_OZ#<+R-c 0l0`KZ34iC23hϼ97?_{'֩"tըoACGd-~0gv/aZcD6i<=dJ.Wuҽ4e㘪9w؁2mѺDl6<~FG JE>㴗eVT䛉h)疚Cg\*ɴ#EQd~I\ }n(R$@j`Ƥɸا0w6Iv\0*tI(f!Dk Cp&Ҽ|oGCw1>0Ehl21 xnI_!}Ӑ7`~V Ѥ5d9Ĺ{AҨQ*hSy ϔ,sq݈D c&qnm;D)N5Q%TI3[.G77NvACpL teq;jIͯj9J3:v\;mE=/%=:PL Hj2QէtjԎ岌qj-y{E m]0h8>85F@f'N bG,4 4Yv Lc8\]άqIWvj=)Y\>$1 魪!әqu-q;3㕚hMLjkVɰꬡ7j)Z2̣Kg;nrŗ7:fQMYzǼAv;3i7z_7{HRP'5_M+ޓYpF{JDIrR/6fA.۵dzh7Txۧp#o9;j&V=x J,E*'RCw&LwCO].@#Q"M U(2DP1ҦHܝ2OGoip|#{CֱgL]phոk3$M (j Odc-Qf.7ڜR?R/k̿"Cs&!FNwB~4jphv \@@Xra(dO{,QbkcHlH轺mAE%uqli 䙂`H8MHz^0vIRz"&4vB(EAAmm7 M3\:iEd1qpX11 BcE6~ B0M7N4s,A 쓙?1'*ΛnaLjɘ!Փu0<ѩ/'L?{L]k3V8pU3ij`G;84  A2 6s3Yu~v(4 Bp MLLgr v?bm \>&M|vimPGȫP6tϙA8f\`-  usܸ)$5펢6ªLQgh%Ӗw4CZoUCMp֐3E$%N?z}S/T/5\o)sҕRVI=OK7o=&{Ia7YoHa#qG^+pJ@eG|Zj)$^w&<9D0JcAH@P>@ >&BL]<_b`?uKH^]%LGz0 01ixS҅IJ1mwtֹG.g*j$cf"jL\gk DClҺMHaĩH?0)ぁLP2e,׫m۲Y2% I+$)#˰䲗ԾӾXQYw(:}X}9ĭ+߁?DVmna+3>{󧊋 (Rde!rC_8~ *+?9lv 7!A΍j>!U)QyY[2D4*NTR8(e>'fha#Qw?R)ҍ[\rINu59*<֜3%p/\EEr(e Rb"m{5 X<&Q-C!p8+ {E bRp{orZ(US92 $CPH@B 2PHAS E`=&ĤR,z%n9%t%.D&*~$O~#Ǜֿf2Y'1{s-HUSHN3@C!+@Hs~}D@Wt[~O TmT!MZ[fzƘ 6VM2>.Y?5znimck#>I;/#vߢ~$O)BQlxe<ެ6qZDD}@F+J?6ƌ9cyϾ)GW<6W;n ƛANNyӲ|iJRY~uCÌx!t@|VǤ瞫R:: E磴53o4i;wyQ<;:I\u)\ tϜBzg?DӔWwwBGq} JvĖh $NgّThR7N~);^3739P+K[|u2{zYV3Tܗwf"x8|q6g5e֕5Joy-^N|qo&e斝َZw|.4z5uw>3y|q[| ޵ZS'ݧ]o :qWN沮+EV^|nuooy3wYWyuk fqg/8tcѩ36-*Kw\^eNZ]S2@ooeS2](Tv=əwm#mwlq#ݯ <30YrJD' R7G)ll@H#Lt{N[sҮ0` n/|&n2E~ ]RbϠt w3p 2e.\g&,8aMV.ۙ`iZm4`3 RpFd9( <Eٜ qq:LOZp L{POժ!/ΆvkNޱKʠDBIADU71Rh"DD1?BĔXtDHT0B|$1 fT^ qGk@8T" J%t>%蔏o& _B C&I[&)ъxK+$ޞrFHhڑ8|Lk㱑N)vM߭MM =sD]5ZwPW$)Eγkr|9,(f,9Q5eE$Y]mW>1]nK*Lg̸ j^i*8U7+KJ]M ǁ=ƺ gsTafWݘ+(-r$~E=ͺ(qPbyz7M#CM) 5~b]81W <_(b!S<ڦwp? &25!aƁϬz%6:Ȃ!kK5f<7jk $`ەš-b733 dĒ@1eGӇ7d #>|?<{*J$2 f]}IaޑSn}?Wo ZNӅ$:\ uX,bPBKz/w[WK̐&5Ȣ]JЙ۷uݯpc`3k#wz2~RUn$|.1?ٹwvC $W?(}]_RQ}yAC޽!>Aݭ+}:ŕJ*XmZQe"Ax;}}z/c^<9 BH 2J`l cwaxgĊ%DCC~`F{h٢8yud: hq!& eOixvaY3d&Y h?PIgF*>y:⣁$Hga*V3]TӨg4ԓkJ=; CqACrOfh.M4O$?EwB>w{c[5hO^ %*GM/䔖~(j2T샞\jS&j˶ bH-B"Ϥ̧,s(J܊5(&~_;O|v_{^XILbTm] ؆URr'jF c q Fκv=;5 D̄]  "nCG]D8$t2ҾR'sVSÔK6:Ii*R]iU$1d=?aE 7gח4txhf0+7GkfW150_rPC7 U.i%?m }/[؋X, (xr Z%,S )3@w pOΥ. *)ăi>H=Kx[I>PvZ&0ƐYvu$47TէɆ߷Oýߪ徦eGysֵj}Oƌ|SچET! >-1Vo 58[K^ݖ#sW}G r$~T {s #6aԅ~j\E{dzTA%>V잿t C19̌r9M8w{3؜±O]vA3rwp ALMH"Gzf>b?D$I65΅ E11eE9̅\iMO] 7=-_2? ņ6n25}ls:o ю8PaYa5\q6(0vr}=f(#kʢtJYIe62~Jt ?UGoM}wjoEKՐٯ;';_tݫU$%יCqeBsp}nU ~8k $]|O"!> oC7Y>]f$j> CF*n(_exCI\3N@dG1BVL/zyV7f8̇L'f8}vٙ"v|=n:?XbnH=0u4Y9)Ϊ1$Avk$C;/T4՝9bU?)ҭO**_yð㮝 =;t7iwt:gf]wM|.]Jd)&A>Bpnߓ^DټfIH1:[9|y<%C==Fx0*ᲅJ*?߭h5$G Lnfffeo~*=wʥ裍0ܡ-݄EU|j"I^v_&]&B0,)P+E@N*Bѭ˲\\¹N?8$iW=o$iϗ^<(HhzD"ءÆh9Gqflvդ*cxys g͸[UEUTV/8zfb-@ b?u-^ CxJRw`5!0{s3u};5ƣ&'*s&xINC`p.Zd#pmͱRl:1'dR% )HհlZ,Q&XrddmD$IYmibx릻 Sw;fv_;*1p0&p(0$:ǒ+?bw SH^dB͘`XٖdeB+GIʥʫ8NOhdN^bIt'+bj2 [NCCDY;lb&hii5o0bKJI ^|:t15i&dzF3ٜ<ٖ|!#{ѳ&QG'G~<7m5Gp}Wn?kqQ{wDDD?&G\kCÐlqwkzAhg&Haw8ud# =QD,J%dƿ9{y5}?SkQn=~ 4$""e=jg*>;vCɑGVa^iA#ߙ !s8ecJ!Ϸ̒H_X4xl=&%q2dϼ5B4Sy_7|yy8ro=>eU[-UUUUUU]xi$ۿO~5II$O2w㊪Elwfqzz{;~o yׯZkZ\~y~ݫ5׻xsmJŇFi.ƅo|I5Q.IݶMݥci9&R *Wx[n[I$I$rTJZ+Uk22ǎ*\ 6*_Z{o#*zU^W½Qx'wJw*`}_>w@RR;W UUwRyεUUf5)WkZKi$v/ Slm$UWyUUVۺ񷼶WܪcWW^r7CyL(Bʀ&d("xY3A xt02fL[ Tέ9-So׫P $$I$Q~Ub*UVdE_~jUW~=qwq;;o< RԿ _۹Wc_/z_¿==*ԼwuUZ^mJ)z|UU,SrҪ;=I$~!65&]}F 3TS?oyLȬ_Pu:2QlHZ"8lBm:TY{bNPadRR(Sri KǓ$dGe2igR8TAˎXmെ ,UӠfvLL$ ?/ ƥ"&mNI Qhq-hlo wV]1ԛxQ3aKy@N";>2ᙾc~f <q)^dtp;"\ƣs>z!B1dL$gցi"{4Xg!TZOܯ%$&!z/L⇒$RѰ]\: Y"P(ObiR3wYb$[qLEPp6o1{Z9ln3a)'hg'="[Omu >.J=]zqiÔNYEE^"x#|zU@)ㅮ|NuNE"'4VwҗDŽQ^ɒXT<43Z>9RkV㮏e(]֝4q\cN:t:g*Z]yUlj;'ۊ|+G\4aOL;FԵ'gq|qz'jz]N6Or+{xQQ ?70ZK])+2Xk Nƕ08#O)2,s=b9QfMtLj+Fpsx[Uu#\ώiޥ ]\]EO[j4]Q6 &%C{QJJo+FZU!TuNw=_M+G;Ɠ]s8d$4یHRsx}$Thn'nL []eKp_ 㞞`3~mN6n_g ( VlwC,"UfGZ׶yrGA#8bzCh3ˣDJ]8zJI,YFVJ5%/ H0wwL|2m2SugNB-ʈ+4h"8TB15D{)Ga3^Z٪N}Q{blCfmr%!eWOΌއ ; uߢٮpphיε/3wЖ*G M758Hq6D z%[.㈉dWJH9<~sor.N~+߫|_>Vf 1.ٚ%a;PRnYjKPy,Y 3Uڵ5t,=65:6ND}6FkIV|\7fm,,竺32bXBj隹ȡ[ ݬlXCbM8\ee ҆tz $/f0NުPPOOڴxld d`#iL'Y.NGJrU͝39'Uk&?pbF}Ϸ&a|K?7ۢ%7l4ysO&h2 /2zVLY҃Gz KiFݗk"Bܡ{J37ɸr[SN9=)IaB3X|'dOU> Ž!Sq%+Lz׋.[QsfjJTk_Ɠ(k ~gO ӃG4kՔd|gOJu4zZ~qJOBL^vđ8% փGHʓ#[`D4T"Q j #DV_iJlX"օGAQioYsQޡBWtTϝ8TU2@/2E[M+-mb}m*Kb Xvj1UJIOK̯vSŹ0p0^'SU057N8؋"TjˉnݵLHC4NU%j1F]aJeM+)Jz W&VNbTzӣIK̙r~JBk+˥|g~TYDs$LM c,TΝ8y:~_& R~(3̫vK?W3iEA[T0m"yD𑔜4ysk ;/7 Es}mx܍3 NXMlTs~P]ڙM08c3g~\^mqboBL6y\mڣA%:Ci^}`E>rn:ξ sFpj -8̜ł>y8gs1"{9}tlmr6B!ݫ+d;ķ:S?v4ڂO8C] lLM8 '[M<~2_&a&N8ri7]Qq*Mԡ"1z(&bm؛1j4$ꏱpr+k>zAasVa7{LG}e*SN7}89mG|΍{|ݿ=yOoBtMtp؏=F1O-m"iN ;5C~f<6JktJsutSVR7BCwLz.Τ$\zNQ:LܗIr*Xti\pe*jj`bhܨGuhR9pLL!Ju)(W^:o|:SP{4UtrrN@E۵. S({jg˺vF'9"\祖W˥ |}:v=MR&ȓ2zlf#Sf+&~7 b6Z? SA /j'9SR!2!qzʽ>iCy܍u_9JIS)6]6[ ]Bw/EN A ^ǹpPzmɲMUO;7"fרԑ"Y!ܴ(jab$t97jܓX0r118gзj/ȹ3޳箹m~kCP-75^Hٝ(i(ֲr_$U̎vsw3B^tԔJYtu I]Y\9U.4 aІބ)o-%ǶE93Ǎ]̒s oiČOJQdI0tۃ~ZS+T;wPI*[YӚUpcYy(<\y#D $2(Dm$ؖK^.0JMgh?oKMfЪh5 H0YKN}M[+-ny|j#H3|BPd߳~޿E8r|JrM~i[љ+:omA?|y L b';?!<쓚 $2}sgC|I'YKic'4uw s$*^tfQZ`lzdaa ;ÜCy-G&3z➹F-33zKsNęfL3ì I Rt/N`(vs:9)$"oz'ށGHx~‡IrcGQ`ljxH>~dȣ7\aK!= /g ~JE\E/׶y+pQ/u <,jdTIx7n.g7푭jV>ʱfV D-CQni'`m͖Y;gT&ss9W[vʊPP2TU_ w#sA9 J%ɱΓozѳ\ü릌8rD aOSIJ xSm\UPbvm^mri96L6tz4#;щ"/4*&1ё5{]y7.˞|0s8]3\{W`⾚QRPPHF8+$:Z5ViHG =Ffp̓#GaA|E4!"n.s+^mDdCԳ5Z%jZ?ӣO pH%3LKEriWŽjBS?MfI[螶U6@(#\D 眳 Edg+SF4qd b=g'UR9pt\LS gbf!k&irHBi ^oXSv /s$R;Dwvv}7뷿8+Մ֯'ZzQc3,؜}2vC[Dp˲C9N8wTbut7d&u׽۶BĹ'"Ԃ5Nd>ԄjN픿o6+S/3_$tb'H){UӄNƦekt? 3p%OlI ! sz~R9׫: <㌧3Hv?Jg\i[[ (yQFdg=s)iOVD8{nFsoK8@:P[V793{dY.Rtꢑh9_>%~x+%x+KnvJ Һ7R_.q$-$$|r1|l#3L]Zl_I)K-U̪AnyzԜ jDdߗ sU~~{YJ m;WƘ@1+g_FD!!!I8HD9v}. ^n pmHp;m6(i3#Y L!)LR7E5rj%ArR~BG2ǭqQ,CD~~"DTg$H7LxG}J:S2ɇdS>Cwj x.,1Wir\1OùɌrCFUHN&v=0d/wک7rk> 4}Opky6bƒqId >i|YlS+Dı뵵8]SuuԔLr031gmZ8Q%jb,htTq;I.|疴̑E8kkaRWܦY̯VYy83V@<޼#J E;88ɜ@ZUL|MUkS Yxut8xZEp!W81a!0(1>W#⌄nvFy)W +>'N6;?s )nT&᳂VeETMHOL"2ߗߗWe;uw?r%é|")9'rk"Q9)JgJq%Rc`ل!&fd/mG w\s]%țɴvUXNHT2))1XƂkҠOn=h΄)Cl(K)JHR4n:ͼ; ~Ğ{MLYaSqH3y>Cťd*{Huyz?8=ykVcԇԠj ODy$du~Pt%xqoSwO 'mfrPbϛMH3rU(Z<,T=44"%2ڢk4pO8At n'M TS9 \NG9iӺSMY^QTY | DxzMJ?]b~b+>rWO|)ˠœ[|mgy=AJ%vQZD?Z^|{4NZ;Jq5Ҝp]KN۽H$U; qV@I$u܉5Ͳ֕}5(uؘGWbz";guϝFt‚ zwm7$w3:XYh%)DÐphTv71o ~ ulbȼ m~^\C3}u@k,ZO-%;6"ZyѬ%$.ՅֹCQz" +lLiۙT(T($@(?M)8Ga)otCZ;l;I]sƠy|XܬSU={fs9٨f v-6Lԭ K\ Ⱦ~DY92L!LIHﶬKGy>.,j *b|JަW5PG11J,dbz ^x\&G:׈n^G?Gِ:W%j:iÅQ.O{x zj:qȢ9_~%lzi$J"NK%$耎 r˄;p9lZNFBdF:4];dom$HסBU~֯\ :hh=дyI:B4[y˺ 'Ͷ6q.H?Kx托nAYvOJ_qyUu4f2F&ɡ ?~ Vx~G{s}=q +G 7<#kr*ّ$ ÂnR&8l\Cwǫ.8R"!m,vCkWXqyhsG.$!EJB50L<%5AD7 #a@e3((pY.wyx]ʬ [5.XkYO4Y|n]6R6Jhn+2Q]!&X:X5S8ɓgn&:])Ι5mc~hUؑ?c3:4T!La5M#*!6W ݂ t?G,\2J$ Ulss6z:J͓:q8khMU-\WȰ\)".IUc)@;s̊9C u?K`s$̷ȞAXS]!b[ڔmTUS!ͤ~< =DDGٴVܲ6JJbdiK>#RiyF<n>GKH}Fu{ ڧ('RF$d5Ք:u.b׌dgX,rRMJJ͎ʹqqQU#NSwqyx~ (ogbOyYN/ԏ Χ?@~^fc[?g9,f=3yR)К)Ci!6v vC撕ȱ޿t 646Tk=$Yq{QmsˣE9ޤMϥ4}8o?I9ŖU7י8(՟lՎ ʎO*]@4E;C6l&Z0%mKҲ5UI<;&(.i7@(ϷLQ Hkʈ ܹt/ ]@oJZ/*HTdͻ;2fmyػg|2x+i~~:s5 LRnxqK@Ms](#VDmjb#*j3t"2cl)d53{}y;OsSGQm75?yʟ![1^X)ºfR1Qɑ$ B?yps0G [t;S $gXSB% b DOy vCǍIL9y*+OPĒp`G`ީIy9[C2ӦR\qh~v8ż|;jz+E\2|KPdȢqֺfC]^b>Q/h'{9%E(^]ĤeoM8Tc$|+ jQ<]$)垚&/ݜ3!h0*i7 T$xDhe 歑q7+}'D? Nm!B/ȸ1 1v9~fcהTg.-[X%Ǔߗ|b-#&墛i ?5u{}+Β<9SRdD>TRHR#,1$Jxis L#tA x-ޫ``3 j aK#P}yT{{,E}ŦWhoUiN}Rrd<>~sjr+uBtzVQfm]H UdJA.U[?VGk_mλL"½s]mx9{=O@$@m>SV,s;U<ܣaqyǿd=0Q4H5Nu1~=gLj @"C Ŏ2b L߯a'JPԂ/K'3Yr"M3U,X,0qv{Ef2cJ,] 㛡E$~JRRp:7`( 7CRZqZX(VGOU[˯jx8gft,BXQs~fF7D:lB#qx3jHx-fָ]F%o<IAZ8zV TrKhr̮ s:'N.$nq*$|ey:Lϩd٭i9ժ{ѬҒ'j'1uēpNjx˞[sޝ#reZ2**F6rYotw;+5[| Ǿq5JK\RaCTo\G,3ϙw19;:$?DA`ZQrmBJD 4o9$o%H`tM&[%Rfgh 7IJb2zW>FpgIWOj/^7Y5_uP3d?xF+)9YbŒtjZ Җ9$j{'T)͢mn c=oMs/Z)sy8Bjщ#r2GA$p";xo?@h9ūۑx? _VZoNb0Vc/?GvEWtD١$:F)BL ښdN Ilvo| `&Ӵs{_東9z. rȹ3)k6?2X-µa٧%de>rMp+הٍ*<>{=4+ڸD:J*oKi fmH jm qү*bxrd0XGI`ĠVg̯ :v|{eR\w V+Z4y2PO<HylQHYK6us_sꜯ~n"9Psg꼧H$N70H(ԥ $D3 *u)!6auz  7HIF0ׅXtIׇA Lp4k˽>P6Ҭ("!%<ӑ5|z{IyʿE13#S+51VүWTD@Ԝ/1id""QpiAݟك.h-gG`ګG "hdgP"3GP K75p:h4GdCz߉ZDCA 9A%^t*W}1 ̫Q$”r+bY AjiC;݈f F9c6k8Uz7f!KNԛ91B gRst~NWYYWg*GBQ NX;,'؇q É$hzqh`v]mO]0p0:L~ߵ=8R],Ukktadǵ.޷gm/IȰ[h'yL"F! $y!Q,x=i,n?zI 4Ўl${'r^ :㏕ҹGbV;!tJY֖xM;RO2N8R)畤WmaթMgZ jҍZR6ma w ͒-Xt|Sc(}Vw#߯zOGb/N0aMaK2OefʴJQ*P(ly]RK%{>Glg5Etԝ}*OMa>侟?5}p ,?l Oߝ˅G|ߔLy/}kAM]`7g] wߤW5E<(1y3]Y*5|e[1c\ZygZTzo+|DBI$I*:wwt'%277f|yKfI?=[{1|(D%${E㵫)v*;u>چJ(fT[9xI)1$Z(j&`QL Ⓥ7-4O$os'k3ۻrB%@X״=/,jbV KĹRk̓VMErC&ҞMDHά|8&wj\DL3nحRT΅vmyET+╝fykFm%>{FYtwƃT+o]kjoVYVoj}JxdTh^咑TM٭sz]= ole tFZ(je 2[̥>Ά^fA)kõs..0s`Y&%='b|K, iiwL&5ő7&h56Iq4%Ny>(5Ǜ|ʗ*Wzqx&ĬkR^3|=-ZL=ũ#JUH[C#L$-eYSqo $]{=[7+SK^`aqYK'/}uFh7^̴d㉙ Zt=h1)L5j-#,.|Ǎ95 %G˞^ BiPMLFH8^ѵPo^t:gf?nCarZrR{y(_;{块ºlWD4Yf!REp7ƻl\U &^55=J\ުޚ]h@Pex(ܓ8I.8 $r|ҚKcz^6fG ËjiHRh~YGkވjE!3Sǟ0ͪ-V+'.selnAy4;Uͩ\-OV;1egLps/1ǎ_lb E*ىv {[Xx XH Z0c~h>R rxU*P,R5tP uWq;Og$]s300z \Mdx{_|D,99 2e.zT< n,71ۿ [G VpFL_z岼c/2`n#iKN\!G}Go%'M,&\xBv 4MzO[99ezD櫫w?6)V8~Tm*vc a5V(; aIZ^WPs&;NH٧LCGT zFyYx)RjrJX#4hP\s9kN91qh#־3kl9=Ap~ xTR+SὉ (\hP Q{iP1xotQ" Oji6sPAy9Ta7_Ƌfw> R e]/LĒJ#9oEƴȉ.ݖD$j9W=g8 $oIhp~M`*5%هov|El}UHWv5LbhÉR\8*ٸ&q];֎.8^mcomM PR1{h{'XZZ;n&Z%M3EW'qZ|M I+痫3 dl5(S)n,ѥ01F:n=׸>箖FF^9I]ROM|sQuYg)Йc=/(rZS&L?TvZ$* @LjtL K-5ߞ@COv%[4BIEKyT2<噐9gt)@sE#Bۚ5Ey<l'Oժ',8N~8^e<^P}\5(!G R<#뷿'.f¦|vg]?J-vܻbUCKo ։qMOJĥfHy"(km̥6W$-ſ7nW;B/pϴ;ۗ G! d@@eQQHGc6=/>$v>:Yv;sJkľC|72T>SqQKD](9>QqfnRLډ$|V u l{ù;,N:s0Q9%wI.6 jɰe2~\y6_~/mixEؕe68?-ו `ȩw32.(ƿ/X_fC1ve~|^ϛ/YN\-"PDO>dE)#iۍY)#.f}~g`M=5~o6o^azR 9﷜,gڧ 344u'PRRcQ^8딢O%'5$m$QF;d1q&c$z?X>˚2YhV5/H.3lNm9KƎ@NrqCsyζu LoC?j9SZGBB^ N)!f_ʎ$>?n{?m:n2>_{J<7gzSOa}T jƘC3fTn[Crp6`YNf[Ȏ1ญJSh4 0G7#@[p4N&"E,GĦBTeO|バߠvpX߷XKKB p76%(6PY0PZ (p##xDP"ֶIU ~߷W L@J T*P>1@R̮Í?o'M f maěu`nL)C՚oq`JVґ4g6~O3OƧ禛j?{vV8IvW=nbhSr]·0e]f:ݾ ަoK{{Wm_[S'<=l|v_@M̌Le"^@3}^~n_j@i@ k1S Ҥ~\&)Nrr(qEJÌթp]bo0unza nҎY8DpPaU@ؙ`  ?qh_o9__"<%6hrCh7@U0zG\f8o`P <6TADzMI(.0(3k`z8 k;QBPaOCٖ#8CHMDf$ze3>aLKx;?Vq!9H0sQє!]i;*BHd7eNĽHwvI{izOc1O=\c(0w rۏ?^؁&;ܙw˧%.om߯w/,Ĺ S}m,M4\{>{4K`㶔-K?m֛A|DWI?t !QJVP{5OsPL#{]wkÖX#Ժ $kv&=15"ぁpR&_ZNxn"C~B`˸%!$?dUW$ڂ _4ɶ|EAS,3rtO|&q4p~5,K/͆'9 Bh8A-$'s;o:HO'$߀}uqź{3=|L2^ SrQb1 @?I? H{ۇ&ii;6QhN]MR @"z5um+xAC퍳~)h L'$aFSնb1d}@i p?Wo7 罘x-Sw>m,xʼnR#)|0ϛI Jǭ5ԉλ>&@vR5 $(nB[8@nb+dfqpW1 @Ď{gܑ+}wQ0si~qyʏ GȉX9fdO#|kvvr ª n1[v,u 2.-]BHU27ci죲D$:OZC|:!BqN@{x$Z!7DՄUh#8tP/0n& 9ƐPHț e`tsFEw@'ɣbj&M_-WPmPEN<>n 3.[K"|#As y֎?.n Ad;Rs`#x.6MK>9-D9kBw[r}IM .N9`6v,!#A7H dGH>>4FgS C$vYi\NRKIN`^^&1NxvˉfA|s  1x Ώ݁Q@xС H v6lޠmsѡoRϭ&%7&>G?#"! DF3F>;n؇=t18g |# IJaF'sgP/A|>g1ni3Dvw2PCT>tGj3}hP@g:f0q-Tc @*Q@4>d = Fjv020qCv xIHBftPlGn͓_=(i>n$1fH8QV\OY/fa7Ns&{  #8lv3cNZCǹ1ͻvrRMcƣͮlB|6p<1]\IO']&'fhmnK;ۧޒ];h NZ8?C7Z!aOQ}x _1Lra|JO=h44׏kH51 ǐ #'Q1(q4Q5kfnT+ K|Q^!"(TXT)[?9.d>*q;c8p>Ţg+wWa$yiF~״|Nxoo4uGNޙǸ xvtkU*e+6f脤]Q3яOm/x 2l1|=Q}UWu>Usq~e'oͤhJ`a_F KptpH^gRZ n;mm3P3llٜUjWX`W S/-M9J2땶|sr>l7eDO93 z{%ZX; Zeʮ fk}߀&fm MUߔWoHGEtwmM{\dH뇲)xojV 1~_fa%)IAE.kGiǼI󯯈noz#fx EJ S3kD>OpֽHP :c1rz~`"wm*9D>2r1TDӗgta,خ`HjqWSifb/ΰXvC$7a dؼݝ`&ḷ/9jer3AAZ+N(iXWP.v˶mC_=rI>J#udLAB9dqu_!_=:T'@\9Es'6x4Ԭp xcpKܡiD0>s^tA&>e݊e>~oβm0ܥ|#uaLjɻI \綋yMe/QiRuy{ikSM=#n<;}ݭFte΂Jf磷nYO`V][x = p K5VdK8jKN:u_wϻ8:-u϶nR''j\_w^=^߿f.I)y[oPBq1{yJ?viG)wBHv"}IVOSz8g ո7DZ[?Dχ,&f)foǾzBn &5?ʒow/NCqۜ)[wL622F~ZE< oac 6=t㇚|1xqvCL~BV2_Y}s&ݵ*-)g=ʟZz}?_kF϶\:_!y K 8U̒?>ҽ{~8jl|nũ8fPQ Y)ar6i#g?Fn#mQ1DwRzL5C鯮bz}ʭ/QIqV=U'/><2֤z%fmgl{1}}Ǹߝ8Α&ӟB+>VRDk)p߀QRcRl˲*W58gNm3O)dkN$̸Һµ]cY}؟v`ifS&l~1qiOGX$f&9IIMF[vpa瑑F{" I^~RJ`* *#˳oujs~ R#l#x=+UES#'ʜ˥Vw_.ꌗÌGlvwz%%)wN+b-*RoL0Db'~yחnHI@H&JBjTCN ]/=2%[RMS9㙬_)"vQȽS]&Ҩi+~s2,ʞ%1 S~9dZڃz鎼=,kZ=ޙ++.yTk9șI H[DW=I*9<$JYzC%^<>]&Ns}cn8 (2=}TI=u ]<)7$IGB8Drn&OyCT*'{B>chߏpy`Yji/r v7u C燫QD8ʑGUQ#|毅29Gtdq! nfT3S_^lP@u_4Ħ,M]{+<|?lq*GOW~_^}v$d[ 46ܺ|xrxzI=d5ں^.2;CSmdq$gڱэ/ O,pEuey7*gSzz4 Uu.>W系]'E#g3dikkǖ-9)u( %="IFˆrEg=9tV!4,n˻"緂oqqa3$6hdg܌2^*V[뜦8ڕ?dˆkrZ865~Ŭ97-p~_;bRP[Pӌ ?Ɲx 7iZV^ߊt 0a;KU< :Ѥ۹I)ܢeT2VY9c,涣牐u;Ya%tUDⰄwhw=#e+(D]e.P|avۄ ..>\K'pH1a#Vˮ3|;)ŭ⳥קwvg)Ո'CqMi=៎t!hR.R泲sz*L{\7Rg\C;¹Ϛ p&A#ҔhۀBF.]tj)sJC۵2bY?JKNy;b5jW9__NwN= 2OOLsEze:})\k[7+mbn #PM8rhn2i?J6_xhwpiV3#[e7H#xsdimWg+^k\=6kr]vzӣG'~cLqm!^ݗ˓tT'ӻH}?镟3 |O0hDb=;S△`Nn%+vXI 5%!}r(4vuk[mɨp -n"'\ƚFkcck"++6j= MH4/Kkuc/yym[e@ΐ=9&.OtqF۶\Szʽs%TɠgʎٓrO{($ҠvC䯬݈XOZ=:v)m-T[f 335:唥mQp{qEyg-!WMjU9wi5(=h/"eSqU|Oqεn>wvxz>2lZF}Mq;xܘ.0!$Vgx~}(~BT/(RTT5@0Т*F(sFƵbQՍQbmkT$bS#m1mRAVaadf cH)$ †AEmWY6(A8 !J4 ЊP$BP?gse@bJPX %Z&4ó7Ń#³KM+t#FmGvE V!X+EP &CBZ+*"#Gg-f:ˌSr5@.GlXöcM HU!vt+CiDE jfpjEL$+9;YqƄāIA)qVDc:vZŪ)ٗ%$&tB@ ;Z9Dm 1jLmy6lcT[j5CN ERGӎ7V@k"Nj$vnТ;VV" e(Yw $mLh\q&N聜_=DQJs)/5iqq#b(˻E2۔B|b>W`OKx5(˟0ԩ'6GbD% $vGy< ݅O( U2]k W2i+ǥu J.@^}NTI*1DS-Z;[  cli RׂV}&BeȻ#,+6L s"=pшkU3,tG@Ȟ&mXUͫ׋%Qku5&J(49т?<PqnC%*%G _ y%EJ(wBw-:]}n83#!=u"h^Gfـ@;`#.&NLikZfmߕf1DɑPꖵwm_RRA?O 6j5X+FT)+E5zȵ* C&C%5iHŕksmQ*0"FD;0ev ս*P@N7Si]k?fFKnA]<*v8J@ƣL:H`{55s)QKYS)D>2 87d>a:MAa%F)7@|qTҟx| 0~j~R:AJT!̿&$RnSyg&ߕȞRu 3`>4WIHd˪T&NZJƞhC}QU:WN$_A?V^dq>^]"BzX?L/]} JNa:Chk&(DzW"}4s}Z_ SYafw($E.>Y 2(ʨb=e4>ѕWD5;h {7l6ONM/xwE"r>/[=?ʨ3ndQ¥\(xَF%\;!x82jxت "zYSr֔iZKlws2#e !?&<*f*(/ }I ֦?6zYŇ )_F~/|3ə}3(D{Gf8qvQ>-z~b=rvZlgϔl (7(P 2Glw)?ҿ={~GYvsuݙ7ivl HHKRl?5L(D&\q2 >5aVLwQ mH4ᝄ[R Cl }5ad>#64r"PQ2"%;"oʱ;Ȉ̍hPj3J]O+ ^mR'ӯ^^}2݄/bFbg7_)K<X>%:濟틫L5<']S85u{rjk{\);W\kзI'[5օӝ˺ֳDhDFf,|ӠR"%T➔DCF("69ͱcnX-FMץNR[bv )Vgqo)}_2#?f~ހ}!@QJlim}rV-῟ T1Sk7 d8sʤRvϒ \9 4AQE לoUKO" @|<2@swvwI7+BHwl.սw_p&" p' ?-.D=L-{]ḘVbqpu,P{% .$4B"FDa֊@ L& AKSz|gd,}Գj6Xs>f,;\+to:>sdP໊=m6a5BLckv| B3a-GEŒ&LLvBCyhG3fQ `̥$HG(q$IzVbHHH`HM8ZC+!jYz%rj7v<"^-#%fDv*;?FA4 CHA2[ JYPY! QgaBG۪8ZUBkny&%URڂJM;.4xj+| 2KJmz5"*CbpeEs{i.Rns5Dn][UU 64& dL& Tȇ㴩>/j:'8*1$):2=jP->r $?Ol3Wj"; t=ynl {߱O辯ݼJ= s^P=6(|~-gǖv[ɽ44< `yG bRJkx8C|3vĴǐyAY%iZYx܅>LQLz}oyyؔAJD\뭱3/-Y“E?Ls0뱥S>D[wjOKt-՗܈@?}Gj>I#Z!xu O̗yIKJʎRatؗFkH9YzZ'!qf[LT1^rAȖ/[Vc&\ji;2=MRN3r;;_za ri÷aR vBRj@}u^p؟x MUpNeOGۇiԫḅI |6zGX;84`5=duݎE.񭪽&MjH&׏`A~>_.^|D ěEe&t3%=|l&dCavW+8~|̄!m'jL-ɑ8c9;Ȉv;cY%oS-󤲔6ghs>^ՂpӤW5Tc ?ȹB:3;nBۧJp|ƫ$zkC}g|>zKFَuQ[W8Csnce{m[b>mp5$Gvaʥ9wvGg_NO}xnĵJ8VAUUy`L{~nR%ʅ,&եDr´tUFj@4LTʑY!wD;X,皍wmD4v3h643n6L)yitFU-2Ws3(si22!Je%h>r<463Ip{ ac~^Haw{}j)׻{i^f6hɦݩ'A1B;[ESSN{Mz#SZCOr((/r~stN-?=lE,2;gt1e] o7lvkBm[1`b(bDb7k&O9rW%O˟.?. >kXι@,)v >{=ftxo_ 6 }c6{rMS.i~ ÿ硝TZ3e}:4U+L8}CPx o{~^F||fsgʇ?0pXw-ghs2_y}eK\>;iͳ4ɯQLhyc;jL跤Clr}35ex-YE$n$UnVOyR#%yvl\Rvsr-wS'7E'v.yq4drPtsD^( WjeD,yo6^\(AK уd^`tI"1J3rY%Mw‰Mzx $|[eCZCW>4VW&qĚoG9OYckY-&u)OB3੷2yh>65ɕ'i<|s)Ej1\}~GH%Gȝ_3us_J>:|toޟ5Yc7J?=xfbI*N tO,jilUSug5IkY$fՒq <9 muʆB߬$`ujvȮ(nVXܕeÌd\XP&&fΔ8s]/bwژ%[2i]XJoeL87eIbu|Tmd,QH{WOn&Y/buQ$Ql3[}Q:A*P8 5<-|^~UJޔ!u0!X>G o:=8Գf&5}DkOmNπၰ0 u9wBT}$PӮώ@`PS@?3_ @+ ?)?D?hUI"ē MXKFѴmEV6h6hmѴmFѴmFѴFѴmFѴmFmFѴm.H9D?/0bwp(, CpX[9$x9q_$tљ(\ "E(()) k`܁zHmH0QR|st:eWB$$CF̉Ѓ䝒<CU:ZƝG߷;*`e0ÄHǎMj6;$8gvh)kA(8@{caD^jSz@bK._IdI|s˕}I!Ba~?R_?yI4?Xv? L7ocHd߯x0g%׻ `'k]n԰@LQ7[@atsؚc331BB#GJ7RT]f҆=.Wy̌wc%gqٕE$~RI$%=xI }q?q)ɬ_C[O_bm6fp }A1m<>oڴǏptfFm&kV$:kuڝ2o)]f|,ni^HMVZk4jL69/  Yk뮺qуN6\c6Yp3`D&~ Y teUZ[]nQe[^/sI&J !0id. ᝷f9`ZܿeX@i]%!;sW/qr$iAdJ(ب߶Nj"C7 !^xJ{qB s .Gs#F -610~wrw:']c z{iEmgnۦVq:{EޱZJũ{Ζ)ne폇m IK$#vDPo5=E3Ǧk +^ 37! d!Ѐ_bpsS L8&rÿ#gcWEɌ&L8[l:g%47'y 9{|2~v;3,.NCO lMö_PY]h.׋pumi#{*']>عK:Lng]ŝNu]f sk8|ہL\"ɀ*ݧs3dխ(ԉ 458=c&f;q?:%‚_]9_Ƣ'2.ő9B^l5_>* Q)FTEA[ZCpLԷdV؜+XU[јXW~;t8ٹ3I>y||eMɆp1}'\/߇}_?I㧕|F'uY<]pec֖V)ؔJQJJXcc,)Mn~T36Tx97o 8Q =X4x\S;lem8A*mKPA@G|<̹V]QJsc) CuL=oQzؔґ?iRRzʪYwM$^t菲ڞiVQÏ+9ooyryPSyv%r!,E(^AdFJ-i]Hh7.@rnoPb-6ajSz"xYW]h#xv.W,oi{--,֪j^֞yֵ=f'Zwcӫz5yyIyyP5o=3I֏BT[b1;:Ʋx'3Z|ɬRk7O|읃Y1x4Bل!B[B˯/wVMB wϋGwovoZnnɪPDfM[v]*2Dw)IZ'W*%rou]5fbsK-ޠ L'0NqFE['XkCLb+-^VVM~Af Kh73yyJDDkU1)'}6n¼~ա~U~<_wo4?W'5~-wywa)y_W<|hyw+f{.rC~+ny0 ga5)I}wip? Xn? |0>jțL~+ͱ ձ״Ҝ6i-wۥ:ûA 'Ft75%G'tk=)l `vyGaHm_8^T3b#r6b܊CFs/"B8 #ZV@$0z|Q3A>CjZ#X/7T 9jbUs]3@~#%Y d{?[7 ;5-ti΄V*Qޓ+ޖҏ'xJ=O{gVoNr(ZjRXgEd3MkΖqv踖|WZbj4J{75I,EdD(Qz@7T!g[]I 'ƹ0u&4!솢+{($IBGnҥD_vk=yFATAI q|3)ğ9?=~~8"IJ{ ]nLYѬq7P6.%D~wRs:4 IvlSfPUwZwݎ<3:住kΦЭgާ DtUs/_P2PB&J$9Qѕ㉔ȇV.4?J4jdtVT[kbOJzPH[OVl<"eG\,N8sZa #?/n+ػkq5Uv.mR^k{sxa'Ne8LAHG Gl~P߿|=X&|zhEyz 1v@f!8UY0H !{y8{'gӣ]VK0Ўb"CpI7}Pv$5XřA3wM\*<,/G;sƓ #˟jtT$yf>(upa-&boHm|woG "(s*Λiwď`ل5:N Dp6:dl?Nq ˬC=> ס>2gLB% ̢+InWjFm/ضi J]d^>H䬛Ido˴x? }679Pd6m>EP|a;1ь[h 098 h0xZ4[Ɋ%5&*FWٞR=8GhhfM!/ a2c1f,2ZsSNeD3yB}ia6\SU1t3[Gݑ mdK߾8?q1T dN]ѿ]sT˽LMPSR~"xZ(Z]grV xօ3*{V>)_Z2NjU^7ʵC܆o^{tnyzNͷ{zVuZK7\^\WΚBG+$C*{Í2=*j{jj)@-2ak89CZW)X!S2U,_֨E|/g7sǟsqNG\~6iE{,; d1.3GͶo)zyLo~W-%OGN?~ZKz=m>;#mKX׳^oWw*MkLigWzuTy޼dҏTocb7mfؾN-=K}4Ҥ<1 뺦RbZ"PP=PlZƲ|<4^&:kNjz-r#5OjY}"Iz&ulVb1[NykSaqV,ɚ왓*=r񙱋{쵽+|ُ145g|&Isn\H$ 4w1G`BwFZVSyK ^HlDȌ*#c+.`Y𕜧sH4ڼRRI||OȕKG=3ׇ&o$qR\t1NhMKh:( -<;DPB壖]d19 /.bIF}+7cQw|ةP'vʼH\5?.:xμsE>繐n _ٽ6rEDи?v;BףYI- {mB[4jOHz[0zSP.#ywceƗ=\͖DJC'EH?g\p1UM)M_iٻ"͏s\KzM&A VbW,j~@ |DnH4Bc46"20{38ye^'yh5} 妎A%$GoKKoi OjVqIC7(b9㳲M=oIM0d1kAJ!~e,cUW>8rNa04χaNsEAhOLQƵ>V5besq-⣈79wP dEb0#wsʒl×?ۍyzS~gm<;YQ޼}pW.eޜW9JԪ[iMh#>*I!C6=#T2cGۗ_k$z54m}2!?gsj frC~iƗ}FJxQ[tA CiL3'Hrۜi++pQ%d5K]6j,xI$ZDLok#ߩƳݩcTinn>s PO;픠4'UOzLGL~0!lqwg t-oN I@Bnn3Ury(4LpD1R3^;} zۇ5|! >qL}wfDgO9onBf$I I.>h8} _7/ٞSvTVܬartwtʤ"PI/߉}W#urc8TpEǏeAz驪u6GdAoC, Y [7 c;C~6Ჟ= uϏF!DMeA}Ҍ%Ba'w[=eׄ^ךt-#i ͣvDӊˉ C恒%c:7Sv魛$:f0L5 Byx5=rzN/%:iiNRphE2iJOn<=%FEPd 1`S M*{9̙\_֩<d[JD< dAM`Fvɽ+ȶ}zU]^~qTdHe T(Oy3?Gv@?Vݏef?cߚ70 BdQRdV Y;"BC4l,4Ract+cmfF5CzhzJTQ@fRPqg  M8)4FvN!!2 r!qCY+Y:CSY)K$:4JFa)@EXvC76naPӏeMA%2G. cӗ2R fBF$ʠ'Ï~=c|x5۷FB%-AUiS g#dX@?Xd H?q WMy Ezqx*GN菙~ q>g6&dy)SFmD$Wc sq+4?IgL{Rӎy!&)16DRSQ $vt5<;?_ "G#P]Ы?o3qG_L`ఔ̟_{+1@s{6}ݜ_1"ĺyp\(:,d#Yv43P1j^]^m(HC U"ʔ*1Iutƈ9OпNA7;2"L03 㬭}$s0nbGfa{rš% U$<G$6'wʝ~|h}XW9G! );-,h˻ϷZwdeܙ4ֳPϼ?[& 7&ݷuJ8(HE qUNvDoFW'J$ڇ8 9V6[h<KJot XbO==zy`fZ9/bɖ֜OiaEUPU08A33ZC4X#@glAĠq4}W7m5 Jg3PdYE!BܓYYp{3=V%Tz>d0-EAkZaLCy[c$Hb:r>4'CRLv  V v a5Ha#ʘN4Ck'#110}w`=a8 &"&$JPK(j%ѐN" +|thHW y7FːvC2wcD(cF-L c#qM>i0*Gwt;n* ͏z;?wh ABV!t~2*4 c֟`qY˦4)t!C|٣q}vB!Hc34@ZhLJRI(CLzbu GDVO_Q`rN8bp`]_:PA߿YYegSaE y8qOvV+ ,,2*0 5˶>(N6Ywo<}zg??W1}br U2ʚJS:K8ߝ#=Er#lFiimk!Y=9S9h+6e#r܇uœlb/xRw=h^  <К W4˂x_"HPI!BΧ/Brz"dٱgb|}ߵ>g:֡=@HyS 巒D!:q~JBd2"dޫǿWm:zcq:  C)0m^_}J p~%~mo|N IubtGgOWg\M#u $L0=j4?=:'ֲa2 BB9\sڪFAOWvxP$nz+fy wvA`߰A;U&Ce123۬'Ш'$hChfgpʈQp[}lWT(Ȅ4! P8BVqS*jxMO(F<# IdF=z_Y?OW0FN?6 1lHg$8vCa^ ggX@&T)P AU74m?1D8/CцtRJΎ؇N0;y."d@`À`f(:=6VQ hP9$=:}=zDJbqx~$ݮ=ޠ'\ `xIT|eG (Jj9|PƄ 1A`??ρ 5UT Rlk!q2Ð`;Tz~n;rw/\'qworl "X1Q%[cQG;fƳZCB>o7*T<> j6yb~a5:0.;NjbȒI~q+ɕ1A0Գp̀.}0 Xn0 ԙ-{;̠@Re`w^p"O/=xw(#0`Cu$mUU `P @44ɉILllQ(+02>οQ* ycy&|ZA% _nQmjbJCuns9Sy?[)lOq< CTܺS3c#-fJuH Xh?8#玓є8v-D G :6X.iG$fm)kQh P8 F{+`!ǚzL Q{29ID4#̃PF&lwN|ٙAy<̴Tᾷr 75f ҈Hz6 ,/TU9'004=9x;* Cp 4tv<>0tZcQc?ѱQUt q1b8VALJJ4gN:=6SlQ* A@( }]vq" {}8E-׏m{Uo_ciBoa(T9Y9`ۊM;06hWiG$@ 7oŘ}+hrCJu6#< HA :#$ Ac0JU:mf2R7"K0 Adw#m644\:W^׵ۆ}8Pt-Zb%"8WJ -3`7Q ":/.$@OA{W$$di-(m&JQJbAJU@pjCHaakgvM'Aobw+KKOa/@cW VdO T7BtZ$L$AE%T '`W0oze?du"I$ʸ.*Id**a8B Im7QK8Qg;BEڄ_KOwny}=$FI&U!Y`Ih$)7|% nrq#X~|^a8F5KiDD:y} JA'%PI8~'_\"I\Xy2;@ahQ#";{Ȫn)O(_|Sp8m$av;aa тu"@ãxdx1Y<fٟu+3 7R:3A`1qf":62I6YF?UQI;8, G!ËK}~ބlJRRzß8 1P:(x#I=.a65#X-Ѣ#0|zU(t<[Hr/'x_\6^r/_^k# 1]&DqM? :IKy0& OݝPx$C8N]u$jnRBP~EOmCNG(}(k(%OCWxǯ*pt37k#_%32[ 8ew"WUW`?{f}VZmRϵ&+B&ٚP]52)&^LEE[ ![N)Dfs1 . 8HH'AY$K.iCjVv,C IR]^t}@i;*1C140k]<v!~L1paSu4q~*}>HryG5By" hTGrH .LB .[3?V+Zp(adCDQ%M8[C" hѤY4ֶZh.IIiEH og e[ ZnYbP:9TTeZdeUYfPi`P(HHTƔ7 *&ޑURmVEpb(By>D>>DL} Ց>ku mӦ\*7޾mtBL BVC[n86B*Z OG_Z4@ ‰6~4HXAUi9B'%xp\ ު| dz;6ytO}N`s1p`.޾/;ײKPd$ r`xɡӂ:%&f9df k誯ć~H\![Wr ƵAJvA>Z=Ї LwIk&H6L1Af49T_MLl1 vWV2^c0+DjNJgKIG%.b I\C w;$CVP(l졈k@gd4AQ8c5]J:-=76%BNƋAyMڄ|Y|ަ8|rIi2A᰺LM$D3B vQ̑ wb:fQIJ>8jy90ߺuFӮI飾Y/8^SWEKUx5򌵞ylF(I>ӆƸ^׊.1D`~m@d}/E\miH> y:|Ü# {^ o]ͮ';\ofq|){46-[ѭGlsۍ p̦oQm~C(  6V{I"0ʫ8dHLqxߡ_\PJ:Bi<^ڛ~9>2XRpP$N 宮\A*?}9E=?ЃOkPiJ7:4JP ck4Eɹ˜;|.oI(C *d*#0߂n ;|U4Q;: +7/ ;D-1D@hI}tq'&\c`8?V1"`bS_|=!2`J8;$Dy?:dQK%ЈBPh眬m,fkjM`twxO@7ܬ<~!h&/MH.'O6cRrS扼"c?[4B@d <&w+A2N>IԌ-~ qMy7d&_eΤh % )DŲF-I|YQGs)Dwi\Dž^Ws6jRjf6BL$[<7hw7Fhݗ @0qjc;I'N Yb [>w炇=aUhFe1E)U$P떽UWTsfHL ] Ln&!sr"w͉?|[G|ghqpg&j1sq߁VF\J6*Z:nIJE;!V\$kkg15MLd!M :sjqC0ՊȸAɳ~ѓ;e՗WQpY׍O@E!*Ll_L0u+T%9 32Rmݮ,-}"m@OxϱZdn^ʳ׈DWn&[ 8WS KEĠ M&d ^\G3rcoP#]*O-5ZVw)3*ߔ 'z e*R딷n(IG\4VisCj$r4-LpDTi[U L Sd+EUdP8ɋ SIPԹՔiˆQy6W u! tQ|M3wH K7M/δJHBu>Q2]7#1PBW|=Hs1AP A*6:S +/NGX ̴R%ZɁ d@j܁®:!DLfm5Q9Ai<D:[,pV/gǗqڏ|Ŧ:9b32=*P- >&8lANskinٺ4 "]Ff槥9G5QJe4{Xeh TxK;SG$(N FS+P26 LNJ.Ij1æL*i¨ TDLТ4(# Mp_:.xB"yHn0LCg}ObOD$5. @r"VT's #]@%7o ҉EѺ]:&<<&k8/RB :^T:} ovل=͡00gt;$:")4MZ*Nm :w\/.mK312{#8 ה^ A 0픘 Wq3YA V0f35Fh sNUsv6;+"쁿;j0=]\|gw,mh͞`V.ӓ3ɚ!4G>< ЦK.9cdv|POR {Uuq缏8R\u z=qn*G_8zBSAɓmo[mvx9|]揙\wRUO3ќ50ü[NkeP.εH;k1t*>3Cv3p?g#AGjuS߉2U0"US*42Y&Eo 9!ODUv>O yL'Cz>p~*t*{@< ,>Hhx`?2m*Mvi[b0:G-1&P?Rέ(PQP\|p&(XaNxAMv-[j/KMUhPHz'(>IBH@N{8PREQ%96puO "çùBHcA7%@  HNTv28@HfXS,q 7~=Oߠ8IaUh}E^ߩ$a\,-YW6ϻG)gIDA)0h4{ QĄ UvZaZnud'$pQ1u,.L 3hEA-gmnbx%k{GWp*aAJRUIᏄŬkD%pmMI,#DEzgr'8Mss=оw0߯ڪ=$8d:VL<6|Sloc&l,)0[jƆwmᆶU-syd&Fzː_ ߘBGB>;R"WrX|xǿg!Օo[b/wQvzPÓU'}D^>bE ]?ary>[4!9ٔQJ2#׉,CrdTD@z ;KS0#x&& 3py~mr]]ӮK%7MI%$py=$hNG"8B F@  9 {O<=(l8~ B xF*#'Wv21@_Mt:"!Ĩe0Pj`f}x/"&8SBђ#5/o:5HraysUv0t=rkb>k/5=_ bU|F%P+HUd:Ȳ8 d3bvg?Q 1ؿ5..a]#OEdde ~;<ߔ:2߱$]7׈?rυ"mD`z}?RtsoےXm~CgCiÍ^- rO;|͹*@r"c HCp*{ CªQqtbR'?8J) %rDZUX@:CXq-/zz.?=Oq8_:@O>'@?Qc< =\Of.i13ogd<_(Go'*) bW GG!1:8LX~`(4gf&3XzvtR0`$&Mhx#E }821 r < P/RHPqoԃgݠIخX% 8%cqt0JD!!BWz a9iG1U\+'H:p>L PϾjڀsp# CnxokԈ&ر Ul8QL4 }"6ӫ5`:'=-(I2([m{'7cG8e (HІe~DvCO" 1@'W6q淎{xvI PSQ4^wAE7}ˆ U&U,Ylva81Fq q(oP'wv^ȋq;ݔ$"&9*Š{ݻtr6PLFr6]i+dZHV_]DZŸnq`!PGN$UuZ݈H reEMlQR6(Wˋ!(ZhU C]"4~QLcDӼiRdum8r5@OrH/<^WDE~'/ǔ\'.];$GQw8Sdlv~V«>ĕ{IJRJ_^m[thH%HQ@@}\4ؒXڊYK !om" >|2 ByUY URG~e2"GCm \^Q8N9ƇSO^czfg?Ȥ"j\g"cECsvf8B8=?nU$L~%MU^iz_A󺩅{zvDtAb"FiY097ċx.}9 S (IBb2)M9o/t P3 VĨ݃]=jy NXT*pmaE 'Xk_ "?t.DHPuk97ufq.DONE"JPKe;uoeU_9j_u{m7233FFOg~_]~7`!$Cs ,%:Њ%C@DPSDE|<^Ej~{Gԡ)(/?`Te$]@a0lXykft";_MtD?{݈jta0Z5ؠ$OD x>3LH;u\~ق vTlD}`!_$x)^< qO&?Rxxxxoz|OS~'N?x1^]XbYp|}OelZPB0FD@VU^NҙJDZ٨2Tj[C:LcRHhNXkp>af="yDtX*z` Z1tMRc9daNM/' M6Ҧ ):K0]̄~ɏ&-ܘpL6mM"0:c_w?@ˤ;G9y`zdv@!Կ=uSE*$~~Gπdg1r-6ՆĠ@r07 tO#po{~ӤOc4Fۜf폰ۏ|y>c~3v GN1r7 ǀ'IH1 nj\f>z|K>CWƐ , :a0]>2p"ҋcʲ>v@L̀%s7tuhJ0>4t>udȐ A$Dߗp8l "ag†s h[m Зk; =H 4aĬEuS{s C( ?XL y<=_ođb?(skN/GYIņtd6H@\;wE1#IdMĀvqDj<چq ĴD6!ڲӍdf$"r?znvgIr_ܐBUڧB'!isH={k[>xZHy}=t}*ۯ+TN+rygW:s^H}ZDb"456@MB=WfZ>bx7?D0 "yO1ͤ@" U5?sz$zEʑC QJ65YUZ52I2^LZܯo0aƌG )L*淓,s 2?fǷˣRN!>{!Q~,K0s77/7?m-!_uѾ64 Dj Mu5 ϳ|f`q#RL5 KNzs*6m#A0B@%bue`|Z`JwxyT?|I+KCj.5I9*fyƌ6eOYI I*D|I-LB'Z(kǸ???׷f1\(&x1_aޒ1 1%Zx#(/8NQD"@ \{(]c_ Apj5:4s1\n0pBKZLD C Ω4:>!MPDRywcѲu^9!" pOh)kPxF6a2g"ӹĎ;s֜@*~vqt;H&w|RaNu$x}e^ M IZ8:oseEtu܂$tu׭\†eJͤ 1ci_sO-wXzU9f][ʜ_"N?D f`np@vo~GSӷ߇Pa}?W fi"-#'g oV"z攨S+k^({R.xU8F\FM1lZ׿1Ƨ\k=tVVTiZW~)<{edߦay'v.#λ#?-&fes[|7O2gS1~k*1Ṽq#:W#yk_'xǽ+ bVrpxZ{hBF[#-Hs)q8ϒ+t$=='},Na /kmo`*f' z˦{Wf7oϑ νk]zkp$)FQJls˕J-|۔meeʯWiFc/zTEOl-"9ТۅTb)6vĩW6rXH6"%{% 4VbbaDs$-|˚ع)O[\B(:S"I6t8H}zDpCT@SZ& Yibv{JR^`a@7{ԴCW~l{b"q |45dL1[TALn\PpQgH'/2 ``bD=*[#G$ !=$4D|\&orUm-c0 HBBEM=$'A΅dSا؁΁xx1>R=S_Eξ_g#E=9bbWIO>]C(>.@;!<`LN2d[EPd9d֌ 1SP(,0$ ҃+o$[XP8ںiHe{[d"@l\T| $ZrI^=K=?acE|# i\ӀaJs DYEMp;ǂ:,Mq;IӡٮU$6Fs.]6[K6hI0X'IȾ|$_~l@~]_ֺGI>Zt"8$Vg8vܝܘQb@eM;HՌF!ڹ5AjCsݦҚ )CB$1d$0xe`-|?7O :Ev4ߡnɱBdg<VDwY衄ևSL=9YWn ݇~e DsTq|oaa1*1h&05=#nW>om;2D;$ & r× DËQ>__^s?Pj))2_¾*HZ[#F!BҥGiBm~J Տ+;f&8; ʿ2؜Kq9& ">w9@~&wz8%9VuY"BU]qP\“2xˑOc+sj8Slr"fzcPu$t]$Ô>Lj FVY}^$4qD0"3wihM9%S ]#u%DQV(w`X1R  ih];U$`8 #]Є8 `d9:<*9;P< %GFʐ=% $ω6_n|ݓd].p8JCzl“йӈW2trf8T?ծ.8GOqœ0h%yFuFSQ6Di0XFS: )p=3 /Lt1C8 4EGM"i~Sd80O:mLSa~ǧ?GSQY{ֳ12Rd}԰`'2m$ѩ[FƵZ6ɬk4JcR4ilIjd,K-)KTEQ3! +<<" *( 5֗i-ddIb#)~:v9I4gJ6ikˊ7O:`$P*#J+(]۬@*I+&flƺQЋ,AG;#we^jgN$% JZk-rRFRZKcI21#!R& "ɬJMF-VH Υ@y5~E"@:`}$ɄN@!%B_j_N_}iga ( F װ+I$,,ɭl\On݉sp=AEc檭uZCt繿G8 %M U4wkF{~_5E? ɩG';.Q=?=/1'h 4 n>ϣy!.ר,;Fl2RXR% h0 )*Z)d٥@Y5n뫘 4&ݱc@f%% ?"PH!J*<@y.?}9©'MWFThsf3pD͸w`D 뛅=F^9X9C,V#;Gt ~GITeMhp%'tP@d~ccOx()|@Ba5y07 T4=4J:|r² 5Hg Of@`hWkퟔIJAD?8^kO =%RG$@y!CWlW y4c0I IT$0?BJbYd TR*|4BxJjaI 8 }Q`de -ff 8M`hӉT c <' ÜoB=dC,IZu4:mCq.pIa6r;|{b;C!" kl2rx}G}@y G% J0C#BlHk!Av3ű-M'˒8cCoq^"ǯ9y lJы_XG1S p;㨼?K1MPjb:znӐFӓWc䱘4480aF$k&bHR hrQ2%qv! cġ AXJ}6=$]%r}sUU~ N=GBkI4)O]&Nu͇\&CSHq)#`ÕF0 %@pZ;;ش~'nԧ@z}e4PVC jM*#46i1-Ԑ[iX&UFԕIiRA ,Q3$8pLK{X`Dp=U%Y$"$L ka&h@Ҍc 6MHHb(ޚH\W0@fM%vep@wui[qs Pb'+S h HPؤ|k(9f`.H% bpIL09RR.Be4 2@ qc*+:Gߠq88\Lm0 W 6O@%Dt2n#83H򬈇u 1Z8n8P]Fˋyzu-N $8ttCS (\ Z(H{{߇_ 4f^8{“=v62$$,4%D;4਑VΨ Ӈb8@vY€ SYQM8&.^(n5բkU<nSbh˹qUzdއ "v1ԓ#*c bE# Ū5p/ yWBRؓ ck^v-)M=aJRsUyC>daiYj%JBeb>.hyqA*WPwف}JC31lW5_ n_ TcV!p &8,:Hf@ i5k$8C|`TOm~x*`?N8%DPBq(rSd+@tfE4 . }1A0N;x!JmFq7X`4#'d}oLM@_7ܝAHj?J;mp3 (q}n{و%%&iHyg!/ψ?^ݾ~{݃߫_[zQJyhA%B.Fd!= qNr'j8n3c6Kw.`cRR !I(R k4e5F#D1RTm4ͩD PZ)5V+hA&DQT$*#lƭTՋcjReZQje(!+36ɔhXh%hm0JZFd&fhE%R(Px T YYuMXNKB%%.xh4R:!Ɋ5FU4\h#YHRjVf(2X&Q@Cоr8L]/Khu3DIT$s5;؋ݡ"E:-qlGsJxG2 SH zο`=C|YA%rH&MX_ޟ7P|PFs.Q<~W`Q3]IڔxD-|}]=N 97ac pA֕ o P鈧RF$T!<]E#I̹pH8ly.a}4"nKD]q3Z Hpng!3F˜ 5@{n~n_GȰHA ;Fk_'A;F>ق/c~&r~6xq$1%ÀY=Pn7ZNO 58l!ܦF6=L.!שW FlƸx+N:[ DL-& e,b001cB֊/\ٟ! =tjSwT ^jFYY dzˁ(S]Fq:_8K" ֓\ @:tckkFd*%G#E ⫃"" "sgm\pH:M'$PxB|8xFh;?Ώ֏ LQc-5Xiplƞ4JMV T?\9߼ c"x?tdJ[sL BJ+ ,I!$ߞx B^1yVM 4Hܤ͛[#ȥֱG::^HS 6KjQ022G$E/0n9I yO~b-5RdJ$,9(8 m-,""E@#HkŹ:rR:ؐք;NaK2nH6)͸͡2S ҦĞD]q{!GE8?016p;Ղ 3!Qq g 7 sK(!X~OS-ܸkp d|g}c•\BA@Q&(D(iRKKLb`C0mJ>d>(@Ķqn18h@@aK#p>t=42{L)3&ma@z76ɣ`GÂ$ﺅ8s7*V:׻8ŵLGben2X0Hp2T&&ZܔF͑yNqj9w3ZNfl" "F?%K(5EN{P#JA';!3Lq3㌦?aN.#;*񢊙oLFlѺ4/ZS;? JjM:0 "X,6=$ڑ'ZBSbHS8~'] fZ%J!یKю`bf)uDHL,bgILD@D5 ?߂s?ҵFr|8$>EQ:8kvaW-ux8'tE3(zAmnpj"ɣxaYmD$6 H'x>d2@Htn$ 1q"dwnWr/%HPٕHA X8PNMvC=ϩҏᏡ H"s$!v N`Ӊ,+ ]}$GK0]H@lHeKo@BqP]HpJ# 6#|$wpOqҌ8od'_BMHw0waFוCI?5b"[a/;+ wJ&|z>LJt%|>/ |Dv?SxdeFe J6,LٚjD(Pz}~#2!郄<#LU]% UVѢ,)Iȵ~ݜg(o}MQuW*õ̢~7!+FM(>].Nm$|XM 28w =Y3sM~iEȷ&F_=u$14MVT%T3'{*82Pм]zה?auMxG;"4=3Qa!>ICC`˝LNTO40B$.aɊ@> k*X4Fdi&y([M Gc<~=;JDN7-aQ9ȿ/:J>cL&F8B0܋uE -rUY6ų8`s9L>5gŽq<]@Ai$)q#@DN;y "AڸI[k]Ptk fwcB(vv9'dq ww"HGFv  ݠO&Є.?-aAp#ʆBBߡ@tvu0uk^:FC|k@}_ OnۅDLH^۟F8|xO }8Gz\STr ?d }˅4A7sS:v( P GQ@:fXtq^.!f%B E8!ZC.Fw6$8qL E?T.Cv76{.o @GrttIRuۡ!Ů !zKDul[LIz%ҙ4' \Noˁ?D-~W" $ AꇈŬPhˣ{76=/;\fB5pV1:1V;Qna-al@~Ad:#ȝVOsK91& pu4TJk=("b0*ےCιJU05ݷc4[3+QZ6M(A1!$s|z-rrI'v^L$Ck㬈 3 taKw"N ȵ)AM)$@-dH&N[?LMTyli~sѻsk;!PGT<g{:Z"[sbh5aaEn#G(R%( ( ꑇ^ (8C +Q25TDrSn9NթwB;mQgc6?:՝<:k KX`'E.8n4*%LyE 5fAY d;);!Ⴢ#;#$yH~/wL ʝMP(( EpdHKnD*t2>9F(]>>D=  0CE4b{h8^W$"F;f2LІHP U85zt֮dęyk1j -,3;l'y|KǷ(=v>x,;{׻̽kDc9f)!j6 o (Z^8y5< j:,qƹ[4Tqyb}[] AfֹȾlֈ6Iyݓc9Ԕs\sQ4t׈⥉Cݧ=:5]Bv{Q0߮q5Y\AѨFsZdgύ_px״s.,J[9 uM<[,)T/c$&Uybu/neL')Uσ/ CLYƻ3I>\mmdAIQ1TLMv!56s|՝LU5h6< LͧD.$ bZHChţ@^V[r)&עjaŻҋMG,%sj'NrzH\H<`\Â&A n# I=T׹ۍ%GAG@pocW;:GPR-v)ϊiKAg7@ 8⊊=G@Dn 8LО&b "”|*ѹs߶HAL;ܜpjw[噢R#fZ&a! -YaZ o $ Ʃ!f`#ǝ^o1s(ëm)g18䦯W *]jMAL&gu-Ę4b/fqEL 0P`| %øpqGy1@5& Є! l"nu+Zde(ȵM⧎P[O{0Ì!EkDq]jx-#WdWOWDV֢MW&t' (mff 1qFO=次RQKE[YL vJy5.PW'&LʵKa^f`$ՃIYM @8PHx ZV ^u&&u.:rؠ\*zU1+Tn]FfSB׎B.e2и{4z ~x.dr)P'Hし$uۮ.*yagg':6¡"G}1'1"q( z U ׏7ӕj 8%q*,]QGEPi d;F~ʆrpT L㆕0,G5PA1R4(MK%|VRVs`6 vdhJӈv)D{HGRzepV]ur*h_ ԍ"-D]42NӴi$I"1wwy||^#U; 7Zw0hxڳWC}Tiug0ԭ\Gުem!h¸bb_1E;Z[[^yCoCJJ:w|0sԤȝDnf6+K_-غFFJWQºep $mnd/Ǔ"{&}ݿ솩Ũ本RygvB s:s/Q]sG.9BfNaR2%Kc[㪨K{qHzs"F*#RDzŪcnx@CȇLBX&'Q5,L nZgNN)yZ5q Ԉڏt Q ^W=8D(WUA5e0@UZYQ4&f 7Dfz{V\2Va\SAނ̭HXc"lc; WUFMBU;JɄu]}|ShGAPߜkdI4kr,wB%5924B?Nn*nd$B=łXru`*QZe>[E q#4 {ppP$yW SrTƉpaY7+6x3bK$ՅrpwxTL|oUEZWzYvqq(vw? ֥-8=g:t#\o >\u\q}g*G d&:X8ʶTNaV7ƇcFU@>4FJ9sa>Yn @P i%X=׼QȪ5 ׵tl7l@)h.b{&-&Yrqys;eUWIWn{.A (SwSpLJ39&Ajqy9jK*&$rT8 nSxH8Ǔ gTLD1Hn]AiMPnMma*&R QFc4x!νSmQq1x B !(MiMhu CpϤw ț)&KCDTT1xyA8>0`tTڢydGlu~ 热:yhYEP=q]fm9KǶo3go[Fd>m.ZIk8DysM)z.n5{dKkrknAF@ (jh!XY}DȑC5 ŭ[04^ֱ5z[3L XX31 c7d;ĶkKW[3IK*gA8y?1| CLp P7h?;^l5i)dTIE pq|#$o>wMm$AJ@>aOdGP\#Mo3q9g<;Q-A~$個.nM !♀iI5,S5;j,`Dz8ec$hC$YB3@j5!odV!6e0^Zԭp7 *XfC.ÐD!!^fN]R5:rôtVqkPB3GBkɆs}%KX^ہ{jFx?#HB<XMWQ.^zJ)Jsߍo4bjbIi"쪝+kh>PD5CLgx3q9\7,i@nylR͋\V ^ץr QNcNSS \ auCr!"bАg=" Şin.n<"Ȯ*w J"!Q𽪍^뫥'uYBfMygАОJLx~q!GiŪу1խ<ԁvSҡyGsI'9$ɭ̴ʞcҍ! zu¢:29A+POԋQ= ެ4V d;g8`܃G*>O>+\'HlƅѺ^`:֗hc,A&"LJ t-PiXd}|{q4q qE*ACu!)밙,8\Q  Bfw3IonDkL":$a|c=GF&]笾(GA{8柊QyŴbzOQox %;.'fI(D-g7|(yU:@ ӣn)>0-`i# (|W])(7 ( *ZH ܘF wBF@ȥ<`xr}_&TM# \ SQt'mnt=\ڎ: (>`]RI9/o3h=M3c-n/qIDF*)_󧖡چ?\(!Og,,C@RڢEedZL@2$37!GIgQhQ7qx‧9\HC(fe~b'qk8O( ޞֵ} U8D|4-/&J48 00޺0 0{Yh b(x-h,@$4?fj4mdKJ(?G5vev$ʇIGf(&("hk#`k~4K9@0N;S9B`EJso@t;Ɏ/Va0[_~|p)8BelgO3)oKq{ X]b8}ߋEz"DJWSj]R {/+sL8EQe_F?=;Ԧ݃7Om{&%P7"h9H {0y?*CiBf>}v멆<~x B X|ʪ[N#wg 7/t~y\ȏ.2S`a[Jcș"f&33՞P yO vT 1KU?ޑDQ24q)5 f3Oď?%c4C56!+f醔,u0QGoØ-|K.\qg Ȗ$ǝޙ%"&)F   (g)2 @V2aQ&]*xJ"^b}`cd))b %`y>OW$t +(}`C6jGUlòr/ je(Jr*񦚤`2^v”ҫ8!1Va30O7 "2=rhzDFhpvDޟ^7(c(L{莋\Xpӊp~ &ďhT%N)fa(GDcH}Hxt)dzl}É@B'2絧E[]R(M%A ӡT~wOz tP 3z!׾+H%xG{pe~꣠=y3A%(pY"!]DhÈ$.I6#֒K"ƶC1HC+aͦ/'):"*lg0AHTu9CK6\UN)dvGi%s. {fhAҪ8|(HD6F-j27aJ6tQLq6)r}uzpZۤ[_Ol#:qSX&P9>3H\5Ԉ49md H܋:ou\8ά 6mrqi0RO 1G)EOiY2j( ^<\A$Q1 A(8@@bw(,Dn*!0QeAѪҵzI, Y1&۲GBPbbjJ5"AjgVݩ J!S@7.j6yt+yy^}H߯&Y RNݫmD2=(5B]#xio$x&)2&3кXhvڥ=0LAմ5x4&}Y'8ʉzh4=̇vwrp~S0 /t16oju Xf =I wZv/D$MBǷ,QrCX8ۿ]߅=aa]13ӈ GqEգr`OCC$ j]"Q?[G3[<Η3JNGj^P%_=_Bc^WzS%mYpKɸNtdM*|=+fͺ[8q\*;qu &_Viē^قt{V|cJ5"y1* jMnl`ڵz*[*GnWNv vkNۃJe_<gz}CKW$ $p9J9 HfG3in[iA+*+,4s-xD9 LFQ9n+%)ޒfG<.sn2d4_\NBQ Dsn:Lj xbJ!S#d!.<  $BdFFpߊI7R=Zש8Nû;\Wa(;o+T,BjD:fWk}ÿ_ėx2 i2郅QS4:,Ӳs1e?qoF$9Q }x'M: :a&Xag㘆'(ka |]/}`a+DZw[Γ1pN"3%4 *RѱCkjkEQmT L@0 y!S !T텵1%?q.9=~v}=84t:s2 fQT;|=^@J2CdMfP5^$@nmj ޯ6뮶j 2o&ɪLdQ 0tá H [l`Tfk0N8UB$U@a=3SPQ(2ZR~k XHOWC 3!_jD%~ߩ ÂZ <]6 ؂'Rqњ 5]~:u @.!mRi&hRcBJQpD~0;;x.bdJa6COP8(4 ;&4dLAlKA7~F d($@U*D *B*@A |07 z(bPH 'lZۛ֍MI)f5sVŶf6$`?}^1h?9 H|w]5lE;퀗 ԇlwլ0=ĉЗ[aj7o䍡$yd~dLe)C?A ДŚD8Ub\%4)b՗뫨MM;t])n]nfX1\W Eq7KF}JKJwx%R#( a({3@SQ"GyТLӂ"!@`|1`P7cA!al㠱& cm(q&ӅdJ-&+7q418BDwh2h()(%{ !!s0b&o +77ӳg%; `ujF mҗ7%$BVF #oNLқ@ߘױ59B ͔(HN)uW6jJnɊ&Rb`BAtiaDL- 9M*Bq3js0҅ 8c"-Sak_8];ysa@kjJf)bt&?kt@2݄t ! D-S(]3I&c Ro(sTyW_=p Ș82;$'J1D:Hf<x0#RLS B<KAԈ/2q:`A %D- H~ӟ sHRd{aFB#1Fu~t )Jj͚d4cLblT%i"djfiƩS >F/gu}mR ( / >A9^8͜XBy_t=B`=gӤS# pH$(%M>Nay*Bhlƣߏ&*IrRXgrņ*u/1 W /" ĘG(h fOõޞ ws8eO.NI-S+Q z3G {\wꗙ<8p% /&)Z!~D @nPт$7^  =٥UE8!DLxd ?OJ#@{ӛ1 Bˣh߰T=D8Cc'ommc{XKK-A 4g`r`=Yh3Z2u)0&m%}ꯣyB')S9,E lVlx^Bh""pa>n;8NCdk 'C{# CR{bU>FC2aa2I i4B&y9ˮUݓoI `x 2Մ9蜹1 KF$˥+I3n G{0.8unUeXaȲl͋EdO%AjlQN`pv3N5:/6pC=-rxT 3 ( Pܧ,Nc:|!(FvèUJ tO2CKA"$Pi*AB)ljURmVHD4 H$3R2jc-ƖԲ)l(+w^  `Be)ϘQ @#BMY"% J[^i} rz"QZpڢգjTihk&ѶQ lj+IbdȪimW-m&,Xԛ%lZ-QE1TV*ƬZikM-Z6QIh#M)chDZ1%3H(Z#RF5hmIFFTZɶĚأS$shkfZV"ѣ5F%&l[EQD&֓k;kEFhbmhœ]O,ٺ@ a4YK#jR0i2F-]?}6$3_m}Ut^YZ.]lZvg"8QLV,a> `Rd%leZO{3nmx:K&QTU̔ěA¼zNܺˢ`0u4̀=Uvzzz:HܘRDВU@fY6ib )imFbeSJSb%QA6PhcADȑ_ֶ4ܰ01\EI]?//Ί& Ρx79jF7:v} #vT ݞpx|+Ÿ_/; A醴uC-jׯ,nI$$l7ħs,@({eD=+MAL5.J Ԇ eJ: IڐC>z pO~a 91pIH tayC`Y3awbk~ JgmZ<0zSEx: SY.k?搡i^APtx?_~{Hg*p0a1CabmPUu9O (9D.}z_<9㙕@@wvߚ=G2D;g Th,zI EL P!4L@h*u8FkSjbure}CS ".9*aSgojFAaS7?5gF P/˱:d(g"?֩7 E#BB* B#vS}E{W2gVxy G 2ZkӒD?vD<`=80!iAL!ި5Hߓ #-Cіਸ਼!Ӵwr#{y9P11pX_()n=YJE,=1*)lZXo|k]W2+e};>i/ #jf Hp%rjd>k(Z-a {{'9FyNe5\LQ߫3/%]U g>5*^O^JyZ^7$ZYT5~qnC+SA!rgtX( 12ֵ1>"PN(;,X.nd$la:lRdZkdD'p=WL$ ȝ{"ՐTɛ 5"~=AKzu|b ͐~i`$88\Wu<<52n8?TS (xH "PVCּeBWb1W>"C*EQjD#' R6Fy y8'ݔ7<=C>xr%3i*JyЁEPvOrʙOyJIòD\YN2v /q+ F4[^JWλlJ=GL<p:|ܘ ,AP8CGnp1 rmz Z<3~ELT:gv:vGmV 9OfЍ*҉qMB(ji  221 BbԔ.M0M*ҫ E^\Hm2ƭФb"R!@-"R|5Zhy*8 )E'X[!S.VԲ7ۛj @?KJJ]J>UTA09B_Qn\~ 53"}]%Em2`I$'dTT%Df-EhY$6IlV+[eKiRV5,fͤ\o˨f(ً bhY&)564FJhSTIh3!$$ IU*\mEiEDUM(_J5~QovpK-jB@h.Nja* 0!$_ib*h3cFѶ&=}_^E"L"6)Z*'|#d&Kba5vb%r$)hJ+HF45ёPۖ*LZ4h\ד)uܵF c (0Ĕ.DfpN?>Qlƿ0V& Hm*M?{q!ل 617uTmoa~"#8#>"DDZGq$xGX%$c1R3_λt&EP%)-qv;sL;Ljb՚1hT%M1TڦfRF%A$9һԼ#ħ&膘YƵHMfTA&CdD펖p%FH]SXaXv(ly[SFHֱAnCSs]9;6a0\|AC8'qMttְu=e6hwrNJ& $!ILȱ]&YNj\Tn2]9SU0hs}`𫃀9ޏHzǡ%2,2b/'A~ՀixRq3lt^8`!G$?J0ԞܞuS6`dv:x 'g5FRa7:GYp$܀3O B9u}Gr`t~ Dɡ 4yl5FbeRX߯ ?!Ѳ)Kt/ug/7kƱTRƊXɠ*46'[[Y5:@$U3^|6jӼ05*"sFh 1&!mL;*  _ovTpLvE'&DF;Ѵ qB2JMPE$e+DɎ?=uPjh^C7 i@tK׋T$I+ؿ=d*& [ xO#D/u8(S^ckSqPoyj]/,MgG4ʆ&x>*5P[flhPG@pJ!H"lxhlt\@=qTDE0aF:Ypx=L-k{9SHV!!j`H:xlZHL0, V֕, ?ю"=th4Q1 Y=ܝRP@<|f,GNOB$+ߛyl͞gB^=J:@Ș!oa&-155##l⧈?~z1" E^#s wMㄪ'HSM8sEH>|K hU1a䑤HMIl`8l'ዂ-@az|7d%Ia IV  M'(aACZtvYen1aHwy8E E*%M&vwO xT`Ӻ?r/ i4KG~?wI{2<fpGxsGFhن=B 퇎?PЃDP >S/O5Ay`0g%`qB`X/RkM2c( |®5J_kAEلPŀ`MBGOD }G8]a 﩮u{"w9vքDr}7ocہ;[ѩ)H37w٤q;M*'R_iƝ0/1aUD)ƀ#Hˆ9ǭ''Ukc* Q3"XYASH:ęjgJѐa`q\gA?E"qk_b#0q wb矢 )ZR:xQr8pDzZk.GĴ= C("Xq ~Sh*ė59F%?$2dX ۛ@sw.޶9I[Rդթ +,8ƭ&8cE!Q{su H9"<oڮ>}L|^y(#/?6&JؔeUJfKlVmI( _.8g JY 6Hn43tΧz =lϧb#'Оq1eE1cv 4X#@~Lh .1$00UPyA m]5oxa ܪ<|x##d0{S*1XOHՈ@PL?>'iH1"q(* gV+[{POd 8xx ِ7r"jj` hHa8Dͤeٷ^c՝$ />'8ln1X(!+G%w6`XXkhKeK% "ɉkY -)<}0,>PO PRUEW>_q {!4CZOL֎vOmmGd]e;l$mGmQ' (PjB(|{B&S0֝#8n@|yom%#PXNډC&"B& &C1$$dPO&&$8=`x>3|Yr5M`ocvEt{q& AR#Ke{O15Z#KKI4A7VMEZ-Zф Dp =C^4l>(E1$`rDhWP,;? ҠK8'1}hh0ts5 ݶg6G~%%9P'.MZ5k(2} {NBu".m,Wi,^aDkǀx+$ ؒ{<U>ϥmTLlS$f̱(Ie5IRfD-6ѲQUI&6E5!jMA) ʰҘs+a#4 !J"X(M[SL8\\ GLe0,:vȐ=Ҫ\'y.ۨրLISVMSJeAʹiMhЂm6ť6eQ4mQҖlf4ѠGGAEjG7־^TZ}x9hvy`nj>J^Q;9FV6q *q􏒕],eobicXys`h-H'[RLS,nWB$Ԣ@}JEM4zvZɄTC{j%8@͆%FFjIP;%C`0nJ S.L&~(zSgHx[<̣no1$0TJs:ޔ2WvM&&D8(&~UðBB86R1 Ppb`9 ޾|} UPBH@z0~7qPŻ HeC@g!wi{[F1c CQ&)5Ҳ ZQ1dQ؆!2K$!*A>Q@HV*2 bT_._MYN|G}- TՒ`~&@FxIZ {ǿg_㿋>ޤܝ %wwP8D,Cs6$ɼ'}ICfO^+yƔT-N#:M2Y~=uB7+ng"`&h0pSv cQZ}|*J@P#5fʪ 縩M`d;l{JN q!8-ooq/;+ePQA1wƙѽێ:hQ?',ϩ Tr r>\92P۱Z56lCJ* T$x!9 <"us0PCoԙML3s(p#bAq/7_? CAGm{W%L&Wj3 i,D)j\debPAw\h,w9McB{8ڈG=A;v5ň>x|{Z1ZQׇzD8~#,3]{h8x4&UƩ֞7SRM Ȼp'2(v$C(pIXYz7z5^O:w7ugާrVyŶ~^Sww/qv=넼ASeȮ97g"aofb}?8BPj.Ƃz@DzN T2nzh h5L=#F Ƥ7 :K}>瘩A6@A]JF3B=Pv0yoKzĈ٘1j :3W1-<s2@JvZGXQ&ɤNvJML;T:J42"Y "hcbZe=ntIJRɥo6ĉR+B`o1 @kZ $̌ޥjC Krf&V:;%@;5#BHл) C#h )I=8 x;-KK>۞lz WP̉P 8B*9֐; QYN קDs˶ʁdVI0;b1NW=b$7zZB|'+;̸0(iI<Ȼ A팇R&&(,ܐ6 䯎`ąP8lH>o#^rǐ`袒wDHߩ1 70@4 h]f i84%h؆>;+EB^N],V<yPC G&2QzaB>G'·Rjrby:It:$yhݛgFz4]̧%ckZSBAv>y%SDZHrKpe*jUmkS 'T:(D%  MICy.ٌbM. 1 91@#p ȅJn{۶ 2.0 fh崖K]wkJi52ڮ]ڼvƢ(99WMwnd sZ٥%lI",  &;W]$UQTK0-g:d#.:(9b$7ay ;n&y#JP:@Z.9@p ێCZBꌮ$ދҹŸ6KrӨ%%5d'DJ(: 46&H4(ND4mA@u! ۲HCH<3b1,&"8;BLIAxq+BDT¨*$J(JʀR6IeB(/ȀBsBP ;H@h)Bj M!Rc )a8"Nj)9E$ѮTWV08JiU{_ ߯ 1fz5Ӎ"7GN18 !8D=p1jFhÄOx::Dnxr6Ržۍ8NAE7Qr\cp㖗 `PIOrOtxG&^ҟ{@㸄8xx1GТ>a#Rc@(( i>2 %$6 iYj5ߣ桚KZ2$20X Ӌ}?Վr P-DpPJdwӅp&ox VG1D܍ltaZR  Cxxk5 Ar2UF[ܝ3(8:G:tAk@E! 4mƄAӮRz*XBz$hz@CR1:9Թr`0ۃ+d=/x^ e]hD A҂T E#gA}*9qNd$D6?v&sM`E.rGض7ѯ*[b֦yӝݢ2ZE\4kg-+Ip( dP@G;Gr;*;u @(()PҹsjjŐI N!Qi)d) T #&Q.U(b&NH\I8:Gv$$@%b|>OCQ(tHjL Q*{7={?v?EpfQ*k3-:s`4#!py@@$yBq0pß? I-/A)JI1QF eZ!==^zT[w/ jYj`ebDfm"f*ʩ-BZLb%,٩PͲTE1 dئm2& &Dl[CF efA4LjYTeD0 @cϟ:"`dM\iV$!ڽ?^7x5FDǕ?02]`~pUM'//櫅@Qǜx2"xł~` f"ZiZ*QhEQJf֙*-m5m4h5VjkQ$+T-Me-HhJ̲ZT6\edUVk, cX4F 6֦U eXE " I)T"O  0 QAb'0H$)LtH^WlzݩfRS ̗FZ)hd_1W$!`HF%Wld!a%h+.OHiJPabAP22|pɵAN SJ6-wLG殼 @ 4!!)Ha_Ŧn]81׳MsRX&>7.뽖h]ZQXˆ;(.$T[㍍){F~RT.1N j9By<_q#ze): ChPwH> "9,@Q Q")V a< Lid b7Hg>Najth#)Ѧ !5H_7pҭ(EPL_:"E!D a*&\@;)ܝh5 `?,+Z݂"ۭB7_n8n˽q \h)H*b`k &k*&CYκ|Nz} ,nh!J76^I$JIdI;ca\џUTdۛ& i.q1SbePtp `#qPu}EzW%vDvҫ]n=H3{f0+uLd"J2q'9It4[d].nCZG Y08Bd}۽]y?xÃNK  fYeAOJ&t|O\xA7<,vڽm+y*RH! Ȝ5"B B!TA$=X~B,&ݬN:D@g9ɗH=!޲0Kgr<#%EB6bkU& HR ;yA =)>3EDAf2=&8;_n/JʲlVM)1TZ6a:_ݹ dQ&.@HY)uF( >iF% َ3"%v02H8G EpmItŤ lhNtf67uc߭L},G3O<>Q04,!w@>< ȣ?:]-~k3z3>Pcܦ9=(P4 8ǧj.C=>ܝx*9giDZǘb7XR@XBX'fdBz\3h#^1FFb%fisS';~|yc;9y(4Huyew.׿l{%8Rb PGf 2J ̊9q2"Mb0M~ؓޤcDT$Ly7riC1 ;M ֐AX&6)2X d)S;awj;dBdT5hډŅ&DnQ :'y'.?; L_꿏e'=עy ʽN"<[8!L|(bt"6C.Nf`|' (A>ۮCDnD@ha'$)`bs u8KAD+!HQ9WrrD ̴"(MǺi;gR! 8=D!pn J!Q냌O i4G$ 7ʇ`;~D '!B$Qh#abi:L9B' d8Z N6_EEMP kpO` H3c;65``f(7y;O__Pfo>o|b( 2Q7b8I}AT B 9ϵxH>I$Vid w+ڊ1ЇGh [;4PQh2/}zߢߑk@͕M)bji)5Q_vsdNWG_Ş.C!'Rp0)GЏ[נzxIQ]\d2 IȧX'6T ʹͳiž;Ӆ!qƝTj!6MX2 *9д$BjGNCg?{_tHM%f6![ʧݿz%ʏ}!Fm;nJt q #NhI:qpѬS"bJE1M$ # ^lȈ Dp# \ 4}r'.=$y-<'v H`uk# ~߫0ƅȪU-Z:KwCn]=pO7B9ߖ o 4VONMƉQ3Mb(bEUpH'i>;(FB > _Ry҆P֏}4/.o\oG;O;AEߜwq6|O 8kh": \\3-kA2 '™}Aq}`No}#v'# %d!"+u6$4g*SEhF FF[ZMl58KG_GɅH(c E2eTm]:n1-(5,KGHFdg];8gg>V+&7]0th- t `wLY.ʑRң",aYZGrB'$Xpnm'm cVT{V-]BR$ G2BIin'۳& i'H)Hoc`4#l}ޱԫo7Ƹ0 !hԎ Me^&ӓHc/&3l H5ERQ M#ɸIuJQWcy}o!P|w!6hJ7cEI<$SIKBە!lv;0I>d$w"t;wC o ǐۍ5Vッdr jMkxL)iCp&u]+F˦ );x>N|v'=!(ba񙆇v˰!iNSbf pE .'e.0I8c%CHiMΛC)@ Э B< p 8?<{BC:\m. f1Q8K.4jtQ3$#3k4hi^` eMܮ[26ŵ{Wqn{" "!BQ :JAW׽Q #ïuסqS%SYhXd֌ 6;׌e%۰;,2c)(B ZZ B_'gd_o`7<^R&Ɵ/E>#C??{OfIA&0`a&fL1q}5wize *Ya@e!} "b@dQE :؀(ZAblNÊ&l1jA5BJ>;E56QJ,Ƌ]-jԬ\D*}0HD] .K☿{ß:뎑૗OY<(w7;;'0}o eK΅5,{ۃMrR#8wkss{*=.q٢V+Yc,cI5ۯ5 $>fM(zʇw<:njdsH9O zQ^r!>t(!DHp%͞~{ܹ<$ɯn۴x&8/ (P }CJٙkޢh( )Y'v;Vin1$JJTlstèt/A .IJSPPDE4%pG?ܜ}>i1L1F* & s< w8:i&Ēd\K0 &w>] `v>DXbQqÅF )LJ_}Lwam<+ʢ?Hz!iqT̋²͵fȫMR D]JQ7 mGF Gr5ҥuUAϏT33d˧4@B;? J*  )pQ@I.#P)jMx'CN@ #9zbH@@hb'/`RM#%XD`N,O!i d"oƁG@%Zp. EQ&a5UQiR6iiJ#QZm㖶2RLlj6RD(DGQ@& !Q @v+JE*I&%TQj*`LIJe2&RL-XVm6ZE#hlkiKLm{'\*L R*> @#G>G z{`9Ǐ&(!y\A 1?:=h`:DD /Z;@$" ͕QDŴk&[6` 6d%mF--RmGAWHHIX%A*}P!(d%CIFl*STE^OEyw|Ϝ)q/a%r3#*[(ɉ:k~'O>:e ECq+oI J 2bX4#Op,%қjք5e F 2A`؃:Mt9aWUbZcY xŨE[ . tsAPeZӆ1 ֵ)"I{+ϯ^9fYns/ M+6#; ". AsaXP*%Nޓ2lULkP5QַGK|C^ʂtmN"'6ys0auNQqcɈɩEexps2y9|$&*lhFBfvIY}P4YaB m3a~{X刦+G n.K3pqfRE PJ:d1$(,nf{HUjcnW53lT %!Fc )EtuĈ#TQw A{'Vs2ۓ,+n"ϣֲ sj$UBM'T]4\)8ksVwX:[춤˵>3< !PzdRE,Ixc;5KbesS.{#v YZNtݗm0@R+$dQ-ҟ*Ϲc*emElƃ Q__ {SG8Ɓ>a$A׳6bzÈ2 ĥn1545S噇͘Nn(;'*Dep2U11*b^Q:,Ek$<(;SWF}\(P҉r'So+I޴eJru[+<̧/}{M@wxAJHWf"p ڥ{+UճR_%*6xY=?yY|[qGD\&A'Ȕ<^V(ҊpxE<׻X,|k(I2ݢV7PvLAfڂQUrk3lHD\4CQÜQ+ &ap;rT~̩_Kv\dѡh@W[4uDۍ ijDrʨ)Q)[+Z+#h`SPTDDjf7dkKXQ *7Q2XLbQ"Ps:Kx#:f\ޫJ'].}ta ͈kE6$~ݽ|"V/*>&$CPS WZXKfMkڸhEQO\gwY֦x^; [=>52[ך'V[M#y=-*ASk&E2zljA֧*ׅrwڕ*ls԰HC-T&dhBHAOrBE! hՕRˣO{&Vwi$5.vkiu Vp6_|yrT^N dpSv_Qml~9'ݐJD?(zX=@?:դbI!*tYoÔ9b."Uh<F,Evfڲs[MnV6= wrCDN FEp@A RƄ G3 ' 4@`Q{(&tc^V^2#Ga8S%@:4/#e`f4ۻ^~ 1$B ao]Ԥ'k&$挄 3@F)D nOyRV[CS1T `~ey Qb5B@4H bG="iBWLRmGLJFԺu`p4ˤr;qnSIq;i~|>wko,/hϗ)_e|({|-{o{/t{Ky!2ua! \puͧ_Vq\@0˸ta+T"Bf*R%h̀"bnM$ȁʱ|}|-ZHM&vP@pxI9NcP>;|p|U`M NT!y9ˡǎ~|{]TD%oAXM<.l0y􂔥B"Zrn֐kU;]|~Bgb(x#m=6,J ~?apsdW05+lm5Ӷkd1w <RskS@6cIQLW~a&O<}fg9:ؘ%4U!.BpQ %oP@PBci xE$gWGz'72d9z\T#۪zR0ګ"qb@AQiHAT\(&4/ Edj$fPX!2#%yplÆeY^aF&;fHf5Y"PQ6LkeBiN=PsHJBc̈iS~¹{*0"jMV&<> xǂ3NaO|"960trM)Ԇ*%O="dݾ8īθ+(p*|s}B"ANF]o\-nM$[֬zWQqI%Ɩ#^gLs.5Ce5wDY1OqeJVo!@/BJ+RWdžDKG<{ΰ˾0yF HdIuO{#v40(tzK;=jBݹ Z#NUgt4C!ԥ vyb˨H$6PU8"ub9s:c L/$V2Y1\B[-K>WXzsPx; I2\8 n܋'Kּyx&c+ׂ}nztdNF )(nxmԽjzUP(<BU5s} xWq2[I4V%RJsR #*sIi0Yk*"nDe-2R%AWPnO4O &vpL8 %o=+v)Qi, M!*8ӴR֯bV,JޠQnnTL8ٱrHY0:^;1pA"*"):P"-AMS1. {K*k5@R1=  y:8++6'egu*əmB- M" kYDed‰츝KC&m P?RzU|I0굛q  P L{4+{.Ϯ֣фdzR^>.ɐq<1S#e1_v$)%C)(:xw#0dJ8h4:$rJ!b)׀2XP* @8*E@9awIשڻiB?O!4~CW{oam&0$)RJ0'IT>\{9CcTC5Ehs&d1,!ɑ^KpˠC(itP. S`rQBdlgxy6 7𚚐$EEN3E/Xm4Ũa%]Bd˚dT M9ƗTrm3Dn.F(EvDHi@\hc κcI\H7TY)fe DKoSi(N{:Wu" BLD(8+ ݝ*^>z<+ӊ"ta|c[9i_菮VVS8`=Q33~*s.4ң,F 2*0t :ln.L}mw! QG=Ϫ1d!.⢪S^z6;9:QPJq0i& Cd˺fUzVb֔n32 ,y4'tz@2#PRH ҨD҉ A*   b|k{Ck Yno bΰ'7 jHUB&8416E^Ͽ<BINX󶿘0YI 4-DiIY*`+QY)lԴ̥L6׺F+ik0)!"AA+=UxBi<bmt̀N;06%k[H krCK"AqZ#$0@I H?w+7/Ԇ"""(,HIӢ+pti_v{}j83FrG/: O?ܧOw!zEE>ɎBq8=;8D`wn/Ez` .M eZa]r*9~`PÍDv|9<=P4#:rw%+xŽV|w)v96lrMI %KjH3iҵm$Q4JM[xmnZy^ě@t(<`*i9x}?mHi-\c0h@^74rK[M1:;cʘW3- Bykuq%(I9fƵ @05H&d8 9:;8q&ͻHAf"ȂD&" D0qG/uZG:MbiX!R)CǧKXn7:t8I9j>;z.ff@랲Vbؐ Ԃ"uā!@!۞q!7)db#O-֎!PeS`_ T"(EG<2>q=M$D;ore̱DBb bugWZ[,`2cS?Sr8GuupOzx{-AՑg?Z/K=r< yHPЁJa)x!3 lhhڒP4d%HR @9РA](BJ&B.B$]J  A BRU;ZӘN UN' - m%dե(F[mڋQ`jQK13\ >Bԝ=\u/Vq;Ψj I:7oxʖ6RCL@I I: E4Fġ?7sIqz:wͽ'9N8~IPzzHpQs(qs/]DLPM,@B(ҚJT:sqӈ7 G?҃=ШPc mKĠb pE2U "BR$f0LD)32R*@RD!B( LQuI(a&(`$90'`$8B薫.QMW:HR@Q%(QJP "\$D QpPj4 Db0L`o hsR@an_ E^&cIWc= q!>xL>;o`PpT|GIv6(>EMlhRS6&ȵ))Kزclkd4*Uj 0jIJXMmjC[fU"%!F@zB|b PQ@ "Qkm1֒}ר{{IxI^<_Q=臙 B〸QQ0|yPQ=p% 8|' e0QC-WLk~et{uƖģ; 00'#S@gnԑ'٬ kFюM#Q'I"Cv~z?-> jH0%+o.֣րq*a YP BPBaf &i Ɉ]9p.BЅAJ@U|"S  Pj^T@ #R:hŢZ D׉clWe6I(hcHO!!iGO(s|aY5+KZQbY m,2 A uj(3,bav|π|I@NS^<袇UI4N (gOFI+DRo?]p~A n<0 S4JpǒDR2fgiQ_x-{zĤ/GD? "x]AaûcbU6ɱ+VYfCy鈏aLY ' G"d! pBuƴHC:r C%A8S!$%֐#9anAn3#&qtdPR%k rjs8F4=NQѰ#T@1JH%:tv#X14U$N_ćD~<η BVh i]