{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Programming Session Week 3 \n",
"\n",
"### Full Solutions \n",
"\n",
"In this session we will continue to work on regression and we will extend our toolbox to include an additional set of classification methods. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercise 1\n",
"\n",
"#### Exercise 1.a\n",
"\n",
"The model below was generated using a degree 2 polynomial. Study the evolution of the MSE for various degrees from 1 to 5 and by generating your training and test sets as noisy samples from the true quadratic function. Use $K$-fold cross validation to retrieve the correct model complexity out the possible maximum degrees."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"num_bins = 5\n",
"\n",
"points_per_bin = 10\n",
"\n",
"dataset_size = num_bins*points_per_bin\n",
"\n",
"bin_list_x = np.zeros((num_bins, 10))\n",
"bin_list_t = np.zeros((num_bins, 10))\n",
"\n",
"from sklearn.linear_model import LinearRegression\n",
"from sklearn.preprocessing import PolynomialFeatures\n",
"\n",
"for b in np.arange(num_bins): \n",
"\n",
" x_true = np.linspace(0,1,10)\n",
" t_true = 0.1 + 0.1*x_true + x_true**2\n",
" x_sample = np.linspace(0,1,10)\n",
" t_sample = t_true + np.random.normal(0,.1,len(x_sample))\n",
"\n",
" bin_list_x[b,:] = x_sample\n",
" bin_list_t[b,:] = t_sample\n",
" \n",
" \n",
"training_data_x = np.zeros((num_bins, 10*(num_bins-1)))\n",
"training_data_t = np.zeros((num_bins, 10*(num_bins-1)))\n",
"\n",
"for b in np.arange(num_bins):\n",
" \n",
" training_data_x_b = []\n",
" training_data_t_b = []\n",
" \n",
" for b2 in np.arange(num_bins):\n",
" \n",
" if b2 != b:\n",
" \n",
" training_data_x_b = np.hstack((training_data_x_b, bin_list_x[b2, :]))\n",
" training_data_t_b = np.hstack((training_data_t_b, bin_list_t[b2, :]))\n",
" \n",
" \n",
" training_data_x[b, :] = training_data_x_b\n",
" training_data_t[b, :] = training_data_t_b\n"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAD4CAYAAADlwTGnAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAlOklEQVR4nO3de3gV933n8fdXNwRC3IUkpIPBthDGNwwHQuokdVI7AScxdmyEaVp3Ez8PD3W8T7q9pO6mm+5un90nTy/prluv/dgtdb1NbYNjO6xN6ji3Ok1NirgYg7nJGBtxkzAGxFUIffePMxKHwxEaXedcPq/nOY90Zr4z53sGMd9zfjPzHXN3REQk/xREnYCIiERDBUBEJE+pAIiI5CkVABGRPKUCICKSp4qiTqAvJk2a5NOmTYs6DRGRrLJhw4Yj7l6ROj2rCsC0adNobGyMOg0RkaxiZu+nm64hIBGRPKUCICKSp1QARETylAqAiEieUgEQEclToQqAmS00s51m1mRmj6SZb2b2aDB/i5nNSZq30sxazGxryjLPm9nm4LHXzDYP+N2IiEhovRYAMysEHgMWAbOAZWY2KyVsEVAXPJYDjyfNexpYmLped1/q7rPdfTbwPeDFfuQvIiL9FOYbwHygyd33uHs78BywOCVmMfCMJ6wDxplZNYC7vwEc7WnlZmZAA/Bsf95AGD/f3cr/+VnTUK1eRCQrhSkANcC+pOfNwbS+xvTkk8Bhd9+dbqaZLTezRjNrbG1tDbnKS/3r7iN854e7aG0716/lRURyUZgCYGmmpd5FJkxMT5ZxhU//7v6ku8fdPV5RcdmVzKEsicfo6HRe2tTcr+VFRHJRmALQDMSSntcCB/oRcxkzKwK+BDwfIo9+u3byaOZeNZ7n1+9Dd0ATEUkIUwDWA3VmNt3MSoD7gTUpMWuAB4KzgRYAx939YIh13w7scPch/2i+NB7j3dZTbPzg2FC/lIhIVui1ALh7B/Aw8BqwHVjl7tvMbIWZrQjC1gJ7gCbgKeChruXN7FngTaDezJrN7MGk1d/PEB78TXbnTdWMKilk1fp9vQeLiOQBy6YhkXg87gPpBvqNF97i1S0H+fdv3k7ZiKxqhCoi0m9mtsHd46nT8+pK4IZ4jFPtF3j17TCjUyIiuS2vCsDcq8ZzdUUZqxs1DCQiklcFwMxoiMdYv/cj3m09GXU6IiKRyqsCAPClOTUUFhir9C1ARPJc3hWAyeWlfLp+Mt/bsJ/zFzqjTkdEJDJ5VwAAls6LceTkOX62s3+tJUREckFeFoDb6iuYNHqEhoFEJK/lZQEoLizg3rk1/GRHCy1tZ6NOR0QkEnlZACBxTcCFTueljfujTkVEJBJ5WwCuqRhN/KrxPN+oBnEikp/ytgAANMyLsaf1FBs/+CjqVEREhl1eF4DP31hNWUkhz6tBnIjkobwuAGUjivjCTVN4ZctBTp3riDodEZFhldcFAKBhXi2n2y/w6hY1iBOR/JL3BWDO1PFcU1GmawJEJO+EKgBmttDMdppZk5k9kma+mdmjwfwtZjYnad5KM2sxs61plvuPwXq3mdmfDeyt9E9Xg7jG9z+iqUUN4kQkf/RaAMysEHgMWATMApaZ2ayUsEVAXfBYDjyeNO9pYGGa9X4aWAzc5O7XA3/Rj/wHxZfm1FJYYGoTLSJ5Jcw3gPlAk7vvcfd24DkSO+5ki4FnPGEdMM7MqgHc/Q3gaJr1/jbwbXc/F8S19PdNDFRF+Qg+M3My39uoBnEikj/CFIAaIPmjcXMwra8xqWYAnzSzX5rZv5jZvHRBZrbczBrNrLG1deiaty2NJxrE/XRHZHVIRGRYhSkAlmZa6qWzYWJSFQHjgQXAHwCrzOyy9bj7k+4ed/d4RUVFiHT757b6CirKR7CqsXnIXkNEJJOEKQDNQCzpeS1woB8x6db7YjBs9O9AJzApRD5DoqiwgHvn1PLTnS20nFCDOBHJfWEKwHqgzsymm1kJcD+wJiVmDfBAcDbQAuC4u/d2Yv3LwGcAzGwGUAIc6Uvyg60hXsuFTufFTWoQJyK5r9cC4O4dwMPAa8B2YJW7bzOzFWa2IghbC+wBmoCngIe6ljezZ4E3gXozazazB4NZK4Grg9NDnwN+yyPuynZ1xWjmTRvPqvVqECciua8oTJC7ryWxk0+e9kTS7w58rYdll/UwvR34jdCZDpOGeIw/eGELG97/iPi0CVGnIyIyZPL+SuBUd6pBnIjkCRWAFGUjivjizVN49e2DnFSDOBHJYSoAaSyJx4IGcb2dyCQikr1UANKYM3Uc104erWEgEclpKgBpJBrE1bLxg2M0tbRFnY6IyJBQAejBPbfUUlRgujJYRHKWCkAPuhrEvbixWQ3iRCQnqQBcwdJ5MY6cbOcnahAnIjlIBeAKfnVGBZPLR+g+ASKSk1QArqCosIB759by052tahAnIjlHBaAXDfEYFzqd721UgzgRyS0qAL2YPqmM+dMmsLpRDeJEJLeoAITQMC/GniOnaHz/o6hTEREZNCoAIdx5YxWjRxTpymARySkqACGMKiniizdX8+qWg7SdPR91OiIigyJUATCzhWa208yazOyRNPPNzB4N5m8xszlJ81aaWUtw45fkZf6rme03s83B486Bv52hsyQe48z5C7y6pbcbnYmIZIdeC4CZFQKPAYuAWcAyM5uVErYIqAsey4HHk+Y9DSzsYfV/5e6zg8faHmIywi2xcdRNHs3zuiZARHJEmG8A84Emd98T3MXrOWBxSsxi4JngBu/rgHFmVg3g7m8ARwcz6SgkGsTF2PTBMXYfVoM4Ecl+YQpADZD8sbc5mNbXmHQeDoaMVprZ+HQBZrbczBrNrLG1tTXEKofOPXNqggZx+hYgItkvTAGwNNNST4gPE5PqceAaYDZwEPjLdEHu/qS7x909XlFR0csqh9ak0SP4tesm8+LG/WoQJyJZL0wBaAZiSc9rgdRbZYWJuYS7H3b3C+7eCTxFYqgp4y2dF+PDU+38eLsaxIlIdgtTANYDdWY23cxKgPuBNSkxa4AHgrOBFgDH3f2Kp8t0HSMI3ANs7Sk2k3yqroLKMWoQJyLZr9cC4O4dwMPAa8B2YJW7bzOzFWa2IghbC+wBmkh8mn+oa3kzexZ4E6g3s2YzezCY9Wdm9raZbQE+DfynwXpTQ6mosIB759Ty050tHFaDOBHJYpZN/W3i8bg3NjZGnQZ7j5zitr/4Gd9YWM9Dt10bdToiIldkZhvcPZ46XVcC98O0SWXMnz6B1Y3NahAnIllLBaCflsZjvHfkFOv3qkGciGQnFYB+WqQGcSKS5VQA+inRIG4Ka99WgzgRyU4qAAPQEK/lzPkLvKIGcSKShVQABmB2bBwzKkdrGEhEspIKwAB0NYjbvO8Yu9QgTkSyjArAAN1zS9AgTt8CRCTLqAAM0MTRI7j9ukpe2rSf9g41iBOR7KECMAi6GsT9ZMfhqFMREQlNBWAQfGpGBVVjSlnV2Bx1KiIioakADILCAuPeuTX8bGcLh46rQZyIZAcVgEGyZG6MTofvbdS3ABHJDioAg2TapDI+Nn0Cqxv3qUGciGQFFYBBtHRejL0fnuaX7x2NOhURkV6FKgBmttDMdppZk5k9kma+mdmjwfwtZjYnad5KM2sxs7R3/DKz3zczN7NJ/X8bmWHRDdWUjyjSTeNFJCv0WgDMrBB4DFgEzAKWmdmslLBFQF3wWE7ihu9dngYW9rDuGHAH8EFfE89EI0sK+eLsRIO4E2oQJyIZLsw3gPlAk7vvcfd24DlgcUrMYuAZT1gHjOu656+7vwH0NCbyV8A3gJwZNG+Ixzh7vpNX3lKDOBHJbGEKQA2QPKbRHEzra8wlzOwuYL+7vxUih6xxc+1Y6ivLeV7DQCKS4cIUAEszLfUTe5iYi8Fmo4BvAt/q9cXNlptZo5k1tra29hYeOTNjSbyWt/YdY+chNYgTkcwVpgA0A7Gk57XAgX7EJLsGmA68ZWZ7g/iNZlaVGujuT7p73N3jFRUVIdKN3pfm1FJcaDoYLCIZLUwBWA/Umdl0MysB7gfWpMSsAR4IzgZaABx39x4Hwd39bXef7O7T3H0aiQIyx90P9e9tZJYJZSXcMUsN4kQks/VaANy9A3gYeA3YDqxy921mtsLMVgRha4E9QBPwFPBQ1/Jm9izwJlBvZs1m9uAgv4eMtCQe4+ipdn68XQ3iRCQzFYUJcve1JHbyydOeSPrdga/1sOyyEOufFiaPbPKpuq4GcftYdGN11OmIiFxGVwIPkcIC4765tfzLrlY1iBORjKQCMISWxGvpdHhhgw4Gi0jmUQEYQldNLGPB1RNY1dhMZ2fOXOsmIjlCBWCILZ0X44OjahAnIplHBWCILbw+0SButa4JEJEMowIwxEaWFHLX7Cms3aoGcSKSWVQAhkFXg7j/99aVLo4WERleKgDD4KbascysKmfVeg0DiUjmUAEYBokGcTHeaj7OjkMnok5HRARQARg299xSk2gQt143jReRzKACMEwmlJXw2VlVvLSpWQ3iRCQjqAAMoyXxWj46fZ4fqUGciGQAFYBh9Mm6CqrHluo+ASKSEVQAhlFXg7g3drVy8PiZqNMRkTynAjDMlsyNJRrENepgsIhESwVgmE2dOIqPXz2R1RvUIE5EohWqAJjZQjPbaWZNZvZImvlmZo8G87eY2ZykeSvNrMXMtqYs86dB7GYz+6GZTRn428kOXQ3i1r33YdSpiEge67UAmFkh8BiwCJgFLDOzWSlhi4C64LEceDxp3tPAwjSr/nN3v8ndZwOvAN/qa/LZauENVZSXFrFaw0AiEqEw3wDmA03uvsfd24HngMUpMYuBZzxhHTDOzKoB3P0N4LJeyO6efElsGZA34yGlxYUsnj2FtW8f5PgZNYgTkWiEKQA1QPJ5i83BtL7GXMbM/oeZ7QO+TA/fAMxsuZk1mllja2triHSzQ0M8xrkONYgTkeiEKQCWZlrqp/UwMZcHuH/T3WPAd4GHe4h50t3j7h6vqKjoNdlscWNN0CBO1wSISETCFIBmIJb0vBZI/dgaJuZK/gm4tw/xWc/MWDovxpbm42w/qAZxIjL8whSA9UCdmU03sxLgfmBNSswa4IHgbKAFwHF3P3illZpZXdLTu4Adfcg7J9w9u4aSwgJ9CxCRSPRaANy9g8TwzGvAdmCVu28zsxVmtiIIWwvsAZqAp4CHupY3s2eBN4F6M2s2sweDWd82s61mtgX4LPD1wXpT2WJ8WQl3XF/Jy5v2c67jQtTpiEieKQoT5O5rSezkk6c9kfS7A1/rYdllPUzPqyGfnjTEY7y65SA/eqeFz99UHXU6IpJHdCVwxD5x7SSmjC3leQ0DicgwUwGIWFeDuJ/vbuXAMTWIE5HhowKQAZbEY7jDCxt0ZbCIDB8VgAwQmzCKX7lmIqs37FODOBEZNioAGWLpvBj7jp5h3R41iBOR4aECkCE+d32iQZyuCRCR4aICkCFKiwu5e3YNP9h6SA3iRGRYqABkkK4GcWvUIE5EhoEKQAa5oWYM11WPYdV6DQOJyNBTAcggZsbSeC1v7z/OOwfUIE5EhpYKQIZZrAZxIjJMVAAyzPiyEj57fSUvb1aDOBEZWioAGaghHuPY6fO8/s7hqFMRkRymApCBbr12EjXjRvK8DgaLyBBSAchAhQXGvXNr+demI+xXgzgRGSKhCoCZLTSznWbWZGaPpJlvZvZoMH+Lmc1JmrfSzFrMbGvKMn9uZjuC+JfMbNyA300OWTK3NtEgrlEN4kRkaPRaAMysEHgMWATMApaZ2ayUsEVAXfBYDjyeNO9pYGGaVb8O3ODuNwG7gD/qa/K5LDZhFLdeqwZxIjJ0wnwDmA80ufsed28HngMWp8QsBp7xhHXAODOrBnD3N4CjqSt19x8Gt5sEWEfiRvKSpCEeo/mjM7ypBnEiMgTCFIAaIPloZHMwra8xV/JV4AfpZpjZcjNrNLPG1tbWPqwy+33u+irGqEGciAyRMAXA0kxLHZMIE5N+5WbfBDqA76ab7+5Punvc3eMVFRVhVpkzSosLufuWoEHcaTWIE5HBFaYANAOxpOe1QGq3sjAxlzGz3wK+AHw5uLG8pGiIx2jv6GTNW/ujTkVEckyYArAeqDOz6WZWAtwPrEmJWQM8EJwNtAA47u4Hr7RSM1sI/CFwl7uf7kfueeGGmrHMqh6jm8aLyKDrtQAEB2ofBl4DtgOr3H2bma0wsxVB2FpgD9AEPAU81LW8mT0LvAnUm1mzmT0YzPoboBx43cw2m9kTg/Wmcs3SeTG27j/BtgPHo05FRHKIZdPISzwe98bGxqjTGHbHTrcz/3/+mF+fP5X/etf1UacjIlnGzDa4ezx1uq4EzgLjRpXwueureGnTfs6eV4M4ERkcKgBZoiFey/EzahAnIoNHBSBL3HpNokGcrgkQkcGiApAlCgqM+4IGcc0f6aQpERk4FYAssiSe6JbxwgY1iBORgVMByCK140dx6zWTWN3YrAZxIjJgKgBZpmFejP3HzvBv76pBnIgMjApAlvnsrErGjizWwWARGTAVgCxTWlzI3bOn8M/b1CBORAZGBSALNcxLNIj7vhrEicgAqABkoeunjOX6KWN003gRGRAVgCy1dF6MbQdOsHW/GsSJSP+oAGSpxTfXUFJUwGodDBaRflIByFJjRxWz8PoqXt58QA3iRKRfVACyWEM8xvEz5/mhGsSJSD+EKgBmttDMdppZk5k9kma+mdmjwfwtZjYnad5KM2sxs60pyywxs21m1mlml/Wplt79yjUTEw3idDBYRPqh1wJgZoXAY8AiYBawzMxmpYQtAuqCx3Lg8aR5TwML06x6K/Al4I0+Zy1AokHckngtv3j3CPuOqkGciPRNmG8A84Emd9/j7u3Ac8DilJjFwDOesA4YZ2bVAO7+BnA0daXuvt3ddw4sfblvrhrEiUj/hCkANUDyGENzMK2vMf1iZsvNrNHMGltbWwdjlTmldvwoPnHtJF7YoAZxItI3YQqApZmWuqcJE9Mv7v6ku8fdPV5RUTEYq8w5DfFEg7hfvHsk6lREJIuEKQDNQCzpeS1woB8xMkTu6G4Qp2EgEQkvTAFYD9SZ2XQzKwHuB9akxKwBHgjOBloAHHf3g4Ocq/SgtLiQe26p4bVthzh2uj3qdEQkS/RaANy9A3gYeA3YDqxy921mtsLMVgRha4E9QBPwFPBQ1/Jm9izwJlBvZs1m9mAw/R4zawY+DrxqZq8N4vvKOw3xRIO4lzepQZyIhGPu2XPgMB6Pe2NjY9RpZKwv/PXP6eyEtV//ZNSpiEgGMbMN7n7Z9Va6EjiHLI3HeOegGsSJSDgqADnkrqBBnO4WJiJhqADkkLGjill0QxUvb9qvBnEi0isVgBzTEI9x4mwHr207FHUqIpLhVAByzMevnkjt+JEaBhKRXqkA5JiCAmPJ3Bi/aPpQDeJE5IpUAHLQffFazGC1GsSJyBWoAOSgmnEjEw3iGvdxQQ3iRKQHKgA5aum8GAeOn+UXTWoQJyLpqQDkqDtmVTJuVLEOBotIj1QActSIokLunl3DD7cd5qNTahAnIpdTAchhDfEY7Rc6eXmzGsSJyOVUAHLYrCljuLFmLM+v30c2Nf0TkeGhApDjGubF2HGoja37T0SdiohkGBWAHHfXzVMYoQZxIlnN3Yfknt+hCoCZLTSznWbWZGaPpJlvZvZoMH+Lmc1JmrfSzFrMbGvKMhPM7HUz2x38HD/wtyOpxo4MGsRtVoM4kWxw9FQ76/Z8yDNv7uWbL73Nkif+jdn//XU2fPDRoL9WUW8BZlYIPAbcQeLev+vNbI27v5MUtgioCx4fAx4PfgI8DfwN8EzKqh8Bfuzu3w6KyiPAH/b/rUhPGuIxXt58gNe2HWLx7Jqo0xERoO3seXYdPsnuw23sPNzGrsNt7Dx0kiMnz3XHjCktor6qnC/cVM2Y0uJBz6HXAgDMB5rcfQ+AmT0HLAaSC8Bi4BlPHGlcZ2bjzKza3Q+6+xtmNi3NehcDtwW//wPwM1QAhsSCqycSmzCS59fvUwEQGWZnz1+gqeUkOw8ldvKJx0n2HzvTHTOqpJC6ynI+M7OCGZXlzKgsp76qnMnlIzCzIcstTAGoAZIHkJu5+On+SjE1wJVuDF/ZdeN4dz9oZpND5CL90NUg7juv72Lf0dPEJoyKOiWRnNPe0cl7R0517+S7dvjvHz1N10l4JYUFXDN5NPOmjefLVVOZMTmxo68ZN5KCgqHb0fckTAFIl1Xq0YgwMf1iZsuB5QBTp04djFXmpfvm1vJXP9rF6sZ9/O5n66NORyRrXeh0Pjh6mp2H2i4ZvtnTeoqO4EBtYYExbeIoZk0Zw9231FBfWc6MqnKumjCKosLMOfcmTAFoBmJJz2uBA/2ISXW4a5jIzKqBlnRB7v4k8CQkbgofIl9JY8q4kXyyroIXNjTz9dtnUBjBpw2RbOLuHDh+ll2Hgp38oTZ2tbSx+/BJznV0dsdNnTCKGZXl3H5dJfVVieGbqyvKGFFUGGH24YQpAOuBOjObDuwH7gd+PSVmDfBwcHzgY8DxruGdK1gD/Bbw7eDn9/uSuPTd0niMr/3TRv616Qi/OqMi6nREMoK703ryHLsPXxyn33k4saM/ea6jO65qTCkzqsp54OMTqassp76ynGsnj6ZsRJjdaGbqNXN37zCzh4HXgEJgpbtvM7MVwfwngLXAnUATcBr4StfyZvYsiYO9k8ysGfgTd/87Ejv+VWb2IPABsGQw35hc7vZZkxk/qphV6/epAEheOna6nV2HTwY7+Ivj9B+dPt8dM6GshBmVo7l3Tg0zqhI7+rrKcsaOHPyzcKIWqnS5+1oSO/nkaU8k/e7A13pYdlkP0z8Efi10pjJgI4oKufuWGv5x3fscPdXOhLKSqFMSGRKnznWwu+XkxeGb4HH4xMVTLMtHFDGjqpyFN1QlzroJxuknjR4RYebDK3u/u0i/LJ0X4+9/sZeXN+3nq5+YHnU6IgNy9vwF3m09mRi+Ccbpdx5uo/mji6dYlhYXUDe5nE9cW0F91eju4ZvqsaVDeoplNlAByDMzq8ZwU+1YVjXu4yu3Tsv7/wCSHc5f6OT9D0+x81DS8M3hNvYeOUVXh4TiQuPqSaO5Zep47p8X6z6fPjZhlE566IEKQB5qiMf445e38vb+49xUOy7qdES6dXY6zR+dSboy9uIplu0XEmfeFBhMm1hGXeVovnBjdfc4/bRJZRRn0CmW2UAFIA998eYp/Okr77CqcZ8KgETC3Tl04iy7Dl86Tr/78EnOJPWsqhk3kvqqcm6rn8yMytHMCM68KS3O/FMss4EKQB4aO7KYO2+s5vubD/DHn5+l/0wypBI9b9rYfjDxiX7HoRPsPNTGibMXT7GcXD6CGZXlLJs/lfqqxI6+rrKc0Vl8imU20NbNU0vitby0aT//vPUQd9+i/kAycB0XOtn74Sl2HGpjx8HEjn7HoUsPyJaPKGJmdTlfvHkKM4OLpmZUljNeZ6RFQgUgTy2YPpGpE0bx/Pp9KgDSZ61t5xI7+INtiR3+oRPsbjlJe3CFbGGBcfWkMm6ZOp5l86cys+pizxudeJA5VADyVKJBXC1/+fouPvjwNFMnqkGcXO5M+wV2t7R1f6rfeTix0//wVHt3zOTyEcysHsOt107q3tFfO3l0VrRCyHcqAHnsvngt3/nRLlZv2MfvqUFcXuvsdPZ9dPqyHf3eDy+eZllaXEB9Us+bmdXlzKwaowsKs5gKQB6rHjuSTwUN4n5HDeLyxrHT7ew4dPGAbNfvp9sTZ9+YwVUTRlFflRirv666nPqqMUzV+fQ5RwUgzy2dF+Oh727k57tbua1et2TIJe0dnbzbmmhwtj0482bHwTYOnTjbHTNuVDEzq8ppiMeYWVXOzOoxzKgczagS7Rrygf6V89zt11UyoayEVY37VACyVNc59ckHZHceaqOp5WR3f/riQuPayeV8/JqJ3Tv6mcNwxynJbCoAea6kqIC7Z9fwf9ftVYO4LHDqXAc7D196muWOgycuOae+6+Kpz8ycTH1VOddVj2G6rpKVNFQAhKXzYqz8xXu8tGk/D6pBXEa40OmJc+oPtrHz0Am2B+P0Hxw93R0zekRww/Cbp3BdVWKcvr4qN9sWy9BQARDqq8q5uXYsqxv38VU1iBt2R06eS4zTH7x4QHbX4bbuu04VGFxdMZoba8fSEK+lvioxfFM7XufUy8CoAAgADfNifPOlrWxpPs7NsXFRp5OTzp6/QFPLSbYfDA7IBo8jJy/2qJ80egTXVZfzmwuu6h6nV+8bGSqhCoCZLQT+N4k7gv2tu387Zb4F8+8kcUew/+DuG6+0rJndDDwBjAb2Al929xOD8J6kH5IbxKkADExnp7P/2Jnu8fmuA7PvJbUuHlFUwIzKcj5dX9E9Tl+fZzcjkej1WgDMrBB4DLiDxM3f15vZGnd/JylsEVAXPD4GPA58rJdl/xb4fXf/FzP7KvAHwH8ZvLcmfTGmtJg7b6hmTdAgbmSJPnGmc/b8BdrOdtB29jwngp9tZztobTsXHJw9wa6Ue8lOnTCKmVXlfP7GamYGO/ppE8t0Tr1ELsw3gPlAk7vvAQhu/L4YSC4Ai4FngltDrjOzcWZWDUy7wrL1wBvB8q+TuOewCkCElsRjvLhpP/+87SD33FIbdTqDruNCJ21nOzgR7LS7f545H+zUu6alPg92+Gc6unvSpzN2ZDH1VeXcO6eme0c/Qx0tJYOF+cusAfYlPW8m8Sm/t5iaXpbdCtwFfJ/EDeFj6V7czJYDywGmTp0aIl3prwVXT+CqiYkGcZlWADo7nZPtKTvrM+dpO3fp8xNpPp137byT+8z3pKykkPLSYspLixgzspgJZSVcNbEs8bxrejCvvLSoO3bCqBIqdE69ZJkwBSDdX7SHjLnSsl8FHjWzbwFrgPY0sbj7k8CTAPF4PPV1ZRCZJRrE/cUPd/H+h6e4amLZoKzX3TndfunQSeon60t21kk7764d/sn2DryXf/0RRQWUlxYzZmRixzymtIjqsaXdO+6uaeXJz0de3LGPHlFEkc6VlzwSpgA0c+mn81rgQMiYkp6WdfcdwGcBzGwG8Pm+JC5D4965tXzn9V2sbmzm9z+XaBDX07h38s47dad+6fBJBxc6r7z3Liqw7k/d5aVFlI8o5qqJoy7dWSd/Ck/5BF5eWqTukyJ9FKYArAfqzGw6sB+4H/j1lJg1wMPBGP/HgOPuftDMWnta1swmu3uLmRUAf0zijCCJWPXYkXxqRgVP/nwPz63/gBNnO7p7vPfELHGjj+6hk9JiqseWMqOy/JKhk/KUnffFHXoxpcUFGj4RGWa9FgB37zCzh0kcpC0EVrr7NjNbEcx/AlhL4hTQJhKngX7lSssGq15mZl8Lfn8R+PvBe1syEL93Rz3jR73HyJLCK457d80rKymiQGe0iGQd894GVjNIPB73xsbGqNMQEckqZrbB3eOp03XES0QkT6kAiIjkKRUAEZE8pQIgIpKnVABERPKUCoCISJ5SARARyVMqACIieSqrLgQLWku838/FJwFHBjGdwaK8+kZ59Y3y6ptMzQsGlttV7l6ROjGrCsBAmFljuivhoqa8+kZ59Y3y6ptMzQuGJjcNAYmI5CkVABGRPJVPBeDJqBPogfLqG+XVN8qrbzI1LxiC3PLmGICIiFwqn74BiIhIEhUAEZE8lXMFwMwWmtlOM2sys0fSzDczezSYv8XM5mRIXreZ2XEz2xw8vjUMOa00sxYz29rD/Ki2VW95Dfu2Cl43ZmY/NbPtZrbNzL6eJmbYt1nIvKL4+yo1s383s7eCvP5bmpgotleYvCL5Gwteu9DMNpnZK2nmDe72cveceZC47eS7wNUkbkj/FjArJeZO4AeAAQuAX2ZIXrcBrwzz9voUMAfY2sP8Yd9WIfMa9m0VvG41MCf4vRzYlSF/X2HyiuLvy4DRwe/FwC+BBRmwvcLkFcnfWPDavwv8U7rXH+ztlWvfAOYDTe6+x93bgeeAxSkxi4FnPGEdMM7MqjMgr2Hn7m8AR68QEsW2CpNXJNz9oLtvDH5vA7YDNSlhw77NQuY17IJtcDJ4Whw8Us86iWJ7hckrEmZWC3we+NseQgZ1e+VaAagB9iU9b+by/whhYqLIC+DjwdfSH5jZ9UOcUxhRbKuwIt1WZjYNuIXEp8dkkW6zK+QFEWyzYDhjM9ACvO7uGbG9QuQF0fyN/S/gG0BnD/MHdXvlWgGwNNNSK3uYmMEW5jU3kujXcTPw18DLQ5xTGFFsqzAi3VZmNhr4HvA77n4idXaaRYZlm/WSVyTbzN0vuPtsoBaYb2Y3pIREsr1C5DXs28vMvgC0uPuGK4Wlmdbv7ZVrBaAZiCU9rwUO9CNm2PNy9xNdX0vdfS1QbGaThjiv3kSxrXoV5bYys2ISO9nvuvuLaUIi2Wa95RX135e7HwN+BixMmRXp31hPeUW0vW4F7jKzvSSGiT9jZv+YEjOo2yvXCsB6oM7MpptZCXA/sCYlZg3wQHA0fQFw3N0PRp2XmVWZmQW/zyfxb/PhEOfVmyi2Va+i2lbBa/4dsN3dv9ND2LBvszB5RbHNzKzCzMYFv48Ebgd2pIRFsb16zSuK7eXuf+Tute4+jcQ+4ifu/hspYYO6vYr6n27mcfcOM3sYeI3EmTcr3X2bma0I5j8BrCVxJL0JOA18JUPyug/4bTPrAM4A93tw2H+omNmzJM52mGRmzcCfkDggFtm2CpnXsG+rwK3AbwJvB+PHAP8ZmJqUWxTbLExeUWyzauAfzKyQxA50lbu/EvX/x5B5RfU3dpmh3F5qBSEikqdybQhIRERCUgEQEclTKgAiInlKBUBEJE+pAIiI5CkVABGRPKUCICKSp/4/ueQVlRWAr9cAAAAASUVORK5CYII=\n",
"text/plain": [
"