{"nbformat":4,"nbformat_minor":0,"metadata":{"kernelspec":{"display_name":"Python 3","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.8.8"},"colab":{"name":"classifier_for2_likelihood_interpolation_included-Copy1.ipynb","provenance":[],"collapsed_sections":[]},"accelerator":"GPU"},"cells":[{"cell_type":"code","metadata":{"id":"dtPGLizdwlkz","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1630016461031,"user_tz":-120,"elapsed":3754,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}},"outputId":"ebe5fb2f-7436-4afe-cd9b-9e2343fb3515"},"source":["import os\n","#os.environ[\"CUDA_DEVICE_ORDER\"]=\"PCI_BUS_ID\"\n","#os.environ[\"CUDA_VISIBLE_DEVICES\"]= \"7\"\n","import numpy as np\n","import glob\n","import pandas as pd\n","import matplotlib.pyplot as plt\n","import random \n","from collections import Counter\n","from sklearn.model_selection import train_test_split\n","from imblearn.over_sampling import RandomOverSampler\n","\n","import torch\n","import torch.nn as nn\n","import torch.optim as optim\n","import torch.nn.functional as F\n","from torch.utils import data\n","from torch.utils.data import DataLoader\n","from torch.utils.data import Dataset\n","device = 'cuda' \n","from sklearn.utils import shuffle\n","from sklearn.preprocessing import StandardScaler\n","from scipy.interpolate import interp1d\n","from IPython.core.interactiveshell import InteractiveShell\n","InteractiveShell.ast_node_interactivity = \"all\" # allows for multiple outputs per cell to be shown in notebook\n","%matplotlib inline\n","!pip install captum"],"execution_count":32,"outputs":[{"output_type":"stream","text":["Requirement already satisfied: captum in /usr/local/lib/python3.7/dist-packages (0.4.0)\n","Requirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from captum) (1.19.5)\n","Requirement already satisfied: torch>=1.2 in /usr/local/lib/python3.7/dist-packages (from captum) (1.9.0+cu102)\n","Requirement already satisfied: matplotlib in /usr/local/lib/python3.7/dist-packages (from captum) (3.2.2)\n","Requirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from torch>=1.2->captum) (3.7.4.3)\n","Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib->captum) (0.10.0)\n","Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->captum) (2.8.2)\n","Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->captum) (1.3.1)\n","Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->captum) (2.4.7)\n","Requirement already satisfied: six in /usr/local/lib/python3.7/dist-packages (from cycler>=0.10->matplotlib->captum) (1.15.0)\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"zorGTnC7GuWM","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1630016461032,"user_tz":-120,"elapsed":16,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}},"outputId":"f41a8a6a-79ab-446b-e3c2-763158bc0f6f"},"source":["from google.colab import drive\n","drive.mount('/content/drive')"],"execution_count":33,"outputs":[{"output_type":"stream","text":["Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"pUg_ghYjwlk9"},"source":["### Hyperparameters"]},{"cell_type":"code","metadata":{"id":"0zU4GDx9wlk9","executionInfo":{"status":"ok","timestamp":1630016461033,"user_tz":-120,"elapsed":10,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}}},"source":["n_classes = 2\n","lr = 1e-3\n","epochs = 100\n","batch_size = 128\n","episode_len = 100\n","episode_overlap = 80"],"execution_count":34,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"XlcY8N1Jwlk9"},"source":["### Data Setup"]},{"cell_type":"code","metadata":{"id":"0uU673yuH_TV","executionInfo":{"status":"ok","timestamp":1630016461034,"user_tz":-120,"elapsed":11,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}}},"source":["videos_fps_file = \"/content/drive/MyDrive/KinematicAnalyses/DLCfiles_prep/fps_file.csv\"\n","dir1 = \"/content/drive/MyDrive/KinematicAnalyses/DLCfiles_prep/MOPstroke_P3\"\n","dir2 = \"/content/drive/MyDrive/KinematicAnalyses/DLCfiles_prep/MOPMOSsham_P3\"\n","out_dir = \"/content/drive/MyDrive/KinematicAnalyses/Classifier_res/\"\n","labels_plot = [\"MOp stroke P3\", \"MOp_MOs sham P3\"]"],"execution_count":35,"outputs":[]},{"cell_type":"code","metadata":{"id":"v9hUFHh5wlk-","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1630016461034,"user_tz":-120,"elapsed":10,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}},"outputId":"5e9a1628-19bd-40a3-cbb5-a474c9977217"},"source":["# make dict with fps for every file {file_name: fps}\n","\n","fps_dict = dict()\n","with open(videos_fps_file, \"r\") as fps_file:\n"," for num, line in enumerate(fps_file):\n"," if num > 1:\n"," line = line.split(\",\")\n"," key = line[1].replace(\"_cropped\", \"\").strip(\"\\\"\")\n"," value = line[2].strip(\"\\\"\")\n"," fps_dict[key] = float(value)\n","\n","# find the highest frame rate in all files that are to compare\n","all_files = glob.glob(dir1 + \"/*_preprocessed_crop.csv\")\n","all_files.extend(glob.glob(dir2 + \"/*_preprocessed_crop.csv\"))\n","print(len(all_files))\n","max_fps = 0\n","for file in all_files:\n"," file = file.split(\"/\")[-1].split(\"_preprocessed\")[0]\n"," if fps_dict[file] > max_fps:\n"," max_fps = fps_dict[file] \n"," \n","# load file and interpolate the number of data points to adjust the frame rate \n","def load_and_interpolate(file_name, fps):\n"," df = pd.read_csv(file_name)\n"," new_df = pd.DataFrame()\n"," if fps < max_fps:\n"," for col in df:\n"," if col.split(\"_\")[0] != \"beam\":\n"," f = interp1d(range(len(df)), df[col], kind='cubic')\n"," index_new = np.linspace(0, len(df)-1, num=round(max_fps*(len(df[col])/fps)), endpoint=True)\n"," new_df[col] = f(index_new)\n"," else:\n"," for col in df:\n"," if col.split(\"_\")[0] != \"beam\":\n"," new_df[col]=df[col]\n"," return(new_df)"],"execution_count":36,"outputs":[{"output_type":"stream","text":["185\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"yqd3VYHVwlk-"},"source":["#### Read group 1"]},{"cell_type":"code","metadata":{"scrolled":true,"id":"FWVY1rS3wlk-","executionInfo":{"status":"ok","timestamp":1630016467188,"user_tz":-120,"elapsed":6161,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}}},"source":["file_directory = dir1\n","file_names = glob.glob(file_directory+\"/*preprocessed_crop.csv\")\n","len_MOPstroke_P3 = []\n","MOPstroke_P3 = []\n","for num, file_name in enumerate(file_names):\n"," file = file_name.split(\"/\")[-1].split(\"_preprocessed\")[0]\n"," df = load_and_interpolate(file_name, fps_dict[file])\n"," len_MOPstroke_P3.append(len(df))\n"," MOPstroke_P3.append(df.values)\n"],"execution_count":37,"outputs":[]},{"cell_type":"code","metadata":{"id":"SSkeAwrHwlk-","colab":{"base_uri":"https://localhost:8080/","height":384},"executionInfo":{"status":"ok","timestamp":1630016467195,"user_tz":-120,"elapsed":27,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}},"outputId":"585650e6-c21f-4a22-abb5-4394aaf342d8"},"source":["print(\"# videos in MOP Group:\", len(len_MOPstroke_P3))\n","print(\"shortest video in MOP Group is of length\", min(len_MOPstroke_P3))\n","print(\"longest video in MOP Group is of length\", max(len_MOPstroke_P3))\n","plt.hist(len_MOPstroke_P3)\n","plt.show()"],"execution_count":38,"outputs":[{"output_type":"stream","text":["# videos in MOP Group: 102\n","shortest video in MOP Group is of length 172\n","longest video in MOP Group is of length 2224\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":["(array([64., 25., 6., 3., 2., 0., 0., 0., 1., 1.]),\n"," array([ 172. , 377.2, 582.4, 787.6, 992.8, 1198. , 1403.2, 1608.4,\n"," 1813.6, 2018.8, 2224. ]),\n"," )"]},"metadata":{},"execution_count":38},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"t5nTSM5qwlk_"},"source":["#### Read group 2"]},{"cell_type":"code","metadata":{"scrolled":true,"id":"WDINeTZCwlk_","executionInfo":{"status":"ok","timestamp":1630016472569,"user_tz":-120,"elapsed":5383,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}}},"source":["file_directory = dir2\n","file_names = glob.glob(file_directory+\"/*preprocessed_crop.csv\")\n","len_sham_P3 = []\n","sham_P3 = []\n","for num, file_name in enumerate(file_names):\n"," file = file_name.split(\"/\")[-1].split(\"_preprocessed\")[0]\n"," df = load_and_interpolate(file_name, fps_dict[file])\n"," len_sham_P3.append(len(df))\n"," sham_P3.append(df.values)"],"execution_count":39,"outputs":[]},{"cell_type":"code","metadata":{"id":"WBALd-TCwlk_","colab":{"base_uri":"https://localhost:8080/","height":384},"executionInfo":{"status":"ok","timestamp":1630016472570,"user_tz":-120,"elapsed":42,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}},"outputId":"7544030e-0706-4ef3-8f68-dad0759295c4"},"source":["print(\"# videos in MOP Group:\", len(len_sham_P3))\n","print(\"shortest video in MOP Group is of length\", min(len_sham_P3))\n","print(\"longest video in MOP Group is of length\", max(len_sham_P3))\n","plt.hist(len_sham_P3)\n","plt.show()"],"execution_count":40,"outputs":[{"output_type":"stream","text":["# videos in MOP Group: 83\n","shortest video in MOP Group is of length 154\n","longest video in MOP Group is of length 518\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":["(array([ 9., 14., 22., 12., 8., 1., 4., 5., 2., 6.]),\n"," array([154. , 190.4, 226.8, 263.2, 299.6, 336. , 372.4, 408.8, 445.2,\n"," 481.6, 518. ]),\n"," )"]},"metadata":{},"execution_count":40},{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAXAAAAD4CAYAAAD1jb0+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAM9UlEQVR4nO3df6zd9V3H8edbQGYGcXS9aZoBXrYQTWO0a66IGSE43OSHsSwhBuKP/kFSo5BsUaPFJYp/mHQm29TEbHZSqW5jm9sIzXBzWEiIiTJvtwJliO22LtKU3iLZxv6ZAm//OJ+7nt3e23N7z7nn+33L85Gc3O/38/223xefm/Pie77nfHsiM5Ek1fNDXQeQJK2NBS5JRVngklSUBS5JRVngklTU+dM82MaNG3N2dnaah5Sk8g4ePPhCZs4sHZ9qgc/OzjI/Pz/NQ0pSeRHxzeXGvYQiSUVZ4JJUlAUuSUVZ4JJUlAUuSUVZ4JJUlAUuSUVZ4JJUlAUuSUVN9U5MnZvZXQ91ctxju2/u5LiSzo1n4JJUlAUuSUVZ4JJUlAUuSUVZ4JJUlAUuSUVZ4JJUlAUuSUVZ4JJUlAUuSUVZ4JJUlAUuSUVZ4JJUlAUuSUWNLPCIuCwiHo2Ir0bE0xHx7ja+ISIejogj7ecl6x9XkrRoNWfgLwO/m5lbgKuBOyNiC7ALOJCZVwIH2rokaUpGFnhmnsjML7fll4BngDcB24F9bbd9wC3rFVKSdKZzugYeEbPAW4HHgU2ZeaJteh7YNNFkkqSzWnWBR8RFwGeA92Tmd4a3ZWYCucKf2xkR8xExf+rUqbHCSpJOW1WBR8QFDMr7Y5n52TZ8MiI2t+2bgYXl/mxm7snMucycm5mZmURmSRKr+xRKAPcCz2TmB4Y27Qd2tOUdwIOTjydJWslqvpX+bcCvA09FxKE29ofAbuBTEXEH8E3gV9YnoiRpOSMLPDP/BYgVNl8/2TiSpNXyTkxJKsoCl6SiLHBJKsoCl6SiLHBJKsoCl6SiLHBJKsoCl6SiLHBJKsoCl6SiLHBJKsoCl6SiLHBJKsoCl6SiLHBJKsoCl6SiLHBJKsoCl6SiLHBJKsoCl6SiLHBJKsoCl6SiLHBJKsoCl6SiLHBJKsoCl6SiLHBJKsoCl6SiLHBJKsoCl6SiLHBJKsoCl6SiLHBJKsoCl6SiLHBJKsoCl6SiLHBJKsoCl6SiRhZ4ROyNiIWIODw0dk9EHI+IQ+1x0/rGlCQttZoz8PuAG5YZ/2Bmbm2Pf5xsLEnSKCMLPDMfA16cQhZJ0jkY5xr4XRHxZLvEcsnEEkmSVmWtBf4h4C3AVuAE8P6VdoyInRExHxHzp06dWuPhJElLranAM/NkZr6Sma8CHwGuOsu+ezJzLjPnZmZm1ppTkrTEmgo8IjYPrb4LOLzSvpKk9XH+qB0i4n7gOmBjRDwH/DFwXURsBRI4BvzmOmaUJC1jZIFn5u3LDN+7DlkkSefAOzElqSgLXJKKssAlqSgLXJKKGvkmpmB210NdR5CkM3gGLklFWeCSVJQFLklFWeCSVJQFLklFWeCSVJQFLklFWeCSVJQFLklFWeCSVJQFLklFWeCSVJQFLklFWeCSVJQFLklFWeCSVJQFLklFWeCSVJRfqaYzdPkVcsd239zZsaVqPAOXpKIscEkqygKXpKIscEkqygKXpKIscEkqygKXpKIscEkqygKXpKIscEkqygKXpKIscEkqygKXpKIscEkqygKXpKJGFnhE7I2IhYg4PDS2ISIejogj7ecl6xtTkrTUas7A7wNuWDK2CziQmVcCB9q6JGmKRhZ4Zj4GvLhkeDuwry3vA26ZcC5J0ghrvQa+KTNPtOXngU0r7RgROyNiPiLmT506tcbDSZKWGvtNzMxMIM+yfU9mzmXm3MzMzLiHkyQ1ay3wkxGxGaD9XJhcJEnSaqy1wPcDO9ryDuDBycSRJK3Waj5GeD/wr8CPR8RzEXEHsBt4R0QcAX6hrUuSpuj8UTtk5u0rbLp+wlkkSefAOzElqSgLXJKKssAlqaiR18D7YnbXQ11HkKRe8QxckoqywCWpKAtckoqywCWpKAtckoqywCWpKAtckoqywCWpqDI38ui1oasbto7tvrmT40rj8AxckoqywCWpKAtckoqywCWpKAtckoqywCWpKAtckoqywCWpKAtckoqywCWpKAtckoqywCWpKAtckoqywCWpKAtckoqywCWpKAtckoqywCWpKL9STdJrRldf2Qfr87V9noFLUlEWuCQVZYFLUlEWuCQVZYFLUlEWuCQVNdbHCCPiGPAS8ArwcmbOTSKUJGm0SXwO/Ocz84UJ/D2SpHPgJRRJKmrcM/AEvhgRCfx1Zu5ZukNE7AR2Alx++eVjHk7SpPx/uyvxtWjcM/BrMnMbcCNwZ0Rcu3SHzNyTmXOZOTczMzPm4SRJi8Yq8Mw83n4uAA8AV00ilCRptDUXeES8PiIuXlwG3gkcnlQwSdLZjXMNfBPwQEQs/j0fz8wvTCSVJGmkNRd4Zn4d+OkJZpEknQM/RihJRVngklSUBS5JRfmValLHuryhRrV5Bi5JRVngklSUBS5JRVngklSUBS5JRVngklSUBS5JRVngklSUBS5JRVngklSUBS5JRVngklSUBS5JRVngklSUBS5JRVngklSUBS5JRVngklSUX6kmaer8GrnJ8AxckoqywCWpKAtckoqywCWpKAtckoqywCWpKAtckoqywCWpKG/kkfDGEtXkGbgkFWWBS1JRFrgkFWWBS1JRFrgkFWWBS1JRYxV4RNwQEc9GxNGI2DWpUJKk0dZc4BFxHvBXwI3AFuD2iNgyqWCSpLMb5wz8KuBoZn49M/8H+ASwfTKxJEmjjHMn5puA/xpafw742aU7RcROYGdb/W5EPHsOx9gIvLDmhNNTIWeFjGDOSTPn5IyVMd431rF/bLnBdb+VPjP3AHvW8mcjYj4z5yYcaeIq5KyQEcw5aeacnD5mHOcSynHgsqH1S9uYJGkKxinwfweujIgrIuKHgduA/ZOJJUkaZc2XUDLz5Yi4C/gn4Dxgb2Y+PbFkA2u69NKBCjkrZARzTpo5J6d3GSMzu84gSVoD78SUpKIscEkqqrMCj4i9EbEQEYeHxu6JiOMRcag9bhradne7Zf/ZiPjFKea8LCIejYivRsTTEfHuNr4hIh6OiCPt5yVtPCLiL1vWJyNiW8c5ezWnEfG6iPhSRDzRcv5JG78iIh5veT7Z3hgnIi5s60fb9tkOM94XEd8YmsutbbyT3/lQ3vMi4isR8bm23pu5HJGzd/MZEcci4qmWZ76N9eq5/gMys5MHcC2wDTg8NHYP8HvL7LsFeAK4ELgC+Bpw3pRybga2teWLgf9sef4M2NXGdwHva8s3AZ8HArgaeLzjnL2a0zYvF7XlC4DH2zx9CritjX8Y+K22/NvAh9vybcAnO8x4H3DrMvt38jsfOv7vAB8HPtfWezOXI3L2bj6BY8DGJWO9eq4PPzo7A8/Mx4AXV7n7duATmfm9zPwGcJTBrfzrLjNPZOaX2/JLwDMM7kLdDuxru+0DbhnK+nc58G/AGyJic4c5V9LJnLZ5+W5bvaA9Eng78Ok2vnQ+F+f508D1EREdZVxJJ79zgIi4FLgZ+Ju2HvRoLlfKOUJn83mWPL15rg/r4zXwu9rLkb2LL1VY/rb9s5XTumgvOd/K4IxsU2aeaJueBza15c6zLskJPZvT9lL6ELAAPMzg7P9bmfnyMlm+n7Nt/zbwxmlnzMzFufzTNpcfjIgLl2ZcJv96+3Pg94FX2/ob6dlcrpBzUd/mM4EvRsTBGPwzINDj53rfCvxDwFuArcAJ4P3dxjktIi4CPgO8JzO/M7wtB6+nevF5zGVy9m5OM/OVzNzK4O7dq4Cf6DjSGZZmjIifBO5mkPVngA3AH3QYkYj4JWAhMw92mWOUs+Ts1Xw212TmNgb/yuqdEXHt8MY+PdehZwWemSfbE+dV4COcfknf6W37EXEBg1L8WGZ+tg2fXHy51H4udJ11uZx9ndOW7VvAo8DPMXj5uXhj2XCW7+ds238U+O8OMt7QLlNlZn4P+Fu6n8u3Ab8cEccY/Gugbwf+gv7N5Rk5I+KjPZxPMvN4+7kAPNAy9e65vqhXBb7k+tG7gMVPqOwHbmvvol8BXAl8aUqZArgXeCYzPzC0aT+woy3vAB4cGv+N9g711cC3h15+TT1n3+Y0ImYi4g1t+UeAdzC4Xv8ocGvbbel8Ls7zrcAj7Sxo2hn/Y+hJHAyugw7P5dR/55l5d2ZempmzDN6UfCQzf5UezeVZcv5a3+YzIl4fERcvLgPvbJl69Vz/AdN4p3S5B3A/g5f0/8vg2tEdwN8DTwFPtsnZPLT/exlcK30WuHGKOa9h8JLpSeBQe9zE4NrhAeAI8M/AhrZ/MPiii6+1/5a5jnP2ak6BnwK+0vIcBv6ojb+Zwf9AjgL/AFzYxl/X1o+27W/uMOMjbS4PAx/l9CdVOvmdL8l8Hac/3dGbuRyRs1fz2ebtifZ4GnhvG+/Vc3344a30klRUry6hSJJWzwKXpKIscEkqygKXpKIscEkqygKXpKIscEkq6v8AwZQTWEXD8hkAAAAASUVORK5CYII=\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"pIl1eDudwlk_"},"source":["Suppose we have an array with 3 rows and 6 columns. Columns indicate x1, y1, likelihood1, x2, y2, likelihood2 (like the data structure we have). By indexing we can separate x, y and likelihood columns. Later we use this idea in MyData_Q.\n","\n","a = np.array([[1,2,3,10,13,16],[4,5,6,11,14,17], [7,8,9,12,15,18]])\n","\n","\n"," - a[:,0::3] returns x1, x2\n","\n"," - a[:,1::3] returns y1, y2\n","\n"," - a[:,2::3] returns likelihood1, likelihood2\n"]},{"cell_type":"markdown","metadata":{"id":"6fhP34zxwlk_"},"source":["### Slice each video into episodes of length n"]},{"cell_type":"code","metadata":{"id":"FjuBQCddwllA","executionInfo":{"status":"ok","timestamp":1630016472571,"user_tz":-120,"elapsed":32,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}}},"source":["def sliced_vidoes(input_, n=episode_len, m=episode_overlap):\n"," #input is a list of lists\n"," #n: group size\n"," #m: overlap size\n"," input_sliced = []\n"," for k in range(len(input_)):\n"," input_sliced.extend([input_[k][i:i+n] for i in range(0, len(input_[k]), n-m)][:-n//(n-m)])\n"," return input_sliced"],"execution_count":41,"outputs":[]},{"cell_type":"code","metadata":{"id":"QYISTwltwllA","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1630016472572,"user_tz":-120,"elapsed":31,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}},"outputId":"a8b2e561-81be-4ba0-851d-63b651ad0b7c"},"source":["stroke_0 = sliced_vidoes(MOPstroke_P3)\n","print(\"number of episodes for MOPstroke_P3 group:\", len(stroke_0))\n","stroke_1 = sliced_vidoes(sham_P3)\n","print(\"number of episodes for sham_P3 group:\", len(stroke_1))"],"execution_count":42,"outputs":[{"output_type":"stream","text":["number of episodes for MOPstroke_P3 group: 1630\n","number of episodes for sham_P3 group: 805\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"zw7BcB-hwllA"},"source":["### split the dataset into training and test sets"]},{"cell_type":"code","metadata":{"id":"YXX3Jc4MwllA","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1630016472573,"user_tz":-120,"elapsed":24,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}},"outputId":"dc1ebc7d-ca07-4d6f-cd75-8b1a197c5ed4"},"source":["all_data = stroke_0 + stroke_1\n","all_labels = len(stroke_0)*[0] + len(stroke_1)*[1]\n","\n","data_lst, labels = shuffle(all_data, all_labels, random_state=10)\n","\n","# I pass an int to random_state such that the output is reproducible across multiple function calls\n","X_train, X_test, label_train, label_test = train_test_split(data_lst, labels, \n"," test_size=0.1, \n"," random_state=0\n"," )\n","\n","\n","print('len(train_set):', len(X_train))\n","print('len(test_set):', len(X_test))\n","print(\"training:\", sorted(Counter(label_train).items()))\n","print(\"test:\", sorted(Counter(label_test).items()))\n","#print(X_train)"],"execution_count":43,"outputs":[{"output_type":"stream","text":["len(train_set): 2191\n","len(test_set): 244\n","training: [(0, 1459), (1, 732)]\n","test: [(0, 171), (1, 73)]\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"IZZ8EohAXQlO","executionInfo":{"status":"ok","timestamp":1630016472574,"user_tz":-120,"elapsed":19,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}}},"source":["sc_x = StandardScaler()\n","train_concat = np.concatenate(X_train, axis=0)\n","test_concat = np.concatenate(X_test, axis=0)\n","train_scaled = sc_x.fit_transform(train_concat)\n","test_scaled = sc_x.transform(test_concat)\n","train_scaled[:, 2::3] = train_concat[:, 2::3]\n","test_scaled[:, 2::3] = test_concat [:, 2::3]\n","X_train = train_scaled.reshape(len(X_train), 100, 45)\n","X_test = test_scaled.reshape(len(X_test), 100, 45)"],"execution_count":44,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"O467s0XFwllA"},"source":["### balance the classes in each batch"]},{"cell_type":"markdown","metadata":{"id":"HrkvEC7UwllB"},"source":["If you have class imbalance, use a weighted sampler, so that you see all classes with equal probability\n","\n","The weighted sampling should only be used for training, to balance the classes in each batch, which hopefully helps the training.\n","\n","The validation and test accuracy is calculated on the complete datasets without any sampling (shuffle is also not needed here, since the order of the data won’t change the metrics)."]},{"cell_type":"code","metadata":{"id":"bVgaxbc20rw7","executionInfo":{"status":"ok","timestamp":1630016472574,"user_tz":-120,"elapsed":18,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}}},"source":["class MyData_Q(Dataset):\n","\n"," def __init__(self, train_data, train_label):\n"," self.train_data = train_data\n"," self.train_label = train_label\n","\n"," def __len__(self):\n"," return len(self.train_data)\n","\n"," def __getitem__(self, item):\n"," seq_len = len(self.train_data[item])\n"," X = self.train_data[item][:, 0::3]\n"," Y = self.train_data[item][:, 1::3]\n"," LH = self.train_data[item][:, 2::3] # likelihood\n"," LH_T = np.transpose(LH, (1, 0))\n"," \n"," #likelihood<0.6 -->quality index=0\n"," #0.6<=likelihood<0.8 -->quality index=1\n"," #0.8<=likelihood<=1 --> quality index=2\n"," \n"," quality_indices = 2 * np.logical_and(0.8<=LH_T, LH_T<=1.0) + 1 * np.logical_and(0.6<=LH_T, LH_T<0.8) \n"," return np.transpose(X, (1, 0)), np.transpose(Y, (1, 0)), quality_indices, self.train_label[item]\n"],"execution_count":45,"outputs":[]},{"cell_type":"code","metadata":{"id":"wvD_CXJ_wllB","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1630016472575,"user_tz":-120,"elapsed":19,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}},"outputId":"be16132c-b624-46c1-cefa-d61cc2532a98"},"source":["def Sampler(w_labels):\n"," count = Counter(w_labels) \n"," print(count)\n"," class_count = torch.from_numpy(np.array([count[i] for i in range(len(count))])) \n"," weight = 1./class_count \n"," samples_weight = np.array([weight[t] for t in w_labels])\n"," samples_weight=torch.from_numpy(samples_weight) # a sequence of weights, not necessary summing up to one\n"," #Sample elements from [0,..,len(weights)-1] with given probabilities (weights).\n"," sampler = torch.utils.data.WeightedRandomSampler(samples_weight, \n"," len(samples_weight), \n"," replacement=True,) \n"," return sampler\n","\n","\n","train_sampler = Sampler(label_train)\n","train_data = MyData_Q(X_train, label_train)\n","train_loader = DataLoader(train_data, batch_size=batch_size, sampler=train_sampler)\n","\n","test_data = MyData_Q(X_test, label_test)\n","test_loader = DataLoader(test_data, batch_size=len(test_data))"],"execution_count":46,"outputs":[{"output_type":"stream","text":["Counter({0: 1459, 1: 732})\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"-Uxj2wkmtdUo","executionInfo":{"status":"ok","timestamp":1630016472576,"user_tz":-120,"elapsed":16,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}}},"source":["x, y, q, t = next(iter(train_loader))"],"execution_count":47,"outputs":[]},{"cell_type":"code","metadata":{"id":"I8yT6_SuwllB","executionInfo":{"status":"ok","timestamp":1630016473490,"user_tz":-120,"elapsed":45,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}}},"source":["class classifier_conv(nn.Module):\n"," def __init__(self, in_channel, n_classes, hidden_unit=128):\n"," super(classifier_conv, self).__init__()\n"," self.n_classes = n_classes\n"," self.hidden_unit = hidden_unit\n"," self.encoder = nn.Sequential(\n"," nn.Conv1d(in_channel, hidden_unit, kernel_size=10, stride=5, padding=3, bias=False),\n"," nn.BatchNorm1d(hidden_unit),\n"," nn.ReLU(inplace=True),\n"," nn.Conv1d(hidden_unit, hidden_unit, kernel_size=8, stride=4, padding=2, bias=False),\n"," nn.BatchNorm1d(hidden_unit),\n"," nn.ReLU(inplace=True))\n"," self.fc = nn.Linear(hidden_unit*5, self.n_classes)\n"," \n"," def _weights_init(m):\n"," if isinstance(m, nn.Linear):\n"," nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')\n"," if isinstance(m, nn.Conv1d):\n"," nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')\n"," elif isinstance(m, nn.BatchNorm1d):\n"," nn.init.constant_(m.weight, 1)\n"," nn.init.constant_(m.bias, 0)\n","\n"," self.apply(_weights_init)\n","\n"," def forward(self, x):\n"," bs = x.size(0) \n"," x = self.encoder(x) #[bs, 38, 100] [bs, input_channels, L=100]\n"," #print(x.size()) # [bs, 128, 5]\n"," x = self.fc(x.view(bs, -1)) #[bs, 128*5]\n"," return x"],"execution_count":48,"outputs":[]},{"cell_type":"code","metadata":{"id":"k8NNGh-WwllC","executionInfo":{"status":"ok","timestamp":1630016473492,"user_tz":-120,"elapsed":44,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}}},"source":["##\n","x, y, q, t = next(iter(test_loader))\n","#print(q[100,0,-35:])\n","\n","nq = 3\n","onehot_quality = F.one_hot(q.view(1,-1).to(torch.int64), nq).view(q.size(0), q.size(1), q.size(2), nq)\n","onehot_quality = onehot_quality.permute(0, 1, 3, 2)\n","bs, nf, _, l = onehot_quality.size()\n","\n","X_encoded = torch.mul(x.unsqueeze(2).float(), onehot_quality.float()).reshape(bs, nf*nq, l)\n","#print(X_encoded[100,0:3,-35:])"],"execution_count":49,"outputs":[]},{"cell_type":"code","metadata":{"id":"c_0gwQ1CwllC","executionInfo":{"status":"ok","timestamp":1630016473493,"user_tz":-120,"elapsed":44,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}}},"source":["class classifier_fc(nn.Module):\n"," def __init__(self, in_channel, n_classes, hidden_unit=32):\n"," super(classifier_fc, self).__init__()\n"," self.n_classes = n_classes\n"," self.hidden_unit = hidden_unit\n"," self.encoder = nn.Sequential(\n"," nn.Linear(in_channel, hidden_unit),\n"," nn.ReLU(inplace=True),\n"," nn.Linear(hidden_unit, hidden_unit//2),\n"," nn.ReLU(inplace=True),)\n"," self.fc = nn.Linear(hidden_unit//2, self.n_classes)\n"," \n"," def _weights_init(m):\n"," if isinstance(m, nn.Linear):\n"," nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')\n"," if isinstance(m, nn.BatchNorm1d):\n"," nn.init.constant_(m.weight, 1)\n"," nn.init.constant_(m.bias, 0)\n","\n"," self.apply(_weights_init)\n","\n"," def forward(self, x):\n"," bs = x.size(0) \n"," x = self.encoder(x.view(bs, -1)) #[bs, input_channels*L]\n"," x = self.fc(x.view(bs, -1)) \n"," return x"],"execution_count":50,"outputs":[]},{"cell_type":"code","metadata":{"id":"LHt8adetwllC","executionInfo":{"status":"ok","timestamp":1630016473494,"user_tz":-120,"elapsed":43,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}}},"source":["class E2EStateClassifier(torch.nn.Module):\n"," def __init__(self, hidden_size, in_channel, encoding_size, output_size, cell_type='GRU', num_layers=1, dropout=0,\n"," bidirectional=True, device=device):\n"," super(E2EStateClassifier, self).__init__()\n"," self.hidden_size = hidden_size\n"," self.in_channel = in_channel\n"," self.num_layers = num_layers\n"," self.cell_type = cell_type\n"," self.encoding_size = encoding_size\n"," self.bidirectional = bidirectional\n"," self.output_size = output_size\n"," self.device = device\n","\n"," self.fc = torch.nn.Sequential(torch.nn.Linear(self.hidden_size*(int(self.bidirectional) + 1), self.encoding_size)).to(self.device)\n"," self.nn = torch.nn.Sequential(torch.nn.Linear(self.encoding_size, self.output_size)).to(self.device)\n"," if cell_type=='GRU':\n"," self.rnn = torch.nn.GRU(input_size=self.in_channel, hidden_size=self.hidden_size, num_layers=num_layers,\n"," batch_first=False, dropout=dropout, bidirectional=bidirectional).to(self.device)\n"," elif cell_type=='LSTM':\n"," self.rnn = torch.nn.LSTM(input_size=self.in_channel, hidden_size=self.hidden_size, num_layers=num_layers,\n"," batch_first=False, dropout=dropout, bidirectional=bidirectional).to(self.device)\n"," else:\n"," raise ValueError('Cell type not defined, must be one of the following {GRU, LSTM, RNN}')\n","\n"," def forward(self, x):\n"," x = x.permute(2,0,1)\n"," if self.cell_type=='GRU':\n"," past = torch.zeros(self.num_layers * (int(self.bidirectional) + 1), x.shape[1], self.hidden_size).to(self.device)\n"," elif self.cell_type=='LSTM':\n"," h_0 = torch.zeros(self.num_layers * (int(self.bidirectional) + 1), (x.shape[1]), self.hidden_size).to(self.device)\n"," c_0 = torch.zeros(self.num_layers * (int(self.bidirectional) + 1), (x.shape[1]), self.hidden_size).to(self.device)\n"," past = (h_0, c_0)\n"," out, _ = self.rnn(x, past) # out shape = [seq_len, batch_size, num_directions*hidden_size]\n"," encodings = self.fc(out[-1].squeeze(0))\n"," return self.nn(encodings)"],"execution_count":51,"outputs":[]},{"cell_type":"code","metadata":{"id":"6c-MHRkdwllD","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1630016473495,"user_tz":-120,"elapsed":42,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}},"outputId":"e68cdca9-9c28-4482-d781-43572074e816"},"source":["#Classifier = classifier_fc((15+15)*3*100, n_classes, hidden_unit=10)\n","#Classifier = classifier_conv(30, n_classes, hidden_unit=128)\n","Classifier = E2EStateClassifier(hidden_size=128, in_channel=(15+15)*3, encoding_size=10, output_size=n_classes, device=device, cell_type = \"GRU\")\n","Classifier = Classifier.to(device)\n","Classifier.train() "],"execution_count":52,"outputs":[{"output_type":"execute_result","data":{"text/plain":["E2EStateClassifier(\n"," (fc): Sequential(\n"," (0): Linear(in_features=256, out_features=10, bias=True)\n"," )\n"," (nn): Sequential(\n"," (0): Linear(in_features=10, out_features=2, bias=True)\n"," )\n"," (rnn): GRU(90, 128, bidirectional=True)\n",")"]},"metadata":{},"execution_count":52}]},{"cell_type":"markdown","metadata":{"id":"4kvYz3XjwllD"},"source":["### Optimizer"]},{"cell_type":"markdown","metadata":{"id":"q7GE-xL5wllD"},"source":["Weight decay is a regularization technique by adding a small penalty, usually the L2 norm of the weights (all the weights of the model), to the loss function.\n","PyTorch applies weight decay to both weights and bias"]},{"cell_type":"code","metadata":{"id":"6uP5xmcpwllD","executionInfo":{"status":"ok","timestamp":1630016473496,"user_tz":-120,"elapsed":37,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}}},"source":["optimizer = optim.Adam(Classifier.parameters(), lr=lr, weight_decay=1e-6) "],"execution_count":53,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"ghVTMC7ewllD"},"source":["### Criterion"]},{"cell_type":"code","metadata":{"id":"vR30tnGXwllD","executionInfo":{"status":"ok","timestamp":1630016473496,"user_tz":-120,"elapsed":35,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}}},"source":["criterion = nn.CrossEntropyLoss() "],"execution_count":54,"outputs":[]},{"cell_type":"code","metadata":{"id":"1MAqWmlHwllE","executionInfo":{"status":"ok","timestamp":1630016473497,"user_tz":-120,"elapsed":30,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}}},"source":["def onehot_encode(x, q, nq = 3):\n"," onehot_quality = F.one_hot(q.view(1,-1).to(torch.int64), nq).view(q.size(0), q.size(1), q.size(2), nq)\n"," onehot_quality = onehot_quality.permute(0, 1, 3, 2)\n"," bs, nf, _, l = onehot_quality.size()\n","\n"," x_encoded = torch.mul(x.unsqueeze(2).float(), onehot_quality.float()).reshape(bs, nf*nq, l) \n"," return x_encoded"],"execution_count":55,"outputs":[]},{"cell_type":"code","metadata":{"id":"gx3NCD6zwllE","executionInfo":{"status":"ok","timestamp":1630016473498,"user_tz":-120,"elapsed":29,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}}},"source":["def train(epoch, Classifier, train_loader, device, optimizer):\n"," Classifier.train()\n"," total_loss = 0\n"," total_acc = 0\n"," for i, (x, y, q, target) in enumerate(train_loader):\n"," x, y, q, target = x.to(device), y.to(device), q.to(device), target.to(device) \n"," x_encoded = onehot_encode(x, q)\n"," y_encoded = onehot_encode(y, q)\n"," \n"," input_ = torch.cat((x_encoded, y_encoded), dim=1)\n"," optimizer.zero_grad()\n"," logit = Classifier(input_.float())\n"," \n"," loss = criterion(logit, target)\n"," total_loss+=loss.item()\n"," \n"," loss.backward()\n"," optimizer.step()\n"," \n"," pred = logit.max(1, keepdim=True)[1] # get the index of the max log-probability\n"," acc = 1.*pred.eq(target.view_as(pred)).sum().item()/len(x)\n"," total_acc+=acc\n"," \n"," total_loss = total_loss/float(len(train_loader))\n"," total_acc = total_acc/float(len(train_loader))\n"," print(f'Train epoch {epoch} ----> loss_train:{loss.item()}, accuracy_train:{acc*100}')\n"," return total_loss, total_acc"],"execution_count":56,"outputs":[]},{"cell_type":"code","metadata":{"id":"VRDQ8yAswllE","executionInfo":{"status":"ok","timestamp":1630016473499,"user_tz":-120,"elapsed":28,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}}},"source":["def test(epoch, Classifier, test_loader, device):\n"," Classifier.eval()\n"," with torch.no_grad():\n"," x, y, q, target = next(iter(test_loader))\n"," x, y, q, target = x.to(device), y.to(device), q.to(device), target.to(device)\n"," x_encoded = onehot_encode(x, q)\n"," y_encoded = onehot_encode(y, q)\n"," \n"," input_ = torch.cat((x_encoded, y_encoded), dim=1)\n","\n"," logit = Classifier(input_.float())\n"," loss = criterion(logit, target)\n","\n"," pred = logit.max(1, keepdim=True)[1] # get the index of the max log-probability\n"," acc = 1.*pred.eq(target.view_as(pred)).sum().item()/len(x)\n","\n"," print(f'Test epoch {epoch} ----> loss_test:{loss.item()}, accuracy_test:{acc*100}') \n"," return loss, acc "],"execution_count":57,"outputs":[]},{"cell_type":"code","metadata":{"tags":[],"id":"CSNhvkQ4wllE","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1630016603306,"user_tz":-120,"elapsed":129834,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}},"outputId":"73b0de01-825c-4666-bedd-bb7818b88570"},"source":["if not os.path.isdir('checkpoint'):\n"," os.makedirs('checkpoint')\n","\n","train_loss_lst = []\n","train_acc_lst = []\n","test_loss_lst = []\n","test_acc_lst = []\n","for epoch in range(epochs):\n"," train_loss, train_acc = train(epoch, Classifier, train_loader, device, optimizer)\n"," train_loss_lst.append(train_loss)\n"," train_acc_lst.append(train_acc)\n"," test_loss, test_acc = test(epoch, Classifier, test_loader, device)\n"," test_loss_lst.append(test_loss)\n"," test_acc_lst.append(test_acc)\n"," \n"," \n","# torch.save(\n","# {'model': Classifier.state_dict()},\n","# f'checkpoint/classifier.pt',)"],"execution_count":58,"outputs":[{"output_type":"stream","text":["Train epoch 0 ----> loss_train:0.50072181224823, accuracy_train:86.66666666666667\n","Test epoch 0 ----> loss_test:0.5565370917320251, accuracy_test:68.44262295081968\n","Train epoch 1 ----> loss_train:0.5144981145858765, accuracy_train:86.66666666666667\n","Test epoch 1 ----> loss_test:0.4894435703754425, accuracy_test:76.22950819672131\n","Train epoch 2 ----> loss_train:0.638618528842926, accuracy_train:46.666666666666664\n","Test epoch 2 ----> loss_test:0.5202725529670715, accuracy_test:73.36065573770492\n","Train epoch 3 ----> loss_train:0.498960942029953, accuracy_train:80.0\n","Test epoch 3 ----> loss_test:0.501947283744812, accuracy_test:76.63934426229508\n","Train epoch 4 ----> loss_train:0.434619277715683, accuracy_train:86.66666666666667\n","Test epoch 4 ----> loss_test:0.4861672520637512, accuracy_test:78.27868852459017\n","Train epoch 5 ----> loss_train:0.5089713335037231, accuracy_train:80.0\n","Test epoch 5 ----> loss_test:0.43879497051239014, accuracy_test:82.37704918032787\n","Train epoch 6 ----> loss_train:0.5331366062164307, accuracy_train:66.66666666666666\n","Test epoch 6 ----> loss_test:0.41701582074165344, accuracy_test:83.60655737704919\n","Train epoch 7 ----> loss_train:0.556184709072113, accuracy_train:73.33333333333333\n","Test epoch 7 ----> loss_test:0.48609787225723267, accuracy_test:78.27868852459017\n","Train epoch 8 ----> loss_train:0.3908292353153229, accuracy_train:80.0\n","Test epoch 8 ----> loss_test:0.5047057271003723, accuracy_test:80.73770491803278\n","Train epoch 9 ----> loss_train:0.3973643481731415, accuracy_train:73.33333333333333\n","Test epoch 9 ----> loss_test:0.38848280906677246, accuracy_test:84.42622950819673\n","Train epoch 10 ----> loss_train:0.662800669670105, accuracy_train:66.66666666666666\n","Test epoch 10 ----> loss_test:0.4600295424461365, accuracy_test:78.27868852459017\n","Train epoch 11 ----> loss_train:0.6342880725860596, accuracy_train:53.333333333333336\n","Test epoch 11 ----> loss_test:0.4014802873134613, accuracy_test:83.60655737704919\n","Train epoch 12 ----> loss_train:0.23578602075576782, accuracy_train:93.33333333333333\n","Test epoch 12 ----> loss_test:0.4313466548919678, accuracy_test:79.91803278688525\n","Train epoch 13 ----> loss_train:0.2125960737466812, accuracy_train:100.0\n","Test epoch 13 ----> loss_test:0.4224534034729004, accuracy_test:81.55737704918032\n","Train epoch 14 ----> loss_train:0.19668173789978027, accuracy_train:100.0\n","Test epoch 14 ----> loss_test:0.3864031732082367, accuracy_test:85.65573770491804\n","Train epoch 15 ----> loss_train:0.3244040906429291, accuracy_train:86.66666666666667\n","Test epoch 15 ----> loss_test:0.425106406211853, accuracy_test:81.9672131147541\n","Train epoch 16 ----> loss_train:0.3993677496910095, accuracy_train:80.0\n","Test epoch 16 ----> loss_test:0.4017372131347656, accuracy_test:80.73770491803278\n","Train epoch 17 ----> loss_train:0.23289324343204498, accuracy_train:93.33333333333333\n","Test epoch 17 ----> loss_test:0.387134850025177, accuracy_test:84.8360655737705\n","Train epoch 18 ----> loss_train:0.610648512840271, accuracy_train:60.0\n","Test epoch 18 ----> loss_test:0.36716607213020325, accuracy_test:86.0655737704918\n","Train epoch 19 ----> loss_train:0.23094287514686584, accuracy_train:93.33333333333333\n","Test epoch 19 ----> loss_test:0.3503781259059906, accuracy_test:83.60655737704919\n","Train epoch 20 ----> loss_train:0.2411852777004242, accuracy_train:86.66666666666667\n","Test epoch 20 ----> loss_test:0.3412906527519226, accuracy_test:86.88524590163934\n","Train epoch 21 ----> loss_train:0.5193917751312256, accuracy_train:73.33333333333333\n","Test epoch 21 ----> loss_test:0.3138628304004669, accuracy_test:88.11475409836066\n","Train epoch 22 ----> loss_train:0.19448810815811157, accuracy_train:93.33333333333333\n","Test epoch 22 ----> loss_test:0.3313533365726471, accuracy_test:86.88524590163934\n","Train epoch 23 ----> loss_train:0.414404034614563, accuracy_train:73.33333333333333\n","Test epoch 23 ----> loss_test:0.3215879797935486, accuracy_test:86.0655737704918\n","Train epoch 24 ----> loss_train:0.3939465880393982, accuracy_train:73.33333333333333\n","Test epoch 24 ----> loss_test:0.5650485157966614, accuracy_test:69.26229508196722\n","Train epoch 25 ----> loss_train:0.3674493730068207, accuracy_train:80.0\n","Test epoch 25 ----> loss_test:0.46158814430236816, accuracy_test:77.04918032786885\n","Train epoch 26 ----> loss_train:0.21139144897460938, accuracy_train:100.0\n","Test epoch 26 ----> loss_test:0.3762306571006775, accuracy_test:87.70491803278688\n","Train epoch 27 ----> loss_train:0.24360625445842743, accuracy_train:86.66666666666667\n","Test epoch 27 ----> loss_test:0.34165677428245544, accuracy_test:84.42622950819673\n","Train epoch 28 ----> loss_train:0.314240962266922, accuracy_train:93.33333333333333\n","Test epoch 28 ----> loss_test:0.493245005607605, accuracy_test:78.68852459016394\n","Train epoch 29 ----> loss_train:0.48229771852493286, accuracy_train:66.66666666666666\n","Test epoch 29 ----> loss_test:0.3717788755893707, accuracy_test:81.9672131147541\n","Train epoch 30 ----> loss_train:0.3252904713153839, accuracy_train:86.66666666666667\n","Test epoch 30 ----> loss_test:0.35426631569862366, accuracy_test:84.42622950819673\n","Train epoch 31 ----> loss_train:0.30262789130210876, accuracy_train:86.66666666666667\n","Test epoch 31 ----> loss_test:0.351441353559494, accuracy_test:83.60655737704919\n","Train epoch 32 ----> loss_train:0.21227210760116577, accuracy_train:93.33333333333333\n","Test epoch 32 ----> loss_test:0.3321661353111267, accuracy_test:85.65573770491804\n","Train epoch 33 ----> loss_train:0.2600800693035126, accuracy_train:86.66666666666667\n","Test epoch 33 ----> loss_test:0.3565691113471985, accuracy_test:84.01639344262296\n","Train epoch 34 ----> loss_train:0.16956046223640442, accuracy_train:93.33333333333333\n","Test epoch 34 ----> loss_test:0.3794771730899811, accuracy_test:83.60655737704919\n","Train epoch 35 ----> loss_train:0.2076396346092224, accuracy_train:86.66666666666667\n","Test epoch 35 ----> loss_test:0.26697811484336853, accuracy_test:85.65573770491804\n","Train epoch 36 ----> loss_train:0.1492958962917328, accuracy_train:93.33333333333333\n","Test epoch 36 ----> loss_test:0.2497561275959015, accuracy_test:89.75409836065575\n","Train epoch 37 ----> loss_train:0.09298346936702728, accuracy_train:100.0\n","Test epoch 37 ----> loss_test:0.2428228259086609, accuracy_test:88.11475409836066\n","Train epoch 38 ----> loss_train:0.03686772659420967, accuracy_train:100.0\n","Test epoch 38 ----> loss_test:0.2709486782550812, accuracy_test:86.47540983606558\n","Train epoch 39 ----> loss_train:0.04874860867857933, accuracy_train:100.0\n","Test epoch 39 ----> loss_test:0.3264549970626831, accuracy_test:86.0655737704918\n","Train epoch 40 ----> loss_train:0.052517570555210114, accuracy_train:100.0\n","Test epoch 40 ----> loss_test:0.26367226243019104, accuracy_test:88.52459016393442\n","Train epoch 41 ----> loss_train:0.18150322139263153, accuracy_train:93.33333333333333\n","Test epoch 41 ----> loss_test:0.22230619192123413, accuracy_test:90.57377049180327\n","Train epoch 42 ----> loss_train:0.06426363438367844, accuracy_train:93.33333333333333\n","Test epoch 42 ----> loss_test:0.21696746349334717, accuracy_test:91.39344262295081\n","Train epoch 43 ----> loss_train:0.1148812472820282, accuracy_train:93.33333333333333\n","Test epoch 43 ----> loss_test:0.24720720946788788, accuracy_test:90.1639344262295\n","Train epoch 44 ----> loss_train:0.2639178931713104, accuracy_train:93.33333333333333\n","Test epoch 44 ----> loss_test:0.3643527925014496, accuracy_test:84.8360655737705\n","Train epoch 45 ----> loss_train:0.15969489514827728, accuracy_train:93.33333333333333\n","Test epoch 45 ----> loss_test:0.3031688630580902, accuracy_test:88.9344262295082\n","Train epoch 46 ----> loss_train:0.01594209112226963, accuracy_train:100.0\n","Test epoch 46 ----> loss_test:0.23534666001796722, accuracy_test:91.80327868852459\n","Train epoch 47 ----> loss_train:0.14267171919345856, accuracy_train:93.33333333333333\n","Test epoch 47 ----> loss_test:0.21389374136924744, accuracy_test:92.62295081967213\n","Train epoch 48 ----> loss_train:0.05601683631539345, accuracy_train:100.0\n","Test epoch 48 ----> loss_test:0.20240157842636108, accuracy_test:91.80327868852459\n","Train epoch 49 ----> loss_train:0.08283224701881409, accuracy_train:93.33333333333333\n","Test epoch 49 ----> loss_test:0.22367405891418457, accuracy_test:92.62295081967213\n","Train epoch 50 ----> loss_train:0.4089038074016571, accuracy_train:86.66666666666667\n","Test epoch 50 ----> loss_test:0.23002968728542328, accuracy_test:88.9344262295082\n","Train epoch 51 ----> loss_train:0.04266216233372688, accuracy_train:100.0\n","Test epoch 51 ----> loss_test:0.268976628780365, accuracy_test:86.47540983606558\n","Train epoch 52 ----> loss_train:0.016194330528378487, accuracy_train:100.0\n","Test epoch 52 ----> loss_test:0.20723119378089905, accuracy_test:92.62295081967213\n","Train epoch 53 ----> loss_train:0.1983640193939209, accuracy_train:86.66666666666667\n","Test epoch 53 ----> loss_test:0.2365255355834961, accuracy_test:90.98360655737704\n","Train epoch 54 ----> loss_train:0.052192993462085724, accuracy_train:100.0\n","Test epoch 54 ----> loss_test:0.22560298442840576, accuracy_test:90.98360655737704\n","Train epoch 55 ----> loss_train:0.018273767083883286, accuracy_train:100.0\n","Test epoch 55 ----> loss_test:0.300938218832016, accuracy_test:89.34426229508196\n","Train epoch 56 ----> loss_train:0.029254388064146042, accuracy_train:100.0\n","Test epoch 56 ----> loss_test:0.21089258790016174, accuracy_test:93.0327868852459\n","Train epoch 57 ----> loss_train:0.003264013212174177, accuracy_train:100.0\n","Test epoch 57 ----> loss_test:0.20047633349895477, accuracy_test:92.21311475409836\n","Train epoch 58 ----> loss_train:0.11391778290271759, accuracy_train:93.33333333333333\n","Test epoch 58 ----> loss_test:0.18879885971546173, accuracy_test:94.67213114754098\n","Train epoch 59 ----> loss_train:0.057573847472667694, accuracy_train:93.33333333333333\n","Test epoch 59 ----> loss_test:0.4323604106903076, accuracy_test:90.98360655737704\n","Train epoch 60 ----> loss_train:0.16537858545780182, accuracy_train:93.33333333333333\n","Test epoch 60 ----> loss_test:0.3042074143886566, accuracy_test:91.39344262295081\n","Train epoch 61 ----> loss_train:0.029696408659219742, accuracy_train:100.0\n","Test epoch 61 ----> loss_test:0.17089226841926575, accuracy_test:93.44262295081968\n","Train epoch 62 ----> loss_train:0.09398171305656433, accuracy_train:93.33333333333333\n","Test epoch 62 ----> loss_test:0.2242358773946762, accuracy_test:93.0327868852459\n","Train epoch 63 ----> loss_train:0.04352137818932533, accuracy_train:100.0\n","Test epoch 63 ----> loss_test:0.3910592496395111, accuracy_test:92.21311475409836\n","Train epoch 64 ----> loss_train:0.09287381917238235, accuracy_train:93.33333333333333\n","Test epoch 64 ----> loss_test:0.27094778418540955, accuracy_test:91.80327868852459\n","Train epoch 65 ----> loss_train:0.10542603582143784, accuracy_train:93.33333333333333\n","Test epoch 65 ----> loss_test:0.2800958454608917, accuracy_test:93.85245901639344\n","Train epoch 66 ----> loss_train:0.5572029948234558, accuracy_train:80.0\n","Test epoch 66 ----> loss_test:0.432410329580307, accuracy_test:87.70491803278688\n","Train epoch 67 ----> loss_train:0.06798195093870163, accuracy_train:100.0\n","Test epoch 67 ----> loss_test:0.3009948134422302, accuracy_test:88.11475409836066\n","Train epoch 68 ----> loss_train:0.015737658366560936, accuracy_train:100.0\n","Test epoch 68 ----> loss_test:0.22030843794345856, accuracy_test:91.39344262295081\n","Train epoch 69 ----> loss_train:0.022785933688282967, accuracy_train:100.0\n","Test epoch 69 ----> loss_test:0.17838546633720398, accuracy_test:94.67213114754098\n","Train epoch 70 ----> loss_train:0.011274651624262333, accuracy_train:100.0\n","Test epoch 70 ----> loss_test:0.1593770980834961, accuracy_test:95.08196721311475\n","Train epoch 71 ----> loss_train:0.0003209850692655891, accuracy_train:100.0\n","Test epoch 71 ----> loss_test:0.17241452634334564, accuracy_test:95.08196721311475\n","Train epoch 72 ----> loss_train:0.003324038116261363, accuracy_train:100.0\n","Test epoch 72 ----> loss_test:0.18065917491912842, accuracy_test:93.85245901639344\n","Train epoch 73 ----> loss_train:0.002590508433058858, accuracy_train:100.0\n","Test epoch 73 ----> loss_test:0.14827600121498108, accuracy_test:95.49180327868852\n","Train epoch 74 ----> loss_train:0.0017337917815893888, accuracy_train:100.0\n","Test epoch 74 ----> loss_test:0.19378729164600372, accuracy_test:95.08196721311475\n","Train epoch 75 ----> loss_train:0.004031042102724314, accuracy_train:100.0\n","Test epoch 75 ----> loss_test:0.18208518624305725, accuracy_test:95.08196721311475\n","Train epoch 76 ----> loss_train:0.0017815598985180259, accuracy_train:100.0\n","Test epoch 76 ----> loss_test:0.18251711130142212, accuracy_test:95.08196721311475\n","Train epoch 77 ----> loss_train:0.008133621886372566, accuracy_train:100.0\n","Test epoch 77 ----> loss_test:0.17510253190994263, accuracy_test:95.90163934426229\n","Train epoch 78 ----> loss_train:0.0011927328305318952, accuracy_train:100.0\n","Test epoch 78 ----> loss_test:0.17269931733608246, accuracy_test:94.67213114754098\n","Train epoch 79 ----> loss_train:0.00044058248749934137, accuracy_train:100.0\n","Test epoch 79 ----> loss_test:0.17271451652050018, accuracy_test:95.08196721311475\n","Train epoch 80 ----> loss_train:0.0008920478285290301, accuracy_train:100.0\n","Test epoch 80 ----> loss_test:0.1864911913871765, accuracy_test:94.26229508196722\n","Train epoch 81 ----> loss_train:0.000158652663230896, accuracy_train:100.0\n","Test epoch 81 ----> loss_test:0.17999692261219025, accuracy_test:94.67213114754098\n","Train epoch 82 ----> loss_train:0.00014910721802152693, accuracy_train:100.0\n","Test epoch 82 ----> loss_test:0.19288823008537292, accuracy_test:94.67213114754098\n","Train epoch 83 ----> loss_train:0.005794026888906956, accuracy_train:100.0\n","Test epoch 83 ----> loss_test:0.2012569010257721, accuracy_test:94.67213114754098\n","Train epoch 84 ----> loss_train:9.496918210061267e-05, accuracy_train:100.0\n","Test epoch 84 ----> loss_test:0.20834201574325562, accuracy_test:93.85245901639344\n","Train epoch 85 ----> loss_train:0.0023733123671263456, accuracy_train:100.0\n","Test epoch 85 ----> loss_test:0.21430033445358276, accuracy_test:93.85245901639344\n","Train epoch 86 ----> loss_train:4.4585376599570736e-05, accuracy_train:100.0\n","Test epoch 86 ----> loss_test:0.2628557085990906, accuracy_test:93.85245901639344\n","Train epoch 87 ----> loss_train:8.006035204743966e-05, accuracy_train:100.0\n","Test epoch 87 ----> loss_test:0.20230112969875336, accuracy_test:93.85245901639344\n","Train epoch 88 ----> loss_train:0.00029515137430280447, accuracy_train:100.0\n","Test epoch 88 ----> loss_test:0.1977137178182602, accuracy_test:94.26229508196722\n","Train epoch 89 ----> loss_train:0.0018616248853504658, accuracy_train:100.0\n","Test epoch 89 ----> loss_test:0.224327951669693, accuracy_test:94.67213114754098\n","Train epoch 90 ----> loss_train:0.00030044352752156556, accuracy_train:100.0\n","Test epoch 90 ----> loss_test:0.19583286345005035, accuracy_test:93.85245901639344\n","Train epoch 91 ----> loss_train:0.00015955293201841414, accuracy_train:100.0\n","Test epoch 91 ----> loss_test:0.21602772176265717, accuracy_test:94.26229508196722\n","Train epoch 92 ----> loss_train:0.001483868807554245, accuracy_train:100.0\n","Test epoch 92 ----> loss_test:0.24502329528331757, accuracy_test:93.85245901639344\n","Train epoch 93 ----> loss_train:0.00026790419360622764, accuracy_train:100.0\n","Test epoch 93 ----> loss_test:0.23526188731193542, accuracy_test:93.44262295081968\n","Train epoch 94 ----> loss_train:2.0343308278825134e-05, accuracy_train:100.0\n","Test epoch 94 ----> loss_test:0.2672439217567444, accuracy_test:93.85245901639344\n","Train epoch 95 ----> loss_train:0.00010300715075572953, accuracy_train:100.0\n","Test epoch 95 ----> loss_test:0.2671581506729126, accuracy_test:93.44262295081968\n","Train epoch 96 ----> loss_train:0.00018610352708492428, accuracy_train:100.0\n","Test epoch 96 ----> loss_test:0.2703568935394287, accuracy_test:93.85245901639344\n","Train epoch 97 ----> loss_train:4.7753997932886705e-05, accuracy_train:100.0\n","Test epoch 97 ----> loss_test:0.2562352120876312, accuracy_test:93.44262295081968\n","Train epoch 98 ----> loss_train:1.0251977755615371e-06, accuracy_train:100.0\n","Test epoch 98 ----> loss_test:0.2602320909500122, accuracy_test:93.44262295081968\n","Train epoch 99 ----> loss_train:1.0649290516084875e-06, accuracy_train:100.0\n","Test epoch 99 ----> loss_test:0.2653295397758484, accuracy_test:93.85245901639344\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"Pax3tx6kwllE","colab":{"base_uri":"https://localhost:8080/","height":675},"executionInfo":{"status":"ok","timestamp":1630016604092,"user_tz":-120,"elapsed":825,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}},"outputId":"c3f5b8e2-caa8-4fae-90a9-595092b6a3bf"},"source":["plt.figure(figsize=[15,10])\n","plt.subplot(2, 2, 1)\n","plt.ylim([0,1])\n","plt.plot(train_loss_lst)\n","plt.title(\"Training Loss\")\n","plt.subplot(2, 2, 2)\n","plt.ylim([0,1])\n","plt.plot(test_loss_lst)\n","plt.title(\"Test Loss\")\n","plt.subplot(2, 2, 3)\n","plt.ylim([0.5,1])\n","plt.plot(train_acc_lst)\n","plt.title(\"Training Accuracy\")\n","plt.subplot(2, 2, 4)\n","plt.ylim([0.5,1])\n","plt.plot(test_acc_lst)\n","plt.title(\"Test Accuracy\")\n","#plt.savefig(out_dir + str(labels_plot) + \"performance_plot.pdf\")\n","plt.show()"],"execution_count":59,"outputs":[{"output_type":"execute_result","data":{"text/plain":["
"]},"metadata":{},"execution_count":59},{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":59},{"output_type":"execute_result","data":{"text/plain":["(0.0, 1.0)"]},"metadata":{},"execution_count":59},{"output_type":"execute_result","data":{"text/plain":["[]"]},"metadata":{},"execution_count":59},{"output_type":"execute_result","data":{"text/plain":["Text(0.5, 1.0, 'Training Loss')"]},"metadata":{},"execution_count":59},{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":59},{"output_type":"execute_result","data":{"text/plain":["(0.0, 1.0)"]},"metadata":{},"execution_count":59},{"output_type":"execute_result","data":{"text/plain":["[]"]},"metadata":{},"execution_count":59},{"output_type":"execute_result","data":{"text/plain":["Text(0.5, 1.0, 'Test Loss')"]},"metadata":{},"execution_count":59},{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":59},{"output_type":"execute_result","data":{"text/plain":["(0.5, 1.0)"]},"metadata":{},"execution_count":59},{"output_type":"execute_result","data":{"text/plain":["[]"]},"metadata":{},"execution_count":59},{"output_type":"execute_result","data":{"text/plain":["Text(0.5, 1.0, 'Training Accuracy')"]},"metadata":{},"execution_count":59},{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":59},{"output_type":"execute_result","data":{"text/plain":["(0.5, 1.0)"]},"metadata":{},"execution_count":59},{"output_type":"execute_result","data":{"text/plain":["[]"]},"metadata":{},"execution_count":59},{"output_type":"execute_result","data":{"text/plain":["Text(0.5, 1.0, 'Test Accuracy')"]},"metadata":{},"execution_count":59},{"output_type":"display_data","data":{"image/png":"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gtEaoIiISLTSHCkiImPFNQrvUUTvw3rLg48d6XuhMeYTBO4okpSUtHzevHmj8PEiIhLt1q5dW2OtzRnvcYwDzZEiIjKgwebH0QhqEbPW3g/cD7BixQq7Zs2aE/nxIiIyTowxB8d7DNFOc6SIyNQz2Pw4Gl0fKwic5xRSHHxMRERkqtMcKSIiIzIaQW0V8OFgZ6vTgEZrbb+SDhERkSlIc6SIiIzIkKWPxpiHgfOAbGNMOfCfQAyAtfaXwJPA5cAeoAX42FgNVkREJJpojhQRkbEyZFCz1t40xPMW+OyojUhERGSC0BwpIiJjZTRKH0VERERERGQUKaiJiIiIiIhEGQU1ERERERGRKKOgJiIiIiIiEmUU1ERERERERKKMgpqIiIiIiEiUUVATERERERGJMgpqIiIiIiIiUUZBTUREREREJMooqImIiIiIiEQZBTUREREREZEoo6AmIiIiIiISZRTUREREREREooyCmoiIiIiISJRRUBMREREREYkyCmoiIiIiIiJRRkFNREREREQkyiioiYiIiIiIRBkFNRERERERkSijoCYiIiIiIhJlFNRERERERESijIKaiIiIiIhIlFFQExERERERiTIKaiIiIiIiIlFGQU1ERERERCTKKKiJiIiIiIhEGQU1ERERERGRKKOgJiIiIiIiEmUU1ERERERERKKMgpqIiIiIiEiUUVATERERERGJMgpqIiIiIiIiUUZBTUREREREJMooqImIiIiIiEQZBTUREREREZEoo6AmIiIiIiISZRTUREREREREooyCmoiIiIiISJRRUBMREREREYkyCmoiIiIiIiJRRkFNREREREQkykQU1Iwxlxpjdhpj9hhjvhrm+VJjzEvGmPXGmE3GmMtHf6giIiLRRfOjiIiMlSGDmjHGCdwHXAYsAG4yxizoc9nXgUestUuBG4Gfj/ZARUREoonmRxERGUuRrKidCuyx1u6z1rYDfwKu6XONBVKDv04DKkdviCIiIlFJ86OIiIyZSIJaEXC4x+/Lg4/1dBfwQWNMOfAkcEe4NzLGfMIYs8YYs6a6unoEwxUREYkaozY/guZIERHpbbSaidwE/N5aWwxcDjxgjOn33tba+621K6y1K3Jyckbpo0VERKJWRPMjaI4UEZHeIglqFUBJj98XBx/r6V+ARwCstW8B8UD2aAxQREQkSml+FBGRMRNJUHsXmG2MmW6MiSWwGXpVn2sOARcCGGPmE5iIVLchIiKTmeZHEREZM0MGNWutD7gdeAbYTqB71VZjzDeNMVcHL7sTuM0YsxF4GPiotdaO1aBFRETGm+ZHEREZS65ILrLWPklgE3TPx77R49fbgDNHd2giIiLRTfOjiIiMldFqJiIiIiIiIiKjREFNREREREQkyiioiYiIiIiIRBkFNRERERERkSijoCYiIiIiIhJlFNRERERERESijIKaiIiIiIhIlFFQExERERERiTIKaiIiIiIiIlFGQU1ERERERCTKKKiJiIiIiIhEGQU1ERERERGRKKOgJiIiIiIiEmUU1ERERERERKKMgpqIiIiIiEiUUVATERERERGJMgpqIiIiIiIiUUZBTUREREREJMooqImIiIiIiEQZBTUREREREZEoo6AmIiIiIiISZRTUREREREREooyCmoiIiIiISJRRUBMREREREYkyCmoiIiIiIiJRRkFNREREREQkyiioiYiIiIiIRBkFNRERERERkSijoCYiIiIiIhJlFNRERERERESijIKaiIiIiIhIlFFQExERERERiTIKaiIiIiIiIlFGQU1ERERERCTKKKiJiIiIiIhEmQkd1Ky14z0EERERERGRUTdhg9qqjZWc+p0XaGrrGO+hiIiIiIiIjKoJG9QyEmOodnvZeLhhvIciIiIiIiIyqiZsUFtcko4xsO6ggpqIiIiIiEwuEzaopcbHMDs3mfWH68d7KCIiIiIiIqMqoqBmjLnUGLPTGLPHGPPVAa65wRizzRiz1Rjz0OgOM7xlpRmsP9SA36+mIiIicuJF6/woIiIT35BBzRjjBO4DLgMWADcZYxb0uWY28G/Amdbak4B/HYOx9rOsNIPG1g721TSfiI8TERHpEs3zo4iITHyRrKidCuyx1u6z1rYDfwKu6XPNbcB91tp6AGtt1egOM7ylpekArD+k8kcRETnhonZ+FBGRiS+SoFYEHO7x+/LgYz3NAeYYY94wxqw2xlwa7o2MMZ8wxqwxxqyprq4e2Yh7mJmTTEq8i3WH1FBEREROuFGbH2H050gREZnYRquZiAuYDZwH3AT82hiT3vcia+391toV1toVOTk5x/2hDodhSUm6VtRERCRaRTQ/wujPkSIiMrFFEtQqgJIevy8OPtZTObDKWtthrd0P7CIwMY25ZaUZ7DzmxuP1nYiPExERCYnq+VFERCa2SILau8BsY8x0Y0wscCOwqs81/yBwtxBjTDaBUo99ozjOAS0ry8BadPC1iIicaFE9P4qIyMQ2ZFCz1vqA24FngO3AI9barcaYbxpjrg5e9gxQa4zZBrwE/D9rbe1YDbqnJcWBCpJ1B1X+KCIiJ060z48iIjKxuSK5yFr7JPBkn8e+0ePXFvhi8L8TKi0xhlm5yazXipqIiJxg0Tw/iojIxDZazUTG1dJgQ5HAfCgiIiIiIjKxTYqgtqwsg/qWDg7UtgBgrcXr6xznUYmIiMhkoZvBInKiRVT6GO2WlWYA8MBbB/H5/by4o4q65nae+vzZlGUljfPoREREZKKy1nLu/7zMp86dyc0rS8d7OCIyhUyKFbVZuYGDr3/7xn4eWXOYuXkp+K3lJ8/vHu+hiYiInHDWWto6VFkyGlo7OjlU18KaA3XjPRQRmWImxYqa02H43UdPweP1cdqMLOJjnHzvqR386tW9fPLcGczLTx3vIYqIiJwwl93zGguL0vjB9YvHeygTnrstcE7robqWcR6JiEw1k2JFDWDFtEzOm5tLfIwTgE+dO4PkWBc/fHbXOI9MRETkxCpMT9D5oqPE3dYBwEEFNRE5wSZNUOsrPTGWT5wzg+e2HWP9oZGdsfbmnhrK6/UPs4iITCyLi9PZU+3B4/WN91AmvKbgilq120tLu/48ReTEmbRBDeBjZ00nKymWHzy7c9ivbWhp5yO/e4fvPrVjDEYmIiIydhaXpGEtbC5vHO+hTHietu5wpvJHETmRJnVQS45z8ZnzZ/HGnlre2FMzrNc+teUoHZ2W13fX0OlXS14REZk4FhenA7CxXOWPx8vdI6gdrFVQE5ETZ1IHNYBbVpZSlJ7Af67aOqwOWKs2VGIMNLZ2sEkTnYiITCAZSbGUZSVqn9ooCO1RAzikoCYiJ9CkD2rxMU6+8/6T2VPl4cfPRdZY5FhTG6v31/LBlWUYA6/uGt5qnIiIyHhbXJyuoDYKQitqsS4HB+uax3k0IjKVTPqgBnDunBxuOrWU+1/bx9qDQ5+D8sSmI1gLHzljGicXpfHq7uoTMEoREZHRs7gkncrGNqqa2sZ7KBOau60DY2BOXrJKH0XkhJoSQQ3ga1fMpyg9gS/9ZROt7YOXQK7aWMmCglRm5SZzzuwcNhxuoLG1Y9DXiIiIRJMlJWkAbOzTUMRa7bsejqY2H8mxLqZlJamZiIicUFMmqCXHubj7ukXsr2nm7mcG7uR4qLaFDYcbuHpJIQDnzMmh0295c5jNSERERMbTgoI0nA7Tq/zRWsuHfvMOX/7rRgW2CLnbfKTEuyjLSqSivhVfp3+8hyQiU8SUCWoAZ8zM5qNnTON3bxxg1zF32Gv+uakSgKsWB4La0tJ0kuNcKn8UEZEJJSHWydy8lF6dH1/dXcPre2p4ZE05v33jwPgNbgJxt3WQEh9DWWYSPr+lskGlpCJyYkypoAbw+QtnkxDj5P5X94V9ftWGSlaUZVCUngBAjNPBGTOzeHVXje4+iojIhLK4JNBQxB88ZuZXr+wlLzWOi+bn8d0nt7PmwND7tqc6jzewolaalQighiIicsJMuaCWkRTLB04p4bENFRxt7H1XbOdRNzuPubtW00LOmZNDRUMre6v1j7OIiEwcS0rSaGrzcaC2mS0Vjby5t5Zbz5zOD29YTFFGAp99aB01Hu9xf467rYOOSVoS2LP0EXSWmoicOFMuqAH8y1nT6fRbfvfm/q7HrLV876ntxLocXH5yQa/rz52TA8CruyZv+WNbRydrD9azpaKRPVWefiFWREQmnsUl3Qdf/+rVfSTHubhpZSlpCTH84pblNLR0cMdD649r39XRxjbO/8ErfO+pgfd/T2Tutg6S42PIS4kn1uVQQxEROWGmZFAryUzk8pMLeGj1oa6DLH/z+n5e2lnN16+YT05KXL/rp2cnTep9ar94eS/X/uJNrvzp61z0o1c47bsv8Mi7h8d7WCIichxm56aQGOvk8Y1HeGJTJTevLCU1PgaABYWpfOu9C3lrXy3//ujmEZX3d3T6uePhwKrcQHu/J7rQiprDYSjNTORgraprROTEmJJBDeCT58zE7fXx8DuH2FzeyPef3sElC/L40GllYa8/Z3Y2q/fV0tYxeGv/iepwXQvZyXHc/6Hl3HPjElLjXazXQakiIhOa02FYWJTGCzuqcDoMHztzWq/nr19Rwh0XzOKRNeX8+Lldw37/Hzyzk3cP1JOXGkdFfesojTq6hIIaQFlm4rBKH3ccbaKl3TdWQxORSW7KBrWTi9M4Y2YWv3l9P3c8vI6c5Djuvm4Rxpiw11+0II+2Dj8v76zq91xTWwdPbzlCp3/iNhup9ngpSo/nkpPyuWZJEXPzU9hb7RnvYYmIyHFaEix/vHpxEQVpCf2e/+LFc7hhRTH3vriHB98+GPH7PrftGL96dR8fPK2Ua5YUUd7Q2tW0ZLJo6+ikvdPftQpZmpXIobqWiFYf2zo6ufpnb/A7ddcUkRGaskEN4JPnzuRYk5dDdS385MalpCfGDnjt6TOyyE6O5Z8bj/R77n+e3smn/riO9//izQlb+lHjaSc7ubvkc2ZOMvsU1EREJryzZ2cT53LwyXNnhH3eGMN33ncyF87L5T/+sYUXdxwb8j0rGlq585ENLCxK5etXLKAoPYF2n5+a5uNvTBJN3G2B1bCeK2ot7Z3UeNqHfG2Nx0u7z8+BGpVKisjITOmgds7sbN63tIj/uvokTp2eOei1LmegycgLO47h8XaXMbS0+/jH+goWl6RzuK6FK+59jZ++sHvCdb+q8Xj7BbUaTzsNLUNPRiIiEr3Onp3DprsuYU5eyoDXuJwOfnbzMqZlJ3HfS3uHfM9VGyppavPx05uWER/j7DrSZrKVP4b2sXcFtawkAA5F0KK/2h0IrUfUnEtERmhKBzVjDD/+wBI+dPq0iK6/anEhbR1+Xtjefbfx8Y1HcHt9fP2K+Tz3hXN4z0n5/PC5Xfzk+eHX+o8Xv99S19zeq4nKzNzAZKQjCUREJr44l3PIaxJinVy9uJB1h+qpax78Jt2m8gZKg422AIozg0GtYXIFtdCN2ZS4QOljSWbkLfpDQa1ykv2ZiMiJM6WD2nAtL82gIC2eVRsqux578J1DzMpNZkVZBlnJcfzs5mWcOyeHxzZUTpgDsutb2un0W7KTu0s/Z+YkA2ifmojIFHLhvDyshZd29N+P3dOm8kZOLk7r+v3kXVELBLXk4IpaSWYCxkQY1ILn01U0tE6YnwdEJLooqA2Dw2G4clEBr+6upqGlna2VjWw83MDNp5b2akJy+cn5lNe3srWyaRxHG7lQrX12jxW14oxEYp0OBTURkSlkYVEqealxvDhIUKv1eKloaGVxj6CWEh9Darxr0q2o9S19jHM5KUiNj+gstdCKmtfnH3KFUkQkHAW1Ybp6cREdnZZnth7l4XcOEedy8P5lRb2uuXhBPk6H4akt/RuPRKPQZNJzj5rTYZiWncjeKpU+iohMFcYYLpiXyyu7qmn3hd9rvamiEYCTi9J7PV6UkTjpVtSagitqoa6PEOj8GMlZaqG5FaCyQfvURGT4FNSGaWFRKtOyEnlkTTn/WF/JFScX9OsWmZkUy8rpmTy95eg4jXJ4ajz9gxqo86OIyFR0wbw8PF4f7x6oC/v85vJGjAnMhz0VpSdQHiaoeX2dE/b4mr5dHwHKMpMiWlGr8XhxOgLVNpWNkyvAisiJoaA2TMYYrlpcyNqD9Xi8Pm5eWRr2uksX5rO3upndE6Bdfyio5YQJagfrWga8qyoiIpPPWbMC7fyf3x6+Tf+m8gZmZCeR0mOVCaA4IyHsfqwr732du5/ZMWbjHUuh0sfkuO6gNi07iRpPO42tHYO+ttrt7eq0qYYiIjISCmojcNXiQgDm5CWzvCwj7DXvOSkfYEKsqlV7vMQ6HaQmuHo9PjM3iU6/jagNsYiITA4JsU7OmJnFC9urwjbB2FTeyKLi9H6PF2ck4PH6aGrtPsKmyt3G7ioPL24fvDlJtHK3+UiMdeJydv+4NDs30GxrT9XgFSfVHi9z85KJczkU1ERkRBTURmBOXgofPWMaX37PvF5NRHrKS41neVkGT02AoFbjbic7Obbf1xLq/LhH+9RERKaUC+fncaiupd8RLcea2qhye1nUo5FISKjzY3lDd1ng1opAU63dVZ4J2VDD3dbRq+wR6Fol21M1cMWMtZZqt5eclDiK0hO0R01ERkRBbYTuuvokLlqQN+g1l56Uz7YjTRyKoI3veKrxeHt1fAyZoRb9IiJT0gXzcgF6nRsKsPFwA0D4oJbRv0X/5mDjEWDAPW/RzOP19SvxLMpIID7Gwa5jA8+NHq+Ptg4/OSlxFKTHT7pumCJyYiiojaFLFwbLH7dGd/fHare3XyMRCNTk56fGK6iJiEwxhekJzC9I5YU+bfo3VzTidBgWFAy8otYzlGypaKQkM4E4l4N39k+8oOZu8/XanwaBrsgzc5LZPUjpY6jjY05KHIVpCRxRMxERGQHX0JfISJVkJrKwKJW/r6sgLSGGplYfze0+LpiXG7a+f7zUeLz9uneFzMxN6lf6IiIik99F83O576U9HG1sIz8tHgjsT5udm0xCrLPf9ZlJscTHOHp1ftxS0ciKaZlUudsmZFBravORGt//R6U5eSms3lc74Ou6glpyPIXpCVS5vbT7/MS6dH9cRCKnfzHG2FWLCtlx1M1X/raZbz+5nZ88v5v33vcGdz+9A6+vc7yHh99vqW1uD7uiBsEW/VWesBvKRURk8rp+eQkxTgf/8dgWrLVYa9lU3hC27BECXZGL0hO6Sh9rPV4qG9tYWJTKqdMy2VrZ2NVFMSTa5xZ3W0evM9RCZuUmc6Sxrd/XE1Lt6V5RK0pPwNrA/j6JbnXN7VS5x+77ZK1lW2XTmL2/TD4KamPs42fP4PkvnsMbX72AzXddwsZvXMJ1y4v5+ct7ufqnb7C5vHHoNxlDDa0ddPrtoEHN7fX1OrhTREQmv9KsRO68ZA7PbTvGE5uPUF7fSn1Lx6AVIcUZiV2lj1uCP5AuLErj1OlZ+C2sPVjfdW1Hp5/L7nmND/zqrUEbc4wnd5uvXzMR6NlQJHz5Y6/SxzAloRKdvvboZm5/aP2Yvf+6Q/Vcfu9rrD9UP/TFIiiojTmnwzArN4Wi9ARS4mNIS4zh7usW87uPnkJDazvX/vJNth8Zv7srNT3u+oXT1flR+9RERKacW8+czqLiNP7zsa28sqsaCN9IJKQoeJYaBMoeAU4qTGNZWTouh+lV/vjYhkp2HHWzqbyRy+55jR89t4u2jvCVJtVuL39dW37CV+DCdX2E7hb9uwdoKFLj8eJyGNITYihMD5SNqkV/9Dva1Mb+mrHb7hE6KP1ArbaUSGQU1MbJ+fNyefyOs0lLiOGOh9fT2j4+ZZA1wbt+A66o5SYBaJ+aiMgU5HI6+P61i2hs7eBbT2wj1ulgbn7KgNcXpSdQ19xOS7uPLRWNlGUlkpYQQ2Ksi4VFaV1Bze+3/PKVvcwvSOXVL5/PFScXcO8Lu7nmZ2+EnQ9/9uJuvvSXjfxz04lrztXR6aetw9+v6yME9qDHuRzsHmAlMNSky+EwFKQFVtSONKr0Mdq523zUeAL7CcdCaKX1aKOqlCQyCmrjKCcljh/dsJg9VR7++4ltEb/uSGMrz2wdnfPZuuvoY8M+n58aT2Ksk71DHOwpIiKT0/yCVD5z3kzaOvzMK0ghztW/kUhIcbBFf2VDK5srGllY1L36tnJ6JpvKG2nr6OTZbcfYU+Xh0+fNJCcljp/cuJR7b1rKzmNuntzcO4y1+/ys2lgJwLce3zbgvrDR5m4LHNwdbkVtqM6P1W4v2cF5NSHWSWZSrEofJwB3W8eY7ifsDmr6uyCRUVAbZ2fPzuGT58zgobcP8fSWoe8UtrT7+Ohv3+WTD6wdlX/0q4dYUTMmMBmpRb+IyNT12Qtmsaw0nYvnD35+aKhF/5aKJsrrW1lY2B3UTp2eSXunn/WHGvj5y3soy0rk8uAxNgBXLSpgenYSf373cK/3fGVXNfUtHXzuwtlUe7z85Pndo/iVDczTFdT6r6gBzM5LHrD0sdrjJafHvFqYHq/SxwkgFM6PjnFQ0+qqRCqioGaMudQYs9MYs8cY89VBrrvWGGONMStGb4iT352XzGVRcRpf+dvmQcOXtZavPbqFXcFSi6e3HP+qWo2nnRinIS0h/EQEMDMniT3q/Cgi0s9UmR/jXE7+/pkzuePC2YNeFzr0OlT1cXKPFbUVZZkYA/e8sItN5Y188pyZuJzdP4YYY/jAKScyMFEAACAASURBVCW8c6CuV5OOv68rJzs5ljsumMWNp5Ty+zcPsOPo2O/tbgqu3PU9Ry1kTl4KFQ2teLy+fs9Vu7299n4XpiUoqEU5X6eflmDZ7VgFqRpPO6AOoBK5IYOaMcYJ3AdcBiwAbjLGLAhzXQrweeDt0R7kZBfrcnDPjUvxdfp5/8/f4N0D4c+aefDtQzy6voIvXDSHefkpEa3ADaXG4yUrKQ5jzIDXrJiWyZHGNjaNc4dKEZFoovmxv9yUeGKchpd3BhqPnFTYfUZnWmIMc/NSWL2vjtyUOK5dXtTv9dcuK8blMPz53UMANLZ08ML2Kq5aXEiM08GX3zOX1HgX//GPLWN+8zC0uhLuHDUItOiH/p0f/X5Ljae9d1BLT6CyQT+cR7Nmb/feyCNjFKq1oibDFcmK2qnAHmvtPmttO/An4Jow1/038H1Af/tGYHp2En/51BkkxDi58f7V3P/q3l6T0MbDDXzzn9s4b24Ot58/i8tPLmDNwXqqjvOuTI2nu45+INcsKSQx1slDbx86rs8SEZlkND/24Qw2z2jt6KQ4I4GMpN7zy8rpmQDcdvaMsHvdclLiuGh+Hn9bV0G7z8/jmytp7/Rz7bJiADKSYvnqZfN490A9D47xnBTaCzdQ6WOoRf/uY70bitS3tNPpt/1KHz1eX9cqnUSfnt+bsQpSob4A1R4vHZ1j07BEJpdIgloR0LNgvDz4WBdjzDKgxFr7xGBvZIz5hDFmjTFmTXV19bAHO9ktKExl1R1nccmCPL7z5A6uue8Nrv3Fm1zwg5f5wP1vkZMSx49vWILDYbhsYT7WctxNRWr61NGHkxIfw9WLC1m1sVKTjIhIt1GbH4PXToo5MrRPref+tJD3LSvm/Lk53LSydMDXf+DUEuqa23lu2zEeXVfB7NzkXitz1y8v4ezZ2XzjsS08MYZdIAdrJgJQkpFArMvRb0Wtu0lXfNdjobPUVP4YvULfb4CjYxDUOjr91DW3k5cah7XofFqJyHE3EzHGOIAfAXcOda219n5r7Qpr7YqcnJzj/ehJKTU+hp/fsoy7rgpUz8THOJhfmMoNK0r4v1tP6bo7OTsvhVm5yTy5+TiDmrt9wEYiPd2ysozWjk7+sb7iuD5PRGSqGM78CJNnjgztUzs5zHlrS0rS+d3HTh1w3xfAObNzKEyL594XdrPmYD3vX1bcqzzf4TD86kPLWV6Wwef/tJ7nth0b/S+Cnitq4cfqcjqYkZ3Erj4raj0Puw5RUIt+oe93rNPBkRF0ZRyqFLc2uD8ttG9zrBqWyOQSSVCrAEp6/L44+FhICrAQeNkYcwA4DVg1UTdMRwNjDB89czqrbj+LBz9+GvfdvIxvXrOQWbm9z665bGE+b++vpdYzsrsyfr+lttlL9gCHXfd0cnEai4rTeHD1ITUVEREJ0PwYRmhFrecq2HA4HYbrV5Sw85gbY+C9Swv7XZMY6+K3Hz2Fk4rS+OyD67oO4x5N7iG6PkKg/LFvi/4aT6ibcnfZZ+jPpEL71KJW6Ps9Iydp2KWPdz6ykc/9acOg14T+XpxclA6MzaqdTD6RBLV3gdnGmOnGmFjgRmBV6ElrbaO1NttaO81aOw1YDVxtrV0zJiOWLpctLMBv4dkR3k1sbO2go9NGtKIGcPOppew85mbtwfoRfZ6IyCSj+TGM5WUZZCfHsbQkY8Tvcf2KYoyBM2ZmdR0Y3VdKfAx/+NipzMpN5hN/WNNvZet4ub0+4lwOYl0D/6g0OzeZ8vpWmnt0fgy3opaTHEeM02hFLYq5vYEVtTl5KcPeQ7btSBMbDzcMek3o78XJxYEbGApqEokhg5q11gfcDjwDbAcesdZuNcZ80xhz9VgPUAY2vyCFsqxEnhphm/5wd/0Gc9XiQlLiXGoqIiKC5seBnDMnhzVfv4i0xIFXooZSnJHIj25YzNev6NdEs5e0xBh+f+spJMe5+NzD6/H6Oge9fjjcbb4Byx5DZgcbivQ8a7Ta7SU+xtGrvNPhMOSlxo9KN8GjjW341Ihi1IVW1ObkJWMtVA1jD1mtx8uRxlb8/oErjkJBbXZuCrEuh0ofJSIR7VGz1j5prZ1jrZ1prf128LFvWGtXhbn2vMl+tzBaGGO4bGEBb+6pobFl+E0+ujY8R7iilhTn4r1Li3h88xHqm9uH/XkiIpON5sex876lxcwvGLp8MjclnruvW8SOo25+8MzOUft8d1vHoGWPEDj0Guh18HXoDLW+x96MRov+rZWNnPX9F/lTn0PB5fiFgloofEcaqq211DW309Fpu36uCqe7yUwcBWnxatEvETnuZiIyvi5bmI/Pb/nDWweGvXcsdPBiJHvUQm5eWUq7z8/Hfv8uawY4701EROREunB+HresLOXXr+3njT01o/KekayolWUmkhzn4o293Z9ZPUA35aL0BCqOY0Wt02/590e34PPbfkcCyPFzt/mIdTqYlpUERN6iv6nVhy+4kjbY97fa7SUl3kV8jJO81HiOKahJBBTUJrhFxWmcNzeHHz63iy/8eQOeHnXyQ6lxD29FDWB+QSo/vH4xlQ2tXPfLt7jtD2t6lXyIiIiMh69fsYAZOUnc+cjGUan6CKyoDR7UXE4H711ayBObjtDQEvjM0IpaXzOyk6hsbOX13SMLkg+/c4iNhxuIcRrK67XXbbSFvt8F6YFjFSLdQ1bT3L2KNtgexJ4BviAtniNN+h7K0BTUJjhjDL/5yCl84aI5rNpYyVU/fZ2NhxsiWl2r8XhxOQxpCcPbR3Dt8mJe/n/n8aVL5vDW3lqu+8WbtLaP3r4AERGR4UqIdXLvjUupbfbyr3/ecNz7uNxtPlLihp4fb1lZhtfn569ry4GBg9qtZ01nTm4Ktz+8jkO1LcMaS7Xby/ef3sHpM7I4d05u1AS1xzZUDOsGcTQLraCmxLlIinVGvKIWarsPQwQ1d3eX7fzUeI41etVFW4akoDYJOB2Gz180m4duO42Wdh/X3PcGZ37vRb745w088u5h2n3hJ6tqt5es5FgcDhP2+cEkxrq4/YLZ/PrDK6hv6eCpLWN36KiIiEgkFhalcdfVJ/HKrmq+9cT243qvSEofIVBpsrwsgwffPoTX10l9Swc5yfH9rkuKc3H/h5djLdz2hzW9OkUO5dtPbMPb4edb71tISWYC5fUt4/5D/r5qD5//0wYeXH1wXMcxWtxtHSTHuzDGkJ8WH/FZanW9VtQGDnc1PQJ8flo87cEDsEUGo6A2iZw2I4unP38O/3X1SSwpTeeVXdV8+W+buPeF3WGvr/F4I27NP/BnZlKWlciftbFZRESiwC0ry7j1zOn8/s0DPHAcISKSZiIhHzytlP01zfxzY+CmZXZK+G7KZVlJ/OzmpeyucvOlv2yMKGy9saeGf2yo5FPnzmBmTjLFGYk0twcC4Xg6HFzVWzNJjuzpuYJakJYQ8YpaaL9/RmLM4HvUepQ+5qcGyyvV+VGGoKA2yWQkxfKRM6bx81uWs+brF3H6jCye3hq+fX+Np/24g5oxhhtWlPD2/joO1DQf13uJiIiMhq9dMZ8L5uVy16qtvLZ7+Idhd/otze2dEa2oQeBc04zEGH72YuDG6GB7v8+encO/XTafp7Yc5dz/eZnbH1rHr17Zy/YjTf2u7ej0c9eqrZRmJvKZ82cBUJIROFeuvH545ZOjrSIY1NYdrB/31b3R0HMFtSAtPuI9aqHSx4VFaQOWPrZ1dOJu8/VaUQOdpSZDU1CbxIwxXLwgjz1VHg7W9g9Ro7GiBnDtsmIcBh5Zo1U1EREZf06H4d6bljI7N5lPPbCWB98+OOgZV32F9l1FGtTiY5xcv6KEA8G9Z+H2qPX08bOn8633LmRBQSrrDzXw3ad2dO0x7+nB1QfZXeXh61fMJz7GCQTOmAPGfZ9aRUPga61tbmf/JLhR23MFtSAtnip3ZOfV1TV7SUuIoSwrccAVteo+zdu6gppW1GQICmqT3IXzcwF4YXtVr8ettdR62gcszxiO/LR4zpuby1/XlusQThERiQrJcS5+97FTWFScztce3cKNv17Nvgi7FLvbAmWFkQY1gJtPLe369VBBzRjDB08r45cfWs4bX72A1f92Ibkpcdzx8Pquz65rbudHz+3i7NnZXLwgr+u1RVG0ohbrDPwYuebAxC9/dHu7V9Ty0xLwR3jodU1zO1nJsRSmJ9DQ0hF272HPM9QgENgcRitqMjQFtUmuLCuJWbnJvLDjWK/H39pXS3unnzm5KaPyOTesKKHK7eXVEZSYiIiIjIWCtAQeum0ld1+7iB1Hmrj0ntd4ekv47QA9hQ4/jnSPGsC07CTOnp0NMOxqlfy0eO69aSkVDa187dEtWGv50XM7aW7v5D+uXNDr8Oy0hBhS413jvqJW2dDGkpJ00hNjWHNwYp+r6vdbPF4fqT1KHyGys9RqPV6yk+IoSk8Ivqb/96VrRS0Y1FxOBzkpcTr0WoakoDYFXDg/l7f31dHU1r3x+Lev7ycrKZYrFhWM2mdkJ8eqqYiIiEQVYww3nFLC8188l1k5yXzzn1vx+gY/UqY7qEW+ogaBs9y+ceWCrjLF4VgxLZMvXDSbVRsr+e5TO3jo7UN86LQy5uT1v6FanJE47kGtoqGV4owElpdmTPiGIs3tPqztDubDOUut1tNOZlJgRQ2gIkznx5rgilrPAJ+flsAxlT7KEBTUpoCL5ufh81te3RVY7dpf08wLO6q45bSyEU0m4cQ4Hbx/WTEvbK/qunMkIiISLXJT4/n3y+dT2djGn97pf1Nxa2Vj10HZ3aWPwztndG5+CreeNX3EY/z0ebM4Y2YW97+6j7SEGL5w0Zyw1xVnJIxr6aOv08/RpjaKMhJYPi2DfdXNE7rVfCiYJ4dW1FIHXh3rq65H6SOEP0st9HNRVnL3dpOC1HitqMmQFNSmgGWlGWQkxnTtU/v9G/uJcTj44GmlQ7xyeG5YUYzPb3no7UOj+r4iIiKj4cxZWaycnsnPXtpDa3v3qtoru6q56qevc/GPX+G5bcdGvKJ2vJwOw48/sIQFBancdfVJpCWGD4olmYkcrmsdcbfFTr8dclVxMEeb2uj0W4rSE1hRlgnA2gm8qtb3+52a4CIhZuhDrzv9lrqWdrKS48hLCew7GyioZSbFEuPs/rE7Py2eYwpqMgQFtSnA6TCcPzeXl3ZWUdfczl/WlnPV4kJyU/ofyHk8ZuWmcMmCPP73tX0T+s6aiIhMTsYY7rxkLtVuLw+sPgDAgZpm7nhoHbNzU8hJiee2P6zpOn/0RAc1gLzUeJ78/Nlcs6RowGuKMxJo7egc8Vz7w2d3ctk9r4046IVa8xemJ7CoOI0Yp2HNgYm7T63vCqoxJqIW/fUt7VgLWUmxuJwO8lPjw3Z+rHZ7+x3ZkJ8Wj9vr6+owKhKOgtoUccH8XBpaOvjyXzfR0t7JvxxHacZgvvSeuTS3+/jFy3vG5P1FRESOx6nTMzlnTg6/eHkvx5rauO0Pa3A4DP/7kRU89tkz+cx5MzkQPNImdZiljyfK8bbof3bbMfZVN4/49aEwUpSRQHyMk5OL0ib0PrVwK6gF6fFDlj6GgnKopLEoIyHsilqNx9uvy3bXoddaVZNBKKhNEefMycHlMDy//Rinz8hiQWHqmHzOnLwU3r+smP976+CABz+KiIiMpzsvnkN9SwdX3Psa+2qaue/mZZRkJhLrcvDlS+fx10+fwQ+uXzxq+7hHW3FXi/7hz7NV7jb2VAWOKVh3aGThKrSiFup0uGJaJpvLG2nrGHk55XgKNVtL7RHU8lMThgxRoSYhWUmB1bLC9ITwK2qe8CtqoKAmg1NQmyJS42NYOSNQRz5Wq2kh/3rRbLB0lY6IiIhEk8Ul6Vy8II8aTzv/fvl8zpyV3ev5ZaUZXLe8eJxGN7TjOUtt9b7uEsWR7iuraGglOzm2K8guL8ugvdPPlorGEb3feOs+4Lx7BbUgLZ5jbi+dgxyUXuvpvaJWmB4Idz1fY60NlD72OVuva0VNnR9lEApqU8itZ07n6sWFXDAvd0w/pzgjkVtOK+WRNYe77tr5Ov1U6R8jERGJEt99/8ncd/Mybj1z2ngPZdhS42NIS4gZ0YraW3trSYlzcdqMzOMKaqHVNAgENWDClj+GK33MT4un028H7WTdVfqY1B3UOjpt10obBEJgW4e/f1DrWlFT9ZEM7MTvkpVxc+H8PC6cn3dCPuuz58/ikXcP84kH1hDrdLCvupn2Tj8fPWMad1190gkZg4iIyECyk+NG7SzR8VCSmcDhEayovbW3hlOnZ3JSYSr3vbyXZq+PpLjh/ThY0dDKvPzu892yk+OYnp3EmgP1cO6whzTu3G0dOB2GhB6lroXpoUOvW7tCVV+1Hi8OA+mJwT1qwddUNLSSF1wxqwmuuvU9BD0+xkl6Yoxa9MugtKImYyI7OY47L5mLr9NSkBbPx86cxvuWFvH7Nw/wwOqD4z08ERGRCa04ffiHXh9pbOVAbQunz8xiWVkGnX7LxvKGYb2HtZbKPitqEFhVW3eofsSdJEfTQ28fGtb2C3ebj+Q4F8aYrsfyImj2UdPcTkZiLE5H4HXhzlILrcj1XVGDQPmj9qjJYLSiJmPm1rOm9zr4s9NvaWrt4K5VW5melcRZs7MHebWIiIgMpDgjgZd3VWGt7RUwBvPW3loATp+ZRXF6oHPkuoP1nDEz8vm4trmdtg5/v6C2uCSdv64tp7y+lZLMxIjfbyz8cfVBqtxtfO7C2RFd727z9TuKIZI9ZLUeb69DrIcb1MqyEtl1zBPRGGVq0oqanDBOh+EnNy5hVk4yn3lwLfuq9Y+TiIjISBRnJNDW4ad2GGepvbW3lvTEGObnp5KWGMPs3ORh71Pr6viY0TuMLSlOBxj2Ct1oa/f52V3lpsbTTkNLZH827raOXo1EADKTYol1OgZd8aprbu/q+AiBvYMp8S4qG7pfU+0O/Lpv10eAufmpHKht7nX4ukhPCmpyQqXEx/C/H1mBy+ng039ch3+QbkoiIiIS3kjOUntrXy0rp2fiCJbqLSvNYP3hhmHNxV1nqPVZUZubn0Ks08Gm8vHt/LinykNHZ+Dr2VvdHNFrmsKsqBljyEuLG2JFrb3XihoE/lx6tuiv9nhxOgwZibF9X868/BSspavxmkhfCmpywpVkJvKNKxew85ib1/fUjPdwREREJpzizOG16D9c10J5fSunz8jqemx5WQYNLR3sq4ks0ED/M9RCYl0O5hemsvHw+K6oba3sDop7IwxA7jZfrzPUQobaQ1bj8XZ1fAwpTO996HWNu52spNiucNzT3GBDlh1HmyIap0w9CmoyLi47OZ/s5NiIGosca2rTypuIiEgPoRW1w3WRraiF9qed0ePMuGXBtvrrhlH+WNHQSnKci9SE/sFmSXEamysaBz17bKxtO9JEQoyTWKeDvRFusfB4+5c+QqChyLEBVtTafX6a2nxk9SlpLEyP71pRC5VhhtufBjAtK4k4l4OdR90RjVOmHgU1GRdxLic3rCjhhe3HepUI9LWnysOZ33uRxzZWnMDRiYiIRLfkOBcZiTERr6i9ta+W7ORYZucmdz02IzuJtIQY1h0aXlArSk8I28BkUXE6Le2dEQeksbCtsol5BSlMz06KeByhro995afGc7SpLWwny/qW3oddhxSmJ9DQ0sGbe2u46qevs+5QA5csyA/7uU6HYXZeMjuPKahJeApqMm5uXlmKBf70zqEBr3ngrQP4/Jb1h8a3lEJERCTaFGdE1qLfWstbe2tZOSOrV8ByOAzLStOH1VCkor6VooyEsM8tLgk2FBmn8kdrLduONLGgIJWZuUkR7VGz1obt+giBQ6nbOvw0tfr6PRc61Lpv6WOoJPTmX79NY2sHv/nICj5/0cDdJ+fmpbJDK2pR41hTG4dqh38+4VhRe34ZN8UZiVw4L5eH3znMHRfMJtbV+76Bu62Dv64tB2D7EdVvi4iI9FSckcCuCFZjVu+r42hTG+eEORZnWWkGL+2sprGlg7TE/uV/fVU0tLI8WDLZ14zsJFLiXGwsb+D6FSVDfwFDuO+lPRyqbeH71y2K6Pry+lbcbT4WFKZytLGNZ7Yew+vrJM7lHPA1rR2ddPrtgKWPEGjR3/fPpq45tKLWu6zxpMI0Yl0Orl9ezFcum0dqmPftaV5+Cn9bV05dczuZSf0bjsjoq2pq45E1h/FbCN222F3lYe3BeioaWjEGvv/+RdxwyuB/h9s6Ouno9If9uzNaFNRkXH3wtDKe3/4uz2w9ylWLC3s99+j6CprbO1lcnMaOI+5hnRUjIiIy2c0vSOWpLUd5ZutR3nNS+PI6ay0/fn4XuSlxXLOkqN/zodC17nA958/NHfTzPF4fja0dA66oORyGhUVpo9L50evr5P5X99HS7uO/rjmJ+JiBw1bItuBN3QUFqSTFuuj0Ww7WtjAnL2XA17jbAqtlA62oQSCohRp/hNR6gkGtT7ialZvMzv++NOKfV0Lvu/Oom9NnZg1x9eTU1tHJ2/vrOHdOzgn5vP95Zid/CS4EhOSlxrGiLJNbz5rOyzur+MrfNwH0C2t+v+WdA3U8uq6CJ7cc4V/Oms6/XjRnzMaqoCbj6pzZOZRmJvLA6oO9gpq1lj+8dZDFxWnccEoJX3t0S1QcoikiIhItPnHODF7Yfowv/HkDf//MGczLT+13zVt7a3lnfx13XbUgbNhZUppOnMvByzuqhgxqA3V87GlxSTq/eX3fkCtZQ3lpRxWNrR1AoJRy5YyhQ8y2yiYcBublpxLjDFTp7K3yDBHUAp8RNqiFVtQa+5eXdpc+9m8UMpybyt1BrWnKBrXfv3mA7z21g+e+cA6zB/lejYZqt5fHNlRyy8pS/uvqk7CAtRDjNF3ft1tWlvKJB9Z2hbWrFheyen8tr+ys5rltgd4KSbFOLl1YwNlhVqlHk/aoybhyOAy3rCzlnf11bO5xB+6tvbXsqfLwodOndU08quEWERHpFh/j5P4PryA5zsXH/29NVzleiLWWnzy/m/zUeG48tTTseyTGurhgXi5PbD46ZLfGiobA3p2BVtQAFhen0dFp2X7k+Obsv6+rID1Ybrg2wmYn2440MT07iYRYJ9OzkwCGbCjSFFxRC1ei2FX62Ojt91xtczsuhwnb/XI4clPiSE+MmdINRV7cXgXAOwfqxvyz/rj6IO2dfm49azoup4MYp4NYl6NXuI6PcXL/h5Zz9uwcvvL3TSz+5rN87Hfv8qd3DzEvP4V7blzCmq9fzA9vWMzysswxHa+Cmoy761eUkJEYw82/Xs0Tm44A8H9vHSAjMYYrFxUwL3i3SfvUREREestLjef+D6+gyu3l039cS7vP3/Xcm3treedAHZ85f+agpYNXLiqkxuPl7X21g35WaEWteJAVtUXBhiKbykfeUKS+uZ2XdlZx7bJiZuQksfZAhEGtsokFhWkAJMW5KEyLH7KhyGClj7EuB1lJsWEPva4LHnZ9vFsyjDHMzUuZsjejG1s6uoL4mgi/zyPV1tHJH1cf5IJ5uczMSR702lBYu+3sGXxwZRl/uPVUNnzjEn7z0VO4ZkkRCbEjXy0eDgU1GXeZSbH8846zmJmbzGcfWscXH9nAc9uOceOppcTHOEmKc1GWlagDIUVERMJYUpLO3dcu4u39dVz6k1f529pyfJ1+fvzcLvJT47lhiMYeF8zLJTHWyT+DN0sHUtHQRqzTQXZy+HPBAArT4slOjmPj4ZHvU3t88xE6Oi3vW1rEirIM1h6qD9siv6fGlg4qGlpZUNBd/jkzN3nIFTVPMKglhwlqMPBZarXNXjLDlD2OxLz8FHYddU/JM2Nf3V1Np99SnJHAu2O8ovbYhgpqm9v5+FnTI7o+PsbJv18+n29ctYBz5uREtE9ytCmoSVQozkjkkU+ezm1nT+fv6wJnpt2ysrtMY35+6nGXUYiIiExW711axK8/vIK4GCd3/mUjZ37/RdYcrOezQ6ymASTEOrlofh5PbTlCR6c/7DXWWl7aUcWc/GQcjoFXkYwxLC5OY+NxrKg9uq6cOXnJnFSYyvKyDBpaOoZcGetqJFLYI6jlJLO3yjNoyOveoxa+c19+WjxHG/sHtRpPO9nJo9OlcW5+Ks3tnYOeKztZvbSzivTEGD5y+jTK61vD/lmPxOObKjntOy/w6PpyrLVYa/nN6/uZl58yofYCKqhJ1Ih1OfjaFQv4w62n8oPrF1Oc0d04ZF5BCgdqm2lp73+WiYiIiMDFC/J48nNn8esPryA/NZ6ZOUlDthgPuWpxIQ0tHbyxpybs8y/trGLnMTe3njn0asSi4nT2VnvweIc/Zx+oaWbdoQbet7QYY0zXHqC1BwdfbenZ8TFkZm4yze2dYUsXQwYrfYSBV9Tqmtv7dXwcqZ6dH6cSv9/yys5qzp2Tw8oZge/zmiG+z5Hwdfq5++mdVHu8fOHPG7n9ofX8c9MRdh3z8C9nTZ9QHcQV1CTqnDMnh/cvK+712PyCVKyFXccGL2EQERGZyowxXLwgj8duP4vnv3huxJ0Xz5mTTUq8i39uDF/++IuX91KUntDvKJ1wFpekYS1sGsHB14+ur8AYeO/SwOfMzEkiPTGm36HcP31hNx//v3epCoaobZVN5KTEkZPSXY44MyfYUKRq4NU4d1sHxkBybPiglp8aT21zO15fZ6/Haz3efmeojVRXUJtiDUU2ljdQ29zOBfNyWVCQSmKsc1T2qT22oZJDdS3cd/MyvnzpXJ7ddpTPPbye7OQ4rl4y9N/faKKgJhPC/GDnRzUUERERicxwVg7iXE7ec1I+z2472i+UrDlQx7sH6rnt7Oldbe8Hs6wsg5Q4Fz95Yfew9l35Ov38Y0MFp8/IoiAtoetrWF6awZoeQe1oYxs/fXEPz2+v4vJ7X2f1vlq2HWnipMLexxPMCjaMGGyfWlObj+RY14DlnPlpgTBW1dTd+bGto5Pm9s5RO6A6Oc5Fkcv+2QAAIABJREFUcUbClGso8tLOahwmcFSTy+lgaWn6ce9T6/Rb7ntpD/MLUnnPSXl85rxZ/OOzZ3Lq9EzuvGTOcR0ZMR4U1GRCKM5IIDnOxQ4FNRERkTFx5aIC3G0+Xt3Vu/zxl6/sJSMxJuIyytT4GL5+5Xze2V/Hg28fHPJ6j9fHb1/fz3k/eJmDtS18oM/nLJ+Wwb7q5q7jB+5/dR+d1vKbj6wgNd7FLf/7NjuPNvUqewTISYkjJc41aFBzt/kGLHsEyA8Gxp7lk7XBcYzWHjUINBTZOcWapr20o4qlpRlkBAPv8rJMth9pGlHJbMgTm4+wr6aZ28+f1XWj4qTCNB755OncNMARFdFMQU0mBIfDMDc/RQ1FRERExsiZs7LJSIzhL2sOdzUV2XnUzfPbq/joGdNJHKA8MJwbVpRw9uxsvvvUDg7XtQx43d/WlnPGd1/gm49vIz81nl9+cDlX9ymvXBHcp7buYD21Hi8PvXOQ9y4p4sL5eTx2+5lcsiAPvw10v+zJGMPM3GT2VA0W1DoGbCQCPQ+97g5q1e7A6tpodX0EmJOXwr7q5l7HK0xmVe42Nlc0csG87kPWT5mWgd/C+gHOzfP7LZ98YA1/eOvAgM/f9+IeZuUmc9nC/DEY9YmnoCYTxvyCFLYfbRqyRa+IiIgMX4zTwXXLi3l22zFO+84L/Pfj27j76R0kxjr58Ollw3ovYwzfu3YRBvi3v28OO3fvqfLwb49uZk5eCo9+5gz++ukzuHRhfr+SzUXFacQ4DWsO1vOb1/fj9fn5zPkzgUC3xp/fsoyn//VsLl6Q1+8zZuYM3qLf4/UN2JofuoNaz4YiG4N77+bmpQz8BzBMc/NT8Pktu6umxg3pl3dWA3De3Jyux5aWZuAw8O4A+9Qe33yEZ7Ye43+e2Ulja0e/55/ddoydx9zcfv6sQTuT/n/27juuyut+4Pjney97bxBEBBwIGifuRI2anZjVJM1Ok2a3aZL+2qZp2iSdaUab1uxhdsxohtnDGY17Ky4QBdnK3nA5vz/uRUG2gqzv+/XiJfc+z32ecx8vfPk+55zv6U00UVO9RlyYDyWVtf2yfK1SSil1Kvzu3BG8euMEJkYH8MbqAyzenctViYOODk/riAg/dx44bwQrkw+zcH16o222OsNvPtyKh4uVZ68dx9hB/i0ex83ZSkK4L8v35vHm6oOcN2pAowWLRYS4MJ9m5+TFhniSU1x1tAz/8doa+ujj7oSbs6VRj9rK5MMMCvBgUKBHi6/rqMkxgYjA4l25nXbMnqrWVsfXO7IJ9XFtNFzVy9WJ+HAfNjQzT63GVseT3+4hws+dkspaFqxKbXLMpxfvY3CgBxecNqDL38Opooma6jVGOH6YdzuGP2YUVvC7/21jXz+rkqSUUkp1FatFODMulOeuHc/a38/h6avGcN9Zw074eFdPHMTU2EAe+mRHo/lqC1alsimtkEcuSiDE263N44yP8mdXVjElVbXcNXNIu89fn9AlZTY//6utoY8iQpiP29E5arW2OtakHGHakKB2t6E9Qn3cSIwK4Is2Fh3vzQ6XVjF/yT5O/+dSluzO5aLR4U2S6wlRAWxOK2yynt9769M5eKScP1+cwFnxoby6MpXiBsn3/KXJ7Moq5jfnxOHUjoI3vUW73omInCMie0QkWUR+18z2+0QkSUS2ichiEelY/7hS7VBfvnZ3djE/phzmwv+uZOH6dO59fwu1LSzQ2ZnKqmq56+1NrY61V0r1LxofVV8W4OnCvDEReLm2f27a8SwW4blrxzNtSBAPfryDBz/ezp7sEh7/Zg9z40ObzEdryYQoe4/bnBEhjRa1bsu4Qf54uznx8zc28PWOpklQWz1q0HgttW0ZRZRU1TK9kxM1gPNPG8CenJI+dwM6o7CCBz/eztS/L+GJb/cSG+zFi9eN53fnjmiy74TB/lTU2Bol1hXVNp5evI/Ewf7MGh7CL2cPpbiyltdWHQDsc9r+uySZS8ZGcN6ovtObBu1I1ETECjwDnAvEAz8VkfjjdtsMTDDGnAZ8CPyzsxuqlJerE1GBHryzNo1rX15LgKcLvzlnODsyinljddtVpU7W5rRCvtiexbdJOV1+LqVUz6fxUan28XV35tUbE7ltRgxvr03jwv+uxM3Zyl8vHtnuJQSmDgni9KFB/Prs4R06d7C3K1/84nSigzy5/a1NPPTJDiprji0/0J5ELcz3WI/aqn32iphTYgM71I72OHdkGCLweR/pVct0JGgzH1/K+xvSuXzCQL6/bwZv3TKJsxLCsDYzj6y+cMxXO7KP9qot+DGVvJIqfnNOHCLCyAhf5owI5ZWVqeQWV3Lve1sI83HjkXkJp/T9nQrtuUUyEUg2xuwHEJGFwDwgqX4HY8zSBvuvAa7tzEYqVS8uzJtvduZw7sgwHv/JaDxdrKxLzefJb/dwzsgwwv3cu+zc9ZOR+1v5XKVUizQ+KtVOVovwwLkjiB/gwyOfJdmHPPq0PeSxnq+7M2/ePOmEzj0o0IMPbp/KE9/u4cUV+9mUVsBL108gwNOFalsdPq0MfQR7opZTVIUxhpXJh0kI9+m0NdQaCvFxY1J0AF9sz+JXc4Z2aB28nqSyxsbzy1N4blkKdcZwxYRI7pw1hIh2/I0W5uvGuEF+PL88hXfWHmROfCjfJ+UwOy6ExMEBR/e7Z/ZQLpy/knnPrCK7uJKFP5/c5v9jb9SeoY8RQMMZoIccz7XkZuCr5jaIyK0iskFENuTl5bW/lUo53H/WcP595RievWYcXq5OiAh/njcSmzH8adHOLj330UQtp+XqUUqpfqXT4iNojFT9w7wxEWz8wxwubOeQx87i4mTh9+eN4JUbJpB2pJyL5q9i+V77z1mbPWo+blTb6jhUUMGmtIIuGfZY7/zTwknOLWVvJ/ytUVdn2Hgwv0OLjp8MYwzf7sxmzlPL+ff3+5gTH8rSX8/kr5eMaleSVu+dn0/m5esnMDc+jO+TciivtjXpSR010JfZcSFkFVVy6xkxTIrp/B7OnqBTZ9uJyLXABODx5rYbY140xkwwxkwIDg5ubhelWjUs1JuLx0Y0ussUGeDBvXOG8V1SDt/szO6yc9cnavtySk7ZLz2lVN/QVnwEjZGq/+jOnqLZI0L5+K6peLpauf2tjQBtzsGrL9H/2bZMamym0wuJNHROQhgWgc+3ZZ70sT7ZksFlz63mtrc2UnYSi0i3h63O8PCindz65kY8XKy88/NJPHP1OAb6d7wyppuzlTnxoTx5xWg2PjSXVb8782hBuYYeviiBe2YP5b65J17spqdrT6KWATRcIn6g47lGRGQO8CBwkTGmqnOap1T7/Gx6NHFh3vz+o+2trpdyMlJyy3BxslBebSO9QAuKKKU0PirVGw0J8ebTu6Yx1THPrK2lB0J97Yna/zYewsVqaTQEr7MFe7syJTaQL7ZlnfS6sV/vyMbTxcriXTlc9tyPHOqEv11yiit5bllKo8JqVbU2frlwM6+vPsgt06P54penMzW2c5JZZ6uF0BaGyEYGeHDv3GG4Olk75Vw9UXsStfXAUBGJFhEX4CpgUcMdRGQs8AL2INT3F4BQPY6z1cIz14xDBK55aS1pRzo3kSqprCG7uJKZw+x3uXdn962KTEqpE6LxUaleys/DhddumsgrN0xgWhtJRX2PWkpeGeOj/HF36drE4PxR4ew/XMaurPb9rVFd27TydUW1jRX78rh8/EBeu2kiGYUVzJu/iv8u3se/vtvLP77azZPf7ulQJeuMwgqueGE1j329mxmPL+XudzaxLjWfm1/bwBfbsnjg3Dj+cEE8zn2oPH53a/NKGmNqgbuBb4BdwPvGmJ0i8qiIXOTY7XHAC/hARLaIyKIWDqdUl4kN9uKtWyZRWWvjpy+tIbMTF8ben1cGwLmjwgDYo4maUv2exkelejdnq4XZI0JxcWr9z+Fgb1fqR2tOG9L1c6HOTgjFahE+a2P446GCcu56exMj//QNOzKKGm37YV8elTV1zI0P44xhwXxy1zT8PJx58ru9PL14H6+uTOWZpcmc+eQyHl60k7yS1jv70/PLufKF1eSXVfPS9RP4+ekxLNuTxxUvrGb1/iM8fvlp3DYj9qTfu2qsXQtjGGO+BL487rk/Nvh+Tie3S6kTEhfmw1s3T+KnL63h6pfW8OEdUwnycj3p49YPpxwV4UdkgDt7+tgaJ10lJa+U+97bwqs3JhLYCf8PSvU0Gh+V6vucrRaCvFzJK6nq0vlp9QK9XJkdF8Jrqw5w6dgIhoZ6N9peUW2vqvj88hREwGKBl3/Yz7+vGnt0n++ScvB2c2JSjH2YZmywF9/dO4NqWx0uVgsWi5BZWMF/l+zjzTUHeW99OmclhDIs1Jvhod4MDvLE2WrPTvPLqrnz7U2UV9t455bJjBroy9z4UO46cwj/23iIoSHeTB/a9delPzrxFQyV6qFGRvjy2k0TufKF1Ty3LIWHLjh+WaOOS8krxckiRAV6MDzUR3vU2mnlvsNsPVTE5rRC5sSHdndzlFJKqRMywNeNyhoboyJ8T8n5/nLxSM59+gfuemcTn941/ehwy6yiCq5/ZR37cks5/7QB9kqWP6TyxuoDPHDeCEJ93LDVGRbvzuXMuJBGwxAtFsHNcmzYZrifO3+/9DRuPSOW/y7Zx5qUI3y6pflevABPF979+eRGi437uDlz07TorrkACtBETfVR46P8OW/UAN5bn86v5gzF+yTX1kjJLWNQoAfOVgtxYd4s3ZNLVa2tT09g7Qyph+1DRlPySpmDJmpKKaV6p8vHD6SsyobTKZp/FeLjxr+uHMMNC9bx8KKdPHb5aaTklXL9K+soqqjh9Z9NZIZj3vyNUwez4MdU3lpzkPvPGs7GgwXkl1VzVnxYu84VHeTJU1eMAaC4soZ9OaWk5ZfRsJbJpJjADpXYV51DEzXVZ908PZpFWzN5f8Mhbp5+cnd8UvJKiQ32AmB4mDe2OkNybikJ4afmzlpvVT9ktKsqcSqllFKnwvVTBp/yc54xLJg7Z8byzNIUgr1deWddGhaBhbdOZmSDnr1BgR7MHRHK22vTuGvWEL7dmY2L1cKM4R1f5sPHzZnxUf6Mj/LvzLeiTpCWZVF91uhIPyZE+fPaj6nYTmLds1pbHQeOlDEkxJ6oxYXZx4rv1XlqbaovwpLi+FcppZRS7XfvnGFMiPJn/tJk3J2tfHD71EZJWr2bpkWTX1bNJ5sz+DYph6lDAttcH071fJqoqT7t5unRpOdX8F3SiS+EnZZfTo3NHO1Rq59gqyX6W1dZYyOzyF55Mzm39KTXg1FKKaX6GyerhflXj+OW6dH8746pRAd5Nrvf5JgARgzw4Ylv95KWX85cnRfeJ2iipvq0sxLCGOjvzisrU0/4GPW9QbHB9l+OzlYLscFeWlCkDQeO2Me3j4n0o6iihvyy6u5uklJKKdXrhPm68YcL4gnzbX7hZwAR4WfTBnO41F5mf+4ITdT6Ak3UVJ9mtQg3Th3M+gMFbDtUeELHqJ9fFePoUQP78EdN1FqX6khw6+/q6fBHpZRSqutcODqcIC8Xxg7yI8Sn5aRO9R6aqKk+78rESLxcnXji273kllR2+PUpuaUEe7vi636scuTwMB+yiiopKq/p8PE+3ZLB37/cRWF53+5h2u+o+DhnRH2ipgVFlFJKqa7i5mzlzZsn8S9HBUfV+2mipvo8bzdn7j5zCCv25jHtH0v41cLNbE1vf++aveJj4zHhRwuK5Ha8V+0/i/fxwor9zHpiGQvXpVF3EoVOerKUvFLCfNwYGuKFq5OFlFxN1JRSSqmuNGKAD4NbmMemeh9N1FS/cPuMWJb+eibXTo7i+125zHtmFYu2Nr+oY0PGGFLyyo4WEqk3zJGodbSgyJHSKlLyyrhyQiRDQrz43UfbufS5H/tk71rq4TJigj2xWISYYC/tUVNKKaWU6gBN1FS/ER3kyZ8uTGD1A2eSEO7DE9/socZW1+prDpdWU1RRc7Q0f71wXze83ZzYk13coTasP1AAwBWJA3n/tik8dtkotqQX8vm2rI69mR7OGMP+vLKj1aligz11jppSSimlVAdooqb6HW83Z+4/axhp+eV8uPFQk+1pR8qpdSRw9b1Ax/eoiQjDQ73ZmdmxRG1daj6uThZGRfghIlwxIZIQb1fWpeaf4LvpmfLL7AlufQGW2GAv0gvKqayxdXPLlFJKKaV6B03UVL80a3gIYyL9+O/ifVTVHkseFq5L44zHlzLnqeV8sCH9aGXH2ON61ABmDAtmc1ohOzOL2n3e9QfyGRPph4uT/UdPRJgYHcC61Pw+tc5YqqOQSEx9j1qIF8bYS/YrpZRSSqm2aaKm+iUR4ddnDSezqJKF69IBWLI7hwc/2cHEwQF4uDjxfx9u45HPduLubGVAM2Vur586GG9XJ55dmtKuc5ZW1bIzs4iJ0QGNnp8YHUB2cSWHCipO/o31EPsdwxxjgo8NfQRIydVETSmllFKqPZy6uwFKdZdpQwKZGB3A/KXJDA/z5q63NzNigDcLbkrEw8XKkt25PLM0mXA/dywWafJ6X3dnrpsSxXPLU0jOLW0yj+14mw4WUGdoNlED+7DIyACPznuD3Wj/4TKcrcJAf/v7iQmyXxstKKKUUkop1T7ao6b6LRHh/rnDyCup4uqX1hDk7cKrNybi6eqEiDB7RCgf3TmN+VePa/EYN0+PxtXJwrPLkts83/oD+VgtwrhB/o2eHxbija+7c5+ap7Y/r5SoQE+sjgTX3cVKhJ+7JmpKKaWUUu2kiZrq1ybFBDJreDC+7s68ftNEQrybDnFsTaCXK9dMiuLTLZmk55e3uu+61HwSwn3wdG3ckW2xCImD/Vl/oA8laofLjs5PqxcboiX6lVJKKaXaSxM11e89d+14lv9m1tEKhR116xkxWEV4bnnLc9Wqam1sSS8kcXBAs9sTBwew/3AZuSWVJ9SGnsRWZzh4pKzJ9YwN9iQlt6zPLvCtlFJKKdWZNFFT/Z6bsxUfN+cTfn2ojxs/mTCQDzccIqmFcv3bDxVRVVvXYqJWP09tg2Odtd7sUEE5NTbTtEct2IuKGhvZxb0/GVVKKaWU6mqaqCnVCe6YGYuXmxMXzl/Jo58lUVxZ02j7OsewxsTB/s29nJERvrg7W/vEPLXjKz7Wq1+LToc/KqWUUkq1TRM1pTrBQH8Pvr9vBlcmRrLgx1TOfGIZb645SFlVLQDrU/OJDfYk0Mu12dc7Wy2Mi/LrG4la/Rpqxw99DKkv0a+JmlJKKaVUWzRRU6qTBHi68LdLRvHZ3dOJCvTkoU92MOlvi/nDJ9vZcLCgSVn+4yUODmBXdjFFFTWt7tfT7c8rxdfdGX+PxsNJg71c8XZzIiVP11JTSimllGqLJmpKdbKREb58ePsU/nfHVM5KCOWDDYcoqaxlUnRgq6+bGB2AMfb11gAqqm1sPFiAMb2r+Mb+vDJigj0Rabz2nIgwIsyHbYcKu6llSimllFK9hy54rVQXEBHGR/kzPsqfP14Qz9rUfGbHhbT6mrGR/jhbhbfXpvHJlgy+S8qhvNrG786N4/YZsaeo5SenotrG5vQCrpwQ2ez2ybGBzF+yj6KKGnzdT7yAi1JKKaVUX6c9akp1MT8PF85OCMPJ2vqPm7uLldED/fh+Vw7L9+Yxb0w4pw8N4qnv9pLcS+Z1rdiXR2VNHWclhDW7ffqQIOoMrNl/5BS3TCmllFKqd9EeNaV6kMd/MppDBeVMjgnE2Woht6SSs/61gv/7cCsf3j4Vq0XaPkg3+nZnDr7uzi3OxxsT6Ye7s5VVyYc5u4VkTimllFJKaY+aUj1KdJAnpw8NxtnR+xbi7cbDFyawOa2QBatSO/182w8VsTW9c+aM1drqWLw7h9lxIUfbfzwXJwuTYgJYlXy4U86plFJKKdVXaaKmVA83b0w4c0aE8vg3e9jfiWuQVdfW8bPX13P58z/y1faskz7e+gMFFJbXcFZCaKv7TYsNIiWvjOwiXfhaKaWUUqolmqgp1cOJCH+7ZCSuThaue2Ud729Ip8ZWd9LH/WpHFnklVYT5unHXO5v4ePOhkzret0nZuDpZOGNYcKv7TRsSBKC9akoppZRSrdBETaleIMTHjVduTMTf05nffLiN2U8u5911aWw/VERmYQVVtbYOH3PBqgPEBHny1T1nMDkmkPve38o7a9NOqH3GGL7dmcPpQ4PwcGl96mtcmDcBni6aqCmllFJKtUKLiSjVSyQODuCzu6ezeFcuTy/exwMfbW+0/cy4EJ67dhyuTtY2j7UlvZAt6YU8clECXq5OvHpjIne8tZHff7ydyAB3Th/aeq/Y8ZKyiskorOCe2UPb3NdiEabGBrIy+TDGmCbrrSmllFJKKe1RU6pXERHmxIey6O5pfP6L6bx43Xj+dskobpkezZLdudz3/lbq6tpeIPv1Hw/g5erEZeMHAuDmbOX568YzONCDRz5L6vDQym935mARmD2i9bXi6k0bEkRuSRUpnTjnTimllFKqL9FETaleSEQYGeHLWQlhXD1pEH+4IJ4Hzo3ji21Z/OWLXRjTcrKWW1LJ59syuXz8QLxcj3WquzpZ+cP58STnlvLG6oONXrMnu4Q73trI1zuymz32t0k5TBgcQKCXa7vaP90xT23lPh3+qJRSSinVHB36qFQfcesZMWQXV/LqqlT8PZwZGurN5rQCNqUV4Ovuwk3TBjM1NpB31qZRYzPcMHVwk2PMHhHCjGHB/Pu7vcwbE06QlyvJuaVc8/IajpRV89WObBLCfbhv7jDGRPqxJ7uEbRlF7Moq5g/nj2h3WyMDPIgMcGdVyhFunBbdiVdBKaWUUqpv0ERNqT5CRHjo/HhyS6p48ru9ALhYLSRE+LAlvYBrXs4hLsybvJIqZg0PJjrIs/ljXBDPOf9ewRPf7OGOmbFc8/IaAL751RlsO1TEfxbv4+bXNzR63QBfN84/bUCH2jt9SBCfb82i1laHUwvrrimllFJK9VeaqCnVh1gswlNXjOb8UQMI9XFjZIQPrk5WKmtsLNqaySs/pHKkrJqbp8e0eIwhIV7cOHUwr6xKZcnuXKptdSy8dTLDQr0ZFurNvDHhfLY1k/yyaoaHeRMX5kOwd/uGPDY0a3gI765L57LnfuSPF8YzPirgZN66UkoppVSfIq3NZelKEyZMMBs2bGh7R6VUpzHGkFNsXzutNcWVNZz5xDKqaut49+eTGRnh2yVt+XhzBo99vZuc4irmjQnnd+fGMcDXvdPPpbqfiGw0xkzo7nb0FhojlVKqf2gtPmqPmlL9iIi0maQB+Lg588HtU3GyCJEBHl3WlkvHDeTshDCeW5bCiz/s55ud2dwxYwi3nhGDu0vbywwopZRSSvVVmqgppZrV3By2ruDp6sSvzx7OlYmR/OOr3fzr+728tz6Nu88cioeLlYLyagrLa3B1thDq7UaYrxuR/h4MCuyaBFIppZRSqifQRE0p1SNEBnjwzDXjuH7/ER79PInff7y91f3HDvLj2klRnH/aANyctfdNKaWUUn1LuxI1ETkHeBqwAi8bY/5x3HZX4A1gPHAEuNIYc6Bzm6qU6g8mxQSy6O7p7M4uxt3Zip+HCz5uTlTb6sgpriKnuJIdGUW8sy6N+z/Yyp+/SGJqbCARfu4M8HUnMsCD+HAfwn3dEBEAisprWJt6hH25pfi4OxPk6UKQtytRgR6EeLc9FFSplmh8VEop1VXaTNRExAo8A8wFDgHrRWSRMSapwW43AwXGmCEichXwGHBlVzRYKdX3WS1CQnjjAiZOVgvRQU5EB3kyOSaQm6dHszrlCO+sSyMps5jFu3Kpqq07un+ApwsJ4T7kl1WTlFVMS3WTgr1dSQj3YcQAHwYHehDp70FkgAf+ni64OVl06QDVIo2PSimlulJ7etQmAsnGmP0AIrIQmAc0DETzgIcd338IzBcRMd1VUlIp1eeJCFOHBDF1SBBgryJZUF7DgSNl7MwoYntGETsyivFxd+JXs4cxJTaQkRE+lFbWcri0mrzSKpJzS9mZWURSZjEr9x2mtq7prywni+DubMXNxYq7sxUPFyvOVgtWi+BkEawWwcXJgrPVgpNFqDNQY6ujxlaHrc7gZBWsFgvOFjl6TAMI9oTU2WrBySqI4/n6JgggAhYRLGI/l8UiWC0gCBbhaI8hjn3tr5NGj4//LWx/nf24InL0cf3rGh5PsC/58Ks5w07sP6nv0/iolFKqy7QnUYsA0hs8PgRMamkfY0ytiBQBgcDhhjuJyK3ArY6HpSKy50Qa3UDQ8edQgF6Xluh1aV6fvy7vndjL+vx1aa97Gz880esS1Rlt6WE6LT6CxshTSK9L8/S6NE+vS1N6TZrX6fHxlBYTMca8CLzYWccTkQ26Lk9Tel2ap9eleXpdmqfXpXl6XbqOxshTQ69L8/S6NE+vS1N6TZrXFdelPZMvMoDIBo8HOp5rdh8RcQJ8sU+aVkoppfoqjY9KKaW6THsStfXAUBGJFhEX4Cpg0XH7LAJucHx/ObBEx98rpZTq4zQ+KqWU6jJtDn10jKm/G/gGe/nhV40xO0XkUWCDMWYR8ArwpogkA/nYg9Wp0GlDRPoYvS7N0+vSPL0uzdPr0jy9Lg49PD6C/l+1RK9L8/S6NE+vS1N6TZrX6ddF9MaeUkoppZRSSvUsukCQUkoppZRSSvUwmqgppZRSSimlVA/TaxM1ETlHRPaISLKI/K6729NdRCRSRJaKSJKI7BSRexzPB4jIdyKyz/Gvf3e39VQTEauIbBaRzx2Po0VkreMz855j8n+/IiJ+IvKhiOwWkV0iMkU/KyAi9zp+fnaIyLsi4tYfPy8i8qqI5IrIjgbPNfv5ELv/OK7PNhEZ130tVw1pfLTT+Ng6jZFNaYxsnsZIu+6Ikb0yURMRK/AMcC4QD/xUROK7t1Xdpha43xgTD0wG7nJci98Bi40xQ4Hw9pU5AAAgAElEQVTFjsf9zT3ArgaPHwP+ZYwZAhQAN3dLq7rX08DXxpg4YDT269OvPysiEgH8EphgjBmJvSjEVfTPz8trwDnHPdfS5+NcYKjj61bguVPURtUKjY+NaHxsncbIpjRGHkdjZCOvcYpjZK9M1ICJQLIxZr8xphpYCMzr5jZ1C2NMljFmk+P7Euy/VCKwX4/XHbu9DlzcPS3sHiIyEDgfeNnxWIAzgQ8du/THa+ILnIG9Ch3GmGpjTCH9/LPi4AS4i32dKw8gi374eTHGrMBembChlj4f84A3jN0awE9EBpyalqpWaHx00PjYMo2RTWmMbJXGSLonRvbWRC0CSG/w+JDjuX5NRAYDY4G1QKgxJsuxKRsI7aZmdZd/A78B6hyPA4FCY0yt43F//MxEA3nAAsdwl5dFxJN+/lkxxmQATwBp2INPEbAR/bzUa+nzob+Heyb9f2mGxscmNEY2pTGyGRoj29SlMbK3JmrqOCLiBfwP+JUxprjhNsfiqv1mHQYRuQDINcZs7O629DBOwDjgOWPMWKCM44Zw9LfPCoBjPPk87EE6HPCk6dAGRf/8fKjeT+NjYxojW6QxshkaI9uvKz4fvTVRywAiGzwe6HiuXxIRZ+xB6G1jzEeOp3Pqu1gd/+Z2V/u6wTTgIhE5gH3Yz5nYx537ObrtoX9+Zg4Bh4wxax2PP8QelPrzZwVgDpBqjMkzxtQAH2H/DPX3z0u9lj4f+nu4Z9L/lwY0PjZLY2TzNEY2T2Nk67o0RvbWRG09MNRRccYF+6TGRd3cpm7hGFf+CrDLGPNUg02LgBsc398AfHqq29ZdjDEPGGMGGmMGY/9sLDHGXAMsBS537NavrgmAMSYbSBeR4Y6nZgNJ9OPPikMaMFlEPBw/T/XXpV9/Xhpo6fOxCLjeUdlqMlDUYPiH6j4aHx00PjZPY2TzNEa2SGNk67o0Roq9l673EZHzsI+xtgKvGmP+2s1N6hYiMh34AdjOsbHmv8c+Dv99YBBwELjCGHP8BMg+T0RmAr82xlwgIjHY7x4GAJuBa40xVd3ZvlNNRMZgnzzuAuwHbsJ+w6Zff1ZE5BHgSuxV4jYDt2AfS96vPi8i8i4wEwgCcoA/AZ/QzOfDEbDnYx8CUw7cZIzZ0B3tVo1pfLTT+Ng2jZGNaYxsnsZIu+6Ikb02UVNKKaWUUkqpvqq3Dn1USimllFJKqT5LEzWllFJKKaWU6mE0UVNKKaWUUkqpHkYTNaWUUkoppZTqYTRRU0oppZRSSqkeRhM1pZRSSimllOphNFFTSimllFJKqR5GEzWllFJKKaWU6mE0UVNKKaWUUkqpHkYTNaWUUkoppZTqYTRRU0oppZRSSqkeRhM1pZRSSimllOphNFFTSimllFJKqR5GEzWllFJKKaWU6mE0UVNKKaWUUkqpHkYTNaWUUkoppZTqYTRRU0oppZRSSqkeRhM1pZRSSimllOphNFFT/YKIfCUiN3T2vkoppZRSSnUFTdRUjyUipQ2+6kSkosHjazpyLGPMucaY1zt73xMhItGO9/NcV51DKaWUaqgzY6rjeMtE5JZ27OflOMdXJ9ZypfovTdRUj2WM8ar/AtKACxs893b9fiLi1H2tPCHXAwXAlSLieipPLCLWU3k+pZRSPUN7Y2oXuAyoAuaKSFgXnqeJXvj3gVKNaKKmeh0RmSkih0TktyKSDSwQEX8R+VxE8kSkwPH9wAavOXrnT0RuFJGVIvKEY99UETn3BPeNFpEVIlIiIt+LyDMi8lYrbRfsidofgBrgwuO2zxORLSJSLCIpInKO4/kAEVkgIpmOdnzSsH3HHcOIyBDH96+JyHMi8qWIlAGzROR8EdnsOEe6iDx83Ouni8iPIlLo2H6jiCSKSE7DRE9ELhWRre36T1NKKdUjiYhFRH7niDlHROR9EQlwbHMTkbcczxeKyHoRCRWRvwKnA/MdvWXzWznFDcDzwDbg2uPO3STeOJ53F5EnReSgiBQ54rB7ffw/7hgHRGSO4/uHReRDR5uLgRtFZKKIrHacI0tE5ouIS4PXJ4jIdyKS74hzvxeRMBEpF5HABvuNc/yN4Xwy11upjtBETfVWYUAAEAXciv2zvMDxeBBQAbQWOCYBe4Ag4J/AK44kqqP7vgOsAwKBh4Hr2mj3dGAgsBB4H3sAA0BEJgJvAP8H+AFnAAccm98EPIAEIAT4Vxvnaehq4K+AN7ASKMOeLPoB5wN3iMjFjjZEAV8B/wWCgTHAFmPMeuAIcFaD417naK9SSqne6xfAxcAMIBz7iI9nHNtuAHyBSOxx7nagwhjzIPADcLejR+7u5g7siCkzgbcdX9cft61JvHFsfgIYD0zFHut/A9S18/3MAz7EHuPeBmzAvdhj+BRgNnCnow3ewPfA1473PgRYbIzJBpYBVzQ47nXAQmNMTTvbodRJ00RN9VZ1wJ+MMVXGmApjzBFjzP+MMeXGmBLsicmMVl5/0BjzkjHGBrwODABCO7KviAwCEoE/GmOqjTErgUVttPsG4CtjTAH2JO8cEQlxbLsZeNUY850xps4Yk2GM2S0iA4BzgduNMQXGmBpjzPK2LlADnxpjVjmOWWmMWWaM2e54vA14l2PX6mrge2PMu47zHDHG1AfO13HcDXXcbT3b8R6UUkr1XrcDDxpjDhljqrDfdLxc7MMGa7AnaEOMMTZjzEZjTHEHjn0dsM0Yk4T9BmWCiIx1bGs23oiIBfgZcI8jDtqMMT862tYeq40xnzhiXIWjzWuMMbXGmAPACxyLeRcA2caYJx3xscQYs9axrWHMswI/xX7TVKlTRhM11VvlGWMq6x+IiIeIvOAYJlEMrAD8pOU5Wdn13xhjyh3fenVw33Agv8FzAOktNVhE3IGfYL/DhzFmNfZ5Alc7dokEUpp5aaTjPAUtHbsNjdokIpNEZKljCEcR9iAd1EYbAN4CLhQRT+x3GX8wxmSdYJuUUkr1DFHAx46hgYXALuy9UKHYE5NvgIWOoff/7ODQv+s5FvMygOUcG0nSUrwJAtxa2NYex8e8YWKfDpHt+Pvgb7Qv5n0KxItINDAXKDLGrDvBNil1QjRRU72VOe7x/cBwYJIxxgf7sEGAloYzdoYsIEBEPBo8F9nK/pcAPsCzjoCRDURwLGilA7HNvC7dcR6/ZraVYR8SCYA0P1H7+Gv1Dvaev0hjjC/2uQP116mlNtQH2dXApdjvkuqdRaWU6v3SgXONMX4NvtwcvVk1xphHjDHx2IchXsCx4YvHx5ZGRGQqMBR4oEHMmwRc7eitayneHAYqW9h2fMyzYh822dDx7XoO2A0Mdfx98Hsax7yY5trvuBn8PvZeNY15qltooqb6Cm/s89IKHcPy/tTVJzTGHAQ2AA+LiIuITOG44iDHuQF4FRiFfSz+GGAaMFpERgGvADeJyGzH5O4IEYlz9Fp9hT3B8xcRZxGpT0S3Yh9KMkZE3LAPWWmLN/YeukrHvLirG2x7G5gjIleIiJOIBIrImAbb38A+V2AU8FE7zqWUUqpnex74q2POGCISLCLzHN/PEpFRjoSoGPtQyPq5Yjm0kOQ43AB8B8RzLOaNBNyxD+dvNt4YY+qwx8qnRCRcRKwiMkXsVZL3Am5iL4rljL0wV1vVk70dbS8VkTjgjgbbPgcGiMivRMRVRLxFZFKD7W8ANwIXoYma6gaaqKm+4t/Yf/kfBtZgnxh8KlyDfXLyEeAvwHvYyxA3IiIR2Ccw/9sYk93ga6OjrTc4hlTchL1QSBH2ISJRjkNchz1A7gZygV8BGGP2Ao9inwy9D3uxkLbcCTwqIiXAH7HfMcRxvDTgPOw9lPnYJ3aPbvDajx1t+vi4IZ9KKaV6p6exj7L41hEX1mDv+QJ74a4PsSc6u7DHpTcbvO5ysVci/k/DAzpuHF4B/Pe4mJfqeP0NbcSbXwPbgfWObY8BFmNMEfYY9jKQgb2HrVEVyGb8GvsNyRLgJexxGgDHnPa52G+yZmOPo7MabF+FPTHd5Lg5q9QpJca02nOtlOoAEXkP2G2M6fIeve4iIinAbcaY77u7LUoppVRXEpElwDvGmJe7uy2q/9EeNaVOgtjXF4t1DFU8B3tZ4E+6u11dRUQuwz7+f0l3t0UppZTqSiKSCIyjQS+cUqdSm4maiLwqIrkisqOF7SIi/xGRZBHZJiLjOr+ZSvVYYdjXWikF/gPcYYzZ3K0t6iIisgz7pOy7HHMIlOr3NEYq1TeJyOvYpxX8yjFEUqlTrs2hj46iBaXAG8aYkc1sPw/7YonnYR/T/LQxZtLx+ymllFJ9jcZIpZRSXaXNHjVjzArsEzlbMg97gDLGmDXY164a0FkNVEoppXoqjZFKKaW6ilMnHCOCxosLHnI812QhXBG5FbgVwNPTc3xcXFwnnF4p1Z9U19ZRXm2josZGpeOrtq7xyAABXJwsOFstjbY7Wy3U2OyjNt2crLg6t3yvSgSsIlgtgkW6cjm+ni/Yu63q123buHHjYWPM8esd9QcaI5VSSrWotfjYGYlauxljXgReBJgwYYLZsGHDqTy9UqoXqKq18eX2LJbszsPNyYK3mzPebk6k5Zezdv8RDhdVAuDpZGFsqBcjwnyICfZioL87Ef7uDPRzJ8jLFYvFnlzV1Rl2ZBbxXVIOu7NLmBwTyNwRoQwK9GitGaqTiYiWtm6DxkillOp/WouPnZGoZQCRDR4PdDynlFLtlllYwfsb0nlrTRqHS6sI9XHFIkJJZS2lVbUEebkwKTqQ22MCmBAVwNBQL5ytbReutViE0wb6cdpAv1PwLpRqQmOkUkqpE9IZidoi4G4RWYh9onSRMabJkA6llGrIGMNn27JYuS+Ptan5HDxiXz/7zLgQbpw6mOlDgo72itnqDBYB6edDEFWvpDFSKaXUCWkzURORd4GZQJCIHAL+BDgDGGOeB77EXs0qGSgHbuqqxiqlTp3/LN5HQXk1vzhzKAGeLo22VVTbEAE3Z+sJH//DjYf4vw+34evuTOLgAK6bHMXsEaFEB3k22ddq0QRN9UwaI5VSSnWVNhM1Y8xP29hugLs6rUVKqZOSdqSct9cdZKC/B2Mj/YgL88apHUMEG1q6O5envtsLwP82HuK+ucO4ZnIU2zOKWLgujc+2ZmEROHfUAC4bN5BJ0QFHe7/a69MtmUQFerD0/pkdfq1SPYXGSKWUUl3llBYTUUp1nbo6w9vr0vj7l7uoqLFRv0Sim7OFAb7u1KdC3m5OPHb5acSF+TR7nKKKGh74aDvDQr146ooxPPb1bh7+LIknv91LSVUtHi5W5o0Jp84YvtyezYcbDxEd5Ml7t04mxMetXW09XFrFjymHuWNmrCZpSimllFLN0ERNqV6qssZGcUUNxZU15JfV8PTivaxKPsLpQ4N47LLTsNUZNqcXsiWtkLzSqqOvW51yhFte38Ciu6c3GdII8JfPk8grreLF68czMsKXN342ke935fLJ5gymDw3iwtHheLnaf3U8ctFIvtyexf0fbGXh+nR+OXtou9r+1Y5s6gxccFp451wMpZRSSqk+RhM1pXoRYwwbDhbw2qoDfL0zG1uD9cM8XKz89ZKRXD1x0NGiG5EBHlw0unEytCW9kCteWM2db2/kzZsnNaqcuHRPLh9sPMSdM2OPVkkUEebGhzI3PrRJe9xdrFw2fiD/23SI9zekc/esIe3qIft8ayaxwZ7EhXmf0HVQSimllOrrNFFTqpdYue8wf/9qFzszi/Fxc+KGKYOJCfbEx90ZHzcn4gf4tGvo4ZhIP/5x6Sjue38rf/k8iUfmjaS8upY1+4/w+492MCzUi3vmtK9nrN6ViZHcs3ALq/cfYdqQoFb3zSmuZN2BfH555lCt4qiUUkop1QJN1JTqBfJKqrjj7Y0EeLrwt0tGcfHYcDxcTvzH99JxA9mVVcxLP6Sy5VARuzKLqbbV4e3qxIvXj8fVqWPVHM9OCMPX3Zn31qe3mah9uT0LY+DC0QNOuP1KKaWUUn2dJmpK9QL/+Go3lTU2Xr0xkdhgr0455m/PiSOjsIKU3DJumBrFGcOCSRwccEIl992crVw8Jpx316dTWF6Nn0fTuW/1Pt+WRVyYN0NCdNijUkoppVRLNFFTqodbfyCf/22yzxvrrCQNwMlq4dlrxnfa8a5IjOT11Qf5ZHMGN06LbnafzMIKNh4s4NdnDeu08yqllFJK9UUdW1xJKXVK1drqeOiTHYT7unH3mUO6uzmtSgj3ZWSED+9tOIQxptl9vtiWBWi1R6WUUkqptmiiplQPcuBwGd/uzCY9vxxjDG+uOcju7BL+eGH8Sc1JO1WuTBzErqxidmQUN7v9qx1ZjIzwYXCQ5ylumVJKKaVU79Lz//JTqh+57/0tbEorBMDHzYmq2jrOGBbM2Qlh3dyy9rlodDh/+TyJ9zekM2qgb6NtlTU2tmcUccvpMd3UOqWUUkqp3kMTNaU6WXl1LW+uPsihggpOG+jL2EH+xAR5trm+WGF5NVvSC7lyQiSnRfqyM7OYjIIKHp2X0GvK2Pu6O3P60GB+2JfXZNvOzCJqbIaxkX7d0DKllFJKqd5FEzWlOklVrY1316Yxf2kKh0ur8HCx8uaagwAEebnw5s2TGDHAp8XXr0w+TJ2xF+UYH+V/qprd6SZG+/P9rhxySyoJ8T62rttmR0/h2EG9970ppZRSSp0qmqgp1QmSMou59c0NHCqoYFJ0AC9cN46xkf6k5JWyOb2QP3+WxIsr9vOvK8e0eIwf9h7G282J0ccNGextEgcHALA+tYDzTzu2VtqmtAIiA9wJ9nbtrqYppZRSSvUaWkxEqZO0Oa2Aq15cja3O8MbPJrLw1smMjwrAYhGGhnpzxYRILh0XwRfbsjhSWtXsMYwxrNiXx/QhQThZe/eP5cgIX9ydraw/kN/o+c1phYyN1N40pZRSqiepqzP8/ctdLFyX1t1NUcfp3X8RKtUJiipqyCisOKHXrk45wrUvr8Xf04X3b5vCGcOCm51Pds3kKKptdXyw8VCzx0nOLSWrqJIzhgWfUDt6EmerhbGD/BolallFFWQVVTJ2kM5PU0oppXqSx77ZzQsr9vPHRTtJzy/v7uaoBjRRU/3akdIqLnlmFTMfX8ozS5OptdW1+7Wrkg9z44J1hPu58/5tU4gM8Ghx32Gh3kyKDuDttQepq2u6xtiKfYcBOH1oUMffRA+UODiAXVnFlFTWAMfmp43T+WlKKaVUl3l+eQp//2oXRRU17dr/nbVpvLB8PxeNDscqwt++3NXFLVQdoYma6rfKqmr52WvrySisYPqQIB7/Zg+XPb+a5NzSdr3+maXJBHu78t5tUwj1cWtz/2snR5GeX8HyZioirtibR0ywJwP9W072epOJ0QHUGdh4sACwDw91cbK0WkxFKaWUUicus7CCx7/ZwwvL9zPriWW8vfYgtmZuDtdbtieXhz7dwczhwTx1xWjumBnLVzuyWbP/yClstWqNFhNR/VKNrY473t7E9owiXrhuAnPjQ/lsayYPfbqDc59egZ+Hy9F9Zw0P5p+Xj270emMMu7KKOTshjABPl+MP36yzE8II8nLlrdUHmTU85OjzlTU21qYe4arEQZ3z5nqAsYP8cLII6w/kM3N4CJvSChkV4YuLk94bUkoppdrLGMOS3bm8ueYg1bXHRv1cNm4gl40f2Gjft9YcxBjDS9dP4KUf9vPgxzt4+YdUBvg2fzN5a3ohw0K9mX/1OJysFm49I4b31qfzyGdJfP6L6VgtQm5xJfOXJhM/wIerJvadv1N6C03UVL9TVWvjtx9uY8XePP5x6SjmxocCcOHocCbFBPDKD6kUV9YCsCOjiE+3ZPK3S0Y1KvKRV1JFQXkNcWHe7T6vi5OFqxIjeWZZMocKyo/2nm04UEBlTR1nDOsbwx4BPFycSIjwZX1qAdW1dWzPKOKGKVHd3SyllFKq10jOLeXRz5NYsTePCD93wv3sCVduSRUPfLSdxMEBDAq0/y1RWWPj3XVpzI0PZW58KHNGhPDl9mzeXnuQmhamdUyJDeLPFyfg5WpPB9ycrTxwXhx3v7OZt9YcpKLGxn8X76Os2gaAj7sz540a0OyxVNfQRE31G8YYFu/K5S9fJHHgSDm/PmtYk7tDId5uPHDeiKOPP9mcwa/e20JyXilxYceG7e3KLgEgroND+X46aRDPLkvmlZWp/PGCeESEFfvycLFamBwTeBLvrueZONif11cfZEt6IdW1dbp+mlJKqR6lpLKGv325i/vPGk6QV89aOua1Van85YtduLtYeeiCeK6fEoWz44ZxTnEls55Yxl+/TOKF6yYA8OmWDArKa7hpWjQAIsL5pw1otExOe5w/agBvDD7InxbtBGDOiBD+7+w4fv/xdu59bwthvm5H55sfLq3imaXJpB4ua/F4l40byIWjwzv8/puTU1zJs0uTmRwTyLn9JGHURE31C+n55Tz4yQ5W7M0jNtiT1382kRntqLA4MsKeiO3IKG6UqO3OKgboUI8aQISfOxecFs6CVQdYl5rPL84cwvI9eUwY7I+HS9/6cUwcHMBLP6Ty+o8HALTio1JKqR7lm505vLsundMG+vHTHjSszxjDs8tSGDvIj+evHU/gcUlkqI8bd80awuPf7OHH5MNMiQ1kwaoDxIXZC5edDBHhL5eM5J9f7+a6KYOP/q304nXjueTZH/n56xt4//YpLN2dy9Pf76OixkZ8uA9N613DkbJq7lm4GS9XJ2bFhTSzR/tU1th4ZWUqzyxNprzaxttr03jD3ZmpQ/rOSKSW9K2/DJVqhjGGu9/ZxP68siZ3pdoSHeSFu7OVHRlFXN5gLPju7BIG+Lo1msvWXk9eMZrThwbx7LIUbn9rEwC/HRvX4eP0dPULX3+1I4sBvm4M8HXv5hYppZRSxyzdkwvYpzn0JFlFleSWVHHnzNgmSVq9m6dH8+66NB79PImHLohnd3YJj102qtklgjpqWKg3L9+Q2Oi5QC9XFtyUyKXP/sjcp5ZTZ2DGsGAeuiCeISFezR6nrKqWK15Yzd3vbOL926eQEO7boXYYY/g2KYe/frGLtPxyzooP5Zezh3Lve1u47a2NfHTHVIaG2m+Y55ZUsmDVASL83LkqMbLXr0lbr2+8C6VasXhXLlsPFfHQhfHcPD263UkagNUixIf7NPklviuruMO9afWcrRZ+MiGS7++bwdNXjeHshFAuHts5wwJ6En9PF4aGeFFntDdNKaVUz1Jrq+OHvfYqzDszi7u5NY3VL2kzppUpA27OVn5/3gh2Z5fwy3c34+/hzLwxEV3arthgL16+YQLThgSx4MZEXv/ZxBaTNABPVydevTERH3dnfvbaerKK2r9m7d6cEq59ZS23vbkRN2cLb908iRevn8DICF8W3JSIq5OVm15bT2ZhBS+uSOHMJ5bz/PIU/vDJDs7/z0p+TD7cGW+522mPmurT6uoMT323l6hADy4de2K/wEZF+PL+hnRsdQarRaiurSMlr/SkuvHBngTOGxPR5b9Yu1NidAD7cksZG6nz05RSSvUcm9MLKa6sZaC/O7uzi4/G+M72+bZMnCzCOSPbP6dqS7p9SZv4NubBnzsyjInRAaxLzefOmbG4OVtPtrltShwcwJs3T2r3/qE+brx6YyI/eX41V724hpERbfeqVdXYWLonDy9XJx65KIFrJg1q1EM20N+DV26YwJUvruaMfy6lts4wOy6EB88fwd6cUv76ZRJXv7yWsxNCefC8+KMFV8DeS/ddUg4b0wq4dlJUozVw63vwNqcVcu3kQa0umZRbUsnjX+/hrISwo0XpuoImaqpP+zYpm6SsYp66YvQJd4MnhPtQXm0j9XAZQ0K82H+4lBqbOeEetf5kSkwg76xNI/Ekx8wrpZRSnWnp7lysFuGW6dE8/FkS+/NKjw6j6yw1tjoe+mQHEf7uHUzUCkkI92lzSRsR4c/zRvLwop3cMHXwSba264wY4MPz147nb1/uOjrHvy3XTBrEvXOG4d/CEkijI/149ppxvLhiP7fPiGWmY9mjmGAvZg4P5uUf9vPM0hSW7lnOz0+P5s6ZQ8gorODRz5JY6ehtW7DqALeeHsOds2JJz6/g0c93sir5iGNbKrfNiOX2GTGNaghU1dpYsOoA85ckU1VrY3gX/y2oiZrqs+rqDP/6bh8xwZ5cdBIVh+rv/uzIKGJIiBe7s+wVH3Xx5radP2oAA3zdGBOpQx+VUkr1HMv25DE+yp/JsfaKyzszi1tN1L5LyuHgkTKunRzV7p6rlcmHKSivwdKBeWM1NvuSNu0tbjI8zJt3b53c7uN3l+lDg/jyntM79ZhnxoVyZlzT3iw3Zyt3nzmUy8dH8s+vd/PM0hQWrkunsKIGTxcrD18Yz+wRoTzx7R7mL03m3XVpFJRX4+3mzKPzEpg1PITHv9nDfxbv44MN6Y2qcm9OK+DAkXLmjAjhwfPjiQ7y7NT3dDxN1FSf9cX2LPbklPD0VWNOalLpkBAvXJws7Mgo4uKxEezKLsbFaunyH86+wGIRJgzW3jSllFI9R05xJUlZxfz2nDhig+0xfmemPcY3x1ZnePDj7eSWVPH66gM8eF48ZyeEtlm447OtmYC9+mFlja1dCd6e7BIqa+r0BmcnCPN146krx3DN5CjmL9nHoAAP7pkzjABHL93TV43luslRzF+azOBAT+6ZPfRoD95/fjqW66ZE8fg3e9h4sODoMQO9XHhk3sh2VQ7vDJqoqT4pr6SKf3+/l2GhXlxw2skV6nC2WhgxwIcdmfaCIruzShgS4tWhoiRKKaWUOvWqam3MX5LMtZOjCPWxLxi9fI+9iMisuGCcrRbiwrxbLSiyLjWf3JIqfn56NCv2Hub2tzYybUgg/75yLMHezVdlrKyx8e3OHHzcnCiurCWrqLJdN3i3pNsLiYzTtUc7zfgofxbcNLHZbRMGB/BaC9sSBwfw/m1TurJpbdK/NFWfkltcyZ8/T767YuAAACAASURBVOL0fy4h9XAZvz0nrlMmB48M92FnRjF1dYbd2cXEDdD5aUoppVRPt2Z/Pv9dksxNC9ZTWlUL2Mvyh/m4Mdwx1DEh3IedmcUYY5o9xmfbMvFwsXLv3GF88cvpPDovgY0HC7jljQ1UVNuafc2yPbmUVtVy7eQoALIK21fxcHNaIYGeLgz01yVtlCZqqg/5YEM60/+5lNd+PMD5o8L5/r4ZzB7ROZV4Rkb4UlJVy9ZDheQUVzEiTOenKaWUUu2xdv8R/rfxULPbfkw+fHSIYGtsdYZnlyVTUFbdoXPXL6+zJ6eEX7yzicoaGyv3HWZWXPDRoYvx4b4UVdSQ0UwyVWOr46vtWcwZEYqHixNOVgvXTxnM01eNZduhQu59bwt1dU0TvM+2ZhHo6cJljjVYmzt2c7akFzAm0q9T1kNTvZ8maqpPqKyx8Y+vdpMQ7sOS+2fw5BWjiQlueW2PjhrpWKTxQ0eg0R41pZRSqm1b0gu5YcE67v9gK++uS2u0bVNaATe9tp6HPt3RYm9WvW2HCvnn13t4bnlKh86flFlMZIA7j85LYOmePK5/ZR0lVbXMGHZsiZ2EcPvN1+aGP9YXBLnwuKJkZyeE8eB5I/h6Zzb/+Hp3o22lVbUs3p3DeaMGHO0ZyyqqbLOtRRU1pOSV6fw0dZQmaqpP+GhTBkfKqvnN2XFEBXZ+kY9hYV44W4VFjrt+cdqjppRSSrUqPb+cW15fT7C3K9OHBPGHT3awwrHIdNqRcn7++gZqbHUUlteQ2UYik1lo375wXRrl1bXtbsPOzCISBvhyzaQobjsjhnUH8nG2CtOGHKvkNyLMB4s0n6h9tjUTHzcnzhgW1GTbzdOjuX5KFC+u2M9zy1KwOXrWvk/KobKmjovGhOPqZCXIy7Vdiz1vO2SfnzZW56cpB03UVK9XV2d4+Yf9jIrwZXJM11QYdHWyMizUm5LKWoK8XFqcPKyUUkope+/QTa+tp7q2jgU3JvLcteMYGuLFnW9vYu3+I9z42jpq6wyPXz4aODZEsSX1iU5xZS0fbcpoVxtKKms4cKT8aI/Zb8+J4+pJg7gqcRDebs5H93N3sRIT7EVSZuM21BcEOWdkGK5OTSs2igh/vCCecxLCeOzr3Vw0fyXrUvP5bGsmA3zd+H/27jy+7fq+H/jro8uSfMn37cROHIc4J5iEJFASjhYoR9sVSg9Gj5Vua1mPdRvdXbZu+63H1m6sK6UdtGtLKWVtoLSUAoEASUhInDt2HDvxbVm2ZUu2bn1+f+iwbEmWbMvW9Xo+HjyIpa/kT4Twxy99Pp/3+yp/4KoxaNFvjr2i1tZjhhDA5rrYTaEpOzCoUVr5ZVs/vvBUG+yumcO7L583oss0hU++o3FZ93QHtj9yNY2IiCg6j1fij3/0Ni6PTuE797VibXk+8rVq/M/HrkZujhIfePQQ+sZsePS+q3Dbpqqoq1mhBsx26DVKbKwpwONvXoq5VRIAzvn7nrbU+OZthULgn967Cf/wno1h1wYKioQKFAS5c0vksv0AoFIq8O2PXIn/+OA2jE85cc93DuLldiNu31wFhb+YWVWhLq5iIm29Zqwpy0NBSIik7MagRmnl/47345lj/fiTnxyH2+MFADx6oAs1Bh1u21i5rN97o/8H/fpl7kJPRESUztp6x/FG5yj++t0bsHPNzBbDqkIdvnf/1WgszcVX796MHY0lUVez5how21Bt0OGjuxrQabTi9U5TzHGc8T9nS3XsFaqW6gIMTtgxFlKs5NkTgyjN08TcrSOEwB1bqvHSn+7B525qQl2RHh+4ui54f5VBiwGzbd5wKaXE8V4zz6fRLAxqlFYujlhRlp+D354dxkPPnMLxnnG81T2Gj+1evaSm1vHY4v/hGfhkjoiIKJN5vBI/O9q74EqLh7rGACCsAAfgq6L88hf34K6tM6tUkVaz5hqc8AW1O7ZUoTRPg8ffuBRzHGcGJlGap0F5HMcVAmEuEO6Mk/ZgQZB4f7/QaZT43E3r8Nqf78Xa8pkPdWsMOkw5PZi0Rz9b1ztmw9iUk0GNZmFQo7Rhd3nQN27Dh3fU47M3NuHpt/vw8cePIF+rwr3b65f9+2+uNeCJj29fcgNtIiKidPAPz53Fnz19En/9y9MLetzh7jGsq8hDca4mrusjrWbN1W+2o7pQixyVEh/aXo+X2424ZJqa93nPDExiQ3VhXMciAufY2nrMePS1i7jh66/C45W4p7UuxiNjqyr0VX4cmGf74/HecQBgUKNZGNQobXSbpiAlsKYsD5+7qQkf3bUa49MufGh7PfJyVCsyhuvXlUG9zCt3REREyfb917vx+JuX0FiWi1+dHMRb3WNxPc7l8eLopTHsaCiJfbHf3NWsuRxuD0xWRzDwfOSaVVAKgb/55Wn8x0sX8B8vXcB3Xr0YbGgdeMyFYUswgMVi0GtQY9Dh6y924J+eP4/tDcV44XPvwMaapRf2qDZoAWDeyo9tvWbo1Eoer6BZVua3W6IE6BrxfXK2piwvWGnpuqZS7F4bXjKXiIiIFue3Z4bwD786i3e1VOAb92zFTd94FV9+9gz2feZaKBXzr06d7p/AtNODHQuowhzax+y6prKw+4f8pfsDgae8QIsPXF2HHx3uwYELM2fVnG4vHryxCQBwYdgKt1fGHdQA4J0tFTh4cRR/cet67G0uj/2AOFUbfAFzvsqPbb1mbKopXPZjHJReGNQobVwcsUIIoKHU1ydNoRC48YqKJI+KiIgoc5zun8Bnn2zD5loD/v0D26DTKPHQrevx2Sfb8PTbvfjA1fMfNTjsX3nb3hB/UAusZkU7pxbooRYIPADwlfduwpfvbAl+/bHHj+CHhy7jU9evgUalWFAhkYC/u6Ml9kWLUJqXA5VCRK386HB7cGZgEh/dtXpZvj+lr7hiuxDiFiFEuxCiUwjxUIT7VwkhXhJCnBRC7BdC1CZ+qJTtLo5YUWPQQacJ72VCRJQMnB8p0/zrC+3I06rw2O+3BufbO7dU46pVRfjqC+2w2F3zPv5w1ygay3JRnq9d0Pf1FRSJvPUxsGUwNKgBvtL4gX8+vrsBRosDvz49CMC3OpeXo8KqYv2CxrEclAqBykItBqM09T43aIHT7eX5NAoTM6gJIZQAHgFwK4ANAD4ohNgw57KvAfiBlHIzgIcB/HOiB0p0ccSKNWV5yR4GEREAzo+UeUatDrzRacL7r6pFWUilxMBxA5PVif98pTPq4z1eiaOXxhd0Pi2gpboQ3aYpTDnCKyMGinBUFUYPf9evK0NDaS4ef/MSAN/K4BVV+cFeZslWXahDf5QVtbYeXyGRbfUMajRbPCtq2wF0Sim7pJROAE8CuGvONRsAvOz/8ysR7idaEq9X4qJxikGNiFIJ50fKKL8+PQSPV+LOCGX1t9QZcNumSvzsaF/Ux58dmITF4Y7ZdyySluoCSAmcHwrf/jgwYUdJrgZadfQdNQqFwP07V+F4jxnHesZxbtCyoG2Py63aoI1aTKSt14yKgpxgsRSigHiCWg2A3pCv+/y3hToB4H3+P78XQL4QIuzjFCHEA0KIo0KIoyMjI4sZL2WpoUk7bC4PGstykz0UIqKAhM2PAOdIWroDF0YirkjFa9+JAawtz4taeXBTjQFjU86o2x8Pd48CwOJW1GpmCorMNWC2ocoQeyvl+1vrkJejwpf3nYHN5VlQIZHlVmXQYWjCDq83vOl1GxtdUxSJKi3zRQDXCyGOA7geQD8Az9yLpJSPSilbpZStZWXhVX2Iork4YgUArqgRUbqJa34EOEfS0gxP2nHf997CV19oX9TjBydsOHJpDHdsro7ad6zef96rdyzyytChrjGsLtGjcp4titFUFmhRnKvBmf7woDZotse12pSXo8LdrbU40bfwQiLLrbpQC5dHwmR1zLp9fMqJS6PT2FpXlKSRUSqLJ6j1Awjt9lfrvy1ISjkgpXyflHIbgL/y32ZO2Cgp6100+oNaOVfUiChlcH6klHF+yAIAePrtvpgFPyL51clBSAncsaUq6jWBoNYzNh12n9crcWSB/dNCCSHQUl2A0xEKigxM2FBjiG9b4P07V0MIQKNUoKkidT7cnSnRPzvktvX5fhxwRY0iiSeoHQHQJIRoEEJoANwLYF/oBUKIUiFE4Lm+BOD7iR0mZRu3xzvr64sjU8jXqlCWlxPlEUREK47zI6WMdv/ZLqvDjaffjn6OLJpnTwxgY00BGufZuTKzohYe1M4PWTBhcy2of9pcG6oL0DHsq4AYYLG7YLG75y0kEmp1aS5u21SFq1YVQZ1CPckCK4JzKz8e7zFDIYDNtamz+kepI+Y7WErpBvAZAC8AOAfgKSnlGSHEw0KIO/2X7QHQLoToAFAB4CvLNF7KcKNWB+599CBu/eYBeEL2cXeZrMFG10REqYDzI6WS9iEryvJzcGW9AU+8eSniWahoLo9O4UTfBO7YHF5EJFShXo0CrSriilrwfFrj4lbUAN9WRZdH4oLRErxtcCK8h1os//6BrfjBJ7YvehzLIbAiODB3Ra3XjHUV+cjNYWtjChfXu0JK+TyA5+fc9rchf34awNOJHRplm/YhCz7xxBH0m22QEtjfbgw2tL5onMLutaVJHiER0WycHylVdAxbsL4yH/e01uHBnxzH/g4jblhfEddjnzvp6z327s3Rtz0G1JfoIwa1ty+Po8agi3uLYiSba3yrSsd6zMHzZYGtgtVxFBMJSKWVtIACnQp6jTLYvBsApJQ40WvGbZsqkzgySmWp906mrPTSuWG877/egMPtxc8+tRNl+Tn48eEeAL5tHEOTdp5PIyIiisDj9a1CravIxy0bK1FRkIP/eeNS3I/f1zaAq1YVobYodnPo+mJ9xK2PHcMWXFG1tCqLq0r0qC3S4dX2maqng+aFr6ilIiEEqg26WSX6u01TmLC5eD6NomJQo6QbMNvwqR++jYayXOz7zG60ri7GPa21eKXdiAGzDV3+io+NpalzKJiIiChV9I5Nw+7yorkiH2qlAvddswoHLpjQGbKFMJquESvahy24PY7VNACoK9ajb9w263iC0+1F18gUmiuXNk8LIbC3uRxvXjTB4fYVRx0w26BUCJTnL7ySZKqpKtTO2vrY1hsoJMKKjxQZgxol3QtnhuD2Snzr3m3Bw7b3Xl0PCeDJI73B0vxruaJGREQJ4vJ40W2aSvYwEqJ92BfI1vn7n31wez00KgUef/NSzMe+4l+9uumK+LZJ1hfr4fR4MTw5s4Wv2zQFt1diXUXk/msLsXd9GaadHhzpHgfgq/hYWaCFUpH+Z9SrC3UYCCkm0tZrRq5GibXl/CCaImNQo6R74cwQmsrzZlWaqivW4x1NZfjpkR60D1mhVAjUFzOoERFRYvzlM6dw49f340yEcvDppt1fmr/J/wt/SV4O7tpSjZ+/3Y+J6flL9e9vN2JNWS7qimNvewQil+g/76842RylUfZC7GwshUalwCvtRgCBHmrpv5oG+LZvjlgcMFrs+Pt9Z/Cjwz3Y0ViSESGUlgeDGiXV2JQTb3WP4V0t4QdpP7SjHsOTDvz0SA9WFeuhUfHtSkRES3ei14yfvd0HrwQefvYspIy/QuJcl0enYHdF7GG+YtqHLagv1s+qHHj/rtWwuTx46mhv1MdNO9043DWGPc3lcX+vSEGtY9gClUIk5IiCTqPENY0lwaA2MGFDVZqfTwuo8hdEueFrr+IHBy/h3qvr8LW7tyR3UJTS+JsvJdXvzg3DKxExqN24vhwVBTkYn3bN29eFiIgoXlJKPPzcWZTmafDQretxuHsMvzk9tKjn8nglbvvmAXzn1a4Ej3JhOoYsYdsON9YUYvvqYjxx8NKs82ShDl4chdPjxd4FBLVqgw4KMbuXWvuQFQ2luQn7QHXPujJ0jUzh8ugUBifsC6r4mMqa/f+NWqoL8NyD1+Er792E4lxNkkdFqYxBjZLqt2eGUGPQYWNNeKUolVKBD7TWAQArPhIRUULsOzGAty+P44vvbMYfXNuA9ZX5+Mrz5xa1KjZpc2HK6cFbl0aXYaTxcbg96DZFLuTxsd2r0Tduw+/ODUd87CvtRug1SlzdEH8xC7VSgWqDLmxFbV0Ctj0G7F3vC44/f7sPTrcX1YWZsaK2pc6Ag1+6AU8+cA02VC+tQiZlBwY1SpophxuvXTDh5g0VURtZf2B7PXI1SlxZz4pIRES0NDanB//y6/NoqS7A3a11UCkV+NvbN6Bv3Ibvvd694OebsPnOf53onYi6arXc5ivkcfOGCtQYdHg8Qql+KSX2t49g15pS5KiUC/qe9cUzvdSmnW70jE1jfQIKiQQ0lOZiVYkeP/Vv20z30vyhqgp1UX/nIZqLQY2S5tWOETjd3ojbHgNqDDoc/9t3znsNERFRPL7z2kUMTtjxd3e0BAs47Fpbine1VOCRVzpnVTKMRyCoWR3uYIXilRYoJBKpkIdKqcB9O1fhYNcozg1Ozrrv4ogVfeM27F1ftuDvGdpL7cKw7++dyBU1ANjbXI7hSQcAZEwxEaKFYlCjpHnhzBCK9GpcvXr+1TIWESEioqVyebz47mtduHVjJbY3FM+6769u2wC3R+JPnzoBl8cb93MGghoAtPWYEzbWhWgfmr+Qx71X10GrVuCJOaX6XznvK8u/kEIiAXXFepisTkw53MHWAM0JXFEDgOubZwJkTQatqBEtBH8DpqRwur14+bwRN11RAZWSb0MiIlpe7UMWTDk9uHVTeGPn+hI9vvLejXi904S/+cXpuKtAhga1473JCWodwxY0lkUv5GHQa/DebbX4v+P9GJ9yBm/f32HEuoq8RYWgQOXH3vFpdAxZoFUr4i7vH6+djSXIUSmgVStg0KsT+txE6YK/IVNSHOwahcXu5pZGIiJaEYEgta3OEPH+u1vr8OANa/HkkV58+9WLcT1nIKitr8xHW5KCWvtweMXHuT66azWcHi/u+c5BvH7BBKvDjbe6xxZU7TFUsET/6DTahy1oKs9PeC8wrVqJ65rK0FCaxzNdlLUY1LLItNONS6apZA8D54cm8Y/PnUVejgrXNpUmezhERJRBzNPOiNsX23rMKM3ToLYo+grSF25eh7u2VuNff9OOZ08MxPxegaB2fXMZ2ocmMe10L37gizDlcKN3zBZz22FzZT6+e18r7G4PPvK9w7jnvw/C5ZGzthcuRGgvtfYIrQES5avv34zvf7R1WZ6bKB0wqGWR/3y5E7d96wBszuQ05vR6Jb7/ejfu/M83MD7txH99+Epo1QurNEVERBTNiMWB67+6H994sSPsvrbecWytM8y7OiOEwL++fzOuWlWEv/j5yZiVHCdtLuSoFNjRUAyvBE72TSz577AQF4zxF/K4aUMFXvz89fizdzXj0ugUCnVqtK4qjvm4SAx6NfJzVDjZNwGjxRGxNUAiFOVqUJUhpfmJFkMV+xLKFG91j2Ha6cHxnnHsWrv8K1lvdprww0OXEdjqPzhhw4m+Cdy4vhz/7/2bUZqXs+xjICKi9DTtdEOjVCzoHPPXf9uOCZsLL5wZwl/csj54+8S0CxdHpvDebTUxnyNHpcQtLZV4+/I4pp1u5Gujn4+asLlQqFNjS61vO2VbrxnXNJbEPd75nrdAq4q55a9jaGGFPLRqJT69dy3uaa2D1eFedLEuIQTqivXY3270ff9K9gQjWg5cUcsSLo8Xp/p9n/Qd6lr+xpxSSvzDr87h9U4Tuk1T6DZNweWR+Mf3bMRj97cypBERUVRSStz6zQP45ksX4n7M6f4J/PRoL6oLtegamcLl0Zmt/if6fOfHttbF15NTp/Ht9oi1AyUQ1EryclBfrE9I5cfxKSd2/8vLePS1rpjXnuw3Q6dWBrcixqssPwcNpbmLHSIA3/bHSbtvq2eiKz4SkQ9X1LJE+5AFDrcXQgCHuseW/fsd6zHj3OAkvvLejfjwjlXL/v2IiChzjFgduDw6HfcHi1JKPPzcWRTpNfjv+67Cnf/5Bva3j+D+Xb4w0tZrhhDA5rrCuJ5P7w9q03EGNQDYVm/A4a6lz6+/Pj0Eq8ON773ejY9f2wB1lBVFt8eL35wewt71ZVAkuJBHPOpLfOGwQKtCRQE/fCVaDlxRyxLHe8YBALdurERbjxl21/KeU/vRocvIy1HhPVtjbzMhIiIK1THkO3t1dmAS3hjnxABfuHmrewxfuHkdNtcasLpkZlse4JsD15bloWCebYyhdOqFB7WtdQYMTdoxOGGL63tE8+yJAWjVChgtDjx/ajDqdYe7x2CyOnHH5uolfb/FCpTjb67MZ1VGomXCoJYljvf6ql393pW1cHq8OOYPbsthbMqJ504O4n1X1iA3h4u2RES0MOeHJgEAU04PLo9Nz3ut3eXBPz1/Dusr83Hv1XUAfE2c37w4CrvLAykl2nrN2BqlLH8kwa2PMT7UnBvUgKU1vjZO2nGoexQPXNeIhtJcPD6nSXWoZ08MIFejxN71iyuxv1SB7ZbLVfGRiBjUskZgkrq6oRgKgYRsz4jmZ0d74fR48ZFruOWRiIgWrmPYgsAizZmB+SspPnOsH33jNvzN7RuChUf2NJfB4fbiUNcoesamMT7twtb6+IOaXuP7kDGeM2oF/qC2oboAGqViSf3Unjs5CCmBO7dW4/6dq3C8xxzx+ZxuL359egjvbKlMWvXkRv8ZtyuqWEiEaLkwqGWBiWkXukamsLXOgAKtGi3VhctWUMTrlfjxWz3Y3lDMT9mIiLKUlLG3K86nfdiKq+qLoFIInO6fnPfak31mFOdqsGvNTLXFaxpLoFUrsL99JBh0FrKiNnNGLXpfNI9XwmJ3B1fUclRKbKguCDbWjiVS6f9nTw7giqoCrC3Px+9dVYu8HBUef6M77LoDF0YwYXPhzi3J2fYI+LY+/ugPduDu1tqkjYEo0zGoZYG51a52NBTjeO/ynFM70GnC5dFprqYREWWpl88PY/OXfxtsBr1QXq/EhWELNtYUoqkiP+aKWvuwBesq8madk9KqldjZWIL97UYc7/FVRlxIZcLAKtV8Wx8tdt/fLxDUAF8YPNU3EfNc3bTTjXf86yv45+fPBW/rHZvG8R5zMHzla9W4u7UWvzo1COOkfdbjnz0xAINejd0r0GpnPrvXliJHxX6oRMuFQS0LzK12dU1jCZxu75K2Z0Tzw4OXUZqnwS0tlQl/biIiSn2vdZhgsbtxyTQV++II+s02TDs9aK7MR0t1Ac4OTEZdoZNSomPIEjGE7V1fjkuj03j+1CA21RYuqB+bPo7y/IEgGhrUGstyYXN5YLI65n3+NztH0W+24TuvdQVXzJ49OQAAuH1zVfC6+3euhtsr8b+He4K32Zwe/PbsMG7dWLnoPmhElB74f3gWmFvt6uqGYohlOKdmtNjx8vlh3NNax8mDiChLBVbAFlv9sD3QxLkyHxurCzA65cTwZOTg02+2YcrpwbrK8KC2Z52vyIbR4sC2BWx7BOIrzx8pqNUW6QAAfeb5/+77O4zQa5S46YpyPPzcWfzu7DCePTGIbfWGYDVFAFhdmosbmsvxvQNdeOLNS3B7vHj5vBHTTk/Sqj0S0crhb9MZLlK1q0KdGhuqChJ+Tu2FM8PwSuA921iSn4go08Rz7szrlTg74DtT1m+2x7g6svZhX1BrKs9DS41vJ0i07Y/BUBdhRa2+RI/GMl/Bi4WcTwPiq/oYDGr60KDmC1l949GDmpQSr5wfwe61pfjWB7dhY00hPv3jYzg3OBnxzNnf39mCLXUG/N2+M7jtWwfw6IEulOXnYEdjSYRnJ6JMwqCW4aJVu9rRUIJjPeNwuBN3Tu3XpwaxpiwXTeV5CXtOIiJKPqfbi7seeQPfeunCvNddHpvGlH8VajDCqtKrHSPY9c8vYdIe/fxa+5AFNQYd8rVqXFFVACGAMwORC4oEQl2kFTUA2NvsW1VbSMVHANAoFVAqxLzFRCKtqNUYfCtq/fMEtU6jFf1mG/Y2l0OvUeGx+1tRmpcDIYB3b6oKuz5QtOO/P3IVbC4PTvSa8e5NVVAmock1Ea0sNrnKcNGqXV3TWIzvv9GNE70T2N5QvOTvM2p14FDXKD69dy0bXxIRZZgfHLyEk30TMRtGB1a+VAqBwYnwFbUj3WMYmLDjdN8EdkUphNExbEGzP3jl5aiwuiQ36opax5AF1YXaqOP69N612N5QjKpC3bzjnksIAZ1aueCtj7k5KhTp1egbj977bX/7CABfCwEAKM/X4qk/3InukSmUF2ijjueWjZXY01yG508NBgMoEWU2rqhluGjVrgLh7HiCGl+/eNa37fGWjSwiQkSUSUatDnzTv5LWE6P59JmBSagUAleuKkJ/hBW1wOOjrZC5PF5cHLHOau+yobpgnhU1a9TVNAAoztXgXYssbqXTKOetjhwpqAFATZFu3q2Pr7Qb0VyRj2rDTHisMehwbVPsCo5atRLvu7IWRbmamNcSUfpjUMtwbb3miNWuDHoNcjXKqAe0F+r500NYVaLHBja+JCLKKN94sQPTTg9uaalEv9kGt8cb9dozA5NoqsjHqmJ9xGIiM0Et8grZJdMUXB6J5sqZLfQt1QXoG7dhYnr2dkm3x4uLRuuCyu4vhF4Te0VNo1KENZyuNegjhlQAsDrcOHJpLLiaRkQ0Hwa1DHayz4wzAxPYFmVvfkleDkanlh7UJqZdeLPThFs2VnLbIxFRBjk3OImfvNWD+65ZhRvWl8PjlRG3NAK+IhlnBybQUl2AaoMORosDTvfsUNcbY0XtvL84SOiKWku1v6DI4Oxwd2l0Gk6Pd9a1iRRr6+OkzRW2mgYEVtSmIxZfeaPTBJdHYg+3LhJRHBjUMtS5wUnc9723UFGgxcd2NUS8pjRPg1Grc0HPK6XE/x66HKy0BQAvnhuG2ytx28bwQ9BERJSepJR4+NmzKNCp8bmbmoJl46NtfzRaHDBZnf6gpoWUwHBIo2arw43RKSfyKSDjUQAAIABJREFUclS4OGKN2KOsY9gCpUJgTdnsFTUAwWqSAaFl/JeDTqOM2UctUlCrLdLB7vJibCp8ft3fbkRejgqtq4sSOlYiykwMahmo02jFRx47DJ1aiZ988hpUFkY+nFySlxOzKedcF0es+OtfnMbvfftNvNFpAuCr9lhj0GFzbeGSx05ERKnh9U4TDnaN4gs3r4NBr0F9yfxBLbCdsaW6MHj+aiBkC2BgNe2G9eXwSuD8UPiqWvuQBatL9LO2E5bm5aCiICdsFa592AKFANYuU6VhvUYZszx/5KAWuUS/lBL720dw7dpSqBfQfJuIsherPmaAHx68hL5xG3LUSuSoFPjBwUsQQuDHn9wxq3HmXKV5mmBVyHgd9DfJLsnT4KP/8xb+7o4WHLhgwn07V3HbIxFRBjl6aRwKAdzTWgcAqCzQQq0U0YNavy9IbaguwJB/e2ToNsnA427dWIl9JwZwZmAS2+pnryx1DFuwoTr8rHNLdWHYubaOIQtWl+SGnRFLFJ1ahbGp6EVBJmwulOeHfxAaLNFvtmFLSMXl9mELBifs+OyNPJ9GRPFhUEtzw5N2/M0vz0ClEHB7ffvhy/Jz8KM/2IHGsvk/ZSzJzcHYlBNer4Qizn4sh7tGUVmgxb7PXItP/fAo/voXpwEAt21itUciokzSMTw7CCkVArVF+nlW1CbRUJqLvBwVqg2+ADMwEb6itnNNCQp16rAVMpvTg8tj03jPtpqw526pLsD+diPGp5zBiocdw5ZlO58G+FfUYvRRayoP//41Rb6gNrdE/6vBsvw8n0ZE8WFQS3NvdftWuH7+R7uwqaYQTo8XSoWIa1tFSZ4GHq+E2eZCcRylfqWUONw9ht3+SfaJj2/HXz5zGp0jVmyr4357IqJM0j4UHoTqivXBwDXXmcEJbK71rSDpNSoY9OpZWx97xqZRoFXBoNdgQ1UBzs5ZIbtgtEBKRKziePvmajzySie++dIF/P2dLbC7PLg0OoXbt1Qv9a8ZVcw+atORtz4W6tTI16rCml4fvTyOhtLcqMcRiIjm4ibpNHf00hj0GiVaqgugUAho1cq4976X5OUA8PXIiUeXaQojFgd2NJYAAHJUSnz9ni345ad3x70iR0REqS8QhOb2KKsv1kVcUZuYdqF3zBYs/AEAVYU6DJpnb30MnHNrqS7A+SHLrFL/gWIhkfqiNVfm40M76vHDQ5fRMWxBp9EKb5RQlyi6ec6oeb0SFocbBRGCGuA7pxZ6Rk1KibZeM7bWRa7CTEQUCYNamnvr0ji21RvC+qTFozTPt4pmirPy42H/+bQd/mbZRESUmaIFofpiPczTrmCz54BA6fxAKX0AqDFoZ/UT6xmbRr3/3HRLTQEcbi8ujkwF7//Z231YVaJHQ0luxDF94eZm5GqU+Ifnzi57xUcgsPUxclCz2N2QMrzZdUCNYXbT636zDSMWR9R2OUREkTCopbEJmwvnhyZx9erFBafSwIpanL3UDnePoiw/Bw2lkSdRIiLKDB3DkYNQIGjN3f4YWA0LW1HzFxPxeiX6xmzBAlfB3mj+7Y8n+8x4+/I47t+5OuoOjeJcDT570zocuGDC917vhkapwOqS6AWzlkqvUcLtlWG94AAEg2q0oFZbpEO/2RbspRYo3MUVNSJaCAa1FDJqdcDrDW+QOWl34V3/9hqefKtn1u3HesYhJbB9kUGtxH8uLZ5ealJKHOoaxY6GYlZ3JCLKcO3DlohBqC5KUDszMImKgpzgB4AAUG3QYcLmwpTDjWGLHU6PNxj0GktzkaNSBAuKPP7GJeRqlHh/a+284/r9navQWJaLs4OTWFOet6jdJPHSaXzH+COtqsUT1KwOd/C6th4zNCoF1leGV7QkIoqGQS1FjE05seer+/HpHx8LfgIX8NXftKN92ILvHuiadd+R7jGoFAJbF7mVwqDXQCEQVy+1y6PTGJ6cOZ9GRESZq2PIEjEIRWt6fbp/Yta2RwDByo+DEzb0jPquDwQ1lVKBK6oKcGZgAkaLHc+eHMDdrXUo0EYOPgFqpQJ/8+4NAIDmiuXpnxag81e7nHaFV36MJ6gBM73U2nrN2FhdAI2Kv3YRUfz4EyNF/PDgZVgcbvz69BB+8lZv8PZjPeP438OX0Viai4sjUzjWM9P37MilMbTUFEKvWVzxTqVCoDhXE9cZtcPdowCAnY08n0ZElOnahywRg1CBVo0ivXpWUDNO2nHBaEXr6tnVf2eaXtuD19eH9PZsqS7A2YFJ/OhQD1weid/fuSquse1dX44v3boe9+9avdC/1oLoNb6gtrgVtZmm1y6PF6f6J8J6xhERxRJXUBNC3CKEaBdCdAohHopwf70Q4hUhxHEhxEkhxG2JH2rmsrs8+MHBS9jbXIbrmkrx8HNncGHYApfHi7985hQq8rV48oFroNco8fTbvcHHnOidwPbVS/vBX5qXE1fVx8NdYyjN02BNjN5sRETZJBPnx0m7CwMT9ojVFwFf2AoNavs7fP3B9s7pD1blL0M/YLahd2waCjET3gDfObVJuxuPHejCnuaymL0/Q33q+jXLHnx0/qAWqUR/rKAW2vT6/KAFDreX59OIaMFiBjUhhBLAIwBuBbABwAeFEBvmXPbXAJ6SUm4DcC+A/0r0QDPZM8f6MTrlxKeuX4Ov37MFuRoVHvzJcXx7/0WcH7Lgy3e1oLxAi9s2VeHZE4OYdrpxqn8CTo930YVEAkryNBidmn9FLXA+bTvPpxERBWXq/HghUEgkSun7ub3U9rcbUVmgxfo5wa6iQAuFAAYmfCtq1QbdrPYxgcIjU04PPra7IdF/jSULrqhFKNEfK6gZ9GrkapToG59GW+84ABYSIaKFi2dFbTuATilll5TSCeBJAHfNuUYCCJyQLQQwkLghZjavV+KxA13YXFuIHQ3FKM/X4mt3b8H5IQu+8WIHbt5QgXe1VAIA7mmtg9Xhxq9PDQUbXbcuNajlxl5R6xu3YWDCjh0NPJ9GRBQiI+fH9iErAIQ1uw6oL/b1CPN4JVweLw5cMGFPc1nYB3lqpQLl+VoMmG2zSvMHNFfmQ6kQaCzLxXVrS5fnL7MEwTNqUVbUNEoFtOrIv0YJIVBT5CvRf7zXjNI8TfDcGhFRvOIJajUAekO+7vPfFurvAXxECNEH4HkAD0Z6IiHEA0KIo0KIoyMjI4sYbvpp6zXjCz9tg8Xuinj/784No8s0hU9e1xic5PauL8enrm9Eca4GX76zJXjt1auLsLpEj6eO9uLIpTGsLc9Dsb9y42KV5GliVn081OU7n7aD59OIiEIlbH4EUmeO7Bi2IFejjBos6ov1cHslBidsOHZ5HBa7G3vmbHsMqDJofcVExmxhQU2rVuKL72zGl+9siVqSP5l0Mc6oFejU8+4yqS3So3/cFmx0zR0pRLRQiSom8kEAj0spawHcBuCHQoiw55ZSPiqlbJVStpaVlSXoW6e2fW0DeOZ4P/74R8fg8oT3YvnugS7UGHS4dWPlrNu/dOsVOPSlG2ft5xdC4O7WOhzuHsOhrtElb3sEfGfULA437BG2dgScGZhErkaJdeXL11iUiChDxTU/AqkzR54fmsS6yvyowSK08uMr7SNQKQR2r42846LaoEOn0QqT1RF8XKg/2rMG1zWl5u8DgUJdtghVHydtLhTo5i/kVVukQ5fJiq6RKRYSIaJFiSeo9QOoC/m61n9bqE8AeAoApJQHAWgBpN4+hiS4YLQgL0eFAxdMeOjnp2aV13/p3DCOXBrHJ65tiNgLJlIZ39+7shYKAdhdXly9xEIiQEgvtXnOqRktdlQWalPyE08ioiTKuPlRSumv+Bj9g7nQptf72424enUx8qOU1a8u1GJ40jHrcelCH6OYSLTzaQE1Bh3sLt8HtDyfRkSLEU9QOwKgSQjRIITQwHcYet+ca3oA3AgAQogr4JuIsmNvYwydRiveuaECn7upCT8/1od/e7EDh7tG8ZHHDuMTTxxFjUGHe66ui/1EfpWFWrxjne/Tx0StqAGY95yacdKBsvycqPcTEWWpjJsfTVYnxqddUc+nAb5qjkqFwOHuMZwfsmBPc/QVsdBdIekW1GJtfYwV1AIl+oUANtcWznstEVEkMRtwSSndQojPAHgBgBLA96WUZ4QQDwM4KqXcB+BPAXxXCPF5+A5Of1TO7dqchSbtLgxO2LG2Ig9/dP0aDJht+NbLnfjWy50ozdPgr267Ah++pn7BfdC++M5mbK0zJORgckmef0VtnnNqRouDnwYSEc2RifNjR6DiY5TS/ICvWXWNQYfnTg4C8J2rjqaqcGaeirT1MZXNV0xk0u5CY1nuvI+v8c/Ra8vyoq44EhHNJ66EIKV8Hr5D0KG3/W3In88C2J3YoaW/TqOvclZTuW+v/1feuwmFOjWqCnX44Pb64Kd1C7WxphAbaxLz6VxgRc0UZUVNSokRiwPlXFEjIgqTafNj+5AvqM23ogbM9FKrLtSiqTx6/7NAP7G8HBWK9OkVVtRKBdRKEbU8f+wVNd/fnR90EtFiLWwphxYk0ItmXYVvElMrFfird89tsZNcgRU1U5QVNavDDZvLg/ICBjUiokzXPmRBca4GpXnzVxQOrI7tWV8+bzXDKoM2eH06Vj3UqZVhWx+9XonJOIJaSa4GH95Rj/ddObcQKBFRfBjUltGFYStyVIrgPvVUpNeooFMro55RM1p8t/OMGhFR5js/bMG6iryYoSpw3mxvlLL8ASW5GmhUCtQXp2cPMb1GhWnn7KqPVqcbXhm92XVAYCcNEdFiMagtow6jFWvL86BM8WqJJXmaqFUfjf5qXeX52pUcEhERrbDLo1M42WfGgzc0xbz2pivKcarfjGtjNKoWQuDjuxvSdvufTqMMO6M2Me3ri1oQI6gRES0Vg9oy6hy2YHtD6jeJLs3LiXpGbcQaCGpcUSMiymQ/OHgZSiHw4R31Ma9tqsjHf334qrie96Fb1y91aEmjUyvD+oxO2HxBLdaKGhHRUiWq4XXW+cfnzuKV88ao91vsLgxM2NEU40B2KijN00St+mictAPg1kciokxmdbjx1JFe3LapChUF3EERoI+wojbJoEZEK4RBbRF6x6bx2Ovd+OoL7VGvman4GL0aVqooyc3B6FSUFTWLAxqVghMSEVEGe+ZYHywONz66e3Wyh5JSIm59ZFAjohXCoLYIL50bBgCcHZzE6f6JiNdc8Ae1WCWOU0GJf0XN6w1v7WO0OFCWl5OW1bqIiCg2r1fi8TcvYUudAVfWFyV7OClFrwmv+sigRkQrhUFtEV46b0SNQQeNSoGfHe2NeM2FYQs0KkVaNPgsycuB2ysxaXeF3TdicbA0PxFRBnvtwgi6RqbwsV2rkz2UlKNTKzHtml31kUGNiFZK1ge1p4724kSvOe7rLXYXDnWN4t2bq3BLSyV+0TYQdtAY8K2orSlL/YqPAIL9ciL1UjNa7CjLY1AjIspUj795CWX5ObhtU1Wyh5JydBoVbE7vrNvGpp3QKBXQa5RJGhURZYusDmpGix0P/fwkvvizExG3/UXy+gUTXB6JG9eX457WOkzYXHjx7HDYdReGrcFG16mu1B/EIvVSM3JFjYgoY3WNWLG/fQQf2bEKGlVW/0oQkW/r4+wVNZPFibJ8HgkgouWX1T+Vf3VyEF7pW/369emhuB7zu3NGFOrUuGpVEXatKUGNQYen5mx/tDrc6Dfb0qKQCOA7owYgrJeaw+2BedrFHmpERBnqd/4z1x+4ui7JI0lNeo0S0y4PpJz5MNdkdQR3ohARLaesDmq/bBvA+sp8rCnLxX+8fCHmqprHK7G/3Yg9zWVQKRVQKATubq3F650m9JttwesuBio+pkEhEcBX9REIX1ELbIVkDzUiovQ1YXPhsQNd8ESY49p6zagt0qGykB/IRaJVKyEl4HDPbH8csTiCO1GIiJZT1ga1y6NTaOs14z3bavDgDU04P2TBbyNsYQzV1mvG6JQTN6wvD972/qtqAQA/f7sveFvHsAVAepTmB4AivRpCACNzzqixhxoRUfr77Zkh/OOvzuFQ12jYfW09ZmytMyRhVOkhcA4ttPKjb0WN8yIRLb+sDWrPnhgAANyxpRq3b65CQ2kuvvXShVnbG+Z66dwwlAqBPetmglptkR6715Tip0d60Tc+DcDXQ02jUqA+DSo+AoBKqUCRXhO2oma0+L7m1kciovQ14v/ZfnhOUDNO2jEwYWdQm0cgqE37i4Z5vRKjU05+gElEKyIrg5qUEr9oG8D21cWoMeigUirw6b1rcXZwEi+dM0Z93MvnjWhdVYRC/eySvH94/RqYrA7c8PVX8S+/Po8TfWY0luZCpUyfl7fU30st1EggqLGYCBFR2jJZfD/bD3WPzbr9uL/i8Tb2TotKp1EBQLCgiNnmgscreUaNiFZE+iSJBDo3aEGn0Yo7tlYHb7trazXqi/X4ZpRVtb7xaZwfsuCmKyrC7ru2qRSvfHEPbt9chf9+9SIOdY2lRaPrUCW5ORidCl9REwIoyeWERESUrgIram295lntZI73mKFWCrRUFyRraClPr/avqPm3PgY+wCzlihoRrYCsDGq/PNEPlULg3SE9Y9RKBe7ftRqn+icwMGEPe8xrHSYAwN6Q82mhqg06fOOerXjuwWvx7s1VeN+VNcsz+GVSEnFFzY6SXE1arQwSEdFsJosDCgE43V60hfQNbesdxxVVBdCq2Q8sGt2cM2omf+jlGTUiWglZ9xu41yvx3IlBXNdUiuI5K0XN/lWwntHpsMddHLFCq1ZgTVnuvM+/saYQj3zoSuxpjhzoUlVpXg5GLI5Zq4kjFgfKeD6NiCitmawO7GgogRDA4S7f9kePV+JU3wTPp8Wgm3NGjUGNiFZS1gW1t3vG0W+24c6QbY8BgeIfvWPhQa1nbBr1xfqMbXDZXJkPi8ONLtNU8DajxcHS/EREac5kdWBNeS7WVxbgcLevoMgFowVTTg+DWgxzqz4Gtj6ymAgRrYSsC2ovnTNCpRC4eUNl2H1VBi2UCoHe8fCg1usPaplqZ2MJAODNizNVwYyTDk5GRERpzOXxYnzahdK8HOxoKMaxnnHfFsgeFhKJh17tKyYSPKNmdUCjVKBAq0rmsIgoS2RdUHvzognb6g3Iywn/IatWKlBt0KJnzoqalNK/ojb/tsd0tqpEj+pCLQ5e9J3F83olTFauqBERpbPA2ePSvBxc01gMu8uLk31mHO8xw6BXY3VJ5n4AmQhaje/XpEDVR5PFidI8TcburiGi1JJVQW1i2oVT/RPYtaY06jV1RfqwoGayOjHt9KC+WLfcQ0waIQR2rinFwYuj8HolxqedcHslgxoRURoLnKkqy8/B9gbfzonD3WNo6zVjS62BgSMGfaA8f8gZNVZ8JKKVklVB7WDXKKQEdq0piXpNfbE+7IxaILjVZ/gnjzvXlGB82oX2YctMs+sCFhMhIkpXIyHFL4pzNWiuyMdL54bRYbTwfFocdHPK85usDpSxkAgRrZDsCmoXTdCplfPuya8r1vtX0NzB23rGfAU2MnnrI+ALaoDvnJqRB6aJiNJesPiFP1zsaCzGsR4zpAS21TOoxaJUCOSoFLOKibDiIxGtlKwKam9cHMXVDcXQqKL/tWcqP9qCt/WM+v5cW5S5Wx8BoMagw+oSPQ5eNME46eslx62PRETpK1hOPt/XjmZHw8yOEq6oxUevUWLa6YHXKzE65Qy+lkREyy1rgtrwpB2dRuu82x6BmaAWek6tZ2walQXarGgKunNNCQ53jWFoIhDUuPWRiChdmSxO5GqUwbNW2xuKAQANpbkw6Bk44qFTK2FzeWC2ueDxSq6oEdGKyZqgdtBfdn73PIVEAN/WR2BuUJvK+PNpATvXlMLicOOVdiPyc1TBZp9ERJR+5ha/KMvPwbZ6A65fV5bEUaUXnUYJm9PDZtdEtOKyphHIG50mFOrU2FBdMO91RXo18nJUswqK9IxN47qm7JjUAv3UjvWY0Via2WfyiIgyXaQzVT/71E4oWO0xbnqNCtNON5tdE9GKy4oVNSkl3rw4ip2NJVAq5p+chBCoC6n8aHd5MDzpyOhm16HK8nPQVJ4X/DMREaUvk9WB0rzZWxxVSgUUMeZCmqHzn1HjihoRrbSsCGo9Y9PoN9uwa+3859MC6ot1wa2PgcC2Kku2PgIz7QtYmp+IKL35ghqDxVIEzqjNraBJRLTcsiKovdHpO582X6PrUPXFevSOT0NKGQxsdVmyogb4zqkBnIyIiNKZy+PF+LSLuyOWSB88o+aERqlAgS5rTo0QUZJlR1C7aEJFQQ7WlMV35qquWA+7y4sRq2Om2XUWBbVrGouhUyvRGOfrRUREqWfU6gTArXpLFdj66Dvvp4Hg+T4iWiEZ/7GQlBKHu8Zw7dqSuH+41gV7qU3j8ug09BolSnKzp4yxQa/Ba3++F0V6dbKHQkREi8QzVYmh1/i2Ps6toElEtNwyPqgNTthhsjqwrb4o7seE9lLrHZtGfbE+6z5B41YZIqL0NmINVCnMng8al0Og6qPJ6kAFz24T0QrK+K2Pp/onAAAbawrjfkyNQQchgJ5RG3r8QY2IiCidmILFLxgulkKrVsLu8sJoCa+gSUS0nDI+qJ3un4BCABuq5u+fFkqrVqKyQIvLY1MMakRElJYCK2qlXFFbEr1GCcDXk467TYhoJWV8UDvVP4Gm8nzo/D9o41VXpMexy+NwuL1ZVZqfiIgyg8nihF6jhF6T8acclpU+5PcHnvcjopWU0UFNSonT/RML2vYYUFesx6XR7CvNT0REmYE91BJDp2ZQI6LkyOigNjRph8nqxKaa+Lc9BoRud+TWRyIiSjcmK7fqJYKOK2pElCQZHdRO9fkKiWyqXfiKWn2JDgAgBFBbxKBGRETpZYTFLxIidOsjK2gS0UqKK6gJIW4RQrQLITqFEA9FuP/fhBBt/n86hBDmxA914WYKiSwiqPlX0aoLddCoMjrPEhHRIqXy/Mitj4mhU8+c8WMFTSJaSTFPGAshlAAeAXAzgD4AR4QQ+6SUZwPXSCk/H3L9gwC2LcNYF+xU/wTWluctuJAI4CsmAgB1xbpED4uIiDJAKs+PLo8X49MuBrUECKyoaZQKFOhYmIWIVk48S0XbAXRKKbuklE4ATwK4a57rPwjgJ4kY3EKc7p/A8KQ9+LWUEqf6JxdVSATwNXzWa5RYXZKbqCESEVFmSdn5cWzKCQA8o5YAgQ97S/I0EEIkeTRElE3i+WioBkBvyNd9AHZEulAIsQpAA4CXo9z/AIAHAKC+vn5BA43lE08cQVWhDv/3x7sghMDwpAMmqwObFxnUhBB49L5WluYnIqJoEjY/+q9J2Bw54m92zRW1pQtUfeRrSUQrLdGHr+4F8LSU0hPpTinlo1LKVilla1lZWcK+qd3lwfCkA229Zrx0zgjAt+0RWFwhkYBrm0pZmp+IiBJh3vkRSOwcGWh2zeIXSxfY+sjVSSJaafEEtX4AdSFf1/pvi+ReJGHb44DZFvzz137bDq9X4tQSCokQERHFIWXnRxNX1BIm0DCcFTSJaKXFE9SOAGgSQjQIITTwTTb75l4khFgPoAjAwcQOMbYBs+9s2od21OP8kAXPnRrE6SUUEiEiIopDys6PJqvvjBqD2tJp1Qro1ErUGLjDhohWVswzalJKtxDiMwBeAKAE8H0p5RkhxMMAjkopA5PSvQCelFLK5RtuZIEVtT98xxocuzyOf3uxAxa7G+9YV7rSQyEioiyRyvPjiMUBvUaJ3BxWKVwqIQSe/qOdwbY9REQrJa6f4FLK5wE8P+e2v53z9d8nblgL02+2QQigyqDFn76zGZ/8wVEAwKZFFhIhIiKKR6rOj+yhllgt1fx9gohWXkZ0cu4321CRr4VaqcBNV5Rja50BAIMaERFlJ19Q45kqIqJ0lhFBbcBsQ7VBC8C3ReHLd7bgXS0Vi+6hRkRElM64okZElP4yYvP6gNmGTbWG4Ndb6gz4zn2tSRwRERFR8jx4QxMKdOpkD4OIiJYg7YOa1ysxMGHHuzZqkz0UIiKilHDHlupkD4GIiJYo7bc+mqYccLq9qDHokj0UIiIiIiKihEj7oBbooVZdyKBGRERERESZIQOCmq+HWjVX1IiIiIiIKENkTFCrKWJQIyIiIiKizJD2Qa3fbENejgoF2rSvi0JERERERAQgE4LauK+HmhAi2UMhIiIiIiJKiLQPagMTNp5PIyIiIiKijJL+Qc1sZ2l+IiIiIiLKKGkd1GxOD8amnFxRIyIiIiKijJLWQa0/UPGRQY2IiIiIiDJIWgc19lAjIiIiIqJMlCFBTZvkkRARERERESVO2gc1hQAqCxjUiIiIiIgoc6R1UOs321FZoIVKmdZ/DSIiIiIiolnSOuH0m6d5Po2IiIiIiDJOWge1AbOdQY2IiIiIiDJO2gY1r1dicMKGmiIGNSIiIiIiyixpG9RMVgdcHskVNSIiIiIiyjhpG9T6gs2uWfGRiIiIiIgyS9oGNTa7JiIiIiKiTJW2QS0vR4Xda0sY1IiIiIiIKOOokj2AxdrTXI49zeXJHgYREREREVHCpe2KGhERERERUaZiUCMiIiIiIkoxDGpEREREREQphkGNiIiIiIgoxTCoERERERERpRgGNSIiIiIiohTDoEZERERERJRiGNSIiIiIiIhSDIMaERERERFRimFQIyIiIiIiSjEMakRERERERCmGQY2IiIiIiCjFMKgRERERERGlGAY1IiIiIiKiFBNXUBNC3CKEaBdCdAohHopyzT1CiLNCiDNCiB8ndphERESph/MjEREtF1WsC4QQSgCPALgZQB+AI0KIfVLKsyHXNAH4EoDdUspxIUT5cg2YiIgoFXB+JCKi5RTPitp2AJ1Syi4ppRPAkwDumnPNJwE8IqUcBwAppTGxwyQiIko5nB+JiGjZxBPUagD0hnzd578t1DoA64QQbwghDgmWxS7zAAAJMElEQVQhbon0REKIB4QQR4UQR0dGRhY3YiIiotSQsPkR4BxJRESzJaqYiApAE4A9AD4I4LtCCMPci6SUj0opW6WUrWVlZQn61kRERCkrrvkR4BxJRESzxRPU+gHUhXxd678tVB+AfVJKl5SyG0AHfBMTERFRpuL8SEREyyaeoHYEQJMQokEIoQFwL4B9c675BXyfFkIIUQrfVo+uBI6TiIgo1XB+JCKiZRMzqEkp3QA+A+AFAOcAPCWlPCOEeFgIcaf/shcAjAohzgJ4BcCfSSlHl2vQREREycb5kYiIlpOQUiblG7e2tsqjR48m5XsTEdHKEkK8LaVsTfY40gXnSCKi7DDf/JioYiJERERERESUIAxqREREREREKYZBjYiIiIiIKMUwqBEREREREaUYBjUiIiIiIqIUw6BGRERERESUYhjUiIiIiIiIUgyDGhERERERUYphUCMiIiIiIkoxDGpEREREREQphkGNiIiIiIgoxTCoERERERERpRgGNSIiIiIiohTDoEZERERERJRiGNSIiIiIiIhSDIMaERERERFRimFQIyIiIiIiSjEMakRERERERCmGQY2IiIiIiCjFMKgRERERERGlGAY1IiIiIiKiFMOgRkRERERElGIY1IiIiIiIiFIMgxoREREREVGKYVAjIiIiIiJKMQxqREREREREKYZBjYiIiIiIKMUwqBEREREREaUYBjUiIiIiIqIUw6BGRERERESUYhjUiIiIiIiIUgyDGhERERERUYphUCMiIiIiIkoxDGpEREREREQphkGNiIiIiIgoxTCoERERERERpRgGNSIiIiIiohTDoEZERERERJRiGNSIiIiIiIhSDIMaERERERFRimFQIyIiIiIiSjFxBTUhxC1CiHYhRKcQ4qEI939UCDEihGjz//MHiR8qERFRauH8SEREy0UV6wIhhBLAIwBuBtAH4IgQYp+U8uycS38qpfzMMoyRiIgo5XB+JCKi5RTPitp2AJ1Syi4ppRPAkwDuWt5hERERpTzOj0REtGxirqgBqAHQG/J1H4AdEa77PSHEOwB0APi8lLJ37gVCiAcAPOD/0iqEaF/geOcqBWBa4nNkIr4ukfF1iYyvS2R8XSJb7OuyKtEDSQEJmx8BzpEriK9LZHxdIuPrEo6vSWQJnx/jCWrxeBbAT6SUDiHEpwA8AeCGuRdJKR8F8GiCvieEEEellK2Jer5MwdclMr4ukfF1iYyvS2R8XRYsrvkR4By5Uvi6RMbXJTK+LuH4mkS2HK9LPFsf+wHUhXxd678tSEo5KqV0+L98DMBViRkeERFRyuL8SEREyyaeoHYEQJMQokEIoQFwL4B9oRcIIapCvrwTwLnEDZGIiCglcX4kIqJlE3Pro5TSLYT4DIAXACgBfF9KeUYI8TCAo1LKfQD+RAhxJwA3gDEAH13GMYdK2BaRDMPXJTK+LpHxdYmMr0tkfF38Unx+BPjfKhq+LpHxdYmMr0s4viaRJfx1EVLKRD8nERERERERLUFcDa+JiIiIiIho5TCoERERERERpZi0DWpCiFuEEO1CiE4hxEPJHk+yCCHqhBCvCCHOCiHOCCE+67+9WAjxohDigv/fRcke60oTQiiFEMeFEM/5v24QQhz2v2d+6j/8n1WEEAYhxNNCiPNCiHNCiJ18rwBCiM/7//85LYT4iRBCm43vFyHE94UQRiHE6ZDbIr4/hM+3/K/PSSHElckbOYXi/OjD+XF+nCPDcY6MjHOkTzLmyLQMakIIJYBHANwKYAOADwohNiR3VEnjBvCnUsoNAK4B8Gn/a/EQgJeklE0AXvJ/nW0+i9kV1v4fgH+TUq4FMA7gE0kZVXJ9E8BvpJTrAWyB7/XJ6veKEKIGwJ8AaJVSboSvKMS9yM73y+MAbplzW7T3x60Amvz/PADg2ys0RpoH58dZOD/Oj3NkOM6Rc3COnOVxrPAcmZZBDcB2AJ1Syi4ppRPAkwDuSvKYkkJKOSilPOb/swW+Hyo18L0eT/gvewLAe5IzwuQQQtQCeDd8fYsghBDwNZl92n9JNr4mhQDeAeB7ACCldEopzcjy94qfCoBOCKECoAcwiCx8v0gpX4OvMmGoaO+PuwD8QPocAmAQs0vRU3JwfvTj/Bgd58hwnCPnxTkSyZkj0zWo1QDoDfm6z39bVhNCrAawDcBhABVSykH/XUMAKpI0rGT5dwB/DsDr/7oEgFlK6fZ/nY3vmQYAIwD+x7/d5TEhRC6y/L0ipewH8DUAPfBNPhMA3gbfLwHR3h/8OZya+N8lAs6PYThHhuMcGQHnyJiWdY5M16BGcwgh8gD8HMDnpJSTofdJXw+GrOnDIIS4HYBRSvl2sseSYlQArgTwbSnlNgBTmLOFI9veKwDg309+F3yTdDWAXIRvbSBk5/uD0h/nx9k4R0bFOTICzpHxW473R7oGtX4AdSFf1/pvy0pCCDV8k9CPpJTP+G8eDiyx+v9tTNb4kmA3gDuFEJfg2/ZzA3z7zg3+ZXsgO98zfQD6pJSH/V8/Dd+klM3vFQC4CUC3lHJESukC8Ax876Fsf78ERHt/8OdwauJ/lxCcHyPiHBkZ58jIOEfOb1nnyHQNakcANPkrzmjgO9S4L8ljSgr/vvLvATgnpfxGyF37ANzv//P9AH650mNLFinll6SUtVLK1fC9N16WUn4YwCsA3u+/LKteEwCQUg4B6BVCNPtvuhHAWWTxe8WvB8A1Qgi9//+nwOuS1e+XENHeH/sA/L6/stU1ACZCtn9Q8nB+9OP8GBnnyMg4R0bFOXJ+yzpHCt8qXfoRQtwG3x5rJYDvSym/kuQhJYUQ4loABwCcwsxe87+Ebx/+UwDqAVwGcI+Ucu4ByIwnhNgD4ItSytuFEI3wfXpYDOA4gI9IKR3JHN9KE0Jshe/wuAZAF/D/27mDE4SBIAqgf3qwILvwHLAPsQd78GohgnXYgNd4WC+BgMdskvcq2MPA5y/DZEj7sNn1rFTVNckp7UrcK8k5bZd8V/NSVfckxySHJO8klySPzMzHL7BvaSswnyTDOI7PJd7NlHxs5ON/MnJKRs6Tkc0SGbnaogYAALBVa119BAAA2CxFDQAAoDOKGgAAQGcUNQAAgM4oagAAAJ1R1AAAADqjqAEAAHTmCyTHlcYtXmBcAAAAAElFTkSuQmCC\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"code","metadata":{"id":"LwJ3_N0mc8rS","executionInfo":{"status":"ok","timestamp":1630016604094,"user_tz":-120,"elapsed":17,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}}},"source":[""],"execution_count":59,"outputs":[]},{"cell_type":"code","metadata":{"id":"9mdYmfnpwllF","executionInfo":{"status":"ok","timestamp":1630016604095,"user_tz":-120,"elapsed":15,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}}},"source":["from captum.attr import IntegratedGradients\n","\n","features_name = []\n","for col in df.columns:\n"," if col.split('.')[1]=='x':\n"," features_name.append(col)\n","for col in df.columns:\n"," if col.split('.')[1]=='y':\n"," features_name.append(col)\n","\n","ig = IntegratedGradients(Classifier)\n","\n","test_loader = DataLoader(test_data, batch_size=100)\n","x, y, q, target=next(iter(test_loader))\n","x, y, q = x.to(device), y.to(device), q.to(device)\n","x_encoded = onehot_encode(x, q)\n","y_encoded = onehot_encode(y, q)\n","test_input_tensor = torch.cat((x_encoded, y_encoded), dim=1).float()\n","\n","nq = 3\n","onehot_quality = F.one_hot(q.view(1,-1), nq).view(q.size(0), q.size(1), q.size(2), nq).permute(0, 1, 3, 2)\n"],"execution_count":60,"outputs":[]},{"cell_type":"code","metadata":{"id":"3RRuJ0trwllF","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1630016605538,"user_tz":-120,"elapsed":1456,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}},"outputId":"577dcd6c-77f8-4476-e95a-a1d2abb1a457"},"source":["importance_data = []\n","torch.backends.cudnn.enabled=False\n","test_input_tensor.requires_grad = True\n","\n","for t in range(2):\n"," attr, delta = ig.attribute(test_input_tensor, target=t, return_convergence_delta=True)\n"," print(attr.shape)\n"," attr_x = attr[:, :45, :]\n"," attr_y = attr[:, 45:, :]\n"," print(attr_x.shape)\n"," attr_x = torch.reshape(attr_x, [attr_x.size(0), 15, 3, 100])\n"," print(attr_x.shape)\n"," print(attr_y.shape)\n"," attr_y = torch.reshape(attr_y, [attr_x.size(0), 15, 3, 100])\n"," print(attr_y.shape)\n"," output_x = (torch.mul(attr_x, onehot_quality.float()).sum(dim=2)).squeeze()\n"," output_y = (torch.mul(attr_y, onehot_quality.float()).sum(dim=2)).squeeze()\n"," print(output_x.shape)\n"," print(output_y.shape)\n"," importances = []\n"," importances.extend(output_x.detach().cpu().mean(axis=2).mean(axis=0).numpy())\n"," importances.extend(output_y.detach().cpu().mean(axis=2).mean(axis=0).numpy())\n"," importance_data.append(importances)"],"execution_count":61,"outputs":[{"output_type":"stream","text":["torch.Size([100, 90, 100])\n","torch.Size([100, 45, 100])\n","torch.Size([100, 15, 3, 100])\n","torch.Size([100, 45, 100])\n","torch.Size([100, 15, 3, 100])\n","torch.Size([100, 15, 100])\n","torch.Size([100, 15, 100])\n","torch.Size([100, 90, 100])\n","torch.Size([100, 45, 100])\n","torch.Size([100, 15, 3, 100])\n","torch.Size([100, 45, 100])\n","torch.Size([100, 15, 3, 100])\n","torch.Size([100, 15, 100])\n","torch.Size([100, 15, 100])\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"U4o1Z1_swllF","colab":{"base_uri":"https://localhost:8080/","height":386},"executionInfo":{"status":"ok","timestamp":1630016606472,"user_tz":-120,"elapsed":937,"user":{"displayName":"Franziska Ziolkowski","photoUrl":"","userId":"15466942233857614154"}},"outputId":"f02e975b-41b7-485f-dc1f-fbf203300867"},"source":["importance_df = pd.DataFrame(importance_data, columns = features_name).T\n","importance_df.columns = labels_plot\n","#importance_df.to_csv(out_dir + str(labels_plot) + \"importance_score.csv\")\n","importance_df.plot.bar(figsize=(15,5))\n","plt.legend(loc=\"upper left\")\n","plt.ylabel(\"importance score\")\n","plt.tight_layout()\n","#plt.savefig(out_dir + str(labels_plot) + \"importance_plot.pdf\")\n","plt.show()"],"execution_count":62,"outputs":[{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":62},{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":62},{"output_type":"execute_result","data":{"text/plain":["Text(0, 0.5, 'importance score')"]},"metadata":{},"execution_count":62},{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAABDAAAAFgCAYAAABNIolGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeZgdVZ3/8fc3C0lECIuoQIAEBFmSGCCCiDCAoMg+DoxsGkHHUXRAJYyAioiKQVF/oCCDyuIGuLENjMgijDgiJBACYQeDRBwHUcIaTOT7++NWd7qTTvqG5FadpN+v5+knXXWruz5961Sd7m+qzonMRJIkSZIkqWSDmg4gSZIkSZLUHwsYkiRJkiSpeBYwJEmSJElS8SxgSJIkSZKk4lnAkCRJkiRJxRvSdIA6vepVr8rRo0c3HUOSJEmSJC3GtGnT/pyZ6yy8fkAVMEaPHs3UqVObjiFJkiRJkhYjIh7ta72PkEiSJEmSpOJZwJAkSZIkScWzgCFJkiRJkoo3oMbA6Mu8efOYPXs2c+fObTqKGjR8+HBGjRrF0KFDm44iSZIkSerDgC9gzJ49m9VWW43Ro0cTEU3HUQMykyeffJLZs2czZsyYpuNIkiRJkvow4B8hmTt3LmuvvbbFiwEsIlh77bW9C0eSJEmSCjbgCxiAxQvZBiRJkiSpcBYwJEmSJElS8Qb8GBgLG338Vcv1+82asne/20QEhx12GN///vcBmD9/Puuuuy7bb789//mf/wnAZZddxkknncS8efMYMmQIn/vc5zjggAOWKdtTTz3FD3/4Q4466qil+roLLriAqVOn8o1vfGOp9/ne976Xm266iZEjRzJo0CDOOussdthhBz796U9z+eWXM2jQIF796ldzwQUXsN566y3195ckSZIkrZy8A6MAq666KnfffTcvvPACANdeey3rr79+9+t33nknkydP5vLLL+fee+/liiuuYPLkycyYMWOZ9vvUU09x9tln9/na/Pnzl+l7L8mXv/xlpk+fzpQpU/jXf/1XAI477jhmzJjB9OnT2WeffTjllFM6tn9JkiRJ0orHAkYh9tprL666qnX3x0UXXcQhhxzS/drpp5/OiSee2D1DxpgxYzjhhBP48pe/DMAuu+zCMcccw4QJExg7diy33nrrIt9/5syZbLfddkyYMIHx48fz4IMPcvzxx/Pwww8zYcIEjjvuOG688UZ22mkn9ttvP7bcckvmzp3LEUccwbhx49h666355S9/ucj3veqqq9hhhx3485//zC9+8Qt22GEHttlmGw466CCeffbZJf7MO++8Mw899BAAq6++evf65557zjEpJEkDy8kj+/+QJGmAs4BRiIMPPpiLL76YuXPnMmPGDLbffvvu12bOnMm2227ba/uJEycyc+bM7uXnn3+e6dOnc/bZZ3PkkUcu8v3POeccjjnmGKZPn87UqVMZNWoUU6ZMYZNNNmH69OndxZDbb7+dM844gwceeICzzjqLiOCuu+7ioosuYtKkSb1m6rj00kuZMmUKV199NQCf//znue6667j99tuZOHEiX/3qV5f4M1955ZWMGzeue/mTn/wkG2ywAT/4wQ+8A0OSJEmS1IsFjEKMHz+eWbNmcdFFF7HXXnst9dd33bGx88478/TTT/PUU0/1en2HHXbg1FNP5bTTTuPRRx9lxIgRfX6f7bbbrvtOj5tvvpnDDz8cgM0335yNNtqIBx54AIAbbriB0047jauuuoo111yTW265hXvuuYcdd9yRCRMmcOGFF/Loo4/2uY/jjjuOCRMmcO655/Kd73yne/0XvvAFHnvsMQ477LCXNb6GJEmSJGnlZQGjIPvttx+TJ0/u9fgIwJZbbsm0adN6rZs2bRpbbbVV9/LCj1wsvHzooYdyxRVXMGLECPbaay9uuOGGPjOsuuqqbWXdZJNNeOaZZ7oLGpnJHnvswfTp05k+fTr33HNPr+JET11jYFx77bWMHTt2kdcPO+wwfvrTn7aVQ5IkSZI0MFjAKMiRRx7JZz7zmV6PVQBMnjyZL37xi8yaNQuAWbNmceqpp3Lsscd2b3PJJZcArbsmRo4cyciRvZ+VfeSRR9h44405+uij2X///ZkxYwarrbYazzzzzGLz7LTTTvzgBz8A4IEHHuD3v/89r3/96wHYaKON+OlPf8p73vMeZs6cyZve9CZ+/etfd49p8dxzz3UXN9rx4IMPdn9++eWXs/nmm7f9tZIkSZKklZ/TqC6knWlPO2XUqFEcffTRi6yfMGECp512Gvvuuy/z5s1j6NChfOlLX2LChAnd2wwfPpytt96aefPmcd555y3yPX70ox/xve99j6FDh/La176WE088kbXWWosdd9yRsWPH8o53vIO99+79sx911FF86EMfYty4cQwZMoQLLriAYcOGdb+++eab84Mf/ICDDjqIK6+8kgsuuIBDDjmEF198EWiNibHZZpu19bMff/zx3H///QwaNIiNNtqIc845p62vkyRJkiQNDJGZTWeozcSJE3Pq1Km91t17771sscUWDSVaPnbZZRdOP/10Jk6c2HSUFdrK0BYkSSuodmYZOXlO53NIklSAiJiWmYv8gesjJJIkSZIkqXg+QrISuPHGG5uOIEmSJElSR3kHhiRJkiRJKp4FDEmSJEmSVDwLGJIkSZIkqXgWMCRJkiRJUvEcxHNh7UxjtlTfzynPJEmSJElaVt6BUYCI4PDDD+9enj9/Puussw777LNP97rLLruM8ePHs8UWWzBu3Dguu+yyl7WvCy64gIjguuuu6/W9I4Kf/OQnAPztb3/jox/9KK973evYdNNN2X///Zk9e/bL/OlaTj75ZE4//fRl+h79mTVrFiNGjGDChAlsueWWfPCDH+Sll17i0UcfZZtttmHChAlstdVWnHPOOR3NIUmSJEla/rwDowCrrroqd999Ny+88AIjRozg2muvZf311+9+/c4772Ty5Mlce+21jBkzht/97nfssccebLzxxowfP36p9zdu3Dguvvhidt99dwAuuugi3vCGN3S/fuKJJ/LMM89w//33M3jwYM4//3ze+c538tvf/paIWPYfuIM22WQTpk+fzvz589ltt9247LLL2GefffjNb37DsGHDePbZZxk7diz77bcf6623XtNxJUmSJElt8g6MQuy1115cddVVQKugcMghh3S/dvrpp3PiiScyZswYAMaMGcMJJ5zAl7/8ZQB22WUXjjnmGCZMmMDYsWO59dZbl7ivnXbaiVtvvZV58+bx7LPP8tBDDzFhwgQAnn/+ec4//3y+9rWvMXjwYACOOOIIhg0bxg033MBzzz3H3nvvzRve8AbGjh3LJZdcssj3P/PMM9lyyy0ZP348Bx98cPf6e+65h1122YWNN96YM888s3v9AQccwLbbbstWW23Fueee273+la98JccddxxbbbUVu+++O7feemv3119xxRVL/BmHDBnCm9/8Zh566CFWWWUVhg0bBsCLL77ISy+9tMSvlSRJkiSVxwJGIQ4++GAuvvhi5s6dy4wZM9h+++27X5s5cybbbrttr+0nTpzIzJkzu5eff/55pk+fztlnn82RRx65xH1FBLvvvjvXXHMNl19+Ofvtt1/3aw899BAbbrghq6++ep/7+/nPf856663HnXfeyd13382ee+65yPefMmUKd9xxBzNmzOj1uMZ9993HNddcw6233spnP/tZ5s2bB8B5553HtGnTmDp1KmeeeSZPPvkkAM899xy77bYbM2fOZLXVVuNTn/oU1157LZdeeiknnXTSEn/G559/nuuvv55x48YB8NhjjzF+/Hg22GADPvGJT3j3hSRJkiStYHyEpBDjx49n1qxZXHTRRey1115L/fVdd2zsvPPOPP300zz11FOsscYai93+4IMP5swzz2TOnDl85Stf4dRTT21rP+PGjePYY4/lE5/4BPvssw877bRTnz/LYYcdxgEHHMABBxzQvX7vvfdm2LBhDBs2jFe/+tX86U9/YtSoUZx55plceumlQKvQ8OCDD7L22muzyiqrdBdIxo0bx7Bhwxg6dCjjxo1j1qxZfeZ7+OGHmTBhAhHB/vvvzzve8Q4ANthgA2bMmMHjjz/OAQccwIEHHshrXvOatn5mSZIkSX3obwIEJzTQcuYdGAXZb7/9mDx5cq/HRwC23HJLpk2b1mvdtGnT2GqrrbqXFx6bor+xKrbbbjvuuusu/vznP7PZZpt1r99kk034/e9/zzPPPNPn/jbbbDNuv/12xo0bx6c+9SlOOeWURb73VVddxYc//GFuv/123vjGNzJ//nyA7sc4AAYPHsz8+fO58cYbue666/jNb37DnXfeydZbb83cuXMBGDp0aPfPMWjQoO6vHzRoUPf3XFjXGBh33HEHJ5988iKvr7feeowdO5Zf/epXS3x/JEmSJEll8Q6MhTVYJTzyyCNZY401GDduHDfeeGP3+smTJ3PQQQex2267MXr0aGbNmsWpp57aPWsIwCWXXMKuu+7KzTffzMiRIxk5sv/pYKdMmcLw4cN7rVt11VWZNGkSH//4xznnnHMYPHgw3/3ud3n++efZbbfdePzxx1lrrbU4/PDDWWONNfj2t7/d6+tfeuklHnvsMXbddVfe8pa3cPHFF/Pss88uNsOcOXNYc801ecUrXsF9993HLbfc0ua71b7Zs2ez9tprM2LECP76179y880387GPfWy570eSJEmS1DmNFjAiYk/gDGAw8O3MnLLQ68OA7wLbAk8C78rMWRGxBzAFWAX4G3BcZt5Qa/gO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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]}]}