From 699f990051166a3b9b2fdc2286e9d8b1df490d4a Mon Sep 17 00:00:00 2001 From: Harrison Termotto Date: Fri, 21 Oct 2022 15:04:19 -0700 Subject: [PATCH] Updated xray_models example notebook --- scripts/xray_models.ipynb | 456 ++++++++++++-------------------------- 1 file changed, 142 insertions(+), 314 deletions(-) diff --git a/scripts/xray_models.ipynb b/scripts/xray_models.ipynb index 16a867c..0da7e24 100644 --- a/scripts/xray_models.ipynb +++ b/scripts/xray_models.ipynb @@ -2,18 +2,25 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, - "metadata": {}, + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "7-SIJe5VM6sD", + "outputId": "f233f548-73f6-4fc2-c36a-2fd5fd3564e3" + }, "outputs": [], "source": [ - "%load_ext autoreload\n", - "%autoreload 2" + "! pip install torchxrayvision" ] }, { "cell_type": "code", - "execution_count": 2, - "metadata": {}, + "execution_count": null, + "metadata": { + "id": "8JXRBsBmNkox" + }, "outputs": [], "source": [ "import os,sys\n", @@ -24,260 +31,95 @@ "import torch\n", "import torchvision\n", "import sys\n", - "import torch.nn.functional as F" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ + "import torch.nn.functional as F\n", + "import tqdm\n", + "\n", "import torchxrayvision as xrv" ] }, { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "yozg_1UtNrDo", + "outputId": "b1fa35d0-dcf3-4e32-b987-b1cbf478b5b4" + }, "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Lung Lesion doesn't exist. Adding nans instead.\n", - "Fracture doesn't exist. Adding nans instead.\n", - "Lung Opacity doesn't exist. Adding nans instead.\n", - "Enlarged Cardiomediastinum doesn't exist. Adding nans instead.\n" - ] - } - ], "source": [ - "d_nih = xrv.datasets.NIH_Dataset(imgpath=\"/lustre04/scratch/cohenjos/NIH/images-224\")\n", + "## NEED TO SPECIFY YOUR PATH TO IMAGES HERE:\n", + "IMG_DIR_PATH=\"/content/capstone/images-224\"\n", + "\n", + "d_nih = xrv.datasets.NIH_Dataset(imgpath=IMG_DIR_PATH, unique_patients=False)\n", "xrv.datasets.relabel_dataset(xrv.datasets.default_pathologies, d_nih)" ] }, { "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'Granuloma', 'Flattened Diaphragm', 'Bronchiectasis'} will be dropped\n", - "Lung Lesion doesn't exist. Adding nans instead.\n", - "Lung Opacity doesn't exist. Adding nans instead.\n", - "Enlarged Cardiomediastinum doesn't exist. Adding nans instead.\n" - ] - } - ], + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 269 + }, + "id": "cGIW_6gINvbH", + "outputId": "7758afb6-67da-4080-e663-c78925a6de73" + }, + "outputs": [], "source": [ - "d_pc = xrv.datasets.PC_Dataset(imgpath=\"/lustre04/scratch/cohenjos/PC/images-224\")\n", - "xrv.datasets.relabel_dataset(xrv.datasets.default_pathologies, d_pc)" + "sample = d_nih[56]\n", + "plt.imshow(sample[\"img\"][0], cmap=\"Greys_r\");" ] }, { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'Atelectasis': 0.0,\n", - " 'Consolidation': 1.0,\n", - " 'Infiltration': 1.0,\n", - " 'Pneumothorax': 0.0,\n", - " 'Edema': 0.0,\n", - " 'Emphysema': 0.0,\n", - " 'Fibrosis': 0.0,\n", - " 'Effusion': 1.0,\n", - " 'Pneumonia': 0.0,\n", - " 'Pleural_Thickening': 0.0,\n", - " 'Cardiomegaly': 0.0,\n", - " 'Nodule': 0.0,\n", - " 'Mass': 0.0,\n", - " 'Hernia': 0.0,\n", - " 'Lung Lesion': nan,\n", - " 'Fracture': nan,\n", - " 'Lung Opacity': nan,\n", - " 'Enlarged Cardiomediastinum': nan}" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQUAAAD8CAYAAAB+fLH0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzsvXuIbGt63vesquqq6rr0bfc++5x95sjnzJy5HGkUGTKKmKBg4gRiO2ALgSAWNhmEMzGICMeYgPOPQDghxhclIcTYEYn/UIKCHA9WghOFyGDkICJGIpE8Qw4jaXa895lz9qXvdevqqlr5o/fvq2e9/VVf9j5npgX7g6a7V61a61vf916e93nf71tFWZZ61V61V+1Vo9W+1x141V61V+12tVdG4VV71V61SntlFF61V+1Vq7RXRuFVe9VetUp7ZRRetVftVau0V0bhVXvVXrVK+8SMQlEU/3pRFO8XRfGgKIr/5JO6z6v2qr1qH2/7RIxCURSFpF+Q9BOS3pX0bxZF8a9+Evd61V61V+3jbZ8UUvijkvbLsvydsixnkn5R0o9/Qvd61V61V+1jbI1P6LpvSvrA/n8oaSVSqNfrZa1W02Kx+IS6c3krikJlWeoc4Nz8e6tarVZTvV5XrVZTrVZTURSq1WrpM+5XFEX68f/9Pv5ZPObXrNVqajQa6fp+T//+qufJfc7YxM94dv/t9+XYqjHKjd9V/+ea338+n1e+w/39J9cvZG8+n2uxWKgsSy0Wi8r1Vs2Pf7bqOVedt+p7ue9cdcznnz42Gg3V63WVZanf+Z3feVaW5d2VHX3ePimjEJ/0AiIpiuKrkr4qSfV6XZubmzo9PdV8Pq8IlJ1/4SY+WdcRnvl8rnq9nv2bflznGt4Wi0VS/kajoU6no3a7rU6no52dHa2tranRaKjRaKjVaiUjUa/XK38zgfx2Q+KGheddW1tL12g2m+nvdrute/fuqdPpaH19Xa1WSxsbG6m/3AtFd4PBNegHz7tYLFLfXfHKstRsNks/ZVlqc3Mz9bcoCs3nc02nU0lVQ4gSLhaLC85gsVhoNptdGGN+z+fzyueSNJvNdHp6qtFopKOjI52dnaWf2WyWvjObzXR2dpbui9zw2Xg81tnZmabTqU5PT3V6eqrxeKyTkxMNBgOdnp6mMWLuaG6coyw1Go2KzDHesbmc87mPm//t95SktbW1JHe9Xk8bGxt666239P3f//3q9/u6d+/e/3fhhpn2SRmFR5I+Zf9/SlXkoLIs/56kvydJzWazDJ9duGA8dlOvjjLHiXEljwpPc6HFEtfrda2vr2t9fV39fl/tdlu9Xk+tVisZgWazWUEI/je/UUSeKYcqrvtskjSZTHR6epqEFmHkOSIiQtnoQ71e12KxqHiiRqORjADKhRdF6c/OztRoNJJxkJT6wHku5IwpBsPHuVarJeWN4+/nYrAk6ezsTCcnJ5pOp8kw0Fc3CPSFH0cFGCM3HowdRn00Gml/f1+np6epL41GI40V/adFxb+O3OYMR85YxGvV63X1ej3dvXtXm5ub6vf7Gg6H2tzc1Gc+85kr75ue59pn3qz9P5J2iqL4IUnflPTnJP3ly75w04VZnO8Cv6q5ECIA8Tvusd1DN5tNtVottdttdbtddbtdra+vq9PpJOPgwh4VnuNMoN8j5wHKsqx42tg/SRcMiqMOlJDGcVrOy/A7PoePtYckOe++vr6utbW15M05r16vq9PpaDKZVJScOXFvHeExiu/N7+uGYTwe6/j4OB2LSMGNGMoejSXnYBR8DBuNhtbW1tTr9SRJw+EwoQfOddnx794Eica58fHwa+aO12o1tVotHR4eand3V3fu3NFsNlO321Wr1br2vT8Ro1CW5aIoin9P0j+Q1Jb035dl+c8uOT9NFIJz2bk0YDReudlspkk9Ozu7YGjcezLR9Xpda2trKopCzWYzeXkUv91uq9lsam1t7YIHj57Bva0rfu7cVfwCjX66wjiEdmMQhRF432q11Gw20zUxEK64Pka50C3Gz4wXyonhnM1mmk6naVybzaYWi4Wm06mKolCr1VJRFJpOp5XnXltbu6D4rrCxP3zX7+/HmedOp6Pj4+P0eQw3+A6oKCIoUA+fNZvNhAo3NjZ0fHysbreryWSiwWCgk5MTjUajyrOsQgUvuzI5h/T4u9lsajweazgcajAYaD6fJ924bvukkILKsvw1SZ+9zrlFUajX6yUlirAab+AWt9/v686dO9rY2EheihgWKIl3iuSTx+koO/CQ+JyY3YUt5/E5viruW/X9CDFdQd1goMDeb+CqGwQPATi31WppbW3twjWjQYiE5Gw2u2A8FouFms1m+tsJrdFopOl0mkIE+ohhdgjuhqFWq2k6nSZP7YqPEDu6cMV1A+f/c26329XZ2ZnG43F6Rp6L56VvjlYcvfCbkAhj1e12tbm5qel0qsFgkBRwOBxqOBzq+PhY4/E4G/Ku4sFelGR3I0QfT09PNZlMUr8Ip67bPjGjcJPWarX07rvvJgFAuJ2k63Q6WltbS0qLYsQQgIYVR1i9RZLP/44KmGN3I1qIMJzjHIvKehk0jM8SSUE3LPEYYzKfz9Vut7W+vp69lyug3xuv6WiE8WI8MD7cC4XheCTeCGe4dr1eV6vVSmRfHLcY2vlnGPf4/JwH6gAVbG1tSZLG43E6z8cSZOShKM/IufEZ3UjMZjP1ej1Np1NNp1OdnJzo6OgoGYfhcKjRaJQI9Pl8XulHnG93AD4ecXxWcU3RSbmBvknociuMQr1eV7fbTQPV7/e1vr5eET5vWHMePMcEl2Wp9fV1jUajZGyuS/TFc2m5kCBHKuU8/Srjwfne7/iM3h+/B543IixJifCMBmdVWEBDcPGqtEajUSEgMSyu7CgYMT5jy7PwAxLjXGJ+ntsbz722tpb4gVWozw0j/YcDgBj0Z4i8xipYzjPQX8I6jF273U4G4s6dO4lvOD4+1nA41Hg81ng8TtkM0FGuuTHMnbPKIHiL4d5NSGvplhiFWq2mfr+vWq2WCBI8CpCe384LMKGDwUAfffSRjo6OkiBimdfW1jQejxNacNgbPf8qVBD7GkMHWm7wXWBXscaSkueRqmlOrhG9gF/b++pZkVUpr1zfvbni+DHnezy0gxydzWaaTCaJTyBF6s8uXQwJvC8xjHCkFFOd3h/CQA+jCHkwDKATDJ9nRZxP4d4Yg8hjwIE5auC6ENLb29uaTCY6OTnR4eFhQg2e6gTFci0fD0e31wktarXahbqRF223yihsb2+r1+slq058BFHSbDZTDUCr1VKv19P6+ro2NjbUaDT0q7/6qzo8PEyKD9lWr9cruXJJFYQQPXlU3lxY4MdXfc614nXcC+QmnNj9Mj4iZwz47vb2duIS/B5A7Gh84lz496KyepiFh4dQnM/nWl9fT0pbr9dT5gLSDuH170bexOcARXFeKCIQGveJjfDz9PS0knLMOQJHdtwrxv5ueGJ6k7+R1X6/r7t372oymWg0Gung4ECDwSCljknpRoLcn/uyDBsGk89yafWbGolbYxR2d3dVlqVGo5Fms1mFlWaip9OpxuNxQgSkWTY3N3Xnzh39yI/8iB4+fKhHjx5pOp2mAWu1Wskyc79c/jineP55hJjXzUHn4kT/jP9R5Aj73QDwf/S+ZAF2d3fVbrez98+lAD096NePf8c4FeIOZSBjQ1jAWDGuPp/EuJ5S9NoGDyeuqllx3oLsU5ybWm1JXPpzeXaBMXBidFUczucgpKjAKDjHms1mQg/37t1LtRQnJycpzMBgxQyQh1eOImLFpffZQ27GN2csV7VbYRQYBEhEL3RBcL34CKUBURweHmo0GunevXt6++23tbW1pQcPHlQIJgyDe81cvB2zCzkSLLZV56ziEOJzRw9FiOTfjcbIjzcaDfV6PW1tbWX5CifPeE5vESLH8CSXVfHre7rLC348Do+GGOEHOThH4f2Mx/y6HgbOZrNErBKze6g0m80qxWSEEChMzOJcFs9HFMPzxGIoT7Xz/9raWkK3r732mubzuSaTSeIdjo+PNZlMKogGZ+Y8ho+R/09V4+bmpra2tnT37l1tb29rZ2fnwvOsarfCKNDa7bY2NjZSOlCSBoNBpepNWsZP7tGKotBgMEiw7dOf/rT29/d1eHiY8uqkKN1q5pTPK9z4LHpmqapcObbcv+ufxXPdCMT75BRRWiKDTqejbrdbCRdy10XgnVtZZayioHv9vPc9VizybI4+XPmkJRpyz+pCnTMA8blpzi2cnZ2lQimORw/pBo9+nZ2dXTAOyJbfP+dMPLTwIiX35KCXy8KBbrdbMSLj8Tgh5sFgoMPDw0plpiMD7kcfWq2W+v2+dnZ2klF444039Oabb2bnOtduhVEoivPcNeWjGxsb2tnZ0b1797SxsaGzszPt7+8nyIXV96KlTqejo6OjVLu+tram3d1dNZtNnZycSDpHItPpNE0+kxVjbgTXoRvC5cqUi4m9RSMSeQBJqb6C8y/jNmhAdchEv7d7T1r0/vQlh2okVQQ9Zmm8714D4mNBn91rcl36Qqp5FbfiHEYuBdtoNC6km/3aKDzoINZMUFRFuIJx8NCFMQA9OJHnyCLHSUVv7uNEX2Ph2NnZmYqi0Je+9CW9/fbb+trXvqb5fJ7QA2s7IuIFfaAPkJ3wGXfu3Elk63XarTEKEGAUgTx79kwffvih3njjDb399tv67Gc/q/X1dY3HYx0eHmo8HicFByo6KUbRCkQjAxnLPZlgrLQLlbRUZJh1GOyodB5L8j2aCzL/O2/gXp7x8D54ncDa2lqlyCryDDH2j5+5F8/NgxNX0bOCGEAHrpSeIfCsiBNyUrWykOf38fNzQYSc62jKyT6fS68FgMdgLHEGxN3IT3z2qLzR4DtR67/duOf6tir8xOmQtfmxH/uxFAp+7Wtf0+7ubhof1pnk6kx45vX19YS6CR3W19ez9861W2MUEHKPP09PT/XgwQM9fPhQ/X5fW1tbun//fiLSJpNJSjtC+rhXcc/gBRworwuulz7TXHlQ4rOzM00mk0q1JI1Jw1B5StFDEPe+9DUaETcUwGKvUPT+eXzuqVqPoaWlgOeMgnu8XGrVIa+HJwirCyfPjyDGON4JSq7t4xgVypXPF3hJSnzGYrGopDrjXPNdDxNoZKrw1F4r4lkP+oHyRpTpLYYf7hD8ufhBhs/OzvQbv/Eb+vKXv6wvfelL6X8/P4aEfIaxAkmCFlivc912K4xCrXaekpRUWR3n3nQymeijjz7S06dP1el0UmgxnU4vpHd6vV4yFnwXmEjc1el0JC1X6SGoKBZ5bxrXgiRCYIj/uA6VlCCVaAxWlR3nvGqj0Uh8AQLglYB8l8rPnJA6k+3/4yn9XDcMcX4chURIz/Uxwgjn+vq6Tk9PE0dEH5rN5oVFSTlOh+ahhI8Xjfs5MqJRvu5hgacPh8NhkjlHU9zXMwqR98mFTbHVarW0fsYbssDcwkksFgs9fvxY3/zmN/UDP/AD+vKXv6z333//wrj49RylEjq3Wi1tbW1pZ2dH7XY7WwS4qt0ao9BqtSqw+uzsTKPRqCKMktJnH3zwgcbjsd58803V6/WkhLC1cA6LxXnFGZ6TwhHiL4+1gGYxREBQfJ0EAsj6dYzTcDhUs9lUv9/X0dFRJf70fRIQhJjqpLai1+tVJjIKHt9n3CRVuBAMhcN/ro+CUYkXiT48LQiH+N+ZfGLiKND0o91uJ2Xkvg7VCZEiiuH69NkLmRyh0Bw1eBo0Vxnqy52lcyOysbGRnAlrGZzl59kddUaCOfIq9JcxYCwxUKRu3RhDgMODPHjwQGtra/rc5z6nL37xi3r06FFlIZqHb6BTZJp79Hq9tEIyx3mtarfGKIAUSDXt7Oyo2+1qPp/r8ePHSRDdS43HY33rW9/S9va2XnvtNZ2cnFS87Xg8TuW+3Kfb7SZBdqVnklgRCRxDkLwaDqbbLffa2lrqB0aEVWpcBzTDPb1fEEX+nNH7eKiDAVjFE3hcjwLmUnzRg+SQhiOXmOLkPp6vpzF2p6en6vV6lfqJaADov/94JgY+xfvIuDNfp6enlevEMfEslBs2zm2328mBUJYcxyamBfmfbBAGHYQXEed8Pq9UM8Z9HhiPH/qhH9Jbb72lxWKhb3/72xWDwHOhB+vr65U6DzIQGxsbacHg93zp9E0bk+8egp9Op6O33npLx8fHyZo7lFssFqmElLjJBWEV8YeAuxADp7G07KMQ41NIS4/nmGzClnr9fDcp4sS4A5DzGm7J3fN5JsFJPjdI7kGjQufCCdBDJOUwHq4ozI0bsFzYgAGNMa/P73Q6TQoS42p/7hhW+XNzP/rvdQjNZrOSSoW7iK1Wq6nT6aRVjH6Ocw+bm5upCtENDCjK04AYE+L4drt9AQX42gvnswgj6MtkMtFrr72md955R9PpVN/85jcTN0Qf6LOHHr6+h7kCLfp8XafdCqMgLeM8Jpz1CrCyQDFJKY6XlnHk4eGh3nrrrcrg4Fmw5J6ChKSkMcCz2SxVmhVFkdZf9Hq9yhZn1LBLFwccA8BGLBA/TCjxNApwenqa+s2+A7nVoAhTjMMxMrTFYpllAR1wDtfl+953D3UiBCfmplEgxE9MuTlpGct24Xb8ON/BA0ZjQP8Yb8LIKEM+x7nMBcrV7/crxpnMkxPFxOLD4TAZGlc6wo+tra2KAjInOIlYF+O1Gk7GLhbLJd+PHz/WwcGBTk5OtLu7W7mWO71catszVMjZd4VoLIriLUn/naQvSDqV9PNlWf5XRVH8TUk/JWn0/NSvlmX5j6+6ngtg9CRwBLRer6dms5msOOfN5/O0LFdaGoNWq5Wu69AvwlXCh8gus9KNegivEYhpSi9UotDEMxss/6bNZrNkCPif+FBSQkYoOjCSyY7FPxiO2WxWWQjmGRCPlzEejirgOqKxi5WQGBtHHV5+SyztFYue7gRF+Vw758KxyLnwfUrZOT4YDCqy4OPimRuOYwgw/IScGHX2fdjc3KygCA8VYPbx1nEVZOSN3PBK1bJuDGKtVtPDhw9TGE2fCUFPT0/TODhxzTyAPnAubBN43faySOHnJP26pLuSfrsoin/y/PjPlGX5ize5UMxD42GBRxynwRWMRqMkGOPxOFnJqPiQjrm43fPOnOPW3A0Vm1ZQTsruTJPJ5IJBc0ISAZSW5dw56E3owuahriAsH/bilW63m3bbQXCk6h4AGINarZY8PoYJAXIlRMF9vCNkd2HMxdoeDnnmgdAKZOFZE59rP0Y/QAIYYfeebKxzfHycyD1HCygynBHPzHi50Y51Iz72yFesx+B5Iorjb38OjCmFSBDcTqx6tqrf76teX65+BbkxRsgEJPX6+rq2trZSKLOqbHtVe2GjUJblQ51v3S5JT4qieF/S/Re5FpxC9GoeU9LiVmC1Wi0RR+PxWN1uN01uJGYcQnrzz3MbUuTy9kD+0WiUSo0RDvLg3gcEgfjQJz9yAnAb1PJHPgLFBWUg3CgHXgEhxIj4vRAeNzixHzS8jyuCh2mcH6Etn6H8To4yJnwvhwQ4zz03hsD3XoyG+/DwsFLcxWdeLh93uca4dbvdhLY82+QFUKAe+s6Yo7iOYJwsZX0DPxgBR5fuzBjn/f39NEcxI4WegFYwes5TOQq8TvtYOIWiKD4n6XOS/i9Jf0LSXy+KAhTxl8qyPLjqGrGQp91uJ6idGwhXYvLhQEqWVGNoPOb2sMAVMxY3+UT51vPOhnM9NnLxPfxcUVFIBNUr0pw8xKM68XRycqLhcJg8grTMhEwmE0nSxsZG2oqcLchdKOLWZhgvPHu/369A1xg2OAR2jgKFiMaAsfZ1BY4cHEZHhcDgcS7h2XA4rBQngYyYW/rY6XRSmm59fT0RkI6uaHh+FIv6FQ+14o+vuI3pVghGR0I4q+FwmByJKzPPk2vRiTE+bqycs4nX8XT+d5VoLIpiS9Iv65w7OCmK4ucl/VVJNUl/W9LfkPQXMt9L733Y3d1Nio9VhtHFMDABLtieWUAJcqGG/58jHz3t5otiGGSH8xxzqIl1JuWGEmPZvU+5Ml8+97iTTAvCH3cmJiddq52nWQ8PD5NH5jnwqIwfhK17duAzUDPm+l1pvQFJHb3kNt2lf36+IwWyCXzmhCW1H86reE2Bhy08Z71e1/b2djKSzFXMNLl8OKJk2z+QA0rsnJcz+u5sYrr24OAgLWyi+fz4fR0luMHwBi/iCMyJVb7jSPcmxiD18cbfsFYURVvSP5L0X5Rl+b9KUlmWH9jnf0fnr4y70Ep778NnPvOZUlp6TWI/t3JwAR4fS8uS1kajkeKy4XCYDEQccEkXJtInwT2WowHgId+FnMIwzOdzHRwcJCWr1WqJEJV0IZzxH6/sm06nF7yi78ZL/ImCEE8SymAsno9/WlOCImFwEXqIq7Ozs7QNnjfG0I0F8wG77XUMkcOg/kJSpV80jLtXaoIARqNRhSwFIcRsCzUYnlHyufddqHzcY5hIdSOFPzgl75vXAyArGGyMEHKCAYZv4hkw3jnD4F79srA2R8zzTKBrdzY3aS+TfahL+h8l/W9lWf63dvzzZVm+XxRFTdKfl/S717hWGhBfNu0W1skhBjJW8KHInvZikH1S+O3kkguZVDUOjcZy5x5QCRkKSppjoQvKPplMknAwue4pvSZjPB6ngie8I0IpLQXdFff09FTD4TAJHiXXnMO1uB9L0ev1euJBGGuKv2IJLfOTEzLiaFcaTzV6cY8/u/MnnkHw+6I0oIX4GXPmG+h4HYUrVazqo67E/+dahH2koSGuY5hEbQ3GGWIYY1KrnWcuOp1OCh+cB3FHF42ByxHcj4cIEfmCSh1NeD+/W+HDH5P0pyX9y0VR/PTzY/+BpJ8siuJHJc0lfV3SX7xWRxrVF6tIqxeZxBgpVvdF+ESs7vEnQroqf4sSYDRQFiZlOBwmr+3f8e/h5WkIlrTcco1QgReLIDC5ayNAPDNjRjVlv9/XfD5PNRyujLHghXvwfcbu5OREW1tblTFkTKPSoliuKM7XLBaLVNKLIoMagL18P9ZZwKZjSKXq6kTuj8A7InG05DG+L2Dz0NNDUc6dTCZpjMjweD8I5fgh5PB7IGcgD14/R0jB8zmyAoF6yJPjQzCwoDbXCa4rXSw2u057mezDP5EuvDNSkr5202sxGNEg8OOr8XKbiUhLwc3BQgyDC4LXCziEi4uhMAZ4crf2nIMBkJYpN2ekvf/cA74AxRoMBpWQQVrGkH59f26vAEURCVvoO0jH++2ZAJpD/+l0mjwrP15gxG8ELRoCb84luFGJKUzPszPOGEYUj/PgcCAKGQMn+HhzE4uveB43rDkSjlABvmVtbS2R17FUnD5hdJEn5plrcM/19XXduXNHd+7cSQjTDQhLnuG1uE69vlz6z/NGXoO+RD2KMnOddmsqGj3mhk+QqvsI4tViCsrZXP52QhCBhz3mGB7MBRal8esNh0MdHh5eiN8iFGbTUpQb4pFYE2MzmUx0eHiow8PDtI4CyOle3Q2cw0d/Xs5lAw7nKEhNEiagRCipGwZXFif7vMVx8Zw9JCpozMeK5pyEN64JBPet3J13kZbel8InNtABHTjv02g0UuEOfeHv+GxRlvgbwvLo6CiFEr7BD2PN83Ms7hY2m83SpsKkg7e3tyWpgtggUOnD2dlZCgs8A+R7WTCn3u9cNed1260xCpFwyVk7Wk6oJCWLygB7HXpUKIyCW2A3KhBdxOmnp6eV6r8Y93EfL1f2qrhGo5FeMYagkZpkgoldvbTZf0vVjTgZKwyde1SvYzg+Ptbm5malYMhz8W5kETSvYfAFYBhUBNWV1UMA53IYa0cKzLErKGQpfVssFokgdSTBuYzN2tr5xiIxbYzyuYyBKGLIguHudrvpWMz2cIxSd8I3R0wYhnq9nghvnpfxpU4BGYWQxgAQ6njo42gQHYgGLjopH+Pvakry42jERTnv4gqP4gKrIjHj10CBXaCkpUL7YhJgIZ5KqtbRQzA66ca1YPM9PCG+RdCI809OTpJQgoaIXcllLxaLVCXJc7gAE896+jFHctLOzs7Ubrc1n8/T+xU9PGBc/Xs8c6fTuRAWODfAd2MGwvvhtR/E3l4KTXMizwuFOCem3zBsbPnvHIIjTsbAt+Ej9CCjEsMOzmWumF94A7IUILBarZa2+kOOMEi+rwYhrsvQyclJ+psaCepPnGD2jJOnPiP5CJICzSDnf+iMgjf3kjnU4N4zQj5/cI9Xpep6/sjU+ks6pHOl9gq6nLGSlnlth/F4Jt+8Jdarc9zz7XhFPAwKwgYdeB8Kk3gm+tFoNNKLT52wjWTq6elplpAiDHB04DF5NKqgElcq0IR7Kh/zWOHphmCxWKTwhjQr6InMCpAdo4tsRE/pc8Oz0LxE2hEK83V4eJgUDznCMJFm9LCBd45Iyz1AmUsMoKckYz+RBYwRBVe9Xq9SvuwoL6Iyf34f34hkrttulVHggVyg3ZN5nby0+h2M8/k8ef9ILLnnI2/vwopwQlR5sQ3XcMvugo/3RTA8XeXeynPUnn71mB1hx2DFzIyPGdwFWQwWkM1ms5RK3dzcTBwA6dr5fK7BYJA2GnEii7HzbIHDfed8cnOY82CeeoxZAOaXUMp5iX6/r1arlUItxocSYAq8QIAYE1KlMVUHbKePp6enyXD6AiSvFFwsFpU3aXvmgT0QPUxEjug3aJNr5+opZrNZ5Z0mnrVgHjHWjKs7Bp41Jys3qVW4VUbBCcGcIvqxGJ86AeYCSUOIWMgEpCYHzkShyI4QPITxOB7PgDDA8iMQIAT4A1cEDAJhB/d1g8JzuqLSgMExhNra2qpsNkOWg3dgvPHGGzo+Pq7A8slkUoHQDk1jyOQxuY+998/rPvy7sVQ6hoFcHwSCYsxm5/sMcK35/HyHY2ormBu+z1oUrj+dTlPYhIGO4ykpZTWYX4xoPIYCM6eQ0KCITqeTUCAhTgzDvMVxINykkAq05EbKOQoPTXCiMU15k3ZrjEIkZCLEQqml6toEvpOrb3AjwWABzabTqQ4PDxOcdtgcDQKfkzuu1WpJWL3mAcYcTwckRDi8NmKxWKRNPEhJYhzcqGEUut2PVPHFAAAgAElEQVRugqR4byDvaDRKz+/KEavbTk9PdXR0pH6/nyoDMWZStcITT43QuVHwsee54EjoNwbeQww3Ygi4IxH6QK7e1zzg2Q8ODjSZTNJ84L35u9frJQL5+Pg4jasXSTG3jLMjQi+kc86l0+mknYwgNjc2NtL9uYekFOI4Z9TpdFJ2CHn0UDLW2uCwZrOZ7ty5k95nwfmMW61WS0Sw//AcGOCbtFthFPB6OStK8wm9LM3i9fpMNrlcdsaZzWba29urQFe8u6d5/B5uEBBQP8+NCnn20WiU7g8Zxj6AZDf6/X5i3TnXPS5GCmFhXwffjJPzPduBR8SAbWxsqNvt6uTkJJGZ8B0eliFgLnQIF4aGezpPg3FZRcayixVzwTw5r4JnXFtbSwpdr59vZELhDwYB4d/Y2KjA6fF4rGfPniWD7ISsGwGe2XP8GAs3EJTPE/7t7e0l47O5uZn2VPD6AJ4ZI8j12CM0hmDu/RlzPz4cDpNhYh1ONNqRX3IDzNhct90Ko0DLpaxieapbeOni1u3xPIfXLPjhhTIO57gmXi0iFgQdiOh7HXisScoRj0+YMR6P9fjx44pSU4FIVoIWi4Kc/0AgKMN1sg6vTNxM3vvk5ETj8Vjr6+va3d1NSt9sNtNO2IwRQuWpLOByDFW8noL+uvHwazhCwCjAEfhYnZ2d6eDgIBmIer1eeUuYb1uPUWKzVTegGDfGijH0fS08148s8QzSsoyZ8aRh0KfTadrZm/mBm8AIUl1K36MjcgTmSAv0RdqXjX5YsEV/nGOAE3Jn4U7yuu1WGQWH6a7okDySLkyaN1cKBoLYiq3RgOtcy40C8bR0sXDIjRSTCcKp1Wo6Pj7W0dFRqnHHix0fH+vZs2cVr4VC1mo17e3tVTIQfi8XEoSZY5Chfg7fZ8WgtNzeDU/3wQcfqN/vJwjMGOGR8HKQqG44c5WirqD0GaV3ZOGGAA/nIUStVquUALOy0ovGML6gMJasowi+IMkrHRlfz0J4VoGGXIF2QK+gRAhsT7tSy0Lsf3Z2llKLhBfIGxwF8+YtEo+MDVkYwo3BYJDqGnBsLr/0269503YrjII/iMdUtBhaRGWNSEI6HxAUlhiPpbhuWKSLxUgeKnDNGDdz3Xq9rqOjo7RCEo+3tramx48fpy3CeE6MVb1er2y2wX0RXuJO6SJDz/h4RgBPFWNkDCpeD4j94YcfVl4nVqst94qkjsHLqyM/4M/kjTH3NKb/doMOOddoNCqEIZug7u3tpWcGLbByEqTG/cnQOGpx5Ype040CzzOZTCqIwB1FfAbmh2eVlArcCDvgN0AqZVkmgpv+O3fkWRk+cz6K9TJwEzyHh3HcyxHuH1qkkDMGkZSKBCLneBwuVYuYHIJ5LYJ0sYrS4bIfh7jxOJuY7fT0NL0AtCiKtOHLhx9+WFFmGrl/r5jEG9EfZ+A9J+1xo2+75kUqHnJgCPz6XiE3GAxUFEXajhwUFLkCb7H6kTAhhmHOlLuycg2vX3DPzJwdHBzo7OwsFQsB1wkjnNuQqjUCjCGGQlq+9xLC1WXNDQjGlBDQ6068qhG+x9N/jAm8R6/XS8Sk981TyN58frieX5el8a1WS+PxOJXGOzGO7NCnP9TZh+i9Y1ztNfvS6tdwuScnFCEEcSV1Jef/aAwiE+0EFwaBlY0I9P7+fhJoGs8FrK/VainU4H7xfPrqcTkwG3beYSm1BmW53CEY7+KezX8YG8aODAdQmbGPW3v5uDs56mjO58WZcB8Ph/wYrmazmV40zJy5UUHYffGR39PHMc63e2KXAYxvzAKQrSLsow++jJ8+eP8Wi/P6ksFgkDgAT8UWRXGhotWv4+PP+a7w/qwQj/79VeHeddutMQr+MLF57O+WD+UsiuJCkVLcFMU9XAwXvA9uDLi2GwP3PGzqwcTAetNHZ5rpL9VwLL3mvng1cuXuqX2vCI/DURY3bk7YSUr3429puemtx6PAXld+BNw9T2zu1SIR6RWTuXlzT4miQMxhRPCKbtQgCL2ykNStox3mn9cLEhaVZZlSsiAVeAFkA7afhhGInAJj4IbLiczRaFQZb0I7R7KeLoW3YPxyjnI2m6W6Ewq1KJLDcebk+7rtVhiFHMRxCyktOQJpGfN7vORW3726s+bUOuS4CO9HNAh8F2EGIkrnZc3Hx8ep5oG+IwDuhagZgEzzlCGVhmRAyDT4ezA9tYaH5pgz7DwnyASWH4FbWzvfOs69ak7pXbndqOZSXR4b8z/f8XN8/YAbBSC2KwG8i79fw4u6MI5UcG5ublZCOV/HgmPxRU6e/WAMidtJn/q4NJvNlH7EeHU6Hd29e1fHx8eVBVCEFzwTz+1pSQybpArHsCpj4PJK+OmrNh0F3bQ2wdutMAr+AKseBqHDE6Cguco4XzjFNV3Jo2BLuuDRokFwAgphY90EGQdvfm9XRvYJqNVqafMOSYkAHY/HFajqNf5ciwo5RzzuSZ1Aw6DQqA5kPQWQNNYg4EU9THNjHONen7+I6hh/ngES0usxqLyM882zozBwI4ynpx75vq+g9FCSccNA5shmzmMOQW/b29v6/Oc/r3a7rZOTE33nO9+RJL333nu6d++ejo6O9Ad/8Ad6/PhxGhNSvvAYjIGHdJJSv0C7TjKDmOirZ9WQF99qgPF+mfayezQ+1fmLYCRpWJbl54ui2JD0S5Lek/RI0k+UZfnRFdeRpAveKAqce1sgt7SEo8AxzqUxsMDCVfeP8Jdr4z3wVEDT4+PjCmRzBaMx8aSRvI6dYiOvgUBh+J6jHy+6QVmcL/Fdnjy15cf5PkjH6wXY1TmSvm4wvUCH+zgHwmf+HTaeoa8c9/CC/sR+OhLCuKC0xNUYWfrDc0nLBVAehoEkXNYwoOxT2W63tbOzo09/+tOq1WoaDAba3NxMKIxqw+FwqOFwqL29PdVq52XkT58+rRDbjL+nJyGb6QNbtkV+wsc613itAWFINHa0mxCOL4sU5mVZfioc+yuSvlGW5Z8qiuJndP7CmK9edhEnUnIGwaE+cNqVO5JPbiwc/jliiJaX+3gDIbjRwiAcHR2lOM5z7m4UgIu88BOBIL8uVXcHBj0wuR46+SYbhA2gAN8tyFdUeqPIhr45KeVkLASmk5PAbhdW7xueKsa/znfQR/d8i8UieVNpCbmB+CgWffVsAt/xmpPxeFxJH8It8Vz0IxbE4aG73a7eeeedNC6LxULPnj3TeDxO5DGE7tbWlhqNho6OjlJmgjl66623tL+/X4nzMULSuSLjJMhKQLJGxOnj6XLMMRAS/YlzcFtSkn9G0k8+//vvS/p9XWEUiLnwhrnGg1G1Fl9m4sjBhS9e4zJUQHPh91QhCkkqkTLhaMlRvM3NzaTAVC0iKAhiZPUd1vtOywiOL16CbAJ655hzlj5Tq8F3o7B4WMazY0RiXUJUKGlZWYpRB125UvMZhhWPj3HjeZ2P8DHmPK9EBJ35WIKo3DiicL71e622TO3ev39fu7u7+t3f/d3KnDcajZT663Q62t3dVa12nmV6/Pix1tfX9fbbb6vT6ejw8FAPHz7U2tqa3njjDT179kySKtwGRCm8jiNMCOIoTz7eztEwT2QwkBs3Bt+LlGS9KIpvSZpK+i/Lsvy7kt6U9IEklWV5XBTFWlEU7bIsK/iwsPc+3Lt3T8fHx5X4kcZkO/QENvI33jxHlrknjjG4x+qxAXv9s1qtVnmph7830PvnW4r74iUPj/CinloDltI/lMJX9eE9eWaU0Zdl+/JjFAbCDkad15dj+LxsNqZ9eS6PexkPP+7X8vHluI8tx6OxjHwAf3sa0wlJ0oXScnEWGQUyDoRkEMS+/LrRaOjtt99WvV7XgwcPNJ1O0+5LcAnvvfdeQgK8VWpzczMtRCN8Ojw8TCtwCQ0YU9BWq9VK/WLuPNzEeDk5HtOuPieghel0mu7L8RdtL2sUfrgsywdFUbwj6VeLoviGLm7mWki6oHWlvffhC1/4QilVBYFYmuPSxU1DOe6ZCT6P1tUzDv6/f+4NpfPY2TfjiItS8KwbGxsp5UVW4fj4+HwgnisDRsMzBl6Y4zE4guMrKLnW83FMvAfPjpI4B+I7OJXl+foPypkZQ57BxwLP7sVG7skccXm61nP7jhI8LMLggcDW1tZS+pGfoijSDkaERz52oBvmgxg+Lll3Ypr7r6+v65133tHR0ZH29va0WCx0//79FMbQBoNBqikhrHn8+LEePXqkXq+nb3zjG1pbW0s1K3fv3tXm5mbqX6/XS5vA4hhQYo5hOLwC8rLmc4SxY4cor3GItSHXaS9lFMqyfPD897eLovgVSV/SObn4KUmHRVFsSpqWZZkPlDLNBSh6pFV8AwNwnWINvp9LodFQRI9NJaVXmPmCJwSONJWTR1EwpOUinOPj45XxI8w/CMmNAxkM95CMmafrHHG5x4WfwMh4XpzvYmCddOQ+zqugtAgjRjOy4a68XM/XqTAvXoTDOdyj0Tjfq2IymSQj4dmGyEUcHCzfVMi4+bV6vZ5ef/11ffjhhzo5OVG329Xm5qaOjo60ubmZkBe1BhDclK03m0298847WiyWL9RhhSfEIQjYC6QYS54D58O4cB9HZF6fskqmMfYYhe9JSrIoim1Ja2VZPimK4jVJf1LSz0j6FUlf0Tnh+BWdv0HqyhYVPx73FI3/5m83Ci7MEQE4yXhVHxAiPBNeLIYKEcnQEAKWKZ+cnCQCin5KVUUE8sf6Cq4Pj0LWwu8VvTaxMZ6J7/H2IwwNn5OFoOw5t9EM4+cGIWZE3HjwHY9vnWPwDWVJgfIODMYGhfeUJd8hA8CcAKEhTzHCGINa7TxDtbu7q0ePHqksS+3u7mqxWOijjz7S3bt39eUvf1nb29v6zd/8zfQeDHau6na7qR+tVkuPHj1Ki7cY+263q+3tbW1vb1dWtbL+BtnE2LixgBtwbg1Fj0be5dZJ5FUh8XXbyyCFNyR9rSiKns45hb9bluWvFUXxdUm/VBTFQ0n/QtJPXHUhh+mumI4acp+5UvhArUIYfr/L+hJ3DsKLYRSkZf0ASKHb7er+/ftaLBY6Pj7WwcFBmnhQAQy+M/9uSCCaIOoi6erFUCife3KU1FN0cXEU5+GNuCa1C27wiIN5VhAMBgEv58vI+Z6n+Xz8I6Jz9IDSQSI/ffo0bbfG9SaTSVo8xcIoR0bMladTQZIY3p2dHe3v76vRaGh7e1tHR0cpxNvd3dWnPvUptVot/eAP/mDaWJXsxv7+vo6OjiQpZZZ4NsIfX+vQ6XQSgkJWPDyZTqdpA5Vo1HOZBA9/GGt/TsY0J9fXbcXLFjp8HO0LX/hC+Qu/8AuSqukuBC2SdvwfH7Rer6cYGU8Vz8Fq59pisai8ogvBn81mSTjxtlSlvffee5VXynmr1WoajUb64IMP9Hu/93sJJUTeBA7C18bzub9dGTTgLDWpRp4ZwQdSSksegKo/r3j0frAzcnynpCMANqphYxjIUlCHCy/GyxXWEQQNhOJFTbwsZTAY6MGDB+l1ejE1imGQlLzx5uZmBVnUasvt8zqdjnZ2dvStb31Lw+Ew9WU+n2t7eztxQZ///Od1586dJBe12jJT0ev1NJ/P1e/3tbu7q/l8rkePHunZs2d6991307NATrJ/BvUMpEQxxP1+P6FRZJawxI0ADoUxi3JLEZSTu26Um83mb5Vl+aWs8Fu7FRWN0kW+wAXRP6fl/s4RYJKyxiEXWjj09fOompOU+ATp/B0BsPjSMrYFXm9sbKjT6ej7vu/71G639c1vflMPHz6snO9VbB5W4DnxKrD6kIooP57HOQVieiA0hpBMjFdUMra1Wq2yXTpQnv6h9Gxrjhd0dMD149wxB/z2ehGO0QeHwCjx22+/radPn6aNRmjsgDQYDDQajRIpiUHEAPs4sHuR8zbM8dbWlt5880197nOfSwhosVhcqGtwXqlWq6XNbkhf9nq99BkZCtZcHB4eSlIldEO+HEGAjAiTPJXu/0fey5HRqhD6qnZrjEIO/vv/Ma7131H4GJBV/IEbEb9mhF1uSLxmnntubGwkuMqegFQ5FkWh9957T5K0t7en3/7t3065+ZOTk+QNnej01F273U5FT6wTcKPhOXvCAY+bMTKEQowfrHxZlglVgYgwBhhnf/kNRgoF870JaU6oxVx5jgV34cbwOAQm3qbffBd0QD88Pctz55YPu+GJY4khe/fddytcir9MmOuDyEBLd+7cSesujo+P9dprr6X7lmWZNt1hYxhPeYIqMGggU+djYlqcPtA8sxKd4SrEfFm7NUYhGgKUhM/cEOSMQfwu53rLGQgmPxqFGHdzHmx9UZzvuwj03dvbS7sEIZgnJyfq9/va2dnRu+++q8PDwxSXMrF4osVikQgrNvuAKIMci7UHMQxCid3YEA5BvjlEBWayrfhoNFJZltrZ2VGj0ajUWxB6SKrsFJUjIn2eIvKKQh6zQB43Oy/gBsZrM6RqPQXj5bULXGOxWFRSsaAOiqi63W5K30bPi8fGq1MYxj3IdvDeDbiRfr+vyWSip0+famtrS0VR6ODgQGVZpu34uC5IA5TixLk3NwxRbqOM38QY0G6FUch5aam6Tt1bDknE/13ZnTHnfpF4i8jCc+4IP8fdo0FAxXdN8op4FP3+/fsqy1Lvv/9+RZEQci8HJqbk2ii7Zxi80tCr+6TqGhKH2/ztBU7cl1z30dFRgt/urTEInr93Y+Bz6QYBo5DjERg//5/rkTFAwdfX13V4eJhKeemfhwQgIEnpNXJecUkV6MbGhu7fv6/Hjx+ne66trenevXuVV7FRR+HyEYlR7gf/0Gg0koGAeOz3+9rb29OTJ0/S87FJCiiE+/m4+3qQVTIeEVjOed603QqjEJunuKQlaogowQfAycH4eTzH/4+Ne0DG4SU8roYAi0t0vVwXxhz4OBqN9OGHH6b8tLSscmRlJPfDCMBcu9ITgrhhQVF95yIU2zkBN2w+PizU4loQYCgIZCbHo6J7psGLzqSLnitXF8I16Bse0FEGGYmTk5PK87lXZX5BAsPhMC137nQ6lTUWVCaiwO12W1tbW2levGLWnzGmxklVg+zIoKCwZVnq6OgoPQekLxwDY+rrT5DBWCgWm8tzDBNi+PaHMnyQqqlGT7lJ1bcKuUADqZ3cigaD7/t9vHQ0Go9YFQbjv1gs0o5JDktRUngHWHCO85bpJ0+eJHIJyOiGT6qmkzAWub0D8eDj8TgVVblSeGwKYQk8pRBIWr6ZeT6fpy3PJpNJUiqyFbk1Hp7hcGhPH10YPeaNaTXmMZKQPA9jgrEkQ+Dz5uiQOWDXI8ID6Vzhnzx5ou3t7WT4RqNRIlnJqHhzVOi8Cf1mhSnyBxKjlPk73/lOWq8DF4HcQEx7mOcIMlY3uiHwY1Hxc8eu226FUXCoKS3hr9fB0/w8vDgT5Gsg4krK3D3dI0VewT0hNQNsE4YFh+Tb2NjQa6+9pmfPnqV4sl4/L2fmTdMPHjxIuXCu6xWJ3DvG1rDS0nLxCxwAOz7F8fBqSxpIAC/FQim8p6MheBJHXfENRT4fcV78mbxv0fjmwoocugPel2WZFG6xOC9Uol8YN+YKhfSqUVAcWYzNzc0KL4TXx8H4HPiPN4w8GQYUGeXv9Xrq9/tJPqP8MlfMZ5RL3znLx9YJ74h6XzRsoN0KoyAtB0hSRfh8ya1DROliSbSjCWeJc3xFLnSI5b7upVgI5ZPlaam7d++mZcdA/LOzs7T5xtOnTyubgtBiSaoL4nQ6Tagkbljq+zBIqlzb03HOpTAuTmBxbuRvKFdmrLzsln7y20Mrb5cx39EgRC8XOSDnUwjJPP5nJSjFRJCm/X5fZVmm5eqcQ+PNT+yP4KGqI9M4Pi6TzAtbxzWbTW1tbaWdp3mNHG/xjvMkLbfuIxPC8/N/bsy8RTL2OiT7qnYrjMJisbgAT/F4vkKQifByVRqQ1ImXGG547pbjNM5xsg7hYOstvAB9Pjw81L1799J5Ozs7SRkXi4X29vb04Ycf6tGjRwny+zW8IZDASUkX4lrPghRFkYip+I4Gf0YEz7eCI93pqMjHnbdVwTFEpfTUX65AKV4TwwBayAloZNSlizwQcy8pKZyPEa8DZFHUxsaGer1eShNT18D5s9ksjYekSuYih3Tcs+OQvJScIjayUcPhUNvb2wnR+aI3UtPwUhh+XiLDNZFDH5tIyr4od7Cq3RqjQP26dLFai63KarVaZYNRJsg3NvVSYK4FnLvMMESDIi3hunMW0rnwUDAzGAzUaDS0t7ene/fuJcg6Ho/1+7//+/roo/NNpxBmwhry7mQBvA4Cz1QU5zUQHgZxLhyHVC2oQnlrtVpi4AeDQUp5+VoNRyS+XTjCC1fhBTQoS0Rr0kUlXjXX3py0dIF3GO2K50vLuRcFV/P5PI0FzD57Fjx9+jSFHbVaLSEJablhy+PHj/XOO+9U+krf/LmYQ38TNsjq9PQ0FXix8KzVaml7ezuVvrvSQzDCMZ2enqrX66X7IdeXGYTYLvvsOu3WGAV/vRbHWPsuqUKswd77IiKsqU8kk0ghixsKRw8oUoyVPaWFV6B8FmHgtWu/9Vu/pS9+8Yt6/fXXNRgMdHR0pIcPHyavhffhfI/lEYocAYnS0Ff6iLEAhgI/QVBFUaSx4v2ZXtgkqfLmbGJwz1j4PHAth7SMiRPDDnGjsucQwqoQIodi/IW9PCfzA0nKmFEo1Ov11O12UxhBxgdHwTMOh0MNBgN99rOfTfdHGR2deT9BlvP5+e7coBDIWXZY6na7lRWWRVGkNRUe/sBTYfRpZDYiaesGNKKEl0EOt8ooeMEJVWtuTb3izw2DW3AmkQFxJXJDIFUZ84gcIKU4zwkuNxDf+c531Ov1Up764OBAe3t7evz4caW81Vf9sTYfCO7EFsy5x+fOAzi8zmUsPATyvkPUuVEACWEYKBUmxIn7T/K3GwX65IaAMYrNQwvOuYxoxDBL50Tp8fFxen5Yf0dRDvupNgTyRzLW39uAwVxfX9dHH32ke/fuVYhal6NVWSyME0iF4ib2OeBFvrVaLW0s417fDRTILRrJnFFdpfwvE0rcGqPAi1VYm+5wnYYgQjR5c9aX5goExxCJGzcUHkPGIh1HDC4MT5480XQ61c7OjsbjsZ48eZImvdVqpVenE9aQ5yddiPdyzkFa7imAEgPv8TAgo1jsApyGTacfKAHnstjK4St98Pp7nhWD7OjKxxnD4SSmjzPXc0WIxiMiDb4Df3N0dFRZbcpcU6Lt48j8sKen8wAgBeaC5dbtdlsPHjzQbDbT/fv3k5OJRs/DKE9fHx4eqlZblmSzopNVnZIqrwmM6JQ54jlimJZzaPwd5Z3/VxG9l7VbYRQkpRe0UogCS+zEnHt2aVn1hoJI1Q1K4sB6LbzHq9H6r4qJ3dtISrUAz54905MnTyoLkur1uvb29lI2ggYHQv2B9x/4680NA+lJjIFzCj4mhGIIP3338fRVnV4CDXLxkAfj6WsEaC6Yni2g5YQyjm9OqD0UnEwmaSx9nh3leYYGZadKc2NjI8XxkiqKjNGEbGw2m4mY3N7eVq/XSytBGTcnsSWlXaFAIP7y28Viof39fUlKaxvgbqI8OVkOWnRewR2Vj7uTwB9HuxVGgRoAJ9Ug4BjECJ3wtpCL7uHxCEy+e6/IbsfUk6MAjnGup6WAcx6y4KExbgipLwt2lp5no4+QmlL1dWi+5x8r/PyVcY4m2E/BvQrPH9cDeAqWfvE33AIErddKxPAlErQ0RwI5FEBbBclpoB767JkKMgh8hoEgFPNsS3xbk7+UBeUizXl2dqbj4+NEJLsh5H++A9eC0WK/USeNUXD4AohiV3T6jeF3cpyxcYMKYok7ZfHZi7aX2Xnp85J+zQ7dkfSzkl6T9FOSYA6/WpblP77sWjDqPJArBqwuG1EwyHwmqcLmOmvrkItjGBrpYiwe41kXMgSnKJbVjY5K6vV62svPd+R1Ty0tY0ael1V+TmR5AZKkBOkxfggVRorx45niZil+TdKXIDLnKlgQtL+/n66DgrTb7Uuhfs7b51KkfPeyDIU3FId0IuPuS8EZI+pEHPGwCzPHnHdAWb2/FKf5TuFxExnmzg0pffX70pw0XCwWibSNoaITzYQzGGjGLSp7nBOfi+860ViW5fs634tRxfmdH0j6mqR/X9LPlGX5ize9pguKCxOxMqkaqbpwBsTgKc1oJIC3DnGjEYiDCdlGxoDGG34wSoPBQIPBIMFI+u9/89v7CH8CYvCVdzwbNQbubXhenom/Sde6gaCxLgEDQ58QSO6N9wQFcU9CHpTDGXA3vB6aOaLw8b3KIETkgYHGGPNmb+ZKUmUfCF9W3e/3kxGF9MW5QPg6+vC1G4RlhG058tRjfncQqwwfCHc4HCZyE8Przw/P49dxx+JktM9DLiT+XnEKPyrpSVmW33oRy+Qex6GjDyq1Af4/1p6YmOZeYdX9GEAGXqoOHteNVpwGcnn69Gnabi2y3PQL5XbPgCfmnsTEXokIPAWR4H2cY0BJvRrUl10DQaXzmBYk4+eWZZl2nnbvS4bH+YTIF+TGFuMQicbYLlMyF3TWL1Al6hvAgGZ8TwUMbKfTSSQr92OOarXzTWaYC/rCtZlzxsOVPnI6zJ87LL9PNA4c41lAYc4pcX0nxkGZMYVN2MGYO3p7kXDi4zIKPynpf7D//3pRFD8n6dcl/aWyLA/yX1u2VVbVH8wNg8N76SJUpWiEzxgoJhohisjBobh/12NDCoJIeWGxyQAwocT+kEQYIY9RPTXlrD/39v0PvCbAlReDwD1QIMaJWHlra0sffPBBFvbG2HQymaQ1HJ558B+MzyrP78bA0ULOGERZwLBISiiBrdI9i+NjwPiur68nUs/Xl3Ce9yOGmyi0hwIeylHbwdy5vLhS0zfukzMM0vINVxgGR7OUQ4MkvJCM8YlZMf7OGdfrtpUvsCoAACAASURBVJc2CkVRNCT9uKQ/+vzQz0v6q5Jqkv62pL8h6S9kvpdeBsNmE/ZZVmiZIF+qygC5R88VnVzl4SQla+1wzeNu1hecnJxUSmxBAY5YPGSRljEvfcXAYCTIZbs39jDIF94glJwXhYl++FufHFYvFsuNXTAEvpKQvymO8sIkDx2u8k4+n1eN/arGvLMkGTnxikIMpDsJsgY0jqOoFKFBPHqohQNwQ0mcD1GIoeQeGPDL4v9VvArKHrNtjnijY5OWi9hwZu7gYl3DTcb940AK/5akf16W5YfPb/4BHxRF8XckZbmF0l4Gc+/evdJztzGO8sEFTkM+EVs55MN4xLoEt6bO6vKZdPGFNG5UDg8P00pJGspN+IBClmWZWO9otGJ1GsbNPTjK7MQhsaZDaIhHJyJ5HgTa1zlQ9lurLfcPZFs23wOi0+mkbcOiEfBQL5fN8e+4sYixcTQWHqL5dwkJvNIPoxCRCs/CuHsYhnGk1gGFhu13ufOQDahPH5l/UAPHPfSISpkjXDnO/eDNQEEuLz5Ofj0/5vLLs9/UCEsfj1GohA5FUXy+LMv3i6KoSfrzkn73OhdhcGLB0qoGWnCDgLBHYhGh4D54Nve0rpx+nD4Nh0MtFouU8gNRxPSZP8vz8aiQoDQMAMc9G4BCwXLHRTiONMbjcSLMPD4mVeaZnHq9rrfeekuHh4ep3BfDwjVpjcb5G5gdlcRNPyKx6Mruz5aD0JGsdGMcG+HP2dlZSsnC1XjIg/FwTxp5GJ4zprrdGHtaGyLY+Ruu74SfP7+jh1Uy4uPgoSA7Q2FUros84jWdm7qpYXjZV9F3JP0JST9th/9aURQ/Kmku6euS/uJV1+Hhc6WcHrPH4iNKoz2U4DsM9lVEi3u/mF5DgPxtTvV6Xb1eLy2GgtBDKFBEIGFklvEmwEQXJN8ijeOMi5dpOwHJJitwDhROwb7XarUK19FqtSrb4ONxeTbPXLBHI9f2sZXy+2q64hDyRC7BnyPm4GPmgs9IN0bDAlpgftgPAYIRstTrOvzahGxOznqtgqOb+LzMbwwj+O0IJRpdNyyMN3rgfI5fzzMjHPP58GMRLXzXOIWyLEc6r0/wY1e+/GVVy3kWt+BSFUk4v+B7KfIdjq1KJ0lLwfbBJKZzg+DxorSE4TDgGCVgvF87Ph/e31dMQp4xiR5isOy23W4nIR+NRpXtxSI6kZYpNQpwBoOB+v2++v2+arXzNyezTNpDkXq9rp2dnZTfdzTh94hcBsruAplrjt5iGOfX9tAA6O97TvKMXgzEM6Do7IHoCt7v91MYQOWhv4LOZQYjfpmX9oraVQqIUfF++PkYGOT77OwsbQDjLYc6ffyjMfhehQ8fS8Mj5lpuoBEccv0oVC4tCISMJFiMyVxp2eCEajoUE4vPBPb7/cQME1LgbX0hF0qOQZCWRJLDRKm6/Jnn7na7qcaAewHt447PFBthaEAPg8FADx8+VLPZ1L1799JGIM6RkDtnpZ+Tue7dYjgQQzRnyLlunFP/28+NOXYITvgVltl7NaujHWmp3F7oJCmVNGO8IwLx3H9c/4KhcDlBVni+VaRqNG4RYcbwEJmL6y+ijuR4ixxauEm7FUYhWrSrHiLCV/YUJCXnbVXKzL2RDzoTxKvbfecnj+URSOCe1x74G5yYRA8T2LMgphw9ZHBew5c/z2bn+z961aIbPVdIrkU1IAaFzT3u3r2rZrOZ0rwoVrPZTGEQ14uhHYaN+9L8/m50eUb/LIYWjhS5px8jVPBFRb7YyfvhpB/7FDgvIKkyt7nUHv2KxgEOgJ2U3KjFEDQ+r8+vy0kkwN25eNEaxtGVPYe24DKcV7tuuzVGgYe4Th7bG9CLdywApT2mvW4fGDivtXe2GZILIXOewe+zsbGh2WyWlI3PQB/umSG7PGQhu+D7RZAZqNVq6XVnMQsBgpGW6VQ8GX3hmuxVyCviiuL8PRadTkebm5vJKLjBjuEd40bDMDKOMd517oa5XuUAnMB03sEzCIz7YrFIyMkRi7RcAo/x9PDD98ZgHuF6HJL7b0cmvDvCNwHKIaOcPHvK0+efZ+aZILdduQmXaW54uI6PTZyHq9r1z/wutMhER6u7qkGQobAx5ooDApEVDUa9Xr9QVeYMvfeTe7hF9+8tFosUz06nUx0fH1fKoP1a0kV4jbIDM+EP3MuVZZlKsFutljY2NiqLdfwdi6y34P5evEUMThgC5+DLu3MwNDcvjG3kgnLfz13Pv8+PoziQmJPPnoHwazE3ZC84x+tM5vO5jo6OEmnsxhnD7w7GN0OB14npZjekXvjF83jIgBGgRsHHxVez+jjE4jOaGwEPSy/LfuTarUAK0sUXv8RMghcRSUtSy4/hLYDZOWGR8rv6wE/Etw65Z8Kr5BhpFO/09FSdTkf1+vmbl/z19f5dV048rKe+HMqzLZrvthSFgviYLcAcgkZPQZjlr7XHiEEwMj7u/RwFINhuuD07xPc8K5QzAnEOnLDjHM9GoOCgAi8d96XeICkPxZgH5no8HideCBRH0ZOXR3tZNfda9UJhn1snU7l/rnlI6mSkZ5y4nl83rq2J3BvPm1tlfFm7FUbB0YGHEB6T+9/+PWk5WLwopNFoXNjSivMwMD6AeEWUA2uMR3K47ykrrLAjCSaLrcPwMHAITKALc7TkvqCl3+8nHgKvg2HwV4tNp9O08s4FiufD0PAdxsg3LNnZ2dHW1lZCOB7n+nhzTf8s5wU93IjzEDkkJxSZb86NcJkx8ObP6pWHUnW/CJ4XeSNDgXH2Je6egfDMgHNMEXF62TV7ZpCydF7G5RnU5s6BEMbHwcctkrq+1sLDs1Xrfy5rt8IoSEtI7uwpg5gzCLExSWyx7duTu0d3D+ZCzCQgoFhjXzZLWa2jGibftzSj0MlDGQQbT+BZCSYeqFuWZUIITCzPhdX3/RoYGwg4BBnBIAvBczYaDXW73cr6iPX1db3xxhtpaTXe6rK438fTvbmHCpEAjNDZW+QPIoeB0Wi328m7uzNBjjAgXsMRSVIvbAKmw0cx5l42HTM0XjTHeGEgvKaD62OACAkdZXDMZYsfxolxRB88TeohmrQMeyOfc912K4wClo5BjWjB2WkfcJTKi2TYSMNr+d2Su3HBIzjMjmlD7utlwsSaMNDT6VTPnj1L27BxbTw+z4PhcFbdd1JiErk+aUQMxWQySXsqUlzENRB0PqO/vV4vwW1HQ4wLz7qxsVEpVlqlsDlh83g5xvWxxWs7CrmO4HIe5CjEIeiJAq3j4+NUxu2e1/vpxk9a7t/BOZ6yxNBAALshcCWu1ZbvwIg7aYEKQTAuV67wUnUjnOgUkVv/jhvZaDRu2m6FUZCWMaELlcMhqZruQlGcxOEc31l31fUif+FC49/zunga9/et3vHSOSgZY2sE2CeU6/p9HOG4ofMKOiAx1/a9BBwJeHWjr+NHgNirwvkWj2E9G7AqdOBvnsUV3s/x83KkL/PshJ23siyTovO/zyPXZ8zYf8GzOqBKzvW6AObE955gbCAEF4vqSlz32m74vT+u8PA/9NvHy8fBDZifC/8QORh3Ni/aboVRwFOCFqTqSjXOYaA9TnKkIC29JnAvJ4gxXkaZc7AWKO9QHSE7PDxMFYH0nb+BhFw35qs9TsZgUOfgK/PogyMBYmr3Jk70YRio3+CZ2auQ55DOBXRzc1Obm5sJonoYFb06n+OpVqWQfXw9JIvHvLlyR6MQ/3dDSlWrIy5eSIvXdu6E0JL5YJ+JWq2W6jlQen8eD2mcS3ICkubHolwVRZGqWDEMUd455qS2j5c7FPrK8xPm+pjepN0Ko+BECc1he074ItcQv4tieMsRZtJyMmMsTEN48DCHh4dph95Op5NeQ+/3wIhgGDyu9Hv61l/+YhjuxzUdHhPP8pYhabllmxNR3W5Xm5ub6S1FIAUX+Pl8nlKZOZbcjbTDbz67iutx4VxVm5AT3KgAfh03CHhtT915aCUt9yqYTCZJrrgeZLKXM/N8kbXPhSBOXtInzw5FxOWcAYabPrgByN0zZhZoyIwv3Y+y/oeOU2BScznq6GlzzDUtkom8jIPmMNUNig8w14wZEApf+PGJ8+W4/F+WZYKnKIRUjSN9sw5Jlf0BPG7Eu+NhuP/W1pbW19eTAeLNRHjO7e1tbW9vJ6XA0PgY8C5FPl+VKYhjlEMHVzVHC6sQAOf5Od6POC+gNl4ai4JRl4Exdd5AUqWgabFYVLgDQgeXJ+ebQAdc0/dokJaFQ04O5jIHGBO8ewyfkQOumxtzkGlMkb4IQqDdCqOA9+12u+r1ehegUVR8Z9X9f6w9u/RI55Pvr0pzj47nPT09rbC/CCVQ3ldJEn8TLjjC2dvbSzUCfI533t7eTp9BOJFhiOHPnTt31G6300pMah0QLuDw/v5+ZUVfrXbOzPN9XsXutRseniwWC+3u7qrdbicj5GPE/eLGMY4eci16+chN5ISXzxxCu7HwvmEQSDP2+331ej0VRaHJZJLkwBdD0V/+d2MQN8jx/rGxC/NJf5zXgdj1XbujAwLBxDHmeTDsFI7xOSlu+DNHoLPZrFIhe1XK/rrtVhgFUmy+qYnndN0I+OTkQgjicoyDtDQMPkgxfvbPmID5fJ7eAeDGglav13VycqLhcKjRaJSECYHxPRecP+DeXliCELDG4enTp5VQglWZeDrILLIgIKPFYpH4Ae6NIGGsvEDK383p2R9X5gj7r8oUeAgWuQRajk/IZTzcQHDN6CQi2crfvv7BOQCvhqRhHMggLRaL5Ez8GXyfRgy8Gwepuu4gdy/Oof/u+IbDoTY2Ni6cy7w7r4EzexHUdlm7FUYB641iQaR5zIqR4AdBjVWOeBB+S0peMnqlGJ8yuFjn4+PjZP1p7iFYI9FqtVK8iqX37drYCi0Xs/s+gv6ZhxT87z/0l/50u11Np9OURcCgkBb1sfJ0aiQEfYHWqvRhNBY+/quMR84IRCPhMNvDhHh/D7FQ2nq9XlkoRem3b+EmLZehw0eQUcBIMwd4by8K8iI1H3+ay6qvoYiVtR4a8zw0HFEMJ+gThhudieP/cRiIK41CURS/qPMt1x6XZfnF58c2JP2SpPckPZL0E2VZfvT8s/9Q0s9IWkj6j8qy/J+uugcQnio7LD8TxW/gl6dvXJkdKRCPM1CeWnKo6jURktI255CHwDQm2F8nz45H9Xo9KaOvUUAYEBL3UlQ4eoGTk4BOZIE64hoLhH5tbS2l3pxxd2F0ngaU4e82wANHlBCFzL2mVOVf3CA4F+Sf+3X8t98zIgE3DP5ZRHkgJ5QGJ+PZIz7jTU+EEfAJvhmLV3zC64AiY3/cIDiJzJiyaCoiBk9j86yUy/d6vYTqImnuL9ONnE/OkN6kXces/DeS/lQ49lckfaMsy3ck/bKkn3vegc/ofBemf0nSH5P0nxfnuzNd2ubz81edoXwU76CQCKrDMqkaM2G1MRwooVt2BtJRQkz5zGaztLSY72E8UCj2WfB421dWupLH0MZLmKWL5c4IolRNG8KZAF/X19e1sbGh1157TXfu3FGn09GdO3e0sbGR7gvigmzDUHa7XW1sbKRrOcm4SsA8Ho6xaoT4OeI2Rxo6IskhDj+GckT04o3ndTKQRWgeVkZSlT0lUD4qIZ1LcoPuUN4dFcVh0dEQyqLAGJ+44Yoj2rOzs7Q5jstHNA4+Plwjto+dUyjL8p8WRfFuOPxndL43oyT9fUm/r/Odmf+0pK+VZXki6aQoit+U9Mcl/S9X3efg4ECdTqeCFjAGwFrgVExR0ZiknEfCCrtBYYAJTc7OznRwcFCZGDyKtBR2JrMsy/SmZm/ciyWvCJrDU5CKGx8nleirQ0j6zEtOdnZ29M4776hWq2lvby+Nn6TkmaKASsuQxQ1WVDb6E8cyKi/9jLExMDcHZ6NSryLE4jX8+vE7nOfFZqAGLyCK/ee7/t4LMhi8gNe5G5BA3C/D5UmqbiXPeSxWc0fkfef79JdME3tnOKHs47pK6eN8Xbe9KKfwpqQPJKksy+OiKNaKomg/P/7Iznv4/NiVjVeNkxqCEfcMhKfziKlQaOcDVqVmOA7acONSq52/ItzrG5z1JWQAxjuU9+/w3kcPN4grKVMGtkbo66vrnDiTqtWRXvq6WCzU7XZ1586dNBaz2Sz1w2Pzslzu0uwvookcgXt+L8Mldvc4N8cNxPGOx73lyMUYvsQMFOd55on++EKv3DsbmUsyEP49iF8IxihvvNXJeSv/PMdTMa4+JqSRXYYwYI4M6vW6RqNRylyBNJyTcMMSx+dF24uyEvGOhaQyc3zl9Yui+GpRFF8viuLr0rlwANfcS6PAHjq4x3d+ARY+CqnHzdKyIMQtNvsSkAlhEhAizhmNRokPQHhZgAU56msePPbr9XppmzT31AgZAoHXIleOoDUajcpGMuPxWHt7e3r27JkkJX5Bqtbou2fBIDiB6aRdJGPpe87L+rEolDchvC4T4IhycqgslvxyDKPgz49hw+sSNviCODc2LjvcAw/uRiOOD8eiQZCUMm1eeAW35HtgeHgB8otzsmqcV4VY12kvihQe6fw9kodFUWxKmpZleVoUBcdpn5L0v+cuUNp7H4qiKKXzBx8MBsnLEUZ4ZZlnIOxaF64fBytCcRpeI76b0EnF3NugcrGdH0Nx2d1HWtY9oLhs54VwIZx4LJpnBByqs/aCFZMsBJrNZolEjEx35AY8feehAGPhFaW5sY1EYE5Ir4KxORQQ/6cfMZRzMpnxwRjiJHxxHNCfFa2EHNQ1jMfjihfnefw9EiAylNjHM+e9/X/nqHAG3IvvIvfMo6cdGW8nO29igK/TXtQo/Iqkr+iccPyKpH/0/Pj/LOlXi/NXxm1K+mFJf+66Fy3LMhFDeLCIDjwLscoa5o57AQ7KxzHfYYc0nnRupPwdDx43IqDwAmzJzQQuFgvt7+9XDAXLczc2NpIAYfDIWkhKsSfPDlLx58fADYdDHRwc6PDwMIUq8/lc/X6/wnSTbQAlOHl6lYB5OJHjCS4TSgxCDDNyc7XqHK5zHcjM+DhKcl5gOBzq+Pg4jbOkFGqALmJ1IAY2ljnT5xwa4DkojY/cESEOckh4isHiXrPZTKPRKK1h8UZffSyikX6Rdp2U5D+U9GVJu8+RwM9K+puSfqkoioeS/oWkn5Cksix/ryiK/1rSP9f5ex/+cnm+Dfy1G1kILDpk4/PrZ2O2TJ8vCDJKFOHu6elp2tnIJ282myXIFltOGPEgbITK9l7umaWlkMT3DjoR6ZkCIKi/LIbzUGYM2f7+fnr78unpqba3t5PgkLb0t1p7aOLoK6KFmC7kuVZlAjyjcBMYm+MmVhGLziExv/4dV1YMw3w+Tx6fykfGwwu6HI0RfrjSecgSeRlvzg/4NXgWTz07kqvVamkXMVAsm+24YWo0Gml5QAyRX8YwXCf78OMrPvqTK87/W5L+1ot2iJyuv1cBQjGSXDHna32osOdMog+8owTfS6HRaFSMgcfZvsehl8RCErq393oJ4CuIA0Pk/YNhdqPk9+EYwsczYFza7XZCFFtbWyk958JcFMvVea7U/qwOxV3QYwqRllMGP+cypbluW3VvRw5eBxIZfp4Tr7y1tXVh/QrXJ33oC6ziPZFFlz+XLWmZXmSsQQfSklTke6A7mqO5/f199Xq9LELzYippyQ+9zLJp6ZZUNHqLZbmulNHrRKiWa1h/6WKhE0UiWGxXysjyMslS9W0+QFbCDPdOm5ublYwDQuFsP9DWEQ3n+PP6C2fYS9END6z5zs5OWutwdHSkoihSxR59cJjtQu+Zm0jw0XIQ/2UUPiIC+unPHs+JDYPvXpx58PgdRWNVKEZiNjvfPm+xWCQ0xb08lOPajrbi2Lhy8yz+7slYHcu1paWBgJQej8c6PDxMe4OCdlB+n6+c0XjRduuMgqTKG5miRY3pqWgpvfFZ3HuARtUi5/n233gKZ4rJOuBxETb3TPSD78byaoe99BEvBsSnT3gZGmlESqsZl2azqU6no1arpfF4rP39/ZSJ4Dz4EV4a62PkRNllXj4a55yByH22ilPIhRg3Zc39+25QIp/inATz42S2L3jzegRXQjxzLjMRWy4d6SszPbvG+fz4i42azWZaj+EG3LkSCNZcTcpVJG+u3Vqj4BPivEJsq1JhPjAee/H/YDDQcDisrLuPoQPKjjGIhSqENRCUTDgkV3y/A14n9hWBgwGPuWqMgO872W63NRgM0mIv3klB/6bTaeoLBs2JRYe19fpy6zCEyg0BoZUjCppDe5orJ3+vQh3+m79j2JK7Nn/nQhx/DhTHDbd/5mGgz0un00lp6vg9R5GrGkrqqU7kiDGMGSYMAoVTg8EgzYXPj/eT52aOXP4j4rpuu5VGwWN3oHuu+SC4BXVhgWCMS2MhAlFsfkvL+nYngqTlGg0ne3zPwwjliOn9JSWRB0FoMQYe+3Kub7DCd7gfy4Z9RSAC6yv68HKuCPyOad7LOINYzMT3/dyIEuKcXSaol4UmuWviuWM/4Aei53SPzFixmIxqUTw12RyvZsQ5REIvkoh4b2mZBvX7M8fOixASLBaLyktq2DOCaznZy7WiUYtzdJN2K40CD81vh2AMlD94nCyvMvP8O8pRlmVazISHd8LKlzw7aoA38Bw2whcLaPicc1Ba3jXAewUwPtwDOIiANhqNlJGRlnCUDUZ7vd6Fnatns5l6vV7aU4LsBEbDswfuBVcpuQtWLna9DvEY/88hAL/3qmtEBOLzEK/vVYzuSSPbz3GP95lXCFzu4wvYoiJGwxBhPB4d5IAjwjgQ6o3HY41G50k7d4oRFTHfLkNeafmiXM+tNApAdg8bcsIbLaIfZ9BAAe4xfSUdcRsK0m63k/Lz3bg4i/4QwzHZMX3lCMehO+dxHYwA5/FdJ1onk0mlht+9IIrqQgapBrGIwZGqC5cYN8aMtkqR/Ry+7+dHTiF671UcwlUwNyKZXP9iNsFrSvwajuwiMRgVGSdCv50L8uu4sYxyi0f3c3BGvE2cOoSzs7O0LT199uI6zxrRPyeove8v2m6VUXDByxkE6SJCiNba4XmEeHw+Go0SK8ygU6BCCpHPyTr4DxbasySOSPgu92ebtehxUXzy5c6f4DVGo1HlrVAYA/ZrYN8A6hPm83nalg2lxehh+HhOF1InNZ0HyHlwBD0eXxXv5hDHTYU2R3LmmitMLjuVq0R1+XDjiGyQJYr3IbzgGoynGx4a3pzPnPQkXKAsOxpfD1sjSovhaJT/iKKu026VUfCByO2Z7y1H8uQGyCfBd0lmgsguMOC+Qs3f6oSye9xOv/AgRbHcp68sy7Swhk1WJFWYZecx/DX3vsTX00/+SjjGystsZ7NZ2nORNRZuxJxXuAzCO3pww5rLIHhbFX7Ev3P/+/dWHc8RZ1H5XCGdsV+lrLTIB/G3o4VoCJ3t9/J3jsfrxud3fgfFJ9SLssxnXrLtxi/nOF+03Sqj4C23GzMN4faBj1BQqqYi+R7EkfMMKKhXu0nLmoloBDwexdNTgeb8AvcEwvvKRF8FibCzexP1EwhMLLbiuk5SIpg7Ozspo0I/GS8MI+MSYbVURQk57mCVYYicxGW8BOf4Na8yCKuOYcidLHWGP/edHCfA+Tnn48d9ZaWjBEdaMRvgCusIxo9zj6dPn1ayH/SBUINyeshu1wFHPKvG/TrtVhuFXNYhwiFPwXiL8aGkRCL6WgapSuZQa841HHJHphjY7wQVm6UWRZHeJSAtEcJwOEzEI1wHpCELpKTlqjhIRGfDp9OpdnZ2KoU1o9FIr7/+etpZGmF2AwpKiC3G+DHuzwl1RAF44ssyEX5+VPZVRGMk1646z0k++uSGB+UDuvt3nJxj3jzT5PG8E8vIEsbUF945cnRZdZnh+4eHh8kQgPrcSNEXN1K5rEP8+6bt411e9TE2j+dcgaNBiDBX0gXP7pPF4ieu5VDz5OQkbZpCzE5aLy6GoT8sc+aVa+zAzD2YZC+zls4NVKfTSRDfz+Nz7z9voYIYxSCwjFdSIhf5fhRQxswFORJrrlzueeKY5+bLjUJU2stCgKvi3qjoOaIxNpQ4Ph/1AW4cuVauWM5li8/dcMQqUL+/h6wxHe2rZSVdeCExdQq+FsNrTfw+uRaJ+ZsghluLFBaL5cYYzvjTeFBPrXlcx/nOJxA6eDkzSuJVbXgD33LN4aJ0jgj8le0e7vi5zWYzvffQFzwB372smwwGC5o47rUQ0vJ9ltxzbW1Nu7u7Wl9fT+gFIXRP4+nO6IH57SHCZTH4KuVf5dnjuauOX9VWGRXCxygXPDf35Jg/V/wb5cQhRATkWZtcmORjV6st6yDia+mkJQHpig/nNJ/PUygIuvBy6ziOPrYvSjJKt9gogBRyLRfvSkuSx0k6/w6xeowHT05OkiDFNBYTyeaf/M25HvfRMD5soorywhN4+pHUVK/XS8Skv03Z6+zLstTW1pZarVaqs+ClLxx374NwwWd43JkLr/iOe5dcTHwVD+Dnrmo55Mf/q3iEy4jGmO2g3yhn9Oi+lD6iI8hZ51dyfIn/7QiM5t+j3oFt+D3z4JWPcUyOjo70+uuvZ8lPr5C8apxv0m6tUZBUWU4cYZOUJ4r8MwbZQwD/Hh6ezTZ8QwsUidZsNrW1tZU8e1mWFbjJqsSIGihZ9fdaYLwovWbXXjYMhTiDROT8drud1i744hjfpcchr/MhNC9cklYrrhte51IYt/hdRwW5a0dlz3EXfq7fx7/jzWN5rofyMz8+3xE5YNhjPQnn+hx6QRx9cYLR5dONRaw/8RCPa+Gs4Jic44AA5xghbQ7x+LPGsbxJu9VGwVcmrspERGJIqsbDkG2EBy4o+/v7Gg6HyTP42nRHKuyYRMbAvYzHpgimL2FmxyYMDP3lXqzK85V4XoY8mUwSZzCbzbS7u5vuB59x9+5d9Xq9ygpL+uOGbZWSRFifCBiRtgAAIABJREFU894xRZY7J3c8HrsJQnBEclOP5/E/SMEVOsdHYYjd6PM9xoD0JKFKRJ3+fM6HufyC6IbDYSpWkqqODCSA3Pb7fUnVqteXIRMva7fKKETBYMByOd5ckZJ0sRadwh8sMQbAt2p3r48QEFc6b8C9mRgUzo1XrVar7J/Aklx/bySZC0IRiEY2BuVzwhCMjb/xaj6fq9PpaHd3V71eLy2P9uwAHswhNM9KrYKP+1WklH92mQfKKTw/rjh+7irUcRkv4SGCzw+czSrew0MODx8cSXjK1q/llaSxbzHU4ph/n+tJurB/pJf0g0ibzWZa9QrpSIuGmmcDLb0ISpBe/GUw/5mkP/v8lK9L+qmyLI+Kovji8/+fPf/s/yjL8ivX7UycPGLuHNEorU7BxLjOt74CvvvOzf5aOOoK2u12ZVUjAhBfCkusnis4OT4+TjEj3r7b7abl0SxnhpuAA0CJvU4BApGNY9nmnZ2ciqKoVFU2m011u12dnJxU4HVUoFWcQURekVjLhQu55obEr+Ofe4uKtiqUiCRfNGirDAljG8eERpgUV0+WZVnZcTnG/7lyaQyCG2hPVUKmcy9S085rSOdGhK3eo1GNzY3MVUZ+5TWucU7uZTC/Ken7Jb0taU/Sf2yf/bOyLD/1/OcrN+pNaED4m0JHJ3/w7O7J/aWt0rJQimMYBL+vr1TEw9M6nU7aE9E5B9AAEw3sg8dg4n1bMGkpaCi2L3+Gn9ja2koGLgoo1/O3TecEg/5EwYnhRfw8GpZ4zCF/hP+5cCCn1KtChmgkPAzwz+JzO6nn61hiv+hDzshLy6yYOytvGHYnBH2c47WGw6EGg4HW1tbU6/Uq6Nh5DcLQWGeS6+PLtiuNQlmW/1TSQTj2D8uyHJbnI/rruua7HV6kTSaTC0Um3nKZCI8jgcu+KGpvb6+y8IhwYT6fp5SgL35CsTkfT0JMjyGI6SIUncmEHEQQYrqQeodut5veScnmKe7dWq1WClEINfB4nh0hBoYEda+HQuSgvP+d8+yuhKvOo61i6/3z6P1y58V7RiPmIWXM0UtVaM458VhEMlG2CBmcm8AAReXkmRh/vya/2ekbopiQEA7MEXJZnr8CwUMNOJCPu70UU1GcP+m/q+oboH6kKIpvF0XxfxZF8a9d8t3Kex9WNSbO4+LKAwSD4AKWSxOxvRXXduYZtpe17Eyq58BBDAgQ92AdAwuTuA7GCK6CakMvW/ZdnNhFyZc5e2ltUSy3LPcCGASYUmofNx8nxpHPOeeqUCB681WwPn7HvfVlnETOCOTuHwnCVdfBS3s/kQ3/Tg5p+fmMXQxPPZxyZMA1kDsqaDHEvk8IRCOImPO2trbSsndHMGTjPD0Z21UZuuu0lyUa/5qkj8qy/KXn/39b0qfLsnxaFMW/IemXi6J4tyzLQfximXnvQ66hLNJyqWuErt7cEktVwpEtvn0iUXzWL5ycnGhzc1PSki+AdESZ2VsBjxw9mHstPDQpR/iKVUpFv6lVgDOQlLZod9QS33LENRFA5ydc0BlbxpfniPn+nNKtIv9Qkqs4hlzocZVRijxI7rP4fQwDMbobhVy6FYTJ57m54Vz/zDkGxhpZBUHCC8FLxFWPXA8Ogt2bB4Nz1YH8pP4l1y/uH8OVm3IKL2wUiqL4aUn/iqR/m2NlWQ4lDZ///WvF+Zbw70r6v1/0PkAkZ2VdsCNUZJB9J2PpfOAODg7SMYwL8Tr74I3H40QGcn3P6zsUxlg46ejQl1SmI5yyLCve3NfJQ0z5XpEeDlBAxSvkMVKkuBzB8MxRYKISMHaM82UCtEr5I/mYI/BWhRa5z66DIpybYN5jKODQ3lEjz5p7Bn8Ovw/39fHkc+6RI8S9ypb5Go/HqZCNqlk/j2xUs9lUr9dLn5fPyU76ATpFbiKiuQzFXdZeyCgURfHv6Dxs+ONlWU7t+B/ReZZiUhTFD0v6IzpHDy/c3JvF46uaCwETwboGPLBvG+9cAGnEXq9XEQa2z/IiHhcEwgYgI1C+2WymdCNrFuAaxuNxxZDFl5ZKSkaAZ4Z7YM9HFNm/g0CzVXk0FFHgvWgmFx+78EuXlzhfx9Ov+izez68Z7xk/9xoMV37myVFS5B7i9Vb9HcMmHw/PNnBt7ss5IBYcgRPgfOb9oczZi+H8dQSck+MVmPNcaHRVe9GXwfyspK6k//f5zX69LMs/K+lHJf2nRVHUdU5OfqUsy6P/v72vDbU1Pc+6nrVnf5599jn7zMyZMM2QYGJiQ0gFEyoSLKb+sFVSogS0pDB+EIVoMC2U+jeiWJIYAtJCpDVCIi2hxjbaVKmBGqU0iKhNfoQmpmQmmslk5pyzv/faH48/1rrefb3Xvp/nfd91zmSvPVk3bPZa73qf7+e+nuu+n6/euSlItFDEG5qVz+k47xQPHjxoHelOQOCozAamwh4dHTXeYDYAqRtpPeOm8rNRSfXIPNhoPMxFRwXdnMN42blOTk6aFYyklVtbW8018sDl47eixmf9qeIQ6PSSXmUSarIB8SwDnw+lqUM6aKSgpTgU+Kg4qkCMr4+JUAIM/teBQdmH7zfRszo4urN+dWpa/UNMh33o5s2brf7NVY3q8yjVnQN5H5n1MphfKbz7GQCf6Z36AKEdz0tiTk5OwvP3ef/B8fExVlZWsLW1hRdeeAH37t1rbPrNzU3s7OxcWjvODnF8fIzvfOc7WF9fx82bN1v2ujo9uZ5dr/qiHavbXslOOErQ5tzc3GwtUtEDOkejUbN3ngugtre3m2XP9IPwxCgFQHamnZ0dHBwcNExIRxVSVw3ryh0xA6fUfN+VdBYHF6VPB/Y8K9CyvfibgqHOZOmfmlMESferuNlAoNXl0imlxg/E99neXLmoZ2dubW21TBK9nIhlIPBzhS2XzLNv6DGACuglv1WXzNWKxkh8WkaFzxQxtXPQjNjb22ucbhsbG43HV6ccWYFc5LS0tNTc4uRTjMDF8mm3x9UZSYChs4h51BWPPvuxsbHROthFAWhjY6PJz/LycjNtyT+fSfCDSFVx2YmVCegIqMxB43Dpciz2ER/Jaywg6uDuD/BnJYBi+2vdRKYF21bNEjXZvG7d9wBcjPqaF4IH24+7YskC2EYckFZXVxsTVplDl9J/3xyNVy06WqkjTa9fI13TlWjAhbJwVOUzPdeAv5+dnTU0j0LnnwICgUAXl3B7s6561C3TwKTD0mfAG4QYhmUajUaty2HJEgh6Wh9kEV4G7RjuLPPRsKaU+t1HWP+tFNbFO3UtbMnJyXJxLYiaAAp2zqrU6arMQOuo5Gj0/OngxHf1bM+ITdFhTYbA5z6LlnNuneGoN33lnJuzQiKz51XHFBQJtbO53ccK11Gax46prc/FIkR6PYmJQKKOSCoaHYic2gMuFqBQ8ThVpNN8nH7UGQpSd+aXafLEJ842UNRnQOciz2jQjsjPLJ92wshM4nN/L3Lm6eyJ/y8prpobD8smGK+Xp/TMgU/jcIDUPKtC6nZmloG/qyNP+6jWn/vBmB4ZJAcvv2ma4Ebw14VnHDh0AHLQj9YvDJG5BwU6+CglCquKygobjUbNsmC1+7SBAVzy7upIw63M9C3w1F1WPB2M6j1WZWX8FF0+TbMgpdQyGaj0p6enrQNa2Gk3NzdbU6bA5RuMCV6qlOzQOuPifgSv3xJoaNxqZgxVfs3fUBpcYhjqBHwYUVahZdZ8R6Lg4vskWF/sLzwXQ4UDEHCxzoX9IKXUHMLD8p2eXlwjGMX1qjMfqIhAvPxVF/CwAei1p10GTDqI0iuO8nRaMn76G6ioBJa1tbVWIzAtP4OByudLaDlLob4MMgvuuWBH4rJlBR4e2EIzgqOD1oefJsX4dBT0EV8/l4DBwcOZgHvla/F5niNWUnoeOTedsfgzf9+VumaTE1zcjFAhi9L2YBszfgUnDjjsa6T96gDVPkvWqQvTyBp1VsnbzNnLEJl7UFCmwIJrxapw1FZqR8pPQGBD0+tPP4TadDrKky3s7+83ZxZwx5qaI7rASBtZTQkCE4DG4cl7HdypR+HGqY2NDdy+fbvZ5KQdh/XkNFU7EOvEz2xkvTp7YpyRaeBSUrhIhoy4ml5kikSmgCqwM8gIvPi/BBDqxNXfFWwjQItse2DSXryXwy8gVl+HxuNrR7yv+NZs5m9WmXtQAHBJYVXhgLbnnLRLmQCfOygoquv2aTVBiNZ7e3utGQdSQFJEjt48rVkRn2kSQLglmxeI5pxbx6gB8ZSbdk71i7hETjb6WJh3H+01TUqJdpYYRS1slEYNGFzhGLbmV2B9RPY9f3fw0rQ0HzrLAMTHxWuZ2DYl0HTh7tf79+9jb2+vtfHPzQymz76ofa8kD+NXuBagwEMvHUkp2rmpLOos0oNP1Z6jcui5jY7ITO/s7AwPHjzA2tpaYzKsrKzg7t27zW9qmiiwML3T01PcunULp6en2N3dbfk0uCKSjifSQgCtWRM91r2kzP6Mp0YB7ROJonDuH1B2VgKDSFF9RPd3o2caLurUfW3jCGzc1IlGVmULEWDoQiUNH81IEJzYD9Tfo07D7e3t5vvOzk5rOTsX4XHWQfeynJ6eti6GKU3dz2JCXAtQ0HsU1VZ3BeboTCpP6q/zw0rbGIYdwv0AwKSBOZ/MvQpcALW8vIyXX365aXRdc8AG1c7y5JNPYjwe48GDBy0aqo4lPWmK7GB9fb2xQXULOE9bqgmZCXdn6qEx7KCRmcCyR0rso2oECmyTrvxFABOxiYim+/t9RumaWQNcgENNmaI0SyyE/YtxO4Csrq7i9u3bjWOcfiz1J3g5fPEe+1lf0OySawEKp6en2NnZwetf/3oA7duVVHx0yTm3VhpSaDroghKyBAUFNiKZhDuM9vf3cXh4eOlADjauntL0+OOPYzwe4969e5ecg5wV4boJdgqOGjRfFGicqvIzFZ1lBCYd786dO8g5Y3d3t5VPrauIVhOYagoX/V4CGjdXIpOgpPyRKED1BYeuUZPK7eCn4b2v6ToUTYNtqaO8ggRZLR3M3NrP8Gx/BRcdfJThlPI2VK4FKADASy+91Ezh+fSXzhUTMekQ1DULwMUJ0T7N6QewKlqzkpeXl5tl1jnnZl8DaZyaLdoBnnjiCezv7+OFF15o0mG+yEC4/kCnDdfX15uZFy5wAi4WX3HmxYFAnYbn5+etsx+VzkYOOzcd3JmndRb91qWQj2o0q8VVAwc+LzGAUniGoVkQxaFtr+F1iljpvforHnvsseb0rhdffLFho2wvDhrKPhmv93+vh6FybUDh4OAA+/v7zVSje9rVI89nZBRUAM446LoFKqb6A3Sqh2mtrq62dk4ybi6H5kpCKvRoNMLdu3dx9+7dRrG3t7dxdHTUbMpiHFzQdHBw0Nq9ycNluWmq1BmYHzeTtFOrqcTv0W5IV/bIPq1R9r4dsWT3R+l5mNLvEdtRBe4CiZKye97UZ6B/QHxuqCqtAwOfsT03NjZw586dVjw6m8V4/YhBZbw/MEyBW5rv3r1bfIcjIRdy0GxYXV1tlpLSaalealYqkZiozr0PN2/ebC2fVi+xntc3Go2aI9u3trbwxBNPNL6C27dvN0DEBVXshDzghQ7R8XiMl156qVmRyZVtXMLLJc6+IcwX7Shb0Od63JdS2GinZWTTuwngAOI+gZKPIJJZQSaSyDTRNCImEJmg7neJHJGUaEZA20D7WengFzKEl19+uTXTxnTcl6bLtfW5l7uvXBtQIA0mqgJoeWB9ilC/r62tNTskdcegVzQZB4DmkIu1tbVGORV01BeQc8ba2hru3LmDra2tZk0BEV6nNpk+1zzwDMbj42Pcvn0bu7u7zaUwLMvq6mozt81ysVNFo6M6EIH2LkGCHj+XnIl8v8uW1+/6399l/K6YETuIzJIuh5/nv09+PGzNLzLEien5KjEa39yk8a2urmJra6uZtmbf0Y13BDH1ZTwKuTagkHNuzrTjykA+dyFyAhfnDfCAFeCCSrvPgMp0fn7eePxzvpiVUN8CGcfm5iaefPJJPPnkk81ZCeqgUwTn6O4HqTLuxx57DE888UTzXPdxqFmi5dT6iex7BT6dGtPr6BUMa/XPOEuKqL/XqLjHWaP2pXQ0fJT+o5CISZTy4GZE9L6bDUB7oZIKZ500HEFcd3KS9fK7p+fl6COz3vvwUQB/C8DB9LX355x/e/rbhwB8EMA5gJ/POf/GoBxVhDY3JSq074RcWVnB3t5eM5UHxKc26ajIxqBCkrYz3r29PWxsbOCtb30rnn766eZdxkMl5lkHHNVd+ZgmlZ+nKam5oHs2dJaD72lZSHUVQNTX4QyCm2tKylViEU6d+3S6yMbnd33u7+s7pXhro3JfidhK6XcFvig/fL/0jj6jGeuMgW25urranImRUmrdUcr+qaCg/gvNxxDpwxT+JYBPAPhX9vyDOedP64OU0hsAfADA2wDcAvD7KaUv5JwP8Ajk8PAQBwcHuHPnTuu52oI6rUiA2N3dbXluWelOxziCsqG4SEn3R6ytreGZZ57Bm9/85uaQFIbzLcv8zvjX1tYaRyPBBpg05tbWVkvpfTEMFZ35Syld6kg66vN3F6WdjE/BRN+rSWlWQn/3NirNVkSsT99X5uFS803URu2aPAr2o6JMNBK2p55vwffZ7sCF81ynr5lmzYQYCgx9Tl76vZTSG3vG924An8s57wLYTSl9GcC70D4CfmYZj8fNQialVOzgOie8tDQ5y/D+/fuNfa6A4eYAHXgKGNqJt7a2cOvWLbzmNa/B008/3YyywMUNTjoaa0Ny5FfwiBxuCk76nJ2Fl7yQeTBtDeufdXZFZ2jYCRW8HAgi+hwpt3e4vkpYM0O8Iw+hwJEN3zdMCXgiZqPSByy6AE53rwIX7aGmJjCZjbhx40ZrJS5N2kgeuflQkV9MKX0Yk8tg/mHO+R4ml8I8L+88h8JFMSml9wN4/5AEeUOSKjSFSsPFRjzclGcUcGTW047oVyCFp/AZgNblLJubm82V7+wAHGE9PICW70DZjJoFTEfNC+1gCjBuBvDPF8QoC4pGCcbPTqR0VMsUSc2siCi2v+NxkblpHFGcQzt2X7PG8x197xOP13MNINSE8/d04CK4czZMTVgArbUP0bR8lK8+MisofBzAP8LkMpl/DuAjAP4OAK+9IgfNPe99UDk7O8PBwUFTUJ+T9cajLc6RVw855XJoVjzDqrI9/vjjuHPnTrOwiEoOtA9Z1fQ1vJ7OpI4lVyg2fEkR1fEYldXDqcOU7/J97zQ6o1FKv0bRo++zUPUuv0FN3NToq8TuG9H0upyY0Tu1eEoMwfsH+5AOItqW/ExfEduO/itlGrPKTKCQc/62FOqXAdC38DyA18qrrwXwn2bOnQmnJSPbSRUh59xcvKEzEbqFmSOpnorL51wWzJkAHrTJ9wG0zAAyDqA9svM/GYErfl8bXoFGy65+iVKdUFnYeRRYVHTE8aXN3pEV2Lyz+wioiloa9Z0ZuMLWxNMe4nfwOEqjd8nn0SXK9rQtovryvLDfOoizjcbjccuRzed6WhQwG1DPeu/Dm3POX0spjQD8DIA/nP70eQD/cWpW3ALwDgDvmyWNSHLOjfmgdrKKPlfKpVuNOTUYAcb29nZjInDvu/oMgAtTxSk341HlV3rs5oECmb5PUeUr+Qv4n8pEgPLyu7gJwvrlSKNTZT76eUcr+Uf8c5eiDzUVSgDQJ3zkw+grfd7VNo7SK+VH60D7p6ZJvxl9ae5fiuIeYn7Neu/DX0opvRPAGSZXz/+9aca/nlL6JQBfmf72s/kRzTxQuCoxspW0o1Nybp99z8omKPAQFi5jvnXrVnOPg97crNe3+eYnCoFFbXp/R4UAQeXXvEb+AqC9xJZl1rIp/YzqRUGHyh8ptXbOaJR3JjCrs9FH+QiEIsreZSr46B/lyc2OWt67nIgl2z2y893hGKWtLMPzQL+ZskPtb1FeHilTyAPufZi+/zEAH+udg4GiU3ruU6CQLvOzVqwel815YHr1edEK1yn4FfGq5KrQ+lmXrbpCR5RcO3WE9BGgRGF0xsLZi09zKXi4/aody5Vw6IgTOQyHSo3SlxQqymeU71lMja58dklkKkWi7emzUWxPXgrjJ4aVpj77yrVZ0UjhtKRSZh0tz8/PmxWPqqh0yvACFVIvOhzX19cbp6Le5Ky2uAJMze52ys/PPoJrfG5WePiUUugk1LT0ABU+18Uxni5Zgp8QxbpUYX0yzSG2fu03f899FXw2RIEjwFApMY5ZAMHr1svj5oOCXImROAvUfugH5uiNYrruJaqPvnLtQIFnCwDxbAOA5p4GKoquTeBdjtzbcHZ21kw76jJiZxc6LajK4fnwkd0VVxtaf4vCeEfSuOm8jH5ThhJRVwCtsnraFHf6afxe7iGdLspPSSlnjTfyb0Rl6TIvhqRTelZKs0Tx/XnUJ4GLA3SWliZnf6rfa9Z6A64hKOQ82b0Y2V1qUrDj8ogzPUNfw/BqOG5QKjn21CvvPoqScqliu68jGnFpcvQZFdVE8uXOfaaklJmU0vG89XHOlWh7X4UrMRSPr6SMNXbSlXaUT/9Nw3eVX31EQMwaanmJpotLIE+J9lIMZUHXDhSAybJlrupTqsRpSMpodHFF2+npKba2tgBMGocIu7Gx0VzHRsVV4FBzQZdER+J039+lOePvuL3Yt0FLDsjI/HAfiwOUmx01Ze5SzOi9EquoKWtfBa3lJ0q/Jh6vmhm1NEpxRL+5Y1L7sPsPKOr7Ud+Bmo0OQpShZtG1BAU9rooVpZWhXlnOHlDZuXacfgSCg8toNGoxBwUEZSauXB6HKy6li2JqfFRaPUgjSosmRZSmnx8RzWBE5agpWknZaoquCqF59VGzBBBD7eMovhrYRL6GWSUCfAdndw56v1bxfqqA4H3FQfhVzxS4WzLn9jy8nmhL0SlFTj9SeehUVDYQLTDyaUJWcuQT8CnKEvXlqByNyFFHTOliKTZHDe84Oq/N+nDfh6YdSZcSRH4UHxlrfgJ9xvxHcVIi5lGKT9/ra0p0/e7xl8oUSR9Gpe86Y+B/BY+lpaXWTuFo0ZqzzR8IpnB0dITDw0Nsb2+Ho5yejsTbmfW+SIIB72vgjIUyAzoXHRS0A9cAIXL41DpPiW6XFC3q+Nr4nF3xdJg3hmWnU3MnGr0dxEomRamsJTpeS6fk34jqr++zGqXv+71Pnig1hSyxqFI62lbAxa7JSB6G4TzcIukrEp7unFJq9jcAbYagCOpHuHGxEu/nI50G2mygZp+pArmZQFFgiMAhAhhXPg0ThdOpRU1TFT1SeJYl8jUoxfe/LimNUM4QonrRPKl50WXPe936X5SfKA6v45LpF4UrPeurnJGPITIpgMu+oohheL6HsIVrCQoA8L3vfQ9A+1Qa3Y+uC3hu377drGCkY1EPx6TJoIpRW41YamidodAOHf05kyh1JH9Oh6eCkcapcbvZo0qvJzJ5eODy6O3PXLp8An3D6XN1nvkx+lo/Xme1d0qgEbEVDR8Bt6dRqid9101OXW9D5qb+o8hEjfav+Ht9WVYk19J8AIB79+61bkwCJhXh20xZsU899RSOjo6wtraGW7duNfHozkkFhEi5vHFVoulGtQUd3SNnpS9WKaVHcIiUSUfZaMecd0gHLn9niHLr55r5ECmV5zFyJOtpUlE+1JYumSq1kdPf83LU8lzyB0WmYN9RO9q3wn7BdvV3ojbvy/Io1xYU9vf3cXR0hI2NjcYDq0eL8T9XLW5vbzfrw/X4sxL1V3FliQDBaWc0kuj7tPl1XtntxWiWIYqP5WQcvtRaw5RMDh+V+K526r6K3PVeVDc1hyRwsVgrGsVLo2KXQncBRwQgtTCR0kdlcykBVLRITEEypdS6sRy4PCM2i1xbUDg4OMCLL76Imzdv4vj4uJmm5D5zoG2b0Y/AKUmeccjRh6cuAW37WjthzZGoHdY3OEWg4h5if4d5KHm6/XcdgX0BC0cK38LNvCkz6hppPS+RItSceSUWUiprNMq6uVPaCVqTGiuK9hB4XWpeNK+e5xoz0byUzC9dvMS24r0l+i7X6PjanVnk2oLC+fl5qxK4nJnTjtrJqfy8kl4vbVFgANpTkJEHn++UbM5IgXTU7jNS1uzBCDyi3/WzsiYFvJpDNcpXn9+6wpRGX6AMDKXv6ojra+bU6o8Ao/4MxlUCD52pcQdpNCCUzAkNB7TNAo2XErWZ3jNaKncfubagwD0QBANWIiuah6eQFbCyuPORTMGVQhlAzauv7/vo3UdqlDzqQNHvnlbkv3DRMpW2Tdc6UJSnru+l/Gu6Wh81sHFlLeUxym9kCjkjooJGbEHb2n9XByHjo4OU/UzbrbRcuYtlEYhGo4tNUGo+68lgpTrpkmsLCjnnZrekNoae5KwVwU0jOrMAXDScIrR2HjZAhL5uXgB1m047nQKId9aazVoDHndGOj1XNhNN9Sk172MHd43qGnfNBOliToxH97VEI24fqk5R5dKyMO3IJNEzNbVPMG/OMmiqEhhqfYkKH4mafuyvmh8uaGIe3I80VGa99+E/APiR6StrAL6bc35LSumtmBy68r3pb7+bc352cK56yt7eXnNLklaGOtxYKe6x1hFHOwi/A7EPAbhsLrhTsI9y1EZcVwod2SMpKVXJ3nV7NIrH4/Cy1wChBgAlKcWnU3a+7r/LRPD4ow1JjIt/VDgFby1zBPrsfwyj+eKtZLq6lAyNfUfD6MpFByb6EjjA6WG/BAVf21Cq35rMdO9Dzvkv83NK6R+jvd7hv+ac/2LvHDyE8FZp+hXcyaI+AR5nXjIDHAh8UUg00ka2pYv/VjIbFFz89yjuSPH994gqa1wRzS4pvI+kkdRMnSgdfRbFqYqsozBwuX28nMrKNBwQMzz3CejzKD866ms6rtzKOvT8ipRSuN6gVHdqOvBGdc6mjUaj5hoDz3P0rEsexb2sV5YdAAAc70lEQVQPfwPAT/VO8RGKHknl9qafPuTzt74vwSuyZJ9rZ6otplG7UsO5aeLSxyfhHdrj7ju6az67qHdJ4Uv2e1c6pXgif4EuUHPW4CYi0HbSReXRo8v8PQdH/rFP6EE2vlbEASFaaaisMufcmqnSgSEyJdRHxu866PlN5B62rzyUTyGl9KMA9nPOX5XHP5pS+iaA/wvgF3LOX3qYNGrCqUiyhfF43DqolXYcqZVKl+2vV7+rl16Zgr5fk5LpUQMeIHbC+XsROJTe6aLvETB0KfEsI1EUTwQM/KwAoKDgo7N/1vx7nvWQmihdNV/43VniycnJJdPMpzG9XmoOzIjy62/uk+B/Zcp87v19yLTtwzoafxrAv5Hv3wTwJ3LOL6aUfhzAZ1NKb8w573nANMNlMC7j8bi5iZp2Gz9zezTQvljVmUPJD+ANVVK46HNfWj+EFcxip5fClRS4xiQ8vVpdDM2npuNU3wHBPfz6v7RjsJQfnbHiiK20nxvr1ARwIevwreju/2A+fCcrZ8S66kcHEL0XlXmI6o3/c87F26MimRkUUkpLAN4L4M/yWc55H8D+9PN/TpPTn98I4H96+DzDZTAuZ2dnePDgwSWvK79LWs1n9SlYfpqw0fx9ZH8q9SMQRDTZFwVFoqO0UtgaIJSkxA585OpiBP5eqXz+Tl+JRv5oepnp1vwIfNcdygr8NVHl11E/ukqA/im2vypcxEgZr/Y9BTtd2er1o/+5Eld9CTzEmO+5HrBsQ66qfxim8C4A38g5f4sPUkqvw2SW4iil9A4Ar8OEPbxiQlAA2lST00F6h2NE49Xbq79RdArTHU2uYG6Paof1OF1KI6+zkRLN9zAlpa2xBE/T7ewo7Yiee55K9DwCKfUflGaBtL3Zhu6D0M+RY9Hf86lC9SG42UHQ4i5bvXchmnJ0X4PGT0WODlBRJVfHuILS4eFhE4bxOGt45KCQgnsfcs6/gsumAwC8E8A/nbKIewCezTk/6J2bGWR/fx/j8Rg3btxoXRIDTKaDeFy7S2S/lWYK+FnntWviIACU/QYehvGXGEJksnT5DKKy1hhL6fcaU6ilX8qDg4QDMH/nRT76bsTcShTf7+lUEHE2or4EtoX2i5xzMzprf+jDkAh03hfo/9JyOYAAF9Ob3AjIvKyurrYGOPe38CyRvjLrvQ/IOf/N4NlnAHymd+qPQI6Pjy8d+a4rvZQ++jRkqTH9uXfeaPSrKYnezRCxFQ8/hIL7SF0zN6K8RiDQ5TsZYiqUWEKtHLriL7KTfSWmsw0dremE41SejshnZ2c4PDxsHIZUNmCyInZtba1ZB8N2o1MbQLPrlnF5//Jy15iUziT4+/qOTrvTlGAe3Y/BfA1hCcA1XtFIGY/H2NnZweOPP96qNF2/AFxG6agRXEqMoI8yUDmjBVCuuEN9Bh6uZjZQamZDVz4cePrY6FEcChB9/RlA21Rj5y+VWfOo09U+QBweHmJnZ6cZUHgDGCn48fFxo1AKFmSiykzcoc08q5yfl+/x5O9Rf2RZvf3UJ0E/iPZ/5k9BrK9ce1A4PT1t3S+pDcOKKVEyH7m7zILoHfchKLqrLRvZ7LNI14gesZwuW78PGJTSLIXrqksHCU/Lnb3ehr76lPFQdNTUPJ+fnzeAoGYAFXY8HjcH8nCm4Oxscts5w6vi8zg0OgxZ3+7g1DQYT62O1GxRIFLTWEFMxd8bYjoArwJQODs7w/HxcWvttyMnN4l4p+liCipO5SKnYm29QZe93aVsfRQzcgx6PiJTwctUK3ufPCsQadyRGeb50npUpx7D6FSxho9GVA1LhTw8PMT+/n5zDgHQBhZO962trTUmqHr8gfbsgcrJyUnL0cf3U7q4XpAju9Zhn7UeXn+6rNlNZ2UJzO8QdnftQeH8/LwBBX7XMxW4VVrtMDaE0lIHicjpxOf6DoDwPY9DJXreFzgihagpskpfX0Ep3VpcUdpRXXV1fLaNmins9N65+cxZBE0F9StxkKAPQe8HWVq6uMVZBxCmxXgIDMpWONNFfwUZA4GAfUJZhNejO1g1fZZdzQDty75eIaXU2jV5dnZWdLaX5NqDAoBmNSMrnaCg01tsbJW+bKHkLIuUJfIuu8xqPnQ5rRh3HzOolq+IDXXlyQFGpw270ouUxQGAbVVjQH4lO/0KnFY8OTlpnX7MvkHF4XeNi+lqP9HVshFriNYd6OAT9Y+o/O4PoxDoCBTcPOV551VyWld95NqDQs652QPBBvf14fpXcuY4a/AFR04VS+saNHwtzxR3otUar+S1d+ZQE1d8z1PN11ACnFK+NO6SL8bzrECkR8xF/gUNr6dtqZkBXIAD218ZBfsMzQYe0nNyctIsSuIaFzINggeFI72aK+6z4gyH/q5l8rUI+p4vxNP8sx7G43EDBmQIh4eHl/b49JFrDwoAmhOXfJ0CO6MrdGlUiig9cFlRumzAPna52/1DpOYj6Csl1uH5dOXuiqsEOn1AyNMjKPjMgQrDs/Nzeo5gQgWnkq6srLTm++kHUAoPTAaWg4MDjEaj5o4QAouaC8pAOQuhJ3qr/2A8HmM0GjWH/jgTYlgV9RkwX7qwSuNWM4NpbW5uDu5nrwpQYEXoGvCoUYDLN+9QnCZ32fwlZXT/QhROhSNbl4+gFscQYBjy7hCwcVvYwzub6dtJuainxDTI4piuOvrIINjmvGT49PS0WYOg1wZyVCbroALy2D6+s76+3lxWrDRf275URncOlnw1LIPOQDA8z2PUGQZ1MD722GMNy4naorPOe785x6I2lM7R+lbSkm/BpbSeIJI+DsNo9C1R9C6pKbX/NgsTiRhCLS8RQPk6gqisXeWPGIPG7eaEgpGvbNQ1C3oREGenCBZkBWQYuteAAK/nfaojUP0wVGSfPlX/QzQo6Xu+V0LLouYQAYAsgWU6Ojpq9fUfSKbAytCpyWglI5/3cTD2USo3A9SO7Ypb//vnWlqlfJbAKEr3UYgqQpRX/a8ju7M5KpyXwetQGUBJVBkZhv1ib2+v8SEsLy83S+OXlpawubkJ4ILhkQ2oYitj4LtaFv3sZXDmWjIXWH76KBRI9LvOsOzu7rZ8IFxXsbGx0XKG9pVXBSio55V/rHzvWO54pJRG2WhEixyJruQlZ2MJBGo0svb+w/gVojj7ODtd4aPn7oNxgFWg7psH7+CMT511wMX5nPQv0MbmdLT6nZaXl7G+vt6M/PQfcJ0C3+P9o7oego5LP8KNeVF/FhWZo7v7VLxugIvBTvvSaDTZGUlmNB6PW/40hjs9PW1AYai8akCBFcKK5zPOQkQo3iWlEbCPyeDiSt7lQyiBQS1vs5gLERh2vR+l7xQ6kpJpUvKXOMvgZ51pcNbB9DkC6/oVHdG5TmFra6vZv0CGwM80NYCLqwXVdvebxBiOrJWiIESzxB2IXicEHwUVLr9WlnFwcNCAANPkBqi+jNjlVQMKKuqA0QaJJOqEJWck0M8bP8QP0cdv0VciwCml7Y6/PrZ9nzTUFIjCl8R9EF1OX01LnY3OUOgHIMsgG9At9Xo+wY0bN5p2J/joqczqRwDah/XoaK7hz8/Pm9GcTMT7ZMSmtDzqF9GwXJmpG6MYdhZAAF4loJBzDk+z5SjCCnMb0Wmnzi132WAOGH0p/BAlmZWV9HFGDmEHHlY7XhRPH9ArmUdd5XPaDVxWKFJrKoa2NZUSaO+g5J9OK+acsbKy0iikevRV4aNZj5WVlXC6knlgH+N0qTIO73vqU9CZDu75oc+E1yYqc5plwHlVgIJORSoYAN0bTyI2EG0yUek7ytbCzgogGrY2Gg9lMX3NBr7rwODpDe2MCgiRaVJ6F2hP62r98vPKykrTJ9QnEN1kreYmw9PDrztvo7sc1DwhmChQ+jJ6ghfQPusyajv3owBofAtcp0OfyXg8xvr6+kwLl4B+h6w8g8nx7n8KwDGAj+ec/0VKaQvArwH4YQDPA3hvzvk70zAfAvBBAOcAfj7n/BuDczZAdCEHcPnKLXVEejhFeDYof4u830D/Dl8yP7oceaXnJXu7FkcXOPQZmWsgWGIOXY7QvopfA4SoDkoOypWVFdy8ebNxNHKqUcMtLS01y539WDfa8wzPdKj47nBUEGCbcw/F0dFRM43I3xVAVKKzHzllqb4EMoXRaHLc+40bN1pXGgyRvkzhwwC+BOBJAP8jpfRFAH8dwFdzzj+ZUvrg9J33p5TeAOADAN4G4BaA308pfSHnfDA4dz1FHUfKECiRX6E0dVQ7LMNHaY2j1BlV+iiiK2DpnZIMBZw+gKCKXSpvLU/8vYvRRHH6XP8QZsb3dIMS0O4jus7AfQKMgz4BxqHnM/IdX/YeAfjR0VFrVKfoximK9lcv72g0am3lptnAVZpHR0etW8+GSp+Tl54D8Nz063dTSl8D8DQmdz389PT5pwB8A5PTmd8N4HM5510AuymlLwN4F4B/P1MOewi9veoLIENQh1DX4iWfotTPtZEyel6TyPZWKVH1Ujweto8/oUtJFQz8ueepxn5KjMZZhcfnU8ZuInhZXGp1rA5IzU8JALUcUVwONtG0qZu3LiwfPysg0swgcBwdHbXMIQLD+flkbwYBLFr81EcGvZ1SehOANwH4AwA/BODb00zvAFhOKa3p86k8N332SMUpsh5gGZkJwOVLXrzTRehccjhGdn2N+ncBQRR3FGZIPEMYhXYyX/fR5ZfpEq8bBxrPT0lxIqCqsSn93ctbq2OWmYMKFV/XD3BGwk0RZTTKRPS/MldfxRj1XTUbUkrNqVD80wNX9vb2mvheMaZASSndBvBZAO/POe+my70yAcjT/yphztIjuPdBRU/A8TlgSbP57D6EISM9pWQHlsRZxVDWUQMEB6lS2UvsIDr0NFK6ko/A0xrqfxkqNbPD81ATBT+13YH2cmNufqJfQePW3YpqWjBOmgqqyJq+nvAUCc97GI1GzXkQzLc62U9OTnBwcIC1tbVLsy5DpFeIKQP4TQCfyDl/Yfr4eQCvnf5+C8A453ysz6fyWrSZAwAg5/zJnPPbc85v70g7fO4NHp1D56isja4NWRtxojx0dfSuzlgr01BwqpkAHKFrgOAMyeOujahd+fL0Pc8ldlVjXJFE+Y9A0dkA9whw6z37iitTmjoJl5eXm6PaNB4dhKj0rowavyqyl8v7MZmKTj1q/vmMbHl/f7/xJ9TYa006QSFNjmv/dQC/k3P+VfnptwA8O/38LCagAQCfB/CelNJWmsxcvAPAFwfnbCp9aSsrk/aoin93oPDfSx3VR+NS/nz076KuLl0duo+yd4EdO7AyKldW2qU66gwFrL7vPwyQDs2LOuWooK7M9FOpMkezSW6CMi4/lp7hVbEjm5+gEZVX1yFonvhsf3+/tRDrlTQffgwT5+GfSSl9YPrsHwD4KIBfSyk9B+BbmNwWhZzz11NKvwTgKwDOAPxsfgVnHigRbVblJ0VTp1A09+syZP9C9J4qmjvXSvFG1DgyN1S6wEnF2UGUL6fIDghdedH8Dsmbhy9JX/OglibDqxL6fYxUOC9/dO6BOgM5wnud+SK7KB4ArelNPte9EMy3so+dnZ0WIMzKFvrMPnwRl/0ElJ8ohPkYgI8NyklBIjs8Ekfxkm0NdF/MEsU7lD5rPvp2YL4bMYOutGtpqAJHgODxRHEPFS93H0BzMFSfTylM37xEwjR8tHeHn267LomP9iw7z28ALpSYfgcucNI28WXUJV8DzQeGHY/HuH//Pra3t5t4ZmULc72i0QGBz6JGjnwHkTNIxe1GiqZXWtnoYfnHESIqh+epz2jpYTzN0u8+Wiso1NJk2WqgpNNnQ4R56QLvUnol5e7q+Azrtjzj82sB+ZdSe6vzyclJ41fg+xpGxQGA8WxtbWFjY6NxHkamaM65OXA459zaEs00x+NxMwMyGo1w79497O/v46mnnmoWUuniqSHgMJvR8QpIaXQsjTD+zFdvRR1X16zzHW1MXbCiU0t985zz5U0obtvXwK2LCWiaNVMjer9vGTyspwEMn/f2tFgfpbYdUi/R+y7azlp/CgbqQ9F4nTlEU7YlYVz0IaysrDSOyi7mpOtt9LmaDPrO/fv3W+WbtY2AOWUKtRGwrzj11EYF0Cxicj9DqTJrnbfPqBmN2l1mAVlHlI6XLVLkaOSv2fiat6j+VKn71EGJBUSAMEubd4FHNJI74CtVV1+AOgb5G4CWM1LjoERMTAcoUn7usYhEHZY+g6b5Ur/H7u5uGNcsfoW5BAVXHpdIAUqmgIs6hKKpI/U++5JeVRh+13z6Utea8rt5UGNDXQ1aUkjGq34RdvyIufRNz9Oujfpd5RjKCkrhau/R5iaTW15eRkqptVuSaZNB+EisMwURmAEXJirz5rdRk+rrfRQuzgzU1FGGou+dnJxgf3+/ybu29ZC6oswlKMzSMUqjaB/RBlfmoPGVKHb0vS9zqL3f95krZLRoy+PoS8cfhqnVpNRWJbZAYJs1PwQF2vg814AK5A5EgkLOufEf6AGyEQgqIEQmKcuhzCWqBzoHI4cny6K+BWByqMrx8TFu3LhxaT/PUJYAzBkoDG10pbLqVNHfFTGp8BwtdSToeyAFOyhXrZVsuKENoWFK9eAdUTuGjig1Sh+l0Vcxo+eltLRtIqYwxFzQMg012ZT2+9WCa2trlzY/KXBwjYYeH695KA1K7uDThXLqyKS4aaDOTTUXHHgIXHQ6KpP1DVtDdGuuQIFSo6IuLLBXgorbeaSDkcnhC0oiNHcAiWhgyQQqMYQ+ChMphtrN7uh008A7h36vOSxL4FIze4aypai8Q6Sv6cL7EJQJ6LFqOlPA8kVmZI0RUPTeCsZHQPJdjN4ONDV8QONnNSO4CCsaqGYZnOYKFGodrUv0XP4u6aosBwh9HilM5H+gRE7A6Dd9VnLkqfKrf0CptftXonQ97uh5yVR5GH9DDURqgFACLH6v5SlytuoCorOzM6ysrLRMCD1Mhe9TiSNK7/EDaKYF/dZnd3zqNGk0ePlnAov6GPQqPM2P1teQdpsbUPDOr4XwBSaRRPRfL/mIpCtONROi55HU6G0JBPr4Q9QLzQ6oCqdAViqv2sMKLDU20+WfcIXt6wupxR2BhOdJR8Q+oot5ogVB5+fnrUuJfQ+CTgN6WF09qCYHmUhKqXWUWwkkqOhR2rojUhkHzQdnLbXzHbpkbkCBEmW+z4Ib36jio712nr5Tj6V3ZnXglNJz9qEjq+YZuOhEJRZT6wCR/2GIckX5LE2Z9pEonz6yReaOt2lkVulvrC+uIATadaB7Cug7ULu+NEsQAbCe1kzRU5lq05fKatSXEN02rfnzWQ7Wgc849ZW5AoWH6VQ+7+teWAUMb+ihCz1ciWo+BX6OaL2+V/IfUPRi1NI7/sxH14ipcISsUfSSDHFk9aH4JXHgicql8bCu1bZmWC4v9sVBujpQTQfg4hZpxsPPVFzOTOihsMwH49Fj1bRcDvbOSJRFeJx87lfSK0O+9j4FoG4/uuiourGx0XQAdxYCl5c5M25W+hBgUGWnT4Hi8ZQcjv4O/5dGz5RSawTqa/eXzBXvZKV1HqX8RH6PLnGgLL0T5aPL36TlcT+P5z1ai+KrFlnPXi/OOPkOt1arWVdyRhIM9LBVjbPkW3CgKJkzTENB+1r6FEoOEad7UbjRaHKJR4SMeqNwBBYlJR4qJRZQE2cS+sff1SRgOUqswgEo8hVEadRYSqSkpd9r/hH/3OWr8DD63EEtSkMl2iJeqpvSQSfK9tSm97QjFqnOYWDSl4+Ojhp2wvcUoPgexf0OCjq++MoHx6EyN6AQOe6UXkW/syGWlpaa02a4KIW2HSkjAUM3ivStNO2MpRE1ChPZtmo3Koj5qMJn7mOogViUNzcbIj9ANDVWAosuFjGr9GUfDgwermRe+MnNUdtpXF4netOUOv6UbWhYmmTa5hqWAM81BgwXLZxzEGBcChIU7x+zAMNcgAKdQECdFgPtzs7KWFlZwebmZgMIdDrqbjE9jYZgwbR9D7r+RegbMY5o5NGRQTuGgp3HEY3M3omjtEriYSNwjZSkj8J3+RK6TIVSekP9G9EoHdW9MillXcpc/LxFNS918ZLmUUdrhvN+7HSfcXLa8vj4GKPRqLgnwoFIwS7ykbkzfAg4zAUopJRaN+j0FTqENjY2WkxBLw3VnWmsLGUKunDFnVL6p+95hXvn1+e6yCQqdw0I/H9pdCtJNKp3xaH58fwNSV/rpAZiNWZSCh9JKSzrPYpfmRr7gp4KXnPsurKl1N5mzWlrB303h5eXlxtQiPqImxA5X9yird8BXHKGRuZWH5kbUKjtGqN4wbj6jKCwtraG1dXVBgh4Sw4XpxAwfF6ZnwkWujKsBBpuY/roofHVHJFdVNbBqa+UFLGvktWYSR/p2wlL6ZTAxEGkxHKUHegqRQCXmCHjU3bJ/QQROLi5UGJEng83TXjikw9S/E3j8RkHPoscjcqGKF1rclTmAhRGoxHW1tZaDQ2Up+uA9hbS7e1tbGxsYH19Haurq1hdXcXGxkYDEAQD+hnoJVZQ8N1lroyRTUeJOqZ2HDUXlOpFyq5l1/ei32ujeF8GMcvvfaU2QpXYVcS2oucav7eRpz0ajZp7RJ0dRmlxWjGl1CwM0raiIrJdHXD8YNdoupAsl32KN1xzhmk0GjUmhSu4i5fHwY7P+kp6lM6iWSWl9CKAfQDfu+q8PIQ8geudf+D6l+G65x94Zcvwupzzk10vzQUoAEBK6b/njuPe51mue/6B61+G655/YD7KMDfHsS1kIQuZD1mAwkIWspCWzBMofPKqM/CQct3zD1z/Mlz3/ANzUIa58SksZCELmQ+ZJ6awkIUsZA7kykEhpfQXUkpfSyn9cUrpn1x1fvpKSunFlNLz07+vTZ9tpZR+O6X0zZTSl1JKr7nqfFJSSp+e5vkr8qyY35TSh6bPv5FS+mtXk+u2FMrw0ZTSy9IWPym/zVUZUkrPpJR+d5rPb6SU/v70+Xy1g67G+37/AUgAvgHgbZgspPoDAH/uKvM0IO/fCZ59GMBHpp8/COCTV51PyduPYXLZ71e68gvgDQC+DuAmJreGPwdgY07L8FEA7wvenbsyAHgGwJ+f9vu7mNzQ/pZ5a4erZgp/GsDLOef/nXM+BfBpAH/1ivP0MPJTAD41/fwpAO+5spyY5Jx/D8A9e1zK77sBfC7nvJtzfh7AlwG86/uQzaoUylCSuStDzvm5nPN/yRP5LoCvAXgac9YOVw0KPwTg2/L9uemz6yBLKaU/Sil9NaX0d6fPmvLknHcALKeU1q4sh91Syu91a5dfTCn9n5TSv04pbU+fzXUZUkpvAvAmTNjxXLXDVYOCL7K/6vwMkXfknP8kgL8C4OdSSu/E5fIkAPM8vVPK73Vql48DeD2AHwawB+Aj0+dzW4aU0m0AnwXw/pzzLuasHa66op7HxFaivBZtZJxbyTn/8fT/NwH8FoC3Q8qTUroFYJxzPr6qPPaQUn6vTbvknL+dcz6Z5vuXMWkHYE7LMGUAvwngEznnL0wfz1U7XDUo/C8Ad1JKP5JSWgbwPgD/7orz1Ckppe2U0t3p57sAfgLAH2ICDs9OX3sWk8afZynl9/MA3jP1ij+DiXPvi9/33PWQlNKbp/9HAH4Gk3YA5rAMKaUlAL8O4Hdyzr8qP81XO8yBR/nHAfwRJvbSP7vq/PTM81swcRJ9G8A3AfzC9PktAF+YluW/AXj6qvMqef63AP4fgBNMRqC/XcsvgJ8D8K1p+d571fmvlOGz02fPYzKgvGZey4CJkzBP88q/98xbOyxWNC5kIQtpyVWbDwtZyELmTBagsJCFLKQlC1BYyEIW0pIFKCxkIQtpyQIUFrKQhbRkAQoLWchCWrIAhYUsZCEtWYDCQhaykJb8f8UOOX+/eI6AAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "id": "qWti7YNgN1SW", + "outputId": "5d16e8c3-10bc-453c-ea8c-52e57f1adcb1" + }, + "outputs": [], "source": [ - "sample = d_nih[40]\n", - "plt.imshow(sample[\"img\"][0], cmap=\"Greys_r\");\n", - "dict(zip(d_pc.pathologies,sample[\"lab\"]))" + "model = xrv.models.DenseNet(weights=\"all\",apply_sigmoid=False)\n", + "with torch.no_grad():\n", + " out = model(torch.from_numpy(sample[\"img\"]).unsqueeze(0)).cpu()\n", + " \n", + "dict(zip(model.pathologies,zip(out[0].detach().numpy(), sample[\"lab\"])))" ] }, { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "4otNFB6VNyki", + "outputId": "6c3d2a1a-8781-4344-dcea-241714becf71" + }, "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'Atelectasis': 'Atelectasis',\n", - " 'Consolidation': 'Consolidation',\n", - " 'Infiltration': 'Infiltration',\n", - " 'Pneumothorax': 'Pneumothorax',\n", - " 'Edema': 'Edema',\n", - " 'Emphysema': 'Emphysema',\n", - " 'Fibrosis': 'Fibrosis',\n", - " 'Effusion': 'Effusion',\n", - " 'Pneumonia': 'Pneumonia',\n", - " 'Pleural_Thickening': 'Pleural_Thickening',\n", - " 'Cardiomegaly': 'Cardiomegaly',\n", - " 'Nodule': 'Nodule',\n", - " 'Mass': 'Mass',\n", - " 'Hernia': 'Hernia',\n", - " 'Lung Lesion': 'Lung Lesion',\n", - " 'Fracture': 'Fracture',\n", - " 'Lung Opacity': 'Lung Opacity',\n", - " 'Enlarged Cardiomediastinum': 'Enlarged Cardiomediastinum'}" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ - "# does the model align with the dataset?\n", "dict(zip(model.pathologies,xrv.datasets.default_pathologies))" ] }, { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "hYiNHmCbN493", + "outputId": "bf83e0dd-46e5-4df3-a68f-1f91654c585a" + }, "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'Atelectasis': (0.5355571, 0.0),\n", - " 'Consolidation': (0.5541505, 1.0),\n", - " 'Infiltration': (0.58542293, 1.0),\n", - " 'Pneumothorax': (0.5188316, 0.0),\n", - " 'Edema': (0.15621193, 0.0),\n", - " 'Emphysema': (0.5120224, 0.0),\n", - " 'Fibrosis': (0.5215088, 0.0),\n", - " 'Effusion': (0.535236, 1.0),\n", - " 'Pneumonia': (0.5335671, 0.0),\n", - " 'Pleural_Thickening': (0.5501406, 0.0),\n", - " 'Cardiomegaly': (0.20463671, 0.0),\n", - " 'Nodule': (0.5491222, 0.0),\n", - " 'Mass': (0.7618316, 0.0),\n", - " 'Hernia': (0.1438027, 0.0),\n", - " 'Lung Lesion': (0.077491745, nan),\n", - " 'Fracture': (0.45177895, nan),\n", - " 'Lung Opacity': (0.7261822, nan),\n", - " 'Enlarged Cardiomediastinum': (0.5274637, nan)}" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model = xrv.models.DenseNet(weights=\"all\")\n", - "with torch.no_grad():\n", - " out = model(torch.from_numpy(sample[\"img\"]).unsqueeze(0)).cpu()\n", - " \n", - "dict(zip(model.pathologies,zip(out[0].detach().numpy(), sample[\"lab\"])))" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'Atelectasis': (0.5566849, 0.0),\n", - " 'Consolidation': (0.52457345, 1.0),\n", - " 'Infiltration': (0.5974177, 1.0),\n", - " 'Pneumothorax': (0.5071652, 0.0),\n", - " 'Edema': (0.5025493, 0.0),\n", - " 'Emphysema': (0.5023997, 0.0),\n", - " 'Fibrosis': (0.5037091, 0.0),\n", - " 'Effusion': (0.77604365, 1.0),\n", - " 'Pneumonia': (0.5019207, 0.0),\n", - " 'Pleural_Thickening': (0.62171924, 0.0),\n", - " 'Cardiomegaly': (0.5250585, 0.0),\n", - " 'Nodule': (0.5426084, 0.0),\n", - " 'Mass': (0.6622993, 0.0),\n", - " 'Hernia': (0.5013983, 0.0),\n", - " 'Lung Lesion': (nan, nan),\n", - " 'Fracture': (nan, nan),\n", - " 'Lung Opacity': (nan, nan),\n", - " 'Enlarged Cardiomediastinum': (nan, nan)}" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ - "model = xrv.models.DenseNet(weights=\"nih\")\n", + "model = xrv.models.DenseNet(weights=\"densenet121-res224-nih\",apply_sigmoid=False)\n", "with torch.no_grad():\n", " out = model(torch.from_numpy(sample[\"img\"]).unsqueeze(0)).cpu()\n", " \n", @@ -287,128 +129,114 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "# small test eval" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "IZWnnzzlN9VP", + "outputId": "a737ae1c-8886-4268-87d7-60d2eb7e481c" + }, "outputs": [], "source": [ "outs = []\n", "labs = []\n", + "nih_ind = np.random.randint(0,len(d_nih),500)\n", + "with open('indices.txt', 'w+') as f:\n", + " f.write('\\n'.join(map(str, nih_ind)))\n", + "\n", "with torch.no_grad():\n", - " for i in np.random.randint(0,len(d_nih),100):\n", + " for i in tqdm.tqdm(nih_ind):\n", " sample = d_nih[i]\n", " labs.append(sample[\"lab\"])\n", " out = model(torch.from_numpy(sample[\"img\"]).unsqueeze(0)).cpu()\n", - " out = torch.sigmoid(out)\n", - " outs.append(out.detach().numpy()[0])" + " outs.append(out.detach().numpy()[0])\n" ] }, { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "nIXUha9FN_pD", + "outputId": "94de97bb-b05b-4e91-f064-b36944e55440", + "scrolled": false + }, "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Atelectasis 0.9216589861751152\n", - "Consolidation (Only one class observed)\n", - "Infiltration 0.5464190981432361\n", - "Pneumothorax 0.9292929292929293\n", - "Edema (Only one class observed)\n", - "Emphysema 0.9494949494949495\n", - "Fibrosis 0.6887755102040816\n", - "Effusion 0.9284210526315789\n", - "Pneumonia (Only one class observed)\n", - "Pleural_Thickening 0.9846938775510203\n", - "Cardiomegaly 0.9897959183673469\n", - "Nodule 0.8723404255319149\n", - "Mass 0.9184397163120568\n", - "Hernia (Only one class observed)\n" - ] - } - ], "source": [ - "import sklearn, sklearn.metrics\n", + "from sklearn.metrics import (\n", + " ConfusionMatrixDisplay, RocCurveDisplay, precision_score, recall_score,\n", + " accuracy_score, f1_score, roc_auc_score, average_precision_score\n", + ")\n", + "import pandas as pd\n", + "\n", + "fig, ax = plt.subplots(14, 2, figsize=(10,50))\n", + "only_one_class_obs = []\n", + "metrics_df = pd.DataFrame(columns=['Feature', 'Accuracy', 'Precision', 'Avg_Prec', 'Recall', 'F1_Score', 'AUROC'])\n", + "labels = np.array(labs).astype(int)\n", + "raw_preds = np.array(outs)\n", "for i in range(14):\n", - " if len(np.unique(np.asarray(labs)[:,i])) > 1:\n", - " auc = sklearn.metrics.roc_auc_score(np.asarray(labs)[:,i], np.asarray(outs)[:,i])\n", + " feat_name = xrv.datasets.default_pathologies[i]\n", + " if len(np.unique(labels[:,i])) > 1:\n", + " preds = (raw_preds[:,i] > 0.5) * 1\n", + " ConfusionMatrixDisplay.from_predictions(labels[:,i], preds, ax=ax[i][0])\n", + " RocCurveDisplay.from_predictions(labels[:,i], raw_preds[:,i], ax=ax[i][1])\n", + " acc = accuracy_score(labels[:,i], preds)\n", + " precision = precision_score(labels[:,i], preds)\n", + " recall = recall_score(labels[:,i], preds)\n", + " f1 = f1_score(labels[:,i], preds)\n", + " avg_prec = average_precision_score(labels[:,i], preds)\n", + " auroc = roc_auc_score(labels[:,i], raw_preds[:,i])\n", + " metrics_df = pd.concat([metrics_df, pd.DataFrame(data=[[feat_name, acc, precision, avg_prec, recall, f1, auroc]], columns=metrics_df.columns)])\n", + " ax[i][0].set_ylabel(f'{feat_name} -- True label')\n", " else:\n", - " auc = \"(Only one class observed)\"\n", - " print(xrv.datasets.default_pathologies[i], auc)\n", - " " + " only_one_class_obs.append(feat_name)\n", + "\n", + "metrics_df = metrics_df.set_index('Feature')\n", + "plt.tight_layout()" ] }, { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 520 + }, + "id": "zTuRw80jFvLC", + "outputId": "c580b692-dea5-4645-b96a-c100faa56aff" + }, "outputs": [], - "source": [] + "source": [ + "if only_one_class_obs:\n", + " print(\"Only saw one class for the following features:\")\n", + " for feature in only_one_class_obs:\n", + " print(feature)\n", + "metrics_df" + ] }, { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "id": "l_Bmioxi7F0E" + }, "outputs": [], "source": [] } ], "metadata": { + "colab": { + "collapsed_sections": [], + "provenance": [] + }, "kernelspec": { - "display_name": "Python 3.7", + "display_name": "Python 3 (ipykernel)", "language": "python", - "name": "python3.7" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -420,9 +248,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.0" + "version": "3.9.0" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 1 }