{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Image segmentation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example, we employ a segmentation pipeline which involves the following steps.\n", "First, an archive of images is downloaded from zenodo.\n", "Then, a single file is extracted from the archive.\n", "The file is a fluorescence microscopy image of cell nuclei, and image segmentation is performed using *Otsu thresholding*.\n", "Finally, the result of the segmentation is written to a file.\n", "\n", "Afterwards, we will modify one of the pipeline stages, so that *Li thresholding* will be employed instead of Otsu thresholding.\n", "We demonstrate, how repype automatically recognizes those change, and re-runs only the relevant parts of the pipeline." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "nbsphinx": "hidden" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "find: examples: No such file or directory\n", "find: examples: No such file or directory\n", "find: examples: No such file or directory\n" ] } ], "source": [ "!command rm -f $(find examples -name 'data.dill.gz')\n", "!command rm -f $(find examples -name '.task.json')\n", "!command rm -f $(find examples -name '.sha.json')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "nbsphinx": "hidden" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/Users/void/Documents/repype\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/void/Documents/repype/.venv/lib/python3.11/site-packages/IPython/core/magics/osm.py:417: UserWarning: This is now an optional IPython functionality, setting dhist requires you to install the `pickleshare` library.\n", " self.shell.db['dhist'] = compress_dhist(dhist)[-100:]\n" ] } ], "source": [ "%cd ..\n", "\n", "from IPython.display import Image, display\n", "\n", "import os\n", "import pathlib\n", "import shutil\n", "import tempfile\n", "\n", "rootdir = pathlib.Path('.').resolve()\n", "tempdir = tempfile.TemporaryDirectory()\n", "tempdir_path = pathlib.Path(tempdir.name)\n", "task_root_path = tempdir_path / 'examples' / 'segmentation'\n", "shutil.copytree('examples/segmentation', task_root_path)\n", "os.symlink(rootdir / 'repype', tempdir_path / 'repype', target_is_directory = True)\n", "os.symlink(rootdir / 'tests', tempdir_path / 'tests', target_is_directory = True)\n", "os.chdir(tempdir_path)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task specifications\n", "\n", "We then create a file `examples/segmentation/task.yml` that specifies our segmentation task:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "runnable: true\n", "\n", "pipeline:\n", " - tests.test_repype.Download\n", " - tests.test_repype.Unzip\n", " - tests.test_repype.Segmentation\n", " - tests.test_repype.Output\n", "\n", "config:\n", " download:\n", " url: https://zenodo.org/record/3362976/files/B2.zip\n", "\n", "scopes:\n", " segmentation: 'seg/%s.png'\n", "\n", "input_ids:\n", " - B2--W00026--P00001--Z00000--T00000--dapi.tif" ] } ], "source": [ "%cat examples/segmentation/task.yml" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The specification above consists of multiple sections:\n", "\n", "- The `runnable` property is set to `true`, so that the task becomes runnable.\n", "\n", "- The `pipeline` is specified, by listing the stages that it consists of.\n", " The order of the stages does not metter and is determined automatically.\n", "\n", "- The `config` section is optional and consists of one or more subsections, one for each stage of the pipeline.\n", " The names of the subsections correspond to the names of the stage classes, with words separated by dashes.\n", " Here, the `url` of the `tests.test_repype.Download` stage is configured.\n", "\n", "- The `scopes` section defines how filepaths will be resolved.\n", " In this example, a scope `segmentation` is defined.\n", " Within that scope, paths will be resolved to `seg/%s.png` via substitution of `%s` by a given input identifier.\n", " This is the path of the file, which the result of the segmentation will be written to.\n", "\n", "- The `input_ids` section defines the identifiers of the input data of the task.\n", " The pipeline will be run once and independently for each input identifier.\n", " In this example, this are the names of the files to be extracted from the archive downloaded from zenodo." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We then create a second task `examples/segmentation/sigma=2/task.yml`:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "config:\n", " segmentation:\n", " sigma: 2" ] } ], "source": [ "%cat examples/segmentation/sigma=2/task.yml" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since the previously defined task `examples/segmentation/task.yml` is a parent of the second task `examples/segmentation/sigma=2/task.yml`,\n", "the latter will be a *variant* (aka sub-task) of the first task.\n", "This means that the second task inherits the specification of the parent, with one adoption:\n", "The hyperparameter `sigma` of the segmentation stage is set to `2`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can now verify our task configurations as follows:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "2 task(s) selected for running\n", "DRY RUN: use \"--run\" to run the tasks instead\n", "\n", "Selected tasks:\n", "- /private/var/folders/bq/yy783k4j24zbhqhctlx__thr0000gn/T/tmpf48l0r9c/examples/segmentation (incomplete)\n", "- /private/var/folders/bq/yy783k4j24zbhqhctlx__thr0000gn/T/tmpf48l0r9c/examples/segmentation/sigma=2 (incomplete)\n" ] } ], "source": [ "!command python -m repype examples/segmentation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The argument `examples/segmentation` is the path of the *root task directory*.\n", "It can be seen from the output above, that 2 tasks are found and loaded." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Batch processing" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "2 task(s) selected for running\n", " \n", " (1/2) Entering task: /private/var/folders/bq/yy783k4j24zbhqhctlx__thr0000gn/T/tmpf48l0r9c/examples/segmentation\n", " Starting from scratch\n", " \n", " (1/1) Processing: B2--W00026--P00001--Z00000--T00000--dapi.tif\n", " \n", " Results have been stored ✅\n", " \n", " (2/2) Entering task: /private/var/folders/bq/yy783k4j24zbhqhctlx__thr0000gn/T/tmpf48l0r9c/examples/segmentation/sigma=2\n", " Picking up from: /private/var/folders/bq/yy783k4j24zbhqhctlx__thr0000gn/T/tmpf48l0r9c/examples/segmentation (segmentation)\n", " \n", " (1/1) Processing: B2--W00026--P00001--Z00000--T00000--dapi.tif\n", " \n", " Results have been stored ✅\n" ] } ], "source": [ "!command python -m repype examples/segmentation --run" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When running the command-line interface of repype like above, the progress can be observed by inspection of the standard output.\n", "It can be seen that both tasks have been processed.\n", "Notably, while for the first task the pipeline has been executed from the start,\n", "for the second task the results from the first task have been re-used,\n", "and the execution of the pipeline has been skipped up to the segmentation stage.\n", "This makes sense, because we have changed a segmentation parameter in the second task,\n", "and it would have been redundant to re-run the download and unzip stages. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When running repype again now, both tasks are skipped, because there is nothing more to be done:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "0 task(s) selected for running\n", "DRY RUN: use \"--run\" to run the tasks instead\n" ] } ], "source": [ "!command python -m repype examples/segmentation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can inspect the result of the segmentation, which has been written to file:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(Image(filename = 'examples/segmentation/seg/B2--W00026--P00001--Z00000--T00000--dapi.tif.png'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In addition, the run times of the individual stages of the pipeline can be inspected:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
B2--W00026--P00001--Z00000--T00000--dapi.tif
download3.073460
unzip0.114015
segmentation0.035950
output0.029269
\n", "
" ], "text/plain": [ " B2--W00026--P00001--Z00000--T00000--dapi.tif\n", "download 3.073460\n", "unzip 0.114015\n", "segmentation 0.035950\n", "output 0.029269" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import repype.benchmark\n", "repype.benchmark.Benchmark('examples/segmentation/times.csv').df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The values are reported in seconds." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Modification of the pipeline\n", "\n", "We create a modified implementation of the segmentation stage by employing *Li thresholding*:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "import repype.stage\n", "\n", "class Segmentation(repype.stage.Stage):\n", " \n", " inputs = ['image']\n", " outputs = ['segmentation']\n", "\n", " def process(self, image, pipeline, config, status = None):\n", " import skimage\n", " image = skimage.filters.gaussian(image, sigma = config.get('sigma', 1.))\n", " threshold = skimage.filters.threshold_li(image)\n", " return dict(\n", " segmentation = skimage.util.img_as_ubyte(image > threshold)\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then, we replace the original segmentation stage of the pipeline by our modified implementation.\n", "\n", "
\n", "\n", "**Info:**\n", "\n", "In real-world use, we would modify the pipeline by altering the `examples/segmentation/task.yml` file or one of the stage implementations directly. However, for demonstration purposes, it is more convenient to leave files unchanged, and instead do it programmatically.\n", "\n", "
\n", "\n", "To do this, we override the `create_pipeline` method of the `Task` class:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "import repype.task\n", "\n", "class Task(repype.task.Task):\n", "\n", " def create_pipeline(self, *args, **kwargs):\n", " pipeline = super().create_pipeline(*args, **kwargs)\n", " pipeline.stages[pipeline.find('segmentation')] = Segmentation()\n", " return pipeline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we are ready to re-run the pipeline, but using our modified segmentation stage, induced by our `Task` implementation.\n", "In addition, we want to restrict the computations to the task `examples/segmentation` this time, i.e. skip its variant:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "1 task(s) selected for running\n", " \n", " (1/1) Entering task: /private/var/folders/bq/yy783k4j24zbhqhctlx__thr0000gn/T/tmpf48l0r9c/examples/segmentation\n", " Picking up from: /private/var/folders/bq/yy783k4j24zbhqhctlx__thr0000gn/T/tmpf48l0r9c/examples/segmentation (segmentation)\n", " \n", " (1/1) Processing: B2--W00026--P00001--Z00000--T00000--dapi.tif\n", " \n", " Results have been stored ✅\n" ] } ], "source": [ "import repype.cli\n", "\n", "main = repype.cli.main('examples/segmentation', run = True, task_cls = Task, tasks=['examples/segmentation'])\n", "await main();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It can be seen that, reasonably, the pipeline has been only re-run from the segmentation stage on." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we verify that a different segmentation result has been obtained now:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABUAAAAQACAAAAAAFQqw/AACV9klEQVR4nO2dV5KkMAxAYWrvf2X2oxPgpByMX9XudM+AgywLB1nsx3Zm3zic0+KkdAyvOKXeuliuKoSEmbf3UtoHfyfksUiPnMIBs8umYiObQq3PP4lEtm0rSphPxDnZx0+bxaM5pDvi8fovVf9W6yX/9nf6THFUCqgoYv22Y9qlzu3i+rxY2HGcPi1N3ra/14+dNeM+jrq9aPx6iEjDqD1zuAmj7h/N4KvCWoq9OCHZE47ml4fyb3xJn74QdYZbFgZCcWos/OguSrrs50IHH4sptbWiArdAQ5HSMugne0mzeSlb1qyUETVApVK78xhfcr4onBIu2MioGzoTfVUSGh0o2Sn2CHT8SFIYg1oZAM1BKLUO1fuuBa1ectw+P9KIrmcIB5fhZ5Gp0hYCOVU1Zx9mDnC3jPaVAqKuJw5KeCAbWOHGS6DFhYAhKqIAM+ExgLJCRNvwOWgLUExxtbyYPptIitAeXO0KmSo9I7PBrTCx3BNpJvr5Q3U3sJrX03YAajuard3PfKj3ilkEVYcuPn0DSqRVpTyDBhELCk5yf4HIaRrjAaJV2VmE0Ne2pLWUe/L3xcMwKmENaKNSmKpKaE0tP2gZJGw9y79sRNJuRaHjl2tYCk10RxaRpCRdFlYfYxlQXalybBeUpgurSI4io4K9+hFBJN2PyCzy6WrHLJXctk148sYcorD9QBXZYf45dF7JD/b1OG6WIvv4HzEoOHBMcSrqW0FqZaaQwrZO9fYprMn7t+xkOYBaTMzVdOTfiM0a3PPGXkLAe6/Y9NtuG+U3HbC2MXGTDICWS4pOxB5ytgJzMamSR3VjkikDdFYzLuPnYnxtVN2sONnblUER4Bxlcin8UDpW4mNAVbrOIVvqyFN4O8aTOLrM61MHVpKLD3fRzjIbJ9PUtjC8y+fWUMIZq+/Cu2p0R5kMnXga3kULBWgPq+hGB4OlrhHmY8f9Q+dadOoO8AzoWIBRTUcRvVSXig2NKplMpOhi1tRP+1qXos7lRPEUrcecwo82/oK0W4FD2+3IVdcFiaCTeOGVty5m03h0jYphC1EmgdpYdQ3UpJ6JnDf27a1DYRTAoSCWpuScqSNvdzlDEyod4bDaybj2c+s/7nL0a64B7TztwlgJCGYDl1RSEedjSmTEINfFVJv/+H2w0zKO6x0wCwlIgo/Uh/gjUCUHVUQBcjyqnIgkneP8MVIvUOUaSdDwQS253y0xpg2kiXL8ExgN7IVsoneOKZuSgG07XaUearHSriyG1RbNSWtM25ZH89EfSXG2v03EnFw2ma29dkIJNBy9CE52pdgqPpumubtRVDtrvffGZ2OC+QT+2zaZp6JntSSeVaEGRAs6wRqyFoU06SP/NwiVLD9uCBpOcnOcREIu9GUdA9AIMhXCbcEKM1AQ624ZzMi/ObaRJKynlkWrxZPby4DGbFAE9Q6SvVa6LOl8cHCrCij84/1foKIl8J1+j0AjNigK/mZzehEgyV/dJ00kNCbP9RzMO0I/v+hqOscUfqt6U3nJ3jtcAogIpQsyh/cQBarqx+2jRoHPeSgJpNEGETSRzseAFkLLt9L9Pefz+2rPVdfjijBuycyhiuL7nNR+YBZ2R6FvXvJ42mSMw++pcBFawEEU/Nk7tlxaK6Yxtw1jlEq+FLjIS8JbadDqsA/q2WwBXnPRUo8JdyrqU/hgq0vH6RNA3M5T99svI+pHDPsZIkVBUVSbWu0kmOYEJ6TSxuQXzu6+0HL7nR9Xz+Pxa+CIdHXmAGTb+Lu/43RRsyDdw7YY9dyY83cGwBR6l+lpllLKQRRPklM8UESoU0tqnsjcEuIa8mM7+za0/bdY8pwFtFSr40PRzOszVJbV6NdSTrPKLRAV5rOg54DKx7GFM58YVWXRbNqLQGhW0luk17q5nIXzFsG21ZrYRhKKuQQdg6pNE+NxjUgfr96t8jDLCZ7V3gUSdp7eJcgx5iv2BbnnSC4BsrWfZkFfLvlVKxpG+6RQfyfSGcnWZposYENWzh9ScnM3r3vlkzM6W/D9dPfON03CCL1NWUSq0p57ZrwRmTR/hoG8DvzQvjsxZrUNqC/VcoD+DneBNq95u9vr7dzr/+Zcf0tRJLCgJbRGG0SfSimJDv0RqPKRB9ekAH0Juv4axTx02WO9HFRrADrMd/88S3gFwGZrmhsFg0Oi1XziS6bLv56jmmjdNM7a8pL6hiow6MzP9qwL9oRJ1BauLxSgKG11gnZJ53romtcWIv2XhdkaqM7aIXeJpTssU9rAWmyKOu9qHIMduMehOCa/T+OFcvokq9khR2l3gonkOOegN7SDNsuypyOWhCrI6K2o9isOd29HCN9xK6RcZJUCdxyf/zqpW41AQ7pbvMA/D5dBQGEpLueBnvwQ1LRCmpkVomGuyR+dbyKchs2die5fU2o6C6AKKKUd2TM+PfEntF3wyz7FTQEHoArpnUnWaYAG2iMeqHQrOWzQaGb5a6vkZubNgwagG1gz4AW1jWQa6S3YXQpvKWFZQNP/2xrNoDcAlW91jUYfpHlUPvWAV/rihgy+a7FthvaTlBHRB7V9rUZ1uRs8ndt1tVk2dbCvoulJpMWY28xhThPK7/n6D31C/uCbcHe3rlaq7k4spjei5xzBV+6tyzWXQEnDsS4Oo9pPlrIj0EpqudS4RKdK7oIinSUVzCusWtgsOaiKpF6FavJ/jb+obiFNOq7qwLCfE0pLQrnKNIwtiu9J0FCnymYD0+H2xi319qE5/iPsOexWYmIYABm3RNe+lJ5t5u6iFZKHPK2RgqHXrMyiK4PU0cauB2Y1ExXF6iffmIj27Gfzz9gCQVIBWlCPjSm4AWXbz/idpse9Vt26HIBraul6CEixE6dGYhgw8kVRfHqhDOhnE+kyJajPD86OpZdfD0IsNf8oN3aLrbQSpZtoGt8Tx1eTIOsWe+OzGbHVzg8Bz/Kj+hFzGxlcGpdK9WfolaAqsHkFb1wlOkWGIzcCRRSul1bi3goeKqJn5YjxqgbuO1lR4W7xVGwNIAdkJqC8R4nLbYgLnM6gZQxMBomUAUUVbVIDCl/Ac1/XRKK1vpsf4K4K7ObKvWq7BUhrJecHqrZ+56OSw1ytFxcyT+K/a0LIzeN8dV728821pXHn3otmD6wHJkc5mefDYh8vsz1qlxWiJKKHUY2tmr7s1AWWikxLPYgieUEDqqfsLsISyDR4789AdAt6I1dptXmCNGyOcnIlObhfp6H6qY7zlPZ1DvLIVeJoeHMEr/Xe+bYgUW3xCGrQPonkBljhuhdqqS0wXcHsn9sBI3QQEu6+VA8BqiDWiuQRzo6Czyyes9nn1JucHXvkiT6J/73iJ3hBkxD2UVpvXk8DKqRwqnrbOKl1vUYusAH7OfF1RF/d2YwlaQ+C7CI5TuFxete82kZ9b34YQk5O0pwXEWPoF5BeYVNVZKGF26HuPnADyrIZlb9haypwPozH3gyUWJaBXCpWdY7Ot8ViLlCepcMD59TsrKbw3+zpa3SCM2Uq7/Wu0ikNcPZs014rm9ZgRl8FXcShe+rzUBjZiJ00xIQcotYi8sG54WnFc+ER58GBd8UWzpC+8U9UkQUXRCwkUCgCVCywdv5NA4p6vLuf1YYM9NzoxmKBlxwVTat3VzDx9JAMKLCIATGCKcbvhXRmnmRB21swyGGt2hl+fAky9SpMaAWSiP2XN3jMNwSdzp8MCTVaK079R/M6Qr/A3YI1oHmjyPZj9VnkfQFvQdGj1gSN8mU2A4qdOE4HPa4WVv17HZvUL1CBpPYDkOIoA7Z6aG8TQNcf9XP/gbWg6AFoqk4bbw7P0cns8wE+DBshGOkT3fOqd/WPQRIM6CZpkRRn5HoxVwVKgTWIc9vPYENQplLGUDxXGI8QmtVDJIWyoMW1twEv0YB+U2IqBXWhBJv0BVNFpm0JIaeAy4AKwtdJYptPBOsRIqbN5A2bzgP07ovIMKAC0BdKkClrZTOEbsYxg/wZpoxBW4yQdZSaOMLaaxbTZnopmoPDX5Lvv+I3keRQ9FyMMp6x6UsTDEC3rqwM6yKw+yPjLp0a3hhcyiVP3mWoHNUgTyJJrlgqnpyJcijHaCwSJK4Ck3YtHO3nQpbpTpVhgomcT5NyT5bW31srpL5ReoFnORIqaisCteGEoWwx6TaMopteYN9XHZdXRf7gxb3XnGtC1YharsWIqgmNseCywCDdZkFm8BXgU/hKcRjj8YC6arudppxTjod4CSwsiyXTTTqFIHeXuQT6j+WdRZeF4rIdKeXj+0N5b2cxwK972bTXFPbjOP+oThs6whxLINGi/p+QG3xyTvWwWZlYA9A0oPVhfuEfnW9vRIVAS0xhSf1y73Ec8E2kWSzltvW8Y9/fhCrbaan5+9iT6Z/9syqFHsVuSO0iVj33zjdXbkU5Du4rPSrbluzYz+YUxU1W/kgaNiF4bXhae9QtqNRQj75OyCgANE3pdyK9befYhAbSsdr2mG6O2pUPJNwZWBb0AlgcLSlAEvgdNmfIUsOp43Y/24BehHF2FOUmrIb/Trt8CcJOeeZgWdABrbPvHOO3c1Pg3w5AdAR6NL8EwlK163kpzyz0lWZSOnIjWFD3UwEhYE3jdwFVvqcgLX++AaUOOqs10V8+He0gaeem1YW+0WEe1kPjMmtD8Lu5qWSQ7yNHJw+8DhDpobhkkLbW0WdsLAdlLwyB6BQLI4TjmUgFxYhFXUjtiinGDAJShFASSQuZ4jguG15QSmetkN1A3Y2NH2ByYYN48JcZn55YA6oZtRJK2+MfncgNVQNKtaBcCaMMs0UsOMkgVgtFxEPqRTuYKgDegOaXwtj68ZOgGCIlA4oJyWoWS/PIqDiPQ6CntBOcQwEonTa3FHoTE/AmksQD2IxyJ6W1t2JXwLW7kwH5TYZfig9WgJMQJpMCojr9iTFpPVNrBHpLvLFzdI/8I5z/IicKSmEb6EsZqnxEA/VY0tgdf/0aGZE+E0O3vinN56lSuSvihkIooNUS20RC2M8/EAY0UYypPv16ZG7nIkpO5sq4UZ2ZLEk+lpvhu2oCxpHeSoeU85nWfhq8kOIhJFaChTJ79+uA3pY1d3MOdocAWEf7LBDcSxZN/H0XP4SbSLgpmqRDPDFj7tHQztyGJFaHudKkA1Ctc13PJYTrTUQPYhcD6nskod0MyptI+Gr6KkogNcWx5uri/JZC/bSi1qzuW/rVzRDdEtUWpyxlsDePMqFL0X4S0EaT1ocU5hyAip+gWYSgMmk9bt89MJ44RnaXQUdjwqyhQmp4cawNIRJ/0CGp1vhzTjqhvl2bvOynDvYzhtYzg8zs9V+j0z6oZcEyELq7Bae5ca4B6JyU2hDFzdduj008wIsslDVQ4OIQpnYikpjgtPlx+QytTohH8UKcwO16WQf1GH5GQbLunhtl0Cdz7CVQ4iB+DUDnpGKkooxANyMHgegzRtkScCbxkjkPD3G2cG4P6tq8eAihRQQqSh3CteqHukPAaPzJyFxoM064+k6DULDlRj/QTD1ZiAZ0uYDOiaL1yIKeCOBO+f2lNOHXGt+zslnBkMqlbT/xG+MEWk5/VB7QwRZTo9fp4CkfQvFAcyEk+aPxOQXLfi4WdZAdu3OJtgG1MDtSI7fC4tyCG6UyobMFrl3cWQ1MFkERtQx3wxlhA1o5cpXK7PTRrYpk6st8TsBqQyMgFrR1jawBreaSxYKiz51GoSj4Mp9z8Ph2HNRfZgBa+wXkpheiwUQaeRyYiuK9y+q5ojKt51c7SBdSpc28mhcLNGqH9wVT7O20f84N1fu+rh8oOheCJWhlWr0d5TFZvVjNPrEiJvjHDVqokN3Fl/tov9T/4gqLCJQJ8w0aeo+rG1B+YxNO2CKNNuZytJyrKTDPYwo0kFmggYUCkUMRDRA5WFMxmMcopUHGqDHX6Yba3wWn8J2FBODMF7/EKLYoqaCPx/dHhLAP3sVYEHGIvimDUN+sVBVpPTeoAaIs0ImuIzCzKRMYHxJAZ4kZVrKGoOXkA345PjepYiyEEVgBxPeLCNgugHVzveeMnyq31w3kduG7Dxz77euWKBALGZxC39we3LbvM7uyTsBX4MdBl33pZUEujxmN2mrrXzt9mX3WMv37FN5xN8JoAl95aS2uspCBfukoQRQosx3EyrGgcH+KkpUgm5uFz4O6P4YD7aighXs1oMflk39L0bt778ZdfV4beKC31kIdIevzzrzfmID280J1XbmW4n5PuGiBiwG9JZuluSoMPXDx7qZw6scJRkWyWzOaIPD0Q0nSbjHHD5Qh6Lgm3V14OQtq3PLj7JQsUxISPxozUTnYvASvBqb3QYeglVxuLdjfRLK0CHJ5+ZyAG+0SiIQ3kSKNqV/kI4NyifWsswGtHV2UyscQn4c8W1JofzcAsE3JxeJxkPvWreeM3JhkOpqlTUs7ScrorbJY3EnybCbPU6/1k/MD7ZTnAfZTQmv27ldhkqh5atYT8E4oiYgUZmhABTqamtQ0Zr2enAuvvpC7LOhCBa8uiM93eAfggM3ZgDJrjjr7U5CnP9fqI37uV0QL88jUCcbxIBCpH+cKYOVxHJwTXOPMy1+hZ4HjYCJwzwtDV8ZWjqKZ0X0d6FkanmB4tEvNcfpgKIcnixzN8fsJkhuhvw5vGV4gGlC5lhtLZYqb7+bFxcZlTn6xbeURSzWpO+hnYJBHps+f+Ra0nsLwVOI+mMjJvtJjOCRuAlK012j+Mqi/LhUK94NachMZuMd27oqDu03GEylPB5laUqLxUDay9+FF99+2TQ4rfFslDcSdkNl/K2nFACjQuCOA9g0YnuUZ/blAQs1pmT1E4A29Q9WeGfHnlkr/5uFVHaMmOoV/p3/0S4NJ6sxFpOcxvaJa3icFuXrAmkDWaAjFZ0lYMS7BZGFjSO0Du2cfWax9a4ZXEjeg3YIIJgOX5zFOrFOIbIHEFok4NrW4Z6/VLh+V1dlNVnzCQVJuXFObChNSZ1Pmfc+WtuH+u4t9dquXwHioF/GA6SMfCG2R6IjjvGDfLolw3gJqL5P9Cd4MHp2CERojUBGGwoJFpzp/JMof9Hhay435MZ7EN5ekRFNGJPy+rXsDbHlO3B3nnXnAXnQqkucAdDy+pDSJqpdoPyu7nPt0yxVQH/XBu7oA0uvc2BoMqilnPeHxSgFg1AqPojueUaIToKSiTxQDes9dwIDqPAXhmdlkPELaXqRH8pFyTat+c8MusS1MC2r9AAsK7dWIcTGwtWtWI5jS/vxAkTu2xwehguydb1u9dP2s8Xdw6DerY6MH07eZuOt+vS/sxYdtU9REfKegX9Zj735lEMyzZOhIX6v5xW5K2dCTS7xEIA1rOfeK7GrElgW1o9cVhvbTRGObmQD81nEFZJ5wad8Ry4L+ygmewVNXI8dCbK9io5cXWlL2WAb1NmEOsoiM1ByeseSl58pPdgcBTLmxZwKYrgBh+9OF0QgU6Cw0aLcDctG27S9AWQIyNKZVbvf2Po/tsfeuN8ljoQtMQNSAJAxn8W/FI/bo8VZWBAYjUInBoIBTGvphZO3s187V3Xy++Z1LgR1vO10bpQpSyOyrMVRMb0oAsS2jva7mddgRKJsMU6ffCLRWKrj97DTdAblIFqdnVEVcYdr6N7J/ffB5895CFVG99x/o4YdH9pym8GVx+WcH7r+3mRG6CfhuleJaKeDSzOn/eejVHVzXzoWjNJzlCd4ggndWSXecM63+E0gjOxHpq6VH641uXQNJ8sXFlyCs+YQx7frnuV0CNRK7JOLtBUvwUHzOxmmdBpejnKfooqQzGZAZv8FxLN9+H77JgZxXXmapUxX5mFXzyOtSk4ugfn85qhdLET2i2O0svLQIgtfeHP5+mgR0T5tJOPXKw7yHppLs2ChqP2iDW1DRiPSgqhLkIShCsh+AhI/JOZHg82OAX3VmxieYESkIYfVIreYDyny4pqczi0dsZdsTNhpTEI7rJ46S3xvdKVgjiKKscYsqy1PqCaY5iT/2zcqQlYPQOM0ka0Ah/Sz63PVEqR50o1c/vBdHEQbMZkHjTQxTCPhiQSt/p6nJ0DN5DzTkvCH7Urk7LtWWcqKvT7KJU+/GXUH1olKsoCUlw7VXdHnUc5awnyo2+FpRBaeFX4/qyDSQs8SV5FN4hFiR1rPzJ8m2zDOyy1NSBm51tMuYm1N/5o7Wkusaaufu8yg0kCpiR6CDouuMU3Dyqh6pwj3B+sNM0W0wrsQ0PJg9PHrN8euEegfWGCtoqBLIjQeP7tdbrsWHAKiOQMN0Ofba5+3vrMcsN7Ei4URLqZGoLIMa2bH7kp5h8xGyqiqozBpyZZOhV8CIao4vU19y5/TwYUfQeVbTYu7Z0QMy0JKU2ZYSVC506Jas3CuKqR83IsmBzhHEQHlJp1ih0UfGWUASSKZk+E2kSBWErcfL209RiBneJz9hhvt5uJ9dZtyLTkcsciMi735+yML47cKFgiYG2Ea34CMGmRRncAZqWNkkhaYBUt1Ryo0hA5yNiZhDqMb86xgXDDumrF8PrH4eJTu2Xpkk3Rrv6UkqGNJiHKCrwBlhsqakKbQiIKR6eXRbAt5cWm0dlc6tSIjysIYpqPy4CyBmDIOD0Es7FJ/sA7qWWicp8sjCxYBKJSeiez1vPIn05+MksQgSIo8esD2WPA+C76M4M25Z+i589XTAORfZwx7IPdOdObIIjOPi0SN8QfFYSKU/kbzw7ZnYcsU7nuXMWR4N3We1/cCmCS/UmRyI1RiAQhKFJ6iyow/NYBlQH4gWkZrPFdhK2fjqfi6oFJgAB1eQxRCWH6jtE+uWW6K+LCmnNUh4HnZtnncMiphwfuo4mk/dZVG9nncWnucwhM7tskCglIdOsmKkVfAFmaPySYsA+k/y0jmuPwGXwq6+3lr5HfMk0vWJpS79fUMtBqmWA3X9sKWAq4vLfj4b/YV9VOCjKAPWUzGww0ruldxoTNhBIb/tVfyPtclX4kUUKucdVe1W8WZE3N3s7PG3HM0v/UvRA5LK5exwdt/6JjRrNZSeAjLCMXngz9GOc6OrCBZrZc288bcYDoPLrP4d28YTktQBuDyQKhFltsNiiuZLRl1vlB3K6J5QoItUoy30RFNkjJVjcf2/T7omfSNDBxxaOmIlBCzoDDZ4kQOYlt+Vmt7BM5iGbSst6HcKb9E5cwipW0rGAmz3zkiiaZYlUiGjoBGP9ZK+aupO3FdZWdsa5agSfilBvvdHhuIxtHvZ8vQ/NZ991txF+EQoOqc87WcHewUMkn6VIK1Bc8ORdN4ZHIgcXIo8JlDcct5Ekn7YsXbzXLksoktu+7dSCiabWnEm2STUQG8QGn/8SdtvOiuTvP3U5hJsQNeRM1iYBRRa6/SIJ+bwRnA66NmA2OLWzGird45TtcT9JqHBO+L0qcBB1eIe9fORVqd4M0FcISAbUFJQAnJMn6egv0KlHvZgBhDLTWIG9HST+ls5VzuXaL0TB2M/hwPs06N1tWFJxb1dew9hAccsbtjNgK54ZTbsp+7hJfKhBd229bq6BlXbJtx5lv3kUGkMyZA+39STvxc+MfKmCTUA3SAdfpnPKi2JilrQZT9N4DYZ+yjnwgxaW3c64uqjJFB+hlqsZ9sAfluARLwM6DSsLrVY/FB9mn0TXwY0Ef0zUlaleDq9jrnG9OY46/0yoJnoKAtJj1Z/XzyH6vEQ7A13lgFNxTqmvti2bbX3CV9RLAM6A+uYpR1r1D4RY0++EcuA5gJvKZdtnZDVqCfAwtCQ2s2AroaJDnohZ7GYHD39Hy+ZrRFoNorp+mj+vszrdKwmlWEsx+EV15NIq2EycDlKD2gy1IsWF7Mz4flc1tse+m86rSe9V/8+nVwXH1oKtpocj1GMOVAsIF6a87Q+NFJyKYBxSIp+2v9qv1zMRuMRvZr8SVTefaGnAPpvsD8DHYLewx9DbiuvugSRfnC8znNE12ObXQa41xmUt84oHdLLFK2iHAu/utL0EWoeCrGs3fi1Hohg8u0rd9Enhc5jR+VBeW3iRzxGqG96cg+8p8OnWuhaGb2nSHTZxfTdSrpvuQDkCcsWF5S3oS673OhCZzWVrObAdK/MZSLuEJfAplw54wTcR5s22sBCUEU1FlSBmVmpC1pLZdR6F5u7qohNb4uroVJzWIc2hLkVdeAaGt77OHCmjazEjFWXcUK8FOGZmWkLctwr9EaWXWp+rPKGGMW5gIkB1Ro+88Ct/JHfgRcZbqXgS26skYXQs6u/VaI9MvGwoHj7SS2nVO2kytNL1WKFSWsXIK/NERsGRYL0mr1OCr1bOSMymdGcpQH1nK8gxit8BWDcU0Gnl6mMaluJS+egWnhDtOXkgsAGDXS8w9QDgUWsga+Ocq+yVRXghFpu+KQzfxdKW/VppmwYvDWJwXWKP+Num4wnEmz/VUCJuctshhY0h9oLeoitl8qZkeQI3fH6L0VZqfT8ruErxGYiytMWCPsZ0jkO/1pAzWAiwNMBiPu5KdpRLemRoPzH7Wco/TZCt5miKYHishXoUnt59B+fOEQMaDSVAOFiGMKbUE+9jsNkdXdyxexkfekHqaWdLJxdallv2xbdhE655U4gdCPl5+h+VQfhMzFE1YAaC+Z4Ab268jsxW9ErRLrOOaEFda2S/TN0whaMwjybSMfvQ3B9QbpaeNXmt6C+R7f6+AXbUfge/G4CBt3UK7ACZoqDLwzu7McQQXFENqDDap79SLAicdUoQAe6LEb6PxFubeFfoDNnWUFLJmlSeo+6UJarhqbnHvRRMbjqOKUuU1y51k+2BnrhJYTjLN7zHwD33rAzC8NHw9H7asT1IO2+b3vMt39e2x4qKqkjJKdFo0rejdKsSTwCbN82BXjqaXAZ1bF/5IrcdStjeUObu9GjMoNvZ0oDGGhGWyIhe6p3GwmWyPCY0UgRfEJtKJUAuq2A9LaXOc86KgIxeXDJUcfVYGUBrFx1OgdP/ZW3myHPSUStB9f3E8Hddx124rJ0gfOw6TQTJA1A1swnqRytgngc7sMZUJ3ziFIPlOYU/r6fLT901nQ5pKQYxlpITPtOjYdxTeBkmRDWkkRVqAQHHZv1mUZNwyi9Na2KYwXSMKDw1RxSrpi0rRBVJRW9JJ3z+PyCZkQjNEwfgBXrQTahkmbPz4KmtJ8y4qq3vNBRzmoR0SoD2FrrZsgBvfYkrEqM5ARkUU8C0oD3S6Jb0EZN2emO2o+cQ9CNOBHoNXNRs7IlCG2D2oXHrbxmUhR5rR4mSMiRc0YAmECmRuuAGYPWfke3n91duJb19BqCSrc2PQoLbn0KczG0IDvt0VY1oIwO+IOxd9FORKl/aySrkSZM/p2rog8osUhoatlQNB+OcUbYbcNOAShLMpM8HDdJC/puE/q8QMoPVHtKXDD0pBz8ff/9dJlUNfPsFpytObGP4mMRWg2jZwueZxDHN438j1sxgOgPR+iVxFVGUIt3XtNgD09AH6JA/9LhHc1UhyL0f95KyBF+n1QKGl53Sojta+J099h6R1nGGXN9kBH2u5e1VsuCXIkrtMoj4tSnhtxJpLMZ1xnTZVt+75RX9UGN2LxD350G1Bjl0lIgAYifZoeX96h+PP2y5936qaniXhZAmAJ5R5lJYc/C9xRn3yCnlnAp74zHrQJIN/MdP9rwV4xGoeMhWcxfpYFqZuGYjsr49NfuWTGDbrS/SyKTVWOwbx6QpU7NgDJO2itWCpm0wR4OpAlLa2ShwEzTEuyp1YC/1sG7wYdrrW8qePw+uFdH/0niXsVtCxVMpLvWEWD6Xk6NQHbqPFkS3UpQZC8+LGBABCbpytT0po49i/DQK8aJvA7YKbxmzZuT+BDdmCF7wfLDkmJH63onEELwixOIpdLVeGeO3w9RwVRHoLFEH2PQVl+vty4FVBRske1M746ZiSoWwjn8FOC25+uXHq0vXOojUOwI5ns5T7cEH5p+m6RMuqKH16q9ExS1+8viVEtOthDt11ZD8QFai1LNVee2xXe4rAdXNtZAqceI7J56tj2kVS/bpzyqzo3x47KfiqkDs9UpHW2J/nLDaw/f5LAFRgZceVXqM6ziVwgDcQhsIkV8RamwilrWqt07sZWqzcKfYT+1aTybogmXOo80Oa+2d7+qM6jhdXOu51mLy6ByOdlNp5ID4/gIPR1WVgbeUjI5ibnlhcGw/QG5U+dsqDS6XUa4PxFkyHClHdzCOrzVUBSMN3b7WvZL5cqJA3ijQ+0xl3YBtAO3TpNZz62nPxZ13TexpX8ZatLAbCqQ1gnrCQBvRRxe4NgK/K3lHe0aNQ0ovchW/hPNEkZQZ2lmrJMWZrKiZyQ3eJDqbfV1QqoBBptQKBWBsVdGBXb3sWugZZaeg7OGAMT7j3Udl7GEYdX+T6Ch4/DF0HIAq4xaMzdOjjau9jyJxHdWrP1uyv4zZaXYVNs6h6iqpYywVHQHaELN7aWx/WzSNqCVEgIHoGRhCpxfztF9BkxRCRNKP4MssotVTq79ozgKIbk2dBT7idpEitXm27bd/cUDFnChzlkHlgZckVghpaYhvhfybehIrdwxoPd1W/li33IgZeArTKXc9UU/Fe+elUtKCtsiblitPegLCF2T3hro3vkmQwqNibgytbiS8eR+oPLqqPgjOk53E+nUxAbqGUihoKgVOaEs8uHdwadvZG8BW9BfA/2sOigaCqk4JPwkQrEj13bNokBMw+EvNPQSFtp91KZ2OQ2ljGxGm0jqLbAL6rFO5FCfEy+YqPC/WIdR1vvjctwOEblGm8U+JmtJvH9yjFj/3ufoBgXeUU5Cq1V6ucRO4ffnNM0NHv1fY7nQjj/PNoBvcXz/O/3O04LGOg4qTYgHs8ypL/RRThWO9/+KcjVsM+2cYOmTzUEl/FkEfbfHtZvjZmBIYyBRsfw6URdavV5oa6tyEmkYPVMzXFbOBRky1OpWm2B22bUOLNqW4o6aB8Gyn22Q9WperjMCrT/Tj+EVipmXl23bBpNj46kUQrUqgWMg5Wo+4kJUypw81c7lIQwqHdc7XjZQI2a4um1qZ+Fd429Axrefa+hj4RCqKy7nqceg7cqlr3atAhkGoL9477QmeN0/iBoPOpVORMB5CJqw6rMTnHilyOOSkG4ygDo07qlbiIrpMEW1665PPA1l+pmQb2ebBGBES9yhr+Lq3sWB3gsvSXOKSlv5KyTYW7QyeaUMi/AFXADpqGH88WfRUdB62bzhqD9m2r/o/bF7sdouvNiyEmyt8r50MV6FHV7cTr5nPV//pRnPlORZD3wmei9yKLPSTFygGr0krn0QJzSMD7beCBRT5PYaBnmtsrK7whkanoacndEnc0EHyxpJypFHlnv1Y+cqVJKUJFoXoubJeAZJdMY8w+HY/v4xFgFvBMp4Gp6K9vFu7i+bDkZGw6J0H1cAXdnH1wXphGsMOTeQsG4CKuAw/kRp7rC3NVMD9nYQio70UGm0T9UdxbeeynQn8TK2rVujSxbLiE1KiDNb+7AzYBNEbZwAbg8HZlqOgWlABSSH8g7trS6y3tzHFmp8FQLibRwiE+fE8GA6hk9PwUdmtFXAA5uEUjhm9134cpTZ+NOYzvhV3bxVzkW64d25w8L02TuvoU/zvPyAWyTs3z3ESHr3h8KuEDaWa0C5xUF7MpB8+eztpwlU4T/WwtJPu7B2IA24bDmTqnnemxJRkGdoGXsEKi0mlp5eC3MUHxYvlN0H40IzDTXjGU2n9sonZArfvWdW9oBiWMnOQpf5m0isZVBpUV4L4xuoLCVJiw1nRysd2XnYll1gie9772CPqnrrwHf9R1v+wUQKQWAXPtQWXK0wgPIlbLltY4j+ru7fXz+BqtT8ln+kkGu84/M/0pn0OH8ZpG6AiTZLbCI1xvyAE1H9g5XcpRxPwo99K+vp6V7LZkEa+ynHUfkE4qtARE0ScP43R8YPtPZMl3a0IN9oMQAVeDeDB3lKqk1LEh3liTaHlwLlV3hjFw4ux8GmGGAD2h+egxxx8a/EwkVRIeYiwjdXW+2Z6eXidsDdxnV0yUdXgDCrPKyT1QqokXCBBvTmn1nbcwOsIf8UF1i7QtMh9+1XBTVdATXvEqEWoNNiaT+vzqQhbagP/NNTnNSowAxo4a1ZG19u40creqeQNjV+FQV1OZsoPSFKOTJhKLPS7zlYg7k9kPmnp3ipEQEZULBQh8VG12v/lEDubMRtXBpMgbGAA+0tfgDH7fLGpOojshptSzp/32AGtNbqxo0uPsnep5lATf5mXB18Nv0SeJSmWhFqOOOZdgSAG5OiTGsV1a385cBaIMXlwDlB8lT26scrA8VHi7uZXiqrpQNRd2EOlJrYvhfeg6QeRigmrZYmnyV7O9EF8IgaxuLzMuV0r0ZvNxSqAY007YCTstCTEWj1mVUA0dKbdKfj8wOXmXAUOLzPeD+5XuR5AwAZ1p9KQiW1eICsNcI4gA9MB6A/HMOWXXpBAAvIzpBinXEKIpKyZweHZIk6OowE4tLMnmmpRFJd4AE7sIdA1M9wNDlWlgTQodrEtfIeplMoWR+IBlSu0sOWXdZvGrzXq5BIDsfGi4uqogBKXnbM3WQmzzvIGqjW60Sqed2+/2J6JhE0LCLNIwngDidF0mKf8A31OM+qGrQCihuWvV3ydDvoMz1chckXQK85IJPzYOIkysy+sVjWQXbfLHbbQ/kHfBIpVvZ2dv3M9Qh+AoFfNTBDia2YydcxWbNKiT7rYSFV/kV4EgALsOxRXmayn3hca9/KfHUnCf62wMpdRF4IW9I3ZagI8J1H+PeWcchZs4aFIYS9YBaEQ07Rp+Fv29AyFuzp2JRiawO1dF+Bxq4enanqlWvgJif6XPW24r3DDheOmFfReGtf0/9UA5q7VybXciIW7tk6SHnwuW0iIUUfIUBcLnDvRPqNPXkPtut0FZPWVGOZrRyCz1a/5JRWg2ZH8luf/DXQAXoWXrRjQ+IzN++1bEl1d7VSrMz6RRzPZn4o3E9u60k0wgC0HSg1hiYFhPJKj9dv6CIVtxo6HJfPgBKiX0AibFkqcg2h+alfOwJ9We8omcwyCKFFQQkSzi6gBb3PrREWFOqWhSsQLbUAXmo9Qhfuhcz7ApvBfzXBZ1k39AlayYvXGihhqCQs03AbRkWBoPsA4DjNTYtHon1b7rFPAF4Nyo5X3b8/Shy26sRetSC5cRiBpujQxHPbaG8GKXrJuQ/vk89fpSxIbxDq3UQ9HHYdIovjCm4XfhGUvoWKa7/ydBQRmqNYezk0cyz+YFi2n5NPXJW98bdtJBGJSzWBxCSLaLL+GYY4dsObqgl1eJtVJ8dbaezKdrGa0VX6A2wE6vlUmhJj++mujUtfvtytZcB3G/5KZFm4nB7R/7ZkZ3vDaRuFvEdzRHlQVc98qq3vIEF263RomSQG884fTFiSo3r43Q/tYFgAqueunWtzt8Rt6BlvzFtb9HTXWRD/gLL8Pct8he+Zu1jeOVRDFvQpg4UWASWft0eA3Zh2uWMtcK+WB/a6aWt4bctpqxmLsquFFHxe+4nxA5UTPdWCPnfw2yOL9nXePLDQIlIHSsyxtYRn4UhfRsyjeVZbOqTZZXVFqY4xek6MUjyLKGtvPQx6GzZqZ3Fra89PX6r1uJ/ww6EuCqB7dlX2QIpbrMnFQoKGAqt0OHSioxG8cs9qR1eDL87Yn+7SDqhgbkCX/VyEhRdBD7JLcgz+Dk++vFu1a3WNJGJ/yDgqW71FJUsg+swdG9B+ujFi3i1mATvc4xhQ0EyRESN3PMzTWwMVXNiw7d/69rPBMAvaWLx7+fH9fxnRBY9KADOAUgnbT9HQOY6TO8AYyyzWNw79FZlGJlD7eb+SUeC1RbuQgW4GGQYUONQhGxpIL1XqNU3T3bSgQbovb0GGkw/cfoIsKOUBHqQNFtlgLOqL28/yVuqOMKhfqfSZzsi31fWD9F0r+0kwXu3HDTUYta6rwSIIx7bpNmx3ojvKmD5/Ag3SOtcRbfve/SoDLlaGe7zfH9A2Ec8MO9MZGVDqAtKyoFNhcg5psFA43MHE3zTIF7TCNc4EVjSNTaSuREtzGafP4puEU/b9mxR9oaiTNI1AT7Mh62DTgFqADnFhxTsIdxlyd4onousKysd6IrkCGuzX5t7ankCDFVPSQMNutUKFiAvosTDZDR3bT8oIlDUARQBwUBndJD8CHVVMe4xDP7QFkVjtof75oVYxrK6wCpJiDHrcv2YotC0tpUnQvvFL+MPhnUiqY/5PXEG5l6rAgyceSm9yYT7ksYnGm5MVNB9jiw+d9jWVFUE3M9nPyV4qd9YNIT2BrkjD/m4CVwFDVKJH+AL609+HMMqHRir7OZcBvU/sBFoXZz9VFMrxOERI6s26jCoCwfmZ+P3QFIPovMumnOHxJ9mTrx6Vgy2zoz0DWM57zLx5JN/9ssHsqcveMhY9J4Sll5vXJlIsUNsLtzClNA0TXqQHqolf2Mfj+kU9+zXUtIbhLoa+hd5bG7/SRnwKH24cgJHpufAB37zVY7/9tKHcN9PaSfumr5p6WA55uQLT++WLP3kBUcZLP0Npb3GqcnewPogRqPqRMDb8B9D3tROh61llt2+fhridHGUS+OdQOM6f7Kt4bmOkhMGrmdQ+F+ElMWAD+nV3nFNNvwSrHuKRsFu3TbNsiqYs3wCU08eL2po/JK4lqGVPfvc85Uq5O8m3E49ynp6Dg1zHw0BEoIBg5swclHLi5j9sU5TPllX5VUM3LgTh8VaRsPMApmpBI0WlqRZGE8IaqHIJj/NyD3LhZzZ7O4mNkkNeIPKew63k0enXL4clItQTyiFwLfsyvIVjRzTOGzgCvW619ovIGdtUjpjMZhQRqNpPxR1LnyYj5TqeorLgHDnlncVUa976IDQS4FGoRLFJu/A836/On2sJoxRBuSVjKQoTtcokklLhQ6CbvOWcYtgKiJW08S9jcR2F7vu+i41L7+nADChSz4iFbUxxcBa0kJV1d7bIL4KJStCPhigbONZ4gB2sYGAz6DqUoeX34iP9zFMXoh8ow4Lii41usPMjR9bWRLBcYihVxklGWqt+Tklpn7PhiMvcgh4H2g+2Yi8lNKRc7gXdBlo5Ht4xuK0toEhma9SMomVVPrVIaKTxzaqNJawjeNdwdurGR21ZZQhyalbOT+JSn2FiIKtHP8rZXxBvLOQi1z/zITzghR2EjwS7bG5nUn8FkMnZfQC6bS8h4swGBMudXYYnf8Eur14wA1rvyP3qVExo5I4Ppbu7OUMFfTmuH4vTenM8Zm3JrJV3NwZ2XaSFwToLP1oJvW+GUdMK1WuatZDb6Rtkpt4h/HpcebIeeKPJyold6qE03pHSD9Uwc5C/FnAK33jyDx8IYL1OpDGhTl6wUBjP8eQQ5ejNk52PI5HAKkBHoA2NMqphMEHehCHoZZYIsypfRqFGuTornI6boByOreA8BC0AbyJRx6BT8lmad6n8vDP45tkbNY+rYE/mxRl/i3PXj0rW8DVQ3zFoPJ457jxhWXvliB+2PLbL4Gg/Thu/V39bXk33EJtIy4KGQNKC8PaofCzonPmlIuRD7NgUWm1cU8wufA4LavvWVnMiTeDzr2CENAVxqIvHRmi4bvzu9eKd/zzLrNYb5UifYMno+xyqt7K7lzYWwCqMI4VCeBUvlljmxl3Wp1VQg+htg3j5yOzUTsaI7DteEynvqXj2u20FgZE/R9JMHZ+DrHm/bLe3bbOoF5neacWOSo8Sj7MLL3AY5nhvuoqYmmsZdI/igkDnhj8WT08Xl8GwrRka7YnuBgrXBIr6GF2r2nweih5x450WxycMSlvoJHwtNdYTEp33aEwDz7mSjFrTIUCfRApraobLC2nOOt347PbrbPojDov175dwStgvH67pHZXLFgBu64K4ZcKbevDsp9RG+VFN3AeCLiqdw2GeMR+OjONMi6LxkUwEEVwXnNpDJ8GFDa15IGcEKjhbYndXzioXI/OxPWheYanI9GhMhqgvEWyq/rlHDNvUJFLh3kuf4zPCcgsbCbZG6RCiAN1hyLd6lCiSuvEhBBPROhWik6w7x7Fh502LV9frDkLkFjYqSbgrY7sAqKJFVDupMsWoG2UEav3IHvqfuqt7m+P3IXApA/FRruOuZkMrx5hq2mo0RxF4W0Df3xOLIOOz4vxWPFlEpvAypgElsaP55ZTg+BJlbqVcJhQD0pP6/T9NxkNjbY6Ei62w0h+n/0PIqEHsXfht05vEgw8+gGbE/i18L2WOZ6oztGb7jfRpQr7ontCAAPn7fmJR7OfvKz152J1CqxjK0AIq751vHGopVfzhQQ2ALJVJoywLqsTR+Izga6KCxIjZm198qBz6UVbnQaUDyGQjR6SXf16/0yoSA5wnqqfELwyXSkGXBR3j1nK76AvEm7kQLiSVSVbX6tv5olkUNKodoGv/aBdmtJykthYyONvS95BrHly1dwNVO/Y6OwTHzHBLmNu2CZzaO/C39HMnlaKX2CAh9kHZniNphINIrU2krxeJw0IEpqsgb5a+baEBfv816MC+UhGcoi21LEW4d/52/bsJ9Sn8UfkUA3J5unLVEHqjpNEEGpFKc6T3fty2LczyqiDqE7u7yEaLh9YSrhpQgSV5JfqlIYZgsFXrWAKNCWAlHPNnNzqd3zxzHwQKcV6WvnXVUk/MK12bwt+CD4RoiBcs4xNixL8AcXvzaUSPChBnnYtTKktE/OGbonv9wdM1NcVZ+A/MtmAvSS3s2E/NnbiVdt5G0ARULajsqGx3PKUC2eYO0/hjA4rbFFStGCsYzwKJYHSmeZBUQfp++twTP4gf6DyrdpcVaN31EnehHfpvKVw8B3pnmcZWVimn8DX372lk0KqITJSEQHzPLU9VqzZrsRHDkpAYxJNIU/EeqsmO2Do6ajAwPPmhPWQYulc+KTDFsJ52Gl+6FHMAPLITQ3pD3WUfeYMlcEAu7Z+YUkUgkE9CmofQxLNII1HRw3B0w9A7TmSLvI4USYU4H9VAw4Di95WAcUgdN5HibgPmBv+odUZ4MEQ1hBEMqNb+cTGFT6EYDfj2EzC9Pl0hPJ2T2vapxM2RSPbxHM0vmWB08PJWWGL+NqXoWGJdF7oGmkFfBOznuKJH5xsLsYXYqt8dN9FFEQ/TpxQoKhaPZczuN5MTMzap1S4h04DgsEX+T5GNfFYTlyAumEn7aqDnnPj8JvAidofwy4s5T2GIh6mieTtYOmAPc/8iUQywAY2hLsILi/jkEN0I9iQSXedXSlEd8W6uQE4DumlsnOCd/lwbWHU7dxIDKrmx2EsSNWKFDAXlpR26/aqkME34ucrijJ+frvi09YLoWXj9Q/2GAUEqpwfqTdE8ZlArLNB+KhD2NMTUJzfyAfLRw/PrDJHsJx/IWfjmlZ379KQk6OQ4kO095ebl4DEoOEWFEWjUAVPkNfcTOVeW0YRfikaD7ORY5AyoQ6AObh6jh9M1fZJl6s5c0CsIIHJZUPxTyYfZDWiKdRQCOodvTreDZ6qDjFI6b2MsqLy1U1qccTwChSdNYRNuzWGY9vmgbUD/oGsEWPuZwk/OlSWgPks+ZjR8IlcLjKk50os4pKcQ/wyP2MWCSbOnJujC3vwBVz9w3uWzcFQ/Bge2IpuAXKU1RvAYcSQ5Hy/kEtQeI9XdmPa7UNdQTZy+koQVON6JeiHO8f5PpCF6imjsT3acPiRRspYf6NWHEb0A+vp1Ehm0UaxApMc+lOP306Rp8yuQCsfpE19CYorI9wI/bl8smp+bx7+toaenQehSY3N4IR90jPNdvZde+HBthyCNcF7sohapUFu3N8Uh6JxE2rUOJUxHNBE1LajsEfsM+n3hV4VkBT9zaweuBRV52B63b2KBKQRUrD+c0D3KmVjNRHCrfzzBZ1xxuHFcP8eTMYhymOZfEZEyJV0HVH0n0gS9zgX+U1eiFGda2s1O2K573MsqsdVr37mlu5RAespviVJNnt+AD3+pXFeAYOlSmriTuEC3FO7ZTo6CyvYp3/vh5EustAklWk5mYrpaJGJAm+GIJBJ3Q7n0zeRF8hUtfOwxAINkJjTieaFcErwhoHx/MslMCEIqNAHW7+K9c6GfjkJDp5nEtxYhOBWYKzBbDVwINsDvSWgNQSXaT2YKn9cE644D0XlLmc9qWkFbybMJNn2zJHa2RqegQZXiCteCNsYqvFRf/JNJp+orUEs4i2cUPHKnZq7s5LrR9KA4zdJkhdH2ZiHv80LuO52tieBvVKHn5kMegEajOFoppl5SEelhJTy+PxTW6IgTaajpV+CWt0KuO084Nhi+ZqAKyIKWhQTclcK+tC1oHPvJd2a611JKvWrxQImMS3j0/yyQr4wH76DogMsxWUe2bdtmcmi/koWVJxY8s3sC45sk+yxnnEhMG11B1L3wtIgJ9jKQ0y613dqhERLKGa/W5ZgMoOia+hsc3ZMc9Tw0ZCpsQQnmRfYgmEiyneQ59jOiARU4rF9B9KVy+7bBVzllhr7oQxC1RSnWWuHs9tOEXWl8AAWvjCzzEo99uxXYvA2UIjgUOYjvM5hRCkjHi7ebaltJ+muFGqfLkyAxAj0AV6sMEGoZVEGOQWn2k7nY00J+GglLUXhUbLBWJI/oCNQc9EPrFvXg3CikBvLxBIyjS8iO1t2KVq8Vf4yzwxsg1fjzDLwZpKuoPwZVwHCvUz539OI3fVWqnpWbJ7VlxuxxhrqvARizYRx9XwaZIC9RHvLStGufXv6onMzOwusfmaWUAVyAmlAlvd4hHNWPjpAmep5FjzN0nxyioH3b53PaAaWhDw8mwrGg1ubzUtQYFhRCuc3nWPZOm4U4fCj6OiA/yF3Dekxy4iR5TBs4G1AVdWklyhsE39rWcfhZ/a5Hs6Ik78ltczWhNq1Gqt/7wGdDOJkGz5yyhliPQLSflQGN+2CFl2z/Gs3d8UkZBiWvRmXsltJweZ4HQHE7iwEuXesucngLoHfhfTYyouBUZ9+XZ2gctfQLNF45dKwNIMOOe8gblfe0qMAtULWFNGtZyQ6sn9gR6HkjQ0ARdcQy2RP8OFj7X3yqO2jMNBHFF3eXEU5PIGfIAk04Q6lHOQo1tp9wpUOOQG8PSm69HqQTdJpLunbSI0XSGAAr/vH5T7Ky4RwOYeXxDrpiyX4RimodG8IHdi+mIz24E3sGPcpNiM5+m1XJnMJFuaOLrmI4WVDEMbf6q8ZD6MIIqXYysg5MmeIMqGwDBrGfsd/7F6XPuCztX7+FbicGiG1Mk6grUHLYczIwfePuwjNkOGt/EGVmHR3VTdFzS1f3Gqk3fl2vFuwoU8A+FLBIPbhK5XcWHnmKMu+U5tlItlHuMahM4fdtQwX80GSC/seuAduAQpWaGhH6+P70Vxgc1VXD4/b90fR1x7h3hvDgPv/eM+4KncBFU8FrBIq1nxtq/FG/1PSBOfDMFXgeJFFVqtR1G0tXF2qpJ2kuFF0pnv8WtfJ8LeCfRIKWgRQhcJC4TLto9KVxmtxco+pkQY6CapcyhxSwNPw1i/eQTnLGv4LTWXiYDyD5fBVuFd8JUHVaRc50llSuqLP2wip5K1v3TJ/ThgpM4QmroMQwFGVOqZexGXsiiczn5nJ6coj+G1FN0/eiJsZmYx+3rQB3oVDU8raLYbkGut/y7sLpcu34QfE6Mgl3zcMS8BDNbrlGl67BwBTvE+t2MeGTjJ2MlFI+n+zY9g3dstx+AD+UBw3qhTzhZBUrjDU/H6WUsjti66FvchXj4iCGt21NydPMx7ew2BGKcjCMQfL90lZuLl2JJAyoihRgjsTVC3vFCWVAic+SPB3rCu5AvUVL6c0k4cPbGQzoD/QUz8J2gGO4jG6raDByCh9wDlwUCd8kwTX1+nAPXtgOVFdgPfRKsEMHQXoEWWe0p7BRtPk8aKERvZlrt5YFHoI2XNYRySqUX24Kf05yF1va8XHo5zbU+K5AQJermqpCr6rtBlkzYxDKyyfdTDrFHdqZN1g3ppD6e34MhCygCPu2S9Xu51FiO6M4t9O8DfVm93pvAd39zwOT0qGXZqH2k9AjzTY1kItgwAe+VfEhTRbj9KBpKeDrEC0Bzmd4ZcfaCnNEcKORjKFwg2KkiZN89Wq8G5NGcF0EzUksuRRuPTKG/bQN0bGft2wX27bJbixoJpW64aABVrE1JJxEumehJVSjxmKsNPW0Na6q1TqGJcCZbVwB2kCpf1Mj0U3cODekcZpINklcauXJHGx+lKOce+fbU3gd9u0dTxvKxUlwlRLHXiSbn+rgiJCOWDt21HoyXbnZMrzU/yjPlJn2AmgP+tOBBOomaiTBTdYr0lEOhAja0e3JqBZOrA4cP1SSLftHWgN7HdlSP/+m0ZDsROFLQxGPgEcs0uKmKqSOJdew/ZTEl8ydRxL7u8LEYvzbNP1MmRi47aNrUV8aaiTTqUCkAajxRtKiws+E0prCyn7OCEf5/V7pAUHDgvKCSDQK1LSghodfQTyvd6SBpROrXbdt8xDDn0+2UEql4psejtd9U1LtlVCpHYLH0VoXWUxF8gZ1CqgM5m5/JMT9ScNoA6zMxk9n8A+ARQZW83kRewq/bbdZsIzp2Y19gpM/ZL0IGLlmIY1Z31Ba5o9vQD97/puksOWFubZhTFhSVsf0uWXXnko5ZTCg27Y6ziNZQ9DZgUerCmAAqur4t20hCpef1dnlWYoJRFRQ/cQkswKEJ/kcD4j6Trrom0iG3F/FuvCn2IBbLUQDZfbiPLeO5pc67ZJL7j6fWQb0zct4LhMandVCVWRtXic1ywFouMCmlQIvA/oC2DZxns1PoZS4ezcKiey820LPh16EZUPTmx5VofZUtEwmyyaSMqfgIANNtOq+YZbOnakFj0ouFZ23yshqZis1MdETD6zqN/3x+7+S2f1o4b5D39wyNYjTnTan23+5yLZNlrP5PxQCrLtCDd7FSVrueD1+0FgFVB7SIWiu3Ye8rOHil57bgArZmYvUqDqiYz81E74QVAeChRLgohyCW3zYeEtwmBDEgAJLQ+xnrAcu9JFx/P4mYEB5UWQEMv5ALgDOXun3aaza0pNWyUMS7ZmkLQP7IlUrsY5xTg2WyMiCEoeC8CQY6yOkjs1eAz3On0z1ugzMScz+mpB/cL+1S/JQpFb49qsOMVO1dfwc05cS/TVHyEBrb5gG9O5nABpfy7SI2+5CLUSdasbZN00YrGcJEW54UXK+yosU24a2oMwlgwGsKTxyuCy6MyI3kSYIvMhceQAqmHyuRUXFLRcPhp1UfMvQXk4yTdaVFGabgrH8CUriHyIPUJ7tx8MBuYiVtxm3ORJkWUZg8UePnOZoMcClWdUdoMbmw3L4TZ/CYzu6qGFoJSYx24WlcZrIg1a1oa+Q0rafNf2Oaz8NemMoZlitqbaZcb3Q2ZG73T9BJ7H3H4bOU+2L+OATJosOaxBn6BxBWJKMTGlBpdtLvCvRhy3Uo5y+U+g8ewtH4zPkeh1K3Ytsjqpli1zgxbbt11Oa6V993uOfvDaCHg/gZwh2kyvWOC+ipb8PEEIJDEK6AsOZpmqfXYJpKtTin/AEXpjPwVS9drA0cWPjHtHg+lI6jU3fJyfhGe3kFo0JNJ/9XoQwLJltkE3Z9863gNymg+HLu+Bj3IkZ2UUOZ9dcP+zXlx0xUq/1BilbnbNMZoN+NnNZz0UwAoezo+/bc6f8sdZRFQD7YAUhRSEFeEo9J8JqBIof1d3vuASRGt6ccSJPKjPxPSRvEa4hXSRWY3zIIwnaCNTAPLHn4Zw2EBuCYqLcUs7AHe//8OXNo6KPwaVJULGWHolGMBGX980irVo2zSCIdDnpJ8Mi1AYGv1Bq06AwhRdpCDEL7fyuTQFhQIIL5FyzWJxwtZ/blkqFLHdVB3kZrYEKtw1SgBlUg13EBHVctBXX3X7WfrEYtktQNybppkSmJ6jNdkcAlvonoLVrt+bPV/ohP82yG2+yyhvQWpbikZvsQobI0g7B0rxlda25qPZJj0auRSS3LwUBM2FBfFSIBtR9KjKdBQ2e9kKOsl+uh2SBsYWpJApz8ZN2pK9mqhEgEO0IgNiojqTPkcqyEOKqvIGaWM+bA/02n0YH1ypg8cJ34H1UA6paPZBtFHKlsvbIElPR2gwsUFdc9Mh2FIzLcfoJrfC3Z+6fe3VFdbYE8JzII1D62+/Q18JL0CWleclY5gWAHR2oURjOwAE7nLxFsgDeuHe/yrMTxsmcUsGHvFhbC32Pg8zeunL8bGA0NvSIvnrDsrd6TBbfkj6F/N0JlAZvrBUbxi78SQgmQcbUVj+sn3RwAhXl8Ryn/+dlXL+zUzXMwbq22DSNHDmbSDv0oUx9VTM6XYl0nIwW+mVvLsdpHbmtiHlln3IhSBAprZtFjrxdeG8hiFlQ7+5ZhVCWWdSy4Hxq266Ov2XKFXZg27ba4SWyNCzbURGjSuBcBBDLewgL6tNe8PUf7FrskxZBaS4mQpnutwJMImPoTkP/HkBoyfafJpCk0VHOvfmFlAIzLXk0QpaQqjblvP4uW5tKHsUH0+y96Cky6fASdiM0F1YR6dVW7CIsBX73F1jmPKx3dTxwryd4IeZvMgvNnmO4SJF/PcQsmMhXUoAN+9q5qvbFNK8yOU6PbOxG0O3Ss18D4PJ6aeD5ZYFepfPEQHCKMKGMQTy13j1MnwDwMRpyPRDQsspn1NrZKHkgVFIWzyAG9IPAPA/f+eO7tGoIXqXvXTzOBnh7bEzD2cHdRZG+meN0jexnBJ/hJ4wTiP6HMqPQ7H1+IUjQeKDobaf9DSQ1VUZdVLAkqIFCWsi1qd4IT20uKVYx6hVTP3Divtb4tMaNWUfcNs1Zc0FllHPPzX6bK//S/Bv+ee3y1+Tjhx9mEe4WYwc2OXEN6M+7Ha2x19BU1gpfWlCt0DsR9lEV0endc8hGkycISKxHgu5PqXNU60vJ5EYlT53QO1MPk3h7D2z3bewOS05QO3TUoxu9lnQQp+g+BU4R51IeFPVAV94b4U3VTN9S/eEnx34uA3oGY03I/hCBDiNJN+tgCl/bY55Mg0BEDSUx+SRehyWbE4hAPxMsmLarQD2a39+Fr29kTiBIHH1X+doNWiV5DGElOLvxRdYPdnnnGAwuOx59y0Wza8jQAZC7pqPnKu8+0XMvgA6KM3jI/c00YouVtjUC3XGln2iIYUlYx/YptwRaufDkJoZgBtR9GVYFpv0UMaCimw1Kfhj1PL6gzZuS/YyhpSrnFYluTM9ZRiLOJe0EtHz5tLi/qJHS3YvGUVOMmhoAz07THQbBVLXU1ohA+gmydY7AJ5GCUHGUv3wL8CCxeJ1KKOzqexWthP1U20Jo7iaCstv3jaJI2BMu5LvNQJxUewWq6RjQ/oorOKPUMAIBCZZixLNMKGxMJZ4ZQcgN42Xcd2DZUV5rhrqjOF5irLTCUv8kF/gkUlDuYU5CPEq03joVEOOa7fQjEE3NUJjG97QwyHqbeCks1pWHea8pfA+Fs9hK4KJX5cV+sN0JUdOnowDiutFPUEkVfZXs7FsoWEGsn+LfcdBeRxFi4BWBILaKu1qXA3DF/CUQqYOIlKUM8eDJ0flmmfmfSwGSAFw9Ui4FkN84ad4l0UQVMx0T2nTfvfPNmGLIZ2rAzpmtNVAkgftw4KLJgKlgd206yKqgHTIVPsvU135WfjUqkNJmxWcNtJL605SsACrxxwvKiExynnNKF2OS432W/JL9dwT6uIfyIjACw4UY7hEtkna3AKUmh8+BKQS2hr9d+ND6FpsAavUAsFJ2HSQ55j03DMmqKMTJjako2rILUGqSWtLjUEpP0s97tU1S1GfvAM24FmH5gTbBtNXqkdJIOM24rdRZD0Bjqx/RUbKWEvmP27bpiKm7Cx97GSkU+60BY6t0BnYJeS4NfuGojsfnB7sMAuviMmG6zvTdmJb+Idi3bxvTw04sw/vlrO1ksdwfbJMSt6OeY5HzlFvoNEAvGUIBzwYUtTP40J4+qDZVKsfvw0MFW+Oj7TyRDIcd8+OnUxfRs1wPpBrxUgb+LGfgSB/3yTYTclo2GzKyuJtQbQk7dJpuR51BowAyJfSc36yRKqPRSaRWw8zQJgRUqn0T8bKg8lxM6JTy7VhQ/wXQ71dyURSfSTzxnHfhqynVk59SB50og5Z7lGJ2TqEC9PMSueTDAYv300wxUl+dTrX3sRtTzRckUpuoYVTv6XQqKm9FTqa7X8s5NKGNisWqL/UNOZCLXGoKCSbyLdhx/8XDsKr3msTrEEeso5Icr4tuMdtGO5j+7x0aM5du77hoTFPVfcxdIS0WQEMhsQf+SEZ7rwORHpcf59/3b6xkuxpPlWNf4ewi4vuYvq/8C3bDqrfrUf4qO30LCrOf1T8NLCj4He9+qOm2VXWvbbsMaAeRwzB94g1AayWS8k79rueVy0KPcYAdVpOlEi8T+hBRBuBIZUDN12BPFvQpOtnovrBxw2AseUr7k17lV1NwW7/EbLr3/zpMaSYpYnCqd5gg00NsfaHvuWrlF83NluNNOJIV3RMnJd/q4qpF3GyPSbUy9IPOPQzlkvKVHk7e5js+K8yoNdoMnr78dj6OSj7Qmso4jNhll4+DQXw8qGFZjMuoM8ckNc8bR3AD5ZbBgmwzKAigb8+7GQJ2L3zijSUjh5DA6xNSnlWxxuWn0uSIB1rf2IhIuYONuBqax3H+EYOj+YWcyiIqN83DtppCKxs/VE7Z/dV+GY08/UroWCZwrCctFxVzv5gNj7PHwazTrzgZRqCtjWHbUkCoFKlXSlINHKvdzvo+8KYWMmCbPoMDeOJ+Q7aRjeGzN6/fHP+K34Sj2WDhelu1QIRSgheVokigLIfYWxwWd8Tlem6rcas5Laf1+oSH7frk+Xf7Ho95+yGlZpmkkamsiRDuqneTKbyOI1badkI+tuud659nGbgE66FSxek0xj2LGBJolSJG6RY9KpMH3OXje4RodQsv2/XK98+1DADyd0LBZ7a3MLzzfwDGXTFTi9Zfsupnu/ZtexlQt7e/Phu87iL3qNCI64HP6bEFGOyqvfCCPjqtMjFPpdr3ff+3tFoKpHIRfehdqZct0ygmPsxQeCiwgQ9kWppTg/1SiAB9Jc1RzhoB5CcOdgIvevxxvUNwIY60UsXq9Rn8QJ+E8wLoKNykZuoSOcyAbhv4k78GZzKPQGO1hLZ9SzE4HLyDfY1wIfSkJKrzbQ9r7FpNt1j4Vj8AqQYh/Ag0gxAp1JVKJ9IXgt6GIsSPhLdtNGtjI2k3wgQCAoQoO74f4p/GCG9A2wKfQJkQmGkSS968oDnPatEec0mCExA1ugmNb0Bb4g+mY8TpDfRSQzXCC1akhuFa1JW6y2NWCe3Vj3XKUCWhTWgCA1onqy71CFInvMOyiAUNUvsgBHN57DMs2ac240dAnsiVLzJsImXYepAoYpwOUu4FDcq28yUQp/ZB8HzFpvy7AVgJBn5VQdySnYgfj75nPapFRVapv7fd+yMZQu8tStndzMW88zRwDwrOsbVli93tNzj7ke54SdiCXQD2TD88DaiiLA5kBrdiAm783AFY/Y3W5hnoixftLtW4wcCAhm39DFP4chIfTZp4+1YuS0Sr07ZZlGmUw3H9GFFIgfmF+dQUnEmjRJ2D5DCgNz6yPM5fHEmwRusBv2UqL48I0NxpuDx9JARX3Y14doukqf09hIDfAnsJaYUSNah2msKjQSxrYlOTS/YpjDUM73tX3iHcHCLugIakGYFexFcE0XYVrsQOz2iXO5tebWr2M+xkLjoiciv8M57eGIp+oHoOsMgo2jHBaV6S81gYj+kR7ZPaCVvbAY6Uegd699YXZWI2u5oAFNcnq4J0NCTE+TV2EeKyozrevfZBbs88y6pFVEB+HmSvIb0dvWTtrmtAVZLX96XAQZ7BH6CrLncE1KAbUu3eH27El4M3sO2egG6Xy4Bu26Y6QspkQGFbQwH1wp1lQFlAZ2kB9+lyWVClNVDF5YpW0iFXSPq8VpDShohwJGFjmwKWT033lkIiUJIVfnZKSPpGwCHo0kQyAxOwJNsDNUn7LGeGiWKcagiq48a0BgiLhRu47rfffi4wpAtn11aOeFZ7qeTCgXgdAQc5qo4H6QxoQFoNvuznwoFwNkaUaLVbBlSARrwQ41LMxZIekWgWZnJUDOjj2rDS29dWJpOu/JZwW0zf94JVMNsINJj4PtzN5TKffHrHCe1KsVj0SBNMJDrvPr2CVsqR4VUui4ejYUCd9D6E3QpRiFkoX830+f2CwBKbAtmm8ItHsfo8lrbEliw1WAZ0EZnqUUPzUszAkpoKy4AuQrP6PZL6/mWqXc1MDhj/tkCHYBeLMf2DKkuLt73chphHKtFq8u8n6qV8iw7x/QuO93+xS2nCKTjIllAgbf8L/0B7d4dF2deA/fIRTbGe9hV/0XoXQg3fF/gBX8Jzf+vgYtsyPPYaxPO/qL9sQeON648zoJHeECqN//vrryVoZA+6aJEJ0DtJzGgNNBUMqMKYtpW6ak5Q5l1vAr4XYpgAUyLd51O8kcpCjDiPxaaZLFYbZN9mM/8bPWI9J2XhGiepVbh2OgHf6bOQRu/1asginPlGUVUYPymvXocac0R7Q6gk3EeV3FSk5ScSckFnMR0dPSv8QOOfP677uVmXokd8GUJg1uL2Gm9Wavu+b3vpyjiHnBfR6ejZoXEWXjsIRKAgE3FKEo1CMsxXMoPfKLkISYB5OJWunqmeRNISV/hmmKFr8+pQuVtaKDMI+SEcn+nIcczWaioGdL/80Mug8wtnZlMTLO71dy+AMUdk03Q0v2SgX+ByCs+cam3bZmDPdsEdioU4/p3kYRoR+hDWTRskDEwc0gYTOW8phHEBXWzb1hTLkpYWX8kGHIYGLJIkaQ3oyRNrqifaYoHlbKKiTeUNFsNdwe7CR9pMi1GKWaH7Ohh1kF4BH60akabyUxnLGnADennMxWkhT5YftyuB3NmiEaWDzt9C0Cn8fWIwv2Q4xNBeJtRK2KlGs4RTyJ9HiJl8hDKw6SsTzIBWWmMK2fCIF9dEFulqyIulsfw9ifyZRFsNnZPKNKhUv1Cnz+MwRySLbihTwlF/l3WNmQMKjom6lDRHB+kPFhlHOefy5xIjkVRuDs6VkrdeLExBUzCnCOyJ5K/P6qMS9BbbIQZUdSYwWyz3RPW4t2vdhKaZByaSvB2eu0lpNGdIZxwBmMJrThBSnyfKHQoUvC4DWeQZpju6y4NILnks+pYq3DGTpBKvV2c8AlV8jhQ7+0lF+yVR+Zunhco4A6iQsWmGHcf3Z6JWm4Gs4q4PQ8td+Fv97OynbmaLC21JIwecEzD5brVb7aZzkag5fYzcmLrSF494lkuXE6tCj2dY0OsGWm6Xn0ztk6msJWXpCwN6vURPrVoauxTZAuRz8fLoje9gTyK1CY1JZcSWp4vUKcp/N6Bm9lMtZUPg2225qO2OPSB0yyzNF4ibskyoPLdNpAAVXK5r+lBMhYDLRfSWDV9AEjKVShEm2ID7lmp3F95nAJpIjRl+5qcb49U3UROI8tR6jzje/9DimXBQf7OgPQO6JvBjSH7m07lvncjieF8vZ9Km0I3sd1w+pRSQJFdhX9dACcKhrL0PbknSBV/gRfbcyCwZqpmhjBiED7twBDSL6b3Uo+PGNJbULBJhgXy1SP2BM1u3TcxqiiuFPJaAznth7Fd6EDbWJmsBjACS+MpoPRkj1b5Zx0iFhKIXGbX2Sg6whI7Ot9T8rN7FgCKlvQagL/bbzzaY8z+aaAdGcuF4IZAQP4koaNjP5m+JieVkf9vQ9iaSWm1nEuOLHbi4HqfmWbZ6Cmrl3i+/F9hJT7gZX21Q8fXP3+9pSScUbId9264GdA1AqcBE0T/+YyvOrgUN27Ki46GOCBJ29MKjTrcKIAmRGubYtsAaWHAyoEb2M+vYh41Gxb9polujYz6Y2qs3uhVOOO0wvM6pOlL2R1xAQ7t7fH5kMaE/A4orMbl+cymtI/cFemyLtMxHXM0VV53ZLKilo6bOIP3schpXEc98DSiquPS6GalsQI9f2ZrXfEnRUwiddbNEdilPSYEY6ryGBb2GyArWgeu8DSiirKxqgRRWaO07lBHVNp/bRtC4vUgpjLzo4EYCs1lQQ8bqhpXu3WU/gzb+I3Q6Oobjz/enIG1gYT9Jtf3ccUgaz2aIAIPWwA7DlwW1JEh3FATrSG9gP7lCvrgCxugfoqXouDoyjtnJRhpz6ygyGc/XzzXAH1XsyzVGX0XCPomEwEZAYkd3g5KjQtWuom+X6EPwBR6sBcXKOoOqI98LH28Odqc8upuji0BLmUGptq06jec2hJ7nlWpqj+asBgOxZtHsK+0RaK26CSbw1HydmbDP3lYFFKORs5KeUPJiAL02+2l8WmdOQaNGoPHHn1USuJSBC5jiafDle8hSaGmyXnuu4/9dquG1JRsggVbaNkNDdAyo8OEwIw+maieLbkJjl46Hdt0k0j8rDe+IyP79NHWjLj4g1iWkFycrSOhcyAM2/crDyzYS4uydVnxd9Z6w8AHl9O0xUDjB+s03At2286M56fQ9AYLVnl6Cu+Qj/Zowh6aZEXWvXQRktAa6D5VASEfm1rNiYYFW3VwroCpE1JNIYbaEWQcNBgA2kRoKIBD7ZX/ocpFWdR8mxiQsCxorI1mQfqBfJFbdd87NyTjNPZ9S5ccw6vnLgk4MzYBSZGrUEGGbe7wYIpDDwp6xxi0LSsvYKV8UcAN699Jgk0I+oqjW+HniXExLHmUGGtDj9jMuzUhAk5NH5SZjfnWzGYImlSMsmIhG5VaPl2RJMzJJjcMHxVO4Xy4iSqTNEAM6eFUsVDtcpZKoSQhYaPiCQXILqt997i+oSQPAgA5rQ6quWpMkEr4Uy3wulKmrmJji5e20lvFAT+JeQyYSymq8WLQQD87WJY9BBcgAUBlsMCHVLq/0qrQYqB0GX1AxipLjj8xpOlDSeQRGdaQnYiGWyqZhltYYc6vcPBVbhOca909S9XIMOKtnL41HoEZMbWW4gYMWwiTsIMFIEYmpHsZGZAQqG1NMILX9l168huAyX40Wi/A03lkvMgKV6dLrsPhzkHq0xYiUPewhEQoZmQQj0NYCsIQBFakrJM7jI0M36eIzSBfZS7TYkARiF3Z4TuLvWjRLKODGZFbXdyUGfv0LOC9RHtYSlTgYHEoL+l0gmjGIR3gJsd4Ha/J4BWz7KO0APha3nTaBSLJKcenpdDpJiPJFR/T1a/K0XSPZI1AN+7kwIILIiWW4jj4jVKTdDdaRERB755s/HRUDGNBubezs59H4vCBxF2EekYaavH9pGMpopiAse+NzXF5qyByB5qjqoqA0QmZmiZdRaT6j6GDNhEYpWwL2yqfYHNsG8wNtxwMUqmrIIcXCAHSs9tCqcu8oWSxBDPYgTmlwDvAKje5br0FeYEs3JfGMF8CI/FjVw3YSDp7F4Xa3FgJ0Htuwk0jVMejSj7RUFSL+m3uQw8/f5XZV+2SUbTC1IAJcAy21QW53EdQt8u55LHootqPrruPafH8I0LPwl1cNLeVYSIEYHDasYCOF9YhdGAAPJrKs5jT42pbbepDS9PpWx/jrE4u4dF6rZxmRvs4aKUTBqSW42S7TuPDD34DWkIlSughJ0XIaZ/GXeiwEaRukmAZ08TBAJnSd9Vl40dQydwNKHiqsMcZU0C2oXPqLRYuWW4W7Aa3B8u5f5AQyCF3OQQs36rrnbkBXl7CnH7A6F0t/FkZUVc34rZwgVp9gcGxbVgkSXI3gj4KcIllEx30EulDAPMa8GbHjRi6mpqZu/ga0KNXqFQy+hrNrQl1FzMv8tAy6VkQXtlQULtwUfnUKKY5JhbnPW7VFOvxHoNeugOgXqwsNaQ5DXV0q+dnsa/C58KBUuwgj0N9J09Uttk327c2ZzoCrFjWTIBZhKU7FZ1ErUNDlKeBFvaoPOYfxqcn5lSlBEoGWkk4efVmRQ5NxDQiepPHy9AcuzCcc+N0BUhIlpeNiQGOqzLHFLNeizUe59i1N2z3GgLJD/0MtqJBEiaZQ/w0HWSxo3W937ZJlIUszPcUzGrfrw0lA5O2W5NcNdttTInZ3EgN6HswUv41X3MWdALvwNOZUrqZBArvGg+Vyu5C0mNMuE8eT//IuDtETAeGOFxzFh/OXcMVdFGQxoHPaSxQ8CzoYwkutf57+2LX5neMT91jyyEK1MsjDUfm0CEoWA1oMmHxK4QpwNAYeS54P9RCKA6BT4mZ7lvGW5coTjaP2ceL6TkgaAyowYHoM2Gk80RcD0tNhFnTv2E+qRcmmIu+HzVGdzC+ikkrNJD3MYzLqMIy9JHmxAQfEw/v3yu/AibTR3+lnM5ZgsAIv7mRroMkPlIgZ0CIpBblxDWjNW4fthdBLDJ2IurYNRTi3uk/AaqBYCFrQS1oa7SztF9BLk73IAE9AxL+Lmpdh3gsJVgPFQtKAnlJTaWboAh3V6JMTKZPjutGqdRPZ9vbmgcdSH1fh6Ax6FLa9NCehCgYU4/gETpJ9CIGROydP1XwVeKT7/7Nqm4FujwrVXDkMqETemtk7ZSuOxPGxhEQIZ7c4sy/fFRcGUp9s9/JVHTm3lpvz1VzC6rEMaDyKmIO/v1gW41E86qF1bDcffrZe3cU32eOmQx5H+gfRCrgeTCsVitNJ0tvEeecvR1kTbt0qKc4jrj5rBBqTXcCLcQEmane38t7ljRjrST5DYZcBDcvleOMjlHHrLV9oEtV+ytOqKceCNtN8gtYuA5qAB+jhFx8LCiH/ul5PtCq1e4AJnb6CC0VAxg5/gFIoHXaO5ALUw8wTMpess5bP/ix+WDTWJtIiGlle1NXiE1eJn5Kl/VQi7IRCiGVAF3S0LF1qC1qPMk/B1n42rjj6kbGnt5ADlgFdMFCzoGXCWYxqNUhyj9AV+0YpJfslTW5glwFdcBj3fqJ9CG1WOgjGQ/YXwcVq1k3o5PZxyDKgCxZqC5bh3uECKgHFnjQSNq/x8GUqNGM5t4ldbkwLJv3D+3QzcHFo8refY8iWIq7r1o0HuCVhWSPQBZtOr+J0uNM775T7rUg4DYYVrOTv4YoAeB9qFlNvxjKgCz7Nzs6zAu+YAAa2BJDD4BLh5U7pKhOKt2wlhDWFfw6KERsbk1B+NlmmjFxrc10HCVzr+4ml8fJD4MoIMHftFieU3zJX6UiZlIt1Tkcm/iD6/SOEtPsA3o8Kfg1g4/LZWCPQh1DZYpVV7SJ+VK6eMxhJDd4tKlMEoXRsSbMDpsNaA30GJhsC58XKdOcxu+W1sJ9Z6Qsumxpgmb1+c0EOmWMfnyMhtIl4jndYCU7hy0o9+Q0KT53Co+LlxOD7IgZ8sTWiQM5Hw6G1L6Onjz+3rTGLf4hqPXQK/znh61wMDEflE/pW+F8eSW3C+RBDcAelGZXIBU8Rm+sIVO6lgKSMt0RDsOsR6yylzsd9MDWSdJYnEGirh3FqLI0ghPHrip5ub0lc7r6Uyklyj6mSof7G/OQ1Fs7AbsSRLtqAItZAyxvi1FuXw2kEWpwZMxV4ttHcQx/ubshpRCDdAgxBmaU9jUID1VsbDwNaaUrHKAUJLGiJXKFTVj8MeZ9tr2aXHTXuGfdmmfiHLPhiVZQi/+ANzj8lmX4Or3lGh4XxDJ61aXAp637/7fJNInB47MI3Gybv01yVJRbBl2TYImxqPk4jROeRvfr5FbDlMZvm4kTyA7WZx5faN/0slnHa7n2np4QuUdEfPP45vyuEJIW90Zq4xJ7bAFX8w15f0S9PNqdfiRUPasRjxfhNYO5lrxXEzcwbLo4YBxpYM3gALlP4Pql829MgsGrm1S7D90ycfmWvPD3BatpPv8WMZT+vRDOgPqqR0GpLzbs66Rydb1ZAcj2qH71RtZ+LKMQzoAsNCN353mcd+nB1SBmgXAC07adTrdcA9EZAA7qGoBfqKotWZPQNAfosIUPrMi6D8nACGtDI1iwKYv02sgGA6UFMbdGfwMes9+MwN6BBe2wudaQIsXpP0NbYti2Lw7DQBCEc+WtgQ8QRqAuheuWFSqwwWjpyEUgsIBYgxEa8tAc94rcLW+wd6aO+QyWuO/0tVhgj6BgyVtsdSxF1tESvFKSjkoVCg+4/1iAvP7tLNKaoFjQwUl0tzctz7bn5QmFks6Ofb+943swWiPvIfxAubTCyoLqFevwZC0jIHH4EEx7ws1Ok8R8gO1w6qHAn2KeYj8ZWc31KH4FyuJyFZ7xCdsEnuXxHph9fvao64saHiGtv5xMAd645W1h2n02k7n6Gdv9upr/U9EtgUcirR6uyOkKQPAcQuJmegtcufNuE6o+Pko/AHDHrsOj3SajkpUEem7e6CQS/cHakl8guTJDt5fQN57uOVJJhF7WTgM0uTdgQfZWVg6AldcQzHugutAOAzzjPMCA5x+8noWnvt9jHXhTPsb7cGtQu0Ry0csAK7n/COaDyvrm8r2FZUAuKaE5YB8vuVyHWBL7DtP3k+2BnK1WAiPQej7XHvsfajlrcTmhTH5/L1VtpkIHw2FC6OupdB+/imoJfrdgN/NijnBXBTaMf/hz12MZIA3JJpN46mZ6D7XjPvo7RUGKUQhiuAj3WgK73aBEAisz1tQJhT/x/l6oyKd5e/Zico/kFz3MNqNEaW0pYopjqrSxidTlLJZNV+pj7VGYfBa+JA6yBohGLw7BWQnGgzymWf5y2Gw5on8YEqWD9KiOfFZNcHGEpZboR6Gt1rbHGhmb/PVin1xMMdGFM9kgS0oqj8dm6HIut0gAcnc1mQE/7Z0Jd9WVC552h0DCIconLPXX73By6CnMKOQ8P+tXCmlxT+LtnodRMflFAdAGUeqpN7MJ9AWo/F2LIzpGyjUCvTDZfDEXRq726+b7viPlBRGM0UFNYkcO0x4Qw7EgqA1rWc1lQPa4d1HiNY6986l+nXAz/PJbTiAgSDsonMk3hl7W05eSkYN9bP5N43vFPaC4yqWHZcTvAZ6eRZT6DkMmA1nisX4wJnsLdKe5qMbWhY6ZxBY5ZvUeTyIA23k3opFTYF+cstg0pMdDFF+Mk3CCrfedDehqbyICG4vj+t7qZL7vavFYuOU8/+MWZ5tsHqI2RahOpisvK6MWTb6qzizw8JME6CtG5R9K++brVLt4o9NQ8I9DIVipsUPFg6Ehp15C/zmh27QJ5omFC8hjQ2Iidz18QYIjedna9G7vO01wZJkVlCJZGtJ3aO9ShXpo0wtRCxGPcmlnf/DNnLGQ6Oh5rWUagkSfwX9ZMPiPXmFyztOBx/zpLxYKRxICmsJ/bckvNyT7bkfRad1mqqUISqfYMqEsVLF9cnoeUU/jpaLXCs8WvpJs5RqBZBqDbtp70mZlizyVBZ4nnQE0uSw4DmoplQXNyCjUbqm+LEUMxz2Ke4FXm+Q2oj1b0miOGoi4Q3FszsQkNOwCtLszmlfOb/CeRnOiFdwurw76E7Su1AyqrDWVpHQLKfowvhQENt4U0yjm5UjyLRhfO2oZttfR8gPUmbEZF6FWfLpoUBrSDa8C1sEOqkASVVrP/ZrWgEem/qtWoECoKmNyAOndKzLsmnk5QST3HTDo2wEDI7haUIZoUBlSj4lIsE3rCKLaRIPPZz4w1yljmNykMaIsYnXINQ/MSYmopSrPQcQegdjRkwBFNDgNarWEgu3WzoYFKZkzkuUKFMD17agJJuW5IOCkm8QOtuF0G65KfQGXRymVMwz/22UIJwGqAF+KGJI9grzXPU+6nUbOgQVtrNDQKWuwu8R5gkAGoZflkDUmSEejm8FLXFT2cRPzJwocZ7ediyH5qeX4T5zGgr9panJ8tOtZ6AyeGwoIu0S1iIaiRS7kvxDzzlI4UEYp5A1DhU9yfwvATDbeEApjCh9WRMYmLLs6wpZewcMSOqsIwoIJTwLIo3DSjLaFMYkAboQ4zFN2ISRq6Sf7IN7JQDGjlHoUxIzPJYEso436VQC+bT6UEZTcC5K2WU1wpZtTmEEKUo97gCY3OTJxzdyb9sV4nN8HEruPaEL/wRgC9fRPKK9iAJAz4tzQ27qgKFGzEaH5H/Wfi0fujOdlf9NJ9fU/40hsBPS2RT17RlsTCgDagiFOSiIcWxio3bmqXNURTdwUdooQ9spt/G+CnzbIJLNymbBiwHhed62+XY1ZKSWfXk00q4JKLx8gy5DgLH4hAB3shVIubrA5KqIWOqr+7An6tTI6BCG8l2wwluwzotoVXQDqt9yjYliIb40XNHkLCnamNmtF1opvWcSMsA/pIZuqdZHR6tYFoyyzCt2fdhOa3n6mOci4WopzCK7yPCW/NTg01Uc25Om9YO8w2ui2qxEgIX2QIy4A+k/gdzoS9+SU2Si85V2W/Pi8SSBsi5GVAkUDbXe5w8wKDs9wFDVvzGZf3SNk+X6+IZkDnCEp86kZRh3pRy8XjOH3yqKDRwDBt46UqN6gxY20ifV7R3XhVdwBAGnA0v8Bu4XEcccWny0EQvARKZqFTgYc2cEDebR9jVuB3hheskIhDytB7RAM33xLL7MKMRnWXAuR2L3e4qXVD6675WtMfkFH497nQIlLxgASPVYr97E64rmMmyUhmARrUFpzgbUrA4lnNl5S/U7PHmvmFKswbkv1EXM2s8/32WA2qjF9dsfuKZhku9Pm7j1r8mKK3o45OlgaOJYMpBLhYBAH0nIq1iXTB0h7Anunjq9hlZiTwbPsZ4ND/msE/kL9ndzsMzQO9VOp9fjUIBUepcdSCFtBkqYgNkJa9jUAf2zRjWUGkKSI+YiLI2+Ya3+jrrYC8UEnM1T5JGTbCvgeewtsykpW8/Xzsw2ouwJYOE05DfLazIDFohr04ifTgdtt7Fs3WKdUgtwQNjTiUZvEsahw/505dKskmaJvHcAsyc3ytxKeRbu3n2nYhwrVwIrjjoou3ez2l3nPM4GnSJ0V1RzM2oDQH99tdtKlO0Pacn2hn4ZHIe4vvn3TxKWNtWPN6yhAUFZ8nanerb6sFKW1VwoPhJT7dIJVdALka0Fytd3z+ly+2bIrRxBqtPG+iLwpXFnm6koSK+RaWFHJHdFE9h4sBDdqx6iSIeERGt0IxpaVgE8Qrejdce+fPmMx3bjSKmE36BNJO4WUPkT+AHbMrY02WEdV1EFqIkiFj3C2Rti6ezdmAhmuGjl28HyIPV/YTIcq2A8pxbE6F5dnP1t0qVTmZrlr6VuI7W/IQ+vVU0o5AbwS2oEYlY6+LfZaU40qyge2KYOHI4sTHrWbhysmAZmqLkFM+bEfuXG/fMTxjueu0plotAnWUQEV5KL+TSP5twSpBSJO6bYZylROfsSxVsltneRYWxD7K2YwDZ1oKMHKLYs69P6h8W1SktcznwoSvAbXTuInf2VMK0bIj9/IalMOzQUZ5A0R4v2QNPxdGfAyoof38/sdLIiR3x0DbjiyXW1wJ19k73xYLPf5eymZsPzV6aIw+vze/jC4Wzx30h9dsIIbstm3b9v3+0IEJ6XTVGn7GI46CSfPP+HH9ewHTpGq+o8IItRMh3ogLGSQwG1CgGxdrcNOkWpWZj5LN2TTGfqAi5y/D9fgb8IrJezBWjU/Xfk7DnB00L8UrDqdsoM4u/LRbPXNTzGCbU9pe+3q1fYiQhgs+FesxpT25jEDPRyxeS2PC6js4wL6CzLxgSn1wYDs2c45THkfowISS/AzoUfk0ZZUjofTIAAVIC/q0Oi5CcTkUtZSeS0O3JjQn/z51Clnl+eQNQaLWe55l++Ih4mU/j9OHHKJLx3wW9O8XlriO6DgF6ddTvzzoyEkMIR0r/IFuZBCjZHcbLelf/55BOnHpBHkwLIUJf8M6SVb56HwrmSOmRZ/pnsgE8N6rSI7X4bfuCbhiGDxdV19o8F4DjaItjstfR4ypm3sBHKg7foqZz/NnRKLzTTet6Lp3TCbVv23bjr79lDOuUcx0hc+Aw/uc/mTqBaWy3KBhP3FXBVbXRRT+bVsoTfkOQX22D15fTCOAOAk/UJtv26bX3pleXTAJ0VRLFcuTSCDB7g5vlii3gZ26WZzeHackPAqdq1vQumpGtLYxwuEvPri+0qOhoAFCaEp2ncGYmvyKiNWV1AlnQU+eVtGK9uVRA1CIAQ3bUpqIdR3AqzJIWWXoSv5UOnOtZdtOfKFkOzjIt3DAMCK91JNJXHHqx85kiqvlXHjZWpZ/5s/cOdOOkO7LuSkrMptmjQ1okhrLF1NCP+86L5AkIBsISZqVR2NpE3bZ6E/WVKJzBCrdU/nbtn4IWrmOhpk6YRNSga+emK7KSljYgk5iXRUegcGIWLpJlAfIewSqfhhEm5DlrK3A2WU1on3WM6Qw8UBlEtEKlQBH08GZRLV+/G2vSlUrNjpOjUTMWTrPENQOUln3vXyFxiIVAXX0UQrVfCtn6J5VRhL1KAUJEYWXPTdDewtReAKaFgZz1GYS1Trx71up1w/VeIhBAyZrFStmbWtcDqPPp+RTE9CNTa9Dhatq8VK5eCWscmuiJKXeti2q/95PoCGLp0rQ5zqYeBrVkii1oIGdnv9MC7SLWeu9+YWb2BmVnhWzu76bJvC6jQ8Z5BFPo2QDuSo7PbOwPsop9rT/zTozqHgGnivHjlI+Vyg8qiKlCLPi/RqqTewL85NIIEE0exCrjK1U+RWvphxInhFAWUWpOadegILeyCNiy1fKSyim8FqAPPbBRHY9HcsC+xkabBrjACD2NWqyU78Y105H5eNztbweJRtJK4k4a6Eu5YhT/S8qg0WdcW074XBSVQJonnBtyh0xqTX2KH25LMS5lZk6nq8To9IxSuGPjknS6lR6awPhuVR9UF9ko94vx0hTv6t3cgjb7ExfmdEQNkK9I5QhBPXG0pprBzXMnbxiKArGfN4vB95GWl8ZdHVlCxqjbWog26tzc40I9TYMZxeb+llWrdx4y0Ptu8UXR79eI0GXXfvvsKq133DplFIK5t95RLAjDXSLFkEnZzWgxxv4HZW25je/rYepeLpn+UXQ1mp0K//FQRvRBLaTbfbqx4mY04D+Oj7ChKocsE+tNUfnWwAgg2OLqAkAwYjIrnHIIbaK7cWHuZiyWtS1a53zoeKrq0Z7k2U27spC2erTP/QLsY6KW/FOsclwW2waCyPIQujgXwJxOJupKm7+OS2ojCO0LKQ9ufNNXvZTLuMiN54eUUcX3KyJORqXAMCcU/gLqOnTp0Ukz4T7tzKBcBN2Mr+mdDzoLybOexXoVTqOz3/Qi4tfkvMGMa5agJ7l+lpjFZituh9biIZxJqb9bB0uGrgeTdWcIid8ttMKMkQ6NLk/gQeMQJEKpxBJOnp6JXWRxbSqj2OXHVNzWnVpxBMMqD/ZLGi6fpGuwEz2fd94b9xBOagZOh6fyTC+/Xu5THoXQw6HtRoH5ndQrpOhSxkhOE8K294JmvvfS3gBw3sk5CXL6vEXaR3VjKIetj/FBNQU0brXzcWXFpXFmwhC/U7hZxqFFljU7TuOr0rSrK35GXWE5a8jK2J+MJRPqfaaO4QqnHbhZ95SU6/bcfsyzI9boLnfhPcpRe18bYwSngCUKHrXitv328KNUeTzJlI4zRREuW7lIW2WOz+EGPqjQv8kLiVCiC7qT0txEnX11lZZEJk+ZhdeVWUgO1dXPRBofpX4UX0xOcTmqFnQIH0HTLbyRqNiQ8PowHWEHKVUDDxG/NAj2kfzL1L56tpPn+BG1Uz1T7ijMApPIAVWcaJUr7Oy48V8J5Fa6C3ztNSryHF/XStWkOJQSiDFkqPacDoroWSz3DkelKJNUhQyZDGfMwJVq107RxNxSoY/CTEAhcbLEI/7wguXIRnlQxt0WaMMQePxnBGoFt7r8YLq612VF2Up6pOHXXZCV608wj96/yahGPJJqaqPNoE8lgFdQHGMZdTaMEMFZOvmgMu6jv4ikdeBl3i+Y1GYbhfeWsGWZlnQDAQqtBsb+vDAxZdL4MALJYWOmJ89fL0aUH9lWYTFtaPoamZovb8XTuHMICAcxrPNZJvpRqDGLd3Tu7l0zrk2mjYutP2swCtvK7YncQdxLi1Hk8iAQp+8D2/RBY7h4Ev7ENsgf+nwYtmeFsFJson0iRmVyTomKmqHOWrRxtmeHO//mmJuhLYmN0tvtXcQ17966+z6MSLHCPTXdJDYpQ5HIyZFPjg/JFPLzCLYz21r63XzkAY3QwLxghAEIIcBvUC1oMZtnVC1buYyzHnjabme+jcw5sJZLA3JYUBvzT7WtPWsJHISkl/neMwMothfH14B+YselaPJj+dmQJNMSQkW1LqxkyrXa9Ku8GI9VCEc8zbEvrNxc9w73x5KhhFopdnHFnTNRqn4Gs9XEbwLcEarMAC17qm5y1jnpBr+WhKCJLvwBE4BclZTZ+MBRwfj1RDUTXa/86QhyWpAIY0oHT1uYUccC2rrFOCorJiwKYsPGabwdUA9THsxb+mSFkuyiwxkHYFukV+EZYhiBDVnbmNQrxoaroBiU5At2oQqZEEGA9qazi0Legpz5toBVFbFzlHetSo3Wil4joY9p6ay3KbwS4xI4oQosvDDbhTjAMXzwfNdftGT8uD0olq+0XpasOLkIcMINOUQ1KFsTrujv2GwfPbLG9WGJ9VVlusINKocW+UKsFXrKDLMwRWTUgRoDjSN9gvgDLvJK9cKSSfOxYAuORIIJbQosTESUXvneAjruW1GyhWmthk5G9DAcgw8BI2F+UroBC1wNiB2xhOWjXBhKskt88nitwa65EgkWJxE14XhyKvSHQKXWvhEQRDnsHlII8Hma8VMS1GnVjb9cjV7lmdATUTesm8lJuJ4VK3efpXCCKv+OuEsSR4hNtQoUgWOn++iQbHaQxNLmRAN6OU2v9G6ZwngdjHy4IHMJKes81QhixYd22ZTqM7czi+iJizne9HVytvvpedieHidtQCa0Giaj2CeUXAKP9Bt2yKFl+hjphJZBFJiVfDBm7Su5xACdeVIZdHg4vmWvK6Jgokkl7QlbqYV0Ea1I0sq5T3lA/FNiPQ4Ksoyle4fnW/pSGRA59KiSUCrv1l/GXbTyD13ZgsaWe54MhnQmbRIgo44bCfJX4YN1BoKypcXE9xdqwyLCoWYc8s9zxrotiku+4VwqUHjvgqKtp9aBQFwX1j0ll2fYhm0bOtcujorqUagNaVhq9FxDiTkF9KIhHMfQtpPS+Emm7IDKCyqSynYzNYwyQyouNoUnTpXa3qGMsHaQ0vJkvI6Gp+DkNRiTk6uKfwmPG2tpZXLsWJ36ur4XAXL+UoKvQQM9Q463v9F04Oz6kcrG5SADyYe2Uag9+AHLEWaojV9Y4AOfwn6Iy7vY5QiK6/Teg4nGQ1+qp/Vfs5HzpYQOcgQ4ygkH4dTKoRjtVLvzhifHoKd0GpIzTDWRlciuVQQTILz2EjyjUC37fcopgte4w0UTsQ5hNgRqYb9JIyDR6nfblbVkcRWY/El3RroG9Wp++xH6Zg4PnruBm41lDmcICDNJ2/ednwZULsQQhGYZuzZJlpLCom8dMIuKirbuF49O1r7ffguPwsXMK8F/XdWuVwb0FQeYD8XGWg7lATthopBQNJa0D/AqtJcPKCKUTtgE4x/kQzQpAhZHuBXPLfephG0+aYKAiLFv6etKq12d0BG6JJNp3cK9jj9P7SFNTfeqD2QL7FeClkNT9ZNpOD8VMVDL7LpYs27CDooHZ8Zr+ajRrmP3891f10Vv8kA689PJKcbEx2TAeh5BjePu9QXvY5zDuEpn3qodx9dWG/GTEthQOfr73iY6mzpTFgjW2/8lre/HC8rR7+3nuRktiAgUjxtBKpPOeTUHoTu3a8RoL0pSTYvm1GeuG//IjalAV2tLd/TDGXqORukZf2+SywuVr0UxW8dX12akPVgaLBGoAW8nuWhVL8S25hPhUwkR+m14lV+tyzotk11ptmFyi78w3fXVGqvLNN9GOBNJb/7b2lpbZvC+iYkKIhXKMAYnPbrxg2nL6isRudpbkxD/z/ZDaTf75UtqLEnjJwbpYL9/Cb7Srcjl3E1pIQabFRy84mPVbhU1FRoanFKhQVCJz+ZVJEO4C259OznPUGVuH3S+pDieCbWe18oCp2zi64Kaw30zPLHA+O6KSMIwM1dhjjLBbVVz+5KqFTR29JMqjxb1YDmrQyEXu3afzsO+AnnVhL9v6Zby789bIZnFjG/hqQYlI4OGZaiR6Mc+OLhGyhnk3Z52hpoZ93r0rqX1bPvHTqLRcfvRyoNO+3VEMvNr6720rIkMZYam4ayWTxJB4l6WiEEQ6NSo8S1gQFYS7sESD3a1wET7915gK7KT2exHdqriuskhNUzD6T0Qy+Dd40hTEMHVxMKEEAuZJ43An21V98ofv56FJfycq1QuI9n1qYe5aOaXVNtURH9svBjPBuGimxRvsJ3LLm+P9GAbht4y/gousNIyZAOPuXVT7Gg8asZv4QYyOMA0QHoJrHyE4mnGtAe/ZgWI9jLPCoW9LIm4cRl8EEpia0JpluIKNtFZ0KVaQLD+SGuAXXbUxmo2tC+VfuPq8rcg8S5FQaVcUXQGqapleZEnXxTsJ9ziYdOVAP6avCc09miSyJdW2RrXY9DxsnC0V3gJNqo488t6BAUgpTmMRUsEwpL+2xQu97K2VcAlAjczdVHP+Jbwt8EJRsGIQaFtQj5GQPIU84SqEXvSHx84e0Of0NiQbQRaNFa8d52gHlMe5e903Gwo40g7gIKuT7RlQ8O1X4mnT5i+Xd31AmyWFf5ZaL2gM7htKd63fRRCp51UgoCseZCTPBJKB87Cca/bbtsj3rWebR7s22prOi2zaNDtaYRrJu3wWH7B0wCtOq96x727HhP4fcA6xYgyceb0fdxtaBcfwI73D0XhPPyfiLoAhVWIAVT47sG6l5XqMqpm1AB5T+lMIUS1SUiWTXR4MZmW/VtggVrtjPooaptQJhwdgjBG7+kjUlgjQpVtP0eS5DqJhDkpdKV4kd/lgLLF70apkQxoMgDkLr9YmmID3vzC5hAUQFDBZeFlEW+vHEaQ40gBhQt6VhDixtH51tGzGqgYHOUy34cB9jt0/kcLfGK4teRngv+RPMDhaN52sFqBcs5PGLArvCRCNfN34Tj839LF09xM9yFPVoGlSlf/tECkhgjUKLYFYeh3uouQuDTjoNEBe2nmo5cta+li/vtpx/d4X3nj5HG0fEIMQKl63iGPW50ERPUSRFG7U2HP+WZuXrJ9zhaurdE1C/fZeyKq0qUmusRooIcxdeqAOsQOVzjKtk0biDNbbuSBSflu9AAx7Kc3o6rZCjBL+B+YdJnusIToYK8gYO5BcUZUHQ0kfoN1JMyHdnC00liQC1DeCQRSQO0oyz0OHXA0ETKRKggc+alVAWOAUVsHYAe2QfgGmD6lERyjLYkasrNLJ5UTIHPp6YhxiZSJkAa8d4KAbjlQJboi0BIkCJ8EoR6p/TS4N0+Ia0WeNwmtC8BvH4hm0gKIRinBy6snTA7R63N17YO2OGGmPcr4N+Xti1frAZRlEPO1HIjOzNKxf4YG9Dj8kFBHFzNt93pk89sH60w8U3DfkkGX4W7D+GDjcQiBsfpE14dP3fzbQd6jQ50Ewq2fbBcBFXMq5W0ZTlaJDCgEZZA1fJLgeW68DUvbBZ0v6yC0RpoVSgxZkszsUOWSx3ZO98WV3R6xxFgvS8OR/cr6m6mXAdT+Ebi8/vHbvWzb0+od5UgMbfbBDIv8r3je2Y0puzNgR5igNzKbC/iSaRnWlCXSkexDHvSHRLsyQNCFfdNs5nOKT+i3w2RlnVHqsOHVt+Atkv6iJbceSst05FRAGh3V/w4b3/9pzR1v33N2AYG6MgFsNFP9gONMjBS5Sy42IuUizpgx7DzGuNYt9Hnc4mUC3SP6Hd95PdlWiuVgMS7I9DVWHvQlad4Jdq2zVVWrLcqFScVcMdl93YJeKwOWEFDKNUGB2XU1RSZUBQjuAIJakyEyHPoGnpeWjn7H5yNBaR7330VVEQGeZr+jUmBue5qYGcrWHvSj3JKPQjWU3YKDsh8R5NCx1nBpoaVuKZ+yHsZtRLM1l+s7Kfq/e278p+FD/xEfg6X3u5lQYnOqsTiKutdNju5bRZdsfeY4kmMutjcWwM1acM1gScQrdJBeruksyprW5ffPkEkykdSVTWFQi2nR0T607nFqMc4Fxh4ezCNFElpEG4iq2B70+ix9rMUSRb7ScbegH697dRc5wIT/DgPDfFWfLvfXR6yAQXWsqDK9jOyK6hm1BkZNZP2lTA3oEf1I5HAqlRy3L7QCx+r2rIa2dIPLQ+pZukBdqrRGSNbOG2ug6LAgqgFebxeANPrEC+VoxK4fUoqq9Spym9Cf+gVTmBKFjT1xOxTd+nHiJRQXm22b7fWoxY3sQGN1pv6UNu/0kdjVVywtw+TCje2q69CRSulC2GFIFSwd8MLG1AjZ+qwjYMjnD0gYGk/I0qsYkJnVP7vsG3x4tPqdANakWZxmrjv3i+RZRbo9WbFhFLXe1v7GdGCFiZUwgWhm50Dn51fpUB9Tj0b/jad4q/fO3uO9MhaVZxcRRdzJozmQZEP2n6Sc0JlAPl1LuCVOGvmhFp6Qvi81Tc5kXQ5aWBt3fcT+SRS2ybjbqNn+BQuXRLVP4/vj0PHpkkmCkwrpm3+NIu++ZwoJq3/8bW9+DC4rkRsDVTboyO3/WypB0w+36kGUQgxjc4VcBmFJ/FSfoFG+uneDeTEfxP8KGGFYFddcQKn91QDek8TXDuaHNz1xpeg1c9gmBd8bGYvbNOs0ktGiXan8C4lqt0S1IDASV+BjCiESDKhoyxLj4wZClwoGhNGUbFKkN98enERnLwtUYuMQ872ctnrQOjQhra1K571nagnVIQ7kLdx5XdYnkQDyqoM7uaJlKaCVidF6Gf47SVK9ucXdMTqmAzylHSIgn5ISwf2qvH+GqjKwi08ishECmPMAV1ROjbyMfN4A7QPyOhQekFBiNQL5FacKA2tZI140DaR2G05MKHzWU7Lxodn9b0yoH86HbSoQ/bMGzM1UIoBKJCBAdV7FraiocylKB4clx8/usfC5rGgNa0iucg4SkQ3rmZaeg86LwFRRqBSZQ0fJ0OSgKOca7g4rOiFDxzC5dNPmuaPHC007U0a83YLHJrhRomMNpGYW+DIE6YBBJKeuiWoLIjHMhlCbU+uVDBdJJ8+00akLEKtFEEugDJArH5LIuPkf3dGEIcmRisW4B0RTpCSdj60xAApglJuJgHfUsNcHxbivmArrROaBhSU9vde1yb6lgIwhb+Om+vFbkzAAHX8rIUm19h8BBuAbsBZvKqezKSMgVe1uSHZAkXW3iFroL8FIp1yh5GGLi6roJ+2g8w0kP65verQmhQgoTmDdUjzOkMwRVVqxKnYDtxEGpe4ugofp6IPZd9eVilLQwTcaVtckNAk+npfHPZjexVY6CjnVqt+JoFYYCKPs3a+M4RuQshZL3JNR0Ud/HnZ323b2o5sCzn2tzLKGdBC+Zf9HKMrI/DsnYTSes5SGy7LcFrwVlRBA3rrUn4nz6JG4TEpFCeACPLyZgszXd/aty/jCuCofIrEDDP4H7IvlSOuYcntUR2nD7zU3inptqq6znTEoLfeKHDQl+jztdZQlQWQ08hpIvxWzp8GQ0V9bnHeviEyhAQsMVWPiezqqBj0Yt/YjqoPRLQLGJOoqGek3wvP88amN3j1BDS9UUxOiSdVmRM1CypXq2znGU0mLeP8L78KL7TsxHDn/0ErD/MAyiA9KRnZHOSFj9tEQhHEOp0srQi0rH2EoBbfTPh8FvnMTUhEN5GQiK3XtBMSyUIrKKoOxpoY63SyX/7uq6/9ArgXb1Y8DagUPeWIZEGNnBSMTdovTAkogrcyXiU4ml+CIFEmGeFWU/HXHCLSa6AIqk1KWLSRV1eDDqCpMOZ70ZG032cjXmwtX6oEkuy6/sTaaeviaECriEtSRJeFOgTeR4GYz6btRB+YaKE9L+Tc1FkBCNrkn8JnGoDut5+K7NvwVE/x18R6fCbA8K8+uzoOwFtCtYjzWJlK76KNQIMiNXLY7QYh+Gwy6/GF0hHf4sgs9CqV4C5xzCOAbP5pPYKNQBVkGU21AqlLrB10Ua4bWhHGpEfrywNxbhxJ1ggURs7FqxGh1wu5yLXYdz2ZPnjMfEZIg6/mZZdDLAOaXZr5WBIfclx+Vo63AR5C5SWfeJJmRGvpaOUh4jiFzyXBiYdqix6wDSJkGuSUFsEINQINbVKfPuniEuNlYGhUD5gvnUqPpwFNvxkX6OVWcamM4BJJTXmQKGZBVyA/J1xHoIg3nlkCVMZjS2YMPKg7RIZrchx2A8ekw/YHMUHDDMwdP8JQLSX32Ds5aLdNEqlBQgcNo6L2NLQnh8t9I4GNnvoUgYcc38QimB9oFo7G58WFjmhSu0Ii991FXJ+GBhJ57AyQ/3H9uagQahOJRn/GLTcAbV6xtgIaDCKsLbF1abmONpeNhNdBz0HFjUehieZ3ExjQruJEl/+TWRa0R9119POhERNOMKC01yDhHtgqeBeeYgrfnr3QF34waa0pTpWhWPLKDVlyhbPvuLju/AIYzeMr2cTWEtwI9FOXcA+FMnzE59calJ454QSysEPFhWj89KkPQvXMjYWSS8UItgNlQIdzCE+sQ/AsBkB2Wp7SRHZumrVpvOQ8TBOLPKUdwzAG9PbagnjKv2+b0yj5MZZgQcMwbEthrKV0U1vJDSQkvzGGMKDFruDvYyTz4VOWZUFJuIjNx7tRfBDalN3VWAvWM7uSa7x4RWYTKfY672Lx4+vdCLoY/Yc2htbnl5Xse/5U+7m9EZHIUciNKfuzic+SQArOczixFgMOLi2n8VYZhQEwrahs8PPlJOXGNP8YlHuUbhGAo/nFhADvfYZSL6miyFhJQ6YVtb/x6+PiB3r4vVoLAFXJvep0BBVnfGPh4Kh6FwpHSLNulKM5qT+2fOz6iBlQaEk+vT1mp28D0XQXjT7eP7IJdCYQZhD6Hir3x497Ab6g5n7YVWtup7EegWaIwlFrMJg6mdfoajSD2dD4E1ZFcbUPx+2AixZwfHXe2ICG6uBN6HptXL/KsngoCUczEGrCQVX0a0K7dwGS1G1r81VQEmyFZ95vG0xEwxFLAzVfZANCnXAYbTwHKqos4rHlHAgS5d5+Zx2D6Qg0RoNA2HtfsVt9arSWdSLJOYetYKNQzXGSD5FtB7imt6/k9RaEAWU3V6R+PeKyfhdUUbV0Qpa9sxQaVLBfyOUTqZjgGvJxUHYZTZuHEkgKUSGtuohN4aP3BTTv4CSVegWZ2vSItTjyKoy/1DRLoKIU/RUQeBsf35+h9AKCkP1UA2NAmYGLI1QXRzpt+xHLgm7bNlm4rLLo594hV7FbSrRD7uTjV5Uer9dmCcYlFVBroHnnYrJEfypuW7CF0A+X6Xx8Lycc3+ooVuyUNMl+xtHPClj3wXpVjLUKN4XnPCSqJ6km60OhiCncfWsujQQEpfC7xRz5LT8v8anmm9H5ZUc2Bt3qV+9MIKEqvMUM/UK8UCiKTyg4KQqJjSsSYpjD41oFXNGNTRqmqA31b97U7C6sOv1tuNledXqSSp1EeOhixu9Ft4FngrJU2zNzI7NazmJ8/f2cQsqvNVDkROX2C1BF61mk7YcRGndYBvEQvufPT7GhNTcM+1J4AT26L54f1XxaD20+yw6o1Cl7gdgBd3j8KwSwYKKlsdyS1YEwha/cla3WrDn86eZg9cYvrrQ6DKdin1141HBiZz8nvsw2jIllP1PnpwCtdW6jsGB2BEut+L3ZxF58CAK+PBo1+G18mS4Pn0ugm68ezrtiIHsmWZxahukaj+aJGnYUBqTvojrcGAzqNYFXSNFZ4ysxl4DKF9KupT1sO63aTFnbDsm7WXunUkPT8x4FBHPf01b8hsJ44u/+CweymtDKaRS7zIPILEgxwFC3JvbcRuT7BOhck60pKdTrT6n55x7bcHYtEp7R3bbRUWVV7EM3t36fsuXeZC47Doh3ZOqmfGFWg6/Y/KfwL5KOQq+P9PwKSCBZwz2yjYAka0oKQs3/k1QUA5rXhP4+xZvAm5QoWbvt1Y9PJVnjDQA0qHSbxzGgWRvzvTaWeYXsWYT1y/EnZw/UA3BaJMYaaHKi9kTJcoULNnZsG7GGO/3WTICOyNyaNdVmhHLskePzfzfZUAZ0glXsSMwszZPvTQyH6lBcztwio4fkFQ6s5MCRQH9zba9sIuUV3AOph7jghtvM83L566l8t2IE5T6qZNwcGsWD+qMYqr91IPeTSGeWEYeicCxoFFE90Fmy/KfyFcEJp2cc4kM6IgYQEGBx4H1JqCn8ggVr9nV75IbuRJVO//lV6HKbUBPOtLP4XeSc6dB+Vmfxrx9/t+9q5GmUvDAms/c7I0/kemV7/Hxeov6pZKhwRAxT/0huTAs21DXM8q64s+RBDVP1fgCodenGpZBgS8/hXuX7d5QGfabwD5TjpFB8dGoqk2gid2XkeJKH4/wBUieph0fatodBcMlrSsRuBOpwSmBiBqKSmMkGHcpBihW06DhubWjqIDGFANuce0+xAAB0czou4eyW6ZoNTHdrXBoyEjvaiy8rnZ0yxC1jQrSqNV+rSV0/PbZXFzteU/hHCjE342mI/DysnudSHjP6TdrWiNVEBSIiOd5roDbyDXcYcHYmX8nqMmnde9Vyi3A4l6hb07FGLf8Z1n9kQY0bIvt7GsZwrUhxf60FbYX39IcwqUlRx+EBd7xKcvo0awcC8GcZRSiSnM9rhE93HoS3i2sQ/sXWeYLQdZjShNcu87gO5BUPNE5vO7pfZ0G+WrcWXEH8EqAQbaU8qoPOIyjYihg70vdaxrIvTqAATqaLGa/EjHwNCgToMvEF0EjoZqx5CEwr8DeX+v0kZn0Sqd1WrvZz4g4HASX7T4+MbD4Xb2CNJHDu4qk9SDqYyPDMRGsnafVGDXQ2o1dbeQJvU8za9nH5RmJSz4cPl+p9zZioAQVFua1a0ABbuZM3/yTAfeGytyfb6w9X/13ALSm7yCkITuEvqyCdJZHKTu4DBc8HIjSoYGdsgGdOKT8Q+tT7FoYuPEjkH/mKjUAhIfQ+eZ9umbHnLhTZn9RL6dD61eqNPW4Wbd+271FOdtL1Xw7aYzUXD/WjXTEb6CkmlNO8qi33DPHD2AUMaFueudZEcpVWmFTnbJ0Km+foYvwSpqRmIRgGNFOXm5OhIZm1I3lY0PPRxYCCPYskXukaBHwkYVWLuokEi064bKwugopXSSqQWvtzD85pkGVD/qNmSbMl+xNiYi98mrDh9Q3ZmPO4ovYbAlchr/Cfx/7LHJwnRAMlK6ATRWU0AsN5/FHeRUBB6AUh12TGdxotsXU1SygWBOJ5EdIo1csfsqgjek3BPF/ipa/AfIdKqGw/oTl8by2vHs+6ydLRREbnbqkMbrSb7CMNqPZRzrxj8xx0FAqray5dk36qeh+8jtF3KPa95Kh9LG+H9pMA9lOGnjA6V+vbE6SEKQY0u1GcaADaKTY3Bo+JPLinqts21LH4zQu630DR/kVr5dmPcXkf1Y8hILQIrgoB7RLJgAbcMPwgdzZW4EA0PcMLqNyLVKTLjjlW171vh/6xcZlYxVjqLDCHR60pY1dLmaDWePFuTNEeAWgo9vPiwxLNiJaeF9QCnlIKVscur7K6tAxyZ+N0OXjSrtEmpylxlJUboYsFQHkySUdjmpOj+BrKvuxi45TPKR/36hG2XN3LzKVR52/rKtjPzc2Ewok9YkMbUGR1gjfOl245azsdwWr2dQXiFitKtbKcCzN5zZuwLIrxQAhZQ1tcXzMwQ1DrgMpBwdrP5m89Ge1LL6jojP28KMsgOCoCJYXJz0NiiJ1JZQOapD8T7GeMvrBYSDDpvJIMvIK6BjSJoInFXBaUTRIFUT9vQrxBjrC6HKlgNS3QNKBJ5pODYnZaMFLjLnzA6nhUnQnqnOglLnAFsQY0+ynOrSgXp5iJgyAsUERVZjmQFjTAwXRVKhWsVlltBBp4+HkuGbeYy4I+hIaeiGp53C5TwaKwrr0LdgoM68YE3eEPrQsvnx9YEUf1DeIDMh3hpCoVgzSsfxa2YPpBWZ1HJ5dXH7SEozQCjaokP+RGyGsQyiC+onypFZVefEetkZK5dtv5d6yvW2DbWqAd6UHPnUTdQoCwY4rEeIu0NrEoX8bkXUpZ0HqsOwb1t5/bNm5i/FFOgNTm0qsxy4JKIz89wKR4vP8r7rmZUE4pa93ISo9SvQCrIFZnI5yFf+ybeNosCxqSW8BNaCP1Im3sNJOcA/wQVHKYmFOelDXQnDVdhKSqTDIaVsTshfX2QZzj/cMwobj9RK5klSeMUP5U02w8uiZFY+qPQePqjR5rCBoPkTnycrIYILaqISHnz9qLYaPRduF7z99nKlzqVSVXKvoiokLVFgE0E+5dE3hC9A/JQuyNz0r5g6Jf2XVHshtTy4aG0I9FZkTGIo0uROhZ9M4YuC+IWtCxsw8gEX45BmsvOrDKjYrLn5UZTg5Eob6Tc5NwW5Lw91BQ38FRvVXU2XOH/VEfuRfBiGRfZt1ow2YZwWokCjcb49eVeACzoFNWXZCzFO+ygqyioRSN89IeUbvWe9mK+/BD7E0wErmzDahTbbiv9HidityWAUmO9sr7Rb3veznnTcl6IYqFyW5Zpedv9C3C+3br3vnbqAHE340UyR00rflIW3BDQHqWWZD6ro2jCVu/BNjZJstJpHqz0Bh07/xtkIvKVM91/tibk9z/3r+yfrVNdTL3ezPmPr0qdrgGmEU9n840BteTRs1FMqAcuXQeDnADpnSIdGTE6jdIKUl/TL0M6ETMfHyVOQw5xvfxVvuYmwnonMUtaOcYFCDcT6NE4hYUbj/lc4c/ODGtbtIl8/Z7J1rdM60gOWMboO1lGYCmPYSPRXAZKxjQcWZI89m/g1ACWGowe4/NHaE3OirGIW2/90N4kcwZxuYl9FaWwNAOSVz7qW2wkKCfH4oYLPb0csQu25iUcL3WGE1aW1lyVPzNwVuzJnu4DhvFkdq3c3zfewvdJP9LW3T89P2EwXVjSgxg8a5Oxf0jUqcDw9O6yt11dx9ONr175XMLR+jKmMR/2MXXXYV5rAE9fh/QLRPJgY6ObyWcwq/E7IUNplAzNoAmcxTUQ6fwl6kRXvz3Nk3VLQcA61IVmrgHu3B6sMrN1Jrbdhy1hRqRlFVSTcYzR6C3psePhi5j0MAdDrPFqlqEVASZYUiU4p3GCreoxSMNaKGZBAs6Nk4B1m4I3YdVWuGq+gxAtyAWVNB+ClnQu1iimGXP1nqkAS2hqALUda/pRa2ObPdJz/OEcNLDpQI6PHQNVJdyhOtRigWdBNYGu7eioYNLr7f/1i9Bck/OiysAAAAASUVORK5CYII=", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(Image(filename = 'examples/segmentation/seg/B2--W00026--P00001--Z00000--T00000--dapi.tif.png'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Running tasks programmatically\n", "\n", "For more fine-grained control, we can first load the tasks before running them:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Loaded tasks:\n", "- examples/segmentation\n", "- examples/segmentation/sigma=2\n", "Pending tasks:\n", "- examples/segmentation/sigma=2\n" ] } ], "source": [ "import repype.batch\n", "\n", "batch = repype.batch.Batch(task_cls = Task)\n", "batch.load('examples/segmentation')\n", "\n", "print('Loaded tasks:')\n", "print('\\n'.join(f'- {rc.task.path}' for rc in batch.contexts))\n", "\n", "print('Pending tasks:')\n", "print('\\n'.join(f'- {rc.task.path}' for rc in batch.pending))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Inspect the hyperparametrs of the `examples/segmentation/sigma=2` task:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "download:\n", " url: 'https://zenodo.org/record/3362976/files/B2.zip'\n", "segmentation:\n", " sigma: 2\n" ] } ], "source": [ "rc = batch.context('examples/segmentation/sigma=2')\n", "print(rc.config.yaml)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now lets modify the hyperparameters programmatically:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "rc.config['segmentation/sigma'] = 5." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And now we run the task with the modified hyperparameters:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Picking up from: /private/var/folders/bq/yy783k4j24zbhqhctlx__thr0000gn/T/tmpf48l0r9c/examples/segmentation (segmentation)\n", " \n", " (1/1) Processing: B2--W00026--P00001--Z00000--T00000--dapi.tif\n", " \n", "Results have been stored ✅\n" ] } ], "source": [ "import repype.cli\n", "import repype.status\n", "\n", "with repype.status.create() as status:\n", " async with repype.cli.StatusReaderConsoleAdapter(status.filepath, blocking = True):\n", " rc.run(status = status)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The argument `blocking = True` is necessary to get live status updates on the standard output, while the blocking operation `rc.run` continues running.\n", "\n", "
\n", "\n", "**Info:**\n", "\n", "Besides of making changes to the hyperparameters, the run context `rc` can be used to modify the pipeline via `rc.pipeline`, or directly inspect the task via `rc.task`.\n", "\n", "
\n", "\n", "The task will now be reported as completed, with respect to the modified hyperparameters:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bool(rc.task.is_pending(rc.pipeline, rc.config))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "However, the batch will still consider the task as pending, since it had been completed with different hyperparameters than those specified in the `task.yml` file:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Pending tasks:\n", "- examples/segmentation/sigma=2\n" ] } ], "source": [ "print('Pending tasks:')\n", "print('\\n'.join(f'- {rc.task.path}' for rc in batch.pending))" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.0" } }, "nbformat": 4, "nbformat_minor": 2 }