{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## **Quickstart Guide**\n", "\n", "This guide covers the standard usage pattern and basic functionality to help you get started with twinLab. In this jupyter notebook we will:\n", "\n", "1. Upload a dataset to twinLab.\n", "2. Use `Emulator.train` to train a surrogate model.\n", "3. Use the model to make a prediction with `Emulator.predict`.\n", "4. Visualise the results and their uncertainty.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Third-party imports\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "\n", "# Project imports\n", "import twinlab as tl" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Your twinLab information**\n", "\n", "Confirm your twinLab version\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'cloud': '2.0.0',\n", " 'modal': '0.2.0',\n", " 'library': '1.2.0',\n", " 'image': 'jasper-twinlab-deployment'}" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tl.versions()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And view your user information, including how many credits you have.\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'username': 'jasper@digilab.co.uk', 'credits': 0}" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tl.user_information()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Upload a dataset**\n", "\n", "Datasets must be data presented as a `pandas.DataFrame` object, or a filepaths which points to a csv file that can be parsed to a `pandas.DataFrame` object. **Both must be formatted with clearly labelled columns.** Here, we will label the input (predictor) variable `x` and the output variable `y`. In `twinlab`, data is expected to be in column-feature format, meaning each row represents a single data sample, and each column represents a data feature.\n", "\n", "`twinLab` contains a `Dataset` class with attirbutes and methods to process, view and summarise the dataset. Datasets must be created with a `dataset_id` which is used to access them. The dataset can be uploaded using the `upload` method.\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
xy
00.696469-0.817374
10.2861390.887656
20.2268510.921553
30.551315-0.326334
40.719469-0.832518
50.4231060.400669
60.980764-0.164966
70.684830-0.960764
80.4809320.340115
90.3921180.845795
\n", "
" ], "text/plain": [ " x y\n", "0 0.696469 -0.817374\n", "1 0.286139 0.887656\n", "2 0.226851 0.921553\n", "3 0.551315 -0.326334\n", "4 0.719469 -0.832518\n", "5 0.423106 0.400669\n", "6 0.980764 -0.164966\n", "7 0.684830 -0.960764\n", "8 0.480932 0.340115\n", "9 0.392118 0.845795" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Dataframe is uploading.\n", "Processing dataset\n", "Dataset example_data was processed.\n" ] } ], "source": [ "x = [\n", " 0.6964691855978616,\n", " 0.28613933495037946,\n", " 0.2268514535642031,\n", " 0.5513147690828912,\n", " 0.7194689697855631,\n", " 0.42310646012446096,\n", " 0.9807641983846155,\n", " 0.6848297385848633,\n", " 0.48093190148436094,\n", " 0.3921175181941505,\n", "]\n", "\n", "y = [\n", " -0.8173739564129022,\n", " 0.8876561174050408,\n", " 0.921552660721474,\n", " -0.3263338765412979,\n", " -0.8325176123242133,\n", " 0.4006686354731812,\n", " -0.16496626502368078,\n", " -0.9607643657025954,\n", " 0.3401149876855609,\n", " 0.8457949914442409,\n", "]\n", "\n", "# Creating the dataframe using the above arrays\n", "df = pd.DataFrame({\"x\": x, \"y\": y})\n", "\n", "# View the dataset before uploading\n", "display(df)\n", "\n", "# Define the name of the dataset\n", "dataset_id = \"example_data\"\n", "\n", "# Intialise a Dataset object\n", "dataset = tl.Dataset(id=dataset_id)\n", "\n", "# Upload the dataset\n", "dataset.upload(df, verbose=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Train an emulator**\n", "\n", "The `Emulator` class is used to train and implement your surrogate models. As with datasets, an id is defined, this is what the model will be saved as in the cloud. When training a model the arguments are passed using a `TrainParams` object; `TrainParams` is a class that contains all the necessary parameters needed to train your model. To train the model we use the `Emulator.train` function, inputting the `TrainParams` object as an argument to this function.\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model example_emulator has begun training.\n", "Training complete!\n", "\n" ] } ], "source": [ "# Initialise emulator\n", "emulator_id = \"example_emulator\"\n", "\n", "emulator = tl.Emulator(id=emulator_id)\n", "\n", "# Define the training parameters for your emulator\n", "params = tl.TrainParams(train_test_ratio=1.0)\n", "\n", "# Train the mulator using the train method\n", "emulator.train(\n", " dataset=dataset, inputs=[\"x\"], outputs=[\"y\"], params=params, verbose=True\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Prediction using the trained emulators**\n", "\n", "The surrogate model is now trained and saved to the cloud under the `emulator_id`. It can now be used to make predictions. First define a dataset of inputs for which you want to find outputs; ensure that this is a `pandas.DataFrame` object. Then call `Emulator.predict` with the keyword arguments being the evaluation dataset.\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
x
00.000000
10.007874
20.015748
30.023622
40.031496
......
1230.968504
1240.976378
1250.984252
1260.992126
1271.000000
\n", "

128 rows × 1 columns

\n", "
" ], "text/plain": [ " x\n", "0 0.000000\n", "1 0.007874\n", "2 0.015748\n", "3 0.023622\n", "4 0.031496\n", ".. ...\n", "123 0.968504\n", "124 0.976378\n", "125 0.984252\n", "126 0.992126\n", "127 1.000000\n", "\n", "[128 rows x 1 columns]" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " y y\n", "0 0.617689 0.656265\n", "1 0.629105 0.640576\n", "2 0.640630 0.624421\n", "3 0.652252 0.607809\n", "4 0.663957 0.590755\n" ] } ], "source": [ "# Define the inputs for the dataset\n", "x_eval = np.linspace(0, 1, 128)\n", "\n", "# Convert to a dataframe\n", "df_eval = pd.DataFrame({\"x\": x_eval})\n", "display(df_eval)\n", "\n", "# Predict the results\n", "predictions = emulator.predict(df_eval)\n", "result_df = pd.concat([predictions[0], predictions[1]], axis=1)\n", "df_mean, df_stdev = result_df.iloc[:, 0], result_df.iloc[:, 1]\n", "df_mean, df_stdev = df_mean.values, df_stdev.values\n", "print(result_df.head())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Viewing the results**\n", "\n", "`Emulator.predict` outputs mean values for each input and their standard deviation; this gives the abilty to nicely visualise the uncertainty in results.\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk4AAAGwCAYAAABfKeoBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB7uElEQVR4nO3deXhb5ZU/8O+VLMmr5DjeYzt2bGffA0kclrCEhqUUGFoYSqEwaYEOKUMptGS60D2UaedHhzJlKZ10gcK0bJ1AAyEQAiEsWQwJcRw7seM4sZ04sWVb3qX7++NUVpx4uVeWdK/k7+d57pPYvpJeW7Lv0XnPe15FVVUVRERERDQqi9EDICIiIooWDJyIiIiINGLgRERERKQRAyciIiIijRg4EREREWnEwImIiIhIIwZORERERBrFGT2AaODz+XD06FGkpKRAURSjh0NEREQaqKqK9vZ25ObmwmIJTa6IgZMGR48eRX5+vtHDICIioiAcPnwYeXl5IbkvBk4apKSkAJAfvNPpNHg0REREpEVbWxvy8/MHruOhwMBJA//0nNPpZOBEREQUZUJZZsPicCIiIiKNGDgRERERacTAiYiIiEijqKpxWrt2LV544QXs27cPCQkJWLZsGX7+859j2rRpI97uL3/5C773ve+htrYWpaWl+PnPf47LL788QqMmIoo9Xq8XfX19Rg+DxjmbzQar1RrRx4yqwOntt9/GnXfeibPPPhv9/f3493//d3zmM5/B3r17kZSUNORt3nvvPdxwww1Yu3YtPvvZz+KZZ57B1VdfjZ07d2L27NkR/g6IiKKbqqpobGxEa2ur0UMhAgCkpqYiOzs7Yn0WFVVV1Yg8UhgcP34cmZmZePvtt3H++ecPec71118Pj8eD9evXD3xu6dKlmD9/Ph577LEhb9PT04Oenp6Bj/3LGd1uN1fVEdG41tDQgNbWVmRmZiIxMZFNgckwqqqis7MTx44dQ2pqKnJycs44p62tDS6XK6TX76jKOJ3O7XYDANLS0oY9Z9u2bbjnnnsGfW7lypV46aWXhr3N2rVr8cMf/jAkYyQiihVer3cgaJo4caLRwyFCQkICAODYsWPIzMyMyLRd1BaH+3w+3H333TjnnHNGnHJrbGxEVlbWoM9lZWWhsbFx2NusWbMGbrd74Dh8+HDIxk1EFK38NU2JiYkGj4QowP96jFTNXdRmnO68807s2bMH7777bsjv2+FwwOFwhPx+iYhiAafnyEwi/XqMysBp9erVWL9+PbZs2TLq3jPZ2dloamoa9LmmpiZkZ2eHc4hEREQUg6Jqqk5VVaxevRovvvgi3nzzTRQVFY16m7KyMmzatGnQ5zZu3IiysrJwDZOIiIhiVFRlnO68804888wzePnll5GSkjJQp+RyuQYKxG6++WZMmjQJa9euBQD827/9G5YvX45f/vKXuOKKK/Dss89i+/bteOKJJwz7PoiIYs0PfhCbj6XV5s2bceGFF6KlpQWpqamablNYWIi7774bd999d1jHptUFF1yA+fPn4+GHHwYQmvGZ7XsMhajKOP3mN7+B2+3GBRdcgJycnIHjueeeGzinrq4ODQ0NAx8vW7YMzzzzDJ544gnMmzcPf/3rX/HSSy+xhxMR0Thxyy23QFEU3HHHHWd87c4774SiKLjlllsiPzCT++ijj3DbbbdpOnfdunVDBox67iNaRFXGSUvLqc2bN5/xuS984Qv4whe+EIYRERFRNMjPz8ezzz6L//f//t/ADEV3dzeeeeYZFBQUGDy60Ont7YXdbg/JfWVkZJjiPswmqjJORuvvN3oEREQUjIULFyI/Px8vvPDCwOdeeOEFFBQUYMGCBYPO7enpwV133YXMzEzEx8fj3HPPxUcffTTonFdffRVTp05FQkICLrzwQtTW1p7xmO+++y7OO+88JCQkID8/H3fddRc8Ho/mMd9yyy24+uqr8cMf/hAZGRlwOp2444470NvbO3DOBRdcgNWrV+Puu+9Geno6Vq5cCQDYs2cPLrvsMiQnJyMrKws33XQTmpubB27n8Xhw8803Izk5GTk5OfjlL395xuMXFhYOTNsBQGtrK26//XZkZWUhPj4es2fPxvr167F582bceuutcLvdUBQFiqLgB/+YTz39Purq6nDVVVchOTkZTqcT11133aAFXD/4wQ8wf/58/PGPf0RhYSFcLhf++Z//Ge3t7Zp/buHGwEmH7duB+nogenutExGNX//yL/+C//mf/xn4+He/+x1uvfXWM8771re+heeffx6///3vsXPnTpSUlGDlypU4efIkAODw4cP4p3/6J1x55ZUoLy/HV77yFdx///2D7uPAgQO49NJLce211+KTTz7Bc889h3fffRerV6/WNeZNmzahoqICmzdvxp///Ge88MILZzRo/v3vfw+73Y6tW7fiscceQ2trKy666CIsWLAA27dvx4YNG9DU1ITrrrtu4Db33Xcf3n77bbz88st4/fXXsXnzZuzcuXPYcfh8Plx22WXYunUr/vSnP2Hv3r148MEHYbVasWzZMjz88MNwOp1oaGhAQ0MD7r333iHv46qrrsLJkyfx9ttvY+PGjTh48CCuv/76M352L730EtavX4/169fj7bffxoMPPqjr5xZOUTVVZ7S+PqC6GjhyBCgqAjIzjR4RERFp9aUvfQlr1qzBoUOHAABbt27Fs88+O6jEw+Px4De/+Q3WrVuHyy67DADw5JNPYuPGjXjqqadw33334Te/+Q2Ki4sHsjTTpk3D7t278fOf/3zgftauXYsbb7xxoCi6tLQU//Vf/4Xly5fjN7/5DeLj4zWN2W6343e/+x0SExMxa9Ys/OhHP8J9992HH//4x7BYLAP3/dBDDw3c5ic/+QkWLFiAn/3sZwOf+93vfof8/Hzs378fubm5eOqpp/CnP/0JF198MQAJvkZq7/PGG2/gww8/REVFBaZOnQoAmDJlysDXXS4XFEUZsdXPpk2bsHv3btTU1CA/Px8A8Ic//AGzZs3CRx99hLPPPhuABFjr1q1DSkoKAOCmm27Cpk2b8NOf/lTTzyzcGDgFoasL2LtXAqiSEuAfzy0REZlYRkYGrrjiCqxbtw6qquKKK65Aenr6oHMOHDiAvr4+nHPOOQOfs9lsWLx4MSoqKgAAFRUVWLJkyaDbnd7i5uOPP8Ynn3yCp59+euBzqqrC5/OhpqYGM2bM0DTmefPmDerUXlZWho6ODhw+fBiTJ08GACxatOiMx37rrbeQnJx8xv0dOHAAXV1d6O3tHfQ9pKWlYdq0acOOo7y8HHl5eQNBUzAqKiqQn58/EDQBwMyZM5GamoqKioqBwKmwsHAgaAKAnJwcHDt2LOjHDTUGTmPgdgM7dgDZ2ZKBYrNxIiJz+5d/+ZeB6bJHH300bI/T0dGB22+/HXfdddcZXwt1MXpSUtIZj33llVcOyoD55eTkoLq6Wvdj+AvqI8Fmsw36WFEU+Hy+iD3+aFjjFAKNjcCHHwJ1dYCJnlsiIjrNpZdeit7eXvT19Q0UUp+quLh4oF7Ir6+vDx999BFmzpwJAJgxYwY+/PDDQbd7//33B328cOFC7N27FyUlJWccela9ffzxx+jq6hr0OMnJyYOyNqdbuHAhPv30UxQWFp7x2ElJSSguLobNZsMHH3wwcJuWlhbs379/2PucO3cu6uvrhz3HbrfD6/WO+L3MmDEDhw8fHrT/6969e9Ha2jrws40GDJxCxOsFDh6UAvJ/1A8SEZHJWK1WVFRUYO/evbBarWd8PSkpCV/72tdw3333YcOGDdi7dy+++tWvorOzE6tWrQIA3HHHHaiqqsJ9992HyspKPPPMM1i3bt2g+/n2t7+N9957D6tXr0Z5eTmqqqrw8ssv6y4O7+3txapVq7B37168+uqreOCBB7B69eqB+qah3HnnnTh58iRuuOEGfPTRRzhw4ABee+013HrrrfB6vUhOTsaqVatw33334c0338SePXtwyy23jHify5cvx/nnn49rr70WGzduRE1NDf7+979jw4YNAGR6raOjA5s2bUJzczM6OzvPuI8VK1Zgzpw5uPHGG7Fz5058+OGHuPnmm7F8+XKcddZZun4uRuJUXYh1dgKffAKkpwOlpZy+I6LxwYzdvIfjdDpH/PqDDz4In8+Hm266Ce3t7TjrrLPw2muvYcKECQBkqu3555/HN77xDTzyyCNYvHgxfvazn+Ff/uVfBu5j7ty5ePvtt/Gd73wH5513HlRVRXFx8RkryEZz8cUXo7S0FOeffz56enpwww03DCz1H05ubi62bt2Kb3/72/jMZz6Dnp4eTJ48GZdeeulAcPQf//EfA1N6KSkp+OY3vwm32z3i/T7//PO49957ccMNN8Dj8aCkpGRgtduyZctwxx134Prrr8eJEyfwwAMPnDFORVHw8ssv4+tf/zrOP/98WCwWXHrppXjkkUd0/UyMpqhaukqOc21tbXC5XFi/3o2kpJF/4U5ltQKFhUBeHsDNxIko2nV3d6OmpgZFRUWaV4VR8G655Ra0trbipZdeMnoopjbS69J//Xa73aMGzFpxqi6MvF7gwAGZvhslkCciIqIowMApAjweYNcuYP9+dh8nIiKKZqxxiqCjR4ETJ6T26bTWIURERIOcXnBO5sCMU4T19AB79gCffgqcst0QERERRQFmnAxy/DjQ2iqdx7OyjB4NERERacGMk4H6+oCKCmD3bslEERERkbkxcDKBEyeAjz4CmpqMHgkRERGNhIGTSfT3S/Zpzx7WPhEREZkVAyeTaW6W7NPx40aPhIiIhlNYWIiHH35Y8/mbN2+GoihobW0N25iGs27dOqSmpkb8cWMVAycT6uuTVXcVFez7REQ0FoqijHiMtn3JcD766CPcdtttms9ftmwZGhoa4HK5gnq8SNMbGI4nXFVnYk1N0nF8+nSAbxaIiPRraGgY+P9zzz2H73//+6isrBz4XHJy8sD/VVWF1+tFXNzol8aMjAxd47Db7cjOztZ1GzInZpxMrrsb+Phj2bqFuwoSUayor6/HW2+9hfr6+rA+TnZ29sDhcrmgKMrAx/v27UNKSgr+/ve/Y9GiRXA4HHj33Xdx4MABXHXVVcjKykJycjLOPvtsvPHGG4Pu9/SMjKIo+O1vf4trrrkGiYmJKC0txd/+9reBr58+VeefPnvttdcwY8YMJCcn49JLLx0U6PX39+Ouu+5CamoqJk6ciG9/+9v48pe/jKuvvnrE73ndunUoKChAYmIirrnmGpw4cWLQ10f7/i644AIcOnQI3/jGNwYycwBw4sQJ3HDDDZg0aRISExMxZ84c/PnPf9bzdMQEBk5RQFWBw4eBnTuBzk6jR0NENDZPPfUUJk+ejIsuugiTJ0/GU089Zeh47r//fjz44IOoqKjA3Llz0dHRgcsvvxybNm3Crl27cOmll+LKK69EXV3diPfzwx/+ENdddx0++eQTXH755bjxxhtx8uTJYc/v7OzEL37xC/zxj3/Eli1bUFdXh3vvvXfg6z//+c/x9NNP43/+53+wdetWtLW1jbrh7wcffIBVq1Zh9erVKC8vx4UXXoif/OQng84Z7ft74YUXkJeXhx/96EdoaGgYCOa6u7uxaNEivPLKK9izZw9uu+023HTTTfjwww9HHFOsYeAURdrbgR07ZOsWIqJoVF9fj9tuuw0+nw8A4PP5cPvtt4c98zSSH/3oR7jkkktQXFyMtLQ0zJs3D7fffjtmz56N0tJS/PjHP0ZxcfGgDNJQbrnlFtxwww0oKSnBz372M3R0dIwYVPT19eGxxx7DWWedhYULF2L16tXYtGnTwNcfeeQRrFmzBtdccw2mT5+OX//616MWef/qV7/CpZdeim9961uYOnUq7rrrLqxcuXLQOaN9f2lpabBarUhJSRnIzgHApEmTcO+992L+/PmYMmUKvv71r+PSSy/F//7v/444pljDwCnKeL2yWfCnn7JwnIiiT1VV1UDQ5Of1elFdXW3QiICzzjpr0McdHR249957MWPGDKSmpiI5ORkVFRWjZpzmzp078P+kpCQ4nU4cO3Zs2PMTExNRXFw88HFOTs7A+W63G01NTVi8ePHA161WKxYtWjTiGCoqKrBkyZJBnysrKwvJ9+f1evHjH/8Yc+bMQVpaGpKTk/Haa6+NertYw+LwKHX8uGSgZswAomSRBhERSktLYbFYBgVPVqsVJSUlho0pKSlp0Mf33nsvNm7ciF/84hcoKSlBQkICPv/5z6N3lCZ7Nptt0MeKopwRJI52vhqBYtZgv7//+I//wK9+9Ss8/PDDmDNnDpKSknD33XePertYw4xTFOvuBsrLgdpaFo4TUXTIy8vDE088AavVCkCCpscffxx5eXkGjyxg69atuOWWW3DNNddgzpw5yM7ORm1tbUTH4HK5kJWVhY8++mjgc16vFzt37hzxdjNmzMAHH3ww6HPvv//+oI+1fH92ux1er/eM21111VX40pe+hHnz5mHKlCnYv39/EN9ddGPgFOVUVQKnjz9mx3Eiig6rVq1CbW0t3nrrLdTW1mLVqlVGD2mQ0tJSvPDCCygvL8fHH3+ML37xiyNmjsLl61//OtauXYuXX34ZlZWV+Ld/+ze0tLQMrHIbyl133YUNGzbgF7/4BaqqqvDrX/8aGzZsGHSOlu+vsLAQW7ZswZEjR9Dc3Dxwu40bN+K9995DRUUFbr/9djSNw73CGDjFiNZW6Tg+wgIOIiLTyMvLwwUXXGCqTJPff/7nf2LChAlYtmwZrrzySqxcuRILFy6M+Di+/e1v44YbbsDNN9+MsrIyJCcnY+XKlYiPjx/2NkuXLsWTTz6JX/3qV5g3bx5ef/11fPe73x10jpbv70c/+hFqa2tRXFw80LPqu9/9LhYuXIiVK1figgsuQHZ29qitEWKRokZiQjXKtbW1weVyYf16N5KSnEYPZ1QFBUBRETDCmxIiIt26u7tRU1ODoqKiES/eFB4+nw8zZszAddddhx//+MdGD8c0Rnpd+q/fbrcbTmdort8sDo9BdXXScXzmTMDhMHo0REQUjEOHDuH111/H8uXL0dPTg1//+teoqanBF7/4RaOHNq5xqi5Gud3A9u2cuiMiilYWiwXr1q3D2WefjXPOOQe7d+/GG2+8gRkzZhg9tHGNGacY1tcHfPIJMHkyUFjIqTsiomiSn5+PrVu3Gj0MOg0zTuPAoUNcdUdERBQKDJzGidZWmbr7x/6SRERB45oiMpNIvx4ZOI0jvb2SeRpn3fGJKET8na47uds4mYj/9Xh6J/ZwYY3TOKOqwMGDUjw+YwYQx1cAEWlktVqRmpo6sJ9aYmLiiM0YicJJVVV0dnbi2LFjSE1NHehGH268bI5TJ07I1N2sWUBKitGjIaJokZ2dDQAjbl5LFEmpqakDr8tIYOA0jnV3A7t2AaWlQE6O0aMhomigKApycnKQmZmJvr4+o4dD45zNZotYpsmPgdM45/MBlZUydTd1KmBh1RsRaWC1WiN+wSIyA14mCQDQ2Ajs3Al0dRk9EiIiIvNi4EQDOjqAHTuAf2yETURERKdh4ESD9PcDe/YABw7ICjwiIiIKiLrAacuWLbjyyiuRm5sLRVHw0ksvjXj+5s2boSjKGUdjY2NkBhylDh8GysvZbZyIiOhUURc4eTwezJs3D48++qiu21VWVqKhoWHgyMzMDNMIY4d/o2B2GyciIhJRt6russsuw2WXXab7dpmZmUhNTQ39gGKcv9t4YaFsFkxERDSeRV3GKVjz589HTk4OLrnkklF3m+7p6UFbW9ugYzxTVaCmBti9W2qgiIiIxquYD5xycnLw2GOP4fnnn8fzzz+P/Px8XHDBBdi5c+ewt1m7di1cLtfAkZ+fH8ERm5e/2/g4jyOJiGgcU9Qo3uZaURS8+OKLuPrqq3Xdbvny5SgoKMAf//jHIb/e09ODnp6egY/b2tqQn5+P9evdSEpyjmXIMUFRgOJiIC/P6JEQERENr62tDS6XC263G05naK7fUVfjFAqLFy/Gu+++O+zXHQ4HHA5HBEcUXVQVqK6W4vFp07hRMBERjR8xP1U3lPLycuRwc7YxO35cGma2txs9EiIiosiIulxBR0cHqqurBz6uqalBeXk50tLSUFBQgDVr1uDIkSP4wx/+AAB4+OGHUVRUhFmzZqG7uxu//e1v8eabb+L111836luIKV1dslXLlCkAS8GIiCjWRV3gtH37dlx44YUDH99zzz0AgC9/+ctYt24dGhoaUFdXN/D13t5efPOb38SRI0eQmJiIuXPn4o033hh0HzQ2qiqdxltbgenTAZvN6BERERGFR1QXh0eKv7iMxeGjcziAGTMAtswiIiKjhaM4fFzWOFH49PRIw8yDB7nXHRERxR4GThRyqgrU1UntU1eX0aMhIiIKHQZOFDbt7dIw8+hRo0dCREQUGgycKKy8XmD/fuCTT2Qaj4iIKJoxcKKIOHlSsk/Hjhk9EiIiouAxcKKI6esD9u4F9uwBenuNHg0REZF+UdfHiaJfc7P0fCouBtjAnYiIogkzTmSI/n6gslJaF3R2Gj0aIiIibRg4kaFaWqT2qaYG8PmMHg0REdHIGDiR4Xw+4NAh4MMPZRqPiIjIrBg4kWl0d0vheHm59IAiIiIyGwZOZDqtrcCOHcC+fez9RERE5sJVdWRajY3S9yk7G5g8WTYQJiIiMhIDJzI1n0+2bGlslACqoACIjzd6VERENF4xcKKo4A+gGhqA9HQgLw9wuYweFRERjTcMnCiqqCpw/LgcKSnSQDMzE4jjK5mIiCKAlxuKWu3tclRXSxYqOxuYMAFQFKNHRkREsYqBkw6HDgEZGUBSEpCQwAu0Wfh8UkR+7JhkniZMkEAqLQ2w2YweHRERxRIGTjq8+y5gt8v/LRYJoJKTZcrI/29KCuB0Bs6jyOrvD0zlKYo8R06n1EO5XCwsJyKisWHgFCSfLzBV1NBw5tcdDrlg+w+XK/Cv1Rr58Y5Hqgp0dMhx9Kh8zmqVYCoxUf6Nj5fnyuGQYJdZRCIiGgkDpzDp6QlkPk6XnAykpp55sMA5/LxeoK1NjtMpigRWNps8F3Fx8rHVKhlGq1XOsVjk8P//1M/5z/P/67+fuDgGZUREsYCXagP4syD19YM/n5Ii9Tn+Iy1NPscLbmSoqkz19feH5/7j4iSr5c9uxcdLrVxCgmTAWI9FRGR+DJxMxD/1V1cX+JzNJtmoiRMlkJo4UT7mdF/08QdlnZ1Df91uD9TJpaTItC6zkERE5sI/yybX13fmlJ/FIhmpiRPlyMiQYMrCnQejWm8vcOKEHIBkGpOTAxnI1FRmH4mIjMbAKQr5fIMvsIBkoNLSJIhKT5fD6TRujDR2qjo4C2mzBQLltDQGUURERmDgFCO83jMzUw6HBFAZGdJdOz2dbRKiWV+f7NnX2ChBVHa2dE5PTDR6ZERE4wcDpxjW0wMcOSKH34QJgUAqI4P7vUWrvj7g8GE5UlOBSZMkMGYWiogovBg4jTMtLXLs3y8fx8cHgqisLJkKYuF5dGltlSMxESgokOeRARQRUXgwcBrnurulfsa/ks9qleApK0sCqsxMmfIj8+vsBPbtA2prgcmTZSqPARQRUWgxcKJBvN7Avm9+LlcgkMrOlpVeZF7d3UBlpfQJmzJFAmEiIgoNBk40KrdbDv/0XkLC4IxUWhpbIZiRxwPs3i11bSUlssUMERGNDQMn0q2rS6aDamvl47g4KUzOzJSAKiODq/fMpKUF2L5d6p8mT2aQS0Q0FgycaMz6+wPL5P1cLgmg/AcbdBpLVYFDh2QKdupUyUIREZF+DJwoLPzTe9XV8rE/K5WeHuh4zgadkdfVBXz8MZCbCxQXcwUlEZFeDJwoIobKStntgT34/IfLxcxUJBw9Ki0MZsyQffGIiEgbBk5kmN5eoKFBDj+LRYKn1FQ5XC7JTDmd3PA21Do7gZ07gcJCqX9i6wIiotHxUkSm4vMFmnSeLilJsiPJyYEjMTFwsCBdP1UFampkWnXGDNnKhYiIhsfAiaKGxyPHcKxW6YTucAQOm23wYbXKYbEE/lWUwL/+Axj876mf9597+v347z8anTwJ7NgBzJrFqTsiopEwcKKY4fWOHlyFm6IEgjR/8BYfL72vEhICmbKkJPNtztvdDezaJT2fcnONHg0RkTkxcCIKIVWV2q3e3tEDOJstUM/lcgVWHBo55ejzSaPTjg6gtJR1T0REp2PgRGSQvj6guVmOU6WmSu+rnBw5EhIiP7ajR6V1waxZLMonIjoV/yQSmUxrqxxVVfJxWhowaZKsfMvIiNw4Wlpk1d2cOcYEb0REZsTAicjkTp6UY/duqY+aPBkoKpKpvXDztyyYM4cNS4mIACDqWg1u2bIFV155JXJzc6EoCl566aVRb7N582YsXLgQDocDJSUlWLduXdjHSRQOHR3Ap58C69cDL78MVFRIPVU49fVJt/ETJ8L7OERE0SDqAiePx4N58+bh0Ucf1XR+TU0NrrjiClx44YUoLy/H3Xffja985St47bXXwjxSovBqaQE++AB47jng3Xdlei9cvF5gz57Bnd+JiMYjRVVV1ehBBEtRFLz44ou4+uqrhz3n29/+Nl555RXs2bNn4HP//M//jNbWVmzYsGHI2/T09KCnp2fg47a2NuTn5+OGG9yw2zlfQeaVlwfMng1kZ4fvMaZMkXorIiKza2trg8vlgtvthjNE9QZRl3HSa9u2bVixYsWgz61cuRLbtm0b9jZr166Fy+UaOPLz88M9TKKQqK8HNmwA/v53oKkpPI9x8KAcRETjUcwHTo2NjcjKyhr0uaysLLS1taGrq2vI26xZswZut3vgOHz4cCSGShQyTU0SPL3xhhSWh1pdHVBdHfr7JSIyO66qG4LD4YDD4TB6GERjVl8vR2kpsGiRdDEP5X17vcDUqWyUSUTjR8xnnLKzs9F02pxFU1MTnE4nEtichsaJqirghReAffuku3moNDSE/j6JiMws5gOnsrIybNq0adDnNm7ciLKyMoNGRGSM3l7g/fellUEoWws0NTF4IqLxI+oCp46ODpSXl6O8vByAtBsoLy9HXV0dAKlPuvnmmwfOv+OOO3Dw4EF861vfwr59+/Df//3f+N///V984xvfMGL4RIY7cUKCp127ZKotFJqagMpKBk9EFPuiLnDavn07FixYgAULFgAA7rnnHixYsADf//73AQANDQ0DQRQAFBUV4ZVXXsHGjRsxb948/PKXv8Rvf/tbrFy50pDxU+R5PPVoaHgLHk+90UMxDVWVppahzD41NjJ4IqLYF9V9nCLF3weCfZyiT1XVU9i27Taoqg+KYkFZ2RMoLV11xnmqKtkXrxfo75d/fT75vP/f0ymKHBaLHFbr4MMSJW9LLBZgwQLp/xSKIu+cHGDatLHfDxHRWIWjjxNX1VHM8njqB4ImAFBVH95773YoykpYLHno7w8ESaGasjqV1QrYbIHD4Qgcdrt83Qx8PmDHDskYnXvu2Df0bWiQ762kJDTjIyIyEwZOFBP6+oCeHqC7W46eHuD48aqBoCnAi8bGaiQn5w15P/7MUVxcIJPkzyydno05NSPl8wUCMH8Q1tVVD7e7CnZ7Kez2Mx/P4ZAgJT5e/k1Kksc1ypEjwN/+Bpx/vmSNxqK+Xn6ORUWhGRsRkVkwcKKo4vMBXV2Bwx8k9fefea7FUgop4zs1eLJi0qQSOJ0SpMTFhX56TVWBysqn8PHHt/3jsS2YNesJZGSsQk+PrG7r75dxn7KzDwAJopKS5EhJkUxVJHV1Aa+9BixcCMydO7b7OnRIfr5svE9EsYSBE5mWP0jq7BwcKA1XlWe3S+DhcPj/zUNKyhP46KPboapeKIoVZWWPo6ho6GxTqHR21uPDD/1BEwD4sHfv7bj22pVISpLH7uuT78X/fXV2Ds6Y+Qu2ExIAp1OCqKSkyDWa3LlTOo6fc87YgrcDByQgzc0N3diIiIzEwIlMo7cX8HgkiPB4JKAYKkiKi5OAIjHx1CBp6JqhGTNWoaBgJdrbq5GSUjIQuIRTW9uZU4Sq6kV7e/XA4/vrnlJSAuf09cn33tEhx6mZtaYmOd/lAlJTIxNE1dYCbjdw0UWDx6lXVZWMPSMjZEMjIjIMAycyhKpKZsXjCRy9vWeeFxcnAZI/UEpIkIuwnqAhKSkvIgGTn9NZCkWxDAqeFMWKlJSRq6X9gZHLJR/39QHt7XK0tcnHzc1y2GxAWpoc4dwdqKUF+L//k+ApOzu4+1BVoKJCnssJE0I7PiKiSGPgRBGhqjIV1d4uQVJHx9B1Sf4iaf+hN0gyg6SkPJSVPYFt2wZPEeoN3k4Njnw++dm53XL09UkWqqlJskFpaZKJCsfPqrcX2LgRmDGjHlZrFfLySpGRoe978fmAPXuA+fPHlr0iIjIa+zhpwD5OwenpkQCpvX3oQMliGRwkJSaaZ4l+KHg89WGZIvT5JHg6eVJ+tn52O5CeDkycGPqf46n9sCwWC+655wlcccWZ/bBGY7dLzyhuE0lEkRCOPk4MnDRg4KSNzycBUlubXNBPXzGmKEBycmDFWEJC9DSJNKveXikkP3EiEJharRI8ZWaGpr2Bx1OP55+fPGjq0WKx4tlna3VnngB53hcujPyKQSIaf9gAk0zFP/3mD5Q6OgYXcyuKZJFSUiRgSkxkoBRqdrv0XMrKknqkY8fkOTl2TGqhMjLkGEsANVSxu8/nRV1ddVCBU1cXsHu3TNvx9UBE0YaBE+ni9Z5ZsHwqu10CJadTgqVYmnozM4tFskxpafK8NDYGVuP5A6jMzOACleGK3Q8eLMHcucFljtragL17gVmzoq+GjYjGNwZONKrubrnQtbVJYffpWaXk5ECvIYeDF0IjKYqsynM6BwdQjY0ynZebq7+IfLhid48nD6+9BlxySXAr+5qbgepqoLRU/22JiIzCGicNxluNk6pKgNTWJkXIp9cqORyBQCk5mdMtZqaqQGsrcPRoIDuYmAjk5cm/egxX7J6aCqxcGXzBd3Exu4sTUXiwxonCxj8F588snboC7tSsktMZ3r5BFFqKIr2TXC6pezp2TJps7t8v03fZ2dqnU4frh9XaCmzYAFx6aXDB08GDcrv0dP23JSKKNAZO41hfX6Av0OmF3VZrIFByOlmrFO0sFgmSJk6UzXxbW4Hjx+W5z8uT53gs3G4Jnlau1J/J8jfIXLBAAnQiIjNj4DTO9PQEgiWPZ/DX/FNwLhdXwMUqmw0oLJSs4uHD0s7g4EEpKp80aWwBstsN/P3vknlKStJ3W69XVtotXMiMJhGZGwOnGOff2sQfLHV1Df56YqLUqPin4FjYPT44ncD06VI0fvy4NNPs6AAKCsaW9Wlvl8zTZZfpzzz19AS6izPDSURmxcApBqmqBEhut0zJnFrc7a9X8u+JxiaE45fVKlkmlwuoq5PsU3W19ITKygo+49jeDrz2WnA1T+3twL590qaAiMiMGDjFCP9KOH+wdGp/JUWRFXD+YCkU3aRjmc0W2AbGbg8c/n3zLJZAZq6/P3D09UmQ2tUlWb7OTpmCMrvkZGDaNKC+XppoNjVJ9mnyZPm+g+F2y/52K1fqn3o7fhw4dEgen4jIbHgJjWL+LU7803CnroSzWAL1SizuHlp8vNT2TJgQOJKTQ1tj09Ulz5F/K5rW1sDzZaagymqVQMXplADK45GVd5MnB78p78mTwOuvS/CkNwCrqZHAlSvtiMhsGDhFGZ9PpjNaW+VCfOrF178SLjVVLnYs7h4sISGwPUl2tgSVkXjMhARZ+n8q/0a9zc2B4+TJwSsbjTBhgtQm1dZK0HfggPyssrKCq387cQLYtEmaZOrNdFZUSLG43kJzIqJwYuAUBbzeQDPKtja56PrFxQWm4NiM8kypqVLwXFAgS/HNUvxusQSyXP7O2b29Mk3V2Bgo2jaCwyFjqq+XYM7ffbygILjMZVMT8PbbwIUX6nt9+lfaLVrEWjwiMg8GTibV3x+Y0mlvH5yJsNkkIHC55N24WYIBs0hIAEpK5IhEVilU7HYp1p40ST7u7paeS/7j9A7u4WSxSKCUlCQBlNstheNFRcHVPR0+DGzdCpx7rr7Xa3e37Gk3dy5f50RkDgycTKSvL1ADc/qecA5HIFhKSOBFZCgFBVLknJMTG5m3+HjZjqS4WLKMjY0yhXboUOSCqIkT5bXnn7rbv1+Cp2Cmzw4ckPtavFjf7VpapNdUcbH+xyQiCjUGTgYbqSFlQoIESqmp7LE0HJtNppVmzAi+iDkaWCyyQW9uLrB0KdDQIBmgurrwF5knJwNTp0rw0t0tjzt5srwu9dq7V17Xc+bou93hw/L8Zmbqf0wiolBi4BRhqirBkj+zdHpDyqSkQM0SOygPz24HZs+WJo7BLpmPVhZLYEqvt1dWoO3fL4XY4WK3S4B66JDU2dXWylYtwax627FDCtD1ZpAqKwNtIoiIjMLAKQJUVXr6+DNLbEgZPLtdmiPOmDH+Aqah2O0yPTltmmzgW1Ehwc2pCwhCxWqVabr6egnS6utlejk7W382dOtWCZ5ycrTfxuuVzuKLFrEXGREZh39+wsTnCzSkdLvZkHKsrFZg5kyZ4mHANLTMTDk6OyWA2rdv8OsuFBRFMk02m9RcNTXJY+Tn6wuefD7grbeku3hamvbbdXXJ96Z3qo+IKFR4yQ4hf4+loRocsiFl8IqKJMswlj3UxpPERPl5zZkjQcbevaEtJlcUyTLZbFJ7dPKkvPYLCvQV5ff2Am+8AVxxhb7ptxMnpLaroED/2ImIxoqB0xh5vYH+SkP1WPIHS2xIqd/EiVIIfXrzSNLGbgfmzZNM3b590hOptzd09z9xorzGa2ulZs/nAwoL9b3OOzulQeZll+mbpq6pkd+pCRN0DpqIaIwYOAWhry+QVeroYI+lULPbpWP0tGn8+YWCzSbZp6lTgU8+kSAqVCvxXC7JCNbUyBuHmhr5WE/wdPIksGULcNFF2p9vVZVs2qJFXERBRJGlqKrRmzyYX1tbG1wuF1ascKOz03lG24D4+EC9EnssjU1RkfT5SUgweiSxq6NDVrbV1IT2Pg8elKxTUhIwZYr+6ehZs4Czz9Z3G5cLmD+fv3NENDT/9dvtdsPpdIbkPhk4aeD/wc+e7YbVKj/4xMRAsBQfb/AAY0BiIlBWJkXGFBmNjcD778s0Wyh4PBI8eb1SjzZliv7p6bIyyTTqkZ/P5phENLRwBE6cqtMhKUnqOlwuruwKpdJSyTTwZxpZ2dnA5z4nU167dsk2P2PhzzQdPCgZqGCm7d5/X+oC9bQpOHxYpscnTtQ9ZCIi3ViurMOUKVKozAt8aCQkAJdcApxzDn+mRrFYZIrs6qv1BSvD8QdPFousMK2p0ddTSlWBzZvltnrs2xfZvfyIaPxi4ESGKCyUi7V/Q1szUxQJ7JKSAv23UlPlcDrl8wkJ0d28NDkZWLlSpsrG+n2cHjzV1uoLnnp6gDff1NeDqq9P2i6w8ICIwo1TdRRRNhuwZAlQUmL0SM5ks0kA4T8SE2XFls2mvfjY55Ml/729sq9bV5csue/qkhqgcO8rN1bTpkkw++67UgMVrORkmaY7eFBW2x0+LH2XtP4cW1qAd94BLrxQ+23cbm4GTEThx8CJIiYjAzj/fPNsxutvSpqWJkcoGmxaLLJYID5e7vt0XV1S/9PREej9ZbZgyp99+vhjOYLN4qSkBFoVtLTIKrtJk7QHQnV18vjz52t/zMOHpbeTnm7kRER6MHCiiJg9G1iwwBwd01NSpJ4nMzPy290kJMjhb+qpqoEgqqVFVriNtUg7FBRFApacHOmxdHoLDq2cTsk0HToENDfL86+nlqq8XIIgPV3C9+0DzjqLdXNEFB4MnCis4uOB884zvpbJYpELdm6uvu09ws2/b2FKivyM/IFUS4tsLdLWZmzdTlaWrLzbsgU4ciS4+5gwQbJq9fWyt11cnL5u8O+8A3z2s1JbpkVvr6wUnDcvuPESEY2EgROFTVYWsHy51AoZxWqVYCk/PzoyEKcGUgUFUvR84oQcJ08aM63ncAArVgA7d8q2LcFIT5dMWmOjBGBxcdq3S+nrk2Lxz35We+F6Swv3syOi8GDgRGExa5Zsh2HU/nyKIhmcyZOje7WbzSb9lrKzJWg6cQI4flz+1bNSbawURZ7PiROlcDyY6cSsLLldc7MENf5ifC3cbnncCy/U/ng1NYGVj0REoRKV7QgeffRRFBYWIj4+HkuWLMGHH3447Lnr1q2DoiiDjni2+g4bu10ubmefbVzQ5HJJjUtJSXQHTaezWqUua9Ys6X01fboEBpFUWAhccUVw053+YNblkunHmhopltfq0CF9GS9VlRYFZqgZI6LYEXWB03PPPYd77rkHDzzwAHbu3Il58+Zh5cqVOHbs2LC3cTqdaGhoGDgOHToUwRGPH6mpclGdPNmYx7fZgBkzpAjdTHVM4WC1ShZq/nxg6VIJaCK12e2ECfI8B9OpW1Hk9ZGUJBm0gwelJkmrnTv1tUno7gaqqvSPk4hoOFEXOP3nf/4nvvrVr+LWW2/FzJkz8dhjjyExMRG/+93vhr2NoijIzs4eOLKysiI44vHBn4nQWsAbamlpkuUaj09tfLz8/JculWyU1tqhsUhMBC69FMjL039bi0XaFDgcUr9UU6O9dktVgbff1pepamqSg4goFKIqcOrt7cWOHTuwYsWKgc9ZLBasWLEC27ZtG/Z2HR0dmDx5MvLz83HVVVfh008/HfFxenp60NbWNuigoSmKTItdcIEx02IWi0zJzZ0bHcXf4aQoslpt3jwJIrOzwztdarMBF12kf1NeQIrDp0yRf7u6ZBpO6+rBri4JnvTUeFVVSfaJiGisoipwam5uhtfrPSNjlJWVhcZh8vfTpk3D7373O7z88sv405/+BJ/Ph2XLlqG+vn7Yx1m7di1cLtfAkZ+fH9LvI1bY7bLX3OzZxjx+YqIULAeT9Yh1SUlSA7VkiawsC1e/KotFtmmZO1f/bR0OyTwpirRdOHpU+20bG2VjYq36+6VFAbdkIaKxiqrAKRhlZWW4+eabMX/+fCxfvhwvvPACMjIy8Pjjjw97mzVr1sDtdg8chw8fjuCIo0NqKnDllbLU3wgTJwILF8Z+LdNYORyS2Vm6VGqLwtWAdOFCyXLplZQUaBngXy2o1e7d0ilcK7dbMltERGMRVYFTeno6rFYrmk4rWGhqakJ2dram+7DZbFiwYAGqq6uHPcfhcMDpdA46KKCgQOqZjNo6paBAslyR7vodzeLiJLuzdKn8/MIRQPlX+2ndUsVvwgSZVgSkSWZ7u/bbvvOONAzV6tAhyW4REQUrqgInu92ORYsWYdOmTQOf8/l82LRpE8rKyjTdh9frxe7du5GjZ98HGjBvnrQbMKqeacYMyaDovTiTsNnk57d4cSBYCaXSUtmPUO/zk5UlAZSqArW1QE+Pttv19uqrd1JVmbIz2/6ARBQ9oipwAoB77rkHTz75JH7/+9+joqICX/va1+DxeHDrrbcCAG6++WasWbNm4Pwf/ehHeP3113Hw4EHs3LkTX/rSl3Do0CF85StfMepbiEpWq3QBX7DAmKDFapU6mvG4ai4cHA6pgVq0KPS9oIqK9AdPiiLd3RMTJajRs9Lu+HF99U5dXcAICWciohFF3WTH9ddfj+PHj+P73/8+GhsbMX/+fGzYsGGgYLyurg6WU5YStbS04Ktf/SoaGxsxYcIELFq0CO+99x5mzpxp1LcQdRITZfVUeroxj2+3A3PmGDc1GMtSUqQX1LFjEkzo6ak0kqIi+XfLFu0F2RaLtFXYv19WwNXVycdaArDduyWDpnVPxIYGqZMz6jVNRNFLUVWuMxlNW1sbXC4XbrjBDbt9fNU7padL0GTUfnPx8TI9mJBgzOOPJ/390pBSz+q20dTU6AueAMDjkSBOVQPbzWgRHy8bEmt9rdpsUtA+3ttYEMUy//Xb7XaHrF456qbqKHKKioDLLjMuaEpMlKlBBk2RERcHTJ0qK+RC9ZwXFQHnnSf/93jq0dDwFjye4VuBALLSzt9iorFRVsNp0d2tL0jr6wP27dN2LhGRHwMnGtL8+VLTFK7l66NJTJQxRGobEQpwOqWpqdZpr9FMmQL4fE/h+ecn4/XXL8Lzz09GVdVTI97m1Gm0ujrtxeKNjfr2szt5MrQZNiKKfQycaBB/Efj8+caNITFRpuc4hWIci0VWyM2bN/bg9fjxejz99G1QVVn6pqo+bNt2+6iZp9zcwJ52tbXaV87t2iUF41odOKBvCxciGt8YONGA+HjZf8xf2GuEhITQXKwpNCZMkDqgYDb09auvr4LvtKhHVb1obx95aZvFIk07/duyjNDs/7T7lhYFWgvdvV52FSci7Rg4EQBZkv7Zz8peZ0aJj+f0nBnFxcmqxmD7Z+XllQ5a6QoAimJFSkrJqLe12yV4AmRaTWtn8Y4O4P33tY+xrU2mBImIRqMrcOLWI7Fp0iTg8suB5GTjxmC3M9NkdgUFwQW2GRl5uOeeJ2CxSMGcxWLF5Zc/jqQkbZsMpqQM7iyudVrt4EGZhtOqtlZf13IiGp90tSNISkrCN7/5Tdx///1INGqplQFiuR3BtGmyEazFwNxjXJxckI0M3Ei73l5gzx79W5ccP16PI0eqMWlSCSZMyMNrr2mvRVJVaW3Q1iaB29Sp2hYu2GzAVVdpf20lJUlTUCN/H4godAxvR7Bx40a89tprKC0txbp160IyADLO4sWys72RFwmLRfadY9AUPex2CXT1dnHPyMjD/PkXICMjD3FxwMUXywo+LRRFMl52u6ywq6sbvSbJ46lHXd1beOWVes31Sx6PBGhERMPRdclctmwZPvjgA6xduxbf+973sGjRIrzzzjvhGhuFSVycNLU0unm6osgYQr3lB4Wff9/AsSwkiI8HLrlEe5+uuLhAJ3G3e+RsVVVVoP3B449PxhNPjNz+4FT19UBrq+bTiWicCSrXcPPNN6OyshJXXHEFLrvsMnz+859HDd+mRYWEBGlqWVBg9EiAkhJueRHtJk+W4DfYrGVKigTxWvuFJSYG+ks1NEgR+Ok8nnps2za4/cFzz92Oykpty/JUVRpjciNgIhrKmCZpPvOZz+ArX/kKXnzxRcycORPf+ta30DHUXzIyhbQ0WTk3lqXloZKXF7oGi2SszEzZgDnYZqkZGcC552o/f+JEaZOgqlLQ3dc3+OttbVUDQZOfqnrx+uvV6O/X9hjd3dwImIiGpitweuyxx7Bq1SrMnTsXLpcLF198Md555x3ccccd+NWvfoXt27dj5syZ2L59e7jGS0HKy5NMU1KS0SORLFNxsdGjoFBKTZW6p2CblhYVaW+6qijyeo6Pl/31Tq93cjpLoShntj+wWErw0Ufax9TQoL39ARGNH7pW1eXn52PJkiVYunQpli5dikWLFiHhtAKFn/3sZ3jmmWewZ8+ekA/WKNG+qm76dCkEN8NKIadTLpBmGAuFXlcX8MknwXfi3rJF2gho0d0NVFZK0JSbK5kvv6qqp7Bt2+1QVS8UxYqyssdRWroKgNRVac122u3SANRm0/mNEJEphGNVna7ASYumpibk5ubCG0MFAtEcOC1ebHwRuJ/DIUu9uZVKbOvpAT7+GOjs1H9brxfYsEF7m4LmZinmVhTZIubULikeTz3a26uRklIyqGdUQgJw9dXa+1FlZACzZmn/HojIPAxvR6BFZmYm3nzzzVDfLenkX+5tlqDJapXu0wyaYp/DIVnFYFq9Wa3AhRdqX2k3cSLgcknW6dChwQXdSUl5yM6+4IxGm11dwLZt2sd0/DjQ1KT9fCKKbSEPnBRFwfLly0N9t6RDYqJ0As/PN3okAdOns1fTeOLv9RRMTV1iovaVdooir3ObTTJdR45oe4zaWu1TggBQVSX3T0TESpMYk5YGXHGF/GsWhYXG7oFHxhhL8JSRASxdqu3cuLhAe42TJ4GWFm23e/99aXipRX+/1FMRETFwiiH5+eZZOeeXkSGBE41PNpvsQRjMtF1pqWQqtUhJCXQyr6+XbWFG09sLbN2qfTwnTwJHj2o/n4iMp+VvgV4MnGLEzJkyvWGm1T9JSdovfBS7/Bs4x8frv+3ixdq3dsnKkgDN65V6Jy3LXo4elWaXWh04EPyKQSKKrJ4eWeUbagycopyiyJTG4sXyf7OIi5M96IJtikixxeGQ4Env4gCLBVi+XFuxuMUincytVpmC01rQvX070N6u7VyvVwKt0K5FJqJQ6+oCdu0KzxsdBk5RzGYDVqwwZ1ZnxgztK6NofEhIkOBJb1Y0MVGCJy1vDByOQI+mxsaht2Q5XX8/8M472oMhtxs4fFjbuUQUeZ2dQHm59HoLBwZOUSo5WVbOmXHbksJCc2zrQuaTlCRtKfRmIrOzpQeYFmlpsiULIF3FtbSUO3YM+PRT7eOprdUWlBFRZLW0SKYpnKtgGThFoYwMWTnnvziYycSJLAankTmdUpOnd2p59myZitMiL0+mBXt7tbco2LULaG3Vdq7PJ1N2Pt/o5xJRZNTXS03T6ftXhhoDpyhTVARceqk5p8Hi42WKjmg0EycCU6fqv90550jgNRqrdXCLArd79Nt4vTJlpzUY6uiQzBMRGcv/Rqa6OjL1hwycosj8+VLrYcaCa4tFtqWIizN6JBQtcnL0ZyftduCCC7T9DiQnB/avO3xY27vQEyeA3bu1j+fwYW1BGRGFh8cj2eLGxsg9JgOnKGC1SsCkdfd4I5SUSC8dIj0KC6V+SY+0NNl4V4vsbMmE9vdLGl/Lu9GPP5YslRaqKu90Y2hrTqKooKpSw7hjh/ZVsaHCwMnkEhJkaq6oyOiRDC8rS3anJwrGtGlAaqq+20yfri1b5W9RoCiSGdLSVdznA959V3sw1NUlUwREFBn+LNPBg8bUGTJwMrG0NOCznzX3diVJScHVqhD5KYpM8+qt21u2TFuWMyEhkNU6ckRbJ+GTJ/U1zmtokGk+Igqfnh7Z+mj7dqCtzbhxMHAyqcmTpd2AmbZPOZ3VKhc8M9ZcUXSx2aRNgZ4aOX+9k0XDX7HMzEBX8bo6bVN2n3wCNDdrH09lZfhX8xCNR/39kl364AN5k2J0A1oGTiY0b55cEMxeaD11anB7kBENJTFRAnE9bQomTtTW30lRZJWdxSKr4bQERKqqb8qut5cbAROFUmcnsH8/sG2bvOExS/sPBk4m4i8CX7DAXNunDCUnR/seYkRaTZggCw30mDlTWyPY+PhALd7Ro9q6Cre2SgdirZqb5R0xEQXH5wOOH5eM74cfyu+q2RZfMHAyicREmZozcxG4X1KS7FxPFA6TJulbaacowLnnattEeOJEqYvyr8jRkvLfs0f+kGtVXc2NgIn08PmkRrCiAti6Vbr4a13ZagQGTiaQkQFceWV0bFPir2vSUldCFKypU7U1uvRLSADOO2/08xQFyM+X13Fnp7aNgPVO2Xm9cgEwug6DyMy6uyWbtGePBEu7d8vvo9myS0Ph5c9gpaXm7QQ+lNJS1jVR+Pkbqtrt2m8zaZJM243Gbg9M7TU1acsOud2y/Fmrtjbg0CHt5xPFut5e+X2rrJQi7/ffl/ql5uboCJZOZfLy49ilKMDixdG1RUlWlv5mhUTBcjgkeCov1569WbRIaoxG69c0YYIEQ263TNmVlo6eRf30U1ntqrU9yKFD0lJET+aMKFZ0d0uNoNst/8bS9DUzTgZwOIDPfCa6gqbERPZroshzuYDiYu3nW63A+eeP3iJDUWQjYKtV/qAfOzb6feudslNVYO9eWUpNFOu6u2Xbk337JJv0/vvy/4aG2AqaAAZOEZeWJvVMOTlGj0Q7i0WmQNiviYyQlxfYc06LCROAhQtHP89mk/sG9E3Z7dihfSzd3UBVlfbziaKF1ysF3VVVsvrNHyg1NmpbsRrNOFUXQUVFsru72fszna64WDZMJTLKtGnSf6mzU9v5M2fK3nSjtQZITQ1MJxw+LFN2o7UC2btXpuy0tuNoapI3TGzfQdGut1eCpeZmmQ43S1+lSGPGKQIURTYlXb48+oKm9HRtPXKIwklvl3p/i4LRistPnbLr7NQ2ZQfIKiA9U3BVVbH/LpxiU3+/rH4rL5dGlJWVEjxFS9AUjsJzBk5hFh8v9UyzZhk9Ev0cDnmnT2QGevdFTEoCyspGP89mC7w5aGzUNmXX1gbs3Kl9LP39kqliiwKKBqoqWaU9e4D33pPVb62t0ff67egANm4M/f0ycAqj9PToq2fyUxQpXrfZjB4JUUBWlr7fp6IibU1lJ0yQ1W+qKlN2Wi4Qe/dKoKVVWxtQW6v9fKJI6+2V1aDvvy9BU3Nz9GSWTldXB/ztb+HZfJuBU5hMnQpcdpm5N+kdSUGB1H8QmU1pqb7fq6VLR++TdvqUndZO4e++q29j37q60VslEEVaR4c0bd22DaipAXp6jB5R8LxeKVZ/800JBMOBgVOIWa1SAL5sWfSuQnO5gMJCo0dBNDT/Kk+t3esdDvmdHM2pjTEbGrTVJHV0ANu3axsHIJmsigp9wRZRuLjdsifc9u2yiCHapuJOd+IE8H//J9ngcIrKwOnRRx9FYWEh4uPjsWTJEnz44Ycjnv+Xv/wF06dPR3x8PObMmYNXX301LONKSQGuuCK693GLi5MpOrNvMkzjm979EvPytJ1/6pSd1r3sKiuleFar3l5Ztk1klLY2Kfbetcvce8Jp5fMBH38MvPKK1GKFW9QFTs899xzuuecePPDAA9i5cyfmzZuHlStX4tgwy2Hee+893HDDDVi1ahV27dqFq6++GldffTX27NkT0nHl50s9U1paSO824qZO1bZZKpHRcnL09Xc6++zR22oEO2W3dau+aYETJ6SWiiiSPB6pXdq5MzIBRiScPAm8+qoEgZGqx1JUNbqSc0uWLMHZZ5+NX//61wAAn8+H/Px8fP3rX8f9999/xvnXX389PB4P1q9fP/C5pUuXYv78+XjssceGfIyenh70nDLJ29bWhvz8fNxwgxt2++D9ExRFmu3Nnh39WZrsbGD6dKNHQaSd1yvTDFo7Ezc2Ahs2jH6eP7BRFFlZquXNRGmptilBP0UBFizgliwUfn19wMGD8vqPriv+8Pr7Jcu0Z8/I31Nvbxv+/GcX3G43nCH6ZYuqjFNvby927NiBFStWDHzOYrFgxYoV2LZt25C32bZt26DzAWDlypXDng8Aa9euhcvlGjjy8/OHPC8xUTbonTMn+oOmhITonmKk8clq1Te1rPXNQVqaTL3rWWVXVaUvi8QtWSjcVBU4ckQ21W1oiJ2g6cgR4KWXgN27jfmeoipwam5uhtfrRdZpLXizsrLQOMy64MbGRl3nA8CaNWvgdrsHjsND/DWcNAn43OdioxuwonBLFYpeTqe+xQyLFmmbssvPl98Jj0eWZWvx3nv6Gl12d7PeicKjrU22B6qqip3g3O2WvkwbN8rCDKNEVeAUKQ6HA06nc9Dhpyjyh3fFitipBZoyRd5dE0WrggJZDaqFzSZdxUdjtwd6RmldZdfVJT1w9GhuZr0ThY7XC1RXS82PkcFFKPX2SouBl1+WbJPRoipwSk9Ph9VqRVNT06DPNzU1ITs7e8jbZGdn6zp/JElJ0pspFqbm/CZMkHfWRNHM37BV65ZG2dly/mgmTpTslM+nfcqutlZ64ehx8KBkCIjGoqVFav7q62NjWq6/X9ol/PWvMq1tlmacURU42e12LFq0CJs2bRr4nM/nw6ZNm1A2zN4KZWVlg84HgI0bNw57/kguu0zfKh6zs9lYDE6xIz5e35YsixaNnmlVFMlmWSz6puy2bdO+ITEgF7lPP2V/JwqOzydZpo8/1r5Qwsy8Xul39vzzsgIwXI0sgxVVgRMA3HPPPXjyySfx+9//HhUVFfja174Gj8eDW2+9FQBw8803Y82aNQPn/9u//Rs2bNiAX/7yl9i3bx9+8IMfYPv27Vi9erXux3Y4QvZtmMK0abH3PdH4lpmp/c1NXJz2xpi5ufL/hgZtXZV7e6VFgR49PdzPjvTr6JBapvp6o0cydv6A6YUXpKDdrEGgxsS2eVx//fU4fvw4vv/976OxsRHz58/Hhg0bBgrA6+rqYDmlpfCyZcvwzDPP4Lvf/S7+/d//HaWlpXjppZcwe/Zso74FU8jNlb30iGLN1KlSRKolwMnOljcQlZUjnzdxovS96eiQKbvi4tGn648ckfvVs1F2S4tM9WnZX4+ovl6mec0yhRWs/n7ZSHj3bvMGS6eKuj5ORmhra4PL5cL69W4kJUV/05XEROCss7RvWUEUbU6elNoILfr6pOh0tELanh4JhHw+aZKp5Y2H1Sqrb7UWrvvNmSPBGtFQ+vtlNabWqWOz6umR76OiQt9qVD3GfR8nGju9+3wRRaO0tMC+c6Ox2WRvydE4HIFVdkePaqu78HqBd97RnxEI54WEolt7u0zNRXPQ5PEAH30kRd+7dkXfa52Xz3FmypTRe9gQxYLiYsmuapGbq60BbHq6rK7Vs8quuVl79suvv186Ikf7FAyF1tGjEmhEw3TWUFpbgXfflaLvaF4MwcBpHElLkykGovHAYpFVo1pbh5x99uiBlr8xpqLIO3+tG6R+/LH2fe/8OjpGr72i8UFVpQZo//7oDKYbG4E33pBu39XV0fk9nIqB0zjB1gM0Hjmd2vuU2e2Ali4l8fH6p+xUVabs9L7DbmqKjdVSFLzeXqC8XF5r0URVgUOHgFdekf0hY+l1zMBpnJg+XS4MRONNYaFMr2mRn69tRVtGhtyn16t9yq6tTbof63XggKy2o/HH32rA7TZ6JNp5vZIZe/FF4K239GdaQ6mnB6irC/39MnAaByZN4godGr/0TtktWTL6dkrBTtlVVcm7cD38mwFHWwEtjU1zs9QzaWmrYQZ9fVKX99e/yp6NRnbC7++XdiD79oUn6GTgFOOSkqRIlmg8S0mRDuBaxMcDixdrO0/vlB0gFxU9XcWBwEXJ69V3O4pO9fVSPB0Nz7d/KvEvf5HtXowsXPf5gGPHZFXq8ePypiMci6EYOMUwth4gCigs1P5HdMoUbbVRGRlSUO71at8frKdH6p30dtDr6JB30BS7VFWyktXV5u8g390t04h/+YsETpHeFsXjqUdDw1vweOqhqpJZqqyUNzFer7yxmTIlPM1ko65zOGlXXKy9toMo1imKTNnt2KHtorR0qRRnj3RB8O9lV1kpUxMtLbJ6dTQNDZJR0LuBwfHjsoEwO4vHHq9XpmRPnDB6JCPr6ZHsZ0WFTIkZoarqKWzbdhtU1QfAgpKSJ5CUtAqAbKWUkyO/h4oSnoCOuYgYNXGi9gaARONFcrL2KbukJNkIeDTx8bJ1CyB1FVpXzu3cGVwTw0OHZDqCYkdfn7SsMHPQ1NsrNVd//atsjWJU0OTx1J8SNAGAD9XVt6Ovrx6ZmcCMGXL901rTGAwGTjHIbmfrAaLhTJ6sPRM7dWogKBpJZmZgyk7rKjufD3j77eDeEe/bJ0XpFP26uyUgMbKYeiRerwRKf/2rBHdGN61sa6s6JWjy8yIrqxq5ubLNUbgxcIpBM2ZI3yYiOpOeVXaKIr2dRvtjfOoqu7Y26ZCsRXs78P772s49lc8nF7NoWXFFQ+vokMyj3sUCkeDzSb3V88/L9Haka5iG4vEAx4+X4vTQRVGsmDixJGLjYOAUY/LzgQkTjB4FkbmlpGhvjOlyAfPnj35eQgKQlSX/r6/X/s784EEpBtart1eCp2hYeUVncruNKarW4sgR4G9/A7ZuNUdQ198vmdyqKsDny0NBwRMA5N2MolhRVvY4kpIity0Gi8NjSEqKrCIgotEVFkqNkZYLw6xZUpQ9Wr+mzEy5IHZ1SfBUWKgts/X++7JCz+XSMvKAjg4pKJ49O7w1HRRaJ07I4gCzbT3S0iItBY4cMXokQlVlTEePBmqq0tKAWbNWobd3Jdrbq5GSUhLRoAlgxilmWK3SeoB/PIm0sViAadO0n3vOOaP/flksUnyuKBJAaZ2y6++XeqdgskcnTgSXsSJjHDtmvg2ce3qAbdsky2SWoKmrS17XdXXy+xEfD5SUyO+XzQYkJeUhO/uCiAdNAAOnmFFaKlMFRKSdy6V99enEidraBwQ7ZXfyZHBbsgBysYulvcBi1dGjsozfLD2aVFVaabzwgvxrhnF5vfJz2r9faposFiA3VxZqhKOZZTA4VRcDMjO1rfwhojNNmSJZGy1bmsyfL+0ARlsBlZkp53R2Sm1GUZG2bHBlpQRdwUy5V1cDDodM+ZH5HD4s+w6axfHjMkVsphYI7e3yc/LXffnf2Jhtn1VmnKJcfLxE4kQUHKtV+++Q1QosWzb6eadO2bW1ad/LDpAtWYLdX6uiQvv0IEVOTY15gqbeXpmWe+UV8wRN/f0yJXfggIzPZpM3G0VF5guaAAZOUU1RpK4pjnlDojFJSwtMr40mO1tboHXqXnZHjmhvHdDfD2zeHFyDQZ9P6mc8Hv23pfCorta/sXO41NQAL74omU2zaG2VvmT+Nxfp6dIuRO9CiUhi4BTFiooAp9PoURDFhpIS7f3PzjpLW01hRobUZfh88o5aaw1JS0tw/Z0ACbg++YQ9nsxg/35z1J55PMAbb8gCBCM34T1VX58EcrW18pp1OKRWNy8vMk0sx4KBU5SaMEF7HxoiGp3NJn+4tbDbZS+70fgbY1os/uZ92sdTXR18ZqCnR4Ino7s8j1eqKlmUo0eNH0dlJfDSS+YI4AAZ04kT8vNxu+V3JCtLVrhGy96qDJyikM0m3cHZeoAotDIzZfWcFpMnyzEahyOwcq+hQd87/g8/1BdsncrjYYNMI6iq9NZqbDR2HO3twGuvST2TWQLo3l5p+Hr4sLwuExNl2jsnR95cRIsoGir5TZ9uzoI5olhQWqp9qmDpUm2/i2lpMq2uqjJlp7WHj9cr9U5aVvwNpa3NnI0WY5XPJz/vYIPdUKmsBF5+2fjgzU9VpYapslICOkWRFgPR2kaHgVOUycvT/o6YiPSLj5f6QS0SEoCzzx79PP+UXVycZJyamrSPx+OR2pRge+ycPCnTImbo0RPL/IX5zc3GjcHjATZulCxTMIsLwqGvT+qY6uoCWaZp0yS7G62zJgycogi3VCGKjEmTtC+8KC0NrJ4bjsdTj+bmt5CWJoUmx47pW/nW0CCbwQbr2DEpVKbw8HqlpkxP24lQO3BAskxm6fwNyCKHyspALVNOjvy+xMcbPbKxYeAUJeLipPVANM0DE0UrRZF3xVrfES9bNvz0XlXVU3j++cl4/fWL8MYbk9Hd/ZTuKTtA6pVqarSff7qGBtkklUKrvx/4+GPj+mf19kpG8p13zLNhcH+/ZJkOHZL/JyRILVNWVvRmmU7Fy3CUmDo1OueCiaJVUpI0sdQiJQVYuPDMz3s89di27TaoqkRIqurD/v23Q1Xr0dOjPzvw7rtja1p45Ih5GjHGgr4+CZpG6yQfLo2NkmUaS0Adam63TA23tgZWzEVrLdNwGDhFgZwcmQ8mosiaPFn7H/yZM8/c7qStrWogaPJTVS9cLtmV98QJfZkKrxd4882x9eI5fNhcF9po1dsLlJdLsXOk+XzAjh3Ahg3maXbq9UoWtaZm8Ka8Rq6Yy8gAFi0K/f2y57TJJSXJi4+IIs9ikSm78vLRz1UUmbL7v/8LTME5naVQFMug4ElRrMjKKkF8vNQeHT4sBbNaV8p6PLLS7jOfCb5R4KFDMt7CwuBuP951d0umyYhmku3twJYtxq/cO1V7uwRN/rYHGRnGBUwJCbLyfMoUyQSHI7BkxsnErFZ5F2v2LqpEsSw1Vfsm2hMmAHPnBj5OSspDWdkTUBT5JVYUK8rKHkdSUh6ysyVg8nolkNGz6q2pCfjgA+3nD6W2lpmnYHR1SSBtRNB08CDwt7+ZJ2jy+QLTv3190rOspEQWV0Q6aEpLA849F/j854F58yRoChdmnEystDR6OqkSxbLiYplW09JIcM4cCYRaWuTj0tJVyM1difb2aqSklCApKQ+AXFgmT5ZVRx6PBENaAzRAVsk5ncDs2UF8Q//gD9i4Wlcbj0cyTZEuwu7vly14qqsj+7gj6eqS14+/x1h6umSZIv1GPy1NpuP8TWYjgYGTSWVl6fsjSkThY7PJO+mKitHPtVqBc86R3ef9WaSkpLyBgOlUDof0Zqurk8ApJUXfm6Xt2yV40lrEPpS6OvmXwdPI2tqk5UCk+yO1tsrUrFGr9k6nqtKr6uhR+X9cnPQoi/SmvMnJsiCjqCjyK/U4VWdC/jb0RGQeWVny7laL9HRg1ixt56alyRSfqso7eL1bpGzZMraVdoAET2xVMLyTJyXTFOmgqapKaubMEjT19cl04ZEj8np1OqUGMJJBk9UqGaZrrpFg34j2BgycTMZikT+4rGsiMp/SUu21GwsWaG+imZcnxeG9vVIsrqfeqb8f2LRp7EWwR45IRo0dxgc7dkw6gkdyz7/+fmk9sXWrefYadLsHb5kyaZJke2y2yI0hJwe4+mqZDjfyGsnAyWRY10RkXgkJ2lei+afstJ47ebJckFpb9Xeg7uwE3nhj7LU3TU0SJHBvO+EPJiP583C7gfXrzVPP5PMFWlj42wxMnSor5yKV7bHbpfB75crwFn1rxcDJRLKzR9+6gYiMlZ8v9RVaZGXJylgtkpICdY1Hjujf2LelRXo8jTVDceKEMdNSZnPggEyVRTIDd/CguabmOjsly+SfCs7IiHwz5uxsyTKZqS0PAyeTSEqSbBMRmZuiyMVD67vthQu1v0vOzJSgzOeTeie9mY7GRpniGevF3u2WvfH0Bm+xwOcD9u6VLEukeL2yMe+WLeYIWFVVpiirqoCeHpmOmzIlsm0GLBapZVq5Uup+zYSBkwlYraxrIoomTieQm6vt3Lg47VN2iiIr5OLiZLl3MBu21tRIV+mx6uyU4MmIzthG6e+XPQGPHYvcY3Z0AH//u2R2zKC3V7Jt/lVzLpcUgGut1wuF5GTg8sullsmMe9sxcDKBadPMF1ET0cimTJF2AlpkZ0s3Yy3s9kB7gRMn9Nc7AVKn9Omn+m93Ov+2Is3NY78vs+vslIDT338rEurrpaGlWX6+ra0SwHV0SMYnP19q+uIi2LgoLw/43OdkZapZMXAy2KRJ3IeOKBpZrfqm1xct0l4b5XRKfRQgF9dgulR/9FFoWgx4vRKI1daO/b7MqqVFsmuR6gauqvJ4oSjoDwX/PnO1tfJ/f0uciRMjm/GZPx+4+GLt2w8ZhYGTgZxO6UhMRNEpPV37O2ObTVYGaZWdLbVRPl/ggqbXe++FLuCprZUAygw1OKFUXx/Zxpbd3cDGjfKYZuDxSBd6f2YzK0sKsePjIzcGux1YsUICJzNOzZ2OgZNBbDZZbWPUrtFEFBqlpdqnMrKzta+y89c72WxSoKu3vxMg52/ZElyt1FCamyVT0tkZmvszktcrReDV1ZFbOXf8uKyaO3o0Mo83ElWVxQTV1YEC8JKSyG/Om5ICXHGFTNFFi6i6bJ88eRI33ngjnE4nUlNTsWrVKnR0dIx4mwsuuACKogw67rjjjgiNeHgzZkQ2oiei8HA4pBGgVgsXai+0tdkG93cKZnNXn0/aFDQ26r/tUPy1QA0Nobk/I3g88j1Esgi8okKKwMfaqDQUenslYGpslAAqNVVq8LROJYdKdjbw2c9GfruWsYqqwOnGG2/Ep59+io0bN2L9+vXYsmULbrvttlFv99WvfhUNDQ0Dx0MPPRSB0Q6vsFD71g1EZH65udqDobg4fVN2ycmBFXxHjwa3ys3rlXqapib9tx3u/iorpQA92qbuGhokaIpU1qyvD3j7beCDD8zRWPTkycDG0larZDUnT478qu6pU4FLLtG+wMJMomaT34qKCmzYsAEfffQRzjrrLADAI488gssvvxy/+MUvkDvC2uDExERkm2TH3IkTtXceJqLooCiyOnb7dm3TPpmZwOzZUjOkRXq6FC6fPCn9naZO1V9A298vtTWXXBIoPB+r48dl89sZMyRrYWa9vYObOUZCayvw1lvSF8toXq/Uc/lXDSYlSdBkROCyaJG0GohWUZNx2rZtG1JTUweCJgBYsWIFLBYLPvjggxFv+/TTTyM9PR2zZ8/GmjVr0DnKW42enh60tbUNOkIhPl7+wBBR7PFfiLRasEA299VCUaQGJDFRAqCamuCyF/39knkK5RRVT4+0LNi3T7IrZtTUBHz4YWSDpgMHZOsUMwRNHR3y/LS0yGspO1vqmSIdNFmtwPLl0R00AVEUODU2NiLztHX7cXFxSEtLQ+MIk/df/OIX8ac//QlvvfUW1qxZgz/+8Y/40pe+NOJjrV27Fi6Xa+DIz88f8/gtFnmHGcl+GEQUWZMna9+OwmoFzjtPeyGuxRLoqdPVFVyxOCDBzcaNoat58mtslODETLVPnZ3S0LKiInJTiv4u4O+8Y/w0ps8nz0d1tTzvdrsETNnZkV+9ZrdLtlNPPaBZGR443X///WcUb59+7Nu3L+j7v+2227By5UrMmTMHN954I/7whz/gxRdfxIEDB4a9zZo1a+B2uweOwyHovT91auQL74gosiwWmbLTKi1NMk9a2e0SPCmKZA+CrVnyB0+hWm136v1WVsrKu0g2khxqHNXV0ssqklmm9nbglVfM0QW8u1v6ePlfI2lp8to0YhP55GRZOWeSipkxMzz/8c1vfhO33HLLiOdMmTIF2dnZOHZafrm/vx8nT57UVb+0ZMkSAEB1dTWKh2mi5HA44AhhDnPSpNh5wRDRyFJTZUm31szL7NlSe6I1CEpOlr8p9fWS5YmPD66+yOsFNm0Czj8/9HWXbW2yUXBqqmQYIrVqqr9ffu6HDkU+21NbK32zjG5oqaoSLB49Khknq1U6gBtVg5aWJj2aIrk7hqJI5jchITyvPcMDp4yMDGRkZIx6XllZGVpbW7Fjxw4sWrQIAPDmm2/C5/MNBENalJeXAwBycnKCGq9eLpe5dnUmovArLpaLl5aLqKLIKru//U17jVB6utQWHT8uHZ/t9uAuTD6frPjq6wvPJuOtrcCuXYFgMiMjPD2CurslkGxoCK5R6Fh4vTJFaYYsU1+fTOH6y3JTUiRoMqoTd3Y2cNFFkXn8uDhZfJWRIcGa/3UWohLlQRRVjVTrr7G77LLL0NTUhMceewx9fX249dZbcdZZZ+GZZ54BABw5cgQXX3wx/vCHP2Dx4sU4cOAAnnnmGVx++eWYOHEiPvnkE3zjG99AXl4e3n77bc2P29bWBpfLhfXr3UhK0r7TocMhqwfM3j6eiELv2DFpsKhVVRWwdav281VVisTb2qTfU2np2P7WLFwIzJ0b/O21iIuTFX1ZWXJRH0udTW+vBKfNzbLa0IgrmdstgWcw+wmGYyyHD0umTVGkhUV6unGduAsLpYYv3G0OUlKktnC47WH812+32w1niHYqNjzjpMfTTz+N1atX4+KLL4bFYsG1116L//qv/xr4el9fHyorKwdWzdntdrzxxht4+OGH4fF4kJ+fj2uvvRbf/e53wz5WiwWYNYtBE9F4lZkp029aa2xKS6XmSOsWKYoiF4yqKsm41NRIdjvYC9XOnbL6aunS8HWO7u+X7/HIEQmiUlPlSEmRKUe7feiLn6pKQbzHI0dLiwSMRr7tr6qS3kxGF4B7vTIt53+dxcfrW6QQDjNmAIsXhzdoS0mR4GzixPA9xnCiKuNklGAyTtOmSWqaiMavnh4pUNZ6ce3tBV5+WV936d5e2Wusv18uJkVFYwt8Jk0CLrhAsliRZrFIpt5qlWlEVZV/+/rM0TwSkJ/3tm0SqBqts1PquXp65OOMjMhvmXK6BQuAefPCd//+7Oppi+yHFY6Mk+Gr6mLRpEkMmohIgoApU7Sfb7fL9IYedrs8hsUiq7qCbVPgd+SIbA0yym5WYeHzSWapo0OCgq4uCQrMEjQ1NkotmtFBk6pKNrOqKrDPXHGxXHuMCpoUBVi2LLxBU0aGZLK0Bk3hwsApxFJTWQxORAG5ufpWNGVn6681Skwc3KZgrL2UTp6U5o2h7vUUrbxe6Qq/YYMxAeWp/G0GGhoC+8xNmybZRqNYrcCFF0rbnXCw2aT0ZdYsYzKhp2PgFELx8fLEGlWMR0TmNHWqvkzA/Pny7loPp1NWUAFSmD7W7uDd3cBrr+krcI9F/iBS6/Y44aKqsopy/37Jxp26z5yRjZX9jS31dM3XIzlZFlnp/X0IJwZOIWK1Sj8WM0TDRGQu/oyQVhaL9FfSu7gkLS1QJnBqwXCwVFWW2r/zjnm3UwkXr1e2klm/3thmnoDUVR04INOoPp9kl6ZNk+fbyDfqCQnApZeGr09hRobUTMXHh+f+gxVVq+rMbPp0dgYnouHl50vGoL1d2/kpKcA558gmsXpkZkqh+PHjUu9ksWjfE284Bw7I/S1fbswqpkhrbpbWEEYHTKoqGS9/wGSxyNTvcEvvI8npBD7zmfBd94qKJJtmRsw4hUBRkbnSiERkPooiWQI9F7zJk/VvDO7v4eMPcOrqQrPRbFubbCfy6afGtgEIp74+WQX5yivGB019fVKEfviwBE1JSfL6MbI3k196OnDZZeEJmhQFmDnTvEETwIzTmGVmmvsJJiLzSE6WWpBDh7Tf5qyzpF5Jz7SbogB5eXLBbWmR3lBFRZIlGAufTwKLI0dkBVUsZdlraqQAXE8riHBQVXnOjhyR6UJFCXRdNzpgAsLbrsLf/9DsWU1mnMbA6ZQpOiIirSZP1rfRqtUqFyq99U6KIkGayzW4y3goHD0KvPSSFI5He/bJ7ZYi+LffNj5o6ukBDh6ULKHXK7VxU6fKG3QzBE1TpsgWKuEImuLiZDWp2YMmgIFT0BwOKQY3stEYEUUfi0XecOm5EKakyH52evm7i58aPIVi2g6QOqoPP5RpLTNsOaJXV5c0snzppbG3bxgr/4q5ykqpgfNPt5aWGtsB/FSzZoVvCxWbTfo/GbURsV687AfBagXmzOF2KkQUHP/mq3oUFMjfHb0sFgmeUlPlAl1bK5vvhkpzszSFfPdd4zM2WvT2yvYyzz8vgYrRGbOuLunL5C8AT06WWiazZJkAaTp59tnhGU9cnARNRvah0os1TjopihRrxtLcPhFFXmGh1C3pCTYWLpTbHD2q77H8wZO/QeahQ3KRTkvTdz8jqa6WjNbMmeZ8Y9ndDVRUyNHba/Ro5Od/7Jh0AFdVeUOek2OOFXN+VqtkmfS00tDDHzRF2/WUgZNOxcWyooCIaCz8U3Y7d2rPeiiK9Hdav15/B2t/zZOiyNRaXZ2s3AplZsPrBXbvlkzO1KkSRCUmhua+g9XRIc0rq6pkfGbQ3i4Zpu5u+djplGJ+MwWbdjtw8cVAVlZ47t9qlZqmaMo0+TFw0iEnR17cREShkJKif5VdfLwUi//97/oDAUWRKUKrVWpqGhokeJo0KbRZjt5eCVb27pXVfDNmRPYNp9crgWFVlf7sXDj19cl4/K0O4uLkZ5+aap4sEyAZoEsukdq4cPAHTSHaczfiGDjpUFxs9AiIKNb4p+z0ZJDS06UdwDvv6H88RZGLtc0mF/HmZin0LigI/WIXn0+aZx44IBfJKVMkkArHBdnrlUDw8GGZMjTDdJyfzyc/58bGwIbF6enScdvI7VKGkpEhK+fCVZTubzkQrqAsEkz2lJmbmd4REFFsUBSZstuxQ1+hcnGxFHnv3h3c42ZmSvBUVyf309srQU24to1qa5MtTMrL5aKZnS3TQFlZ+toz+PX1yZSjv+arocE8U3Gn6ugA6usD03KJiTJzYfQU5lAKCmQqOFzBnP+1HsraOiMwcCIiMlhysmSeamr03W7hQmkvUFcX3ONOmCAXydpa2Th2/34ZRzCBjB5utxyVlfJxfLxMWyYnS2bK4ZDMhKLItE5fnwQe3d2yCq21NXQ9qcJlqGm5nBzj95cbzuzZspluOMdWWioBe7Rj4EREZAIFBZI90RMQKIqsevr734PvpZSSIhe02loJTKqrpQ4qklkBf1B0/HjkHjNcvF5ZLXf8eGBabuJECZrMNi0HSIBaViavgXAqKpLeVLGAfZyIiEzA3+pEb4NBm23sNSnx8XLhdDplurCuTqaX/Bd+Gp2/jqmiQloM+HwyHVdaKoGoGYMmh0M26g130DRpUmxtTcbAiYjIJBISgJIS/bdLTpal42O5OFutkhXwLz9vbpapO39tDg1NVWXqsLJSgs3+fglICgslIAn3tGewXC7gs5+VWrNwysgI7jVtZgyciIhMJCcnuKX76enAhReObWWcf0PZKVMkCOvuluDpxAnjO2ybUUeHtDyorZV95uLipPB72jTztRg4VUEBcMUV4e+hlJoqWVSz/hyCxcCJiMhkpk0LrhnipEnSpmCsnE4ZQ0qKTDmZcYm/kTweabFQXS1F9RaLZOr8/arMvIfp/PkSYIe72WZSUuzu52rCWVciovHNZpNl2598ov+2JSVyMd+5c+xjmDJFCp0bG6Vofd8+KfA107YgkdTRIfVL7e3ysaJIEX12dvjaOISKzSYLCQoKwv9YDoc0uDRjXVcoxOi3RUQU3dLSpKj48GH9t507V6bZ9u4d2xgURTIpLpeMw+OROp6WFslumbEXUaipqgSNx44F9hVUFGnlkJUlQYLZpaZKlikSTSfj4uT1Fw0/l2AxcCIiMqkpU6Tw2J/h0GPxYlka7++VNBbx8ZLJam6WRpMej9Q+TZggNVFjnfbxeOrR1lYFp7MUSUnm2NfK65UA8fhxqV8CAhmmrCxz7Ss3kilTZPo2Etkfi0Wm58xaEB8qDJyIiExKUWSj3O3bg+uKvXSp3K66OjRjyciQrEVDgwQVLS3SyDIjQ45gLs5VVU9h27bboKo+KIoFZWVPoLR01dgHHKTubgkQW1oCP3OrVWqX0tPNPyXnZ7UCZ58tU76RMn26ZLdinaKqXCsxmra2NrhcLrjdbjijdVdCIopaTU3SHygYqgps2aK/K/loPB7pjO2fvrJYpPYpI0N7Nsbjqcfzz0+GqgYaRimKFddeWzti5inUGSqvVwLAkycH7xnocEiwlJamv7+WkZxO2Qg6kk1Mi4tlatlswnH9ZsaJiMjksrIkA9LYqP+2/u7iQGiDp6Qkmb5zuyWw6+qSaa3mZpnCmzhRaqBGKiJva6saFDQBgKp60d5ePWxAFKoMlc8nQZI/a3Zqs0+XS8afkhJ9RfDFxZJpjGRmLC/PnEFTuDBwIiKKAlOnyoX+1IyIVhaLbN5qs0ltUqgoikzNuFxSh9XUJBmokyfliI+XrMeECUNfyJ3OUiiK5YyMU0rK0B0TPZ76gaAJAFTVh23bbkdu7kpNmSevVwq9/cep058Oh4wzLS166pdOZbMBS5ZEvtlkZmbsNbgcDQMnIqIoYLEAs2YBO3ZId2q9FEWKhG024NNPQzs2RZHpIadTAqcTJ6SovbtbpvOOHpXsk8sl58THy22SkvJQVvYEtm27HarqhaJYUVb2+LBBkN4Mlc8nrRk6OiSw6+wc3MgzLk4CvwkTRs+OmVlWlmQVk5Mj+7ipqZGtoTILBk5ERFEiIUEuVHv2BH8fZ58twVN5eciGNUhSkhyTJsk02MmTErD4j4YGCViSkiRYyclZhauvXgmPpxpOZ8mImaORMlRer6x+6+4OPFZX15kdzx0OCd5SU6M7WAKk7mrBAgmoI/19JCfHboPL0TBwIiKKIunp0sSwri74+5g/X4KG998P30a+p65E6+uTOqK2Nsn89PfLx263/+w8WK15aG+XabK4OLm9//BT1TzMnv0Edu++HYAXgBVTpjyOmpq8YbNwcXFykU9JkX/t9ugOlvwmTgTOPVeyZZEWHw/MmRO7DS5Hw1V1GnBVHRGZiapKV/GWlrHdz9GjwObNkd1KxT991tkp03qdnRJY6dHbW4/e3mrY7SWw2wMZqrg4ySglJgaOWAmU/PxZppkzjcn22GzAwoWS/YwGXFVHREQD/Z127pTpqGDl5spmrxs3Bld0HgyLRTI/p9bj+HwyzdbTI0Gc1zv4AALBj6IAcXGSoYqLCwRLDkd0tQwIRna21KkZ9f7dapWu4NESNIULAycioihks8l0yc6dwRWL+7lcwGc/C7z9ttQfGcFikYvxeL8gDychATjrLGk1YBR/V/CUFOPGYBbjsKyLiCg2JCZK5mmsU1Hx8cBnPiO1T2QeigLMmAFcc42xQZN/HEbUU5kRM05ERFEsLU32IztwYGz3oygSOGVkAO+8I6vTyDi5uZJlimT37+FMnSqvCxIMnIiIolx+fmCp/1hNmgR87nPA1q3AkSNjvz/SZ8IECZgmTTJ6JKKkRDZypgAGTkREMWDqVCmsPnFi7PeVmAhccglQVQV89FFkV92NV8nJwLx5EqiYZRVgYaFsp0KDMXAiIooB/pV2H38s/ZJCobRUpozee4/Zp3BJSpKVaiUl5loVmJ8vgROdiYETEVGMsFplpd2uXTJ1FwpJSZJ9qquT7FN7+9juz+OpR1tbFZzOUk37y8WqlBTp+F1aaq6ACZBpQiOL0c2OgRMRUQyx2SSDsWuX9EUKlYICuaDu3SvNN/U2rQSAqqqnBjbpVRQLysqeQGnpqtANMgqkp8uy/smTzTMld6pJkySYo+Gxc7gG7BxORNGms1P2owtHfVJXlwRQ+/ZpD6A8nno8//zkM/aZu/ba2pjPPFmtEnhOny4b8ppVbq7UysWScFy/o6qP009/+lMsW7YMiYmJSE1N1XQbVVXx/e9/Hzk5OUhISMCKFStQVVUV3oESERksMVGKjW220N93QgKwaBHw+c/LY9jto9+mra1qUNAEAKrqRXt7degHaBIpKYGf0/Ll5g6acnJiL2gKl6gKnHp7e/GFL3wBX/va1zTf5qGHHsJ//dd/4bHHHsMHH3yApKQkrFy5Et1sUkJEMS4pKXzBEyDbnCxYAHzhC0BZ2cg9h5zOUijK4EuOoliRklISnsEZJD5eMktXXAFce63UnJm9I3peHjBtmtGjiB5ROVW3bt063H333WhtbR3xPFVVkZubi29+85u49957AQButxtZWVlYt24d/vmf/1nT43GqjoiiWUeHrLYLpi5Jr+ZmaWNw6NCZTTSlxul2qKoXimJFWdnjMVHjlJAgU3EFBZK5MWLz3WAVFEgD1VjFTX51qqmpQWNjI1asWDHwOZfLhSVLlmDbtm3DBk49PT3oOaWqsi1Ua3uJiAyQnCyZoY8/Dm3B+FDS0+VYsgRoagJqa2VFXlcXUFq6Crm5K9HeXo2UlJKorW2yWOR7zM2VYur0dHMWeo+mqEiK1EmfmA6cGhsbAQBZp00sZ2VlDXxtKGvXrsUPf/jDsI6NiCiSEhOBhQsleApVq4KRWCySfcnJkWm81lbg6FGgsTEPjY15UdVUMy5OgqOMDCAzE8jODt/0Z6SUlLC5ZbAMD5zuv/9+/PznPx/xnIqKCkyfPj1CIwLWrFmDe+65Z+DjtrY25OfnR+zxiYjCwV+TtHt36JpkapWaKsfMmfJxW5t0OW9uBlpa5OOOjsiOaSgJCbLtif9IS5NxR9P020gsFqnBysw0eiTRy/DA6Zvf/CZuueWWEc+ZEuQEbHZ2NgCgqakJOadsttPU1IT5I2wD7nA44HA4gnpMIiIzs9mkYHzfPuD4cePG4XTKUVQU+Fx/vwRQ7e2AxyPTex6P1Ep1d0trhZ6e4Gq1bDZZ/We3SwF3QoJk4RITZSozOVlWwUV7JmkkcXHSQ0rjonQahuGBU0ZGBjLCtO1yUVERsrOzsWnTpoFAqa2tDR988IGulXlERLHEapWu1bW1cphFXJxkeEZanefX3x84VFUOQP61WAKH1SrBUDTWIIWSwyEr/JKTjR5J9DM8cNKjrq4OJ0+eRF1dHbxeL8rLywEAJSUlSP7Hq2H69OlYu3YtrrnmGiiKgrvvvhs/+clPUFpaiqKiInzve99Dbm4urr76auO+ESIiEygslAtpRQXg9Ro9Gn3i4uSg0aWkSKaJEymhEVUvu+9///v4/e9/P/DxggULAABvvfUWLrjgAgBAZWUl3G73wDnf+ta34PF4cNttt6G1tRXnnnsuNmzYgPj4+IiOnYjIjNLTpWh8716ZFqPYkpkpNU2xUqNlBlHZxynS2MeJiGKdzwccPAjU1xs9EgqVwkI5xjP2cSIiorCwWGSJ+sSJUjge7n5PFD42m2SZJk40eiSxick7IiIaMGECcPbZ0txxvBdURyOnU/bHY9AUPsw4ERHRIHFxsuFrTo5sn8LNE6LDpElAcTHrmcKNgRMREQ0pJUUKxxsbpW0B90Y3J7tdNulllikyGDgREdGIsrNldVZjo2zey/on88jMBEpLY7txp9kwcCIiolFZLFL3lJ0tAdSRI2xfYCS7XYr5uXVK5DFwIiIizfwBVG5uYOPe48cDnbspvBRFfvZFRWwAahT+2ImIKCj+jXv7+iR4On5cgikGUeGRkiJF+ykpRo9kfGPgREREY2KzBbJQfX1AczPQ0iJHMBvy0mAJCZJh4rScOTBwIiKikLHZpI1BTo5knjo6JAvV1iYHC8u1s9ul83dODntqmQkDJyIiCgtFkWmlU6eWenqA9nYJqPwH2xwMlpgI5OVJIT57MpkPAyciIooYh0OO9PTA57xeoLNTVul1dgaOrq7xVS+VmioB06k/GzIfBk5ERGQoq/XMzBQgQVNXVyCIOjWoipXaKYdDMkvZ2VLLRObHwImIiExJUWTaKjHxzK/19Q0OpPxHd7f5s1QJCdLlOz0dcLlYvxRtGDgREVHUsdkk6HC5Bn/e5zszO+X/uL/fmLHa7bL5rsslAdNQgSBFDwZOREQUMywWIClJjtP19UkQ1d0d+LenR47e3rFP/1mtkk3yZ8kSE2X6kVNwsYWBExERjQs2mxxO59Bf9/kkeOrrk+xUf78Urqtq4AAkOLNYJFCKi5OMkt0uH1PsY+BEREQECYb8q/6IhsMOEUREREQaMXAiIiIi0oiBExEREZFGDJyIiIiINGLgRERERKQRAyciIiIijRg4EREREWnEwImIiIhIIwZORERERBoxcCIiIiLSiIETERERkUYMnIiIiIg0YuBEREREpBEDJyIiIiKN4oweQDRQVRUA0NbWZvBIiIiISCv/ddt/HQ8FBk4anDhxAgCQn59v8EiIiIhIrxMnTsDlcoXkvhg4aZCWlgYAqKurC9kPnoLT1taG/Px8HD58GE6n0+jhjGt8LsyFz4d58LkwD7fbjYKCgoHreCgwcNLAYpFSMJfLxV8Ck3A6nXwuTILPhbnw+TAPPhfm4b+Oh+S+QnZPRERERDGOgRMRERGRRgycNHA4HHjggQfgcDiMHsq4x+fCPPhcmAufD/Pgc2Ee4XguFDWUa/SIiIiIYhgzTkREREQaMXAiIiIi0oiBExEREZFGDJyIiIiINGLg9A+PPvooCgsLER8fjyVLluDDDz8c8fy//OUvmD59OuLj4zFnzhy8+uqrERpp7NPzXDz55JM477zzMGHCBEyYMAErVqwY9bkj7fT+Xvg9++yzUBQFV199dXgHOI7ofS5aW1tx5513IicnBw6HA1OnTuXfqRDS+3w8/PDDmDZtGhISEpCfn49vfOMb6O7ujtBoY9OWLVtw5ZVXIjc3F4qi4KWXXhr1Nps3b8bChQvhcDhQUlKCdevW6X9gldRnn31Wtdvt6u9+9zv1008/Vb/61a+qqampalNT05Dnb926VbVarepDDz2k7t27V/3ud7+r2mw2dffu3REeeezR+1x88YtfVB999FF1165dakVFhXrLLbeoLpdLra+vj/DIY4/e58KvpqZGnTRpknreeeepV111VWQGG+P0Phc9PT3qWWedpV5++eXqu+++q9bU1KibN29Wy8vLIzzy2KT3+Xj66adVh8OhPv3002pNTY362muvqTk5Oeo3vvGNCI88trz66qvqd77zHfWFF15QAagvvvjiiOcfPHhQTUxMVO+55x5179696iOPPKJarVZ1w4YNuh6XgZOqqosXL1bvvPPOgY+9Xq+am5urrl27dsjzr7vuOvWKK64Y9LklS5aot99+e1jHOR7ofS5O19/fr6akpKi///3vwzXEcSOY56K/v19dtmyZ+tvf/lb98pe/zMApRPQ+F7/5zW/UKVOmqL29vZEa4rii9/m488471YsuumjQ5+655x71nHPOCes4xxMtgdO3vvUtddasWYM+d/3116srV67U9Vjjfqqut7cXO3bswIoVKwY+Z7FYsGLFCmzbtm3I22zbtm3Q+QCwcuXKYc8nbYJ5Lk7X2dmJvr6+kG7oOB4F+1z86Ec/QmZmJlatWhWJYY4LwTwXf/vb31BWVoY777wTWVlZmD17Nn72s5/B6/VGatgxK5jnY9myZdixY8fAdN7Bgwfx6quv4vLLL4/ImEmE6to97jf5bW5uhtfrRVZW1qDPZ2VlYd++fUPeprGxccjzGxsbwzbO8SCY5+J03/72t5Gbm3vGLwfpE8xz8e677+Kpp55CeXl5BEY4fgTzXBw8eBBvvvkmbrzxRrz66quorq7Gv/7rv6Kvrw8PPPBAJIYds4J5Pr74xS+iubkZ5557LlRVRX9/P+644w78+7//eySGTP8w3LW7ra0NXV1dSEhI0HQ/4z7jRLHjwQcfxLPPPosXX3wR8fHxRg9nXGlvb8dNN92EJ598Eunp6UYPZ9zz+XzIzMzEE088gUWLFuH666/Hd77zHTz22GNGD21c2rx5M372s5/hv//7v7Fz50688MILeOWVV/DjH//Y6KFREMZ9xik9PR1WqxVNTU2DPt/U1ITs7Owhb5Odna3rfNImmOfC7xe/+AUefPBBvPHGG5g7d244hzku6H0uDhw4gNraWlx55ZUDn/P5fACAuLg4VFZWori4OLyDjlHB/F7k5OTAZrPBarUOfG7GjBlobGxEb28v7HZ7WMccy4J5Pr73ve/hpptuwle+8hUAwJw5c+DxeHDbbbfhO9/5DiwW5jAiYbhrt9Pp1JxtAphxgt1ux6JFi7Bp06aBz/l8PmzatAllZWVD3qasrGzQ+QCwcePGYc8nbYJ5LgDgoYcewo9//GNs2LABZ511ViSGGvP0PhfTp0/H7t27UV5ePnB87nOfw4UXXojy8nLk5+dHcvgxJZjfi3POOQfV1dUDwSsA7N+/Hzk5OQyaxiiY56Ozs/OM4Mgf1KrcLjZiQnbt1le3HpueffZZ1eFwqOvWrVP37t2r3nbbbWpqaqra2Nioqqqq3nTTTer9998/cP7WrVvVuLg49Re/+IVaUVGhPvDAA2xHECJ6n4sHH3xQtdvt6l//+le1oaFh4GhvbzfqW4gZep+L03FVXejofS7q6urUlJQUdfXq1WplZaW6fv16NTMzU/3JT35i1LcQU/Q+Hw888ICakpKi/vnPf1YPHjyovv7662pxcbF63XXXGfUtxIT29nZ1165d6q5du1QA6n/+53+qu3btUg8dOqSqqqref//96k033TRwvr8dwX333adWVFSojz76KNsRjMUjjzyiFhQUqHa7XV28eLH6/vvvD3xt+fLl6pe//OVB5//v//6vOnXqVNVut6uzZs1SX3nllQiPOHbpeS4mT56sAjjjeOCBByI/8Bik9/fiVAycQkvvc/Hee++pS5YsUR0OhzplyhT1pz/9qdrf3x/hUccuPc9HX1+f+oMf/EAtLi5W4+Pj1fz8fPVf//Vf1ZaWlsgPPIa89dZbQ/799//sv/zlL6vLly8/4zbz589X7Xa7OmXKFPV//ud/dD+uoqrMExIRERFpMe5rnIiIiIi0YuBEREREpBEDJyIiIiKNGDgRERERacTAiYiIiEgjBk5EREREGjFwIiIiItKIgRMRERGRRgyciIiIiDRi4ERE447P58P06dPxne98Z9DnX3nlFdjtdrzwwgsGjYyIzI6BExGNOxaLBWvWrMGjjz4Kt9sNANi5cyeuv/56/PznP8c//dM/GTxCIjIr7lVHRONSf38/pk6dilWrVuGmm27C0qVLce211+KRRx4xemhEZGIMnIho3Hr88cfx3e9+F1lZWSguLsaLL74Ii4WJeCIaHgMnIhq3Ojo6kJGRgZKSEnzwwQdITEw0ekhEZHJ8a0VE49bq1asBAM3Nzcw0EZEm/EtBROPS9773Pbzyyit4//330d/fj6eeesroIRFRFGDgRETjzpNPPolf/vKX+L//+z/MmzcPd999Nx566CH09fUZPTQiMjkGTkQ0rrz66qtYvXo1nn76aSxduhSATNm53W788Y9/NHh0RGR2DJyIaNzYsWMHrrvuOjz00EO45pprBj7vcrlw11134cEHH4TX6zVwhERkdlxVR0RERKQRM05EREREGjFwIiIiItKIgRMRERGRRgyciIiIiDRi4ERERESkEQMnIiIiIo0YOBERERFpxMCJiIiISCMGTkREREQaMXAiIiIi0oiBExEREZFG/x+89x0nS47KVwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot parameters\n", "nsigs = [1, 2]\n", "# nsigs = [0.674, 1.960, 2.576]\n", "color = \"blue\"\n", "alpha = 0.5\n", "plot_training_data = True\n", "plot_model_mean = True\n", "plot_model_bands = True\n", "\n", "# Plot results\n", "grid = df_eval[\"x\"]\n", "mean = df_mean\n", "err = df_stdev\n", "if plot_model_bands:\n", " label = r\"Model prediction\"\n", " plt.fill_between(grid, np.nan, np.nan, lw=0, color=color, alpha=alpha, label=label)\n", " for isig, nsig in enumerate(nsigs):\n", " plt.fill_between(\n", " grid,\n", " mean - nsig * err,\n", " mean + nsig * err,\n", " lw=0,\n", " color=color,\n", " alpha=alpha / (isig + 1),\n", " )\n", "if plot_model_mean:\n", " label = r\"Model prediction\" if not plot_model_bands else None\n", " plt.plot(grid, mean, color=color, alpha=alpha, label=label)\n", "if plot_training_data:\n", " plt.plot(df[\"x\"], df[\"y\"], \".\", color=\"black\", label=\"Training data\")\n", "plt.xlim((0.0, 1.0))\n", "plt.xlabel(r\"$X$\")\n", "plt.ylabel(r\"$y$\")\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Deleteing datasets and campaigns**\n", "\n", "To keep your cloud storage tidy you should delete your datasets and emulators when you are finished with them. `Emulator.delete` and `Dataset.delete` deletes the emulators and the datasets from the cloud storage respectively.\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# Delete dataset\n", "dataset.delete()\n", "\n", "# Delete campaign\n", "emulator.delete()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.0" } }, "nbformat": 4, "nbformat_minor": 4 }