{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "**We're going to start by import the necessary libraries**" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "import seaborn as sns\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.linear_model import LinearRegression\n", "from sklearn.ensemble import RandomForestRegressor\n", "from sklearn.tree import DecisionTreeClassifier, export_graphviz\n", "from sklearn.metrics import confusion_matrix, classification_report, mean_squared_error\n", "from sklearn.preprocessing import LabelEncoder\n", "from sklearn.model_selection import GridSearchCV\n", "from sklearn.svm import SVR\n", "from sklearn.datasets import load_iris\n", "import pydot\n", "from IPython.display import Image\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**1-Exploration de la base de données**" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "house = 'C:/Users/HP/Anaconda3/Lib/site-packages/notebook/train.csv'" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "df_train = pd.read_csv(house, sep = ',')" ] }, { "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", " \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", " \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", " \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", "
IdMSSubClassLotFrontageLotAreaOverallQualOverallCondYearBuiltYearRemodAddMasVnrAreaBsmtFinSF1...WoodDeckSFOpenPorchSFEnclosedPorch3SsnPorchScreenPorchPoolAreaMiscValMoSoldYrSoldSalePrice
count1460.0000001460.0000001201.0000001460.0000001460.0000001460.0000001460.0000001460.0000001452.0000001460.000000...1460.0000001460.0000001460.0000001460.0000001460.0000001460.0000001460.0000001460.0000001460.0000001460.000000
mean730.50000056.89726070.04995810516.8280826.0993155.5753421971.2678081984.865753103.685262443.639726...94.24452146.66027421.9541103.40958915.0609592.75890443.4890416.3219182007.815753180921.195890
std421.61000942.30057124.2847529981.2649321.3829971.11279930.20290420.645407181.066207456.098091...125.33879466.25602861.11914929.31733155.75741540.177307496.1230242.7036261.32809579442.502883
min1.00000020.00000021.0000001300.0000001.0000001.0000001872.0000001950.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.0000000.0000001.0000002006.00000034900.000000
25%365.75000020.00000059.0000007553.5000005.0000005.0000001954.0000001967.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.0000000.0000005.0000002007.000000129975.000000
50%730.50000050.00000069.0000009478.5000006.0000005.0000001973.0000001994.0000000.000000383.500000...0.00000025.0000000.0000000.0000000.0000000.0000000.0000006.0000002008.000000163000.000000
75%1095.25000070.00000080.00000011601.5000007.0000006.0000002000.0000002004.000000166.000000712.250000...168.00000068.0000000.0000000.0000000.0000000.0000000.0000008.0000002009.000000214000.000000
max1460.000000190.000000313.000000215245.00000010.0000009.0000002010.0000002010.0000001600.0000005644.000000...857.000000547.000000552.000000508.000000480.000000738.00000015500.00000012.0000002010.000000755000.000000
\n", "

8 rows × 38 columns

\n", "
" ], "text/plain": [ " Id MSSubClass LotFrontage LotArea OverallQual \\\n", "count 1460.000000 1460.000000 1201.000000 1460.000000 1460.000000 \n", "mean 730.500000 56.897260 70.049958 10516.828082 6.099315 \n", "std 421.610009 42.300571 24.284752 9981.264932 1.382997 \n", "min 1.000000 20.000000 21.000000 1300.000000 1.000000 \n", "25% 365.750000 20.000000 59.000000 7553.500000 5.000000 \n", "50% 730.500000 50.000000 69.000000 9478.500000 6.000000 \n", "75% 1095.250000 70.000000 80.000000 11601.500000 7.000000 \n", "max 1460.000000 190.000000 313.000000 215245.000000 10.000000 \n", "\n", " OverallCond YearBuilt YearRemodAdd MasVnrArea BsmtFinSF1 \\\n", "count 1460.000000 1460.000000 1460.000000 1452.000000 1460.000000 \n", "mean 5.575342 1971.267808 1984.865753 103.685262 443.639726 \n", "std 1.112799 30.202904 20.645407 181.066207 456.098091 \n", "min 1.000000 1872.000000 1950.000000 0.000000 0.000000 \n", "25% 5.000000 1954.000000 1967.000000 0.000000 0.000000 \n", "50% 5.000000 1973.000000 1994.000000 0.000000 383.500000 \n", "75% 6.000000 2000.000000 2004.000000 166.000000 712.250000 \n", "max 9.000000 2010.000000 2010.000000 1600.000000 5644.000000 \n", "\n", " ... WoodDeckSF OpenPorchSF EnclosedPorch 3SsnPorch \\\n", "count ... 1460.000000 1460.000000 1460.000000 1460.000000 \n", "mean ... 94.244521 46.660274 21.954110 3.409589 \n", "std ... 125.338794 66.256028 61.119149 29.317331 \n", "min ... 0.000000 0.000000 0.000000 0.000000 \n", "25% ... 0.000000 0.000000 0.000000 0.000000 \n", "50% ... 0.000000 25.000000 0.000000 0.000000 \n", "75% ... 168.000000 68.000000 0.000000 0.000000 \n", "max ... 857.000000 547.000000 552.000000 508.000000 \n", "\n", " ScreenPorch PoolArea MiscVal MoSold YrSold \\\n", "count 1460.000000 1460.000000 1460.000000 1460.000000 1460.000000 \n", "mean 15.060959 2.758904 43.489041 6.321918 2007.815753 \n", "std 55.757415 40.177307 496.123024 2.703626 1.328095 \n", "min 0.000000 0.000000 0.000000 1.000000 2006.000000 \n", "25% 0.000000 0.000000 0.000000 5.000000 2007.000000 \n", "50% 0.000000 0.000000 0.000000 6.000000 2008.000000 \n", "75% 0.000000 0.000000 0.000000 8.000000 2009.000000 \n", "max 480.000000 738.000000 15500.000000 12.000000 2010.000000 \n", "\n", " SalePrice \n", "count 1460.000000 \n", "mean 180921.195890 \n", "std 79442.502883 \n", "min 34900.000000 \n", "25% 129975.000000 \n", "50% 163000.000000 \n", "75% 214000.000000 \n", "max 755000.000000 \n", "\n", "[8 rows x 38 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_train.describe()" ] }, { "cell_type": "code", "execution_count": 5, "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", " \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", " \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", "
IdMSSubClassMSZoningLotFrontageLotAreaStreetAlleyLotShapeLandContourUtilities...PoolAreaPoolQCFenceMiscFeatureMiscValMoSoldYrSoldSaleTypeSaleConditionSalePrice
0160RL65.08450PaveNaNRegLvlAllPub...0NaNNaNNaN022008WDNormal208500
1220RL80.09600PaveNaNRegLvlAllPub...0NaNNaNNaN052007WDNormal181500
2360RL68.011250PaveNaNIR1LvlAllPub...0NaNNaNNaN092008WDNormal223500
3470RL60.09550PaveNaNIR1LvlAllPub...0NaNNaNNaN022006WDAbnorml140000
4560RL84.014260PaveNaNIR1LvlAllPub...0NaNNaNNaN0122008WDNormal250000
\n", "

5 rows × 81 columns

\n", "
" ], "text/plain": [ " Id MSSubClass MSZoning LotFrontage LotArea Street Alley LotShape \\\n", "0 1 60 RL 65.0 8450 Pave NaN Reg \n", "1 2 20 RL 80.0 9600 Pave NaN Reg \n", "2 3 60 RL 68.0 11250 Pave NaN IR1 \n", "3 4 70 RL 60.0 9550 Pave NaN IR1 \n", "4 5 60 RL 84.0 14260 Pave NaN IR1 \n", "\n", " LandContour Utilities ... PoolArea PoolQC Fence MiscFeature MiscVal \\\n", "0 Lvl AllPub ... 0 NaN NaN NaN 0 \n", "1 Lvl AllPub ... 0 NaN NaN NaN 0 \n", "2 Lvl AllPub ... 0 NaN NaN NaN 0 \n", "3 Lvl AllPub ... 0 NaN NaN NaN 0 \n", "4 Lvl AllPub ... 0 NaN NaN NaN 0 \n", "\n", " MoSold YrSold SaleType SaleCondition SalePrice \n", "0 2 2008 WD Normal 208500 \n", "1 5 2007 WD Normal 181500 \n", "2 9 2008 WD Normal 223500 \n", "3 2 2006 WD Abnorml 140000 \n", "4 12 2008 WD Normal 250000 \n", "\n", "[5 rows x 81 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_train.head(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** 2-Analyse de la target variable : 'SalePrice'**" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "count 1460.000000\n", "mean 180921.195890\n", "std 79442.502883\n", "min 34900.000000\n", "25% 129975.000000\n", "50% 163000.000000\n", "75% 214000.000000\n", "max 755000.000000\n", "Name: SalePrice, dtype: float64" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_train['SalePrice'].describe()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\matplotlib\\axes\\_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n", " warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#Histogramme de la variable cible pour trouver s'il y a 'skewness'\n", "sns.distplot(df_train['SalePrice'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** On remarque une skewness positive il est préférable d'appliquer log(1+x) sur cette variable pour la rendre plus normale**" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\matplotlib\\axes\\_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n", " warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df_train[\"SalePrice\"] = np.log1p(df_train[\"SalePrice\"])\n", "#La nouvelle distribution \n", "sns.distplot(df_train['SalePrice'] )\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**3-Etudier les corrélations entre les variables**" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAFHCAYAAACs30uOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzsnXdYFEfjxz/LccDd0UWNKCigoihioWgUe+xieTWxvmpsIfbeNRasibElqLEmb6KJNWKPsccYFRIVFKxY0SjS77j+++Pw4DhMTJBfTLKf57lH2Zn5zuzs3c5O2fkKRqPRiIiIiIjIvxabv7oAIiIiIiJ/LWJDICIiIvIvR2wIRERERP7liA2BiIiIyL8csSEQERER+ZcjNgQiIiIi/3Js/+oCiLwY7dNbr17zy8WvXBNAdeRqiejqsoQS0VWlS1+5Zma6wyvXBFBrS+ZnajCWTN3qDK/++VJplLxyTYC3Hn9dbI0/8juVevgWO7+SQGwIRERERIqDQf9Xl6DYiA2BiIiISHEwGv7qEhQbsSEQERERKQZGve6vLkKxERsCERERkeJgEHsEIiIiIv9uxKEhERERkX854mTx/z83btxg4cKF/PzzzxiNRgICAhg9ejTBwcG/mc7f35/vv/+eChUq/G48mUyGIJiW1kmlUsLDw5k1axbOzs5W8WfOnImnpyfvvffenz+pl+BSQiJLozewaZXl8s/jp88SvfErbCUSunRoRbeItuSq1UyevYRnaeko5DKipo/D3c21kKKAtHlPbDwqgF6H5sgXGDOemENt676FbdVgjBjRnT+I/uYvYOeAfet3wc4BJLZoT27D8Oh2IVkBReQYJD6VQashe+USDCkPAJD4VEYxeHh+Hv4BZEVNR3cjCcfxMxDs7DE8e0r28oWgVlvpOo0Zg62fH2i1ZC5Zgv7BA3OwXWgoiv79AdBdu0bWsmUICgUuM2ciODhg1OnIjIrC8OyZlW6pqSORVvUFrZans5eiu/fQHCxrGILr0L4AqBOv82z+SgAqHN6C7q4p/9yLV0hfucFCs/y8SByq+2DUaLk/aSWaOynmYKem9SgzqgcAqvhbPJwRbQ5zbl0fl3aNuDfqQ6wQBCouGIo8oBIGtZbkCZ+gTn5kDnZpVhfPsW8DoLx8iztT1yI42OG7YjRSDxf02Spuj16B7lmmlW6lBUOQB1TCqNFya/ynFroV5w7EKaQa+mwVANcGLMTW1RHf5SNAENDcf8LtidEYVBorXb+Fg5HXqIhRo+PG2GhyC+j6zHsX5xB/9Dm5AFzttwhbN0eqLB8OgoD6/hNuTlhtqSsIVF80EMcaFTGotVwZuwZV8mNzsH9Uf1xD/NHllfVivyX4TnwbpxoVAbAv44o2U8n5dtOt6/fPIvYI/n/R6/UMGTKE/v37Ex0djSAI7Nq1i8GDB3P48GFKly79SvLZu3evucHIzs7m/fff54MPPmDp0qVWcefMmfNK8vwtNny5jZiDR5E52Fsc1+p0LFqxlq3rliOXOdDnvXE0bRjGvu+OU8WvEsMG9mH/keOs2byVKaMtGyqJXxCCRIr6m8XYvOGDNLwbmr15NyQ7Gba1m5G7aQZI7XHoNQ39zV+Q1m2J/l4iul+OIriWxb7tQHK3zLfQtavfCOzsyJzwPrb+ASjefZ+sqGkA6G/fIHPqaFO8hk2xe5aKNu4c8iEj0Zw4gvr7gzh064VDmwhyv91moWvfqBGCnR1pw4YhDQjAMTKSjOmmH7Mgk+EUGcmz0aMxZmQg79EDwcUFh5Yt0d26RfaaNcjat0f+zjtkR0db6MqbNUSwt+NRv1HYB1bHfexQfh0zy6Qrl+E2ZjCPBo3HkJ6Jc/+3sXFzwcZRgebqdX4dNbPI6+Xcqj6CvR03u05AXsefctPf5c7gKABsFDLKTRnAzR5T0adlUnpoVyTuzuifZeI5azCOjeuSe6XodelubcKwsZdyNWIyirpV8Zo5gBvvLsjTdaDC9H4kdZuOLi2LNyI7Y+vuTKluTVEl3uHm0q9xj2iE56ju3J21vpBuKDb2Uq5ETMGxblUqzurPtQELzeGKQF8Se81B9yzLfMz3o2H8+sVhUnedonSvlrwxJIKHy7db6Lq3DUVwkHK5wzQc61ah0gf9SOy/yBzuGOhDQs95FrqVP47k0eeHebrrNGV7tcBzaEfuL9thDi/TNgQbeynn28/ApV4Vqs7uy8V++Y2mU6APcT3moy2geW3GZtP1tJUQEjObq+PWFFm/f5Z/wmTx3+rN4vT0dB48eED79u2RSqXY2trSvXt3evToQWpqKpcuXaJPnz7Ur1+fevXqMWXKFPR6625bQkICPXr0IDg4mO7duxMfH//CPB0dHWndujXXrl0DoHnz5kybNo3Q0FDWrVvH5MmTWbnS9JSYlpbGqFGjqFevHk2aNOGrr74y62zatIkWLVrQoEEDpk6dSk5Ozkuft5dnOZbNt36CuZV8D+8Knrg4OyGVSqlbqwaxFxOIu5hAo7B6AITXD+Hs+Z+t0tp4VkZ/JwEAw6Pb2JStmB+oU2PMTAWpPYLUDvIsK7Rx36O7fCpPwAajTmulaxtQC23sOZNM0hVsq/hbn5C9A7JeA8hZuwIAaUAgmrw02gs/IQ2qZ5VEGhiI+lxenCtXkPrn60pr1kR36xZOkZG4rViBIS0NY0YGulu3EORyAASFAor4LtjXqYHqh/MAqC9fxa5G1fywoBporifjPm4ob2xYij41DUNaBnbVqyAp40HZz5ZQZlUUthUte5mKkACyTsQCoPw5CXlgFXOYvF41cpOSKTf9Xfy+WYjuaTr6vCf0nNirPJj+qXV95eEYWp2MY6ZrmRN3DUUtv/yw4GqoEu/gNWsA1XZGoX2age5ZJk4h1ck4bkqTcSwO5/BaVrpOodVJz4uTXUgXQcDBpxw+iyMJ+HY+pXs0B0BWtQLpR+MAyDp3FafQ6la6zqHVSD/6S57udRyDfC11fctRecl7BO6ZR5meJl151QqkHTWVJfN8Is6h1Sw0XcP8eXrsoul8Yq/jHGRZVrnvG1T/cAghMXPw7NnUIq3XwDakHr9E9tV7RdRuMTAYXv7zmvK36hGUKlWKevXq0bt3b7p06UJYWBg1atRg0qRJgOkmPXLkSDp37sy9e/fo3r07Z86cITw83KyRlZXF4MGDmTRpEu3bt+fw4cMMHTqUQ4cO4ejoaJXngwcPiImJITQ01ELj9OnTaDQa5s2bZz4+Y8YM7O3tOXXqFI8ePaJnz54EBQVx69YttmzZwsaNGylVqhRTp05l8eLFzJ49+6XO+61mjXiQ8tjqeE5ODo4KhflvhVxGVnYOOUoljo4K87HsIhodwc4Bo1qVf8BoAMHG3M01Zqch6zsLBAHthUOmOJq8+HJn7FsPQHNyG4UR5HKMyvz8jAYD2EgsxlEdWrVH88NxjJkZpjQyOUZltim+Smm6aRfCRqHAmJ2df8BgAIkE9HpsXFyQ1qnDs0GDMKpUuK1YgTYhAWNmJnbBwZTatAnB2Zm0ESOK1DVkF6gfvQEkNqA3IHFzRhYSxMN33sOgVPHGxo9RX7yC/ukzMjZsRfndSexr16D0/Mmk9M4f8pI4yjFkKfProICmrZsziga1uN5uJIacXPy2LSQnLhHN7Ydk7D2Non5NqzLm68rQF9Q1FNB1d8b5zZrEtxqLISeXaruiyI5NwsZJhj7TlEafrULiLLfWdZKb4xTWtZHb82jDfh6t3QM2NlTfPofsizfJSbiNW6sQnm47jlvrUGzk9la6tk4ydAXKa1G3cntS1h/g4ZoYBBsbau6cTfYvN8mJT8a9dTBPvjmBe+sQbOQOhTTl6DIt61aQ2GDM07y3/hB3Vu9FsLEheOdMMi/eIvvKXQSphAr/bcm5NlNfWL9/mn/A0NDfqkcAsH79erp27cp3331Hr169aNCgAR9//DFGo5FNmzbRuXNnsrKySE1NxcXFhadPn1qkP3HiBN7e3nTq1AlbW1vatWuHl5cXJ0+eNMeJiIggODiYevXq0atXL/z8/Bg7dqw5vFWrVtjZ2Vk0HGq1muPHjzN69Gjkcjm+vr58/vnneHl5sXv3bgYOHIi3tzcKhYLRo0eze/duimsOp1AoUCrzfxQ5ShXOTgoUcjlKpcp8zKmIBs6oyUWwK/gjE8xfaEnFmghyF1Qbp6HaMBWJbxA2ZSuZYpXyxKHraDRnvsXw4Lq1rlKJICtwsxEEq8k0uyYtUR/em59GlZ9GkMkx5mRTGENOjvnpHgAbG/MTviEzE11iIoZnzzCqVGgvXsS2cmUU/fqh3LqV1P79SR8/HpcihvEMOTkIClkBXcF0wwIM6ZmoE5LQp6ZhVOWijruMXTU/NFeuoTx2BgD1LwlISntYaOqzldi8QFOXnoXq4nV0T9IxKHPJOZeALODlth3QZ6uwccy/ZkJB3bQsci7eMOtmn72CvEYlDFkqJI6mskgcZegylNa6WUpzHABBsMmvA5WGR+v2YlBpMOTkkvnDZRQBlbg7ezNurULw/3IGGAwWwzvP0WWpkBQor+mamXT1Kg0pn+3DoNKgz8kl/fRlFDUqcvuDzbi3CiHgq2l5upmFNJXYFqoDo1lTzd21+82az04n4BRg6umWahxI2tmr6LJUvHIM+pf/vKb87RoCmUzGkCFD2L59O+fOnWP27Nls3bqVrVu3EhcXR8uWLYmIiGDdunVotVqrm21KSgrx8fEEBwebP4mJiaSk5E/m7dmzhwsXLhAbG8uJEyeIioqyuOl7eFj+8AEyMjLQarWULVvWfMzf3x9nZ2dSUlJYsGCBOb/u3btjMBhITU0tVl34VvLizv2HZGRmodVqib0YT1DN6tSpFcDJH03DHafOnqduUA2rtIaUm0gqmZ4+bd7wwZiaP/FqVCtBrwW9DvQ6U8/BXobgXg77dkNQH1yPIW9YqTC6q5eRBocBpslg/R3LyWRBrkCQSjE8zZ+Y1l6Jxy64PgDS4DC0CZesdLXx8djXz4sTEIDuVv44ujYpCVsfHwQXF5BITOF37mDMysKQ1xsypKdjU0RPQ/1LAvJGpvLaB1ZHcz2/vOqr15FWroSNqzNIbLAPrIb25l1ch/bFuU9XU1mq+qJ/9KuFZs6Fqzg1My1ekNfxJzfpjjlMdfkGDv4VkbiZNOV1/Mm9frfIuixM9vmruDY3DZsp6lZFeTU/nfLSTWT+3ti6OYHEBkXdquReu0/Whau4NK8LmCaTs89dsdLNOp+Ia14cx7pVUSbml9fBtxwBu+eDjQ2CrQSn0OrkXL6FS+Mg7i/9hqTeczEajGScvFikrluL57pVUCbml1fmV47APfPMus6h1cm+fAvXJkHc+2gbV3pFYTQYST9p+V1IP5eER4s6pvOpV4XsAnWg8PMkJGYO2AgIthJcw/zJvGy6nu6NA0n9/peXquc/jNHw8p/XlL/V0NC+fftYvXo1MTExgGn8vn379pw/f57Lly+zd+9etm/fTtWqpnHeTp06WWmULl2aBg0a8Nlnn5mP3bt3D3d395cux/MVRQUpVaoUUqmUx48f4+XlBcCOHTvw8fHBw8OD4cOH065dOwA0Gg0PHjygVKlSL3/yBdh3+BhKlYrundoxccRghoyZhtFopEv7VpQt7cE7Xdozbd5H9I0ch9RWyuIPJlpp6G/8go13dey7TzCt/PhuM7Z1WmBMf4L+9iUMj5Oxf2cSGI0YHt7AcPcqdh0iwVaKXZN3ADCqVfkTzHlofjyFtHYwzos/AUEge/lCHDq9jT7lPtpzZ7Ap74Xh10cWaVTffI7j6CnYt+qAMTODrA/nWpVXfeoUdsHBuK1aBYJA5qJFyLt3R//gAeozZ8j67DPcFptWVOUeP47+9m2yN2zAecIE5J06ga0tmUuWWOkqj/6ArH493ti8DBBInfUhzn3+g/beQ1QnfiR9xQbKfmqakM05fBLtzWQyNmzFY/5k5I3CMOr1PJ1pqZt56Eecwmvjt2MxCAL3JyzHY2AnNHdSyDxyjpTFm/H53DQsmLHvNOprL9cQpB34CefGtan+7QIQBG6PWUnZIRGob6eQ/t157i/4H1W/Mk10P4v5AVXSXdR3HuGzfBTVds3HqNVxc5j1goe0Az/h0jiIgD3zAYFbY1fxxpCO5CY/Iv3weVJ3naTG3oUYdTqebjuO6to9bBQO+C4dhlGjQ5V0l+Spn1nppu4/h2vjIAJjokCAG6M/wXNoB3JvP+LZ4Qs82XmKWvvnY9TqebLtBKqk+0jkMqosex+DWosy6R63pqyz0Px1/3lKNalFyN45IAgkjIrGe2h7VMmPeHIolpQdpwndH4VRpyPlm5PkJN0HQO7nycNvTlqV8ZXwGo/9vyzC38m8/tmzZ7Rt25Y+ffrQv39/5HI5V65cYeTIkQwaNIjFixcTExND+fLl2blzJzNmzGDOnDm8/fbb5uWjCoWCdu3aMX/+fJo2bUpcXByDBg1i8+bN1KpV63eXmTZv3pwFCxYQFmZ6ipw8eTLly5dnxIgRjBs3DolEwpw5c3jw4AF9+/Zl/fr1xMfHs2XLFj755BM8PDxYunQpp06dIiYmpshG5Tni7qPi7qMg7j4Kr/fuo+pLh146rn2t1sXOryT4W/UI3N3d+d///sdHH31Ey5YtUavVeHl5MWrUKDp37syvv/5Kt27dEASBOnXq0KZNG27evGmh4ebmRnR0NAsWLGD8+PG4ubkxY8YMatWyXk3xR5kxYwZz586lSZMmKBQKJk6cSPXq1alWrRppaWn07t2bjIwMatasycqVK3+zERAREfl7YDS+vmP/L8vfqkfwb0PsEYg9AhB7BPB69whyf9n7+5HycKjdodj5lQR/qx6BiIiIyGvHP2COQGwIRERERIrDa7wa6GURGwIRERGR4vAavx/wsogNgYiIiEhx+AfsNSQ2BK8xJTGxK+1t/U7Bq+DSovElomtrUzLd7mfaVz+xm2lTMhOat+xKZlK3urpknmQVJbCKJld4jd99FYeGRERERP7l/AMmi1/jZlZERETkb8Ar3n304sWLdO7cmdq1a9OrVy/u3rV+8zw7O5spU6YQFhZGs2bNLHY6zs3NZdy4cQQHB9OkSRN27dr1u3mKDYGIiIhIMTAa9S/9+T3UajXDhg1j4MCBnDt3jjfffJPJkydbxVu0aBH379/n0KFDfP7552zYsIEjR44AsHTpUlQqFadOnWLVqlUsXLiQ27dvW2kURGwIRERERIpD3uaML/X5Hc6ePYurqysdO3bEzs6OyMhIrl+/brVDwpEjRxg9ejSurq54eXnRo0cP85P/vn37iIyMRCaTERgYSIcOHdixY0dR2ZkRGwIRERGR4vAKh4Zu376Nr2/+tuQSiQQvLy+rhsBgMCCTySzi3b17l4yMDJ4+fWqh4ePjw40bN34zX7EhEBERESkOr3AbaqVSiYOD5Yo2mUyGSmXpo9C0aVNWrFhBZmYm9+7dY/v27Wg0GnO8go2Eg4MDubm5v5mvuGrob0EJGc0DlxISWRq9gU2rLJeqHj99luiNX2ErkdClQyu6RbQlV61m8uwlPEtLRyGXETV9HO5uroWKKuBTwAj95guM0A155uJJeUbofnlG6OrfMEL3nj80T1dH8oRVFrrOzeriOca0Pbby8i3uTluTZ9w+BttSLhhyVNwevbxI4/bqi97FqUZFDGodCVZm6P1wC/FHl236If3SbwlGvYHqiwYi8y6DjZ0tV6duJPPnmxaadRYOwDXAG4NGy4Vx68gpoBk09794hFY1G6z/0H+p2TDFo341Qle9z/7gkVbXCkGg1bz+lA7wRq/WcXDSOtLvPLaK023TeG4cjuWXL49i5yQjYtVwpDJ79Fod+0ZHk/MkwypN4MJ3ca7hjUGj4+LYtSgLlLfGvH64h1RFl2cyf77fhwgSG5r/8DGZSSbbx0f7z3N73UErXf9Fg8xG84ljV1vUbZWoAbiE+KPPq4dL/RbjO/FtHGtUAsCujCu6zBxiCxrNl1RZi8MrXDUkk8msbtoqlQpFIS+NqVOnMnv2bFq1aoW3tzedO3fm4MGD5kYkNzcXeZ6RU8H/v4jXoiE4ceIEq1evJjExETs7O+rUqcPw4cOpWfPFtn2vivv379OiRQuSkpLYuXMnu3bt4osvvgBMM/OffPIJhw4dIi0tjTJlytClSxcGDhyIVFq8Tct+b7vrgpSU0fyGL7cRc/AoMgdLm0GtTseiFWvZum45cpkDfd4bR9OGYez77jhV/CoxbGAf9h85zprNW5ky+j2LtM+N0BP+oBH64wJG6OWGRPCgkBG6a5swbOztSOxkMm6vMGMANwfmG7d7TetHUvfnxu1dTMbt/zEZtz9cuhW3iEaUG9Wde4WM28u0DcbG3o5z7WfiUq8y/rP78ksBM3TnQB9ieyywMEP3G9+N7MR7xI/4FMcAb5wCKlo0BJ5t6yGxl3Ks4we4161M0KzenBmQ7wPgVqsSp3ouRPPM0olN5ulO1aHtsJEW/T5CldYm3S+7zKZcHT+aTe/FrsEfW8QJH98dB5f8m0Zgt8Y8SbzHiQVbqdWjKaFD23Ns3lcWad5oG4zEQcoPHWbhWrcyNT7ow/n+H+XXfWAlfuq5EE2BOvAIr8mD3WeIn7apyLIClM4zmo9tPx3nelWoPPu/XO6X793gFOjDxR5RFnV7vYDRfN2YOSQWMpovqbIWi1f4HoGvr6/FKh+9Xs/du3fx8fGxiPf06VNmz56Nk5MTYJogrlatGq6urri7u5OcnExAQABgGm4qnL4wf/nQ0K5du5g4cSI9evTghx9+4Pjx4zRq1Ij//ve/nD9//i8rl1qtpnfv3ty9e5eNGzcSFxfHypUrOXnyJO+//36xbSb/CCVlNO/lWY5l86dbHb+VfA/vCp64ODshlUqpW6sGsRcTiLuYQKMwk0NWeP0Qzp7/2SqtcyEjdMcijNB9F0dS4w8aoTuGVCfjuClOTtw1FEGV88OCq6FMvEOFmQPw3zEf7ZN0dM8yTWbveWkyj8Xh3CjIStc1rBqpx0zOVRmxN3AuZLAu932DgA8HExIz22yGXqpZLQxaHXW3TsF3TFdSj1u6c3mE+vMoz2D9WdwN3IJ8LDQdfd6g3pJBNP12FpV6NAHAxl5K3UXvEjdlo1UZn1MhxJ/bJ0yOXSk/3+SNWpY/7qrtQjAaDdw+nu/q9STpHnYK01OivZMMvdZ65Yp7qD+/HjWVNz3uBi6F6kDhW45aSwbRcM8HeOXVgUuQDy6BlXhz10zqfTYK+zKuVrouBeo28wVG8/4fDqFuzBzK9Wxmea4D2/Ds+CVyChnNl1RZi8UrnCMICwsjNTWV3bt3o9FoiI6OxtvbGz8/P4t4q1ev5uOPP0av13Pp0iW++eYbunfvDkD79u1ZsWIF2dnZxMfHs3fvXjp0+O1dT//ShkClUrFgwQKioqLo1KkTcrkcmUxGnz59GDRoEHPmzKFRo0bExcWZ06xfv57hw01G4QkJCfTo0cNs/xgfHw/ATz/9RKdOnejduzdhYWHcv3+fEydO0K1bN0JCQggLC+PDDz8sskzP+eKLL9BoNCxbtoyKFSsiCAJVq1Zl9erVXL58mcOHDwMmo5qffvrJnK5v377s3LkTgEuXLtGnTx/q169PvXr1mDJlCnr9H3/r8oVG88//zDOad+g5Fd3FY6aDGpXJbjLPaF57ZreV7lvNGmFra90pzMnJwbFAV1Qhl5GVnUOOUomjo8J8LDsnxyrtC43QARu5PY837OfGiGVc7TWHsv3aIK9eEWWeETqA+wuM0CVOckvjdn2+rsm4PZD78z/net85lB3UEXsfTySO8t81brd1kqHLVFnoCnm6Erk9d9cf4vKwVcT1WIBX/7dwDPBG6u6E1EVBXI8FPDkcS9VZfSw0pY4yC29coyFf01Zuz40Nhzk3/FNO91qEb/+WuFT3ok5UP65F7yf3UZpVGZ9j7yhDnWVt3A7gUbUCAZ3e5PRHlqtDVGnZVGocyLtHFhEypD2Xvz5edB0UMpkvWAe31x/i5+GfcLbnQir1fwun6t5kX39I0pLtnOkyh0cHLlBzfv8X1G3R5ZXI7bm//iBXhq3kYo/5lO/fCkWANwCCVILnf9/i7qd7/t/KWixe4aohBwcH1qxZwxdffEFYWBhnzpxh2bJlgOkGv2ePqU4mTpzInTt3CAkJYfz48cyYMYPatWsDMHbsWNzc3GjRogXDhw9nypQpVK9u/XBVkL90aOiXX34hNzeXpk2bWoVFRESwfPlymjdvzoEDB6hb1+R9euDAAQYOHEhWVhaDBw9m0qRJtG/fnsOHDzN06FAOHTK5BSUmJrJq1SoaNGiAIAiMGTOG1atXExoaSkJCAu+88w5du3bFzs6uyLIdO3aMVq1aWQ0BOTs706xZM44ePUrr1r/tNjR69GhGjhxJ586duXfvHt27d+fMmTOEh4f/oXp6WaN5APvOIzE8vInhcTJCKU/s2w5Cc2pHkUbzL0KhUKBU5v/YcpQqnJ0UKORylEqV+ZhTAR/n5+izlNgUMEKnkBF6Sp4ROkDmD5eRB1TizuzNVIoahEfncDJOXyrSCF2fpURSwBD+RcbtAFk/JSCv4YM+W2lh3K7PsG64ChusW5uhHzCX97kZujYtm18PxQLw5HAcPiMsLVG12SpsFQWul2Bj1tSp1Nz47CD6PM0np6/gWrMSHmH+OPqUhXFdsHN1JCx6OD9FrrLQVWersLOog3zdGv9phGNZN3psmYpLBQ/0Wh0Z958S1KsZ51bv4+JXRyldzYtOq0exqc3UIuqgwDUrVAe3PjtgLu/T0wm41PAm5cAF9Co1AI8OnMd/Yvci69b2N3Tv5RnNA6SdjscpoCI5V+7i3rgWGWevoi/CaL6kylosXvGbxTVr1ixyuee+ffvM/y9dujTr16+3igMgl8tZsGDBH8rzL+0RPH36FBcXlyKfSsuUKQPAgAEDOHToEEajkfv373P79m2aNWvGiRMn8Pb2plOnTtja2tKuXTu8vLw4edLkS2pvb0/Lli1xdHTEwcGBb7/9ltDQUNLS0sjJyUEul/P06dPfLFtBI/rCZfuttM/ZtGkTnTt3Jisri9TUVFxcXF4qXWFKymj+RfhW8uLO/YdkZGah1WqB446CAAAgAElEQVSJvRhPUM3q1KkVwMkfTcN1p86ep25QDau0WecTcStghK4qZIRe4wVG6A+WfkNi77nwAiP07AuJuBQwbi+oa23c7o/q+j2yz+encW5Wl6wijNstzdArk11gKELhV47QmNlmM3S3sGpkXr5N+k9JlM5L49agGtl5vrjPST1/jTdamJ7O3OtWJjMxX9PJrxxNv51p1vQIrUraxVscCp/Aif9EceI/UWjSs60aAYAHF67h28w0vFWujh9PkvJ1TyzYyv86f8DWHlHEbz/FhXUHuH3iErkZOeZehDI1E/uCN9E80s5fo2xeeV3rViarQHkd/crRcM8H5vK6h/qTfjmZoKVDKNfBZNfq0agmGZesFyJknEuiVF49OderQk4Bo3m5nyd1LYzmq5GVZzTv1jiQ1O+thx1LsqzFQjSvLx4eHh48e/YMrVZr9eT98OFDAMqVK4eDgwOxsbH8/PPPtGzZEgcHB1JSUoiPjyc4ONicRqfTkZKSQqlSpShVqpTZClIikXD48GE2bdpkfsnCaDT+5ji/h4cHjx8/LjLsyZMnuLm5/e75xcXF8e6776LX66lRowZarfZPzS2UlNF8YfYdPoZSpaJ7p3ZMHDGYIWOmYTQa6dK+FWVLe/BOl/ZMm/cRfSPHIbWVsvgD6w3snuUZodfIM0K/mWeErk5+RNrh8zzddZKaeUboT/KM0CUFjNCVLzBCTz9wFufwIKrtXggCJI9dSdnBEeQmp5Dx3XnuL/yCKl9+AEDa3tPkJt1Fc+cRlZaNwn+nybj91nBr43aTGXogoXvngADxo1ZTcWg7lMmPzWboYfvnYdTpeZhnhn5r+S5qLB1K6L45GLV6Lo/41ELzwf4LlGkcSLM9s0AQuDBmDVWGtiX79mNSDsdxd+cZmu+bjVGr587202Ree2BVrqK4dvAClRrVpPfOmSAIHBi/luBBbUlPfsyNI3FFpjn94XZaLx5Enb4tsZFKODjZ+ikyZf95PBoH0jBmNghwcfQafIe2I+f2Yx4fjuXBzh8I3z8Xg1bP/W2nyE66z9WoLdT+eCiV+r+FXqnm4ti1VrpP9p/DvUkt6u2dC4LA1VGf4pVnNP/0UCyPd5wmeH8URp3eymj+0TcnijyfkiprsfgH7DX0l1pVqtVqwsPDmTZtGp06WXavly9fzuHDh9m3bx/Lly9HqVQSGxvLyJEjady4Mbt372bfvn189ln+TePevXu4u7sTHx/PlClTOHr0KGC6IY8YMYLt27dTrlw5jEYjoaGhrFq1ivLlyxe5amjdunVs376dmJgYpFIpV65c4fHjx4SEhNCqVSumTp1Khw4daNGiBXPnzuXNN98EoGPHjgwYMIA333yTVq1asX37dqpWrQpAp06d6NevH127dn2pVUPK5e+9MOzPUlK7j8bWEncfFXcfNVESu4/mCCVTtx0fbSm2hmrn/N+PlIes69Tfj/QX8JcODdnb2zNt2jSioqLYs2cPSqWSrKwsNm/ezKZNm5gxYwZgurnu37+flJQU8w23SZMmxMfHc+zYMYxGI7GxsURERFi9gQeQlZWFRCLB3t4ejUbDJ598QmZmJjrdiydv+vbti4ODA6NHj+bOnTuo1WrmzZtHmzZt8PPzo23btgBUrFiRAwcOoNFo2L9/v/kNvpycHARBwMHBAb1ez7Zt20hKSvrNPEVERP6GvOJN5/4K/vLlo506deLDDz9k27ZtNG7cmObNm3PmzBk2b95M/fr1AdPa2tKlS9O6dWvzfIKbmxvR0dGsXr2a4OBgJk2axIwZM6hVq5ZVHuHh4TRs2JC33nqLpk2bcufOHerXr19ko/Ece3t7/ve//1GhQgX69evHgAEDkEgkNGvWjPv375t3+5s4cSIJCQmEhYVx8OBB3nrrLQD8/Pzo378/3bp148033+T777+nTZs2v5mniIjI3xC9/uU/ryl/6dDQ35XHjx9z8eJFWrVqVaL5iEND4tAQiEND8JoPDW2Z9dJxZT1nFzu/kuC1eLP470bZsmVLvBEQERH5m/AaD/m8LGJDICIiIlIcXuNloS+L2BCIiIiIFAexRyBSkqiOXC0BzQFcjy31ynXrXfrtLTv+LIvrzSgRXRtJyYy7q4RXP+UWrrLeJ+pV4OVi/Qb3q6BmsvULga8Cf7ff36Dxj9LxVYi8xpPAL4vYEPzLKIlGQMRESTQCIiZKohF4ZYg9AhEREZF/OeIcgYiIiMi/G6Ph798TFBsCERERkeIgDg2JiIiI/MsRh4ZERERE/uXoxFVDIiIiIv9uxKGh/z9OnjzJ+vXruXLlCjqdDh8fH/r3709ERIRV3MIm9AVZvXo1Dx8+ZM6cOb+bZ3Z2No0aNeKtt95iyZIlvxu/xBAEFJFjkPhUBq2G7JVLMKSY9rCX+FRGMXi4OaqtfwBZUdPR3UjCcfwMBDt7DM+ekr18IajVFpo+C4YgD6iEUaPl5vhPUSc/MgdXnDsQp5BqGLJNLlFJAxZi6+qI3/IRIAio7z/h9sRos8NUYS4lJLI0egObVi22OH789FmiN36FrURClw6t6BbRlly1msmzl/AsLR2FXEbU9HG4uxXylRUE2s4bQJkAb/RqLfsmrSPtzmOrOD02TeDa4VjivvyeBpEd8Wti2oTQwVmBorQLy0OGWaVpPa8/ZQO80al1HHiB7tubxnP9cCw/f3mU+pEd8TXrylGUdmFlyPAC0QU6zBvAG9W90Wm0fDtpHc8KaQqCQJ+NE7j6XSwXvvwegPFnV5Kadw3uxd3gyOKvrcpRfdFAHGtUxKDWcmXsGlTJ+br+Uf1xDfFHl3fNLvZbgu/Et3GqYfK4ti/jijZTyfl20610y34wDIdqPhg1WlKmLUd7N8UcrGgcjMfwXgDkJtzg8exPEWT2eH40EYmrEwZlLikTPkSflml1jqtWLiCoVgBqtZoh703g5s1kc/iokYN5523T7/fAwaPMnfcxDg4OfL55BWVKe5CVlc2AgaN5+vSZheaMRRPxr1EFjVrDrLHzuZucbwz036E9aNvZtPHjySNniP5oPS6uziz8ZDaOTgrS0zKYNW4+z56+2BL0D/MP2K7tb9EQ7Nmzh7lz5zJ16lRWrFiBTCYjLi6O8ePHI5VKzVtCvwzvvffyG7nt3buXpk2bcuzYMdLS0l7KjKYksKvfCOzsyJzwPrb+ASjefZ+sKJM1pf72DTKnjjbFa9gUu2epaOPOIR8yEs2JI6i/P4hDt144tIkg99ttZk23NqHY2EtJiJiCY92qVJzVn2sDFprDFYG+JPaaY2Eb6fvRMB5/cZjUXaco3asl5YZE8GD5dqvybvhyGzEHjyJzsPQe1up0LFqxlq3rliOXOdDnvXE0bRjGvu+OU8WvEsMG9mH/keOs2byVKaMtr5N/63pI7KVs7vIBnnUq03J6b7YNtjSaaTq+Ow4u+V7LP0bH8GN0DABvbxjP0YXWG4xVbV0PW3spn3eZjWcdP5pP78WOwR9bxGkyvjuyArpno2M4m6fbfcM4ji3cahG/WiuT5mddP6BCncq0nt6bLYXK2mJ8d2Su+ZruFcuSEp/Ml4M+sirjc8q0DcHGXsr59jNwqVeFqrP7crFf/ot8ToE+xPWYj7bANbs2YzMAgq2EkJjZXB23xkrX8a0G2NhLufPOOByC/CkzeRAP3p8LgI1CRpmJ73K372T0aZm4D+qGxM0Z54hm5CbcIPWTLbh0aUmp93vya5SldqdObXBwsKdR4wjCQuuyZPFMuv7nXQB8fLzp2bMLbzbsgNFo5MSxXez+9iAtmocTH5/InLlLefvtCKZOGcXYcfmburVo2wR7ezt6tx9ErXo1mTB7FCP6TQCgQkVP2ndtQ8+272I0Gvlizxq+P3CCiO7tiDv3C58t30z9xiGMmhrJrLEv7yHwu/wDegR/+TbUv4dWq2X+/PlMnTqVLl264OLigp2dHfXr1ycqKgpBEJg8eTJjx46lUaNGREZG/qbeypUrmTx5MtevX6du3bqoCzwlDx06lM8//9z8944dO+jYsSPh4eFmQ3qA+/fv06hRI0aMGEFoaCixsbGkpqYyatQowsLCaNWqFbt355vFF9fE3jagFtrYcwDokq5gW8XfOpK9A7JeA8hZuwIAaUAgmrw02gs/IQ2qZxHdObQ66cdNdoDZcddwrOWXHygIOPiUw3dxJDW+nU/pHs0BkFWtQPpRkxNW1rmrOIUWbYjt5VmOZfOnWx2/lXwP7wqeuDg7IZVKqVurBrEXE4i7mECjMFP5wuuHcPa8tU2hV4g/t06Y3lh9+PMNytXysQiv1i4Uo9HIzePWb7X6twkmNyOHWycvv0D3Up7uTStd/3YhGI0Gbh6/ZJW2ap7u7UK6FUP8uZ5X1vs/36B8oKVmQNtQjAYj1wuU1TPQB6c33BiwZRp9Nk6glG85q/xcw/x5esyUJiP2Os5BltdM7vsG1T8cQkjMHDx7NrU8z4FtSD1+ycKK8znyejXIPmXyYM69mIRDYBVzmKxOddTXkikzeRDeXy1Gl5qGPi2TtM3fkhpt6rHYepZGn2r9hN3ozVAOHT4GwE/n4qhXN3+L+Hv3HtK+Q28MBgNGoxGp1JbcXDUNG4Zw6NBxAA4ePEaLFpb+3nXDgjh97CwAl2LjqRFUzRz26MFjhvYcZda0ldqizlXjV9WHU9//CMDP5y5RNzTIqqzFwmB8+c9rymvfEPz888/k5OTQvn17q7AmTZrQpk0bAC5evMjevXtfeginSpUqVKhQgVOnTgGQmZnJ2bNnzb2LGzdu8PDhQxo3bky3bt34+uuvLWwmnzx5Qr169Thx4gRBQUFMnDgRd3d3Tp06xYoVK/jwww+5eNH0ox09ejTdunXj7Nmz7N69m2PHjnHmzJmXrgNBLseozDdeNxoMUGjLY4dW7dH8cBxjZoYpjUyOUZltiq9SIigUFvElTnL0mfkG9UaDASSmr4ON3J7HG/ZzY8QyrvaaQ9l+bZBXr4gy4TZurUIAcG8dio3c8on/OW81a1SkD3VOTg6OBcqhkMvIys4hR6nE0VFhPpadY20yb+8oQ13AzNygNyDklbd01QrU6PQmJz6y7p0AvPl+BKeW7SwyzM5RZvb0Lazrkad78iNrI/HnuqeX7XqpstrkaZapWoFand7k6FLLsmb9ms6pT/ewsWcUJz/5lm4fWz/Q2DrJ0RW8ZgXKKpHbc2/9IeKHrSSux3y8+rfCMcAbAEEqocJ/W3Ln05giz8PGUY6hQB2gz/8uSNyckYfV4tclG7k3aCbu/TojrVQ+78QMeG1egFvfCLJPXLDSdXJ2JDMjv3ei1xuQSEzfW51OR2pe47F44Qx+/iWB69dv4ezkREamaYgpKysbF2dnC02Fk4KszGyLus3X1JP+zPT9Hz9rJFcvX+POrXskJlyjWWtTg9KsdTgy2Sveglz0LC55njx5gqurK3Z2duZjHTt2JCUlBYPBQOnSpalTpw4NGzbE1dX1N5Ss6dChAwcOHKBly5YcOXKEunXrUrp0acDUG+jUqRNSqZQGDRqg0+k4c+YMDRs2NKdv164dMpmMX3/9lbNnz7Jq1Srs7OyoVq0aXbt2ZefOnQQFBbFp0ya8vb3/tIm9UalEkMnzDwgCGCx7FHZNWpK9cGZ+GpUpjVGjMf2bk20RX5+lxKagkblgY7oBAAaVhpR1e83j/5k/XEYeUIk7szdTKWoQHp3DyTh9yWLY6GVQKBQolfk3nBylCmcnBQq5HKVSZT7m5OholVadrcJOkf8DFmxsMOaVN/A/4TiVdaPPlqm4VCiNXqsj/f4Tbp24hEeV8uRmKq3H/fPQZKuwU8heoNsIp7Ju9NoyFZcKHhi0OjLuP+XWiUuUquJJbmZOkbpFldWQp1m7azjOb7jRf8tUXCuURq8xlfXOT4kY8nqJdy9cw+kNdytdXZYSW8eCuoK5rHqVmrtr95uv2bPTCTgFVCT7yl1KNQ4k7exVdAUap4IYspXYFKgDbPK/C/r0LHIvX0efN6auPB+PQ3VftMmmOap7/aZg51uBCmtnc6vlQAvdrMxsHJ0cC8jaWPSE7e3tWffZR2Rl5TB8xBQAMrOyzNffycmR9IwMC82crBwUjvm/BaGQpp29HfOWTScnW8ncSab5qc+Wb2Zq1DjWbVvJ6aNnefSw6O/Cn8X4D1g19Nr3CNzd3UlPT0erzd94KyYmhgsXLhAdHW0+7uHh8Ye1O3TowPHjx1Gr1Rw4cIAOHToApqeVPXv2sG3bNho2bEh4eDhPnjxhyxbLMebnjcajR4/Q6/WEh4cTHBxMcHAwX3zxBY8fm75wcXFxtGzZkoiICNatW/eHTex1Vy8jDQ4DTJPB+ju3LcIFuQJBKsXw9In5mPZKPHbBJoc3aXAY2gTLoY2s84m4Na8LgGPdqqgS75jDHHzLUWP3fLCxQbCV4BRanZzLt3BpHMSDpd+Q2HsuGIxknPxjm4v5VvLizv2HZGRmodVqib0YT1DN6tSpFcDJH88DcOrseeoG1bBKe+/CNfya1QbAs05lniTlD3EcXbCFTZ1n8b8eUVzafpJz6w6Yh3sqNaxZ5HDRc+5fuIZfs6A8XT8L3WMLtrK58wd81SOKy9tPWej6NKxZ5HARmG7kVfPKWqFOZX4toHl44RbWdp7Fxh5R/LL9JGfWH+DGiUs0Hd2VBu+aeqNlq3uT8TDVSjf9XBIeLeoA4FKvCtlX75rDFH6ehMTMARsBwVaCa5g/mZdN3xP3xoGkfv/LC+tAFXsFxybBADgE+aO+lmwOy42/jl2VikjcnEFig6x2NdQ37uI+9G2cO5mGDA3KXHPDUZAffjxP2zamOGGhdYmPt9xEcdeODVy6dIX3h03CkDfOfubMBdq2NaVp06YZp0+fs0jz87lLNG5hsqutVa8m16/esAhftXkJSQnXmT1hoVkzuEEd9mzbz6DuI3hw9yE/nyv6uv1p/gFDQ699j6BevXrIZDIOHz5c5PDQcwThj+8m6enpSbVq1Thw4AAXLlxg6VLThN7x48dxc3Nj48aN5riPHj2iR48e5pt7wTw9PDyQyWScO3cOGxtT2/rkyRMkEgmPHj1i5syZVib2fwTNj6eQ1g7GefEnIAhkL1+IQ6e30afcR3vuDDblvTD8+sgijeqbz3EcPQX7Vh0wZmaQ9eFci/BnB37CpXEQNfbMBwRujl3FG0M6ok5+RNrh8zzddZKaexdi1Ol4su04qmv3kCgc8F06DKNGhzLpLslTP3up8u87fAylSkX3Tu2YOGIwQ8ZMw2g00qV9K8qW9uCdLu2ZNu8j+kaOQ2orZfEH1i5qSQcv4NsokH47Z4EgsHf8GkIHtSUt+THXj8S9MO9SfuW4fcp6bqCgbqVGNem7cyaCILB3/FpC8nRv/Iauu185bp+KLzLs6qEL+IUHMmjHLARBYNeENbw5sC2pdx6T9ALNU5/uoduy96navDYGnZ5d41dbxfl1/3lKNalFyN45IAgkjIrGe2h7VMmPeHIolpQdpwndH4VRpyPlm5PkJJlW08j9PHn4zckXnkvWd2eQN6yD99YPEQSBlCkf4zagC9o7D8k++hNPlm7Ca73p+5N54BSa63fIeJZBuUVjce3WCiQ2pEz52Ep39+4DtGzRmFMnvkUQBAYOHsPoUUO4cfM2EomExo3rY29vR5vWzQCYNn0hq9dsZuOG5Zw4tguNRkuf/1qu8jqy/zgNmoTyv72fIQgC00fNpd/QntxNvo+NjQ3BDeogtZPSqHkDAJbN/5TkG3eYv8o04fxryhNmjIl6YV38KV7jIZ+X5W9hVblnzx7mzZvH5MmTadu2LXZ2dpw7d45FixYhlUrx8/OjfPnyjBgxAjAtH/36669Zvny5hY6HhwfR0dE8ePCAhQtNK2S2bNnC6tWrCQwMZNWqVYBpZVFgYCDDhll+Cd955x3Cw8Pp3LkzLVq0ICkpyRzWu3dvQkJCeP/990lLS+Pdd9+lS5cuNGvWjK5duxITE0P58uXZuXMnM2bMYM6cObz99tu/ed6pHZsUu+4KU1K7j/7ttqHm1W9DXVK7j4ardCWi+3fahrqkdh9NePxTsTVy5vR+6biKmV8WO7+S4LXvEQBERERQrlw51q1bx+LFi1Gr1VSoUIEOHTrQt2/fIt8J+OWXX2jSxPJGun//fqt4bdq0ISoqyjws9PTpU06dOsXEidZPpREREaxdu7bIdxeWLl3KvHnzCA8Px8bGhk6dOpkN75+b2AuCQJ06dUQTexGRfxL/gOWjf4sewb8VsUcg9ghA7BHAa94jmPHbPfuCKOZ+U+z8SoK/RY9ARERE5LXlNZ4EflnEhkBERESkGBj/AUNDYkMgIiIiUhzEHoGIiIjIvxyxIRApSXRZr35C09amZLqxJTWpOzF27u9H+hPozu7+/Uh/kBnDz79yTYDvZCXz3qeb2vrt5VfB1lJNX7nmcfuSmTB/Jbzi9wguXrzIrFmzSE5OJiAggIULF+Lt7W0Rp3379jx8+ND8t1arpXz58hw6dIjs7GxCQkJwcMh/C33kyJEMGDDghXmKDYGIiIhIMTDqXl1DoFarGTZsGJMmTaJ169asXbuWyZMn89VXX1nE27dvn/n/WVlZdOnShcmTJwOQlJRElSpV2LNnz0vn+9pvMSEiIiLyWvMKt5g4e/Ysrq6udOzYETs7OyIjI7l+/fpvvne0ZMkS6tevT7Nmpje0ExMTqVat2gvjF4XYIxAREREpDq9w1dDt27fx9fU1/y2RSPDy8uLmzZv4+flZxb958yb79u3ju+++Mx9LSkoiOTmZ1q1bo1Qqad++PWPHjrXYuLMwYo9AREREpDi8wh6BUqm0GNsHkMlkqFRF7xy7adMmunXrhrt7/nyPXC4nNDSU7du38/XXX3P+/HnWrLE2JCqI2BCIiIiIFIdX2BDIZDJyc3MtjqlUKhSF/EQANBoNBw4coFu3bhbHJ0+ezPjx43FycsLT05MhQ4Zw9OjR38xXbAhEREREioFRb3jpz+/h6+tLcnKy+W+9Xs/du3fx8fGxihsXF0epUqWoUqWKxfEVK1Zw717+1ucajQZ7+6JNpJ4jNgQiIiIixeEV9gjCwsJITU1l9+7daDQaoqOj8fb2LnJ+4NKlS9SuXdvq+JUrV1i6dCkqlYoHDx68cKPMgvylk8UnT55k/fr1XLlyBZ1Oh4+PD/379//dQv9/odfr2bhxIzt37iQlJQU3Nzc6duzI8OHDkUql/38FEQScxozB1s8PtFoylyxB/+CBOdguNBRF//4A6K5dI2vZMgSFApeZMxEcHDDqdGRGRWF49sxC03v+UOQBlTBqdCRPWIU6Od/TwLlZXTzHvAOA8vIt7k5bg+Bgh++KMdiWcsGQo+L26OXonmValbXtvAGUCfBGr9ayb9I6axcvQaDHpglcOxxL3Jff0yCyI35NTH62Ds4KFKVdWB5iuQX4cy4lJLI0egObVi22OH789FmiN36FrURClw6t6BbRlly1msmzl/AsLR2FXEbU9HG4u1m62BkMRubvPMW1h6lIbSXMersJ3h4u5vDNxy5y8JcbCILAoBZ1aB7oQ5ZKzeT/fY9Ko0UqkRDVqzkezgVcswSBrvPepVx1b/QaHd9MWktqoToQBIGBGyeS8F0sP355BDuZPb1WDEfu4ohGpWbLmE/IKeQAJwgCXfJ0dRod21+gO2DjRK58F8vZL4+Yj5f282T4rrnMDXkPnVpLoUS0ntefsgHe6NQ6Drzgmr29aTzXD8fy85dHqR/ZEV/zNZOjKO3CypDhVmnqLByAa4A3Bo2WC+PWkZOcrxs09794hFZFl20a//6h/1Kzi5pH/WqErnqf/cEjrc7vnXkDKV+9IjqNli8nreFpEXXw3sZJXP7uAqe/PIKDk4x+H4/AwUmGrdSWnfM+53bcdV4Vxlf4QpmDgwNr1qxh1qxZzJ49m+rVq7Ns2TLA9O7A0KFDzffHhw8fms2xCjJv3jxmz55NkyZNkEgk9OjRg549e/5mvn9ZQ7Bnzx7mzp3L1KlTWbFiBTKZjLi4OMaPH49UKjV7B/+VjB07lidPnrB8+XKqVKnCvXv3mDBhAo8fPzb7Gfx/YN+oEYKdHWnDhiENCMAxMpKM6SZzeEEmwykykmejR2PMyEDeoweCiwsOLVuiu3WL7DVrkLVvj/ydd8iOjjZrurYJw8bejsROk1HUrUqFGQO4OXABADYKB7ym9SOp+3R0aVm8EdkFW3dnSv2nKarEOzxcuhW3iEaUG9Wde7PWW5TVv3U9JPZSNnf5AM86lWk5vTfbBi+1iNN0fHccXPLHPH+MjuHHaJOf7tsbxnN0oaUT3HM2fLmNmINHkTlYdnO1Oh2LVqxl67rlyGUO9HlvHE0bhrHvu+NU8avEsIF92H/kOGs2b2XK6Pcs0h6Lv41aq+fzkV24dOcxS/f8yLJ3TT7YmSo1W07HEzOlByqNjneWbqd5oA97zl+j8hvujOlYnx1nr7L5+EXGRTQwa9ZoFYytvZRVXWfhXacyHaf3YdPgjyzybTP+beSu+TaOYT2b8+Dybb5bsZPgbo1pOaIL387+3CLNc91P8nQ7TO/D5kK6rQvpgslDucO0Pug1hRqAPKq2roetvZTPu8zGs44fzaf3YsdgS6OZJuO7Iytwzc5Gx3A275p13zCOYwu3Wul6tjV9F451/AD3upUJmtWbMwPyvwtutSpxqudCNM8sbVRlnu5UHdoOG6mksCS1WoVgay/lo64zqFSnCl2n92XtYMudbzuMfwdFgTpoPqgDSWfiOb5hP2V8yzFgxSgWdZhcZF38KV7xm8U1a9Zkxw5rn+yC7w4AfPDBB0Wm9/DwYOXKlX8oz79kaEir1TJ//nymTp1Kly5dcHFxwc7Ojvr16xMVFYUgCCiVSqZOnUrz5s2pVasWXbt2NRvBTJ48mbFjx9KoUSMiIyPR6/UsWrSIVq1aUbt2bdq2bctPP5m2lzUajXz88U1VWI4AACAASURBVMeEhYXRokUL1q5dS/Pmzc1liYmJoU2bNoSGhjJ8+HBSU00WgT/99BMnTpxg1apV5jE4Ly8vFi1ahFqtRqPR/Ga+K1euJDIykhYtWtC5c2dycnIYMWIEoaGhNG/enIULF760XaU0MBD1OZNln/bKFaT+/vlhNWuiu3ULp8hI3FaswJCWhjEjA92tWwhy01OqoFCA3tJX1TGkOhnHTW5ZOXHXUARVzg8LroYy8Q4VZg7Af8d8tE/S0T37P/bOOyqq42HDz9KXDqIiAgoo9oIIqGDvGkWwG43GEqPBqLERNRJUCGqsMTH2Eo29t4i9o4CIERHEgiJCkM6ylC3fH4sLy2I0UT+Nv33O2XPgzsx7Z+fevVPuzLw5GLuXpsk5ewNTryZqebVzq8OD84ptiJOjEqjWWHVss24Pd+RyeYX2kXW6NacgW8SDCxU7itnZVGNZ8Gy14w8ePcHe1gYzUxN0dXVp1rgBkdEx3IiOwcvDFYDWLdwIC49SSxv1MAXPunYANK5RlZgnpXafQj0dqlkYIy6SIC4qVjrS1a5mSX5Jq1pUUISOlurPyMGtDnElZfA4KgG7Ro4q4Y27uyOXybl7rtQ+8uKG45xauR8ACxsrctNUvXoBapbTtS2n26hEN+6cqi1l3x9G88eiHRQVFKlpwotrprBvTI66r3bN6vRwQy6XVWjN6VxyzR5WcM2s3OuQclaR34wbCVg0KaMrEGDsYI3rotG0OxhAzUGKLde19HVptmAkN77dqKYH4ORWh9iSMngUdQ/7RqpDJk27eyCXyblTpgzOrj/K5W2K6ZVa2toUF1ZcDv8a2T/4fKC8l4ogKioKkUhUofVk27Zt6datG+vXrycjI4OjR48SHh6Og4ODyhSo6Ohojhw5wqJFizh48CDXrl1j9+7dREZG0qFDB6Xt5J49ewgNDWX//v3s3r2b06dPKzVu3LhBcHAwS5Ys4eLFi9jY2DBjxgwALl++TLNmzVSmZQHUqFGDpUuXoqen97fnBQgPD2fTpk1s3bqV7du3o6WlxeXLl9mxYwcnTpwgIiLitcpLy8gIeV6ZVpNMBtqK1pKWmRm6Li7krVlD1owZGPbrh7atLfKcHPSaN6fSpk0YDhqEuFxrQtvEEGluqZG8XCoDbcXtoGNpimmrRiQFb+HesLlUHd0LfQcbtI0NkeYo0kjzxGiXGQ55gb6xkMIyJukyqQxBiW5lZ1saeLfi/OI9FX7PVuN7c3HZvpeWQ+f2XujoqHdiRSIRxmVmVRgZCsnNEyHKz8fY2Eh5LE8kUk9bUIyxQen8am0tLSRlXupVNTfGd+EuBi3dy2CvhgCYGRlwNT4J34U72Xwumj4eqot3DIyFFJQpW5lUhlZJGVg72+Li7cmJJbvV8iKXyfny99l4Du+qUkm8jm5VZ1uaensSWk6386S+3D0TxbMy/sbl0TMWUlhO98U1syq5ZhcWq7dQQXHNLi3bX2GYrrFQOdSj+H6lujqG+iRsCOW63y9cGrIAxxGdMKtnh0vQcOJXHaMgJbNCTQNjQ8QvKYNqznY09/bi6BLVPf/FOfkUFxZjUtmM4cv8OLSw4h7nv0Uuk7/250PlvQwNpaWlYW5urrLAoVevXjx79gyZTEblypXZsWMHAoEAHR0dkpKSMDU1JSGh1Kja09MTc3PFeG+XLl1o27YtxsbGJCcnY2RkRFqaomV3+PBhRo4ciY2NDQB+fn4EBCj8Sw8cOMCAAQOoX78+AJMnT8bV1ZXnz5+TlZWFhYXF336PvzsvQJMmTbCzU7Q2TUxMiImJ4fjx47Rp04bTp08r/Y1fhUwkUrbuAdDSUrbwZTk5SO7eVY7/F0dHo1OrFgYdOpC/Ywfiw4fRcXTEbO5cMkaNUkpIc/PRNhIq/xdoCZQG5JLMXETRCUjSsgDIvRaDYQMHpHn5aBsr0mgbC5Fmqz9YC/PE6BkZlNHVUs6WaNS3NSZVLRi6fSZmtpWRFkvISkrjwflbWNWuTkFOvvrY9GtgZGREfn7pw0GUL8bUxAgjQ0Py88XKYybGxuppDXQRlRkzl8nl6JQ8WC7HPuF5Tj5HZynGV8evOUZTB2s2noliRPsm9GtZn/jkdKZuDmX31P5KjYI8MfrlylZWUgauvm0ws7bky+2zsbCtjLRIQkZSmrKl/+uQ+VR2smHUhumEtJ2kktfX0f2inK5LHy+yUzJwG9gek8pmjN7yLb8OVHX0K8oTo6eiW/aaeWFS1YIh22diZmuFrFhCdtJzHpy/RaXaNhTkiF56zYrzxOiUuRcQlOpKxIUkrP0DqVjROk+7dAfzhjWx8qiDsUNVmOKDnrkxHqv8uDZuZZkyyEdf5f4qLQN33zaYW1vw9fbvsCwpg/SkNGLPR2NTx47Pf5rI/uCtJFyLrTC//xrJh/uAf13eS0VgaWlJVlYWxcXFypeuhw8rxhuvXbvGt99+S05ODgEBAcTGxuLo6IhQKFTRsLKyUv5dVFTEnDlzCA8Px97enipVqijDUlNTsba2Vv7/okIAePbsGQcPHmTbtlIfUR0dHZKTk6lUqZLKFKyyZGRkYGlp+bfnLZ/H/v37k52drdw7pE2bNgQHB6v1OCqi+PZt9Fu1ovDcOXTr10fy4EFpWFwcOg4OCMzMkOfloVu/PvlHjyLPzUVW0gKWZWWhVW4ecl7EXcw7uZF55DJGzZwR301UhuXfuo+wjj06FiZIckQYNatD2u8nyQu/i1kHV0Q372Havhm51++o5fVJRDy1OzYj9ug1bFxqkRZXWoZnfihtibWe5IsoLVs5JFHTs2GFw0Wvg2NNOxKTksnOycVQaEBk9G1GDOlLcspfXLgaTqP6dbgYFk6zJg3U0jZ1sOZ8TCJdmzpxKzGV2tVKr4epoT76utro6WgjEAgwEeqRKy7EVKiv7EVYGgvJKzfk8iginvqdmhF9NAx7l1qklCmDoyGle8Z0mdSX3LRs4s5H02G8N1nP0rmx/xJF+QUVTjV8oXurAt1jZXQ7l+jGn49mYbvJyuP+l1aw7rMf1HSTIuKp1dGFu0evYePipHLNzv5QOvbvNckXUVqW8po5eDascLjoBenh8VTr3Iykw9ewbFaLnLuluiZO1fBY5cepLrMQaGlh5e5M4q4LnGg9TRnnk+ifVSoBgAcRcTTs5ErU0TBqutQmOa60p3MwpPR33GNSP3LSsog9H411reqM/GUyG/2W8zQ2kbfNh9zSf13eS0Xg6uqKUCgkNDS0wuEhgMDAQJo2bcqGDRvQ0tJi06ZNKsM6L8ZrAZYuXYqJiQmXL19GV1eXU6dOERwcDIC1tTUpKaWzYVJTS1svVlZW+Pn5MWbMGOWx+/fvU6NGDYqKiti4caPyof+CxMREunXrRmhoKGvWrHnpecvn8f79+/To0YMvvviCp0+f4u/vr6wUXkXhxYvoNW+OxcqVIBCQs2ABhv37I336lMIrV8hduxaLhYpZNAXnziF9+JC8DRswnTYNQ29v0NEhZ9EiFc2s42GYtm5C3QMhIIBH3/xE1TG9KXj0jOyT4SSF/Ebtbd8DkHnkEgVxjylKTKHmsonU2ReMvFjCA78l5bNK3B8ROHo1Yvi+ABAIODJ1Ne6ju5P5KJV7p2689DtWcqrGw4sVvxt4GUdDz5IvFtPfuwfTJ4zhi8mzkMvl+PTsQtXKVgz06cms+YsZNm4Kujq6LPxe3Ye6Q0MHwuKT+GzFAUBO4MB2/Hb+FnaVTGnXsCZh8UkMW3EALYGi0mjpbEsta0sCd51n15UYJFIZc/qrWorePhGOc+tG+O0NBAHsnLaaNqN68DwxlTunIiv8Ltd3nWPQ4nF4DGyPQEuLndN+VYsTU6I7fm8gAgHsmraa1qN6kP43uq9D3B8R1PRqyLB9cxAIBByZuga3kmuW8DfXzNKpGg8v3n5p+NNjEVRp04j2hxT3QsTk1dQe2528h6k8C73B431X6HA0EHmxlMQ9l8iJf/pSrRdEnwinbuvGfLN3LgKBgK3TVtFhVE/SElP48yVl0HvGYHT1dekXMBwAcW6+2gvmN+IDHvt/Xd6bZ/GhQ4eYP38+/v7+dO/eHT09Pa5fv86CBQvQ1dVFLpfTuXNnxo4dS0JCAuPGjaNSpUrs2LEDf39/qlevzoQJEwCYOHEi5ubmBAQEkJqaytdff01KSgoXL15k7969bNiwgXXr1iEUCvHz8yM5OZkzZ85w9epVZs2axdq1a3FwcOC3335j1apVnD17FqFQyLhx48jJyWHevHk4Ojpy7949ZsyYQe3atVmwYMHfnvenn37i6dOnytlFS5cu5fbt2yxfvhxtbW2++uor3NzcGDdu3EvLKLVdu7de7k8SzF8d6V9wQlt95ePbQLMN9bt7kWchV5+V8zaoXfT2HynvahvqlY92vrFGhs/re4tb7j//xud7F7y36aO9e/emWrVqrFu3joULF1JYWIitrS2ffPIJw4YN486dO8yePZtff/0VGxsbvL292bZtGxKJ+g0xYcIEpk+fjqurK1ZWVgwYMIDly5eTmZmJj48P9+7do1evXpiamtK5c2flOH7Lli356quvGD9+PGlpaTg5ObF69WrlMNTy5ctZsWIFo0ePJjMzE0tLS7y9vfnyyy9fed7yjB07ltmzZ9OxY0ekUikdO3b82/3BNWjQ8B9B0yP48ImNjaVy5crK8foLFy6wcuVKdu3a9YqU7x9Nj0DTIwBNjwA+7B5Beq/X7xFUOvxh9gg++i0mzpw5w8yZMxGLxeTl5bFlyxZatWr1vrOlQYOGjwS55PU/HyoffUXw+eefY2JiQrt27ejYsSM2NjbKoR0NGjRoeGM+ggVlH70xjaGhIYsXL351RA0aNGj4F7xly+L3wkdfEWjQoEHDu0RTEWh4p4iz3v4OpxnFBq+O9C/Q0ha8OtK/4F281AXQadHnrWtWl718zv2b8K7Gb29rFb4TXV3dv9/7/t+QIq/YoetDQFMRaNCgQcP/OHLpu2kE/X+iqQg0aNCg4Q2QyzQVgQYNGjT8T6MZGtKgQYOG/3Hkck2PQIMGDRr+p9H0CDRo0KDhfxzNOwINGjRo+B9Hppk19O+5cOEC69ev586dO0gkEhwcHBgxYgS9e/d+X1lSIy8vDy8vLzp37syicvv5/78iEFBp5tfoOjtCcTHPA5cgeZKsDBZ6umE+dhgAhXfvkRGsMK62Dd2O5LFij/eC6Dtk/bRBRbPegpGYNKiBrFBCzDerET8q9WqoEzQcC7c6SPIKALg5fBFyqYx6C0YhtK+Clp4OsTM3khN1Xy2vXeePoGp9eySFEo7PWKfuYCUQMGDTVO6FRhK17QwtxvXCsW1jAAxMDTGqbMZPbn4qSWQyOcH7LhKfnI6ujjYBA9pib2WmDN98Npo/biYgEAgY3dGFDo0cyBUX4r/1NOKiYnS1tQka0gGrCuw1b8XcZcmqDWxauVDl+LlLYaza+Ds62tr4fNKFfr27U1BYiH/gIjIyszAyFBI0ewqWFuU28hMI6Bg0Aqt69kiLJJycvo7sCsqgz6apPDgZya2tZ9A3M6L78nHomQgpyMzj5Iz1iNNz1NJ0KKN76iW63iW6f5bodivRFWfmcboCXYFAwKfzR2NbryaSomI2z/iVtMQUtTgTNn5L9Mlwzpf4/wK4dHXHtUdL1k1crlauCAR0ChpBlZL8npi+jqwK8tt301QSTkYSvfUMeiZCeq30Q8dQH1mxhKMTV5Ffxr9ZIBAwZv6X1KjvgKSwmFUzVpKS+EwZ3u2zHrTr1xG5XM6e5TuIPBNBn3F9cWnbDABDUyPMK1swxm24en7/JR9Dj+C97DV06NAhpkyZQp8+fTh16hTXrl1j+vTpLFy4kOPHj7+PLFXIkSNHaNeuHWfPnq1wa+n/LwzbeyLQ1yNl+EQyl6/H8puxyjCBoRCLyWNI/Xo2zz77GklyKloWZujY2VAUe4+U0VNJGT1VtRIAqnRvjpa+Htd7zuFe0O/UCRymEm7ayIHIQT8Q4TuXCN+5SHLF1Bzfi7y7Twj3/p6YKWswcrKhPM5dXdHR12WLTyDnFuygw+whanHaTu2P0Kx0t9KwVYf5fVAQvw8KIjclgyNTVqulOXv7IYXFUrZ87cPEnh4sOXRVGZYjLmT7pdtsmdCHX7/oyaKDVwA4FB5PLWtLNnzlTZemTmyuwAFtw7bdBIQsp6icoXmxRMKCFWtYszSITT8vZPfB4zxPz2Dn/qPUdqrJllU/0qt7R1Zv3qGmWaurK9r6uuz0CeRSyA7afqdeBp7T+mNgXloG7n69eRoez66+87i5KRTP6QPU0jiV6O7yCeRyyA5aV6Dbqpyum19vksPj2d13HtGbQmlVgW7TLm7o6usR4juLfQu2MWD2Z2px+kwdhJG5qtXnwIDP8Zk+RGFzWgG1S+6F330CuRCyg3YV5NerXH4b9m9DWtwTdvafz93DYbiPVTWucu/aAl19PWb5TGfrgi0Mnz1SGWZiYULXYT2Y5TudwCHfMSZI4fVxYNVeAgbNImDQLDJS0lk5ZVmF+f23yOWv//lQ+X+vCIqLiwkODmbmzJn4+PhgZmaGnp4eLVq0ICgoCIFAQH5+PjNnzqRDhw40btwYX19f4uLiAPD39+ebb77By8uLcePGIZVKWbBgAV26dKFp06Z0796da9euASCXy1m6dCkeHh507NiRNWvW0KFDB2VeDh8+TLdu3XB3d8fPz4/09HSVvO7du5devXrRunVr9u0rNVVPSkrCy8uLCRMm4O7uTmRkJOnp6UycOBEPDw+6dOnCgQOlK2Jv3brF0KFDadGiBa6urnz77bdISzyHXwd9lwaILyu2OC78Mxa9Bs6lYU0aUHTvEZZTxmK9YQnS9Exkmdno1auNdhUrqq5dRJWVQejUsFXRNPeoS/pZhUF6dmQCpk0cSwMFAgwdran/4xjcDgdiM7gdAJXaN0ZWLKHZjm9xnOxLegUPVju3Okorw+So+1Rr7KASXqeHG3K5rEKLQ+duzSnIFvHwgrpTWdTDFDzrKvyfG9eoSsyTUm9ooZ4O1SyMERdJEBcVK53halezJL/Ej1hUUIROBR7RdjbVWBY8W+34g0dPsLe1wczUBF1dXZo1bkBkdAw3omPw8nAFoHULN8LCo9TS2rjV4VHJ90uJuk/VcmVQu4cbcplMGQegUu3qPCopz6fh8VR3c6Y8Nm51SPwb3Vqv0E0Oj8emAt3abvW4fV7xPR5E3aNGIyeV8GbdWyCXybl9TvW73o+MY9vstWp6L6juVoeHJXl5VkF+nUvy+7BMftPuPlF6XusbC5FKVH8ndd3qcfO8YgX3vag4HBvXUoblZuYypdvXSCVSzCubI8pR9dT26NaSvOw8oi+oX7M3QS4TvPbnQ+X/vSKIiopCJBJVaFHZtm1bunXrxvr168nIyODo0aOEh4fj4ODA6tWlrcTo6GiOHDnCokWLOHjwINeuXWP37t1ERkbSoUMHlixRWCju2bOH0NBQ9u/fz+7du1WsLm/cuEFwcDBLlizh4sWL2NjYMGPGDGV4QkICycnJtGnThn79+rFz507KWjekpaXh6urK+fPnadKkCdOnT8fS0pKLFy+yYsUKfvzxR6KjFT/ASZMm0a9fP8LCwjhw4ABnz57lypUrr11mWkZGyPLK3NRSGZQYrGtbmCJ0a0LmsnWkfjUT00990bGvjvR5BtkbdpA6ZhrZ636ncrCqJaaOiRBJTumyfblUhuCFpqE+j9ef4M+vVnJj0A/YjeiMcX17dC1N0DUz4sagH0gLjcQ5YKhaXvWMhRTmlhrJy8roWjnb0sC7FRcW763we7Ya35tLy/ZXGCYqKFb6BANoa2khKePrW9XcGN+Fuxi0dC+DvRoCYGZkwNX4JHwX7mTzuWj6eNRV0+3c3gsdHfURUpFIhHEZn2cjQyG5eSJE+fkYGxspj+WJRGpp9YyFFL2kDCo521LHuxVXypVB2p3HOHVWDF84dWmGjlCP8pQvW3kFulcr0HUs0XXs0gzdCnQNjIWIy+VXq0TXxtkOD28vDi5R37c/4sgV/s7OpHw5yMvdC3W9W3G5XH4LMvOo2aYRn59egNvYnvy545xKuNDYkPzc0jIvm9cX/3cb3pMfDiwi7Jjqb8xnfD92L1Pvwb0pcrngtT8fKv/v7wjS0tIwNzdHT6/0huzVqxfPnj1DJpNRuXJlduzYgUAgQEdHh6SkJExNTUlISFDG9/T0xNxcMS7bpUsX2rZti7GxMcnJyRgZGSkdyA4fPszIkSOVhvV+fn4EBAQAcODAAQYMGED9+vUBmDx5Mq6urjx//hwrKyv27t2Lt7c3urq6tGzZEolEwpUrV/D09FTmo0ePHgiFQv766y/CwsJYuXIlenp61K1bF19fX/bt20eTJk3YtGkT9vb25Obmkp6ejpmZGc+fP3/tMpOJRAiMhKUHtASKygCQZeVQGBOHNF0xdFV440/06johvnANeUlrqvBmDNqVrVQ0JblitI1L9x0SaAmUhulScSGP1xxHJlYMl2RcisGkfg2KM/P464TCFzYt9AYOE7zV8lqUJ0avTF4FWlpK3UZ9vTCpasGQ7TMxs7VCViwhO+k5D87folJtGwpyROrvE0owMtBFVNK6B5DJ5eiUPAAuxz7heU4+R2cNBmD8mmM0dbBm45koRrRvQr+W9YlPTmfq5lB2T+3/t2WtPJ+REfn5pQ8xUb4YUxMjjAwNyc8XK4+ZGBurpS3KE6NnXHEZ1O/nhbG1Bf12zMT0RRk8ec71nw/RPvAz+v7uz6Nzt8h7lvFKXcro1i3R7VuiKy2WkPPkOeE/H6Jd4Gf4/O5P4rlb5FagW5AnxqDMNdPSEiAr0W3p2xZza0umbA+gkm1lpEUSnielEXP+5ivL8FXlYGJtwcAy+c1+8pzGQ9pz/dej3Np2Bqu6dnivnsjmrjOVGuK8/Jfm9QV/bD7Kqd9PMGtzAA1aNiLm6p/Y1rZDlCNSeZ/wttBMH/0XWFpakpWVRXFxMbq6ik3VDh8+DMC1a9f49ttvycnJISAggNjYWBwdHZXWkS944TYGUFRUxJw5cwgPD8fe3p4qVaoow1JTU7G2tlb+/6JCAHj27BkHDx5k27ZtymM6OjokJydjbm7OoUOHKCoq4uDBgwDk5OSwfft2lYqgcuXKAKSkpCCVSmndurUyTCqV4uHhASh6HyNHjkQqldKgQQOKi4v/tiVVnsKbMRi2bUl+6AX0G9Wj6N7D0rDYe1jWqomWuSmy3Dz0G9Uld+8xzMcOQ5qdQ86mXeg6OyJN+UtFM+t6HJW7uJJ6KAwz11rkxT5Rhhk5VaPx6olc7eSPQEsLC4+6JO+6QNa1OCp3dCH31kMsWtYlLy5JLa9JEfHU6ujC3aPXsHFxIi2uVPfsD6WtMa9JvojSspTDSA6eDSscLnpBUwdrzsck0rWpE7cSU6ldzVIZZmqoj76uNno62ggEAkyEeuSKCzEV6it7EZbGQvIKil4mr4ZjTTsSk5LJzsnFUGhAZPRtRgzpS3LKX1y4Gk6j+nW4GBZOsyYN1NImR8Tj2MmF+CPXsHZx4vnd0jK4GFxaBi0m+5KflkXi+Vs4dGjKnb0XSboaS63ubiRHxKvpPouIx6GTC/dKdNPL6F4uo+tRRrdmh6bEvkI3IeIuTTo1J+LoVRxdapMU91gZtjdkq/LvXpP6k5OW9VqVAMDTiHicOrkQd+Qa1cqVw4Uy+W01WXEvPDp/izo93SnMUVTA+ek5qhUfcDciluYd3bl69DK1XerwOC5RGWbjWJ1PZ3zGorE/ICmWUFxUjFymeEo39mxC1LmKze3fFKnsv2/r8v9eEbi6uiIUCgkNDa1weAggMDCQpk2bsmHDBrS0tNi0aZPKsM6LMWBQmMKbmJhw+fJldHV1OXXqFMHBwQBYW1uTklI6+yE1tbS1aWVlhZ+fH2PGjFEeu3//PjVq1ODcuXNYWFiwceNGZVhKSgqDBg1S0XiRDysrK4RCIdevX0erZBw6LS0NbW1tUlJSmDNnDnv27MHZWTE+6+2t3pL+O/LPXEbYwhXrzcsAAekBP2I6tC/FT5IRn79K1ooNVP3lBwBEoRcovv+I7A07sAr2x9DLA7lUyvM5qrOe/joWTqW2jXA/MhcEcHvir9QY24P8R6mknYjk2d5LeBybj1wiJXnXBURxSTxYvp8GS8bifnQu8mIpf074RS2vcX9EUNOrIcP2zUEgEHBk6hrcRncn81EqCadevjunpVM1Hl68/dLwDg0dCItP4rMVBwA5gQPb8dv5W9hVMqVdw5qExScxbMUBtASKSqOlsy21rC0J3HWeXVdikEhlzOn/akvBo6FnyReL6e/dg+kTxvDF5FnI5XJ8enahamUrBvr0ZNb8xQwbNwVdHV0Wfj9dTSPhjwhqtG7IwH1zQCAgdOoamo3uTlZiKg9OVlwGGfef0W2pYhJAXmomJ6etq1DXvnVD+peU7cmpa3Ap0X34Et3M+8/oUqIrSs3kVAW6USeuU791Y2bsnY9AIGDTtJ/pPOoT/kpMIfpUxCvL7GXcKymHwSX5/WPqGlxL8nv/Jfm9tHgPXReMpulnndDW0SbUf71K+PU/wmji1ZSgfQtAIODnqcv5ZLQ3KY+eEXHqOo/uPCR4/yLkyIk6G8mdazEA2DhVJ/ri61Vg/5QPeez/dXkvnsWHDh1i/vz5+Pv70717d/T09Lh+/ToLFixAV1cXuVxO586dGTt2LAkJCYwbN45KlSqxY8cO/P39qV69OhMmTABg4sSJmJubExAQQGpqKl9//TUpKSlcvHiRvXv3smHDBtatW4dQKMTPz4/k5GTOnDnD1atXmTVrFmvXrsXBwYHffvuNVatWcfbsWSZPnkyjRo346quvVPI9cOBAWrduTZ8+fejYsaPyBTbAp59+ipubG+PHjyczM5ORI0fi4+ND+/bt8fX15fDhw1SvXp19+/bx3XffMXfuXAYMUJ/Bs/JOyQAAIABJREFUUZZHTTu/9bKPf1bprWsCRBq8mzbFpJ+bvRPdd7EN9cpmc966Jvz3tqGuI3v721CHCXJeHelfsCfx0BtrxNbu8dpx69079sbnexe8l3UEvXv3plq1aqxbt46FCxdSWFiIra0tn3zyCcOGDePOnTvMnj2bX3/9FRsbG7y9vdm2bRsSibrp54QJE5g+fTqurq5YWVkxYMAAli9fTmZmJj4+Pty7d49evXphampK586dle8PWrZsyVdffcX48eNJS0vDycmJ1atXIxKJuHjxItOnq7f0evfuzZo1aypc67BkyRLmz59P69at0dLSwtvbm88//xxtbW1GjBhBv379EAgEuLi40K1bN+7fv6+moUGDhv8emh7BB05sbCyVK1dWvlO4cOECK1euZNeuXe85Z6+Hpkeg6RGApkcAH3aP4LbjJ68dt+GDI298vnfBf/8tx99w5swZZs6ciVgsJi8vjy1bttCqVav3nS0NGjR8RMhkgtf+vA7R0dH06dOHpk2bMmTIEB4/flxhvPXr1+Pl5YWbmxtTpkyhoKCgJD8ygoKC8PDwoGXLlqxZs+aV5/yoK4LPP/8cExMT2rVrR8eOHbGxseHLL79839nSoEHDR4RMLnjtz6soLCzkq6++YtSoUVy/fp1WrVrh7++vFu/YsWNs376d7du3c+7cOTIzM1m7VrG477fffiM6OpoTJ06wY8cOduzYwdWrV9U0yvJRbzpnaGjI4sWL33c2NGjQ8BHzNheKhYWFYW5uTq9evQAYN24cmzdv5v79+zg5la743r17N35+ftjZKVbbL1y4UNkjOHLkCKNGjcLc3Bxzc3OGDh3Krl27aNmy5UvP+1H3CDRo0KDhXfM29xp6+PAhjo6l271oa2tjZ2enNrkkNjYWkUiEt7c3np6e/PLLL8o1VA8ePFDRcHBwUFmQWxEfdY/gv05OlsGrI/1TTS3tt64JIBa8mzkH3/mFvxPd6rKXr2n4t/jdmPvWNQGKt//4TnQ7h9x9J7oFOuavjvQPuVvw16sjvSdeZ8jndcnPz8fAQPV3LxQKEYvFKsdycnLYt28fq1evRk9Pj/Hjx7N69WomTJiAWCxWWYRrYGCg7C28DE2PQIMGDRregLe515BQKFR7aIvFYozK7HsFoKury7Bhw7C2tsbS0pKRI0dy9uxZQP3BX1BQgKGh+vbrZdFUBBo0aNDwBkjlgtf+vApHR0cePXpUqi2V8vjxYxwcVHdurVmzJnl5eSrxXqwEKK/x8OFDtfTl0VQEGjRo0PAGvM1ZQx4eHqSnp3PgwAGKiopYtWoV9vb2Ki+KQbFNzcaNG3n27BkZGRls2LCBLl26ANCzZ0/WrFlDeno6jx8/ZuvWrcqXzy9D845AgwYNGt6AtzlryMDAgNWrVxMQEEBgYCD16tVj2TKFkU7Pnj0ZO3YsvXv3ZsSIERQUFDBkyBDy8vL45JNPGDVqFADDhg3jr7/+onfv3sjlckaMGEHHjh3/9rwf9cri/zq3av59Lf5viC80feuaALfe/mJSAPJ5N3v8Vpe9/ZfmmpfFChzfwcviqILkV0f6F9xODXtjjYvW/V47buuUPW98vnfBBz00lJSkvs3xh8CHmi8NGjT8/yNH8NqfD5V3PjQ0evRoIiMV+4AXFBSgo6OjdIQKDAx8qVl9aGgo27dvV9kKuiISExPp3r07d+7c4cqVK4wcOVJl6lSjRo2YN28eNWrUeCvfJzU1ld69e3PjhmL6YVFREYsXL+bYsWPk5uZSpUoV+vXrx5gxYxAIBOzevZuAgAD09VWbzP369WPWrFmvd1KBgOrzx2FQzwF5UTFJM36iqIzBhkk7V6pMHASA+PYDkr9bpQwz7doCsx5ePJn4o5qmS8jnmNe3R1ZUTMSUdYjKmNc3mfcZVu7OSPIU09Yuj1iCJFfxt1WLurivHM+x5l9XkFUBn8z/HOt69kiKijk4Yx0Z5cxmBAIBQzdOI/ZkJBHbFNuLTw37ifRHii3Dn9xI4NTCnWppfOePpFqJEfquGWtIr0B31MbpxJyM5Oq2U+gJ9Rmywg9DM2OKxIVsn/wzooxctXJ4J0bzwK2YuyxZtYFNKxeqHD93KYxVG39HR1sbn0+60K93dwoKC/EPXERGZhZGhkKCZk/B0kK1ZS2Tywk+F0f881z0tLWY06Ee9uals0G23Ejkj3upCAQwyrUmHZyqkFsoYfbJGPKKJBRLZUzxcqZJNTO1cpv6w0Rq1XeiqLCYkGk/8vRRaQvcd7g3PQZ0RS6Hjcu2cOVUGEYmRsz5aSZGxobo6umwInAVMZF31HSHz/8C+/o1kRQWs27GL/yVWLotfKfPutG6XwfkcjkHlu/i5plIjMyMGbd8IgbGhuRl5rLBfxU56arm9d8tmIZzg9oUFxYz55tgnjwqbZgNGzuI7n0Ue3RdPHWFVYvXY2puSsjP32NsYkRWZjbfT/mBjOdvz4Nc9hGMqbzzimDdutL9z4cNG4aPjw++vr6vTJednf2PzFteYGdnx8mTJwGFP/LChQvx9/dn+/bt/1irIgoKClSmZv30008kJCSwf/9+rKysiI+P58svv8TIyIhPP/0UAHd3dzZt2vSvz2napQUCfT3u+07D0KUO1WaPJHFMEABaRkKqffs59wfNRJqZQ+WxvmhbmiLNyMEmYAzGbZpRcOeBmqZNd4UR+tle32PZrBZNAj7lyudLlOEWjWtycXAIRRl5KumENpY4j+2Blm7FQyt1uygMy9f6fo+tSy26zv6U7WOWqMTpOLU/wjKG5ZY1qvLs9iO2jX75KvAGXZqjo6/LSt8A7F1q0Wv2UDaNUY3fbeoADMsYrHsM7sDTPx9ycsU+mvdrQ6cJPhwM3KKSpqzRvLWLE22/G8Kh0UtV4rzMaD7850PYezXAc/oATs1Q3ed/w7bdHP7jDEID1QZAsUTCghVr2LFuOYZCA4Z+OYV2nh4cPXmO2k41+WrUUI6dOsfqzTv4dpLqdihnH6RRJJWxpb8bt1KyWXL5Hst6NgEgt7CY7beecGhYK8TFUgbuvE4HpypsvfkYd1sLPm1qz6NMEd+GxrB9oLuKbptuXujp6zG29wQaNKvHhDnj8B/5HQBmFqb4DvdmeJcx6OvrsfXcRnxPDWLQF/2IvHSDXev2Yu9kx/c/z2Zkt7Equq5d3dHT12Wuz7c4uTgzZPYIlo0JAcDYwoSOw7oxu/sUdPV1CTm1gkktv6C3X1/iwu9y+Oe9NPBsTP/pn7J+RqnvRcfubdHT12dozzE0dm3AtMCv+Xq4Yqdg2xo2fOLblcHdRyGXy9lyaDWnj5+nd//uRF2PZu3yzbRo48bEmeMI+CaYt4X0wx5YeS3e6zcoKioiODgYLy8vPD09mTNnDiKRiLi4OObOncv169eVlcbZs2fp27cvbm5ueHh4sHTp0leoK+ba9u7dm7t3S8dClyxZgqenJ56enkyYMIHsbEVrY/DgwaxevZquXbvi4uJCcHAwx44do127dnh4eCidzD799FOkUikuLi6kp6cTExODl5eXcodTZ2dn/P39K/TB/bcYudUn97yiV5UfFYdho9rKMEPXuhTEPaLa7JE47QpB8jwLaYaidSqKjOXpbHXzGAAr9zqknFV4KmfcSMCiSZnpZQIBxg7WuC4aTbuDAdQcpDB00dLXpdmCkdz49uW9tBpudbh3XqGbFJVA9Uaq09bqd3dHLpNzr4zxvU0jB0ysLfh8+yyGbpxGJcdqaroObnWIK9F9HJWAXSNHlfDGJbp3z5Waj1zccJxTKxUeyBY2VuSmZVOed2U0b2dTjWXBs9WOP3j0BHtbG8xMTdDV1aVZ4wZERsdwIzoGLw9XAFq3cCMsXN1gPSo5i1b2Cme2xtZm3PmrtHdjoKNNNRMDxMVSxJLSR9PQpnb0bVgdAKlMjp62+k++sXtDws4qFu7F3IilbuM6yrDszByGdx6NVCLFsooledmKhsHOtXs4sFXhLKitrU1Robr7m7NbPW6dV3yP+1HxODQunfmSl5nLrG7fIJVIMatsQX6J0Xz12rbcOqfobcdH3MW5uarPtItHEy6fVeybcysyhgZNSsNTnqYydvAkZDIZcrkcHV1tCgsKcXR24OJpRZqo67dwcW+sltc3QfYPPh8q77UiWLx4Mbdu3WL//v0cO3aM5ORkfvjhB+rUqcOcOXNwd3dn37595ObmMmXKFL799lvCw8NZu3Yt69atIzEx8W/1X1hNtmnTBoCoqChOnDjB8ePHOX36NPn5+ezcWToEcfz4cbZv386ePXv47bffOHLkCMeOHSMkJISQkBAkEgnbtm1DW1ubqKgoKlWqROfOnVmxYgWBgYGcOnWKrKwsunTpwsCBA99aOWkbGyIrZwL+wrxex8IUo5aNSQnZxMMR32M1sjd6DgpLzuwjl166rl3XWKgc6gGQy0qNxXUM9UnYEMp1v1+4NGQBjiM6YVbPDpeg4cSvOkZBysu71frGQgrL6JY1F6/ibEtj71acWaL6wiz3rywu/nKIjYODuPDzQfotHaema2AspOAlBuvWzra4eHtyYslutXRymZwvf5+N5/CuKpXEC96V0Xzn9l4VNgZEIhHGZRYHGRkKyc0TIcrPx9jYSHksTyRST1ssxVi/VFNbABJZ6eOlqrEBfX8PY/DO6wxuotiDxkRfFwMdbZ6LCpl1MoYJLZ3UdI2MDRGVMYSXyqRol6kwpFIZfUf0Yc3hlZw9egGAvBwRRQVFWFa2YM5P3/LrD2vVdBVG8xVfsxf/dxrenYADIYQfUzyoE2Me0ayTGwDNOruhJ1TtURmbGJGbo2per62t6J1KJFKyMhSV/dSACcT+GU/igyfExcTTvqvCRrZ919YIhW93xb7mHcEbcuTIEX788Uel9++MGTPo168f8+bNU4lnaGjIwYMHsbOzIyMjQ7mE+oXRfFmSkpJo3rw5oFiuraWlxapVijFzY2Nj/vrrL/bu3UunTp1Yu3at0loSwMfHB0tLSywtLalUqRIDBgzA0NAQT09PioqKSE9PV/sOgwcPxtramt27dzNjxgzy8/Px9PRk7ty5So/k8PBwZZ4ATExMlKsAXwdpXj5aLzGvl2TlIo6+hyQtCwDR9RiE9R0pevj3syyK88ToGJX5QQhKjcUl4kIS1v6BtMS8Pu3SHcwb1sTKow7GDlVhig965sZ4rPLj2riVKrqFeWL0yugKtLSU5uJNfVtjam3BiO0zMS8xQs9KSiPx2l1kUikAjyPiMbG2pDwFeWL0jcoaoZealrv6tsHM2pIvt8/GokQ3IylN2YP4dch8KjvZMGrDdELaTlLRfVdG8y/DyMiI/PzSh6MoX4ypiRFGhobk54uVx0yMjdXT6mqTXyRV/i+Tg07J/Xv5cTrP8ws58plim/Xxh27StJoZDauace95Hv6ht5nsWYvm1S3UdEV5+RgalzWE10JazhB+76YDHNx2hMVbQ2jWqik3rtzEsa4Dc3/5jpXzfuVmmLrftLrRvJaa0fypzcc5+/tJpm2eTb2WDTn8y16GfT+aGdsC+PP8TTKeqf7m8nJFGBmXvhcRaGkhlZaWiZ6+HvOWzUKUl8/8GQp71rXLt/Bt0Des3f0Tl89cJSX57W5X8SG39F+X99ojyMzMpHr16sr/bWxsKCgoIDNTtcWpra3N8ePH8fLyYvDgwezatQu5XF7hOwRbW1siIiKIiIjgzz//ZNmyZfj5+RETE0Pt2rUJCQnh5MmTdOvWDV9fX+7cKX3BZWZW+hJNS0sL45If44vK4mXvLNq3b88vv/zC9evX2blzJ8XFxUyZMkUZ7ubmpsxTRETEP6oEAEQRsZi0V1Qkhi51KChj2C3+MwGDOjXQtjAFbS1F+L2K9y8vS3p4PNYdmwJg2awWOWWMxU2cqtHu4BzQEiDQ0cbK3ZnM6AecaD2N832DON83iKKsPLVKABQPcuf2Cl1bl1r8Vca8PjRkO2v6BLBxUBA391zgyvrjJJy/RbtJvrQc2R2AqvXsyU5Wr3AfRcRTt0TX3qUWKWV0j4b8zoo+37Fq0Dwi9pznwvpjxJ2PpsN4b5r5eAFQlF+gfMCXJTkinprtFePsFRnN7/D+nj0Dg7iz5yI31h0n8fwtbD3qcmfvRfYOCSH7SVqFhvAvw7GmHYlJyWTn5FJcXExk9G2aNKyHS+P6XLiqGJ65GBZOsyYN1NI2rWbOpURF2dxKyaZWpdLKwlRfB30dbfS0tdDX0cZEX4fcQgn3M/KY/sefBHdpgFcNKzVNgD/Db9OygwcADZrV435s6Tsleyc7gtcGAigM4QuLkclk1Kxdg/mrA/jebz5hZ69XqBsfcZem7Ut6Ti7OPClz31o72vD1asXYvrRYgqTEaL6ORwMu7TvHgk8D+etJKvciYlU0o67fonVHRWXX2LUB92JVN2P7afNC4mISmDttAbKS3lLzlk05tPsYY/pPIOnxM6Kuq1dab8LHMDT0XnsEVatW5enTp9jb2wOK1ryuri4mJiYq8cLDw9myZQt79uzB2toauVyOq6vrK/W1tbXp1KkTNWvW5Nq1a1hZWWFvb8/vv/9OdnY2P/30EwEBAezerRhSeGFG/7oUFxfj7u7O1q1badCgAdra2jRu3JiJEycyZsyYf6T1d+ScuIpJ66Y47V0IAgFJ05ZjNcqbosRn5Jy6zrOFm3HYovixZh+9RGH8qyuCp8ciqNKmEe0PBYBAQMTk1dQe2528h6k8C73B431X6HA0EHmxlMQ9l8iJf/paeY09EYFT60aM3huAQCBg/7TVtBrVnfTEVOJeYl5/8ZdD9Fs2HucOTZFJpOyf+qtanNsnwnFu3Qi/vYEggJ3TVtNmVA+eJ6Zy51RkhbrXd51j0OJxeAxsj0BLi53T1HXfldF8eY6GniVfLKa/dw+mTxjDF5NnIZfL8enZhaqVrRjo05NZ8xczbNwUdHV0Wfi9ulVqB6fKhD3JYPieCORyOYGd6vNb1GPszIW0c6jMtSeZfLYnAgHgYmNOCztLJh+7RaFUxqILisrKWF9H+YL5BeePX8KtjSu/HvwJgQCCJi9k4Bf9ePowmUsnr3Dvzn3WHF6JXC4n7Mx1bobdImTDPPT09ZgY6AeAKFekfMH8gsg/rtHQqwlz9gWDQMDaqSvpNroXqY9SiDoVzpM7jwjYH4IcObfO3uDutTtUqWHNl0sVs9EyUzJYO/1nFc3Tx87Rqq0bW4+sAYGA7ybO57Oxg3n8KAltLS2at3RBT0+P1h0UWy4vC/6FhwmP+WGlwj0u9VkacyYHvfJ6/ROk//C58SHy/7qgrPysoaVLl3Lt2jVWrlyJrq4uU6ZMwczMjMWLF3PgwAG2bt3Knj17OH36NPPmzWPfvn0YGRmxatUqVq1axebNm6lWrZrK9NGAgADlrCGAq1evMmbMGDZt2oRIJCIgIIBt27ZRrVo1li5dSmxsLOvWrWPw4MEMGjQIb29vANq0acOSJUto3rw5EomEBg0acP78eeRyOe3bt+fGjRsYGhoyZcoUnj17xrx583ByciI1NZVFixYhk8lYsmQJu3fv5ujRo/9q1pBmQZlmQRloFpTBh72g7KD1kNeO653y+xuf713wXnsE48ePRywW06dPHwoLC+nUqZNybn2LFi1YuXIlHTt2JDQ0lJMnT9K5c2cMDAxo3bo17u7u3L9/n2rVVGeYPHnyBBcXF+X/VapUISAgQDlG37dvXwYOHIhIJKJRo0YEBf2z1kHVqlVp1aoVnp6e7Nmzh6CgIFasWMGYMWPIyMjAyMiIbt268c0337xh6WjQoOG/wEewjECzxcSHjKZHoOkRgKZHAB92j2DfP+gR+Gp6BBo0aNDw8SH7CN4RaCoCDRo0aHgDPoYhFU1FoEGDBg1vgOS/3yHQVAQaNGjQ8CbIPuAVw6+LpiL4gCksfvuX54Heu7lpW4uL34nuSeG7WfP4LlTf1Utd3cFT34mu/Y/vZmZbuPjJqyP9Q9IL1Xd3/VDQDA1p0KBBw/84sv9+h0BTEWjQoEHDm/Ahbx3xumgqAg0aNGh4AzRDQxo0aNDwP45m1pAGDRo0/I+jGRrSoEGDhv9x5B9Bj+C/b7b5BuTn55OR8fqmIho0aNBQHo0fwQfKxo0biYuLIyQk5G/jDR06lBkzZuDh4cG+ffuYNWsWBgaqNnY+Pj6MHDmSjh07EhcXV6FOQkICISEhREVFIZfLqV+/PpMmTVLueDps2DBu3rypZl24YcMGlZ1SX4pAQI0fxmJYvyaywmIeTfuZwkcpymCz9s2w+WYAAPl/PiBx5hoEBno4rpiErpUZ0jwxDyetQJKRo6LZZf4IKte3R1oo4Y8Z68hKTFU7b79NU0kIjeTmtjPomQjpvdIPXaE+0mIJRyetQlTeB1ggoN6CURg3qIGssJg736xG/KhUt07QCMzd6iDJU7hxRQ9fhOP0AZg0qAGAfhVzinPyCe8xu5ysAJ/5I6lWzx5JkYQ9M9aQXi6/AoGAzzdO587JSMK2nVIer+xkg9/+ecxz+xJJYbn1DgIBHYJGYFXPHmmRhFPT15FdQTl4b5rKg5OR/Ln1DPpmRnRbPg49EyHizDxOz1iPOL20bGVyOcHn4oh/nouethZzOtTD3rzUVWvLjUT+uJeKQACjXGvSwakKuYUSZp+MIa9IQrFUxhQvZ5pUM6MibsXcZcmqDWxauVDl+LlLYaza+Ds62tr4fNKFfr27U1BYiH/gIjIyszAyFBI0ewqWFqqbwgkEAkbOH4t9/ZpICiWsmbGS1MTS+6vzZ91p268Dcrmcfct3EXUmAqGJIV+vnIK+0ABJsYSfJy0lu8Qlr6xuwMIZ1G1Qm6LCYmZ/M5/HD5OU4cPHDqZHny4AXDh9mZ9/XIexiRFL1gQjNDSguFjC9PFzeP5XuormwiXf06BhHYoKi5j89WwePij13xg7fjg+fXsCcCr0PD8uKPUzqFXbkROnd1G/disKK/BY/rd8yA/41+Wj6hEUFRWxbNkyFi5c+OrIQFaW6o3bvHlzoqKiVD5z5sz5Ww2pVMoXX3xBmzZtCAsL4/r163h7ezNmzBjS0tKU8QIDA9W0X6sSACy6eaClr0tsb3+SfvgNuzmfK8O0jAywnT2ce58FEdvLn8Inf6FjaUqVz7ohvpvIXd9ZpO85h83E/iqatbu6oq2vyzafQM4v2EH72eo7KLae2h8Ds1J/3Ub92pB29wnbB8zn7uEw3Mf2VEtTpbsbWvq6hPf8joSg7TgHDlMJN2nkwI1BwUT6ziXSdy6SXDHx320m0ncuNwYEIcnNJ3bKajXdBl2ao6Ovy8++ARxfsJ1PZg9Vi9N16gAMzVUtHvWNhXwyayjSoooXvDmVlMMun0Auh+yg9Xfq5dBqWn8MzEvLwc2vN8nh8ezuO4/oTaG0mj5AJf7ZB2kUSWVs6e/G161qseTyPWVYbmEx2289YXO/5qzq7cKiS4qwrTcf425rwXpfV+Z2qk/IhYobHRu27SYgZLmaWXyxRMKCFWtYszSITT8vZPfB4zxPz2Dn/qPUdqrJllU/0qt7R1Zv3qGm2byrB7r6egT4+LN9wRaGzi69v0wsTOgyrDsBvv4EDZnDqKAvAWjbrwNP7j5m7oBZhB2+RK+xPmq6nXq0Q19fn0E9RrF4/kpmfF9qE2pbozq9+nZjcM9RDOoxEs92LXCuXwufQb2Ij01gmPdYjh84yaivVO+fHp90wkBfjx6dBzHv+8UEzvdXhtWoaUu/Ab3p0XkQ3TsNpH0HL+o3qAMovI7nBs2gsOjtVQAvkApe//Oh8lFVBP7+/sTGxtK/f+lDTyQSMWHCBNzd3enQoQMhISHI5XKmTZtGcnIyY8aM4dixY699jn379vHZZ5/Rq1cv2rZtS2pqKk+fPqVnz57o6uqio6ND//79GTRoUIUex/8GY/d6ZJ+NUnyfG/EYNS41IDduXhfx3UTsAj6n7r4gip9nI8nIwcStHtnnFGmyz97AtHVjFU1btzo8PK+w7HsWdR/rxg4q4c493JDLZTw8V2rrlxb3ROlHrG8iRFospTzmHnV4flbhFZwdeQ/TJmXM0gUCDB2tqffjF7gdnovN4HYqae1GdSP93C3yYtVXptZ0q6P0IH4clYBtI0eV8Ebd3ZHL5MSVM6jv+8No/li0g6KCih8ANm51SCz5jilR96larhxq9XBDLpPxqEw5VKpdnUfnFHlJDo/Hxs1ZJU1Uchat7BW+y42tzbjzV64yzEBHm2omBoiLpYglUuUPcGhTO/o2VNi2SmVy9LQr/mna2VRjWfBsteMPHj3B3tYGM1MTdHV1ada4AZHRMdyIjsHLQ+Hm17qFG2HhUWpp67jVI/q8wo0tISoex8a1lGG5mbnM6DYJqUSKeWULRCXG8U/iEjEouReEJoZIiiVquq4eTbh45goA0ZG3adi0njIs5WkKowd9jUwmQy6Xo6OjQ1FBEfGxCUpPYmMTI4rL6Xq0cOX06YsAREZE09SloTLsaVIKA31Hl2rq6lBQUAjAkuXzCJq7BHGJL/Tb5GMYGvroKoLVq1dTuXJl5bHt27ejpaXF5cuX2bFjBydOnCAiIoJFixZhY2PD2rVr6dGjxz86T0REBEFBQRw9ehQbGxtcXV359NNPWb16NTdv3qS4uJgZM2ZQt27dt/K9tI2FSHNLDc/lMhmUPCh0LE0xbdWQJ0FbiB86j6qjP0Hf0QYtEyHSHEUaaZ4YbVNDFU19YyGFZTWlMgQlmlbOttT3bsWlxXtV0ogz86jZphEjTy3A7Yue/LnznFpedUwMkeRUrKttqM+T9Se4/dVP3BgUjN2ILhjXV9iUCnS1sf2sE4m/HK6wDAyMhRSUya9MKkOrRLeqsy1NvT0JXbJbJU3nSX25eyaKZ7Evt+7U+5tyqORsSx3vVlwtVw5pdx7j2FnhxevYpRm6Qj2VcFGxFGP90mFAbQFIZKWPgarGBvT9PYzBO68zuIkdACYuWE9bAAAgAElEQVT6uhjoaPNcVMiskzFMaOlERXRu76U2xAiKBo+xUWmvxchQSG6eCFF+PsbGRspjeSKRWlqhsSH5LynbF/93Gd6DuQcWcP2Y4sGem5lL4zYuLDr1E5980YdzO0+p6RoZG5GbU3o+qVSGtrbCB0IikZKVoRhWnP79RGJvx/HowWOyMrPxbNeCIxd3MvKrYezddlBF08TUmNzsvDKa0jKaEjIyFH7n38+fzp+37vDg/iOm+ftx8sR5Ym5X3Mt6Uz6GiuCjekdQpUoVtWMmJibExMRw/Phx2rRpw+nTp5Vm9OWJjIxUjusDGBoacuHCBbV4dnZ2NG5c2sJev349v/32G6GhoSxfvhxDQ0M+/fRTJk2apPRBDgwMJDg4WJlmwIABTJ+u7ktbEdI8MVrGpe8uBFoCKDFil2TmIopOQFIyPpsXdgfDBjWR5YrRNhYCiopEkp2volmYJ0bPSFhGU0tp7t6grxfGVS0YtH0mZrZWSIslZCc9p8mQ9lz/9SjRv5+hcl07vH+dyKZuM1V0Jbn56JTL6wtdqbiQx2uOIRMrWucZl2IwqV+DvDuPqdSmEZlhsUhyK26xFeSJ0VfJrwBZia6rbxvMrC354v/YO++oqK6uDz9Dr4JGLEQRQUUERLqKYkMRMWJN1FgjYu8FO2LFEkvUqNiixhJ7LNgLtg8FNKgoYAErqCi9zzDfH6MD46AShTfR3Ic1azH3nLPvmX1n7rmn7d+OaZSvZoQkT8zrJy+x69iE1MTXOP3QAn0jA3y2TGbND4riMXkZ2WjoFdqliB/qdm2CXpXydNk5hXJv/JD2OImwVQdpHtCHTtsn8fDcDdITFBcc6KqrkpVX2FsqkILam+/cpUevSMrK5XAfmQD70IN/0aCqAdaVDbiblMGkE7cY41oLx2/LF+uH96Grq0tWVuE1zszKppy+Lro6OmS9eQrOzMpGX09PqWx2Rhba7/HtW05sDub09hNM2jyDeo2s8ejnxaE1+zi9/QQmdWswZo0ffm1HK5TJzMiUP90DqKiIkEgK/aKhqcG8ZdPJzMwiYOICAIaNH8iGlVv4Y8t+6tSrxS+bFuDdvHC4Lj0tAz193SI2VRRsampqsHzVPDIyMpk4Vqbj3e2HDjx7msiPvbtQqbIRu/dvpEM75aHFT0XYUPYF0K1bN1JTUwkKCmLSpEm4ubkxb948KlSooJTXwcGBrVu3ftRm0R4HgLa2Nr6+vvj6+pKRkUFISAizZs2iSpUq9OjRAwB/f3+5VvPfJSPsDoatnUg+dBld+zpkFXnCzbpxH20LE9TK6yNOy0TXvg4vt58kPfwOBi3tyfzrLgYt7Mm4elvB5tPwWMxb2RFz5ApV7cx5GVM4HBMyv3Ac2XV0ZzJfphAXcgMLL2f503PWqzQ0i95A35ByNQajNg48PxiKgUNtMorUVdfcGJu1owh190OkooKhiwXPdoUAUMHNhlen/1Ky95b48Fjqudtz40goJna1SCxS3+DAQtWn1qO7kP4yldiQSBY2HyM/PuniL6zvM1/JbkJ4LDXd7bh7+ApV7Mx5FV1o99K8Qj+4jOlM1ssUHobcwLRlA+7svcCT/7tDLU8nnoXHKthsUNWQ8/FJtKldmRuJqdT6pvDmW05TDU01VTRUVRCJROhrqpGeK+b+6wwmHrtJYFtrLCrqv9cP78PMtDoPnzwjNS0dHW0tIiJv0a9nF54lvuD8/4VhU8+CC6Fh2NtaKZWNDY/GvpUToUcuUcuuDo9jHsrTqpoZ092vN0sHLUCSLyY/Lx9pgZTM1Ex5LyL1VSraejpKdq9djaRFGzeOHTyFrYM1sXfuK6T/umUxoRfDWb9ii/xYWkoa6WmyJ/7XScny3sxbrl65hkfbFvy5/ygOjrbcua3o+607fuXC+SusWLZOfszZro38/4gbp+nW6aeP+vPvIMQa+gK4f/8+7dq1w9fXl6dPnzJp0iR5o/CpiIooEh05coQ1a9Zw6JBsSENPTw8vLy/CwsKIjY19n4m/RfLRK5Rza4Dln/NBJCJuzAoq+3YgNy6BlJNhPJn/O3W2+wPw+tAlsmMekfswkZrLR1F3/zyk+WLuD1uiYDP2WDimTaz5cd8MEIk4Oj4IRx9PUuKfc+/UtWLrcXHxHjwW+mDX2x0VdVWOTdqglOdFcBjfNKuP0+FZIBIRNWo1JoO8yI5P5OXxCBL2XsQ5eC5SsZiEXefJjJGtItExN+bZLuXe11uijodRp6kNQ/cGIBLBrglraTqgHa8ePuf2qYhPdS33joVj0tSabvtmIBKJODk+CDsfT1IePifuZPF+SL6fQJulgwDIfJ7MqQnrFdJbmhsR+vg1ffeEI5VKCXCvx9brj6huqE3zmkZceZxMnz3hiAA7Y0MaVq/AmOAb5EoKWHRe9p3R01RjmZftR+t/5MRZsrKz6ebdjokjBuI7ZipSqZROXm2obFSRHzp5MXXOz/QeMg51NXUWzlTuhYYdC8WmiS0B+wJBBGvHr6CdTweexycQcSqMR7fjmbV/AVKkRJ69xp0rUSTGPWPgwuG07u2Jqroq6yatUrJ78sg5GjdzYceRDYhEMHnkLPoN7snDuCeoqqrg1MgeDQ0N3FrKekdL5q7il8A1zF46jR79u6Kursb0cYqa4kcOnaRZC1eOnNiBSCRi5NApDB7Wj7gHj1BVVaGRqzMaGhq0cm8KwJyAJYSHvf8BozT4Nw/5lJSvUrN4xYoVPH36lMDAQJYuXcqtW7dYvnw5qqqqDBs2DCcnJ4YMGYKHhwcTJ06kVatW7Nu3j/379xfbI3jy5Il8+ei7+V6/fo2npye9evWiX79+6OjocPv2bUaOHIm/vz/Nmzend+/edOrU6W/3CMK+VV6J8bmcVdP9eKZPwC7nywpDXRaaxQMnlI0edFmFoe7jUDZhqK9nPy11m2UVhvpl6ufPG8yt8WOJ8059uO2zz1cWfFWTxcUxaNAgDAwMaNWqFU2bNsXIyIj+/WXL47y9vRk3bhx//PHHJ9uvUKECv//+O1FRUbi7u+Pg4MCUKVMYNWoUzZs3L6VPISAg8G+ltCeLIyMj6dixIw0aNKBnz548evT+xQ4AEyZMUBjhyMjIwNLSEjs7O/lr06ZNH7TxVfYIvhaEHoHQIwChRwD/7h7BrL/RI5jxkR5Bbm4urVq1ws/PDw8PD4KCgrh8+TLbt28vNv+pU6cYMWIE3t7e8g20ERERBAQEcPDgwRLX66vvEQgICAiUJaXZIwgNDcXQ0JDvvvsODQ0NhgwZwt27d7l//75S3tevX7No0SKlIefo6Oi/vXRdaAgEBAQEPoMCUclfHyMuLg4zs8LNkqqqqlSvXr3YhiAgIAAfHx+qVKmicDwmJob4+Hg8PDxo2rQpgYGB5H1kR7XQEAgICAh8BhKkJX59jKysLKV4Z9ra2mRnK+6vCQ4OJiMjQyGKwlt0dHRwdnZmz549/PHHH4SFhbF2rXLYlqJ89ctHBQQEBMqS0lw+qq2tTU5OjsKx7OxsdIvsGk9KSmLJkiXv3fNUdOJYX18fX19f1qxZw4gRI957XqEh+BdTUAaBzi1zleMDlQbVDdI/nukTKJ+rvPGvNLilklvqNlsHRpe6TQCTxWUzqbslYsnHM30Cix0+HKjxU0jWKZvvbWlQUIp7i83MzNi/f7/8vUQi4dGjR9SsWRgD69KlSyQlJfHdd98BsglmqVRKVFQUhw4d4pdffqFTp05Ury4LX5KXl4empuYHzysMDQkICAh8BtK/8foYLi4uvHr1igMHDpCXl8fq1asxMTHB3Lww9pS3tzd//fUX4eHhhIeH4+vrS/v27eWbWm/fvs2SJUvIzs7m6dOnBAUF0aFDhw+eV2gIBAQEBD6D0lw1pKWlxdq1a9m6dSsuLi5cvnyZZcuWAeDl5VWiJaFz5sxBLBbTrFkzunbtiru7uzzUzfsQhoYEBAQEPoPSHBoCsLa2Zu/evUrHjxw5Umz+d8f+K1asyIoVK/7WOYWGQEBAQOAz+PfOXpQcoSEQEBAQ+AykX0EgaqEhEBAQEPgMvoboo0JDUEZkZWWRk5NTrO6BgIDA10NpzxH8E3xVDYGFhQXa2toKegGqqqqEh4d/sFzLli2ZP38+3377rTzc9JUrV+jbty/a2oXiK9bW1syaNUthTe/76NWrF35+fri4uCiExf4kRCJM5/uiU88UaV4+D8b/Sm58ojy5xuwB6DvVRZIh230Y2z8QNUM9zJaPAJGIvCcviZu4Wq4M9tamTeBPlLMyoSBPTOTYILLin8uTreb0pYJTHcSZss0tYX0XI1JVoeWlpaS9EYVJDA4jbv0xpbpWnjkMrbo1keblkzB1OfmPEuTJum6OVBwuU5zKibrH84BfEWlrYvzzRFQN9SnIyiFhwmIkyWlKdj3m9KNyPRPEuWKO+q0n+eFzpTzf/zaeuyciuL7tDA2HfIdZM5mSnFY5HXSNDFjhNPydIiJ+nONDNUtTxHn5bPZbw8uHiUp5RmyaTOTJMEK2nZQft/NwxqFdI9aPWq6Uf/z8UdSqZ05ebj6BExbzNP6ZPL1zX2/afe+BVAqblm3h8qlQdPV1mbFiCrp6OqhrqPFLwGqiIm4r2f1pziBM6pkizhUT5LeS50Xq2rqPJ826tkQqlbJv+S6unwlHW1+HkSvHoamthThfzKrRS0l9o2b3LjeiolmyeiO/rVyocPzcxVBWb9qOmqoqndq3oWsHT3Jyc5kUsIjXySno6mgzd9o4KpQ3LPNrJhKJ6DTnJ6pamiDOE7PHL4hX79gUiUT03zSR2ycjCN1WKKFpZG7M8P2zme00GHFu6QVJ/PKbga+sIQA4fPgw1apVKxVbxsbGnDlzBpDpof7888/4+fmxa9euj5ZNSSn+x/YplG/rjIqmOrc7TEbPvg41/PsR27+wUdG1MSO65yzErws3dZn9PIwXW0/wav8FjHq6U8W3A8+W75GnV/F0RFVLnUvt/TG0r4XVzF6E9ftZnm5oY8qVHoHkFbFZsak1Tw9c5tbU395bV73WjVDRVOfhD+PQsrWg0iQfng6dDYCKrjaVJv7Eo96TkCSnUcGnK6rly1GuQwtyou7xatUODDq5883QHryYq7glvo6HA2qa6mzpFICxnTktp/Vk78ClCnmaje+GtkHhDszQ1YcIXS1bW91t4zjOBu7kXRq0cUJdU4PAzlMxs6vN99P6sGqg4o2w4/ju6BoqSjz+4N8fKzdbHt+OV7Lp1rYJGpoaDOowAit7S0bMGMKkn6YDYFC+HJ37etO3zUA0NTX4/dwmOp/qTnffrkRcvMau9XsxMa/OzFXT+KntIAW7jh4uqGtq4N9pErXs6tBrWn9+HihTXdMvr0+b3p5M8hyDuqY6i0+tZHgjH5p1bcnj6Edsn7+Zlt1b892gTvw+Rzkk8cZtuzl07AzaWoobj/LFYhb8EsTO9cvR0dai1+BxNHd14cjJc9Q2N2XYgF4EnzrH2s07mTx6cJlfM6s2jqhpqrOqsz8mdrVoP60Xmwf+rJDHY/z36LxzvTT1tGk/tReSvNKPkvs19Aj+M/sIevfuzb59++TvJ02a9LeWWKmpqdGhQweiowt3j4aEhNC1a1ecnJxwcXFh8eLFgCw++LNnzxg4cCDBwcEAvHz5koEDB+Lg4EDXrl15/PhxsecpDn1nS1LOXQcg41osuvWLCJuLRGjVrErNhUOo9+c8jLq3BEC7TjVSzsgUttKv3kHf2VLBZgVnC16ciQQg5do9DGzNFGzqmlWl/iIfXA/OpHqP5gAY2NbEwMaUxvtn4LBuFJqV3nkCBHQcrMi4IFMMy4mMQcumtjxN286S3Nh4Kk3ywWT7QsSvkpEkp5G8+U9erZZpQqgZGyF5laxkt7qTBQ9CbgDw7Pp9qtZX7JVZtHNCKi3g/rkbSmXrtHUkJzWTuPM3ldJqO1lyK0Tm2wfX71LDRlE03t6zIdICKbfe+P8t9yNi2DZtHcVR39ma0LNhAERdu0Pd+hbytNTkNPq29kEillChUgUy3gix/7FuDwd+l90AVVVVyctVDhJm4WRJZIjsmt67HotZ/VrytPTkdPzajkYilmBoVJ7MN6Lxj2MeoqUri12jra+DOF9cbJ2rG1dl2bxpSscfxD/GpJoxBuX0UVdXx76+FRGRUVyLjKKJiwMATRs6ERp2XalsWVwzUycLYkJk39tH1+9RzcZMId3G0xlpgZSYc4qqZF3m+3Bs0U7ycj4cfO1TKM1YQ/8U/5mG4HPJy8tj//79uLm5AZCZmcmYMWOYOHEiYWFhbNy4kd9++40HDx6waNEijI2NWbduHe3atQMgLCyMQYMGERoaSqVKlT4aBKooqvo6SNIKhcmlBQWgKrt0KjqaJG4M5v6IZUT3nEWlvm3RtqxBZlQc5ds4AVDewxkVHcUnPTV9bcTpRQTtJQWI3thU1dEkbsNxrg9fRWiPQEz7tUbf0oSMu8+IWbSHy51mkXg0HOt5/ZTqqqKnQ8E7dt/WVbV8OXRc6vNi0SYe+8ygQt+OqJt+K8tXUED1zfMp37sDGSHKQ3kaetpyvWSAgiL1rVinGlbejTn/s/Laa4DGQztwcdn+YtO09LTJfseuyhu7xnWq4+LdhD+XKAsXhR++zPukPHT1dMhMzyziAgmqqoU/NYmkgC79OhJ0aCVnj8jkOTPSMsnLyaOCUXlmrJjMmvnKjYy2no5cJ/jdur5936ZvO2YdWMDV4MuArIGo72bHolMraO/bkXN/nFKyC9C6RRPU1JQHCDIzM9ErEudGV0eb9IxMMrOy5HrCujraZGRmKpUti2umpadNznt8ULlONRp4u3JiyW7Fzza6C9FnrpNw58MCL59KaQvT/BN8dUNDHTp0QEWl8MexYMECWrVq9Um2nj17hqOjIyCb/FVRUWHVKpk2q5aWFn/++SfVq1cnOTmZzMxMdHR0SEpKUggj+5YmTZrIbTVv3lzeUygJkvQsVIsIxYtEKrIbLFCQnUfi+sPy8f+0SzfRrWfKo4DNmM714ZuOTUm7eENh2AhAnJ6tYBMVEdI3NiXZuTxYdxTJG5tJF6MwsDIh4Wg4kmxZjJ7Eo2FYTFSOfFiQkYWKblG7hXWVpKSTc/MukiTZE39W2C20LM3Ij5cJmTzuOxkNs2pUCwrggfsABbt5GdloFLErUlGR19emSxP0K5en544pGFSrSEG+mNQnSTwIucE3tY3JSctUHpt+Q05GNlpF7KqoiCh4Y7dR52YYVqnAuB3+fFPNCEmemKQnL4kK+bAGbmZGFjp6RW2qIJEo3gb2/naAP7cd5uffA7Fv3IBrl//CrG5NZv06nZWz1/BXqPJTcnZGFtoKPiis61tObA7m9PYTTNo8g3qNrPHo58WhNfs4vf0EJnVrMGaNH35tR3+w/kXR1dUlK6vwxpuZlU05fV10dXTIysqWH9PX01MqWxbXLCcjG833+MChsxsGVSrgu2Ma5d9cr9dPXmLXsQmpia9x+qEF+kYG+GyZzJofZpXYBx9DWD76L+TgwYNlMkdQUFDA2bNnGTVqFFu2bKF+/fqcOHGC3377DW1tbWxsbJBKpe99SixXrlC9Sk1NDYmk5NtQ0sOiKd/akdeHLqNnX4es6IfyNC2zqtRaPY5bHuMRqYjQd7Ykadc5DNxsebJkF9l3HlJlUAdSz0cq2EwOi6VyG3sSDoZiaF+L9OjCoSo986rYrxnJ+daTEamoUMHZgse7zmO7xJeEI1dJOBhKxSbWpN6IU6prdsRt9Fo6k370Alq2FuTGxsvTcm7dRaN2DVTLl0OSloF2g7qk7DpGhUHfI05MIu3PMxRk5cgbjqI8CY+lVis7oo9cwdjOnJcxhfU9O79wHLnJ6M5kvkyRD0nUdLUudujhLffCo7F1dyT8yP9hZlebJzGFT417A3+X///d6G6kvUz5aCMAcDPsFq6tG3HmUAhW9pbcv/NAnmZiXp3Bk3yYMtAfcb6Y/Nx8CgoKMK1dgzlr/ZkxZBb3bj8o1m5seDT2rZwIPXKJWnZ1eBxT+D2oamZMd7/eLB20AEm+mPy8fKQFUjJTM+W9iNRXqWjr6Xy0/kUxM63OwyfPSE1LR0dbi4jIW/Tr2YVniS84/39h2NSz4EJoGPa2Vkply+KaxYfHUs/dnhtHQjGxq0ViEZvBgYUqXq1HdyH9ZSqxIZEsbD5GfnzSxV9Y32f+3/LBx/g3P+mXlK+uIXgfIpFI4eabkpLCt99+W+LyKioqtGrVCjMzM0JDQxGLxWzcuJE9e/ZQtWpVpFIpzs7OZVF1ko9ewcDNlnoH5wEiHoxdSRXf78iJTyTlRBiv9p/H6nAgUrGYpN3nyI59jIquFmZLhiHNE5Md84j4KYpDDQnBYVR0s8H1UACIIHL0WswGtSMz7jnPT0TwdN8lmgbPpiBfwpPdF8iIecKduTtosHQQpv1aI8nKJXJskFJd009eRsfVDpOdixGJRCRMXkr5/p3If/iMjDNXeLnkN6pvkE0epx29QN7dh6S+TqXqgrEYdm0DqiokTF6qZDfmWDimTazpvW8GIpGIw+ODcPLxJDn+OfdOXXuv7yqYVyXuwq33pl8/fpV6Tevjt3cOIpGI3yasovWA9rx4mEjkqQ+vNnsfIUcv4uTmwJo/VyASwdwxC/nBtytP455x8eRl7t6+T9ChlUilUkLPXOWv0BsEbpyNhqYGowJkK2Qy0zPlE8xvCTsWik0TWwL2BYII1o5fQTufDjyPTyDiVBiPbscza/8CpEiJPHuNO1eiSIx7xsCFw2nd2xNVdVXWTVpVos9w5MRZsrKz6ebdjokjBuI7ZipSqZROXm2obFSRHzp5MXXOz/QeMg51NXUWzpyoZKMsrlnU8TDqNLVh6N4ARCLYNWEtTQe049XD59w+FVGiz1baFHwFar9flWaxhYUFp0+fLrZHMH36dJ4/f86yZcuIiorCx8cHHx8fRowY8d7lo5MnT5b3CACuXLmCj48P69evJycnh+nTp3PgwAH09PQICgpixYoVbNy4EVdXVzw8PJg4cSKtWrVSWj66b98+9u/f/9544vLzGXf+YPqn8KLgw+FoP5Xa5VLLxO7+MgpD/UBU+mGob+e/KnWbACZqZaOF/EWFoRaVTSCHhfE7PttGzxol1xbf/rD4uap/mv9Mj2DIkCH4+fnh6upK/fr18fb2/miZZ8+eYWdnJ39fqVIlpk2bhouLCwUFBbi6utK6dWs0NTVxdXWlYcOG3L9/H1dXV7y9vRk3bhyTJ08uy48lICDwD/M1zBF8VT2Crw2hRyD0CEDoEcC/u0fwQ42OJc77x8MDn32+suA/0yMQEBAQKAu+hg1lQkMgICAg8Bl8DUNDQkMgICAg8BkIy0cFBAQE/uNIpF9+UyA0BP9ixAWlHwFEV1o2k27W8ZEfz/QJ7PymeZnYVVcv/UnzHDXl2EulQVh2yeNS/R3KYlIXYHxE6e3afUtE/fGlbrO0+PKbAaEhEBAQEPgshDkCAQEBgf84wqohAQEBgf84X8NWLKEhEBAQEPgMhDkCAQEBgf84kq+gKRAaAgEBAYHPQBgaEvjbZGZmkpeXR/ny5f/pqggICJQCwmTxP8TkyZOJiYlh9+7dqKqqyo+vWLGC48ePs2/fPjQ0ND77PD169ODWrVuoqakhlUopV64cvXr1wtfX96Nlp06diqmpKQMHDsTNzY0lS5bg6OhIjx49mDFjhlytrESIRJgHDkTHqgbSPDH3xq4mJz5Rnlxzzk+Uc7JAkpkDwJ2+C1Arr0ft5cNBJCL3yUvuT1gjVzF7a9NigQ96VjUoyM0neuwasuMLFaFqz+2PgZMFkgyZCtWNvgsxm/g9elamAGhUMkSclklEO0WdW5FIxMoV87GtX4/c3Fx8B0/g/v14efqokQP54fsOABw9dobZc5aipaXFls2/UMmoIunpGfQfMJqkpNdKPrAL7I9hPRMK8vIJH7eezCL1tZ3dh4rOdRC/qe+lfksQp8v+r9iwLs4rhxLsOLJY37rP7UclSxMkeWKOT1xPyrvKWCIRXX4bz72TEUT+fgYNfW2+WzkcNR1NCvLFHBm1mqyXqUWyi+g7xxeTeqaIc/NZ7/crLx4WXi/3Pm1p2rUlUqmUA8t38deZCHQN9BiyfBRaejpkJKezcdJq0l6lvlMNEf4L/ahrVZu83HymjZ3Do7gn8vS+g3rQrmMbAM6fvsSqxevR09dlSdA8tHW0yM8XM3HoDJJevBMcTyTCY04/KtczQZwr5qjfemV1MJGI738bz90TEVzfdoaGQ77DrFl9ALTK6aBrZMAKp+FK7r0RFc2S1Rv5beVChePnLoayetN21FRV6dS+DV07eJKTm8ukgEW8Tk5BV0ebudPGUaH8O3szRCJqzvdFp54p0rx87o//ldwiv4Uasweg71SXgjffg5j+gagZ6mG+fIT8txA3cbXib+EzEZaP/kNMnjyZ9u3bs3HjRgYOHAhAbGwsGzduZPv27aXSCLxlzpw58pDV9+/fp2fPnlhbW9O4ceMPlps7d26xx1NSUv52HSp4OiPSUudm+6no2dfGdGZfovstkKfr2dQkqsccBTnKWkuHkLjlBEn7L1K5ZyuMB33Hk2WF+rBGnk6oaKoT4TWNcg61qRXQh5t9F8nT9W1qEtl9LvlFbN6dvhkAkZoq9odmET1OWXfZ27stWlqaNHHrgIuzPYsWzqBzl58AqFnThB49OtHYtT1SqZSQs/s58OcxWrVsyq1b0cyavYTvv+/AlMmjGDvOX8GusacDqprqnP1uJhXsa2Hr/yOX+xdGzyxf35QLPQLJe52hUE7buAJ1BrVDRV2V4qjt4YCapjrbOwVQ1c6c5tN7csBHURinyYRuaBkW6vZad3PjZcxjzs/biU2P5jgP8uLcnEJ1LAcPZzQ01ZnVaTLmdnXoOa0fywbKtCj0yuvTqndbpnmOQ11TncBTvzC6kS8dhnchJiyaQ6v2YknlBacAACAASURBVOVan24Tf2SD368K9XBv1xxNTU26txuArYM1fjNHM6yvbKNVtRrf8l2Xtnzftj9SqZRth9ZxMvgcLq6OxN65x+JZK+jWqyMDhvVmgf8yBbt13vhgS6cAjO3MaTmtJ3sHKvqg2fhuaBsU+iB09SFCVx8CoNvGcZwN3Mm7bNy2m0PHzqCtpbh5L18sZsEvQexcvxwdbS16DR5Hc1cXjpw8R21zU4YN6EXwqXOs3byTyaMHK5Qt39YZFU11ojpMRs++DjX8+xHbP1CermtjRnTPWQq/BbOfh/F86wle7b+AUU93qvp24OnyPUr1/VS+BmGaL1K8vly5csyaNYuVK1fy6NEjCgoKmDp1KoMGDcLS0pKkpCRGjhyJi4sLHh4eHDp0SF72+vXr/Pjjj7i4uODo6MiUKVMoKChALBZjYWGBv78/Tk5OHDt2TOm85ubmNGjQgOjoaADGjx/Pr78W/liXLl3K1KlTi00DGDt2LC9evGDAgAEcP3685J/XuS4pZ2QSiRnX7qJnW0QTWSSSyVUuGozNwTlU6tESAJ061Ug+cx2AtLBoyjnXVbBp4FKXV2dlNtMi7lLO1lzBpo5ZFSwW+2J/aBZVe7RQKFttQFten7tB5h3lHa9NGjtz/MRZAK5cvYaDfX152uPHz/Bq/yMFBQVIpVLU1dXIycnF1dWJ48fPAXDs2FlatWqqZLeiswWJZ2W7l19fu0d525oK9dWrWQWHRT40/9Mf0+7NAFDRVMd+wU9cm7ypeMcC3zpZEPdGFjHh+n0q16+pkF6nnRPSggJ5HoCX0Y/R0NUCQFNPG4lYcbd2HSdLboTIfH//eiw16xf6NiM5naltxyIRSzAwKk9Wmkz0/dva1bhxTqbaFRseTR1HxesF4OBiy4UzMlH6yIhbWDewlKclPk3Ep/tIuW/V1NTIy8kj9s49dN/IU+rp65KfL1ayW93JQi4T+ez6faq+4wOLdk5IpQXFykfWaetITmomcedvKts1rsqyedOUjj+If4xJNWMMyumjrq6OfX0rIiKjuBYZRRMXBwCaNnQiNOy6UtlyzpaknJMdz7gWi159xe+tVs2qmC0cgtWf8zDqLvstaNepRsoZmW/Tr95B39lSye7nIEFa4te/lS+yIQCZALynpydz585lx44dqKqqynsH48aNo1KlSly4cIGlS5cyf/58bt68iVQqZfTo0fTo0YMrV66wb98+Tp06xZUrV+R2dXR0uHTpEs2bN1c6Z0xMDFFRUR/tDbyPJUuWUKlSJTZs2ICHh0eJy6npayNOLxQQR1IAqrJLp6qjScKGo8QOX87tHnOo2s8DHcsaZN6Kp4KHbPipgocTKjpayjbTCm1KJQWIith8suEYt4etILL7PL7t1wbdeiYAiNRVMe7Tmke/Hiy2rvrl9EhLLXwak0gK5MN3YrGYV69kwvULA6dz/a8o7t59QDl9fVLT0gBIT8/AoJxy/H11PW35UA+AtKCwvmo6mtzbeIKrw3/lYs8FmPVzx8CyOnZz+xK7OpicxOT3+lZDT5u89OL9ULFONep6N+bSz3sVyuQkZ2DqZkP/0wtwGuTFzZ3nFNK19XTkOsEABZICVFRVFN679/XE/0AgYcH/B8DDqHjs3Z0AsG/thIa2cggMXT1d0t80HPCubyWkvJYNJU2cOYo7t2KIf/CIlORUXJs35PCFP/hpWG/2bvuzWB/kvlPfoj6w8m7M+Xd88JbGQztwcVnxqlutWzRBTU150CEzMxM93cLeha6ONukZmWRmZaGnpys/lpGZqVRWVV8HSdHvbUHhb0FFR5PnG4O5N2IZd3rOonLftuhY1iArKo7ybWS+reDhjIpO6YYXKUBa4te/lS9yaOgtU6ZMwcvLi7/++otdu3ahqqpKQkICERERBAUFoaGhQb169ejYsSMHDhzA2tqarVu3YmJiQnp6Oq9evcLAwICXL1/KbXp6eioMLfn7+zN79mzEYjHZ2dk0a9aMGjVq/E8/pzg9G1W9IjdyFRW5wLskO4+EdUfkY54pF2+ia1WDuJmbMZvng1HHJqRevIn4dZqSTTU97SI2RUjlNnN5HBQst5l88Rb69WqQefsRFdzqkxp6B0mRm3JR0tMy0NPXK1JVFQWtaE1NTdav+5n09EyGj5Cpt6Wlp6OvJyujr69HSqqyyE1+RjZqukV8IFKR11ecncu9dceQvKnvy4u3MbQ2paKLBXo1K8O4TmgY6uGyejhXhqxUsJuXkY1GET+IVArt1uvaBP0q5flh5xTKVauIJF9M6uMk6vdswdU1R7ix7QwV61bHe+0oNntMkdvIzshCS7fQpoqKCgUSxSWGpzYf5ez2k0zYPA3LRtYc+nUvvWf64LfNn5shf/E6QVnkJjMjU/50L7OrqMOtoanBvGXTyczMImCibOhw2PiBbFi5hT+27KdOvVr8smkB3s17KvtAt3gf2HRpgn7l8vTcMQWDahUpyBeT+iSJByE3+Ka2MTlpmcrzCR9BV1eXrKzCm3lmVjbl9HXR1dEhKytbfuztd6IokvQsVIp+b0WFv4WC7DwS1h+Wf2/TLt1Ep54pDwM2YzrXh4odm5J68YbCsFFp8DWsGvpiewQgGyLq0qULbm5u8ptzQkICYrEYV1dXHB0dcXR0ZMeOHTx//hyRSERYWBgtW7bE29ubDRs2kJ+fr3AhjYyMFM4REBBAeHg4f/31F5cvX0YikTBhwoT/6edMD4umfCt7APTsa5MV/Uiepm1eFZuDc0BFBZGaKuWcLcm4+QDDZrY8/nk3t3vORVogJeW8Yrc+9WoM37SSyXCWc6hN5p1CmzrmxtgfmgUqIkRqqhi61CX9ZhwA5d1seHVaucv+lkv/F4ZnW1mX3MXZnlu37iik79+7kRs3bjN0mB8FBbIf8OXL4Xh6ysq0bduCixevKtl9FRZLlVYNAKhgX4u06MJhKX3zqjT/c4a8vhWd65Ac+YDjTScQ0mUuIV3mkpeSodQIADwNj6VmC1sAqtqZk1TE7vl5O9nmPZM/fphL1J4LRKw/SnzIDXJTM8l981Sa9SpNoSEB2dBOgxay62VuV4fHMQ/laVXMjBm5Vib0LskXI87LR1pQgIWLFRf3nWPBjwG8ePycu+GKfgO4djWSZu6uANg6WBN7575C+q9bFhN9+y7+4+fLfZuWkkZ6mmze5HVSsvyJuyhPwmMxf+MDYztzXsYU+uDs/J1s7jiT7d3ncnPPBa6uPyofRqrpal3scNHHMDOtzsMnz0hNSyc/P5+IyFvYWltiV78e5/8vDIALoWHY21oplU0Pi6Z8y7e/hTpkRxf6VsusKlYH5sl/C/rOlmTefICBmy1Pl+wi+sfZUCAl9XzpBkgs7R5BZGQkHTt2pEGDBvTs2ZNHjx4p5UlPT2fMmDE4OzvTsGFD5s2bh1gsG/YrKChg7ty5uLi40KhRI4KCgj56zi+6RwCgqqqqsHLIyMgIPT09wsLCEIlEALx48QI1NTWePn3KrFmz2Lt3L7Vq1QKgffv2CvbelimOb775hh49esgbgnefdj9lIrgkvAq+iqGbLTaH5oII7o1ehfGg9uTEJfL6RDgv912gfvA8pPkSXu4OITvmCao62tReNpSC3HyyYh7zYPJ6BZsvg69SoVl9HA7PBpGIO6N+pfogL7LjE0k6HsHzvRdxDJ6LVCwhYdd5MmNkq1N0zI1J3BXy3roeOHAU91ZuXAj5E5FIxICBYxg9ypd79+NQVVXFza0hmpoatPWQzTtMnRbImrWb2bRxOSFn95OXl0+vPsOU7D4NDqeSmw0tDvqDSET4mLXUHuRJRtxzEk5c49G+y7Q8EoA0X8LDPRdJi31aIt/ePRZOjabW9Ng3A5FIxLHxQTj4eJLy8Dn3T14rtszFn/fgscCHBn3cUVVT5cSkDQrpEceuYN3Elhn75oFIxLrxK2nr8x3P4xO5fiqMx7fj8d8fiBQpN85eI/rKbSrVqMLgpbJVTcmJr1k3cZXSeU8eOUfjZi7sOLIBkQgmj5xFv8E9eRj3BFVVFZwa2aOhoYFbS9nQ5ZK5q/glcA2zl06jR/+uqKurMX2c8iKGmGPhmDaxpvcbHxweH4STjyfJ8c+5d6p4HwBUMK9K3IVbJfIzwJETZ8nKzqabdzsmjhiI75ipSKVSOnm1obJRRX7o5MXUOT/Te8g41NXUWThzopKN10evYOBmi9XBeYCI+2NXUsX3O3LjE0k+EUbS/vNYHw5EKhbzcvc5smMfo6qrhdmSYUjzxGTFPCJ+yroS17kklOaqodzcXIYNG4afnx8eHh4EBQUxadIktm/frpAvMDAQFRUVzp8/T05ODn379mX//v1069aNrVu3EhkZyfHjx0lNTaV///7Y2NjQqFGj9573i9csXrFiBU+fPiUwsHDlQPfu3WnSpAm+vr68evWK/v370717dxo2bEiPHj04ePAgxsbG7N69G39/f+bNm4e3tzdWVlaEhIRQpUoVQLZ8tHv37vJVQxkZGfj5+ZGVlcWmTZtYuXIlZ86c4bfffiMxMZHevXvj7u7O3LlzGT9+PGZmZgwdOlRh+ai7uzvTp0+nWbNmH/1sl6p0LXV/5UrLphPYJvlSmdgtqzDU8ervb/A/lUhR1sczfQJlFYa6r7ZFmdj9ksJQN3y277NtOFZVXtzwPsITLnwwPSQkhEWLFnH48GEAJBIJDRs2ZOfOnZibF06Mvx3JUFNT48GDBwwfPpxx48bRunVrunXrxoABA2jbti0AGzdu5ObNmyxdurTYc8IXPjT0PpYtW8adO3do2rQpXbp0oWXLlvTp04e6devy448/0qVLF1xdXQkJCcHDw4P79++/19a0adOws7PDzs6OFi1aoKKiIm90evXqRaVKlWjRogVTpkyhS5cuH62bt7c3o0aNYs+e0lu+JiAg8M8hkRaU+PUx4uLiMDMrXBWoqqpK9erVle5R6urqaGhoMHr0aLy8vPj2229p0ULWy37w4IGCjZo1a3Lv3r0PnveLHxoaMWKE0rEqVaqwapVy1xpkyzrHjy/+6SImJkbh/Y4dOz54bkNDQ9asWVNs2uLFi+X/nz9/XqG+xdVZQEDgy6Q0VwNlZWWhpaW4wk9bW5vs7OIXZyxatIjp06czePBgli9fzrhx48jOzkZbu3DeSktLi5ycnA+e96vsEQgICAj8r5D+jb+Poa2trXTTzs7ORldXeZIfZKvwjIyM8PX15dy5c4DyjT8nJwcdHZ1iy79FaAgEBAQEPoMCqbTEr49hZmZGfHy8/L1EIuHRo0fUrKm4yW/QoEHyGz9AXl4e+vr6xdqIi4tTKv8uQkMgICAg8BmUZo/AxcWFV69eceDAAfLy8li9ejUmJiYKE8UA9erVY82aNaSmppKQkEBQUJB8UYuXlxdBQUG8evWKR48e8fvvv/Pdd9998Lxf/ByBgICAwD9JacYa0tLSYu3atfj7+xMQEIClpSXLlsliQ3l5eTFo0CA6dOjAkCFDSE1NpW3btmhqatKzZ0++//57AHr37s2LFy/o0KEDUqmUfv360apVqw+e94tfPvo1c7LyD6VuM0dUNp3ASdIHZWK3hbZpmdhNlBY/+fY5ROe8KHWbAM9z3h8i43PoX96+TOx2zsstdZsONxZ/PNMnoF7R7OOZPkIdo5JHEo59Gf7Z5ysLhB6BgICAwGcghKEWEBAQ+I/zNYShFhoCAQEBgc9A6BEICAgI/MeRlmDH8L8doSEQEBAQ+AxKEjri347QEAgICAh8Bv9mwZmS8sGG4H8lEj9+/HiOHTuGuro6IIunbWhoSLdu3Rg+XFkQ+3/B5cuX8ff35+TJk/JjqampNG3aFC8vL+bPn//esmKxWCmS6VsePnyIp6cnt2/fLnllRCIsFwyQC83fHrtWQWjeYm4/DJ0s5MLtkX0XYTbxe/StZBoNmpUMyU/LIqyo0LxIhE3gT5SzMqEgT0zk2CCyiti0mtOXCk51EGfKtqqH9V2MSFWFlpeWkvYmXn1icBhx6xUlPUUiEdMXTMTCqjZ5uXn4j53Ho/hCgfU+g7rj2bE1AOdPXWb1zxswMCxH4KoA9PR1SUlOxX/cPF4nJSvZ/WHOAL61rIE4L59tfmtJekcQRSQSMXiTHzdPhnNx2ym09LXpu3QEWvraqKmrsW/OFuKu3VUqM3DOYGrUq4k4N5/VfitJfJggT2/bpx3Nu7ZCKpWyZ/lOIs6E03FIF+yayZZe6pTTxdCoPAOd+r7jgwnUsapNfm4+M8bO43ERH/Qu4oMLb3xQzrAcgatmyn0wc9z8Yn2wcMlMrKwtyMvNY8zIacQ9KIxVP2hoXzp18QLg1IkQFi8ojLdVq7YZx0/vol7txuTm5inZ7TTnJ6pamiDOE7PHL4hXxfi2/6aJ3D4ZQei2U/LjRubGDN8/m9lOgxHn5vNOoTITmr8RFc2S1Rv5beVChePnLoayetN21FRV6dS+DV07eJKTm8ukgEW8Tk5BV0ebudPGUaG8oZLNT+VrWIH/0YbgfyUSP3ToUIYOHQrIHBsaGoqvry8NGjSgSZMmpXaez+Hw4cO4u7tz8uRJJk2ahIGBwf/kvJXeCM2HeU3HwKE2dQJ6E9m3cF21vk1NrnWfpyA0H1tEaN7pUAB33hGar+LpiKqWOpfa+2NoXwurmb0I6/ezPN3QxpQrPQLJK2KzYlNrnh64zK2pv723rq08m6GpqcGPXj7Ud7BmQsAoRvSV6TdUq2GMV+e29PD8CalUytaDazl9NIQO3dpx7epfrFu+mYZuToyaMgT/sfMU7NZv44Sapjo/d56OqV1tOk/rTdBAxbXl7cf/gK5hoapVS5/2xFy+xbmNwVQyq0r/X0axoP0khTLOHg1R19RgaqeJ1LazoO+0n1gwUBazX7+8Ph692zHecxTqmhosO7WSiEYDOLB6LwdWy6QbJ2+czu+Bm5V8oKGpSS+vgdR3sGJCwEhG9p0o90H7zh708ByAVCpli9wHnly/GvlBH7Rr746WpgbtWnfHwdGWgDmT6NNT9pupYVqNrt93wKNlN6RSKYePbSf48CluR8Wgp6/LrLl+5OYp31ABrNo4oqapzqrO/pjY1aL9tF5sHvizQh6P8d+jY6ioGKapp037qb2Q5L3TALyhrITmN27bzaFjZ9DWUpSczBeLWfBLEDvXL0dHW4teg8fR3NWFIyfPUdvclGEDehF86hxrN+9k8ujBxdb5U/gaVg19cHfRPyUSLxKJaNSoEaampvLwqRkZGUybNo3GjRvTsmVLNm0qFCTv0aMHa9euxcPDAzs7O+bNm0dwcDDNmzfHxcWFbdu2yfPu2rWL1q1b4+TkhI+PD48fF8Z6X7lyJS4uLri5uRESoiy+snfvXry9vWncuDH79yvqtJ46dYrWrVvj6OioJFr/xx9/0LRpUxo2bPhJ4acNXSxIeiPcnvoeoXnLxb44HZqFcY/mCmWrD2jLq3M3yHhHaL6CswUvzshsply7h4FtkY01IhG6ZlWpv8gH14Mzqf7GpoFtTQxsTGm8fwYO60ahWUn5qcrexZaLZ0MBuBFxCyvbQhH2xKfPGdRjVKHAuroauTm5mNepyYXTMu3e61dvYO9sq2TX3MmCOyGy+sZfv4uJjeKW+waeLkgLpNw+95f82NkNR7i0TdajU1FVJT9X+UZY18mSv0Jk4it3r8dgVr+WPC09OZ1xbUciEUswNDIkM01RQ9elbSMyUjOIPK+o2GbnYsuls//3xgdRxfhgdBEfqJKbk4vZOz6wc66vVFeXhg6cPi2LZx8RHkkDO2t52tMnifzQ2UfBtzk5so1dS5bPZu6sJWRnFb+JztTJgpg3vn10/R7VbBQ3Wdl4OiMtkBJTxLcAXeb7cGzRTvJyim9gykpovrpxVZbNm6Z0/EH8Y0yqGWNQTh91dXXs61sRERnFtcgomrg4ANC0oROhYe9X2PsUSjPExD/FR7eZ/hMi8QUFBRw/fpy4uDicnGSi03PnziUtLY0TJ06wefNmdu7cyfHjx+Vljh49yo4dO9izZw9bt27l8OHDBAcHExgYSGBgIGKxmNOnT7N06VKWLl3KpUuXsLGxYfDgweTn53P06FH27NnDnj17OHDgABEREQp1io6O5sWLF7i6utKlSxd27twpT0tMTGT8+PHMmDGDy5cvk5SUJE+7ceMGCxcuZM2aNZw+fZq7dxWHJkqCmr7OB4XmH284zq1hK7jWfR7V+7VBr4jQfLU+7jz89VAxNrURFxEs5x2bcRuOc334KkJ7BGLarzX6liZk3H1GzKI9XO40i8Sj4VjP66dkV1dfVy6NCDIh9OIE1sf7j+TOzVgePnhMdFQsLTxk4h4tPJqira2lZFdLT4fs9wjCV61THUfvJhxZskuhTHZaFvm5+egbGdB32XAOLlQOKy4Tmi+8wRcnNN+2rxfzDywiNPiyQtlOQ7uye9lO3kVPX1Fk/v0+GCH3QUwJfKBfTo/01ELfSiSSInbFvH4tG0qaOWciN2/c5sH9eCZMGs7J4yFE3YpRsvcWLT1tct7j28p1qtHA25UTS3YrlGk9ugvRZ66TcEdZRvEtZSU037pFE9TUlAczMjMz0SsSpVNXR5v0jEwys7LkEp26OtpkZGYqlf0cpFJpiV//VkoUb2DKlCncvn2bX375hQULFiiIxE+YMEFJJB5g69attG/f/qMi8W9jb69ZswZHR0dsbW2xsrJix44drFq1CisrKyQSCYcOHWLChAno6elRvXp1+vTpo/BU3qlTJypUqIC5uTnffPMN33//PTo6Ori6upKXl8erV684fPgw3bt3x9raGg0NDUaMGEFKSgpRUVGcPHmSbt26Ub16dSpUqICvr6+CD/bu3Uvnzp1RU1OjadOmZGVlERoqe/I9d+4ctra2NG3aFA0NDcaOHSsvd/LkSTw8PLCyskJXV/eTtAjE6VmoFRGvF70jNP/ojdC8JDOH1xej0K8nmxv4xs2G5NA7iIsRmhenZ6P6AfH6B+uOInljM+liFAZWJiRdjCLpUhQAiUfDMLA2VbKbma4osC56R85TQ1ODhatnoaunw2w/2fjuuuWb+ba6Met3r6CKcWUSnymLoedkZKGpq+iDt4Lwzp3dMKxSnpE7puPStRktB3hh2eyNBq9FdUZum86hRTu5d0VZB1hZaF6kJDR/bPMRBjr1o56LFVaNbACoVrs6mWmZCvMJb8kogQ8WrA5AR0+HOX6L3vhgC8bVq7Ju9wqqGFci8ZlyuIr0tAz09AtvdO9KpWpqarBm/WL09HSZODYAgG4/dODH3l04cHgLlSobsXv/xmJ8m42mgnh9oQ8cOrthUKUCvjum4dC1GU0HtKNOM1vsOjbB6YcWDNo5HX0jA3y2TFayW1Kh+YLMHAWh+fJtnKi7bTrSgoK/JTSvq6tLVlZhw5OZlU05fV10dXTIetMbyszKRl9P730mPonSFKb5pyjRqqG3IvFPnz4tViT+LRKJBFdXV7lIfL9+/QBZpLyPicQPHjyYoUOHkp6ezpQpU8jMzJRrbCYlJZGfn0+nTp3k+QsKCjA1NZW/Lzper6Kigt6bi62iImvrpFIpr1+/pnHjxgr5KleuTGJiIklJSQppxsbG8v/z8vI4dOgQEomEvXtlY8NpaWns2LGDhg0bkpSUROXKleX5DQ0N5fG/k5KSFCaMi9otKSlXYzBq48Dzg6EYONQmo8hTmK65MTZrRxHq7odIRQVDFwuevdEUruBmw6vTfxVrMzkslspt7Ek4GIqhfS3Si4i265lXxX7NSM63noxIRYUKzhY83nUe2yW+JBy5SsLBUCo2sSb1RpyS3etXb9C8TROOHzxNfQdr7t5RVEZauXkRVy6Gs2HlVvkxx0Z2HNwdzNVLEbT2asH1q8qC6A/CY7B2d+D6kVBM7WrzLKbQB38GFg79tRvdlbSXKdwJiaRKrW/56dcxbBq+nKd3HirZBIgOv4NjK2f+78glattZ8KiI0Lyx2bf86NeHRYPmI84Xk/9GaB6gvqst189FFGtT0QdW3H1HZH7F5oVcuRjBRgUfNODg7mDCLl3D/T0+uHrlGh5tW/Dn/qM4ONpy53asQvrWHb9y4fwVViwr1OR1tmsj/z/ixmm6dfpJyW58eCz13O25cSQUE7taJBYRrw8OLNTKbT26C+kvU4kNiWRh8zHy45Mu/sL6PsqLJ9LDoinf2pHXhy4XKzRfe/U4bnqMR6QiQt/Zkpe7zsmF5rPuPKTqoA5/S2jezLQ6D588IzUtHR1tLSIib9GvZxeeJb7g/P+FYVPPgguhYdjbWpXYZkn4GuYISrx89H8lEq+vr8/ChQvp1KkTc+bMYdasWVSoUAFVVVVOnTqFoaFsXDo5OZm8IpNfHxKdf0uVKlV49uyZ/L1EIiEhIYFvvvkGIyMjEhIKn+6K9l7OnDlDpUqV2LChUKT82bNn/Pjjj7x8+RIjIyOFYa+MjAz5k8mH7JaUF8FhfNOsPk6HZ4FIRNSo1Zi8EZp/eTyChL0XcQ6ei1QsVhKaf7brfLE2E4LDqOhmg+uhABBB5Oi1mA1qR2bcc56fiODpvks0DZ5NQb6EJ7svkBHzhDtzd9Bg6SBM+7VGkpVL5NggJbungs/RqJkzvx9eh0gkYtqo2fQd1INH8U9QUVHBsZEd6hrqNGkpa+SXzfuV+HsPmbfSX/ZZE14yfYyywHrk8TDqNq3P2L2zEIlE/D5hNS0HePHyYSI3TxV/Q+7g1wN1TXW6+stW9GSnZylNMF89FoptkwbM3bcARCJWjV9Oex9vEuMTCD91lfjbcczbvwgpUq6fjeD2FVmPyNj8WyIvFN/Ing4+R+NmTvx+OAhEIqaPmkOfNz5QfeMDDQ0NmhbxQdy9R8xfOQOA5wkvmVGMD44cOkmzFq4cObEDkUjEyKFTGDysH3EPHqGqqkIjV2c0NDRo5S4bYpoTsITwsOLrWJSo42HUaWrD0L0BiESwa8Jamg5or0N6twAAIABJREFUx6uHz7n9Ht+WhP+V0PyRE2fJys6mm3c7Jo4YiO+YqUilUjp5taGyUUV+6OTF1Dk/03vIONTV1Fk4c+Inf6bi+DcP+ZSUEkcfLUuR+KJC72+JiIigV69ebNy4kUaNGjF27Fh0dXWZMmUKubm5DBs2DEtLS6ZNm6YkMl9ULL7oUs779+8zfvx41q9fT+3atVm9ejV//vknx44d49KlS0yfPp3NmzdTsWJFhgwZwsuXLzl58iQDBw7E0dGRQYMGKfikS5cuuLu707VrVzw8PFi4cCFubm4sWrSILVu2EBISQkpKCj179mT9+vVYWlri5+fHqVOnSrR8VIg+KkQfBSH6KPy7o48a6Jl/PNMbUjPer4/+T/JZd4XSFIl/FwcHB7p06cKMGTPIyclh5syZiMVi3N3d8fDwwMTE5L3aw+/D1dWVMWPGMGbMGFxcXLh27Rrr1q1DQ0ODFi1aMGDAAHr37k27du1o0KABAM+fP+fSpUt4enoq2fP29mb37t188803rFixgsWLF+Pi4oKKiopcLahu3brMnDmTsWPH0qxZMwVRaQEBgS+fr2GyWNAj+Bcj9AiEHgEIPQL4d/cIdHVMS5w3Myv+s89XFgghJgQEBAQ+g//UZLGAgICAgDJfw6CK0BAICAgIfAb/5h3DJUVoCAQEBAQ+A6FHICAgIPAf52toCIRVQwICAgL/ccpmLaGAgICAwBeD0BAICAgI/McRGgIBAQGB/zhCQyAgICDwH0doCAQEBAT+4wgNgYCAgMB/HKEhEBAQEPiPIzQEAgICAv9xhIbgC+f169f/dBUEBErEyZMniz2+b9++/3FNBN5F2Fn8BZKdnc2CBQs4cOAAAAcOHGDEiBGsWrUKExOTT7JZVMLzfXyK3jLItuBfvnxZQaYzPz+fBw8e4Ofn90k23xIeHo6joyPJyckEBQVhaGhI//790dDQ+GSbpVnf+fPnM3mysrB7aRAZGYmtrW2Z2H769Clr167lyZMniMVihbQtW7aU2E5KSgoPHsi0KgYMGMDGjRsVQjJkZGQwatQorl+//rfraGVl9VGJ2lu3bv1tu/9FhFhDXyBz584lMzOT/fv38/3331OtWjWaNGmCv78/mzZt+iSbLVu2RCQSvTduikgk4s6dO59ke+rUqZw9exYDAwPy8/PR19cnJiamWNW3v8OCBQs4fvw4Z86cYerUqWRkZKCurk58fDzz5yuLqf9/e+ceTlXe/v93wmgaDxki5Wq+HYbSwVlkiJFDg4p0GlNNB+kw9UhnOjeTqEbyTGU6zWNKqFRyaoykETL0dHCVSo0pRA5bNrL35vP7w8+eNqmstfawx+d1Xa6Ztdb2XrfSutfn/tyHrrA3JiZGwhHY2dkhNTWVsW2v8/XXXyMvL098vGfPnk5P7esIX19faGhowNnZGfLyzB8TioqK2LZtG3g8Hl69eoV///vf7a4vWLCAkXZiYiIA4MyZM3jw4AFWrFgBbW1tlJeXIywsTDwvnfIeEIrMYWlpSerr6wkhhJiamhJCCBEIBMTExKQrzeoQExMT8vTpU3Lz5k3yzTffEEIIiY6OJj4+Pqx07ezsyIsXLwiPxyMjR44kJSUlpL6+Xvxn0h3sNTAwaKfNFW212f7cr2NsbExEIhFneoQQsmrVKk71WrGwsBD/e2ilvr6emJmZSeV+/0ToikAG6dOnDyorKzFo0CDxucrKSvzrX/9irU2kEMaRl5fHoEGDoKqqKl6qu7u7Y9++faxs5fP5UFNTQ3x8PIYMGYIBAwagrq7uneGCv9Petrawte1tWoTDKK+RkRFu3boFIyP24yxbVy1ffvmlxAqm7f2YIi8vj6KiIujp6YnPFRQU4MMPP2Ss2dOgjkAG8fLywsKFC7FgwQKIRCIkJSXhxx9/xMyZM1lrb9y4EWlpaZyGcYYNG4a4uDi4urqid+/eKCwshKKiIpqbm1nZam5uDj8/P+Tn52P69OkoLi7G5s2bYWVlxUpXWvZKGy6cTGsYq7m5GfPnz4eVlRWUlZUlPtPZsJuvr+9br/fq1QtpaWmd0nydZcuWwcvLC05OTtDU1ERJSQl++eUXbN26lbFmT4M6Ahlk3rx5+Pjjj3H+/HkMGDAAp0+fxqxZszBt2jTW2ikpKYiNjUVFRQWOHTuG0NBQxMTEsIprr1mzBr6+vjAwMMCyZcvg7u4OOTk5zJ07l5WtgYGBiIyMhIWFBTw9PVFYWIhRo0bBx8eHlS6X9jY2NmL+/Pni4/r6eoljADh27BgjO0UikThhAAAEAoHEMQBMmTKlU5oDBw4U/9fAwICRXW25evUqJzodMWPGDIwYMQIpKSkoLS1F//798fPPP0usEChvh2YNySj37t3DoEGDoKysjJs3b6JPnz6c/OJbWFggMzMTfD4fbm5uSE1NRVNTE6ysrJCZmcmB5UBZWRn4fD6GDh3KSsfd3R0RERHo27cvJ3Z1BBt7Y2Ji3vkZT09PJmbhq6++euv1Xr16dSrD53USExPfuAqMiYnptL1Hjx7FggULcOjQoQ4/w8R5l5WVvfMzmpqandbtidAVgQwSGRmJ/fv3IyIiAsrKynjy5An27duHtWvXws3NjZW2tMIit2/fRmxsLMrLy7Fz505cvXoVQ4YMYRXOePnyJWpqaqTiCLiyl+lD/n2IiIjgVK+6uhqPHj0C0BIi0tDQaJfq+d1333X6Z3ry5AkAoLCwkDtjAdjY2LT7+/jwww9RX18PAFBWVsaNGzc4vec/FeoIZJDw8HBERkbi//7v/wC0vBmPHTsW3t7erB1BR2GROXPmMNa8cOEC9uzZA3d3d1y8eBFNTU04d+4cKioqsHbtWsa6n376KaZMmYIxY8ZAQ0ND4hqb9FGu7Y2MjIS8vDw8PT1RWlqK1atX48GDB7CxscGOHTvQp08fxrZWVlaisrISn376KQAgKipKrG1tbd0pLSUlJezatQs8Hg+NjY3tflZFRUV4e3t32sadO3cCAIKDgzv9vW8jPz8fhBAcPHgQFRUVWLVqFVRUVMDn87F//35Waa89DRoakkFMTEyQkZGBDz74QHyusbERNjY2yMrK4vReXIRxHB0dERoaCl1dXZiamiInJwdlZWVwd3dHRkYGY92wsLAOry1fvpyxLpf2/vjjjzh9+jQ2bNgAe3t7LFq0CCKRCCtWrMCpU6egoqKCgIAARnbm5uZi4cKFmD17NtasWYOQkBBERUXByckJV69eha+vL1xdXRlpr127FkFBQYy+tyM2bdrU4bUdO3Yw1jUzM0NGRgYUFBTE54RCIcaNG4fc3FzGuj0J6jJlkPHjx8Pf3x++vr7o378/ysvLceDAAYwfP561dtvNxlbu3LnT6Y3HVmpqasSOpHUpr6amhqamJmZG/n86etjX1NSw0uXS3jNnzuDQoUMYPnw4ampqkJGRgaioKIwePRra2trw8PBg7AhCQkKwceNGeHp6QiQS4eTJk9i2bRsmTZqEO3fuwN/fn7EjCAoKwh9//IGKigpxeEgkEqGwsBBeXl6MND/++GOJYx6Ph6SkJNZJDqqqqsjJyYGlpaX4XHp6Ovr3789KtydBHYEMsm3bNgQEBMDR0RFNTU3o3bs3nJycsHnzZtbaZ8+elTjm8XgoLCzExIkTGTsCc3NzBAYGYs2aNeJzP/zwA8zMzFjZmpOTg71797Z7WFVXV+P27duMdbm0t7y8HMOHDwfQ0g6jb9++GDVqFICWjcy6ujrGdt67dw8//fQTgJYwSUNDA2xsbAC0tF94+vQpY+19+/bh2LFj4v0XQghqa2sxbtw4xo6gbVUxAMyePZuxI2xl7dq1WLZsGQwMDKCpqYni4mLcu3cPBw4cYKXbk6COQAZRVVVFWFgYBAIBampq8PHHH0NOjpv+gW/agExISEBycjJjzS1btmDNmjUwNjZGU1MTjI2NMXLkSNYFZVu3boWtrS369u2Lu3fvYurUqQgPD2e1n8G1vcrKyqiqqoKamhoyMjJgbm4uXmUUFhZCTU2Nla2tZGdnY+TIkeIHd319Pat+SzExMYiOjgafz0d0dDT27NmDsLAwVs7lTQwYMEC8mcwUe3t7JCUlIS0tDRUVFTAyMsL3338PdXV1jqz850MdgQwRHh4Ob29vqcXGO2LixIlvje++i6KiIoSHh6OqqgqlpaXQ0NDAgAEDWNtVUlICPz8/FBcX48qVK7C3t4e+vj7mzZvHuH8N1/Y6Oztj3bp1GD9+PGJjYxESEgKg5W3+22+/ZVWoZ2hoiMjISDg7OyM2NhYeHh7iaydOnGBVrdvU1ISRI0eCx+Phzp07AABvb2/Y2dkx1mybPioSiZCWlgZjY2PGmq1oampixowZAFo20M+cOYPo6Gj8+uuvrLV7AtQRyBDFxcUS/5UGOTk5EscikQiJiYkYPHgwY00fHx9cu3YNGhoa7bJ72NC/f3/U1dVBW1sbRUVFaG5uhpaWlkR7DCZwaa+fnx8OHDiAa9euYd26deLQzZdffonPP/8cK1asYKy9fv16LFq0CDt27ICJiYm4rsDV1RUvXrzAyZMnGWsPHjxY3Nm1oaEBZWVlUFBQwKtXrxhrtk0flZOTg62tLeNQU1tu3LiByMhIpKSkQFdXF/PmzeNEtydAs4ZkkGPHjmHGjBlSyZ9v+8YnJyeHwYMHY82aNYwL1lasWAETExNMmjSJ0+X67t27kZOTg/DwcGzevBnKyspQUlLCrVu3WPW4l4a9reGhVkQiEeTl5fHkyRNxGjATmpubUVZWJrFiSUhIgIWFBfr168dY9+rVq/Dz88OFCxeQlJSE48ePQ15eHpaWlvjuu+8Y63JNbW0tzp07h6ioKNTV1YHH4yEiIgJjxozpatNkCuoIZBBzc3NkZGTITJ60lZUVKioqJIp/CCGsWlsDLQ/BCxcuwMHBAY2NjQgJCcHLly/xzTffsEp3lYa9RkZG7RquvXr1CpaWlh02YntfbG1tcenSJc5fDOrr66GkpAQ5OTncvHkTL1++hLW1NaMiwMzMTBQUFMDS0lL8YpGRkQEDAwMEBgYyWnlt3LgRKSkpsLCwgIeHB6ysrGBtbY0LFy60y1CivB3qCGSQgIAA8Pl8ODg4QF1dXeIfpqmpKSvtX375BampqXjx4gXU1NQwYcIEODs749SpU9DU1IS9vX2nNTsKZTU3N0NHR4exrUKhUCJ3vLi4WNwrhw1c2VtcXAw3Nzc0NjaKVwBt9SwsLHD06FFW9rq5uWHXrl3Q19dnpdMRd+/eRVZWFsaOHcvo9+vHH3/E0aNHYWBggPz8fOjr60MkEmHmzJk4f/485OTkEBoa2mndsWPHwt7eHpMnT4aVlRXk5ORgZWVFHQEDqCOQQTrasOvVqxfjzTGRSISlS5fizp07mDBhAvr374+KigqkpaVh6NChePbsGaKiojiJ8b948QLR0dE4c+YMrly5wsjWTZs2QSAQYO/evQBaQi9WVlaYPHkyduzYwelqiY295eXlaGhogJeXV7uYvaKiIjQ1NVl3DZ07dy5yc3Oho6PT7sWgs72G/vjjD6xbtw4FBQWwtrbGtGnTsHLlSgwZMgSPHj1CQEBAp1tMTJgwAUePHsXQoUNRUFCAKVOmICMjA2pqauDz+fj888+RnZ3dKU2gpcVIXFwczp49i4qKCkydOhWnT59GYmIiZ9lYPQXqCCgAgMOHDyM9PR2HDh2SaDvM5/Ph7OwMW1tbbN++ndU9MjMzERkZidTUVIwaNQpubm6YPXt2p3W+//573LhxA7t375YYzVlUVARfX1/Y2dlxkj3Flb2tNDc3o7Kysl3fJraN0WJjYzu8NnXq1E5pzZkzB/r6+pg8eTLOnTuH06dPIyQkBHZ2dsjOzsaWLVuQlJTUKU1DQ0OJUZRtj42NjVlXAN+/fx/nzp1DXFwcNDU1MWnSJDg7O7NacfYo/sYhOBSWvHz5kqxatYq4uLiQHTt2kLq6Os60nZycyMOHD9udv3LlCvn888+Jg4MDI10ej0eOHj1KHBwciK2tLRkzZgy5c+cOK1vt7OzIs2fP3njtwYMHxN7enrG2NOwlhJBTp06R0aNHEz09PaKrqyv+0tPTY63NJYaGhqSpqYkQQkhjYyMZOXKkxHUjIyNGmq/TdpJa2+tsEAgEJDExkSxcuJDo6+tzpvtPRzZ2GykAgO3bt6OiogIzZ85EXFwcAgMDWb+lt1JWVvbGGa+ampoIDg5u10P/fVi3bh2uXLmCzz77DFu2bMG4ceNgbW3NuoaAx+N1uBcwfPhwVFZWMtKVlr0AsH//foSGhmL8+PGcFf/p6em9M6zEZHO71T5FRcV2G9CEQQBBJBLh0qVL4u8VCoWIi4sTX2fbauR1FBQU4OTkBCcnJ5SXl3Om+0+HOgIZIj09Hampqejbty8mTJjAWf410FKt/PTp03ZL6REjRuDPP/+EqqpqpzUvX74MW1tbuLi4wNzcnLMHoJaWFgoLC9+YGfTkyRPGaZPSshdoGS86btw4ic1ttshKsZS+vj5OnTolPh4xYgQiIyMlrjPBwcHhnY6QTUV8T4I6AhlCJBKJ39AGDhwIPp/PmbajoyOCgoIQEhKC3r17i883NTUhODgYTk5Onda8du0a4uPjcfDgQWzatAlTpkyBUChkvTk6depUbNmyBWFhYRIOqrq6Gps3b8YXX3zBSFda9gIt/XBWr14NT0/PdqMfmVYAHz9+nHWfnrY0NDTg888/Fx/X1taKjwkhjArKWh/6ly9fho2NjUTXXDZs27YNQEvNQ25uLry9vaGtrY3y8nIcOXIEhoaGnNynJ0A3i2WItrnoZmZmnA3eqKurw+zZsyESieDg4ABNTU2UlZUhOTkZSkpK+Pnnn1kNA3/06BHOnj2LuLg49OvXT7yZ98knn3Raq7m5Gb6+vkhPT4eRkRHU1NRQVVWFvLw8WFpaIiQkhPWbN5f2Ai3zESIiIqCmpibhaNnM6237+zBhwgRWs38BvNfvE9NmgdKqf5kwYQJiY2MlVoI1NTX44osv8Ntvv3F6r38q1BHIEIaGhkhISBDHWt3c3BAXFycRt9XW1masLxAI8N///lfcvEtdXR22trb46quvWDUwe52mpiZcuXIFZ8+exbVr13D37l3GWtnZ2bh+/Tqqq6uhrq6O8ePHc9K35nVa7T1z5gx+++03xvYaGRnhzJkzGDJkCGe2tc2+aZ2d0F3ZunUrPvroIzg5ObVLQ2aTOTVu3DicPXtWYt+osLAQc+bMYTXvoidBHYEM0bo52NFfGdtKXWnx888/Y9KkSe1yuysrKzkp/KmqqkJxcTH09fUhFAo5Cz201eXz+YztdXR0RHR0NFRUVDixDZDOCvFtG9CEZXV1Ry1K2P7ehoWF4dy5c/D09ISmpiZKSkoQHR2N+fPn035D7wl1BBQALYPQ3xULZzoI3cfHB9nZ2TAyMoKLiwsmTpyIjz76iJHW61RVVWHdunW4fv06FBUVcfbsWXh5eeHw4cMYPXp0t9INDw9HUlISpk6dChUVFYk/a6bDY6ThCN6noSHT6u23ZQe9Hi5jQmJiIlJSUsQrWVdXV0yYMIGVZk+COgIZpb6+HlevXkVZWRlmzJiBR48esXr4va0oqZXOFie9Tm1tLX755RckJSUhNzcX48ePh6urKyZOnMhYc8WKFdDW1sbKlSthbW2NnJwc/PTTT0hISEBUVFS30u2oEK1Xr16Mu4SOHDkSJiYm4uPc3Nx2obHOOu/3CS2xaWOSlZX1xqlnq1evZqwJtDiZ/Px8PH/+HGpqajAwMJCZXlzdAeoIZJD8/HwsXrwYgwYNQkFBAS5evAg3Nzds2bKF8RSxvwuBQIDExER8//33qKysFPe6Z4K5uTmuXbsGRUVF8dtwc3MzzMzM8Pvvv3c7Xa6RhvN+17wBNm1M/P39kZKSAhUVFXEG3MOHD+Ho6Ij9+/cz0gSAp0+fYsmSJeDxeNDU1ERpaSn69OmDI0eOsOrs2qP4e+vXKFwwffp0kpiYSAghxMTEhBBCyO+//04mTpzIWLO1yvVNX2wrYBsbG0lKSgrx8/MjJiYmxMvLi0RGRpLq6mrGmoS0VEPfu3ePEPJXteqjR4+Io6Njt9N9+fIlCQ8PJ4QQcu/ePTJ9+nTi7e3dYYV0Z0hISHjj+ejoaNbaXGJqakr+/PNPkpeXR7755htCCCGRkZFk6dKlrHQXLVpE9u/fT5qbmwkhhDQ1NZGQkBAyb9481jb3FOjaSQZ5/PgxHBwcAPw1XN3Y2BhVVVWMNaVZnGRhYQEdHR188cUX8PPz46RSFwCWLl2KBQsWwNPTE0KhEEePHkVkZCSWLVvW7XT9/f3R0NCAhQsXYuPGjTAyMsKHH34If39/nDhxotN61dXVePToEQBgw4YN0NDQkEgi4PP5+O677zrdIK4VaUzBk5OTg46ODvr164f8/HwAgKenJ6POo69z69Yt/PDDD+J/C3Jycli6dCnGjRvHSrcnQR2BDDJs2DAkJCTAxcVFfC4tLe2NLSLel9c3AP/44483xnGZVjJHRUWxsq0jXF1dMXDgQJw/fx6mpqYoLCzEjh07YGFh0e108/LykJqaiuLiYjx48AA//fQT+vbtKxHj7wxKSkrYtWsXeDweGhsbsXbtWonrioqK8Pb2Zmxv203j6upqZGVlsQo9tv7eTpo0CUDLC42ioiLrFhMqKip4+PAhRowYIT736NEjOrO4E1BHIIMEBATA29sbp06dQn19PRYvXoy7d+/i4MGDrLX37t2L48ePiyuYCSGora3FuHHjOu0Itm7diq1bt7613/6uXbtY2WtkZMRqNu/fqSsQCJCSkoKxY8dCWVkZJSUljIv0+vTpI57CtnbtWgQFBXFp6hv/XnJycvDDDz8w1vTz84Ovry9Gjx6NpUuXwt3dHXJycqxbpSxcuBALFy7EzJkzoa2tjZKSEpw+fRr//ve/Wen2JKgjkEH09fWRnJyMq1evws7ODurq6ti9ezejfkBtaR36zefzER0djT179iAsLAxPnz7ttFZrCIiLYTFvws7O7o0prwoKClBVVYWlpSV8fHw6XQwnDV13d3d4eHigoqICgYGBuH//PpYsWYKZM2d2yrY3ERQUJJ4vXF1djfDwcPTr1w/z5s3jrBAQAEaNGoXbt28z/n5DQ0Nx5bOOjg4sLCxQW1sLXV1dVnZNnz4dH3/8MeLj45GbmwstLS0EBwfD0tKSlW5PgmYNyRAlJSXv/AybymLgr1x0Ho+HGTNmIDk5GQKBAHZ2dpyW6zc1NeHPP/9kldURHh6O1NRULF++HNra2nj+/DkOHjyIUaNGwdLSEv/9738xcOBAbN26tVvo/u9//8NHH32EYcOGoby8HPfv34e1tXWnNN7E7t27kZycjNTUVCxZsgR1dXVQUFBA//79Ga+4zp8/L3EsEomQkpKCuro6REREMLY1Pz8fsbGxKC8vx7Zt23Dx4kXMnTuXsV4r0pr10FOgKwIZovVNtSPfzUVl8eDBg8Vvlw0NDSgrK4OCggKjZmNvo6KiApMmTWJlb0xMDKKjo8U9ZoYMGYKRI0di2rRpWLduHQwNDWFvb9/pB7a0dA0MDAC0tIbOzs7mbMD65cuXER0djZqaGqSnpyMlJQWqqqqwsbFhrHn27FmJYzk5OQwePBhLlixhrHnp0iUEBgZi8uTJyMjIgEgkwunTp1FRUQE/Pz/GuqdOnUJgYCCEQqH4HOFgJnZPgjoCGeL+/ftSv8fy5cvh4+ODCxcuYO7cufDw8IC8vLw4S4lL2C5GX758CYFAIHHu1atXqKmpAQDIy8szugeXun/++SfWr1+PgoIC2NjYwMPDA8uWLcMnn3yCffv2YcuWLfDw8Oi0ja/D5/OhpqaG+Ph4DBkyBAMGDEBdXR2rrqls3vo7IiwsDEeOHIGenh6io6OhoaGBY8eOwdPTk5UjCA0N5XzWQ0+DOgIZhBCC69ev48WLF+JzQqEQjx8/xrp161hpDx8+HOnp6VBSUsKCBQtgZGSEly9fchLCaAvb9s4zZ87E/PnzMX/+fGhpaaG0tBQ//fQTpk2bhsrKSmzcuBGfffZZl+pu3rwZo0aNwsaNG3H+/HksWbIE+/btg729PTIzM7F9+3bWjsDc3Bx+fn7Iz8/H9OnTUVxcjM2bN8PKyqrTWm3bVFy5cgW2tras7GuFx+OJs8da/+7V1dUhEolY6Upj1kNPg+4RyCAbNmxAWloaVFRUIBQKoaysjIKCAjg7O2Pfvn2stC0sLJCSktJuMhXXlJWVYcKECayX7jExMbh06RLKysqgpaUFNzc3TJ06FQUFBUhNTcXXX3+NPn36dJmukZERcnJy0Lt3bwgEAhgaGuLu3bsS9R9s5/XW19cjMjISysrK8PT0RGFhIeLi4uDj49Ppn71tR1MuW52vWLECAwYMgJ+fH6ysrHDjxg2EhYXh/v37b61beBeJiYmIj4/ndNZDT4M6AhnE1NQUsbGxqKiowLFjxxAaGoqYmBikpqayTiH18vLC119/LTGchClva2QnEAhw69YtqcRwa2pqOO3yyUb3XY3h2l7vatraw0Vra6FQCAUFBVRWVsLPzw95eXniF5ihQ4ciJCSE1aauNGY99DRoaEgGkZeXx6BBg6Cqqiruj+/u7s56NQC0xJuXLVsGJSUlqKmpSTzIO1t97O7u/tbrM2bMYGRjKzk5Odi7d2+74rfq6mpWaY7S0uWaDRs2vPMzbOs0uJjO5u7ujj179kBXVxcnTpzA8+fPUVpaCnV19XajUZnQunrjctZDT4M6Ahlk2LBhiIuLg6urK3r37o3CwkIoKiq2S51jwsaNGzmwsIXWhmfLli1DUFAQ5+GmrVu3wtbWFn379sXdu3cxdepUhIeHY86cOd1Gt6GhAY6OjuJjPp8vPiYMRz+28umnnyI4OBjTp0/nrIqWEILS0lKxA2xubpY4Bjqfouzg4IBZs2bBx8fSEOMFAAANcElEQVQHixYtgpaWFrS0tDixFwA0NDQ4mWvRk6GhIRnk9u3b8PX1xYkTJ5Cbm4stW7ZATk4Oc+bMga+vL2v91hbXz58/x8yZM1m3uP7ss8+QkJDQLn7LFkNDQ+Tl5aG4uBirVq1CdHQ0SktLMW/ePFZDy7nUzczMfOdn2LSuCAkJwf3793Ho0CHGGq8jreFHDx48QEBAAHr37o2goCBOVgKtSGPWQ0+DrghkjMrKSigpKYnDNNevX4eLiwv09fU77HnfGdq2uLa3t8ecOXNYtbg2MzODu7s7LC0t240oZNrADAD69++Puro6aGtro6ioCM3NzdDS0pLIpupqXbZ9j97F0qVLsWHDBvFAFrZIK0X5008/RVRUFCIjIzF9+nRYW1tLpHqyCWGlpaVBSUkJiYmJEud79epFHcF7Qh2BDJGbm4uFCxdi9uzZWLNmDUJCQhAVFQUnJyccOXIEysrKrH/xt2/fjoCAADg5OcHU1BQ6Ojo4cuQINmzYwNgRKCoqwsTEBAKB4L0mYL0vdnZ2mDdvHsLDw2Fqagp/f38oKSkxHjAvDV19ff13jn5kM7dZUVERe/fuZfz9fyfPnj1Deno6FBQUoK2tzXoqWSunTp3iRKdH87c1vKawxsvLS9xjXigUEhMTExIfH08IIeT27dvE1dWV9T1MTExIU1MTIeSvXvyEEGJsbMxILykpiSQnJxNCCHF0dCS2trbE1taWTJ8+nTQ0NLCytampiZw7d47w+XxSWVlJNm3aRFauXEkePXrUbXSLiore+fVPp7m5mRw5coSMHTuWrF+/nrx8+ZLze1y+fJn4+PgQDw8PUl5eTr799lvS2NjI+X3+qVBHIEMYGxuLH9L/+9//iL6+PuHz+YSQloeXgYEB63vMnDmTxMXFEUL+cgRXrlwhM2bM6LTWxYsXiZWVFbl69SohhBAjIyNy48YNkpWVRaZMmSIe1MKUpUuXin9+LpGWbutQltzcXJKbm0uys7PJqVOnOL9Pd2Pq1KnExsaGpKWlSUX/+PHjxMnJiZw8eZIYGxsTHo9HvvzyS+Lv7y+V+/0ToY5AhnjdERw+fJh4enqKr9XW1hIzMzPW97h79y6xtLQks2bNIvr6+sTb25tYWlqSW7dudVrL3d2dZGVliY9fX2Fcv36duLm5sbLVyspKKm+X0tDdt28f0dfXJ6ampsTExIQYGRkRPT098tVXX3F6n+6ItFYBrdjZ2YknvbVO7Kuuribm5uZSu+c/DbpHIEMYGhoiMjISzs7OiI2NlWhNcOLECU6qKLlscf3kyRMJm15PGTQ3N2fU2vp1pLUJLQ3d6OhoREZGor6+HmfOnEFwcDBCQkJQVlbG2E5ZgW0tw7t49eoV1NTUAPxV96CkpESH13cC+iclQ6xfvx6LFi3Czp07YWxsjK+++gpAS4rcixcvcPLkSdb3WLFiBVxcXDBx4kTWvezl5eXx6tUrcQ+Yixcviq8JBAJ88MEHrPSltQktDd2mpiaMHj0a1dXVuHPnDgBgyZIlnFRw93RsbW2xfv168ZS22tpaBAcHM+oz1WPp6iUJpXM0NTWRyspKiXPx8fGkqqqKE/2jR4+SadOmERMTE7J+/Xpy7do1cTiqs8ydO5ecP3/+jddiY2PJ4sWL2ZjaIUztlaauh4cHycvLI4S0hJ7KyspIVVUV4014yl/w+Xyyfv16oq+vT3R1dYm+vj5ZtWqVVMNR/zRoQRnljTx79gxJSUlITk5GaWkpnJycEBAQ0CmN9PR0rF69Gv7+/pg0aRIUFBTQ1NSE5ORkbNu2Df/5z38Yz+wFgIcPH+LQoUPtWkEUFRUhIyOjW+leuXIFa9aswYULFxAfH4+IiAgoKCjA3Nxc6qGTnkJzczMqKiqgpqYGeXl5CAQCTie0/ZOhjoDSIXl5ebh8+TISEhKgoaHRbljJ+3Dx4kXs2rUL9fX1UFVVBY/Hg5KSEgICAljXPEybNg2ffPIJ/vWvf6GoqAjW1tY4efIkpkyZgqVLl3Y7XT6fjw8//BBycnLIyclBbW0tbG1tOenn01O5fv06Hj58CHNzc+jp6YnPZ2VlYcuWLawqzHsUXbkcoXQ/bt68Sb799ltibW1NHBwcSGhoKHn8+DErTaFQSG7cuEHi4+NJZmYmZ/ndY8aMIY2NjeTx48dk9uzZhBBCHj58SFxcXLqdrru7+xvP29vbM9bs6YSFhZHRo0cTFxcXMmrUKJKenk6EQiHZvHkzGTFiBAkICOhqE2UGullMkWD58uUYO3Ys9u7dCy0tLQwaNIi1pry8PExNTTmwTpLWlgo6OjooLCwE0NKQ731mO/8dusXFxdi0aRMAoKCgAPPnz5e4zufzWdnZ0zlz5gwOHz4MCwsLJCcn4/jx4zhx4gRKSkrw888/01kEnYA6AoqY33//Hf369cOvv/6K1NRUAC0PwM2bN0vlQc4Wc3NzrFy5EoGBgRgxYgRCQ0OhpKSE/v37dwvdgQMHYtasWeDxePj999/h7OwscV1RURHjxo1jZWtPhsfjiXs5OTg4wNfXF/b29oiNjYWSklIXWydjdPWShNI9uHv3LjEyMiIHDx4kz549I42NjeTJkyckJCSEGBoakjt37nS1ie2or68nBw4cIDwejxQVFZH58+cTT09PkpOT0+10CwoKxP9fXV1NRCIRKxsphBgaGkocjx07ltTW1naRNbINXRFQAAD/+c9/sGrVKnz55Zfic5988glWrlwJVVVVhIWFcdbqmAuSk5PRq1cvLF++HE5OThAKhSCEQENDA6NGjep2ujo6Oti8eTPi4uLEtRWOjo7YunWr1MeC9hQUFRXx0UcfdbUZMoncuz9C6QncvHkT06ZNe+M1Dw8PiTm2XU1cXBx27twpXv6/ePECu3btwq5duyAQCBAREdGtdAFg9+7dKC0tRUxMDHJzcxETEwMej0dTR1kgFApx6NAh8VdjY6PEcXd6cenu0PRRCoCW9hWZmZlvjK02NDTA2tqa9exarvDw8MDatWthbm4OQHIOcGZmJgIDA3HhwoVuowsAVlZWSExMlBjOU1NTAwcHB2RnZzPS7OmsWbPmrdd79eqFoKCgv8ka2YaGhigAgBEjRiAlJQUuLi7trv36668SOdpdjbR6GEm7N5JQKJQ4FolEtOCJBcHBwQCAy5cvw8bGhnXLkp4MDQ1RAACLFy/Gt99+i9TUVPHs46amJsTFxWHHjh1YvHhxF1v4F609jFrhqoeRtHQBYNKkSVi+fDlu3LiBp0+fIjs7G9988w2++OILxpqUFjZt2sTZkJueCl0RUAAANjY2WLt2LTZs2IDGxkaoqKigsrISffv2hb+/P6ysrLraRDEjR45EamoqJk+e3O5aUlISxo4d2210L126BBcXF6xevRp79+7FqlWrUF1dDU1NTbi6umLZsmWMbKX8hbOzM0JCQuDk5NSuW6ympmYXWSVjdG3SEqW70dDQQK5fv07i4uLI9evXu+WUp6tXrxJTU1Ny/vx5IhAICCGEiEQiEh8fT8zMzBineUpDt22KI4V7dHV13/ilp6fX1abJDHSzmCKTSKuHEde6hoaG3Srj6p9IU1NTh9doyOj9oI6AIrOIRCLcvHkTL168gJqaGoyMjDjZfOVSd8yYMdi+fftbPzNlyhRG2pS/yMrKatcttrCwEKtXr+5iy2QDukdAkVmk1cOIS12RSPTWrq29evWijoAl/v7+SElJgYqKCkQiEfr27YuHDx/C0dGxq02TGagjoFCkiJKSEqtCNMq7+eWXX3D27FlUVFTg+PHjCA0NxenTp3Ht2rWuNk1moOmjFIoUoZFX6SMnJwcdHR0MHz4c+fn5AABPT0+6N9MJqCOgUKQImwlslPdj2LBhSEhIEPcZevz4MUpLS9+6iUyRhG4WUygUmebmzZvw9fVFREQEbty4gR07dkBOTg5eXl5YtWpVV5snE1BHQKFQ/lGUlJSgtrYWurq6XW2KzEBDQxQKRebJz8/Hzp07sWLFCvTp0wdZWVldbZJMQR0BhUKRaS5duoTFixfjgw8+QEZGBkQiEU6fPo29e/d2tWkyAw0NUSgUmcbJyQkhISHQ09ODqakpcnJyUFpaCk9PT/z2229dbZ5MQFcEFApFpuHxeBg2bBiAlgI9AFBXV4dIJOpKs2QK6ggoFIpMY2ZmhuDgYAgEAvG5w4cP09TdTkBDQxQKRSYRCoVQUFBAZWUl/Pz8kJeXB6FQCGVlZQwdOhQhISG0DfV7Qh0BhUKRSVxdXbFnzx5xmujz589RWloKdXV16OjodLF1sgUNDVEoFJnEwcEBs2bNQnh4OAgh0NLSgqGhIXUCDKArAgqFIrM8ePAAAQEB6N27N4KCgqgTYAh1BBQKRaYhhCAyMhIHDhyAtbU15OT+CnTs2rWrCy2THWgbagqFItM8e/YM6enpUFBQgLa2Np1KxgDqCCgUikxCCMGxY8dw4MABODs7Iz4+HsrKyl1tlkxCHQGFQpFJPDw8UFVVhf3798PGxqarzZFpqCOgUCgyia6uLjZu3EhXARxAN4spFAqlh0PrCCgUCqWHQx0BhUKh9HCoI6BQKJQeDnUEFAqF0sOhjoBCoVB6OP8PxApjjZrnFwkAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "k = 10\n", "corrmat = df_train.corr()\n", "cols = corrmat.nlargest(k, 'SalePrice')['SalePrice'].index\n", "cm = np.corrcoef(df_train[cols].values.T)\n", "sns.set(font_scale=1.25)\n", "hm = sns.heatmap(cm, cbar=True, annot=True, square=True, fmt='.2f', annot_kws={'size': 10}, yticklabels=cols.values, xticklabels=cols.values)\n", "plt.rcParams['figure.figsize'] = ((15,5))\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** On remarque que les variables les plus corrélées à notre variable cible sont : 'OverallQual' et 'GrdLivArea', d'autres part, il sera intéressant aussi de s'intéresser aux multicoliéarités entre les variables prédictives, par exemple 'GarageArea' et 'GarageCars' ont une corrélation très elevée ce qui est justifiée en se basant sur la dascription des variables donnée par la consigne, donc on peut garder qu'une seule, de meme pour 'TotalBsmtF' and '1stFlrSF', et pour 'TotRmsAbvGrd' and 'GrLivArea' aussi. **" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**4-Les variables manquantes **" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "valid = 'C:/Users/HP/Anaconda3/Lib/site-packages/notebook/test.csv'\n", "df_test = pd.read_csv(valid, sep = ',')" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "#Deal with multicolinearity :\n", "df_train = df_train.drop(['1stFlrSF','GarageCars','TotRmsAbvGrd'], 1)\n", "df_test = df_test.drop( ['1stFlrSF','GarageCars','TotRmsAbvGrd'],1)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['Id', 'MSSubClass', 'MSZoning', 'LotFrontage', 'LotArea', 'Street',\n", " 'Alley', 'LotShape', 'LandContour', 'Utilities', 'LotConfig',\n", " 'LandSlope', 'Neighborhood', 'Condition1', 'Condition2', 'BldgType',\n", " 'HouseStyle', 'OverallQual', 'OverallCond', 'YearBuilt', 'YearRemodAdd',\n", " 'RoofStyle', 'RoofMatl', 'Exterior1st', 'Exterior2nd', 'MasVnrType',\n", " 'MasVnrArea', 'ExterQual', 'ExterCond', 'Foundation', 'BsmtQual',\n", " 'BsmtCond', 'BsmtExposure', 'BsmtFinType1', 'BsmtFinSF1',\n", " 'BsmtFinType2', 'BsmtFinSF2', 'BsmtUnfSF', 'TotalBsmtSF', 'Heating',\n", " 'HeatingQC', 'CentralAir', 'Electrical', '2ndFlrSF', 'LowQualFinSF',\n", " 'GrLivArea', 'BsmtFullBath', 'BsmtHalfBath', 'FullBath', 'HalfBath',\n", " 'BedroomAbvGr', 'KitchenAbvGr', 'KitchenQual', 'Functional',\n", " 'Fireplaces', 'FireplaceQu', 'GarageType', 'GarageYrBlt',\n", " 'GarageFinish', 'GarageArea', 'GarageQual', 'GarageCond', 'PavedDrive',\n", " 'WoodDeckSF', 'OpenPorchSF', 'EnclosedPorch', '3SsnPorch',\n", " 'ScreenPorch', 'PoolArea', 'PoolQC', 'Fence', 'MiscFeature', 'MiscVal',\n", " 'MoSold', 'YrSold', 'SaleType', 'SaleCondition'],\n", " dtype='object')" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_test.columns" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Id 0\n", "MSSubClass 0\n", "MSZoning 0\n", "LotFrontage 259\n", "LotArea 0\n", "Street 0\n", "Alley 1369\n", "LotShape 0\n", "LandContour 0\n", "Utilities 0\n", "LotConfig 0\n", "LandSlope 0\n", "Neighborhood 0\n", "Condition1 0\n", "Condition2 0\n", "BldgType 0\n", "HouseStyle 0\n", "OverallQual 0\n", "OverallCond 0\n", "YearBuilt 0\n", "YearRemodAdd 0\n", "RoofStyle 0\n", "RoofMatl 0\n", "Exterior1st 0\n", "Exterior2nd 0\n", "MasVnrType 8\n", "MasVnrArea 8\n", "ExterQual 0\n", "ExterCond 0\n", "Foundation 0\n", " ... \n", "FullBath 0\n", "HalfBath 0\n", "BedroomAbvGr 0\n", "KitchenAbvGr 0\n", "KitchenQual 0\n", "Functional 0\n", "Fireplaces 0\n", "FireplaceQu 690\n", "GarageType 81\n", "GarageYrBlt 81\n", "GarageFinish 81\n", "GarageArea 0\n", "GarageQual 81\n", "GarageCond 81\n", "PavedDrive 0\n", "WoodDeckSF 0\n", "OpenPorchSF 0\n", "EnclosedPorch 0\n", "3SsnPorch 0\n", "ScreenPorch 0\n", "PoolArea 0\n", "PoolQC 1453\n", "Fence 1179\n", "MiscFeature 1406\n", "MiscVal 0\n", "MoSold 0\n", "YrSold 0\n", "SaleType 0\n", "SaleCondition 0\n", "SalePrice 0\n", "Length: 78, dtype: int64\n" ] } ], "source": [ "print(df_train.isnull().sum())\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Id 0\n", "MSSubClass 0\n", "MSZoning 4\n", "LotFrontage 227\n", "LotArea 0\n", "Street 0\n", "Alley 1352\n", "LotShape 0\n", "LandContour 0\n", "Utilities 2\n", "LotConfig 0\n", "LandSlope 0\n", "Neighborhood 0\n", "Condition1 0\n", "Condition2 0\n", "BldgType 0\n", "HouseStyle 0\n", "OverallQual 0\n", "OverallCond 0\n", "YearBuilt 0\n", "YearRemodAdd 0\n", "RoofStyle 0\n", "RoofMatl 0\n", "Exterior1st 1\n", "Exterior2nd 1\n", "MasVnrType 16\n", "MasVnrArea 15\n", "ExterQual 0\n", "ExterCond 0\n", "Foundation 0\n", " ... \n", "BsmtHalfBath 2\n", "FullBath 0\n", "HalfBath 0\n", "BedroomAbvGr 0\n", "KitchenAbvGr 0\n", "KitchenQual 1\n", "Functional 2\n", "Fireplaces 0\n", "FireplaceQu 730\n", "GarageType 76\n", "GarageYrBlt 78\n", "GarageFinish 78\n", "GarageArea 1\n", "GarageQual 78\n", "GarageCond 78\n", "PavedDrive 0\n", "WoodDeckSF 0\n", "OpenPorchSF 0\n", "EnclosedPorch 0\n", "3SsnPorch 0\n", "ScreenPorch 0\n", "PoolArea 0\n", "PoolQC 1456\n", "Fence 1169\n", "MiscFeature 1408\n", "MiscVal 0\n", "MoSold 0\n", "YrSold 0\n", "SaleType 1\n", "SaleCondition 0\n", "Length: 77, dtype: int64\n" ] } ], "source": [ "print(df_test.isnull().sum())" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "def log_rmse(yhat, ytrue):\n", " return np.sqrt(mean_squared_error ( np.log(yhat), np.log(ytrue) ))\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'Y_test' is not defined", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"\\n -- RMSE test {:.4f}\"\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlog_rmse\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mY_test\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0myhat_test\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"\\n -- RMSE train {:.4f}\"\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlog_rmse\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mY_train\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0myhat_train\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mNameError\u001b[0m: name 'Y_test' is not defined" ] } ], "source": [ "print(\"\\n -- RMSE test {:.4f}\".format(log_rmse(Y_test, yhat_test) ))\n", "print(\"\\n -- RMSE train {:.4f}\".format(log_rmse(Y_train, yhat_train)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** On fait l'hypothèse que si le porcentage de valeurs manquantes est supérieur à 50 pourcent, on supprime cette colonne **" ] }, { "cell_type": "code", "execution_count": 17, "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", " \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", "
TotalPercent
PoolQC145399.520548
MiscFeature140696.301370
Alley136993.767123
Fence117980.753425
FireplaceQu69047.260274
LotFrontage25917.739726
GarageCond815.547945
GarageType815.547945
GarageYrBlt815.547945
GarageFinish815.547945
GarageQual815.547945
BsmtFinType2382.602740
BsmtExposure382.602740
BsmtCond372.534247
BsmtQual372.534247
BsmtFinType1372.534247
MasVnrArea80.547945
MasVnrType80.547945
Electrical10.068493
LandSlope00.000000
\n", "
" ], "text/plain": [ " Total Percent\n", "PoolQC 1453 99.520548\n", "MiscFeature 1406 96.301370\n", "Alley 1369 93.767123\n", "Fence 1179 80.753425\n", "FireplaceQu 690 47.260274\n", "LotFrontage 259 17.739726\n", "GarageCond 81 5.547945\n", "GarageType 81 5.547945\n", "GarageYrBlt 81 5.547945\n", "GarageFinish 81 5.547945\n", "GarageQual 81 5.547945\n", "BsmtFinType2 38 2.602740\n", "BsmtExposure 38 2.602740\n", "BsmtCond 37 2.534247\n", "BsmtQual 37 2.534247\n", "BsmtFinType1 37 2.534247\n", "MasVnrArea 8 0.547945\n", "MasVnrType 8 0.547945\n", "Electrical 1 0.068493\n", "LandSlope 0 0.000000" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "total = df_train.isnull().sum().sort_values(ascending=False)\n", "percent = ((df_train.isnull().sum()/df_train.isnull().count())*100).sort_values(ascending=False)\n", "missing_data = pd.concat([total, percent], axis=1, keys=['Total', 'Percent'])\n", "missing_data.head(20)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "FireplaceQu 690\n", "LotFrontage 259\n", "GarageFinish 81\n", "GarageYrBlt 81\n", "GarageType 81\n", "GarageQual 81\n", "GarageCond 81\n", "BsmtExposure 38\n", "BsmtFinType2 38\n", "BsmtQual 37\n", "BsmtCond 37\n", "BsmtFinType1 37\n", "MasVnrArea 8\n", "MasVnrType 8\n", "Electrical 1\n", "RoofMatl 0\n", "RoofStyle 0\n", "Exterior2nd 0\n", "Exterior1st 0\n", "YearBuilt 0\n", "ExterQual 0\n", "ExterCond 0\n", "Foundation 0\n", "YearRemodAdd 0\n", "SalePrice 0\n", "OverallCond 0\n", "OverallQual 0\n", "HouseStyle 0\n", "BldgType 0\n", "Condition1 0\n", " ... \n", "SaleType 0\n", "YrSold 0\n", "MoSold 0\n", "MiscVal 0\n", "PoolArea 0\n", "ScreenPorch 0\n", "3SsnPorch 0\n", "EnclosedPorch 0\n", "OpenPorchSF 0\n", "WoodDeckSF 0\n", "PavedDrive 0\n", "GarageArea 0\n", "Fireplaces 0\n", "Functional 0\n", "KitchenQual 0\n", "KitchenAbvGr 0\n", "BedroomAbvGr 0\n", "HalfBath 0\n", "FullBath 0\n", "BsmtHalfBath 0\n", "BsmtFullBath 0\n", "GrLivArea 0\n", "LowQualFinSF 0\n", "2ndFlrSF 0\n", "CentralAir 0\n", "HeatingQC 0\n", "Heating 0\n", "TotalBsmtSF 0\n", "SaleCondition 0\n", "Id 0\n", "Length: 74, dtype: int64" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_train = df_train.drop((missing_data[missing_data['Percent'] > 50 ]).index,1)\n", "df_train.isnull().sum().sort_values(ascending=False)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "FireplaceQu 730\n", "LotFrontage 227\n", "GarageCond 78\n", "GarageQual 78\n", "GarageYrBlt 78\n", "GarageFinish 78\n", "GarageType 76\n", "BsmtCond 45\n", "BsmtQual 44\n", "BsmtExposure 44\n", "BsmtFinType1 42\n", "BsmtFinType2 42\n", "MasVnrType 16\n", "MasVnrArea 15\n", "MSZoning 4\n", "BsmtHalfBath 2\n", "Utilities 2\n", "Functional 2\n", "BsmtFullBath 2\n", "BsmtFinSF2 1\n", "BsmtFinSF1 1\n", "Exterior2nd 1\n", "SaleType 1\n", "TotalBsmtSF 1\n", "Exterior1st 1\n", "BsmtUnfSF 1\n", "GarageArea 1\n", "KitchenQual 1\n", "HouseStyle 0\n", "MSSubClass 0\n", " ... \n", "OverallCond 0\n", "OverallQual 0\n", "Condition2 0\n", "SaleCondition 0\n", "ExterQual 0\n", "ExterCond 0\n", "YrSold 0\n", "MoSold 0\n", "MiscVal 0\n", "PoolArea 0\n", "ScreenPorch 0\n", "3SsnPorch 0\n", "EnclosedPorch 0\n", "OpenPorchSF 0\n", "WoodDeckSF 0\n", "PavedDrive 0\n", "Fireplaces 0\n", "KitchenAbvGr 0\n", "BedroomAbvGr 0\n", "HalfBath 0\n", "FullBath 0\n", "GrLivArea 0\n", "LowQualFinSF 0\n", "2ndFlrSF 0\n", "Electrical 0\n", "CentralAir 0\n", "HeatingQC 0\n", "Heating 0\n", "Foundation 0\n", "Id 0\n", "Length: 73, dtype: int64" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_test= df_test.drop((missing_data[missing_data['Percent'] > 50 ]).index,1)\n", "df_test.isnull().sum().sort_values(ascending=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Compléter les valeurs numériques manquantes par la moyenne **" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['Id', 'MSSubClass', 'LotFrontage', 'LotArea', 'OverallQual',\n", " 'OverallCond', 'YearBuilt', 'YearRemodAdd', 'MasVnrArea', 'BsmtFinSF1',\n", " 'BsmtFinSF2', 'BsmtUnfSF', 'TotalBsmtSF', '2ndFlrSF', 'LowQualFinSF',\n", " 'GrLivArea', 'BsmtFullBath', 'BsmtHalfBath', 'FullBath', 'HalfBath',\n", " 'BedroomAbvGr', 'KitchenAbvGr', 'Fireplaces', 'GarageYrBlt',\n", " 'GarageArea', 'WoodDeckSF', 'OpenPorchSF', 'EnclosedPorch', '3SsnPorch',\n", " 'ScreenPorch', 'PoolArea', 'MiscVal', 'MoSold', 'YrSold', 'SalePrice'],\n", " dtype='object')" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Complete missing values for numerical variables with the mean values : \n", "numerical_features = df_train.select_dtypes(exclude=['object']).columns\n", "numerical_features" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ " N = ['Id', 'MSSubClass', 'LotFrontage', 'LotArea', 'OverallQual',\n", " 'OverallCond', 'YearBuilt', 'YearRemodAdd', 'MasVnrArea', 'BsmtFinSF1',\n", " 'BsmtFinSF2', 'BsmtUnfSF', 'TotalBsmtSF', '2ndFlrSF', 'LowQualFinSF',\n", " 'GrLivArea', 'BsmtFullBath', 'BsmtHalfBath', 'FullBath', 'HalfBath',\n", " 'BedroomAbvGr', 'KitchenAbvGr', 'Fireplaces', 'GarageYrBlt',\n", " 'GarageArea', 'WoodDeckSF', 'OpenPorchSF', 'EnclosedPorch', '3SsnPorch',\n", " 'ScreenPorch', 'PoolArea', 'MiscVal', 'MoSold', 'YrSold']\n", "for col in N:\n", " df_train[col].fillna(np.mean(df_train[col]), inplace = True)\n", " df_test[col].fillna(np.mean(df_test[col]), inplace = True)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Remplacer les valeurs manquantes pour les variables catégorielles par des : None **" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['MSZoning', 'Street', 'LotShape', 'LandContour', 'Utilities',\n", " 'LotConfig', 'LandSlope', 'Neighborhood', 'Condition1', 'Condition2',\n", " 'BldgType', 'HouseStyle', 'RoofStyle', 'RoofMatl', 'Exterior1st',\n", " 'Exterior2nd', 'MasVnrType', 'ExterQual', 'ExterCond', 'Foundation',\n", " 'BsmtQual', 'BsmtCond', 'BsmtExposure', 'BsmtFinType1', 'BsmtFinType2',\n", " 'Heating', 'HeatingQC', 'CentralAir', 'Electrical', 'KitchenQual',\n", " 'Functional', 'FireplaceQu', 'GarageType', 'GarageFinish', 'GarageQual',\n", " 'GarageCond', 'PavedDrive', 'SaleType', 'SaleCondition'],\n", " dtype='object')" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "categorical_features = df_train.select_dtypes(include=['object']).columns\n", "categorical_features" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "C = ['MSZoning', 'Street', 'LotShape', 'LandContour', 'Utilities',\n", " 'LotConfig', 'LandSlope', 'Neighborhood', 'Condition1', 'Condition2',\n", " 'BldgType', 'HouseStyle', 'RoofStyle', 'RoofMatl', 'Exterior1st',\n", " 'Exterior2nd', 'MasVnrType', 'ExterQual', 'ExterCond', 'Foundation',\n", " 'BsmtQual', 'BsmtCond', 'BsmtExposure', 'BsmtFinType1', 'BsmtFinType2',\n", " 'Heating', 'HeatingQC', 'CentralAir', 'Electrical', 'KitchenQual',\n", " 'Functional', 'FireplaceQu', 'GarageType', 'GarageFinish', 'GarageQual',\n", " 'GarageCond', 'PavedDrive', 'SaleType', 'SaleCondition']\n", "for col in C:\n", " df_train[col].fillna('None', inplace = True)\n", " df_test[col].fillna('None', inplace = True)\n", "\n" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:3: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version\n", "of pandas will change to not sort by default.\n", "\n", "To accept the future behavior, pass 'sort=True'.\n", "\n", "To retain the current behavior and silence the warning, pass sort=False\n", "\n", " This is separate from the ipykernel package so we can avoid doing imports until\n" ] } ], "source": [ "#Label encoding\n", "# Join the two datasets before encoding \n", "df_join = pd.concat([df_train,df_test])\n", "for col in C:\n", " le = LabelEncoder()\n", " le.fit(df_join[col])\n", " df_train[col] = le.transform(df_train[col])\n", " df_test[col] = le.transform(df_test[col])\n", " \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**5-Tester les différents modèles**" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "Y = df_train['SalePrice'] \n", "X = df_train.drop(['SalePrice'], 1)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "X_train, X_test, Y_train, Y_test = train_test_split(X,Y,test_size = 0.2)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "clf = RandomForestRegressor(n_estimators=1000 )\n", "param_grid = {\"max_depth\": [3,6, 9, 12],\n", " \"min_samples_split\": [2, 3, 5]}\n" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "gs = GridSearchCV(clf, param_grid=param_grid, cv=3, verbose = 2)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fitting 3 folds for each of 12 candidates, totalling 36 fits\n", "[CV] max_depth=3, min_samples_split=2 ................................\n", "[CV] ................. max_depth=3, min_samples_split=2, total= 3.8s\n", "[CV] max_depth=3, min_samples_split=2 ................................\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[Parallel(n_jobs=1)]: Done 1 out of 1 | elapsed: 3.9s remaining: 0.0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[CV] ................. max_depth=3, min_samples_split=2, total= 3.7s\n", "[CV] max_depth=3, min_samples_split=2 ................................\n", "[CV] ................. max_depth=3, min_samples_split=2, total= 3.5s\n", "[CV] max_depth=3, min_samples_split=3 ................................\n", "[CV] ................. max_depth=3, min_samples_split=3, total= 3.5s\n", "[CV] max_depth=3, min_samples_split=3 ................................\n", "[CV] ................. max_depth=3, min_samples_split=3, total= 3.5s\n", "[CV] max_depth=3, min_samples_split=3 ................................\n", "[CV] ................. max_depth=3, min_samples_split=3, total= 3.7s\n", "[CV] max_depth=3, min_samples_split=5 ................................\n", "[CV] ................. max_depth=3, min_samples_split=5, total= 3.5s\n", "[CV] max_depth=3, min_samples_split=5 ................................\n", "[CV] ................. max_depth=3, min_samples_split=5, total= 3.5s\n", "[CV] max_depth=3, min_samples_split=5 ................................\n", "[CV] ................. max_depth=3, min_samples_split=5, total= 3.6s\n", "[CV] max_depth=6, min_samples_split=2 ................................\n", "[CV] ................. max_depth=6, min_samples_split=2, total= 6.4s\n", "[CV] max_depth=6, min_samples_split=2 ................................\n", "[CV] ................. max_depth=6, min_samples_split=2, total= 6.3s\n", "[CV] max_depth=6, min_samples_split=2 ................................\n", "[CV] ................. max_depth=6, min_samples_split=2, total= 6.5s\n", "[CV] max_depth=6, min_samples_split=3 ................................\n", "[CV] ................. max_depth=6, min_samples_split=3, total= 6.2s\n", "[CV] max_depth=6, min_samples_split=3 ................................\n", "[CV] ................. max_depth=6, min_samples_split=3, total= 6.3s\n", "[CV] max_depth=6, min_samples_split=3 ................................\n", "[CV] ................. max_depth=6, min_samples_split=3, total= 6.8s\n", "[CV] max_depth=6, min_samples_split=5 ................................\n", "[CV] ................. max_depth=6, min_samples_split=5, total= 6.2s\n", "[CV] max_depth=6, min_samples_split=5 ................................\n", "[CV] ................. max_depth=6, min_samples_split=5, total= 6.3s\n", "[CV] max_depth=6, min_samples_split=5 ................................\n", "[CV] ................. max_depth=6, min_samples_split=5, total= 6.3s\n", "[CV] max_depth=9, min_samples_split=2 ................................\n", "[CV] ................. max_depth=9, min_samples_split=2, total= 9.2s\n", "[CV] max_depth=9, min_samples_split=2 ................................\n", "[CV] ................. max_depth=9, min_samples_split=2, total= 9.2s\n", "[CV] max_depth=9, min_samples_split=2 ................................\n", "[CV] ................. max_depth=9, min_samples_split=2, total= 9.5s\n", "[CV] max_depth=9, min_samples_split=3 ................................\n", "[CV] ................. max_depth=9, min_samples_split=3, total= 8.9s\n", "[CV] max_depth=9, min_samples_split=3 ................................\n", "[CV] ................. max_depth=9, min_samples_split=3, total= 9.1s\n", "[CV] max_depth=9, min_samples_split=3 ................................\n", "[CV] ................. max_depth=9, min_samples_split=3, total= 9.1s\n", "[CV] max_depth=9, min_samples_split=5 ................................\n", "[CV] ................. max_depth=9, min_samples_split=5, total= 8.7s\n", "[CV] max_depth=9, min_samples_split=5 ................................\n", "[CV] ................. max_depth=9, min_samples_split=5, total= 8.7s\n", "[CV] max_depth=9, min_samples_split=5 ................................\n", "[CV] ................. max_depth=9, min_samples_split=5, total= 8.6s\n", "[CV] max_depth=12, min_samples_split=2 ...............................\n", "[CV] ................ max_depth=12, min_samples_split=2, total= 11.4s\n", "[CV] max_depth=12, min_samples_split=2 ...............................\n", "[CV] ................ max_depth=12, min_samples_split=2, total= 11.5s\n", "[CV] max_depth=12, min_samples_split=2 ...............................\n", "[CV] ................ max_depth=12, min_samples_split=2, total= 11.3s\n", "[CV] max_depth=12, min_samples_split=3 ...............................\n", "[CV] ................ max_depth=12, min_samples_split=3, total= 11.0s\n", "[CV] max_depth=12, min_samples_split=3 ...............................\n", "[CV] ................ max_depth=12, min_samples_split=3, total= 10.9s\n", "[CV] max_depth=12, min_samples_split=3 ...............................\n", "[CV] ................ max_depth=12, min_samples_split=3, total= 10.9s\n", "[CV] max_depth=12, min_samples_split=5 ...............................\n", "[CV] ................ max_depth=12, min_samples_split=5, total= 9.7s\n", "[CV] max_depth=12, min_samples_split=5 ...............................\n", "[CV] ................ max_depth=12, min_samples_split=5, total= 9.8s\n", "[CV] max_depth=12, min_samples_split=5 ...............................\n", "[CV] ................ max_depth=12, min_samples_split=5, total= 9.8s\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[Parallel(n_jobs=1)]: Done 36 out of 36 | elapsed: 4.6min finished\n" ] }, { "data": { "text/plain": [ "GridSearchCV(cv=3, error_score='raise',\n", " estimator=RandomForestRegressor(bootstrap=True, criterion='mse', max_depth=None,\n", " max_features='auto', max_leaf_nodes=None,\n", " min_impurity_decrease=0.0, min_impurity_split=None,\n", " min_samples_leaf=1, min_samples_split=2,\n", " min_weight_fraction_leaf=0.0, n_estimators=1000, n_jobs=1,\n", " oob_score=False, random_state=None, verbose=0, warm_start=False),\n", " fit_params=None, iid=True, n_jobs=1,\n", " param_grid={'max_depth': [3, 6, 9, 12], 'min_samples_split': [2, 3, 5]},\n", " pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n", " scoring=None, verbose=2)" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gs.fit(X,Y)\n" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "yhat_train = gs.best_estimator_.predict(X_train)\n", "yhat_test = gs.best_estimator_.predict(X_test)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "Train_score = np.sqrt(mean_squared_error(yhat_train, Y_train))\n", "Test_score = np.sqrt(mean_squared_error(yhat_test, Y_test))" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "test 0.0533 train 0.0549 \n" ] } ], "source": [ " print(\"test {:.4f} train {:.4f} \".format(Test_score, Train_score))\n" ] }, { "cell_type": "code", "execution_count": 988, "metadata": {}, "outputs": [], "source": [ "X_valid = df_test[C+N]\n", "yhat_valid = gs.best_estimator_.predict(X_valid)\n", "yhat_valid = np.exp(yhat_valid) -1\n", "\n" ] }, { "cell_type": "code", "execution_count": 984, "metadata": {}, "outputs": [], "source": [ "results = pd.DataFrame(columns = ['Id', 'SalePrice'])\n", "results['Id'] = X_valid.index + 1461\n", "results['SalePrice'] =yhat_valid\n", "results.to_csv(\"submission_RFNew.csv\", index = False)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** Après avoir construit le modèle du Random forest, je vais essayer le modèle SVR (Support Vector Regression)**" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "clf1 = SVR()" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, epsilon=0.1, gamma='auto',\n", " kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False)" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clf1.fit(X_train,Y_train)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "yhat_train1 = clf1.predict(X_train)\n", "yhat_test1 = clf1.predict(X_test)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [], "source": [ "#Scoring\n", "Train_score1 = np.sqrt(mean_squared_error(yhat_train1, Y_train))\n", "Test_score1 = np.sqrt(mean_squared_error(yhat_test1, Y_test))" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "test 0.3778 train 0.1007 \n" ] } ], "source": [ "print(\"test {:.4f} train {:.4f} \".format(Test_score1, Train_score1))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** On remarque un overfitting du modèle**" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "#Validation dans la base de données test \n", "X_valid = df_test\n", "yhat_valid1 = clf1.predict(X_valid)\n", "yhat_valid1= np.exp(yhat_valid1) -1\n", "\n" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "#Submit :\n", "results = pd.DataFrame(columns = ['Id', 'SalePrice'])\n", "results['Id'] = X_valid.index + 1461\n", "results['SalePrice'] =yhat_valid1\n", "results.to_csv(\"submission_LR5.csv\", index = False)" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "#Lasso model \n", "from sklearn.pipeline import make_pipeline\n", "from sklearn.preprocessing import RobustScaler\n", "from sklearn.linear_model import ElasticNet, Lasso\n", "\n", "lasso = make_pipeline(RobustScaler(), Lasso(alpha =0.0005, random_state=1))\n" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "lasso.fit(X_train,Y_train)\n", "yhat_train2 = lasso.predict(X_train)\n", "yhat_test2 = lasso.predict(X_test)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "Train_score2 = np.sqrt(mean_squared_error(yhat_train2, Y_train))\n", "Test_score2 = np.sqrt(mean_squared_error(yhat_test2, Y_test))" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "test 0.2050 train 0.1238 \n" ] } ], "source": [ "print(\"test {:.4f} train {:.4f} \".format(Test_score2, Train_score2))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** Le score sur kaggle pour ce modèle est : 0.12666 avec un classement de 1503 ** " ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [], "source": [ "#Validation dans la base de données test \n", "X_valid = df_test\n", "yhat_valid2 = lasso.predict(X_valid)\n", "yhat_valid2= np.exp(yhat_valid2) -1" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [], "source": [ "results = pd.DataFrame(columns = ['Id', 'SalePrice'])\n", "results['Id'] = X_valid.index + 1461\n", "results['SalePrice'] =yhat_valid2\n", "results.to_csv(\"submission_Lasso.csv\", index = False)\n" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [], "source": [ "#Elastic net :\n", "\n", "#Shuffle dataframe: \n", "df_train= df_train.sample(frac=1)\n", "df_test = df_test.sample(frac=1)\n" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [], "source": [ "#Refaire le split du dataset\n", "X_train, X_test, Y_train, Y_test = train_test_split(X,Y,test_size = 0.2)" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n" ] } ], "source": [ "#Construire le modèle :\n", "from sklearn import linear_model\n", "EN = linear_model.ElasticNetCV(alphas=[0.0001, 0.0005, 0.001, 0.01, 0.1, 1, 10], l1_ratio=[.01, .1, .5, .9, .99], max_iter=5000).fit(X_train, Y_train)\n" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n", "C:\\Users\\HP\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n", " ConvergenceWarning)\n" ] }, { "data": { "text/plain": [ "ElasticNetCV(alphas=[0.0001, 0.0005, 0.001, 0.01, 0.1, 1, 10], copy_X=True,\n", " cv=None, eps=0.001, fit_intercept=True,\n", " l1_ratio=[0.01, 0.1, 0.5, 0.9, 0.99], max_iter=5000, n_alphas=100,\n", " n_jobs=1, normalize=False, positive=False, precompute='auto',\n", " random_state=None, selection='cyclic', tol=0.0001, verbose=0)" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Fit the model : \n", "EN.fit(X_train,Y_train)" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [], "source": [ "yhat_train3 = EN.predict(X_train)\n", "yhat_test3 = EN.predict(X_test)" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [], "source": [ "Train_score3 = np.sqrt(mean_squared_error(yhat_train3, Y_train))\n", "Test_score3 = np.sqrt(mean_squared_error(yhat_test3, Y_test))" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "test 0.1456 train 0.1360 \n" ] } ], "source": [ "print(\"test {:.4f} train {:.4f} \".format(Test_score3, Train_score3))\n" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [], "source": [ "#Validation dans la base de données test \n", "X_valid = df_test\n", "yhat_valid3 = EN.predict(X_valid)\n", "yhat_valid3= np.exp(yhat_valid3) -1" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [], "source": [ "results = pd.DataFrame(columns = ['Id', 'SalePrice'])\n", "results['Id'] = X_valid.index + 1461\n", "results['SalePrice'] =yhat_valid3\n", "results.to_csv(\"submission_ENET.csv\", index = False)\n" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [], "source": [ "yhat_validAvg =np.exp(lasso.predict(X_valid)) +np.exp(EN.predict(X_valid)) -2" ] }, { "cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [], "source": [ "yhat_validAvg= yhat_validAvg/2" ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [], "source": [ "results = pd.DataFrame(columns = ['Id', 'SalePrice'])\n", "results['Id'] = X_valid.index + 1461\n", "results['SalePrice'] =yhat_validAvg\n", "results.to_csv(\"submission_Avg2.csv\", index = False)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** Cette technique n'as pas permis de minimiser les erreurs, ainsi j'opte pour le modèle Lasso vu qu'il présente moins d'erreurs sur la prédiction**" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }