{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction To The Data Set" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "\n", "pd.options.display.max_columns = 99" ] }, { "cell_type": "code", "execution_count": 2, "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", "
symbolingnormalized-lossesmakefuel-typeaspirationnum-of-doorsbody-styledrive-wheelsengine-locationwheel-baselengthwidthheightcurb-weightengine-typenum-of-cylindersengine-sizefuel-systemborestrokecompression-ratehorsepowerpeak-rpmcity-mpghighway-mpgprice
03?alfa-romerogasstdtwoconvertiblerwdfront88.6168.864.148.82548dohcfour130mpfi3.472.689.01115000212713495
13?alfa-romerogasstdtwoconvertiblerwdfront88.6168.864.148.82548dohcfour130mpfi3.472.689.01115000212716500
21?alfa-romerogasstdtwohatchbackrwdfront94.5171.265.552.42823ohcvsix152mpfi2.683.479.01545000192616500
32164audigasstdfoursedanfwdfront99.8176.666.254.32337ohcfour109mpfi3.193.4010.01025500243013950
42164audigasstdfoursedan4wdfront99.4176.666.454.32824ohcfive136mpfi3.193.408.01155500182217450
\n", "
" ], "text/plain": [ " symboling normalized-losses make fuel-type aspiration num-of-doors \\\n", "0 3 ? alfa-romero gas std two \n", "1 3 ? alfa-romero gas std two \n", "2 1 ? alfa-romero gas std two \n", "3 2 164 audi gas std four \n", "4 2 164 audi gas std four \n", "\n", " body-style drive-wheels engine-location wheel-base length width \\\n", "0 convertible rwd front 88.6 168.8 64.1 \n", "1 convertible rwd front 88.6 168.8 64.1 \n", "2 hatchback rwd front 94.5 171.2 65.5 \n", "3 sedan fwd front 99.8 176.6 66.2 \n", "4 sedan 4wd front 99.4 176.6 66.4 \n", "\n", " height curb-weight engine-type num-of-cylinders engine-size fuel-system \\\n", "0 48.8 2548 dohc four 130 mpfi \n", "1 48.8 2548 dohc four 130 mpfi \n", "2 52.4 2823 ohcv six 152 mpfi \n", "3 54.3 2337 ohc four 109 mpfi \n", "4 54.3 2824 ohc five 136 mpfi \n", "\n", " bore stroke compression-rate horsepower peak-rpm city-mpg highway-mpg \\\n", "0 3.47 2.68 9.0 111 5000 21 27 \n", "1 3.47 2.68 9.0 111 5000 21 27 \n", "2 2.68 3.47 9.0 154 5000 19 26 \n", "3 3.19 3.40 10.0 102 5500 24 30 \n", "4 3.19 3.40 8.0 115 5500 18 22 \n", "\n", " price \n", "0 13495 \n", "1 16500 \n", "2 16500 \n", "3 13950 \n", "4 17450 " ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cols = ['symboling', 'normalized-losses', 'make', 'fuel-type', 'aspiration', 'num-of-doors', 'body-style', \n", " 'drive-wheels', 'engine-location', 'wheel-base', 'length', 'width', 'height', 'curb-weight', 'engine-type', \n", " 'num-of-cylinders', 'engine-size', 'fuel-system', 'bore', 'stroke', 'compression-rate', 'horsepower', 'peak-rpm', 'city-mpg', 'highway-mpg', 'price']\n", "cars = pd.read_csv('imports-85.data', names=cols)\n", "\n", "cars.head()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": true }, "outputs": [], "source": [ "# Select only the columns with continuous values from - https://archive.ics.uci.edu/ml/machine-learning-databases/autos/imports-85.names\n", "continuous_values_cols = ['normalized-losses', 'wheel-base', 'length', 'width', 'height', 'curb-weight', 'engine-size', 'bore', 'stroke', 'compression-rate', 'horsepower', 'peak-rpm', 'city-mpg', 'highway-mpg', 'price']\n", "numeric_cars = cars[continuous_values_cols]" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": true }, "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", "
normalized-losseswheel-baselengthwidthheightcurb-weightengine-sizeborestrokecompression-ratehorsepowerpeak-rpmcity-mpghighway-mpgprice
0?88.6168.864.148.825481303.472.689.01115000212713495
1?88.6168.864.148.825481303.472.689.01115000212716500
2?94.5171.265.552.428231522.683.479.01545000192616500
316499.8176.666.254.323371093.193.4010.01025500243013950
416499.4176.666.454.328241363.193.408.01155500182217450
\n", "
" ], "text/plain": [ " normalized-losses wheel-base length width height curb-weight \\\n", "0 ? 88.6 168.8 64.1 48.8 2548 \n", "1 ? 88.6 168.8 64.1 48.8 2548 \n", "2 ? 94.5 171.2 65.5 52.4 2823 \n", "3 164 99.8 176.6 66.2 54.3 2337 \n", "4 164 99.4 176.6 66.4 54.3 2824 \n", "\n", " engine-size bore stroke compression-rate horsepower peak-rpm city-mpg \\\n", "0 130 3.47 2.68 9.0 111 5000 21 \n", "1 130 3.47 2.68 9.0 111 5000 21 \n", "2 152 2.68 3.47 9.0 154 5000 19 \n", "3 109 3.19 3.40 10.0 102 5500 24 \n", "4 136 3.19 3.40 8.0 115 5500 18 \n", "\n", " highway-mpg price \n", "0 27 13495 \n", "1 27 16500 \n", "2 26 16500 \n", "3 30 13950 \n", "4 22 17450 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "numeric_cars.head(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data Cleaning" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": true }, "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", "
normalized-losseswheel-baselengthwidthheightcurb-weightengine-sizeborestrokecompression-ratehorsepowerpeak-rpmcity-mpghighway-mpgprice
0NaN88.6168.864.148.825481303.472.689.01115000212713495
1NaN88.6168.864.148.825481303.472.689.01115000212716500
2NaN94.5171.265.552.428231522.683.479.01545000192616500
316499.8176.666.254.323371093.193.4010.01025500243013950
416499.4176.666.454.328241363.193.408.01155500182217450
\n", "
" ], "text/plain": [ " normalized-losses wheel-base length width height curb-weight \\\n", "0 NaN 88.6 168.8 64.1 48.8 2548 \n", "1 NaN 88.6 168.8 64.1 48.8 2548 \n", "2 NaN 94.5 171.2 65.5 52.4 2823 \n", "3 164 99.8 176.6 66.2 54.3 2337 \n", "4 164 99.4 176.6 66.4 54.3 2824 \n", "\n", " engine-size bore stroke compression-rate horsepower peak-rpm city-mpg \\\n", "0 130 3.47 2.68 9.0 111 5000 21 \n", "1 130 3.47 2.68 9.0 111 5000 21 \n", "2 152 2.68 3.47 9.0 154 5000 19 \n", "3 109 3.19 3.40 10.0 102 5500 24 \n", "4 136 3.19 3.40 8.0 115 5500 18 \n", "\n", " highway-mpg price \n", "0 27 13495 \n", "1 27 16500 \n", "2 26 16500 \n", "3 30 13950 \n", "4 22 17450 " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "numeric_cars = numeric_cars.replace('?', np.nan)\n", "numeric_cars.head(5)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "normalized-losses 41\n", "wheel-base 0\n", "length 0\n", "width 0\n", "height 0\n", "curb-weight 0\n", "engine-size 0\n", "bore 4\n", "stroke 4\n", "compression-rate 0\n", "horsepower 2\n", "peak-rpm 2\n", "city-mpg 0\n", "highway-mpg 0\n", "price 4\n", "dtype: int64" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "numeric_cars = numeric_cars.astype('float')\n", "numeric_cars.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "normalized-losses 37\n", "wheel-base 0\n", "length 0\n", "width 0\n", "height 0\n", "curb-weight 0\n", "engine-size 0\n", "bore 4\n", "stroke 4\n", "compression-rate 0\n", "horsepower 2\n", "peak-rpm 2\n", "city-mpg 0\n", "highway-mpg 0\n", "price 0\n", "dtype: int64" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Because `price` is the column we want to predict, let's remove any rows with missing `price` values.\n", "numeric_cars = numeric_cars.dropna(subset=['price'])\n", "numeric_cars.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": true }, "outputs": [], "source": [ "# Replace missing values in other columns using column means.\n", "numeric_cars = numeric_cars.fillna(numeric_cars.mean())" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "normalized-losses 0\n", "wheel-base 0\n", "length 0\n", "width 0\n", "height 0\n", "curb-weight 0\n", "engine-size 0\n", "bore 0\n", "stroke 0\n", "compression-rate 0\n", "horsepower 0\n", "peak-rpm 0\n", "city-mpg 0\n", "highway-mpg 0\n", "price 0\n", "dtype: int64" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Confirm that there's no more missing values!\n", "numeric_cars.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": true }, "outputs": [], "source": [ "# Normalize all columnns to range from 0 to 1 except the target column.\n", "price_col = numeric_cars['price']\n", "numeric_cars = (numeric_cars - numeric_cars.min())/(numeric_cars.max() - numeric_cars.min())\n", "numeric_cars['price'] = price_col" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Univariate Model" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "engine-size 3238.462830\n", "horsepower 4037.037713\n", "curb-weight 4401.118255\n", "highway-mpg 4630.026799\n", "width 4704.482590\n", "city-mpg 4766.422505\n", "length 5427.200961\n", "wheel-base 5461.553998\n", "compression-rate 6610.812153\n", "bore 6780.627785\n", "normalized-losses 7330.197653\n", "peak-rpm 7697.459696\n", "stroke 8006.529545\n", "height 8144.441043\n", "dtype: float64" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.neighbors import KNeighborsRegressor\n", "from sklearn.metrics import mean_squared_error\n", "\n", "def knn_train_test(train_col, target_col, df):\n", " knn = KNeighborsRegressor()\n", " np.random.seed(1)\n", " \n", " # Randomize order of rows in data frame.\n", " shuffled_index = np.random.permutation(df.index)\n", " rand_df = df.reindex(shuffled_index)\n", "\n", " # Divide number of rows in half and round.\n", " last_train_row = int(len(rand_df) / 2)\n", " \n", " # Select the first half and set as training set.\n", " # Select the second half and set as test set.\n", " train_df = rand_df.iloc[0:last_train_row]\n", " test_df = rand_df.iloc[last_train_row:]\n", " \n", " # Fit a KNN model using default k value.\n", " knn.fit(train_df[[train_col]], train_df[target_col])\n", " \n", " # Make predictions using model.\n", " predicted_labels = knn.predict(test_df[[train_col]])\n", "\n", " # Calculate and return RMSE.\n", " mse = mean_squared_error(test_df[target_col], predicted_labels)\n", " rmse = np.sqrt(mse)\n", " return rmse\n", "\n", "rmse_results = {}\n", "train_cols = numeric_cars.columns.drop('price')\n", "\n", "# For each column (minus `price`), train a model, return RMSE value\n", "# and add to the dictionary `rmse_results`.\n", "for col in train_cols:\n", " rmse_val = knn_train_test(col, 'price', numeric_cars)\n", " rmse_results[col] = rmse_val\n", "\n", "# Create a Series object from the dictionary so \n", "# we can easily view the results, sort, etc\n", "rmse_results_series = pd.Series(rmse_results)\n", "rmse_results_series.sort_values()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "{'normalized-losses': {1: 7846.750605148984,\n", " 3: 7500.5698123109905,\n", " 5: 7330.197653434445,\n", " 7: 7756.421586234123,\n", " 9: 7688.096096891432},\n", " 'wheel-base': {1: 4493.734068810494,\n", " 3: 5120.161506064513,\n", " 5: 5461.553997873057,\n", " 7: 5448.1070513823315,\n", " 9: 5738.405685192312},\n", " 'length': {1: 4628.45550121557,\n", " 3: 5129.8358210721635,\n", " 5: 5427.2009608367125,\n", " 7: 5313.427720847974,\n", " 9: 5383.054514833446},\n", " 'width': {1: 4559.257297950061,\n", " 3: 4606.413692169901,\n", " 5: 4704.482589704386,\n", " 7: 4571.485046194653,\n", " 9: 4652.914172067787},\n", " 'height': {1: 8904.04645636071,\n", " 3: 8277.609643045525,\n", " 5: 8144.441042663747,\n", " 7: 7679.598124393773,\n", " 9: 7811.03606291223},\n", " 'curb-weight': {1: 5264.290230758878,\n", " 3: 5022.318011757233,\n", " 5: 4401.118254793124,\n", " 7: 4330.608104418053,\n", " 9: 4632.044474454401},\n", " 'engine-size': {1: 3258.4861059962027,\n", " 3: 2840.562805643501,\n", " 5: 3238.4628296477176,\n", " 7: 3563.086774256415,\n", " 9: 3831.8244149840766},\n", " 'bore': {1: 8602.58848450066,\n", " 3: 6984.239489480916,\n", " 5: 6780.627784685976,\n", " 7: 6878.097965921532,\n", " 9: 6866.808502038413},\n", " 'stroke': {1: 9116.495955406906,\n", " 3: 7338.68466990294,\n", " 5: 8006.529544647101,\n", " 7: 7803.937796804327,\n", " 9: 7735.554366079291},\n", " 'compression-rate': {1: 8087.205346523092,\n", " 3: 7375.063685578359,\n", " 5: 6610.812153159129,\n", " 7: 6732.801282941515,\n", " 9: 7024.485525463435},\n", " 'horsepower': {1: 4170.054848037801,\n", " 3: 4020.8492630885394,\n", " 5: 4037.0377131537603,\n", " 7: 4353.811860277134,\n", " 9: 4515.135617419103},\n", " 'peak-rpm': {1: 9511.480067750124,\n", " 3: 8537.550899973421,\n", " 5: 7697.4596964334805,\n", " 7: 7510.294160083481,\n", " 9: 7340.041341263401},\n", " 'city-mpg': {1: 5901.143574354764,\n", " 3: 4646.746408727155,\n", " 5: 4766.422505090134,\n", " 7: 5232.523034167316,\n", " 9: 5465.209492527533},\n", " 'highway-mpg': {1: 6025.594966720739,\n", " 3: 4617.305019788554,\n", " 5: 4630.026798588056,\n", " 7: 4796.061440186946,\n", " 9: 5278.358056953987}}" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def knn_train_test(train_col, target_col, df):\n", " np.random.seed(1)\n", " \n", " # Randomize order of rows in data frame.\n", " shuffled_index = np.random.permutation(df.index)\n", " rand_df = df.reindex(shuffled_index)\n", "\n", " # Divide number of rows in half and round.\n", " last_train_row = int(len(rand_df) / 2)\n", " \n", " # Select the first half and set as training set.\n", " # Select the second half and set as test set.\n", " train_df = rand_df.iloc[0:last_train_row]\n", " test_df = rand_df.iloc[last_train_row:]\n", " \n", " k_values = [1,3,5,7,9]\n", " k_rmses = {}\n", " \n", " for k in k_values:\n", " # Fit model using k nearest neighbors.\n", " knn = KNeighborsRegressor(n_neighbors=k)\n", " knn.fit(train_df[[train_col]], train_df[target_col])\n", "\n", " # Make predictions using model.\n", " predicted_labels = knn.predict(test_df[[train_col]])\n", "\n", " # Calculate and return RMSE.\n", " mse = mean_squared_error(test_df[target_col], predicted_labels)\n", " rmse = np.sqrt(mse)\n", " \n", " k_rmses[k] = rmse\n", " return k_rmses\n", "\n", "k_rmse_results = {}\n", "\n", "# For each column (minus `price`), train a model, return RMSE value\n", "# and add to the dictionary `rmse_results`.\n", "train_cols = numeric_cars.columns.drop('price')\n", "for col in train_cols:\n", " rmse_val = knn_train_test(col, 'price', numeric_cars)\n", " k_rmse_results[col] = rmse_val\n", "\n", "k_rmse_results" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEGCAYAAACUzrmNAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOy9d5wdV333/z631929d5t2Ja2ssqrukiXbGPcmuUEI7SGEbgcSAqGkwpMn+UEICTwJPAmJTYBAcEwNYLl3A+6Si2T1Lm0vt/cp5/fHzN69u9qm7ZLO+/Wa18ycmTlzruU9n/l+z/l+j5BSolAoFArFWDjmugEKhUKhmP8osVAoFArFuCixUCgUCsW4KLFQKBQKxbgosVAoFArFuLjmugEzQV1dnTznnHPmuhkKhUJxWrF9+/Y+KWX9SNfOSLE455xz2LZt21w3Q6FQKE4rhBDHRrum3FAKhUKhGBclFgqFQqEYFyUWCoVCoRgXJRYKhUKhGBclFgqFQqEYFyUWCoVCoRgXJRYKhUKhGBclFpWUcvDIX0DHa6BStysUCkUZJRaVdL4Or3wH7rka/u0t8MK3INs3161SKBSKOUeJRSVLLofP7YNbvg4uLzz6F/D1VfCj98G+h8HQ57qFCoVCMSeckek+poQ/Apd81Nq6d8Pr98KOH8PeByDYABe8Gy78PWhYPdctVSgUillDnInLqm7YsEFOa24oQ4MDj8NrP4QDj4Kpw8L1cOH74Nx3gL9m+t6lUCgUc4QQYruUcsOI15RYnCKZXsvSeP1e6NkNLh+svhUu+j1YehU4lGdPoVCcniixmAmktGZNvX4v7PwpFJJQvRgueC9c+L8gunRm369QKBTTjBKLmUYrwL4H4bV74dBTgIQlV8BF74O1d4AnOHttUSgUikmixGI2SbbDG/dZFkfsMHhCsO5t1qB4y6UgxNy0S6FQKMZBicVcICUcf8GyNnb9ArQsRJdbLqoL3gvVC+e2fQqFQjEMJRZzTTEDu39lWRvHngPhgOXXWrOpVm0Bt2+uW6hQKBRKLE4FKQ2EcE5ziyqIHYbX/xtevw9SbeCrgfPeaY1vNF2o3FQKhWLOGEss1DzPCvL5dl548QZ6e5+YuZdEl8G1X4BP74D3/wJWXA+v/qAixci/qhQjCoVi3jGjYiGE+JQQ4k0hxC4hxKftsqgQ4nEhxAF7H7HLhRDim0KIg0KIHUKIiyvq+YB9/wEhxAdmqr1SlnA6g+zYeRe79/w5up6ZqVeBw2m5on73O8NSjPzlYIqRvQ9ZAYEKhUIxx8yYG0oIcS7wI2AjUAIeAT4OfAyISSn/Xgjx50BESvlnQogtwCeBLcAm4BtSyk1CiCiwDdgASGA7sF5KGR/t3VNxQ5lmicNHvsmxY3fj8y1k7dp/JFJzyaTqmhQ9e6xI8R0/hmyvSjGiUChmjblyQ60BXpRS5qSUOvAs8HbgDuD79j3fB95mH98B/EBavAjUCCGagJuAx6WUMVsgHgdunqlGOxweViz/HOsvvg+B4NVX38vBg1/FNIsz9cqhNKyBm74Mn9kD77kPFm+EF/8NvrUJvn2tlRU3n5idtigUCoXNTIrFm8CVQohaIUQAy2JYDDRKKTsB7H2Dff9C4ETF82122WjlQxBC3CmE2CaE2Nbb2zvlxtfUbGDjxgdobn4Xx47fwyvbfod0Zu+U650wTjes3gLvuRc+sxdu+jsr+O/Bz1huqp99xAoANM3Za5NCoThrmTGxkFLuAb6KZQk8ArwBjJXje6RpQHKM8uHvu0dKuUFKuaG+vn4SLT4ZlyvImtV/xwXnf5tSqY9XXnk7x47dg5TGtNQ/YUL1cNkfwsefg489beWhOvg4/Nfb4Z/Pg6e+ZM2yUigUihliRge4pZTfkVJeLKW8EogBB4Bu272Eve+xb2/DsjwGWAR0jFE+7RRzGs/9/CBHd/RRzA0OLNfVXcumjQ9RV3c1Bw99lVdffR/5/IkxapohhICFF1uD4Z/dD7/7XahfBb/+GnzzIvjeLda03FJ29tumUCjOaGY0zkII0SCl7BFCtACPAZcBfwn0VwxwR6WUfyqEuAX4IwYHuL8ppdxoD3BvBwZmR72KNcAdG+29kx3g7jyY4Jf//BqmLkFA3aIQzStqaG61Nl/ITVfX/7Bv/98CkpWtX6Sp6XcRcx0boVKMKBSKaWDOgvKEEL8BagEN+IyU8kkhRC3wE6AFOA68U0oZE1aP+y9Yg9c54ENSym12PR/GEhmAL0spvzfWe6cyG0ovGXQfTdFxIEHHgQRdh5LomjUuEFkQoHllhIblebLiq6QyL1NXdz1rVn8Zj6duUu+bVqSE4y/C6z+EXb+EUkalGFEoFBNGRXBPAUM36T2epn1/nI4DSToPJdAKBmDSdPGzVC//KQ4RYtmSv6Vl2ea5tzIGGCnFyLJrrEjxVbeoFCMKheIklFhMI6Zh0teWKVsevV1vUnf+3fgibWTbr8Svf4LmFc00t9ZQ0xiYH+KhUowoFIoJoMRiBpGmpK8jwcH9/0RW3oeer6XjxQ+S71uJv8pD84oaFq60xjyiTUGEYw47ZtOAI89amXD3bAWjCA3rLNE4/90QnAeuNIVCMWcosZglEolt7Nr9OQqFNoKO95A+8rt07M+SiVsBfd6ga8iAed2iEA7nHKXnyifgzZ9bbqr27eBwwcqbrUy4rTdYcR4KheKsQonFLKLrWQ4c/DIdHT8mFFrN2jVfRxaXlN1W7QcSpHrzALh9TpqW19DcWs3ClRHqW8I4XXMgHj17LNF448eQ7bFSjJz/Liueo2HN7LdHoVDMCUos5oC+vqfYs/cv0LQUy5f9CS0tHymnPs/Ei3QctAbMO/bHiXflAHC5HSxYXm1ZHitqaFxahcszg+nSh2NocPAJKzfV/kfA1KH5Yks0zn0H+Gtmry0KhWLWUWIxQYrFIg8++CBXXXUVtbW1U25HqdTP3n1foLf3MWqqL2Ht2n/E71980n25VInOQwk69ifoOJigry0DEhwuQeM5VWW31YJl1Xh8rim3a0JkemHnT6zxjZ5d4PLB6lut8Y2lV1lZcxUKxRmFEosJcvz4ce699150Xeeqq67i8ssvx+WaWucspRwWyPe/aWp6x5izpApZja5DSdoHZlwdTyNNiXAI6lvCLLTFo2lFNd7ADI8tSAmdr1uisfOnUEhA1SK48L1W/EZ02cy+X6FQzBpKLE6BVCrFI488wu7du6mvr+e2226jpaVlym3K59vZvefzJBIvnXIgX6mg03U4WbY8uo+mTo4yX2m5rvxhz5TbOipaAfY9ZI1vHHoKpAlL3mK5qNbcBqGG8etQKBTzFiUWk2Dfvn08+OCDpFIpNmzYwHXXXYff759SnVKanDjxPQ4e+houV5g1q/+O+vrrT7kevWTQfSRFx8EE7fsTdB+uiDJvCtLcWlO2PoI13im1eVRSHXaKkfug/wAgLOFYe7slHFXNM/NehUIxYyixmCTFYpGnn36al156iWAwyObNm1m7du2UA+0ymX3s2v1ZMpk9NDW9k5WtX8DlCk26PkM36TmWpuNAnI4DCToPJe0oc6iu95fHPJpbawjX+qY3UFBKazbV7l9ZW+8eq3zxJlh7B6y5HWpOHqdRKBTzDyUWU6Sjo4P777+frq4uVq5cyZYtW6ipmdrMoOEr8q1b+zVqakb8Nzr1uodFmXccSFDMWdnhQxFv2WW1cGWE6gb/9IpH737YYwtH106rrPliSzjW3q7GOBSKeYwSi2nAMAxeeuklnn76aQCuvfZaNm3ahMMxtbiIRGIbu3d/nnzhBEtaPsayZZ/G4Zhe15E0JbHOLO37B8QjTj5tpWAPVHmGWB7TGmXefwj23A+774eOV62yBefZwvE2qGudnvcoFIppQYnFNBKPx3nwwQc5ePAgTU1N3H777TQ1NU2pzuGBfOvW/l9CoVXT1OKTkVKS6M4NsTxGjTJfHMYxHeIRP2alGNn9K2h72SprWGu5qdbeYQX/qRxVCsWcosRimpFSsmvXLh5++GFyuRyXXnop11xzDR7P1GYijRXIN5NIKUn3FyzL42CCjv1xUn0FADw+JwuWD+a3mpYo82Q77H3AEo5jzwMSaltti+MOy/pQwqFQzDpKLGaIfD7PE088wfbt26muruaWW25h5cqVU6rz5EC+r+H3L5qmFk+cTLxgC4dleZSjzD0OFiyrLlsejUurcLmnIGjpbti71XJVHf2NNR03cs6gcDRfrIRDoZgllFjMMMeOHWPr1q309fWxbt06br75ZsLh8KTrGxrIh70i39iBfDNNLlWi82CiHCjY325HmTsF3qAbj8+Jx+fC7XXi8Tlx+1xD9h6fC7fPaV33u/B4T77mLMZg74OWxXHkWSvdSPXiQVfVoktgimNECoVidJRYzAK6rvPcc8/x61//GrfbzfXXX8/FF188pQHwqQTyzTSFrEbnoSRdh5MUMhpaQadUNCjldbSiQalgWGUFA8OOARkPh0vgsQUk4MmzxP0Si8zf0KC9ggONoqueeOQ60g03Umq8BLffg8drCc2A4Aw873Q75sdaIgrFaYQSi1mkr6+PrVu3cuzYMVpaWrjtttuor6+fdH1Smhw/8V0OHfr6lAL55hLDMNEKBqWCjlYwLDHJW0KiFfUhwjJw38A1rWBgFlIs0F6ghd+w2P0qLlEiZ1RzuHgphwqX0V46F8lQV5hwCMuysS2ZAYunbOH4LOum8tqo1pDHObfrkCgUs4QSi1lGSslrr73GY489RqlU4q1vfStXXHEFbvfk8zhVBvI1N72L1ta/mlIg3+mKLKQxdj+K3PMrXEceR+h5DE+EbNP1JOtuJBncQLHksEXHKFs8A2I0VJh0JvS/v8ASFO/JglJpzbi9Q62b4RbPgCjN2RomCsU4KLGYIzKZDI8++ig7d+6ktraWW2+9laVLl066vpkM5DstKeXg0JPWGMe+R6CUBl81rNpijXEsu2bMtcallOiabfWU3WcjWzpawaBU1CnlBy2eUuW1go5pTOxvKVzro3ZhiLpFofK+qt4/PVOUFYopoMRigpRMkwd7k1wZCVPrmb5U4AcPHuSBBx4gkUhw0UUXccMNNxAIBCZd32wE8p12aAU4/IwtHA9CIQmeMKy8yRKOFdeDZ/L/zSeCoZmURhGSAddbMa+T6M7R35Yh0Z0rWzYuj4Noc4i6hUFqF4WpWxSkdmFo5rMKKxQVzJlYCCH+BPgoIIGdwIeAJuBHQBR4FXi/lLIkhPACPwDWA/3Au6WUR+16/gL4CGAAfyylfHSs905WLJ6Lp3nH64cQwPlhP9dEq7g6GmZ9VRD3FL/6SqUSzz77LM8//zx+v5+bb76Z8847b9KDsLqe4cDBv5u1QL7TCr0ER35tpR3Z8wDkY+AOQOuNVsqR1pvAO/cuPL1kEOvM0t+eob8tS197mr62DMWsXr4nFPVStzBEbYUVUt0QUFaIYkaYE7EQQiwEfguslVLmhRA/AR4CtgD/I6X8kRDi34E3pJT/JoT4BHC+lPIPhBDvAd4upXy3EGItcB+wEWgGngBWSimN0d49WbEwpOSNVI6nY2meiaV5NZ3FkBB2OrgiEubqqLUt8U/+K76rq4utW7fS3t7O8uXLueWWW4hGo5Oub64C+U4bDB2O/dayOPY8YC0b6/JZlsbaOyzLw1c9160sI6UklyzR15ahvz1T3se7ckjT+lt1uh3UNluWR+2iUFlMfEFlhSimxlyKxYvABUAK+CXw/4B7gQVSSl0IcRnwf6SUNwkhHrWPXxBCuIAuoB74cwAp5Vfsesv3jfbu6RqzSGo6v4lneCaW5ulYivailU9pmd9bFo631IQIuk6tczZNk1deeYUnn3wS0zS5+uqrueyyy3A6J9fJDwnkq9nI2jX/OCeBfPMe04DjL9rCsRXSHeD0WGMba++AVZshMHnhHo1isZtY/AXisedJJF8BBG53FI87gtsdwe0ZOI7a5xE87ihudxSXK4wQDgzNLFshfe0Z+tssISlktPJ7QhGvJSAV4yE1jX41oK6YMHPphvoU8GUgDzwGfAp4UUq5wr6+GHhYSnmuEOJN4GYpZZt97RCwCfg/9jM/tMu/Yz/zs2HvuhO4E6ClpWX9sWPHpvW3SCk5mCvyjG11PJ/IkDdN3EKwsTrI1dEw10TDrAtNPItrMpnk4YcfZu/evTQ2NnLbbbexaNHkOvn5GMg3rzFNaN82mFo9eQIcLlh6pSUcq2+F4ORiWjQtQTz+ErH488TjL5DLHQLA5aohUnMJDocXTYtT0uJoWgxNi2GapRHrEsKJy1WDxxMti0lZZNxRpB4ml/CR7vOS7HLRf8JJvN3AHLBCXA6izUFqFwYHRWRRCH9oBhfJUpy2zJVlEQF+DrwbSAA/tc//ephYPCSlPE8IsQu4aZhYbAT+FnhhmFg8JKX8+Wjvno3ZUEXT5OVE1nZZpdidtXIp1XtcXBWxhOPKaJh6z/iugT179vDQQw+RTqfZuHEj1157LT7f6LN4xiKfb2P3nj+dl4F88xYpray4u++H3b+E+FEQDjjnCit6fM1tEF4w6uOGkSOReMWyHuLPk07vBiROZ4CamkuIRC4jGrmcUGgNQpz8lS+lxDByaGXxiFMqxcrnlqjE0UqxCoFJACMHOzocPpyOGjCqMEohStkguYSPYiaAUQxhFEO4XBGqoo1E6hdQ29RM/eIaahYEcCor5KxmrsTinViWwkfs898HLgPeyWnihjoVuouabXWkeDaeJqZZQyrnh/y2y6qKDdUBPKNEdBcKBZ566ilefvllwuEwW7ZsYc2aNZNqy5kQyDdnSGmtwzFgcQysAthymb2Y022Y4XqSqTeIx54nFn+eVOoNpNQQwk119UVEIpcTjVxGVdX5OBwz8wUvpYmup2xh6beFpcJaKVWIjC1Aup4etT6j5McohRGyGperBq+3lmCojnCkkWC4flT3mOLMYq7EYhPwXeASLDfUfwLbgCuBn1cMcO+QUn5LCPGHwHkVA9y/I6V8lxBiHfDfDA5wPwm0zsQAd0EzONiTYUltgLBv8oOFppTsSOd5JpbimViaV1LWQHnQ6eCKSIiro1VcEw1zzggD5W1tbdx///309PSwevVqNm/eTHX15AZgVSDfFJESevcid/0C882f4uw/DECyykNPnYueOh/u+guIRi4jErmcmpoNOJ1TW3p3JjHNEpqWsEXFEpBioZ90vJtMqpd8to9SKY5hJhCuFE5vGodTH6U2J273KO4xT9QWlUF3mccTwemc2anLiqkzl2MWf4PlhtKB17Cm0S5kcOrsa8DvSSmLQggf8F/ARUAMeI+U8rBdz18BH7br+bSU8uGx3jtZsXjjRII7/vU5ACIBNy21QVqiAZZEA7REA7TUWvsFVb5TmrqY1g1+G0+XZ1kdL1j+6XP8nrJwvKUmRMgeKDcMgxdeeIFnnnkGh8PBddddxyWXXDKpPFMqkO/UkVKSyx0qu5Xi8ZfQ9SSBnM7CVJiG3iK+eI91c9OFgxlya5fPbcOnkXy6RF9bmv6Ofvo7O0j0d5NN9SCcaZzeDC5fhkCkgC+cxx3I4HClkSKFbiQY7TvO4fDZojI4kD840B+1zwetF7e7BodDzfCaCNKUaCUriFQ4BIGqyVm0KihvgiRyJV483M+x/hzHY9Z2rD9HeyKPYQ7+d/I4HSyK+itExBaV2gCLIwH8ntFnNUkpOZIv8bRtdTyXyJAzrIHyDdWBcmzHuSE/iXicBx54gMOHD7Nw4UJuu+02FiwY3Xc+5m9TgXxjUih0EIs9Tzz+PLH4C5RKlhj4fAvLbqVI5DK83gbrgdgRexXAX0H7dqus8TwrjmPtHVB/5sW8mIZJojs/ZEZWf3umvHAWgD/spLbFQaRZp7pRI1hbxBfKYZgJy5opxU8a3B/LPeZyhXE6AgiHB0flJjwIh3vIucNRUVY+9+IQ7iHPCodnSJkYVofD4UGIyve57fPpC9SF8YM4h2YPGJqmpjSQY60i39oArRsauPGj506qTUospohumHQkCpZ4xLKWkAwISn+OdHGoqd4Q9g6xRJbY+5ZokLqQZ8gMpaJp8koyW55l9WYmD0Cd28VV0TBXRUI0drfx0mOPUigUuOyyy7jqqqsmtdCSCuQbpFTqJx5/oWw95PPHAXC7o+UB6Wj0cny+xePPKEscH1wF8MRLVln96kGLo2HtGb0mRyGrWVN52zN2gGGG/o5sOduwcAgiCwJDpvTWLgwRrLH+FkxTs91jtmusGKMn2U1vsptEthdp5nE6dJzC2hxoOISGAx2BhhAaQmoINJAaUEJKDWlqWM6I6cJRFhKBC4EHcFub6UJKF5hupOnCNFxIw4VpODF1F4bmLG+65sQoOTB1F9K07pPm4LFpupCm2y534hAeXB4vTpcXl9uH22PtPV4fLq8Xr9djJ8e0cpBFGgMsXBWZ1C9UYjGDSClJ5DSOxQbEI1u2SE7EcnSmCkOS1QU8TlqiARYPuLfKQhJgUSRAwjB4Np4ui0e/Zv3PvjbgZXG8B8/enaxxmNy+ZQsrVqyYVJuHBPIt/wwtiz98xgfy6XranrFkTWfNZPYC4HSGiEQ2lQUiGFw5tenGqQ4r+G/3r+DYc4CE6PJB4Wi64IwWjgFMU5LsyZWDCgfEJBMbtEJ8QTfBRj9mlYu4B06YOruzOfb3ZSlMMK39mEhwYRIQOn5hEHDoBB0mIZdByGnidxj4HQY+h4HXoeMVOh6HjlvouISOCx2n0HCi4RA6DqEhHAbCoSOcmrV36Dicevm4fM2p43AaCKduHTt0cOiWsDm08dt+CgjhrrB+PNTX38jqVX8zybqUWMwZBc2gPZEvWyKDLi5LVCr/KBwCmqr9ZfFYXOtHVHtoc0l2lUq8msmhS3AbBs2JXjb6nNx16XrW1UZOuYM70wP5DKNIMrnddiu9SDq9AykNHA4v1dXry4PS4fC50+5eKJPpGVw+9shvQBpQ0wL1a6zgP38E/FEIRCqOK8o9wTNCWAxTciKW40BPhv0nkrQdTZLszCITGlFNUGcIPFi/UwJGyEmg3k9jS5jlrRGCfjf5vEY+q1HI6xTyupVnqyKrsG5vRsnEKBqYmoksmVaFE8B0gOEQ6E7QHaALKAkoCUlJQAFJUUrymBSkJCdl+VoJa6/Z5xrAmP9sEqcwcTl0XA4dt0PH5zYJuEz8bgOfy8TnNvC5DLxOE6/LwOc08Lh0PE4Dj9PA7TQsYXNaz7scOk5h4HLoVFedy42XfHxS/1ZKLOYpUkp608VhIpLjWH+W47E8fZnikPtDQTc1i8OYtR76PQZJ2xVVj+Tmplqura3iikiY8AQjys+kQD7T1Emnd9qupedJJrdjmiWEcBIOn2+JQ/Ryqqsuxumcg7GabL+V4HDfw5Bsg3wccjHQsqM/4/SMICL2Foha5SMdu+ZmLMowJcdjOQ50pznQk+FAd5r93RkO9WYo6oMfRU3VPlobw7Q2hFjZGGJ5XYgFLhfF3sKQNCfp/sKo76pcr6ScLn7YKoyWW8ZKHV9OGe91DXHZDDx3qlHuUkpKhklJtzfDRNMlJcOgqA+Wa4ZVVtLNcrlmSEq6MeT5YsXzlXWW9IH3GMPeY1bUadWlGRLDlNx+QTPffO9Fk/o3VGJxmpIt6pyID7q0KgWlLZ7D49VY1JgnEa2mvaYe3eVCSEmjIVjn9nJFdYgrG6s4pzZI0Dv61/PpGMgnpUk2e8ByK8WeJ554GcPIABAKrS4PStfUXILLNfklbmccvTgoHPm4lfSwfB4bdq2i3Bg54hsAd9AWjsjogjL82FcNzolZWIYpOdafLQvCgZ5MWRRKFaLQPEQUwqxoDNHaEJrwtPRiXifWkUWaZoUgqJUQx8IwLcHwuCYXA6PE4gzEMCWdyTzH+rPsfP112ve+Qleomj0NrRwNRdDD9h9kycDRX6Q6rbNMuGit8p80g6s+5EUIOTSQb81XqK+7bm5/ZAVSSvL54+XZSvH4C2haDAC/f0l5zCESuRSPp3aOWzvDSAlabgRBGTiODwrPcBGSY4wF+KqHiIjpi5ASYXqNIB1FH0dzXvan3OxJuug1AiRkmDR+FtYEaLWFYEAcVpyCKCjmD0oszgLS6TSPPPIIu3btoq6ujguvu5lXpJ9n42l2lopkbeetJ6djducRfUUc8SJCgtflKI+TrK7r5dzgP+ORhwhF3s661V8k5J+brKzFYk/ZrRSPPU+h2GH9Bk+DJQxRSyB8vuY5ad9ph2lCMWWLyKCgGNl+kv09pOPdFFJ9GNkYrmIcv56imgxVIjdqlVI4ESNaK5Fhx8PHY1SA3nxEicVZxP79+3nwwQdJJpOsX7+e66+/Hq/Px65M3s6em+aVZBZNSrxCsFQ4aShIXP1F+nssd1dJK3D78ofZvPRJ+vNRfnHkw0jPBScFJy6pDRIJuKfNHaBpSeKJF4nHrCmtudxBAFyuaiKRS8vWQyCwTLkgJoFmmJb7qNtyGx3oSXOgO8PhvgxaxSp/iyJ+VtoWQmtjmNY6HyuqdIJ6agw3WaVVYx9ro4sMLt8wEak5WVAqRcdXY93jnr8R8mcCSizOMkqlEk8//TQvvvgigUCAzZs3s27dunIHm9UNnktkykkQj+Qt//cin5urI2HWB/wsNBwk+17BlfoSbrp4PX4L/3PgZjqSQ90YQY+TaMhDtd89ZKsadj58C/vcIPMkEtvK1kM6vQuQOBx+InYCvkj0csKhNWf81N7pRDNMjvZl7bGEwcHmI33ZIaKwOOpnZYM1lrCyIUxro+U+CkzXKpFaYYRxl2GusZNcZjEwx4iNcHot0RgQj1PZu/1nxOyymUSJxVlKR0cHW7dupbOzk9bWVm655RZqampOuu9YfjD1+m/iaTKGiVPA+qogV9Z4WZb5CeG+u6kKrWR56z8SLy0uD7afiOeIZ0sk81rFppPKa5SMocLiFDpLq4+xNrqfNbX7WVZ9FJfDwDCd9BZX0K+dT05cCO61hP2BUYWmyu/GqVaKo6SbHC1bCmkO2uJwpC+LbmccEAIWRwKsbAyxoiHMysYQrQ1hljcEp08UphMpoZQZNtaSgEJi/H0hxZhzZZ0ea1xmMkJzhkxjHg8lFmcxhmHw8ssv89RTTwvOsEsAACAASURBVAFwzTXXsGnTplEXWtJMyfZUtrzg0450HglUO03Wmds5V27n9iWXsn7p+8f82pdSki9pdMfepL//OTLpl9ALryNkHokgL1fQr51LR24dR9IriOWcQwSnclbNSIS9rpGtl8DYlk2Vz4XrNEvDXdJNjvRlOdBjTUU9aO+PDhOFlmiAVttCKItCfWjM9DNnFKZhj8lMUFyG7JOMKTQOtz0BYBJWjSd02giNEgsFiUSChx56iP3799PU1MRtt91Gc/P4A8N9JZ3fxC3heLo/Sa8dRLjE0csNjS3c0NDMpTVBvA6HnYDv8OCgdPxFdD0JQCCwwo51uIxIzSbc7pMtnEoKmjHUWslpw6wXjVT+5LJkXhsyp38kQl6X7QpzjWy9jCE47hkUmqJuWKLQXTklNc3R/lw5N5kQsCQaGDol1Z595HOfJaIwEwwM/p+yyNhCM9YsM4dr8haNNzyrQqPEQgFYX/u7d+/m4YcfJpvNsmnTJq655hq83okFcUkp2Z3Js/XYCzzR28VeVqLjxi9M1nvaOE9/lvP0p6kmic/bTCR6uT0ofRleb+MM/7pBCppxkpCkCgOCo48pOHlt1Mz3gJWuZaLjMsOvD8x9L+oGh3sr4hS6M+zvSXOsQhQcApbUBu1B5kFRWF6vRGHeYZpQSk/eohl9tQUQzlO3aEILIDy5vzclFooh5PN5nnzySbZt20Z1dTVbtmxh1apTSyiYz7fx6u6/4oVkjtfYwOviEvqx1q++IOjkxvp6bqyr4txTWGZ2PlDUDVIVgjKa9TLS9VxpbKHxu52EfC76M0UGkhg7BJxTG7TjFMLl/bL6oBKFswEpoZge3WIZT3BGmgyw9m3wru9PqjlKLBQjcvz4cbZu3Upvby9r165l8+bNhMMTj3aW0iQW+w0ebyPBQCt7ciUe70vyeH+KV1M5JNDkdXN9bRU32KlIAqfZeMGpUNJNy4IZSUxsN1q6oNNQ5S27kZbWKVFQTBIpoZQ9WUSC9dCyaVJVKrFQjIqu6zz//PM8++yzuFwurr/+etavXz+phZYq6S1pPNmf4vF+a92OrGHicwiuiIS5obaK62urWOibmSVHFQrF5FBioRiX/v5+tm7dytGjR1m8eDG33XYbDQ0N01J30TR5KZHlsf4kj/WlyisFnhvyc4NtdVxYFcBxGrmrFIozESUWigkhpeSNN97g0UcfpVgs8pa3vIUrr7wSt3v6cvxIKTmQK/J4f4rH+5K8nMxiYi32dF1tFTfWVXFVJFxeYlahUMweSiwUp0Q2m+XRRx9lx44dRKNRbr31VpYtWzYj74prOk/H0jzel+SpWJqkbuAWgstrQtxQZ1kdS/xq+VeFYjZQYqGYFIcOHeKBBx4gHo9zwQUXcOONNxIMBmfsfbopeSWV5fG+FI/3JzmQs9bzWBnwlYVjQ1UQl4reVihmBCUWikmjaRq//vWvee655/D5fNx0002cf/75szId9kiuyBP9lnC8kLCSH9a4nFxbW8WNtVVcHQ1T456HKSsUitOUORELIcQq4McVRcuA/w38wC4/BzgKvEtKGRdW7/MNYAuQAz4opXzVrusDwBfser4kpRxzErESi+mnu7ubrVu30tbWxrJly7j11luJRqOz9v60bvBMLM3j/Ume6E8R0wycAjZWB7mhtpobaqtYEfCeVjEdCsV8Y84tC2ElEWoHNgF/CMSklH8vhPhzICKl/DMhxBbgk1hisQn4hpRykxAiCmwDNmAlb9kOrJdSxkd7nxKLmcE0TbZt28aTTz6JYRhcddVVXH755aPmmZopDCl5PZXj8f4Uj/Ul2Z21lt9c6veUhWNTTRDPFKf/KhTzEVNK+ko67UWNjmKJjoJGe7FER1Gjo1BiU02ILy6f3Bov80EsbgT+Wkr5FiHEPuBqKWWnEKIJeEZKuUoIcbd9fJ/9zD7g6oFNSnmXXT7kvpFQYjGzpFIpHn74Yfbs2UN9fT3Lly8nEAgQDAYJBAJDNr/fP+WYjfFoK5Qsd1Vfit8m0hRNScjp4OpomBtqq7mutoq6+ZhhVaEYhpSShG7QUdRoLwwKQEfRFoSCRmdRozSs3/Y5BM1eD81eN9fWVvGJlslNex9LLGbrL+g9wEDn3iil7ASwBWPgVy0ETlQ802aXjVY+BCHEncCdAC0tLdPaeMVQqqqqePe7383evXt56qmnePXVVymVRl8T2u/3jygkA9vwax6P55TcSYt8Hj64sI4PLqwjaxg8F8/wmD1I/kBvEgGsrwpYVkddFWuCPuWuUswJWd0oWwTthUEB6LAtg/aCRt4cmpTQJWCB181Cr4eLqwIs9FmiMLBv9nqIup0z/v/0jFsWQggP0AGsk1J2CyESUsqaiutxKWVECPEg8BUp5W/t8ieBPwWuBbxSyi/Z5V8EclLKr4/2TmVZzD6appHL5U7astnsiOW5XA7THDlTp9PpHNVSGU1gRnKFSSnZmcnbs6tSvJ62Vm5b6HVzQ53lrnpLTQjfGZyCRDF7FAyTzuJQl9CAAAyIQVIfmj9MAI0eN80+tyUAXo997GGh102zz0O9x4Vzlj5u5tqy2Ay8KqXsts+7hRBNFW6oHru8DVhc8dwiLJFpw3JFVZY/M6MtVpwybreb6upqqqsntl63lJJCoTCqkFSKTCKRIJfLUSgURq3P6/WOKjDXBALcEgqQr43wig6/zWr8pDPGf7b34Xc4uDIa4obaaq6vrWKBd/oCEBUnY5ommqahaRq6rpePh2+V1wY+aAe+nCv3I5VN5Nqp3mNISb8U9BqSXhN6TEmvAT2GpMeU9BiSxAjfPjUOQYNL0OB0sNbvpNHlptHlKG8NLgduh6PifRIoITQNNDCzgu5T/K0ej+eUcrxNlNkQi/cy6IICuB/4APD39v5XFeV/JIT4EdYAd9IWlEeBvxNCROz7bgT+YhbarZhBhBD4/X78fj+1tbUTesYwDPL5/JjWSjabJZVK0dXVRS6XQ9dPzsq5DFjicBJrXMixuiZeKkV5tC8FwFKps9ENbw26OT8cIBQMlgVoOiPZ5xuGYYzacZ9Kxz7eNcMYOzPvXCCBvNtL2ucn6w2Q8frLW9Zn7XMeH3LY171H1wgW84SKeZoKeVqLOUL2+UC5a5j1bAKd9jZTrFu3jne+853TXu+MioUQIgDcANxVUfz3wE+EEB8BjgMDv+ohrJlQB7Gmzn4IQEoZE0L8f8Ar9n1/K6WMzWS7FfMTp9NJKBQiFApN6H4p5RD32MgikyLb1sVRXbLbG+JgVS0/qYry46Qk0NNHS2wXS/q7WBTvJeB0jOkKG35tqoP7UsoRO+Lp6rgrt8m4o4UQuN1u3G43LperfOx2u/H5fITD4RGvVW4TuTbw1TzQxsr9SGWVe9M0iesGnSWdzqJOp6bTWdLpKtl7zaBL09GH/XyvgCa3i3PcDhpdTha4nTS6HOV9o8tB0CEm3I7x7pnq85X3jLR08nSggvIUigpM06QjneWxnhhPxbO8kCuRleBGstossbaQZkU6hi+dLIvPeIP7w4VkQMQm0rFPBqfTOeUOeiLXnM6ZH1Qdj8zAgHHFjKHyGEFBo6M48oBxU8WYgDVIPPsDxvOROZ86O9sosVBMF5opeSmZsRMfpjict1KQrAn6rIy5ddWcH/BQzOcnPLBf+UU+nZ33QNlsx71MN7opyRoGWcMkY5j0lIYOEpenlBZLpIYtoTvagHHlvt7jUhmOR0GJhUIxTRzKFcqzq15KZtAlRN1Orqut4obaaq6Ohqk6izLmahUd++BmkLM7+qxhkNWHXhvpOGM/kzVMiubofVKt22VbBO5yXEHZIvB5WOBx41a5wybNXM+GUijOGJYHfCxv8fEHLQ0k7Yy5T/SneKIvxU+74rgEXFo9kDG3mmWB+ZMxd3jHXtlBZys69kxFR56ruJYZJgbjdezD8TsEAaeToNNR3sJOJwu8bgJOB8GKayH7POB0UO9x0ez10OR141fTnOcMZVkoFNOAISXbk1krBUl/in12CpIVAW95WdmN1aEJf/VqpiQz7Ct8oIPO6Cd/yY98PPTLfnjU71gMdOyhcsdud+QuBwGng9CwTj845NxJ0HXytdmKFVBMHuWGUihmmWN5K2PuE/0pnotnKElJlcvB1dEqalzOIR17Rj9ZEE6tY3ec1HGH7E59eEc+0MkHhnXsoYr7AqpjP2tRbiiFYpZZ4vfykUX1fGRRPVnd4NfxNI/1p3g2lqZkSkKuwc66xu2k2ece0pkHh3XeIdfIX/KqY1fMFkosFIoZJuhysrm+hs31MzP/XaGYDcYcLRJCXFtxvHTYtd+ZqUYpFAqFYn4x3tSCr1Uc/3zYtS+gUCgUirOC8cRCjHI80rlCoVAozlDGEws5yvFI5wqFQqE4QxlvgHuZEOJ+LCti4Bj7fOnojykUCoXiTGI8sbij4vhrw64NP1coFArFGcqYYiGlfLbyXAjhBs4F2qWUPSM/pVAoFIozjfGmzv67EGKdfVwNvAH8AHhNCPHeWWifQqFQKOYB4w1wv1VKucs+/hCwX0p5HrAea31shUKhUJwFjCcWlau63AD8EkBK2TVjLVIoFArFvGM8sUgIIW4VQlwEvAV4BEAI4QL8M904hUKhUMwPxpsNdRfwTWAB8OkKi+I64MGZbJhCoVAo5g/jzYbaD9w8QvmjwKMz1SiFQqFQzC/GFAshxDfHui6l/ONxnq8B/gNruq0EPgzsA34MnAMcBd4lpYwLa3X0bwBbgBzwQSnlq3Y9H2AwF9WXpJTfH/NXKRQKhWJaGW/M4g+AK4AOYBuwfdg2Ht8AHpFSrgYuAPYAfw48KaVsBZ60zwE2A632difwbwBCiCjw18AmYCPw10KIyAR/3ykhpSTz2+eQpjn+zQqFQnEWMZ5YNAH3ADcB7wfcwP1Syu+P93UvhKgCrgS+AyClLEkpE1hR4QPPfh94m318B/ADafEiUCOEaLLf/biUMialjAOPM4JrbDrIvfgiJz76UY6++z1kX355Jl6hUCgUpyVjioWUsl9K+e9SymuADwI1wC4hxPsnUPcyoBf4nhDiNSHEfwghgkCjlLLTrr8TaLDvXwicqHi+zS4brXwIQog7hRDbhBDbent7J9C8kwls3EjTV76C3tvL8d//ACf+4OMUDx6cVF0KhUJxJjGeZQGAEOJi4NPA7wEPMzEXlAu4GPg3KeVFQJZBl9OIrxmhTI5RPrRAynuklBuklBvq6+sn0LwRGuB0UvP2t7H8kYep/8xnyG3bxuHb76Dzi/8brUdlN1EoFGcv46X7+BshxHbgM8CzwAYp5UeklLsnUHcb0CalfMk+/xmWeHTb7iXsfU/F/Ysrnl+ENVYyWvm0U9ALfOnFL3G02EHdnR9j+eOPEfm995H45S85dNPN9H7z/2FksjPxaoVCoZjXjGdZfBGoxhqc/grwqhBihxBipxBix1gP2jEZJ4QQq+yi64DdwP3AB+yyDwC/so/vB35fWFwKJG031aPAjUKIiD2wfSMzNG13V/8u7j90P2/75dv4/LOf5wh9LPjLv2T5gw8Quuoq+r71LQ7dfDPxH/0IqWkz0QSFQqGYlwgpR1/DSAixZKyHpZTHxqxciAuxps56gMNY+aUcwE+AFuA48E4pZcyeOvsvWIPXOeBDUsptdj0fBv7SrvbLUsrvjfXeDRs2yG3bto11y6jECjF+sOsH3Lf3PnJ6jutaruOu8+9iTe0a8m+8Qfc//CP57dvxLF1Kw2c/Q+i667CarlAoFKc3QojtUsoNI14bSyzGqNAJvEdKee9UGzcTTEUsBkgWk/xwzw+5d/e9pLU0Vy66krvOv4vz6s4j89RT9Hzt65SOHMG/fj2Nn/8c/gsvnKbWKxQKxdwwabGwp7/+Idbso/uxpq3+EfA54HUp5R2jPjyHTIdYDJAupfnvPf/Nf+35L5LFJJc1XcZdF9zFxbUXkPjZz+n9l3/B6OsjfPPNNPzJp/EsGdMYUygUinnLVMTiV0AceAFrzCGC5VL6lJTy9Rlo67QwnWIxQFbL8uN9P+b7u75PrBDjkgWXcNf5d7E+vI749/6T/u9+F6nrRN7zHuo+8XFckRmJG1QoFAowTcj2QLIdUm32vh2SbdB8EVzx6UlVOxWx2GmvXzHgeuoDWqSU6Um1ZJaYCbEYIK/n+dn+n/G9N79Hb76XC+sv5K4L7mKTayV9//qvJH72MxyBALUf+xjRD/w+Dp9vRtqhUCjOUKSEXL/V8afaRxCEdkh3gKkPfc7lh+qFsOZ2uP6vJ/XqqYjFq1LKi0c7n6/MpFgMUDSK/OLAL/jOm9+hK9vFutp13HX+XVxWXETv//0nMk8/jWvBAur/+I+pvuN2hNM5o+1RKBSnAVJCITHY8ZfFoH1QHFIdoBeGPuf0QFUzVC2yBKFqob2vOPdHYIqTbaYiFgZWMB1YwXF+rJlKApBSyqoptWyGmA2xGEAzNO4/dD//sfM/aMu0sSqyijvPv5PLu6vp/drXKezciXfVKho+9zlCb71iVtqkUCjmiGJmaMc/klWgDYvVEk4IN40uAtWLIFAHjgnFUE+JaZ8NNd+ZTbEYQDd1HjryEN/e8W2Opo6yvHo5Hzvvo7xlL/T90zfQ2toIXn45DZ//HL41a2a1bQqFYhrQ8tZXf9kCaB8qAqk2KCSHPSQg1Di04y8Lgr2FF4BjfngelFjMIoZp8Nixx7hnxz0cTBxkSdUSPrb6g1z+cpr4t+7GSKWovv026j/1KdzNzXPSRoVCMQxDs4RgRGvAFodc/8nPBWpHEIEKqyDcBC7P7P+eSaLEYg4wpcmTx5/knh33sDe2l4WhhXxs6f/i8ie6SP7QCk+J/v77qb3zTpxV89Kbp1CcGZgGpLtGdg+lOqzjTDcnpZzzVY89RlDVDO4za3VpJRZziJSSZ9ue5e437ubN/jdpDDRyV+M7uPSBw2S2Poizqoq6T3ycmve+F4fn9PkCUSjmBaYJub5xZg51gjSGPucOjj1GULUQvKG5+U1ziBKLeYCUkuc7nufuHXfzWs9r1Pnr+IT/Zjb8fA+FF1/CvWgR9X/yaaq2bFHpQ84kpIRcDOJHIX4EEsdAL4Fw2DNXhLUvHzsmcHyq9w8cM/49wjHCO4aXj3fMKd4/xrsQlvvnJKvAPk93glEa+t/c6R1ljGCRZQ1ULwRfzZRnDs0lBb1Af6Gf/ry9Ffrpy/fRn++nNdLKu1a9a1L1KrGYR0gpeaXrFe7ecTcvd71M1Bflk9pbufAnO9D2H8B33nk0fP5zBDdunOumKiaKXoTEiUFBiB+1t2Po8aP0Gjm6XE46XS66XU4cEvxS4pcmAVNax6ZJQEr85mC5T0rmx7DnPMLhgnDzODOHak9LIcjr+XLHX7nvy/cRK8SGlGW0zIh1VHmq2Lx0M1+49AsjXh8PJRbzlNd6XuPuN+7muY7nqHaF+Uz/Bs79+RsY3T2ErrmGhs9+Bu+KFXPdTIWUkO2rEAFrk/EjJBPH6Mr30Oly0ul00uVy0eX20OkL0OV00IPOVBbp9To9BFx+/E4/fpePgNOH3+XD7/QRGNg7ffhdXvvYi9/erGMffqeHgMNr3ePwEHB48Dhc1kIx0gSk9RvLx6OVm9b5iMdM4J7hx0zsfl/NoIUQapg3M4cmQk7LndT5D7cIBvbZ4VNqbaq91dT6aqn11w7Z13hrqPJUEfaGCblDhFwhpJD4XX6aQ5ObPKPEYp6zs3cn9+y4h2faniFCkM8dWcPKB3Yic3lq3vEO6j75R7gbGsavSDF5tAIkTwwRg0L/IbqSR+nKdtCJTpfLEoNOl5Mut48up4O8GPr343a4WRBcQFOwiQXBBeXjgfPGQCNCCHJajryeJ6/nyek58lrF8UC5fc9IZSM9Zwz3y4+BQzjwu/wEXAH8Lr917K44HqE84Argd49+fWBzOVzT+28zx0gp0UyNklGiZJZIFVP05HvozfWWXT+xQoxEMUGimCBZTJIupUmX0pTM0oh1epwefE4fHocHt9ONy+HCKZw4hAOBQAiBKU1MaaKZGpqhUTJL5Tbow6O3K9h8zmb+4ap/mNRvVWJxmrA3tpd7dtzD48cep7Ho47O7lnDOk3sRbg+1H/oQ0Q9/GGcoONfNPD2RErK9ZSEwYofpix2gK3mUzmwXXaWU7SoacBe5iDlPDoKq90ZYEGpmQai5LAADYtAYbCTqi+IQMx88dfLPszq0EQWlQljK5yPcM5JgDWyngsfhwe8+NSEaUj7sWYksd5aVnWa5A7c70JHKhnSyFR3t8HsKRoG8lqdgFCgaRXRTRzM1DNPAnJJtOBSBwOPw4HF5rL3T2twOt3Vsl7md7sFj+9rwe0Z7bmFwIefVnze59imxOL04GD/IPTvv4dGjj7Io4eJPtjWw8OWjOOvqqP+jP6TmHe9AuN1z3cz5h5aHxHFk7Ajp/v109u+jO3XMEoNinE6HpNPlpNtpjR3ow/zaQYeHJn8dC0KLaKpecpKF0BhoxOM8+2asmdKkoBdOFpwJWjxjiZMuR/9Cng48Dg9O4cTpcA4R8YGvdkMaaKaGKUcWBJ/Th9/tJ+gKEvZY7p4qbxU13hpqvDVEfBGivihRX5SAO1C2FE7qxO3zmba6zGIRM5vFFY1O6nklFhMk1dvDs/d+j2BNDcHqCMEaawsM7Kurccyiv/Ro8ijf3vltHjz8ICs74JPPV1G3v9daeOlznyV07bVn18wpKSHTQ6l/P909b9IV209n8hiduS66igk6ZansKsoOS43gQtDoDrPAV0dTeBFNkeUsCC8aIghhT3iOftjZi2ZoJ4uPNlSIBMLqcIUbA4OCXiCv58lqWcvdo6VJF9MkS0mSxSSxQox4IU7BKJz0PoEod/ADvv86f91J4wF1/joivsi8dqnp8TjFffso7NlLce8ea3/4MNW3bKH5q1+dVJ1KLCZIz9HDPPCNfyCXiFPMnTzYJIQDf1VVWUTKQlIdsQSmJkIwEiVYE8HjD0xbR34ifYLv7PwOvzr4S9bvN/nYb31UdaXxb1hP4+c/j/+CC6blPfMBs5gh1rOTrp436YztpzN1jK5cD12lBJ1GgS6ngz7XyYIdFW6a3FUs8NfTFF7EgsgKFkRW0BSyhKDWV4vzNBoYPVuRUtKR7WB/bD/74vvYH99Pd7bbGhso9FM0iic9MyAAwzv8Wr8tBBVl810ARkJKidbWRmHPHop791LYs5fC3r3onZ3le1yNjfhWr8a7ZjXBjRsJXn75pN6lxGISaMUCuWSCbCJub9ZxLhEnm7TL4tbeNE42pV1uj22R1AwKS3WEUCQ6pDxQHcE1QZdSZ6aT7775XX657+dc+ZrG+5534k8VT6uFl7LFNJ29b1piED9AZ+o43bkeOktJOmWRbgdow0TWL6HJ4WWBu4qmQAMLwostIahbS1P1EhqDjXid3jn6RYrJktNyHEgcYH98P/ti+zgQt44HpoUKBIvCi1gUWjRUCPy11Pnqysc13prTTgBGwyyVKB08WBaE4p49FPbuxczYU2UdDjzLluJbsxbf6tX41qzGu3r1pN1Ow1FiMYNIKSlkM5aIjLINXMunUyPW4QuGyq6u4VtluT8URjgc9OR6+N6b3+OBnT/lxhfy3PGywG0KIu9975wuvKSZGj25HroSRy1BiB2kK32CznwPnaUUXbJIepix5ZSSBhOaHD4aPZYYNFUtYUGklaaGc1lQu5oqb/XZ5W47w5BS0p5pt0QhbonCvtg+TqRPIO0UGyF3iJWRlbRGWlkVXWUd17QScAfmuPUzh5FIUNi7j8LePRQHxOHQIdCtj08RCOBbtaosCL41a/C2ts7oGjlKLOYJhq6TSyXIJSoslnhs0FJJJMgl4mQSMfTiCOa2w0Gwuqbs6jKqfbwQ2s/rqde449cFrntDIvw+aj/yUeo/8pEZ+58qUUiwu383e9qfZ1/nK7TnuunS0vSaJeSwPr3GMGgyJI1OH02eapoCjSyoaqEpupIFDedT13AuLo+a4XWmkNNy7I/vP2kbiCEQCFqqWlgZWVneVkVX0RxsPmM/CKSUaO0d5XGFAYtB6+go3+NqaMC7ZjW+1WvwrVmNb/Vq3C0tiFlIS16JEovTkFIhPygmAy6w5AgWSzJB3qmx+5w0qVCSd/3WYMNBSdbrpKN1Gbk1qwiWXV8jWC7VNTjGWJipN9fLntgeSxw6X2FPbA+d2uBCiQs1ncW6zgLHoBg0Vi8pi4G/fvW0LMqimF+Y0ixbC/tj+8tWw4n0ifI9A9bCyshKVkZXsiqyihU1K85oa0GWShQPHbJFYdBiMNP234zDgWfp0goX0hp8q1fhqqub24bbzJlYCCGOAmnAAHQp5QYhRBT4MXAOcBR4l5QyLqzPim8AW7AWWPqglPJVu54PAAPx61+SUn5/rPeeCWIxUaRpkk+nyCbidPe18T9tWzm44wne+VSeFZ2QigRpX76MDo+gmB0hQlQI/GFr0N4V8lP0QdKdp4cEx40Oepwp8l6DgsegSZZYo5VYi5c1tWtYveQaqpddC7Wtp1UaZsWpkdWy5fGE8vhC4sAQa2FJ1RLLhRRZVbYWmoJNZ6y1AGCkUpaVMDDovGeP5UbSNACE349v1aohFoO3tRWHf/5mqp1rsdggpeyrKPsHICal/HshxJ8DESnlnwkhtgCfxBKLTcA3pJSbbHHZBmzASiqwHVgvpYyP9t6zSSxGIqtl+dGe+9j1029z++MpGhOgb1jH0s9/EbO5iXS8n+NdBzjSsZ/OnmPE+7vJJ5K4Cyb+ohN/0YnTPPmP3Ol0EKiuJhipJxixZ4FFojQuW8HC1WvxBc++LJ1nEqY0aU8Pji0MCENbpq18T9gdHjKusCqyiuU1y89sa0FK9I4OCuWZSJbFoLW3l+9x1tdZgjBgMaxZg6el5bRbTnm+icU+4GopZacQogl4Rkq5Sghxt318X+V9A5uU8i67fMh9I3G2i8UAOS3HT9/8RApNxgAAIABJREFUb47+57+z+dkswSL/f3tnHmRZVtf5z+8ub833cn1ZS9bW1VVZldXN3jZIO4RsDijYiBoNKCIu7cygovzBDDohashMEGGoo8ygDD0KKrTIEqCDskzjAnQjvQC9ZHVV75VVXZVZlcvLzLfee3/zx7lvy6WyszqzXmb2+US8uPeeu52Xy+97fr9zzu/wnRfl+asfiJjImjHoPg5H8RlbnONEucRYtcaR7Aiy9/tZHHgBpZ4jLAT+sg78RgisVJwz8x9EKBw4xL6x69k3dh0jx68j29edjnbL2jS8hYenH+7oeC4FJaDlLTS8hEY4aad7C1qvU33sMeMljLf6GKJiPDhFpBlGanoMx4/hFQrdrfgGcTmx2OzxZgp8WUQU+DNV/QiwS1WfBogFo5H0aAQ403bvRFy2WnkHInIrcCvAgQMHNvp7bAvqYZ1HZh9p9TFMj3Nq+hSVF1f54gmXH7sz4vXfLvLB78LjLwgZHZ3hCDX8wnE4+EY4+HI4eBPk9wCQAgbXemetyvlHTjEx/gAT4w9y/9e+zH3/+HcA9O/dx76x65oCkh+y+a2uNpFGTMxPtLyFeP7C2YVWqziXyDHaP8qbjrypKQ7X9l1L2tu64ZKNIJyf75i3UDk5Tu30I2gjjJRKkTw2Sv6HX98ZRsrsXC/qcmy2WNykqudiQfiKiJy8zLUrNVf0MuWdBUaIPgLGs7iSym4nKkGFUzOnGL803hSH07OnmwnGevwsx9O7+cn0fsbmpjgxfZq9h8p86Zocxft7ecm9UBof5u63vY7v+4UP4CWvbOSUn0iy/8Tz2H/C5KIJg4DJxx814nHyQU7d9XXu/39fAiBfGGbf8esYicWjf8/Ijm6lXm0Wagucnl3uLTRyOznicDB/kOuHrufNR9/c7F/Ynd29o38Pqkpw/jyV8fGOiW31iVZ4zR0cJDU2Rs/P3tQcppo4eHDbhZE2k6s2GkpEfhtYAH4RG4ZaF4v1RU5On+wQhsfnHm9mGe1L9nGi7yjH3Sxji/OcmHyMfU8/gKMhiAt7X2S8hkM/APtfSj2Z5atf+d/U/uSjjD5SZnrAJ7j1Ldz09vfiuRvbftAo4uKZJ5uex8T4A5TmZgHI9PZ1iEfhwKGrPlRwOxJpxJn5M80+hUbH81Jv4Vj/sY6+hcN9h3e8t2DCSI8vG6Yazs2ZC0RIHDrUGokUD1PdKWGkZ0tX+ixEJAs4qjof738F+F3g1cCltg7uAVV9r4j8CPDLtDq4/1hVb4w7uO8BXhw/+l5MB/f0au/ezmIxW5llfNqIwvilcU5On+SJ4hPN88PpYcYGxxjLHWSsHnJi+iy7Ju5FLjwIKLgJGLkBDt1kBGLfjasuDxlGIf/82f8BH/o4e85XeWpfEnnXO3jVzb+yaTNiVZWZp88xMf4AZ2Pvozg1CUAym2Xk2Ik4bHU9w9dci+vtjJm5V8p8bd70LcQdzqemT3F6drm30D4KabR/tJkKfScTLiy0hZFMp3P19OlWGCmZJHnsWMdM59ToKE7WzutZjW6JxWHgc/GhB3xCVT8gIoPAp4ADwFPAT6rqdDx09kPA6zBDZ9+pqnfHz/o54DfiZ31AVf/8cu/eLmJxsXzR9C1caonDucXWRJ2RnhHGBsaMOKR2MTY/zdC578KT34CLp8xFXhr232i8hoMvN0Lhry+kFAZ17vzzD+J99G/onQt44Hia1C//Aq975S/iu5uf3bY4NcnEyQeb3sfMORMe8JJJ9o6Ose/4dewbu47dR4/hJ3ZmWo8wCpveQnsIqd1byCfyHBs41hSG0YFRru29lpS3eTN6twKqSnDhwrLcSPWnnmpe4w4MkBob6/AYEgcPIs/xxsZ6sZPyuoyqcn7xPA9NdwrDVHmqec2h/KGWMAwcZ8ztoffc9+DJb8KTXzfrMAAk83DgZa3O6D0v3LA5DmG5zD1/8jv4n/g7EtWIO1+Spe8//RJvfOnPXNXcS4uzM5x9+KGmeEw9+Tio4rgeu4+MNjvN946OkdyGnY3FWrFjJNKpmVM8MvtIh7dwKH/IiMJAa6bzTvAWVJVosURUnCOcnyecmyOanyecKxLNFwnnioTz8+b8XJGwWKT22GOEs7PNZyQOHiQ51jlM1SsUtv3PZitgxeIq0hh90hSGWBxmq+aP3RGHw72HOTF4oikOx/pG6Sk+bTyGJ79ptsW4RZnuN6LQEIfdz9v0ZSXrly5x/++/n8Tn76DuKnfc1MPuX/wPvPkFb+tKzLuyuMC5h8dj8XiAC489QhSGiDgMX3PYDNUdu56RYyfI5Hs3/P1hFDZTaJfqpc7tCosKrXhdvJ7DQn2Bi+XmSHJ6k70tT2GbeAtar8cG3RjzpqEvFgmLsaEvzhMWi61r5otEsRAQXmZFPxGcXA43l8PpzePm8iQOHGgOU02OjtoFwDYRKxabRBiFPFF8ojlMtdHH0Mia6TkeR/uOdgjD0f6jpJ0kTD7U8hqe/KZZxQ0gOxz3N8SfwnHoUqdv9YknePi//xb+P3+b2Sz831fmOPz2W7nlxFvJ+t37h61XKpw7fZKJ8Qc5O/4AT59+mKBeQ1H69u9n6PhRBo4cpveafUgmuaLRXtWoL1msp1Qvrbguwmq44pLxM2S8TMc27abNWtmSZH/fQY4PnWC0f5ThzPBVbxGrKloqdRr3pa37VQx9WCyipdJlny++j9Pbi5vPdxh9tzePk2/bb25zuL295tqeHjsCqYtYsdgA6mGdR+ceZfxS2xyGmVPN0EHKTTE6MMrYwFhTHI70HTEx/zCA899reQ1PfhMqsVud39cpDoPXbrk8SuXvfpdHf++3cO8/xdkB+NwP5Xj+m36Ot534qSteMCjSaM2W+DLDvdp19RKLtQXKYZlo+ajqVWmsgpZxM8aQO0nSkiBNgrT6pPFJhy6pyCEVOKQCIVUXUjUlVVWS1YhUJSJZDkmV6iQX67jlKlqpElXKaLlCVKmgFbPtaFH7Pm4mg9PTg5PNtj49PTjZTPPYXXo+a44llYQogkiJalWi4nxbGKdh6OcJi3NEcSu/uT8/38xsuhpOTw9uPm+Mfi7XMu75PE4+h5vvxc3njPHv2M9valZUy+ZixWKdVIIKp2dOd0xuOz1zmnpkRllk/SzHB453CMOh3kOtEURBDc7dFwvDN+Cpb0EtTiQ2cDgOKcUd0v1bfw0KMK3RhTvu4MwH/xvy1Dke2g+ffW2Ol77mp9nTs6dl3OvLjfpSQ7/edZ0dHDJumoyTNAYdnxQ+6cgjrR6p0CUdOsaQ14VkTQlLVaoLVcrlGqVKHULBD4RsXdhVjtg1X2OwWCY7N49cyf+A7+OkUjipFJJO4ySTZptKIekUTiqNk0oiqfayFJJMobUa4cIC0dwc4ewsYRzCiRZLRKUSWi6j1Spaq62/Xg1EEN9DEkkkmcRJp3EyGZxcLm7J53H7+vAGBvAGh3CHhvB2DeMP78Lt67Wt+y6gqhAERNWq+f1Xq2a/Vms7rqG1qmmAVOPyWnxdfJwcPUrvG994RXWwYvEMGb80zm9+4zd5bPax5hyG3mRvM4R0YuAEY4Nj7M/t71jPl3oZJu5uicOZb0PDGBaOt/U5vBzyezfiK14VVBXCEA1DtB5AUCeqVJj7wheYvO2jyNw8dx0TnhwWREFQPHXxcfHVwcfBjxz8SPDijx8qXghuCF6geEGEGyhuEOEGEV49wq2HuPUINwQ3AkdXnpm5Io4DjmOMXds2cIQaUCOiHkWEGiGYPqSE55P0fZKJJL6fMPc5AuIYL08AcUy4qN3rUwVV83Pq+ERxGab137gONZ7A4qJp3cdDPFf9KtmsMe7ZLE4mg6RSRpQSCcRzwXWNKAAaRmhkfk9arRKVy2ipRLS4SLSwQFgqrfm+BpJOx15MBje7kucTn1vRK2odu9ksktheCSY1ipYb5mqbMa5Vjbe42rmq8Sy1WiWqtQx4x3GlssI5s0+08lrg7dQdoZLwKfse5YRH2feoNLc+eweGeNNtf3VF37+b6T62Ff2pfnZndvPK/a9sCsOKuXCqC3DmW82Qkk7cA/Uaqg5aGEOPvRXd8xLY8yI0kTf/wEEdzs6hT14yhjcM0KDzQ3M/NNc39+P7Y6PdPG6eC9AwgMa5ML5/peMwXPn+jveb6y5nXBo/kZc+rLzs4fYGRxB/LkO70W3si8TG2DETCV0BT8wkPRFjwOOtMeamvCEGTWFoPs8sg9s49kVIO4KYE4RhSK1SNp9ymYVKhQXmEdchkcmQzPSQzGZJZDKI68Z/A9KsixEQ6XgHIkZkaB3jSOveuM5ONrNy3D7f29rP5TZ82GdUqzXFI1pcbH0WFgg7jheXna9PXug4p5Vn1o8jvr+qmDg9RlCWhtiWnlfVztZ1pdpmqFdqXVc6WtrmXK2ztb7UgDfKnqGgrv6FxYh6IoEkk7HAJ5oeniQT5nebjD2+VLLjHL5PWZVSWKcU1FisVliolFksL7KwuMDCfJFatfNn7zguPYOD5IeG2TNUYP91z39232G1r2Y9ixbVRx7h6d96/3JjWq9CtYRWy+aPNghAQSNBVVZIPrLJuC7iecY4+n5zXzwPfA/x/M5j1zPXeB54rjm/4rELXtv9vrfyceN5voeKmPBKKoWTyeCm0yb0ko7LUinzj7DFZ2YvTF+K53qYTvOLZ54EwPV99hw9ZiYKHr+evaPH8W1MHg0ColKpQ3jClYRmcY3zCwtEpZLxvjYI8X0k/rtrGu3YGDsNw5xKtvaTidhjW3KcTLXtm/NOsvW8ZnnbOTzvsgMWKosLzF+conhxymwvTXUcL0xfQrXTu0jl8uQHC+SGCuSH2raDZpvp68PZoBGSNgz1DKk+9jjnf/d3EYmQehGqs0hlGqnNIaLgOkiugPTuQfr3IX37IJU2xtNvGF+v87jNsDaNvOeb826bcfbc1v1eu3Ffcuy6W97w7gTK80XOnmzN9Zh8/FFUIxzXZdc1RxgZMxMFR45dR6rHpmZ/NmgUoeUy4SpCgzidRnuZoW436Imu/X+EQcDizDTFi5MtAbjUJgwXp6iVO0eSOa5HbmhoiRgMt0RhsLCscRJFymItoFgJKJbrFMt15sr15vH+gQyvPbHrir6DFYtnyrn74LO/BBcfNseN2dEHbzIjlkZeAv7Ozq1jWZlqqcTTp8abM83PP3KKMAhMavb9B+P8VibHlU3NvvNQVaqLi0YIlghAw0NYnJ5e5hWkc/lOj2CwQM9gAa93CO3pI/AzzFdDY/QrDcMfNPfNNj6O9+crdaLLmO3XX7+bD//0S67oe1qxeKbMX4DPv6uVdG8DZ0dbdhZLU7OfOzXeXDe9f89IW2r268kXbGr2rU4YBCxMX+oMDU1NdoSJ6hUzaEWBungEiSzewC7cvgLkhtBML1E6Rz2Rpe6mqIjPQi2KW/1tRr98eWMPkE245NM++ZRPPu3FW598yiOf9uld8Zw57kl6eO6VeVdWLCyWTSYMAiafeLSZWffsyQeby9jmhgpxn4dZFKpnYADX83E9z4YUrwKq2tFXUJya5OLUFJNTM0zNzDE9u8DMYpWaJKg6CapOkqqTJEz1EKZy1P0MNTdJBZ9y5LBQV8I1zGbad8mnvTaj3jL0qxn5xrU9KQ//Co39s8WKhcVylblcavZ2HNfD9X1c38fz4n3Pb5Y19r32cs/H9VvXekvu8fxEfM5b/pwVnt1e7myD+RWqSjWImmGamYUKFyanmbo4zeR0kem5RWYWyhRLNYqVgMW6UhaPWiwCVSdBJJf/ninfWdXIdwrA8pZ/LuWT8LZnI8CKhcXSZRqp2c+dGqeyME9YrxMG9eY2qAfLysK6+QRt+6Y8WHZ+o0YTiTixgHiXEaqlArSCKDUFy28+b0WhantHHZfJcsSFxZCn5wOenq9xbq7KxfkSswsV5ko15qshiwEEevmZN66GpCUg6yo9CYd8yqM3m6S/J8NgXw+DfT1txr4R1jGikEt5JL2tL5qbgZ1nYbF0GRFhYO8IA3uXrQj8rFFVojDsEBAjQJ3Cs/R42bkVhGil54RBnXqlHAtVsOIzoxWSBdbFY97LUfRybdseil6eeS9HyevMICwakQsWSIdlklGVdFSlL6qRIiCf9unrSTGQyzDYl6Mw2MtwYYA9uwvs2TNMT3b7ZSPe6lixsFi2OSJiQk6eB6nujdabr9Q5O1tmYrrMmelFJqYXOTNd4uxsmXNzVWbKnZM1PQd2ZVz2poXhtFBIKoVEyKAfMujV6XUCNIhIZQfJDxXIF4bJDRVI5/I2HXkXsGJhsVjWRFUplgPOzBjjPzFTZmKmxNkZs392tsxcuXP2c9JzGOlPM9KX5vkHBtnXn25+RvoyDOeSOI41+tsFKxYWiwVVZXqx1hSCs7EYNIRgYqbMQrXTM8gkXEb6jPF/8cE+9vVnYiFIs68/w1BPwnoAOwgrFm0sVgMeerpILh7R0JP0yCU92/qxbHtUlamFapsQlDk7W4o9BFNWrnf2M+SSHiOxJ/Cyw4NNYdjXn2GkP01/xrdi8BzCikUbpycX+Mk/vXNZeU/SiwXEiEi7mORXKG9em2ztX+kkGYvlmRBFyuR8dYk3UGoKwdnZMtWgc3ZxX8ZnpC/NtYUsrzhaMF5Bf0sQetObv/66ZftgxaKNw4Usf/nzNzJfMVPq5ysm/8pC2/F8tc70Yo0nL5WYr5h8LLVg7bTCad9dQXDaBcVf+Xzb/nN1OJ8FgjDifLHS9AraPYOzs2XOzZapL5kpNphNMNKf5vieHK85savpGTT6EXIpKwaWZ86mi4WIuMDdwFlVfYOIXAPcDgwA9wJvV9WaiCSBjwMvAS4Bt6jqE/Ez3gf8PBACv6qqX9qMuuZTPv/uaGHd91WDMBaUoCk0xTaBWai2iU3FTPmfrwScmy03z5dql1mXOCbhmfHixtNZSVD8Vc83JgulfMeGDrYgtSDi/FzFeAMrdCCfL1YIl+SIKOSS7OtP87yRXl5//Z6mEOzvT7O3L00mYduClo3javw1vRsYB/Lx8QeBP1TV20XkTzEi8OF4O6OqR0TkLfF1t4jICeAtwHXAXuCrIjKqqmtb16tE0nNJ9rgM9iSv+BlBGMWi0hITIyTLRabd87l0sdTm9ayxjgTgOULPCl5NI5zWs0JIrSE0jXBcNtH9fhxVpbm+ULwfNcuUqP247XwUn2+sU2TKOo/bn6lt95hVTI3BjpY8k/id7c+M1zrqeGYjXLS0A/l8sdIxr04EdudTjPSl+b5D/XF4qNWBvLcvTcq3nqbl6rGpYiEi+4AfAT4AvEdMk/ZVwNviSz4G/DZGLG6O9wE+DXwovv5m4HZVrQKPi8gjwI3A8s6FbYznOvRlEvRlrjxxYRQpC7VOMVlYRWTaBebsbJmTbeVrJTkTIe6vMQIiwjIjzTIjGddxFSPbXs4Swx4tMfjKhi5/0BVcR9idT7GvP833XztohKCtA3l3b2rbpoyw7Ew227P4I+C9QC4+HgRmVbXRBJ4AGlNaR4AzAKoaiMhcfP0IcFfbM9vvsbThOGLSF6R84MomZ6kqpVrY9GqKq4lMm+ej2lgUTnDiVeqceLlPJ96neR4EweTPk+b5xv3Qdl3zXON8fK/QVha/x5F4gbzOZ0p7PRyJF7iTtvqae2RJPRr3dr6zUdZ4Z/vzl9zbVs+l9R3qSbA7n7KDHizbik0TCxF5AzCpqveIyA82ile4VNc4d7l72t93K3ArwIEDB9ZdX4tBRMgmPbJJD7ArwlksFsNmNm1uAn5URJ7AdGi/CuNp9IlIQ6T2Aefi/QlgP0B8vheYbi9f4Z4mqvoRVb1BVW8oFNbfSW2xWCyW1dk0sVDV96nqPlU9hOmgvkNVfwr4GvAT8WXvAD4f738hPiY+f4ealLhfAN4iIsl4JNVR4N82q94Wi8ViWU43xtb9Z+B2Efk94D7gtrj8NuAv4w7saYzAoKoPisingIeAAHjXVhoJZbFYLN1GVdFyQFisgSv4hY3PumvXs7BYLJYtjAYRYbFGWKya7VyNcL5qtnFZVKyhdTPkMP38IQbfNnZF77LrWVgsFssWQ1WJSgHhXLUpBlGxFgtCW9niCvOnPMHNJ3HzCRL7crj5RPxJ4g1vzloeViwsFotlg9F62PICGh5BwztoK1tpMW+nxzeGvzdJ4kCuKQqNMjefQNLeVc/EYMXCYrFYniEaKdFifVnrP1ziEWh5uTcgvtM09smDeZzeJG4ugdtrPAK3N4Hbk0C26GRMKxYWi8UCRLWwTQBqREu8ANNXUGNZigMBp8cYfW8wTfKaXmP4c7EAxB6BJN1tnZfNioXFYtnRaKRECyuEhJZ4BlpZPshSkm7T2Cev7W15ALlWSMjpSSDu9hWBZ4oVC4vFsm2JKsESw7+8XyCary3P+eCIMfj5BH4hQ+pIP05bJ3HDI3CS1kQ2sD8Ji8Wy5VCN+wZmqgSzVRMSavcI5o2noCuk9pe01+wQ9ndlW30CbZ3ETtZH7AqY68KKhcViueo0h43OVAhmKkYUZiqE0xWCmSrhTKU5b6CJK82Wv787S2q0vxkKapQ7+QROwqZu3wysWFgslk0hKgfLBMAIgznWaqdXIGkPrz+JV0iTGu3H60/i9qdw++K+gYz1BrqJFQuLxXJFRNWAYLpNBJaIwtIOY0m6eP0p3P4UyWv7cPtTTUHw+lM4aWuOtjL2t2OxWFYkqoVNLyCcqRBMVzqOo1LnXALxHdwBY/gTh/J4/Sm8gVRTFLoxkcyycVixsFieo2g97PAEOkWhSrRY77zBc0yYaCBFYn+uwytw++NOYysGOxYrFhbLDkWDiGC2UwBafQYVovklYuBK0/An9vYYIRhoCxP1WDF4LmPFwmLZpmgYEc5WOzuP2/oNwqXzCxzB7TOeQerYQFuYyJQ5PQnbgWxZFSsWFssWRUMlLFZX9ArCmSrhXLVTDATcXmP4k0f7O8NEAymTgM6KgeUKsWLRhtZDahMLeMMZ3Kzf7epYdjgaqZlcNt0216DRiTxbJZytduYhEszksv6kyT800DmayO1NIO7WTEJn2f5YsWij9vQiU3/2PcCkCfYKGfxdGfzhDN5wGn84i5OzcVvLM0cjJZypUJ8qE0yVCKbKBA1xmK0uS1Ht5BNmNNGBHN4LCs0+BG8gZZLRbdGMpJadjxWLNvzhDIPvvI5gskT9QolgskTpO5Md48Ul5eEPp/GGjZB4w0ZM3N6kdfGfw0SVgGCqTL0hCFMlIxAXyx2C4GQ9vIE0iZEevOcNdYwm8vpSiG/FwLI1sWLRhpPySB8bgGMDzTJVJZqvU59cJJgsU4+FpHJymtLdF5rXScIxnshwBm9XBr9gtt5AyorIDkEjJZyrGlGYLBFcLJuGxVTZJKtr4IA3kDYzkY8P4A+ZxoU3lLbhTcu2xYrFGohIM/cMR/o7zoWLdWMsJkvNbfWxWUr3TbYu8qRpLEw4K/ZIBtM2pLBFiWphp3fQ8BYuljvyFTW8zNRoP14hjV9I4xXiBoL93Vp2GFYsngVu1se9ppfkNb0d5VEliAWk3BSS2sQC5fsvtkavOOANtkSkISReIW0ToV0FVJWwWGsKQctTKJtRRg0E3IEU/lCa5LV9pu9qyPRh2UlolucSmyYWIpIC/gVIxu/5tKq+X0SuAW4HBoB7gberak1EksDHgZcAl4BbVPWJ+FnvA34eCIFfVdUvbVa9NwIn5ZE8kCd5IN9R3tFivdDySCrjl6DRYBVw+1MtL2S4JShOymr7etF6SP1ipSUKzT6Fckd6a0m6eIU0ycO9eLGH4BfSxgO0/QgWy6Z6FlXgVaq6ICI+8HUR+QfgPcAfqurtIvKnGBH4cLydUdUjIvIW4IPALSJyAngLcB2wF/iqiIyq6vJE9lscJ+GSGOkhMdLTUa5BRHApbt02RaRM5fRMR+eom0+Y/pDhTEdY67keB1dVooX6sn6E4GKZcKbSMRfB7UviDWfIHszjDbdEwcklrJdgsVyGTRMLVVVgIT70448CrwLeFpd/DPhtjFjcHO8DfBr4kJj/3puB21W1CjwuIo8ANwJ3blbdrzbiOfi7svi7svC8VrmGanL2NPpFLpSoT5VY/PZ5tNaKnTtZv9kX4hfSsaDsvGG+DVE1HkJnn0LHiDXfwSukSezP4b942PQjFNJ4QzbEZ7FcKZsa1xARF7gHOAL8T+BRYFZVG+kqJ4CReH8EOAOgqoGIzAGDcfldbY9tv6f9XbcCtwIcOHBgw79LNxDXdI77Q2nSJwab5c1RObGI1C+Y0ErpO1NopZUJVFJupxeya3sM8w0X6yZsNFmmftFsg6kSwUylFa4j9rSGM2ReNNwacVTI2JnKFssmsKliEYeKXigifcDngLGVLou3K/1362XKl77rI8BHAG644YZl53cS4piEb16/yfHToDXMt9QxSmvZMF/f6RydFU869AbSV23heQ0jMzmtw0Mw+x2pr+PRZP7eHtIvKJghyQUzLNWuj2yxXD2uyn+bqs6KyD8BLwP6RMSLvYt9wLn4sglgPzAhIh7QC0y3lTdov8fSRucw376Oc43WemOy4YrDfF0xYaylQjJ05cN8o1KdejzKqGMo6qVKRyoLJ+fjDWVIP2+oGTbyCxncvq3tBVkszxU2czRUAajHQpEGXoPptP4a8BOYEVHvAD4f3/KF+PjO+Pwdqqoi8gXgEyLyB5gO7qPAv21WvXcqbtbHzfaSPLR8mG8wVe4YnbXqMN+O9CetYb4rpbRojDqKFtrSYLuCN5jCG86Qvm6o6SH4hYxdJc1i2eJs5n/oHuBjcb+FA3xKVf9eRB4CbheR3wPuA26Lr78N+Mu4A3saMwIKVX1QRD4FPAQEwLu240iorYqT8kjsz5HYn+soj2pha2RRmzdSOblkmG8uQViqQ7AkpcVQxsxejj0TbziD15+6amEui8WysYgZtLSzuOGGG/Tuu+/udjV2JEuH+QaXKji5RDx72Xgfz/WhvBbLdkUbKQFdAAAGhElEQVRE7lHVG1Y6Z31/y7pYbZivxWLZ2dipqRaLxWJZEysWFovFYlkTKxYWi8ViWRMrFhaLxWJZEysWFovFYlkTKxYWi8ViWRMrFhaLxWJZEysWFovFYlmTHTmDW0SmgCefxSOGgIsbVJ2NxNZrfdh6rQ9br/WxE+t1UFULK53YkWLxbBGRu1eb8t5NbL3Wh63X+rD1Wh/PtXrZMJTFYrFY1sSKhcVisVjWxIrFynyk2xVYBVuv9WHrtT5svdbHc6pets/CYrFYLGtiPQuLxWKxrIkVC4vFYrGsiRWLGBH5PyIyKSIPdLsu7YjIfhH5moiMi8iDIvLubtcJQERSIvJvIvLduF6/0+06tSMirojcJyJ/3+26NBCRJ0TkfhH5johsmaUcRaRPRD4tIifjv7Pv3wJ1Ohb/nBqfooj8WrfrBSAivx7/zT8gIp8UkVS36wQgIu+O6/TgZvysbJ9FjIi8AlgAPq6q13e7Pg1EZA+wR1XvFZEccA/wJlV9qMv1EiCrqgsi4gNfB96tqnd1s14NROQ9wA1AXlXf0O36gBEL4AZV3VITuUTkY8C/qupHRSQBZFR1ttv1aiAiLnAWeKmqPpvJthtRlxHM3/oJVS2LyKeAL6rqX3S5XtcDtwM3AjXgH4H/qKqnN+od1rOIUdV/Aaa7XY+lqOrTqnpvvD8PjAMj3a0VqGEhPvTjz5ZoeYjIPuBHgI92uy5bHRHJA68AbgNQ1dpWEoqYVwOPdlso2vCAtIh4QAY41+X6AIwBd6lqSVUD4J+BH9vIF1ix2EaIyCHgRcC3ulsTQxzq+Q4wCXxFVbdEvYA/At4LRN2uyBIU+LKI3CMit3a7MjGHgSngz+Ow3UdFJNvtSi3hLcAnu10JAFU9C/w+8BTwNDCnql/ubq0AeAB4hYgMikgG+GFg/0a+wIrFNkFEeoDPAL+mqsVu1wdAVUNVfSGwD7gxdoW7ioi8AZhU1Xu6XZcVuElVXwy8HnhXHPrsNh7wYuDDqvoiYBH4L92tUos4LPajwN92uy4AItIP3AxcA+wFsiLy092tFajqOPBB4CuYENR3gWAj32HFYhsQ9wl8BvhrVf1st+uzlDhs8U/A67pcFYCbgB+N+wduB14lIn/V3SoZVPVcvJ0EPoeJL3ebCWCizSv8NEY8tgqvB+5V1QvdrkjMa4DHVXVKVevAZ4GXd7lOAKjqbar6YlV9BSakvmH9FWDFYssTdyTfBoyr6h90uz4NRKQgIn3xfhrzT3Syu7UCVX2fqu5T1UOY8MUdqtr1lp+IZOMBCsRhnh/ChA66iqqeB86IyLG46NVAVwdPLOGtbJEQVMxTwMtEJBP/b74a04/YdURkON4eAN7MBv/cvI182HZGRD4J/CAwJCITwPtV9bbu1gowLeW3A/fH/QMAv6GqX+xinQD2AB+LR6o4wKdUdcsMU92C7AI+Z+wLHvAJVf3H7lapya8Afx2HfB4D3tnl+gAQx95fC/xSt+vSQFW/JSKfBu7FhHnuY+uk/fiMiAwCdeBdqjqzkQ+3Q2ctFovFsiY2DGWxWCyWNbFiYbFYLJY1sWJhsVgsljWxYmGxWCyWNbFiYbFYLJY1sWJhsTxDROTQRmcl3oxnWiybgRULi8VisayJFQuL5QoQkcNx4r3vW1L+NyLyw23HfyEiPx57EP8qIvfGn2UpIkTkZ0XkQ23Hfy8iPxjv/5CI3Bnf+7dxrjCL5aphxcJiWSdxaozPAO9U1W8vOX07cEt8XQKTDuKLmMy8r40TCd4C/PE63jcE/FfgNfH9dwPvebbfw2JZDzbdh8WyPgrA54EfV9UHVzj/D8Afi0gSk1jxX+JFcnqBD4nIC4EQGF3HO18GnAC+EacLSQB3PovvYLGsGysWFsv6mAPOYHJ2LRMLVa2IyD8B/x7jQTSSuf06cAF4Acajr6zw7IBOb7+xXKdg1gt56wbU32K5ImwYymJZHzXgTcDPiMjbVrnmdkwyvn8HfCku6wWeVtUIkxjSXeG+J4AXiogjIvtppTC/C7hJRI6ASbAnIuvxTCyWZ40VC4tlnajqIvAG4NdF5OYVLvkyZqnSr6pqLS77X8A7ROQuTAhqcYX7vgE8DtyPWY2tsZzuFPCzwCdF5HsY8Ti+YV/IYnkG2KyzFovFYlkT61lYLBaLZU2sWFgsFotlTaxYWCwWi2VNrFhYLBaLZU2sWFgsFotlTaxYWCwWi2VNrFhYLBaLZU3+P5KEDgoGM2R7AAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "for k,v in k_rmse_results.items():\n", " x = list(v.keys())\n", " y = list(v.values())\n", " \n", " plt.plot(x,y)\n", " plt.xlabel('k value')\n", " plt.ylabel('RMSE')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Multivariate Model" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "engine-size 3346.484586\n", "horsepower 4219.377860\n", "width 4618.910560\n", "curb-weight 4730.075815\n", "highway-mpg 5069.469256\n", "length 5176.394904\n", "city-mpg 5202.409003\n", "wheel-base 5252.392462\n", "compression-rate 7166.073599\n", "bore 7222.472445\n", "normalized-losses 7624.407151\n", "stroke 8000.240467\n", "peak-rpm 8119.365233\n", "height 8163.346266\n", "dtype: float64\n" ] } ], "source": [ "# Compute average RMSE across different `k` values for each feature.\n", "feature_avg_rmse = {}\n", "for k,v in k_rmse_results.items():\n", " avg_rmse = np.mean(list(v.values()))\n", " feature_avg_rmse[k] = avg_rmse\n", "series_avg_rmse = pd.Series(feature_avg_rmse)\n", "sorted_series_avg_rmse = series_avg_rmse.sort_values()\n", "print(sorted_series_avg_rmse)\n", "\n", "sorted_features = sorted_series_avg_rmse.index" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'2 best features': {5: 2949.8817277180374},\n", " '3 best features': {5: 3580.7376651928435},\n", " '4 best features': {5: 3487.340917327035},\n", " '5 best features': {5: 3410.2170133901805},\n", " '6 best features': {5: 3478.510890118539}}" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def knn_train_test(train_cols, target_col, df):\n", " np.random.seed(1)\n", " \n", " # Randomize order of rows in data frame.\n", " shuffled_index = np.random.permutation(df.index)\n", " rand_df = df.reindex(shuffled_index)\n", "\n", " # Divide number of rows in half and round.\n", " last_train_row = int(len(rand_df) / 2)\n", " \n", " # Select the first half and set as training set.\n", " # Select the second half and set as test set.\n", " train_df = rand_df.iloc[0:last_train_row]\n", " test_df = rand_df.iloc[last_train_row:]\n", " \n", " k_values = [5]\n", " k_rmses = {}\n", " \n", " for k in k_values:\n", " # Fit model using k nearest neighbors.\n", " knn = KNeighborsRegressor(n_neighbors=k)\n", " knn.fit(train_df[train_cols], train_df[target_col])\n", "\n", " # Make predictions using model.\n", " predicted_labels = knn.predict(test_df[train_cols])\n", "\n", " # Calculate and return RMSE.\n", " mse = mean_squared_error(test_df[target_col], predicted_labels)\n", " rmse = np.sqrt(mse)\n", " \n", " k_rmses[k] = rmse\n", " return k_rmses\n", "\n", "k_rmse_results = {}\n", "\n", "for nr_best_feats in range(2,7):\n", " k_rmse_results['{} best features'.format(nr_best_feats)] = knn_train_test(\n", " sorted_features[:nr_best_feats],\n", " 'price',\n", " numeric_cars\n", " )\n", "\n", "k_rmse_results" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Hyperparameter Tuning" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "{'2 best features': {1: 2783.6204237227344,\n", " 2: 2657.7963807419765,\n", " 3: 2792.586573031673,\n", " 4: 2891.5329686923255,\n", " 5: 2949.8817277180374,\n", " 6: 3096.402601694776,\n", " 7: 3164.681969020496,\n", " 8: 3413.228359192009,\n", " 9: 3748.6716603306486,\n", " 10: 4080.7125057341937,\n", " 11: 4215.6372280600335,\n", " 12: 4275.421524277872,\n", " 13: 4373.901683035496,\n", " 14: 4424.285137239815,\n", " 15: 4539.505493095937,\n", " 16: 4667.307671446768,\n", " 17: 4729.605305844226,\n", " 18: 4790.556632159094,\n", " 19: 4824.3866193292615,\n", " 20: 4840.850914693829,\n", " 21: 4837.429062000271,\n", " 22: 4831.16988267597,\n", " 23: 4861.679492959275,\n", " 24: 4903.346008862579},\n", " '3 best features': {1: 3399.8148100410203,\n", " 2: 3497.191103423058,\n", " 3: 3333.6966577570593,\n", " 4: 3355.8842294742026,\n", " 5: 3580.7376651928435,\n", " 6: 3732.943016673517,\n", " 7: 3639.9439408462786,\n", " 8: 3747.4209132113137,\n", " 9: 3986.593913133887,\n", " 10: 4005.354888715163,\n", " 11: 4121.687230061635,\n", " 12: 4255.700651624227,\n", " 13: 4328.476829895253,\n", " 14: 4332.216494947217,\n", " 15: 4388.225713011904,\n", " 16: 4408.838883583756,\n", " 17: 4404.781029718083,\n", " 18: 4447.577705091259,\n", " 19: 4537.049753345422,\n", " 20: 4592.444230865941,\n", " 21: 4636.731219491763,\n", " 22: 4721.248544133379,\n", " 23: 4787.943506313775,\n", " 24: 4802.894378990491},\n", " '4 best features': {1: 2952.725686581471,\n", " 2: 3131.704952720018,\n", " 3: 3129.692821910155,\n", " 4: 3241.4320776448717,\n", " 5: 3487.340917327035,\n", " 6: 3637.0381471429987,\n", " 7: 3606.195077860286,\n", " 8: 3809.9307026308247,\n", " 9: 3875.274902378068,\n", " 10: 3997.1583055842293,\n", " 11: 4162.564050411074,\n", " 12: 4289.486490995821,\n", " 13: 4368.061602779942,\n", " 14: 4416.304772968801,\n", " 15: 4434.013914355171,\n", " 16: 4441.4634909198785,\n", " 17: 4512.996303789127,\n", " 18: 4523.575629742228,\n", " 19: 4534.834065236792,\n", " 20: 4620.211598150367,\n", " 21: 4688.356509517293,\n", " 22: 4731.46717779913,\n", " 23: 4763.535312989311,\n", " 24: 4751.601375872476},\n", " '5 best features': {1: 2824.7061233282866,\n", " 2: 2915.6731645496975,\n", " 3: 3012.4204546509704,\n", " 4: 3202.8876051367483,\n", " 5: 3410.2170133901805,\n", " 6: 3618.4509432660384,\n", " 7: 3622.6290209234803,\n", " 8: 3848.635835654326,\n", " 9: 3977.8149139381726,\n", " 10: 3994.8132211260104,\n", " 11: 4159.843526607947,\n", " 12: 4294.3389473154875,\n", " 13: 4380.848359486949,\n", " 14: 4466.368754416089,\n", " 15: 4522.420711094978,\n", " 16: 4536.427578452413,\n", " 17: 4587.098443664006,\n", " 18: 4622.107837952761,\n", " 19: 4612.890107622797,\n", " 20: 4632.693976139521,\n", " 21: 4712.917548435062,\n", " 22: 4676.301064518744,\n", " 23: 4691.189310956096,\n", " 24: 4755.990767231825}}" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def knn_train_test(train_cols, target_col, df):\n", " np.random.seed(1)\n", " \n", " # Randomize order of rows in data frame.\n", " shuffled_index = np.random.permutation(df.index)\n", " rand_df = df.reindex(shuffled_index)\n", "\n", " # Divide number of rows in half and round.\n", " last_train_row = int(len(rand_df) / 2)\n", " \n", " # Select the first half and set as training set.\n", " # Select the second half and set as test set.\n", " train_df = rand_df.iloc[0:last_train_row]\n", " test_df = rand_df.iloc[last_train_row:]\n", " \n", " k_values = [i for i in range(1, 25)]\n", " k_rmses = {}\n", " \n", " for k in k_values:\n", " # Fit model using k nearest neighbors.\n", " knn = KNeighborsRegressor(n_neighbors=k)\n", " knn.fit(train_df[train_cols], train_df[target_col])\n", "\n", " # Make predictions using model.\n", " predicted_labels = knn.predict(test_df[train_cols])\n", "\n", " # Calculate and return RMSE.\n", " mse = mean_squared_error(test_df[target_col], predicted_labels)\n", " rmse = np.sqrt(mse)\n", " \n", " k_rmses[k] = rmse\n", " return k_rmses\n", "\n", "k_rmse_results = {}\n", "\n", "for nr_best_feats in range(2,6):\n", " k_rmse_results['{} best features'.format(nr_best_feats)] = knn_train_test(\n", " sorted_features[:nr_best_feats],\n", " 'price',\n", " numeric_cars\n", " )\n", "\n", "k_rmse_results" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "for k,v in k_rmse_results.items():\n", " x = list(v.keys())\n", " y = list(v.values()) \n", " plt.plot(x,y, label=\"{}\".format(k))\n", " \n", "plt.xlabel('k value')\n", "plt.ylabel('RMSE')\n", "plt.legend()" ] } ], "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.7.6" } }, "nbformat": 4, "nbformat_minor": 4 }