-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
1726 lines (1593 loc) · 610 KB
/
index.html
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
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="generator" content="pandoc">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Christian Schuhegger">
<meta name="dcterms.date" content="2016-06-05">
<title>Control Structures</title>
<style type="text/css">code{white-space: pre;}</style>
<style type="text/css">
div.sourceCode { overflow-x: auto; }
table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
margin: 0; padding: 0; vertical-align: baseline; border: none; }
table.sourceCode { width: 100%; line-height: 100%; }
td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
td.sourceCode { padding-left: 5px; }
code > span.kw { color: #007020; font-weight: bold; } /* Keyword */
code > span.dt { color: #902000; } /* DataType */
code > span.dv { color: #40a070; } /* DecVal */
code > span.bn { color: #40a070; } /* BaseN */
code > span.fl { color: #40a070; } /* Float */
code > span.ch { color: #4070a0; } /* Char */
code > span.st { color: #4070a0; } /* String */
code > span.co { color: #60a0b0; font-style: italic; } /* Comment */
code > span.ot { color: #007020; } /* Other */
code > span.al { color: #ff0000; font-weight: bold; } /* Alert */
code > span.fu { color: #06287e; } /* Function */
code > span.er { color: #ff0000; font-weight: bold; } /* Error */
code > span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
code > span.cn { color: #880000; } /* Constant */
code > span.sc { color: #4070a0; } /* SpecialChar */
code > span.vs { color: #4070a0; } /* VerbatimString */
code > span.ss { color: #bb6688; } /* SpecialString */
code > span.im { } /* Import */
code > span.va { color: #19177c; } /* Variable */
code > span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code > span.op { color: #666666; } /* Operator */
code > span.bu { } /* BuiltIn */
code > span.ex { } /* Extension */
code > span.pp { color: #bc7a00; } /* Preprocessor */
code > span.at { color: #7d9029; } /* Attribute */
code > span.do { color: #ba2121; font-style: italic; } /* Documentation */
code > span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code > span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
</style>
<link href="data:text/css;charset=utf-8,%3Aroot%20%7B%0A%2F%2F%20%2D%2Dmain%2Dwidth%3A%2084em%3B%0A%2D%2Dmain%2Dwidth%3A%2066em%3B%0A%7D%0Abody%20%7B%0Amargin%3A%20auto%3B%0Apadding%2Dright%3A%201em%3B%0Apadding%2Dleft%3A%201em%3B%0Amax%2Dwidth%3A%20var%28%2D%2Dmain%2Dwidth%29%3B%0Aborder%2Dleft%3A%201px%20solid%20black%3B%0Aborder%2Dright%3A%201px%20solid%20black%3B%0Acolor%3A%20black%3B%0Afont%2Dfamily%3A%20Verdana%2C%20sans%2Dserif%3B%0Afont%2Dsize%3A%20100%25%3B%0Aline%2Dheight%3A%20140%25%3B%0Acolor%3A%20%23333%3B%20%7D%0Apre%20%7B%0Aborder%3A%201px%20dotted%20gray%3B%0Abackground%2Dcolor%3A%20%23ececec%3B%0Acolor%3A%20%231111111%3B%0Apadding%3A%200%2E5em%3B%0A%7D%0Acode%20%7B%0Afont%2Dfamily%3A%20monospace%3B%0A%7D%0Ah1%20a%2C%20h2%20a%2C%20h3%20a%2C%20h4%20a%2C%20h5%20a%20%7B%20text%2Ddecoration%3A%20none%3B%0Acolor%3A%20%237a5ada%3B%20%7D%0Ah1%2C%20h2%2C%20h3%2C%20h4%2C%20h5%20%7B%20font%2Dfamily%3A%20verdana%3B%0Afont%2Dweight%3A%20bold%3B%0Aborder%2Dbottom%3A%201px%20dotted%20black%3B%0Acolor%3A%20%237a5ada%3B%20%7D%0Ah1%20%7B%0Afont%2Dsize%3A%20130%25%3B%0A%7D%0Ah2%20%7B%0Afont%2Dsize%3A%20110%25%3B%0A%7D%0Ah3%20%7B%0Afont%2Dsize%3A%2095%25%3B%0A%7D%0Ah4%20%7B%0Afont%2Dsize%3A%2090%25%3B%0Afont%2Dstyle%3A%20italic%3B%0A%7D%0Ah5%20%7B%0Afont%2Dsize%3A%2090%25%3B%0Afont%2Dstyle%3A%20italic%3B%0A%7D%0Ah1%2Etitle%20%7B%0Afont%2Dsize%3A%20200%25%3B%0Afont%2Dweight%3A%20bold%3B%0Apadding%2Dtop%3A%200%2E2em%3B%0Apadding%2Dbottom%3A%200%2E2em%3B%0Atext%2Dalign%3A%20left%3B%0Aborder%3A%20none%3B%0A%7D%0Adt%20code%20%7B%0Afont%2Dweight%3A%20bold%3B%0A%7D%0Add%20p%20%7B%0Amargin%2Dtop%3A%200%3B%0A%7D%0A%23footer%20%7B%0Apadding%2Dtop%3A%201em%3B%0Afont%2Dsize%3A%2070%25%3B%0Acolor%3A%20gray%3B%0Atext%2Dalign%3A%20center%3B%0A%7D%0A%0A%2Epanel%20%7B%0Aborder%3A%201px%20dotted%20gray%3B%0Abackground%2Dcolor%3A%20%23ececec%3B%0Acolor%3A%20%231111111%3B%0Apadding%3A%200%2E5em%3B%0A%7D%0A%2EroundedBorder%20%7B%0Aborder%3A%202px%20solid%20yellowgreen%3B%0Aborder%2Dradius%3A%2020px%3B%0Apadding%3A%2050px%3B%0A%7D%0A" rel="stylesheet">
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
</head>
<body>
<header>
<h1 class="title">Control Structures</h1>
<p class="author">Christian Schuhegger</p>
<p class="date">2016-06-05</p>
</header>
<nav id="TOC">
<ul>
<li><a href="#introduction-to-control-structures">Introduction to Control Structures</a><ul>
<li><a href="#goals">Goals</a></li>
<li><a href="#set-up-of-workspace-in-eclipse">Set-up of workspace in eclipse</a></li>
<li><a href="#what-is-a-continuation-and-what-does-the-quasar-library-do-for-you">What is a continuation and what does the Quasar library do for you?</a><ul>
<li><a href="#coiteratortest">CoIteratorTest</a></li>
<li><a href="#why-going-through-all-of-that-hassle-while-you-can-achieve-the-same-thing-with-operating-system-threads">Why going through all of that hassle while you can achieve the same thing with operating system threads?</a></li>
<li><a href="#should-jvm-support-continuations-natively">Should the JVM support natively continuations and/or the tail-call optimization?</a></li>
</ul></li>
<li><a href="#style-examples">Style Examples</a><ul>
<li><a href="#stack-traces">Single threaded</a></li>
<li><a href="#plain-function-instruction-by-instruction-with-local-variables">Plain function instruction by instruction with local variables</a></li>
<li><a href="#function-calls-per-level">Function calls per level</a></li>
<li><a href="#function-calls-per-level-with-lazy-call-by-need-evaluation">Function calls per level with lazy / call-by-need evaluation</a></li>
<li><a href="#cps-style">Continuation Passing Style (CPS)</a></li>
<li><a href="#data-flow-using-data-flow-variables">Data-flow using data-flow variables</a></li>
<li><a href="#communicating-sequential-processes-csp">Communicating Sequential Processes (CSP)</a></li>
<li><a href="#event-driven-observer-pattern-style">Event Driven Observer Pattern Style</a></li>
<li><a href="#event-driven-via-reactive-extensions">Event Driven via Reactive Extensions</a></li>
</ul></li>
<li><a href="#synchronous-and-asynchronous-service-call-examples">Synchronous and Asynchronous Service Call Examples</a><ul>
<li><a href="#synchronous-service-call">Synchronous Service Call</a></li>
<li><a href="#asynchronous-service-call">Asynchronous Service Call</a></li>
<li><a href="#asynchronous-service-call-dataflow-style">Asynchronous Service Call Dataflow Style</a></li>
<li><a href="#asynchronous-service-call-with-the-original-synchronous-service-call-code">Asynchronous Service Call with the original Synchronous Service Call Code</a></li>
<li><a href="#asynchronous-service-call-with-the-reactive-extensions-rx">Asynchronous Service Call with the Reactive Extensions (Rx)</a></li>
<li><a href="#core-thread">Asynchronous Service Calls with the Event-Loop and Core Thread Pattern</a></li>
</ul></li>
<li><a href="#you-pull-ill-push-on-the-polarity-of-pipelines">You Pull, I’ll Push: on the Polarity of Pipelines</a><ul>
<li><a href="#producer-and-consumer-example-with-dataflow-variable-based-remote-token-bucket-buffer">Producer and Consumer example with dataflow variable based remote token bucket buffer</a></li>
<li><a href="#using-dataflow-variable-based-remote-token-buckets-for-implementing-remote-streamschannels">Using dataflow variable based remote token buckets for implementing remote streams/channels</a></li>
</ul></li>
</ul></li>
<li><a href="#glossary">Glossary</a></li>
<li><a href="#appendix">Appendix</a><ul>
<li><a href="#cooperative-task-management-without-manual-stack-management-avoiding-call-back-hell-and-stack-ripping-in-single-threaded-applications-continuations">Cooperative Task Management without Manual Stack Management, avoiding “call-back hell” and “stack ripping” in single threaded applications, Continuations</a><ul>
<li><a href="#motivation">Motivation</a></li>
<li><a href="#core-message">Core Message</a></li>
<li><a href="#farewell-to-async-code">Farewell to Async Code</a></li>
<li><a href="#scala.net-and-their-async-and-await-compiler-directives">Scala/.Net and their async and await compiler directives</a></li>
</ul></li>
</ul></li>
</ul>
</nav>
<!--- -*- mode: Markdown; fill-column: 200; coding: utf-8-unix; -*- -->
<!---
http://pandoc.org/README.html#pandocs-markdown
http://daringfireball.net/projects/markdown/syntax
https://www.gnu.org/software/emacs/manual/html_node/emacs/Specifying-File-Variables.html
M-x add-file-local-variable-prop-line
-->
<h1 id="introduction-to-control-structures">Introduction to Control Structures</h1>
<h2 id="goals">Goals</h2>
<p>The goal of this project is to highlight the commonalities and differences of different programming styles, especially:</p>
<ul>
<li>(blocking) thread/fibre based</li>
<li>(non-blocking) event and event stream based
<ul>
<li>Complex Event Processing (CEP)</li>
</ul></li>
<li>(functional) reactive programming (FRP)
<ul>
<li>reactive-extensions (Rx)</li>
</ul></li>
<li>Continuation Passing Style (CPS)</li>
<li>Communicating Sequential Processes (CSP)</li>
<li>flow-based programming</li>
<li>push vs. pull style</li>
</ul>
<h2 id="set-up-of-workspace-in-eclipse">Set-up of workspace in eclipse</h2>
<p>Some examples make use of the <code>fiber</code> implementation of the <a href="http://docs.paralleluniverse.co/quasar">Quasar</a> library, which needs a <code>-javagent</code> on the command-line. Therefore a little bit of preliminary set-up work is required.</p>
<p>In order to use all of the code directly from eclipse it is easiest if you configure a second “Installed JRE” in eclipse that will automatically call the required java agent.</p>
<p>The first step is to go into the <code>control-structures</code> directory and execute:</p>
<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="op">></span> <span class="ex">mvn</span> eclipse:configure-workspace -Declipse.workspace=../
<span class="op">></span> <span class="ex">mvn</span> eclipse:eclipse
<span class="op">></span> <span class="ex">mvn</span> package</code></pre></div>
<section class="roundedBorder">
<strong>Don’t worry about the stack-traces you see in the test output</strong>. Have a look at the description <a href="#stack-traces">below</a>, which explains the reasoning behind putting these stack traces into the logging output.
</section>
<p>Optionally you can also set-up a few links in your local <code>mvn</code> repository <code>~/.m2/repository</code>. This step is not required for the correct functioning of the project but it can help you to work around a problem of the eclipse plugin to not configure the sources and javadocs correctly if you use a <code>classifier</code> like you have to do for the <code>quasar-core</code> library.</p>
<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="op">></span> <span class="ex">./set-up-links.sh</span></code></pre></div>
<p>Then you can go two levels up in the directory structure and start eclipse via:</p>
<div class="sourceCode"><pre class="sourceCode bash"><code class="sourceCode bash"><span class="op">></span> <span class="ex">eclipse</span> -data dev-meetup-control-structures</code></pre></div>
<p>When you do this the first time then the first thing to do is to import the project into eclipse via <code>File->Import->General->Existing Projects into Workspace</code>. After that you can set-up the second “Installed JRE” by duplicating the already existing JRE configuration and adding the javaagent commandline argument as shown in the following two pictures:</p>
<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA3YAAAJvCAYAAAA3A0NqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAMdQAADE4BEcp7TQAAIABJREFUeJzsnXdgHMXZ/78zu3tNkm3J3QbbGNvghukkdEIJHUJLCMWEEmrghfCSUBIw5EcLhBKqIQkteekGTAmYFkqCIdgU21gugKskW1aXrmyZ3x+nu9u9LbdXVE5+PnDW7cwzzzwzu3s335vZXYAgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIgCIIg+jmsrwNwRYj+GxtBEARBEARBEFsnjIm+DsGJ/iOeSMgRBEEQBEEQBFFu9BOh1/diigQdQRAEQRAEQRDlTh8LvL4TVR6C7vob7HEtW9YPRChBEARBEARBEFsV06bBJtjm3GBPS9NHAq/3xZKLoEuJubSAOzmZvmkpCTqCIAiCIAiCIPqWEdO7xdxzye2U4HMVeb0s8HpPNDkIOicxly3kdhhDwo4gCIIgCIIgiL6ldqNVwI2YDuFL5PWSwOsd0ZQl6iyCLkvMpYRc88alDNOnp8u0160kgUcQBEEQBEEQRK9SNXpyRpgtXYrqMdMFYBV6KZHnKvB6Qdz1vFhyE3XTwVKCLi3mqpN/2+tWMkyejGjD9yTmCIIgCIIgCILoF4RHThBYuTIt9qqbYRF5I6ZDTFvaN+KuZ4WTg6gzz9KZBV22mBtRIbFos5QsPxqIt3ASeQRBEARBEARB9CrBIYZAXfJ9uFoXmzp1AVhFnlngmWfvelPc9ZxYMok6t1m6lKCLDlIsYi4eToq4ISHO4m0k6AiCIAiCIAiC6FuCgwzREjMEAASjhrCIvDZVpAReztm7HhJ3PSOaPETdDmPAmjcuZe01gfQM3YgKiUVDEou3cJYSc4kgY1pXUtRVBBiJO4IgCIIgCIIg+oTOhBAAIEcMEYgLkRJ5wSGGCMeSAi89g9eUENVjpovU7F1vibvSC6YsUZe99NI8S5cSdO1rZT44lBFzFQHGtABjahdYxCTqtBgJPIIgCIIgCIIgegc5JNICrCshhBKBkBNCdCaESIm81pghqsZpRlrgZc3euS7NLLG4K61QyjVTVw3WXgkWbfieVSUCPB7mLJyQeUrQBXXOVSUp5jSZMS0GFlYY0+LdcVaUNFqCIAiCIAiCIAh3OpN/5CBEVBVCDkHImhBdCSEUFSIuGUZK4EUDmhGMGqI9kDDCIyeIqg5YxF1Pz9zJpXLk9Jw6L1HXrsp8sMRZly7xYDvnhgLGwDnnYHqCccNgLBwA0+OMGQpYBICmR2nGjiAIgiAIgiCIXkFWwqILgJ6ACAeFiCcgdE0IzoXBJAjOwaR2Lrokw4gkgFbVEFUA2hu+NzByAgBgBwC1SwFMB1LiLo0QrFTirnRCKXsJppuoGxrg4ZjM2+MSD2oSj2qMRwKMxTTGFYNxOcS4LjEm6eCGzJikx7iuMhYKhWCoMRJ2BEEQBEEQBEH0ClwJiVgsBkkRQpdCBteE0CUYki6EFhOGyoURkoXRlRAiLAsjLutGVVA3oiHNaN/iPnPXE7N2pRFKDtfVbZrmT9QFIpwrOuNxnXHGmCQHGZd0cMmIc10KMUmPc11KXlun8F56oDpBEARBEARBEFs9qpEUYJIuhC4FDUmPCZ0HDV2CocWFIYTQg5IwVEkYiS7D8CXulkH0xPV2JRV22dfVjcBS3l4TYNFBCqtKBHi4OiPqGOdSTGNcCTPOurgkBcEZY5IUYByxuMQVxg0JTNUZVyQwQ6MbpxAEQRAEQRAE0btwWQhVh1AkYXAdwlCFgVBQ1xNJYafHYYiIoavR5OydMAw9Le6aNaM9kDDCbaqoakqITZhuOF5vVwJhV/w1dlnX1pmXYK6NZURduypzzUnUgUusgkmyGpe5zDh0JsUVLkmCcS2hci6DJxKMCQ6mFB0sQRAEQRAEQRCEP1QALAHBZSESCRgyVwxdEUZQT3AuCd1QBTcqghoEhxI2EIsCIZkjqAHtAKIqUAWgfRAMANghBOZ4vV0JrrUrfhbMNFvntASzqmMdb4kpPJyQOZNkKaoxzjmXlDDjRoLLEcYkhJmkqwkZYBJjTAJUSZMZZwhImqFyBiYJrrFS3uuFIAiCIAiCIAjCGw3MkIWA0GWuGAIJXdaEASi6EEIHhC4pAQ1RoXcJofOAoalRYRiGoYdlYQhd06MBzRgSUo32ym0NzyWZRQq74pRS9p0wTwawNPk29aw6eWiAhdtk3qVLnIvkNXWMJWfqIoxJupyQoTLJ4EwWuiZDMElwLguDyQFJ45LEJV1oXGKcSYzTckyCIAiCIAiCIHoFXXChc11ITDYATU/o3FAhNGZoGiA4k2QGNQHIgkW0AOLgQgkbEIKLaJcBw5BEJAFEhxgi2vA9Q5uK6tDkpIAzaScARc/alWwKbNkysE3IzNZFO5MPIN+0VubhwYwF2zlXQowxnXE9kVx+iTCToDJJ4Uw2JCYbgsmqwgMKIAnGZG7oss4ZBzjnAlxjBi9VvARBEARBEARBEF5Ighk6Y4ZghiEZwlBkSWMCXAWTFNVIcImBA1ANAGEmmA6BTg45YAg5wITayXkiYojoWpmPGKGLTQCaK8DSj0BYBgAoyV0xCxd22XfCNGW1161kGKQgGpLY4BBnXV2cGQqYrjHOOePBILisxmXd4LLRLeo0Q1M0zgOS0GWJK4pq6LLOuaIIpggZMuOMAzrN2BEEQRAEQRAE0StwSCJgCINp0FQuVGEYqswlSTdUNcElJhsakyU5eQGdmkBAN6AFAyKuMW4YTBiKEEYXZ4NDgkVDEkOnLtrrVrL0rB2SWiq9HLOIWbvSXbTWPZXYXA2GyskY0bGOtbRwJgWTs3UMnDMwbkjJ6+i4zLhuMEnommwIJmucBwISUzhXFN3Q5QDjYSgsAENXIDOZcyFB4zRjRxAEQRAEQRBEr8Blw9AN6IDQFC6pSIiEJvSoIilMYoIldA6uaUIYAmCy4AozmM4kxiAUgwlhcCF0iETEEHoLZyMqJNY+coJo7gDDRgjbcswiKImwsyzDBBBt+J7JiQAbUs1Zc3Nyto5zsHCAcUNmXJKSd79kjEkQTFKV5Ewd54oCXQ9wiYd5gAU5WFDncsDgIiAkKFwGCTuCIAiCIAiCIHoFIZghAJXLLCEBCSMEiSc4h65HuSRBEppQJUmwuCEYYwbADCnADFkC5xLj0YQwDA5mdHFWXc1ZtFli0c7vWVXFBLHDmO47ZJZoOWbRws5tGWY8zBlv46wiwBjjjOkJxnWJMVkHhxpPPtIAqiQ4lxVAkrpn6rjEw5wbYcPgYU1GSFFYWBIizGRJBodUbLwEQRAEQRAEQRC+MKBLTNcEY9GEKqJcEzLnBjfAYRi6EeCK0IVhqJzJgGrEIRtKLG5IPGBoEmOKwbgUYIYwGIu3cRYPcwY9qZlcl2MWSGHCzuVumM0blzLsNT25DDMGJIKMSZwxBsYMg7GgDi6JOOcK55JgXJMZFwaTBWOy2r38kgdY0DB4mCksIsusiisswsHD4ExhwqDnHRAEQRAEQRAE0SsImWvgXDXAgjIQEAxcqByyzAwjxo2EoQvGuS44DI0zTdYY5wrjUONciACPy8wQMmMCjOkGYxBAejnmwqUMmG5fjlngdXalFUrTp9uXYfLUMkwwQ2ZMN0IMUoJpCZUzBKWApHHefaMUKCzAwYKajJAssypJFlWc8woGVICJkOCcnlFOEARBEARBEESvwIRQwVmMgymQDUkHgy5gyAbTjAB0pjJVMnSdSVzTRUDSjLjOAxLTjRAzuGBBCBaNgRkGmGFkLcecPl2U6vo6oETCbtPSzPV1KeJtyWfORQKMMcaYHmdMZjEuGZyrnHMug6uGmnxOHWdcEUyBoSs6lwOKwsJcYRHOeQVjYjAkVnn9DPmgbSJ8CIPBDMMoRdhEv6f0N0Ht9duqFl1haSIu2EtBBXuml3N69VVtzx4Bnt5dM3v/Zr/M30afwixv+ktcIn0FREnuS10yRK63vYhLrR7B9HycPmrIYdJzMRbgucBgSteGIj318oHZM9X1r08AomfgXIIBZqzr0FtuWqa/z3Qhc0kCmNAZkNDjSMDQVUVwReUswQSTNEPligyu6owrepxDGFyLB1k4wJgQjHXEMhopReo6u2n94Ro7R0YD2ARUBBgDAC0OZihgTGUMAcYUCSyRYIzJTNKFxgHOhQwZMpMNLgKSEGEOHmZABSRWedeuypGJlk2hhhYVhqH3SMhED5Dc/cUNyRgrsDyz/MlK7cHy3gXs5XPV49cfc7VJJvlpiENfuwz6vbVALjvXXsht4zHIz5UPAIwVlgew1P8F5DOnPz7znferrYdtebmOG698f8dBrn3rZ9/nEm9+xV0yu0jxJ0SOb9Rcos4r354hfOe7KzWRM9+xgLuFsL5xznOJzv7GV346RTjn+ckHACEKy0vtN4/SHvnC6Y+njd3OfR+52uU6Dlztctm4eHJJcLfzbKGfBJ/m/sbAxZa3FfU8nnzGUoQPondRFIVXyXLNXbsOP+LyReobTBMah1CFMOI6Z1EmszgA2dDAITTOIEmGxlggAKYbjOkJxnQZTMTBpEBSGwkdSa20pfTxFn2XyWXLMt+27XUrGQDEW7jtGzYCIBQKAQAMjTHBwQTXmMQYUwQ444xLHJIkQUneKIUrYAhdP0M6KNGyKRSPxfpc1AkhYBhGji8JgnCn1EdOwf7y/1G9oNrK6UzJOfiDV3u8Roa90Au2MZ/3gN57wO8w/Ms1+HMYKOXKtyUL4ZifyRKONpnioriXzWu35+56hcjEYzcbSKKuJ/H64PGURe5lkevc7V8UFqnnJ08pK+o/31FEv6cnx8T9ybeqqohFo1BbNod/N50fBIYQOFeYLMmSBEXikBhnXBHgEmNMcI0JDmZoyV8bQ6EQIg5+U1oppZ0Aq6YqlB6/GYkWY4xVAZoeZbIqMUXhTBOAAiAOGRLjTGNG8uHjWnKJJjgkJgxZcK5sE5GGNLSoNr+fvLUEjfUtAICW1iYsXf41pmw/BRs2r8dl112I5qZmPHDrI9h27HZYu/477Dx9N1RVDQYADBs1BD84bIav+A3DQCKRQDwehxIIIhQKIRqLQU3EEQwGEQgEwOnxes4IASSvES3qSC22fO+SFa3f4F3tCmh9wR1WYMG8i3kUSGfZbQQAlvnHw6u7fyFEjpk5D3y009OkO9OlZS75pi3Ht1753seigLDOzVnybbm2/OS/LDvJsn/SSbZ8pHMsW+YBftYsnVUbCt+zy97kEk4e5dyLuvp1tMsl2Fw3e0rUeQl364Zdr3sIdxd8Da2KGNuV4gcbT8npGVuegRfczt5UcV7ivJDi5SP9io00cz6UT5uz6ckxcX/3nVATGDdMHiKYoTDDkMGZxBi4oTFuQGc6Z1yGxCAMKMlHlUPhYIYaY5qkMwSC0NoZkwIFNcE3/f8uk4bOnGbq6tY1wdANxONRtKiN+M3Nl2Hhvz9Dh2jF5MmT0N7eDhYROOj4H6C6+gj89YGnMAnTICsB1K1r8lW1qqpoaW3Ftttui6FDh4GZRIoQAo2bN2P9+vUYMmQwFIXu61IO+NcgzqPw0ovMXCLFb0auWmzDdL8FHevzDiP/QiXr1yIdeQs/AQgG4brk0ivfS7zlyu9ZcQeYFl/axJ0lN0upWW3S/6bEmWkdpaPAAzxFXtJF1gDIJPa8x4elHDi5iS+PADzt7YLAQSp5bLrb5F5q52DVa6LORf4K5zw/+UAu4eaDEh0qhek7T0lZQEVeIZRW/BUQeWmq9/NrgVd5omB6ckxcDr4NXYcw9H4/z9DvhZ2ua47pDAxdXZ1ob29D9bgh2HHqjhgzdgyam5uxYsUKcM5xw83XYeTIkQAAHhRYv3EdRo3YBpWVTpOiVuLxOLY0NWPGjBmQFQXxRML6KwtjGFxdjUhFJZYs+QrDhg5FMBgsSZsJE92zfgUUhMsIuhfINZjOV7T5kVEFKFBHGz8zNX5Em6PsMG24SpvcNpl/nMPwyAdyibf+Je4Acy/ClpF565Wfmt0yiTfTZjLJJOE8xJtN4KXtHGoyD8DSVVtbbL2Rs3CIK6sXTYN8X6e1x27MhbeJu4hzTrKLOeumH3/9TNBZNvqnqCvXa+tcMxyL+DoAfdj4kX75qTx3UZajYE+SpzC0l986pWJPjonLyXdSk/RvbdfvhZ0b7Z3taNU2YYc9J0HTVDQ2NmLBggV44om/45sltQCTscdes3DO2Wdh1912xeixI7HdxIn4+N2FmChP9/St6zrqG+oxbeoMCAHEolFXW1lWMHnKDli29Gtsu822kCR6hrqFfrgc078v5xF46bWih0jxae4o7mzFHGbt/Io7P7V5VO+3hQNK3MHpN4nUYI+l/9hbl8nPZ/Yuad4DAi9tYx74uYm87KEmMydnciwh2I9Ja3uz43DK8Tjw8qLIgWt2qh8h5+Iol5hLbvaAoHOxsbzzJdic8wHzuGqAizrPFPdM1+PEZuNP1OWWbC4W+Z0OnjmF4H5c+qunlNEU6ysTevkJw54cE5er7/5M2Qq7hrp6nHbpsZg5awaEELj22mvx9P+9gBE1o7Hj5FmQg0G0b4njf//3Rpx99im46uoroes6AkEFn7y2xNN3W1sbKiurIMkyYtEuT1s1kYASCCISqUBbWxuqq6tL2UwCKEIcOguz3sFbDbpKGle7AtSlowD0K+6ykl1UnLe4c5Ek3o57VdwBcBVwucUdIFzv/No97OpWbl6zdyYNZytvFoAZGwfxlrWZS+AlN7MEnikIm4TLIfJMyVZsQi8TiKN4s4XkNGMHAFGs/NslOPeWf6Fh2Mn4x9u3YLfcCzHyIodsyGnsOTjPx74gMedgl0vQeag734LOj42HYPM7+C38DpjdtfSWqHO1s9vYN933n2vsfkWdH23hcjz4FVseh1MeQZSYPIWhvVj5ibJS0JNjYi/f0VgM4e6bLpbC95w5N2DE8JG48KIL0zZPPPE4lixZittvv33AjOXL9q4f1UNG4tWX30Q8Hsc777yDxx//OyZPnIFtxm6HUEgBY4ASCWHChEl47K/PY+nSpWhsbMSrr7wBYbiPiHXDwJYtjRg+fARi0Q4kEvGcr1hXJ0aMGIktWxqh0zP27AiXL4TeqdzyJyu1h8vnGqD5K+a3VsdeLviL3v/Az/v72uXL3ttxAYNE53zhkZ+2yzFI9Bwopu6Y6G4A8x0VHSLM/pOHjYAlxfGtsPnI2GT+c3OZbSey/Zj6Vzh5zLZN7ZTOj3D53lOw45TJ2HHKVOx9zEW4/+Mt0ES6SzO2Tq/OrzD3oeXY96+fYcm/bsDO4ez6hXPVlpf3f6l95/yybXqUd6jcIQbH/SRcezbnvrLbmFuedWo57jCHotkV5mOT+QdOJIumdr4zuc7H3DdKcTsXTXF75tv+ONt42tlt7JuuGb5sMkmOiX6schXKLzl3Qh4+cpctRflSkqm69+suFqcxccOmBkSjXdZxcCyKhk0NeY2Jvcbb7777Dg4+8CC88srLBY23nXxfdPEleOutN3HvvfcgkYjjL395FM88/Qwuu/zyATWWL9sZuxZtA0aEarBlyxY8+eSTGDF0DLYdNRlqQkVMjQJQIQwAEBg2dBReeeVVHHnk4RhUOQhNTZtc/Rq6jtbWNgQCCro6Omz5ba2tGDR4sCVNYwzhSAVaW9tg6DokukumKwIFTp6VaElnYbF0W2YVKCgWTx+mLee3XhmmpNyB+pu5c/Dmx8Zml/oyy5p7tCTbg7TbWf2ks0R3itvsXY78pE3St9fsnVd+Uty5zc51ByngYmMeAbLUH5j+mGysM3gZG1PfmAeBFjvXDMvQjmUSrTjM5gEAEw4tZk6DRdPMnh7DlsReuH/R33FwsBmrF9yK837zR+z55i3YPeJcvQW9HQ3aeJwxsxqS3C1CsgrYbrySRYHDw7yduA7EXZPyGUQ7WAvnDZdkn3Z2oeaVb0kV7vm+bYpadtnt21Ww5cq3K7TC7LyFWL8SdXkfQx5HeQFapuSirgiKFWXlJ+WsOI2JH3rgAbS2tuH6638PWZah6zpuv/12xONx3HDDDb7HxG7j7Q8//Ah33HEHrrnuOtx7z93QNQ2HHXYYAP/jbSffI4YPwz+eeRY//+nJ+Pqrr7Bxw0b8/elnUFMzBO2trQNmLF+eUQP49XUX4/KrLsHQoUOxasW3OOTgQzBj5s6YNn0GZs7cCTOmTcPMnZKvPXbfGevX1mPq1KmYc/N1OPXsY139qqoKIQwk4jEk1ITt9ezzzyOWlRdPxBGPx6HrOlTV/mgGAqX5pargmT/7F25WTsE+cpfPXanrl7+fAYKr+9J98dssRbad8Ep2TLDYCsfUHHYOnoWthNVP5h9bftrOxwDS3UYApmeiuQ7+XGfw0pFm/3HIt9tY94I905rjmpHOt84k2V1nkh3+c5yp6m672a+uQdU06Eb3MRZbhD8cuwemT5mCqfv9Dos6DTT/5084c++pmDr9UFz18kZoKV9tn+JXu0/C1Cmn4d02Hc3/uRNn7r0jpk4/BFe9vAEqBETX57jpmN0xbcpk7Ljfdfi8S0fTJ3fiDJOdJgTQ8Smu//HOmDplMqZOOwAXPV6LWHe8XSuewW+P2R1Tp0zBzKNux5KoKaYZh+KqVzZCBSDU7/DU7N0wde+r8GmneYbTur8yu9BtptC9r+297WRn3oO2ZIcNNztb5XYbhyMUluIe+eg+37xm8XLNmKd8uOf6Pt/c861/3FvjZZdVSljfitwZEE6JDq6TSY6Jfqyy7Bwj82fjEptbT+f24V3OX5X+fNiL5VfO2VkJfPQBTmPiq6+5Fh2dnbj+hhvQ3tmBW269FWvXrcOcm/6Q15jYyfe/Pngft99+O+7+87049bSf4+FHHsX99z+A1994vWjfTU1bEFAkHHnU0Vi2dBkO/NHBGDx4ELY0bh5QY/l+L+yS3x3C9lq+rBb19fUAgFAkiIpIBCE5DAlhSDwIWQp2/w1AMIbKqgg6OzuxZs0a1C6vdfSZesVjcaiqBk1VoSYSltflV/wauqZZ0nRNhZqIQ03dbYdezi/DQGrgW5gPAIYo0IfRHUMRdafbYc3zjsXh+IXdzk97hE+7pC2stg51ItvGw84Wo23A6tAWx0FtVpzw9uVs524jXOpJZmSynPO7bdz62vy55Lgv0i7c95n5k82UL2w+rP1itXO2ydiZqxOOdrDYZS8FzD5GrH3iZWvNytg7ir62hbh4jx0wc9a+mP1gM35y65XYVWnGyo3b4/Z/12LJgmsxi9fisTmvYbtbP8Anfz8c39z/GL6JdvsYtBce+vI7rPz2afwo6GKnOfi7IcsuJiCMNnzfOA33fLYCn/z1ACx/eC6+6hAQiW/x5JV3YfNJj2PhsuVY+NQFmAJ7XcujAuhciQVLt8ctz/0es8Km/eHQfi/hazqILfapfZvb1uUYN1VmzXKxy96PHjaOx7JFlXicDw5tchR0DvkZG4fzOdUXDuVtx7dLedMHRm4bTzvY7FLt8PJlbq8t38EuY+ttlzmW3NrksC982OWKzbUNbj4Mf+U8X2kfRl7lhKV8YXVnfORXd397ZY+JE4k4nnjyKXR1duG8c87D+vXr8dQ/ngaEkfeYONv3xo31uPe++zBrp1lYvWI5Jm43AXMfeRSbNzcW7VtNJHD/n/+Ml+bNw9+efAr/+fgj3HbzzXmO5dHvKYulmE79+Lc7XsXq+m/w9PwHcdhhh+KL/9ZiyLTJaNzQjrZoMzSoEFxAQEX9pm9x2llHY9WqVbj6kltRFRyBn/zkaMe6ZEVBMBxGQ/1GVFZW2lT7ujXfIvsLJxAIoK6+HsFwGLKilMN+7zuEKGJJZXcp65+Cy6P7j7/9lVWbbx8OUeYMPOXNq5GmDJM50m9Fd5b7ss1krv3ZYW525qqsdtYA0v1hSbY7TiULS+z2xtjtnDsl9XDr5MpAh07rPm9Tz7Cx5yf/yay2zO6bzFZqSabVjzD9YZY7Ymb6zVSCWRfDCrOluVOylmUKD5vsqEX2Msms9bLmbhdOlZl8WW2dl186Ikw3ajF7HbQXHvrwaRxcBQjDgKFr0NsEwBSEAwIsEADa67Fs7Tp8dO4+eBYA+D5oVDMzDVoiDjXBgJiDXSJVuYJIAOCBoLO/tB2HzAQG7bAPtkk8hXZDQMTW4vOG7XHKsdNQxQUwpAqizSWm4ET8eK9WPPWXhdj76oMwzOGmai5zJNld7Zjone14JPpKsJ3/LrXZs7w/9SA82prOzmXjlS9MforwYT6dXOqwaFSnfIdN1x50LeLuK5PkmFiAnXBL8raxJOQ45vJLzOU+ZzlvH/mNyootby1a3iNCpzFxIhGHqibwxJNPYfbsM/DwI4+iecsmtLe1AvA/Jnbyff4FF8IwdKz5bhUAYN3a7zBhwjhcfsWvsXrl8qJ8v/LKq3jjjX/iH888i2FDa/DU08/g1FNOhiRLOPXUnw6YsXy/n7FzQ9UEbv/ztRg7dizOPvtsfL+mFlJQx+CqCshyAIoig3EDHV2tgBTFEUf8GNOnT8cJZx6ObUdu7+qXc44hQ4ZgydfLIEmybcYuEY/b0jiXsOTrJRgyZEjOJ9cTSH/QFXbSCKc/RZUv4OsizxgcavH1/Vz4QCBTo2OiKcm0/KtoO+GeLOw5li0XX+529iCtWcLRBkgO9DKzCnYyP865Hx25l4hlzbK4VJSZ1XL2kRx4im7bTItsvWP6NdFqZy5hy7T5tM+gChfbzH9OMdirtc9cAYCWiCHevVRGM4x0errrg6MxfdwYHPfn9/DlipX44pO7sFeFw75wtMv0q5GqP4edEAKC84w4Do7BTjXf4tmXvkJTTEXnlmbEAtk+/pT0oYzFkddeCOX1f2Bp1GOm0vYSpgbbe8l2OJv3jX0vZNnaE5yyN4FyAAAgAElEQVT9iiw7Jxd2G9vR6uvcSp077udPriXPlplJl4rcfVgPaI/WWDLtdsJm7m5nr8h+HjtmdCeV9nPaISkL4ZVsy3HcDY6F3fe5h/uc5RxrcHeWZwz5lbcWzb9sf8NtTNzStAXr1n6HF158CU2bG9DUuDnvMbGT79UrvsG3K2stY+w1361G7bKvi/Y9dswY/N+zzyIgc6yqXQY9EcPTzz2H7SZOHFBj+f4fuct5EeJVaGlpQ2dnJwzDwJ1334GFX76Nus3fQY3H0dbagXXrv0NXvA4333o96urq0NHRgfa2NnR2ut+uVZIkDK2pQTASwueLv0AwHEYikXB9BcMRfL5oMSKVEQytqSnrZ1/0Kn0u7uxf2nnV7RBKbh/OZR0iy1mBffjl7MDVxlavSzB+7YR9w3HwIOw5LsVNGw7+bL7s/oTtjUPYOQSaVeA5+PAcQGZqylfkOZsJpEez+Qo9i625lC3T0d5Z8Ln79xZ+DueBw8EiICCUyfjFLT9Dy22HY9aUydjtlHuwPGYevOZhJ/z7S79XJuOsO85Hxf/Nxr47z8Qep9yDb7RsH/dieRRA15e45YSrsGLifhgXTLXJ3Gan3rGKLJvQsgk4N3tTovOec/bvcH5l3GTH7rLbSizmvMSY5zlk9uGcaz1mbdGYj9VMpuP55ZDp6i8rw9mfo4PuZMfEAuyE3crhvDN/QjjbOUafIz6Pnebu3ldZm1XamffxltNHHnU7+8i/bH/Ea0zctKURH3/wLjZvaihoTOzkOx6PO4614/F40b6POOpoMGFg/drvkUgksHHDOkQ723HCCSfm4bv/79fCbjBoWt9z8ingm6aB7TAGbG1sJY8OUlhACknhhMyZJEt6QpJZFZNkPa7IQlK4whVNcAXQAnGZhyKchzQYYUkRlRy8iofYYCnAayQmaoTEhz20qzh5U0OdLYTbfvUmlq39N3g4jh1mjsWf/nwLGhsb8d/PFuGLRV9BkiTstucu2GmnGdB1Hb8691rE1Rjq1zdj9+0PxfUPn+LaPN0wsHHDenz55VeoiEQwffq07iU/KnRDB+cSAgEFciCIr77+GrFYHLNm7YQxY7cp27vo9BmuzwHzVdjpTy/6cF7m5s+H1xI5tyTnChwWOHrY+anXVzA+7ZiPLNcWePpzd+Hac6nbY9ryrdnee5C5xG23y3UksCx/3hXmPq7yOZadlnB62OWf5G3MOAIBBVoiDsP8Pck4glnpjMuQFQWcARAa1LgGg3EEAjK0RCLLTu6206HG1cLsYC3DuJRVvwqRFVMirsIAhxIMQhIqEgkN6Ztl+xv55mnqLLTsGx5CKg9bq1kOO7/+cg58hZ/qAFchZ/Jj0k5u9Zjf5uhdpyL2TPciuTK7k0ol6FysnA8YDzvPFuQq7Eqxgs7ZRzGCrBQ++v/gPx96ckxcbr5HjByFCxbx55huNOqCNekJo8mIiVYDRruusg4ZPNplGLGgZsQAOSEzQzVUQ9WYrmpSUBXtQpcCuiZ0TY8GNCOhx/RwmyrGhSYbtRshRiyDeO7ZzNcHmNs1Du6UxTV2TkhMwqQRP0Rr2xZMnDgEmqahvr4BksRw8aXnIx6P49NPP0NbWxtqamowetsatC0bjW3GR1AVqfD2zTlGjRoNVdOxcsUKvPfe+9huu4kYMWI4NFVHQJawbv1GfLtmDWqqqzFt+nSMGjWaRF0hCJG+5g4o4po5AN3Pgs43gIwP0y3W/fkRVsu8fDiURa4kU0NNGVY74ZaRGiZZBZ5jvaI7KVd8HnZpW/OAIUugpH1aC1m2bPXaW2t3YQvC8l2drsFB5CV/6BWmbPtezB64MhexaB64Oou87IGri9Bzmt12FHvC4Y+bgLMPPoWjoS01OxB7kqWAsCcLAEJHIqZnlwKEjnjMyErSkNA1q1+hIx63lheGikQ8605mBdlZywhDQyKmWe3NMaXbqEONdcHpXmqu38x5ZriMxb0c5S34rGY+BuZ5DIT9iDlfY+IeEHPOts4CzNPOVbPlFnPJ5N4UdJmE0go610Tn3AJFXSHHtqsfn+dT7jgGlqgDenZMXK6++zNlK+zUhAEuOAZXDsOrT3+EzlgHvvl6FerXNuPxF3bC5s2b8cAdT2P7KWMQqlSw5NN6TK6ZAJmFkIjmfvCgoigYt+22qKyoxMa6DWiob8C6dWuhahoUWUZlVRWmTt0RY0aPRU1NNWS5bLuy70l9EBZ0UxXTQF/YNE9+PkyF/cfhqJ58+nBRcyyXlbOCzGy6x5TZLL3Ay21rrTmdJVw33LQfrF+lLmLQuWBBIg9wn4ETplGB22xe9oDWn9BL+nE2LUzsmSK1hWmTaDlFn2OOrazDTxN23JWj1ayPxky+q/Vl6FOE2RIKGSj7EFvpNz4H0/ZRsIdtbiHnt2q/z6rLeHWuy+Otc4pfW1e73ILOVab2qaCzbrj2fgGizP3w9H+C230UKOhK5mPgCTozPTkmLlff/ZWybcGEHYZh3coWAMC0UQdi+ZuNYGI7VLMRuPZ//ggNcWitg5D4fhyaom2YNHR3VFRUAWAYv0O1rzpkWcbw4cMwZMhgjB83AbFYNH0whEJhVFREoCiKjyVXhC9Ms3elmHkrygfyFYlZNeblw1uIOVtlKUjH4qUVeMnkLDsXWz8CzxahhyDz1mo9IfIsb5ImZpEH5DGb5+0rbeEi9uymeYg9UxD+BJ/JMqsO5mzsXNayKexJ2fhTfAUMu3qKAgagnol5DIZtCT5FVvpNHrGXVMRlfJVsVs7+x9nG/a1zSgFizr5ZoKArSviVq6DzV97dB4m63qAnx8Tl6rs/UrbC7tTLd+2VehhjCAQCCAQCAIb0Sp1bNanBaUHX3lnVVFGzdwWJREdVlEcsPS3wvOyy5tGKEm5+xaB58OAyiwf0icizlPYzmwcUJfSStlkCyPVLxlnsuYSQp+AzWfoRb17iz7FSpySPsyLPKbpCv5bzHpZ5FihigOiYkJ+/wgVcfnX1vpDr9ucp5LJyykXM5WNbaqFWJoLO2Q8Jut6mJ8fE5eq7v1G2wo4Y4BR97R1KI/AK8tGXAs9eSU4haNsscplmQba9K/IgzCGKrL51EnqmqEoo9KxmuWf1kvbOM3tZIdh8+rp2z1qRg5esEjnHsU4zeNk4PhXPzaEnfT3MKuVgOKebPAeVIvsE8F3Or20eIq7bsHeFnENqL4m5ZLKvXznysPU/O+ed5dkaX75zFhlogg7YKkUdUR6UgbATdAJtrRR17R2AVCmTqCp2or0woWkqlDVIKcXEv9VXViWuWsq7R1NDfpsYs4nLTO252uKi+/yXYfD8LrYJtxyVpO27/dr6z8t/dt842lo7zHX+TcDWOK/Q3brAuYzpHPLoO2e9lelEv5/AzrN/3sdQPv7LEh8D4rzb7/ZogQLLeZbNp4xvW5Ez2PRni6/OMYkcT3uT0MndWdYtv4rHVQ96izXPn1lsVfix8xDOfkSijzK+TfMsn7tInj9q2IoUIwwH9KcVMQAoA2FHbPWUYnlmt8DLf/bOpApNBf0JsywrB2Xj7Sd3ebu13yWVWbYuHWNbUukaQ5alo132r8fd+9Nmm/3F2S0uTMnMwy5dh8Xeo/Ms48e0woPr0Za2N1fgIG2zRhMi7c5B7GUNFjKi0+qTOdha/TsfSSzXLerdVHD2LKQXzLYQ0xyZ66Zv/0VYF47/QVzRw71c+6gnfeRbLi/73CIuaeXPzmTtEpx7NN5hOwhufwrFRczlFl8lEXMWWw+PLiopzy7xLOFPu/WyoCuivLUoCTqiPCgbYTd+4qS+DoEgeoRvvv6yr0MgCIIgCIIgXIhUeD8qrb9Q3g9rIIgBAv0WSBAEQRAEQRRDWQg7GvQSAxrGYL6eiSAIgiAIgug/CJSHHikLYUcQAxmW9ZcgCIIgCIIg8qXfC7tyUMcEUQxCiPSLIAiCIAiC6IeUwTCt3ws7ghjosO7HMNBKTIIgCIIgCKJQSNgRRJ/DumfrSNkRBEEQBEEQhVE2jzvwYs23qyzbTc3NWL1qNQwhwCUJjKZCiB5ACAFD1yExju0nT8LQmmpL/rYTJvr3VergCIIgCILoVcrllviEN12dnX0dQsEMCGFnvjRpc+NmrFyxEjtMnYpBgwb3XVDEVkNbWyuWLVuGKVMmY/jwEYXNu9GPDwRBEARR1tCl8kRf0/+FnUBeZ8raNWsxY6dZ2G7iRITD4Z6LiyC6iUajUJQAVq2oxfBhwyEKEWn0bUAQBEEQBNE/EeXxwIP+L+zyRFZkjBs/HlVVVX0dCrGVUFVVhXHjx+P771YnEwoRaf3/s4IgCIIgCILoxwy4m6dURCoQiUT6OgyizFi7YhE+fOFuCGEUVD4SiaAiUuDaesYgQA8oJwiCIAiCIApnwAk7giiE77/5BKPHTwZjvX9KMAAQomzviXn0Mcfi6GOOdd0u1h9BEARBEASRmwG3FLMv+Oqrr/DWW2+Bc44rrrjCknf77bfjqquu6qPICD+0t2xGrKUOw/fuOzFRzErMlAh6df4rRcdRSl89RXaMZhEYCocxYfw4/PKX52HK5Cm2fDP9uY0EQRAEQRD5MkBm7ETWy8rtt9/eo7UvWLAAxx13HC699FJomob77rsPmqYBSN5Yo5RxFOujp/ui3Ih1dWLxv99EpKoGg4aNLcqXEEb3Us4CLrAt1+m6fsSr81/B1b+5CsuX1+Kuu+9xzDe/CIIgCKK0ZI9HnV+JeAwN9euxaVOd7zL94bVpUx02NWyApql9HkvPvsqXspixK7aLzeKqJ+jo6MCkSZPSz8u75JJLeiyOYn30dF+UE4Zh4KvP3sPmlZ+hYsTkkj3vUOR58xQBgAlRso+S7Bmq6upqnHfeOdh/v/0BAP/5zyd4/PHHUVdfD13XASRFT/ZyylS6eTscDmO77Sbg3HPPSc+I5SIajeIvf/0bFi5ciEQ8jhkzZ+KiC87H0GHDAAANmzbh9tv+iBUrV+Tdd9nMmjULALCpvsF3Gbf+IAiCIIhSk4jH0dzciFGjt8HG9Wv6Opy80NUERo4ai8bGBtQMHQFZLgsZURLKRe5tNXtkzpw5AIDrr78eDz30EE4++WQMHToUmzZtwrx583D++efjvvvuQ2trK2pqanD88cdj9OjRAID169dj3rx5iMfjOPbYYzFlin1Ae+ONN6b9z5kzB9dff33OOLx8z507F42NjaioqMBll12Wt4/58+djzJgx2G233bB48WJs2LABRx99tGP5rZFYVzv+8+pcJDo2o70zjkhzG4SmgXV/SMXq69G+bh2G77FHj8fCGCAES/4tod9LLr4I228/CZdfcQUeffQvaWF33/33o6OjAzdcfz122WXntL1Z3GULm9T2+g0bcMEFF+Luu+/FA/ff5yuORx59FG+9tQC//93vUF1djcuvuALxeAx/uOkmAMDcuY+gdkUtrrrqShi6wB133llwm7/88ksAwKydZ9nysgVvqk1u/UEQBEEQpSQej6O5aTNGj94GoVC47J50JARQUZm86/zmzfUYOmwEZFnp46gIM1uNsDOLmJ122glfffUVDjroIHz55ZfYeefkYG7Lli249tprsWzZMrz22ms499xzAQCvvfYajj76aIRCIcybN89R2PkVSdl2br7r6upw9dVXO85g+PFx5JFH4sknn4SmaVi+fDlOP/30vGMdyHzw8sMIig6oBlClqJBaN+Kbm2/Cjtf8DvHNm/HtrX/A4JpqbNi4AWOPO75HY2FI3hWTlXg95kE/+hGUbqHa1NScTpdlGbqu47777sM+++6D4445Jj175sSXX36Jxx5/HOvWrUcsFgOQ/DHBL598shAAcGO3kAOApUuXpd8vWbIEALDXXj8o7FER3aSE2/Dhw3DxRRfZ8t1m4fLtD4IgCILIF4uoCyfv3s4lCRscZu1kJYAhQ6oRDIZy+o1Go+CMIRiy28ZjMRhC5PVc565oF9pbmqHpmi1PkpJjiorKKggIbN7cgGF5iLtSx0rY2WqEnZmZM2fib3/7Gw444AAsXboU559/fjpPlmVMmzYN8+fPT6c1NjbiiSeeAABIklTSWLx8BwKBgn1IkoTDDjsMjzzyCM4777ySx13O1H79KTo2fw8jEgbicRiGBiMWR1CN4c1rfoNQSzO2HzoCQjPQ+OknPS7shBDpVykJuhw/1//+d/jH/z2Nzz77DC++OA9ffPEF7r3Hfk1aij/dfQ+2NDbirjvvxPgJ43HCiSfBMPw/FiIlWP/+9ycxeNDg/BqRB/NefAGPPfY4Xn7lFdx1993pGcFc5NsfBEEQBJEP8XgcTVs2Y/SYjKgDgO0mTna0b29vw5bGzRg5anRO38uWLUVbWzv22msvy+O+urq6sHDhQgwaVIXddtvdd6ytzVswasy2iIS9Hx1WWTkIEMmZu2HDR/oSd6WO1cwHj7XisQfnYf3gZx3zW9paceEFv8QvzppdkP9yYWAIO+HyvptgMIimpiaEQiFEIhFUVVWhpqYG7733HsaMGWP5daClpQX19fWorq5Opw0bNgwHHHAAJk+ejK6urrxC45yjqakJNTU1tjgK8e3XRyKRwBtvvIGjjjoKb7zxBs4880woiuJYfmsiEY/io1f+gmA4hFh7AuhsApc49MZmdDa1Y0RQRkhW0N7Rig7OsNuteSwLLPia25T06Z07qEycOBHXXXsNVq9ejcv+53K0trSm8yKRMLq6otiyZQuGDh0KANBUFQAgyTIWvP123vX98Id74Z9vvoUXnn8Bp59+uu0HixkzZmDhwoVYuPATGHrh4lZRFJx55hl47/338cUXX2Lx4i98La306g+CIAiC8I3DV5iqJtDUuAmjxoxFKBTy9bzcyspK1G9c72tMsedeP8Rbb/4TixZ9jr322AtKIAA1kcCiRZ/DMAzsudcPoXd/j/tB13SEfcZZUVkJgZHYvKkBI0aMSs/o9VasZvafPRhravfHu580QB5eZ8lbs3kVDj7oIPxi9uzyuViuQMpA2Imcy7Ny6DrsvffeeOihh1BdXY0LL7wQQPImC/PmzcOpp55qsX3yySehqiqOO+64dNqxxx6L+fPn44UXXkB1dTUucljm5caee+6JuXPn4te//rVjHPn69uvjtddew+67745Zs2ZBkiS89tprOP744x3Lb0188OIDUNCFSllCY1MrurpUaGDYa9cDseXpvyPY0Im4IqN1eCUOfu41yHksCShC12VevUBqyaIkSdh23LY49+yz03k/++nP8NwLz2P2Wb8AkFy+eNGFF+DhuXNxada1nn4595xzEAiG8MGHH+Oll19Jz/allkaed965aGpuwh//eGfOWUuj++YmbjPQwWAQxx9/LJ544ik888yzFmHndo2dV38QBEEQhF+cvsF0I3lzNMY5jDxW5vgdU0iShIMOORRvv/lPLPpiMXbZZVcs/mIxurqiOOTHh0OSpPQPtH7rzSdOzjkMQ8AQIuet9ksdazan3zwRxjXH491Pnkdg+GYASVG36w9m4eab/1CcphOiLK6JLGwoKUS63MmngG+aBrbDGLC1sZU8OkhhASkkhRMyZ5Is6QlJZlVMkvW4IgtJ4QpXNMEVQAvEZR6KcB7SYIQlRVRy8CoeYoOlAK+RmKgREh/24C76yQ11G7HdJPc78H23amX6/apVq3DAjw72XMaoaRrWrFmD+fPn47LLLkvfDdHrpidE+bPk45fxyT+fxKjhNWhp6UQ0HsOgsIKYwVD9aT0mfrcBHQEZkc4EWCSAlsMOxz433w7u465PiUQC/3r3HUyaNCmdtt0k5yUW2axYtgRdXZ2IRCrSd2Uk7GiahgULFuD+Bx7EjOkzcOutN/d1SARBEASRJuSyfDHa1YnmliaMGbsNAkruy2yi0Sg2NdRj9JhtfNUbjkTQuGULPv7wg3TaPvvtj2FDhyKa50qzDevWYOy4cb7jrK+rw7Dhw31dD1jqWN147JqlePeT59Ee+gbDx1Vj7kMP5lU+FrXHEQqHMWLUGFz0hfQc041GXbAmPWE0GTHRasBo11XWIYNHuwwjFtSMGCAnZGaohmqoGtNVTQqqol3oUkDXhK7p0YBmJPSYHm5TxbjQZKN2I8SIZRDPPYvMVCljeUvJMpixy59cv/rfe++9kCQJJ5xwQslucU/0b777+iOs/fwlcMHQ2d6BqrAMQxOIVAShtScwvbMdsVE1+O+UHRBoaMRPlq5Ezdvv4PNhd2KPq36T03/R18eVwa9Afc0JJ56EwYMHY//99sfZZw/sNfIEQRDEwCEcqYAAsGH9OowZuw0UJXk92ro1a6FqCZs95xzVNf5v4hXt6sKokSMxddp0fLNsKaZOm45RI0eiva0t71gHDanG+jVrYDgMTBQ5gG3HjwMAxGJRNNTVY9jwEb5FXaljdePMm6aj5YIYtmACbrj/9NwFBhADUtglEnEEg0HX/CuuuMIxnWbrBiZ1a1Zi9eevY8V39ZgxaRvEOmLoSMQxelgVYrqBmnAAXWNGYOnIbXDqFb9BZ0sH/nP9DZje0oLQ6NwXLgPJ59IUTvKumPSUcm9eefmlvg6BIAiCIAoiEqkAAGxcvx5jxo5NXl+mxjFu/MSS+G9va8OsWTtj8pQpiIQjaNrSWJCfqqpBqKoa5Ji3ds23AIBYaqZuxMi8RF2pY3WDS8ClD+0GYFdwaesaWw0QYZf5VSEUDKJ5S6PrQUlsfVQNGgTGOGaOHwuuGwiHFXDBUBGSYMSA6rETsaVyRxx27MmoGjYGNWNDGHTnXWhYtAgzTzjBVx1NWxoRCgZR6NRbqR91QBAEQRBEb+M9BkjdtG7jhqS4S96gpHRLdpq2bEYoFEbTls0l82lGCAOxaBfq6uowfMTIosY9PR0rT1+Kv3UtiRogwi5DdU0NGjdvhizLGDpsBALBIC233MoJV1ZjxoE/w4bazxBv2YxErAk81oL2zg5wHkR4+ETsdNSxCIarwHjy0t8hEyZgyIQJnn6FEEjE49iyeRO2NG5GdU1NYQGy7qWcdJgSBEEQxIAmEokAYhjWrl0DnuMukoUQi0VL7jMFl2TUbdiA4aNGI1TATF02PRnr1sqAE3YVFRHIsoRNDQ1oaW7OXYDYKhAQCI7cCUpNHGqsA7HORqjNm1EViaBD1ODbb78v2HcikUAkEvFc/usdnLD+JQiCIAhiwBKpiGB8RWmWYPYm2247vq9DIHLQ74Wdn9u9et0xkyD6O4wlhSdNLBMEQRAEQfQ/yuWn91yPnCAIosfh3ZN1dDoSBEEQBEEQhUEjSYLoYwRE930xy+X3IIIgCIIgCKK/QcKOIAiCIAiCIAiizOn319glL7KjmQxi4MKQPMTpEjuCIAiCKGNouDpwEX7u+tH39H9h54PvVq5AU3Mzli/7Bp3Rzr4OhyhjKsIV2HHaVNRUVxfta7vJ/m7qw8C6hR1JO4IgCIIoV+j2/URfMyCE3abGzVi2dCmGDx+O0WNGQ9d0CBh9HRZRRjBwSLKErmgXvvrqS0ybPh3Dhw3vlboFA8BE8i9BEARBEARBFMCAEHbr1q7DuHHjcfBhP85pO3/eCzjmJyf2QlREufLOW29i3dp1nsJOCIGWlhYMGTIErBTPKej/s/sEQRAEQRBEP2ZA3DxFViQMHz6sr8MgBgjDhw+DrEjIPEXR/lqy9Gv8+98fY8nSrz3sCIIgCIIgCKJ3GBDCriJcgWAw2NdhEAOEYDCIinCFa/6a79dg7Zq1AIC1a9ZizfdrSlArCUGCIAiCIAiicMpA2NGAl+g/NDQ0YOmypRg1ajTOPu98jBo1GkuXLUVDQ0PBPpnovismHeoEQRAEQRBEgQyIa+zyga6vIwqluaUZixcvxqDBg3HIYT9GY0MdDjnsx5j/yktYvHgx9vrBXqgeUsDdNHnymj1wZB7twVj6vRACYKz7sQgp9ceQ+tFDCGSeldB9O16LlWlDCJEpmUrPyk/7YVlv0/ks6ceUn+1IdBdiEOk7BCcfxG7KtzbDGnWq7d3/ptvOnPJNbWcAhMl/JtMUs1N+pm1mr9auNdDdokyagay+Z+l2sExSVr7pxk4C1n7Prj/VpGQHmvJN+97SE5m+N3dOMmaWaaflwEj1vfUYs+4iU0Oy9o25IamyWdV3N4Sljz+CIAYWAkheb959rqcwfxYkr0dPfZawdL6lfPdnVaZMpmzm+8D0KcIYIJC+1l3Y8mHKN3/OmsNkJkOk67dePp8pz7rrtFbDkf6kTMdkrjEdSLrBjJvano6JmdLs9btd05/pemYvyVj3L8jWRjFz4e7vmEw/M3u+OdXUnam+TbeDpdrOcva9yMq39b1g6UCZtUPTf9NHlSnfbsqsfZ95m3GVarsw9bNpLFYulIWwK68uJQYqq1asQiAQwBFHHoW2libouo62liYcceRReHnei1i1YhX22HOPAjwzMNb98WL6MEl9sLDUtq1M5r35szZVPrNtzWSm/G5PWYUzH84WC8uXYPaXon0748JlO51mC96lHengbfmmLIv/7C9BliPf2q9w7HdL19j63v92uiVZg4fswUR239sHG25979LPLtvWfrVEbN+2Vmrv1+z8rG2CIAYoQljHbNnbqR/7TPnJ1Ex++ncs03bGxpJp+tHLz7bbD2KptExFtqiEdTv1Y6V525Lic9v61vqjouXHt+z6gawfKIVNf2TnZ3WN/Uc6Sz875Fv+2JxlNcG+bW2Sy77I7nvHfs5Oy+7XLIvsY8zW9x79bmlheeiRshB2peDDDz9AW2sbjjr66L4Opc/ZZaeZWPzV130dRtlx0MGHIBAKor2lBbquAwB0XUesqwsn/fRnSMTi6GhvLci3yH7WQc4vR4IgCIIgCILIUAbX2KEk06DxWByXX3Ypbrv1FhhG7z/jTtd13HXnnfjhnntgx8mTcN7ZZ/d6DCmam5v7rO5yJhbtQltzE1Q1YUlX1QTampsQi3YV5lhk/SUIgiAIgiD6DyJ7lrJ/MjBm7HzMj6eCjaEAACAASURBVB5y6KF4+tnncN6552DVylW4+957UVHhfufDUvPoI3Px8ccf4ennnsfQoTWoXV7ba3UTeSLgeExpqupaRFO1gqtLrgUXtFKNIAiCIAiCKJjymLErEbvuthsemjsXC956E488/HCv1v3sM89gzo03Yfz48aisrMJuu++ezlu8aBEO3G9f7LbLznh7wYJ0+iEHHYSpUyZjj113wQvPP5/T/ugjj8C0HaZg3x/+EADwowMPwOSJ2+GHe+6BZ595uhdaSRRMGfwKRBAEQRAEQfRfBsaMnU8Wff45LvjlL3HoYT/Geeefb8mbP++F9PueuHPmhvXrMWnyZMe86669BjffehsGDRqEyy+7DIcceigAYNWqlVix+lt88p//4MorLseJJ53kab/k66+xdHlteqnpM889j+rqaixevAhnz56NU376s5K3a2vCMAyomvusnSIr4Dz/30pSF+uStiMIgiAIgiAKZUAIOz93qnl7wQJcdMH5OOe88/C/V/3GNgDv6ccgjBgxAuvXrcP2kyYBACZsuw2+X7ceALB61Sr8/Gc/BQAoimIpFwgEsM+++2LTpk3pNC/71PLSZ595GnMfehhr165BMBhEe3t7zzRsAJK9EtMwDHyxaBGWfP0VOjo7wVjyboqpGwGm7iVYWVmJGTNnYeasWa63JHYmdYt8WotJEARBEARBFMYAWYqZW9oFQ0Hcdc+9+M1vry5oVqVYjjnuONw45wbU19ejq8t6k42J22+PuY8+ipXffoeP/vOJrawkSXnZA8DNf/gDfnvNNVhWuwIf/vs/ljxZlvHdd98V2aKBjLC8/vvZQixc+AnaO9vBGQPnyUcRMM7AGQfrfrV3dODTTz/BV18sQr5rK+n6OoIgCIIgCKIYBoiwy81+++3fp486uPSy/8H222+Po484ArvsNBPTpk9P5932xz/iz/fcixlTd8QZPz81py8/9pddfgWuu+ZqTNl+In6wx+4YN25cOu/Ms87CMUceaROYhB3DMFBbWwvGGLafuD1+c+11+MNtd+D6m27G72+8Gb+78f/hxltvw5VXX43tJk4EYwy1tbV53XmVdz//kvewuDv9jDPzSt/a6E/94CeWd999D6edfgZmzz6r5wPqB/jpk7fffhun/vw0nH3OOQXVcepppxVUzsxpp51RtI9S+irUR386H7wo1edaT7a30H1QzPHoVran2lloG4s9Z/OhFOd3b1Mu5yHRf9hqhF1fEwwG8fsb5uC/ixejdtVqvP7PN9N5M2fuhPmvv47aVavx1jvvptNTSzWz3/ux/8XZZ+OTz/6Lb9esxfKVq/DBx/9O5/3++huw5JtvEIlESt7OgYamqdA1FQFFwfEnnQxD6KhbvxZ1G0yv9WthGDqOP+FEBAIKdE2D5nEtXjai+/o6UcRjPRZ++imOPuZYLPz0U1eblpaWvNK3NlL9EE8kcOGFF0Htvguqn8HA0cccm34/e/ZZOO74n+CnP/0Zfvvba1C7ojZtY375icWLxx5/DP9z2WWY+8hcxBMJXHDBhYgnEq72udqVnV9qTjv9DBx7/E9wzjnn4l8f/Cvv8n765PEnnsSV//trPHD//YWEiPa2zJJ1P/vdyaa1rbBnWTpRCl+F+vDq72KP91Iea6X6XHOyL0QIlPKYMB+PucjuU7eypfi8L2Ubiz1n8yGf/iw1hYpKv+dhf6GYc7schXd/pN9fY1eCR9gRRFEElABUqKiIRNDa0mwTYEIIRDs7MXhINSRJQjAQyK+C5PMOilqP+fqrr+Poo47Ea6+9gb323LNgPwQQDATw4IMPpLfzHQxsaWrCKy+/BE3TsHDhp7j9tj/iL395FADw6vxXShZnU1Mzdttt1/TS8oceetDTPle7svNLTWtrK15++SUsXbIEt932Rxyw/wElr6O5uRm7zNq5JMvt/ez3vhwo9hcKOd57+lgrFYXs3746JnqzT0vZxlKes/2ZreWzopjjsDz6qP+LkoF9JhFECVFV1XVWTQhRxK/P3WsxC7x5Sn1dHeoa6nHeL3+JjXUbUV9Xl85btHgxZs8+C+f+0noXWLf0bC77n8tx0smn4JxzzgUALK+txXnnn4/TTj/DMjt44UUX4cSTTsZpp52Bu+66G6efcSZOPe00vPHGG2mbpUuX4pxzzsW5556HZcuWAQAu+dWl2LhxIwBg3br1uORXl3rW4+XLKd4Ubv7c+iH7l1A/s2xmUoOUQECBpvl7xqFbLF59cexxx6fjMseX2h9nnDkb776bmdXP1S7ze7c+dvN9/Q1zcObs2Z5tlDiHLMuoqqoEAPzqV5dh/YYNAIA1a9bg0ssuK2mfXHDBhTj+Jydg9i/OxoIFbzu202u/+tnvTjannX4GTjvtDLxj6p9cx/TGjRtx9dXX4MQTT7L0Qz6+3HwAwHPPP48nnnjKs7zfz4VsCjnezX3mduy47b98P9eKaW/2/nU7L7zKAIUdEwBw7i/Px+zZZ2HR4sUW/7nem8nVzvPPvxAnnHgSLr7kV1i1alU63a3/82ljCq9+M5+zKdw+Z5z67MKLL0Z9fT2A5A8Nxx53PDZsTH6u1G2sw8WX/MriO9fnjtN55Pe7MJ8+K+V56FSv2/erV4yA+/GQ3Qdu+9RPG90+q7L7yM/3CmGl38/YlZr5817o8TtgEgMTXTcPWOwizJqfH8U87OD1f/4Thx9+OCTOceThh+P1N97A2WefDQB45NFHceGFF2DC+PGWLwm39GxWr16N5599Bnq3oH3ggQfxq4svRkVFBe7405/Ss4Pr1q3Hiy88j+XLa/H/br4ZDz/0INatX49bb70NRxxxBADgoYfm4oILLgAAPDz3Edxz913Yf//98P77/8LPf34q3nvvfRxwwP6e9aRw8uUUbwo3f377Id+ZttQX0/Dhw3Dl/15pS3fy5xaLV1+4xbVu3XrMe/EFfLXka9xz9z340Y9+lHe73PrYybduGFi0aBEee+xvrv7M7b/yymSfHHTQgXjvvfdwxumn451338WhBx9S0j655ZabMWjQINTW1mLOnBtx6KFW/7nws9+dbOY+/BCWr6jFPXffg4O7+z7XMX33Pfdi3332xg1zbkAsGi3Il5uPZ597DrFoHGeeebpneb/nQzaFHO8pvI4dt/2X7+daMe3Njt3tvPAqAxR2TADAH+bcgNXffYdHH/0LHrj/PscYc5GrnRs2bsCLLzyPjz/+Nx544CH86U93APA+f/y2MYVXvzn5cvsMc+qz/fbdFx98+CFOOflkvP/e+6isrMRHH32Mn55yCt7/17+w/377WXzn+txxOo/8fhfm02elPA+d6nX7fs31ueh2PGT3gZ9zId/PKnMf+f1eIayUgbATRV17RBAlpftYZA5phcIgAMaSf/MkkUhgwdtvo72tHX/9618BAFVVVTjt9NMRDATQUN+A3XbbzfZYDLd0J0LhcPr9hvXrcc211wFI3l3VTCAQwIwZ09HV1YUhQ4Zg0KBBaG3NXHexYeMG7LLLzhBC4NZbbwUAHHjAgbj66qtx4okn4O13FuCOP96Rsx43X07x5oo7n35ww9B12+MtXp3/CtatX49rr70W20/c3pLuhlssufrCDUVRsPOsndHU1Oy7jKVejz7O9s0A7P3DH+Lll15K/6jgxKvzX0HtilrMmXMTDjxgfxxw4AH4zW+vxmmnnoqPPvoI99x1t8W+mD5ZsOBtvDjvRdTXNyCgKOjMulmUbhiQemj5V0VFha3vc8W8evVq3HTjHAQDActy7nx8ufl4//1/4ZKLL85Z3s/5UKrjPYXbseO1//L9XCvl+e91XnhRyDEBAKNGj0bN0KH4051/sqTnc/z6aWcgEMA+++yN++5Lisdc548TTm1MUUi/OX2GOfXZfvvuhxv/cBNOOvFEvP3O27ju2mtx9z334OQTT8Q777yDG2+cY/Gb63PH7TzK9V2Yb5+V6jx0q9fp+/X/s3fecVEcbRz/7VWKIFgRQVRE7F0jamI3sSX23mMvYDf23ltiS+yxxq6Jiq+9xxbFhsaADRAVFaQfV3bfP+DOO67DHXDH8/Wzcjc788yzc7Oz+0x5xlQdM9cHnWVgwm9qbluljqnPlZzCVmwRGzDsTMQ2ypuwBTi1v5yeU4x2mM6IJpH1qZhXrlxB3Tp1MH7cOFXYqtU/4+rVq2jRvDm8vLzw942/EVA/QCOdvnBjlPQqiV49e6JOnTqIT0jQOs/j8VSNX+Y1E56enggJuZ8hxwsAUKxYUZQuXRoLFy2Bn195FCtW1KR8dMnKit6mlIOzkxPeRr+FUwEnFHQtqAp/+vRflC7tg/v3H6C4h4dWOm8vL1SrWhXHjh1DLxO83erTxVhZGMLQi5++61JirIzVZfN4PAwZ8iMGDxlm8AGsYFlI02SqulG4UCF4enhg95698CvnBxdXF4342SmTbdu3Y+zYINSpXRspKSno2evLwvxChdzx4MEDVK1SRSMNj89HdHQ0PD09jZYPYLgMM5e9MZ1L+ZTC2TNn0fLbVpCkpqJgwS/yTJWlT8biRQsxf8ECTJ06FYULFcrS/WDp+q5EX90x9PuZ265l9f7X9fsauy8sWSeA9M6769f/RqnSPqowffVXHfW6bEo79z4mBi+ev0Axj+IADJe/OdeoxNw2W588XWXm7e0Fdzd3rF+/AWVKl0WlShVRpkwZrFm3HkWLFoWnp6dWmRhqdwzdi4b0MLfMLHUf6stX1/PVkI7qZK4PujDlNzWnrcpcRqY+VwhN7MewA5AmSTUeyYx4BJFjZLEn6GRwMEaMGK4R1r5tW2zY+BtaNG+OMaNHY9XPq/Hzz2vgrdbw6gqXyWTo1r0Hjh45rDe/wDFjsG79BixbvgIeHh5mTQ0aPnwoVqxYDYbhMHHCBFV4p04dMeWnqVi29EuPn7F89MkyV2995aNOp06dMCYoCMWLF8f6dWtV4YePHMHdu3fh7u6GEcNH6Ez7ww8dsHjJYtWLrvragcyjGfp0yU6ZG0LfdSkxt4wnTJyMKlW+bOMye9YczJ03R/XdxdUFnTp2QtHixTFyxJfyatasGVatXo2ZM2ZoycxOmfTq0QMbNvyKuLg4CAUCeKgZIwMHDMTKlasgSU2Ft/cXue3btsXYceOwc8cOrfLRdX8YK0N1jOkcNGYM1q1bj63bt6NY0WLYuFG/Mxx9svTJKFiwIEaPGoWNGzdi2tSpWbofLF3f1clcdwDDv5857Zqh8jJ2/+v6fY3dF5asE95eXujeoyc8PT0xbuyXdUj66q866nXZlHZuxsyZkErSEJSRj6HyN+calZjbnuhDX5l17tQRCxctxvqM73169cKoMWMwffo0VVr1MjHU7phyL+rSw9wys9R9aDhfzeerobjqZK4PujDlNzWnrdJVRsaeK4Q2WfPWwH0Zr+jaDbyYSmD8PcFESMJ4qa5CRsR34DtKBTyGL+ArpHwB48LwBYo0oYDjC3lCnlDO8YSAXJQm4Dk48XgOcrCOfCFXgAeeC8+BKcgX8QrxGa4Qx+cVWV9d1vVd9BuU86+oV50zwSdRqlQplClXzqjqZ04Fo1XrNlm6bCJ/8DI8HBEREfD19YVUmoZDB/ZDJpNhZGAgUjOmLagPySunQzg6OWHzb7/CQSRGux86oGLV6ibl9zzsX7x78wYeJUtCKkmz/AWZSFhYOLb//jsWLVyQazoQ+Ys0qRShoaFYt24dNm/ebLWpkZaA7g/CXmnX/nuLeuzN69hSu5MbZKc+vI+JwajRY3DowH4La5X7CEUieHiWxKgHwoOMgv2o4JhYhZSNZSVcPAs2USFjkgTgpaawrEQsZyWAQCpgWBkrY2VyRiGT88UyLpFT8EUKOaeQK1JFclaqkCgcE2RcKQc/9lk0uGJPwB08gC8bITOM2b3+djViRxC2CIP07Q6YLPazWIoTJ05g4IABuaoDkb8YOnQYhAIBJowfn+dfruj+IAj7wJbaHVtj7LhxaNumdW6rka+xE8NOx2IogsgyXKYjqzJsi3Hjxua2CkQ+Y4cNeTuj+4OwV/LTaB1gW+1ObpCd+vDHnj0W1ITICnZh2Jnz+k3TMAljmGLWMYx6L592LHPMOqU/zNwesSMIgiAIgiBsF7sw7Agip1F3951dF7jp6WlbD4IgCIIgCCLr5JvJxdevX8OpU6dyWw3CTmAYRnVkGx7SvWLmm7uRIAiCIAiCsDT55lUyTSLF5IkTsXLFCrAsazyBFbhw/gL8/fxw4fwFk+J/VbeulTUizCd9dI3hQXVkd40nTcUkCIIgCILI29jCxKp8Y9g1a94Mu3bvxqFDhzB61CgkJyfnuA579uxC7z59sHfvbpPif/782coaEWaTeQFedn2sAACYjGmYZNgRBEEQBEEQWcM2DDsLmcg1atbEuvXrcP7cOWzfus0iMk0lIiICUZFRmD5jBl6/eo2IiAjVuTbftUaNatXQMCAAx44e1Ujn7+cHfz+/HNWVMA7Hcqoj+8IyjDpb6AoiCIIgCILIb3C24YHfNgw7C3E/JASjR41G8xYtMPDHQRrnzpwKVh3WYP8f+9C9Zw/w+Xz06NUTf+zZqzr3/Hk4bv/zD5YuW44Vy5drpHsWFoZnYWFW0YkwH+VtzXKc6rDErU5jdQRBEARBEER2yPNeMTnOhJdmE96sL5y/gKDAMRgwcCDGjR8PXqZNKa25DUJaWhoOHTqIz58/Y+niJQAAt4IFETRuLBwcHAAAIpEIAQ0C8OHDB6vpQZiICVMsjXqwNMfS42XIy1fdLARBEARBELZB3h+rSyffvEqKHURYtmIFJkycqGXUWZuTJ46jcZMmqtG3Z2FhaNKsGU4Fn9SIx+fzNb67uBTA69evERcbm5PqEibAcazqyL4wgIMpPRgEQRAEQRAEoZt8Y9g1bNgIrVu3zpW89+7egz59+2qE9e7bF3t37zGYbtDgwejw/ffo17ePNdUjch0m01+CIAiCIAiCMI88PxXTNPL2gsZDmRyiAEC1qlVx8MgRANBYQ6f+eeTIURg5cpT1FSQyYQl3l6anY9QOgiAIgiAIgsgKdmLYEUTOor7GLtublDMZ8siyIwiCIAiCILIIGXYEYRZcxv+cVliWJXKafwmCIAiCIAjCXOxijZ05E+astZ0BYT+YNBHTmNdMM/JjMrawy+7AH0EQBEEQBJF/oRE7gjAH1egapxWWdZiMEUCy7AiCIAiCIIisYQOGHUdz1Ii8hwWrZLrjFIbMOoIgCIIgiLyIjdgiNmDYmY7YwdGi8QhCP5a7wXWt2iMIgiAIgiDyEDbwomYXa+wIIqfIvP4uu5siqOTaSE+Qkp69e+v8bAp9+vaztDoEQRAEQRD5HvsYscvb29gRtkbObmOX7jwFlnWe0q799zhx/C+z0vTs3Rt/7NljUtzEhESdn03h8+fPes+p692//wB8jo+Hg1iMMmXKYuCg/vAv74927b/XSGPudRIEQRAEQdgjNmHYkc1G2DMcl76ONLdH7cw10KzNp9hY/PXnMcjlcty6dRvLli7H1q1bAJAxRxAEQRBEzmErY0h2NBXTtOJu37GzlfUgbB9O7W9ODdlZb7+DESNHonOXrujbrz8uXLigCp89Zy769e+vEbdd++81RsSGDx+BDh07of/AQTh79pzRvP599gxDhg1D7z59cev2bVX4vZAQ9O8/AIOHDjNLdx4vvYkSiYSQy+UG42a+ntmz5piVF0EQBEEQhH7yvmlnEyN2BJF3yHB1wrFaYVmFAQMwPKv5xYyMjMLRI4fx8PEj/PLzL2jWrBkULIt79+7h99+3a8TNPBK2ePEiuLq64tmzZ5g7dx5atmxhMK8NG37FmFGj4OzsjBWrVuGrevUAAJu3bMGIEcNR2sfHLONOaWQWLVoEEydN1ApX6qvreubOm2NyPgRBEARBELZOvjHsrl69goT4BLRt1y63VdGgZrWqCHn4KLfVIMzGskaYtX1iCoVC1KheA7GxcQDStW8QEIA/jx3DoEGDdKY5e/Ycjhw9gnfv3kMkFCI5JcVoPm+iojBt+gwAgEDwpXl5/+49ateuDaFQqDctq1CAyTRqeeL4X4iMisL06dPhW9ZXI1wdU66HIAiCIAjCnrGjqZiGSZOkYVxQIJYuWQyWZY0nsDAsy2L92rVoUP8rVPArh8GDBgIA4uLiDKaTSCRo3rQJpFJpTqhJmIyl/GEifRqm8rAifN6X253H42HIkB/x1/ETqjBnJye8jX6L+IR4AMC27dsxYMAAHDp4AFu2bNaQxePzER0drfW5pFdJzJg+DceOHlGthwMALy8v/H3jb531+OnTf5Gamopbt++guIeH1nlvLy9Uq1oVx44d03ttuq6HIAiCIAgiP5FvDLsWLVti34GDOLB/P4YNGYLk5OQczf/37dtx/vw57N6zFyEPH2FMYJBJ6RwcHHD+4iWIRCIra0iYRIYtx6j9y7Z9x8uw6XL4bpwwcTKqVKms+t6pUyeMCQrCtGnpI269evTAhg2/omOnzhgwYCA81Iyu9m3bYuy4cZBIJBqfA8eMwb79B9Ctew/MnDlLFX/M6NHYt/8AuvfoCW8vLw09Dh85gl69+2Dzls0YNmSITl1/+KEDzp3/ssZPuRZQfT1g5uuhNXYEQRAEQeQnsjafjONU6bp2Ay+mEhh/TzARkjBeqquQEfEd+I5SAY/hC/gKKV/AuDB8gSJNKOD4Qp6QJ5RzPCEgF6UJeA5OPJ6DHKwjX8gV4IHnwnNgCvJFvEJ8hivE8XlF1lWTdn37JgrlK1bWq86pE8dRqpQ3KlerYVT1O3duo2unThg7bjzGjh+fpcvPCo0CArBx82ZUrlJFI7y0txdeRUYBAG7fvoXxQWPBMAxW/fIz6tatpxVH3+d2bVrjxfPnKFSoMK7duIGQe/cwLigQiUlJWLpsOVq0bJlTl2rzhD68j4iISPj6loVUmoajhw5BJpNhZGAgkhPTPUeqO/JQTjl0dnHB5t9+hYNIjNbt26NK9Vom5ff65XOEPX0Cv4qVkJKUZPkLIgiCIAiCILIMXyCAh2dJjHkkPsgo2I8KjolVSNlYVsLFs2ATFTImSQBeagrLSsRyVgIIpAKGlbEyViZnFDI5XyzjEjkFX6SQcwq5IlUkZ6UKicIxQcaVcvBjn0WDK/YE3MED+DKtkGHMHjbI+2vsLDhF7d7duxg+dChatvoWQ4ZpOnA4fvSw6rM1PGe+f/8O5fz8DMaZNWMG5i1YAACYO3s2TgSfMln+40ePEPrvM9U00xnTp2HRkqVwdXXFuKAgMuwsTOa1YNmSleE2xVrOUwiCIAiCIIhskMtbUplK3jfsLMS5s2cxcvgw/DhkCCZNnqJyo67E2tsglCxZEhERr+HnV15vnJcvXuDrb74Bx3EYOVy/50CFQgE+n68V7uzsrPr8PDwcvXp0BwCDDiuIrGHRPee4DNcpNtJoEARBEARBEHmPfLPGTuwgxupf1mDKT1O1jLqc4IcOHTF75ky8iYpCclISHj16CCB9Gt/Lly8BAGXKlMHVK1dw7epV+JYrp1NOsWLF8Pf1a0adqZT19cWmLVsQ9uIlrt24admLyceoltMxjOqwhAsVa3vFJAiCIAiCIOwb+xixM+HN+uuvv8kRVfQxaswYLF+6FB1/+B7x8fGoHxCAHbt2o9+AAWjfpg1u372LeQsWIihwDBiGwc9r1uiUM3X6DIwNCkJyUhLKldM/tXPp8uWYNuUnjBk1Cj4+Pjhz/oLeuEQmOBh1eml0KqY5dhovI36+6WYhCIIgCIIgLI19GHY2gEgkwvSZMzF95kyN8Fmz52DW7DkAgHpffYUbt25rnI+KitSYYtmxUyd07NRJS77SiYqSqlWr4XhwsIW0J76g3KCc0wrLssQMA5JmYhIEQRAEQRBZxU4MOwvtJ5YHad+mDfr265/bauQzjA/ZGfedYnp9ZMCAA0fOUwiCIAiCIIgsk+cNO/s12Uwj5OGj3FaB0IElvWJaGj6fj7i4z3j2779ITk3JbXUIgiAIgsgmzo5O8K9QAe7ublAoFLmtTr7DVmyRPG/YWZrjRw9b3QMmYf9YdrsDZGx6bhk+fvyIJ0+fomiRIijh6ZnhddNWmiSCIAiCIJQwSHfUlpKSjEePH6FSxYpwd3fPbbWIPEq+M+wIIltYwT7iAHCM5UyvyMgolPL2RunSpS0kkSAIgiCI3Mbx1StERkaZZNhxHAeZXA6ZES/q+QWhSAShQJCnZ1xZAjLsCCILqDtPyXYjwSDdc4qF2hqBUIAiRYpYRhhBEARBEHmCIkWKIDEpyWg8mUwGnkCA0mXLwUnNAV9+JiU5GZERr8DKZHa9v7NdGXZpklSLxiMIfVjSsLP0VEwnRyeIxWILSSMIgiAIIi8gFovh5OhkMI5cLoeC5VC5chVI09LonTcDkUiIipWr4mHIPTByOQQC800gW/BenvcNOw62UZJEvsKyVTJjs3PyikkQBEEQRBbhOA4J8QmoVK060iQScrKihlwuB8elonRZXzx5+ADuhdzN65jnbMOdY9437Ewk7xc1YStwan/11StL7k8OZN4XL/vYRvNDEARBEISpGHuuKxQKfE6Ih3MBZ0jIK7YWcjkL5wIF8DkhHq4FXbM0apfXsb8rIggronRxwnKsKswS+8/RoDRBEARBENmB5ThIJBJwHAeOpRcLXXAcC4lEAtZOX7x4ua1ATtOqdZvcVoGwAziOUx3ZhgEYxoKL7AiCsDmSU5JzWwUiD0D1gNCHuXWD5dhcP1o0b25WeE4c9o79GHb2aXgTuYEJczEZhlEdBmWYmqWle444Ouigw1aOlOQUnDt9Otf1oIPqAR1589CoG6bAARzLWfW4fOky6tSqjcuXLuuNExsba1Z4Thz2jp0Ydsrar5/r16/h1KlTOaOOhWlQPyC3Vcgz5ExZZG5VdcQwOmJneuPBgMnY7cBSQ3amPy3atG2L/506pfE9159gdNCRzw4nJ0d0eq4ztgAAIABJREFU7NzVpLjWuke79+yp8T1NmoZhw4ZBJpPmevnkl8PUetCmbVutI7d1pyOn64ZxOI616nHowEF07doFhw4e0htHnx45oZ8hnewZOzHsjJMmkWLyxIlYuWIFWDbnf1iWZfHbr7+iSePGqF61KkYMH2Zy2k+fPpoc9+uGDVG5YkXUqVUTvXv1wsMHD7Kibp7FnLKwJXJzFubho0chSSV3yASRmyQmxudu/gkJGt/FIhE2bvzNrvd7youYUg+CT55A8MkTWp8J+8bcNkK9A9rSR1RkJKKi32Dc+PGIiIxAVGSk6tyNmzfRtk1bdOzYSUMPfeE5fdg7ed6wM71vwjDNmjfDrt27cejQIYweNQrJyTk7j33Xzl24ePEitm/fjpu3b2PEyFFWyScmJgaPQkNx/cZN9O7TB2ODxloln3xLRoXk2C+HJSopZ5FanjXatGmNo8f+1AofOnQYvv+hA/r1H4AzZ8+qwocPH4GOnTqjZ8/eWLlqNXr17oPuPXsh+FSwKs6//z7Dj0OGolev3rh163aOXAdB2CopKSk4d+ZMltM/fhyKgYMGYdCgHxEa+kQVHv0mGlOmTEXHjp0wZkwgAP33NQC0adsObdq20/huLA9le9C7T1+cP38hy9dAZK8ejBo1BlFv3gAAXr96rfq9hwwdhg4dO2HEqFEIDw9Xxac22rbISt1gWdZqx+EjR9ChQwcwDIOOHTvi0KFDqnOrV63GxEkT8MvPP2vooS88p4+sYismYZ437CxJjZo1sW79Opw/dw7bt27L0bx3/P47Zs+ZgzJly8LR0RHVqlUDAPzzzx00a9IUzZs2w927/6jiX792FV83bIiWzZtryHlw/z5atWiBgPr1cUHPQ5THS/9ZxSJRxjQa/elevXqFPr17o3rVqujw/fcGdWrzXWvUqFYN9b/6ClOmTEGD+gH4qm5d7Nv7h1lx9OmiTNswIADHjh7Ncll06tABNatXR7MmTQEAQwb/iEYNGugsqyzDqB3ZhOM4gGNyrSepfbt2uHTpElJSNF0jL126BEePHMaUyZOxedNmVXhEZCT27/sDU6dOwa2bN7Fh/TrMmD4Vu3ftUcVZv2E9AkePxvx587D9999z6lIIwiZxcnLKmGaVNX799TeMGDECw0cMx2+bNqrCV//yMxo0CMC+/fswf8F8APrva8Dw6I++PCIiI3Fg/z6MHz+O7vVskp160Kx5U1y4kP4cPHf+PFq2bAEAePPmDQ7s34euXbpg/foNqvjURtsWWakb1hrxSktLw/HjJ7B2zRoE1A/AurVrceLESZU3zug3b1C/fgA8S3pq6KEvnEbsLEu+2u7gfkgIRo8ajeYtWmDgj4M0zp1RG22whufMmJj38PX11QqfN3cuZs2eDQBYOH8Bjhw7BgBYtHAxZs+dg/Ll/TUMmjmzZ2Pe/PlwcXXF5ImT0Kx5My2Z/n5+AIASnp5YtXq1wXTTfpqKb7/7Dlu2bkVKxiimPp2ePw/Hw8eP08tx5Ej87+wZvHj+AoGBgejRq6fJcfTp8vx5OB6FhuL2rdv4acpkdOjYMUtlERoainv374NlOSgUCly9chVXrl0z8xczgiUbB4YBwBnfHM9KCAQCVK5aBSdOnlSFnTl7FkcOH8Hbd+8gEgqRnMnoE4lEqFKlCpJTUuDm5gZXV1d8jv8yTSQqMgpTp01TyScIwjCJifFwdnLOUto30W9Qq2ZNcByHxYsWq8LDw59jwfz5EItEEItERu/rrOQBAEKhEDVq1EBsbGyW9Ce+kNV60KRxE0yeMgV9evXC1WvXsPaXn1XnRCIRGjVsiLVr1qrCqI22PRIT4yESikyOb631ZGfOnEaDBvUxc+ZMVdj8+Qtw7txZtGnTBj6lfXDx4gU0btxYQw994TmOndt2+WbE7sL5C+jbpw+6dOmCdevXw9lZs+Fs1bqN6rAGnp6eiIyM0Ap/9fIVGjZqiAYNG+D58+eq8MjICHzzTWOUKlVKI/6LFy/Qv18/dOrQAa9fv9KZ17OwMJz63/8gl8lQsVJFg+mePAlFt+7d4ODggEKFCxvUCQDEYjHq1quHxKQkFC5cBLXr1EHsp09mxTF0DSKRCAENAvDhw4dslYWzszNcXAqAYRi0atXK4iO0Rr1imgGPSZ+KycvFhXatv/0W58+dV33funUbBg4ciCOHD2Hbtq060/B4PFXvl3KUWImXlxdmzpiOv/48hu3bcnZ0nCBsjexOxfT09MS9kBCE3L8PL28vVbiPjw/OnD6DNKkUn+PjDd7Xzk5OeBsdjfgE3et49OWhhM/LN68TViM79aBw4UIo4VECO3fvgZ9fObi4uqrOvX8fg3/u3kVxDw9VGLXRtkVW6oa1vEoeOXwUnTp10gjr3KkTjhw+Co7lMGXyZPy+fQdatfwWPj6lVHH0hY8fO0HnX/KKmTVsoJuGs8joiNhBhGUrVqB169YW0Ml82rf/HvPnzcfixYtRsGBBvHz9ClUqV0Hp0j64fu06AKBs2bKq+L6+vjhz5jRatmylIadMmTIYHTgGjRs3QVxcnN78yvr6on79+ti+fTvGjAnUm86vXDkcOngIXbt1RUpyMgoVLqxXJyWGXuhNiWPsGvh8vsb37JQFj8fDtOnT0aJ5c0yZ+pPOOObBZfqb+XNWsOC8zizi5+eHb7/7Flu2pL/s9e7VE+vWr0dcXByEAgE81F4ITCEoKBBr1q7D0mXL4VHCA79t2GA8EUHkU5TTrFiF3KT46mvfgk+ewIgRw7Fi+UqAASZNnKg6NzYoEGvWrsWWbdtQrFgxg/d1586dMWpMIIp7FMev69dr5akvD8JymFsPMtO8eTOsXLUKs2bN1AifNmMGpGkSjBv3Zc09tdG2hbJupElMd3RmrT3bNm3eqCXfv4I/Nm76DSzHorx/eezctUNLD33hy1cuA8uxWn/zHBxnE6N9WXuT5DhVuq7dwIupBMbfE0yEJIyX6ipkRHwHvqNUwGP4Ar5CyhcwLgxfoEgTCji+kCfkCeUcTwjIRWkCnoMTj+cgB+vIF3IFeOC58ByYgnwRrxCf4QpxfF6RNVUkXd9GRaJClWp61Tl1/E94e3vDr0LFLF1OTiCVSrF65SocP/4XEhISUO+retiydRv+uXMHEyZMAMMwWLFyBerUqQsAePT4MX6aNBkREa/h5e2NU//7HwDgcehjzJ4+E2HhYShVyhsngjW3cPD388OzsDCVjMDRo3Hx0iW96Z49+w8zZ0zH0ydP4FmyJE6fOaNXJ3XZ2fmsTxd98c0tC/W0APBNo0bwLVfO5HUEYf8+RWRkJMqWLQupNA3HjhyBTCbDyMBAJMZ/BgDI5V8evMppLC4F3bD5t1/hIBLju7ZtUbVmHZPyi3r9Cvfv3kGN2nWRqKe33BxevXoFb29v8mZHEASRT0iTShEa+hhr1qzD1q1bVCOobdq2I6+ZdoRMJkNkZCRKly6t9/zzF89Rq85XcBSLIJWm5ayCeRyRWIxUiRT3/rkF37K+Zr0nMQyDEiW9ERjqcJBRsB8VHBOrkLKxrISLZ8EmKmRMkgC81BSWlYjlrAQQSAUMK2NlrEzOKGRyvljGJXIKvkgh5xRyRapIzkoVEoVjgowr5eDHPosGV+wJuIMHwKplarYpaQMjdsaxlOdMayISiTBl6k9ao0Z16tbF5StXtOJXrVIFJ9XW/SmpUrkKDh87qhWuRN2gqVqlCi5eumQwnb9/eRw4eNAkndRlZ+ezPl30xTe3LNTTAjB7fV3mHWSygrnpGAvW4OzqThAEQdgWgwcPgVAgwMQJE9JnzKido2eB/WDs2c7n81HAqQDu3L6Fb1u3BpIBaRoZd0C6Uefg5IzLl6/CzaWA1uwwe8EuDDuCyCm+TMRktMKyDC99g/JcXWRHEARB2Cw7d+7QGX6SRuvyFTweDwXd3RAbF4s/jx5FtRo14OnpmXE2w1FbvvwLvH37BvdDzkDE56Ogu5vepUS2jn0YdjQ8QVgSU4bsjNlgZtRHHtLd/lqsiaEhO4IgCIKwP0x4tjs7O8Pb2xtv3kTj8oULSExKyBHV8jouBVzhUbw4Spb01HKgaE/Yh2FnxlvsmVPBVvN8SdgLxi0742NrpltVytE6y+2gkK53+UqVLSWQIAiCIIhcJvRBCIy9X/AYBm5ubhCJRChStAgkZjhcsWccHBzhUqAAnJycLOLRPK9iJ4YdQeQQGe0po27aWcAgM395rHGCjxywvFCCIAiCIHIFH18/k+IxDANnZ2c4Ojrmi025TYFhGLudfqkOGXYEkeswGQ2vZXuQ2nXpYVF5BEFYj6WLF2HK1Gm5rQaRy1A9IAzxKOSuWfHzgyFDaGJXhp3YwdGi8QgiJ+DU/hEEkT+hl3kCoHpAEET2yPumvG3sB0jkG9LXrzEMozqy66mElyGCnGISRP6ltLdXbqtA5AGoHhBE3iT9TS/vWyR537ADBwt6lSCIPAnNgSeI/M2ryKjcVoHIA1A9IIg8io28p9nVVEyCyDEsOrrGIN1BU84M2XEcB6lUijQTNi0Vi8UQiUR27UGKIPICpb296KWeoHpAEES2yHeGXfuOnXNbBcIO0DB0stmLw2X6a02kUikSExPh6OgIFxcXo/FTU1MRGxsLFxcXiESiHNCQIPIn9DJPAFQPCILIHvnOsCMIS6Bu2FliGmVOjPDLZDJ8/PgRHh4eSEz4jNTkRKNpBEIh3N3d8e7dOxQtWhRCodDsfNNiQgEA4mK0rx5B6INGagiA6gFheVgOkHP5e9aNgOHyjR+DfGPYXb16BQnxCWjbrl1uq0LYMEr7i6dm2LHZlMkw6QtyrTnbkeM4fPr0CS4uLkj4HAe5XGZSOplUioT4OLi4uODTp08oXry4ydMyWVkqPl2ei5TX1+BQohqKt9mQnUsgCLuGXuYJgOoBYTlkHA8xUiBOxkDC2oBLDSviwGPhLuRQTMRBaI2Ng/MQdmHYcSb4V0mTpGFcUCAeP36ESZOn5PjeHnVr1URcXBy8vLzQrXsPDB0+HAKB4eKvWa0qQh4+Miuf0t5e2L5jJ5o2a6YKu3jhAgb272eXD4yslJExlPXJUL1iGPX6o9Apw1QYAOAst8JOl95yuRyfPn5EsWLF8OlDklnyZFIpXAu6I+L1axQuXFhj1C70Q7zONEI+D35uTpC8DUEBr3gkRT+GIuUT+E6Fzb4ee8GSdbVOzZr4JyQEAFCrRnXcu//AInKJ3CMnRmpevniBQQMH4OLlKxaTo69eG6rvltLD2jJzA3sYsVNvn3IjvT1jyvsuACQqeHidyuBlKh9343mISjN/to094SWWoXZBFmUcFfBx5ODCz26XfN7FLgy7dAzX9BYtW2LfgYMYMvhHhIeF4+c1a+Ds7JxDugEfPnzA81evERkZiSmTJiI1NRUTJk0ymCYuLs7sfAoXKYK9u3ejSdOmYBgGLMvij717Uaiwfb5QZ6WMjKO+6o3TfypzmM6IpuTGgMn4azk082dZFimpKeA4LktTRzmOQ0pqClhWszEMfvEOoXGaYUIG8HfjY+JX5eHs2wrSt/sgdJYj4clJuNfppzcPiUSCtq2/w6nTZ6y2ni/45EnMmTUTHMdhxqzZ+KFDB6vkowtz66qh8vj48YPqc+ynTzrTh4eHoUP77/H46VOtc8bKITw8DEMGDQIAbN62DeXK+enV8+zZM5gxdSocHR3xy9p1qF6jhkk6EJrkxMv8uXNn0aJFS4vKUdbrzPXVUH1XprfkPW8NmfqwZjti7Xrwv1OnMG/uHHyOi0PdevWwY9dui3eQqrdPlkjf5rtvsWr1z6hQsaIq7OmTJ5g0cQJOBJ/KZx3axp/fMo7B61QG9+IFkDu5YUlTd3g55e8Ru6gUFhsexiEu/jMAOfydGbsducvzv7Qli71W7dr4bdMmnD1zGps3brSgZNPg8/koXbo05i1YiMOHD6nCmzVpDL+yZRBQry4O7N+nkaa0t5fGvjaG4gIAq1AgoEEDnAoOBgCcPHEcjb5uBIVcblRGi6ZNUbG8H+rWqonDh4zr9/jRI3zXsgX8y/miWZPGqvCQe/fQ5OtGqF2zBs6dPaslv1aN6pgwfhzq1KyJmtWqYs+uXSanzaybrjLKCTiOVR0WkZeTe6NkHpI05dDDz/P24vrvxzWOC1v/wo61fwEAnMt/j9Q4ZwgLJODT/YMG1XJwcMD5i5es6qRlxvRp2Ll7D7b+vgOzZky3Wj6WIDvlcSo4GN26dEFSku51lMbKYdmSpRg6fAQGDxmK5UuXGsxr1vTp2Lh5C+YtWIgF8+aZrAOhSU60YefOnkWLlhYw7HTIMae+KtNb8p63hkx9WLMdsXY9mDl9GlauWo0790IwdVq67tbpILUcXbp2w57duzXC9uzejZ49ewH40qGt7LS09w5tY8RIGTxPZqBwcsOShkVQXCiDRJKcr4/iQhmWNCwCuZMbnicziJFmsSPdBmzBPG/YWZJ7d+9i+NChaNnqWwwZNkzj3PGjh1WHtfHx8UHM+/eq7/sPHsLT/8KwZv16zJ87VyPuq8gojR4nQ3EBQCaTo2v37vh92zZwHIddO3eic5eukEqlRmWEh4fhweNQrFz9M5YuXmQ0/k9TJmP4yFF4GPoEL54/V4XPmD4Ni5YsxY6du7B08WIN+fcfPcb6Db/i7OnT+N/ZM/ht02asWrXSpLS6dNNVRjmBcuTLUvvP5WRbwWXhnz5ubhuHst9JNI5ybdLg1SoF3x+eh66X/4CCcwFYQJ4aj+TI+wZ1M9aJ8V3LFnj58iWA9DrxXcsWeuPqoljRoggPD0fM+/co6aX/Ber27VtoFBCArxs0wJ07t1Xh7dq0RiX/8mgUEGAw35cvX6J71y6o4FcObb77Vku+vg4MQ+Vx9cplfFWnNho3aqgz7q/r12P5snQjbNuWLRg8eIheucbK4e7df9CmbVu0bd8ed/+5q1cOACQnJ0MsFqO8vz+ePAlVhRvTgdDE2m1YfHw8wsLCULtOHQCadUv984B+fVGvdi3V98x1PrMcdTIbJY0bNcRXdWrj6pXLRvXQd2+b0iFo6NpspR1RYu16oGBZFC1WFM7OzhojYKZ2IuvrZNXXPumTk7kMDLVvnTp3xqngYKSkpAAAUlJScPbMafzQMX2k1JQO7fwCywFxUuDeZx5G1yyE1JQUyGQysCyXrw+ZTIbUlFSMru6Oe595iJOml5U9YkdTMQ1z7uxZjBw+DD8OGaJzjV1OboPw+vVrFC1WDABwYP8+bPptIyIiXkMsFiMxUX/vtilx5XIZXFxcUM6vHBYvXAh//wpwdnaGTCYzSYZIJELDRo0QExNjNH7Yf/+hTdu2Wj2jz8PD0atHdwDQ8qIoFovxVf36SExMRJEiRVGoUGF8+vjRpLSZdcsd0lsCzZG67LYOylGxnGllLOmB07u4G5xdOPgX0P0AvfVJBteKHZAUtglOhRLw6Z9DcPauoTNuZvYfPAR3d3eEhNzDoP790a17D3z/Qwf8eewoxo4bj6NHjuCHDh31xgW+vOApX5Z+mjYdkyaMx8ePH7Fj15ce4MzxZs2YgXkLFgAA5s6ejRPBpwCkj1KH/vtMNSVVX76TJ0xA67ZtsWPXbiQnaa9pVHZguLq6YlxQkGr0I7Me6sybMxfzFy6Ef4WKWi8/G9atQ3JKMiZNngIAOHjkCABg2dIlOstWXzkoif/8GQUKFAAAfP5suDd//MRJ6N61C8RisUZHhzEdCE2svbbq0sWLaNToa4NruxUKBS5fuoSbd/5RhWWu86bIUbJzz148CQ3F/Llzceb8BYPp9d3b4eFheBb+HPfu3sWwIYNx4fJlPA9/jpEjhqN3375GdbKVdkRdhjXrwbz5C9Cre3eIRGIsWLQITZo21dBZib6yCA8Pw3/PX+DmjRuYOH4cOnfpki5XT/ukT07mMjDUvrm5uaFps2Y4cvgQ+vTthyOHD6F5ixYoUCB9yx5lh/aPAwagdZs22LVzJ7bv2InFCxdaoQTzNgowSFYweCMXw0MMpCSZ5igtPyBnpShRwAFv5GIkKxRQgAHPFobgzCTfGHZiBzFW/7ImV71ichyHiIgIzJ45A337pq81WrRgAVasWo0mTZsiKSkJNapWUcV3cXHBq1ev4OrigkKFCxuMq0Se0UPVs3dvtG/TBsH/O63K21h+Svh8vuqzofieJUvi8uVLqFxJ0419WV9fjB03Dk2bNUdsbKyWfB6Pp9Ins4FtLK26brrKKKdg1V5gs7syjgGT7hUzBzcotyRPYiIR/dlJ57lYSTLc241H9KUt8K4rxau/z6Nk22ngi3THV6KvQ+GHDh3QvWtXDBs+Agf378fRP/8y2PmQ+WVlyeJFCD59Brdu3sCSxYvwTePGOuO9fPECX3/zDTiOw8jhmqP7yrW5hvJ9/PgRdu7ZAwcHBzg4OGhdn74ODEMvdBERr9GkaTOdU8yOHT2CRUsMT5lUR185KCno5oakpCRwHAc3N3eDsgYMHIgBAwdi/74/cGD/fpN1IDSx9kjN+XPn0CJjZEqJQqHQaFMZhsF3rVtjy6ZNmD5zpipcfT26Ljn68PHxgYeHB8YFBRpNr+veVmKsQ1CfTFtqR85dvKhThqVp17492rVvj5B79zBq5Aj8ffOWVhxzO4AB3e2TMTnq9cpQ+wYAg378ESOHD0OPnr2wdfNmbNyyVXXOWId2foPLMJZZAKyFlotkhW9btsLps2dyLX9dsBl+zDnWfp2n2MRUTEu8iH799Te5atQVLlIEfmXLoE/Pngho0ABDhw8HAASNG48Z06aivG9Z1K9bB6VKlVKlGTp8ONp82wo9u3czGleJQpHuobFq1Wp4FRmFSpUra4SbIkMdQ/FnzpqNnyZPRreMHjslS5cvx9pf1qBKxQro26unWeVkbtrMZWSTMAA4xnJuMY2gPo3U1EMfl2f0wNzIWIx7HqXzmP8mDn8vD4KwoDck8TyICwKf7p83quOiBQvw07RpePLsP1z9+4YqvKSXFypUrIDhQ4egevUaKOnlpTeuLt5ERSE6Ohply/oiKjJSb7wyZcrg6pUruHb1KnzLlTNLRwAoX7489u/bB4lEonoBFQgEqulfZX19sWnLFoS9eIlrN24aLQ8AKOfnh/+dCkZaWprWuT/2H8CihQvwXm2KtyGMlUPt2nVwKjgYwSdOoHad2gZlJSYmIvjkSSycPx/DR4wwKX9CG2uurZLL5bh27SqaNP3iXKJYsWL4+/o1jWn6PB4Ps2bPwe/bt5ksR71eZyYtLQ3BJ0/C399fb3oluu5tdfR1CBqSaUvtiBJrr7G7d/cukpOSwDAMUjOmNio7SJWOmEwpi8ydrLraJ3PK1FD7BgAVK1WCl3cpTJowHt6lSqF8+fKqc+od2ps2/oaevdLX3lm6E9Pm4NINGGscdWvX0Th0xYmNjQXHspCkpqJr586QpqWBY1m0aNbcanoZO7JVnDk4syo75P0Ru7xfhiZxN0T32qKBgwZhYIb3ucyMCQzCmMAgk+IqeRmh+yGj7AU0JEO9p9CU+OX8/HDz9h3cvHkDU9Q8fFatWg3HM+a6G5Of+bO5aTOXUY6hXi+zbZAxmf5aGQs+7CTxn1ChpFjveYWcxYf3iSjSdiQ+Xl+Kgp4JiLq0A8XqtTcoV9mhEBMTA5FIpNXh0a1zZ9VUP0NxMzNj1iwMGtAfrEKBqdNn6I03b8FCBAWOAcMw+HnNGrN1XLpiJaZOmYxFC+ajpJcXLl6+gn4DBqB9mza4ffculi5fjmlTfsKYUaPg4+OjmqZmiMVLl2HC2LGYOH681kti4SJFsGjJUsyeOQO/bdqsV0a/Pr2xc/ceveWgPD/5pykaXjH1IZfLUadmDVSoUAHLVqxEy1ba6wkJ07DmSM0/d+6gfPnycHV1VYVNnT4DY4OCkJyUpOH1tOMP3+Or+vVNlqNer9XxLVcOVStVRJkyZbBi9Wq96dXJfG9n9dqU2FI7opyObe0Ru/Xr1uLqlStwc3PDrDnpa+aVHaTe3t44fe68WWWhRFf7ZI4cQ+2bkjGBgejWpTMOHNL0hZC5QztzeH6GtaJxe/P2l9FeffmwHAehSIR9Bw6ovsfHx1tVr/xO1t4kuS9b2HftBl5MJTD+nmAiJGG8VFchI+I78B2lAh7DF/AVUr6AcWH4AkWaUMDxhTwhTyjneEJALkoT8ByceDwHOVhHvpArwAPPhefAFOSLeIX4DFeI4/OK/FIptWt0VAQqVdO/Lufkn8fg7e2FarW0F3MT1qP1t60QHhYGD48SmDl7Flp9+11uq2QRHt77B5GRUShbtgyk0jT8dewYZDIZRgYGIj4ufXooq7bqlsdLvx0KuhfC5t9+hYNIjFatW6N67Xom5fc2KhI3rlxCwDdN8DlOe/qpubx48VLrfkhLS8PDhw9Qq1ZtvHujv4dZHx4lvXHv3l1Uq1YdYvEXQ+7EsMbw8tG/bYhczuHdmxR8u/JP3JzRApXbJuPRcWfUmXoQziXKaMSNiorEty1aIPTfZ2brZ49QeeQvrLm2asG8efAo4YHBQ4bmqpzM6S1Rx60hMzexh33sCOuh/n6iCxnH4G4csOVtAZzv6IWEuI8642WXgPoBuHFTexT21u1bWDh/AURiMd5EvVHFUY8fUD9AFV+XDGviWqgwmh95g8ElklDbHWZtecBxHDy9vBH0xOkgo2A/KjgmViFlY1kJF8+CTVTImCQBeKkpLCsRy1kJIJAKGFbGyliZnFHI5HyxjEvkFHyRQs4p5IpUkZyVKiQKxwQZV8rBj30WDa7YE3AHD+DL0CJj/p4MeX/EzhQ4zm5G9myJU6fz1txpi8HBBFf/RobszOqNYjKkWWjETsf9wDAMeDwe3r19C6FIBKlU93QXXYhEYrx7+xY8Hg8Mo6ljzLt3iE8soD8xyyEtNRnCAm5wKVMLz87fRVqiDDH3LqFMW80HU/s2bdC3X3+T9bJ38lp56JoiRi+glsPEhehqAAAgAElEQVSaZXn+3Fls+31HrsvJnN4SddwaMnMTuqcIgyjfT0wk896zlkRpoF3/+7oq7OfVP2PChAko6+uLbl27aeSv/lmZxpr66SQf2Ap2YdiZM+v1+NHDOeoBk7A9uExH5nPIFK6r7pll1jHpWxAwlrLrdOTP5/NR0LUgnjx5goAGDcAlxUOqZy2DOiKxGE7OLvj7xt8oW6as1rqKLhvPmaxXmfaBSIwKR9FqjSB2K6J13pIb5NoDea086IXTulhzpObilat5Qk7m9Jao49aQmZvQiB1hCHNXeVlqr11dXLt+VSuP6DfR+Kr+VyqnYOrn9H22JWzBLrQLw44gchqLLspmMsbsrLjEjs/no0jRonj//j3OnjkDv/J+8PQsaTTd27fRuP73TRQvVhxFihbVMuxcPbxN1qFg2SooWFbbCytBEGQ4E+lQPSAsiTVHxHTJ9vHxwcWLF/HNN99oxVF+dnZ2RmREJJwLOMPNzc1q+uVXbMCwsw0vNEQ+wdQhO3NEchwAxuoevFxdXeFXvjz4fD5CHz/G1avGe98LubvDx6c0yvr66nV4QBBE9qGRGgKgekBYFs6Ku3B/8/WXbXIuX74EAJg0cSIWLl6MxYuWwKdUKY38lZ979uiBQYN+hEcJD/y+fXtGuslYvmKZ1t+8hW3YIjZg2MHkskyTpFo0HkFok7FBuSUtOyjdeFt39xEej4eiRYvCwcEBniVLIjlZe+PszDg7F4CbmxtcXFy01tcRBGE56GWeAKgeENmDDw4OPA7FmGS8SmLhJhKatOzCXC5e0vTkrNwvz8/fD7//vk0r/OKlC6rPvfv2Ru++vTXOL12+BCzHav21JCKxA14msSjGJMOBx4Jv7jQpGxlnyvOGnY2UI5HfsOxMTFh5JuaXvBgGrq6uNPpGEHkMGqkhAKoHRPbgMUARMQ+VxSn49WEcFjUoisRPHyBNk+S2armKSOwAl0JFsPB6LCqLU1BE7AiemQ4nObX/8zJ53rAzDTL/CEtiyH2KehxjMkyEyRj/M9+rrYG86X4gCFuCXuYJgOoBYQzjz/fiDoC/Kx/X377ElOvAwEqF4Oth3RlBeZ3wzwr8fv0T5O9ewd9DhOIOua2R9bATww70HktYDvV1dFmtV+ams/T6Og5ISEnF1TcKRMSnQSa3TQ9UBJFfWNW1JsYfDMltNYhchuoBkRmhgIdSBcX42pNv0ruFkOFQ3k0IuVyOxzH/YfYbF8QJ87eTEnfZZ/gLE1G7iBjl3YRm7V9na9iNYWfqT9SqdRur6kHYPrlh11m6Z4IDcPm1BJ+SZahZ0h1OIru51QnCLmlyPzK3VSDyAFQPiMxIpHKERsXhilwI7d1EdeMqBGoVd0RhBx78E5ORJE+wqo55nQIufHi4OMKnoBgiOx+8pLc9gsgClvVgyUvfzM7CzlNevItDvfJeEAv4UFjRMxZBENmnY61SOHovIrfVIHIZqgdEZoQCPsp7FsTd/6Lh5WJ6OhEP8HMXo2xBEaT5/B1AxGPA5+UPB3B537DjOItMU7t+/RoSEhLRunVrCyiVe9T/6ivcvHUrt9XI91jSQySDdEPR0k1OWmoKhEIBFPm7PScIm+DQ3Qi6VwmqB4ROxEIhJKnJgBmGnRI+j4FjPjFqrIqVt6SyFHnfsLMQaRIpJk+ciCehoRg3fjx4vJwdi20YEIDPnz+jZMmS6NylC34cPBgCgfnFHxcbawXtCHOxhdublUnB6uil4zgOcpkUMqlxF8hCkRgCoYi2OiAIK9Otrg8O3Hmd22oQuQzVA0IfrEya2yoQNoBNGHbGX6KNr4Zq1rwZdu3ejREjRuD58+dYvmIFnJ2dLaShcT5+/Ign//6LqKgoTJ82DZJUCYLGjc2x/Alz0O8V88s3RkeY7pg5T7rerFwKRaYeJrlMCrE8GZWKOMHZqaBRSckpqQj7GIc0gTMEQpGV9CUI4o/br7TuVyL/QfWA0AcrlyJ9yQbVj9zAVvyN24RhZxQTS7pGzZpYt34devXoie1bt2F04Bjr6pUJPp8PHx8fzJo9B0OHDFYZdv/8cweTJ04GwzBYtmIZateuAwB49eoVZkyfjkcPH6JMmTI49tdfKlmbNm5EcnIyxo0fjwf372PSxIlITErCwoWL0Kx5MwBApw4d8PLlS7i7F8KFSxdz9FptHn27HSgfuOobZ3I6Rn9z264DwCrkUKipqZDLwE+JRc3ynkhJ/IzEOOMblAuEQtT0KYxb/0VD6lQYfIHQbHVEn58AAKRulcxOSxD5hT71S2P3zVe5rQaRy1A9IPTBKuQARLZhXRC5hn0YdiZyPyQEo0eNRvMWLTDwx0Ea586cClZ9trbnzFKlvPEhJkb1fd7cuZg1ezYAYOH8BThy7BgAYNpPU/Htd99hy9atSElOVsXf+NtvSElJwbjx4wEAc2bPxrz58+Hi6orJEyepDLvQ0FDcu39f53Q8InvYwtRETiFX9fxyHIf42E9oWMYVyfFxkMtlJsmQSaVITohDhRKuuP7yEwoWKWbytTPyVBR9tACOMX8jrVBVvKu7JsvXQhD2zo4bL2mkhqB6QOiFUxp2BGEAuzDsTBkevXD+AoICx2DAwIE619jl5DYIERGRKFK0qOr7q5ev0LBRQ3AchyC1UcQnT0Kxdfs2ODg4wMHhy26Kx//6E/PmL1B9f/HiBfr36wcAEAo1R1RycrqpvWDS9uRGHry5PWDHAeAUCpVRr5DLkBD7Ac5VPJEU+94kOYlJiTh7+ixatGoJT59ySIh9DueC7hqjdp9SEnWm5fF4cBc5wCH2AVy84sG9CQWT+gkKcSG9+UlSkjF3UHswPD7mbPsLIgdHk6/ZlpjVvy0+vo3ChjMPTE5jqGzU5WVFti1iSl2xtbIY2LAstl9/YdU8/ntwG4tH9oCHd2ks3nfBYrKEYkdVWWf+bRYM66L3d1DKcCtcFA5Ozha7960lNyfIiXqQE1ji/rO1e9jacAqFzUwHJHIPGzHssl+NxQ4iLFuxIle9YnIch8jISMyfNxe9evVShZcu7YPr164DAMqWLasK9ytXDocOHkLXbl2RkpyMQoULAwB27kpfK7h23ToUK1YMZcqUwejAMWjcuAni4uJy9qLyKTYxYgdW5V1NpmCRKkkFx3EmbdWQJpFg0sTJePrkCTiw6DfYF6mSVMgULMD/Eu/5548IjdPc/FzEAL4F+ajrWRoJHs3hkHQQQmc5HF+fQrxfb715KriMO53joOBgNc9wL58+xN5Vs/Hm5X/wKFUWPQJnoHyNr6yTmQ4iw58CMO/6DJWNujx9spMTPuPK8f0I3rkBqcmJ2HJN+8XRlHJJTviMbQsn4lnIHfhVq4VBM1bCxU23sf788T3sXjkLMVGvULpCVQyctgxFSnibpIu55TGzf1t8ehuFtae/vABmpZxzky3XXlhd1/t/p0/JrxLQNNt5qcs6d2A7AKjqpvpvY+h3UMqo2qAZ/rt/y2L3vrXk6sOSbYq168HLpw+x75d5iAx/CrGjE6rWb4JB05djzgDteyg7WOL+0yVjTv/WiHr+DLO2HUep8pXx5M5VrBrXHyXL+GHurtOIjXmHyZ0aoF6L7zF0zs/YtWImLh/bgxXHbsKtSLHsXFKuw4E1HomwIrZhVtuGYWeBcmzYsFH2hWSDQoULo0qlSvDwKIGOnTvix8GDVedmzZ6DCRMmgGEYrFi5QhW+YPESzJwxHcuWLoFnyZI4feaMSta8+Qswf+5crF2/HgsWL8Ls6TMxfuw4lCrljRPBp3L8+vIbtmDYgeNU+9exbPpnDsa3D+E4DosXL8HTJ0/gXaoU2rZtDwBQsJxKjpJf5u+FONOoMMtyuCLkodaiQMR6tIXzrWAU9PoIx/DDiPXtBX0IHZwwb8951Xdr7b23aXYgPkRHYNqWY1g0uAM2zQnC0iM3rJKXIcy5PlPKRj0s8/nx7etBoZAbTG9KuRzauBwPrl9A38mLsWvZVBzdtAK9Jy7UqfOWeePwIToSY1ftxM/j+2Hv6rkYtWSzSboYI3N5RClfAI2US15m2De+2HjluVXzePj3JQBAlfpNs10u6rJUhh3Laf02SnTlp5RRu2lb9Jm0yGDcrOhmabn6sGSbYu16sGn2GHyIjsS83Wfh4l4Yn95GQcFyBu+h7GAJeeoy6jZvj6jnz/Do1hWULFcJoXf+BgDUbtYWCpbD89AQAMC/9/6GguXw+OZlAMCLJ/dRvVHLbOuSq9AU3dzFNuw6GzHsjJL3S/vGzZt6z9WpWxeXr1zRCvf3L48DBw9qhD0LC1OdW7t+PQCgSuUqOHzsqFZ6ZVzCXIxPxjTNU2tuka43x7FgMx4ErNpIHWdEt82bt+DSpUtwcXHBL2vXwsFBBA7p6dmMQ8nSOSOxO3SjlgweD1h/bykAYJGiAAqyH8GkJUAQ8wDSotX05j2icTkAwK+Xw7F0eCdEvwyDQiZDMa8y+GHYBFRv2ALTuzdG7Ls3GLFoI36dNgzuRT2w6NA1vfEzI5NKAAAxUZEAAKHIQeOalMREvsSu5dMQ+V8oSvlVRp/Ji1DMuwzWTBiAqOf/IiXhM0qU9cP0Lcf15v0hOgJ7V8zAi9AQeJWriEnrD6jkK/P8EB2BPcun49XTByjmVRp9Ji9CqfJVDJbNfyE3sWPJFEhTU7TkAcCpXb/i2OYVCGjdBf1+WgJvv4poOzAI66cM1oprTrk8vnEJAFCz8XfYtWwqHt28rFMWACTFfwYAuBf3BACEP/oHLMeZpAsAzO33Hd69Dse8Py5gVs9m+GnTMSwZ2gElfPwwa+cpjfJQMuwbX62woG+rwdHFFZ1HTEXtZtpT7j++jcS+1XMQ/uguGI5DEa9SmL7luIZ8U+rljf8dxrGNyyFJScbX3/dAl1HT9cbVVYd+vRyutywsQVzMW7x58QwOjs4oV72uRlmpX5+u68is78hFmzRkKVHqr+u3mfB9XYgcHNFvyhL41wowqI++e3zxkA6IiXoNhVyKUv5VIHZ0wvNHd+HiVhidRvyEmo2/NSg3L7cpgSt/V+lpzXogyWgzLv+1Fy26D0ZJv0oa+ZlSXouHdMDHtxFIS0lB4RJe6B40G5Xqfa23XTLnPjDWttVq1hZHN63Ao5uX0KrXMDz95xqA9DaJ5ThEv06vc2kSCULvXEVKYjwAIPplOKrq+O1sCY5jYc77LsdxkMnlkElpmwQAEIpEEAoEttExnw3sxLAjiJzFJpoF7ktPp4LNMMgyBuwSExNx5swZtGzZEq6urqokJ0+cxN69eyEUCvHL2nUoUrgQ5DIZwKU/XBUsB0at99Td3RUiZxZVXBU6Vbj1SYa4ku3gGLMdBYokwOnZUaQWrmpUdQXLYfC8DXBxK4Q3L55h2bCO2L1sGqocbQ6/6vVw691RvHiSPmWodKUaBuNnpnmPoTi8bgG2zg0EALTqPUxnr/LOpVPx/NE/GL54M36bOgS7lk7D2DV7VS8SP58JhVQiMZj3zsVTEP7wDkYv3wafCjV0jqrtXjYN/4XcxPg1+7AqsAd2LZuGnzb9abBsDqyZh9h3bzBtywksGtxOQx4A/H3qEHz8q6Bb0GwoWA4Tfz2iJSMr5ZIQ+xFA+ogZACTGfdLbI//DsCk4sW0VFg3pACD9JcNUXQCgVpM2CN6xBo8yjMmndzJe4Jq01js6ue5imFbYT1uPY06vZji8YRFqNNGeir9j8RSEP7iNnzb9iSVDf0BU2FO98g391gfXLkBqUiL6TV2OwiW8DMbVVYdGN/VT6W8NlOVYvnYDgPfl0Z/5+nRdR2Z9Qy4FG5WV+Xvgip1YNLgdDq6dj6lbTxrUR989HvHfYwDAnL0XMKdXMwjFDpi6+S/M69cKB9fOR7WvWxmUm5fbFGV8a9eDnhMXYu+K6Th/YDsuHd6FrkFz0Kh9d9V59XtI3/Urf4d5+y5iVo+m2LNiJubtu6i3XTLnPjDWtrkX94JPhWp4+TgE799EIDLsCTx8/FDU2xcKlkNMVPoegL5VayF4x3r41ayPh9fO4m3ES5sZvdeLGerLZDLwBAKULlsOTuRrAQCQkpyMyIhXYGUyLX8U9kSeN+xM6pvI+wN2hC1hfMDOeI9P7g/YAQyjWpug4ADlM43jOJw7ew7r163HyZMnsXLlSri5uSEk5D7WrEn3XDl95iz4+ZWDNE2iEstmrFFhMl3bfx+jEP1Zt1OCRGkKEiqPhPODHfCpJwX/+iWwdSeCEzgZvAQFB9w8fRSXDm6DJCXdI2zS51goOMC3ej3cOn0UL5/cBwD4VKphMH5QMz+V3F8uhOHcH5sAAO1+nIDjW1YgeOd61GvdTSteVFj6Ng1+tRoAACLDQjXWejACEcQFRAbzfv3sEQDAt0YAeHyBRnrl59dPHwIAVgX2AAC8fRmmU2/1dDFvIgAARX3KackDgJioVxi7Zj94Igeda1x0hekrF3Vc3Avj84d3SM7w0lvAvbDeNTQB7bojoF13PLp+FltmjkRRrzIGdcl8vTWapht296+egbtHSdWUqprN22uVI8Mw6YajDvnuHt4AgLgP73SW6+t/08u/eBl/ozIN/daevhXx/MFt7Fw8CYU9vDFr7wW9cZWo16FfLoRZdW3V45uXAACV6jc1eH26riOzvpllqadXR/17EZ/0kaAP0ZFQcNr6qKfRd48rUf6msjQJCnuVAfDl9zUkNy+3Kcq/1q4HlQOaY+6+r3Htrz9wdP0C/LV5OQLadddZH4zV34LFvAAAcTFvDLZL5twHxto2AKjdrD1e//sQx7euBsdx6Z09GXFi30cDAMrVqI+/Ni5Dl6DZeHjtLGIzdLRpGMak9125XA4Fy6FypSqQSCRITUk2nCCfIBAIULFyFTwMCQEjl0MgMM8EspXqo2MDLvtGfVsDgsgqDMOojjwLw0CRsSYufcQu45nAcWjdti3K+fnh1ctXmDBhAkLuhWDO7NmQyWQYMnQYWrVqiTQ1ZyscMgw7NXkKloPD1gGY+eoTxoVH6TxmRcSCv28yJI4lIYnnQeTKQRh2SUuO8lCiYDmc+2MjkuLjMHlrsEa4X+2vwTAMXjy+CwAoU62ewfirzv2nOhQsB7ksfVpKudrpL1fyNKnOeCX9KgMAnt5Jd2xUoqy/lo7KQ1/eHqXSX07CH95FUkICFCwHsVMBAED0q3AoWA4lfCsAAH6c/xuW/y8UU3ec1qmPutySvhUBAFHh/2qEK/HwKYfdSyYjMf6z3vJVsBxWjeqK1aO7GS4XtTj+/2fvvuOjKP4+gH+uJ6QQqpSEloQiEEBEQDokhBY6ooIgvQkRCL33FkQQGyo29KGKSk8oQuBnQZqAiqEmNEFKIL3sPn+EHLnkLncJl9vdy+fta81mbnZmbtnL3fdmdubFFgCA00f2AgBqNWpp8d8yQxBx91Ys9nz5HgCgedd+ebclx/Mt7V0NlWrUxaU/jqNe82BcPn8C1eo2QqkKlXMdX7xMOQBAzD9/4vGjuDx73HLWU/K5ipn/HleiTfKVeC7zQ+vdmzEm6Zb+rbuPnI6Ry9YDAJISHuWZN+dzzxBEhLb1z/NcPsuWkpKCCycz7/mq8eTfzNLzM/c8sj9urqyc17S555o1EYa3fx2zZWQ/xtJr3NI5zGKtXDn/TXHEdZAhiLhy/jSSEhNR86WWAAC9azGLryFbrl/gaW+8pb9L+XkdWCoj+xbQuhPUGg1OHtwJAAho2cH42MM7twEAlWs1yPy3rPsSAODhnduFel4dscGGzxuiKCIu7hGqVKuGpMREpKelQhQEboKA9LRUJCUmoko1X8TFPbJpIjklkn9gJ1r/eoIddmRPeXfY5XzUfE45dNip1RrjPXEm98aJIlz0enz62XpjcBcWFob4+HgEd+iIoUOHIDH+ceZrL2sDcpUliCKQcB91S6RZ3J73SIEq/h4e+vXGf9fcUKriY7ic+cZsWdnvoxBEEe3fGAvPUmWx5M320LsUQ/kq/hBEER4ly6Dy8/WRnpoCd6/SqOD7fJ75c26vTlmOUhV8sGZsX5St5Iu+k5aYzddn/AJUfr4BvloQiko166H3hIW52pi1Waq7z8RF8KkZgI+nDcEHYW9AEEX0HDsHpSr4YN20oRBEEa9NXo5ajVvj22WTMa3rC/hmSZjVc9M3bAn8GzTFe+Nfh1ZvQPmq1U3yvBjcE//dvIbN78ywWEbmJhjvnbR8Xp7m6TR4Amq82BzbP1iEGo1aoMOg8Rb/LZOTErB0UEeoVGq8NmU5XgjqbqUtubeXu74OISMD9dt2gSgIaNrlVbPH9xo3FyWe88a7Y3phxdDOePTgrsnjedXVddR0FC/9HN6f2D9HmXNQ2rsKlrzZAa5uHqhUo67Ff+vkpAR8uehtfDpzJIqXKY8eb83O87ow157wyAt5notn2S6e+RWpyYmo6Pc8PEqWsfj8LD2P7O01V1bOazp7/vJVq0OrN+D98f1R/YVm6Bu2xGwZ2Y+x9Bq39G+axVq5cv6b4ojrQBBFRP2wAQv7t8GKoV1QvloN9A1bYvE1ZMv1a8vfpfy8DiyVkX1zL1EafvWaQBRFlK/ijzKVfI2Pxd3LXCPYu2YAwiMvoIx3FQDAo/t3CvW8OmJTqzVWP+9mZGQgLi4Obu7uSEtPhSAK3LJtaWmpcHN3Q1xcHDIyzN9CYpm1GQrkoWDdDaJoPK7PK1DfeR6qGhWgikmOVid56lR6jYvGNVWrVmm0moxUjVblodJoM1J0WlGjU+vUunRRrQPS9SlatUsxtdolHYKrRie6q6H2ULuoimv06pIalVhS1KhLr6oZ3+dGzDXUfeFFi8358but8PbxQe26lidlyBKxZ7dD16wj5Tl/9g9cj41F1apVkZqagt07dyItLQ2jx43D/f8yPzBm/6Ynq9euZOky+OSjD+GiN6BtUBAaNn7Zpvr+vXkThw/sQ6t2wbh/7671A6yIjo6Gt48Pdl5MRI16md9Wpqem4NalcxjR5WU8+vc6gMzAT63TY+jgQbh08SIC6tXDhx9+iMSE+FxlFn/OGx/t/B/K+9aBVm8wprut7gTvypbH76eni7h9IxFJw/8PZb7qioAuCTj9oxvu9/0KGSUrG/NlpKfh/q3rCB/aAcVLP4fp3+SeTKio4rlxnCnBmcMxl+27IEndhVXvjx8uxLHvv0a710ej/cBQycvKXka7fqPtdn0XVrmOVJjXASnbhTO/oYtfMVyPjYW/v7/ZPKlpabh48SK6dO2OhPhHDm6hMrh5eGLnD9/Dz88P+nzca5eeloYKPpUx4YL7FlWG8F+GqLqfkSrcF5LFOAHC44w0VbwW6qREQUg2pAvJgDZVqxLShDQhLV2VkZauMaSJj8UMjT4jXcxIz0jSpwupGckZro/SxEou/sKFmxDL/glxy+Zs61qoct78Yp3s77HLD4ONi4/amo/IEnOBndyotTpkZH0bDECECndu3YKHix6pqSnIENIhpolY/8WXiNi7F8Edg5GYGJ/rOym93oB/b92CCBUEwFgmANy5fRv34vK4MVsQkZGSCBcXTySXrYc/I08j7XEa1BeOILXJ0x6S1WN64N6NayhXpTo6DJ1kUkdRJ/dzM71DzVxpi/f+bSanckhxjhfv/bvQ6v37t8z7E/0btXzmOuxRVvYy7Hl9F1a5jlSY1wEpm1qbvwk/BAdfR+0DgxCxP9KhdVJuThTY8Q8h2YuY7af568r61Sb19ShCrdEZ72MQVGroXT0Q+esf6NuxJUSISE1JQUZGOsTkRHTq3AmJCY8hCDkWGzcYoHN1x77DR6D38IagUj+dhQWAZoLl2RuNeZB5j8SDRiPw6L/LSKvaBIJ7KZNy3vrgR5Njst9/UdTJ/dws2P1XrjS5tdFWWc9FivbP6lTL7Lm0h7c/3Wfcf9bnZo+yspdhz+u7sMp1pMK8DkjZ1Bod8vPZQhSsL2jeuVNnxMXFoVz5cggJCUH/fv2gyeekIlni4uIgCgJSUlIw8I0B+PqbDfmefbJ9+2BEROyznpEsco7AjjfZkT3lfZMdABvGMMvgJju1Vvs0dlJp4OJVGnfu38WX2/ag5Qs1Ua58ReMhSemAyuABTY6ibty+icMnjiJeVxJlvUoDKg1MPh+VqAhbCCKQWq4WUK7W0zYSkdG8XX9BIbEHFSJeB2SJWqsFxDSb3z9zflFrzr179xB1NAq3bt3CksVLkJSUhOHDhxe4jYIgQKfT4duN/2dzG7J7FBeX72PIlOwDO8ZsJEdKmE1JrTWYfEutdXWHV0VfPLh5Bd8cOIGkxwfzODqTq0dxFH+uEkpUqAqtq7tivvUmUpr5Ic9j9o4/pW4GSYzXAVmi1hoApNmcP3NBcxvKVatQsWIFTJgwHmFhkzBs2FAAQLOXm+PY/47m2n+17+v499/b8PbxxswZM1Cj5tOlYrLqzJ4/NjYWy5Yux59//olKlSrhiy8/x2uvvo6bN2+iRMmSGDp0CLp06Wws4+WmmfMTZB1/7vx5LJi3AAkJ8Zg6bRqaN29m8zkwq4AfY5Ty6Uf2gZ29hfToJXUTyAkoIbDTGVyQlp4GtSbrZa6CS/GSKKnTo1ipckhLtr62jc7FDS7uxWEo5g4BKuMMmURkXzN+PM97q4jXAZklZKRDZ3ABkHtyM4vH2PhFbFa+8hUq4L9790yOM7cfGxuDAwcP4NChn7BixUqs++TjPPMvXrQErVu3xorwFUhMTIIgiFiz9j14FS+O8+fPY/KkyejU6emkhlFHo0yOD18RjkmTJsHd3R0LFizAyy/bNjFdUaWQwI5/5Ehe5DphSnaVynjh5qNU6AxqqNRZK5uooHP1gM7VI19lCew6JypUS7rXxrTvz0vdDJIYrwPKSRQEpKWkonJZLyDpv3wdl598N2Kvo1TJkibHpaelQaPR5CpPp9WidauWWLF8uUm6uf1//vkH4eEroNfpoC+uw86dO7Hp/zbixs2b0Ov1SEhIsFgGAMRci0FoaOYMvFqt1ubnZWeJCwMAACAASURBVH/K+CAk/8DOhvNoy6mOijqCR3GP0LlLFzs1jJyVDbfYWe2xk8EtdmhTtRgOx6TgZnw6hPwu10JEDjVxyymkPlnomoouXgeUk1oFeJdwQatKBlz5y/bPF4KNQzEzhAzcunkLq95dhW7duxqPK1WqFH4/+Tvq16ufq7ybt24iOvoiypUvZ0zXaDWIiYmBt4+3Sf4qVatg585d6NylE5KSkvDhBx9i6tQpaNykMRISEtA1pJsxr5ubG2JjY+Hm4Qav4l4AgEo+Phg4aCCaNGmChw8f2vy87E7+MR0AJQR2NrEe2qUkp2B86DicO3cWkyZPgVrt2LXZMzIysObdd7F500Y8ePAALVq0xCfr1zu0DWSrvEI7c9eZrWmOktnukh7F0KN2MQnbQUS2+vCDDzBq9Gipm0ES43VAebmSj14jW3q2vLy8ENguCGXLlkGH4A7o+8orxuNGjBiORQsWIykpCZUrVzIpb+KEMKSkJGPylMnG9B7du2P48BHYunWLSf2TwiZi5cp38OGHH6Lcc+UwcMAAvLNqFe7fuw+dTofyFcob877aty+GDh2KcuXKY/36TwEAYZMmYuXKVZg/bwEqVKiAzz//DAAwZfJULFu+NNfPos5JAjvrAoOCsHHzFgwbOgQXoy/i3TVr4OaWx/pbdvbpJ+tw7NhRbNyyFaVKlcSFv7kAqZLlXOuNiOhZ8MM8AbwOyH5smV1y27YtFo9r164t2rVra7a8r776Ilf6qFEjMWrUSADAgQORxvQqVargvffWmNTRvUc3s3W+3u81vN7vNZM0Pz8/fPjh+7nyLlm6GIIg5PpZ1Dm226qw2PgFxgsNG+KjdesQGbEPn3z8sfUD7Gjzpk2YN38BKleuDHd3DzR88UXjY106dcTzNaqjedOmAIDffvsVzZs2RYuXX8bx478Z85lL7xAUiCtXrgAALl6MRoegQHRoH4TLly4BAC5cuIBOHYId9TSdg7UOOxFQZdts7thzFGUMAyciIqL8sPL+rkLmLJe3b9+GXm+AKIp23wAUSrmO2PQGA27fvgW1WmV92SqFUkCPnf0+oZ48cQIjhw9HUPtgDBsxwuSxHdu3GfcLY+bMG9evw8/f3+xj586exfm/Lxi/aZg9cybmL1wIAJg3Zw527t5jMb1rt+744fvteHv8BGz/7jt0694DGq0G27/7DhMnTcK2LVvQ55W+dn8+RVXW1Shku8eOMRQRERFJTaPRwL2YO47/+ivad+wAPIpDSnKSXevYvz/CruU5isHFFW4exRGxdze8PDyNk8I4GwUEdvYZ9rY/MhKjR47AkGHDzN5jV9jLIJQtWxbXY2Ph6+cHAKji442rsdeNj2cfFnrl8mW0aNkSoihi9MgReaZ3694dffv0wYiRo7Bl0yZs/+FHaHU6vNKrJ0LHj8euXTuNgSHZjxJmxSQiIqKiQ61Wo3gJL9x/cB8/bN+OevXro3yFigAye/PEIvoTyJzwZf+BAzBotShewivfc22IT/6TO0UEdvY4jwYXA1atXiPZrJgh3bph/ry5WLYiHJ6ennnmrVq1KqKOHAEAYyBoKb2itzdq1qqJkcOHoV69+qjonTkbUaXKVfDOynAEBASgRIkShfGUiIiIiEhG3Nzc4OPjgxs3buLwoYN49Pix1E2SBU8PD5R7rhwqVqxQsDk2FHKbizICO6usR9EtWrR0UFvMGxf6NpYtWYwuHTvi8eNHeL52bYt55y9chNBxY6FSqfDumjVW04ePHIlXevXClu++M6b16t0bE94OxafrPy+cJ+TExCev3ry/ncm7x07ab3WU8a0SERER2U60IbpQq1Tw8vKCXq9H6TKlkWznoZhK5eLiCg93dxQrVsypR105SWAnfwaDAbPnzsPsufNyPZZ9SCYAvNS4MX7+9bdc+Symv9TYpIzk5GSUKlUS5StUQKvWrZ+98ZSb8/5NICIiIgVTqVRwc3ODq6ur1XV3iwqVSuXwpc6k4DyBHa9bo9YtmkOn02PV6tVOe3NooRKz/bRwXVmN66S+HqWun4iIiOwrn+/tRSGQIVPOE9iR0S/Hf5e6CU5MzPEz5z4RERERkeMpIJS3792K2Zc1ICIiIiIiypsyvsSXfY+dQiahoSLGmW+8JSIiIqKnlBKLyD6wsy2yY/hH9iTm2HI8BACiKnea2YxS4OuBiIjI+fD9XTIKOe3yD+xskHWuU2yc0tXWfFR0WQjrnrLSYSd1WEdERETOh+/xlBenCOyIHI1DMYmIiIhITpwjsGPPNNmTDSMxraVJ3mXH1wMREZFzycf7uyiKSEtPR1pqaqE2SSl0ej10Wu0zfTGvhDUBFRLYyf9EEhERERFJLS0tDWqtFlWq+aGYm5vUzZGFxIQExMZchZCWBp1OV4ASlBGLKCSws5/2HTtJ3QRyAirV05VCRFGQsCVEREREmdLT05EhiKj9fB0kJSUiMf6x1E2SBY1Wi1rP18Efp09BlZ4OrdY5QyAnelbKiKRJCbIvQp7zusr8PXtPvvmueamvR6nrJyIiIvvK+71dFEXExT1C7YAAJCTEIyM93UHtkj8hNRWiIKBKNV+c/+MMSpYs4ZTzJSgisLPHkNZjx47i0aPH6Nix47MX5iCNGzXCr8ePS90MMkOlzvbHgB12REREJLGMjAzExcXBzd0djx/FSd0c2UlNS4WHZ3HExcWheHHPfPXaKeD2OgAKCOxsOZG23EuakpyKyWFh+PP8eYyfMAFqtdrKEfZVw98fF6KjLf5uzsOHDwu7WWRGHnOnGFn7lodzpxAREZE9WXt/F0QRycnJEAURosBvnc0Rn5wjQSmRWj7JPrCziQ2fZNu2a4uvN2zAqFGjcOnSJawID4cbbyglc2yJ7GwpQyqM7IiIiJxPPt7fBQZ2RZJju60kVr9BA6x9fy0O7N+Pzz9bL3VzjM6cPo32gYFo2qQJDh44aDZPcPv2CKhTByGdO+Hc+XMObiEZPfmjmvltWObGQIqIiIjkRBCEZ966dglBi2bNEdQuEKNGjsLZc2ftUq6Um7N/XlNAj539PjWfPnUKb415C+0CAzFoyGCTxyL27DbuF9bMmTX8/c2mz50zB/MXLICHpycmh01C23Ztc+W5euUK/jh3Dvv27sW82XOwZdu2Qmkj2UYUnPwvAxERESmWPYZi3v3vPxw5chjp6emIijqKOTNnY8vWLXZonRIp43Ofk/TYWQ/+Dh44iDf690fv3r2x9v33cw3DbN+xk3ErLBeio41bdpcvX8bAAQPQs3t3XLt21eLxBoMBwR064J9//im0NhJgy1hMURSNm+UypMIuRCIiIudj+/u7XXq3spWl02mRlp4OQRBw9tw59H31VYR0CUFU1FFj/v79+iMwMAhduoRg4cJF6BrSFZ06d8H27duNeU6dOo0+vfvglT6v4PTpMxAEAQMGDkTMtRgIgoDLV65gwMCBedZjj+dU8PMvbwrosYNdzqPBRY/l4eGynBWzatWqeGvcWLRq1RoPHjwwpmu1Wly9ehVVqlQBANy4cR1//vkXvL19JGopZbEc0BERERFJy1732LVs2QoA8FzZspg5awYEQcDKlSsRNmEi3N3dsXDxIjRt2gQAcPXaNURE7MP5839i1qxZ+Prrr3At5hrmzpmHkJAQAMC7q95FaGgoAGD1mtX4ZN06tGvbFhGRkXjzzYGI2BeBwHbt8qxHEgr5zlwRgZ09zmOzZs3tUErhWLhkMebMmIUJb49HpUo+2Ll7DwCgX//+6NWjJ6KOHQUADBr4JpKSkrB02VIpm1ukiWb2iIiIiOREEO0T2B08dAAxMbGYOGEC/Pz8IIgCYmNiMX7CBACZnRDZ69LqtKgbUAcJCQko7lUcdTzr4OHDh8Y8sddj8cKLL0AURcTMjYEgCmjbri3Gvz0er/Ttgz17dmPt+2ut1uNoConrlBHYWaWAs51z+GX23+vUroNt32/Pdcz0GTMwfcYM4+8R+/cXXgPpqTxHYtp4oXEkJhEREdlTPt7f7bXcgSgI8PGuiPr162PLpi0YMPAN+Hh7Y8DAN9C4cWM8jIszqUsUBKjw5JaVJ/vZ21PRuyKO/5a5RrOPjw9EQUDZMmVQtWo1zJk9FzVq1EDZMmWe1Gu5HjJP/vfY2WkdOyJb2bLagSCKxs1SGVLh64GIiMj55Of93V73o2Xt9+zZA3v37YUgCJgwYTy+3vANQkK6YfLkKWbzW9p/660xePfd1Vi9ejVGjx5lTO/TpzeOHz+OPn16G9Ms1SPdPXbyp4AeO35MBXL3+JHEsl+Sea9VTkRERORQ9ghi9u3bYyzHz88PX331JQRBgK+fL9a+tyZXXdnzW9qvU7s2Nmz4KtextWs/j3379pikWapHGsqIRRQQ2NnC9uAvYs/uQp35kpzBs65OLjUlt52IiIjMy/v9XQVArVHh9u3bMBgMSE5KcljLlMDF1RW3b9+CWqNy2u/k5T8Uk0iGrC93QEREROQ4Go0GbsXc8duvv6B4idJwcS0mdZNkw8W1GDy9SuG3X3+BWzF3aDQaqZtUKJTRY8fPziQXWddi9oCO1ycRERFJTK1Ww6uEFx48uI/t279D/foNUKFChcwHVcj8vFIUfwK4dfMWDh76CS56HbxKeEGtzmfflkIGQykjsLORwcXVrvmIiIiIiJTCzc0NPj4+uHHjJg7/dACPHz2Sukmy4OHpifLPlUfFihXg5uYmdXMKjewDO5sDZAVE0aQQYrafFq4rq5eb1Nej1PUTERGRfdnw3q5WqeDl5QW9Xo/SZUojOZn32QGAi4srPNzdUaxYMahU+b/DTikfq2Qf2GXK+3QqpHeUFMKW5Q5sKUMqfD0QERE5H1vf31UqFdzc3ODq6sq5AJ5QqVT5H35pQhmfrhQS2FmjjJNNSpFXaPfkd5M/lOauPYZ2REREZE/5e39/tkCGlMhJAjvbhfToJXUTSMGejtIUc6UREREREUlF/oEdOx9Ihji0gYiIiKiIUMjHviLTRxsVdQS7du6UuhmFpkFAXbP7AHDl8mW0adXSLvW82KCBXcpROpVKZdyIiIiIiKSmgMDOhhDZhl69lOQUjA8dh2VLl0AQBLu0LD+q+Hjn+5icAVpeHjx4YHYfAPbvj0RgYJDZduS3Xf/9d9dqnvy0W5Y4ewoRERHJDd/fJaWEU6+AwM4+AoOCsHHzFmzetAkjhg1DQkKC1E2yKmeAVlD7IyMRGBRkl7JsYa92y5pK9XQjIiIiIpKY7AO7zC8nrMfItkTRLzRsiI/WrUNkxD588vHHz9y2ggps0wa1qvuj0QsNsG3rVmP6mwPewEsNXzDJW8XH26RXrW3rVvCvVhVNX2qEzZs2Wq0rLi4O0dHRaPjii1bztmnVEjX8fBEc2A5nz/5hTI86chiNX2yIVs2bmeTPqy05233q5Em0btEcDRvUx/7ISKttkVKey9hlJQrZNjMZpf5WR+r6iYiIyL743i4dUSHdpfKfPMUmtp3skydOYOTw4QhqH4xhI0aYPLZj+zbjfmHPnHnxYjT+uXQZv/z8M8ImjEev3r2RkZGBwz/9hF+O/26S92rsdZPfN23ZihIlSuDUqZMYPHAgXun7ap51/XToEJo3bwGt1vo/9ZXLl3Hh4iXs3rULM6dPxw87Mu9JnD93HhYsWoQaNWuZBHd5tSVnu2fOmI7FS5fB09MT40NDHdqDmH/Wx2Ja76jjWEwiIiKyJ9vf30VRRFp6OtJSUwu3SQqh0+uh02qdfm4EJwnsrNsfGYnRI0dgyLBhmDR5Sq61PRy9DIJer0ez5s1x584dAJmTcXTo2BGfrluHGbNmmT1m86aNWPfRx4iJuQaDwYDHjx9brefA/v0IDAo0/m4wGJCQkAA3NzckxMfDxcXFJL/BYECnzp0xbcpkY1pMzDW0btMWer2+wG25dPEiXn+1LwBAp9NZbbfccVZMIiIikqO0tDSoNBpUqlINxdzcpG6OLCQmJOB67DWI6elO8TnUEmUEdnb4DG1wMWDV6jXo3KXLsxdmJxqNxrivVqsxe85ctGzezBjYeXh44OrVq/D08EDJUqWweOFChL+zCq3btEF8fDzq161jPF6r1eLKlSuoWrWqcd/HxwdHj0Zh4eLFxnwBAfXwxfr1GDRkCNav/wz1c8xyef16LM6fOw8fn0rGND9/f+zdsxvBHToa0/JqS852A0A1X1+8PX482rRth/v379vpDErH2b/xISIiIuVJT09HeoaA2rXrIikxAfGP46RukixoNFpUr/k8zv9xBipVuk0j2UwoZDCUMgI7O2jRwj7T/RemHt26onGTJsbfh48ciU7B7eHj44N9+w8gdPwEzJw+DXfu3IFer0elSk+DrwFvvomQTp3w24kTxv01a9eievXq8PT0NOZbsnwZJk2ciPfXvoeatWohfOU7Jm3o/9prSEpKQvg7T9OXLFuOiW+/jbAJE+Dr5wcAebYlZ7sBYNmKFZg+ZSrGjhmDypUrI+LAQfuePIfJfFWbxnUKeKUTERGRUxNFEXFxj1CrTh0kxj9GRka61E2SjXQhFYkJAipXrYa/zp1FyZIlnPJLegUEdjaEyAqIorPfc2ZpP+f9dWPHhWLsuFDj74MGD8agwYPNlj97zlzMnjPXZH/h/Pm57mXz8/PH9h9+tNjOn6KO5koLCAhA5EHTQCyvtuRsNwDUrRuAHbt3W6xXVp51qQOpKbntREREZJ6V9/eMjAzExcXB3cMdcUVhhvJ8ElJTUbxECcTFxaF4cc989top44OVAgI7KqgD+yOx/osvpW6GUxFz/My5T0RERCQFQRSRnJwMIV2QZM1mJRDShcxz5KRzJSgisLN26m1dEqGoOXQkKl/5c85kWVSJxkltRYvXlbXueymvR74eiIiInI/lTyW5CUJGobbFnkK6dMWOnZZHk8mBUgZDKSKws6cd27c5fAZMcj7OOC6biIiInINohx67I0ei8N6a9/Do8WPUDQhA+IpldmhZbg8fPrRLe0kJgZ1SQmQiIiIiIhmwx1DMd95ZhVmzZqJmzRq4eetmoQ7vlP3QUYXEIvIP7Ijk5MkLO/s6duy9IyIiIjmxR6CUkSHAy8sLBoMBVatUhSAI+PPPv7BkyVIkJCQgLGwiXn65KQBg4MA3cevWbZQoUQJvvjkQHTt2AACMGDEK16/Honjx4vj2229w/fp1rFy5Cn///Td8fLyxbt3HAIDu3XtCFIFRo4ajffv2z9z2oso5ArsnvXopyUk2Zbc1HxVRIqzOjGk1sJPymx32chMRETmffLy/2yOwGzt2DMImhkGn02Fc6Di89FIjvPvuaox/OxRu7u5YunQZmjRpDABYuXIlihf3xF9//oUZM2chODgzOIuOjsbOHT8gQ8ic0GX5inC0bNECixcvRFJSkrGdX3yxHn/9/TfCl4cjMDDwmdteKBQw4YpCAjv5n0giIiIiIjmwxz1rrVq2QKuWLfDnX39j0aJF+GbD14iNjUXYpMkAAK1WC1EQsHdfBLZu2YKbt25Dr9cjISHBpH6DwWBs08XoaCxZtAh6nQ56nc6Yz61YMTSoVw/37t+X6f12yohFFBLYWcMuCrKnvLrsbF3wgF12REREZE+2v7/bo8fur7/+RpUqlQEISEpOgSAI8K5YEf3feB0vNXoJcXFxEAQB69Z9grCJE9Co0YtITExE7z59TerPvl+5cmXs2bMHHTp0QFJSEry8ihvzZI2Akv39djKmlroB1vAjKsmRKIrGjYiIiEguRGQGR8+6/d//bUSfV17FvHkLMXL4MAiCgLdDx+GbbzeiR8/emDZ9BgRBQL/XX8OatWvRJaQb+vV/A+XKlTOWgRxteXvcOBw6dAi9evfBhIlhufJk358+fabZn8+yPcs5VQL599iJotWzmZ/gr33HTs/aInJyNtxiZzWgY38dERER2VN+3t8F8dl7vWbPmZmrzGp+1bD63XdM0kK6dkFI1y5m69+160eTtlSqUgnhK1eY5MueJ/v+/AVzIYhCrp+SsB6OyIL8AzsiGeJMmERERCQnKgBqtQp37vwLg96AZE4WaMLFtRj+/fc21GoVnPVTnOyHYhLJSda3ZYL4dGMPGREREUlNo9HA3c0dv/36K4qXLAMX12JSN0k2XFyLoXjJ0vjt+G9wd3OHRqORukmFQiE9ds82FvPYsaNITk5Bu3btjGkHDhyAi4sBzZo1t08TbVTD3x8XoqMdWiflkw1jMa122HEsJhEREdmTlfd3tVqN4iW8cP/Bfez4YTsC6jdAhQoVAWT25olF9CcA3LxxA4cPH4GriwuKl/CCWp3fvi1lfLhSSGBnTd4nOz4+ARPHj8c3336LevXr48zp0wgdOxYrV61yXBNJQaxHdtYnTWFkR0RERPZk/f3dzc0NPj4+uHHjJqIO/4RHjx45pmky5+npifLlyqNixQpwc3MrWCEK+GjlJIFd3oKDg3Fu8GCMGDECH374IUaNGoVBgwcjODhY0nZ1CA7G9dhYlCpVCuNCx6FX7z7o2qUz1qx9H1WqVMGlSxcxPjQUP+7cZTYvScDW1Q6IiIiIHEytUsHLywt6vR6ly5TmfXZPuLi4wsPdHcWKFXPqeRKKRGAHAOMnTMClixfxat++aNeuHcZPmGDyeMSe3cZ9R82cueGbb+Dl5YUzZ05jxLBh6NW7Dzp3CcGOHT9i7Nhx+PGHH9ElpKvFvCQdLnNAREREcqRSqeDm5gZXV1d+XnlCpVIVYPil8sg+sBORueKB1TxWylGr1Qh/5x0sXbIYU6dNz/WP64hgLj093fgtwbatW/DZp+sRGxsDg0GPx4/jAQAhISHo368/hg4dhm1bt2Lzli0W81LhyHsgZmaK6bc9lnJJgwMxiYiInE9+39+LQiDjKEqJj+X/L27HE1msWDHMX7AQxYo5dpagUydPIiE+HocOHYKPjw8AYPnSZQibNAmnzpzB/kM/GfNWqFgRNWpWx9i3xiAgIAAVKla0mJeIiIiIiAhQQI+dzd9PyDiS/vSTT3HkyGGULlMGc+bMBQCMGTsOc+fMxt27d6HX640BHwAMGToU/V57Hd9u/D+reakQZL+PztJ1JedZMeVQPxEREdkX39slpIyTr4DAzhbyHnz2/ocf5EobMHAABgwcYDb/iy82MlkSIa+8VBisz4pp/bZbDsYkIiIie+L7O+VN/kMxiYiIiIiIKE9O0mNH5GjOO1UuEREREeUk/97SItdjl31ZA6ICU2XbiIiIiIgkpoweO2XPnUIKk9fcKcbfsy13YO7ak/p6lLp+IiIisi++t0tIIbc3KiKwU8B5pKJCzPGTiIiIiJyaQuI6JQR2NpzKJ6uYG1xcbSrR1nw57di+DSE9ehXoWFIQUTReU7lXpHyyQLnVa1LCl39W24mIiMh5ZH0+IQko48QrILAjkh+VKvvtqcp4sRMRERGR8ypyk6cQERERERE5G/bYERVE9tkw2WFHRERERBKTfWAnyuhuRd5fR1lU2WfF5P1sRERERM5LIR/1ZB/Y2UJGsR85ATHHZo5Kxssd8PVARETkfPj+TtYo4h470ZYZCAu51yQq6gh27dxZqHWQTGRdT3lcV2qV2rhZLEMqDng9EBERkYPx/V0y4pP/5E4RgZ0cpCSnYHzoOCxbugSCIEjShv2Rkaji4439kZGS1E9PqVQq40ZEREREJDUGdjYKDArCxs1bsHnTJowYNgwJCQkOb8NXX36BAQPfxNdffenwuomIiIiISL4Y2OXDCw0b4qN16xAZsQ+ffPyxQ+u+du0aYmNiMGfePFy9cgXXrl0zPtamVUvU8PNFcGA7nD37h9X0UydPonWL5mjYoL5J71/b1q3gX60qmr7UCJs3bTSmd+nUEc/XqI7mTZvmmS+wTRvUqu6PRi80wLatW43pV65cQd8+vVHT3w+dOgTn2Qa5E0URoihCEATjlpVGRERERCQVBUyeIp8PzCdPnMDI4cMR1D4Yw0aMMKbv2L7NuF9YM2d+u2EDXu/fHxqNBv3eeAMbvvoKM2bNAgBcuXwZFy5ewu5duzBz+nT8sGNnnukzZ0zH4qXL4OnpifGhoQgMCgIAbNqyFSVKlMCpUycxeOBAvNL3VQDAubNncf7vC8YhqJbyXbwYjX8uXcYvP/+MsAnj0at3bwDA5IkT0bFzZ3z59QYkxMfn2QalEEVphuMSERERkWMlJibJKSSxSP6BnUymANofGYnRI0dgyLBhmDR5CtTqp52dhb0MQkpKCjZv2ogHDx5g0YIFAAAvLy9MnDQJLi4uAACDwYBOnTtj2pTJJseaS7908SJef7UvAECn0wEANm/aiHUffYyYmGswGAx4/PixSTlubm425dPr9WjWvDnu3LljTDt37iy++uYbuLi4GNtrrg1Kwh46IiIioqLh1KmT8K1RU+pmWKWQoZjWPkQXfvRncDFg1eo1mDJ1mklQ5wg//vA92rRti6ux141bu8BA7NzxozHP9eux+OnQIfj4VDI51lx6NV9frPv0U0RfvoKjP/8CAFi8cCGmTp+OPy/8g6j//WyxLbbk02g0Jr9Xr14dmzZuRHJyMu7995/FNsiH9QUPBFE0bpbLkIpMvg0hIiIiO+L7u1QC2wfDs7in1M2wSvY9drZcwo6Y/bVFi5aFW0Eevv7ySyxYtNgkbcCbgzB7xnT07vMKAKD/a68hKSkJ4e+8Y5LPXPqyFSswfcpUjB0zBpUrV0bEgYMIHT8BM6dPw507d6DX61GpkmmAmMXWfNktC1+JaVMmY/HCBajo7Y1Dh4+YbYNcmKx0UNDriqsdEBERkR3x/V06/925gzJlywJwl7opeZJ9YEfAj7t250qrV68efti5y/j7T1FHzR5rLr1u3QDs2G1a5qDBgzFo8GCzZVyNvZ7vfNn3a9asie0//GiS11wbFIV/WImIiIiKhNOnT8G3JodiEjklURSMGxERERE5r8D2wShevLjUzbCKgZ0TyN47Zks6BPqhuQAAIABJREFUERERERHZ5r87d5AowRrW+aWMwE4mw96yL2tARVveU6sQERERkbM4ffoU0tLTpW6GVcoI7IhkIzOcMx2KyRCPiIiIyFkFBgWjuCeHYtqBTfNicpogsp+s6TDNTT+VcyUES113kl6PfD0QERE5nWearpueRWL8IyQmxEvdDKucYlbMrMs8JTnJpvy25rP3saQMecZrWT/F3Gnm8kmBf/aJiIicD9/fyRrZB3a8iEmeeFUSERERFQVK+dSngKGYRERERERElBfZ99gpJkSmIoWXJRERERHJifwDO0A2n6Lbd+wkdRNILmRyTRIRERFRIVPIvWHKCOxsmRVTCWebFCKv6VOe5LA66ySnTyEiIiJ74vu7dJRx3p3jHjsHXOfHjh3Fnj17CreSQtK4USOz6S83aVoo9TVp3LhQynUY63EdVKqnm8UypMK/+0RERM6H7+9khQICO+tXsCOu85TkVEwOC8PK8HAIglDIteXWtEkT1K5VC21bt8HOnTvyzJucnIyOHTogNTUVAPDw4UOz+e7d+y9XWotmzVC7Vi00bPAC+r3+Os6cPp1nXeaCxgf37+d5jNzlHdfZtpAd4zoiIiKyJ76/kzUKCOzkoW27tvh6wwZs3boVb40Zg4SEBIfWf//ePfxx7hwWL1mMhQsW5pnXxcUFe/buhV6vz3c9d+7cwdnz53Hs5/+hX/9+ePvtt/PMbylodHYqlcq4ERERERFJTRGBnVy+najfoAHWvr8WB/bvx+efrXd4/RqNBjq9Dl5eXsa0Gv7+VvezO3Y0Ci2aNUNQu3YW61Gr1RAEweQ+sg7Bwajz/PNo1aIFtm3dYpK/hr9/rvqaNmmCJo0b4/vvvrPtySnFk6/LxGwbv0IjIiIicl5K+agn/8lTZHQmT586hbfGvIV2gYEYNGSwMT1iz27jfmHOnJkVPIW/806By1i8aAnmzJuL6tVrWAzuavj7w93dAzVq1MDKlSsBABu++QZeXl44c+Y0Rgwbhl69+xjzX4iOzlXGvshI/HH6DKZOmYzuPXsWuL1yxX46IiIioiJCJrGINbIP7MRs/7clZ2E5eOAgQseNxZuDBmH8hAlQq592djpqGYQL0dH448wZDB82DCEhIcb0jIwMaDQam8qIjY1By5at8hymmTNQ27Z1Cz77dD1iY2NgMOjx+HG81Xo8PTzQ9OWmuHv3rk3tkhcx20/z984J2XozzXd7S/0XQOr6iYiIyL743i6drGFa8qaIoZhWOaBXz+Cix/LwcEwMCzMJ6hwpIyMDycnJUKufBnFlypTBLz//zzhRijlarRZXr14FAPj6+iIiYh9SUlJsrnf50mUImzQJp86cwf5DP5k85uHhjmvXrpmdMMXWYFN2LMyJkp6ebtw3d49d9sc5ewoRERHZFd/fyQrZ99jJRbNmzSWt38vLC3Vr10bFihUxd/48Y/rkKVMQFjYJiQkJ8PX1M3tsv/790atHT0QdO4r5ixZh6qTJmDZlKqr5+tpU95ix4zB3zmzcvXsXer0ePj4+xscGDx2K7l27wtu7Inbs2p1HKcoX9+AB3D08Ef/4Ua5JU9w9PPFQ4bOBEhEREZFyOU1g5+xfYPx6/LjZ9K7duqFrt2650rMPp5w+Ywamz5gBAKhbpw527bEcgJm7X27AwAEYMHCA2fyjR4/B6NFjLJZhrjy5yz4QU63RQqPVQoCI/RERaBsYiDLPlTe53lQAHsc9wuGfDkKr1UGj1UKtkfal5eyvByIioqKG7+1kjdMEdkSFQa1WQ6fTorinBx7ExeG7bdueLEyuggpPhmI+6bzTanUoW7o0kpKSJBuuS0RERERFkyICO35DQVLS63RwK+YGV1dXpKenQ61SQaVSP7nHDlA9iex0+szeuoyMDIlbTERERET2opTbG+Uf2Im2zELjmNMdsWe3w2bAJCnlnjnFYNBDo9FAFAWo1JmBnTrHBCoatQaCKOKRsQypKOXPDxEREdmO7++SEZVx7uUf2BHJhFqthkqlgdpCYAcAAnvriIiIiEgCzhHYKSOIJqUws9RBgcqQCl8PREREzofv72SFcwR2TxhcXO2az97HEhERERERFQZO3UdERERERKRwTtFjx55psieOxCQiIiK54fs7WSP7wE604RJWwbiUGNEzU+HZrykpr0e+HoiIiJwP398lpoComkMx8yGkRy+pm0BERERERJQLAzsiIiIiIiKFY2Bno6ioI9i1c6fUzSiQFxs0cEg9DQLqOqQeIiIiIiIyxcDORinJKRgfOg7Lli6BIAgOr18QBLz/3nt4uUlj1PT3w9DBg2w+9r//7tqcd++ePXi5SWM8X6M6Br7RH4DtAduDBw9sroeIiIiIiOxH9pOnyEVgUBA2bt6CYUOH4GL0Rby7Zg3c3NwcVv8Xn3+OAwf2Y8M336J8hQr458KFQqln1ozpWLP2fQTUq4fYmBgADNiIiIiIiOSOPXb58ELDhvho3TpERuzDJx9/7NC613/6KRYsXIRqvr5wdXVFvfr1AQC//fYrmjdtihYvv4zjx38z5o86chiNX2yIVs2bmZRz6uRJtG7RHA0b1Mf+yMhc9WQIAsqULQM3NzfUrFXLmF7FxxtVfLwBAB3aB+HypUsAgAsXLqBTh+Bc5Virh4iIiIiI7Ic9dvlw8sQJjBw+HEHtgzFsxAhj+o7t24z7hTVz5r//3oafv3+u9NkzZ2L+woUAgHlz5mDn7j0AgPlz52HBokWoUbOWSXA3c8Z0LF66DJ6enhgfGorAoCCT8uYvWIjX+/aFXm/AwsWL0bpNGwDA1djrxjw9e/XC9u++w8RJk7Btyxb0eaVvrnZZq4eIiIiIiOyHgZ2N9kdGYvTIERgybBgmTZ4CtfppZ6cjlkGoWLEiYmKuwd+/ukn6lcuX0aJlS4iiiNEjnwabMTHX0LpNW+j1epP8ly5exOuvZgZiOp0uVz1dQkLQJSQEp06exJjRo/C/X37Nladb9x54pVdPhI4fj127dhqDyfzUQ0RERERE9sOhmDYyuBiwavUaTJk6zSSoc5Ru3XtgzqxZuHH9OhLi43H27B8AgKpVqyLqyBEcjYqCr5+fMb+fvz/27tmNlJQUk3Kq+fpi3aefIvryFRz9+Zdc9Zw8cQIJ8fFQqVRISkwEAHh4eODq1au4f+8eAOC5555DpcpV8M7KcAQEBKBEiRIAAK1WiytXrthUDxERERER2Q8DOxu1aNESnbt0kaz+MWPHonbtOujRrSteqF8P4cuXAwDmL1yEGdOnYeaM6Zgzb54x/5Jly/He6jWo+3wtk4Bv2YoVeG/1GtSpVRNvvP5arnreX/seGtQLwPChQzB7bmZ5w0eORKfg9nit7yvGfL1698ZHH3xgMgxzwJtvIqRTJyQmJlqth4iIiIiI7IdDMRVCr9djxqxZmDFrlkn6S40b4+dff8uVPyAgAJEHD+ZKr1s3ADt277ZYz2eff5Erbey4UIwdF2r8PTk5GaVKlUT5ChXQqnVrY/rsOXMxe85cm+ohIiIiIiL7kX9gJ0rdAMqpdYvm0On0WLV6NTQajdTNISIiIiIqVKICghL5B3YkO78c/13qJhARERERUTa8xy4fsi9rQEREREREJBcM7IiIiIiIiBSOgR0REREREZHCOdU9dinJSXbNZ+9jiYiIiIiICgN77IiIiIiIiBSOgR0REREREZHCMbAjIiIiIiJSOAZ2+dC+Yyepm0BERERERJQLAzsiIiIiIiKFY2Bno2PHjmLPnj1SN8PhGjdqJHUTiIiIiIjICgZ2NkpJTsXksDCsDA+HIAgOr18QBHz04Ydo3aoV6tWti1EjRxRKPcnJyejYoQNSU1MBAA8fPiyUeoiIiIiIyH5kv46dCFHqJgAA2rZri683bMCoUaNw6dIlrAgPh5ubm8Pq//qrr3Ho0CF8/vnnKFe+PKKjowulHhcXF+zZu7dQyiYiIiIiUiR5hCR5Yo9dPtRv0ABr31+LA/v34/PP1ju07i+/+AJz5s5F1WrV4OrqioCAAADA778fR9vWbdCuTVucOPG7MX+nDh1RPyAATRo3xpQpU/Byk6Zo3KgRNn77f8Y8we3bI6BOHYR07oRz588Z02v4+5ttw5nTp9E+MBBNmzTBwQMHjek9u3dHg3r10LZ1G3s/bSIiIiIisoHse+zk5PSpU3hrzFtoFxiIQUMGG9Mj9uw27hfWzJl37vwLX1/fXOnz583D7DlzAACLFizEd99/DwC4dOki/jh3LrPNo0djb2QELl+6jHHjxuHV118DAFy9cgV/nDuHfXv3Yt7sOdiybVuebZg7Zw7mL1gAD09PTA6bhLbt2gIAzp8/j5OnT0MQFPBVBhERERGRE2JgZ6ODBw4idNxYvDloEMZPmAC1+mlnpyOWQahQoQJiY2Pg52fam3b1ylU0a94MoigidNxYk8cMBgMavfQSHsfHo1Sp0ihRoiTu37uXK09whw6YNXOm1TZcvnwZAwcMAADodDqTxxw5LJWIiIiIiExxKKaNDC56LA8Px8SwMJOgzlFCQrpiwfwFuHnjBhLi441DJ6tUqYxjR4/hf8f+h2rVquU6Tq1WQxRF435ON25cx5EjR+Dt7WO2Xq1Wi6tXrwIAqlativc//ADn/vwTB3/6yT5PjIiIiIiInhl77GzUrFlzSesfMWokEle+g1f69MGjR4/wUuOX8Oln6zF7zlxMnDgRKpUK4SvD813uoIFvIikpCUuXLTX7eL/+/dGrR09EHTuKhUsWY86MWZjw9nhUquSDnbuL3vIPRERERERyxMBOIfR6PaZMm4op06aapL/YqBEOHzmSK/+FbLNmWtoHgIj9+/M8dvqMGZg+YwYAoE7tOtj2/fY88xMRERERkeNxKCYREREREZHCMbArwtjTRkRERETkHBjY5UP2ZQ2IiIiIiIjkgoEdERERERGRwjGwIyIiIiIiUjj5z4op2p7V4OJq13z2PpaIiIiIiJRHzE9QIhH22BERERERESkcAzsiIiIiIiKFY2BHRERERESkcAzs8iGkRy+pm0BERERERJQLAzsiIiIiIiKFY2Bno6ioI9i1c6fUzciXBgF1pW4CERERERE5AAM7G6Ukp2B86DgsW7oEgiA4vP5GLzSAX9UqaN2iOT5Yuxbp6elWj3nw4EHhN4yIiIiIiCTHwM5GgUFB2Lh5CzZv2oQRw4YhISHBofXfvXsXFy5ewhdfb8Dhwz9h9apVDq2fiIiIiIjkS/aBnZwWA3yhYUN8tG4dIiP24ZOPP3Z4/RqNBlWqVMH8hYuwbdtWY/qpkyfRukVzNGxQH/sjI02OadW8GRq/2BBRRw4b06r4eJvdP3f2LDoEBaKGny/atm5ViM+EiIiIiEhB5BOSWKSVugFKcvLECYwcPhxB7YMxbMQIY/qO7duM+46YObNy5cq48++/xt9nzpiOxUuXwdPTE+NDQxEYFGR87KtvvsWf589jwbx5iDhwMM9yp06ZjJGjx6Bjp06o4edbaO0nIiIiIiL7YmBno/2RkRg9cgSGDBuGSZOnQK1+2tnp6GUQrl27hjJlyxp/v3TxIl5/tS8AQKfTmeStXLkyypUrh/Gh40zSMzIyoNFoTNKi//kHnTp3hl6vL6SWExERERFRYZD9UEy5MLgYsGr1GkyZOs0kqHMkURRx7do1zJk1E2+8McCYXs3XF+s+/RTRl6/g6M+/mByTkpKC3bt2oUaNGsa0smXL4n/HjiI1NdUkb4WKFXH48E+4eeNG4T4RIiIiIiKyK/bY2ahFi5aS1l+qdGn4V6uK8uUroPcrfTB85EjjY8tWrMD0KVMxdswYVK5c2Tjk0tfPD3Wfr4WqVasiPNtkK9NmzMTboaFIiI+Hn5+/MX3W7DmYFDYRri6ujntiRERERET0zBjYKcSJU6ctPla3bgB27N6dK/3AoZ/M5u/Rsyd69OyZK93P3x+//HYcv/zyM6ZMmlTgtlL+iABUKpUS7sklIiIiIpliYEdGI4YNxcXoaJQrVx5z582TujlFiACIYuZPIiIiIqICYGBHRnv2RUjdhCJMJXUDiIiIiEjBOHlKPmRf1oDIrlQM7IiIiIjkS/43zTCwI5KaqMrsrxMZ3BERERFRwTCwI5KYCAAqJXwPRERERERy5VT32KUkJ9k1n72PJTJPgEqlAidPISIiIqKCkn+PHbsxyMllBnXik59EREREJDdKCEnkH9gROTsREDkWk4iIiIieAQM7IomJIqCCKnMpOyIiIiKiAmBglw/tO3aSugnklMQnq9gxsiMiIiKigmFgRyQ1lerpRkRERERUAAzsbHTs2FHs2bNH6mbk6eUmTaVuAhWImOMnEREREVH+MLCzUUpyKiaHhWFleDgEwfHT0tfw9zfZzLl37z8AQHJyMjp26IDU1FQAQONGjRzWTioAEYBKZFxHRERERAXmVOvYFaa27dri6w0bMGrUKFy6dAkrwsPh5ubm0DZciI62KZ+Liwv27N1r/P3hw4eF1SSyAxFi5uQpjOyIiIiIqIAU0GMnnw+79Rs0wNr31+LA/v34/LP1UjcHAHDsaBRaNGuGoHbtTNJz9url7On7/ffjaNu6Ddq1aYsTJ343pvfs3h0N6tVD29ZtCrfhlE3W/XW8x46IiIhIluQTkljEHrt8OH3qFN4a8xbaBQZi0JDBxvSIPbuN+4U5c2ZWYJa9527xoiWYM28uqlevkSu4yy5nb9/8efMwe84cAMCiBQvx3fffAwDOnz+Pk6dPQxAUcPU6EYZ0RERERPQsGNjZ6OCBgwgdNxZvDhqE8RMmQK1+2tnpqGUQzA3FjI2NQcuWraDX6/NV1tUrV9GseTOIoojQcWNNHnP0EFPKXMeOiIiIiKigGNjZyOCix/LwcHTs2FHqppjw9fVFRMQ+BAW1t5jHw8Md165dg6eHB0qULAkAqFKlMo4dPQYAqFatmkPaSuZl3V2nUkIfPxERERHJkuwDO7l81G3WrLnUTTC5Ry6r927+okWYOmkypk2Zimq+vmaPGzx0KLp37Qpv74rYsStz2OjsOXMxceJEqFQqhK8ML/zGk0UiAKjkc60TERERkfLIPrCjTJZmxKxbpw52ZbvHz1z+0aPHYPToMSaPv9ioEQ4fOWJzPVR4RDFzKKbIyI6IiIiICkgBs2ISOT8Vb7EjIiIiomfAwI5IYqocP4mIiIiI8kv+gZ2MhqdFmBnySPTsxCfDMGV0sRMRERFRNvL/nCb/wI6oCFBxLCYRERERPQMGdkQSEzLXOgDXhCciIiKignKqWTENLq52zVeQY5MzRBy8nICYh8lITRcKXA9Jp66D61Nl+4+IiIiIqCCcKrCTg4gL9/FffCrqe5eGq56nV4nu/+7oGsUnQzHZZUdEREREBcPIw84u37qPl2pUhl6rQQbH1pGNRAZ1RERERPQMGNjZWXJiPLQ6DdK52jTZKKuzjvOnEBEREVFBMbDLh5AevazmEVJT2FNH+SIgc1ZM3pFJRERERAXFwM7OxIw0BnaUP4KY2VvH64aIiIiICojLHdgoKuoIdu3caTVfRkY6MgQobhsZ/ILZfVu20R1fkrz99tykwXGYRERERFRw7LGzUUpyCsaHjsO5c2cxafIUqNUWYuKMDKQXQs/LkObV8NnRy/k6JrRzQ6zedcKmvPFxD4ztzr5vi0cP7lrMn73dE7s3weMH96F3cYWPXy30GTMV1Z6vjyHNq5kck9/naW+O/rZDpVIBKhUXKSciIiKiAmNgZ6PAoCBs3LwFw4YOwcXoi3h3zRq4ubnlyicIGcgopIlT8ltufNyDfB2TPW9+68orf9ZjD/+7g48PRyM9PQ1nju7HR7PHYcmWwwCAdVGXCly3vTm+G1vMthERERER5R+HYubDCw0b4qN16xAZsQ+ffPyxhVwiMgT7bwCM+7P7B+OtoDoI69YYx/Z8Z0xfHTYYk7o3MTlmeAtfDG/ha0yb1S8Io9rUxJSezRC1c7PZ8rPvXzx7CjNfbYuJXV/Cqaj9xvRzvx7B5B5NMaNvG5P8ebUbAASokCGI0Oh0yEhPzZUn+5bz+ThqczRBzFyknLfYEREREVFBKaDHTj6fdk+eOIGRw4cjqH0who0YYUzfsX1btlxuhRYcZJV7+9pFvBtxHtGnf8OGpZPRKKg7hIwM/PnbESzcctSk/rWHok2ODV31DdyKe+Hqn6fx0bRhaNyhd67ys+9/u2o2Xp2wAK7unvhy8STUbtoWALD5vcV4JXQuylergXn92uX5nLM/NqqVHwCgxHMV8ObMVcbHstKz2mvp+TglUQSgevKTiIiIiORGCR/TFBDYycP+yEiMHjkCQ4YNy3WPXfZlEE5+FYH0QpqAw6RcjR6+9Zsi7v5dpAuAKKoQ0KI99m9aj24jp5o95te9W3Bw03rcuxUDrV6P5IR4k8fN7f8bcxlrJg7IrFKrM6b/dysG1Ru1glanz922JzIy0qFSqUwee/dANO7EXMLaiW+gnG8t42PvHog2KcfS83FGmffYibzHjoiIiIgKjEMxbWRwMWDV6jWYMnWa5YlTAEClLvShmFn7okpt3BegQteR03Fk+1fGfC5u7vj3+lU8un8PGYKIHz5ahs5Dw7Bkx2nM+PqQSZkajRa3Y6/k2i/jXRWD5r2P5XvOY8aGQ8b8z1Xyxekje5GSnGxSToYg4tLZE0iMj8fZ/x1EqfI+udpdyrsa/Oo3xsEtn1scimnu+TjrUEwgcygmEREREVFBscfORi1atLQpn1qjccjkKeb214x7BdUCGhl/b9VnCFaO6IaS5SpiwrqdCHxjLLatmYNH9+9Cq9NnBl1P8jbt1g+rRvfErI1RJvu9JyzEd+/OwdeLJqBUeR9M/GQXAKDX2wuwafkUbFwxDWUrVTNpz8HNn+HC8cPwKFkG3d+abbatzXsOwtcLxiGw/1sAgIlB1Y15lkdcMPt8nJnzP0MiIiIiKkwM7OxMpdUWynIHi/f+bSzX0v6UDZkzTGb93urVUWj16ihjWpOu/dGka3+TcrPydho+DZ2GT8u1X863Nka/tzVX/nJ+tRG6bmeudADoN/s9s3Vkb2s5v9qY9OUBpAsiFu/922z+nM/HWQmiAJUq8ycRERERUUEwsLMztVbv/JN9kF2pnqxhx3vsiIiIiKigGNjZmUarY2BH+SNmThbD8ZhEREREVFAM7PJhx/ZtJjNgmqNzcUNqajo0Wp5ash0764iIiIjoWTD6sLMq5Ush9mEi9K7FoFZrpG4OKQSHYRIRERHJmfyHVjGws7P2NUriwKXHuB6XijQxXermkCKIT1a9lP8fDCIiIiKSJ6cK7FKSk+yaryDH6gB0qKoHoC9wHSSt//3k2PpEAOAtdkRERET0DLhAOZHURGTeZMfIjoiIiIgKSPaBXRFYm5qKOBUAlagC77IjIiIiooKSfWBH5Ow4FJOIiIiInhUDOyIiIiIi+v/27jw+rqp+H/hzzp01a9Ome9MtLYW2FiogrVBKgQJlEwQqyhdUZC0UBBSQRVBB2X6ooOzgirKKslhW2cSyg0DBNt3TLW2aNOtMZu49n98fs2QmeyczmUzyvF+EpHc599w7k8k8c849h3Icgx1RlgkECgrCNjsiIiIiSlEOBDu+2aWBTSkAipOUExEREVHqciDYUaJpU6d2+HNH/24rGAxi0VFHIRQKAQAO2H//9FeQdp9BZAQVk+2KEBEREVGuGlDz2FHXfD4flj3/fPzfu3btymJtKBHHxCQiIiKi3mCL3QB19FGLsM+sWThw7lz8/amn4ss7auXrrqWPMkxFYx37YhIRERFRithit5teXPbPLtcfsejoPqpJ19asWY1PV6zAu++8iyuvuBwnnHhih9utrKjo45pRW5LwRURERESUCga73ZTN4GbbNlRCq47X60VTUxPy8/PR1NgIn8+XtL3H48Hcr87Fjh07+rqqtFt4kx0RERER9Q67YuaAjz78EE2NjXj11VdRVlYWXz5z5pfwpz/+Ec3NzfjDH/+AWXvv3W5fy7I6LbewsAAbNmxAbU1NRupNPWSivTCZ64iIiIgoRWyxywEP3P8A3njjdZQOH47rrrs+vvxnN/4MP7ryR7j3nnuwx7RpuOmmm3ar3DPPOgsnHH88xo0bi2ee67qLKWWQUq1fREREREQpYLDLAb+9+64Ol5eXT8Fjjz/e4brEe+c6+3nJkguwZMkFaaol9QZHxSQiIiLqvyQHBkNgV0yiLBMIICbynYiIiIgoBQx2RNkmEumGmQsfBRERERFRv8RgR5RlKnp/neI9dkRERESUIgY7oiwTiUx2wAY7IiIiov6q/79RY7Aj6gfYWkdEREREvTGgRsX0+vxp3S7d+xJ1REX/z2hHRERERKliix1RlgkiI2P2/wZ+IiIiIuqvGOyIsk6i7XWMdkRERESUmn4f7DigBA10nO2AiIiIiHqr3wc7ooEuNm4Kx08hIiIiolQx2BFlm0RHxWSLHRERERGliMGO+qXZs76U0fL3mz07o+XvDkn4IiIiIiJKBYNdjjhgv30xZdJEzNxrLyw++SR89OGHfXr8tkErGAzisAWHIBQKpVTexLJxSV9ty6utrU25rm3L7kh19Q4A7c8j04GyY9LmOxERERHR7hlQ89gNZFVVVVi7YSNCoRBefulFXHjBEry1/O0+O37boOXz+fDKq6/1qsz1lZuS/t3b8roquzNtz6M3gTJlKtoVk/fYEREREVGK2GKXQ7TWMMZAEoZPPPboRZg+bQ8cNHcuAODdd9/BQXPnYt5Xv4r33ns3vt2C+Qdj2pRyHHn4Yfj000/iyz/68EMcMu8g7Dt7H7z80kudlgugXQtY4s+dlfOdM07HV/b9co/Or7PWtXSUDQBvvvE6DthvX8w/6MAeHbfPmOj05Ca71SAiIiKi3MUWu930zFNPdrn+uBNPytixJ5aNQ0FBIfbaay/8+o47AQCfffopVvxvJYyJpIIfX3MNfnrDDQBDukKdAAAgAElEQVSAn1x3HZ795zIAwLq1a7Fy9Rr887nncM1VV+EfzzwLALjm6qvw85tuRlFRES65+GIcvnBhh+UCXbeCdVSO4zh4/bXX8PZ773d6Pt2Vm86yf3r9T/CzG2/EtD33ahfuBhKPx5MU/omIiCj3iQg8Hk+2q0H9WA4Eu/7zBjWToa0nOgtA+fn58Z/XrV2LeQcfDBHBkvPOTdrO6/Xi6GOOwY+uuDy+bM3q1fjWqd8AALjd7k7L7U5H5SilcNSiRXjgvvtw9bXX9vh8MlX2xo0bcMiCQ/vfi6JSEEja5jsoKi5CIBDE6y8ug9ZslCciIsp1xhgEAkEUFRdluyrUj+VAsKPdMWnSJLz5xhsAgPIpU5LWbdpUiRWfrUBZ2fj4ssnl5fj+JZdgwaGHoaamptNyCwsLsX79ehQVFmLosGHt1ndUjtYaP77uehx80IEdhq+uuFwurFu3DpMmTUpb2VOmTsXzy/6JI49a1OV59j2J3GOXpg8x/D4fLK3R3NzcLqwTERFR7gmHw/D5vP3vw2nqVxjsBpif3nAjLr5oKZRS+NUddySt+79vfhOBQAC33X57fNnNt96Kq664EksvuAATJkzAi6/8q8NyzznvPBx95BEoKyvDCy+/0m59Z+Wc+LXjccCcObt9Hmd85zs47uij8e4HH6RUduJ9c7HWu1/cfAsu+/738YNLL20XehPPs68JBCr6PR1KR45KSzlERERElDsY7HJEZ90W2y7/ygEHYPk773a47Wtv/rvdsi99aRae+ec/uy136UUXY+lFF3e6TWfldHYPXEfnk7jsx9ddjx9fd33aygaAWbNm4aV/tQ+uidsvvehivPr8cx3unzEGkW6YHDyFiIiIiFLEG3CIsizSDVNFvxMRERFRf5ML49Ix2A0SPR2ohPpeurtiEhEREdHgw2BHRERERESU4xjsiLIsMtUBW+yIiIiIKHUMdkRZpkRBRb8TEREREaViQI2K2RIMpHU7oj7DgVOIiIiIqBfYYkeUdRINduyKSURERESpYbAjyjKBAiQ2NiYRERER0e5jsCPqBxRDHREREVE/1v97Vg26YHfEoqOzXQWiNtgVk4iIiIh6Z9AFO6J+RyLTHUAY7IiIiIgoNYMm2L311r+xbNmybFeDqB2lotMdcGRMIiIiIkpRv5/uIF2NGC3BEC7/wQ/w+YoVuOTSS6F1djLttKlTsbKiIiPlJoodo7Pl1DNutyfj+5loT0zDBjsiIiIiSlG/D3bpcuhhh+JPf/4zzj//fKxZswa33nYb8vPzs12ttOostDHMpc7lTu1XZHf3Yy9MIiIiIuqNQdMVEwD2mT0bv/ntb/DKyy/jdw8+lO3q4Kgjj8TM6dMxf948PPnE4wCA4489BuvXrwcArFmzGscfe0yn21LmeTyptdjt3n4SHRWT6Y6IiIiIUjNoWuwA4OOPPsKFF1yIww4/HN/93plJ615c9s/4z301cuafH34YQ4YMwX//+zHOPftsnHTyKTjm2OPwzDNPY+nSi/D0P57Gsccd3+m2bcW6XbZtoetsOXVPWy7k5+VDetikJiLw5/mhrZ7/aikAUJzwgIiIiIhSN2iC3b9e+RcuvmgpvvPd73Z4j11fhDnbtuMDZDz5xON48IGHUFm5EV6vBw0NjQCA4447Dv932v/hrLPOxpNPPIHHHn+8023bYlfM9DPGYNLkydiwYQNcLhcsy+py22CwBRMmTOhxEIxjqiMiIiKiXsiBYJee7mlenwe33HYbFi1alJbydsdHH36IPfbYA/9ZvhxlZWUAgFtuuhm/uPkWHDz/YDQ2NeGA/fYDAIwZOxbT9twDSy+8ALNmzcKYsWM73ZYyr7G+HhMml8Pn92HTxkqEQmFoDSiloZWKBPVoWFdaY+LkyRg5ajS2bd7c42NEZjtQvM+OiIiIiFKWA8EuPQ488KCsHfuB+x/AG2+8jtLhw3HdddcDAC5YehGuv+7H2LFjBzweTzzwAcD3zjoLp33zW/jLI3/tdttEiSNgJrbSdbacuuc4NnZs3YJhw4ZjXNlE6K5a7BwHgUAztm3eBMdxen4Q1eY7EREREdFuGjTBLpt+e/dd7Zad8e0zcMa3z+hw+/322z8pgHW1bQy7YWaObdvYUbUto8dQis11RERERJS6QTUqJlH/JBDhqJhERERE/VYOvE1jsCNKgQBoag6k53fcIHKvnklHYUREREQ0GA26YJc4rQFRqjZt3YKKtWuxaeuWXpcl0fFXhPfYEREREVGKBl2wI+qt6p212LmzFgCwc2ctqqM/9w5THRERERGljsGOaDfUNzRg87atGDVqNM48+1yMGjUam7dtRX1DQ7arRkREREQZIjlwk92AGhXT6/OndTuiRE2BZqyv3ISi4mIcPP8QfPr+uzh4/iF44YVlWF+5CeWTJiDfn5da4WywIyIiIqJeYIsdUQ/tqK6B1+vFEUcchXUV/0M4HMK6iv/hiCOOgtfrxY7qmpTKVQJAFDjjARERERGlakC12BFl0oJDD0NeQQHWrvwC4VAIABAOhbBp/Rp8/eRT0NzYiHUVK3e7XIFEBk/JgSZ+IiIiIuqfGOyIemhL5UZABC0twaTlgeZmrP58RWRoyxQIoqNipqGORERERDQ49f9gl+Z3u8edeFJ6C6RBoyUY6Hxdm7BHRERERNSXeI8dUZYpKAgUFEdQISIiIqIUDZpg9+abb+C5Z5/NdjWIOmCivThNtitCRERERDlq0AS7lmALLrn4Itx80y9gTPbeQE8sG5eRcg/Yb19MmTQRM/faC4tPPgkfffhhymUFg0EctuAQhKIDhLQ1e9aXUi6b2hOJttrxJjsiIiIiSlG/v8cuXSMFHr5wIR557HGcfdb3sLpiNX51xx3Iz89PS9n9QVVVFdZu2IhQKISXX3oRF16wBG8tfzulsnw+H1559bVO19fW1qZYS+pQbNCVFAdfISIiIuqOiCBs2/GRvQc7t8cDt8sFNYDef/X7YJdOX953X9xz33045etfx/333ovvX3ppVutz6CHzUblxI0pLS3HJZZdh8TdOxVELD8fd992PSZMmYfXqClx4/vl4/qWXO9y2La01jDGQhKafjz78EJdcfBEaGhtx8y234vCFCwEAxx69CGvXrMHQocPw7+XL8Z0zTsfnK1bg3Q8iLX0Ty8ZhfeUmAGi3LrYeQHybzo5z+IIF2Lx5EwoKCnDlVVfjpJNPBgCsW7cOV17+Q/z3448xubwc/3z+hU7L6C921tTAUhpDSoa0W7erdhccMRg2dOjuFyyIvKiwxY6IiIgyIBwOwzEGw4YNh9/vy3Z1+oVAIIidO3fA0hputzvb1UmLQRXsPvzgA5x3zjlYeMSROPvcc5PWPfPUk/Gf+2rkzEcffwIlJSX46KMPcea3v43F3zgVx3/tBPzj70/h+5dciqf+9jd87YQTO922rYll41BQUIi99toLv77jTgDANVdfhZ/fdDOKiopwycUXx8PSZ59+ihX/WwljDBzHweuvvYa333u/XZmdrYsFupjOjrN6dQVWrVmLt5cvxw8uvSQe7C6/7DIsOuYY/OFPf0ZTY2OXZfQXf/7LI9i0aRMuv+wSDB8+PL58x44duOX//RLjxo3DxRcuSalszmFHREREmWDbNoLBICZNmYJAcxMaG+uzXaV+wXK5MG78eKxbvRpKKbhcuR+Lcv8Meujll17CkvPOxffOPhs/vPwKaJ18e2FfhDnbtuPNvY89+gjuu+debNy4AV6vFw0NDQCAr51wAr5xyik497zz8fijj+Kpfzzd6bZttQ1bALBm9Wp869RvAEC7TyNiXVGNMThq0SI8cN99uPraa5O2UUp1uq6nx/F4PDjwoIOwffv2+LLPPvsUf3z4Yfh8Pvh8vm7L6A8uufRSLL3oItx59z344aWXoLCgAA2Njbjz7nsQsm1ccumlMKFUpj2Q6IiYDHdERESUPiKCurp6jC0rQ1NjAxzbznaV+g0TCsEYwfCRo7C5shJDh5bkfLfMQTN4itfnxS9/fQeuuPJH7UJdpn3w/vtoamzEKy+/jPHjxwMAfn7DDbjyqqvw+cpVePM/y+Pbjh03DnvutSfOO+ds7L33Phg7blyn2/bE5PJy3PfAA6hYuw7/7uSeO601fnzd9fj97x7q0brCwkKsX78eNTt39vg4lmUl/XuPPfbAo488gmAwiJ3V1T2uazbl+7245dZbUV29E3fdex8aG5tw1733obp6J2659Vbk+72pF57bryNERETUDzmOg111dSgoyIcdCkGM4VfClx1qQUFBPnbV1cFxnGw/XL02aILdvHkH45hjj83Kse+95x7M3nsWfvqT63HdT34KALj4kktxzVU/wh7lkzFn//3igQ8AzjnvPLz+2ms45/zzut22Ozffeivu/PUdmLnXnjj9W9/sdLsTv3Y8Dpgzp0frzjnvPBx95BH45jcW7/Zx4tvf9v/wj78/hVkzpuPkk76eUhl9raGuDqOHl+LKq67C2rXrcNkVV2Lt2nW48qqrMHp4KRrq6lIqVxBpGWV7HREREaWTEUEwGIARgTGGXx18iWm9RrkutXYCkfh+pyyG3j4datoYqI3BCh0ociuP5bP8IZdWlstyQpZLFSrL5bS4XWK5tVu7bdFuwPa0uLQvT2ufDeO33FKgoQu1TxVbHj3UUjJULF16zbC1p2zbvAnzDj+y0+r85XcPYvToUVhw1DEpnQ5Roleffw5bt25DWSdTU4waW4aHH3kEjz3yCBafeipOO/VUbNtc2W67rp6ziVau+AzBQDN8/jwYk/ufFhEREVH/EAqHUVFRgXnz56N2545sV6dbp37zNDzy14f79JhDhw7HG2+8jqlTp8LTya1A1VXbMGrsONywc/LjyjHVjqgaJ2RqTFDqDEyDE1aNLuhAszFBr22CgCvkUiZswiZsKydsW96wNIhjeRxbHNsJeGwTcoKOvz4s431TzcotkBGfQx5/LGFSY6V2O2kOiHvsPB5P0kiQRL0hIvB4PJ2u37a5EmedeSaOO/54jCwtxbqKlb09YrS1js9hIiIiygSBmMzN4/zOu+/hZz+7EddeezUO+Mr+KZfTUN+Q0XoOdAMi2BUVFyEQCOL1F5f1+f1zNLAYYxAIBFFUXNTldutWr0JRUTHWrV7V62MqpeJfRERERJlgMhiYnnv2nzjm6EV47rll2H+/fXtVVibr2ZEef6yeA5+/D4hg5/f5YGmN5ubmfjmaIuWOcDgMn8/bZYsdAEAE9XW70nJMiY6KySkPiIiIKFMyFZi2bduGrVXbcM01P8KSCy7Cli1bMGrUKADAkgsuQvWOHRg1ZjQuXnohyssnd7k8Vs/vf/8y/PCHl2Hs2DHYuGEjfvXrO3D77bdlpP4DyYAIdqUjR2W7CkQpE4l0o2ZvYiIiIsqUTHVxfP6FF3HkwoVQAI48YiGWLXse3/n2GQCALVu24NFHHsby/7yNe+65D7fc/PMul8fqOX/+wXjttdfwrW+ein+9+ioOXbAgg100B84bsAER7KqrtqW0n4hg7bp1qFi9GoFAc5prRV3RlgWXZfV4Mkif14fy8nKMHTOmz7os9tUHBgqAKM5kR0RERJmTiRa7cDiMl195FY0NDfj9H/4IACgsKMCp31gc7/3ksizMmfMV3HXPvUl16Gy5MQYHHfhVXHPd9Vh88kl46z/LcdvNv+jzLpq5aEAEu1StXbsWn33+BRzjQCvem9eXtLZQXFgMf56/0xGIEgVbgvjfypWAGIwbV9YHNexjTHRERESUQSLpD0Zv/vtN7Dt7byy9cEl82Z2/vRv/fustLDhkPgCgansV1q/bgBEjhifVoaPl2rKwZcsWjB49CqNHjMRfH3kM5ZMnI78gPyP1H2gGfLBrbg5g6/YqlI0dmxQgjDFYX7kJWitMnDQZp37rdBQNGQLFmaIzSiCo37ULjz3yF1RX70Bpfj4K8vOhddfXPRwOw+vxonLz1h4Fu84e95idNTX408N/wfHHHIPJkyelfD7pwmcdERERZVImWryef+FlfO/MbyeVfdQRC/HAQ7/H/IPnAQB++rOfI9QSwvnnn5O0XUfLFx2xEJdfeTXuvfs3mHfwQfjtXffg8h9cyta6HhrQwa6uvh4bNm2Gx+OG1+uDJMwR5jg2YBx4PG58/eTFcJwwNm1Yy2kTMkwphfyCQpzw9ZNw/913QYwDrQQuq+unosuyoBBpuetOV497jNfrw9Zt2/DLO3+DM799Bmbvs3eqp9RrAgCcoJyIiIgyKBPh6MafXd+u7EmTJuLGn10fX/ar22/tsA4dLT/99G/h9NO/hVAohMLCfAwbWoJZs2Yy2PXQgA121Tt3YvO2KhQWFeHoY47F+oqVCAYCSdt4PV6oMJCXl4fq7VUMdX2koa4OpSNGQmkFrTSU1j2apsLr9cLv83e5TU8edwAoLR2GP/75YVywZAnue/AhnHLSiTj0kENSPaVeURIZFVMJx8UkIiKi9FEAtNbYvm07PB4vWoLt3xNlWmeDnnQ1GMrFl/4QbsuFJeedGxmDIEPBzuf3Y3vVDmitB0TvqQEZ7DZv3YodO2swatQoHHr4EVi36osO39xHBuFQaG5uRkuoJbIsvjzyL6VUvJ+cTphvTEXvyRMxEBGICEwsGAqiITE67XTiG3aJ/y++TkVba+JHVSq+PHFd4lxnsWPG1sX+Hds3dhSVcIyEM48fLFvn29zcHAkzuzGHW3fb9fRxB4BgIIBdO6rw0O9+jx9cegkeffxJ7KiuxuKTTurz+eQiLXa8zY6IiIjSy7IsFOTn45NP/4sDvzoPdbU7+jTc/fXPv9+t5TF33fHL9FemDa/Pj6KSYXjr329heGkpLMvqcvtc+Ph9wAW7puZm7NhZAwCYf8gCVKz4FOFwqMNtFQAoBcdxYIyJj0qYFHR05B23AmASQo5SkU8OIiHHJAUtABCTHHSAxIzTWbCL1CA9wU5F50frPNhl83wdx4ZSuzk5t+r8DsjdedxjAs3NqFxTgVtuvRVHHnEE/vXq69j3y1/GlMmTu9wvIzg5OREREaWZ1hpDSkpQU1uDF15Yhj1nzMCY6BxzogAlg/M7AGzbWoW333kexUOKMaSkpEe9x/q7ARfsRo8ZA39hMT7578d49pmnMamsDC5Xxwlc6YSgZEw8fsRa8qAEyqiEAKSjYcREAhAigSYecqKj9Qii4SYaahK7eLYNO4mhSzoJdogfv32wSzxe22AX+2whOdhFzytWvSyer1I60h2zh10xtQhUJ9vtzuOeqLa2FjfcdDMA4LTTT8fs2bPRUFfX7X5px27ARERElAH5+fkYX1aGTXoLPnr/fbxeX5/tKvULRUVFGDNmDMaNHYP8/PxsVyctBlywq9+1C1P2mIbi4mL8+803ULFuHconjI/PpRHjcnuiQSnybxMfYCOh9UhFuiNKfHk0bGkFZRICVkLYiQUYI63JKambYvx/kR+SQpdSgHQc7CKrOw52if+OB7toWbF18fAWPa+EUrN4vkjqjtmd2HZut6dda1xPH/dEO3bswB133YPq6mpcedVVOGzBIVi7amW39cgEttcRERFRJmilMGRICTweL4YPL0Uw0P1AdIOBz+9DYUEh8vLy+vw2nEzp/8EuhYaMtatWYkzZeBy16Gi89OILqFi7DlPLJycNe+9yt566UrFukLFjtt47ZlKpQBuq7f9Vwpq2z6N4a5aK16G1WtJp/16VENCSgmLS8TqRhfPtzS+Qy+3qsJtlTx73mJ01Nbj5ttsRtm3c/stfoXzShKyFulgrLe+yIyIiokxQSiE/Px9+v5+DBUYppQZE98tE/T/YpWhL5UYMGz4Cx59wIt55e3m7Ye8T3+zX79oFX54fzY2N2ajqoJNfUIBdNTUp7+/xeBBobu5wXXePe4zX68P0mTNx4dKl8Ltd2FK5MeX69FassZOvs0RERJRJAy3IULIBG+wAYOeO7QiHQliw4FCs/t/nSSMkerx+5BUUIlzv4NVXXsb8Qw7F0NIR0N2MiEO9YxwHDXX1eP21f8HlcsPtccPSPbvmIgJ/nh+6mznvunrcY0pLh+H222/HxrVrsHPH9pTOJV0SB5Dhp2hERERElIoBHewAoL5uFz776IMO15VPKceaigo0NDbgH/94qo9rNri5XG6MLC2F1+vt0adHxhgEgy2YMGFCj8JPV487EJnuoKv1fUnafCciIiIi2l0DPth1prG+HlOnToPX7caGDRsQis5jR33D7XbD44kMYNMS6npaAgBQWmPi5MkYOWo0tm3e3Ac17ENtBrshIiIiItpd/T7YZWoyQMexsX3rZoweMxYTJk9JGBWT+oLL7YG1G/28jeMgEGjGts2b4DgD77EaGGMxEREREVG29PtgF/PFp//tdF3pyFEplysAWoLt78GizAr3oJWuIyWlw9Nck8zp6jlLRERERJROORPs4vdVJXVZk457r0lH7XwCMbHZ5mMTdMfmXlOQ6Izd8Wm9JfpTfBR6QXzzhOMqRKujYnPGRcuHimwfnwlcIhOQR+d4iyxqnURcxUuO/S/WQy+x3Nhyg9jRW69L67kkn3/ijrFNItcicaEkjbafMCediq1MWK4i5yJGoGLXIjY7Q9IJdLA8fq0i+8dqqiIlxTdutzRxkvPWYmGMQWwaBRFBbDp3iV2L+PWNlaviD1rsuic+L9re8CYJM7knVD3huZP4HEw+busOHfWybLM8cSoLSbgWrdPId/C4qoTnVuR5oWLPpNgchtGqRE45+Ukbu1oqVm70eRF/PrZ5Xkj09ybhsO2Wt85nGDt/1eYaERENTio2/49I61xA0fljY6+38amXYrMDdbQ8/jqsEoqJ/CyxaY8Q6+LfetyEl+RofeJ/MQGloKGSDxzbH4k7Js2CG/8bF/k5NuVS6xbtzx+xE0Lsb2X8uiReo9g5S8Lm8fNvM5VTdB8V+5urdGudpfVatNY+dtzY+UevRez9W2wws8QzUK2TYknrX9qE5a1/txUi8/8mXy+VcP5JBSctV9HHNfK8aHutIueXfP7tnxdJ2yLhWiS+n4hvmvgmIfYYtG6rVGvPqvgsXJJQ54THJv58jFam9WfV+nxE9PFTsXfFKqG6seWJx+vgeSGJ56fib31VwhseBRU9ndbnReK5JJ9/ssTj5uJtMjkT7BKphGdU649JM9HF10f+i75JTXhTqjrYDknLW584AFqf9+2O0Pqkaru89RUxtmPbEhKOphI2S9gu6YUwLvmXs80pJG8VX66SdhNps73q8MfkFwlJXtYapJD4itJm14Rlra+DkWCYENA7ntdOJf/OJfy2xy+LRIJd29f5+L8SlydfEERfPpOCaZvat7sYraeZ8Di22z/xRTNxy+gfGdXRc6Dj50XS44doOItXLbnS8RfJdlWJLZWkukpSyYg/L9ouS3o+tv3DkbCZtBnVs/0fEyKiwU61+ZAu8p5GtVkWIQn/j+6b8AFkZ39JVLu1kS3ipbVZlRhI2i2Lp8GEpZK8d8e1iP4UDyat726Sq9DN39LYB4xtt4ueUfuqRIJdcpltrmObk4i/tUgoLBbs2r9ZAqT9RUhYHqHbfqipkjfs8K9im8e1g8yFto9f0nvGdssT3hNEr2HC5UioWFePa7s3UQnnmRBwgTb5p83zQrWtXLtHL+F9dvvlSMxkkvw86+xxRZvlSqvI+54Otos/1h3tmmNyJth1O6F1Zy+KbV/DOnhB7OyFkoiIiIiIsigNQyuIEezuu/zOWvX6M85SSERERERElOMY7IiIiIiIiHIcgx0REREREVFXcmAgFQY7IiIiIiKiHMdgR0RERERElONyZlTMnqiu2pbtKvRrvZnInYiIiIiI+i+22BEREREREeU4BjsiIiIiIqIu9P+hUxjsiIiIiIiIch6DHRERERERUY5jsCMiIiIiIspx/X9UzAxPBmhEUFlVj3Vb61DbGER9YwuUVijK96K02I+Jo4oxbnhhRuvQVr0qwHsfV2DFqsqk5RPLRmD6HuMxZSjzOBERERERter/wS6D1m/dhf+s2ILhw4Zg3gGzUT5xDIYU5sMxBnX1Tfhi1Ua8+d6nePeLLZgzfSzGlBZktD4NqgCPPfsWJowbhflz9sYlZ5+MPL83vv5/azbh9eWf4I5XPsExh+2L8qFWRutDRERE1JdEBGHbRjgUynZV+gW3xwO3ywWl1G7vy2uZrDfXMlcMymBnRPDeF9uwvqoB551xPKZPHQ8ACLaEULWjFm63C+PGDMeEcSNx1KH744NPK/DgX5/H7Kkj8KXJwzNSp083N+GzlStx2bmnYNrksXAcBw0NDTBOGEopOI5B+fiR2GPSUTjp6INwz5+fw4qVzTh+7qSM1IeIiIioL4XDYTjGYNiw4fD7fdmuTr8QCASxc+cOWFrD7Xb3eD9ey/ZSvZa5ZFAGu7dXbEHAsXDjFd+Bz+tBQ2MzHnvmDby2/BM4xgAALK1x6EH74KRFB2L2jHLceMV3cMtdjwFA2sPdp5ubsG5jNX5x5ZnwuC3U1zfAGAdA5BcTAJRSCAQCUEqjuNCPq5eeivseXoanl69juCMiIqKcZts2gsEgJk2ZgkBzExob67NdpX7Bcrkwbvx4rFu9GkopuFzdv3XntexYKtcy1wy6m7UqKndiy84Avn/WifB63LAdBzf99lG88tbH8VAHAI4xeOmND3HbvU/AdhwUFeThh+efgg9XVWFLdWPa6lPj+PDZyk245uJvwe3SCASDEInUQykV/wIAYwwcJ/LLats2zjltEYYPK8HbFTVpqw8RERFRXxIR1NXVY/jIUWhqbEA4FIIxhl/GIBwKoamxEcNHjkJdXT2km7EneC3Tdy1z0cCLql1wHIP/rNiCH5x7MjxuF4wxeOXfH2NdZRUAYNGC/bBg7izUNTTj8efexKq1m7F6/Va89d4KHLT/DBTm+/GdxQvxxDOv4qT5e6alTk89/w4uO/cUeDvZp3kAABi0SURBVNwWQqEQ7GgL3dtvv43KykrU1dUBAIqLi1FWVoa5c+fCcRyEov2lzzv9GFx07d04fN4sNG7blJY6EREREfUVx3Gwq64O0/baE3W1/LC6LTvUguKSodhVV4fi4qIuW5p4Lbu2O9cyFw2ss+nGqsqd2GPSWJSNGR5P6V9UbAQATJ00Bt847mAAwIjSIfj6ogNx028jXS/XbtyGA/ebDgCYPaMc/3jhP9i0o6HXo2UGPcWYMHYk9pg0Bo7joKWlBQDw+OOPo66uDgsXLkza/qWXXkJlZSUWL16McDhy753H48GiQ/fHf95fiVnj8ntVHyIiIqK+ZkQQDAZgRGCM6X6HQUhM6zXqCq9l93p6LXPRoAp266sacNRhc5Oe6Avnzca08nEYOqQgafmuuob4z26XlbTuq1+ejv+tquh1sPtoxTocPGcWbNtGU1MTgEhLXV1dHebMmYOGhoak7efMmYO3334by5cvx9y5cyEisG0b874yE1fd/BBmjdu7V/UhIiIiyiYjDCPpMhCu5anfPA2P/PXhbFcjZ/T7YJfOLF1V04Q9Jo1N6lM7ZeJoTJk4OnKs6PL1m7bj0WfejG8zZ/a0pH32KB+LN9/9b6/r8/mqSpx24uHxAVIAoLKyEtOmTYsHvbamTZuGysrKeJdMEUFJcT7y/D44+UNgNe3qdb2IiIiI+p5AstDK5DgOHn74r3j5lVcgIjjssENxxv+dBm1FppU69rgT8OwzfwcAvPDiS1i9eg2WnH9uPx82P/3X0hiDJ558EsuWvYD6unrss8/euPbaq9N6jLYa6huy8pzIVf0+2KVTczAEv8/T5c2Sq9dvxf+7/ymEwzYsrbH42HkYN7o0aZ/CAj/qm1p6XZ+m5haUFOUnhbi6ujpYVtfz09XV1UFE4DhO5GbQcBilQ4t7XR8iIiKibMpG98Ennvwbvvjf/3DLLTcBAH71yzvw5N/+jpNOOjGpXsuWPY9tVVU4/7xzICJ9OvhGKkdK97V85uln8c477+OnP7kepaXDsGHjxj55vNJ9jIHXAbPVoAp2llLdPjkeeuwlhMM2vB43lpxxNPaaUtZuH4VI/9x0MMbAcSJTG3QX6DraF4h80oQB2E+YiIiIBpdsBLtXXnkVV1x+GUqHDQMAnH32mbjxxptw4olfi2/z5JNPIRAM4NtnnJ4z966lu57/eOYZ/OiKyzF69CgAwJTychhjcMGFF6GqajuKhxTjm6d+A4cfdigAYOnSi7F9RzXy/H58+4zTcciC+QCArVu24rd33YNVFRUYN3YMbr/9NqxcVYFf/eoONDc34cILlmD//ffL2HkMZIMq2LldFoItIXg9HU9K6BiD7dWRroynnTAfe5aP6/DTmF0NTSgq8Pa6Pvl5XtTsaoQn4VEoLi6Gz9f1RJLFxZHWOa01jDFwuVzYUVOP4sICNLIrJhEREeWobHS7q66uxqhRo+LHHjVyJKprapLq8tdHHsXPfnpdFrsF7v4H+Omua01NLcaMHdOu3J/99HoUFRZi1aoK3PDzm3DYgkMAAJWbNuOxR/6Cz1Z8hjt/czfmz58HALjjN7/FV+fMwbXX/AiBQBBiDO65516cf+7ZyM/Pxy/vuBP77fvljJ3HQG6zG1TBbnhJPtZs2Io9y8d1uL52V+tgJeUTRnX6CcG6jdtQUtB1+OqJiWUjsGrtZuy91/j4srKyMnz22WeYPHlyh/usXbsWM2fOhFIKIgKtNXbVN6G6po7THRAREVFOy0brTOmwUmzZvAXjx5cBADZv3oJhQ0uS6vK9M7+DG274Ba677lpMmjihz+uYinRfy9Lhpdi2dSvGjWt9H/3Kv17D008/g6rtVXC7PWhubk46rmVpfGnmTNTW1saXr127Dtde/SO4XC4UFkYGL9y8eQt+fP1PAQAulyupDLbY9dygCnaTRhXj3Y9XYdrksR2uLyrMww0/OC3+c2d9p9/5aCX2Gjek1/XZf+8p+ODTChwwew8Eg0EAwNy5c1FZWYm1a9di3333Tdr+gw8+QHFxMebOnRtf5na78fbHX+Ar+5T3uj5ERERE2SRZGMlx/iEH4Xd/+AMuOP9cAMBDv/8Djlh4eFJdDjv0EPh9Ptxyy2245aYbUFDYu5HR+0K6r+W8A7+K+x/8HS5Yci4KCgqwdctW/OlPf8YFS87D7Nl7ozkQwHfPPCfpuCIGsTFmYsvLysbhlVf+hcMOW4BAMIjioiKMHTMap5xyEr48ex/UNzTEt9WWhS1btsS7f1LXBlWwm1pWgodfXIGqHbUYPqz9YCMKwDsfrcKu+iYcd/j+yPO3725ZsX4rdtbWo2zfjlv9dkeRNOGL1RuxZsM2TBhbGplzxHGwePFiLF++HKtXr06aoHzmzJnxUCcisCwLRhSef/V9nPt/h6N+a2Wv60RERESULdlonTn+2GPQ3BzAFT+6BiKC+QfPw7HHLGrXajRnzlewfuMG3HP/g7j0+xf1eT13V7qv5QknHI/gI4/iqqt/jMbGJsyYPh0nn3Qi7nvgIezatQsulwsjRo7otLUt9vN555yF++5/EH/808MoHT4cv/7lrTj3nLNw3wMP4Ze/uhMjR43E7bdGBrJZdMRCXH7l1bj37t/A5+v9bVADXWrjtIrE9ztlMfT26VDTxkBtDFboQJFbeSyf5Q+5tLJclhOyXKpQWS6nxe0Sy63d2m2LdgO2p8WlfXla+2wYv+WWAg1dqH2q2PLooZaSoWLp0qtKVp+yfesWlI7sPqlXV23rdptP1mxHZXUAS797LCytk9Y9/fJ7eOnNjwEA3z3lUHx5ZnIrWEsojJvv/hvmTh+FiaN732IHAFuDLrz70RpcdeE3oBB5wtu2HV/fWauh2+2G1+vFg4++iJ21u3DYrNHdHqsn15CIiIioL4XCYVRUVGDe/IOxce3qbFenXxo/aQrefOMNTJ06FR53x2NFALyWPdHTa5moumobRoweg5/XTnlcOabaEVXjhEyNCUqdgWlwwqrRBR1oNibotU0QcIVcyoRN2IRt5YRtyxuWBnEsj2OLYzsBj21CTtDx14dlvG+qWbkFMuJzyOOPoTUJK7XbNwMOqhY7AJhVPgLba9fj4b+/hm8ef3BSuNuzfCw+WrEWc788DftMn5T0KUNLKIwHH30Zk0YVpS3UAcBon42CPA8e/vurOO3EBbBUpG8xEBsx0yDxJk+Xyw2tFbxeL/7zwRf44JNV+N4xnJiciIiIcpNCZEC47du2w+PxoiUYyHaV+hWf34/tVTugte62RYbXsmu7cy3byYER6HX3mww88/cpQ1N9A377h3+iuqY+vnzKhFG4dukpOPzAWUnbb962E7ff/zQKPMBXpnffMra7Dtt7NDZu2oaf3/komgIheDweWJYFpTXcblc86AGAx+OGQOOBR17An558maGOiIiIcpplWSjIz8cnn/4XxSXD4fX5s12lfsPr86OoZBg++eRjFOTndzs1Fq9l53b3WuaiQddiB0SmPTh8v4n4ZM12/PKBpzFj2njsN2sKJowdHp8KIRAMYfWGrXj/vxVYt2k7vjpjDKaWDctYnY6fOwlramxcfN09OHjOl7DokP1RNqY0Psed1ho1uxrx7CvvYdmr72PS+OEMdURERJTztNYYUlKCmtoavPDCMuw5YwbGjIrcPiIKUDI4vwPAtq1VePud51E8pBhDSkqgdddtMryW6buWuWhQBruYWeUjMK1sKCoqa/HcS2+jelczQmEbBkCez4MRJXmYNKoIBy6cAcvK/INfPtSFq5Z+Hf/9fD1uv/8J7NhZj+lTI1MhrN+0HUoJvrJPOS5fcgJqNq7NeH2IiIiI+kJ+fj7Gl5Vhk96Cj95/H6/X13e/0yBQVFSEMWPGYNzYMcjPz+/RPryWHUvlWuaaQR3sAMDrcWFm+XDMLB8OADAi0LFxWbOgcdsmlA91Ye9vHY66hsaENXvCik4+zlBHREREA4lWCkOGlMDj8WL48FIEA8FsV6lf8Pl9KCwoRF5eHlQP35/yWnYslWuZa/p/sOvjGxWzGeoSNW7bhIHX85eIiIioY0op5Ofnw+/3dzoq+GCjlEqpyyCvZXupXsuYXLiK/T7YcbZ5IiIiosFjIN77lC28lukjOZBJ+v2jzU8ZiIiIiIgom4ww2PUaW+yIiIiIiCib2GKXBgx2RERERESUTbmQSfp/sIvO40ZERERERJQNxun/wW5ADZ5SOnJUBmtCRERERESDEVvs0iAXLiIREREREQ1cuZBJciDYsSsmERERERFlTy5kkhwIdv0/HRMRERER0cCVC5mEwY6IiIiIiKgLuTB4CoMdERERERFRF3JhgvJ+PypmUKwWL4y3umpbtqtCRERERESDUECslmzXoTsZb7Fz+UTQBLgcv2i3T8IGAgBhAIANR2yxjBgNS7RLjAgMDBxR2lYi4Uo9ZGum60hERERERNSZSmvoFiUSFqVtGDgiMNoVyTCWEeOILYAdzThA2EC02ycuxx/JQj6RTNex18Fu+nTEK1k4eqoAgHeIaVfxZgDBYDByUJeIMhBlXOKISFjBiBHjGDiOg7DYjg1jwhAEX/fu9WGVLtrR23oSERERERHtrm16yI43PNM+giAIY8JiO7bjIOwYOGLEhBWMIyLKuEQZiHZFQlwwGERzB+XFslIsOwHJmSpVmWmxi7axNYUiJ+XyQiwbYrlFLEck7EROWCCOpVxGKxhlw1a22JZRIVE6YKACAtUERxqf9e3zZoU1Yn1Quft9EygREREREeW+oHK3VLhGrnvON+tNONIoUE0GKiBKByyjQsoWW9mwtYKxlMsIxNGuSNaxHIlkHxvi8kZCWywbIUP9EdNyj92IGZCVK4ARJVCxZd4iI821FppDIlqL+L0ijuUzUMq4rZAJhWBcHrcBbMcyYsJawm5thS0gFApLwAV44DKWtiwoW+w3XNP+I0q501FfIiIiIiKi7iiRMGwJClSTcZwmx1bNdlgCHqiQra1wWJmwZcQYJY5Lu40JtRiPR4xjvMbRYiyvkUBIxJhIqPMWGQnUtpa/cgtkxAwIVvS+rukdPGXFCvgPmCH+xkrZFdTiyjNiaS0KkJYQxAsRS1pEay0u7TY2Qk7I0cbtsmwxJoyQhIwPlrbFJQragQKUOBoShtZuZUy/H+yFiIiIiIgGhsg9dSZsgIBjq2axpUHbEjQaLQhJSETCjrbssC1G65Dj0m6jHSNwgiLGIy02xOWDCCCOMbIraGRIiSN2wUTBOysAzEhbXVMLSkoJROKtc3gcwHSgZMwMaaioUNuL3OKx3PC0iChLRGkRxxZxvMoo4zUIh4zjFuOyxYQhthJol7YsW5yADmmttdES1nAERgEhEdOiXMoFraw0nTcREREREVHXHHHENrYoHbDDEtC2BGFMwLZ1i4EJuLVlO2JsZcR2GTGOEqPDYhwdbbELilhaREzklrSAB9je5Ih/awVKxsyQ7VsQz1JxSqV0v12vW8B+cj3klMWtXTALR0+VQNN65Q0Y8ZYYqa2NdMXUWozfEe24lLE8XsfrhLQNt1bGtsNQlmPCYbflVnCcgIGGy6WMyyjbaUHI0SpgiXEr1f/n3SMiIiIiooFBBMZxVNgyCHmgQkajxbZ1CxwT0JZlh5xw2CjLUUZsaLfjhXGMz+s4jhjLFgloMS3RrpglJUZMrZGQJzpwSkKXzJ9c3/vBU9LStXH6dAhmALH77PwjJyZ3x2zQoiyIbcQYtxjLBaMtcUREA6LdYRMKaUtZSpS2LBjjGBPUxnjgwDhh5VItCrCMrRjsiIiIiIioT2iXGGXgiC22ra3IrWOIhDpjJOwYy/YYE7Ihjog4UOI4ITG2HWm5cxmIOBCnsE03zMbW++umo/ehDkjnPXax7pi1kIatke6YhcMs0dtFmi1jtIbSWist4ohAmbBoWOIoy6W0peAytgo5GpbY4tFuCRlHVFiF3aLdAFxGK23gqO6qQURERERElBa2JTBiYCs7rExYRMJuHWmpc4xlu2BC2uWylSM2jDgmLEZUJOSFtRgDYwyMyWsRMSOMbN8Z7YbpmyrbgfbdMHsh9WCXcJ9dZ90x/UFHtgeN+IuVWA1a3PlilBLltChj8r22x1JAOAQNwGW5oG1bwpYljhijtHYs4zhhrULGhnYLtKPZYkdERERERH3EOCasYLSCsYwYJ3pPnVGW4zGRUKcdsbUR23J77JAWW5rEeD1iRIsJN0Va6+rqjIwIOtKAbrphpnh/HZDGFrvE7pjTADQEw7IdQOF42+jtWjVbxoRDWnnyxKg840A0EICCS1TYAAaAGIFqMRLWyiUaRlnaVpFOnNoopVyw2GJHRERERER9wlG2QEQUXMYoccK2GGXEVkZsG+KoaKgDxEFAHHGLI3nGCYuYULOIsSKtda7xttm+0xF/fVhKQpB0d8MEehvsOhkdE4gm0QLA31gpuzy2yQsBylIq0GygtVZuv0GzaJVnewC/EoRDgHKJUsoAYWNrZTvisWwT1gqWZWtbQUyvqktERERERNRzBsq4xIaJTGWgQ47LiIF2R+6pM+JYbo+NgDjNIo6GccIBMcYY43eJEccxAY9thgQdsUdOlMJ8tLbWpWk0zPjuvdkZABKD3XXXQ30+A2r7CqhpY6A2Bit0oMitCkMe3RB2aX+xpb22pZXWVtBW2u1XWkFbSinLE25xabfSgLJaoCxLlLZNWGsXtLGVEg3OTk5ERERERH0mDEAZiHaJGBvGpd3GUWK8EAeI3FMXcnttEXEkGup8LjFijNPickygzjGFbts0eELGXx+W8b6pJt5atwKSrm6YQDq6YrZptZu+ImGETIQEABqKYAoB+L1AAwCvDfhcGsEA4PYboEnD9npEOcqyPMq4gy1Gu5XWHkuFHaU9HihjK3bDJCIiIiKiPuMGoD0iYQfi8YjRjhEdFmN8XscJRQdKaRIjee1DXaHXMa6EUFdYE5KVaA11SQfqZagD0tFiB7Rvtfscavv0SKtdbQlUQwFUoGq9Khzm0f6gSze0RFruArbSnjyt3Y7SLY7SSinL5VXacqAt06Idy6csp0U7ViTUuXWa6ktERERERNSNsIkEMMsRcSyvsZygONprHAvGbhEjIo7XEhO2xISaI90vY6Eu4LNNw86Q8Y+cKIWNkJLa6L11n0OmT09vax2QrmAHdNkls7twl+dRKmgr7TZKu3xKO5ZSlgNtXEpZTlA7YaV8Ph9MOMhgR0REREREfUK7fRIMBmG5RRzLZ7Qt4lgwliNiB8WEdaSVrjkk0qNQl4EumPFi0lEIgKRgB3QT7qL33BX7tGp2LO11tA67oTxGa9sF5TZKOy6lvC4op0UpxwWVB8C2Agx2RERERETUJ1yOX5oBWDbE8oq02BDLFglrMS4bEtLGuMOQFsuYPMsxdUEj8XvqehLqgLQFu/RNUN52hEwk3283LbZw5EQ0VK03hQACHq3yQkAoz4hp1kociNFQlkcZcSkVCEL5PUpJC1QQADzetFWXiIiIiIioK3bQQAOwvJBASMTlg1hapCUkIg7EwBin0Ehei0jAY5tCx0hXoa7dAdIU6oB0ttjFdHC/HU4BklrutlaoQJFbjci3VMBnqYaNkda7kFcpu1mrfI9StkepcDNUnqd10BQ7yAFUiIiIiIiob7h8Eg9ezSERdx7EFRJpCom48ox4WkTqgkYKx9vGH3Rke1NkrrrC0VOTQh0ej8z7nYkumPHi0llYXJtwBwBJ3TK3rFANQz0KU6ciULU+HvBadmk1xKdVS31ryAOAfA8DHRERERERZUdTKBLwYmHOW2RkV9CId4iReKAbOVFQUYHCmpCUjJnRrqUuk6EOyFSwA7oMdwDQtvUOAEbkWypQa6kWfyTQxUJexupIRERERETUA7EwBwDegBF/SSTQAUDbVjoA6MtQB2Qy2AEdD6jSpmsmAMQCXqwFD2gNeQCA0UDLLgY8IiIiIiLqW94hRrA18nNSmIu10EUDHQB02fUSyFioAzId7IAOwx3QvvUOiAQ8AGgb8oiIiIiIiLItMcwBQGKgA7popQMyGuqAvgh2QOfhLqH1LrYuHvK2rFCYMSO+T8PWCoY8IiIiIiLqU7EQBwBYsQIlY2YkhTkgEuhirXRA34c6oK+CHdAu3AFtAh6AtiEPaA16RERERERE2ZIY5IDWMAd0EeiAPgl1QF8Gu5gOAh7QccgD2gc9IiIiIiKivjZiRjS09STMAX0W6OKH68uDJekk4AGtIS9RPPARERERERH1kViAS9RpmAP6PNDFD5uNgybpIuARERERERHlhCwFuvjhs3nwJAx4RERERESUa7Ic6GL6b5hi0CMiIiIiov6mnwQ5IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIqKc8/8B9U1IP1yUJ/kAAAAASUVORK5CYII=" /><!--- {width=100%} --> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAm8AAAIxCAYAAAAbsl8PAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAMdQAADE4BEcp7TQAAIABJREFUeJzsnXeApEWZ/z9V7/t2mLQTdmdzgl02zLJLlHCgRJUg3uGhh/n07lRQAT0TcALqDxNixOPU81RQCeqdWUGCAkoSkA2ysLB5d3Z3NkzsflPV74+e6enwvt09YcOs9Vma7rfqqaeeN3Q/36l6AxgMBoPBYDAYDAaDwWAwGAwGg8FgMBgMBoPBYDAYDAaDwWAwGAwGg8FgMBgMBoPBYDAYDAaDwWAwGAwGg8FgMBgMBoPBYDAYDAaDwWAwGAwGg8FgMBgMBoPBYDAYDAaDwWAwGAwGg8FgMBgMBoPhkEYc7ABi0frQjc1gMBgMBsPhjxD6YIcQxaEjkIxYMxgMBoPBcChziIi5gy+YjGgzGAwGg8EwkTjIIu7gCacKou2668vjWrPmEBCaBoPBYDAYDluWLqVMlN1wfXlZnoMk4g68IIoRbUOCLS/SLsmV71xtRJvBYDAYDIYDR3vHoGC7O7c8JOpihdwBFnEHThhFiLYowVYq1hbNMOLNYDAYDAbDgWPttmKR1t6BrknIHSARd2CEUYlwKxJtJYJtSKzt3bZa0NGRb9O7/QUj4gwGg8FgMOw3GqcvHBZfq1fTMqNDQ7GYGxJysSLuAAi4/S+I4oRbB2JItOUFW0vuvXf7C4KFC8ns2GAEm8FgMBgMhgNOeuo8zQsv5AVdy16KhFx7B3rp6oMj4PavOIoQboWjbYWirVSwtddbIrPXyrWfDu4+aYScwWAwGAyG/UayWWm25z6nW0K9sz/UUCzkCkVc4SjcgRRw+08QFQi3uNG2IdGWaXKKBJubzgm15pQUbo8RbQaDwWAwGA4cySal92WVBkhmlC4Scj2+HhJxVUfh9pOA2z/CqIJwWzQDsXfbatHbmsiPtLXXWyKTsoS7T4ohweYlhQgGcsKtPiGMgDMYDAaDwbDf6fe0BrDrlE64Wg8JuWSz0ulsTsTlR+L2eLplRoceGoU7UAJu/EVRiXArnSYtHG0bEm29m2w5KTUs2OoTQgQJIfwBRF2BcAuyRsQZDAaDwWAYf+yUzousAU9rpw5te1r3e1oPCbnurNKNcwKVF3Elo3Cx06jjLODGVwxVG3FrQfQ2IDI7NohGLyHdtBRpz5ZDoi0ZSuk7OcEW2EIEWUTaESJwB+OsH9doDQaDwWAwGHL0597sJDrja22n0Hag9YCnteOjXUupIRGXSQQqmVG6N+Gp9NR5urGPIgG3v0fg7PFyFHUft0rCrde35SRLioHQksleKZWDEEgpJSL0hFRKiHQCEbpCKAdRBwRhxoy8GQwGg8FgGHdsJ60HgNBDp5Naux46DLSWUithoaVEWL1SD1hK1XnQ7SvdCPTu2KCYOg+ARcDa1UAHDAm4PFqL8RJw4yeGSqdL44RbW0Kms7bsdS2ZDCyZCYSsSwiRDYR0lJB2SsjQEsIKkcoWwgqzMvSFSKVSKD9rxJvBYDAYDIZxRzopnc1msRytQyulZKB1aKGsUOsgq5UvtUrZWg14WqdtrVw7VI3JUGVSgerdHT8Ctz9G38ZHDEWc57ZzaW3CLVEnpRMK6YZCCiEsOymkFSIt5crQSgkrdGVo5c51c6R52oLBYDAYDIbxx1c5kWWFWodWUllhVocyqUILFbhaaa3DpKWVb2nlDShVk4Bbg94f57+Nq3grPc+tndWytzUhMk2OaPQSMt0yLNyElFY2ENJJCykGpGUlkUIIy0oISda1pCOkshB+KKRjIVRgLlYwGAwGg8Gw/5C21n6IdiytZIhWvlakkmHo5cRb6KJ0nQr9TG4UTisV5gXc3kD1JjyV7vF14x5P76RDRZ7/Ng7ibeznvJWc61Y4XbopOyzcen1bBlHCDWmJemHZvmtLW0hCYbmOtCwtZOD5UtpIzxNCS4Qz5mANBoPBYDAYyvEB4aGlrbXnoWzpqNDRKhl6Ulo6VL6Wqj4ZoCVOWpHNQMqWJAPoBTI+NAK9TSiARSlE5Plv43Du29hHswpG3aKmSxv7Nst9WUemPVsKy7YygZBSSstJC6k8adcJYZEWVuh7NghLCGGBbwW2kIKEFShfCoSlZSDG8/oKg8FgMBgMhmEChLK1Roe2dJTGC+1AK3BCrXUIOrScREBGhwNahzKhAj+jlVIqTNta6TAIM4lANad81dswW1WcPh2jeBubGiq9wvQSYHXu49C93Oy2hEj32HIgtKTUuXPchMiNuNUJYYW2Z+MLS0lh6zCw0cLSUtpaCTthBdKypBXqQFpCCkuYpy0YDAaDwWAYf0ItdShDbQlbQRB6oVQ+OhAqCEBLYdkC3wNbi7oggYvUTlqhtdSZAYVSlq7zINOsdGbHBkGPT0tq8EH3BfoIGPPo27gNZa1Zg9jJ8Khbpj93E96dm2yZniREsldKJyWECIUMvdxUKWlh4QvLkcJWlrCVFrbvyIQDlhbCliq0QykkSCk1MhBKjle8BoPBYDAYDENYWqhQCKWFUpbSyrGtQGikj7AcX3nSEkjAV0BaaBGi6ZfYCaXthNB+v5RendKZTbZsbw/1TmBvPSJ/+5A1AIzL1aajF2+lV5gWVPVuf0HQ5JBJWWJSSoqBASmUgwgDIaUUMplE2r5rh0raalC4BSpwAikTlg5tSzqOr0I7lNJxtHC0jS2kkBCakTeDwWAwGAzjjsTSCaWVCAh8qX2tlG9LywqV73vSErYKhG3ZuRPafI9EqAiSCe0GQioltHK0VgNSTEppkUlZgv5Q925/QeRH38jppfzU6RhG38bvJLLBIcG9LQgaFtLet1ns2yeFlcyNugmkFAiprNx5bdIWMlTC0mFgKy3sQMpEwhKOlI4TqtBOCJnGEQlU6GALW0ptEUgz8mYwGAwGg2HckbZSoSIEHTjS8vG0F+gw41iOsIQWXiiRQaC10iBsLR2hRCgsIdCOElorqXWI9uqUDvdJ0V5vid6p8/TePgTb0GVTp2NgXMRb0ZQpkNmxQdheQjS3SLF3b27UTUpEOiGksoW0rNxVpUIICy0s38mNuEnpOIRhQloyLRMiKRHJUNoJJXVCWzjSxog3g8FgMBgM447WQmnwpS08CzyVwpKelIRhRloWlg60b1lauEoLIRQIZSWEsi2ktITMeFopiVADUrS0SJHZa4lM/wbRWD9PL5oxeOXpOE2djlm8xU2ZumkpZE/uIfNCChF6uScn2CES383dDgTf0lLaDljW4IibtGRaSpVWSqYDm5TjiLSldVrYlo3EGmu8BoPBYDAYDGUoQkuEgRYi4/k6IwNtS6mkQqJUqBLS0aFWypfCBl+52MrJusqSCRVYQjhKSCshlFZCuD1SuGkpCHO6KHbqdJSMTrzFXGW6d9tqwUkduSnTLHhJISwphEAIpYRIhkhLu1I6UlpayMAWUithayFsf3CqVCZEUimZFo6os23RKB1RJ5FppHCEVuZeIQaDwWAwGMYdbcsAKX2FSNqQ0AKpfYltC6WyUnkq1ELKUEtUIEVgB0JKR0h8V2qdkK4tlLaF0AgRKiHQkJ86fWy1gI7yqdNRnvc2vmKoo6N8ylQOTZkilC1EqFICyxOB50tB0kpYgZSDFyfgiIREJAOblG2LRsvWjVLKegH1CJ3SUpr79BoMBoPBYBh3hNY+UmQlwsFWVogg1ChbiUAlCIUvfEuFobBkEOqEFSg3lAlLhCollNQiiRaZLEIphFIlU6cdHXq8zneDcRJv+QfQF5S5Pbl7stUlhBBCiNAVwhZZaSkpfSmltJG+8nP3cZNCOlo4qNAJpZ1wHJGWjqiTUtYLoSdhiYbrlllnzqqzmgVKKKXGIerxuXD1gF3+OqaORt94VC1H3Gh8t2JVbxUN9s8ejfU68opxRdS2cEARRR8O5gXmOn9myrhc2z+WOCp/PHD9j754/8VRQ6fjH9MIPY4igLHFPIbWB+jAGr9uxu5JSgulUZv7w32fXKMeFKG2pWWB0KEAL3TxUKHvaOn4UnhCCytQvnRspB8K6YSuRCsZuEmRTgihtRB92WEdNMTQeW9LD4Vz3iKZDuyE+kTueaSBi1AOQvhCkBDCsRCeJ4SwhRXqQIKU2sbGFraSOmFpnZbItIB6LNHwxWPt873uXakd+3yUCof7GXzc6egExmjaiqK3ktLqbUfcTkR+LF+sFlc1P/H1uaJqgYsqeT9iW8csiPgPNduI4v/VXAcgKjxCt1IdomwrFfUa3XR4v0VGGrlbovdVpf1Ybf+JyHYR6xOxzyrti5r2ExC1cWoVcBX3SRW0rvT7WUW4DbYtr9NRb1Xq4hVZUS9FZpGG0fU6tqasLrooYi100VJxfUSb4rbx273SPomv04W7q8a6SvupFptqgjp+/0QeOZX2X6RNhEW1fVlUEBtppJ84ottW1yW1xFWzj4rf49rbOo4jG2279YvHTj7vqqeDX4tABxLta63cUIqMsIUL2CpAogMpsCwVCJFIIEIlROgJEdoI7SKsRE7/6JCcHto94hCrMuarN9esGf5l7d3+ggBw95U/CaEOSKVSAKgg96xSLQNhCSEcjRRSSEtiWRZO7uIE6SBIXbfMOtPr3pVys9li4Qaj2mljQWuNUqrKj34lB+Mbz37xf8j5GN+NVs3b6JIHFZJHjf2OrbBK3Wi2YW3JoXwxIikUfYiq12Xf5SFLrQvro4SCHvUrap2H+tK6NNryWKMjLnujQmFxQSXhNiJGcxxUEwvVPdTUQ6Wv0Gi/e1X6HR0VVd2oXE1UHzXnvVH4H3NOHYvvknLf98lmMvjdXen/6JBnIkghpSNsy7YsHEtiCSmko5GWEELLQGiJUEHuL8hUKkVdRDdDemhIH0Gxbhot+/0CgCArhGiEIMwI27eE40gRaHAAFxtLSJF7ckIoCHLTqUgsoZWtpXRm1VnNO/b5ZX4fvWcVXZ37ANjXvYfVz61k0ZFHsWXXFq649j3s3bOXr3/mm8yeOZ9NW9ZzbMfxNDROAmDy9GZOeeXRkX/xl6KUwvU8XNfFcRIkUyncgQy+75NMJkkmE1ijvP2cZgQjfxWNR+QpouXo2w950VEjNSOMovjTWKIBMfy/SgZj7KnMaXydjhpeG2wT2bS4rpJJ8cfyBmX7uMRZ0d4b+j0TZTURbXP1BeaDbSP2Z4nfoYXCn08x9GNaMtpWLAJ1cTwjnuqNFktVpUFsLq/Fn46pq1G4ldXFCeeI2hIFXUl/R5jXalRSN0KROCZ0BZe6cvXIeoldGrmfsUYUOS434igqVSmlcF0X13WxHYdkMoXrZggK8p4YZd5TSpF1h3Kqk8up2aGcmiCZSCBr9V0iwErzdSqVIpPJ4vteLu5E9bg932P2ZLtZC+UIpWyksIRAqkBIRShCKaSNJdAKJ3e7XhyJUH5WBFYoSCQJeoWwEqPaPDVz6F+9qUJRNuIGbN+8BxUqXDfDPr+Lj9x4BY/98Ql6dTcLFy6gt7cXUac58+9PpqXlPL799dtZwFJsJ8H2TXtq6tr3ffbu62bWrFm0tbUhxHAK1FrT1dXF1q1baW1pxnEO7LUUI5Me8Ym7ttYlKXzEPiIk4hiUa5EgEOX1I/MWUa917HRcpbpYjVax30rCNU7ARe/PEQs4Chf14GKps7KaSCFWLuJ0ge+CqdRitVa4UKQJimXdkOPhtaPANmZhlJRn+1ELttj6GkVb2cdqgY1WuOko87IOqgmYqpKtkmY4oKNuOuptdB6r7d8R+sgtjuI4HuX3IMrS93327t3HzJkzaI3Ie7u7uti2bRvNo8h7uZy6j5kz43LqLrZu3UpL8+h879vXzazZs2N9b9myheYqvlUYgjr0n+Z0yIu3MAwiywWCgYF+ent7aJnTzOIli5kxcwZ79+7l+eefR0rJ9Tdey9SpUwGQSc2WbZuZ1j6Lhobhwc24RO66Ll2799DR0YHtOLieV6zyhWBSczN1dfWsXrOK9smTSSaTFdakPKFWp8S4lraj1mljE3hlEm+UAq/oUwUf1QScZmyjb6MTcDn1Fi3gqtdFHx6VBBylhdECjsKPlYV45VG43MLIRNzgh2pCrsBmuGlpQVlpNDG7phIVpMMIFqPVwFhFW26xWhxxbSsJt4jIqgm3GBWmR1kHYxFuusKO0zHV1YRbrClRS1Up2y0HSZjV0kwP5r2u3SxZuiQ27zU1N5Ouq2fNmtVMmTKY92KOm0KGcurSpUsr5NQW6uoaWL16FVMmt8Xm1NJeXNdl9549dHQsq+p71aqVTJ7cRjIRPzSW0x2Htn475MVbHL39vXQHO1n0sgUEgU9XVxf33nsv3/ve9/nrqrUgbE48aQXvfMfbOe7445g+cyrzjziCR+5/jCPsjpwTrYmaOg3DkM7OThYvXorWkM1kYuOwbYcFCxby3F9XM2f2HCxrZPcRHpVOimxbzVO8OKtNE45i9K3IJrcQUVS5aS1KrlL3MSKtqrhjPwo4og67QQEHEW3jBFxJHaUfIwvLZViRCCsWAqKkbWHrgqJhRGmKEoXFwzV5t8XHVPl6F8cW5buMEeXHCOOY9tWEQLldrcIvWnhVP2l9tKItpvdKwq1CctaV6sodlLQdm3CL8VpZ11Vk5OKu+GPc/qjuI7dYvVGZxYhUWuzRSRiGbO/czqKjFteU945csIDnnluTy3uyct4byqmLFi2pLacuXMhza1Yze/bs+Jw6eHyEYUjnjk6WLO6oyffCo45izeqVzJ5VwfcEYMKKtx3bO3nT+y/i6BXL0FpzzTXXcMcPf0x763QWL1yBnUzSu9vlQx/6BO94x+v58Mf+nTAMSSQdHv3VqiJfpem7p6eH+voGLNsmmxmoGIfveTiJJOlUHT09PbS0tFSwjsy+VRiJ0ir3X2tXZdJqxOIsV1D53LdqAi5GjsYIuFoE3sETcKAjr0AdTKqDCi1SrAyKPyhdW4oE3nB9nEgb+jhCEVfQcZFNFZFWJuRi7AqKixuIcjtKzfof4QN//x0u+sk3ObNxdOk5isqeKifkWsXacFE1UVeLnwMk2vIfRiHMgNJzkorqD7hwqybMaqyP/VhhfaLqRyzuap9Qjd7lFVrrXN6rq6sfYd5L09M9lPfi/ff09FBXH+07k82SHryYsch3OjqnlvbS09NDQ31j3vcNN1xP+5SpvOey9+Rtvve977Jq1Wo+97nP4SSS1NXV15CvD20m7LNCW5qn8ouf/hbXdbnvvvv47ne/z8IjljFr5nxSKQchwKlLMW/eAr7z7R+xevVqurq6+MXPfo1WhWKo+FAIQ0XX7i4mT5lCNtOH57lVX9mBfqa0t9PV1UUYlp+fV41R/K1VvWYUfxWW/cBUSyqRfirdiiCyl4p/OY4owYwiyWiGDoH9kGQKrlqMqMz9F1mp8+uTX63iiGPqC5YiP8bV68G9VrLvI2zytrrUpsyi3E9+Y5faDvbe8zvesnAhixcuZPHCBSxe+Ebu7xncSEMvlaFrzwAKTbjrV7z3/Pdx754Q3f8Q7z/7ndzfG9Hl0Kv3Xt5y/Bu5r1ej+x/mylMXsmjhAhYtXMypF76Hrz+ym7DnXt66cMFg/0MxFIQQuaZFlRGbudS22C5yy5X4Kd0LpftwuKeo70TMUVD+oUJ9MbpSXb5+P3ynqOE7VaGucNOV1Ze/ldfHfixpUWYTXz9cVMkmRrjp8oWIosrNyI1edXXtYvLkyfm8t2PnDjKZgeJcl82wY+eO4bw3pXrey/nuYvLk8px6//33cfYZZ/Kzn/00Oqfu7iIMI+7rmh91K8/Xl13+Xu6557d85StfxvNc/vu/v8Wdd9zJFVddlffd3j6V3bu7CMflnrEHhwk78rYv2Ep7qpXdu3dz22230d42g9nTFuJ7Plk/A/hoBaCZ3DaNn/3sF5x//qtpamhiz56dZf40ub/1lQrp2ddNIuEw0NdXZtfT3U3TpElFZYEQpOvq6e7uRilVZSh2sKehDkv6r4mKbaM9DZcW1Md2Gm8TObZW5qfa+W+5gqLi+IXhpfIP+XqKqopKKCqOGWXTejAiQUx95RE4YL+NwhW8VR2Jy9kUZg4R8bHgzLOy+uG2tYzI5YtLnpiHiEo2paNuheS2k2g6iVsfuoOzG3NlYRAURZRf0CCmnM8tv7kQFYboXpe9+7K5fRGXsLTI+9Bhlt3uSdzy1Pc5O7mPl373af7lI5/nZT8+G+JiqKApYpN4RFHs+MkoEnpMUeWodGRpRHGMhKmwMXJVoxVmleorCbNK9dVEWS02B1+4RVLtWIgxLrPRuas0u7uL896tX/863d09XHfdx7FtmzAM+dznPofrulx//fUFeW8fSoVYVvRYUJRvgIceepibbrqJq6+9lq98+UuEQcArX/lKYDin9uzrLvJdGrtSIT0lvtunTOYHd97FG99wCSuffZZtW7fx/TvupLW1md7u7oK4e1BhOOq7RRxsDnnxFncwfvDay5k8pQ3XdVn3/Eucc/Y5zJzakbvkOHQJwszguKIm8D22bOpkyZIl3HDjtTzx+JMlnWgYvDLF932U1nhuFs/3yvq960c/4s1vflPZpczSyh3cnu/XcJXMaARcZeNIuRNrU0mc1WJzoAQc5dHECLhabIZyTpxIy9fHCrxKIq1KvR78eY4TcXpYUomy7TT0JobeIkTc8PpET6kWVBR9jBZyucUSgVY6dTpcEZl8ytdUE+eicI2U7xMU3R0oYOc91/POD93FOqsF6R7F27WG7nt501nf4e33385ZaOh5jMuOXwi8jFv+fDtnNZZ2rwvecy8RhoRKI20bqb18bOUxVBFoMcUjEWqR9lGZtrS4QqIfmSCLD6zSeW3DPvaHaMt5j6+uJOrGKtyqibJabMZHuMUcBjXaVBZuMJj3lCrKex+7+hre+973ct311/PRj32UL3/py2zdupVb/+sbuNnc1OdQ3vMr5L0o33/60x+56fM385VbvsYpp5xKx7Jl/Os730EQBpxzzjmRvodXR5f4Ls7Xe/bspmlSM+dfcCHf+fa3+fuLX8ekSU3s7tqVb1c17sqH6yHBxJCchdMmg6/n1qyls7MTgFRdkvq6OlJ2Gos0lkxiW8nB9wRaCBoa6+jv72fjxo2sfW5tiT9A5T5rrXGzWXw/IPB9fM8rel31gQ8SBkFRWRj4+L6LN3iFi46It6y//DRQcV1825LtQLlN9X5rtRnqIq4vyv1E2BT1F1Mfb0PZOhdPUcXEXmQTfewMT/tF+KBk3UvXkdy6R27H/OEaVT98LBfdKLaoba6P8nqK6st9lNcP2xSGrstsCve3Ltx+Mfs8/4q0K+1i2Db/L3K/FWzvnse47ISjWLLozdzXM9g++xzf/tyDHPX5h3jirnexMAlDEeQE4uBS00nc+pf1vPDSHZzVULyNhmMmHws9j3HZiUfRcfQJvPqj67nwMx/iuFRMDHHxFm7rkvXUEdukeIcU2+oo32V2Ecdn0UYvrIqyKdk3MfVlx1hRfdQxWNy21Cbut7y4PurYKBBuMceOjv1NyH+ZK9joCjYR+6zasVBmE11fuP6VbCL3d+Q2qrJ+cTYFfblZtyjveZ7L9267nYH+Af71nf/Kli1buP0Hd4BWBXkvlwOr9eu6xb63bevkK1/7GiuWr+DF55/jiPnz+MY3v8WuXV2Vc6oq316uW56vb/nqV/m///1f/ue22/nTIw/z2RtvLM7Xnls57gnAIT/yBvmfjCL+56Zf8GLnX7nj5//JK195Ls88uZbmpQvp2tpLT2YvAT5aajQ+nTtf4k1vv5B169bxsfd+hsZkOxdf/JqSHnJDArbjkEqn2dG5nYaGeny/+M/vzRtfKv4xAhKJBJ3bO0ml09iDKr7y7h/sL2JRxLaNb1Oxj1i7gooyGz0YR6X6kjtxxdgMVeWNI4bZRKRNeeBi8HtbYTivxCZ65YVmcFQpeoRMADpy9GxwvQZH7cr20+BxMTTyVlw/HJgo2Y2FbUtH5nRR28EVK5lC1aX1RW95D5SOrBVux8JNqiP8lJQO2pVPlUaii0fhyqwK2+WnLDW+NzgS5u1iXe9sLj5xCvX2XCZZlAiC4Y+h5xExYD5YGaAKh/4G+zptyxf5h39+jqWLm3N1UTFErFMcsaNtke10DVVlR9LI/MX4Ka+KjztXXaG+WvuKCbHSyFrOecXIdFzPOuqtvL4WGx1ZGumj2C62YY02EesecQDUcuxUOo5txyFVV5z3PM/F9z2+d9vtvO1tb+G/vvkt9u7eSW9PNzCY9zq35/Ne3D5yInLqu979HpQK2bh+HQCbN61n3rw5XPWBD/LiC8+V5dTiw2u4p+F8vY2GhgZ83+dnP/sFv/71b/jBnXcxua2V2++4k0tffwmWbXHppW8gkUiwvbOTZJW4D3UO/ZG3mC3rB5rPffUaZs6cyTve8Q42bFyLlQyZ1FiPbSdwHBshFX0D3WBlOO+8V9HR0cHFb301s6ceGduRFJJJzS2sXrkGy7LLRt481y0rk9Ji1arVNE9qQUpZ48EQ/YWtLvqq/VjEOI1sVlJYZhPfV370Ir7zGmw0Qz9O0QmpuCY6B1Ww0eX1FBWX1w1X6dhklauKbstg20rn7gyPWEQ7Hx4pim5f9Fd55NoN2VBkUzRahi7+WLxYUqFj7Ib/RdkWd1XhX359cz0HnovnesO7Jzmd5S0b+eUD6+n3soQl3xWNRss0zfYe1m7ro3/fPrJ6yHc/G55cyY5Mhm2P3sPGunm02MPbNvBcxBFv4orlT/KF/1mLW1BeFIMGrYtjjfsXtf6lIzwlW66on6JRkdK9Vuq3bG+U2hXvVcp8FfZVdqRRNrJWWF+wTcb2XYirruV7EBt50WpHfkcKFyvZ6KjSaB/Di+Pz+6hL68oKIop0cX1E12WFUgpamptZs6o47+3bs5vNm9bz45/8H3t27WBP167yvNfcUvGJCEJKmkty6ovP/5WXXlhblEc3rn+RtWtWFvheRXNzS+6JCBHrlIu73PfMGTP44V13kbAl69auIfSy3HH33cw/4ohh3ytX0dzcXCHuuIPy0OHQF28xpGQj+/bYPUgfAAAgAElEQVT10N/fj1KKL3zpJh77y+/Yvms9vuvS093H5i3rGXC3c+NnrmP79u309fXR29NDf3/cfWA0lmXR1tpKoj7NU08/QzKdxvO82FcyXcefn3qauoZ62tpa8/e7qW3XR39xq7eN/DWJ8Rr/IxTpoOxjtb4iOh+xTcTPYcxCWc6KcBrdtEoCiwi8KHlFUC15FU87RXrIJ69xEXI6Zi0LKovtCte72EG5DosSaXH2EfIkok3ZC6DnMd574mI6liymY8lbuL9Po52FvO3TbyJz8/mceOpVrGybS5MsTHwanV7GW/7B5huvPZ4T33ALz2UGt5vXyUPffC/nHHsM51y9ltM//B6WpUraMolT3nMhwU9vY1VGR8dQKe6hYyhWoOkik+ptiLeP2iNFdqWNyrsbu2CjJsEWfdwXHNMxX4v4Y374WKr8h8twRfS3PtacuMblNtEuB9cwMuyR2UQItwjjaJvYaGP7siyLtrY2kvV1PPVMcd7bs7uLR/5wP7t27ijKe0899TT19YN5L+YiPQ35nJosyKmu60bmU9d18zk13dBAa0FOjTre8vm6btj3eRdciNCKLZs24Hke27ZuJtPfy8UXv64gX9fR1hof90Sg4sRbLHp4/uWS1yN3LkUsmoHYlH1BZpockbBSVtqzpbBsK/QsWzQKyw5dx9aWIx3pBFo6ECRcW6bqpEwFqLTl6AaJbJQpMclKyFZL6FZtycm3Hqcv2blje1kIn33fb1mz6Y/ItMuio2dy81c/TVdXF08+8RTPPPUslmVx/MuOZfnyZYRhyPv+5RpcP0vnlr2ccOS5XP+NN8SuXqg0W7du4dm//IX6dJqlHUsJPBff8wlViJQWiYSDnUiycuVKsq7HimNWMHPGrOGDoezqwGqIso/V28ZNg8UVRTsWEZ+ibeLrc0VVA6jBJjKagoXINYqIp5pdxHRq0YforZ+rit8zooL/YZtqe1ZU6iLfUWWT0unT2uyibWvZr1X8VzcEIUkmk4WXLuC7LkqDkE5uNF0AOsR3fZSQJBI2geehtEA4DglLDtcDILESDrYUgEL5Pn6ooagtIB0SDgRegB0TQ4zWGCYyS47WrFyWlC9U8V/FLl8T+8fFoI2u7CNnU6leF/iJ76RilAUiKs5/vE2EUKpkp8tKypciAqk20hZpU2YXYRGx8+NtKoi2yg0Jw5CtW7fyzDPPUJdOsXRp5bznej4rVqxg5sxZkVeaFoYUhoqt2zbzl2dqz6nLh3KqlHFrk4tbqcF8/WxV38+uXEk267JixXJmzJwVe6Vp+9RpvPspebcIVVeoxZ7QU3tUVncrVG/oiz4bmRlQKpsMVBZszxbKV77yAxH6gZX0da8OrUQY6DAIM4lAeWE2TPf4ek5qoVq7Dd2+Bn33XQzfp0TEnXMSz4Q45y0KS1gsaD+F7p7dHHFEM0EQ0Nm5A8sSXP7+d+G6Lo8//gQ9PT20trYyfXYrPWumM2tuHY119ZV9S8H0adMJgpAXnl/Lgw/8nnnz59PePoXAD0nYFpu3bGP9xk20tbbQ0bGM6dOmDx7AmsJzzQbfaqDAcug3pGriHdrfInKxxGus42GbAgeRrgsefhTZlx4sij83L9Ym72t4Ibq48BgXccWlTsvtyhuU2OhIEVeY7KJE2HCC0rFCrjDRxd1eZNhkcIuXmpUmuzIxF5XQogRdVMIqVXJFrUvso87vKzTWxUUVE7jCjbk7ulY+rlt6+WeI6w7dX0qjfZesX9oyJPBCyh6yV9QWUB7u4JxpWOEO7VVFzIiaVJEZ8QvlpTUItXxtTWKtBl9jFWy1+KhFkI3Aptxu9DbDRdUE2fiJtvji2IhrLcCyLKZPn04QBKx9fi0PPvh75s2LyHubNtHW2prLe9OnVxVuOd+DObWjek5tbW1haccypk+dXlW4AVhS5vP1888/zwMPPMj8+UeU+X5p40ZaW1pY2tHBtGnTJ+wtQoaYsOLN9xRSSyY1TOYXdzxMf7aPv65cR+emvXz3x8vZtWsXX7/pDo48agapBodVj3eysHUetkjhZarfmM9xbObMnkVDfT3btm9jR2cnW7Zsxg8CHNumsbGRJUuXMHPGDFpbW7Htwk1ZLJKqi7DCduXCp7oAjG5XEk2JiCsWYOVSJ1oQ5mriRV7OpkSgjUTo5e2qibiR2pTYFRVHC72cftMFVSMTYeMl5Ip91S7mInqLeIsaeauU0KKFXVlfxcGUF5VXV7KIvRZif1BTV1WNqoityIJ4p7Uk7Ng24yTWcrYHU7AVlNYitGq1O8iiLaZoBDYxwq6Kvygcx2H2nDnUNzSwdevWwby3ZTDvWTQ2NbF06RJmzpgZkfeiDk1d5HvOnNk0NNSzdds2dsbk1BkzZtDa0optWxVjLYt79mzq6xvYtm0LOzp3sHnzprzvhsZGlixZzIzpM2ltbSmLeyIyYddg3qLJbH5hHwBLp53Bc7/tQuj5tIh2rrny8wS4BN1NeBvmsCfTw4K2E6ivbwQEcxe11tSHbdtMmTKZ5uZm5s6ZS3bwkmTHsUmnUtTX1+M4ToVpsGL1VV2EDbVh2LJYB455FG64qESAlTWL91dsMwKBNiYRB9EPPadIfFXQZJFrV2SXU2tFjUYl5KBMXZUmSFHFR86mFjGX8xMl5oriL4ipkqAr/li7sBtejJom1eVFESGUUzZmfBCoreexJs2y2hEIqmLzWgTYCPxW9VfhgoOCDquu+ZgEW0RJrL/oilj5s99EW4RVLaKtqGD8RFthrW3ZTJk8heZJzcybO49MNkPgB9hV8l4l4TZELqdOobm5mXlz55LJZvO+U6kU9XVDviuGGhm7bdtMmdxG86Qm5s6ZRzabyYu3VCpNfX1dlXw9sZiw4u3Sq44bfWNRcnPYiqaCRMIhkRh8BlrNo2hDFKuvAzMKV9BDrSIuYio1t1hNxBVJqpGJuKJmhZIhzldxj/mqvF2x43hNFmNX5GIkQq7oQ66mplG5QptiHzmb8h+/6tOsw/HUJOiGO484rmoQdmUfa0l+xXFGUnWONcK8RkYsBGMbjMxTfKKu3c9IRNqw2XgJtZyvWsxqGaE74IKtor/Kx21tYmxiirYo17m8lyCRcGiheURtq/U37DtB0RNRa2wf3bcu802VuCc6E1a8jQmtRyTgBhsNvo1UhBW2P1CjcAX9xSyWF42XiCsqHOEoW4xdmdgr/PGqNhpXHP3YhVy5v6KSUYzK5WyKY6llmnXYtnZBF9l9nKgrMY75O7tKgo0WeYUtYopHxIgF2RipTc+NPKri5iNIYiNMfLUKtZrDGK/RtfiP0SUjFGzFi7X8oTFeoi3iOzYG0RYTxoiFW/xhU+NxVN3Rfmlb3OxAf/sPDSaAeNP7Z+cMJazYUYcK8YxYhMV7Glnf49u+0EeZnwjtl7OJX+NiSVUgvMpE43BhpdhjY6tmK6j4O1CkyYpEUsyP42CViLEbSazDP89xomjQTlO2InF+o1a10h6KkUvR7Ya+eyLipsQ19VuwrjGHzmHz01tFuNW8njG/dxXbV/iNjE7yNfZRk52uunK6BpsiCVR5ZSuFFukg2rYWIRgvymJFYElRrKwtOV6qh1hNIEeFUut+rq1ddfMDKfoOm1+OUTEBxNt+5oCOwhW3qzDTGN0upkF8+xjDmM6KU7uItC9L/zErXzR6Ftlv4V+ZIuriz6KA81GV2ZU3LPxOixibvN+CH4/iEaly5ZqPWFSQXrrkJza/eUr9FaxbyWjd8OpHpJGSYTMRYRdnm29TKdHHnQ8yNC0R25IKAk9HfixqWsnvCK3GRvWEMKaUMVKRNda2I2lTs21lIaaLvzAVKPgNqFGI7S/BVtJLxWa6BpvcYjXRFuMpomAEq12pcEKLtuJmf9vCDSaQeJt7xIKDHYLBYDAYDIbDBK0hCDWur/B8jR9qsns3HuywamLCiDeDwWAwGAyGsaCUJgjB9RV+kBNspUyEgb1DXrxpxjhNYTAYDAaD4W8WrXPPQw+UJgh0/nOk7QGObbQc8uLNYDAYDAaDYaQEoSYINaECrTWen1s+HDDizWAwGAwGw2GB1rnnk/tB7nZJmpyI83w1YUbVasGIN4PBYDAYDBMeP8iNrA2ds6YGR9vCmCnSiYwRbwaDwWAwGCYsYajxwuIbkwehxgsO37PmjXgzGAwGg8Ew4VAKvEBROrDmhxo/UAcnqAOEPNgB/C1w3+9+x6knn8S82bMAmDd7Vv5zLdRiP1KfBoPBYDBMRLQGz8/dn63oth46dwuQw+WihEoc+iNvmoo3XRkSLBs2bylaBqivr2fR4sVcd/0NrDjmmLL6Qobax/m3bZumpiY6lh3N5e99LyefckrNq/DJG65n29atPPXMX2puU4nSdTYYDAaD4fChcLpTUPh0laErSEtlwdDVpGM+vU1PjKnWw3bkbcPmLdzyn7fy1J//zL9/4AOR9YWvajz/4kvc/oMfsnNHJ2+69J/44yOP1BzL5s2bAWhtayvqu1ZqsR+pT4PBYDAYDh00EABZoA/YN/gaAFyUVriDT0GIEm6uX15+OHPYijeAvzvtNAA2b940Zl9SSpZ2dPDx628gDEO+dPPN+br+vj6u/thHOfG4Yzl66RL+9Z3vZPv27UBulCwMw/znwtcQpeUnHncsP//ZT8vqhz7HlRfWdXd388GrruS4Fcs5bsVyPnDlFXR3d9fcp8FgMBgM+x8FeOQE2x5gB7AF2Dr42obSOwjCAVSEOlMaXL/y83YPRw79adMx8MjDDwPDIq6Q0unTWketVhyzAoBnnx2eAv3EDTdw5x0/5L//5ztMaW/nogvOJ5MZ4PYf/JANm7dUnNot5MZPf4Zly5dz0QXn88kbbuA1F722zCbKXxSfuP46fvyjH/HVW24hDBVXvv99CCH4whe/NOI+DQaDwWAYX4ZG2gbICbc+oAfYi7t7I3v+8ihBpp/GhcfStPBlSBGgmYMqGHNSGjz/8L4wIY7DVrwNCZwZM2fy/z79mbL60U4xDgl/IYbn4O+957cAvPOf354ve/yxx0bs++J//EcSiQQAO3fuHFV8Q9x/330AnPvKV6EHg37g/vv3a58Gg8FgMNSGT26kbS+wm2BgEzsf/S07//Qgfk8PddNmYKds+jftYt33vkDHlV/GmtQOug4YvGjhML+itBKHrXh7/sWX+Mynb+Tb3/oW//6Bq7j9Bz8cF7/P/iU34nb00cuHCweF3FPP/CV/XttoSKVSY4ptovRpMBgMhr9lFLlRts24u59h0y9vY9+a1dTPPIpZ5/wzqeYmwuwuwv7tJNtPZ/vvb2fLL7/B/DefhgrrciNugfqbmyotZEKc8zaa/ZNIJPjQhz9Ca2srDz/0EA899IcxxaCUYs3q1Xzi+uuwLIsrCy6CeNWrXgXAf37967iuO6Z+aqGhoRGAzs7OWJuzzj4byI0K/vY3vwHgzLPO2u+xGQwGg8FQmSzQyc5Hv8ufr7uc7I5eZp71Jmac+UbqZx6NTE9DOI0Ip46g9yXalp/NzkcfRGWfRxPgBfvvUVcTRQ9O6JG3IAiA3G08okin07zzX/6Vz3/us3z1y1/m9NNfnq8b6TlvRx15BI2NjSzt6OCGT36q6FYh1378OtLpNL/4xc/57299E6VUTT5Hy/uueD+3fv3rnHziCbH9fPz6G3Lv114LwMWve12+zGAwGAyGHCHgkjv/7EDRQ/+WB1l32600HXkiddPnoZVGBSGIFFZqElayHSafBDrEqptL85J72PPsr2g89nigYb9GNxEEnKhuEoHW+XaXvB65cyli0QzEpuwLMtPkiISVstKeLYVlW6Fn2aJRWHboOra2HOlIJ9DSgSDh2jJVJ2UqQKUtRzdIZKNMiUlWQrZaQrdqS07+z2PVJTs6tzH/yIVlYXz/ttu45uqP8bKTTuKuH/149FvBYDAYDIa/OTTQDWwGdpETcgeCkL/e+jFEkCLwbZItk0m2TKZx/ok0zHs5VnoyINBBBr+vi2zXJnY//X/0rn+AJR++h6w3P3c/Nz28FkWfIX+ud+5zvF0pA3s20D5tOpc9bd0tQtUVarEn9NQeldXdCtUb+qLPRmYGlMomA5UF27OF8pWv/ECEfmAlfd2rQysRBjoMwkwiUF6YDdM9vp6TWqjWbkO3r0HffRfDJ+wJMWK9OKFH3r70xZt5zUWv5eprrjnYoRgMBoPBMMHwgV2senElr/vIWtKN7TiWoClts/qFzSQSCVrbWsfUg+d67NmzJ+/Lcz1Cbx9fWtDLsmNa6On0SbYdQcvSV5JqX4R00oTZfoL+vWR2vMi+5x+i5/kHcfdsJMj0EOx7GlE/G/SEli9jZgKsfbwgfeKppw9gHAaDwWAwHE4EwHauvPlFjl+2jItffSoz2+pY9fxGvq80733LhePSy9bO3dz87f/l8n86h5ZJDfzkN3/kufU2R0xdy8wz/oPUjJNBwL6/3o/XvRO7YTJN848jPW0uTqqHllm92JPexXPf+zg7Hvg+0157JqFqGZfYJioTQLxR8fFYBoPBYDAYRoOiu6+PVS96/PPJR7CrX7FwlsNfntvIBef8Hf2+xrYElhAIcteIaq3J+Dr3OKpAE6rcq2KaTjaxeP5MNu7qp08lmTpzFg88u5xTN/6EI444nb4ta9n0s0/i93Ux/cx/o3HuIhKTWkArpDwCnV2P9juZd+G/sfE332DWP2zHoxk9yjO/KqInxg1/J4Z4MxgMBoPBMM5oVr+Uu0PCyYtn0NaYoCUFb3zlcmZOnYRtCbTO3QzXDzVBCH6Ye76oF+bK/CD38kI1+MzRaOXzmlccQ1tbM+l0Ar/X4YcDi9Cyke61v2fdDz+Clayj7ZhzSbW2IyxrUEAJZKIZq3E+7o5HqJ91DgJJ96pfkFq0gCBMjMtWUEqjJtidR4x4MxgMBoPhb5acZJnZnGDKpAQNSThqVhPJxPCdxIIQQi0IlcAPBpcHR9yGxFwQakKt8WNunKvbJzGpIUkyYTNl2RxuBiaf9DbW/fAjOHWNpKYsQPlZwoFulJdBhT7SdhDCxkpPw0q1obI7ae04lX3P3sOspW8nCNtHvKq5uAcFm564E3tGvBkMBoPB8DdO5669WDTiupLu3l6mtzXg2AKlwFe5UbcgP9KmBkfdVMGywg9C/DBaDT367IscNWcqrc3Dt/mYfNLb2PHgl5m85GiyfYowM4Dft5sw04OqH0DIRhACYddh1c0k6H2JySvO5dmvXs6si19AiCmFN78oQwOqQGiGg7pyogq2Qox4MxgMBoPhb5bcCNuTf93Elp2NzJ05md89spLjl8whmbBw7Fy9UpogVHiByr37CtcL8YKQrBcQhIpQxauiNS9uw/UCWifV0zeQBSA98xjqZh6D9rZQ13YM2Z4+/L4ugv49OI1TkHYCBAjpINNT0d1rsVKNNM1fQvfKn1N/7HEEQbqoH61zIi0MNYHKnb9WeIuQwwUj3gwGg8Fg+JvEpqk+J86eeW4T7W1NHDlvBn9cuZENnfuwpCTh2BQ8yhutIQjDwWnH3NRjLWzq3E0QhtTXpejpG8iXt530VnY/8GFm/N3J9Hd14fftw+/rIpGZhkykkU4ShEQ6jVjpdoK+9bQdfQadD/yYxcdfTsBs0BAoTRjmhJseCvQwZkI8HstgMBgMBsN4Y7HsyEkAdO7uZtfeXgayHuecuoznN+7ADxX9WY++zPCrP+vh+iH+4Eib1tVf/QNZ9nT3k0w4aK3pG3Bpqs89V3vySW9nYG9A2LcBJ5UmzPTi9+4iGNiH8vrROgBhIawkMjWFcGAzzUtOJ7urk2DfUwRhSNbLTd+qcXtO/aEv/A75kbeCmygbDAaDwWAYNxxgPv/+5in84F7FrLnz+PO6LubNaieZcEg1NDFj+rQx9dDT28cfH3ua+vo6Fi5ejOd5bOx8misvPRMAK91My/LX0rPpQernn0vPlh14PTvx+3dj1zfnLlqwbRA20mlEWGmUu4fWpSez48HbaDnvTPxxfFzWRNEbh7x4O1S5+647+X+f/CT1DQ088qdHD1ocxy4/mqefXXlA+zxU1t1gMBgMY0EAM/j3N5/H7Kl/YfOO5/jSzx+kuz93+5C1ux8a196+8X+PARDSz11P/Zm7nvpP3nTG33PRy97Ghtt+RltHhn1hQNC3B79nJ05DGzKRwraHLlxII1NtBL0vMuXEC3jxx59l2ms7yfoLJo7qGicOS/H2m1//mk/ccD379u7lxJe9jO/edvuYfWazWS4479X8+rf3kEgk+NxnPsNXvnYLJ5x44qh9RgmvamKsNI69e/eOuc+RMh7rXgvzZs9iw+YtAJx0wvHs3r2bdDrNkqVLufqaaznm2GOZN3tWUZshe4PBYDDUgg0s5A3nzuTLP/8EmeRL/NNrX0N9qo6LjjmDK756PXPnzGHWjJnYljWmnlzP4ze/v49UKsWy446mr7+fK//7k8z96K00yUn0b11DXdsy3L7+wanTqdjpBpRtISyJEA7SaSLofYnU9OORIkHf6p9hH/F+/PCwlDOxHPprOwo1/R/XXM1XvnYLy1esYPOmTeMSRiqV4r4HHswv79q1i9NOPx0pR3/aYJTwqibGSuMYjz5Hynis+0jZsWMHL23chO/73HvPPbz3sst4+E9/AoxgMxgMhrGhgL9y/Q9/xbRZ83hh+0YuPfUC/vTXp8ngE1qCnXu6SDlJEraNFBKtNW7go9G4vocXBnihT6gUoYp/wH37jGmsX7+ep9etwXEcmpon8dVffo+bTnwb3X/9T9pPOJ7M7t14vbtI9O3BrpuETCSwZB0IibDrEU4jYd9Gphz/SnpW/YbJR/0zfvi39bisCXDBwsjvohcqxZT2KdTX17N4yRIAznzFy1m04Ehedc7ZrFz5bN726aee4ozTT+P4Y4/hd/femy9fv349b7jkH1m8cAHnv/pVAGWjPEfMncO82bN49SvP5aUXXwRg7dq1efshzjrjFSw8Yj6nvOxE7rrzjqK6ebNnlfktLbvw/PNYuugoTjvllMg4XnHa33HSCcfz0B9+X+Qj6nOU/7ht8Pa3voWXHX8cUQytO8Djjz/GaaecwumnnsoTTzweG3ct26MSQ2IxmUzg+17N7QwGg8FQiQDYx75+l3nz5tPa1sZx85fiBh5X/P1befeZr+X957yOd5/xGv75tPN43Qln8NrjT+e8Y07hzI4TePnS4zl50QpOXHg0HfMWcuSsecyYOp3Wtray19y5c1m0aBEtLa20trXR0txCd38vrSe+lYE9HiLchpVIEGb68bt3EAzsI3T70KEL0gIrgXQa8ftepHnJ6ez5yxPY4Qvj96CsCXKV6qE/8jYKPvHJT/HGN7yBRCLJp268kTPOPJP1L73E2nUv8qtf/pJrr76an/78FwBce83V3PiZz9LU1MRVV1zBOeeeC8CHP/hBzrvgAr572+309/VF9jM04vON/7qV//3JT/jghz7Ej+++m0te/4Yiuzvv/hEtLS08/fRTvONtb+P1b/inMh9RfodYtXIlq59bi4q5lOZ73/8Ba1av5pM33MA9991fdfuU+o/aBmEY8vsHH+TRJ56s6uPj117LJz71KQBuuO46fvGrX1eMu9L2qMSQWJwxcyZf+dotZeVmBM5gMBhGQ8gz67cCMG3aNJJ2gsZkmsWz5nLklGm01zcNW6qQft+jz3ep9+sY8D0GPJc6L0PG92jwGxjwXfq8DAN+Fi8MynqzpEUqlcK2bZLJJPiQmrECZ+oKejY8R/3Ms+jdvhO/bzdBXxd2uh7LcZCOjZAOwmmAzA6k8GiafzR9a36KveRY/MA5YFvsYHNYircLX/MaLnzNa3j6qae4/LL38MdHcydJJpNJzr/gAj72kQ/nbV9ct443/lNObDnO8I5ftWol3/v+90mlUqRSqYr9vfbv/4HXv+5irrjqKn75y1/kxQvAXXfewTdu/S82bdpIMpmkt7d3VOtUX18fWzd37lymTZvGVVe8v6g8DEOsGs5RiNoGQghefd55fOsb3+Ca//iPiu3Xv/QSp7/85Wituezd76oYd63bIwgChCj+W2rD5i28uG4dl77h9XQs6ygqNxgMBsNoEezry12kMNA/QGB5ZD2PNRvWkbAsMm6WpO2gyc1sBUqR8T0yvku/75H1Pfq9LP1edrAsS7+bWw51+aDDxo0baZ/STn19Pb7vo3UCL9A0H/9Wuh/8d5oXuXT7LkG2H7+3C7t+ElYyjbAbQVoIK4Ww6wj6XqJ50d+x+9FfMWv5+/GDqQd4ux08Dkvx9tSf/8yiRYsQQpAZGL4Z4JYtm1m9ajWzZ8/Jlx1x5JFcedVVnHnW2ezZsydfftRRR3HnHXfwT5deSn9fH22TJ8f2N3XqVObMncfNX7iJ5cuX09IyPPd+46c+xU03f5EzzjyTvr4+jjl6Wb6usbGRDRs20NTYSGtbW2xZNVzX5Ve//CWLFi3Kl7W3t/PHRx7mpJOLpyyj/EdtAyklH7/uel5+2t9VFW/z58/noT/8AYAjFyyoaFtpewD8+cknWbx4MQ8//DBz5swpa3/kggWccuqpfOub3+TKqz5QsS+DwWAw1ILkmCNytwTZub0Ty7LpzQ7w+HMreWHHFqZMaqE+kSLpFD8IPlAhWd/D9T2ygc+AlyXru7iBjxeUj7gNsX7DeqSGbH0jmf4Bmutyf+Q3Hf9Wdvz8g3i7n6OubTHewAB+/16c/j1YqTQyIZFSICwHaacJBzqZtPA8ttz3P4i+JxDOBWg1bhOohzSHpXi75Wtf5aE//IHm5mY+fv0N+fI3X3opmUyGm26+OV/22c9/nqs/8lHed/nlzJ07Nz/t+NmbvsDHPvJhbvzUJ5k5axYP/P4PFft83T/+Ix+48gq+9e3/KSq/4qoPcO3VH2Pnzp0kEokiQfJv734357/qlcyePZvf/u6+2LJKHLlgAUcvXcL8+fO56YtfzJd/7JprufKKK+jv62PBgoUV+4zbBonkImwAACAASURBVP/w2os46eSTq8bwiU/9P654//sQQvClr3ylom2l7QHwX7feyoMP3M+U9nY++an/F+njnf/6b7znXf+WF2+F5++ZUTiDwWAYKZLm+mYAtmzeQkN9A2s2rWPZvEXc9YdfMqUlN3hhS1k2IwK5Jy7UeqaYH/h0d3fT192LO+DS19sLdVOA3D3fGjouonvTPbR0LCezdw9hNoPfuxurrgErlUKk60A4CDuFsFOEA5uYtPBE9j7xY+pOPwdPVZ4pO1wYnUQteBLsJa9H7lyKWDQDsSn7gsw0OSJhpay0Z0th2VboWbZoFJYduo6tLUc60gm0dCBIuLZM1UmZClBpy9ENEtkoU2KSlZCtltCt2pKTv35McMmO7ds4YuGiShFVpfC2E+NNNpvliccf46Mf+Qh/ePiRmqYqDQaDwWA4NNDAJq781n/wnQf+yunHn8z8qbO55LTzuOxL11Bf38CU1tpmgqrxx6cfp6mxiWULFgPwm4fv54ZLP8i7XvVWAHpX/ZQdd/4j8899BV0vamQqTbJlMqm26aQmzyDR1ALaJ8zuRGV2of0BZN0KXrjrehZd/TDd/fPzj8caeqZp0TuVr0nQfRuYOn0Glz1j3y1C1RVqsSf01B6V1d0K1Rv6os9GZgaUyiYDlQXbs4Xyla/8QIR+YCV93atDKxEGOgzCTCJQXpgN0z2+npNaqNZuQ7evQd99F8PzyUKM+CqJw3Lk7UBzxumn4TgJvvjlLxvhZjAYDIYJgkumdx3bnn8WCHnrUfP433uf4IEnH+Ehy+Kexx7E83xWvbSW+vr6Md/nLeu6uK6LG/o89PSjZF2X+VJw3rS5bHomd7cEzSS0bKZv8xrq20+jb9celJslzPQRDHRjJRNYCQdhJRF2GuV2Y9clcdItZDfcizX1XwjUBLiRxhj5mxFv+3M6Le6KTIPBYDAYDk2yZHsf5NMXvY5M7/C54a8/CJH84KpzipaPngPpBsn0udCzJUvoDr6y/YTZNNJpRshE7sIFp46g90Xalp/Nnsd/Qts/XErgNR6EtTiwTAjxNjHuumIwGAwGw0RhL0/8/G4yvQO8+i2XceIZ5+Zrvvqhf6Fl5nwuevvlNE2aRFEWLppz1AVvpZlal0xP6hITzbrnX+Cn3/gCCzuWcdHbLwfg4d/9lqd//V2O7FIEPc+Rap1P4GYJvWERZ9cFCMvOj76FA1tpPuosOr9zF9PC58ly/Kh1w0R5nvrhP7ZoMBgMBoOhgCzwPPd+8w4mtbRw/CvORmmF0opVTz6K64W8/IKLaWiehBaghEBLibZsSKQhWTf4qs+9Ug2Qasy9J+vRiTTaToJT8EqkIJmCZHrwVceCo1dw7MvPYfPGTZCqh1Q9p114Md0D0D0AvVs2UteSInTd4dE3N0voughh5cSblUZYSXS4m/pZS+lf839IEeREZsFLU7BMpdfE4JAfectt54mzQQ0Gg8FgOLTp58U//5FM7wBnve2thEE2r1u6tm9mytwFzJg/H61CsJMIO4GwnNyVpqJgzGdQCGmtIAzROsy10SE6DHIvHfWorOFRuHmLO1j//PNseWEV02bl7j5w1IoT2NT5JFO2DdC6pAchBMrN5l5e7qXTaZCD5745dQS965i84lw6H7+DaUvfh+c2l1yoUDoSWEjBtZt5gXdoc8iLN4PBYDAYDOOFBly2rV0HwIylJ2A3zxisEzTNOIoTF51EatbRSDuBkBbkbw+iB59YqUErtFKD72H+feizCoNcWehXiAMmzZFMX7ic9JR52C25e81NW9DBn1Y9+f/Zu+/4pqr+geOfm9lN2QXK3ooCgigIskX2HooMfUDWgwg4EJAlIsP9U1y49ZEhZYjwKAgyHgUUUBlSKBRpgQKlUOhI2+Te3x9p06RN2hRaaMr3/XoFknvPPed7T26Tb85d3FUNUs8fIrD8/aQkXMncdWofhVMz0tGbzY7RNzUtEXPpslw9/jeVk/eh0RZVIzt5y73X1i1f2R0pyZsQQghx29AAG6lJ9rvbhNW9CwBFZ0RvNFP/ga74h4RgCgl1StoAm/3KFqpqQwF7kqaq9lGqzIQNTQVVRdNUdHpr5sidibwEla1EjbsfwL90RRRzEAB+pcqQYYMr1gCCT1+kYgs9185Zcu061Zv9UPSmzGu+BZAW/ycA1w6sRHdPS2xWvZtLhHgeVdNQJHkTQgghRHGUgZKZxKRfvYLOYERvDkTRGclITyNQp7OPqmVRVVTVhqZmja5l/m+zoalW++us3aRq1v/eXbhXD1xLiCPtanlMir3NchXtI4HlWrQn9dD3aKnHMQdXyk7c0u0P1Rpo352r90PTDPzz35WYSpUjfu+PVG95kYSUcrjbXZr1UgGXBFVRfCV1k+RNCCGEuG2lXYlHZzRj8EtH75fGhVPH0KkZ6MqVzy6k2Y9rU21We8Jmy0C12Y9rU20Z9v+t6dnHuBXwkLGzx/6kcsUyGDX7Ltb0pEQAgu/owLW/t3Et5iQBVeuSGHPefsyb4/i3dAwBASSdj+fczs1YU1KpM+hp4nb/F+uZLWh+AxznJ2SH5PxMyTyOj8xj+XLfh7W4kuRNCCGEuE2lXYkHQGcwoTOZidy9hfSEhii167ktr1ozXEfXMkfibkTC2WhSEu4gwGgf+cpIumr/Pz2Qsvd24tLu9YSHJ4KGY/QtLfESlksXsabpSUs4i97kR7WHumMwXqV0g9YkH92CqXlPUlP17nNJJTNxQwco9num6vQ+k79J8iaEEELcVnRomWdYZiVvWU78/jPmjKuU1nu6sbyS58uCSk66RlLCBSxXLpJmth8fFxd9DABTYCBBd/fm/I71xOzYgc4cZB8hUxR0OhPG0CqE1GpK2bua4F+uDaolHltKHIbAytguJmE2WEiymrNDVTL/UZTMo9sU0CnoDHp0eiM6g8F+FRUfIMmbEEIIcVvR4x9svwvB6aN/UiGsimNOSFAgl+POYKlW3WUJJa8s7QYSuMsX4khLuUZa4mXSzPZEKyXxEgAVa1UnNTWAwPCqZFyKweBvID05Hb1fIAFhtShVrwkBYVUxBYeg2VIdJy6c3/YVFbsMJdWmQ7NlJqGKPVFT0KEoOhSdDp3BiE5vsP9vMKDT61EleRNCCCFE8aIARirXqwPAxTOnKeWXPTqFNZ1zMadIq1cvxzJeVl2wJbh8/izWjHTU1CTHKGBczD/4BweQkW4iKdFMmeadOP/Dp1RuWpXL50JB0WEuXQ6FzOu/BdhPtlCtELttC4F17kJfvSepZzVUVUPJ3EWqoEPRGzITNgM6owm9wf4aHzpZASR5E0IIIW4jCuBH7Wb3UbpyWY78fZgmrbtm3oUA7m1XgXX/WcrZ+CvUvfMel1tfaS5H/rveMsvlhIBcl+TIvD6c43Za2fPi/zhAYFApKlarZ78CXUoSF+MvcMeD95KSbCItFcrU7Uj62k9JiTtOYIXOXI294HLWqSX+HJcP/0LyueNUbNcT/zsGEn8+FItFRVF06HQ6FIPRnqgZjE4PA4ouc/epj5HkTQghhLitBKBpVek1ZRSfP7OI3b9so16jezPn6QgKCWX/7/8jQ2+iUngt+2RHfpN/opO7hOuQXFiVmqSnWdj98waio4/TttsQAsNqkXQtkUN/7AOgWe9BpCQbsdk0VL86lLvvQeIP7qRS2SukX72IpmWQeiEaS8IZ/MqXpUzzzoQNmEbStbJcOGcmNQUUvf1YNr0xM3EzmhyJm68mbVl8IHnT7FdzFkIIIcQN0TQNm02HppWmYZuO1G62nsh9u4n8c3eusr9v//6mxLR943K2b1zueF25XjXC6rckNtr+/X/1ciDlu0zBXKYcl6OOYEu/iEGD0Mb3EdRwIqpfPVKTgzgXY8SSqqGiQ28woDeZ0OkN6LOSNqPRfkZpHkmbpuV1G63iwweSNyGEEELcKJvNhjXDhs1qQ9MM6PQ1efytT1FIQkPNvK2nAqj2W0upGii23LeWKmLp6YEkXAgFVBRFITkJ9IY6BDZ/gaD7LRgMGVitJtItAVxOMZEar5CRrqIpCnqDEVPm6JreZEKflbTpDWQlbb6QnOVHkjchhBCihLNZbdhszg8daloZVFsoqmrDZlNRVQ1N1dDIPNA/r5u5O0/PPNbf5fZTOZdT8kgAnQ+fUxRUm4ZV1fAPyZ6elgEZicEogE6noWr2u3PZbBoYwGQEdHr0en3mmaP23aWK3mA/0/QmJ6BFTZI3IYQQoqRTQFEUdDodGECn16FphsybzNuL2G/kruU81cDlRa4EyHEiguI4xCmzmuzltZxlc95v1Lmc5tJOzpvKO5dzzRUzzyjV2S8DYj97VMm9DiWEJG9CCCFECafX20eljE7TnBMn52O9cp4squVIqJyXzVpA1bLLOupxqd91WZc6XW4e75TcuZ2fNc0pycxRzmV+SczccAx2CiGEEOJ24Slxu666wJdP3PRJkrwJIYQQtym5moNvkuRNCCGEuI1k79a88cRNcr9bQ5I3IYQQ4jbhfGyZ5F2+S5I3IYQQ4nbhOPhfDlLzZZK8CSGEELeB7DMxb7wuSf1ureKfvOU8x1gIIYQQBVeIX6Ul9ltZc6S4xVrxT96EEEIIcUNkDKRkKfbJm2/kwEIIIcRtogR/KfvKqvnAHRbsXfn3wT9vcRxCCCGEKMkMRmP+hYoBH0je3Ms6zVmxv7BPy3rufANcTUPBft8zR7nMBTVNQ6dkX2HaUUnmPMXd/XUz57nclwPnIWmneUrW/d6y52WGh0ZmXFm3CbFPdMzLWgkta300+zCpvWzmPeSc5jn6IXOepmkoiuLSD85952jQeZ6SPc+5b13rUBzxKh7m2ePJrj/7ndIc9SuO2HPMy7yBsOIci+MYBKeVzeo3R18qTjFkr5Nz21kRaY5tIrt+XWYJzdGZ2X2lOPWrEKLoKPY/fDTFfp9KB80+T0FDzSqX+XevkTUvq2j2vMxKs/+kFafPCzI/p7I+GBTHk6zF7J+hWfM0NbPdzPqzbnauOL3O2XbmZ6KiOH0mKlltZ5/16W4eitPnsFN7juCcanHuK8VpOS27Stc6ndbZ0Zeaktm32f2d+SXg6GdHl2pK1ke103uQXUDJXM7xZZxrnnNluK5b1vuChuY8z/F22ueqWva87O5QHP2lOfel5jwvZ9/i0n++wueSt6xOtm9YTm+GfaLLmwO4vHbavJ23G+etKfuPOeu5UyXO8zxtiLk3YPfzsqvy1J6SoynFaft3/gPP+dr5j9ilB3JsoIpz0VzzXFfVuS/d913OeTnrd33tvC6557muhqe+cw4+52sPfZcz3jz7zmVrAR/84xbCJ+W8MXqOm2I6/Qx1+a3s8iPeaYbzjzn7a80lUXB97XybKDc/zB2vsyvXPM1zUzb7J2eOeL2Ylz3LQ/055rmuC3n3ncvrHH3n8trNunjZd/n1q/MPcnftuWwVOe5r6vIuuGwHOV67bAc5XvvYj3OfS948/yELIYQQQpR8xf6EBSGEEEIIkU2SNyGEEEIIHyLJmxBCCCGED/GN5M3HDiQUQgghhA/KupJDMecbyZsQQgghhAAkeRNCCCGE8CmSvAkhhBBC+JBin7y53MxACCGEEKKIaPhGzlHskzchhBBCCJFNkjchhBBCCB/ic7fHErcXg8F1Ez2bprD2YgCR13zzZsJCCOFM0zTqB0Of8ilUNrvusLNarbcoKlHc+UDy5gt7n8XNcDJFx6ITZhqVN9OrjvlWhyOEEIXiyKU05h5Teb52GrUC1AItq2kaGVYrGenpRRSdbzGaTBgNhhL/494Hkjch7FbHGbijrJmHawQRHmS81eEIIUShqBZsRFVVVsfZeLaW90lYRkYGOoOBGrXqEBAYWIQR+o6U5GRiTp9CzcjAaCy53xOSvIlizXnc9XiyjsFV/QkPMlKvjIy8CSFKjkbl/Vlx1OL1viar1YpN1bjzzrtIT08jPc1SpPH5CpPZRMM77+KvA/tRrNZch96UFL6xVj5wqwpx8zWoUZVTMbG3OgwhhLhuFlvBv980TeNq4lXuuLsxaZZUVJutCCLzTTZVJV1VqVGrNkf++pPSZUoXbBeqj1yfzDeSNyGEEEIAYLPZuHI1kcCgQCypqbc6nGJHtVoJDAriytVEQkqFlMjRN7lUSD6GDh12q0MQ+Yg+eZL2bR8s1Hqa3n2X2zKephdmHEVdZ3GUV78WVPOmTR3P72nSuNDqFaK4UDUNi8WCpmlomioPDw+LxYJaQvfclejkrUfPXo7nI0aMpHefvgwePIRp06YTeSzSUcb5kVPi1cSbFq9wQyPfS15v2bKZTp0633BTzvVcvnwZAIvFQsf27UjPPJMra3pey+dcpjBiKsw6Pdn4/fe0aHYP997TlHVr1xZZO+7k1a/u5NUf8fEXHc8TLl1yu3xU1HEaNWzodl5+/RAVdZz2D7ah/YNtiIo6nmecmzf/yH3Nm9GuTWv+/OMPr2MQtzEvPvNciquaPNw8SroSnbw5u5SQwJqI1Xz55Rd0796NxYuWOOZt+G694yF8z5bNm+nUuRCSNzf1+Pn58dO2nzGZTF4vX5BlbkWdnsycMZ0vvvqajz/7nFkzZxRZO4XhRvpj08aNDBowgKSka27n59cPixcu4smx4xg1+kmWLFqUZ1uzZszgg4+WMW/+y8yfN8/rGITwln30Lf/HQ507c1+LFvTp3ZtPPvkYa0YGWuYIXv9+/UhLT/e6Lk+PDh063HAdhfW4wV4tlPemKN02yRuATmdfXZPJWKCLHw59bBhDhw7jp61bHdMOHz7Mv/41ilGjRnPkyBHH9HHjx9N/wECGDh3GG2+8yWPDhvPI0KFs2rTJUeZoZCSjx4xh6GPD2LN3r2P67FlzbmDtSqq8f4YmJiZy/PhxmjVvDkCNquGOec7PRw4fRotm9zhe9+jWlTvq16N1y5Zu63HmXA9A29YPcF/zZuzcsT3fOB7u3Ino6GjAPtLycOdOAHRq356G9epyT5PGTJ0ymeZNm9L07rv4+ssvvVq3Du3aUrdWTVq2uJeVK5bn2Za7su5UKF+eqKgoLpw/T5XwcI/l9u7dQ+uWLWnTqhW//Za9/ebsU0/tRkdHM3jgABrUrUO3h7vkqv/A/v20a9OaZk2bsGXzZo9xOPfHzh3bua95M9q2fsBt2ffefZcli+2J1ifLljFq1GiP9ebXD/v2/U637t3p3rMn+37f57EegOTkZMxmM/Xq1+fIkcOO6fnFIG5nBRh60/B6F+KlS5fY9b9dvP32W+z+ZTcffPgBmqZiMhlZ9e0qjAb9De+mTLxy5ZbvKs16lHQ+cRRfYeXAWbtFy5cvxzPPPpNruqeRtw8/eJ+jxyJ568236NihAwDvv/8hY8eOBeCDDz/irTffACAmJpaI1d9y9GgkLy9YwAfvv0dMbCwLFy6ia9euACxd+h4TJ0wgMDCQV19/nftatABg7rw5hbSmt4+ft22jdes2eR6QarPZ2P7zz+z+7XfHtEMHD3L4aCSqqnpdT5Yvvv4PRw4f5qW5c/nxp615Lt+rdx/WrV3D05OnsCYigt59+gL25Coy6gT79+1jzOhRbN2+nRNRJxg/bixDhw3LN6YVq76ldOnSHDiwnydGjGDQ4CEe23JXFrKTn6wzdqdNn8GzU6cQHx/P519+5WgrZ7lZM2cyb/58AObOns2GjZvc9qmndp+bOpWu3bvz+ZdfkZyUlGvdZs6YzoKFiwgJCWHypEmO0dCccTibN2cuL738MvUbNMyVwC195x2SU5J59rnnAVgVEQHA4kULc9WTVz9kSbxyhaCgIACuXMl7d++UZ55l8MABmM1ml9GA/GIQwltqAXYRKoqOylXCmfrsM0x5+mnGjLF/h93XooVjIGH48GGc/uc0oaGhrF23joOHDjFn9mySk5KYMXMmbdq0ASDm9GkWLFjA4cOHqV69Ol9+Zf9bubf5vQCO+v448Adz5sxGURTmzJlD4yZNcrUTGBjEgldeoXr1apw4cYI5s2c76rvZfOXG9D6RvF0P1WbLdXrwhu/WExMby4wZM6hdq7bL9LwEBgbSpHETEhKyP6jPnD1D06ZN0DSNhQtdP4BNJhONGt1JSkoKoaGhhISEkJiYfezcmdhYps+YCeS+/ZMomJ+2bKFT5ghTFpvNhl6vd7xWFIWHu3Zl2YcfMuPFFx3TA50uaumuHk+qV69OWFgYkyc9le/yvfv0YfDAgYwZO45VK1awZl32tmY2m7nv/vu5du0a5cqVp0yZslyKj8+3zpUrlvPh+x9w+vQ/mM1mrl275rEtT2UhdxK08JUFbPzhR/bs/pWFryzgwbZt3ZaLPnmSNg8+iKZpjB87xmVeVp/m1e6hQwf54uuv8fPzw8/PL9f6nYiK4tEhgwFcLrKZ12VhTp/+h3btO7jdjbp2TQQLFua9e9OZp37IUio0lKSkJDRNIzS0dJ51jXz8cUY+/jgrln/DyhUrvI5BCG8VZJQpq2yVKpW5eOmSy7JZzyOPRrJt21Zsqn0Ea/GihUyb9jzBwcHMmT2H1pk/jl6a/xId2nfgjTffICUlxbH87j27XepbsmSxY7Dktdde4/MvPs/Vzrq169i06XvGjBnD999voEePHrfF6NmNKHG7Tf/++yipqans2fsbFcPCcs2vGh7O3XfdxdoCHpCt17l2VeXKlTlw4A/++ONPt7tWdDqd45e2LseyVcKrMHPGdNauieDjj5cVKA7hateunbRr38HxukKFCvzyv10uB7LrdDpmzZ7DZ59+4rYOq9Waqx6DweDYBZlTWloaG7//nvr163tcPkuV8HAaNGzA2CdH07hxk1zbiqftJK86F8yfz7Tp0zkSeYydv/yaZ1ueyrpzJjaWs2fPUqtWbWJjYjyWq1mzJjt37GDXzp3UrlPHbZm82q1Xrx4rli/HYrE4klXn/q5VuzYfLlvG8ZPR7Pp1d54xZ6lTty7/3bSRtLS0XPO+WbGSBS/P5/z5817VlV8/NGvWnE0bN7JxwwaaNW+WZ13Xrl1j4/ff8/JLLzF23Div2heiIApyDFjW89iYGMqWKet2HoCfvz+BgYFomsY/p/7h3xP+zYjhI4iJiXGUizwaSa/evTCZTISGhuaqJ+tx+vRpWrRowb333supU6fcttP5oYf48ccfsWZk8NOWn+jS5aFbfMxb8Vfihn1WR0Swb98+SpcOZdxY9x+WvXv34ZWFr/Doo48ArmelenvSwtixT/Lqq2+gKBrPTJ1aoBifmjiRd95dyuIlrxIWFsbSd98B7Me8ya7TgqlXrx4hISGO1y/MmMnTkyaRnJREnTp1HdP79u7Fffff77aO33/7LVc9w0eOpGe3buzd53pMU+06dbjrjobUrFmTV994w+Pyzp4cO5ZB/fs7dpV5I686J02ewszpL3DhwgVMJhPVqlXz2FZeZXOaOWsWT4wcgWqz8ULmyLA78+a/zKSnJqIoCm++/bbbMnm1u+jV13jh+edYMP8lqoSHs237Dpf+XrRkCdOfn8bECROoXr26Y9d0Xl5ZtJipTz/NM1Om5Eooy5Yrx4KFi5j94kze//Ajj3UMf2woX3z1tcd+yJr/3LTnGf3EEwB89In7HwRgT8CbN21CgwYNWPzqa3R+KPfxfULcKE31foRKtdk4e/Ysr776Gv369XFZ1tPz6tWq8cS/nqBVq1ZcvnLFMa9mrZp8t249PXv1JCUlhdKlSxMUGEjM6dMEBQU6RqWrVq3Knt32H2HVq1d32065smUIr1yFDz/8iIYNGxAcHFyg9XKrhOdv13fnVk1zLDdwELoLd6DUr4xy2nJclxpiVEx6P71/ukGn6A16W7reoAQreoMtzWjQ9EadUWe0ajojWE1pBp1fgE7nZ0X11xu1IB26YJ2fUkpv0pXRK1oZTa8r9393pQ08dyZWriB9m3Le/TnmkD+DG5SmVaUA6pUx06BGVWbOmsWo0U/eUBvz580jrFLYddeTc/nY2Bi6dOrE4aORhRZTYdRZkkh/iJLCYtM4lpDGL+dSWHH0Mh80yr7ors3D9156RgZRUVH06NWHhEsX3ZbJqWePHly9lkTFCuXp2rUbw4cPQ5952E7rB1qz63+7cj0H++7NxUsWE30ymipVqvDlV/aTqk6cOMGSRYuJPHaMsLBKfLP8P3z+2ed89dVXVKpUiS++/AKAP/78g3lzXkJRYNasWTTOvPZiznZ+/PFH5r80n4WLFtGqlf2kp6mTp/LaG6/l+t8bZcqWZ8P6tdSpUwdTAe5xqtPrCatchacO+a1SbGq8TVMSbOlqgmrRElXUa7YMJcmALjVFVS1mq2oBQ7pBUTPUDDXDqtgyrHpzhnZNs+lNNqtms9pSTVY13Wax+V/N0Kr51VUjz6JVOIK2aiXZ2amiFDjVLPYjb5qmye2xhEcdO3p3nFpeftqymU8++7zQlu/ZrRvDho8o1JgKo86SpLj1R84zkiHvY/SEKCzeHhu23s1epaxld+7a4fY5QL36dVm27KNcy9SqVZP3PnjPZfrwEcMYPmKYS7nGd9/N6ohVebaZlpZGqdBSVKhQnhYtmjumv/r6EjRNzfV/kfKRfKPYJ2/i9pbzz8j5Ei9HT9mPR7qeewM627Rtxw3Vk3P5Xw/8dcNxFUWdJUlx64+sbdFZcYlN+IaszzZvthoF0OkU4uLiCPAzk56e+1hPXzJkyKOYDAZmzJiJTtHd8EV2TSYzcXFx6HTKde5eLP4keRM+o26AysHzydQq7X+rQxFCiEITm5TBwfPJ1A3wblRJr9cTFBDEb3v30KVrV1Ag3c3JOr4iYvW3hVaXyWzG7B/Iz9t3EBoc5HLoTUkiyZvwGQMqZfBKlI51R+O5q2KgXGZFCOHzrFYrB88nc+yqygt1MrxaRqfTUap0KAmXE1i3Zi13N2lM5cqVM+cq2Mfvbsf/4dy5M/xx4AAmvZ5SpUNzXe2hpJBvP1G8OY2eV/dTmVXXQkScqbsniQAAIABJREFUie9Pym2FhBAlQ50AlVl106ls1rw+SzIwMJCqVaty5sxZdmzdyjW51RoAwUHBVKxYkSpVKrtcy7NAfOCIB0neRLGmqq5nW4UZYXxV729tJoQQvqIgV8fQKQqhoaGYTCbKlS+HxZKa/0K3AT8/f4KDgggICMh1of6SRJI3IYQQwgcpikJgYCD+/v63xYVpvaEoSondVerMJ5I32SSFEEII926HZOVm8ZV8Q95xIYQQQohMvpDASfImhBBCCOFDJHkTQgghhPAhxT950/CZ21UIIYQQwodpGr6w49QnTlgQt6+cB+JevnKFU6f+AZ0Og8FQok8FF0II4R1N0+y3GFNVatSoTunQUJf5akGuw+IDJHkTxZrz75/4S/GcPBnNnY3uIiSk1C2LSQghRPF09Woihw8dpFatmpQrW+5Wh1NkJHkTPiP2dCxNmtxDzdq18feX+5sKIYRwlZqaitFg5Mihg5K83VrFf9+zKEJOb7/eaKBajRoEBwffuniEEEIUW8HBwVSrUYPIyL9LdPrgA8mbuL1l//UF+vsTEBBwC2MRQghR3AUEBBDo709Jzt6K/9mmQgghhBDCQZI3IYqppnffVWh1NW/a1PH8niaNC61eXyV9IITwZSU6eevRs5fj+YgRI+ndpy+DBw9h2rTpRB6LdJRxfgjfYbFY6Ni+Henp6UXWxsbvv6dFs3u4956mrFu7tsjacefy5csFKp9Xf8THX3Q8T7h0ye3yUVHHadSwodt5+fVDVNRx2j/YhvYPtiEq6niecW7e/CP3NW9Guzat+fOPP7yOwVs5+8FdEuypD4QQwhcU+2PeCutyeZcSEli/bi1Wq5U9e/ayeNESPv54GQAbvltfCC2Im83Pz4+ftv1cpG3MnDGd/3yznPSMDIY9+gi9+/Qp0vZuxI30x6aNG5kx/QWSkq65nZ9fPyxeuIgnx45DtdlYsmgRH3y0zGNbs2bM4IOPlnH16lXmz5vHqogIr2LwVs5+KGgSLIS4ffnKUXK+MfJWSHdYyLrgq8lktF/Mzwvjxo+n/4CBDBs+gq1btzqmjx07jj59+zHi8SfYvHlLrvJDhw7jjTfe5LFhw3lk6FA2bdrkKHM0MpLRY8Yw9LFh7Nm71zF99qw5N7iGt58aVcMdzzu0a0vdWjVp2eJeVq5YDsDDnTsRHR0N2Ed1Hu7cyWNZdyqUL09UVBQXzp+nSni4x3J79+6hdcuWtGnVit9+y35Pe3Tryh3169G6Zcs8242OjmbwwAE0qFuHbg93yVX/gf37ademNc2aNmHL5s1e9cfOHdu5r3kz2rZ+wG3Z9959lyWLFwHwybJljBo12mO9+fXDvn2/0617d7r37Mm+3/d5rAcgOTkZs9lMvfr1OXLksGN6fjEAdO7QgdOnTwNw/vx5alWvRvTJkwCcOnWKLp06Aq79kPU657RmTZtwT5PGrF61ymN7f/31Fw917ED9OrVp3/ZBl/rcPff0/o4cPowWze7Jt1zO7UUIcZNpmk/c1anYj7wVpqzdouXLl+OZZ5/JNd3dCFxMTCxrIlbz16GDvPXmW3To0AGAV15ZQEhICJGRkcydO4/OmUlBTEwsEau/5ejRSF5esIAP3n+PmNhYFi5cRNeuXQFYuvQ9Jk6YQGBgIK++/jr3tWgBwNx5c4ps3W8HK1Z9S+nSpTlwYD9PjBjBoMFD6NW7D+vWruHpyVNYExFB7z59PZaF7C/iUzGxAEybPoNnp04hPj6ez7/8ytFWznKzZs5k3vz5AMydPZsNG+3J+qGDBzl8NNJxdW9P7T43dSpdu3fn8y+/IjkpKde6zZwxnQULFxESEsLkSZPo1Lmz2ziczZszl5defpn6DRrmSuCWvvMOySnJPPvc8wCO0a/Fixa67VtP/ZAl8coVgoKCALhyJe+RrinPPMvggQMwm81oTh+SnmJwXsfuPXqwYf16xv/736yJWE1oaCjff7+Bf098inVr19Cjl/tDH9z1z7btO/jjwAGemTKZ/gMH5moLYPq055kw8Ske7tqV+nVq57le4P79tdlsbP/5Z3b/9nue5SD39iKEEO6U2ORNtdly3Tppw3friYmNZcaMGdSuVdtlel6MRiNNGjchIcH+pbR58xYi1kQQF3cek9FIckqKS3mTyUSjRneSkpJCaGgoISEhJCYmOuafiY1l+oyZABgMJfYtuKlWrljOh+9/wOnT/2A2m7l2zb7rrXefPgweOJAxY8exasUK1qxb77Es5P6SX/jKAjb+8CN7dv/KwlcW8GDbtm7LRZ88SZsHH0TTNMaPHeMyLzAwMM8YAQ4dOsgXX3+Nn58ffn5+udbvRFQUjw4ZDNi3R0/xOjt9+h/ate+AyWTKNW/tmggWLFzkcdmcPPVDllKhoSQlJaFpGqGhpfOsa+TjjzPy8cdZsfwbVq5YkW/bzuvYo1dPRj3+OGPHj+fblav4cNnHPDt1CmPH2V9/8fXXXq9TSEgID7RuzYULF9y2BXD82DG6duvmtg9tNht6vd7x2tP7qygKD3ftyrIPP2TGiy/muR1A9vYihBCe+MZu0wL4+++jpKamsmfvb1QMC8s1v2p4OHffdRdrC3jwud7pHpuffPopI0eO5NtVK1m27CO35XU6nWNUIef9OauEV2HmjOmsXRPhOO5O3JgF8+czbfp0jkQeY+cvvzqmVwkPp0HDBox9cjSNGzehSni4x7LunImN5ezZs9SqVZvYmBiP5WrWrMnOHTvYtXMntevUKVCMAPXq1WPF8uVYLBYuxccD9sQ+a5dvrdq1+XDZMo6fjGbXr7u96pM6devy300bSUtLyzXvmxUrWfDyfM6fP+9VXfn1Q7Nmzdm0cSMbN2ygWfNmedZ17do1Nn7/PS+/9BJjx43zqv0sderUpXz5Ckyf9jwN77iD5vfeS8M77uCF55+ncpXK1KxZM9cywcHBnDp1yu1JCs7JlztVq1Zj+/afiYk57TK9QoUK/PK/XS4nh3h6f3U6HbNmz+GzTz/Js5wQQnirxA37rI6IYN++fZQuHcq4se6/GHr37sMrC1/h0UcfAVzPSvXm5IVHhwxh6dL3uHz5MkaDgTA3SWJenpo4kXfeXcriJa8SFhbG0nffAezHvMmu0+szafIUZk5/gQsXLmAymahWrZpj3pNjxzKof3/Hbrm8yuY0c9Ysnhg5AtVm44XM0VJ35s1/mUlPTURRFN58++0Cx7jo1dd44fnnWDD/JaqEh7Nt+w6GjxxJz27d2LtvH4uWLGH689OYOGEC1atX58eftrptw9krixYz9emneWbKlFwJZdly5ViwcBGzX5zJ+x+6/wECMPyxoXzx1dce+yFr/nPTnmf0E08A8NEnn3isz2q10rxpExo0aMDiV1+j80O5j+/Lz5PjxjJm1Cg2Z/bB5KlT6dKpEx8u+9h9+bFj6dblIapWrcoPW34qUFuz587hmSlTct2O7YUZM3l60iSSk5KoU6cukPf727d3L+67//58ywkhhDeU/Iu4oWmO5QYOQnfhDpT6lVFOW47rUkOMiknvp/dPN+gUvUFvS9cblGBFb7ClGQ2a3qgz6oxWTWcEqynNoPML0On8rKj+eqMWpEMXrPNTSulNujJ6RSuj6XXl3rojdeC5M55HPERJl72Jnjx5ks5ds3dhxcbG0KVTJw4fjbxVwRUr0h9Fq0bV8Dx3Uwshiof09HQ2b9pIrVq1nKZ6fxJCpSrhTDoSsEqxqfE2TUmwpasJqkVLVFGv2TKUJAO61BRVtZitqgUM6QZFzVAz1AyrYsuw6s0Z2jXNpjfZrJrNaks1WdV0m8XmfzVDq+ZXV408i1bhCNqqlWQf2KooBT5DosSNvImSxnWbdj7AvWe3bgwbPuJmB1RsFbf+yHl2J+R9jJ4QQhSG7O+J4n/W6PWS5E34FIslFbPZDMCBvw7e4miKl+LWHyUtUStp6yNESWVJTb3VIRQ5HzhhoeRmzqJgzGYTF+PibnUYQgghirGL589hNuc+Q9xbvpB1yMib8BmlS5fm4oXzGIxGKoZVws/fP9flYIQQQtx+NE3DkprK+bhzXLxwgdKl875kka+T5E34jICAAPR6PefPnSXhUvytDkcIIUQxk5Gejr+/v+PwmpKq2CdvGvaMWkZYBIDZbC7xf5RCCCGuj7+bi5wXhKZpPrHf1AeOeRNCCCGEuFmKf/YmyZsQQgghhA+R5E0IIYQQwodI8iaEEEII4UMkeRNCCCGE8CHF/mzTzPNNud7bsArf5nw7LIDLV65w+vRpFJ0eg9EoZyELIXyWpmlYMzLQVBvVqlWjdGioy3z5fLsViv/JCuALyZvkbiJT/KV4Tp36hzvvupuQkFK3OhwhhCgUV68mcujgX9SsUZ1yZcsVaFlN08iwWslITy+i6HyL0WTCaDBcf+LrG7mbDyRvSO4m7GJjztC46T3Uql0Hf3//Wx2OEEIUitTUVAx6A4cP/lWg5C0jIwOdwUCNWnUICAwswgh9R0pyMjGnT6FmZGA0Ggu8fNZ4UXHnE8mbuJ1l/xkZjHqq16hJcHDwLYxHCCEKV3BwMNVr1iTy6GFcUwfPwxZWqxWbqnHnnY1Is1iwpKYUeZy+wGg00PDORvx14ACK1YrBUDLTnJK5VqLkcPocC/APICAg4NbFIoQQRSQgIIAA/wCvcjdN00hMvMqddzfGkpKCzWa7KTH6AquqoqkaNWrV5vBff1KmTOkSeeygJG+iWPOF4WshhCgs3oy72Ww2EhMTCQwKJCU56WaE5VNUazqBQcEkJiZSqlRIiRx9k0uFZNqyZQuPPDqUJ/71r+ta/pGhQws5IiGyRZ88Sfu2D97qMByKWzxQPGMSoiiomoYlzYKmaWiqPNw+NBVLmgVVu44hAB8YNfCN5K2AnT9s+Ah69+nL6DFjWLlqFaoXQ8qff/Elzzw7laXvvntdIV67es3x3FMi99SkSUSfinaZFh19iklPTwagR89e/P77Ppf5v/++jx49e11XTMXFzUpsLRYLHdu3I92HzrpqevddXpXbsmUznTp1LtAyhcFTW87x3KoYcrqZMRUXvrjNi0KkgaqpxerRsWOHAk0vqsf196lvnLLgG8lbAV2+fJmIiNXMmz2HA/sP8PU333i1TNPGTfDz87vh9p0TOWedOnbkv5t+cJm2adN/ebjLQwCUKlWKTf/9r+PaZqqq8t8ffqCUj18Ww1N/FDY/Pz9+2vYzJpPpprRXGC5fvuxVuS2bN9Opc+cCLVMYPLXlHM+tiiGnmxlTceGL27woXJqq5vt47NFHOX4s0mXaschIhj32mFfLa6qKJTWVQQMGkJ6Wlme5xCuJBZpeVI+Srtgnb9ebA+t1OipVrsTYsWPYunWrY/rRyEhGjxnD0MeGsWfvXpdlevXu4xjlGjt2HH369mPE40+wefMWRxnnUbC8RsR69OyVa3779u353y+/YLFYAPuv5j17dtO2bTvA/gvq7rvv4pdffgFg1/920aRJE2xq7pFDT/FNenoyAwYO4l//GgXAiRMn+PfEp+jXfwBjx47Ldz3GjR9P/wEDGTp0GG+88SaPDRvOI0OHsmnTpnz7MGvZYcNHuPS5u/6YPWcuw0eMyH49a46HntRyPPJWo2q443mHdm2pW6smLVvcy8oVywF4uHMnoqPto59RUcd5uHMnj2Xzmn7o4EEe7tyJ+nVq06FdW8f0A/v3065Na5o1bcKWzZsd0zu1b0/DenW5956mrP7221wxO8c9/DHXkcrExESOHz9Os+bNPS7jKc4e3bpyR/16tG7Z8rridtdWznhuRR+NHD6MFs3u8RjTX3/9xUMdO1C/Tm2XXanOdXjTfznb8bafc4qOjmbwwAE0qFuHbg93AWDv3j20btmSNq1a8dtvez3Wldd74+165BefKC4K9nkH3iVv3bt1J2L1GpdpEasj6NO7t9fJkMloZPny5Rj0+nyTpoJML27JW/Efc7Mr/kfx3WBPhlWqxKWE7F/uS5e+x8QJEwgMDOTV11/nvhYtHPM2fLfe8fyVVxYQEhJCZGQkc+fOo3Pml7y3nOvKEhwcTPPmzdm6bSvdunZj67at3NviXgIC7Ncss1mtdOrUiXnzXqJVq1Zs/P6/zJn9Ip9++mmuujzFd+LECb5duQJb5ujd2//3DgP696dVq5b06z8g37hjYmKJWP0tR49G8vKCBXzw/nvExMaycOEiunbtCnjuw5iYWNZErOavQwd568236NChg9v+sKkq+/fv57PPstdr7rw57gPSPDzPlPXFdSomNte8Fau+pXTp0hw4sJ8nRoxg0OAh9Ordh3Vr1/D05CmsiYigd5++HsvmNX3a888xdvwEunbrRv06tR1tzpwxnQULFxESEsLkSZMcI0FRUcc5duIku3/9lWemTKb/gOz3ImfsX3z1tcvrn7dto3XrNi4H3eZcxlOchw4e5PDRSNTMD7OCxu2urZzx3Ow+stlsbP/5Z3b/9rvHmKZPe54JE5/i4a5dXdr2xN06uGvH237OuV0+N3UqXbt35/MvvyI5yX6A+ayZM5k3fz4Ac2fPZsPGTW7ryuu98WY93NUpiqnrGK3w5piuLl0f5tFHHmX8hPH4+/uTmprKzh07GDd+HKqmMWTwEM6ePUvpMmUYPXoUPXr0AGDkyMeJOX2a0NBQVkesplXLVvzyq31wwdMyAP0HDCDdksb0F2dwX4v7csV66NBh5s2dS3JyMi9Mf4HWrVsDMGXKFKKOH2f9d98VrBNuQ8U/ebtBcefOUaZ0GcfrM7GxTJ8xE8DjGSibN28hYk0EcXHnMRmNJKe4Xj/Hpqroddc3aNm7Vy9eWbiQLg91Ye3a9cycMT27XquNwIAAqlYN59PPPqN69Wr4+ftjtVoLFJ+f0wVsY2JieOCBVm4vVuhpPUwmE40a3UlKSgqhoaGEhISQmJjomJ9XHxqNRpo0bkJCguddXQrQqmVL1q1dyxNPPOGxnDfcJW0AK1cs58P3P+D06X8wm81cu2bfddu7Tx8GDxzImLHjWLViBWvWrfdY1tN0gOPHjtGte/dcu6tOREXx6JDBALn63GQy8UDr1ly4cKFA6/jTli10yuPHQ15xAgQ6XbzzeuLOK55b0UeKovBw164s+/BDZrz4Yq6Ystru2q2b292JNpsNvV7veO1pHXK2U5B+zrldHjp0kC++/ho/Pz/HoRnRJ0/S5sEH0TSN8WPHeKzL2/emIPGJksObUabgoCBatmzJpo0b6du3L5s2bqTlA60I8PdHU1XeefcdSpUqxZFDh3n22Wfp3q0bAMciI9my+UdsmuYyegZ4XAbgjddf5/jx47z95tt89dWXuWJdsmQxzz33HMFBQcx9aR4PtGqFzWZjz+49rFm7pnB2e/rKENp1Kva7Ta+XpmnEnTvH+x98QLduDzumVwmvwswZ01m7JoKPP17mdtlPPv2UkSNH8u2qlSxb9pHLvDJlSvPnn3+SkZHhMl2n13P27FkAAgMCOHf2HIlXE8mpZs0ahFWsyJtvvUWlimFUq1bNMc+aeWLFw126EBGxhi5dumStjNfx5VS+XHn279/PxYvxXq2HY310Osexd7ocCV5+fZgzIczZHzqdjtGj/8X67zbkGTtcz04EuwXz5zNt+nSORB5j5y+/OsUeToOGDRj75GgaN25ClfBwj2U9TQeoXKUK27f/zNkzZ1ym16pdmw+XLeP4yWh2/bo7V1zOSQPYR2NPnTpFwqVLbtfDarWya9dO2rXv4HGZvOLMqaBx52wrZzy3oo90Oh2zZs/hs08/8dhHVatWY/v2n4mJOe1SV4UKFfjlf7tcDvD3tA452ylIP+dUr149VixfjsVi4VK8/W+xZs2a7Nyxg107d1K7Th2Py+bXX/mth/Ad1/N55+0B/AMGDmD5ipVkWDNYvmIlAwb0R9VUvtuwgaf+PZFOHTvxzLPPkpSc7HLQv9nfj4AAf8drb5apVLkS97e8n7Nnz7pMz3p++p/TPPXUUzz+xBPExsSiaioaGm3bPsjyb765tScs+AgfGHkr+DhyqVKl6N23HxXKlaNjx44M6NfPMe+piRN5592lLF7yKmFhYSx9951cyz86ZAhLl77H5cuXMRoMhIWFOeY9PvJxXnvtdSypqVR1OtakZ/fuPD15Ml98/jn9+vVj4qRJVKxYkXff+b9c9Q8aPJBp06azcOECl+lZuzTq1KmTazejt/HlNGrUv3jzrbfwM5tdpntaD29404fO3PXH1Geeo1GjOx1lZs+a43nX6XWYNHkKM6e/wIULFzCZTC5J8pNjxzKof39WRUTkWTavOl6cNZtnn5mKv5/rbboWLVnC9OenMXHCBKpXr86PP7ke+5fTk2PH0q3LQ1StWpUftvwE2I95++Krrxn+2FDGT/g39erVIyQkxOMyecWZU0HjztnW77/95hLPreqjvr17cd/99wPkiglg9tw5PDNlSq7bqL0wYyZPT5pEclISderUzXcdnNspSD/ntOjV13jh+edYMP8lqoSHs237DubNf5lJT01EURTefPttz8t66K+s7STLjcQnfJemevf9WLtWLSqHhbHg5QVUrlSJGtVroKkaS99dygsvvMD9999HcnIyPXr0dKkzZ/3eLJNmSePnn7dTs1ZNx3S9QU/MPzGEVw2nWtWqjHx8JC1btuTKlStoqoaCwr///W+GDHmE8ePHF0LPXC/fGLK7vssOa5pjuYGD0F24A6V+ZZTTluO61BCjYtL76f3TDTpFb9Db0vUGJVjRG2xpRoOmN+qMOqNV0xnBakoz6PwCdDo/K6q/3qgF6dAF6/yUUnqTroxe0cpoel25NxokDTwbcxp9CbzI3s0QFxdHuXLlOHjwEG//39t8+skntzqkAnG+cnh0dDRduvf0eGZdbGwMXTp14vDRyCKP6/Tp01SqVIndu3/l+Wef5Zfde4qknfnz5hFWKYxRo58slPpuNO6CxFNc+qhG1XCPu9d93c3c5kXRSk9P54fvv6NmzZqOaTlHoR1lMzKIioqiR68+XDh/1us2/vzrTyZNfJq3/u9NGt/dGICIbyP4z/JvSLiUgNFopEzZMnzzzX8AaNe2PT9v3+ZYPut1XssMHzaCc+fOEV41nBemTaNe/XoAvPN/77Jx40ZWR3xLzOkYXn3tNU5Fn6JylcqO458HDBhI9erVee21VwF47pnnWfzqolz/e6NCxcpsWL+WOnXqYCrAPU5tViuVw6sxOTJolWJT422akmBLVxNUi5aool6zZShJBnSpKapqMVtVCxjSDYqaoWaoGVbFlmHVmzO0a5pNb7JZNZvVlmqyquk2i83/aoZWza+uGnkWrcIRtFUryR6VUZQCZ4ySEZVwLy9YQExMLOXKlmXMk4WTANxcrmcsaHkcnNuzWzeGDR/hcX5hGjN6FFHHjxMWVok5c+cWWTs/bdnMJ599Xmj13WjcBYnHV/vIl9zMbV4ULU27ngNEvDvmLcvdje5i27afXJbr268Pffv1cVvntm0/udSf9TqvZT7//FO30ydMGMeECfYrHtStW4cP3n8vV5lVK1e4vF60+BU0Vc31v5DkrcT7vzx2x/giS2oK5hy7gLMc+OvgTYtj0w8/3pR2tu3YWaj13WjcBYmnuPRRSR11g5u7zYuiVZAbyyuATqcQFxeHyWQmPc1SdIH5ILPZj7i4c+h0ynXuXiz+iv0JC75xrWNRZJx+jJpNZs6fO3erIxJCiEJ3/tw5zCazV2cs6PV6ggKC+G3vHoKCS2E23/jF5UsKs9mPgKAQ9u7ZS1BAkMddz57Yu774Zx0y8iZ8RmhoKBfi4jAYDFSqUgU//wAUpaT+rhJClHSapmFJTeHcmTNciIsjNDTUq+V0Oh2lSoeScDmBtWsiaNykCZUrVyniaH3DuXNn+WPLFkwGA6VKh+a6WkJJ4QPJm4y93c6c33n/gAB0+jTOnT3LpfiLtywmIYQoTOnpGfj5+2E2m73+tgsMDKRq1aqcOXOW7du2cvXazbkNYXEXEhxMWMUwqlSpfJ3XNvSNfKP4J2+Su93Wcl4E2GAwyMVGhRC3PZ2iEBoaislkolz5clgsqbc6pGLBz8+f4KAgAgKuc8+Mj+QbxT95E0IIIUQuiqIQGBiIv79/nmfi304URSmxu0qdSfImhBBC+LDbIVkRruQdF0IIIYTwIT6RvMlgsBBCCCGKmq8cZu8TyZsQQgghhLDzkeTNF/JgIYQQQvg23xh7843krfj3oxBCCCF8nW/kbj6QvPlAJwohhBBC3CzFP3kTDo8MHVqg6UIIIYQoeUp08tajZy/H8xEjRtK7T18GDx7CtGnTiTwW6Sjj/CgMRZVMXbtqv/1JWno648aNJyMjw2V6YchZtxBCCCGKl2J/kV6tkPabXkpIYP26tVitVvbs2cviRUv4+ONlAGz4bn2htJGlMJMpd8wmE++9t9Tn6hZCCCHEjfOJkbfCSuCyrkJtMhmxWq1eLTN7zlyGjxgBwMSJk4g9cwaAf/75h6cmTcpVJkvOkbyjkZGMHjOGoY8NY8/evY7p48aPp/+AgQwdOow33niTx4YN55GhQ9m0aVOeceUcJRz15BhGjBjJ/gMHHNMmPT2ZAQMH8a9/jQJg7Nhx9OnbjxGPP8HmzVs8lvMm7pzrPHvWnDzjFUIIIYo7zUfOWCj2I29AofVjVlJSvnw5nnn2mVzTc47A2VSV/fv389lnnwLQvn07tm3bxrDHHuOnrVvp3LFTrjJZcta1dOl7TJwwgcDAQF59/XXua9ECgJiYWCJWf8vRo5G8vGABH7z/HjGxsSxcuIiuXbt6vW7z587hRHQ0y5Z9zNJ33wHgxIkTfLtyBbbMe9698soCQkJCiIyMZO7ceXTu3MltufzidrfOc+fN8TpWIYQQoljyjdzNR5K366DabCiK4jJtw3friYmNZcaMGdSuVdtlujsK0KplS9atXcsTTzxB23ZteX7aCwx95BF27drFW2+8mavPyNB1AAAgAElEQVSMJ2diY5k+YyYABoNrt5tMJho1upOUlBRCQ0MJCQkhMTGxQOsbVqkSZcqW5fXXXneZ7ufvD8DmzVuIWBNBXNx5TEYjySkpbst5E7e36yyEEEKIwucTu00L4u+/j5Kamsqevb9RMSws1/yq4eHcfdddrF27Nt+6dDodo0f/i/XfbQCgbJkyVA4L46uv/0PdOnUJDgnOVQYgMCCAc2fPkXg1OwGrEl6FmTOms3ZNhONYu5xtaZkjX55uMqzT6zl79qzbeenp6fzvf79QrUZ1t/M/+fRTRo4cyberVrJs2Uf5rntecbtbZyGEEKIk8IGBt5KXvK2OiODRoY/x0bKPGDN6tNsyvXv3YctP2cd85XW26dRnnqNRozsdrzt06MC3q1fTqVMnj2X69evHxEmTmD59pmPaUxMnsnzFSgYNHsKLL866rnXr2b07T0+ejMVicZleNTycwUMe4dvVq5kwbpzbZR8dMoSlS9+jb7/+jBz5OGFuElt3PMWdc53lmDchhBDi5lDyL+KGpjmWGzgI3YU7UOpXRjltOa5LDTEqJr2f3j/doFP0Br0tXW9QghW9wZZmNGh6o86oM1o1nRGspjSDzi9Ap/OzovrrjVqQDl2wzk8ppTfpyugVrYym15V7rd7VgWdO/4PJbC60lb5eaenpHD58mHfeeYePPvoIvYcRMiGEEEL4nvS0NCpXrcYzx0utUmxqvE1TEmzpaoJq0RJV1Gu2DCXJgC41RVUtZqtqAUO6QVEz1Aw1w6rYMqx6c4Z2TbPpTTarZrPaUk1WNd1msflfzdCq+dVVI8+iVTiCtmolqqNRRSnwYJ8PHPNWfI4efPLJMRgNBqZOmSKJmxBCCFHiFI98Iz/FPnkrPqkbfJ7jjFIhhBBClBzFJd/IT/EfPipO2ZsQQgghSi4fyTeKf/ImhBBCCCEcJHkTQgghhPAhkrwJIYQQQviQYn/Cgp33O6HTLBauJCYSdew4KZbUIoxJCCFEUQnw86dOvbqElip1w3WZ/fwKISJxe/CNA+19JHnz3qWES0RGHqNc2bJUDq+MXmdA0V3f5eyEEELcXJqqYVOtJF1L4siRI9SvX4+yZcre6rCEKFZKXPJ25sxZwqtUoVf/gfmW/W7Nanr27X8TohJCCFFQ61ev4syZs5QtU8ZjGU3TSEpKIigoKNf9rAtC0zQyrFYy0tOvuw5x6xlNJowGww1tCz4w8OYDyZsGWgE60mDQU7as5z90IYQQvqFs2TIkJSflWSbq5Eni4s4TFlaRurVrX1c7GRkZ6AwGatSqQ0Bg4HXVIYqHlORkYk6fQs3IwGg0Fnh5TfOJ3M0HkrcC8vcPKNJbaSWc/oF/9i3JfOWcWdr3kyvoqP3AEoIrNiuyGIQQ4nZgMpvx9w/w+GV67lwccXHnAYiLO09gQCCVKnl33+YsVqsVm6px5x2NSE1NITnp2g1GLW4lg8FAwzsa8dcfB1CsVgyGEpfmACUweSvqYw2j987nzoc+BFSwJqJlJELGFTRrIlgTUS3xHN02huZDfi+6IIQQ4nag4fEzPeFyAiejowkLq0S3nr3Y+N16TkZHYzabKFPau70vmqaRmHiVO+++m+Tka9is1kINX9x8Gek2NNVGjVq1OfzXn5QpU/rGdqEWU8U+edOKMBO7nuPdKjQYxd61T6KiZI66qYCGptk/YfSKRsM28wo7VCGEEJmuJV0j8tgxQkqVol2HjpyM/Jt2HTqyaeMGIo8do9GddxIcFJxvPTabjcTERAKDgriWeOUmRC5uhvT0dIJLhZKYmEipUiElcvTNR9ao+OyBTgnuxm9qKR5sXg+DXodBp0OnA5uqkZSSzo79J2lYuu2tDlMIIUqs2NgzmExmunTpSlxsDFarlbjYGLp06cp369cSG3uGhg0a5FuPqmlYLBY0VUNV1ZsQubhZtMz3Vi3IQfP2JYsknsJWAi/Sm/9+0507d/D9hg0Frvlqchrf7fybZk3vxT+4CoGlwilVJpxSZapSqnRVypavwZ0NG7F+59/51hV98iTt2z5Y4Bjyqqfp3Xe5LeNpemHGUdR1Fkd59WtBNW/a1PH8niaNC63em6Uw3vPiuC2LW01z+2jfsRP9Bw3i0sU4rNZ0QMNqTefSxTj6DxpE+46dyHOfq7uWNLXIHt26divQ9OL4eOihLrc8hoI8SjrfSN4KORFOs6QxedJTLFr4SoF+bW3ff4I7alehTCn7KekmvYLZqMNsALNRwWTUUTO8PEajniMnz+dZ15Ytm+nUqfONropLPZcvXwbAYrHQsX070jNPec+antfyOZcpjJgKs05PNn7/PS2a3cO99zRl3dq1RdaOO3n1qzt59Ud8/EXH84RLl9wuHxV1nEYNG7qdl18/REUdp/2DbWj/YBuioo7nGefmzT9yX/NmtGvTmj//+MOrGArjPS+sbdmX3Yy/mZIgIf4CZ/45RZrF4jI9zWLhzD+nSIi/UOA6VVW9rseOHTtpeX8rduzY6bFMQkKC19Nb3t/K5ZFX2126dL3uuAv6uJqY6HFezjg99UmvHr1o80AbOnfszLix4zl46GCRxXvdeYNGwS5xcYv4RPJW2N3YqXNnlq9cxcoVKxgzejTJycleLXflaiphFUoDoNcpGA06TAYFP5Meo0HBoNehU6B+zSocO30xz7q2bN5Mp86FkLy5qcfPz4+ftv2MyWTyevmCLHMr6vRk5ozpfPHV13z82efMmjmjyNopDDfSH5s2bmTQgAEkeTgTLr9+WLxwEU+OHceo0U+yZNGiPNuaNWMGH3y0jHnzX2b+vOzjN/OKoTDe88Laln3ZzfibKQnS09I8Xo8tIz2d9LS0Atd5vUlCxLer6devLxGrIzwnEh7qdzcdYOeuHY7H9SZUhZ4M5dFHOed56pOL8fH8tO0n1n23jr59+zB75uwijfd6+Mb9FXwkeSsQL3v+nmbNeP/DD9n84w989MEHeZbd+ukgtn46iFKn5nFx65P888MEVnz2JhfizqDXwYszXsCg0/H34b/44qN3uHj+HOfjPZ9unpiYyPHjx2nWvDkANaqGO+Y5Px85fBgtmt3jeN2jW1fuqF+P1i1buq3HmXM9AG1bP8B9zZuxc8f2fON4uHMnoqOjAftIy8OdOwHQqX17Gtaryz1NGjN1ymSaN21K07vv4usvv/Rq3Tq0a0vdWjVp2eJeVq5Ynmdb7sq6U6F8eaKiorhw/jxVwsM9ltu7dw+tW7akTatW/PbbXo996qnd6OhoBg8cQIO6dej2cJdc9R/Yv592bVrTrGkTtmze7DEO5/7YuWM79zVvRtvWD7gt+96777JksT3R+mTZMkaNGu2x3vz6Yd++3+nWvTvde/Zk3+/7PNYDkJycjNlspl79+hw5ctgx3VMMeb3nOfvXUz8V9rbsbbs5/8Y8bSee/kZztuNuO/G2bXf1e9oec7ZbYrnfa1rwhzdNqWqBH2diYjlz7iwTJ/6bmNgYzsTEOubt2bOHvn36MXjwEJf6PU3PeribtnjRYtavXYemqnz33QYWL17iKNum9YO0af2go+yhQ4cYMuQRevXoxa6duxzT//XEKB7q3IVBAwahqSrDhg6jc6eH6N2rD//duMlRbugjQ2nfrgP9+vVnw4bv84zL3by8+gRAySxrNBrIsFrRVJVnpj5Ln959r+s9yCumksxHTljwnrd/q/v37WPsk0/S+aEujB4zxmXed2tWO5737Nuf1KtxtBr6jWNa1I7FtDJF8tMPG6g5Zhzx8fGomsZve35lxJMT+ezjDwiu3BRPft62jdat2+R5BozNZmP7zz+z+7fsS44cOniQw0cjHb8qvKknyxdf/4cjhw/z0ty5/PjT1jyX79W7D+vWruHpyVNYExFB7z597esddZzIqBPs37ePMaNHsXX7dk5EnWD8uLEMHTYs35hWrPqW0qVLc+DAfp4YMYJBg4d4bMtdWcj+YjsVEwvAtOkzeHbqFOLj4/n8y68cbeUsN2vmTObNnw/A3Nmz2bBxk9s+9dTuc1On0rV7dz7/8iuSk3JfNHTmjOksWLiIkJAQJk+a5BgByhmHs3lz5vLS/7N33vFRVNsD/85syaaQRiehhISEovTee1Msz4f+nhWUpj5AkCooSAfx6fNZEcsTfQpYsNF7U3pvkoQepJO+2TLz+yPJstnMbHbJBrJxvvnMJ7N3zj33zLl3ds7eO/fOzJkk1K1XKIB7/913yczKZOy48QAs/f57AObNnVNIjzs/5JN68yYhISEA3Lzpfrh39JixPNb/7wQEBOTNosatDe7q3NW/an7ydVv2pFyla0ytnajhWo5SO/G0bCXU2qNruWUVtfhLkiRsNqtqPr3egCh61zdxO75c9uOP9Lu/H4Ig8MADD/DDsh94/vnnAfjPf97lpZdGUDumNo8/8aRDv1q6Mx07dgZg48bc9j1y5AjGvDwWs9nMlq1bmT//jVv3gTyZ/M9vvvkvxoweTUhICDNmzaJNm9YA/PHHH6xY8aujZ+r0mTOsWbOKffv3M3fOPHr0zL0W3/73W4SFhXH06FEmTHiFPk4/Vt35KP+YO584n1vlSpWY/OokrFYrO3fuZOnSJWW+PfuS0h+8yb7vxFy7Zg0vDBvKc4MHM3bc+EIXuesSImabDn1wZcfnyPKRZOfkECVsx2IbhiTJWGwygiAiybnLhmSa1bvt161dS/e8HqZ87HY7Op3O8VkQBHr36cPCBQuY9OqrjvRgp9W/lfSoUbNmTapUqcKokSOKzP/gQw/xWP/+DB32PEsXL+aHH39yHAsICKBV69akp6dToUJFIiPLc+3q1SJ1Lln8DQs+/IizZ88QEBBAenq6allqslA4CJozexbLV61mx++/MWf2LDp26qQodyo5mQ4dOyLLMi8MKxis5/vUXbmHDx/ii6++wmQyYVJ4yXVSYiKP/99jAAVW9VYK2vI5e/YMnbt0VRwiW/bD98ya43540xk1P+QTFh5ORkYGsiwTHh7hVteAgQMZMHAgi7/5miWLFxdZdlHt0LnNqvmpJNpyUeUqXWPu2onrNapUjlI78bRsV9y1R9dy/ypIsswfx49z/PhxMrOyEIRcXwoAAuTtERwcTELdesTFxXm8xpe3gYPFYmH58hWkpaXxwQcfABAaWo4BAwYQEBDAxZSLtGjRwlHn+frV0p1Zv35tgWOiKDJk6BBeeOFF3n//PURRLDBc6cy5s+cYNfplIHfBWufjAXkL2Oen6XQ6mjRuzLVr15AkiRUrVrJkyRJSUi5iNBrJzMwskF/JVrvdjiAISJJUpE/yz+3s2XO8/PLLxMXGIssyHTq0Z8mSxQwbNsxD75ck/jBoWhaHTT3oewswBfDWv99h/ISJHv06y7bpsNth8+5kvlt/lIiGI7in10zslutYbRLhEeWx2CSiasSwaOEH1GvQiMgw5S9Wm83G1q1b6NylqyOtUqVKbN+2tcBDyqIo8tqUqXz+2ace69Hr9Y4hSFdycnJY/uuvJCQkqObPJyo6mrr16jJsyGAaNWpcaBhOFEVHj4yz/9zpnDVjBhNeeYWjJ/5gy/bf3JalJqvEhfPnSUlJoXbtWM6fO6cqFxMTw5bNm9m6ZQuxcXGKMu7KjY+PZ/E332A2mx3BqrO/a8fGsmDhQk4mn2Lrb7+7tTmfuDp1WLliOTkKz+d8vXgJs2bO4NIl9xNf8inKD82aNWfF8uUs/+UXmjV3//aP9PR0lv/6KzOnT2eY0y9mJdzVuRJKfirJtuyuXKVrTK2dKF2jSii1E0/LdsWb66DsUnD889iRQ+zdt4+MrAxEQUAUhdzgTRQQBREhb8vIzGT//n2cPHkcT2/G3j5TtW7dOlq1asnatasdW6vWrVm/YQOSJFGjRg02b96MOW9SRX4+tXR3z5ZlZWby7n/+w8iRw3n3P/8hMysLSZIIDg7m/Lnz3Lhxa+JD9ehoXn99CitXLufLrxap6s3/nB/cSpLERx9+xKBBg/jll59Y9OUXBfKIOh3nzp5zfD586DCZmZls27adKlWreuSTfH3R0VE0atSIJUuWAvD880P5/vtlpeKZN3+h9Pe8lQAdOni3nEC2TcQmyTSuVx2bXULSGR3p2RaZMZNmkm2x07xtZ5q06kiOxcrh48o3nt27dhEfH09oaKgjbeKkybw0ciSZGRnExdVxpD/84AO0at3aYz1PDxhAv7592bmn4DNNsXFx3Fu/HjExMcx/6y3V/M4MGTaMRx95xDFU5gnudI4cNZrJr0zk8uXLGI1GatSooVqWO1lXJr/2Gs8OeAbJbmfipMmqctNmzGTkiOEIgsDb77yjKOOu3Lnz32Ti+HHMmjGdqOhoNmzaXMDfc994g1fGT2D4iy9Ss2ZNx3CeO2bPncfLL73EmNGjCwWU5StUYNacuUx5dTIfLvhYVcfTTz7BF19+peqH/OPjJoxn8LPPAvDxp+oBg81mo3mTxtStW5d589+kR8/Cz/c5U1Q7ckXJTyXdltXKhcLXmFo7UbtGC5Wj0E48LTu/rvLx5jr4KyBJEonJpxAEgdiYWB57/ElCw8OxWm4NnxqMBtJSb7L0m685d/YsSclniIuL90i/t89J/fjjzwwf/mKBfA/268d/3n2Xnt27M+qlEcx9Yz7z5s2nRvXqDjm1dGe6d+/p2F+zeiX//vc79Lv/frr36I5eb+Df/36H8WPH8Ojf/87QocOoXKUKHy/4EIDRo1/irbffYebM2VStVpWFC2490+1alvNnWZJ46sknefvf73Dj+nUMBgNVqlZ1yDz0wAM8/8KLfPPN/wg0mfhm8RJ27dpFZEQEw4f/E1mSivSJc5mP/O1hpk2bwVNPPsE/h79Ew4b3Oo69MnEys2bPKPRf4xa3984IWXbk6/8o4uX6CAnVEM6aT4rZoQbBqDPpAi16UdDpdXaLTi+UE3R6e45BL+sMokE02GTRADZjjl40BYmiyYYUqDPIISJiOdEkhOmMYqROkCNlnVjhjdgb/c+fOU2gh0MEx44eJTo6ipbtfLfe0ztT+/DoSz+y+9BprqSZuZSaxYC+TVny9oN0e3ZxbpexLCPLIAoSWek3OPtnGo90K7xe14xp06hStQqDBg8plk3F1eOa//z5c/Tq3p0jx0/4zCZf6CxLlEV/+KLOfd2W/Zmy2EaKw85tmzl//gK1atXEYrHw66+/INllXhg5EoNBT3ZmJlarU/BmMBAYHIzdZuej999Fr9PTvUcPwlQeFbBYrSSeTOT+Bx/i3JmkO3VaGneA6jVj+eXHZcTVicPoxQvqszMziapRk3HJkUsFu3TVLgvX7RbpumSWUyWkdLtVyNAjZmdJkjnAJplBb9ELklWySlabYLfadAFWOV2264x2m2y32bONNsliN9sD06xyDVMd6UQKcqWjyEuXcCvCFQSvx2r/kj1v3pI/bFo/LhqbXcIuydjtuek6wYosCxgECYPORlbGTQ6cuER8LeWZj+vWruHTz/9bbJuKq8c1f7++fXnq6Wd8apMvdJYlSps/XGdxgvtn9JTwRZ37ui37M6WtjZQ2jAYjVqwEBwWRevO647WE+ciyRHZmBmHhkeh0OgKKWHJFAESdwJ9//okxIABzdnbJnoDGHcEUGMSff15E1Am32UNV+in1wdttTVfw8fOG2VYdH8/rr3BEx+fLthdIia5YjlYNY2hWV3mIY8PmLT6xqbh6XPPvO3ioWPpKSmdZorT5w9tATQlf1Lmv27I/U9rayF1Hdvrv9L1utVqRpNwE5/VUZTn3tUjOvXHu7gc6nY7goBB27vidnr17A9cwZ2f5ynqNu4ApMIiw8PKsWrWC8HKhipOM3OEf0xX8IHjLxXN3ehPs/fzDdx69nH7q3B89Ll9DQ0NDwzeoLddmt9ucPhXuW3E+7u5+IIoi4RHh3LhxnWU/fE/jxk2pVq3aLbWy9t+v/gMXU1LYsGEjJqOR8Ihwr5eM8ZfwzQ+CN28d6fulRTQ0NDQ07gZFr7Zb9FIg7u8HwcHBVK9enQsXUti0cR1paWm3Y6hGKSE0NJSqlasSFVWtTC+n4wfBm4aGhoaGhgrFfKhJFATCw8MxGo1UqFgBs1l77s2fMZkCKRcSQlBQkMdr/PkjpT94u82OtBwPL0BP5TQ0NDQ0ShOyy3/Xfc8RBIHg4GACAwMLvFVEw/8QBOE2hkqd8JPqL/3Bm4aGhoaGhit5N1nRueutmDfeYt30NTTuIGUveCvhR95uXljLhQNv3ypMdv71JyMgUrPlTIIrqr/bVENDQ0PDA9w88qbU76aqQ0PDC/yhyZS94K2EOb9vHg16LgAksKUiW1PBehPZlgq2VCTzVY5vG8G9D5Wd5Qs0NDQ0NDQ0Sg+lPnjL/cHlXRzsqXTPPn29ticy7hl2LhuChJDX6yYBsmOxSJ0gE9da/TVNGhoaGhqeobLMWwEEwXmos7CUP/SiaJQeZD9ZsaLUB2/eU7KOzwzuwy6pAh2bx6PXiehFEVEEuySTkWVh895kYsPal1j5GhoaGn8d3C0VkvvZeUah8mSD0n8j1ihl+EGT+Us+nblt21ZWrFjhdb70LAsrdyTRrEkLAstFERwWTVhkNGGR1QmLqE75irVoUO8eVuwo+h15p0+dolfPnkXKeaOnVYsWijJq6b60o6R1lkbc+dVb2rZu49hv3aqVz/TeKXxR56WxLWuUYvLiOUEQHJufdJpoaBQb/wjefHwx5pgtjBszhjfnz0eSpKIz5LHt0Dnqx0YRGRaCIAgYdQIBBpEAPQQYBIwGkZjoihiNBk6cueZW1/oN6+napWtxT6WAnps3bwJgNpvp07s3FoulQLq7/K55fGGTL3WqsXLlStq3bUu7Nm34+eefS6wcJdz5VQl3/rh27apj/8b164r5k5ISadakqeKxovyQlJRIrx496NWjB0lJiW7tXLduHR3ataNn9+4cPHjQIxt8Uee+astKqAV9d6KNapQsBYI3DY3i4ifBfxkcNi2art26sujLL3n++edJSkrijfnzPVqJOS0jhwZ1c1+dohMFDHoRo15ArxOx2CSsdhFRsJMQE0VSyiUSapZX1bV+3XpGjhxZ7HNR0mMymVixcqVX+b3Jczd0qjF1yhT++98vsNisPPfMM/Tr169EyysOxfHHqlWrmPLaa2RkpCseL8oP/5r/L54bNBjJbuetN//Fu++/r1rWtKlTee/990lLS2fOrNn875uvi7TBF3Xuq7ashFrQdyfaqEbJ4LtV3vLyyjJWmw2rFsj7NQajEYNeX+aD+dIfvMle9oN7KN64SRPefe9dHv+/f/DZJ5/yzxHDVWW3/u9pAMKyLVxJMWCRTOy9ksADD/+D2JjqvDppIq9Pn82xI/tYv24d7bvdx6Wrmar6UtPSSExMpEnT3B6MhDp1OHHyZKH9wYOe49jRY2zdvh2Avz30EKdOnSIiIpL1GzcU0uOMsx6AHt26YTabmTN3Du3ad3BrxwP338c7775HrVq1SEpKZNTIkfz0y6/07d2HlJQLmAID6dS5M1s2bcZutzFq1Gj+7/F/FHluvXv14vy5c5QvX54RI0fwyN/7q5alJKtEpYoVSEpOwhRgolpUlKrPd+/exbgx4xAEgXnz59GsWXNFn6qVe/r0aSZPmsShgweJiYlh2U8/FdB/YP9+xo4ZQ3pGBjNnzqJrN+UeIGd/bNu6hQnjJ2AymRRlF3z0EZmZmYwaPZr/fvY5AwcO5F9vvnlbfti7by+z5s5BlmXeeecdVT8BZGVmYjQGUCe+CsePH3Okq9ngrs5d/avmJ1+3Zddy8/UABXS56lerfyV9GncA92/GyhXxwaK6VqsVCZmKlaoQGBRYbH0ad4/srGyuXP4TEQGDwXAbGvyj6630B28lxP59+/jni/+kW/fuDHzu2QLHVq9Y7tjv2acv5vRLtH3ia0da4uZ5tDWeYN2qX4gZ+jxXr15FkmV27fiNZ4YM5/NPPiKkamPVsjdv2kS7tu3Q69Xdb7fb2bJ5C5u3bnWkHTlyhL379yNJssd68vnks884duwYs2fN4pflK9zmv+/+fvz8808MHz6Cn378ifv7PQDkDpkdPHw413cvvMDKNatJTkpmxIgRjuDNnU1ffvUV4eHhHDiwn6GDB/PI3/urlqUkC4VvwGPGjmfihPFcu3aNhZ986ijLVW7a66/z2pQpAMycPoPvly1T9Klaua9MmEiv3r1Z+MknZGUWDsynTpnCtOnTKRcayrgxYx1BiVrAADBr5mymvD6V+PgEenTrVuDYRx9+SFZWFqNGjwZw9H6pBW9qfsgnLTWVkLze5dRU98O9I14axVNPPI4xIKDAjVHNBnd17upfNT/5ui27lgvKdeCKWv0r6dO42+TWhVzg0Rfv68dms5FjsRAXn0B2ViaZacq92xr+gU6vo1at2pz84wSCIHj0neKP+MVZeXM5erK0yPp16xk5YjgDBg5k1OjRhVbVdl1CxGzToQ+u7PgcWT6S7JwcooTtWGzDkCQZi01GEEQkOXfZkExzjmr5G9dvoEu3LgXS7HY7Op3O8VkQBHr27Mlnn3zK+IkTHOnOw7tKetSoUaMGlStXZtyYMUXm79evH08+8SSDBg3mu2+/ZcnSpY5jAQEBtGjZkvSMDMqXr0BERCTXr10rUud33y7lk4Wfcu7cWQICjKSnZ6iWpSYLhW/A8+fP48eff2bnzh3Mf2Me7Tu0V5Q7feo07dq3Q5ZlRrr0sub71F25R48e4ZPPPsVkMin2lCUnJ/PM07k9tM6/9twFDOfOnaVjx04YjcZCx37+6UemTZ+hmtcVNT/kExoWRkZmJrIsExYW7lbXU08/xVNPP8W3S5fw7bffFVl2Ue3Quc2q+akk2rK3L6V2V/+3o0+j+MiOhRvkwt/r8i0Z1zRXHar6ZZnU1DRq1qpFVmYGdput+EZr3FVsVonMzAyqVKvGmeRTREZGeDWE6i9zXvxjwoKPCTAZmTd/Pi+PGaIBzOkAACAASURBVOPR61CybTrsdti8O5nv1h8louEI7uk1E7vlOlabRHhEeSw2iagaMSxa+AH1GjQiMkz5i95ms7Ft+zY6dursSKtYsSK//7a9wEPToijyyqRJLFr0hcd69Ho9p0+fVpTPyclh1cqVxOf1BCnlz6daVBQJdeMZ/s8XadiwYaFhOFEUHT0yzv5zp3PenLmMGTuWfQcOsHbDRrdlqckqkXLhAikXLxITU5sL58+rytWqVZNtW7exfdt2ateurSjjrtw6cXF8u/RbzGazI1h19ndMTAzvffA+h48eZf1G9zbnExsby+rVq8jJKRzof7HoS+bOncvly5c90lWUH5o2acrqlatYtXwFTZu6f/tHenoGK1euZO7sOQwePNitrLs6V0LJTyXZlvMpVy6EM2fOqE4GAff1r1F6kSXZsXmL3W7nZmoqISEhWC0WJEnStjKwWS0WQoKCuZmait1uL4FWd/fxi543X4fB7dp5tw5btk3EJsk0rlcdm11C0hkd6dkWmTGTZpJtsdO8bWeatOpIjsXKoWPJirr27tlDnTp1CC1XzpE2bvx4xowZS1ZmJrGxcY70R/v3p0XLlh7reeLJJ3nk4b+xZdvWArK1Y2Np3rQptWrVZPa8ear5nXlu0CCe+MfjjqEyT3Cn88XhI5g65TWuXLmC0WikevXqqmW5k3VlwsSJDB2c+yD+2PETVOVemzKVl19+GUEQmP/mfEUZd+XOmD2HVydPYt7cOVSLimLV6tUF/D1j9iymTHqV0S+NokaN6o7hPHdMmzmTCWPHMXH8BGrHxhY4Flm+PNOmz2D666/zn/feU9Xx3LMD+eTTz1T9kH989JjRvDDseQDe//ADVX02m412bVqTEB/PzDlz6Na9u9tzKKoduaLkp5JuywDPDhrEQw88QHR0FD//mvtYRL5v8vGm3WncfW5NWHC+QXj3kLoky+SYzUgyXq08oFH6uVW3XgYQftL1dnvTMWTZka//o4iX6yMkVEM4az4pZocaBKPOpAu06EVBp9fZLTq9UE7Q6e05Br2sM4gG0WCTRQPYjDl60RQkiiYbUqDOIIeIiOVEkxCmM4qROkGOlHVihTkx1/qfP32KkNBQj0w7cvgwUVHVaNqy9W2dmhIfzfkbj770I7sPneZKmplLqVkM6NuUJW8/SLdnFyMIQt5wKYiCRFb6Dc5cTKVf+4RCuubMmk3lqpUZOPBZhZI8p7h6XPNfuHCefvfdz979+31mky90liXKoj98Uee+bsveUBbrpCyxd+fvXLiQQs2aNbBYLaxfuw6r1coLI0aQkZ4GFJywkD88FlIulI8//ACTMYC2HdoTGVlBUb/FaiXxZCKdu3bj5vWrijKlgTVr1tCjR4+7bYZfER5Zno3r1xNXJw6jFxMXLl/8k/j69ZlwusJSwS5dtcvCdbtFui6Z5VQJKd1uFTL0iNlZkmQOsElm0Fv0gmSVrJLVJtitNl2AVU6X7Tqj3SbbbfZso02y2M32wDSrXMNURzqRglzpKPLSJdz6tSAIXoeLZW/YtASi5vxh0/px0bRrVJsH2zfAbs9N1wlWBNmKQbAQrM9Czv6TAyfOEhmqPINww4b1dOns2bM97iiuHtf8f3voYR5//Amf2uQLnWWJ0uaPhDp1Cm3e4os693Vb9obSVicaLrh7wUK+SN5zxqqzTj24H8hQ7KG6X379tcSGAXOKOaRbUratWr2m4HCl1caGTRux2Wx3fej0dtm1eycWq/W2898p/GDY9O73YWZbdXw8T2mpCh2fL9teICWqQgjN61encZ1qirpWrVnjE5uKq8c1/45du4qlr6R0liVKmz88mX1ZFL6oc1+3ZW8obXWicffwxbBpSQ69Fld3SdhmtVoK6BUE6JD3WJK/DkP36t2XsLAwuHC3LXGPHwRv3uJ5sLd6xXKPXk4/8fVvimmThoaGhob3uOl6y59tWuQqvZ7dD2S5+MFGvo6tW7eTbc7GaDQSG1ub6Kgotm//jcaNGhEUHERGZiYHDxykbds2irIA165d49CRI+hEXQHdN27e4NDBIyDAvffcQ0RE7uzxrMwsDh89SlpqKkHBwbRt01rRtny80aNmI8DKVasA6NUzd1h31eo1jn21MrZt205Wthm9QU9CnTiqVVPu7LgbXL96hQqVKgFBd9sUt5T+4E2+2/1uGhoaGhqlFV8s0guyT3vemjdrisFoIDU1jf3791OtalUqV6lMysUUateuTUpKClWqVEaSJEVZgGPHT1A3PoFyISFs3b7dofvoseMk1I0H4Pjx47RqlTup7dCRw1SuVJkmTRpjzxu2VLItH2/0qNkI0KN7t0L6i7I1IzOTbl27cOPGTY4cOUKVKlWK5Xdfsmv3LmrWib/bZhRJ6Q/eoCResKChoaGhUcpx98hb/ixT59mmSmu6eXo/KE7wlh9ASpJESspFzp49R7Y5G1EUHc9/Va5UiT1791OjRnVSLqTQvHkzzp+/oCgLkJ2dTWRkhGM5pvz0rMwsIsJze7AyMjMd6WlpGTRp3AiB3KV2igrePNXjzkY1vxVlaz4REeGO5/l8ze3GAT21YdO7S4DJs1eceCqnoaGhoVEK8dGvdfk2AojU1DSCQ4K5ceMGgYGByJJEYmIi9erVpXxkJDa7nS1btyFLEgFGIyHBQRw4eJhyoeUIMBpVZQGCgoK4fOkyFStWKGBfUGAg165dd8jkp4eEBHHhfArVqlXFZrNjNBacYel6fp7qcWejXq8nMzMTg16HwWAsVJZaGa723I7vSwpt2FRDQ0NDQ6PE8U30dju9P2fOneX69esYjEbiY+OQJImaNWty4sQfWKxWBEEg0GRy6I6OjmL/gYM0adSoSNmE+DiOHf+DYyeOExQU6EiPi4vl+PETyAjUqxvvSI+vE88fJ/8gMe8dxy1bNC9g6/qNmxz7nTt28FiPOxurR0eza/ceTCYTLZrdei9xUba6+jt//+DhwzS8555C/2+P22sXu3fvopY2bOorSs+46fWzqziz541bhTmet8gtWEAktt0blKvcrOSM0NDQ0Pgr4H7ctOB/1313aUpitzFhoUG9uoV0RFWrQlS1KoXSAcJCy9GpQzuPZEOCg2nRrImijlYtmxdKDw4y0aRRQ8XzyS/T+ZinegBVG2tUj6JG9agCaZ06tCvSVmcZ5/17G9RHlqVC/+8kPXv3ISxUGza9C5Rs9HZq5wwa9FwASGBLRbamgvUmsi0VbKlI5qsc3zCU5v+3u8Rs0NDQ0Phr4MFCbx7pUEYARFHg8uVLGIwB5Jizb7MMjdKEKTCIy5euIIqC128iMGdlkp2ViTZsWorp9/AjXuepVHcQO5cNQULI63WTgPwFImV0gky9DtN8baqGhoaGRgE87XpTR6fTERwcwoH9B+jYsQM3r1/TAjg/J8AUSGh4JFs2b6Z8ZCQ6ne5um1Qi+EHwVrrmjmaV68suKYyOzePR60T0oogogl2SyciysHlvMvUiOt1tMzU0NDTKNPl3Bud3V3p7txBFkfCIcK7fuMaK5cupf8+9VC1Fy1ZoeM/FPy/y22+/E1IuhPCIcMds3bJGqQ/eZOfHyjyRp+gLeMuWzaSlpnHf/fd7ZUtaZg4/bzlG8yYtCCwXgtGgw2QQEUUBu10mINhOg3pB/LTlGM890NytrlPJyTw7cAAbNm32ygZ3epo0vJd9Bw8VklFL96UdJa2zNOLOr97SvEkTdu/bB0DTxo3Yu/+AT/TeKXxR56WxLWvcXTwaNBXcD4wVdT8IDg6mRvXqnL+Qwq4dO0hLTfXaTo3SQ2hYGFWrViE6qhrBwcFe5/fJsoF3gFIfvJUEOeYcRo0cweHDhxg7brzHkfmmvUnUj40iMiwEQRAw6gQCDCKiIGMXBSRZJCa6IjdS0ziafIn6tSur6lq7dg3duxf/RcPOem7cuAGA2Wzmvj69WbFqNUaj0ZHuLr9rHl/Y5Eudaiz/9VemvvYqsiwz+bUpPPjQQyVSjhLu/KqEO39cvXrFsX/92jXF/ImJJ3mo3wMcPnas0LGi/JCYeJLBz+a+uP3jTz8lLk79PaZr1qxm8sSJBAYG8u//vEujxo2LtMEXdV4a2/KdaMMat4mj600hzQtEQSA8PAKjMYCKFStiztaGTf0ZU2Ag5UJCCAoKQigisPdn/CR48/KKLEK8e48efLNkKYMHPUfiyUTefucdjyL0m2nZNKib26WuEwUMehGjXkCvE7HYJKx2EVGwkxATxR9nL7sP3tasYfTLY7w6LU/1mEwm1m3Y6FV+b/LcDZ1qTJ70Cv/7+hssVitPPf6POxq8eUtx/LFi+XImvTKRjIx0xeNF+WHenLkMGfY8kt3OG3Pn8tHHC1XLem3SJD76eCFpaWnMmDaNpd9/X6QNvqjz0tiW70Qb1nBDwcn8ihR5f/bg9iEIAsHBwblrtflL14uGIoIgFHOo1D+W+i+Dg8GeOb5ps2Z8uGABa1av4uOPPnIru/6zR1n/2aOEnZ7GlfVDOLPqRRZ//jaX/7yAToRXJ01EL4ocO3KQLz5+lyuXLnLpqvJNFiA1NZWTJ0/SrHnu0Gqt6tGOY877A55+ipZOa+fc37cP9RPiad+mjaIeZ5z1AHRq345WzZuxZfOttX7U7OjdozunTp0CcntaevfoDkD3Ll2oF1+Hpo0b8fLoUTRv0oQmDe/lq0WLPDq3rp07Uad2DG1atmDJ4m/clqUkq0SlihVJTEzk8qVLREVHq8rt3LmD9m3a0KFtW3bt2qnqU7VyT506xWP9/07dOnH07d2rkP59e/fSuUN7mjVpzFo3L0p39seWzZto1bwZndq3U5T94L33eGPeXAA+XbiQQYMGq+otyg979uym7333cV+/fuzZvUdVD0BmZiYBAQHEJyRw9OgRR7qaDe7q3NW/an4qqbYMha8j189F1V1RbVjpPDV8RVFrhahtrnKeIYoiOp1O2/x488UzbqU/dPObnjffs3fPHoYNGUKPnr0YPHRogWM///CdY7/fw4+QnfYnbZ/42pGWuHkebY0nWLfqF2KGPs/Vq1eRZJldO37jmSHD+fyTjyhXrQlqbNywgfbtO6DXq7vfbrezaeNGft91a8mRw4cOceT4CceChp7oyeeLr/7H0SNHmP7666xet95t/gcefIgfl/3AS6NG88P33/PgQw/nnnfiSU4kJrF3zx6GDh7E+k2bSEpM4oXnh/HEU08VadPipd8SERHBvn17efaZZ3j0sf9TLUtJFm7dSE+fOw/AhFcmMfbl0Vy9epX/LvrSUZar3GuTJzNtxgwAXp8yhV+Wr1D0qVq5415+mT733cd/F31JZkZGoXObPOkVZs2ZS2hoKKNGjqR7jx6KdjgzberrTJ85k4S69QoFcO+/+y6ZWZmMHTcewNH7NW/unEJ63Pkhn9SbNwkJCQHg5k33w72jx4zlsf5/JyAgoEAvhJoN7urc1b9qfiqptux6HSldV2o2KaHWPlzPU+POUZaHxjQ01PhLBm9r16zhhWFDeW7wYMVn3lyXEDHbdOiDbw2BRpaPJDsnhyhhOxbbMCRJxmKTEQQRSc5dNiTTnKNa/rq1a+me18OUj91uLzClWRAEevfpw8IFC5j06quOdOfhXSU9atSsWZMqVaowauSIIvM/+NBDPNa/P0OHPc/SxYv54cefHMcCAgJo1bo16enpVKhQkcjI8ly7erVInUsWf8OCDz/i7NkzBAQEkJ6erlqWmiwUDoLmzJ7F8lWr2fH7b8yZPYuOnTopyp1KTqZDx47IsswLwwoG6/k+dVfu4cOH+OKrrzCZTJhMpkLnl5SYyOP/9xgABsOt19IoBW35nD17hs5duio+S7Xsh++ZNWeual5X1PyQT1h4OBkZGciyTHh4hFtdAwYOZMDAgSz+5muWLF5cZNlFtUPnNqvmp5Jqy67XkdJ1pWaTK+7ah+t5apQ8SrNNy+BQkoaGIn7Q1n3fgRlgCuCtf7/D+AkTPepizbbpsNth8+5kvlt/lIiGI7in10zslutYbRLhEeWx2CSiasSwaOEH1GvQiMgw5S9ym83G1q1b6NylqyOtUqVKbN+2FYvF4kgTRZHXpkzl888+9ViPXq93DEG6kpOTw/JffyUhIUE1fz5R0dHUrVeXYUMG06hR40LDcKIoOnpknP3nTuesGTOY8MorHD3xB1u2/+a2LDVZJS6cP09KSgq1a8dy/tw5VbmYmBi2bN7M1i1biI2LU5RxV258fDyLv/kGs9nsCFad/V07NpYFCxdyMvkUW3/73a3N+cTVqcPKFcvJySkc6H+9eAmzZs7g0qVLHukqyg/NmjVnxfLlLP/lF5o1d//2j/T0dJb/+iszp09n2PPPu5V1V+dKKPmpJNuy63WkdF15WnfetEuNO0DeCKng9OcnjytplHb8oA2V/p6327gYixLv0KGjV/qybSI2SaZxverY7BKSzuhIz7bIjJk0k2yLneZtO9OkVUdyLFYOH1e+8ezetYv4+HhCQ0MdaRMnTealkSPJzMgoMAvw4QcfoFXr1h7reXrAAPr17cvOPQWfaYqNi+Pe+vWIiYlh/ltvqeZ3ZsiwYTz6yCOOoTJPcKdz5KjRTH5lIpcvX8ZoNFKjRg3VstzJujL5tdd4dsAzSHY7EydNVpWbNmMmI0cMRxAE3n7nHUUZd+XOnf8mE8ePY9aM6URFR7Nh0+YC/p77xhu8Mn4Cw198kZo1azqG89wxe+48Xn7pJcaMHl0ooCxfoQKz5sxlyquT+XDBx6o6nn7yCb748itVP+QfHzdhfIHZpmrYbDaaN2lM3bp1mTf/TXr0LPx8nzNFtSNXlPxU0m3Z9Tpy/axWd/m+y8ebdqnhG9zPV8hNKThqqialoeEhftJgbu9hAVl25Ov/KOLl+ggJ1RDOmk+K2aEGwagz6QItelHQ6XV2i04vlBN0enuOQS/rDKJBNNhk0QA2Y45eNAWJosmGFKgzyCEiYjnRJITpjGKkTpAjZZ1YYVaNy/3PnT5FWIT7oZ58Dh08QLVq1WjfxbMhGE94Z2ofHn3pR3YfOs2VNDOXUrMY0LcpS95+kG7PLkYQhLzhUhAFiaz0G5z9M41HujUqpGvGtGlUqVqFQYOHFMum4upxzX/+/Dl6de/OkeMnfGaTL3SWJcqiP3xR56WxLedTFuvMn9i6YS0pKSnUqFEDi9XCpg0bsVqtvDBiBKk3rgNgd3rOUJc3EhAWEcnHH36AyRhAq7ZtqFhRfea/hoYzqTduUL1WDK+crbRUsEtX7bJw3W6RrktmOVVCSrdbhQw9YnaWJJkDbJIZ9Ba9IFklq2S1CXarTRdgldNlu85ot8l2mz3baJMsdrM9MM0q1zDVkU6kIFc6irx0idMiN4LgdcjoB8Om4P2L6X0bOucPm9aPi6Zdo9o82L4Bdntuuk6wIshWDIKFYH0WcvafHDhxlooRIYq61q1dQ7duxQ8si6vHNX+/vn156ulnfGqTL3SWJUqbP2pVjy60eYsv6rw0tuWS0KVxG8jyre90le91wWlT1aGh4TH+MfZe+odNSwHZVh0fz+uvcETH58u2F0iJrliOVg1jaFZXeUhlw+YtPrGpuHpc8/viTQElobMsUdr84W4yhaf4os5LY1suCV0aJYOvZpvKsozVZsPq9Oyxhv9hMBox6PVlfhbyXzp4+/mH7zx6Of3UuT/eAWs0NDQ0NDzF0TfidJO+3f4Sq9WKXZIoX74igYGFZ5Nr+A/Z2WauXbuCThTdzh73d/7SwZuGhoaGhp/io+FQm82G2WwmJi6O7KxMMjLSfKJX4+6g0+uJrlGDU4mJCILg0dqR/oh/nFXpH37W0NDQ0LgLOC8k7e1QmSzLpKamEVW9OpkZGdhtNl+bp3GHkSxWJCmDipWrcOHcOSIjI7xrF/7xyJufBG9ekO/3HLNnLxf2VE5DQ0ND487i7qVXDpkigjd392G73c7N1FQS6tUl9Yb7N49o+A82i4WwiAhupqYSFhZaJnvf/OCMZGSvZpuqz0rS0NDQ0PAj8r/P3XyvF/lt7+Z+IMkyZnM2kixrrzYrY8jSrbr1Kp93Ecddww+Ct9LFzQtruXDg7bxPzl8oub8NBURqtpxJcEX1d5tqaGhoaPgGX80plGUteFNj/fqNdO3a+S5boeFMqQ/eSlsn2vl982jQcwEggS0V2ZoK1pvItlSwpSKZr3J82wjufcg3S4JoaGhoaBQmf7jUucesOMtDeNLzdunSZU788QdWq5Xw8HCaNb17P9IvX73C/n0HaNykEZUqVHSkb9i4iS6dC77bWCnNGyxWyx3rmSyurb6hlAUeCpT64K0k6dmnr9d5IuOeYeeyIUgIeZGlBMh5XyQyOkEmrrX6a5o0NDQ0NHyH7JNf+J4Nmx47cZx7GzQgNDSU7KzsuzrUeu7sOapHR3Pu7HkqRJZ3pFut1kJ2KaV5y506V1/YCv4QfhWPv3TwdjtkBvdhl1SBjs3j0etE9KKIKIJdksnIsrB5bzKxYe3vtpkaGhoafwl8tkivBwGDLIHBoEcUBIKDg5AliZupNzly9DgI0KBePcLDwgBYt2Ej3bp0LrS/c9cesrKzMBgMtGvTmqysbI6dOEFaWhrBQUG0bNGctLQ0jhw9hs1up27dBCqWL1/AjuzsbLKzs2ncsCHbf99BVmYmgYGBjuNr897Pm1+mUtpvO3ZiNpsxGA3UrlWLalWrAijaA7B5y1ZkGerE1aZqlSoA/L5jF9lmMzqdjgrlI7l2/RqyBLGxMURVqwagei75efV6HXGxt3Sq2a9REP94PZaPQ+ht27ayYsUKr/OlZ1lYuSOJZk1aEFguiuCwaMIiowmLrE5YRHXKV6xFg3r3sGJHUpG6Tp86Ra+ePW/HfFU9rVq0UJRRS/elHSWtszTizq/e0rZ1G8d+61atfKb3TuGLOi+NbVmj9CPLsmMrDpIkFbkl1Ill774DbPvtd65cvYokSZz44yTxcXHEx8bxxx8nHbLOOp330zPSademDS2aNUWSJI4eP0bF8hXo0K4tDe+9F0mSOHbiD+Lr1KHhvfeQmJRUyI7zFy5QrWpVJEkiqmpVzp2/UKCsLp060qVTR7dpTRo1pGP7djSoW4+TibfKULIHoFWL5tSvm0BiUrJDNjMrkw7t2nBP/bpcuXqVFs2bc8899Ug+dcoho3Yu+XnrJRTUqWTr7Wy3HTj4yVIhfhC8eevJouVzzBbGjRnDm/Pne9U9u+3QOerHRhEZFoIgCBh1AgEGkQA9BBgEjAaRmOiKGI0GTpy55lbX+g3r6dqlq8dle6Ln5s2bAJjNZvr07o0l7zUv+enu8rvm8YVNvtSpxsqVK2nfti3t2rTh559/LrFylHDnVyXc+ePatauO/RvXryvmT0pKpFmTporHivJDUlIivXr0oFePHiQlJbq1c926dXRo146e3btz8OBBj2zwRZ2XlrZ8J9qthqd4slhIUW839ez+IclSkVv5CuVp07ol9esmcOKPk0iyRGZWNmHhoYSFh5GZleWQddbpui+IIOpEJFkiPT2TKlUrggB6gw5JlsjKymL/wYPs3rMXc7a5gA12u42Ui5dITEpmw6bNJCYn8+eff2Kz2wqVpVS+JEtcuHiRfQcOsnnrVg4ePozNZnMcU7IHcu0NjwjDYrEU0IsA5ULLYbPZ0Ot1lCtXDovF6pBRO5f8vEo6PamLorbbxw8iN/xk2NSr0M2DlUK6duvKoi+/5PnnnycpKYk35s8nODi4SN1pGTk0qJvbFawTBQx6EaNeQK8TsdgkrHYRUbCTEBNFUsolEmqWV9W1ft16Ro4c6cWZea7HZDKxYuVKr/J7k+du6FRj6pQp/Pe/X2CxWXnumWfo169fiZZXHIrjj1WrVjHltdfIyEhXPF6UH/41/188N2gwkt3OW2/+i3fff1+1rGlTp/Le+++TlpbOnFmz+d83Xxdpgy/qvLS05TvRbjU8o8AqIa7f63lf9AVmicoK/REe3kBkqWjBtPR0goKCkGUZu11ClmSCTCauX8/9UREUFOjQYzQauH79BmGhYYX0O+8HBwdyMeVPqlSpgs1ux2gwEBQYSI0aNYiMCMdmsxWQv3T5CpGR4dSNj3eknfjjJJcuXaZK5cro9XqysrLR63SO10O5pp1KPkV8fB0iIyKw2e389vsORxlK9rizv6h9d+eitK9k/53ETzre/KHnrWRo3KQJ7773LuvWruWzTz51K7v1f0+z9X9PE3Z6GlfWD+HMqhdZ/PnbXP7zAjoRXp00Eb0ocuzIQb74+F2uXLrIpavKN1mA1LQ0EhMTadI0twcjoU4dxzHn/cGDnqN927aOz3976CGaNGpE185dFPU446wHoEe3bnRo145tW2/NglWz44H77+P06dNAbk/LA/ffB0Df3n1o3LAhrVu1Yvz48bRt3YZWLVrwzf++9ujcevfqxT3169OpQwe++3ap27KUZJWoVLECSclJXLl0mWpRUapyu3fvomvnLnTr0pU9e3Y70l19qlbu6dOnefKJJ2h077089MADhfQf2L+fnt2706Z1a9bnPa+hhLM/tm3dQod27ejRrZui7IKPPuKtf/0LgP9+9jkDBw5U1VuUH/bu20uvPr3pfV9f9u7dp6oHICszE6MxgDrxdTh+/JgjXc0Gd3Xu6l81P5VUWwbluiuqvopqt0rnpnFnUYznFNI8xZOhuLNnz/H77zs4cuwYtWNqIkkStWvHkJiUSGJiEjG1ajlka9WsyYkTf7D9998JCgxSHEKVJIm42FguXbnC9t9+58DBg460s+fOsu33HRw8fKSAfErKRapWqVwgrWqVyqRc/DN3GLVaNfbu28eBQ4cdx13TqlePJjExia3bf2PHzl2YTAFu7XG22dt9tXNRk1ey/1BePtf/7odNyzZ+0fNWEuzft49/vvhPunXvzsDnni1wbPWK5Y79nn36Yk6/RNsnbgUoiZvn0dZ4gnWrfiFm6PNcvXoVvkiCFgAAIABJREFUSZbZteM3nhkynM8/+YiQqo1Vy968aRPt2rZzu+qz3W5ny+YtbN661ZF25MgR9u7fj5T3C8UTPfl88tlnHDt2jNmzZvHL8hVu8993fz9+/vknhg8fwU8//sT9/XJveElJiRw8fDjXdy+8wMo1q0lOSmbEiBH83+P/KNKmL7/6ivDwcA4c2M/QwYN55O/9VctSkoVbN9UTJ08CMGbseCZOGM+1a9dY6BSEu8pNe/11XpsyBYCZ02fw/bJlij5VK/eVCRPp1bs3Cz/5hKzMzELnNnXKFKZNn0650FDGjRlL125dFe1wZtbM2Ux5fSrx8QmFAriPPvyQrKwsRo0eDeDo/frXm28W0uPOD/mkpaYSkte7nJrqfrh3xEujeOqJxzEGBBR4jkjNBnd17upfNT+VVFsG5bpTs0MJtTbhem4adwffzDb1bMJCvYT4Ap9lSSI0JITmTZoUSAOoWL58gYkG+entWrcqUFaQyUTDBg0KyAUHBdLonnsUbWt4T4NCacFBQTS6pwGyJBFdrSrR1aoWkHFNq1q5MlUrV1Y8fyV7nG32dl/tXNTkleyvXzcBWZIK/f8r85cM3tavW8/IEcMZMHAgo0aPRhQLdkC6LiFitunQB99q6JHlI8nOySFK2I7FNgxJkrHYZARBRMp7cDbTnKNa/sb1G+jSreCvdbvdjk6nc3wWBIGePXvy2SefMn7iBEe68/Cukh41atSoQeXKlRk3ZkyR+fv168eTTzzJoEGD+e7bb1my9FZvQ0BAAC1atiQ9I4Py5SsQERHJ9WvXitT53bdL+WThp5w7d5aAACPp6RmqZanJQuEgaP78efz488/s3LmD+W/Mo32H9opyp0+dpl37dsiyzMgRwwscy/epu3KPHj3CJ599islkwmQyFTq/5ORknnn6aYACXf1KQVs+586dpWPHThiNxkLHfv7pR6ZNn6Ga1xU1P+QTGhZGRmYmsiwTFhbuVtdTTz/FU08/xbdLl/Dtt98VWXZR7dC5zar5qaTaMijXnZodrrhrE67npnF3KM5sUwEQRZHLf17GYDSSYzb7zjCNu4YpMJDLl64giqLPFnEubZT+YdMSGIAOMBmZN38+L48ZUyhwUyLbpsNuh827k/lu/VEiGo7gnl4zsVuuY7VJhEeUx2KTiKoRw6KFH1CvQSMiw5S/1G02G9u2b6Njp86OtIoVK/L7b9sLPCAtiiKvTJrEokVfeKxHr9c7hiBdycnJYdXKlcTn9QQp5c+nWlQUCXXjGf7PF2nYsGGhYThRFB2/dp39507nvDlzGTN2LPsOHGDtho1uy1KTVSLlwgVSLl4kJqY2F86fV5WrVasm27ZuY/u27dSuXVtRxl25deLi+Hbpt5jNZkew6uzvmJgY3vvgfQ4fPcr6je5tzic2NpbVq1eRk1M40P9i0ZfMnTuXy5cve6SrKD80bdKU1StXsWr5CpoWsbBoenoGK1euZO7sOQwePNitrLs6V0LJTyXZlkG57jytL2/aoob/odPpCAkO5uChA4RFVCDAFFh0Jo1STYApkNCICA4e3E9IcHCBThGP8JOO9L9kz1u7dt6tw5ZtE7FJMo3rVcdml5B0Rkd6tkVmzKSZZFvsNG/bmSatOpJjsXLoWLKirr179lCnTh1Cy5VzpI0bP54xY8aSlZlJbGycI/3R/v1p0bKlx3qeePJJHnn4b2zZtrWAbO3YWJo3bUqtWjWZPW+ean5nnhs0iCf+8bhjqMwT3Ol8cfgIpk55jStXrmA0GqlevbpqWe5kXZkwcSJDB+c+iD92/ARVudemTOXll19GEATmvzlfUcZduTNmz+HVyZOYN3cO1aKiWLV6dQF/z5g9iymTXmX0S6OoUaO6YzjPHdNmzmTC2HFMHD+B2rGxBY5Fli/PtOkzmP766/znvfdUdTz37EA++fQzVT/kHx89ZjQvDHsegPc//EBVn81mo12b1iTExzNzzhy6de/u9hyKakeuKPmppNuyUt2p1Ve+v/Lxpi1q3GHyh0tlhTQPEUWR8IgIrt+4zqpVK6jboAHV8tYbkwUQZO2/P/0H+PPiJX7fsYOw8DDCIyI86qDxR26vR1GWHfn6P4p4uT5CQjWEs+aTYnaoQTDqTLpAi14UdHqd3aLTC+UEnd6eY9DLOoNoEA02WTSAzZijF01BomiyIQXqDHKIiFhONAlhOqMYqRPkSFknVpgRfbH/uVPJRDi9/sMdB/btpVrVqrTq4LvXa3w05288+tKP7D50mitpZi6lZjGgb1OWvP0g3Z5djCAIecOlIAoSWek3OHMxlX7tEwrpmjNrNpWrVmbgwGcVSvKc4upxzX/hwnn63Xc/e/fv95lNvtBZliiL/vBFnZe2tlwW68lf2bFlEykXL1KjenWsVgubt2zFarXywogRXLuS2ytts9sd8vq8XpbyFSvx8YcfYDIG0LJlCypVVZ/MJMkyqTdvcP5CCikpKaSlpZXsSWmUKKGhoVSrVo3oqGqEhUcgejmsfuPqFarXqs3kC1WXCnbpql0Wrtst0nXJLKdKSOl2q5ChR8zOkiRzgE0yg96iFySrZJWsNsFutekCrHK6bNcZ7TbZbrNnG22SxW62B6ZZ5RqmOtKJFORKR5GXLsH5vW5e9/eVuZ63kpjmmz9sWj8uGptdwi7J2O256TrBiiwLGAQJg85GVsZNDpy4RO3oyoq6NmxYz0cLFhTbpuLqcc3/t4ce5vHHn/CpTb7QWZYobf5wncUJ7p/RU8IXdV7a2nJpq6e/Mp6u8laUDneIgkB4eARGYwAVK1bAnK099+bPmAJNlAspR1BQkM/evlEa8Yvg7W4PQWdbdXw8r7/CER2fL9teICWqQgjN61encZ1qirpWrVnjE5uKq8c1/45du4qlr6R0liVKmz+8DdSU8EWdl7a2XNrqSaPkEQSB4OBgAgMDfTZ7VePuIAhCsYZK/WWdN78I3kqK1SuWe/Ry+omvf3MHrNHQ0NDQ8BzZ5b/rvveU1eejNMoef+ngTUNDQ0PDvynLQ2MaGmqU/uDNX/owNTQ0NDTuHI6ON6FwmobG7eInbaj0B2+Al283BWSP1+spSk4GbmbbybLKSNqzEBoaGholiigIBBkEwgN1uJuy4Hnspn1va3iDf/QY+Unw5gU+9vtNsx2zTSLMpEcnat3zGhoaGiWJXZZJN9u4acaj6aZFDpuW/vuwhobXlLngzdcxc3q2jcgQI6IgIANp51aRsv+NW6XJzg/NygiIRLd+g+BKzXxohYaGhsZfA1EQCDbquJllKSJ2y00p7lIhGhr+SJkL3nyNZLchYHRMH7+wZwYNei4AJLClIltTwXoT2ZYKtlQk81WObx5KvUe05QY0NDQ0bgedKCA5Lb7rHufwTQvVNP4alPrgrSRHn/s9/EiRMoJL6eF1nmPnsiFICHm9bhIg5wV3MjpBpnbb10vEXg0NDY2/Cq7fvYXIO+w8bFqcNdpkWcZqs2F1ese0hv9hMBox6PW3PQvZX8L/Uh+8Ict31ZuyLBcoPiOkL7ukcDo2j0evE9GLIqIIdkkmI8vCpr3J1Azv5DcNQENDQ6M04mkgVjB4u72yrFYrNruNiMjyBGovp/drss3Z3Lh+Db1Oj8Fg8F6BfPvt6E5S+oM3wPvozb38li2bSUtN47777/dMW5669KwcVv92nBZNWhBYLgSjQYfJICKKAna7TECwnXvqBbF6+3H+r4/7Z97OnErmxcED+WXtJo9s8ERPh+YN2bL7YCEZtXRf2lHSOksj7vzqLZ1bNmXjzr0AdGzZmM07/eu9mr6o85Juy/7oV42CzxQrHcFpIpksoYD7+4HNZiMrO4tatWqTlZVBelrqbdqqURrQ6XVUqxbFmdOnEIRg9Hpvwxz/mG1a9paT9sDvOeYcRo0cwdw5s5EkxavdSd8tZTsOJNMgNorIsBAEQcCoEwgwiAToIcAgYDSIxERXJMCo4+TpS27Vbly/hs5de3h4Up7puXnjBgBms5kHenbBktf9n5/uLr9rHl/Y5Eudaqxe8StdWzejS6umLP9pWYmVo4Q7vyrhzh/Xrl1x7N+4dk0xf3LSSVo3qq94rCg/JCed5P5uHbm/W0eSk9y/FmvDutV0a9Oc+7p24PCBgsGOmg2+qHNftWU11Pzqazo0b+iR3J24Pvya/FEX1RkLeZPEBByboqCb+4Esy6SmplGhQkUyM9OxWq1IsqRtfrxZrVYyMjMoX7ESqalpZfZ1Z2UvePOA7j168M2SpSxZvJihgweTmZmpKisIt74OMjKyqVIpAsh9oNagFzHqBUxGHQa9gF4nIgqQEBPF6QtXC33vOG8b162lU7fubmU82Zz1kJcWYDLx4+oNGIzGQr9b1fK75vGFTb7UqbbNmDKJDz//kv8s/JyZUyeXWDlKmzu/Km3u/EERetesXM6Af/QnMyP9tvzw7zfmMWDwMJ5+djDvzJ/n1s6Zr03mrQ8+5pXXZ/DGrOke2eCLOvdVW/ZVfd3udvPGjWK3B23LD8ZKFrvdzs3Um4SEhGC1WJAlSdvKwGazWAgJDuZm6k3sHk988S/KZPAmFy1C02bN+HDBAtasXsXHH32kKidJEju/fIydXz5G2OlpXFk/hDOrXmTx529z+c8L6ER4ddJE9KLIsSMH+eLjd7ly6SKXr6bnPi+nsKXevEnSyZM0atoMWZZpGFvdccx5/4Vnn6Jb62aOz4892JdW9ybQu2NbRT2Aoh6A+7q0p1ub5mzfsqlIOx7p24PTp5KRZZmkxD94pG8PZFnmoZ5daXlPPJ1aNGbS2FF0admUjs0asuSrRR6d2wM9OtOsbm16tGvJD0u/cVuWkqzSVqFCRZISE7ly6RJVo6JV5fbs+p3eHdvSp1M79u7eoepTtXJPn0pm4D/606JBHfr3613I3wf27eH+rh3o3LIJG9euUbXD2R/bt2zK7eHq0r6Arvz9Tz54j3fenIssyyz69BOeGjCogJw3fti/dzfde/elR9/72b9nj6p9siyTlZWJ0Wgktk48x48dcaSr2eCuzl39q+YnX7dltfrq3LIJnVo05qfvlrptl0q2u16PaucC0DC2uttrWencPLXjr7JJklQo6C70RS+DLMmOTUnQ3f1AkmXMZjN2WUaStK1MbXl1W1YX1/eTZ958z949exg2ZAg9evZi8NChBY79/MN3jv1G7buTk/4nbZ/42pGWuHkebY0nWLfqF2KGPs/Vq1eRZJldO37jmSHD+fyTjwip2kS17K2bNtK6XXu3Y/F2u51tmzexZttOR9qxw4f47cAxx1CvJ3ry+eDzLzlx9ChvzJzG9yvWus3f5/4HWf7TMp4fMYpff/yBvv0eAnKHzHYeOcnBfXsZ9cJgflyzgdNJSYwZ/gL9H3+ySJs++d8SwsMjOHRgL/8cNJCH/v6YallKsgCN4moAcCDxLAAvjXuFKeNf5tq1q7z/6SJHWa5ys6a+xsSp0wGYO/11vln2q6JP1cqdMn4sPfr05YNPvyAzM6PQuc2cMplXZ8yhXLlyTBozik7duiva4cwbM6Yx6fUZxCXU5f6uHQr66oP3yMrOZPjocQB8vvhbAN55c24hPe78kE9a6k2CQ0IASE11P9z7wktjePaJRwkwBjiCEXc2uKtzV/+q+cnXbVmtvn5as5FDB/bz2rjR9Pvb3wH1One2Xel6VDsXKFjfSnmV8MSOvxKeLoou++TmLCP7kX83bd5Cp44dihb8C1M2Q7ZblPrgTfEXVzFZu2YNLwwbynODBzN23HhEsWAHpPMSIqcvpWK26dAHV3akRZaPJDsnhyhhOxbbMCRJxmKTEQQRKe9XY6Y5B7XvlE3r19K5W/cCx202OzqdDiAvXaBbz958sfBjRk+c7JALDAp2yCjpUduPrl6TSpWq8MqYkY50tfx9+j3Ic088xoBBw1i2dAmLli5zyBiNATRt0YqM9HQiIysSHl6e69euFqlz2beL+e/CBVw4dwZjQAAZ6emqZf2wVFkWYP/JswXO7e03ZrP455Xs3vk7b8+bTZv2HRXlzpxKpnW7DsiyzJjhwwrYl+9Td+UeO3qIDz5bhDHAhDHA5EjP/38qKZHBT/0fAAaDQdVe5/1z587QtmMXjEZjIZlff/qBV6fPVmxDSmlqfsgnNCycjIwMZFkmLCxCtW0C/OOpAfzjqQH8sPQbln27pEgbimqHzm1WzU++bstq9RVSLpSWbdpx5cplt+3S1XZJkgpdj2rn4mqv2rXsLOupHWW0E0ERT2Mp3wRvKAbH6zduLPC5a+fOqvm3bN1Gh/btfGJLUVht1jsezHtzfq6ykiSxc/duWjZvXuh+W9rwl0usdHsRyO0X98adRYd7AaYA3vr3O4yfMLHIhiToBLJtOux22Lw7me/WHyWi4Qju6TUTu+U6VptEeER5LDaJqBoxLFr4AfUaNCIyLFjxOQ6rzcaO7Vtp26mLI61CxUrs/G0bOXkPLsuAIIqMmTSFrxd9VuCM3OnR6/WcPn1KcaghJyeH1SuXE1cnQTV/fp4qUdHUqZvA6H8O4Z6GjagSFV3guCCKuUMbefu4sSn/2FtzZv4/e+cdH0W1Pu5nZmt6D4F0QkJRkNC7IEUECxa8V0UUBUW9oiBI7x2x/O5Xr4qiXtsVwa70ojSVjgqKJCR0CAHSs9ky8/sjZEk2O5sN2ZA2D5/5sHvmPe955z3v7Lw5Z84Mz02YzI6Df/H9lh0u21KSdbadPX2Ks2fPEBvflDOnTirKxcbF8/P2bfyyYzvxTZs59amrdhOaJfHlyhWYTCYuXsws5++4+AReefMddh1O5YcfdyraUVpn04RENq1fQ1FRUbn+WvbRZ7yyeAEZGecV61fGDzclt2fj2jVsWP0DN7Vr5/Jeo9zcXDasXc0rC+fx6KjRLo/BVZ87s9eZn6ojlp31V4keseSPpAr6vPRnZ+ejUp/7+vlx/Hg6ly5dVKzr7vnhqs/r+yZoBCelV5Gv/JMkyb6VlOEg6Q7Obn4H6H1zL/vm8kZ56/Vb7KBkb7UuBKjE8TnKIkCnjh1AuH52u9vv5ZDla656Pan1I2/VQc+evSoWuoIgQ6FVxCrJtG0ZjdUmIWmKR0oKrSKFZpnxU+dTaLbRoVtvkjv3oshs4fc/05zqO7B3DwmJifj5+dvLnp84lanjnyc/P4/4hER7+fChQ2jXqbPbev4x7BEeuvt2Nuwo+3aHuIRm9Gx3AzFx8cxe8rJi/dIMH/kkjz8wlPc+W+WGl5RtKuGJZ8eyYOYUMi9koNPriYqOUWzLlawjL0yezphRI5BsNp6fOFVRbtLMuUx54TkEQWD+y685lXHV7syFLzF32iReWzyPiMgovln/Yxl/z1i4mPlTpzDp+X8RHRPLqtUbK/TXtPmLmDFhHDMnvkBcQrMy+4JDQpk2dyGLZ09n6RvLFHU8/dgw/vPex4p+KNn/7PgXGTu6+H61V996V1Gf1Wqlb9d2JCa1YOaipfTuN8DlMVQUR44481N1xLKz/nJGZWLN8XxU6vPhI5/kn3cOJDIqmpU/bHBat6RfrsWOhoJwnS+gStOmjuV/H03Bz9eXxo0jOHf+PDm5uSQ1Kz5/f/xpKwA39yy+jzU3N5c/jxzBZrWRmJRIaHAwAPv2H6CgsBCdVkfnTh3YvWcfpqIiNFoNCfFxNAoPB2D3nr2YiorQ6XTExsTQOOLqDJCjXUqyyrqdl2flZHPkr6MgQIukJAICrp5Xjsfnyj5H2Z+2bbd/VmpDyabfDx0iLy+frp07Oe2jhsg1PoJYttcbej9iRiuE5k0QTpiOioX+OkGvMWq8zFpR0Gg1NrNGK/gJGq2tSKeVNTpRJ+qssqgDq75IKxq9RdFoRfLS6GRfEdFPNAoBGr0YrBHkYFkjhs5pcnroiWOphDaKcMu0/Xv20LhxBH0GDr6mQ3Pk5MU8vvq/odz//Dfs+T2dCzkmzmcX8Oigdnz+2l30fWwFgiBcmS4FUZAoyL1M2tkc+nVvXU7fKwvnEh4RwbARo6pkV1X1ONY/c/ok998+gO37//SYTZ7QWZ+oj/7wRJ97OpbrCvUxHjxJfkEBKbt/4uzZc0RHR2GxmNmx82csFgtPjxlDxrkzinXDI5rwzltvYtQbaN++HY2jnCfDZouFo0eP0rV7N86fPl1u/7YdO+2fe3bvBhRPAf5x6E9CQ4LJvHSRG1u1QhRFtu3YaZcpYd+BgzSNi0Or03Dk76O0T0626+3WtQuyJKHVatm2Yyfdu3UlOyubv1OO0rljRwAsZjNanY7c3DwO/fmnPXlx1pYrWWe6lcr3HThIXEyxv46fOEly2zbX1KajbOkyV20o2dq5Ywf7LSbu0Cgykp937CQxMRF9JR7Wm3n+HDHxCcw4G7lSsEmZNlm4ZDNLlySTnC0h5dosQp4WsbBAkkwGq2QCrVkrSBbJIlmsgs1i1Rgscq5s0+htVtlmtRXqrZLZZrJ55VjkGGOidOQMcvhh5JWfczX7Fir/p0qDHHmrDIKAfdq0VbMorDYJmyRjsxWXawQLsiygEyR0GisFeVkcOHKe6MgmTobvYeuWjfy/t99zuq8yVFWPY/1hd9/O0AeHV8mu6tBZn6ht/mifFFuubO/fxyulwxN97ulYrivUtniobVT4qJArbiu9mlCswvNFlEbeenTtUma/AMTHRnPg9z9o2/pGhFL7HHUUFhby+6FDxbaJYpn9YnHhVb2yTGCAP2azBVmSOJ+RwekzZzGZTIgaEavVVqZ+6c8VyTrqdlVeUFhIgL8fCAIFhQXX3KYzf7rThqNNsiwTEhzMqVOniY8r/5vVUKn9yVsN/66JokChRcM7S4Y62avhg693lilpHOrHTa1iuaFZtFN9XylM31SWqupxrL/JA0+erw6d9Yna5o/KJmrO8ESfezqW6wq1LR5qG2KFq01lh/+rhtICAMdymySRkpZG07g4UtLSuKFlSzSiiFarIb+gEK1WRKctHunxMhqJjookMCAAq9VaRpejXsd9acdP0CyhKUEBAdhsNnbt3WeXEQSBgoICjEYjgEtZZ7pdffY2Grh8OavYfi+jvdzx+Fy16cwX7rShZFNcbAz7D/5GbIzz66qnqQt/UNX+5K2SlL+tVZnvvvqi4pfTCxqemfHFNb3ktiGtDFNRUVHxFLIsg6BxsVyhtHCpz05+pt36GZaxLwRwZOevVx/x0qVTB1LT0mgUHk5YaAgIcCwtjYSm8TSOiOC333/HYDTQ5sYbAGgaH8ex9HSOpKTiZTDQpvUNdl2O7ZX+LskSUZFNOJaWhsViQRBEjAa9XSaiUTgH//iDdslt0YiiS1lnul19jo2NJTX1GAAJCfH2csfjc9WmM1+404aSTb8fOoSfr6/9+19H/qZF86Ry/zck6l3yJnCtN/I5x6jTYJEkBMRrSuBUVFRUVNyn+CG9El56rf333NnveklSVnraVHDy6+/ur7YslU/zOndoX04mIS7O/jksJISwkBBkSaZJRARNIiLK6PL28uLGli3LtdG5Q/sy7ZX+XvK5UVgYjcLCnNoYExVFTFSUvcyVrDPdrj77+fjQtk3rcnocj89Vm8584U4bSjYlt2lTRq55YiKyJJf7vyFR75I3TxPopSOnyIbZJnvseUIqKioqKsoYtBr8DZpqb0eg+F60CxkX0OkNFJkKq71NlerH6GXkwvkLiKLo0cGc2kS9Td7cPQndkfMCvKr/d0RFRUVF5QqWogoE7Le8yeXL3ESj0eDr48Mfh/6gS9fO5FwEk5rA1WmMRi/8g4L55eefCQ8Lsz/8vr5Rb5M3FRUVFZX6jLMFC5XL3kRRJDAoiEuXLrFx3QZatGxJhJuPpVKpnZw9f45fd+8mKCiIwKCgWv9Gh2tFTd4qSdbpjZw+WPKQV7nUX33Ft9QKiMR2mo9PmPK7TVVUVFRUPENVb2bx8fEhJjoaUdRw4MABsnNyPGKXSs0Q4O9Pk8ZNiIpsgo+PT02bU23U+uStti3ZPbV/CTcMWAZIYM1GtmSDJQvZmg3WbCRTJn/tGEPrIdtq2lQVFRWV+k8VLxGiIBAYFITeYCAsPBRTockzdqnUCEYvI36+fnh7e1/7IsPalXY4pdYnb9XJgNsGVbpOcLNH2PX1E0gIV0bdit+hVryYQUYjyDTrUv7l0yoqKioqnuPqnIdcrqyyCIKAj48PXl5e6sK0Oo4gCPV2qrQ0DTp5uxbyfW5jtxRKrw5JaDUiWlFEFMEmyeQVmNm67xgJAT1q2kwVFRWV+s2VHKvMIyKqOgrXAC76KvWDBhmpO3ZsZ82aNZWul1tgZu2vqbRP7oiXXyQ+AVEEBEcREBxNQFA0IWFx3NDyRtb8mlqhrvS0NG4d4Pql3+5QWk/Je+AcUSr3pB3VrbM24sqvlaVbl672z106d3YhWTvxRJ9XVyx/+cUqOnfoQJ/evatkn0pt48p9xgL2rXKPaVdRqbs0yOStyGTmxfHjeXnpUsVXojhjx+8naZUQSXCAL4IgoNcIGHQiBi0YdAJ6nUh8VBh6vY4jxy+61LV5y2Zu6XNLVQ+ljJ6srOLXjZhMJm4bOBCz2Vym3FV9xzqesMmTOpVYu3YtPbp1o3vXrnz33XfV1o4zXPnVGa78cfFipv3z5UuXnNZPTU2hfXI7p/sq8kNqagq39u/Prf37k5qa4tLOTZs20bN7dwb068dvv/3mlg2e6PPqiuWXl77My6++xg+rVzutdz3iVEVFRcWTNMjk7Za+t/DRxx+zatUq/vXMM+Tn57tVLyeviIjwIAA0ooBOK6LXChj1GnRaAa1GRBSgeXwkqWcuu9S1edNmbunrgeTNiR6j0ciatWvR6/Vu169MnZrQqcSsmTNZ/t77vPXOO8ydNava2vEEVfHHunXreOjBh8jLy3W6vyI/vLL0FR4fOYoRIx7j1ZdfcdnWnFmzeOM//2HGzFksWrDQLRs80efVFcuZmZl0694Nb29vp/WuR5yqVB+CINilBPb4AAAgAElEQVQ3FZWGQoNM3gDaJifz+huvs2njRt5f/p5L2e2fDmf7p8MJSJ/Dhc1PcHzdM6z44DUyzp1GI8L0qZPRiiJ/HvqND995nQvnz3I+0/lFFiA7J4eUlBSS2xWPYDRPTLTvK/151MjH6dGtm/37PUOGkHzTTdzSu49TPaUprQegf9++9OzenR3br66CVbLjztsHk56eDhSPtNx5+2AABg28jbZt2tClc2cmTpxIty5d6dyxI599+j+3jm3grbdyY6tW3NyzJ1+sWumyLWeyzggPCyX1WCoXzmfQJDJSUW7Pnt3c0rsPffvcwt69e+zljj5Vajc9PZ1hDz3ETa1bM+TOO8vpP3jgAAP69aNrly5s3rRZ0Y7S/tixfRs9u3enf9++TmWXvf02r75SnGj99/0PGDFihKLeivywb/8+br1tIAMHD2Lfvv2KegAK8vPR6w0kJiXy119/2suVbHDV547+VfJTdcVyCS2bN7eXOdrkKK8UA87qqdQcJROkknx1UydNVRoKDXbBwoH9+/nXM/+ib79+jHj8sTL71q+5Or0y4LZBmHLP0+2hqwlKytYldNMfYdO674l/8ikyMzORZJndv/7MI088ywfL38a3cVvFtrf+9BPdu3VHq1V2v81mY9vWbWzdvt1edujQIfYdOIB05QZdd/SUsPz99/nzzz9ZuGAB369e47L+4Nvv4LvvvuXZZ8fw7TffcvsdxclKamoKv/3xR7Hvnn6atRvWcyz1GGPGjOGfDz5QoU0ff/IJgYGBHDx4gCdHjeLe+4YqtuVMFq5eZI8cPQrA+AkTmTxpIhcvXuTdUkm4o9yc2bOZMXMmAPPnzuPLr7926lOldqdMmsytAwfy7vLlFDgZqZ01cyZz5s7Fz9+fF8dPsI8gOdpRmgXzFzJz9iySkpqXS+DefustCgoKGDtuHACfflYcf6+8/HI5Pa78UEJOdja+V555lJ3terp3zPNjefihB9EbDGVW3inZ4KrPHf2r5KfqiuUSSvvf0SZHlGKgonoq15kr3SA4KVNRqe80yORt86bNPDfmWR4dMYKx48aVW2Hk+AgRk1WD1qeR/XtwSDCFRUVECjsxW0cjSTJmq4wgiEhy8WND8k3K73b5cfMW+vQt+9e7zWYr8xoPQRAYMGAA7y9/j4mTJ9nLSz900JkeJWJiYmjUqBEvjh9fYf077riDYQ8NY+TIUXyxahWfr7w6+mAwGOjYqRO5eXmEhIQSFBTMpYsXK9T5xaqVLH/3PU6ePIHBoCc3N0+xLSVZKJ8ELV26hG+++45du35l6UtL6NGzh1O59LR0uvfojizLPDfm2TL7Snzqqt3Dhw+x/P33MBqNGI3Gcsd37NgxHhk+HACdTqdob2lOnjxBr143O52u++7bb5gzd55iXUeU/FCCf0AAefn5yLJMQECgS10PD3+Yh4c/zKqVn7Nq1RcVtl1RHJaOWSU/VVcsu2NTaVzFgKt6KjVBcaYmy6XvW26wk0kqHqX2/xXQIJM3g1HPkqVLue2229ySL7RqsNlgx/5jXMgxcWe3MQS1ljjxzj+wWCUCg0IwWyUiY+L56N03aXljMhcKnN8/Y7Va2bFzBzPnzLaXhYWF8cvPO+nY6eoqQ1EUmTJ1Kv369i2TvLnSo9VqSU9PJy4urpx8UVER69auJenKSJCz+iU0iYykeYsknv3XM7Rp06bcNJwoivYRmdKJryudSxYtZuHiJfS6uRd5+fl07tBBsS0lWWecOX2aM2fPEh/flNOnTinKxcXFsmP7DgCaNm3qVMZVu4nNmrFq5SqG3j+Ugvx8gkNCyvg7Pj6ef415lptv7s3ly67vdywhISGB9evX0b9/+RWSH370MU899RT/9/rrhIeHV6irIj+0S27H+rXrkGw22rVz/faP3Nw8duzYzuKFi1i0ZIlLWVd97gxnfqrOWK4slYk9ldqBp+51k2UZi9WKRV24UqfR6fXotNp6fw9kg0zeunev3HPYCq0iVkmmbctorDYJSaO3lxeaZcZPnU+h2UaHbr1J7tyLIrOF3/885lTXvr17SUxMxN/Pz1724sSJjB8/gYL8fBISmtnL7x86lI6dOrmt56Fhw7j37nvYtmN7GdmmCQl0aNeOuLhYFl65GDurX5rHR47koQcetE+VuYMrnc88O4ZZM2dw4cIF9Ho90dHRim25knVk0uTJPDlqFJLNxoSJ5ZPcEmbMnMULL7yAIAgsfXmpUxlX7c5buIjp06ayZPEimkRGsm79+jL+nrdwATOnTmfc82OJiYm2T+e5Ys78+Uya8CKTJ06iaUJCmX3BISHMmTuPubNn839vvKGo4/HHRrD8vfcV/VCyf9z4cTw9+ikA/vPWm4r6rFYr3bt2oXlSEvMXLaJvv34uj6GiOHLEmZ+qO5ZdUeKfEioTeyq1A09cpC0WC2aLhYBAf4whIR6wSqWmMJkKyM7KQa/TlRndr29cW9TLsr3e0PsRM1ohNG+CcMJ0VCz01wl6jVHjZdaKgkarsZk1WsFP0GhtRTqtrNGJOlFnlUUdWPVFWtHoLYpGK5KXRif7ioh+olEI0OjFYI0gB8saMXR2xKmhJ9OPEermy4L379lD48YRdOtd9ZWcJby96B7uf/4b9vyezoUcE+ezC3h0UDs+f+0u+j62AkEQrkyXgihIFORe5vjZbO7o0bycrkULFtKocSNGjHjMSUvuU1U9jvVPnz7FHYNvZ9+BAx6zyRM66xP10R+e6POajuX62C/1hZ0/bubs2XNER0dhsZjZsfNnLBYLT48Zw9lTJwDKPO6pZCagcVQM77z1Jka9gfbt29E4KkaxDavVSl5uHlGxMRQW5GOz2qr3oFSqFY1Wg7e3DyePn8DXz9et+2hLk3n+HFFx8cw6F71SsEmZNlm4ZDNLlySTnC0h5dosQp4WsbBAkkwGq2QCrVkrSBbJIlmsgs1i1Rgscq5s0+htVtlmtRXqrZLZZrJ55VjkGGOidOQMcvhh5JWfczVwBaHS87QNcuStspRMm7ZqFoXVJmGTZGy24nKNYEGWBXSChE5jpSAvi4NHztM0qpFTXVu2bObtZcuqbFNV9TjWv2fI3Tz44EMetckTOusTtc0fjisywfU9es7wRJ/XdCzXtn5RcY+S12KVfT1W5a6BsiyTnZ1DaHgY+Xl52KxWj9qocv2RzBJ5Ui6BoUFczLhIcHBQvZxCVZM3Nyi0aHhnyVAnezR88PXOMiWRob50aBVN28QmTnWt27DBIzZVVY9j/V93766SvurSWZ+obf6obKLmDE/0eU3Hcm3rFxU3sa82FcqVuYvNZiMrO4vY+DiyFR6OrVL3sJolAoOCSc1OJSDAv9Kjb3WB+ndElWD9mtVuvZx+8uzProM1KioqKiqVpSqjKpIsYyo0IUlSpd62o1L7sUlScd/KtX/l6LXQoJM3FRUVFRUVcHzkiErdp34mbSWoyZuKioqKSp2l9IOkqzQKV8tH3n7ZtRuLxYJGo8HHx5umcXH4XcMKa5X6Qb1N3gxGL4/KqaioqKjUJso/pFcQrv0hvbU9eTObzXTv2gVkmYuXL/PnX3/Tob3rZzaq1F/qQPJWv4c+VVRUVFQqT8mAW+lbmqpye5NcF157JhfbKSAgyRKyJJObl8fRlBRsNhsJCU0JDgwCYP/Bg5iKzGhEkaDAQC5nZyHLEBsTRUR48dMQsnNzOJqSCkBSs2b4+/lx4LeDtEhsjtHLSEFhIX8f/Zu2bW5SbKdeUgdCoQ4kb7WHSyfWcXzvS1e+XXkLsv1VyDICIgndX8KvUfsas1FFRUVFpfJIdeCetx2//AKAQW8gsVlTJFkiNe0Y8XFxaHUajqYcIzAgAICCwkK6dOxAbl4eR/4+StubbqLQVMDfR1MJDwsD4FhaOvGxsfbPbVrfQEhICBmZF4iKiiQjM4OQkBCX7ajUDGryVgnSds3jhgHLAAms2cjWHDBnIVuzir+bL3N40yg6Privpk1VUVFRaRDInlhNKINcy6dNAbp07IDJZOLwX0fwNnojSxKFhSYO//UXAKIolDsOXx9frDYbWo2Ir7cvFovFLlNoMuHv54cgwN+mQmRJIjQomEN/HaFxRCMuZGRyY8uWbrWjcn1p0MnbHXffWyn58BYj2fX1E0gIV8bnZUC68uMhoRFk4pOfqg5TVVRUVFSc4JHkjdp/zxsU26jX6/Hz8+PM2bNENmmM0WAkskljAvz9sVmtZY6jos9eBj1Z2VkAGI0GJElCq9Pi7WXkyNEUfHy80eq0SJLksh2V60+tT95q09SzyX8wv1oC6N05Ca0ooNVqECh+VlBBkZktv/5N86hba9pMFRUVlQZA8dWh7ALTa79i1IVkpMTG8LBQUtPSaRzRiLiYaNJPniAlLQ2j3sANLZuXk1f6HB0VTdrxdJAF4uNjrupvFMaRv1NokZhoL3PVjsr159qX5tRhtm3byg/ff1+pOnmFZr7b/ift23XAyy8K74Ao/AIjCQyJJiA4mqDgONq0SebbrX+6pS/t2DH63NzrWsxX1JPcprVTGaVyT9pR3TprI678Wlk6JF9dNdau7U0e03u98ESf17ZYrkifki2l+9IV7sqplMdqtdpvN5ZLbSVl1mt4zZUsS7V6a9+2jf2zt5eR1q1aIMsSXl4GWiYl0q7NjbRqkehUXumzr48XrVu1pPUNLfD19r5a7u1N+7Zt8PHxspcptVNbt1o18lMNNMjkrchUxNjnxrB40UK3/9rauu8YibERhAYV3x+g14p46TUYtCIGnYBBJxLXOBQvg47fj56tUN/GjRvo169/VQ+ljJ7Lly8DYDKZ6NunN2azuUy5q/qOdTxhkyd1KrH6hx/o1L4dHdsl883XX1dbO85w5VdnuPJHZuYF++dLFy86rZ+ScpQbW7Z0uq8iP6SkHKVPr5706dWTlBTXr8XasGE9nTu0p3fPHhx0eFm7kg2e6HNPxXJlUUrCKtKnZEvpvnSFO3KV/QPhepxztYHsy5fx8fMvd32WAR8/f7LcfNWVAIgagcwLF9DpDUiSrG71YNPpDWRezETUlHl5Wr2iQSZv/fr357PPV/L5ihU8OWoU+fn5Fda5nFNAk/DiF9xqNCJ6nQadRsCoA71GQKsVEQVIbBpJyqnMCvVt3LCBfv09kLw50WM0Gtm05Uf0er3b9StTpyZ0KjFt6hQ+/PgTln/wX2ZMm1pt7XiCqvhjzerV3H/ffeTl5TrdX5EflixazBOjn2LkqCd4afFil23NmDqVt995lznz5jNvzhy3bPBEn3sqliuLUhLmqXO0KlT2D4Trcc7VFBqNFo1Wi0anZeP69VgsVsIaNSYsosnVrVFjrBYbP23ZjFarK5bXKN8dpNFo8PX25dDhwwQEBWNUn/tZ5zEYvQgICubQocP4evui0Whq2qRqofYnb9U09NmufXveWraMDevX8c7bb1cof/ZCDnq9nnc//pZ7HpnEDxt2ohVh+rQpaER484NvGDJ8Ept++pWMi3kudWVnZ3P06FHad+gAQFx0lH1f6c+PDn+YTu3b2b/fPug2WjVPokfXrk71lKa0HoCbe3Snc4f2bNv6U4V2DOzfj7S0NKB4pGVg/34A9OvTp3jYvO1NvDBuLB2Sk0lu05pPPvrIrWO7pffNJDaNp2unjny+4jOXbTmTdUZ4WBgpKSlknD9PZFSUotyuXb/So2tXenbrxu7duxR9qtRuWloa/xh6Hy0SmzFoYPn7Gvfv20fvnj1on9yWjS5etF7aH9u2/kTnDu25uUd3p7JvvvEGLy0pTrTee/ddRo4cpai3Ij/s3buHQYMHM/iOO9i7Z6+iHoD8/HwMBgNJzZtz+PAhe7mSDa763NG/Sn7ydCw7a2fyxBf59JNPAFjx2f+YMmlimTZKt+Oor6L+V+pLx+NXknMV7462VXRuuCPraFddQBRFdDotocHB5Obn8eUXX/Df99/jkw//y6cffsj/PvqIjz/8L9988xV5+QWEh4ai1+kQReXLnCiKBAYHoddp2bRpEzkF+QSGhRdvoWHq/3Xt/9Awcgvy2bRhI3qdlsDgIJf9r0ztn3Ot9QsWqot9e/cy+okn6D/gVkY9+WSZfd999YX9c8mK1HMX85Blme/Xbee1Oc8y86Xl3H97dzIzM5FkgRXf/si/F45lwqzXeWDoEJdt/7hlCz169ESrVXa/zWbjpx9/5Jfde+xlf/z+O4f+OmKf6nVHTwkffvIphw8dYu7s2azftNll/TvvGsI3X3/F82PH8dWXX3LXkLuB4uTqSEoq+/bu5clRI9n800+kpqTy9FOjeejhhyu0acXKVQQFBbF//z4ee+QR7v/HPxXbciYLVy9M6SdPATBpylQmvDCOzMxM/vvRx/a2HOVmTJvGnHnzAJg9cybfr17j1KdK7b74wgvcNngw//3oY/Lzyifn06ZOYcGixfj7+zP2uefsIzaOdpRmzqzZzJ0/n+YtWpa7mP/n9dfJL8hnwovFCcbKL78EYMniReX0uPJDCdlZWfj6+gKQleV6NGfc+An8Y+h9GAyGMiv5lGxw1eeO/lXyk6dj2Vk7c+bNZ9iDD2AymVi/bi0fffKpXadj/zjqq6j/lfrS8fiV5JTizpltrmQdUZJ1tKuuoNfp8PH2wcvLC6vViigICIKIIAgIApRMkun0xaNuNputQp0+Pj7EREcjihr++O0PsrN3VPdhqFQjAQEBNGnShKjIJvj4+NS0OdVGg0zeNm7YwNOjn+TxUaOY8OLEcpm5s0eI5BUWAcXPtwkOCcRms2G2SkiSjMVa/AMYFOCPxWwl31Tksv1NGzfS78oIUwk2m63M8K4gCAy87TbeXbaMqdOn28tLB6MzPUrExsYSERHB2OfGVFj/riFD+MfQoTw5+ilWrljBV998a99nMBjo3KULubm5hIaGERwcwsXMzAp1fr7iM5a99TYnThzHYDCQm5ur2JaSLJS/kC1auIDV69bz6y8/s2jhAnrdfLNTubRjx+jZqxeyLPP06LLJeolPXbX7xx+/8+Enn2A0GjEajeWOLzUlhQf/+Q8AdDqdor2lOXHiOL373OJ0iuvrr75kwSLX05ulUfJDCQGBgeTlFf8BEljBk9EfHTGCR0eMYMVn/+PzFSsqbLuiOCwds0p+8nQsO2tHp9MxZdp07rp9MN98/0OZ9is6por631Vflj5+Z3Ku4s4RT8rW1QubwaBHo9EgyxKCWJy8FSdxgv3dphpRgyTL5LihTxQEAoOC0BsMhIWFUmgyVe8BqFQrXkYjfn5+eHt7V+ldt7WdBpm8GYwGXv1//2bw7be7XScsyBcBaHtjEsNGz+KBe/pjtkJgUAhmK3Rs24JhT82if+/OBAco/yharVa2b9/GvAUL7GXh4eHs3LGdzl2uTmGIosiMmbPo1aN7meTNlR6tVktaWhrx8fHl5IuKilj9ww80b95csX4JkVFRtGjZgtFPjOKmm9qWm4YTRdE+IlM68XWlc8G8eSx95VV69+lDXl4ebVvfqNiWkqwzTp86xZkzZ2jaNIFTJ08qysXHx7Nt61YAEpo1cyrjqt2kpCRWfPYZ/3zgAfLz8ggJDS3j76YJCTw/dix9bunLJTdvlm6WmMjaNau5deBt5fb9b8XnjBr5OG++vYxGjRpVqKsiP7Rv34E1q1cj2Wy07+D6DSC5ubls27qV+XPn8vKrr7qUddXnznDmp+qIZWft5OfnM2vGdOYtWMCsGdP55H+f4e3tjZ+fH+np6fj7+REcEuJUX0X976ovS+NMzlXcOdpWmXOjMrJ1DVEUEQQNokLyBiC5MepWgiAI+PgUj+h56rlxKjWDIAjXOFVat2iQyVvPnpV/nEB4kA86jYUZEx7HbLZgNOowmSVemDqPQouNaeMfp9BUhCzDH3+lKerZs3s3SUlJ+Pv728smT53G8889R35eHs2aJdrL777rTjp36eK2nuGPPsodgwaxa2/Ze5oSmjWjdauWxMfHs/TKxdhZ/dI8MXo09997r32qzB1c6Xxu7DimTZlMRkYGer2emJgYxbZcyToybcYMHnv0ESSbjclTpynKzZk3n+fGPIsgCLz27387lXHV7uKlLzN54ossmDeXyKgotvy0tYy/F7/0ElMmTuLZZ54hNjbWPp3nioWLl/DC888zfty4cgllSGgoCxYtZub0aby17B1FHcOHPcSHH3+i6IeS/S9Omsioxx4D4J333lPUZ7Va6ZDclhYtWrBk6cv0H+D6uYUVxZEjzvxUHbHsrJ3pU6cw7OHh3Hvffej1eqZPncLLr77GE6NHM+jWAURHR7Nu4ybn+irof1d9WRpnchWdG6VtcyVb0tclVOY8UimmIVz0VeoH1zamKMv2ekPvR8xohdC8CcIJ01Gx0F8n6DVGjZdZKwoarcZm1mgFP0GjtRXptLJGJ+pEnVUWdWDVF2lFo7coGq1IXhqd7Csi+olGIUCjF4M1ghwsa8TQWY1ODj11PI3QRhFumbZ/zx4aN46gz8DB13RoSqzcsI8OiT7YdEGYbAZkWUAUih1ok2VkGURBpqgwh2OnLjG0X1uneubNmUNE4whGjnqiSvZUVY9j/VOnTnJrv34c+uuIx2zyhM76RH30hyf63NOxXFU8re96Ut9ibMvaHzh79hzRV+4d3bd/H+FhYeh0uisjLMojb1abjYyMC7Rs2dLt64eKSub5c0TFxjHrfMxKwSZl2mThks0sXZJMcraElGuzCHlaxMICSTIZrJIJtGatIFkki2SxCjaLVWOwyLmyTaO3WWWb1Vaot0pmm8nmlWORY4yJ0pEzyOGHkVd+ztUbTgWh0sO96p8ZbhLZKIhfDp1HZz1HiOEyPtpCNIIZASt60YKfvhCh6Bz7D6cRFuSrqGfTxg307evevT2uqKoex/p3DBrEw8Mf8ahNntBZn6ht/ihZxVh6qyye6HNPx3JV8bS+60ltizEVFZXqoUFOm14LHVpGczoji+VrTmG2OL+XokmoD51bN6Vjq1hFPVu2bvOIPVXV41h//2+/V0lfdemsT9Q2f7haTOEunuhzT8dyVfG0vutJbYsxFRWV6qFBJ2/fffWF2y+n1+u0DO2XzNB+6ittVFRUVFRUVGoOddpURUVFRUVFRaUOoSZvKioqKioqKip1iDowbXptz9wpMhV6VE5FRUVFpf4iyzIWqxWL2VzTpqhUAZ1ej06rrdIDeuvCo/7qQPKmoqKioqJSfVgsFswWCwGB/hhDQmraHJUqYDIVkJ2Vg16nc/kWlbqOmrxVgqzTGzl98LUr3+Qrg4KyfRMQie00H58wdVGDioqKSl3AarWSn5dPVGwMhQX55OW481ItldqKRqshIiKCk8dP4Ovn69b7kusi9fOoqolT+5dww4BlgATWbGRrDpizkK1Zxd/Nlzm87V+0uUd9sbGKiopKbUeWZbKzcwgNDyM/Lw+b1VrTJqlUEckskSflEhgaxMWMiwQHB9XLd5w26ORtwG2DKiUf3OwRdn39BBLClUlxGZCuvAtPQiPIRLceWR2mqqioqKh4GJvNRlZ2FrHxcWS7+U5ildqP1SwRGBRManYqAQH+9XL0rf4dUTVS6DuIXy2h9O6chFYU0Go1CIAkyxQUmdny698Ma9y7ps1UUVFRUXEDSZYxFZqQJAlJkiquoFJnsElScd/WhdUH10CDfFTIjh3bWbNmTaXq5JssrP01hfbtOuDlF4V3QBR+gZEEhkQTEBxNUHAcbdoks+aXVLf0paelceuAAddivqKezh07OpVRKvekHdWtszbiyq+VpVuXrvbPXTp39pje64Un+ry2xbI79lwrldVXOj5UqgdZltStHm3X+qSKukKDTN6KTGZeHD+el5cudfuvrZ2/nyQxrjGhQX4IAui1Il56DQatiEEnYNCJxDUOxduo5/CxCxXq27xlM7f0uaWqh1JGT1ZWFgAmk4nbBg7EfGXJe0m5q/qOdTxhkyd1KrF27Vp6dOtG965d+e6776qtHWe48qszXPnj4sVM++fLCtM3qakptE9u53RfRX5ITU3h1v79ubV/f1JTU1zauWnTJnp2786Afv347bff3LLBE33uqViuLEqJlDN7PEVl9ZWODyUqmxBej/OzLlEy+lZfth+3bnP5vb5vVaP2J34NMnm7pe8tfPTxx6xatYp/PfMM+fn5FdbJziuiSXjxjY8ajYhep0GnETDqQK8R0GpFRAESm0aSdq7iH+bNmzZzS18PJG9O9BiNRtasXYter3e7fmXq1IROJWbNnMny997nrXfeYe6sWdXWjieoij/WrVvHQw8+RF5ertP9FfnhlaWv8PjIUYwY8RivvvyKy7bmzJrFG//5DzNmzmLRgoVu2eCJPvdULFcWpUTKU+fo9aKyCeH1OD/rEjWdbFRH8uLqe33f6jsNMnkDaJuczOtvvM6mjRt5f/l7FcqfvZCDXq/n3Y+/5Z5HJvHDhp1oRZg+bQoaEd784BuGDJ/Epp9+JeNinktd2Tk5pKSkkNyueASjeWKifV/pz6NGPk6Pbt3s3+8ZMoTkm27ilt59nOopTWk9AP379qVn9+7s2H71pdtKdtx5+2DS09OB4pGWO28fDMCggbfRtk0bunTuzMSJE+nWpSudO3bks0//59axDbz1Vm5s1Yqbe/bki1UrXbblTNYZ4WGhpB5L5cL5DJpERirK7dmzm1t696Fvn1vYu3ePvdzRp0rtpqenM+yhh7ipdWuG3HlnOf0HDxxgQL9+dO3Shc2bNivaUdofO7Zvo2f37vTv29ep7LK33+bVV4oTrf++/wEjRoxQ1FuRH/bt38ettw1k4OBB7Nu3X1EPQEF+Pnq9gcSkRP766097uZINrvrc0b9KfvJ0LDtrZ/q0qaz4bAUAq1Z+zozp08q0UbodV/YoxZKzGHEnjpV8ohQfrnQ6HkdF7bsj69iH9RVZkuvV5nhMpb/v3befHb/8yr4DB8nNzatxW6vr+OsztX7BQnXdaxlEwTkAACAASURBVHhg/37+9cy/6NuvHyMef6zMvvVrVts/l6xIPXcxD1mW+X7ddl6b8ywzX1rO/bd3JzMzE0kWWPHtj/x74VgmzHqdf953l8u2t/70E927dXe5AsZms7Ft6za2bt9uLzt06BD7DhxAuhKY7ugpYfn77/Pnn3+ycMECvl+9xmX9wbffwXfffcuzz47h22++5fY7ii9Eqakp/PbHH8W+e/pp1m5Yz7HUY4wZM4Z/PvhAhTZ9/MknBAYGcvDgAZ4cNYp77xuq2JYzWbh6sTly9CgA4ydMZPKkiVy8eJF3SyXhjnJzZs9mxsyZAMyfO48vv/7aqU+V2p0yaTK3DhzIu8uXU+BkpHbWzJnMmTsXP39/Xhw/wT5i42hHaRbMX8jM2bNISmpe7gL99ltvUVBQwNhx4wD49LPiBPmVl18up8eVH0rIyc7G18cHgOxs1yM0Y54fy8MPPYjeYLiykhqXNrjqc0f/KvnJ07HsrJ0ZM2cx4tFHMZlMbNy4gffef9+u07F/XNmjFEvOYkQpnkqj5BOl+HCl0/E43Gm/IlnHPqyvSHL9G61xPKaS74UmE106diDz0iWOpaVx4w2tasI8lSpQ65O36mDzps08N+ZZHh0xgrHjxiGKZQcgnT1CJK+wCABRFAgOCcRms2G2SkiSjMVafEIEBfhjMVvJNxW5bP/HzVvo07fsX7E2mw2NRmP/LggCAwYM4P3l7zFx8iR7uc+VC7CSHiViYmJo1KgRL44fX2H9O+64g2EPDWPkyFF8sWoVn6+8+le4wWCgY6dO5OblERISSlBQMJcuXqxQ5xerVrL83fc4efIEBoOe3Nw8xbaUZKH8xWnp0iV889137Nr1K0tfWkKPnj2cyqWnpdO9R3dkWea5Mc+W2VfiU1ftHj58iOXvv4fRaMRoNJY7vmPHjvHI8OEAZZ7q7SxpK+HkyRP06nWz02mr7779hjlz5ynWdUTJDyX4BwSQl5+PLMsEBAS61PXw8Id5ePjDrFr5OatWfVFh2xXFYemYVfKTp2PZWTs6nY4XJ01i6D33sPLLL10+fd2VPUqx5BgjruKpNEo+cRYf7ur0tGzpPqyXyCDXs6k2QRSxWa2IoojNZkMUxXLHGBIYyLG09Hp37A2BBjltajDqWbJ0KS+MH18ucVMiLMgXAWh7YxLDRs9icP/umK0QGBSC2Qod27Zg2FOzuKVXR4IDlH/orFYrO3buoNfNva/qDgvjl593lrlxWBRFpkydykcffei2Hq1Wa5+CdKSoqIh1a9eSdGUkyFn9EppERtK8RRLP/usZ2rRpU24aThRF+4hMaf+50rlk0WLGT5jA/oMH2bjlR5dtKck648zp05w5e5b4+KacPnVKUS4uLpYd23ewc8dOmjZt6lTGVbuJzZqxauUqTCaTPVkt7e/4+HjeePM//HH4MJt/dG1zCQkJCaxfv46iovLJ/ocffczixYvJyMhwS1dFfmiX3I71a9exbvUa2rVz/QaQ3Nw81q5dy+KFixg1apRLWVd97gxnfqqOWHbWTn5+PvPmzGHW7NnMmzOHgoICAPz8fDl+/Lh9oUhF9ijFkmOMuIond2LHWXy40ul4HJU5jyojW1+p6Xu0PL35entx5ux5LFYrZ8+fx9fHu8z9YIWmQi5lZWEw6GvcVvWet8rTIEfeunfvUbGQA+FBPug0FmZMeByz2YLRqMNklnhh6jwKLTamjX+cQlMRsgy//3lMUc++vXtJTEzE38/PXvbixImMHz+Bgvx8EhKa2cvvHzqUjp06ua3noWHDuPfue9i2Y3sZ2aYJCXRo1464uFgWLlmiWL80j48cyUMPPGifKnMHVzqfeXYMs2bO4MKFC+j1eqKjoxXbciXryKTJk3ly1Cgkm40JEycpys2YOYsXXngBQRBY+vJSpzKu2p23cBHTp01lyeJFNImMZN369WX8PW/hAmZOnc6458cSExNtn85zxZz585k04UUmT5xE04SEMvuCQ0KYM3cec2fP5v/eeENRx+OPjWD5e+8r+qFk/7jx43h69FMA/OetNxX1Wa1WunftQvOkJOYvWkTffv1cHkNFceSIMz9VRyw7a2f2rFk8+OCDDLn7bvR6HbNnzWLxkiU8NnIkQ+68k6ioSL77YXWF9ijFkmOMuIond2LHWXy40ul4HC7PuStxUUJlzrn6Sn274MdER5N+4gRnzp3F2+hFXFx0mWM88vdRbJJMfGxMvTv2hsC1vTNClu31ht6PmNEKoXkThBOmo2Khv07Qa4waL7NWFDRajc2s0Qp+gkZrK9JpZY1O1Ik6qyzqwKov0opGb1E0WpG8NDrZV0T0E41CgEYvBmsEOVjWiKEzw48PPX3iOKGNItwybf+ePTRuHEG33p5dJfbN1sN0TPLFpgvCZDMgywKiUOxAmywjyyAKMkWFOaSevMhdPVs41bNowUIaNW7EiBGPOd3vLlXV41j/9OlT3DH4dvYdOOAxmzyhsz5RH/3hiT73dCxXFU/rq63UhXjc+eNmzp49R3R0FFC88CY8LAydTocgCIiigCCIiIKAcGUrwWqzkZFxgZYtWypeP8wWC0f/PkrHTp04me7eMzrrA3sP/Eb7tm1q2oxqJTq2Kbt37yYxKRF9JV5Qn3n+HJExsczOiF0p2KRMmyxcspmlS5JJzpaQcm0WIU+LWFggSSaDVTKB1qwVJItkkSxWwWaxagwWOVe2afQ2q2yz2gr1VslsM9m8cixyjDFROnIGOfww8srPuZoxC0KlbyhtkNOm10JEqB+/HDqPznqOEMNlfLSFaAQzAlb0ogU/fSFC0Tn2H04j2L/8PVElbNmymT4eWLVVVT2O9e8ZcjcPPviQR23yhM76RG3zR8nKxNJbZfFEn3s6lquKp/XVVmpbPNYEAiBqBDIvXECnNyBJcoPYgBq3oTo3nd5A5sVMRI1wjSNUtZ8GOW16LSQnNubMhRyWrzmF2WJzKtM4xJsOLWNo11z5kRXrNmzwiD1V1eNY/9fdu6ukr7p01idqmz9cLaZwF0/0uadjuap4Wl9tpbbFY02g0Wjw9fbl0OHDdOrUkZzLlzGZCmvarGonuU3rmjah2jAYvQgICmLXrt1EhIeXWQhYn2jQydv6Navdfjm9Xqfl7ptv4O6bb6hmq1RUVFRUrgeiKBIYHMSly5fYtGkTzVs0J7xkilWWQRDU/+vS/0BGxnn27NlLSGgIgcFBbi9KrGs06ORNRUVFRaVh4+PjQ0x0NKKo4Y/f/iA7e0dNm6RSBQICAmjSpAlRkU3q9SNu1ORNRUVFRaXBIgoCgUFB6A0GwsJCKTSZatoklSrgZTTi5+eHt7d3mQUs9Y16m7wZjF4elVNRUVFRqZ8IgoCPjw9eXl5l3iqiUvcoXoVcP6dKS1NvkzcVFRUVFZXK0BAu+ioVUxfydzV5qwSXTqzj+N6XrnyTQb7y/5VNQCSh+0v4NWpfYzaqqKioqKio1G/U5K0SpO2axw0DlgESWLORrTlgzkK2ZhV/N1/m8KZRdHxwX02bqqKioqKiolJPadDJ2x1331sp+fAWI9n19RNIlCxLlgHpyj0SEhpBJj75qeowVUVFRUVFRUUFaODJW2Ux+Q/mV0sAvTsnoRUFtFoNAiDJMgVFZrb8+jfNo26taTNVVFRUVFRUrpnaf9Nbg7w7c9u2rfzw/feVqpNXaOa77X/Svl0HvPyi8A6Iwi8wksCQaAKCowkKjqNNm2S+3fqnW/rSjh2jz829rsV8RT1KT8129TRtT9lR3TprI558SnmH5GT753Ztb/KY3uuFJ/q8tsWykr7SfaWioqJSEzTI5K3IVMTY58aweNFCJEmquAKwdd8xEmMjCA3yQxBArxXx0mswaEUMOgGDTiSucSheBh2/Hz1bob6NGzfQr1//qh5KGT2XL18GwGQy0bdPb8xmc5lyV/Ud63jCJk/qVGL1Dz/QqX07OrZL5puvv662dpzhyq/OcOWPzMwL9s+XLl50Wj8l5Sg3tmzpdF9FfkhJOUqfXj3p06snKSmuX4u1YcN6OndoT++ePTjo8NJyJRs80eeeiuXKopQQKukr3VfVwfU4b1RUVOo2tX7atDqW7Pbr35/PPl/JqJGPk3I0hdf+/e8Kn8R8OaeAFs1iEAQBjUZEr9Og0wjoNGCxCVi1IqLZRmLTSFJOnaN1YmOX+jZu2MC4F8ZX+Vic6TEajWza8mOl6lemTk3oVGLa1Cl8+r/PMFssPPzgA9w1ZEi1tlcVquKPNatXM3XKZPLycp3ur8gPSxYt5onRTyHZbLy0eDFvv/OuYlszpk7l7XfeJScnh3lz5rDyyy8rtMETfe6pWK4sSgmhp87RynI9zhuV8siyjMVqxaImzXUanV6PTqut1w/ohQY68gbQrn173lq2jA3r1/HO229XKH/2Qg56vZ53P/6Wex6ZxA8bdqIVYfq0KWhEePODbxgyfBKbfvqVjIt5LnVlZ2dz9OhR2nfoAEBcdJR9X+nPjw5/mE7t29m/3z7oNlo1T6JH165O9ZSmtB6Am3t0p3OH9mzb+lOFdgzs34+0tDSgeKRlYP9+APTr04eWSYm0a3sTL4wbS4fkZJLbtOaTjz5y69hu6X0ziU3j6dqpI5+v+MxlW85knREeFkZKSgoZ588TGRWlKLdr16/06NqVnt26sXv3LkWfKrWblpbGP4beR4vEZgwaWP6+xv379tG7Zw/aJ7dlo4sXm5f2x7atP9G5Q3tu7tHdqeybb7zBS0sWA/Deu+8ycuQoRb0V+WHv3j0MGjyYwXfcwd49exX1AOTn52MwGEhq3pzDhw/Zy5VscNXnjv5V8pOnY9lZO5Mnvsinn3wCwIrP/seUSRPLtFG6HUd9Sn1Vck50bJfMF6tW2csdz1135Zwds1JMOvpW5dqxWCwUFBbi7eNFo8aN1a0Ob94+XhQUFmKxWGo6rKqVWj/yVl3s27uX0U88Qf8BtzLqySfL7Pvuqy/sn0tWpJ67mIcsy3y/bjuvzXmWmS8t5/7bu5OZmYkkC6z49kf+vXAsE2a9zgNDXY/+/LhlCz169ESrVXa/zWbjpx9/5Jfde+xlf/z+O4f+OmKf6nVHTwkffvIphw8dYu7s2azftNll/TvvGsI3X3/F82PH8dWXX3LXkLuB4uTqSEoq+/bu5clRI9n800+kpqTy9FOjeejhhyu0acXKVQQFBbF//z4ee+QR7v/HPxXbciYLVy9q6SdPATBpylQmvDCOzMxM/vvRx/a2HOVmTJvGnHnzAJg9cybfr17j1KdK7b74wgvcNngw//3oY/Lzyifn06ZOYcGixfj7+zP2uefo17+/UztKM2fWbObOn0/zFi3LJQX/ef118gvymfBicYJRMvq1ZPGicnpc+aGE7KwsfH19AcjKcj3dO278BP4x9D4MBkOZp80r2eCqzx39q+QnT8eys3bmzJvPsAcfwGQysX7dWj765FO7Tsf+cdSn1FcpKUf5O/UYv/z8M+PHjeXe++5zeu66K+cMpZh09K3KtWG1WsnPyycqNobCgnzycnJq2iSVKqDRaoiIiODk8RP4+vm69ZtSF6mfR1UBGzds4OnRT/L4qFFMeHFiuadqO3uESF5hEQCiKBAcEojNZsNslZAkGYu1+MczKMAfi9lKvqnIZfubNm6k35URphJsNhsajcb+XRAEBt52G+8uW8bU6dPt5aWnd53pUSI2NpaIiAjGPjemwvp3DRnCP4YO5cnRT7FyxQq++uZb+z6DwUDnLl3Izc0lNDSM4OAQLmZmVqjz8xWfseyttzlx4jgGg4Hc3FzFtpRkofxFdtHCBaxet55ff/mZRQsX0Ovmm53KpR07Rs9evZBlmadHl03WS3zqqt0//vidDz/5BKPRiNFoLHd8qSkpPPjPfwCg0+kU7S3NiRPH6d3nFvR6fbl9X3/1JQsWLVas64iSH0oICAwkL6/4D5DAwCCXuh4dMYJHR4xgxWf/4/MVKypsu6I4LB2zSn7ydCw7a0en0zFl2nTuun0w33z/Q5n2KzomV32l1+vp3qMHGRkZgPK5665caVzFJFCvX7x9PZBlmezsHELDw8jPy8Nmtda0SSpVRDJL5Em5BIYGcTHjIsHBQfVyCrVBTpsajAZe/X//ZuKkyW6/DiUsyBcBaHtjEsNGz2Jw/+6YrRAYFILZCh3btmDYU7O4pVdHggOUf1CtVivbt2+jd59b7GXh4eHs3LG9zA3KoigyY+YsPnj/Pbf1aLVa+xSkI0VFRaz+4QeaN2+uWL+EyKgoWrRswegnRnHTTW3LTcOJomgfkSntP1c6F8ybx6QpUzh85G+27fzZZVtKss44feoUZ86coWnTBE6dPKkoFx8fz7atW9m+bRsJzZo5lXHVblJSEis++wyTyWRPVkv7u2lCAsvefZejx9LY/vMvLm0uoVliImvXrKaoqHyy/78Vn7Ng/jzOnz/vlq6K/NC+fQfWrF7N6u+/p30H128Ayc3NZfUPPzB/7lxGP+X6uYWu+twZzvxUHbHsrJ38/HxmzZjOvAULmDVjOgUFBQD4+fmRnp5uXyjiTJ+rvgLK/OHl6tx1V66EypwLKpXHZrORlZ2Fj48PVrMZWZLUrR5sVrMFP28/srKzsNlsNR1m1UKDHHnr2bPyjxMID/JBp7EwY8LjmM0WjEYdJrPEC1PnUWixMW384xSaipBl+OMv5xcdgD27d5OUlIS/v7+9bPLUaTz/3HPk5+XRrFmivfzuu+6kc5cubusZ/uij3DFoELv2lr2nKaFZM1q3akl8fDxLX31VsX5pnhg9mvvvvdc+VeYOrnQ+N3Yc06ZMJiMjA71eT0xMjGJbrmQdmTZjBo89+giSzcbkqdMU5ebMm89zY55FEARe+/e/ncq4anfx0peZPPFFFsybS2RUFFt+2lrG34tfeokpEyfx7DPPEBsba5/Oc8XCxUt44fnnGT9uXLmEMiQ0lAWLFjNz+jTeWvaOoo7hwx7iw48/UfRDyf4XJ01k1GOPAfDOe8rJgtVqpUNyW1q0aMGSpS/Tf4Dr5xZWFEeOOPNTdcSys3amT53CsIeHc+9996HX65k+dQovv/oaT4wezaBbBxAdHc26jZuc6nPVV85wde66kivprxIqcy6oVB5JljEVmpAkSZ1+rmfYJKm4b+vCi0qvgWsbS5Rle72h9yNmtEJo3gThhOmoWOivE/Qao8bLrBUFjVZjM2u0gp+g0dqKdFpZoxN1os4qizqw6ou0otFbFI1WJC+NTvYVEf1EoxCg0YvBGkEOljVi6Iyw40PPnDxOaKMIt0zbv2cPjRtH0Gfg4Gs6NCVWbthHh0QfbLogTDYDsiwgCsUOtMkysgyiIFNUmMOxU5cY2q+tUz3z5swhonEEI0c9USV7qqrHsf6pUye5tV8/Dv11xGM2eUJnfaI++sMTfe7pWK4qntZXWepjnFwrW9b+wNmz54i+cu/ovv37CA8LQ6fTIQgCoiggCCKiICBc2Uqw2mxkZFygZcuWitcPs8XC0b+P0rFzJ7IuZjqVUambBAaHsHvXbhKTEtG7uEXCkczz52gSHcOcC3ErBZuUaZOFSzazdEkyydkSUq7NIuRpEQsLJMlksEom0Jq1gmSRLJLFKtgsVo3BIufKNo3eZpVtVluh3iqZbSabV45FjjEmSkfOIIcfRl75OVf/WhCESmeYDXLk7VqIbBTEL4dO0u3GInyM/hRavTBLGmRZRC9K6DVWCvKy2H/4PM1iIxX1bNq4gfc++G+V7amqHsf6dwwaxMPDH/GoTZ7QWZ+obf5wXMUJru/Rc4Yn+tzTsVxVPK2vstS2OGko1MWRt5937cZqsWA0GGgU0YjoyMh6eX+XSnnqQPJWO4Y8O7SM5nRGFsvXnMJscT6H3iTUh86tm9KxVayini1bt3nEnqrqcay//7ffq6SvunTWJ2qbPyqbqDnDE33u6ViuKp7WV1lqW5w0FOpi8mYxm+nRrSuFJhNHU1KxWa3EqlPrDYI6kLxVH9999YXbL6fX67QM7ZfM0H7qq3FUVFRU6huyVDsGCiqLLMkY9QYS4uI4/NcRYqKiAcjOzeFoSioASc2a4e/nx76DB2nVogVGgwGz2cye/ftJvukmvIxGCk0m/vr7b5LbtGH/wYOYisxotCJx0TGEh4XV5CGqOKFBJ28qKioqKioAklz3Rt7gqt16gx6zxWz/fiwtnfjYWPvnNq1vICQkmAuZF4hs0oSMCxfQajRcyMwkKrIJFzIzCQkJRpIlCgoL6dypIznZOaQeO0ZoaEiNHZ+Kc9TkTUVFRUWlYSODXAenTeGq3YWFheh1uqvfTSb8/Yrfxf23qRBZkggJCuTI3yk0bhRBxoVMkhKbkZqWTpOIRmRcuEDLpER7fUGWCfD3w2yx1Fnf1GfqbfJWZCr0qJyKioqKSv2lLt7zBsV2FxUVkX78OGFhofbj8DLoycrOAsBoNCBJEga9AZ1OS1p6Gl5eRny8vfH2MpKalo5ep0ev19vrl/ZHXfXNtVIXni5Sb5M3FRUVFRUVd6mLCYpOq2X3vv3o9DpCg0NoFBZmP47oqGjSjqeDLBAfH2MvbxTeiNRjx7ihZUskSaJJRASH/vyLhISmiglbXfRNfUdN3ipB1umNnD742pVv8pWFsLJ9ExCJ7TQfnzB1UYOKiopKXUKug/e8tbmxlUOJbH/7ja+PF61btby658rxBfj70q5tG3uZwaAv8x2gfds2Tj/XKerA6FlVUJO3SnBq/xJuGLAMkMCajWzNAXMWsjXr/7d33/FRVGsfwH/nzGxLSCW00HtTlCbSu4qKYoGrICIKYkcRBekgIKBXvSoWmtdOEQs2EEEF9VXsBbwampSEFAip22bOef/Y7GZ3s7tJYJdkk+f7+aCbmdPmzOzus+dMcf3tyMW+3fegy7VfV3VTCSGElIMB4ApDTnY2DEYT7DZbVTeJhIHJbEbOyRxwhZ3hkwiqv1odvF0y4vJKpU9uMwF73rsdAqxkUlwCECW/dAQUJtH0/EmRaCohhJAwUxQFdWLqYO++fbjoop7Iz82Fjc6DjmomswUJSUnYs+d7NKxf3+d5wjVJrQ7eKsta53J850zBoF7toHIGVVXA4Ho+XrHdgc+/+xs3NRpU1c0khBBSAZxzJCYn4VTuKezYsQPtO7RHffejtKQEGKP/R9P/AWRlZeKHH35E3ZS6SExOAue8Co+wyKmVwdvXX3+F/PwCjBgxosJ5imxObP1uP7p36wFLXDwMKoPJwKEqHLqQMNl1dOkSi0++PYAJI84vt7zDhw5hypQp2Pbpp2ezKT7l9OrZE999/32ZNMGWh7MdkS6zOgrVr5XV5+Le+Obb/wMAXNyrF7797ruwlHuuhGOfV7dj+Vwcx9G4r6uKwWCMSL7Y2Fg0a9oUnCv447c/kJdHp71Es4SEBKSmpqJJ41TExsZWdXMiplYGb3abAw9Pn459e/figWnTKhSZf/P7UbRt0QgpSa775hhVDotRAWcMuhSQgqNFoxTknsrHvoPZ6NQq9B2pd36+E0MGDznrbfEu5/Rp12XhNpsN14wahfe3bIHRaPQsD5XfP0842hTOMoPZunUrFi9aBCklZs6ahZEjR0aknkBC9WsgofrjpNdDsXNPnQqY/8CB/Rhz/Rj8+PNPZdaV1w8HDuzHXXfcCQB4/sUX0Lp1m6Dt3LFjBxbMmweLxYInnnwSXbp0KbcN4djn4TqWKytYQBiu92gowfZ1RQTbF8GWn4v3YySphjP7uiovH2cMiUlJMJpMqFcvBVY67y2qWcxmxMXFISYm5iye81r9r3aolcHbkKFD8Nrrr+POO+/EgQMH8PgTT5QboecV2tGhTQMwxqAoHEaDAoPCYFAAp86gqRzcoaNtq8Y4dDyj/OBtx05MnTr1rLclUDlmsxmfbN1aqfyVyVMVZQazYP58vPLKq3BoTtw2YcI5Dd4q62z6Y9u2bZg/bx4KCwsCri+vH5584kncNmkyhK7jqX8/ieeefz5oXYsWLMDK559Hfn4Bli19DG+uf6vcNoRjn4frWK6sYAFhuN6jkRBsX4TaR+fi/RhJZxpwViQfYwyxsbGwWCyeqzVJdGKM1dipUm81fwuDuLBrVzy38jns+OwzvLx2XbnpM7LzYTQaseb1Lbh2wkx8tP0bqByYO2cWFA688N/3Mermmdjx5XfIOlkYsqy8/Hzs378fXbt1AwC0b9vWs8779eRJt6Ffnz6ev68dNQpdL7gAQwYNDliON+9yAGD40KHo37cvvv6q9KHbwdpx1ZVX4PDhwwBcv+KvuvIKAMDll43AhV264OJevTBjxgz0ubg3evXsifVvvlWhbbvs0ktxXqdOGNi/Pza/vSlkXYHSBlK/XgoOHDyA7MwspDZuHDTdDz98jyGDBmPo4CH48ccfPMv9+zRYvYcPH8ZN48bhgvPPx6irripT/q+//IJLhg1D74svxs4dO4O2w7s/vv5qN/r37YvhQ4cGTLvqpZfw1JNPAgBeefm/mDhxYtByy+uHn37+CZeOuAyXXXE5fvrp56DlAEBxURGMRhPatmuL//3vT8/yYG0Itc/9+zdYP4X7WA5Uz9w5s7Fh/QYAwNubNmLe3Dk+dXjX41+e/3sx2HvW/R7p27s33nv3Xc/ySy+5BF3OOw8jr7gcf+z9o8w2eu/rQMeaf/3B9kV5x0l570eg7D6rLriiIjYmtsLBlZQSlhgLuFLxMQrOORRFoX9R/K82BG5AFIy8RepH0C8//4x77r4HQ4cNw8TbbvVZ9+knH3teu69IPXGyEFJKfLjtKzy96F7Mf3wtxlzZFzk5ORCSYcOWL/DMYw/goQXP4Ybrrw5Z964vv0TfPn2hqsG7X9d17N61G7u++sqzbO/evfjpl18gSh6gXJFy3Na+/DL+/PNPPLZ0KT78+JOQ+a+4ciQ++GAL7r33Pmx5fwuuHOn6AjlwYD9+++MPV9/ddRe2bv8UBw8cxH333Ycb02WANwAAIABJREFUxt5Ybptef+MNJCYm4tdff8GUyZNx3fWjg9YVKC1Q+uXzV1oaAGD6QzPwyMwZOHnyJNZ4BeH+6RYtXIh58+cDAJY8uhjvvPdewD4NVu+smY/g0ssuw5q1a1FcVFRm2xbMn49Fjz6KuPh4PDz9IQwZOiRgO7wtXfIY5i9cgHbt2pcJ4F568UUUFxfjgWnTAMAz+vXkv/9dppxQ/eCWn5eHOiWjy3l5oad777v/AYwfNxZGk8nnizJYG0Ltc//+DdZP4T6WA9Uzb/4CTLzlFthsNnz22Xase/llT5n++8e7vEDvxWAOHNiP3/fuxZ7v9mDmjIcx6pprALjOn/vtjz+wbetWLJw3H5s2b/bk8d/X/sdaoPqD7YvyjhNvwY51/31WXQgh0LJVK/zzzz9QVTXkVYRCCNhsdjRv3pxG0kiNVO2Dt0jYuWMnpt53L26ZODHgOW+BbiFSaLUDADhnSK6bCF3X4dAEhJBwaq4bGCYlxMPp0FBks4es/4udn2PwUN9ftbqu+3wYMcZwySWX4OW16zDjkZme5d7Tu4HKCaZZs2Zo0KABHp4+vdz8I0eOxE3jbsKkSZOx+e23sXFT6a9yk8mEnhddhILCQtStm4KkpGScOnmy3DI3v70Ja9esw9GjR2AyGVFQUBi0rmBpgbJfsk88sQLvf/AB9uz5Dk88vgL9+vcLmO7wocPo268vpJSYet+9PuvcfRqq3n379mLty+tgNpthNpvLbN/Bgwcx4eabAQAGgyFoe70dPXoEAwYMDDit88GW97Ho0cVB8/oL1g9u8QkJKCwqgpQSCQmJIcsaf/N4jL95PN7etBFvv705ZFqg/OPQ+5gN1k/hPpYD1WMwGPDwzJkYfe212PTOOz71h9qmYO9F//esm9FoRO8+vZGdne2z3GQy4dLLLsPcOXN8lvvva/9jTQgRsP6zEepYB1AtT/QuzM9H81atYbaYcezIUTgcTnAOMMbBGXOd31RyjhPjHC1atUKDho1w4vhxJKWkVHHrCQmv2jG+6MdkNmLFE0/gwenTKzzEWi+pDhiAC89rh5vuWIArhveFQwMSk+rCoQE9L+yAm+5cgCEDeiI5IfgHn6Zp+PqbrzFg4KDSsuvVw7f/9w0cDodnGeccs2bPxmuvvVrhclRV9UxB+rPb7di2dSvalYwEBcrvltq4Mdp3aId777kbXbp0KTMNxzn3/Jr17r9QZa5YthzTH3oIP//6Kz77/IuQdQVLG0j68eNIz8hAy5atcPzYsaDpWrRojq+/+hrffP0NWrVqFTBNqHrbtmmDtze9DZvN5glWvfu7ZcuWWPnC8/hj3z7s/CJ0m91at26NTz/dBru9bLD/6muvY/ny5cjKyqpQWeX1Q7eu3fDp1m3Y9vEn6NYt9BNACgoKsXXrVix/bBkmT54cMm2ofR5IoH6KxLEcqJ6ioiIsXrQICxYuxOJFi1BcXAwAiIurg3/++cdz8YB/eYHei4Hes94CBXXHjx/Drl270KRJU5/l/vva/1gr77PgTFTmPVZd6LqG7Ix01K1bDxf37Y9+g4agz4Ah6N1/EHr1G4iL+g7ARX3646I+/dG958VISq6LE8ePQde1qm46IWFXK0fe+vbtV34iP/WTYmFQnJj30G1wOJwwmw2wOQQenL0YVqeOOdNvg9Vmh5TA738eDFrOTz/+iLZt2yI+Ls6z7OEZMzB9+kMoLiryuQpwzOjR6HnRRRUuZ9xNN+G6a67F7q99p3datW6NHt26oUWL5nhsxYqg+b3dNmkSxt041jMNUxGhyrz73vuwYP48ZGdnw2g0omnT0i8w/7pCpfU385FHMGWy60T8h2YEH5WYN38BHnzwQTDG8MS/nwiYJlS9ix9bhrlzZmPF8mVIbdwY2z791Ke/Fz+2FPNnz8W0+x9As2ZNPdN5oSxasgQzH3oYj8yYiVatW/usS65bF4seXYxHFy7EsytXBi3jtlsnYu26l4P2g3v9tOnTfK42DUbTNPTtfTHat2uHJcuWYeiwYSG3obzjyF+gforEsRyonoULFmDs2LEYdc01MBoNWLhgAZavWIFbJ03CqKuuQpMmjfHBRx8HLM//vRjsPRvKxAm3wGq1YtnyZT7L/fd1oGMt1GdBRbiPA7fKvMeqE03TkJ15oqqbQUiVO7PraKX05Bs9BjyrE1j7VLAjtjRujTcwo2JWLA6VM0VVdIeisjimqLrdoErFwA3coEluADSjXeXmGM7NGoRFMcg6HDyOm1mCYuTJCpPJUuEpc1MOjc44dhQp7hsnluPnH35Ao0YN0WdQeC/xf3/XPvRsVwe6IQk23QQpGThzdaAuJaQEOJOwW/Nx4OhJXN2/Q8Byli19DA0aNcDEibcGXF9RZ1uOf/7jx49h5BVX4qdffglbm8JRZk1SE/sjHPs83Mfy2Qp3eYDr3MdQU+jnQjQef998sRMZGSfQtGmTsyqnot8fhORknkCjJk3xaE7LTUwXObpkp3SHOCVsMk9AFOhOVqiCW4uFsJk0YQNUh8qEUziFU2O6U1NMTlkgdcWoa1LXdKtREw7dplvynbKZua34Kx2y/j7ITRtR+sBYxip9YmatnDY9Ew1T4vDt3kwYtBOoa8pFrGqFwhxg0GDkTsQZrWD2E/h53yEkx5c9J8rt8893YnAYruI623L881876hqMHTsurG0KR5k1SXXrD/cVlt7/Kisc+zzcx/LZCnd51UV1O/7CRQIoKrZGwZ25CAmfWjlteia6tm2E9Ox8rP3kGBxOPWCaRnVj0KNjM3RrH/yWFdu2bw9Le862HP/84XhSQCTKrEmqW3+EYyQoHPs83Mfy2Qp3eUB4+vpsVbfjL1yOZaTj5Mlc1K2bhKaNUs+4HCklnJoGZ5DzGEl0MBiNMKjqWdygNzrU6uDt008+rvDD6Y0GFdcM7IxrBnaOcKsIIYRURM7JXJw8mQsAOHkyFxajBSl1kypdjtPphC4E6tatB4sl+MwJqf6sVhtOnsyGwnnIK8qjXa0O3gghhESn/IICHD+RgYYNG+HykVfh4w+24PiJDBiNaoUvoAFcF0HYbDa0bNMG1uIiFBbmR7DVJNIUVUWTZs1waP9+MMYqdO/IMqJgDp6CN0IIIVGlyFqMw0ePIT4hAQMGDsLvP+zBgIGDsG3bJzh89Bhat2yOWEtMueVIKZGXl4/GTZuiqLAAuka3FYl2wuGAEBL1GjTE8aNHkZycVCOnUGts8GYyW8KajhBCSPWQnXMKJpMJl1xyGQ6l/Q9OpwOH0v6HSy65DB9+8D6yc04htmn5wZuu6zidl4f2HTsgL/fUOWg5ORc0hx0JSck4nZeHhIT4Mxt9q+Zq3hYRQgip0QYPGYqYOnVw8K8/PRcYOB0OHDt8ANdePxrFhYU4lPZXueUIKWGzWSGkhBCi3PQkekhRum8rnTcK5k0peKukU0e24Z8fHy/5S3o9fFUCkGDgaN33ccQ16F5FLSSEkJot/egRQErY7Taf5dbiYuzft9fzmKzKEJKCt/Js3/4Z1q59GRaLGS+/vLbS+W+4cRzWv/VGBFpW+1DwVkmH9ixG50tWARCAlgfpzAOcpyG1PEDLg7Dl4H+fT0GPG36o6qYSQkiNZLdZg6/zC+gqRkJGYORtwoRbcTovD2aTCS1btsTEWyegfbt2Fc5/47jxeOuN18LeLgAYf/MtyM8vQP0G9TF82FBcf+014AEe6+btlVdexfSHpqFzx45n1F8F+QWefJHcttqgVgdvI6+5rtJ56neYhD3v3Q4BVjLqJgDIkmd9SihMomP/ReFuKiGEkAiKxLTpyVOn8N67b0PTdOzZswcrlj+B1atfrHD+gvyCiE3n5uaexnvvvo3MzEw8++zzsNlsuGnc2HLzXHD++eCcn3G73PkiuW1AVFwwelaqf/BWzfZAcdzl+F4kYECPdlAVDpVzcA7oQqKw2IFdPx1Ex6SBVd1MQgghlRDJQEJIAVVV4NQ0CCHw199pePrpZ1BcXIR77r4LPXv2AAAsenQJDh86jHXrVnvyXnX1tQCA9959GwCwb9+fePo/z4Axhvun3ouOHTsCAKY9+DDS09MRHx+HVS+9ELQOfw0aNMDtk2/Do4uXYuyNNwBAyLyjrrne056777kPmZlZSEhMwI03/AvDhg7xpHG31/s14NvP/ttGKq5WPh5r9+5d+OjDDyudL7/Ijg92/4nuXXvCEtcYsQlNkJDcBAnJTZGQ1BR167VA547nYcvuP8st69DBgxg8cMCZND9oOV27nB8wTbDl4WxHpMusjkL1a2X16NrV87rbhReErdxzJRz7vLody8HK27RxAy48/zz07X1x2OoiVU8KEfZ/gCt4GTPmRqxevQ4PPHAfpBB48cWXcOeUyZg3ZzZeee11SCGgaxp+/vkXPL5imU/+dzdvxLubN3qWrVq1BrdPug2Tb7sVq9es8yw/ePAgXl6zCk/9+/Ggdfi3zf26QYP6OJmb6/k7WF7/9jy6aAHWv/kaHrx/Ktat+2/AskO99t+28PZ9NRv5CbNaGbzZbXY8MPU+LF/2WKV+bX350wF0at0YyQl1wBiDUWEwGThMKmAyMBgNHC2b1IPBoGDfwcyQZX322XYMGzb8bDfFp5zcXNedxm02G4YOHgRHyVVY7uWh8vvnCUebwllmMB9/9BEu6t4NPbt1xfvvvRexegIJ1a+BhOqPnJxsz+tTJ08GzL9/fxrOK/mV7a+8fti/Pw2DB/TH4AH9sX9/6Ec1bd/+KXr16I5B/fvhV7+HmAdrQzj2ebiO5coKFhAG26YVy5bhmedWYvuOnWddx7l4j5CKEUKE/R8AbN60Hs88/SQ0XUPL5s0hhMDx4+mYt2ARHnxoBk5knPCk79WrJ97fssUnv3+Zx9PTcf755+G8887DsWPHfdIaTUaYzeaQdQQqOz09A8mJSaV1BMnrnWf7Zzsxb95C3DhuPBYvXYbi4mKfdFrJKKN3nmCvI9X3NVm1D94iccnusOHDsX7jJmzcsAFTJk9GUVFRhfKdzreiYX3Xo1cUzmBQOYwqg9mowKAyqAoHZ0D7lo3x95HskGV9tn07hg0PQ/AWoByz2Ywdn38Bo9FY4fyVyVMVZQYzZ/YsvPr6G1j731cwb87siNUTDmfTH598/DHGXH89CgsLAq4vrx9WLFuO2++4E5Mm347Hly8PWde82bPx0uo1WLR4CRYvKj1/M1QbwrHPw3UsV1awgDDYNmVnZ6Nf//6IiSn/PmLl1XEu3iM10clTp3A693TAdadzT+Pkqcrfs01KEfZ/7nJTUxvivM6dsOWDDyGlQOPURnj4oWlY/+areH7lfyClAGPAxAnj8fEn2zz5Y2JikJGRjry8055ljRo1wi+//opff/sVjRunlqnL/S9QHf5tE0LHiYwMrFm7DpdcOrTcvN51vPba67hp3I14/dWXsfK5p33WJSUl4tfff/P8KHEv54qC9PT0oNsW7r6vyap98BYp3bp3x4urVmH7p9uw+qWXQqbd+fIY7Hx5DBIOL0L2ztvxz7a7seG/TyPrxHEoHJg7+xGonOPPvb/h1dXPITszA5k5gb9kASAvLw9paWno3sN1HkGLpk0867xf33LzeFzUvZvn7ysvH4FO7duhX+/eAcvx5l0OAAzs1xe9enTH7l1fltuOy4YPw6FDhwC4RlouGz4MADBs8GB0bNcW3S68AA9OewA9unZF1y7n443XXiu3TAAYMmgg2rZqid4X9cTGDetD1hUobSD169XD/v37kZWZicZNmgRNt2fPd+jXuzf69+mD77/fE7RPg9V76NAh/Gv09ejQtg0uv+zSMuX//NNPGNS/H7p3vRCfhXiwuXd/7N71JXr16I6B/foGTPvCypV4fIUr0Fq3Zg0mTZoctNzy+uHHH3/A5VdcgStGjsSPP/wYtBwAKCoqgslkQrv27bFv317P8mBtCLXP/fs3WD+F+1gOVM8jMx7Gm2+4blOwYf1bmDVzhk8d3vWE2iYAaNW8GVo0bRK0TP/tDlRHoO0LdvwFKq82e/3N9ViyfAWys31/JGdnZ2PJ8hV4/c3gnxnBRGr0x/368hGX4fPPv4QQAlNun4S3N7+L8RNuw6LFj3nSPDJ7Pjp27OD5+6orr8D0hx/B/IWLPctuvfVmrFq9DqtXr8MtN48POpIVrA73v4T4ePxr7M1YuHgpOnfuhKuuuLzcvN51XH/dNVi1Zh1uHDcBU+64B/Ub1PesGzf2Rjz7zPOYMHESmjRO9SwfcclwPDxzNoqLrQG3jUbeKq76X7AQIT/9+CPuuP12DL/kUkyeMsVn3Qfvbva8HnnNdbDmn0CfcW95lu3ftQJ9jH9hx7YP0XLKncjJyYGQEt9/93+YcPu9+O/alxCX2hXBfPH55+jXr3/Iuz7ruo4vv/gC335fesuRP37/HXv/95fnwKxIOW6vvvEm9u3di0cXLsSnJdM9wfJfdfUovP/eu7j/gWl49513cPWoa1zbvT8Nf+0/gJ9+/BFTJk/Czi+/xIH9B3DXnXdg3Pjx5bZpw6a3kZSUhJ9//gm3TpiAMf+6IWhdgdICpV90h48eAwDMnDUbDz04DTk5OXjltdc9dfmnmzdnDhYtXgwAWDh/Pj78+JOAfRqs3ocffBAjrrgCr7z2OooKC8ts25zZs7B02XLEx8fjgalTPSNA/u3wtmjBQjy6ZAnad+hYJoB7/rnnUFRchIcedgUDm955BwCwYvmyMuWE6ge3vNOnUadOHQDA6dOhp3unTX8I/xp9PUwmU8lV1AjZhlD73L9/g/VTuI/lQPUsWrwEN429ETabDZ9u24rX3njTU6b//imvPe70TqczYJn+2x2ojkCCHX+ByqvNHpg2Dffedx+efeFFPDTtAcTVqYOCwkI8+8KLcGgaHpg2DcJRuVuGRKJv17/5qqfcli1b4NlnnoQQAi1aNMfSxQvL1P18yQiW++9Ro0Zi1KiRPss6tGuHlc8+VSavd10Agtbh9tKLz5VprztNsLzedVx66XBceunwgPn79e2Nfn17l1k+fvxYjB8/Nui2kYqrlcHbZ9u34647puC2yZPx0MMzwLnvAKT/LURsmgI1toHn7+S6ybDa7WjMvoFDuwNCSDg0CcY4hHTdNqTIZg9a/47PPsOwkhEmN13XoXjdY4cxhstGjMCaVaswe+5cz/LY2NiQ5QTTvHlzNGzYEA9Mva/c/FePGoV/jR6NKXfciU0bNuDd97d41plMJvS6+GIUFBQgJaUekpPr4mROTrllbtywHqtefAlHjvwDk8mEgoKCoHUFSwuU/QJc9thSfLztU3z37f9h2WNLMWDgwIDpDh08iP4DBkBKibvu8A3W3X0aqt4//vgdr77xBsxmM8xmc5ntO7B/P8be8C8AgMFgCNpeb0eO/INBg4cEnDJ77913sHRZ6OlNb8H6wS0hMRGFhYWQUiIxMSlkWbdMnIhbJk7EhvVvYeOGDeXWXd5x6H3MBuuncB/LgeoxGAyYNWcurr7yCrz/4Uc+9Vd2m9xClem93RUR6vg7k/JqsliLCSsefxwPTJ2K519ahbunTMHzL61CTs5JPPWf/yDWYkJBBYI3BoBzjqwTWTAaTSHvH0eih9liQVZmNjjnqHlPNXWpldOmJrMJT/3nGcyY+UiZwC0Qq6ZA14FdPxzE5p37kNTlPpx36RLojlNwagKJSXXh0AQaN2uJ19a8gI6dL0ByQuAPWk3T8NVXuzFo8BDPsvr16+Obr7/yOWmZc4558xfgvy+vq3A5qqp6piD92e12fPzRR2jfvn3Q/G6NmzRBh44dcMftk3HBBReWmYbjnHtGZLz7L1SZSxcvxsxZs7Dvr7+x+5v/C1lXsLSBHD92DOnp6WjVqjWOHT0aNF3Lli2xe9cufLV7N1q3aRMwTah627Vrhw3r18Nms3mCVe/+btW6NVatWYO0g4fw1f99G7LNbm3atsXWTz6G3V420H9rw0YsXbIYmZmhL3xxK68funfvgU8+/hgff/ghuvcI/fSPgoICfPzRR1jy6KO44847Q6YNtc8DCdRPkTiWA9VTVFSEBfPmYvHSpVgwby6Ki4sBAHFxcTh8+LDnQpHKbFOwMv351xFIZY772q4gLw+N6qVg5qxZOHjwEB6cMRMHDx7CzFmz0KheCgry8ipUjqIoqBMbi99+/xUJSfXoWdc1gMlsQXxSXfz22y+oExvrMyhSk9TKkbf+/St3OwGrxqEJiQs7NoWmCwjF6FludUhMn70EVoeOHn0GoWuvAbA7nPjjf4G/eH74/nu0a9cO8fHxnmWPzJ6D+6dORVFhIdq0aetZfs3VV6HXxYFvRxConJtvuQUjL78ce370PaepdZs2OL9TR7Rs2RJPPPVU0Pzebr/jDoy57jrPVFlFhCpz6gPTMGfWI8jKyoLRaESzZs2C1hUqrb858+bh1lsmQOg6Hpk9J2i6RYuXYOp994IxhqefeSZgmlD1Ln/i33hkxsNYuvhRNG7SBJ9/ucunv5c//jhmzZiJe+++G82bN/dM54Xy2PIVePD++zF92rQyAWXdlBQsXbYc8+fOwYurVgcpAbj5pnF49fU3gvaDe/3DM2dg8q23AgBWrwv8gwBwBS49ul6IDh06YMUT/8bwS8qe3+etvOPIX6B+isSxHKieubNn4abxN+O666+H0WjE3Nmz8O+nnsbtd9yByy+9BE2bNsW2z3ZUapuClenPvw6gdN+4Vea4J8CpnGxc1L07xtxwAzauX48xN9yAi7p3x4njwX/E+eOcIzEpCadyT2Hbtk/QoXNnpDZsCACQDGCS/h9N/weAExmZ+Pa7rUhITEBiUlKFBmii0ZmNKErpyTd6DHhWJ7D2qWBHbGncGm9gRsWsWBwqZ4qq6A5FZXFMUXW7QZWKgRu4QZPcAGhGu8rNMZybNQiLYpB1OHgcN7MExciTFSaTpcJT5tQ9OPrE8WNIadCwQk3b+9tvSE5OwpARV57RpgXyzIIRGHP/+/jh98PIzrchM68Yt1zeDRufvhpDb90AxljJdCnAmUBxQS6OnMjHdUPL3q9r8aJFaNioISZNvv2s2nS25fjnP3bsKC4dNgx7/1f+w5zPZZk1SU3sj3Ds83Afy2frXB7HNfGYCKedn3yIU6dy0aBB/aBpWrZtj8ycHDRISQn6MPpQ3x9CSuSdzsWx4+lIT09Hfn7+WbebVJ34+HikpqaiSeNUJCQmgVfyObc5mSfQsHETLD7ZahPTRY4u2SndIU4Jm8wTEAW6kxWq4NZiIWwmTdgA1aEy4RRO4dSY7tQUk1MWSF0x6prUNd1q1IRDt+mWfKdsZm4r/kqHrL8PctNGlJ7ox1ilb6tR44K3o/8chtPhRJ06sTU24iaEkJpOCIHCwiIYjAZYApxn6sEY4uMTkJ+fV/LIwrLK+/6QUqK4uBgFhQWwWc/k2aikujBbzIirE4eYmBiwSgZuQPQEbzVu2tRiNkPhHMXFxSFPSCaEEFJ9OZ1OmM2m8u+BJyXy8wLf862iGGOIjY2FxWLxucKaRB/G2NkP3ETBIVDjgreKjtARQggh3mi2hkQLOlIJIYQQQqIIBW+EEEIIIVGEgjdCCCGEkChCwRshhBBCSBSh4I0QQgghJIpQ8EYIIYQQUkJGwb1CKHgjhBBCCIkiFLwRQgghhEQRCt4IIYQQQqJI9Q/eqv/UMyGEEELIORM1j8fyf96clK5TCpnXOulaUfra87f0XVeSUUoJJl1pPeV7rSvJVHryote60uZ4lVnyd0mVQMlzZ8usKymVlazzKR/ef0tXO5grHXOvk6ykfaXrPBUxBimFa9u81nn3n3R3gKftpfVLKQAwr/ZJv75kvu3zWVfSW4HKlyWtL+380n4GAyA8r0vbXvq3u/NlaUd49pGEAPOk8z8OvOpD6b729KXP337Hgaft7n6lXxKERBJzf2gx5nrNfNe536fuB44zMM/frDQhAAnPEq91jLk/2zjAUFqHdJfp/jxyFcMYK2lOSZmMwTXmUfJaetXHmCsvk14PRC9d590eAD7tZaWN8KxztRWedczr0V2ByvdfV9qVzFMKvNa52+7qA+nVl1794dXP3o1mYPBsvld/wec1AMaDr/PrZ6+uLymTle4j73XMq+6SF6X1eVoTpJ9dOGMQ7n726c/oETXBG/PeEe4vUvfOcH+5wmtHlaSDOxAAAytJBwmAu7JxANJzlAOQXgeG+3vfq1z3m98VjMD3oPcKCZj7TQzmCRZZaVO93iQlHyZ+dbs/lqR0Hf9Sut98JY1HaVABr/TuAqTfG7p0I0o/oNx/uoIl5pWu9ANBejWeSVfdkknPtrrrdn9YSvdGgoMx6VW1uy2+H46uurlPv0kpwTnzrHMHb+7XjDNP8ObeH7zkQ7bsfveuu7QFrv3u6QDP9kufvnEHfV7tiL73OCHRQbqDpZKv1ZL3n/enDADPZz/g+vEt4BWMeIoq/XHs/SuWMQYhS3/suYM3KaRv3SWlMMYgROnnjPtbyP/HsffnWmk61+c2IFzfVbL088XrlzokK/nEkaLku6i0bv8fuyWFen3Oe9ctfb+s4P5h6vVj3Pu/Pt8JouS7CGBMQgp3Ff7pS76TwMCYhJDwK9+9H1E60ODdb550Ab5Dpbv3Sprl6ZvSuj0Bp5Sl+929y6SEdAf4nj4qPShKy/WLHVAmaVSo9sGb/yW73qMqgUd+vBNLr//5jr5B9/kfIYQQQqKI9H8RICYInN4vroiywA2IhnPeCCGEEEKIBwVvhBBCCCFRhII3QgghhJAoQsEbIYQQQkgUoeCNEEIIISSKVPurTSsjJ/NEVTfBR0qDhlXdBEIIIYTUMDTyRgghhBASRSh4I4QQQghxi4Ibv1HwRgghhBASRSh4I4QQQgiJIhS8EUIIIYSUqP6TpjXsatMzIaTE0cx8HMrIQ26hDfmFdjDOEB9rQkqCBS0aJqBJvbiqbiYhhBBCCIBaHrwdzjiNb/Zu+OhAAAAXYElEQVSmo17dRPTv1RWtW6QiMS4WuhDIyy/Cn38fwe7vf8eeP9NxcafGSE2pU9VNJoQQQnxIKeHUNDgdjqpuSrVgMBphUFUwxqq6KRFTK4M3ISW+//MEDmcW4I6br0Knts0AADa7A5nZuTAYVDRJrYfmTRrgsiE98ePvaVj71lZ0bVsf57eqV8WtJ4SQmoGCDpezCTacTid0IVC3bj1YLOYItC76WK02nDyZDYVzGAyGqm5ORFT/4C0Cl+x+uzcdVl3Bkhm3wGwyoqCwGBs/2IUv/u836EIAABTOMaTfhbhuRF907dwaS2bcghXPbwQACuAIIeQsUdBR6kyDDU3TYLPZ0LJNG1iLi1BYmB/BVkYPRVXRpFkzHNq/H4wxqGr1D3Uqq+ZtUTnSjp5E+kkrFk4fD5PRAE3XsWzlBhw6mumTThcC23f9hENHMjBn6ljE14nBQ3eOxuzl/0XdeAtNoRJCyBnyDjqKiwpRUJBX1U2qUmcSbEgpkZeXj8ZNm6KosAC6pp2DlkYH4XBACIl6DRri+NGjSE5OqnFTqLUqeNN1gW/2pmP6lOthNKgQQmDHV794ArcRg3tgcO8uyCsoxqaPduPvg8ex/3AGvv5+L/r17Iy4WAtuGTMcb3/wOa4b2KGKt4YQQqKPd9BRWFAAXXNWdZOqnHA4UCQKKhVs6LqO03l5aN+xA/JyT52jlkYPzWFHQlIyTuflISEhvsaNvtWsrSnH30dPol3LxmiaWg+yZDr2z7QjAIC2LVPxr5EDAAD1UxJx7Yi+WLbSNU168MgJ9O3RCQDQtXNrvL/tGxzLLqCrUAkhpJK8g47Tp3KqujnVhtOhIzE5pcLBhpASNpsVQkqIktN9iC8pSvuopqlVwdvhzAJcNrS3z4E+vH9XtG/dBMmJdXyWn84r8Lw2qIrPuj7dOuF/f6dR8EYIIZUUjUHHjTeOx1tvvRbxes402BAyOvoxlBtuHIf1b71R1c2IGrUqeMs8VYR2LRt7Rt0AoE2LRmjTohEAeJYfPpaFDR/s9qS5uGt7nzztWjfG7j2/nqNWE0JITRSZ4O3KkaN8/t68eSPun/oAnnnm6aAXA9gdjpBp8vLzqnGgKSHD3DYhBN7evBmffLIN+Xn5uPDCCzB37uyw1uGvIL8g7NtRk9Wq4K3Y5oDFbPQJxPztP5yBf69+F06nBoVzjLmyP5o0SvHJE1fHgvwi+7loMiGE1FiRCoi2vP+Oz98rVz4bsj6Dqpab5lwEb2c6uRfutn2w5UN8990PWLRwAVJS6uKfI0fOyfaHu46aN1laqtoHb+HsfIWxcg+OdRu3w+nUYDIacNfNl6Njm6Zl8jC4hrcJIYScuUgFBP7ljrrmerz37tsAgHvvnYqs7BzEWCyYcPN4DBo8sEyaRY8uweFDh7Fu3WpPGeNvvgVSMky8ZTwGDx4UkXafqXD34/sffIBHZjyMRo0aAgDatG4NIQTuvuc+ZGZmISExATfe8C8MGzoEQPA+zUjPwMrnX8TfaWlo0jgVTz75BP76Ow1PP/0MiouLcM/dd6Fnzx4R246arNoHb+FkUBXY7A6YjIGHznUhkJVzGgAwbtRAdGjdJOAo3emCIsTXMUW0rYQQUtNFapps1DXXAwDe3byxTF1Hjx3HxvVv4o+9f+DZ517AwIH9fdIIIfDzz79gzaoXfdq38tn/4O+0NDz73AsYNHBARNp9psMV4e7HU6dykdo4tUy5jy5agPi4OPz9dxoWL12GoSVBbLA+fea5lehz8cWYO+cRWK02SCHw4osv4c4pkxEbG4unnnkWPbp3i9h21OSxt1oVvNVLisWBfzLQoXWTgOtzT5depNC6ecOgvwIOHTmBpDq1+6aShBBytoTQI1Lu5k1vlSnf+7WiMJx/Xmfk5uaWSSOEQK9ePfH+li2YcPNNnnUWizlgnuog3CNWKfVScCIjA02alH5X7tj5BbZs+QCZWZkwGIwoLi72qVdROM4/77yS/nEtP3jwEObOfgSqqiIuznVR4PHj6Zi3YBEAQFVVnzJo5K3ialXw1rJhAvb88jfat2occH18XAwWTx/neR3s3Ljvfv4LHZskRqydhBBSG5yraVP/ZeW9vuXmm3DPfdMw/qax5eapDmSYrzbt37cPVq99GXffNQV16tRBRnoGXnvtddx91x3o2vUCFFutmHjr7T71SingvjWde3nTpk2wY8dODB06GFabDQnx8Wic2gijR1+Hbl0vRH5BgSctVxSkp6d7pmpJaLUqeGvbNAlvfLoXmdm5qFc3ocx6BuC7n//G6fwijBzWEzGWslOjaYczcDI3H027Bx69I4QQUjHVNXh7ZM58dOzYvkJ5qoNwt2fUqKtgW78Bs2bPQ2FhETp36oTrr7sGq9asw+nTp6GqKuo3qF9u/9xx+ySsWr0Wr772BlLq1cN/nnocU26fhFVr1uGpp59Fg4YN8OTjywAAIy4ZjodnzsZLLzwHs5lOSyrPmT0vQkpPvtFjwLM6gbVPBTtiS+PWeAMzKmbF4lA5U1RFdygqi2OKqtsNqlQM3MANmuQGQDPaVW6O4dysQVgUg6zDweO4mSUoRp6sMJksFZ4yK2n/6KyMdKQ0KD8az8k8UW6a3w5k4WiOFfdOvBIK5z7rtnz2Pbbv/gUAMHH0EHQ7r7XPervDieUvvIPenRqiRaPyR94q0mZCCKlNnE4n9h84gLbt2kFodthttqpuUrVgtljAuAlpaX+hTevW5T7j1OF0Ii0tDf0HDsCRg/vPUSujS7OWbbB71y60bdsWxgo+MzYn8wTqN0rF0tw2m5gucnTJTukOcUrYZJ6AKNCdrFAFtxYLYTNpwgaoDpUJp3AKp8Z0p6aYnLJA6opR16Su6VajJhy6TbfkO2Uzc1vxVzpk/X2QmzaiNNplrNIn5/Hyk9QsXVrXh0mReOO9L+DUNIiSE1SFEOjQujFSkuMxclhPXNippc86q82O1W99ipYN4ysUuBFCCClLURTUiY3Fb7/9ioTEejCZzICUtfqfyWRGfGIyfvvtF9SJjYWiKOX2IwPAOUfWiSwYjSZIIeif1z+TyYSszGxwzs9wlKp6q1XTpm4DL2yKL385ipWvfIyxVw9ASnI8AKBN84aYe+/oMumPnziJVzd/gcYpMbioU6Nz3VxCCKkxOOdITErCqdxT2LbtE3To3BmpDV2zFJIBTNau/wPAiYxMfPvdViQkJiAxKQmclz+u4gmCf/8Vffv0R15uNuw2ayR3XdQwmS2IT6qLr7/6GvVSUioUDPuIgsdp1crgzaAqGNajBX47kIWn1mxB5/bN0KNLGzRvXM9zGxGrzYH9/2Tgh1/TcOhYFvp0TkXbpnWruOWEEBL9YmNj0axpUxzj6fj5hx/wZX5+VTepSsXHxyM1NRVNGqciNja2QnkoCA5vMBxtamXw5taldX20b5qMtKO5+Gj7t8g5XQyHU4MAEGM2on5SDFo2jEff4Z2hKDVv5xNCSFXgjCExMQlGown16qXAZq3d572ZLWbE1YlDTEwMmPuSzQqgIDiwMwmGo02tDt4AwGRUcV7rejivdT0Arocm80q8eQghhFQeYwyxsbGwWCwhH1lYGzDGzmh0iILgwM40GI4mtT5480eBGyGEnDs1cUrrXKIguKwzDYajSbUP3iL1+BRCCCGkpqjpwcq5FA1BcLXf29XtZoiEEEIIqbmiIe6g4I0QQgghpEQ0xB3VPngL9zPbCCGEEEKCiYbTtap98Kbr1b8TCSGEEFIz6EKv6iaUq9pfsCAq0Yn0LFFCCCGEnA2aNg2DaBi+JIQQQkjNEA1xR7UP3qIhAiaEEEJIzRANcUcUBG/V/34rhBBCCKkZKHgLAxkFJw4SQgghpGagadMwoKtNCSGEEHKuREPcUe2vNrVKbjdBN+VknqjqphBCCCGkhiuW3F7VbShPxEfeVLOUKAJU3SK5wSydAhIAnAAADbrUpCKk4FAkV6WQEgICumRcY1I6j/LEjEi3kRBCCCEEAI4qyelMSqdkXIOALiUEV11xiiKk0KUmAa0kjgGcApIbzFLVLa54xxz5h6OedfDWqRM8jYxr1FYCgCmx7FUGxQBsNpurUlVKJiCZUKUupXQyCCmk0AV0XYdTaroGIZyQsH1p6vhTJo/PPtt2EkIIIYSEcoInZu8ytv8ZEjYI4ZSaruk6nLqALoUUTgahSymZUCUTkFx1BWo2mw3FAcpzx0Pu+AjwjZvOVGRG3krGyoocro1STZCKBqkYpFR0KZ26a4MlpK4wVXAGwTRoTJOaIphDMm4VYFYJVgRdFn5ovnB3mlL/sI0Zqv1QJiGEEEKii40Z7Glqg0Mfmbvshi4LJViRALNKxq2KYA6mSY1p0DiDUJgqJKTOVVc8o+jSFd9okKrJFZi54x9EaO4wLOe81e8M+ddeoH4SmHuZKV7I4lwFxQ4pOZfSYpJSV8wCjAmD4hAOB4RqNAhA0xUhhZNLp4ErTgVwOJzSqgJGqELhigKmSW2X2v4byZghHO0lhBBCCPHGpHRCkzYJViR0vUjXWLHmlFYjmEPjitPJhFMRUggmdZUbhHDYhdEohS5MQudSKCYhrQ4phXAFbqZ4Ia25peX/lQ5ZvzMk9p59W8N7wcLevbD06iwthUflaRuXaoyQCueSAdLugDRBSkXaJedcqtwgNDh0h86FQVU0KYQTDukQZihck6pk4DoYwKTOIZ3g3MCEqPYXWBBCCCEk+rjOcRNOAVh1jRVLTRZwTdoEhx0O6ZBSOnWuaE5NCs4dusoNgutCQrdJKYzSrkGqZkgJSF0IedomZGKSLrU6LSS+2wugc9jaembBEGMSUnpG2bAJQCcgKbWzLEhLY1nxBmlUDDDapWSKlIxLqWtS6iYmmDAJOB1CN0ihalI4ITUmwVWuKJrUrdzBOeeCSyeHLiEY4JBS2JnKVHCmhGm7CSGEEEJK6VKXmtAk41bNKa1ckzYIYdU0bhcQVgNXNF0KjQmpqUIKnUnBnVLovGTkzSalwqWUwnWKmNUIZBXp0pKRhqTUzjIrHZ54yYOxMzr/7axHshYugBw9pnS6NK5RW2ktOsxMViFNSULm5rqmTTmXwqJLrqtMKEaTbtIdXIOBM6FpTjBFF06nQTEw6LpVgENVmVAF03Q7HDpnVkUKA2PV/750hBBCCIk+UkLoOnMqAg4jmENw2DWN26ELK1cUzaE7nYIpOhNSAzfoJghdmE26rkuhaFJauRT2kmnTpCQhRa6QDmPJxQpe06cLF5z9BQthmYbs1AkSnQH3eW+WBi18p04LuGQKpCakEAYpFBWCK1KXUnJAcoNTOBxcYQqTjCsKhNCFsHEhjNAhdCdTmZ0BitAYBW+EEEIICTuuSsEEdKlJTeOK61QuuAI3IaRTF4pmFMKhQepSSh1M6rpDCk1zjcCpAlLqkHqc35RpYen5bp1w9oEbEM5z3txTp7mQBRmuqdO4uorkWVIWK0JwDsY5Z1xKXUow4ZQcitSZojKuMKhCYw6dQ5GaNHKDdAhdMidzGiQ3AFAFZ1xAZ+U1gxBCCCGk0jRFQkgBjWlOJpxSSqeBu0bcdKFoKoSDq6rGdKlBSF04pZDMFcg5uRQCQggIEWOXUtQXMutkyZSpua3MAspOmZ6FMw/evM57CzZ1arHpMssmpCWBSaWAS0OsFIxJptuZELEmzagwwOkAB6AqKrimSaeiSF0KwTjXFaHrTs4cQgM3SHCd08gbIYQQQiJA6MLJIDiDUIQUesk5boIpulG4AjeuS40LqSkGo+bgUpNFUpiMUkguhbPINeqWlydkfZsuC1DOlOkZnu8GhHHkzXvqtD2AAptTZgGIa6YJnsVZsSKE08GZMUYKFiN0SA5YwaBK5hSAACCFBLML6eRMlRyCKVxjrglXLhhjKhQaeSOEEEJI2OlMk5BSMqhCMKk7NSmYkBoTUtMgdVYSuAFSh1Xq0iB1GSN0p5TCUSylUFyjbmozTWSd1KUl3ymTHJDhnjIFzjZ4C3LVKVASbdYBLIVH5WmjJmIcAFMYsxYLcM6ZwSJQLDmL0YyAhUk4HQBTJWNMAE6hcabp0qhowskZFEXjGoOs/g+LJYQQQkg0EmBClRqE6zYg3KGrQgpwg+scNyF1xWDUYJV6sZQ6h9CdVimEEMKiSiF1XViNmki06VJr0ELGxaJ01C1MV5l6sp9NZgDwDt7mLwDb1xksay9Y+1SwI7Y0bo03sDiHkRc4VW5JULhJUzjjXLFpjBssjDNwhTGmGJ12lRsYB5hiB1MUybgmnJyr4EJjTHLQHXoJIYQQEhFOAO5HXgkNQuUGoTMpTJA64DrHzWEwaVJKXZYEbmZVCimEbld1Yc3TRZxBEwVGh7DkO2Uzc1vhGXXbCxmuKVMgHNOmfqNvnfZ6XXkKhwSAgniIOAAWE1AAwKQBZpXDZgUMFgEUcWgmo2Q6UxQjEwabXXAD49yoMKfOuNEIJjRGU6aEEEIIiQgDAG50PfLKaJSC60JypxTCbNJ1R8nFCUVSyJiygVucSReqV+AWd8oh/0Jp4OZT0VkGbkA4Rt6AsqNv+8CyOrlG33KTwArqgFkzD7O4ukZusam8wO4agbNqjBtjODfojNt1xhljimpiXNHBFWHnumJmim7nuuIK3Aw8TO0lhBBCCPHiFK4gS9Gl1BWTUHSb1LlJ6AqEZpdCSqmbFCmcihSOYtdUqTtws5o1UXDSISwNWsi4Qsik3JJz3fZBduoU3lE3IFzBGxBy+rS8AC7GyJhNY9wgGFfNjOsKY4oOLlTGFN3GdSdjZrMZwmmj4I0QQgghYccNZmmz2aAYXM9i55qUugKh6FJqNimc3DXaVuyQskKBWwSmSz3FhKMQAD7BG1BOAFdyDlyCmbNiXeEmnXOnAcwoONdUMINgXFcZM6lgup0xXQWLAaApVgreCCGEEBJ2qm6RxQAUDVIxSWnXIBVNSieXQtUgHVwIgxPSrggRo+gizyak5xy3igRuQNiCt/DdpNf/ylP4nv/W3r2wQQsUZB4WcQCsRs5iHIAjRkhRzJnUIQUHU4xMSJUxqw3MYmRM2sFsAGA0ha25hBBCCCFumk2AA1BMkFaHlKoZUuFS2h1SSh1SQAg9TsgYu5RWoybidCFDBW5lKghT4AaEc+TNLcD5bxgN+IzAZaQxa7yB1Y9VmNWssIIjrlE4h4kxrZizWCNjmpExZzFYjLH0QgXNRhctEEIIIST8VLP0BFfFDikNMZCqQ8oih5RqjJBGu5R5NiHjmmnCYtNlVpHrXm5xjdr6BG7Y5Lr3bSSmSz3FhbMwD78ADgB8plDT97KCZCND27awZh72BHH205wlmjmz55cGcgAQa6SgjRBCCCGRV+RwBXHugM0U73pWqSlRSE/Q1qCFRFoa4k45ZFJq5zIjbpEM3IBIBW9AyAAOAPxH4QCgfqzCrLkKs1tcQZs7kItYGwkhhBBC/LgDNgAwWYW0JLmCNgDwH20DgHMZuAGRDN6AwBcx+E2jAoA7iHOPxAGlgRwAoBFgP01BHCGEEEIix5QoJDJcr30CNvdIW0nQBgAhp0mBiAVuQKSDNyBgAAeUHYUDXEEcAPgHcoQQQggh55J3wAYA3kEbEGK0DYho4Aaci+ANCB7AeY3Cudd5Arn0vQydO3vyFGSkUSBHCCGEkIhxB2oAgL17kZTa2SdgA1xBm3u0DTj3gRtwroI3oEwAB/gFcQD8AzmgNJgjhBBCCDkXvIM1oDRgA0IEbcA5CdyAcxm8uQUI4oDAgRxQNpgjhBBCCImk+p1LArOKBGzAOQvaPNWdy8p8BAnigNJAzpsnqCOEEEIIiQB3kOYtaMAGnPOgzVNtVVTqI0QQRwghhBBS7VRR0Oapvior90FBHCGEEEKqsyoO2tyqb8BEwRwhhBBCqlI1CdYIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYREmf8H1xum9E0oeQwAAAAASUVORK5CYII=" /></p>
<p>The important part here is the <code>-javaagent:./target/agents/quasar-core.jar</code>. Finally set this JRE as the default JRE.</p>
<h2 id="what-is-a-continuation-and-what-does-the-quasar-library-do-for-you">What is a continuation and what does the Quasar library do for you?</h2>
<p>If you are not interested in the long story then just jump down to the <a href="#style-examples">examples</a>.</p>
<p>A <a href="https://en.wikipedia.org/wiki/Continuation">continuation</a> is a “<a href="https://en.wikipedia.org/wiki/Goto">goto</a> on steroids” (I always thought <a href="https://en.wikipedia.org/wiki/Matthias_Felleisen">Felleisen</a> came up with this slogan first, but I currently cannot find a reference from him; but you can find one <a href="http://stackoverflow.com/questions/11103852/the-seasoned-schemer-letcc-and-guile">here</a>). A continuation captures the current program state as a “value” that you can use else-where in the program and resume the computation from where you left off. A continuation allows you non-local transfer of control like a <code>goto</code> (BASIC programming language) or a <code>JMP</code> (assembly language) or a <code>longjmp</code> (C language) statement. One of the few “main-stream” programming languages that has support for continuations built-in is the <a href="https://en.wikipedia.org/wiki/Scheme_(programming_language)">Scheme</a> programming language (a kind of <a href="https://en.wikipedia.org/wiki/Lisp_(programming_language)">Lisp</a>) via for example the <a href="https://en.wikipedia.org/wiki/Call-with-current-continuation">call/cc</a> construct.</p>
<p>In nearly all practical cases you do not want a full continuation, but a <a href="https://en.wikipedia.org/wiki/Delimited_continuation">delimited continuation</a>, because they may be reused and composed.</p>
<section class="roundedBorder">
<p><a name="delimited-continuations"><strong>Delimited Continuations</strong></a></p>
<p>You can find further information about delimited continuations and what you can do with them by following the links below:</p>
<ul>
<li><a href="http://matt.might.net/articles/programming-with-continuations--exceptions-backtracking-search-threads-generators-coroutines/">Continuations by example: Exceptions, time-traveling search, generators, threads, and coroutines</a></li>
<li><a href="https://github.com/swannodette/delimc">delimc</a> is a library for delimited continuations implemented as macros in Clojure</li>
<li><a href="http://okmij.org/ftp/continuations/">Continuations and delimited control</a> is another good source of information</li>
<li><a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.43.8753&rep=rep1&type=pdf">Abstracting Control</a> by Olivier Danvy and Andrzej Filinski show how to use delimited continuations for implementing “nondeterministic programming (backtracking)”</li>
</ul>
</section>
<p> </p>
<section class="roundedBorder">
<p><a name="structured-programming-and-semantic-stacks"><strong>Structured Programming and Semantic Stacks</strong></a></p>
<p>As long as programming languages did not have a stack nobody needed a continuation and used <code>goto</code> statements. With the introduction of <a href="https://en.wikipedia.org/wiki/Structured_programming">structured programming</a> and the <a href="https://en.wikipedia.org/wiki/Considered_harmful">goto considered harmful</a> discussion most programming languages banned the <code>goto</code> statement, introduced a programming language <em>semantic</em> stack (often even on the machine level as a real stack like in the C language; have a look at “standard segment layout in a Linux process” <a href="http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/">here</a>) and introduced more restricted control flow constructs like <code>while</code>, <code>for</code>, <code>switch</code>, <code>if-then-else</code>, …</p>
<p>For a feel of what it means that the stack is a <em>semantic</em> stack and not a <em>real</em> stack have a look at <a href="https://en.wikipedia.org/wiki/Stackless_Python">Stackless Python</a>. It implements the standard <a href="https://en.wikipedia.org/wiki/Python_(programming_language)">Python</a> programming language, but avoids to use the stack internally. This means that you as human have the impression in the head that there is a stack, but on the machine level no stack is used. Another example comes <a href="#core.async">further down</a> when we will have a look at <code>core.async</code> in Clojure, where you have the impression that there is a stack, but behind the scenes some compiler techniques are used to rewrite the program into a stackless format.</p>
<p>The stack for a software developer who learned software development after the year 1990 is similar to water for a fish. As nowadays basically <strong>all</strong> programming languages have banned the <code>goto</code> and are languages that fully embrace the learnings from the <em>structured programming</em> debate (which comes hand in hand with using a <em>semantic</em> stack) a software developer does not see the difference any more. It is like with a fish that is so used to water that it takes water for a given without ever thinking about it. In a similar way software developers take the stack for so granted that they don’t ever think about it (at least I didn’t). The real machine does not need and often does not use a stack at all! The stack is a <strong><em>semantic</em></strong> construct that helps us as humans to understand what the computation is supposed to do (on the <a href="https://en.wikipedia.org/wiki/Semantics_(computer_science)">semantics</a> level of a programming language). The machine doesn’t need a stack as can be seen by the fact that compilers can compile stack based code into code that does not use a stack at all: <a href="https://www.amazon.com/Compiling-Continuations-Andrew-W-Appel/dp/052103311X">Compiling with Continuations</a>.</p>
<p>The original hint that pointed me in the right direction came via <a href="https://www.info.ucl.ac.be/~pvr">Peter van Roy</a>’s book <a href="https://www.info.ucl.ac.be/~pvr/VanRoyHaridi2003-book.pdf">Concepts, Techniques, and Models of Computer Programming: Distributed Programming</a>. He spoke in his book very clearly about the stack as a <em>semantic</em> construct and introduced it in his <a href="https://en.wikipedia.org/wiki/Operational_semantics">operational semantics</a> of the <a href="https://en.wikipedia.org/wiki/Oz_(programming_language)">Oz</a> teaching programming language. At least for me it took a long time to really understand how the <em><strong>semantic</strong> stack</em> gets into my way and confuses my thinking around <a href="http://www.balisage.net/Proceedings/vol3/print/Kay01/BalisageVol3-Kay01.html">push vs. pull</a> or <a href="http://berb.github.io/diploma-thesis/original/043_threadsevents.html">thread based vs. event based</a> architectures.</p>
In most cases nobody misses the more powerful goto statement, but there are some cases where a kind of <code>goto</code> statement would be useful to avoid the need to rewrite the complete program (we will talk about these manual re-writes of programs below as “stack-ripping”) only to deal with the consequences and restrictions of <em>structured programming</em>. For an early example of the discovery of the problem have a look <a href="http://www.balisage.net/Proceedings/vol3/print/Kay01/BalisageVol3-Kay01.html#d119811e501">here</a> where they talk about “<a href="https://en.wikipedia.org/wiki/Michael_A._Jackson">Jackson</a> Structured Programming and the Concept of Inversion”, which is a manual rewrite technique on how to rewrite a <em>structured program</em> to deal with the restrictions that structured programming introduces.
</section>
<p>Based on continuations other constructs can be build like <a href="https://en.wikipedia.org/wiki/Continuation#Coroutines">coroutines</a> or <a href="https://en.wikipedia.org/wiki/Generator_(computer_programming)">generators</a>.</p>
<p>Continuations can also be used to implement <a href="https://en.wikipedia.org/wiki/Cooperative_multitasking">cooperative multi-tasking</a> (in contrast to the <a href="https://en.wikipedia.org/wiki/Preemption_%28computing%29">pre-emptive multi-tasking</a> that for example the Linux kernel provides). This is the use-case that we will be most interested in. One can write a program in the normal structured programming language style using a stack and use techniques that most developers are already used to from multi-threaded programming but still keep everything lightweight on a single operating system thread without the need for manual re-writes like stack-ripping.</p>
<p>Many people are not clear in their language what they mean when they talk about <code>threads</code>. Most often most people conflate the concept of an operating system heavy weight thread providing pre-emptive multi-tasking and the concept of a <em>semantic</em> stack used as an aid for human software developers in structuring of their programs in a readable and meaningful way. The two terms are related in so far as an operating system thread also provides an independent stack from other threads (see <a href="http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/">here</a>).</p>
<p>In order to avoid confusion I will use the terminology of the Quasar library:</p>
<ul>
<li><a href="http://docs.paralleluniverse.co/quasar/#fibers">Fiber</a>: A fiber is basically a <em>semantic</em> stack independent of an operating system thread that can be used for co-operative multi-tasking. The fiber can be implemented by using a real stack data structure like it is done in the Quasar library or it can use compiler re-write techniques like the core.async implementation shows.
<ul>
<li>Other terms you sometimes hear that mean the same thing as <code>fiber</code> are <code>green thread</code> or <code>light-weight thread</code>.</li>
</ul></li>
<li>Thread: A thread is the usual heavy-weight operating system thread construct (like in <a href="https://en.wikipedia.org/wiki/POSIX_Threads">POSIX Threads</a>) that provides pre-emptive multi-tasking. An operating system thread also comes with an independent stack. In that case it is even a real data-structure even supported by hardware via the <a href="https://en.wikipedia.org/wiki/Memory_management_unit">memory-management unit</a> (MMU) and the operating system.</li>
<li><a href="http://docs.paralleluniverse.co/quasar/#strands">Strand</a>: The Quasar library creates an abstraction called <code>Strand</code> that subsumes both concepts so that from a software development perspective you can write a program and decide later if you prefer to use operating-system threads or fibers or even mix the two. Mixing the two is a very useful technique by for example having millions of fibers scheduled on the number of real cores your CPU has via operating system threads via the Java <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinPool.html">ForkJoinPool</a> infrastructure. This can be used to get the maximum throughput out of your computer program.</li>
</ul>
<p>In the language of Peter van Roy a strand is a <em>unit of waiting</em>.</p>
<p>The following paper is also very useful to understand the above mentioned concepts: <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.20.464">Cooperative Task Management without Manual Stack Management or, Event-driven Programming is Not the Opposite of Threaded Programming</a>. And I’ve taken out one picture that I find especially useful for the deeper understanding and have included it below. The goal of this document is to create sensitivity around these topics and show you how to arrive at the “sweet spot” in the Java programming language on the standard Oracle JVM.</p>
<figure>
<img src="data:image/png;base64,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" />
</figure>
<p>As Java and the JVM do not natively support continuations (actually there is support for native continuations in the <a href="https://drive.google.com/viewerng/viewer?url=http://wiki.jvmlangsummit.com/images/2/2b/JVMLanguageSummit_Stadler_Continuations.pdf">Da Vinci Machine</a>) we have to work our way around this limitation. On the standard Oracle JVM we have the following options:</p>
<ul>
<li><a href="http://docs.paralleluniverse.co/quasar/#strands">Quasar Library</a> (you might be also interested in reading <a href="http://blog.paralleluniverse.co/2013/05/02/quasar-pulsar/">Erlang (and Go) in Clojure (and Java)</a>)</li>
<li><a href="https://github.com/kilim/kilim">kilim</a></li>
<li><a href="http://commons.apache.org/sandbox/commons-javaflow/">Apache Commons Java Flow</a></li>
<li><a href="http://www.matthiasmann.de/content/view/24/26/">Matthias Mann continuation library</a></li>
</ul>
<p>Actually the Quasar version is based on the Thomas Mann version but heavily modified/improved. There is also an article about <a href="http://vlkan.com/blog/post/2014/09/01/java-fiber-test/">Testing Fiber Implementations in JVM</a> and the <a href="http://blog.takipi.com/java-io-benchmark-quasar-vs-async-forkjoinpool-vs-managedblock/">Java IO Benchmark: Quasar vs. Async ForkJoinPool vs. managedBlock</a>.</p>
<p>I’ve chosen the <a href="https://github.com/puniverse/quasar">Quasar library</a> for my own experiments, because it makes the most complete impression and is under active development and maintained by <a href="http://www.paralleluniverse.co/about/">Parallel Universe</a>.</p>
<h3 id="coiteratortest">CoIteratorTest</h3>
<p>Let’s have a look at what you can do with the Quasar library by implementing a CoIterator. The example is taken from the <a href="http://www.matthiasmann.de/content/view/24/26/">Matthias Mann web-site</a>. Have a look at the <code>control.structures.continuations.CoIteratorTest</code> class:</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"><span class="kw">public</span> <span class="kw">class</span> CoIteratorTest {
<span class="kw">private</span> <span class="dt">static</span> <span class="dt">final</span> <span class="bu">Logger</span> logger = LoggerFactory.<span class="fu">getLogger</span>(CoIteratorTest.<span class="fu">class</span>);
<span class="at">@Test</span>
<span class="kw">public</span> <span class="dt">void</span> <span class="fu">test</span>() <span class="kw">throws</span> <span class="bu">ExecutionException</span>, <span class="bu">InterruptedException</span> {
<span class="bu">Iterator</span><<span class="bu">String</span>> iter = <span class="kw">new</span> <span class="fu">TestIterator</span>();
<span class="kw">try</span> {
<span class="kw">while</span>(iter.<span class="fu">hasNext</span>()) {
logger.<span class="fu">info</span>(iter.<span class="fu">next</span>());
}
} <span class="kw">catch</span> (<span class="bu">Exception</span> e) {
<span class="bu">String</span> msg = <span class="st">"Unexpected exception thrown."</span>;
logger.<span class="fu">error</span>(msg, e);
<span class="fu">fail</span>(msg);
}
}
<span class="kw">public</span> <span class="dt">static</span> <span class="kw">class</span> TestIterator <span class="kw">extends</span> CoIterator<<span class="bu">String</span>> <span class="kw">implements</span> <span class="bu">Serializable</span> {
<span class="kw">private</span> <span class="dt">static</span> <span class="dt">final</span> <span class="dt">long</span> serialVersionUID = 1L;
<span class="at">@Override</span>
<span class="kw">protected</span> <span class="dt">void</span> <span class="fu">run</span>() <span class="kw">throws</span> SuspendExecution {
<span class="fu">produce</span>(<span class="st">"A"</span>);
<span class="fu">produce</span>(<span class="st">"B"</span>);
<span class="kw">for</span>(<span class="dt">int</span> i = <span class="dv">0</span>; i < <span class="dv">4</span>; i++) {
<span class="fu">produce</span>(<span class="st">"C"</span> + i);
}
<span class="fu">produce</span>(<span class="st">"D"</span>);
<span class="fu">produce</span>(<span class="st">"E"</span>);
}
}
}</code></pre></div>
<p>If you run this test via JUnit you get the following output:</p>
<pre><code>[main] INFO c.s.continuations.CoIteratorTest - test - A
[main] INFO c.s.continuations.CoIteratorTest - test - B
[main] INFO c.s.continuations.CoIteratorTest - test - C0
[main] INFO c.s.continuations.CoIteratorTest - test - C1
[main] INFO c.s.continuations.CoIteratorTest - test - C2
[main] INFO c.s.continuations.CoIteratorTest - test - C3
[main] INFO c.s.continuations.CoIteratorTest - test - D
[main] INFO c.s.continuations.CoIteratorTest - test - E</code></pre>
<p>As you can see via the “[main]” element of the logging output all of these activities are happening on the <code>main</code> operating system thread and no operating-system based multi-threading is happening. In a “normal” JVM in “normal” Java this would not be possible, because there is no <code>return</code> statement in the <code>run()</code> method that calls the <code>produce()</code> methods. Therefore you should never be able to arrive at the <code>logger.info(iter.next());</code> statements that uses the iterator.</p>
<p>The Thomas Mann web-site also explains conceptionally what is going on. Conceptionally the code of the iterator body is rewritten via byte-code manipulation via the java agent to something like this:</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"><span class="kw">public</span> <span class="kw">class</span> TestIterator <span class="kw">implements</span> <span class="bu">Iterator</span><<span class="bu">String</span>>, <span class="bu">Serializable</span> {
<span class="kw">private</span> <span class="dt">int</span> state;
<span class="kw">private</span> <span class="dt">int</span> i;
<span class="kw">public</span> <span class="bu">String</span> <span class="fu">next</span>() {
<span class="kw">switch</span>(state) {
<span class="kw">case</span> <span class="dv">0</span>: state=<span class="dv">1</span>; <span class="kw">return</span> <span class="st">"A"</span>;
<span class="kw">case</span> <span class="dv">1</span>: state=<span class="dv">2</span>; i=<span class="dv">0</span>; <span class="kw">return</span> <span class="st">"B"</span>;
<span class="kw">case</span> <span class="dv">2</span>:
<span class="kw">if</span>(i == <span class="dv">3</span>) state = <span class="dv">3</span>;
<span class="kw">return</span> <span class="st">"C"</span> + (i++);
<span class="kw">case</span> <span class="dv">3</span>: state=<span class="dv">4</span>; <span class="kw">return</span> <span class="st">"D"</span>;
<span class="kw">case</span> <span class="dv">4</span>: state=<span class="dv">5</span>; <span class="kw">return</span> <span class="st">"E"</span>;
<span class="kw">default</span>: <span class="kw">throw</span> <span class="kw">new</span> <span class="bu">NoSuchElementException</span>();
}
}
<span class="kw">public</span> <span class="dt">boolean</span> <span class="fu">hasNext</span>() {
<span class="kw">return</span> state < <span class="dv">5</span>;
}
<span class="kw">public</span> <span class="dt">void</span> <span class="fu">remove</span>() {
<span class="kw">throw</span> <span class="kw">new</span> <span class="bu">UnsupportedOperationException</span>(<span class="st">"Not supported"</span>);
}
}</code></pre></div>
<p>And in addition every “fiber” maintains its own stack. Have a look at the <code>co.paralleluniverse.fibers.Stack</code> and <code>co.paralleluniverse.fibers.Fiber</code> classes. It is also noteworthy to mention that the Quasar <code>fibers</code> are <code>Serializable</code>, which means you can take a given state of a computation, write it to disk, quit the JVM, restart the JVM, read the serialized version of the fiber back and continue the computation from where you left off. You can also use Quasar fibers in web-sessions of web applications and simply put them into the session scope.</p>
<section class="roundedBorder">
<p><a name="continuations-and-web-applications"><strong>Continuations and web-applications</strong></a></p>
<p>The first time I personally felt the pain of stack-ripping was in the good old times of <a href="https://en.wikipedia.org/wiki/Common_Gateway_Interface">Common Gateway Interface</a> (CGI) based web-applications when you had to rewrite entire programs by hand from the “normal” stack based style into a continuation passing style (CPS). The transformation steps are described very well in the paper <a href="http://www.ccs.neu.edu/racket/pubs/ase2001-gfkf.pdf">Automatically Restructuring Programs for the Web</a>.</p>
At that time I was deeply confused about what is going on here and why this is necessary or what is missing in order to avoid this rewrite. Now in retrospect I would put the problem as follows: a normal web-application is composed of two co-routines. The one co-routine is the human user in front of the browser and the other co-routine is your computer program running on the server. As we want to keep the nice and well understandable way of the <em>semantic</em> stack for the human in front of the web-application the server application has to give in and be rewritten. You could avoid the rewrite in languages that offer support for continuations or coroutines in the first place.
</section>
<p>This is the mechanism via which the Quasar library can create the illusion of a non-local transfer of control and can implement cooperative multi-tasking. The word <em>cooperative</em> is important here, too. You as developer of constructs like the <code>CoIterator</code> have to call <code>Fiber.park()</code> in the right places. In operating system threads the operating system is forcing each thread to give up the CPU core from time to time (that is the meaning of pre-emptive multi-tasking) so that other threads get CPU resources and can run. With Quasar fibers the developer has to call <code>Fiber.park()</code> at some places to cause the transfer of control to another fiber. Otherwise the current fiber will use the CPU “forever”.</p>
<p>Each method that calls <code>Fiber.park()</code> will need to declare the checked <code>Exception</code> called <code>SuspendExecution</code>. Like that you can always see in your program in which stack-frame somewhere deep down there may be a call to <code>Fiber.park()</code> or similar. Actually this exception will never be thrown at runtime and you should never catch it. It is only used as a marker by the Quasar library to know which code blocks to instrument. You could also use the <code>@Suspendable</code> annotation instead of the checked exception, but this makes it extremely difficult to ensure that all methods in any call stack that uses your method also use this annotation.</p>
<h3 id="why-going-through-all-of-that-hassle-while-you-can-achieve-the-same-thing-with-operating-system-threads">Why going through all of that hassle while you can achieve the same thing with operating system threads?</h3>
<p>If you just care about the semantics (the meaning and correctness) of your program then there is no reason why not to simply use an operating system thread.</p>
<p>But if you care about low end-to-end latency at the higher percentiles then you might care. Have a look at <a href="https://github.com/Netflix/Hystrix/wiki/How-it-Works">Netflix/Hystrix: How it Works</a> and scroll down to “Cost of Threads”. There you can see that at the median (and lower) there is no cost to having a separate thread, but if you go to the higher percentiles, e.g. the 99th percentile there is a cost of 9ms on a basis of roughly 27ms for having a separate thread (e.g. an overhead of roughly 33%).</p>
<p>While the Quasar fibers also cause a bit of overhead this overhead is much lower than the 9ms of an operating system thread.</p>
<p>There is the long standing argument of what is better, event based programming or thread/stack based programming. In the late 70s Lauer and Needham came up with their duality argument, which basically says that you can convert mechanically from the one paradigm to the other, e.g. they are equivalent. For more details have a look at <a href="http://berb.github.io/diploma-thesis/original/043_threadsevents.html">The Case of Threads vs. Events</a>.</p>
<p>There is actually some content to the argument, but only if you look at operating system threads, e.g. the blocking IO vs. non-blocking IO debate. Here is again a lot of confusion in the wild! People often say that non-blocking / event-based IO is performing better without saying what they mean with performance. Actually blocking IO (thread/stack style) is nearly always better if you focus on low end-to-end latencies and non-blocking IO (event style) is basically always better if you look at the scalability of systems, e.g. with how many concurrent connections a web-server can deal for example. For the latter case have a look at <a href="https://en.wikipedia.org/wiki/C10k_problem">C10k problem</a>. The term was coined in 1999 by Dan Kegel. For many web applications end-to-end latencies below 100ms do not matter, but being able to serve more than 10k customers per instance of the web-server does matter. This is why many people focus on non-blocking event based systems.</p>
<p>But this is one of the few cases where you can eat the cake and have it, too! as outlined in <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.20.464">Cooperative Task Management without Manual Stack Management or, Event-driven Programming is Not the Opposite of Threaded Programming</a>. You can keep the nice programming style of blocking IO without paying the price of operating system threads by using fibers!</p>
<h3 id="should-jvm-support-continuations-natively">Should the JVM support natively continuations and/or the tail-call optimization?</h3>
<p>Having a real stack data-structure like the JVM does at runtime and not only having a <em>semantic</em> stack that is “just” part of the programming language specification, but “compiled away” via the compiler (or optimized away like in the <a href="http://www.drdobbs.com/jvm/tail-call-optimization-and-java/240167044">tail-call optimization</a> (TCO)) has its advantages, especially when debugging running programs or printing log statements into log files that help you later in production to understand what your program did in certain problem scenarios that you need to analyze.</p>
<p>In Java on the JVM the runtime stack can be used in log statements and stack-traces can be printed that show you exactly the call-stack how you arrived where you are. You will see in code that makes heavy use of closures that stack traces become rapidly useless, because you introduce a non-locality of where you define the code to execute and where in the program at a later stage you actually execute it. In a similar way in implementations that compile the stack away or optimize it away the runtime environment cannot support you any longer in providing meaningful context for stack-traces or similar.</p>
<p>Another area to watch out for are standard <code>try-catch-finally</code> constructs, because this construct relies on the stack! Somewhere further down the stack an exception is thrown and caught further up the stack. Now I am not a compiler expert and I believe that there are ways around this problem even without using a real stack data structure in the runtime environment, but I guess the world becomes more difficult then.</p>
<section class="roundedBorder">
<p><a name="actors"><strong>Actors</strong></a></p>
<p>In an actor system that uses fine-grained actors you throw away the advantages of the stack without need! In my opinion, the reason of why actor systems with fine-grained actors proclaim the <a href="https://www.infoq.com/presentations/erlang-reliable-services">Let It Crash!</a> slogan is, because they do not have any other choice!! And they make a virtue out of necessity.</p>
<p>If you do not have a stack that explains you where you are in your program at runtime you cannot make use of a <code>try-catch-finally</code> construct. The state that is normally on the stack is in some <code>queues</code> (I will talk later about the fact that program state needs to be somewhere; if in a Java program some of the state lives on the stack then in other languages or paradigms where you do not make use of the stack that state needs to exist elsewhere; options are the (static) flow-networks in flow-based programming or explicit or implicit queues) and <code>try-catch-finally</code> does not work with the state in queues.</p>
<p>The goal of any anomalous state handling mechanism like <code>try-catch-finally</code> or “Let It Crash!” (I actually only know of one third way, which is the Common Lisp <a href="https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node312.html">Condition System</a>, which also uses the stack) is to get back to a program state at runtime that is fully known to the human software developer and based on which he can reason about how to continue.</p>
<p>The <code>try-catch-finally</code> causes some sort of <code>reset</code> and clean-up of the program state to a well-known state (beware of left over state that you keep on the heap!! that perhaps does not get automatically cleaned up and may bite you later) that is (should be) the same as when you arrived at that stack position the first time. You lose all references to objects and stack frames further down the stack and they get garbage collected.</p>
<p>In a language that uses fine-grained actors after arriving at some anomalous program state you also need to make sure to continue any further computation from a well-known start state. This is where “Let It Crash!” comes in. One actor that notices an anomalous program state kills itself and communicates that fact via <a href="http://learnyousomeerlang.com/errors-and-processes">links</a> and <a href="http://learnyousomeerlang.com/supervisors">supervisors</a> to the other actors that participate in the overall computation and the supervisors take care to take the whole program down and restart with a clean slate. This is the mechanism by which fine-grained actor systems achieve the same result as with a <code>try-catch-finally</code>.</p>
<p>But while <code>try-catch-finally</code> feels like a scalpel the “Let It Crash!” feels like a hammer! This is one of the main reasons why I am very sceptical of fine-grained actor systems and I prefer to follow the line of thought of Peter van Roy that he outlines in <a href="https://www.info.ucl.ac.be/~pvr/flopsPVRarticle.pdf">Convergence in Language Design: A Case of Lightning Striking Four Times in the Same Place</a>:</p>
<ul>
<li>The inner layer is a strict functional language.</li>
<li>The second layer adds deterministic concurrency. Deterministic concurrency is sometimes called declarative or dataflow concurrency. It has the property that it cannot have race conditions. This form of concurrency is as simple to reason in as functional programming.</li>
<li>The third layer adds asynchronous message passing. This leads to a simple message-passing model in which concurrent entities send messages asynchronously. This is the actor layer.</li>
<li>The fourth layer adds global shared mutable state.</li>
</ul>
<p>Each lower layer behaves greedy in the same way as a <code>*</code> operator in a regular expression is a <a href="http://www.rexegg.com/regex-quantifiers.html">greedy</a> operator. You only use higher levels iff and only iff you cannot achieve your goals by staying in the lower layer.</p>
<p>You still need actors in that design philosophy (the third layer), but they will be large or even huge and you typically create them in a highly resilient form like in <a href="https://www.cs.cornell.edu/fbs/publications/SMSurvey.pdf">Implementing Fault-Tolerant Services Using the State Machine Approach</a> with redundancy via <a href="https://raft.github.io/slides/raftuserstudy2013.pdf">log-replication</a> and crash recovery.</p>
<p>On the second layer you can still keep the stack and stay in the <code>try-catch-finally</code> world for simpler human reasoning around anomalous program states.</p>
</section>
<p>I’ve also read that the JVM security and sandbox models heavily depend on the stack, but I don’t know more details about that.</p>
<p>All in all I believe that we might live in the best world with Java and the JVM keeping its stack data structure in the runtime environment and using libraries like Quasar to use continuations nevertheless.</p>
<h2 id="style-examples">Style Examples</h2>
<p>We will use a very contrived example in order to focus on the different techniques and not letting the complexity of the example get into the way of understanding the paradigms.</p>
<p>I will use the <a href="https://learn.sparkfun.com/tutorials/logicblocks-experiment-guide/4-combinational-logic">logic block</a> notation of <a href="http://en.wikipedia.org/wiki/Combinational_logic">combinational logic</a> in electronics to describe the working example. If you are not familiar with this notation then simply look at the following tutorial: <a href="https://manual.eg.poly.edu/index.php/Digital_Logic" class="uri">https://manual.eg.poly.edu/index.php/Digital_Logic</a>. The only difference that I will make is that in my notation the input is at the bottom (not on the left) and the output will be at the top (not on the right).</p>
<figure>
<img src="data:image/jpeg;base64,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" />
</figure>
<p>This is a representation of a program that calculates the distance of a point in a <a href="http://en.wikipedia.org/wiki/Two-dimensional_space">Euclidean plane</a> from the origin according to the formula of <a href="http://en.wikipedia.org/wiki/Pythagorean_theorem">Pythagoras</a>. The input X and Y at the bottom may either come from a human user typing the values on the console or be hard coded in the program. We will look at both possibilities.</p>
<p>This notation has the advantage that it shows the essence of the calculation and also shows the degrees of freedom that in principle exist in the solution, e.g. the <a href="https://en.wikipedia.org/wiki/Commutative_property">commutative property</a> that it does not matter if you calculate the <span class="math inline"><em>x</em><sup>2</sup></span> or the <span class="math inline"><em>y</em><sup>2</sup></span> first. In any concrete implementation running on a single CPU core the implementation has to choose a sequence, though.</p>
<p>The other degree of freedom is if and how we use the programming language stack for implementing the solution. At least for me it took a long time to really understand how the <em><strong>semantic</strong> stack</em> gets into my way and confuses my thinking around <a href="http://www.balisage.net/Proceedings/vol3/print/Kay01/BalisageVol3-Kay01.html">push vs. pull</a> or <a href="http://berb.github.io/diploma-thesis/original/043_threadsevents.html">thread based vs. event based</a> architectures. Have a look at <a href="#structured-programming-and-semantic-stacks"><strong>Structured Programming and Semantic Stacks</strong></a> above.</p>
<section class="roundedBorder">
<p><strong>Play with adapting the log levels in logback.xml</strong></p>
When running the examples try using different log levels in logback.xml to see either more or less detail of what is going on as you see fits.
</section>
<h3 id="stack-traces">Single threaded</h3>
<p>The style examples are all single-threaded but may use multiple fibers. You run them via the unit tests defined in <code>control.structures.examples.GivenAnEuclideanPoint</code>. Please pay attention to the logging output. In there you should notice the name of the JVM/operating system thread on which each piece of computation is running which should be <code>[main]</code> in all cases. This means that even if sometimes the code looks like multi-threaded code it is not. It is using fibers.</p>
<p>Please <strong>do not worry about the exception stacks</strong> that are printed in the logging output. I print the stack-traces at certain places to show you the structure of the program stack at that point at runtime.</p>
<h3 id="plain-function-instruction-by-instruction-with-local-variables">Plain function instruction by instruction with local variables</h3>
<p>The problem is so simple that you can implemented it as a single function. You can implement it instruction by instruction and use local variables to give names to intermediate results to make the computation for a human a bit more readable:</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">double</span> <span class="fu">pythagoras_function_call_with_local_variables</span>(<span class="dt">double</span> x, <span class="dt">double</span> y) {
<span class="dt">double</span> xsquared = <span class="fu">times</span>(x, x);
<span class="dt">double</span> ysquared = <span class="fu">times</span>(y, y);
<span class="dt">double</span> squaresum = <span class="fu">plus</span>(xsquared, ysquared);
<span class="dt">double</span> distance = <span class="fu">sqrt</span>(squaresum);
<span class="kw">return</span> distance;
}</code></pre></div>
<p>I’ve used functions like <code>times</code> and <code>plus</code> and <code>sqrt</code> in all places where the logic block notation contains a function block just to stay as close as possible to the diagram. In this implementation I’ve chosen to perform the <span class="math inline"><em>x</em><sup>2</sup></span> first before the <span class="math inline"><em>y</em><sup>2</sup></span> but the correctness of the solution would of course not suffer from changing the order around here.</p>
<h3 id="function-calls-per-level">Function calls per level</h3>
<p>You could perform the computation without local variables and simply replace all places in the example above where we used a local variable with the direct function call:</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">double</span> <span class="fu">pythagoras_function_calls_per_level</span>(<span class="dt">double</span> x, <span class="dt">double</span> y) {
<span class="kw">return</span> <span class="fu">sqrt</span>(<span class="fu">plus</span>(<span class="fu">times</span>(x,x),<span class="fu">times</span>(y,y)));
}</code></pre></div>
<p>It is interesting to note that the human readability changes from bottom-up to top-down (in the sense of the logic block diagram). For the machine nothing changes.</p>
<p>You might ask yourself if a stack is built up by this example in the case that the <code>times</code> function is called. The answer is “no”, there are no additional stack frames built up as can be seen by the stack traces:</p>
<pre><code>[main] DEBUG c.structures.examples.Pythagoras - times - stack java.lang.Exception: stack
at control.structures.examples.Pythagoras.times(Pythagoras.java:334)
at control.structures.examples.Pythagoras.pythagoras_function_calls_per_level(Pythagoras.java:45)</code></pre>
<p>Compared to the example above this is the same stack depth:</p>
<pre><code>[main] DEBUG c.structures.examples.Pythagoras - times - stack java.lang.Exception: stack
at control.structures.examples.Pythagoras.times(Pythagoras.java:334)
at control.structures.examples.Pythagoras.pythagoras_function_call_with_local_variables(Pythagoras.java:34)</code></pre>
<p>The reason for that is that Java uses <a href="https://en.wikipedia.org/wiki/Eager_evaluation">eager evaluation</a> call-by-value left to right of its parameters to functions as its <a href="https://en.wikipedia.org/wiki/Evaluation_strategy">evaluation strategy</a>. There are programming languages like <a href="https://en.wikipedia.org/wiki/Haskell_%28programming_language%29">Haskell</a> that follow a different model, e.g. lazy evaluation / call-by-need.</p>
<h3 id="function-calls-per-level-with-lazy-call-by-need-evaluation">Function calls per level with lazy / call-by-need evaluation</h3>
<p>You can simulate the call-by-need lazy evaluation in Java by using lambdas as follows:</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"> <span class="kw">public</span> <span class="dt">static</span> Supplier<<span class="bu">Double</span>> <span class="fu">plus_by_need</span>(Supplier<<span class="bu">Double</span>> a, Supplier<<span class="bu">Double</span>> b) {
<span class="kw">return</span> () -> {logger.<span class="fu">debug</span>(<span class="st">"plus_by_need"</span>); <span class="kw">return</span> a.<span class="fu">get</span>() + b.<span class="fu">get</span>();};
}
<span class="kw">public</span> <span class="dt">static</span> Supplier<<span class="bu">Double</span>> <span class="fu">sqrt_by_need</span>(Supplier<<span class="bu">Double</span>> a) {
<span class="kw">return</span> () -> {logger.<span class="fu">debug</span>(<span class="st">"sqrt_by_need"</span>); <span class="kw">return</span> <span class="bu">Math</span>.<span class="fu">sqrt</span>(a.<span class="fu">get</span>());};
}
<span class="kw">public</span> <span class="dt">static</span> <span class="dt">double</span> <span class="fu">pythagoras_function_calls_per_level_by_need</span>(<span class="dt">double</span> x, <span class="dt">double</span> y) {
<span class="kw">return</span> <span class="fu">sqrt_by_need</span>(<span class="fu">plus_by_need</span>(() -> <span class="fu">times</span>(x,x), () -> <span class="fu">times</span>(y,y))).<span class="fu">get</span>();
}</code></pre></div>
<p>Once you do that you’ll also see a call stack several levels deep until the inner-most function, the <code>times</code> function is called:</p>
<pre><code>[main] DEBUG c.structures.examples.Pythagoras - lambda$45 - sqrt_by_need
[main] DEBUG c.structures.examples.Pythagoras - lambda$44 - plus_by_need
[main] DEBUG c.structures.examples.Pythagoras - times - stack java.lang.Exception: stack
at control.structures.examples.Pythagoras.times(Pythagoras.java:341)
at control.structures.examples.Pythagoras.lambda$0(Pythagoras.java:52)
at control.structures.examples.Pythagoras.lambda$44(Pythagoras.java:350)
at control.structures.examples.Pythagoras.lambda$45(Pythagoras.java:358)
at control.structures.examples.Pythagoras.pythagoras_function_calls_per_level_by_need(Pythagoras.java:52)</code></pre>
<section class="roundedBorder">
<p><strong>Call-by-need in Java 8 for simplified logging</strong></p>
<p>It is worthwhile to note that Java 8 makes use of this call-by-need evaluation in its logging framework to avoid the performance penalty of evaluating logging statements that may not be needed if the logging level is set to a value that does not require an output to be generated (the example is taken from <a href="https://garygregory.wordpress.com/2015/09/16/a-gentle-introduction-to-the-log4j-api-and-lambda-basics/">here</a>).</p>
<p>Often you see statements like the following in performance critical code:</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"><span class="co">// Guards against calling compute</span>
<span class="kw">if</span> (logger.<span class="fu">isDebugEnabled</span>()) {
logger.<span class="fu">debug</span>(<span class="st">"This {} and {} with {} "</span>, <span class="kw">this</span>, that, <span class="fu">compute</span>());
}</code></pre></div>
<p>In Java 8 you can use the following call-by-need logging construct to avoid the overhead of the computation in case that the debug log-level is not turned on:</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"><span class="co">// Uses Java 8 lambdas to build arguments on demand</span>
logger.<span class="fu">debug</span>(<span class="st">"I am logging that {} happened."</span>, () -> <span class="fu">compute</span>());</code></pre></div>
<p>The key expression is worth repeating:</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java">() -> <span class="fu">compute</span>()</code></pre></div>
</section>
<p>You could call the call-by-need style a <strong><em>pull-based</em></strong> (thread/stack style) approach, because at the top-level where a result is needed it “pulls” all relevant computations further “down” into the picture. Pull based basically means a top-down approach if you look at the logic block diagram. In that regard also the “function calls per level” solution is a pull-based approach.</p>
<h3 id="cps-style">Continuation Passing Style (CPS)</h3>
<p><a href="https://en.wikipedia.org/wiki/Continuation-passing_style">Continuation Passing Style</a> (CPS) is a style that is relatively seldom used by humans, but quite often used by compilers (see: <a href="https://www.amazon.com/Compiling-Continuations-Andrew-W-Appel/dp/052103311X">Compiling with Continuations</a>).</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">double</span> <span class="fu">pythagoras_continuation_passing_style</span>(<span class="dt">double</span> x, <span class="dt">double</span> y) {
<span class="dt">final</span> <span class="bu">AtomicReference</span><<span class="bu">Double</span>> result = <span class="kw">new</span> <span class="bu">AtomicReference</span><<span class="bu">Double</span>>();
<span class="fu">times_cps</span>(x, x,
(<span class="bu">Double</span> i) -> <span class="fu">times_cps</span>(y, y,
(<span class="bu">Double</span> j) -> <span class="fu">plus_cps</span>(i, j,
(<span class="bu">Double</span> k) -> <span class="fu">sqrt_cps</span>(k,
(<span class="bu">Double</span> l) -> <span class="fu">identity</span>(l, result)
)
)
)
);
<span class="kw">return</span> result.<span class="fu">get</span>();
}
<span class="kw">public</span> <span class="dt">static</span> <span class="dt">void</span> <span class="fu">times_cps</span>(<span class="dt">double</span> a, <span class="dt">double</span> b, Consumer<<span class="bu">Double</span>> k) {
k.<span class="fu">accept</span>(a * b);
}
<span class="kw">public</span> <span class="dt">static</span> <span class="dt">void</span> <span class="fu">plus_cps</span>(<span class="dt">double</span> a, <span class="dt">double</span> b, Consumer<<span class="bu">Double</span>> k) {
k.<span class="fu">accept</span>(a + b);
}
<span class="kw">public</span> <span class="dt">static</span> <span class="dt">void</span> <span class="fu">sqrt_cps</span>(<span class="dt">double</span> a, Consumer<<span class="bu">Double</span>> k) {
k.<span class="fu">accept</span>(<span class="bu">Math</span>.<span class="fu">sqrt</span>(a));
}
<span class="kw">public</span> <span class="dt">static</span> <span class="dt">void</span> <span class="fu">identity</span>(<span class="dt">double</span> a, <span class="bu">AtomicReference</span><<span class="bu">Double</span>> result) {
result.<span class="fu">set</span>(a);
}</code></pre></div>
<p>It is worthwhile to note that in this variant you’re back to a bottom-up human readability mode. In addition you have to fix the order of what you compute first, either the <span class="math inline"><em>x</em><sup>2</sup></span> or the <span class="math inline"><em>y</em><sup>2</sup></span>.</p>
<p>It is also worthwhile to note how you have to adapt the two styles, e.g. if you want to get out a result from that computation. In that case you have to provide a function that does nothing, e.g. the <code>identity</code> function, but only puts the result into a holder variable like an <code>AtomicReference</code>. This does not have to be an <code>atomic</code> reference, I only used it because it is a standard <em>holder</em> type available in the standard JDK.</p>
<p>You also have to be aware that this style accumulates in the Java programming language a deep stack, e.g. you run the danger of running into a <code>StackOverflowError</code>. Languages that implement <a href="https://en.wikipedia.org/wiki/Tail_call">tail-call optimization</a> do not run into that problem. What I want to say is: this is a problem of the Java implementation and not a general conceptual problem with this approach (also have a look at <a href="#should-jvm-support-continuations-natively">Should the JVM support natively continuations and/or the tail-call optimization?</a> above):</p>
<pre><code>[main] DEBUG c.structures.examples.Pythagoras - identity - stack java.lang.Exception: stack
at control.structures.examples.Pythagoras.identity(Pythagoras.java:395)
at control.structures.examples.Pythagoras.lambda$49(Pythagoras.java:73)
at control.structures.examples.Pythagoras.sqrt_cps(Pythagoras.java:390)
at control.structures.examples.Pythagoras.lambda$48(Pythagoras.java:72)
at control.structures.examples.Pythagoras.plus_cps(Pythagoras.java:385)
at control.structures.examples.Pythagoras.lambda$47(Pythagoras.java:71)
at control.structures.examples.Pythagoras.times_cps(Pythagoras.java:380)
at control.structures.examples.Pythagoras.lambda$2(Pythagoras.java:70)
at control.structures.examples.Pythagoras.times_cps(Pythagoras.java:380)
at control.structures.examples.Pythagoras.pythagoras_continuation_passing_style(Pythagoras.java:69)</code></pre>
<p>Basically if you have a function that takes input arguments <code>i1</code> until <code>in</code> and produces a result of type <code>T</code>:</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">double</span> <span class="fu">fn</span>(<span class="dt">double</span> i1, <span class="dt">double</span> i2, <span class="dt">double</span> in) {
<span class="kw">return</span> <span class="fl">0.0</span>;
}</code></pre></div>
<p>Then, in order to arrive at the CPS variant of that function you convert it into a function that has no return value, but instead has one input parameter more, which is a function that again does not produce any result but only consumes one argument of type <code>T</code>:</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">void</span> <span class="fu">fn_cps</span>(<span class="dt">double</span> i1, <span class="dt">double</span> i2, <span class="dt">double</span> in, Consumer<<span class="bu">Double</span>> k) {
k.<span class="fu">accept</span>(<span class="fl">0.0</span>);
}</code></pre></div>
<p>The first time I came across this transformation was in <a href="http://www.ccs.neu.edu/racket/pubs/ase2001-gfkf.pdf">Automatically Restructuring Programs for the Web</a>. This is from a time when many people still created their web-applications via <a href="https://en.wikipedia.org/wiki/Common_Gateway_Interface">Common Gateway Interface</a> (CGI). You do not have to put any brain-power into that transformation. It is purely mechanical and it can be done by compilers or by byte-code-manipulation or any other automatic tooling. Have a look at <a href="#continuations-and-web-applications">Continuations and web-applications</a> above for more details.</p>
<p>You could call the CPS style a <strong><em>push-based</em></strong> (event-driven) approach, because you start it from the bottom of the logic block diagram.</p>
<p>This push (event-driven) vs. pull (thread/stack style) is only happening in the head of a human. On a single core CPU both approaches will more or less exactly do the same things in the same sequence no matter which approach you use. The machine does not know anything about push vs. pull, only about sequences of CPU instructions. The distinction between push vs. pull happens due to the fact that humans use this vocabulary when they think about the logic block diagram picture either from bottom-to-top or from top-to-bottom.</p>
<p>Please also note that the CPS transform is <strong>contagious</strong>. It behaves like a virus. If you start to convert your program into CPS-style at one place you will soon end-up rewriting and transforming your whole program.</p>
<h3 id="data-flow-using-data-flow-variables">Data-flow using data-flow variables</h3>
<p>The <a href="http://docs.paralleluniverse.co/quasar/">Quasar</a> library comes with a <a href="http://docs.paralleluniverse.co/quasar/#dataflow-reactive-programming">dataflow</a> implementation. The construct <code>Val</code> creates a dataflow variable (see Peter van Roy: <a href="https://www.info.ucl.ac.be/~pvr/VanRoyHaridi2003-book.pdf">Concepts, Techniques, and Models of Computer Programming: Distributed Programming</a>; single assignment variable) that then can be passed around in your program.</p>
<section class="roundedBorder">
<p><strong>Dataflow variables in Java 8</strong></p>
<p>Since Java 8 the JDK also has an implementation of a dataflow variable, the <a href="http://www.nurkiewicz.com/2013/05/java-8-definitive-guide-to.html">CompletableFuture</a>. As the CompletableFuture will only work with operating system threads, but not with Quasar fibers we will use the Quasar <code>Val</code> implementation.</p>
<p>It is worthwhile to note that traditionally actor systems like Erlang did not come along with dataflow variables. The <a href="http://akka.io/">Akka</a> JDK actor framework actually introduced <a href="http://doc.akka.io/docs/akka/2.3-M1/scala/dataflow.html">Oz-style dataflow concurrency</a> with dataflow variables (sometimes also called <a href="https://en.wikipedia.org/wiki/Futures_and_promises">promises</a>) to enable a complementary way of writing synchronous-looking code that in reality is asynchronous.</p>
Peter van Roy and team added dataflow variables to Erlang in the Derflow project as part of <a href="https://syncfree.lip6.fr/">SyncFree</a> project and describe it in <a href="https://www.info.ucl.ac.be/~pvr/erlang14cameraready.pdf">Derflow: Distributed Deterministic Dataflow Programming for Erlang</a> so that this convenient style can also be used in Erlang.
</section>
<p>The construct <code>Var</code> creates a “continuous computation`. Whenever the inputs change the continuous computation re-computes and updates its outputs. The example looks like this:</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">double</span> <span class="fu">pythagoras_dataflow</span>(<span class="dt">double</span> x, <span class="dt">double</span> y) {
Val<<span class="bu">Double</span>> vx = <span class="kw">new</span> Val<>();
Val<<span class="bu">Double</span>> vy = <span class="kw">new</span> Val<>();
Var<<span class="bu">Double</span>> distance = <span class="fu">pythagoras_dataflow_flownetwork_definition</span>(vx, vy);
vx.<span class="fu">set</span>(x);
vy.<span class="fu">set</span>(y);
<span class="kw">try</span> {
<span class="kw">return</span> distance.<span class="fu">get</span>();
} <span class="kw">catch</span> (SuspendExecution | <span class="bu">InterruptedException</span> e) {
<span class="kw">return</span> -<span class="fl">1.0</span>;
}
}
<span class="kw">public</span> <span class="dt">static</span> Var<<span class="bu">Double</span>> <span class="fu">pythagoras_dataflow_flownetwork_definition</span>(Val<<span class="bu">Double</span>> x, Val<<span class="bu">Double</span>> y) {
Var<<span class="bu">Double</span>> xsquared = <span class="kw">new</span> Var<>(() -> <span class="fu">times</span>(x.<span class="fu">get</span>(), x.<span class="fu">get</span>()) );
Var<<span class="bu">Double</span>> ysquared = <span class="kw">new</span> Var<>(() -> <span class="fu">times</span>(y.<span class="fu">get</span>(), y.<span class="fu">get</span>()) );
Var<<span class="bu">Double</span>> squaresum = <span class="kw">new</span> Var<>(() -> xsquared.<span class="fu">get</span>() + ysquared.<span class="fu">get</span>());
<span class="kw">return</span> <span class="kw">new</span> Var<>(() -> <span class="bu">Math</span>.<span class="fu">sqrt</span>(squaresum.<span class="fu">get</span>()));
}</code></pre></div>
<section class="roundedBorder">
<p><strong>Incremental Computing: (Functional) Reactive Programming & Dataflow Programming & Complex Event Processing & Event Stream Processing</strong></p>
<p>This dataflow solution is a version of (functional) reactive programming (<a href="https://en.wikipedia.org/wiki/Functional_reactive_programming">FRP</a>). The following video by <a href="http://evan.czaplicki.us/">Evan Czaplicki</a>, the creator of the <a href="http://elm-lang.org/">Elm</a> programming language, gives a very good overview of the different styles of FRP in the wild, where <a href="http://reactivex.io/">Rx</a> style reactive-programming, like in <a href="https://github.com/ReactiveX/RxJava">RxJava</a>, is just one of them: <a href="https://www.youtube.com/watch?v=Agu6jipKfYw">Controlling Time and Space: understanding the many formulations of FRP</a>.</p>
<p>The book <a href="https://leanpub.com/dataflowbook">Dataflow and Reactive Programming Systems</a> by Matt Carkci is another good source to get an overview of the design choices you have to make when you implement data-flow reactive programming systems.</p>
<p>FRP is a version of <a href="https://en.wikipedia.org/wiki/Incremental_computing">incremental computing</a> and if you are interested in this topic I recommend that you follow some of the links here:</p>
<ul>
<li><a href="http://web.mit.edu/~axch/www/">Alexey Radul</a>: The art of the propagator
<ul>
<li><a href="http://dspace.mit.edu/handle/1721.1/44215">paper</a></li>
<li><a href="https://vimeo.com/12184930">presentation/video</a></li>
<li>Clojure: <a href="https://github.com/tgk/propaganda">propaganda library</a>
<ul>
<li><a href="https://www.youtube.com/watch?v=JXOOO9MLvhs&feature=youtu.be">presentation/video</a></li>
<li><a href="http://tgk.github.io/2014/01/getting-hot-with-propagators.html">Getting hot with propagators</a></li>
<li><a href="http://tgk.github.io/2014/01/taking-propagators-to-the-next-level.html">Taking propagators to the next level</a></li>
</ul></li>
</ul></li>
<li>Umut Acar: <a href="http://www.umut-acar.org/self-adjusting-computation">Self-Adjusting Computation</a></li>
<li>Bidirectional Programming (Lenses): <a href="http://www.cis.upenn.edu/~bcpierce/papers/index.shtml#Lenses">papers</a> by Benjamin Pierce</li>
<li><a href="https://en.wikipedia.org/wiki/Dataflow_programming">Dataflow Programming</a>
<ul>
<li><a href="https://leanpub.com/dataflowbook">Dataflow and Reactive Programming Systems</a></li>
<li><a href="http://ptolemy.eecs.berkeley.edu/ptolemyII/index.htm">Ptolemy II</a>: The Ptolemy Project has developed directors supporting process networks (PN), discrete-events (DE), dataflow (SDF), synchronous/reactive(SR), rendezvous-based models, 3-D visualization, and continuous-time models.</li>
<li><a href="https://bitbucket.org/ohuadevelopment/ohua">Ohua</a>: Ohua is an implementation of the stateful functional programming model along with a dataflow execution engine as a runtime system. It is developed by Sebastian Ertel. He is a researcher at the university of Dresden and created the Ohua framework in several incarnations. Some parts of a previous version of Ohua are also described in: <a href="https://www.amazon.com/Flow-Based-Programming-2nd-Application-Development/dp/1451542321">Flow-Based Programming, 2nd Edition: A New Approach to Application Development</a>.</li>
<li><a href="https://www.youtube.com/watch?v=Agu6jipKfYw">Controlling Time and Space: understanding the many formulations of FRP</a> by Evan Czaplicki already mentioned above.
<ul>
<li>The best summary of <a href="https://en.wikipedia.org/wiki/Functional_reactive_programming">Functional Reactive Programming</a> I’ve found so far is the video by Evan Czaplicki, but the paper <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.94.3398">Embedding dynamic dataflow in a call-by-value language</a> also describes very well how <a href="http://docs.racket-lang.org/frtime/index.html">FrTime</a> implements the challenges in the Scheme programming language.</li>
</ul></li>
<li><a href="http://reactivex.io/">Reactive Extensions (Rx)</a>, in Java: <a href="https://github.com/ReactiveX/RxJava">RxJava</a> (by Netflix). The Microsoft documentation about Rx is best: <a href="http://www.introtorx.com/">Introduction to Rx</a>, and it can be one-to-one transferred to understanding RxJava.</li>
</ul></li>
</ul>
<p>Just as a side remark, the above implementation is very much what <a href="https://en.wikipedia.org/wiki/Complex_event_processing">Complex Event Processing</a> (CEP) frameworks do under the hood. In addition to the above <em>operator</em> or <em>primitive</em> style they may allow you to formulate your flow-networks via a language similar to <a href="https://en.wikipedia.org/wiki/Event_stream_processing">SQL</a>.</p>
This is also relevant for the argument of threads vs. events, because as shown in <a href="https://www.irif.univ-paris-diderot.fr/~jch/research/popl12.pdf">Sequentialising a concurrent program using continuation-passing style</a> you go from threads to events via the continuation passing style transformation (there is also a paper around this topic from the same author: <a href="http://arxiv.org/pdf/1011.4558.pdf">Continuation-Passing C: Compiling threads to events through continuations</a>).
</section>
<h3 id="communicating-sequential-processes-csp">Communicating Sequential Processes (CSP)</h3>
<p><a href="https://en.wikipedia.org/wiki/Communicating_sequential_processes">Communicating Sequential Processes</a> (CSP) is a style originally proposed by <a href="https://en.wikipedia.org/wiki/Tony_Hoare">Tony Hoare</a> and described in his <a href="https://www.amazon.com/Communicating-Sequential-Processes-International-Computing/dp/0131532715">book</a> (also available <a href="http://www.usingcsp.com/cspbook.pdf">online</a>).</p>
<p>The example looks like this:</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">double</span> <span class="fu">pythagoras_communicating_sequential_processes_style</span>(<span class="dt">double</span> x, <span class="dt">double</span> y) {
<span class="dt">final</span> <span class="bu">Channel</span><<span class="bu">Double</span>> xc = <span class="bu">Channels</span>.<span class="fu">newChannel</span>(<span class="dv">1</span>, OverflowPolicy.<span class="fu">BLOCK</span>);
<span class="dt">final</span> <span class="bu">Channel</span><<span class="bu">Double</span>> xc_square = <span class="bu">Channels</span>.<span class="fu">newChannel</span>(<span class="dv">1</span>, OverflowPolicy.<span class="fu">BLOCK</span>);
<span class="at">@SuppressWarnings</span>(<span class="st">"unused"</span>)
<span class="dt">final</span> Fiber<<span class="bu">Void</span>> f1 = <span class="fu">fiber</span>(() -> {
<span class="kw">while</span>(!xc.<span class="fu">isClosed</span>()) {
<span class="bu">Double</span> receive = xc.<span class="fu">receive</span>();
logger.<span class="fu">debug</span>(<span class="st">"CSP-style: xc.receive(): "</span> + receive);
xc_square.<span class="fu">send</span>(receive * receive);
}
xc_square.<span class="fu">close</span>();
});
<span class="dt">final</span> <span class="bu">Channel</span><<span class="bu">Double</span>> yc = <span class="bu">Channels</span>.<span class="fu">newChannel</span>(<span class="dv">1</span>, OverflowPolicy.<span class="fu">BLOCK</span>);
<span class="dt">final</span> <span class="bu">Channel</span><<span class="bu">Double</span>> yc_square = <span class="bu">Channels</span>.<span class="fu">newChannel</span>(<span class="dv">1</span>, OverflowPolicy.<span class="fu">BLOCK</span>);
<span class="at">@SuppressWarnings</span>(<span class="st">"unused"</span>)
<span class="dt">final</span> Fiber<<span class="bu">Void</span>> f2 = <span class="fu">fiber</span>(() -> {
<span class="kw">while</span>(!yc.<span class="fu">isClosed</span>()) {
<span class="bu">Double</span> receive = yc.<span class="fu">receive</span>();
logger.<span class="fu">debug</span>(<span class="st">"CSP-style: yc.receive(): "</span> + receive);
yc_square.<span class="fu">send</span>(receive * receive);
}
yc_square.<span class="fu">close</span>();
});
<span class="dt">final</span> <span class="bu">Channel</span><<span class="bu">Double</span>> square_sum = <span class="bu">Channels</span>.<span class="fu">newChannel</span>(<span class="dv">1</span>, OverflowPolicy.<span class="fu">BLOCK</span>);
<span class="at">@SuppressWarnings</span>(<span class="st">"unused"</span>)
<span class="dt">final</span> Fiber<<span class="bu">Void</span>> f3 = <span class="fu">fiber</span>(() -> {
<span class="kw">for</span>(;;){
<span class="kw">if</span>(xc_square.<span class="fu">isClosed</span>() || yc_square.<span class="fu">isClosed</span>())
<span class="kw">break</span>;
<span class="bu">Double</span> p1 = xc_square.<span class="fu">receive</span>();
<span class="bu">Double</span> p2 = yc_square.<span class="fu">receive</span>();
logger.<span class="fu">debug</span>(<span class="st">"CSP-style: p1, p2: "</span> + p1 + <span class="st">", "</span> + p2);
square_sum.<span class="fu">send</span>(p1 + p2);
}
xc_square.<span class="fu">close</span>();
yc_square.<span class="fu">close</span>();
square_sum.<span class="fu">close</span>();
});
<span class="dt">final</span> <span class="bu">Channel</span><<span class="bu">Double</span>> result = <span class="bu">Channels</span>.<span class="fu">newChannel</span>(<span class="dv">1</span>, OverflowPolicy.<span class="fu">BLOCK</span>);
<span class="at">@SuppressWarnings</span>(<span class="st">"unused"</span>)
<span class="dt">final</span> Fiber<<span class="bu">Void</span>> f4 = <span class="fu">fiber</span>(() -> {
<span class="kw">while</span>(!square_sum.<span class="fu">isClosed</span>()) {
<span class="bu">Double</span> p = square_sum.<span class="fu">receive</span>();
logger.<span class="fu">debug</span>(<span class="st">"CSP-style: square_sum.receive(): "</span> + p);
result.<span class="fu">send</span>(<span class="bu">Math</span>.<span class="fu">sqrt</span>(p));
}
result.<span class="fu">close</span>();
});
<span class="dt">final</span> <span class="bu">AtomicReference</span><<span class="bu">Double</span>> r = <span class="kw">new</span> <span class="bu">AtomicReference</span><>();
<span class="at">@SuppressWarnings</span>(<span class="st">"unused"</span>)
<span class="dt">final</span> Fiber<<span class="bu">Void</span>> f5 = <span class="fu">fiber</span>(() -> {
yc.<span class="fu">send</span>(y);
xc.<span class="fu">send</span>(x);
r.<span class="fu">set</span>(result.<span class="fu">receive</span>());
});
<span class="kw">return</span> r.<span class="fu">get</span>();
}</code></pre></div>
<p>The example looks more complicated than it actually is. In the end you create channels that are used like variables to which you assign values and from which you read values between the calculation units.</p>
<section class="roundedBorder">
<p><a name="core.async"><strong>Clojure(Script) core.async</strong></a></p>
<p>I would like to mention the <a href="https://github.com/clojure/core.async"><code>core.async</code></a> Clojure(Script) library that allows you to use this style even in single threaded environments like JavaScript.</p>
<p>Internally core.async converts the language that makes use of the semantic stack into <a href="https://en.wikipedia.org/wiki/Static_single_assignment_form">static single assignment form</a> (SSA). This is a state machine version of the code and the details are quite well explained in <a href="http://hueypetersen.com/posts/2013/08/02/the-state-machines-of-core-async/">the-state-machines-of-core-async</a>. Besides the inventor of Clojure, <a href="https://www.infoq.com/author/Rich-Hickey">Rich Hickey</a>, the second person contributing to core.async was <a href="https://github.com/halgari">Timothy Baldridge</a>. In the following stack-overflow thread people explain the details of this state machine transformation and give further links: <a href="http://stackoverflow.com/questions/17614813/clojure-inversion-of-control-macro-timothy-baldridge">clojure-inversion-of-control-macro</a>. Here is a presentation/video by Timothy Baldrige: <a href="https://www.youtube.com/watch?v=R3PZMIwXN_g">Core Async Go Macro Internals - Part I</a>. Clojure uses macros to implement this compiler step and they call it inversion-of-control (also have a look <a href="http://www.balisage.net/Proceedings/vol3/print/Kay01/BalisageVol3-Kay01.html#d119811e501">here</a> where they talk about “<a href="https://en.wikipedia.org/wiki/Michael_A._Jackson">Jackson</a> Structured Programming and the Concept of Inversion”; this is the same meaning of inversion as the use in the core.async lingo), not to be confused with dependency injection!</p>
<p>As Java and the JVM do not support <a href="http://www.drdobbs.com/jvm/tail-call-optimization-and-java/240167044">tail-call optimization</a> (TCO) you can run into stack-overflows with recursive functions. Typically you solve this in Clojure with the <a href="https://clojuredocs.org/clojure.core/recur"><code>recur</code></a> construct or by <a href="http://jakemccrary.com/blog/2010/12/06/trampolining-through-mutual-recursion/"><code>trampolining</code></a>. But the following blog post explains how you can achieve a stack-less version of a recursive algorithm that does not run into a stack-overflow by using core.async: <a href="http://programming-puzzler.blogspot.de/2013/07/stackless-clojure-with-coreasync_7.html">stackless-clojure-with-coreasync</a>.</p>
<p>The following presentation/video shows how to visualize the SSA transform of core.async via a graph visualization library <a href="https://github.com/aysylu/loom">loom</a>: <a href="http://tm.durusau.net/?p=48953" class="uri">http://tm.durusau.net/?p=48953</a> (it is her third example, e.g. you will have to watch it towards the last third of the video).</p>
Core.async seems to really pick up in HTML5 web development by using <a href="https://github.com/clojure/clojurescript">ClojureScript</a>. ClojureScript compiles Clojure into JavaScript. In JavaScript you do not have real threads (well, recently they introduced <a href="https://en.wikipedia.org/wiki/Web_worker">web workers</a> into the browser, but these are heavyweight constructs) and therefore core.async allows you to write code as if you had real threads and the library does the hard work for you to convert it into sequential code. A simple/trivial example of what you can do with core.async and its green-threads can be seen here: <a href="http://swannodette.github.io/2013/08/02/100000-processes">10000-processes</a>. The magic happens within the <code>go</code> blocks.
</section>
<h3 id="event-driven-observer-pattern-style">Event Driven Observer Pattern Style</h3>
<p>The following example uses the standard <code>java.util.Observable</code> and <code>java.util.Observer</code> constructs from the standard JDK. The <code>java.util.Observer</code> is according to the rules of JDK8 a <a href="https://www.oreilly.com/learning/java-8-functional-interfaces">functional interface</a>, e.g. you can use Lambda expressions anywhere where an <code>Observer</code> interface is required.</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">double</span> <span class="fu">pythagoras_event_driven_observer_pattern_style</span>(<span class="dt">double</span> x, <span class="dt">double</span> y) {
logger.<span class="fu">info</span>(<span class="st">"-----------------------------------------------------------------------------"</span>);
logger.<span class="fu">info</span>(<span class="st">"pythagoras_event_driven_observer_pattern_style"</span>);
DoubleObservable xo = <span class="kw">new</span> <span class="fu">DoubleObservable</span>();
DoubleObservable xo_square = <span class="kw">new</span> <span class="fu">DoubleObservable</span>();
xo.<span class="fu">addObserver</span>((java.<span class="fu">util</span>.<span class="fu">Observable</span> o, <span class="bu">Object</span> arg) -> {
<span class="dt">double</span> v = (<span class="dt">double</span>) arg;
logger.<span class="fu">debug</span>(<span class="st">"xsquared"</span>);
xo_square.<span class="fu">setValue</span>(v*v);
});
DoubleObservable yo = <span class="kw">new</span> <span class="fu">DoubleObservable</span>();
DoubleObservable yo_square = <span class="kw">new</span> <span class="fu">DoubleObservable</span>();
yo.<span class="fu">addObserver</span>((java.<span class="fu">util</span>.<span class="fu">Observable</span> o, <span class="bu">Object</span> arg) -> {
<span class="dt">double</span> v = (<span class="dt">double</span>) arg;
logger.<span class="fu">debug</span>(<span class="st">"ysquared"</span>);
yo_square.<span class="fu">setValue</span>(v*v);
});
XSquareYSquare squaresum_observer = <span class="kw">new</span> <span class="fu">XSquareYSquare</span>();
xo_square.<span class="fu">addObserver</span>((java.<span class="fu">util</span>.<span class="fu">Observable</span> o, <span class="bu">Object</span> arg) -> {
squaresum_observer.<span class="fu">setXSquare</span>((<span class="dt">double</span>) arg);
});
yo_square.<span class="fu">addObserver</span>((java.<span class="fu">util</span>.<span class="fu">Observable</span> o, <span class="bu">Object</span> arg) -> {
squaresum_observer.<span class="fu">setYSquare</span>((<span class="dt">double</span>) arg);
});
DoubleObservable result = <span class="kw">new</span> <span class="fu">DoubleObservable</span>();
squaresum_observer.<span class="fu">addObserver</span>((java.<span class="fu">util</span>.<span class="fu">Observable</span> o, <span class="bu">Object</span> arg) -> {
logger.<span class="fu">debug</span>(<span class="st">"distance"</span>);
logger.<span class="fu">debug</span>(<span class="st">"stack"</span>, <span class="kw">new</span> <span class="bu">Exception</span>(<span class="st">"stack"</span>));
result.<span class="fu">setValue</span>(<span class="bu">Math</span>.<span class="fu">sqrt</span>((<span class="dt">double</span>) arg));
});
xo.<span class="fu">setValue</span>(x);
yo.<span class="fu">setValue</span>(y);
<span class="kw">return</span> result.<span class="fu">getValue</span>();
}
<span class="kw">public</span> <span class="dt">static</span> <span class="kw">class</span> DoubleObservable <span class="kw">extends</span> java.<span class="fu">util</span>.<span class="fu">Observable</span> {
<span class="kw">protected</span> <span class="dt">double</span> value = -<span class="fl">1.0</span>;
<span class="kw">public</span> <span class="fu">DoubleObservable</span>() {
}
<span class="kw">public</span> <span class="fu">DoubleObservable</span>(<span class="dt">double</span> init) {
<span class="kw">this</span>.<span class="fu">value</span> = init;
}
<span class="kw">public</span> <span class="dt">void</span> <span class="fu">setValue</span>(<span class="dt">double</span> v) {
value = v;
<span class="fu">setChanged</span>();
<span class="fu">notifyObservers</span>(v);
}
<span class="kw">public</span> <span class="dt">double</span> <span class="fu">getValue</span>() {
<span class="kw">return</span> value;
}
}
<span class="kw">public</span> <span class="dt">static</span> <span class="kw">class</span> XSquareYSquare <span class="kw">extends</span> java.<span class="fu">util</span>.<span class="fu">Observable</span> {
<span class="kw">protected</span> <span class="dt">double</span> squaresum = -<span class="fl">1.0</span>;
<span class="kw">protected</span> <span class="dt">double</span> xsquare = -<span class="fl">1.0</span>;
<span class="kw">protected</span> <span class="dt">double</span> ysquare = -<span class="fl">1.0</span>;
<span class="kw">public</span> <span class="fu">XSquareYSquare</span>() {
}
<span class="kw">public</span> <span class="dt">void</span> <span class="fu">setXSquare</span>(<span class="dt">double</span> v) {
<span class="kw">if</span>(xsquare != -<span class="fl">1.0</span> && ysquare != -<span class="fl">1.0</span>) {
<span class="co">// a new point is arriving</span>
xsquare = -<span class="fl">1.0</span>;
ysquare = -<span class="fl">1.0</span>;
squaresum = -<span class="fl">1.0</span>;
}
xsquare = v;
<span class="fu">update</span>();
}
<span class="kw">public</span> <span class="dt">void</span> <span class="fu">setYSquare</span>(<span class="dt">double</span> v) {
<span class="kw">if</span>(xsquare != -<span class="fl">1.0</span> && ysquare != -<span class="fl">1.0</span>) {
<span class="co">// a new point is arriving</span>
xsquare = -<span class="fl">1.0</span>;
ysquare = -<span class="fl">1.0</span>;
squaresum = -<span class="fl">1.0</span>;
}
ysquare = v;
<span class="fu">update</span>();
}
<span class="kw">protected</span> <span class="dt">void</span> <span class="fu">update</span>() {
<span class="kw">if</span>(xsquare != -<span class="fl">1.0</span> && ysquare != -<span class="fl">1.0</span>) {
logger.<span class="fu">debug</span>(<span class="st">"squaresum"</span>);
squaresum = xsquare + ysquare;
<span class="kw">this</span>.<span class="fu">setChanged</span>();
<span class="kw">this</span>.<span class="fu">notifyObservers</span>(squaresum);
}
}
<span class="kw">public</span> <span class="dt">double</span> <span class="fu">getSquareSum</span>() {
<span class="kw">return</span> squaresum;
}
}</code></pre></div>
<p>In the same way as above in the Continuation Passing Style (CPS) the stack frames are built up towards the top of the logic block diagram:</p>
<pre><code>[main] DEBUG c.structures.examples.Pythagoras - lambda$16 - stack java.lang.Exception: stack
at control.structures.examples.Pythagoras.lambda$16(Pythagoras.java:222)
at java.util.Observable.notifyObservers(Observable.java:159)
at control.structures.examples.Pythagoras$XSquareYSquare.update(Pythagoras.java:290)
at control.structures.examples.Pythagoras$XSquareYSquare.setYSquare(Pythagoras.java:282)
at control.structures.examples.Pythagoras.lambda$15(Pythagoras.java:216)
at java.util.Observable.notifyObservers(Observable.java:159)
at control.structures.examples.Pythagoras$DoubleObservable.setValue(Pythagoras.java:245)
at control.structures.examples.Pythagoras.lambda$13(Pythagoras.java:208)
at java.util.Observable.notifyObservers(Observable.java:159)
at control.structures.examples.Pythagoras$DoubleObservable.setValue(Pythagoras.java:245)</code></pre>
<p>There are other styles than the observer style, typically with an event bus or a reactor:</p>
<ul>
<li><a href="https://spring.io/guides/gs/messaging-reactor/">Creating an Asynchronous, Event-Driven Application with Reactor</a></li>
<li><a href="https://dzone.com/articles/event-driven-programming-using">Event driven programming using Spring Boot and Reactor</a></li>
<li><a href="https://code.google.com/archive/p/jed-java-event-distribution/">JED - Java Event Distribution</a></li>
</ul>
<p>As you can see such an event driven solution can get quickly ugly if you have to deal with diagrams that are not a linear pipe line, but where two or more inputs have to be used to compute an output. This is the case in the <code>XSquareYSquare</code> implementation of an <code>Observable</code>, where the code that produces outputs has to check if both inputs have already been provided and only then produce an output.</p>
<p>Because nobody wants to deal with such cases all the time manually it is better to rely on a library like <a href="https://github.com/ReactiveX/RxJava">RxJava</a> that takes care of all the ugliness.</p>
<h3 id="event-driven-via-reactive-extensions">Event Driven via Reactive Extensions</h3>
<p>Originally the <a href="http://reactivex.io/">Reactive Extensions</a> come from <a href="https://msdn.microsoft.com/en-us/data/gg577609.aspx">Microsoft</a> and the .Net platform. <a href="http://techblog.netflix.com/2013/02/rxjava-netflix-api.html">Netflix</a> ported the Rx library to Java and open-sourced it. By now the RxJava library is developed under the roof of <a href="http://reactivex.io/">ReactiveX</a>.</p>
<p>The example looks as follows and at least to my taste looks much cleaner than the observer style implementation above, because the internals of the Rx library take care of all of the “ugly” stuff.</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">double</span> <span class="fu">pythagoras_reactive_extensions_style</span>(<span class="dt">double</span> x, <span class="dt">double</span> y) {
logger.<span class="fu">info</span>(<span class="st">"-----------------------------------------------------------------------------"</span>);
logger.<span class="fu">info</span>(<span class="st">"pythagoras_reactive_extensions_style"</span>);
<span class="dt">final</span> <span class="bu">AtomicReference</span><<span class="bu">Double</span>> result = <span class="kw">new</span> <span class="bu">AtomicReference</span><<span class="bu">Double</span>>();
rx.<span class="fu">Observable</span><<span class="bu">Double</span>> ox = rx.<span class="fu">Observable</span>.<span class="fu">just</span>(x);
rx.<span class="fu">Observable</span><<span class="bu">Double</span>> ox_square = ox.<span class="fu">map</span>((<span class="bu">Double</span> i) -> {logger.<span class="fu">debug</span>(<span class="st">"rx: xsquared"</span>); <span class="kw">return</span> i*i;});
rx.<span class="fu">Observable</span><<span class="bu">Double</span>> oy = rx.<span class="fu">Observable</span>.<span class="fu">just</span>(y);
rx.<span class="fu">Observable</span><<span class="bu">Double</span>> oy_square = oy.<span class="fu">map</span>((<span class="bu">Double</span> i) -> {logger.<span class="fu">debug</span>(<span class="st">"rx: ysquared"</span>); <span class="kw">return</span> i*i;});
rx.<span class="fu">Observable</span><Pair<<span class="bu">Double</span>,<span class="bu">Double</span>>> pairs =
rx.<span class="fu">Observable</span>.<span class="fu">zip</span>(ox_square, oy_square, (<span class="bu">Double</span> d1, <span class="bu">Double</span> d2) -> <span class="kw">new</span> Pair<<span class="bu">Double</span>,<span class="bu">Double</span>>(d1, d2));
pairs
.<span class="fu">map</span>(p -> {logger.<span class="fu">debug</span>(<span class="st">"rx: squaresum"</span>); <span class="kw">return</span> (p.<span class="fu">getValue0</span>() + p.<span class="fu">getValue1</span>());})
.<span class="fu">map</span>(p -> {logger.<span class="fu">debug</span>(<span class="st">"rx: distance"</span>); logger.<span class="fu">debug</span>(<span class="st">"stack"</span>, <span class="kw">new</span> <span class="bu">Exception</span>(<span class="st">"stack"</span>)); <span class="kw">return</span> <span class="bu">Math</span>.<span class="fu">sqrt</span>(p);})
.<span class="fu">subscribe</span>(p -> result.<span class="fu">set</span>(p));
<span class="kw">return</span> result.<span class="fu">get</span>();
}</code></pre></div>
<p>In the same way as the observer style you can see that the reactive extensions in Java build up quite a bit of stack towards the top of the logic block diagram. This basically tells us that the reactive extensions are “just” the normal observer style in disguise. Observer style, Rx style and continuation passing style are very similar and all of them are associated with “event driven programming”.</p>
<pre><code>[main] DEBUG c.structures.examples.Pythagoras - lambda$21 - stack
java.lang.Exception: stack
at control.structures.examples.Pythagoras.lambda$21(Pythagoras.java:324)
at rx.internal.operators.OperatorMap$MapSubscriber.onNext(OperatorMap.java:66)
at rx.internal.operators.OperatorMap$MapSubscriber.onNext(OperatorMap.java:74)
at rx.internal.operators.OperatorZip$Zip.tick(OperatorZip.java:264)
at rx.internal.operators.OperatorZip$Zip$InnerSubscriber.onNext(OperatorZip.java:335)
at rx.internal.operators.OperatorMap$MapSubscriber.onNext(OperatorMap.java:74)
at rx.internal.util.ScalarSynchronousObservable$WeakSingleProducer.request(ScalarSynchronousObservable.java:268)
at rx.Subscriber.setProducer(Subscriber.java:211)
at rx.internal.operators.OperatorMap$MapSubscriber.setProducer(OperatorMap.java:99)
at rx.internal.util.ScalarSynchronousObservable$1.call(ScalarSynchronousObservable.java:79)
at rx.internal.util.ScalarSynchronousObservable$1.call(ScalarSynchronousObservable.java:75)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.Observable.unsafeSubscribe(Observable.java:8460)
at rx.internal.operators.OperatorZip$Zip.start(OperatorZip.java:214)
at rx.internal.operators.OperatorZip$ZipSubscriber.onNext(OperatorZip.java:156)
at rx.internal.operators.OperatorZip$ZipSubscriber.onNext(OperatorZip.java:122)
at rx.internal.util.ScalarSynchronousObservable$WeakSingleProducer.request(ScalarSynchronousObservable.java:268)
at rx.Subscriber.setProducer(Subscriber.java:209)
at rx.internal.util.ScalarSynchronousObservable$1.call(ScalarSynchronousObservable.java:79)
at rx.internal.util.ScalarSynchronousObservable$1.call(ScalarSynchronousObservable.java:75)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.Observable.subscribe(Observable.java:8553)
at rx.Observable.subscribe(Observable.java:8520)
at rx.Observable.subscribe(Observable.java:8343)
at control.structures.examples.Pythagoras.pythagoras_reactive_extensions_style(Pythagoras.java:325)</code></pre>
<p>There are variants in the Rx library that use so called blocking observables. Examples would look like this:</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">double</span> <span class="fu">pythagoras_reactive_extensions_blocking_observable_style_1</span>(<span class="dt">double</span> x, <span class="dt">double</span> y) {
rx.<span class="fu">Observable</span><<span class="bu">Double</span>> ox = rx.<span class="fu">Observable</span>.<span class="fu">just</span>(x);
rx.<span class="fu">Observable</span><<span class="bu">Double</span>> ox_square = ox.<span class="fu">map</span>((<span class="bu">Double</span> i) -> i*i);
rx.<span class="fu">Observable</span><<span class="bu">Double</span>> oy = rx.<span class="fu">Observable</span>.<span class="fu">just</span>(y);
rx.<span class="fu">Observable</span><<span class="bu">Double</span>> oy_square = oy.<span class="fu">map</span>((<span class="bu">Double</span> i) -> i*i);
rx.<span class="fu">Observable</span><Pair<<span class="bu">Double</span>,<span class="bu">Double</span>>> pairs =
rx.<span class="fu">Observable</span>.<span class="fu">zip</span>(ox_square, oy_square, (<span class="bu">Double</span> d1, <span class="bu">Double</span> d2) -> <span class="kw">new</span> Pair<<span class="bu">Double</span>,<span class="bu">Double</span>>(d1, d2));
<span class="bu">Double</span> single = pairs
.<span class="fu">map</span>(p -> (p.<span class="fu">getValue0</span>() + p.<span class="fu">getValue1</span>()))
.<span class="fu">map</span>(p -> <span class="bu">Math</span>.<span class="fu">sqrt</span>(p))
.<span class="fu">toBlocking</span>()
.<span class="fu">single</span>();
<span class="kw">return</span> single;
}</code></pre></div>
<p>And this:</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">double</span> <span class="fu">pythagoras_reactive_extensions_blocking_observable_style_2</span>(<span class="dt">double</span> x, <span class="dt">double</span> y) {
rx.<span class="fu">Observable</span><<span class="bu">Double</span>> ox = rx.<span class="fu">Observable</span>.<span class="fu">just</span>(x);
rx.<span class="fu">Observable</span><<span class="bu">Double</span>> ox_square = ox.<span class="fu">map</span>((<span class="bu">Double</span> i) -> i*i);
rx.<span class="fu">Observable</span><<span class="bu">Double</span>> oy = rx.<span class="fu">Observable</span>.<span class="fu">just</span>(y);
rx.<span class="fu">Observable</span><<span class="bu">Double</span>> oy_square = oy.<span class="fu">map</span>((<span class="bu">Double</span> i) -> i*i);
rx.<span class="fu">Observable</span><Pair<<span class="bu">Double</span>,<span class="bu">Double</span>>> pairs =
rx.<span class="fu">Observable</span>.<span class="fu">zip</span>(ox_square, oy_square, (<span class="bu">Double</span> d1, <span class="bu">Double</span> d2) -> <span class="kw">new</span> Pair<<span class="bu">Double</span>,<span class="bu">Double</span>>(d1, d2));
<span class="bu">Iterator</span><<span class="bu">Double</span>> iterator = pairs
.<span class="fu">map</span>(p -> (p.<span class="fu">getValue0</span>() + p.<span class="fu">getValue1</span>()))
.<span class="fu">map</span>(p -> <span class="bu">Math</span>.<span class="fu">sqrt</span>(p))
.<span class="fu">toBlocking</span>()
.<span class="fu">getIterator</span>();
<span class="kw">return</span> iterator.<span class="fu">next</span>();
}</code></pre></div>
<p>The difference is that you do not need to adapt between the “normal programming” style and the Rx style by using a holder like the <code>AtomicReference<Double> result</code> above, but the library performs the adaptation by either providing a single value or an iterator.</p>
<p>The Quasar library comes also with a similar interface like the reactive extensions and an example using this interface would look as follows:</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">double</span> <span class="fu">pythagoras_reactive_quasar_style</span>(<span class="dt">double</span> x, <span class="dt">double</span> y) {
<span class="bu">Channel</span><<span class="bu">Double</span>> xc = <span class="bu">Channels</span>.<span class="fu">newChannel</span>(<span class="dv">1</span>, OverflowPolicy.<span class="fu">BLOCK</span>);
ReceivePort<<span class="bu">Double</span>> xc_square = <span class="bu">Channels</span>.<span class="fu">map</span>(xc, (<span class="bu">Double</span> i) -> i*i);
<span class="bu">Channel</span><<span class="bu">Double</span>> yc = <span class="bu">Channels</span>.<span class="fu">newChannel</span>(<span class="dv">1</span>, OverflowPolicy.<span class="fu">BLOCK</span>);
ReceivePort<<span class="bu">Double</span>> yc_square = <span class="bu">Channels</span>.<span class="fu">map</span>(yc, (<span class="bu">Double</span> i) -> i*i);
ReceivePort<Pair<<span class="bu">Double</span>,<span class="bu">Double</span>>> pairs = <span class="bu">Channels</span>.<span class="fu">zip</span>(xc_square, yc_square, (<span class="bu">Double</span> d1, <span class="bu">Double</span> d2) -> <span class="kw">new</span> Pair<<span class="bu">Double</span>,<span class="bu">Double</span>>(d1, d2));
ReceivePort<<span class="bu">Double</span>> r1 = <span class="bu">Channels</span>.<span class="fu">map</span>(pairs, p -> (p.<span class="fu">getValue0</span>() + p.<span class="fu">getValue1</span>()));
ReceivePort<<span class="bu">Double</span>> r2 = <span class="bu">Channels</span>.<span class="fu">map</span>(r1, p -> <span class="bu">Math</span>.<span class="fu">sqrt</span>(p));
<span class="dt">double</span> result = -<span class="fl">1.0</span>;
<span class="kw">try</span> {
xc.<span class="fu">send</span>(x);
yc.<span class="fu">send</span>(y);
result = r2.<span class="fu">receive</span>();
} <span class="kw">catch</span> (SuspendExecution | <span class="bu">InterruptedException</span> e) {
e.<span class="fu">printStackTrace</span>();
}
<span class="kw">return</span> result;
}</code></pre></div>
<h2 id="synchronous-and-asynchronous-service-call-examples">Synchronous and Asynchronous Service Call Examples</h2>
<p>As a next step we will look into examples that make use of synchronous and asynchronous service calls. These examples will help to explore how the different styles we reviewed above will either help or hinder revealing our intention behind the program in the code.</p>
<p>You can imagine that behind the blocking service calls are either <a href="https://dzone.com/articles/java-nio-vs-io">blocking old IO</a> based calls to the operating system or you can imagine <a href="https://en.wikipedia.org/wiki/Remote_procedure_call">Remote Procedure Call</a> (RPC) style synchronous remote calls.</p>
<p>You can imagine that behind the asynchronous non-blocking / event-driven calls are either <a href="https://dzone.com/articles/java-nio-vs-io">non-blocking new IO</a> (NIO) based calls to the operating system or you can imagine one-way <a href="https://developer.salesforce.com/docs/atlas.en-us.integration_patterns_and_practices.meta/integration_patterns_and_practices/integ_pat_remote_process_invocation_fire_forget.htm">fire-and-forget</a> style asynchronous remote calls.</p>
<h3 id="synchronous-service-call">Synchronous Service Call</h3>
<p>Imagine the following admittedly quite ugly implementation of a solution that calculates the Pythagoras from user input given on the console.</p>
<section class="roundedBorder">
<p><strong>The Readability Argument</strong></p>
<p>What is ugly and what is elegant code? Already the computer science classic <a href="https://mitpress.mit.edu/sicp/full-text/book/book.html">Structure and Interpretation of Computer Programs</a> (SICP; a.k.a. the wizard book) in its <a href="https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-7.html#%_chap_Temp_4">preface</a> argued that “programs must be written for people to read, and only incidentally for machines to execute.” A book that deals with this topic in the Java language is <a href="https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882">Clean Code</a> by Robert C. Martin.</p>
<p>While there are arguably ways on how to write programs that are more amenable for (other) humans to read as can be seen by the <a href="https://en.wikipedia.org/wiki/Structured_programming">structured programming</a>, the <a href="https://en.wikipedia.org/wiki/Considered_harmful">goto considered harmful</a> or the <a href="https://en.wikipedia.org/wiki/Spaghetti_code">spaghetti code</a> debate a large part of the readability argument is also ignorance on the reader side. As always in communication, there is a sender and a receiver. There are “obligations” on the sender side to write code that is well structured and readable but there are also “obligations” on the reader side to actually be fluent in reading different coding styles.</p>
<p>One large fraction of the readability argument is a lack of fluency in reading valid coding styles and another large fraction is <a href="https://en.wikipedia.org/wiki/Law_of_triviality">bike shedding</a>.</p>
<p>I am again and again surprised of seeing people having studied computer science and coming out of university who never had the idea that it might be worthwhile to <strong>read other people’s code</strong>. In the past (early 90s and before), before the age of the internet and open-source, it was actually really difficult to have the chance to read other people’s code. Most code was developed closed-source behind the walls of large organizations. Only with the advent of <a href="https://en.wikipedia.org/wiki/SourceForge">SourceForge</a> in the late 1990s there started to be options for students of software development to read other people’s code. Nowadays the role of <a href="https://en.wikipedia.org/wiki/SourceForge">SourceForge</a> is superseded by <a href="https://en.wikipedia.org/wiki/GitHub">GitHub</a> and the argument I want to make is even more relevant: nowadays it is <strong>trivial</strong> to find relevant open-source projects and read their code! Just imagine you would want to become a <a href="https://en.wikipedia.org/wiki/Novelist">novelist</a>. I guess it would be unthinkable for an aspiring novelist to just start writing novels before having read any other relevant novels of other authors before. Why is it then that in software engineering this attitude of rather writing code than ever reading other people’s code is so predominant?</p>
<p><strong>READ OTHER PEOPLE’S CODE!!</strong></p>
A good starting point for people in the Java world are the JDK core classes and the <a href="http://spring.io/">Spring Framework</a>.
</section>
<p>You can find the code in <code>control.structures.examples.PythagorasUsingServiceCalls</code> and you can run the version that asks for the parameters on the console via the class <code>control.structures.examples.PythagorasUsingConsoleInputApp</code> under <code>src/test/java</code>. Just ignore for the moment the declaration of the checked <code>SuspendExecution</code> exception.</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"> <span class="kw">public</span> <span class="kw">interface</span> ISyncRequestResponseService {
<span class="kw">public</span> <span class="dt">double</span> <span class="fu">request</span>(<span class="bu">String</span> someParameter);
}
<span class="kw">public</span> <span class="dt">static</span> <span class="dt">double</span> <span class="fu">calculateDistanceFromOriginFromServiceInput</span>(ISyncRequestResponseService service) <span class="kw">throws</span> SuspendExecution {
<span class="dt">double</span> result = <span class="fu">sqrtFromServiceInput</span>(service);
logger.<span class="fu">debug</span>(<span class="st">"result is: "</span> + result);
<span class="kw">return</span> result;
}
<span class="kw">public</span> <span class="dt">static</span> <span class="dt">double</span> <span class="fu">sqrtFromServiceInput</span>(ISyncRequestResponseService service) <span class="kw">throws</span> SuspendExecution {
<span class="dt">double</span> result = <span class="bu">Math</span>.<span class="fu">sqrt</span>(<span class="fu">sumFromServiceInput</span>(service));
<span class="kw">return</span> result;
}
<span class="kw">public</span> <span class="dt">static</span> <span class="dt">double</span> <span class="fu">sumFromServiceInput</span>(ISyncRequestResponseService service) <span class="kw">throws</span> SuspendExecution {
<span class="dt">double</span> xsquare = <span class="fu">xsquareFromServiceInput</span>(service);
<span class="dt">double</span> ysquare = <span class="fu">ysquareFromServiceInput</span>(service);
<span class="kw">return</span> xsquare + ysquare;
}
<span class="kw">public</span> <span class="dt">static</span> <span class="dt">double</span> <span class="fu">xsquareFromServiceInput</span>(ISyncRequestResponseService service) <span class="kw">throws</span> SuspendExecution {
logger.<span class="fu">debug</span>(<span class="st">"Starting to query service for 'x'."</span>);
<span class="dt">double</span> x = service.<span class="fu">request</span>(<span class="st">"x"</span>);
logger.<span class="fu">debug</span>(<span class="st">"Finished to query service for 'x' and got result: "</span> + x);
<span class="kw">return</span> x*x;
}
<span class="kw">public</span> <span class="dt">static</span> <span class="dt">double</span> <span class="fu">ysquareFromServiceInput</span>(ISyncRequestResponseService service) <span class="kw">throws</span> SuspendExecution {
logger.<span class="fu">debug</span>(<span class="st">"Starting to query service for 'y'."</span>);
<span class="dt">double</span> y = service.<span class="fu">request</span>(<span class="st">"y"</span>);
logger.<span class="fu">debug</span>(<span class="st">"Finished to query service for 'y' and got result: "</span> + y);
<span class="kw">return</span> y*y;
}</code></pre></div>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">void</span> <span class="fu">main</span>(<span class="bu">String</span>[] args) {
ISyncRequestResponseService service = PythagorasUsingServiceCalls::doubleFromUserInput;
logger.<span class="fu">info</span>(<span class="st">"Result: "</span> + <span class="fu">calculateDistanceFromOriginFromServiceInput</span>(service));
}
<span class="kw">public</span> <span class="dt">static</span> <span class="dt">double</span> <span class="fu">doubleFromUserInput</span>(<span class="bu">String</span> q) {
<span class="dt">double</span> result = <span class="fl">0.0</span>;
<span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">"Type a double number '"</span> + q + <span class="st">"': "</span>);
<span class="at">@SuppressWarnings</span>(<span class="st">"resource"</span>) <span class="co">// I cannot close System.in</span>
<span class="bu">Scanner</span> scanIn = <span class="kw">new</span> <span class="bu">Scanner</span>(<span class="bu">System</span>.<span class="fu">in</span>);
<span class="bu">String</span> answer = scanIn.<span class="fu">nextLine</span>();
<span class="dt">boolean</span> success = <span class="kw">false</span>;
<span class="kw">while</span>(!success) {
<span class="kw">try</span> {
result = <span class="bu">Double</span>.<span class="fu">parseDouble</span>(answer);
success = <span class="kw">true</span>;
} <span class="kw">catch</span>(<span class="bu">Exception</span> e) {
logger.<span class="fu">error</span>(<span class="st">"A wrong number was entered that could not be parsed to an integer:"</span>, e);
}
}
<span class="kw">return</span> result;
}</code></pre></div>
<p>In this example somewhere deep down the call-stack we call an external service in a synchronous blocking style and the whole computation is scattered across different stack frames.</p>
<p>If you want to look at a unit test rather than providing the x and y input on the command line then have a look at <code>control.structures.examples.GivenAnEuclideanPointAndSyncRequestResponseService</code>.</p>
<h3 id="asynchronous-service-call">Asynchronous Service Call</h3>
<p>In order to see stack-ripping in action let’s imagine that you would need to change your solution above to use an asynchronous service that takes a call-back as last argument rather than returning a result. Normally call-backs take the form of a method that takes one argument but does not return a result, e.g. is <code>void</code>.</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"><span class="kw">interface</span> CallBack<T> {
<span class="dt">void</span> <span class="fu">methodToCallBack</span>(T arg);
}</code></pre></div>
<p>Java 8 has a standard <a href="https://www.oreilly.com/learning/java-8-functional-interfaces">functional interface</a> that matches this description, the <code>java.util.function.Consumer</code>:</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"><span class="at">@FunctionalInterface</span>
<span class="kw">public</span> <span class="kw">interface</span> Consumer<T> {
<span class="dt">void</span> <span class="fu">accept</span>(T t);
<span class="kw">default</span> Consumer<T> <span class="fu">andThen</span>(Consumer<? <span class="kw">super</span> T> after) {
Objects.<span class="fu">requireNonNull</span>(after);
<span class="kw">return</span> (T t) -> { <span class="fu">accept</span>(t); after.<span class="fu">accept</span>(t); };
}
}</code></pre></div>
<p>Later we will also look at versions of a program that make use of RxJava. Therefore let’s use right from the start the RxJava <code>rx.Observer</code> interface:</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"><span class="kw">public</span> <span class="kw">interface</span> rx.<span class="fu">Observer</span><T> {
<span class="dt">void</span> <span class="fu">onCompleted</span>();
<span class="dt">void</span> <span class="fu">onError</span>(<span class="bu">Throwable</span> e);
<span class="dt">void</span> <span class="fu">onNext</span>(T t);
}</code></pre></div>
<p>As you can see this interface has more methods than just the single <code>accept(T t)</code> method. This already gives us a hint that it is not enough to just provide a callback that deals with the “happy” scenario, where no exceptions are thrown. And as you will see further down in the asynchronous code version you cannot rely on the stack for <code>try-catch-finally</code> style anomaly handling.</p>
<p>In order to use already right now the <code>rx.Observer</code> interface, but at the same time be able to use it as a <a href="https://www.oreilly.com/learning/java-8-functional-interfaces">functional interface</a> we create a derived interface from the standard <code>rx.Observer</code> that provides default implementations for the other two methods:</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"><span class="kw">public</span> <span class="kw">interface</span> control.<span class="fu">structures</span>.<span class="fu">examples</span>.<span class="fu">PythagorasUsingServiceCalls</span>.<span class="fu">Observer</span> <span class="kw">extends</span> rx.<span class="fu">Observer</span><<span class="bu">Double</span>> {
<span class="at">@Override</span>
<span class="kw">default</span> <span class="kw">public</span> <span class="dt">void</span> <span class="fu">onCompleted</span>() {
logger.<span class="fu">debug</span>(<span class="st">"onCompleted()"</span>);
}
<span class="at">@Override</span>
<span class="kw">default</span> <span class="kw">public</span> <span class="dt">void</span> <span class="fu">onError</span>(<span class="bu">Throwable</span> e) {
logger.<span class="fu">error</span>(<span class="st">"onError()"</span>, e);
}
}</code></pre></div>
<p>The service interface and its implementation now looks like this:</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"><span class="kw">public</span> <span class="kw">interface</span> IAsyncRequestResponseService {
<span class="kw">public</span> <span class="dt">void</span> <span class="fu">request</span>(<span class="bu">String</span> someParameter, rx.<span class="fu">Observer</span><<span class="bu">Double</span>> callback);
}
<span class="kw">public</span> <span class="kw">class</span> AsyncRequestResponseService <span class="kw">implements</span> IAsyncRequestResponseService {
<span class="kw">protected</span> <span class="dt">static</span> <span class="dt">final</span> <span class="bu">ExecutorService</span> executor =
<span class="bu">Executors</span>.<span class="fu">newFixedThreadPool</span>( <span class="dv">1</span>, <span class="kw">new</span> <span class="fu">ThreadFactoryBuilder</span>().<span class="fu">setNameFormat</span>(<span class="st">"async-request-response-service-%d"</span>).<span class="fu">build</span>());
<span class="kw">public</span> <span class="dt">void</span> <span class="fu">request</span>(<span class="bu">String</span> someParameter, <span class="bu">Observer</span><<span class="bu">Double</span>> callback) {
<span class="kw">if</span>(<span class="st">"x"</span>.<span class="fu">equals</span>(someParameter)) {
executor.<span class="fu">execute</span>(() -> {
callback.<span class="fu">onNext</span>(<span class="fl">3.0</span>);
callback.<span class="fu">onCompleted</span>();
});
} <span class="kw">else</span> <span class="kw">if</span>(<span class="st">"y"</span>.<span class="fu">equals</span>(someParameter)) {
callback.<span class="fu">onNext</span>(<span class="fl">4.0</span>);
callback.<span class="fu">onCompleted</span>();
} <span class="kw">else</span> {
callback.<span class="fu">onError</span>(<span class="kw">new</span> <span class="bu">RuntimeException</span>(<span class="st">"Don't know parameter: '"</span> + someParameter + <span class="st">"'"</span>));
}
}
}</code></pre></div>
<p>For the parameter “x” the result is provided on a new thread, e.g. this is simulating a real asynchronous call. For the parameter “y” the result is provided on the same thread as the caller. This is simulating a normal “Observer” style callback as you would see it in Java Swing applications where the callback is executed on the same thread as the caller (Java Swing is effectively single-threaded).</p>
<p>Now, how do you adapt your original implementation to be able to deal with the asynchronous service? Well, in the language of <a href="http://www.ccs.neu.edu/racket/pubs/ase2001-gfkf.pdf">Automatically Restructuring Programs for the Web</a> you have to convert the program into CPS style and perform “Lambda Lifting”, which basically means to extract functions that are called deep down the stack to top-level functions. One possible solution might look like this:</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">void</span> calculateDistanceFromOriginFromServiceInputAsync1
(IAsyncRequestResponseService service, CompletableFuture<<span class="bu">Double</span>> finalResultHolder)
{
<span class="bu">Observer</span> o = (<span class="bu">Double</span> result) -> <span class="fu">calculateDistanceFromOriginFromServiceInputAsync2</span>(service, finalResultHolder, result);
service.<span class="fu">request</span>(<span class="st">"x"</span>, o);
}
<span class="kw">public</span> <span class="dt">static</span> <span class="dt">void</span> calculateDistanceFromOriginFromServiceInputAsync2
(IAsyncRequestResponseService service, CompletableFuture<<span class="bu">Double</span>> finalResultHolder, <span class="dt">double</span> x)
{
<span class="bu">Observer</span> o = (<span class="bu">Double</span> result) -> <span class="fu">calculateDistanceFromOriginFromServiceInputAsync3</span>(service, finalResultHolder, x, result);
service.<span class="fu">request</span>(<span class="st">"y"</span>, o);
}
<span class="kw">public</span> <span class="dt">static</span> <span class="dt">void</span> calculateDistanceFromOriginFromServiceInputAsync3
(IAsyncRequestResponseService service, CompletableFuture<<span class="bu">Double</span>> finalResultHolder, <span class="dt">double</span> x, <span class="dt">double</span> y)
{
<span class="dt">double</span> result = <span class="fu">pythagoras_function_call_with_local_variables</span>(x, y);
logger.<span class="fu">debug</span>(<span class="st">"providing result in the finalResultHolder"</span>);
finalResultHolder.<span class="fu">complete</span>(result);
}</code></pre></div>
<p>You have to split the overall computation into 3 pieces. If you have <span class="math inline"><em>N</em></span> asynchronous service calls then the number of pieces will in general be <span class="math inline"><em>N</em> + 1</span>.</p>
<p>You can also see that you continue to accumulate more and more program state as method arguments, because rather than accumulating that state on the stack you have to accumulate it elsewhere. Another option for accumulating the program state would be a holder type variable that is threaded through the computation steps.</p>
<p>This program looks <strong>VERY</strong> different from your original one. In the end the change from a synchronous service interface to an asynchronous service interface forced you to rewrite the whole solution. In addition, nothing in the program code, except the naming convention of naming the fragment pieces of the calculation <code>calculateDistanceFromOriginFromServiceInputAsync</code> plus a number as a suffix, will indicate that these pieces form a coherent computation. Imagine you have a full program that is fragmented into many such small pieces and then you know the misery in which the node.js guys are living in that they call <a href="http://callbackhell.com/">Callback Hell</a>.</p>
<p>If you would run into a program exception in say piece 2 and you would see a stack trace in the logs nothing would tell you what happened before piece 2, e.g. the service call in piece 1 to the async service. And nothing would tell you which parts of the computation were <em>NOT</em> executed! You only see the immediate next piece, but you don’t know if there would have been others. That is a big problem in case that the current computation left the system in a half consistent state.</p>
<p>In the end all of the arguments I’ve made above about <a href="#actors">fine-grained actor systems</a> are also apply here. Gone are the days of an easily understandable static program at rest that you can reason about without running it. Often in such scenarios a tedious debugging session starts that is made even more difficult by the fact that you have to set breakpoints in many scattered pieces of the overall computation.</p>
<p>For a discussion of how different paradigms of asynchronous computing support or hinder the composability of a program have a look at the Netflix article <a href="http://techblog.netflix.com/2013/02/rxjava-netflix-api.html">Reactive Programming in the Netflix API with RxJava</a>. In addition these paradigms of asynchronous computing are typically contagious as discussed under the CPS paradigm: you start the rewrite in one place and you have to convert the whole program into another style.</p>
<section class="roundedBorder">
<p><a name="distributed-dataflow-variables"><strong>Category: The Essence of Composition</strong></a></p>
<p>If you are interested in looking deeper into the theory behind composition I suggest you start at <a href="https://bartoszmilewski.com/2014/11/04/category-the-essence-of-composition/">Category: The Essence of Composition</a> by Bartosz Milewski and his <a href="https://bartoszmilewski.com/2014/10/28/category-theory-for-programmers-the-preface/">other articles</a>.</p>
</section>
<h3 id="asynchronous-service-call-dataflow-style">Asynchronous Service Call Dataflow Style</h3>
<p>Instead of using the “callback style” we can also use the dataflow style of asynchronous service calls. The original hint in that direction came from <a href="https://www.info.ucl.ac.be/~pvr">Peter van Roy</a>’s book <a href="https://www.info.ucl.ac.be/~pvr/VanRoyHaridi2003-book.pdf">Concepts, Techniques, and Models of Computer Programming: Distributed Programming</a>. Please read the details there in the chapter about “Declarative Concurrency” and when he explains single-assignment variables (a.k.a. declarative variables or dataflow variables). The declarative concurrent model of Chapter 4 adds concurrency while still keeping all the good properties of functional programming. This is possible because of dataflow variables and the single-assignment store.</p>
<p>Instead of defining the <code>IAsyncRequestResponseService</code> interface with an <code>rx.Observer<Double></code> as the callback parameter we can also define a <code>IAsyncDataflowRequestResponseService1</code> with a <code>DataflowVariable</code> as its last parameter:</p>
<div class="sourceCode"><pre class="sourceCode java"><code class="sourceCode java"><span class="kw">public</span> <span class="kw">interface</span> IAsyncDataflowRequestResponseService1<T <span class="kw">extends</span> <span class="bu">Serializable</span>> {
<span class="kw">public</span> <span class="dt">void</span> <span class="fu">request</span>(<span class="bu">String</span> someParameter, DataflowVariable<T> result);
}