\n", "$$f(x) = \\frac 1{2m}\\sum_{i=1}^m (a_i^\\top x - b_j)^2 \n", "=\\frac1{2m}\\|Ax-b\\|^2$$\n", "
\n", "\n", "We can verify that $\\nabla f(x) = A^\\top(Ax-b)$ and\n", "$\\nabla^2 f(x) = A^\\top A.$\n", "\n", "Hence, the objective is $\\beta$-smooth with \n", "$\\beta=\\lambda_{\\mathrm{max}}(A^\\top A)$, and $\\alpha$-strongly convex with $\\alpha=\\lambda_{\\mathrm{min}}(A^\\top A)$." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def least_squares(A, b, x):\n", " \"\"\"Least squares objective.\"\"\"\n", " return (0.5/m) * np.linalg.norm(A.dot(x)-b)**2\n", "\n", "def least_squares_gradient(A, b, x):\n", " \"\"\"Gradient of least squares objective at x.\"\"\"\n", " return A.T.dot(A.dot(x)-b)/m" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Overdetermined case $m\\ge n$" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "m, n = 1000, 100\n", "A = np.random.normal(0, 1, (m, n))\n", "x_opt = np.random.normal(0, 1, n)\n", "noise = np.random.normal(0, 0.1, m)\n", "b = A.dot(x_opt) + noise\n", "objective = lambda x: least_squares(A, b, x)\n", "gradient = lambda x: least_squares_gradient(A, b, x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Convergence in objective" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAisAAAH/CAYAAACW6Z2MAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4VNXWBvB3ZdI7ISGhBwi9Q8CGgFLkKs0Odizg9YoX\nFTsWBBt8iIreq1wLWMAuiIAICFJEKaH3loQSCOmN9P39MZMzM6RnZnImM+/veeaZ2fucM2dNIMnK\nOXuvLUopEBERETkrD70DICIiIqoKkxUiIiJyakxWiIiIyKkxWSEiIiKnxmSFiIiInBqTFSIiInJq\nTFaIiIjIqTFZISIiIqfGZIWIiIicmqfeAZBReHi4io6O1jsMIiKierNjx44UpVREdfsxWXES0dHR\n2L59u95hEBER1RsRSajJfrwNRERERE6NyQoRERE5NSYrRERE5NSYrBAREZFTY7JCRERETo3Jih2I\nSD8ReV9E9otIrogkisi3ItJB79iIiIgaOk5dto9nAFwF4DsAewBEAXgUQJyIXKGU2qtncERERA0Z\nkxX7eBvAHUqpwrIOEfkGwF4AzwMYr1dgREREDR2TFTtQSv1ZQd9REdkPoIsOIREREbkMjllxEBER\nAJEAUvSOhYiIqCFzuSsrIhIE4BoA/QDEmp4bmzZ3VkodqsF7RAF4DsBIAM0BZALYCuAdpdTaGoZy\np+nY6bX6AERUL5RSyM7ORlZWFvLy8lBSUqJ3SEQNjsFggL+/P4KDgxEUFATj3+n253LJCoAhAH6q\n68Ei0gPA7zAnOFkAwmFMXG4QkeeVUm9W8x6dAHwA4C8An9Y1FiJyDKUUkpOTkZubi7CwMERFRcFg\nMDjsBy2RK1JKoaSkBDk5OUhJScHFixfRpEkTh3wfueptoGQAK2C8qjGxpgeJiB+An2FMVHYC6KaU\nCgHQCMAcAALgdREZXsV7RAFYDuPVmJuVUvxzjcjJZGdnIzc3F61bt0ZoaCg8PT2ZqBDVkojA09MT\noaGhaN26NXJzc5Gdne2Qc7nilZVlSqklZQ0Ria7FsZMAtAaQA2CUUuoMACilsgBMFZF2AMYCeAPA\nb5ceLCIhAFYCCAVwtVLqbB0/AxE5UFZWFsLCwmAwGPQOhcglGAwGhIWFISsrC8HBwXZ/f5e7smLj\nlYw7Tc+LyhKVS8w2PfcRkY6WG0TEF8AyAB0AjFRKHbAhDiJyoLy8PAQGBuodBpFLCQwMRF5enkPe\n2+WSlboyDczta2quqmS3v2C8vQMYx8aUHWsA8A2AKwDcqpTa4qg4a0IphW3xaVh3KFnPMIicVklJ\nCa+qENmZwWBw2EB1V7wNVFedYRyTAgD7K9pBKVUqIocB9Id1/ZQ5AEbDeGUlTETuuuS4L+0fbsV+\n3ZeED9Ydx94zmWjd2B8DO0TA4MF78USX4hgVIvty5PcUkxWzphavqxprUrbNcv9epudRpsel6i1Z\n2XsmE3vPGC/+JKTmYd2hZAztEllfpyciIrI73gYyC7B4fbGK/cpuyGk3vJVSg5VSUtmjsjcSkYki\nsl1Etl+4cMHG8I3uvjwanhZXUj7dfNIu70tERKQXJis6UkrNV0rFKqViIyIi7PKeUSG+uKGH+aLP\nn8dTcTApyy7vTUREpAcmK2a5Fq/9qtjP3/Sc48BYbDLhqjZW7c94dYWIGrjo6GiICNavX693KJVa\nsGABRASDBw/WOxSbiQhEBPHx8XqHAoDJiiXLcSrNqtivbFuSA2OxSa+WoejbupHWXrLrLFJyCnSM\niIiIqO6YrJgdAqBMr7tWtIOIeAAoq69ilzoqIjJKROZnZmZWv3MtTLgqWntdWFyKRX8n2vX9iYjq\nU7t27dCxY0f4+/tXvzO5HCYrJkqpbADbTc1hlex2GYAQ0+uaLmhY3XmXKaUmhoSEVL9zLYzoGoVm\nIb5a+4u/ElBQzMr/RNQwrV27FocOHUL//v31DoV0wGTF2iLT850i0rSC7VNNzzuUUofrKaY68TR4\n4J4ro7X2hewCLN/jtHeuiIiIKuWSyYqIhJc9YFyEsEyo5TbTbR1LHwFIABAE4BcR6WJ6vyARmQXg\nJtN+zzv6M9jDuH4t4edlrtL56eaTUEpVcQQRUdUsB7qmpaXhiSeeQJs2beDj44PmzZvjoYceQlJS\n1X8YrVu3DjfddBOioqLg7e2NqKgo3Hjjjfj9999rdN5L7d69G/fccw+io6Ph4+ODoKAgtG3bFiNG\njMA777xTaQn4ffv24f7770ebNm3g6+uL0NBQXHXVVfjwww9RVFRUq69LTdXmnF999RVEBFFRUVVW\nht2yZQtEBF5eXkhJSbHpnE5LKeVyDxjHntTkEV3BsT0BpFjskwmgxPS6FMCzdo51FID5MTExyhFe\n+GmPav3ML9rjr+MpDjkPUUNy4MABvUNosFq3bq0AqC+++EJ77e/vr3x8fLSfrdHR0SotLa3C4194\n4QVtPxFRoaGhSkS0vmeffbbK865bt86qf/ny5crLy0s73sfHRwUHB1v9rD948GC595s3b57y8PDQ\n9gkMDFQGg0FrDx48WOXm5tbqa/PZZ58pAGrQoEEVbq/tOXNycpS/v78CoFatWlXpeSdPnqwAqOuv\nv95un7Ns+8mTJ2v1Najt9xaA7aoGvytd8sqKLZRSuwF0A/AegBMAfACkAlgOYJhS6k07n88hY1bK\n3Hel9TTmjzdxGjMR2W7y5Mlo1KgR/vzzT+Tm5iInJwdLly5FaGgo4uPj8cYbb5Q75uuvv8Zrr70G\nAHj00UeRnJyM9PR0XLhwAZMnTwYAvPnmm/jyy5oX/X700UdRVFSEkSNH4vDhw8jPz0dmZiYyMzOx\nYcMGPPTQQ/D19bU6ZsmSJZg8eTICAgIwa9YsXLhwAdnZ2cjLy8Ovv/6K9u3bY/369Xj88cdt+ApZ\nq8s5AwICMHr0aADA4sWLK3zfkpISfPvttwCAO+64Q/fP6SiieFvAKcTGxqrt27dXv2MdTPhsK9Yd\nNlbIFQF+f3Iw2oQHVHMUkes6ePAgOnfuXPHGlc8C5/bWb0COEtUd+Idd/75CdHQ0EhISEBkZif37\n96Nx48ZW2+fMmYOpU6eiTZs2OHHihNavlEKHDh1w7NgxjBs3rsJfvnfccQcWL16M6OhoHD9+HB4e\n5r+ny867bt06rY5JcnIyIiONy4mcO3dOe12VkpIStGvXDgkJCfj1119x3XXXldvn+PHj6NGjBwoL\nC5GYmIimTSsawljeggULMGHCBAwaNMjqdpUt51y2bBlGjx6NkJAQnDt3rlzitWbNGgwbNgz+/v5I\nTk5GQECAXT5n2To/J0+eRHR0dI0+P1DN91YFRGSHUiq2uv24NpAbeOjqtlqyohTwyaYTmDm2u85R\nETmpc3uBhE16R+H0Jk6cWC5RAYCxY8di6tSpOHnyJHJzc7Vfnrt27cKxY8cAANOmTavwPV9++WUs\nXrwY8fHx2Lp1Ky6//PIqYwgMDISHhwdKS0uRlJRUo2Rl/fr1SEhIQLdu3Sr8BQ4Yp0lffvnl+P33\n37F+/XqMHz++2vd11DlHjBiBsLAwpKWlYcWKFbjpppusjitL+kaPHq19rfX6nI7EZMUNXNGuMbo0\nDcYBU9n973ecxpPDOqJRgLfOkRFRQ9WvX78K+5s3b669zsjI0H6BxsXFAQAiIiLQtWuFpazQsWNH\nNG/eHGfOnEFcXFy1yYq/vz8GDRqEdevW4brrrsPkyZMxcuRIdO/eHQaDocJj/vzzTwDA0aNHERUV\nVel7l9W+OnXqVJUx1IQt5/Ty8sItt9yC+fPnY9GiRVbJSkFBAX788UcA5W8B6fE5HYnJihsQEUwc\n2BZTvtkFAMgvKsWXfyVg8pD2OkdG5ISiXOiqowM/S1BQUIX9lrcpLGealC3WapnMVKRFixY4c+YM\narq468cff4yRI0fi4MGDePHFF/Hiiy8iMDAQAwcOxPjx4zFu3Dh4epp/1ZXNVCooKMD58+erff/K\nZhLVhq3nvOOOOzB//nwsX74c2dnZ2td+5cqVyMjIQFhYGEaMGGHXczobJis6E5FRAEbFxMQ49Dw3\n9GiKt349hKTMfADAwi0JeGhgW/h6VfzXB5HbsvMYD7KWn59v1/dr27Yt9uzZg19++QUrV67Exo0b\ncfDgQaxYsQIrVqzA3Llz8ccffyAwMBAAUFpaCgAYM2YMlixZYtdYKmPrOQcOHIgWLVrg9OnT+PHH\nH3HvvfcCMN8CuuWWW+Dl5WXXczobzgbSmaNnA5XxMnjgPosicSk5Bfh519nKDyAisqOyleWru91w\n+vRpq/1rwtPTE2PHjsVHH32EAwcOICkpCbNnz4avry/i4uIwffp0bd+ycS2JifW3BImt5xQRjBs3\nDoA5QcnJycGyZcsAlL8FZI9zOhsmK25kXP9WCPA2X0n5eNMJFokjonrRp08fAEBubi62bt1a4T5H\njhzBmTNnrPavi6ioKEydOhVTpkwBAPzxxx/atiuuuAIAsGfPHu1cjmaPc5YlJGvXrkVycjKWLl2K\nixcvokWLFhg4cKBDzulMmKy4kRA/L9zer5XWPnI+B+uP1Oy+MBGRLXr16oWy292vv/56hfu88sor\nAIzTlGuyBlBRUVGVf3D5+fkBMI7bKDNkyBC0bNkSJSUleOqpp6p8//T09GpjqAl7nLN3797o1KkT\niouL8d1332HRIuPqMOPGjdOmGdv7nM6EyYqbmXBVNDws/l/P/+NE5TsTEdmJiGDmzJkAgKVLl2Ly\n5MlITU0FAKSmpuKxxx7TbnHMnDnTqsZKZfbv349u3brhnXfewZEjR7TEpaioCD/88APefvttALCa\nuuvl5YX3338fIoLFixdj7Nix2LVrl7a9sLAQf/31F5588km0aWNdVLOu7HXOsqsrH330EVavXm3V\n56hzOo2alLnlw/GPvn37qvry6KI4qxL8uxLT6+3cRM6A5fbrrrKy95ZQRal2y3L7Hh4eqlGjRlbl\n4GtTbn/nzp1WZfV9fHxUWFiY1fvFxsaqzMzMcu/36aefKm9vb20/Pz8/FRYWZlWK3vgrsuaqK7dv\n6zmPHTtmtV+nTp2qjamu56zq37AqLLfvokRklIjML5vrXh8mDWxr1f5ow/F6OzcRubeZM2di7dq1\nGDNmDMLDw5GTk4PGjRtj9OjRWLNmTYVl+ivTuXNnfP/993j44YfRu3dvhIaGIisrCyEhIRgwYADm\nzZuHzZs3Izg4uNyxEyZMwOHDhzFlyhR07doVBoMBWVlZaNy4MQYPHozp06fj8OHD9vzoNp+zXbt2\nVrfHKruqYs9zOguW23cSjiy3X5G7P/kbG48aV+dkCX5yN7UtCU5ENeOocvu8suKmHh7UTnutFPC/\njRy7QkREzonJipu6sl1jdGtuvjT6/Y7TuJBdUMURRERE+mCy4qZEBJMGmq+uFBaXYsGfJ3WMiIiI\nqGJMVtzYP7pFoVWYv9b+YksCcgqKdYyIiIioPCYrbszT4IGHrjbPr8/KL8aivxN0jIiIiKg8Jis6\n02PqsqVbY1uicYC31v5440nkF5XoEgsREVFFmKzoTNXTQoaV8fUy4P4B5qsrydkF+CHutC6xEBER\nVYTJCuGuy1sjyMdTa3/0xwkUl5TqGBEREZEZkxVCiJ8X7r6itdZOTMvD8r1JOkZERERkxmSFAAD3\nD2gDH0/zf4f/rDuO0lJWNyYiIv0xWSEAQHigD8b3b6W1D5/PxtpDyTpGREREZMRkhTQPDWwLTw/R\n2u+vOwauHUVERHpjskKa5qF+uLF3c629+1QG/jyeqmNERERETFboEg8PbgcxX1zBvN+P6hcMERER\nmKzoTu+icJdqFxGI67s31dp/nUjD1pNpOkZERETujsmKzvQuCleRydfGWLV5dYWIiPTEZIXK6RQV\njOFdIrX2xqMpiEtM1zEiIqKqrV+/HiKC6OhovUOpsfvuuw8igldeeUXvUJwekxWq0GND2lu1563l\n1RUi0seCBQvwyiuvYNeuXXqHQjphskIV6tY8BNd2aqK11x2+gD2nM3SMiIjc1YIFCzB9+vQqkxV/\nf3907NgR7dq1q8fIqL4wWaFKlR+7ckynSIiIqta/f38cOnQIa9eu1TsUcgAmK1Sp3q0a4er24Vp7\n9YHz2H/WOWYtERGR+2CyQlW6dOzKexy7QkQAfvzxR4wYMQIRERHw8fFBixYtcOeddyIuLq7cvvHx\n8RARiKmI0+bNmzFy5EhERETA398fvXr1wvvvv4/SUuvV3hcsWAARwR9//AEAmDBhgvY+lw6mrWqA\n7eDBgyEiWLBgAbKysvD000+jXbt28PPzQ9u2bfHSSy8hPz9f23/t2rW47rrrEB4ejoCAAAwcOBAb\nN26s8OtQUlKClStXYtKkSejbty8iIyPh7e2NZs2a4cYbb8Tvv/9e2y8tVYDJClWpX3QYrmzXWGuv\n2s+rK0TurLS0FPfeey9uvvlmrFq1Cunp6fD398eZM2ewaNEi9OvXD//9738rPf6HH37A4MGDsXz5\nchQXF6OoqAi7d+/G5MmTcfPNN6O4uFjb18/PD5GRkfDy8gIABAcHIzIyUntERETUKvb09HT0798f\ns2fPxvnz51FSUoKTJ09ixowZuO222wAA//nPfzBs2DCsWbMGRUVFyMvLw8aNGzF06FBs3ry53Hse\nPHgQ119/PebPn4+4uDjk5+fD29sbSUlJWLJkCYYMGYI33nijVnFSeUxWqFpThnawar+zhldXiNzV\nrFmz8Pnnn0NEMGPGDKSnpyM9PR2nT5/GrbfeitLSUjz66KPYsGFDhcc/8MADGDp0KE6cOIH09HRk\nZGRg1qxZ8PDwwJIlSzBr1ixt39tvvx3nzp3DlVdeCQB49913ce7cOe2xbdu2WsU+ffp0AMDGjRuR\nk5ODnJwc/O9//4OnpyeWLVuGGTNmYMqUKXj22WeRmpqKzMxMxMfH44orrkBhYSEef/zxcu/p7e2N\n+++/H6tWrUJmZiYyMzORk5OD8+fPY8aMGTAYDHjhhRfw999/1ypWsuapdwDk/Pq3CcNVMY2x+Zhx\nnaDVB85j35lMdGvuPIXsiOzlra1v4VDaIb3DsItOYZ3wTP9n7PZ+OTk52lWCZ555BtOmTdO2NW/e\nHIsXL0ZSUhI2bdqEadOmVZiwtGjRAkuWLIGPjw8AICAgAE899RRyc3Mxffp0vPXWW5gyZQr8/f3t\nFneZ3Nxc/PLLL4iJMU4e8Pb2xoMPPogtW7bg008/xUsvvYQJEybg9ddf145p3bo1Fi9ejDZt2mDb\ntm1ITExEq1bmFeo7dOiATz75pNy5mjRpgmnTpkEphZdeegkffvghLrvsMrt/JnfBZEVnIjIKwKiy\nbx5n9fjQDth8bIvWfmfNEXx8bz8dIyJyjENph7D9/Ha9w3BKq1evRlZWFry9vfH000+X224wGPDi\niy/iuuuuw8aNG3Hu3DlERUVZ7fPkk09qiYqlJ554Am+99RaysrLw22+/YezYsXaP/9Zbb0VFP2uH\nDh2KTz/9FADw3HPPldveunVrxMTE4OjRo9i3b59VslKdUaNG4aWXXqrwFhLVHG8D6cwZy+1XJDY6\nzGpm0JqDyay7QuRmygbP9uzZE40aNapwn4EDB8JgMFjtb2nw4MEVHhccHIzevXtXepw9dO/evcL+\nJk2MNaV8fX0rTGYAIDLSWNU7Pb18Ne+LFy9i7ty5GDx4MJo0aQIvLy9tEHDZZzp79qw9PoLb4pUV\nqrEpQztg49EUrf3OmqP49D5eXSHX0imsk94h2I29P8uFCxcAGG/5VMbX1xfh4eE4f/68tr+lqo4t\n21bRcfbQtGnTCvvLkqvIyEhtxlJl+xQVFVn1JyUlYfDgwThy5IjWFxAQgEaNGsHDwwMlJSVISUlB\nbm6uPT6C22KyQjXWt3UjDOwQgQ1HjD9Ifj+UjF2nMtCrZajOkRHZjz3HeLgqy2m+7m7KlCk4cuQI\n2rZti9mzZ+Oaa66xuup0/PjxSq/WUM3xNhDVyuNDreuuzPntsE6REFF9K5sqnJiYWOk++fn5SE1N\ntdrfUlW3Q8q21XZKsl4KCwuxdOlSAMBXX32Fm266qdztsfPnz+sRmsthskK10rtVI6s1gzYeTcHf\nJ1J1jIiI6kufPn0AAEePHsWZM2cq3GfDhg1arZSy/S2VFXi7VHZ2tjZW5dLjPDyMv6qUUnUL3EFS\nUlJQUFAAANrYlEutWbOmPkNyWUxWqNaeGGZdd2XOb0ec7ocIEdnf8OHDERwcjKKiIsyePbvc9pKS\nEsyYMQMAcPXVV5ebCQQAc+bMQWFhYbn+d955B/n5+QgODsbw4cOttgUHBwMAMjKca1B/UFCQNsZl\n79695bYnJSVh3rx59R2WS2KyQrXWrXkIru9u/iG0NT4NGywG3hKRawoICMDzzz8PAHjvvffw2muv\nIScnBwBw5swZjB8/Hps2bYKHhwdmzpxZ4XskJibixhtvRHx8PAAgLy8Pc+bMwSuvvALAWL/l0hor\nXbt2BWAs8Z+Z6TwVtIOCgnD55ZcDAO6//35tVejS0lKsXbsWgwYN4h9ydsJkherk8aEdYDlofs5v\nh/lNSeQGpk6dinvuuQdKKUybNg2hoaEICwtDy5Yt8d1338HDwwPz5s3DwIEDKzz+k08+wW+//YY2\nbdqgUaNGCAkJwdSpU1FaWooxY8ZUWL/l7rvvhre3NzZt2oTw8HA0b94c0dHRGDBggKM/brXmzp0L\nPz8/7N27F71790ZgYCACAwMxdOhQpKamVlgwjmqPyQrVSfvIINzYyzwFcc/pTKzaz4FkRK7OYDBg\n4cKF+P777zF8+HCEhoYiJycHTZs2xfjx47F161Y88sgjlR5/8803Y926dbjhhhtgMBjg6emJnj17\nYt68efjxxx/h6Vl+kmqnTp2wevVqjBgxAiEhITh37hwSEhJw+vRpR37UGrnsssuwZcsWjB07Fo0a\nNUJRURGaNGmCSZMmYdeuXejZs6feIboE4V/DziE2NlZt396wqmYmpubh2jnrUVxq/D/UITIQK/89\nEAaPiusUEDmLgwcPonPnznqH4Tbi4+PRpk0bAM43SJbsq7bfWyKyQykVW91+vLJCddaqsT9u69dS\nax85n4Nlu1mlkYiI7IvJCtlk8rUx8PY0/zd6e/URFBaX6hgRERG5GiYrZJOmIX645/LWWjsxLQ/f\nbKu8YBQREVFtMVkhmz1yTQwCfcyD4t5dewy5BcU6RkRERK6EyQrZLCzAGxMHttXaKTkF+GzzSR0j\nIiJnEh0dDaUUB9dSnTFZ0ZmIjBKR+c5U6KguHhjQBuGB3lr7oz9OID23fJVKIiKi2mKyojOl1DKl\n1MSQkBC9Q7FJgI8nJl9rXuQwu6AY/1l/TMeIiIjIVTBZIbsZ378VWob5ae2FWxJwNuOijhEREZEr\nYLJCduPt6YEnh3XU2oXFpZi7+oiOERFVjuMniOzLkd9TTFbIrkb3bIbOTYO19vdxp3HoXJaOERGV\nZzAYUFJSoncYRC6lpKQEBoPBIe/NZIXsysND8Ow/OmltpYA3Vx7SMSKi8vz9/bXVgonIPnJycsqt\nmG0vTFbI7ga2D8eAmHCtvf7wBWw+lqJjRETWgoODkZaWxqsrRHZSUlKCtLQ0BAcHV79zHTBZIbsT\nsb66AgCvrziI0lKOESDnEBQUhICAACQkJCAjIwPFxcUcw0JUS0opFBcXIyMjAwkJCQgICEBQUJBD\nzlV+LW4iO+jWPAQ39m6On3aeAQDsP5uFn3efxdjezXWOjMiYUDdp0gTZ2dnIyspCcnIyr7IQ1YHB\nYIC/vz/Cw8MRFBQEEXHIeZiskMM8ObwDlu9JQmGJcWHD2asOY0S3KPh6OWYAFlFtiAiCg4Mddtma\niOyHt4HIYVo08sd9V0Vr7TMZF7Hwz3jd4iEiooaJyQo51L8GxyDEz0trv7/uGNJYhp+IiGqByQo5\nVIi/FyZfG6O1s/OL8e4aFoojIqKaY7JCDnfPFdGIbmyee//l34k4lswaF0REVDNMVsjhvD098Ow/\nOmvtklKFN1Yc1DEiIiJqSJis2IGIBIrIdBFZISIXRESJyLN6x+VMrusaif5twrT22kPJLBRHREQ1\nwmTFPsIBvASgO4CdOsfilEQEL97Qxapv5vKDKGGhOCIiqgaTFftIAtBcKdUSwES9g3FW3VuE4KY+\n5qJwB5Oy8P2OUzpGREREDQGTFTtQShUopc7qHUdD8NR1HeHrZf5vN3vVEWTnF+kYEREROTsmK1Sv\nmob4YeLAdlo7JacAH6w7rmNERETk7FwuWRGRIBEZLSIzRGSliKSYBrwqEelU/TsAIhIlIu+KyHER\nyReR8yKyTESGODp+d/DwoLaICvbV2p9uOon4lFwdIyIiImfmcskKgCEAlgKYBmAEgMa1OVhEegDY\nB+AxAG0BFMA4gHYkgNWc5WM7f29Pq1WZC0tK8RqnMhMRUSVcMVkBgGQAKwBMRy0GvIqIH4CfYUxw\ndgLoppQKAdAIwBwAAuB1ERlu94jdzJhezdCnVajWXn3gPDYd5VRmIiIqzxWTlWVKqUil1A1KqVcA\nrK7FsZMAtAaQA2CUUmo/ACilspRSUwEsgTFhecPOMbsdEcHLo7pa9b36y34Um1ZoJiIiKuNyyYpS\nqsSGw+80PS9SSp2pYPts03MfEelow3kIQM+Wobi5TwutfeR8DhZtTdQxIiIickYul6zUlYgEAehr\naq6qZLe/AGSaXnOwrR08M6IjArwNWnvOb0e4KjMREVnx1DsAJ9IZxls8ALC/oh2UUqUichhAfwBW\n5VhF5FEAoaYHAFwjImVf33lKqUzUh5XPAuf21sup7KEJgN8aXcSp9DxjRwmQ8R8fhIUH6hoXERFV\nIKo78I836/20TFbMmlq8rqrAW9m2ppf0T4VxvEuZ4aYHAHwJ8xUZxzq3F0jYVC+nspfmAJpbXuPL\nNT2IiIjAZMVSgMXri1XsZ7oEAKs//ZVS0bU9oYhMhGm2UqtWrWp7OBERkVtgsqIjpdR8APMBIDY2\n1j4r+kV1t8vb6OHQuSxkXDSX3m8XEYiIQB8dIyIiIis6/Y5hsmJmeePBD0B2Jfv5m55zHBtOHelw\nL9FefFPD5SNnAAAgAElEQVRycc/cDSg0TV+OyPLB7w8NQpCvl86RERGRnjgbyMxynEqzKvYr25bk\nwFjcUnR4AB68uo3WvpBdgPfWHtUxIiIicgZMVswOASi7FdO1oh1ExANAWX2VA/Y4qYiMEpH5mZn1\nM/7W2f3rmhirdYM+2xyPI+cru8hFRETugMmKiVIqG8B2U3NYJbtdBiDE9Hqtnc67TCk1MSQkpPqd\n3UCAjydeuKGz1i4uVXhxyT4oZZ8hPURE1PAwWbG2yPR8p4hcOjUZME5PBoAdSqnD9RST2xnZoymu\nbGdef/Lvk2lYuquq2eREROTKXDJZEZHwsgeMixCWCbXcZrqtY+kjAAkAggD8IiJdTO8XJCKzANxk\n2u95R38GdyYieHVMV3gZROt7bcVBZOUXVXEUERG5KpdMVgBcsHjEWfRvuWSbVXETpdRFAGMApALo\nA2C/iGQCyADwFIxjWp5TSv3m6A/g7mKaBOGBAW219oXsAsxdfUTHiIiISC+umqzUmVJqN4BuAN4D\ncAKAD4zJy3IAw5RSdp0bzAG2lXtsSAyahZgH2y78Mx4HzmbpGBEREelBOHDROcTGxqrt27dXv6Ob\nWbk3Cf/8ynxxrG/rRvhu0hXw8JAqjiIiooZARHYopWKr249XVsipjegWhYEdIrT2joR0fLv9lI4R\nERFRfWOyQk5NRPDq6K7w9jT/V31j5SGk5hToGBUREdUnJivk9KLDA/CvwTFaO/NiEV5fcUjHiIiI\nqD4xWdEZB9jWzMOD26JtuHlh7B/iTmPL8VQdIyIiovrCZEVnrGBbMz6eBswY282qb9qSvSgsLtUp\nIiIiqi9MVqjBuComHGN7mdeYPH4hF/M3HNcxIiIiqg9MVqhBeeGGLgjy9dTa7/1+DPEpuTpGRERE\njsZkhRqUiCAfPDOik9YuLC7FC0v2cqFDIiIXxmSFGpw7+rdCn1ahWnvzsVT8tPOMjhEREZEjMVnR\nGWcD1Z6Hh+CNm3rA06KK7czlB5GWW6hjVERE5ChMVnTG2UB10zEqCJMGmRc6TMstxGvLD+oYERER\nOQqTFWqwJl/bHtGN/bX2D3Gn8eexFB0jIiIiR2CyQg2Wr5cBr93Y3arv+Z/2Ir+oRKeIiIjIEZis\nUIN2VUw4burTXGvHp+bh3bVHdYyIiIjsjckKNXjTbuiCsABvrT1/wwnsP8sBy0REroLJCjV4YQHe\neHlUF61dUqrwzA97UFzCUvxERK6AyYrOOHXZPkb3bIZrOkZo7X1nsvDJppM6RkRERPbCZEVnnLps\nHyKCmTd2R4C3Qet7e/URluInInIBTFbIZTQP9cPTFqX4C4pL8dyPLMVPRNTQMVkhl3LX5a2tSvFv\nOZGKr7ed0jEiIiKyFZMVcikGD8FbN/eAt8H8X/v15QeRlHlRx6iIiMgWTFbI5bSPDMLka2O0dnZB\nMV74aR9vBxERNVBMVsglPTy4Hbo0Ddbavx9KxtJdZ3WMiIiI6orJCrkkL4MHZt3SAwaLlZlfWbYf\nF7ILdIyKiIjqgskKuaxuzUPwsMXKzBl5RXj55306RkRERHXBZEVnLArnWJOvbY+YJoFae8Xec1ix\nN0nHiIiIqLaYrOiMReEcy9fLgFm39ICY7wbhxSX7kJrD20FERA0FkxVyeX1aNcKDA9po7dTcQrz0\n834dIyIiotpgskJu4cnhHdE2PEBrL9+TxNtBREQNBJMVcgu+XgbMvpW3g4iIGiImK+Q2+rYOK387\naClvBxEROTsmK+RWyt0O2puEX/awWBwRkTNjskJupbLbQSwWR0TkvJiskNvp2zoMD11tLhaXnleE\n53/ay7WDiIicFJMVcktPDOtgVSxu9YHz+GnnGR0jIiKiyjBZIbfk62XAnFt7Wq0d9PLP+5GUeVHH\nqIiIqCJMVnTGcvv66dkyFI8Mbqe1s/OL8cwPvB1ERORsmKzojOX29TX52vbo3DRYa284cgGLt57S\nMSIiIroUkxVya96eHphza094Gcy3g2YuP4CE1FwdoyIiIktMVsjtdWkWjClDO2jtvMISPPntbpSU\n8nYQEZEzYLJCBGDSwLbo0ypUa29PSMf/Np7QMSIiIirDZIUIgKfBA3Nu6wU/L4PW9/ZvR3AwKUvH\nqIiICGCyQqRpEx6A52/orLULS0rx+De7UFBcomNURETEZIXIwl2XtcLADhFa+9C5bMxdfVTHiIiI\niMkKkQURwaybeyDY11Pr+2jDcWw9maZjVERE7o3JCtElokJ8MfPG7lpbKeDxb3YhO79Ix6iIiNwX\nkxWiCozu2QxjejXT2mcyLmL6sgM6RkRE5L6YrBBV4tXR3dA0xFdrf7/jNH7dl6RjRERE7onJClEl\nQvy9MOfWnlZ9z/24F8lZ+TpFRETknpisEFXhyphwPDCgjdZOzyvC1O/3oJTVbYmI6g2TFaJqPHVd\nR3SMDNLaG45cwMIt8brFQ0TkbpisEFXD18uAd8b1grfB/O3yxspDOHwuW8eoiIjcB5MVohro3DQY\nT4/oqLULi0vx7693srotEVE9YLKiMxEZJSLzMzMz9Q6FqnH/VW0wICZcax86l43Zvx7WMSIiIvfA\nZEVnSqllSqmJISEheodC1fDwEPzfrT0R6u+l9X286SQ2HU3RMSoiItfHZIWoFqJCfPGGRXVbAHji\n211Iyy3UKSIiItfHZIWolv7RvSlui22htZOzC/D093ugFKczExE5ApMVojp4eVRXRDf219prDp7H\nV38n6hgREZHrYrJCVAcBPp54d1xveHqI1jdz+QEcS+Z0ZiIie2OyQlRHPVuG4onhHbR2flEpJi/e\nxenMRER2xmSFyAaTBrbD5W3DtPbBpCy8tZLTmYmI7InJCpENDB6Cubf3QoifeTrzp5tPYt3hZB2j\nIiJyLUxWiGzUNMQPb91sPZ156re7kZzN1ZmJiOyByQqRHYzo1hTj+7fS2qm5hXjy291cnZmIyA6Y\nrBDZyUsjuyCmSaDW3ng0BR9vOqFjREREroHJCpGd+HkbMG98b3h7mr+tZv16GHtOZ+gYFRFRw8dk\nhciOOjcNxgvXd9baxaUKkxfvRHZ+kY5RERE1bExW7EREfETkTRE5IyIXRWSriFynd1xU/+65ojWG\ndm6itRNS8/Dikn0sx09EVEdMVuxnAYAnASwG8G8ARQCWi8ggPYOi+icimHVLT0QG+2h9S3adxQ9x\nZ3SMioio4WKyYgci0h/AOADTlFJTlVLzAQwBEA9gtp6xkT7CArzx7rjesKjGjxeX7MPxCzn6BUVE\n1EDVOVkRkcdMj2b2DKiBugVAKYD5ZR1KqXwAnwDoJyLR+oRFerq8bWM8em17rX2xqASTF+1kOX4i\nolqy5crKXAD/ByDFTrE0ZL0BHFdKpV/Sv9ViO7mhx66NQf9oczn+A0lZeGPFIR0jIiJqeGxJVlIA\nZCulCu0VjD2ISJCIjBaRGSKyUkRSRESZHp1q+B5RIvKuiBwXkXwROS8iy0RkSCWHNAWQVEF/WR+v\nPrkpT4MH3hlnXY5/wZ/xWLX/nI5RERE1LLYkK3EAQkQkwl7B2MkQAEsBTAMwAkDj2hwsIj0A7APw\nGIC2AAoAhAMYCWC1iDxbwWF+pv0ulW+xndxUs1A//N+tPa36nvpuN06n5+kUERFRw2JLsvKe6fgX\n7RSLPSUDWAFgOoCJNT1IRPwA/AxjgrMTQDelVAiARgDmABAAr4vI8EsOvQjAB+X5WmwnNzasSyQm\nXBWttbPyizF58U4UlZTqFxQRUQNR52RFKbUSwFQAD4vIFyLSs7pj6skypVSkUuoGpdQrAFbX4thJ\nAFoDyAEwSim1HwCUUllKqakAlsCYsLxxyXFJMN4KulRZ39laxEAu6tl/dEK35sFae2diBub8dkTH\niIiIGgZbZgOdAPAogGIAdwCIE5EcEUkQkROVPI7bK/DKKKVsmWpxp+l5kVKqoqIYZdOQ+4hIR4v+\nXQDaiUijS/a/zGI7uTkfTwPeH98HgT6eWt+HfxzH+sPJOkZFROT8bLkNFG16+MJ4tUEA+ANoabGt\noodTEpEgAH1NzVWV7PYXgEzTa8vBtt/D+LXUbjmJiA+ACQB2KKVO2jdaaqiiwwPw+k3drfqe+HY3\nzmXmV3IEERF5Vr9Lpa6xWxTOoTOMCRcA7K9oB6VUqYgcBtAfQBeL/r9F5DsAM0UkHMBRAPcAaANg\nmEOjpgZndM9m+PNYCr7edgoAkJZbiMe+3olFD14GTwPrNBIRXarOyYpS6g97BuIELMecVDXGpGzb\npWNU7gHwKoC7AITBOKNolFJqnd0iJJfx8qiu2JmYgcPnswEAW0+m4d21R/Hk8I7VHElE5H74Z5xZ\ngMXrqmbvlM03DbTsVErlK6WeVko1U0r5KqViTYOQKyUiE0Vku4hsv3DhQh3DpobIz9uAD+7sDT8v\ng9b3/rpj2HiU/w+IiC5lt2RFjDqJyNWmRycRkeqPdF9KqfmmpCY2IsLZytWQo8U0CcLMsd20tlLA\nlK93ITmL41eIiCzZnKyISIyILIBx4Ol+AOtNj/0AMkXkMxGJsfU89SDX4nVVRdz8Tc9ckY5sdnPf\nFri1bwutnWoav1LM+itERBqbkhURGQ1j8bS7YbwtIpc8AmEcy7FTREbaFqrDWY5Tqao8ftm2isrr\nE9Xaq2O6oUOk+a7iXyeM41eIiMjIljor7QB8DeNYjxMwFlRrD+NVCT/T64cBHDft863pGGd1CIAy\nve5a0Q4i4gGgbATkAXucVERGicj8zMzM6ncml+TnbcAHd/QpN35lwxGOXyEiAmy7svI0jDVW1gHo\noZT6n1LquFKqwPQ4rpSaD6AngD9gLEf/lO0hO4ZSKhvAdlOzsunGlwEIMb1ea6fzLlNKTQwJCal+\nZ3JZ7SMrGL/yzS7WXyEigm3JyjAYr0RMUkpVOnvGtG0SjLeFLl1Tx9ksMj3fKSIVlc+fanreoZQ6\nXE8xkZu4uW8L3B7bUmun5RbiscUcv0JEZEuy0hRAplLqWHU7KqWOAMhAxevn2J2IhJc9YFyEsEyo\n5TbTbR1LHwFIABAE4BcR6WJ6vyARmQXgJtN+zzv6M5B7mj6mKzpFBWntrfFp+D+uH0REbs6WZCUP\ngL+IeFW3o4h4wzhupb5WH75g8Yiz6N9yybZWlgeZrgKNAZAKoA+A/SKSCWOi9RSMV5KeU0r95ugP\nQO7J18uAD+7sgwBv8/iVD/84jrUHz+sYFRGRvmxJVvYC8AJwbw32vde07x4bzlcvlFK7AXQD8B6M\nA4d9YExelgMYppR6057n4wBbulS7iMAK1w86lZZXyRFERK7NlmTlCxjHobwnIg9WVABORHxF5DEY\nf/ErAAttOF+NKaWkho/4So4/p5T6t1KqnakabROl1EillF0G1V5yLg6wpXLG9GqOOy8zX/jLvFiE\nRxfFoaDYlkXFiYgaJluSlU8BrIZxRtBHAE6LyNciMkdEPhCRZQASAcyF8erEagALbIyXyG28OLIL\nujUP1tq7T2fi9eUHdYyIiEgfdU5WlFIKwFgA82G8atIUwG0ApsBYX+UGAOGmbR8CuNF0DBHVgK+X\nAf+5oy+CfM3rjS7ckoBlu6taZ5OIyPXYVMFWKXVRKfUwgHYAngDwJYDfTI8vTX1tlVKPVDW9mYgq\n1qqxP+bc2tOq79kf9uBYMld7ICL3IbzYoS8RGQVgVExMzENHj7LEOlXsteUH8L+NJ7V2h8hALPnX\nVfD39qziKCIi5yYiO5RSsdXtZ0u5/TgR2SEibev6HsQBtlQzT4/ohH7R5pJBR87n4Pkf94J/bBCR\nO7DlNlAXAO2VUifsFQwRVczL4IH37+iD8EBvrW/JrrP46u9EHaMiIqoftiQrZ2CcukxE9SAy2Bfv\nje8ND4vvuleXHcCe0xn6BUVEVA9sSVZWwVjB9jJ7BUNEVbuyXTieHN5RaxeWlOKfX8YhPbdQx6iI\niBzLlmRlJoyVXT80rcFDRPXgn4PaYUinJlr7TMZFPP7tLpSWcvwKEbmmOs8GEpGBADoCmAOgCMDn\nMK+9U2mZTaXUhjqd0EVxNhDVRUZeIUbO24TT6eaKAE8M64DHhrTXMSoiotqp6WwgW5KVUhgLvgHG\nsSs1eSOllOJcywrExsaq7du36x0GNSB7T2fi5g//RGFxKQBABFg4oT8GdojQOTIioppx+NRlGEvp\nlz0SLmlX9jhlw/mIyEL3FiF4dXRXra0U8O+vd+JMBusvEpFrqfNVDqVUtB3jIKI6GNe/FeIS0/Ht\n9tMAgPS8Ijzy5Q58+/AV8PE06BwdEZF92FRun4j09+qYbujS1HrBw+nLDugYERGRfdlSwTZdRFJZ\nwZZIX75eBnx4V18EWyx4uOjvRHy3nXddicg12HJlxRuAgRVsifTXqrE/5t7ey6pv2pJ92H82U6eI\niIjsx9YBtt7V7kVVEpFRIjI/M5O/VMg2QzpH4rFrY7R2QXEpHv5yBzLzinSMiojIdrYkKz8D8BGR\nYfYKxh1xIUOyp38P7YCr25trNJ5Ku4gp3+xkwTgiatBsSVZeBxAP4H8i0tk+4RCRLQwegvfG9Ubz\nUD+tb93hC3jvdxYcJKKGy5YCbWMA/BfASwB2ishK1KyC7ec2nJOIqtEowBv/vasPbvlwi1Yw7t21\nR9GjRQiu7RSpc3RERLVnjwq2ZWvA1uiNlFIs/lABVrAle/tmWyKe+WGv1g729cSyyQPQunGAjlER\nEZnVtIKtLVdWNqCGCQoR1b/b+7XCrlOZWLw1EQCQlV+MSV/swE+PXAU/b/7NQEQNhy0VbAfbMQ4i\ncoBXRnfBgaQs7D6VAQA4dC4bz/24B3Nv7wURqeZoIiLnwAq2RC7Mx9OA/97ZB40DzFUGluw6iwV/\nxusXFBFRLdU4WRGRx0TkgUq2BYpIcEXbLPaZKyKf1DZAIrJNs1A/zLujNzwsLqTMXH4Qf59I1S8o\nIqJaqM2VlXcAvFrJtqMA0qo5fhyA+2pxPrfAonBUH65sF47n/mGuMFBSqvCvRXFIyuQKzUTk/Gp7\nG6iqm9y8AV4HLApH9eXBq9tgZI+mWjslpxD//DIOBcWVVhogInIKHLNC5CZEBLNu6YGOkUFa365T\nGXjlZ67QTETOjckKkRvx9/bER3f3RZDFCs2LtyZq05uJiJwRkxUiNxMdHoB3x/WC5czll5fuR1xi\nun5BERFVgckKkRu6tlMkHh/aQWsXlpTi4S92IDkrX8eoiIgqxmSFyE09ek0MhnUxrxWUnF2AR76K\n09YTIiJyFkxWiNyUh4fg7dt6om2Eea2g7QnpePWX/TpGRURUXm3L7YeJyO8V9QNAJdus9iEi5xHk\n64X5d8di7AebkVNQDAD48q9EdG8egtv7tdI5OiIio9omK94ABlexvaptABc+JHI6MU0CMff2Xnjo\nc/Oq3y8u2Y/2kUHo06qRjpERERnVJllZ6LAoiEhXw7pE4t9D2uPdtUcBGAfc/vPLHVj26AA0CfbV\nOToicnc1TlaUUhMcGQgR6evfQ9pj/9ksrDl4HgBwPqsA//wqDosfuhzenhzeRkT64U8gnXFtIHIW\nHh6Cubf3RDuLAbc7EtLx8s8ccEtE+mKyojOuDUTOJMjXC/PviUWQj3WF26/+TtAxKiJyd0xWiMhK\nuwjjgFtLLy/dj23x1S2sTkTkGExWiKicoV0i8cQwc4Xb4lKFf365A2czLuoYFRG5KyYrRFShR6+J\nwYiuUVo7JacQk77YgfyiEh2jIiJ3xGSFiCrk4SGYc1tPdIwM0vr2nsnEcz/uhVIsmURE9YfJChFV\nKsDHE/Pv6YsQPy+t76edZ/DxxpM6RkVE7obJChFVqXXjAHxwRx94iLnvjZUH8ceRC/oFRURuhckK\nEVVrQPtwPH99Z61dqoDJi+JwMiVXx6iIyF0wWSGiGnlgQBvc3KeF1s7KL8aDC7chO79Ix6iIyB0w\nWSGiGhERvHZjN/RqGar1Hb+Qiylf70JJKQfcEpHjMFkhohrz9TLgo7v7okmQj9a39lAy5vx2WMeo\niMjVMVkholqJDPbFR3f3tVrc8D/rj2PprjM6RkVErozJChHVWu9WjfDGjd2t+p7+fg/2nM7QKSIi\ncmVMVoioTm7u2wITB7bV2gXFpZj4+Q4kZ+XrGBURuSImK0RUZ8+M6IRBHSK09rmsfExkSX4isjMm\nKzoTkVEiMj8zM1PvUIhqzeAheG98b7SNCND6dp3KwPM/sSQ/EdkPkxWdKaWWKaUmhoSE6B0KUZ2E\n+Hnh43tiEeTrqfX9GHcG8zec0DEqInIlTFaIyGZtIwLLleR/89dD+P3Qef2CIiKXwWSFiOxiYIcI\nTLuhi9ZWCnhs8S4cOZ+tY1RE5AqYrBCR3Uy4Khq3x7bU2jkFxXhw4Xak5xbqGBURNXRMVojIbkQE\nM8Z2Q//oMK0vMS0P//xqBwqLS3WMjIgaMiYrRGRX3p4e+O9dfdA81E/r++tEGl7+eT9nCBFRnTBZ\nISK7axzog4/vjYW/t0HrW7w1EQv/jNcvKCJqsJisEJFDdG4ajHfH9YZYzBB69ZcD2HDkgn5BEVGD\nxGSFiBxmWJdIPH1dJ61dqoB/LYrDseQcHaMiooaGyQoROdTDg9ripj7NtXZ2fjEeWLiNM4SIqMaY\nrBCRQ4kI3ripO/q2bqT1JaRyhhAR1RyTFSJyOB9PAz66u2+5GUIvLd3HGUJEVC0mK0RUL8IDffDJ\nfbEIsJgh9PW2U/hk00kdoyKihoDJih2ISKCITBeRFSJyQUSUiDyrd1xEzqZTVDDeG289Q+i1FQex\n9iDXECKiyjFZsY9wAC8B6A5gp86xEDm1IZ0j8cL1nbW2cQ2hnTiYlKVjVETkzJis2EcSgOZKqZYA\nJuodDJGze2BAG4zrZ15DKLewBA8s2Ibk7HwdoyIiZ8VkxQ6UUgVKqbN6x0HUUIgIXh3TDVe0baz1\nnc3Mx0Of70B+UYmOkRGRM2KyQkS6KFtDqE14gNa3+1QGnvx2N0pLOUOIiMycNlkRkSARGS0iM0Rk\npYikmAauKhHpVP07ACISJSLvishxEckXkfMiskxEhjg6fiKqXqi/Nz65NxYhfl5a3/K9SXh79REd\noyIiZ+O0yQqAIQCWApgGYASAxlXvbk1EegDYB+AxAG0BFMA4EHYkgNUVzdYRI98aPpz5a0fUYLSN\nCMR/7+oDTw/zFKH31x3DDztO6xgVETkTZ/+FmwxgBYDpqMXAVRHxA/AzjAnOTgDdlFIhABoBmANA\nALwuIsMvOfQqABdr+BhY509FRFaubBeO12/sbtX37I978PeJVJ0iIiJn4ql3AFVYppRaUtYQkeha\nHDsJQGsAOQBGKaXOAIBSKgvAVBFpB2AsgDcA/GZx3BEAE2p4jkO1iIeIqnFbv5Y4kZKLD/84DgAo\nKlGY9OUO/PTIVVbjWojI/ThtsqKUsmVKwJ2m50VlicolZsOYrPQRkY5KqcOmcyYDWGDDeYnIBk9f\n1xHxKbn4df85AEBGXhHuX7ANPz1yJUL9vXWOjoj04uy3gWpNRIIA9DU1V1Wy218AMk2vOdiWyEl4\neAjm3t4LPVqEaH0nU3Ix8YsdKCjmlGYid+VyyQqAzjCOSQGA/RXtoJQqBXDY1Oxij5OKyKMiMg3A\no6aua0RkmukRUtWxRGTm523Ax/fEolmIr9a39WQanvthLxc9JHJTrpisNLV4XVWhtrJtTavYpzam\nApgB4ElTe7ipPQPGgb1EVENNgn3xyX39EOhjvlP9484zeG/tMR2jIiK9uGKyYjkS72IV++WZngPt\ncVKlVLRSSip5xFd0jIhMFJHtIrL9woUL9giDyGV0bhqM9+/oDYPFlOa5a47gp52c0kzkblwxWWkw\nlFLzlVKxSqnYiIgIvcMhcjqDOzbBK6O7WvU98/1eTmkmcjOumKzkWrz2q2I/f9NzjgNjISIb3X15\nazx0dRutXVhSiolf7MDxC/zWJXIXrpisWI5TaVbFfmXbkhwYCxHZwXP/6IzrukZq7cyLRZjw2Tak\n5BToGBUR1RdXTFYOASibMtC1oh1MpfI7mpoH6iOoyojIKBGZn5mZWf3ORG7Kw0Pwzu290bNlqNaX\nmJaHBxdu5yrNRG7A5ZIVpVQ2gO2m5rBKdrsMQNl04rUOD6oKSqllSqmJISGc3UxUlbIpzS3DzHd3\nd53KwJSvd3GVZiIX53LJiski0/OdIlLR1OSppucdZdVricj5RQT54LP7+iPY1zyl+df95/D6ioM6\nRkVEjubUyYqIhJc9YF2rJNRyWwUrIH8EIAFAEIBfRKSL6f2CRGQWgJtM+z3v6M9ARPYV0yQQ8++J\nhZfBPKX5400nsWDzSR2jIiJHcupkBcAFi0ecRf+WS7a1sjxIKXURwBgAqQD6ANgvIpkAMgA8BeOY\nlueUUpaLGBJRA3F528aYfUtPq77pvxzAb6Y1hYjItTh7slJnSqndALoBeA/ACQA+MCYvywEMU0q9\nqWN4Gg6wJaqbsb2bY+rwDlpbKeCxr3diZ2K6jlERkSMI19pwDrGxsWr79u3V70hEGqUUnv9pLxZv\nPaX1hQV446dHrkTrxgFVHElEzkBEdiilYqvbz2WvrBCR6xMRzBjTDYM6mCtAp+UW4t5PtyKVNViI\nXAaTFSJq0DwNHvjgzj7o2ixY64tPzcMDC7fjYiFrsBC5AiYrRNTgBfp44rP7+qF5qHUNlsmLd6K4\npFTHyIjIHpis6IwDbInso0mwLxbe3w8hfl5a35qD5/Hyz/vBsXlEDRuTFZ2xgi2R/cQ0CcLH98bC\n29P8o+2rvxPxn/XHdYyKiGzFZIWIXEq/6DC8c3sviLlmHGavOozvd5zWLygisgmTFSJyOdd3b4pp\nN3Sx6nvmhz1YfzhZp4iIyBZMVojIJT0woA0eurqN1i4pVXjkqzjsPpWhY1REVBdMVojIZT33j84Y\n06uZ1s4rLMH9C7YhPiVXx6iIqLaYrOiMs4GIHMfDQzD7lp4YEBOu9aXmFuKeT7fiQjaLxhE1FExW\ndGZw1xIAACAASURBVMbZQESO5e3pgf/e1QddmpqLxiWm5eG+z7YiO79Ix8iIqKaYrBCRywvy9cKC\n+/uhZZi5aNz+s1mY9MUOFBSzyi2Rs2OyQkRuoUmQLz6//zI0DvDW+v48noonvt2N0lIWjSNyZkxW\niMhttAkPwIIJ/RHgbdD6lu9JwvRlrHJL5MyYrBCRW+neIgQf3t0XXgZz1biFWxLw3tpjOkZFRFVh\nskJEbufq9hGYc5t1ldu5a47gi78S9AuKiCrFZIWI3NLons3w8kjrKrcvLd2HX/ac1SkiIqoMkxWd\nsc4KkX7uu6oNHrs2RmsrBTz+zS5sOHJBx6iI6FJMVnTGOitE+np8WAfceVkrrV1UojDpix2IS0zX\nMSoissRkhYjcmojg1THdcEOPplrfxaISTPhsGw6fy9YxMiIqw2SFiNyewUPw9m09cXV7c1n+zItF\nuPuTv5GYmqdjZEQEMFkhIgIA+Hga8OFdfdG7VajWl5xdgLs++RvJWfk6RkZETFaIiEwCfDzx2X39\n0DEySOtLTMvD3Z9sRUZeoY6REbk3JitERBZC/b3xxQP90SrMX+s7fD4b9366FTkFxTpGRuS+mKwQ\nEV2iSbAvvnzgMjQJ8tH6dp/OxAMLtiG/iAsfEtU3Jis6Y50VIufUqrE/vnzwMoT6e2l9f59Mw8Nf\n7kBhcamOkRG5HyYrOmOdFSLn1SEyCJ/f3x+BPp5a3/rDFzDlm50oLmHCQlRfmKwQEVWhR4tQfHpf\nP/h6mX9crth7Dk//sAelpVypmag+MFkhIqpG/zZh+OjuWKuVmn+MO4NpS/dBKSYsRI7GZIWIqAYG\ndYjAvPF9YPAwJyyL/k7Eq78cYMJC5GBMVoiIamhEtyi8fVtPiDlfwWeb4zF71WEmLEQOxGSFiKgW\nxvRqjrdu6mHV95/1x/He2mM6RUTk+pisEBHV0m39WuLVMV2t+uauOYIP1jFhIXIEJitERHVwzxXR\neOH6zlZ9s1cdxvwNx3WKiMh1MVkhIqqjhwa2xdMjOlr1vb7iED7ZdFKniIhcE5MVIiIbPDI4Bk8M\n62DVN+OXA1iwmQkLkb0wWSEistFjQ9pj8rUxVn2vLDuAhX/G6xMQkYthsqIzrg1E5BqeGNYB/xzc\nzqrv5Z/3M2EhsgMmKzrj2kBErkFE8PR1HfHwoPIJy+db4nWJichVMFkhIrITEfn/9u48Torq3P/4\n55kZhnWYQRh2WV0QBDUSBaMEoyZxwZjFmwU1xF/EJOZezabG5Ga5JlezGOMWI5obkxijiSYmGJcE\nTBQDKIuIsigRQUBkZ1hmn3l+f1Q1U9P09DT0zPQy3/frVa/qqjqn+/RDM/101alzuO6DBycs3/rz\nCn6pPiwih03JiohIG2opYfnu7JXc+9zaDLVKJLcpWRERaWMtJSzff2KVBo4TOQxKVkRE2kEsYYm/\nS+hHT7/GbXPWZKhVIrlJyYqISDsxM77y/mP50tnNx2G5dc7r/OCp1Zr8UCRFSlZERNrZ1Wcfzdc+\n0Hyk27v/+Qbfnb2SxkYlLCKtUbIiItIBrjrzKG44b0yzfffPX8cNf3qFBiUsIkkpWRER6SAzp4zm\nxrjZmh9atIEv/34ZdQ2NGWqVSPZTsiIi0oEunTyCH198AgXWtO/Py97m8w8spbquIXMNE8liSlZE\nRDrYx04eyu2fPImiSMYyZ9UWZvzyRfZW12WwZSLZScmKiEgGXDBhMPdcejLFRU1/hheu3cn0+15g\n5/7aDLZMJPsoWRERyZCzjhvArz5zCr26Fh3Yt3xjBf9xzwI2V1RlsGUi2UXJiohIBk0e3ZcHrziV\nPj26HNj37637+OjP5vPvrXsz2DKR7KFkRUQkwyYMLeMPn5vMwN7dDux7u6Kaj/18AUvW78pgy0Sy\ng5KVDDOzaWY2q6KiItNNEZEMOqp/CY98fjKjynse2Le7so7p9y1k7qotGWyZSOYpWckwd5/t7jNL\nS0sz3RQRybChfXrwyOdO44Qjyw7sq65rZOZvlvD7RRsy2DKRzFKyIiKSRY7oWczvrjiV9x5TfmBf\nQ6Nz7aPL+cnfX9d8QtIpKVkREckyPYqLuO/TE/nISUOa7b997hq+9shyjXYrnY6SFRGRLNSlsIAf\nX3wCX5g6utn+R5Zs5PL7F2nwOOlUlKyIiGSpggLj2g+O4XsXHd9seP55a7bzsbsXsHFXZeYaJ9KB\nlKyIiGS5SyYN597LJtK9S+GBfa9t2ctFd83npbd0a7PkPyUrIiI54KzjBvDwlZMoL+l6YN/2fTV8\nYtZCHl/+dgZbJtL+lKyIiOSICUPLeOyq9zBmYMmBfTX1jXzxwZe4fe4a3SkkeUvJiohIDhlS1p0/\nfG4yU48tb7b/J39/nS8++BKVtfUZaplI+1GyIiKSY0q6deG+yyYy47QRzfb/9ZXNfOzuBWzarUkQ\nJb8oWRERyUFFhQV858JxfO+i4ymK3Cq0cvMeLrzjeV58c2cGWyfStpSsiIjksEsmDeeBz57KET2L\nD+zbsb+WT927kPv/9ab6sUheULIiIpLjJo3qy5/jOt7WNzrfmb2SLz28jKrahgy2TiR9SlZERPLA\nkUf04NHPn8Z54wc22//Ysrf5yN3zeWuHBpCT3KVkpQ2Y2bvN7E4zW2Fm+83sLTP7vZkdk+m2iUjn\n0bNrEXd96l3ccN6YZiPertq8h/PvmMdTr76TucaJpEHJStu4DvgoMBe4GpgFTAGWmtn4TDZMRDoX\nM2PmlNE88P+a92PZW13P5x5Ywo2Pr6S2XhMhSm4xdb5Kn5mdBix299rIvqOBV4A/ufsnW3uOiRMn\n+uLFi9uxlSLS2WzaXcUXfruUlzfsbrb/xCPLuPNTJzG0T48MtUwkYGZL3H1ia+V0ZqUNuPv8aKIS\n7lsDrADGZqZVItLZDSnrzh+unMxn3jOi2f5lG3Zz3m3zeOKVzZlpmMghUrLSTszMgAHA9ky3RUQ6\nr+KiAr49bRx3T38XJV2LDuzfU13PF367lOsfXa5RbyXrZW2yYmYlZnahmd1oZk+a2XYz83AZk+Jz\nDDSz28zsDTOrNrMtZjbbzM5q7/YD04EhwEMd8FoiIkmdO34Qj//X6Rw/pHez/Q8t2sC0O57n1U0V\nGWqZSOuyts+KmV0E/KmFw8e5++pW6k8AngH6hrv2AL0IEjQHbnD3m+PqGNCV1NS6e8JeamEy9QKw\nEjjd3Vsd5EB9VkSkI9TWN/Kjp1dz77w3m+3vUmhcc/YxXDllFEWFWfs7VvJMvvRZ2Qo8AXwXmJlq\nJTPrDvyFIFF5CTje3UuBPsAtgAH/a2bvj6v6HqAqxWVKC689EPgrUAF8NJVERUSkoxQXFfCN88fy\nq8tPoV+vpt9mdQ3Oj55+jYvvWcCb2/dnsIUiB8vmMyuF0S96MxsBxH4KJD2zYmbXALcC+4Ax7r4p\n7vifgIuApe5+cmR/f+C8FJv4lLs3G7TAzEqBfwLDgDPcfWWKz6UzKyLS4bbvq+HaR5bzzOqtzfZ3\n71LI9eeO4dJJwymIDtgi0sZSPbOStclKvENMVhYBE4FZ7n5lguOnAf8KN8e4+2tt0L5uwN+Ak4Gz\n3X3BodRXsiIimeDuPLRoAzc+vpLKuGH5TxlxBDd/dDyjyntlqHWS7/LlMtAhM7MSgoQB4OkWii0k\nuEwDkHZnWzMrBB4GJgMXH2qiIiKSKWbGJ08ZxlNXT2Hi8D7Njr24bifn3jaPe559g/oGDSQnmZN3\nyQpwHEGfFAjGOTlI2DE2djalLcZBuQW4EHgSOMLMLokubfD8IiLtaljfHjx85WS+fu4YuhY1fTXU\n1Ddy05Or+fDP5vPKRt0xJJmRj8nKoMjjt5OUix0blKRMqk4M19OA3yRYEjKzmWa22MwWb9u2rQ2a\nISJy+AoLjCvfO5onrz6Dd49ofpbllU0VfOiu5/nOX1awt7ouQy2Uziofk5WekcdVScrFpiBN+2Ks\nu091d2tpSVJvlrtPdPeJ5eXl6TZDRKRNjCrvxcMzJ/PdC8fRo7jwwP5Gh/vnr+OsW57l8eVvkyt9\nHiX35WOyIiIiaSooMD592gj+9qUpnH1c/2bHtu6t4YsPvsQnZi1k1eY9GWqhdCb5mKxEBwjonqRc\nbAavfe3YFhGRnDa0Tw/uvWwi91x6MoNKuzU79sKbOzn/9nn892Ovsmt/bQvPIJK+fExWov1UBicp\nFzuW0Zm8zGyamc2qqFDHNRHJTmbGB8YNZM6X38sVZ4ykKDL2SqPDbxauZ+qP/8m9z62luk7jYErb\ny8dkZTXBcPoA4xIVMLMC4NhwM+WB29qDu89295mlpaWZbIaISKt6di3iG+eP5alrzuCMo/s1O1ZR\nVcf3n1jFWbc8y2MvbaKxUf1ZpO3kXbLi7nuB2Ohq57RQ7FQglh3MbfdGiYjkkaP6l/Dry0/h3ssm\nMrxvj2bHNu2u4pqHl3HBHc/zzOot6oQrbSLvkpXQg+F6upklujX5q+F6SVuMXisi0tmYGeeMHcDf\nvjSFb55/HKXduzQ7vnLzHi6/fzEf/tl8nl+zXUmLpCWrkxUz6xdbCCYhjCmLHgsv60TdA6wHSoDH\nzWxs+HwlZvZD4CNhuRva+z2IiOSzrkWFfPaMUTz3tTOZOWUUxXEzNi/bsJtLfvECH79nIc+9vk1J\nixyWrJ4byMxSbdxId18XV/cEgks8fcNdewjGVCkg6NNyg7vf3EZNPWxmNg2YdtRRR12xZs2aTDdH\nRCQtG3ZWcvvcNTy6dCOJuq1MGFrKVWcexTnHDdAkiZIfExmmk6yE9QcCXwcuAIYQJCwvAre6e1b1\nVdFEhiKST9Zu28dtc9fwl5ffJtHXzNH9e/HZM0byoROH0K1L4cEFpFPIi2SlM1GyIiL56LV39nLn\nP/4djnh78PF+vYq5bPIIpp86jL69unZ8AyWjlKzkGCUrIpLP1m7bx8+ffYM/Lt1EfYLrQ8VFBVww\nYRCXThrOiUeWYaZLRJ2BkpUco2RFRDqDTbur+MW8N3l40Vvsr008gNz4IaVcMmkY508YTK+uRR3c\nQulISlZyhDrYikhntKe6jodefItf/msdmyuqE5bpUVzI+eMH8fF3H8nJw/vobEseUrKSY3RmRUQ6\no7qGRp5e8Q4PLFzPwrU7Wyw3sl9PPnTiYC46cQgj+vXswBZKe1KykmOUrIhIZ/f6lr38duF6Hl26\niX019S2WO+HIMj50wmDOHT+QQaXJ5quVbKdkJccoWRERCVTW1vPkK+/w+8UbeOHNls+2AJw0rIxz\njx/IB8cNYljc0P+S/ZSs5BglKyIiB1u3fT+PLNnIn1/exIadVUnLHjOgF+8bM4Czj+vPScP6UKhB\n57KekpUco2RFRKRl7s7St3bzl2WbeHz5Znbsr01avqxHF04/qh9Tji7n9KP7MbhMl4uykZKVHKNk\nRUQkNfUNjSxat4snX93MU6++w9a9Na3WGV3ek8mj+zJpVF9OHdmX8hINQJcNlKzkCN26LCJy+Bob\nnZc27GLOqq3MXbWF17fsS6ne6PKeTBx+BCcP78PJI/owql9P3RqdAUpWcozOrIiIpG/DzkrmrtrC\nvDXbWbB2B5UtDDwXr6xHFyYMLeOEoaVMGFrGhKGlDOjdrZ1bK0pWcoySFRGRtlVb38jSt3Yxb802\nFryxg+UbKxIO9d+Sfr26MnZwb8YO6s3Ywb05dkAJI/v1pLiooB1b3bkoWckxSlZERNpXZW09S9bv\nYsEbO1i8fhcvb9hNTX3jIT1HUYExsl9PjhlQwujynozu34tR/XoxsrynpgY4DKkmK4qsiIh0Cj2K\nizjj6HLOOLocCM68rNy8h8XrdvLyxgqWb9zN+h2VSZ+jvtFZs3Ufa7Ye3DemX6+ujOjbg2F9ezCi\nb0+OPKI7Q/v0YGif7vQv6aZbqdOgZCXP/ODFH7B65+pMN0NEJLf0gVF9YFijs7+mPlhqG6israe6\nroFULkLsB1Y4rNgObG9+rMCMLkUFdC0soLgoXMLHXQ6sjYIs7+Q75ogxXHfKdR3+ukpW8szqnatZ\nvEWXk0RE2kQXKOzSNk/VAFQClQ7UhYukRL2EMszMppnZrIqKikw3RUREJCvpzEqGuftsYPbEiROv\naIvnG3PEmLZ4GhERSUNDo1NT30htfQM19Y0HltpwX22Dk403uBQUBJeiCi24dGUFRkH4uMCMTVv6\nUFFVR2n3NjrdlCIlK3kmE9cSRUTk0DQ0Ojv217B1Tw1b9lSzZU8N2/cFy7a9wXrH/lp27q9ld2X2\nXC/anKHXVbIiIiLSwQoLjP4l3ehf0o3jh5QmLVvf0Miuyjp2V9ayq7KOXZW17K6spaKqLrLUs7e6\njr3VwXpPVT37aurZX1ufUufgQ9GtS8f3IFGyIiIiksWKCgsoL+l6WPMZNTY6lXUN7KsOEpfKmoZg\nXVvP/poGqmobqKproLK2garaeqrrG6mqbaC6LthfU99IdbiuCdfFhUpWREREpI0UFBi9uhbl/IB1\nuhtIREREspqSFREREclqSlZEREQkqylZyTANCiciIpKckpUMc/fZ7j6ztDT5rWsiIiKdlZIVERER\nyWpKVkRERCSrKVkRERGRrKZkRURERLKakhURERHJakpWREREJKspWREREZGspmRFREREspqSFRER\nEclqSlYyTMPti4iIJKdkJcM03L6IiEhySlZEREQkq5m7Z7oNApjZNmB9Gz5lP2B7Gz5fZ6U4pk8x\nTJ9imD7FMH3tEcPh7l7eWiElK3nKzBa7+8RMtyPXKY7pUwzTpximTzFMXyZjqMtAIiIiktWUrIiI\niEhWU7KSv2ZlugF5QnFMn2KYPsUwfYph+jIWQ/VZERERkaymMysiIiKS1ZSsiIiISFZTsiIiIiJZ\nTclKHjGzgWZ2m5m9YWbVZrbFzGab2VmZbls2MLNhZnZNGJO3zKzGzPaa2ctmdrOZDWqlfrGZXWtm\ny8xsn5ntNrMFZjbTzKyj3ke2MbNeZrbBzDxcZiQpqxhGmNmxZnaHmb1mZvvNrMLMVpnZ/5nZe1uo\noxiGzKzAzD5jZnPMbJuZ1YXxeMHMvmFmJUnq5n0czazEzC40sxvN7Ekz2x75fzomhfppxcjMLjaz\nZ8xsh5lVhp/t7yX7d2mRu2vJgwWYQDCyoIdLBdAQPm4Ers90GzMcnyPDOHhcjOoj2zuBM1uo3xtY\nHCm7H6iJbM8GijL9PjMU25/GxXWGYphS3P4r7v3vBaoi2/cphknj1wOYG/fZ2x33/3wdMKqzxhG4\nKC4+0WVMK3XTihHBnUOxsnXh5zu2/QYw+JDeS6aDqSX9Bege/qd0YCkwLtzfG/hxJGF5f6bbmsEY\njQhj8DjwMaBPuL8YOBdYS1MCMzBB/YfD4zuACwADCoFPR75gvp/p95mBuL6LIOFbGPlDNKOFsoph\nUyyuDN9vA3AzMCxybCBwKXC5Ypg0hjdF/rZdD5SG+4uBTwC7wuPPdNY4EiQrW4C/At8BriD1ZOWw\nYwR8PvL5/irQNdx/WuS76vlDei+ZDqaW9BfgGpp+mQ1JcPxP4fElmW5rBmNUCpyQ5PiYyH/Ab8cd\nOynyH/zCBHWvDo9VAv0z/V47MKYFwKIwWYnGaEaCsoph03sdQfAr1YErDqGeYtj8/a4P3+8vWjg+\nIxKvPp0xjkBh3PaIVJKVdGIEdCVIkBz4SQvPHTv7NS3V96I+K/lherh+0N03JTj+o3D9LjM7toPa\nlFXcvcLdX05yfDXB2QGAk+MOfypcv+buf0lQfRbBGZnuwEfSbWsO+U9gInC3u7/USlnFsMnVBJcw\nXnD3ew+hnmLY3IBw3dJnb0nkcY/I404TR3dvOMyq6cTobKA/QTJyS4I2vQTMCTenxx9viZKVHBd2\nVIp9uT7dQrGFBB8sAHW2bdmOcF0Yt//McP23RJXcvQqYF26+rx3alXXMbAhwI8EvqG+mUEUxbBL7\nIvjdIdZTDJtbF65PauF47O/ilrgfcYpj69KJUazuqy38eIam76qU46tkJfcdR3AtEWBFogLu3gi8\nFm6O7YhG5RozKwLeE26+GtlvBJeIoIX4hlaG684S3zuAEuCr7l6RrKBi2MTMRhP86gR4ycwmhXen\n7TCzKjNbbWY/MrP+cfUUw4PFzkp9xsyuN7NSOHAHy8eBWwl+3X81VkFxbF0bxCi2nUrdcjPrl0q7\nlKzkvujttm8nKRc7lvT23E7sKoKOjY3AryL7ewM9w8eKL2Bm04APA/909wdSqKIYNjk68ngq8DxB\n58UuBF+sxxJ8uS4zs3GRsorhwX4K3EXwY+0mYLeZ7Sboe/YQsJqgv0X0M6o4ti7dGA2KO56sbqL6\nCSlZyX09I4+rkpSrDNe92rEtOcnMJhD8sQO4091XRg4rvhFm1hO4k+BWxKtSrKYYNimLPP428Dow\nyd17E7zv84CtBH/AHw3P+IFieJCwP8Y1wFcIOnlD0JE+9r1WApTHVVMcW5dujGL1U6mbqH5CSlak\nUwsHgnuMoKPYEuC6zLYo6/0PMAy4NS6pk9RE/+Y68GF3fwGCy7Xu/iRweXj8WHK8g2d7MrOBwL8I\nOnH+FjiB4IvvaODrwCjg/8zsphafRHKGkpXctz/yuHuScrHe8PvasS05xcyOIOhANhJYA5zv7tVx\nxRTfkJmdSHAnywaCpCVVimGT6Ht7yt1fiy/g7n8lOOMCTR3iFcOD/Ro4heDW5Rnuvtzd97v7v939\nZoKxbACujVxSUxxbl26MYvVTqZuofkJKVnJf9Nrf4CTlYsc2t2NbckbYGe9p4HjgLeBsd9+SoOge\nmv7zdfb43kZwp9Q3CPrh9YoukXJdw32xP0iKYZPo/9eDEpUEx44M14phhJmNBc4JN29NVMbdf0Nw\nh18BMC3crTi2Lt0YvR13PFndRPUTUrKS+1YTnE4GGJeogJkVEJxShqZe2J1W2O/iCYIxQt4hSFTe\nSlTWg1GMVoWbCeMbivWAz+f4Dg/XvyYYgDB+ifl5uL0SFMM4Kwk6cafKQTFM4LjI4zeTlFsbrkeA\n4piKNohRbDuVutvcfXsq7VKykuPcfS/B/A3Q9Esj3qkEHc8gmEuj0zKz7gRzWpxG8KvrbHdf00q1\nf4TrhPE1s27AGeFmp45vEooh4O6VwIJwM9kAjbFj6yL7FMMm0YRvWJJysQQ7mkwrjq1LJ0axuuOs\n5clh399C3RYpWckPD4br6S18OGLjDCxJdI28szCzYuCPBIMW7SaYKynZWAAxscG7xpjZBQmOX0GQ\nDFYRTG2Ql9x9hLtbS0uk6GfCfSMi+xTDJr8O1x9MNKK0mZ0PHBNuPhE5pBg2iY5GfUWiAuEt9rHx\nal6IHFIcW5dOjOYS3NFWQHCnVjNmdgLBKLcQdIxOTabmLNDSdgvNJzJcAowN95cAP6RpjofOPJFh\nIfBIGIc9BLeLHkr92KRe24HzIs95GcFteHkx8VmaMU51IsNOHUOgiGDALA/Xp4T7C4APElyadIIz\nMKYYthjHp2maLO8mwjlqCO4ImkFw5tQJLhMVd9Y4Av0iS3TOn0lxxwraKkY0n8jwKzRNZDiZpklj\nNZFhZ1wIbtvbHvkgVoQfFCeclTTTbcxwfKZEYlMVfiG0tCxKUD/RdOnVke28mFI+zRi3lqwohk2x\nGEXQsTv23mOdGmPbK0g8Kali2BSLQQT9IzwujtHtd4CTOnMc4+KRbBnRljEimD8oVraW4FJcbPsN\nYPChvA9dBsoTHkzSdzxwO0Hm2pXgl8VfgXM8uJWvM4t+1rsRTILW0hI/kBTuvoegn8v1BKegHagh\nmHfpSoKRMuvj60kTxbCJu68FxgPfJ/jCLSKIx1KCMUJO8QTzqiiGTdx9M8H8P9cAzwE7CW6J3UMQ\nxxuB8Z5gkk3FsXXpxsjdZwIfJ+jDso/gM76a4DN/orsnG+H2IBZmQCIiIiJZSWdWREREJKspWRER\nEZGspmRFREREspqSFREREclqSlZEREQkqylZERERkaymZEVERESympIVERERyWpKVkRERCSrFWW6\nASIirTGzIuAS4BME82D1JZir5B2C6SXmAc+4+4uROicCFwHr3P3+jm6ziLQdDbcvIlnNzMqBJ4CJ\nkd3VBPOU9AYs3Ffh7mWRejOAXwLPuvvUDmmsiLQLXQYSkWz3AEGishe4Fhjk7t3DxKQUOAf4GbA7\nc00Ukfaky0AikrXMbAzw/nDzcnd/JHrc3fcCc4A5ZvaVjm6fiHQMnVkRkWw2PvL48WQF3b069tjM\nnOASEMB7zczjlqnx9c3sdDN7yMw2mlmNme0wszlm9kkzswTlp4bPtS7cnmZm/zCzXWa2z8wWmNmn\nDuM9i0gcnVkRkVwxBHgjxbJbgO4EfVrqgJ1xx2ujG2b2A4JLTDF7gD7AWeFyoZlNd/fGRC9mZtcA\ntwIOVISvPQmYZGanufsXU2y3iCSgMysiks2WRB7fFXa2bZW7DwSuDjfnu/vAuGV+rKyZXU2QqGwB\nZgJl7l4K9CS4++idcH1dCy9XDvwQ+DVBf5o+QD/glvD4VTrDIpIe3Q0kIlnNzH4FXBZu1hLcprwQ\nWESQiGxrod4MWrkbyMzKgA0EZ5knufvLCcpMBv5F0IF3oLvXhvunAv8Ii/0d+IDH/UE1s/uBTwP/\nBo6JPy4iqdGZFRHJdlcAPyFIVIoJLst8A3gM2GpmL5rZ9ET9SlLwUaAXMCdRogLg7guANwkuC53c\nwvPc1EIi8v1wfRTB+DAichiUrIhIVnP3Wnf/CnAk8Dngd8Aagv4hAO8muL35YTM71L9pp4Xr95nZ\nOy0t4WsTWUfVEZx5SdT2NcDmcPNdh9g2EQmpg62I5AR33wrcEy6Y2QBgGvAtgiTiYoKk4bZDeNpB\n4bpHuLQmUZntsUtDLdgUvk5K/W1E5GA6syIiOcndt7j7fQRnLLaEuy8/xKeJ/Q28zd0theX+tmq/\niKROyYqI5DR33w78Odw85hCrx5KcYWk0oZ+ZFSc5PjhcJ+wILCKtU7IiIvlgf7iOXo6JjYmSRSTr\nwAAAAclJREFUrOPtgnA91cy6H+ZrdwEmJzpgZkfRlKwsPcznF+n0lKyISNYys5FmNrqVMj0IZlcG\nWBY5tCdcl9GyPxAkOn0I+r4ke50+SQ5/vYW7kb4erte4+7IEx0UkBUpWRCSbjQNeM7M/mtl/mFms\nQyxm1tPMphGMuzIy3B3tXLsiXI81s1MTPbm776ApobjezO41swOXksysh5mdaWazgPmJngOoJLid\n+hdm1j+sVxaOihvrQ/OdFN+viCSgQeFEJGuZ2QeAp+J2VxFc7imN7GsAvuXu/xtX/1lgSri5k2Dm\nZoBPuPvCSLlvAv9D0yWj/eFrlEX2rXP3kZE6UwkGhVsP/JSm4fZ3h22L/Ri8S8Pti6RHyYqIZLXw\nTMc04HTgeII5gooJEo+1wHPAfe6+IkHdvgRJyLmRegBnuvs/48qOB74InAkMBQoJOsW+CswFfufu\nGyPlpxImK+4+IjzL82XgJIJ+LMuBO939t2kHQaSTU7IiInIY4pOVzLZGJL+pz4qIiIhkNSUrIiIi\nktWUrIiIiEhWU7IiIiIiWU0dbEVERCSr6cyKiIiIZDUlKyIiIpLVlKyIiIhIVlOyIiIiIllNyYqI\niIhktf8PbLzfCdS7r3QAAAAASUVORK5CYII=\n", "text/plain": [ "\n", "$$\\frac1{2m}\\|Ax-b\\|^2 + \\frac{\\alpha}2\\|x\\|^2$$\n", "
\n", "\n", "Note: With this modification the objective is $\\alpha$-strongly convex again.\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def least_squares_l2(A, b, x, alpha=0.1):\n", " return least_squares(A, b, x) + (alpha/2) * x.dot(x)\n", "\n", "def least_squares_l2_gradient(A, b, x, alpha=0.1):\n", " return least_squares_gradient(A, b, x) + alpha * x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's create a least squares instance." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "m, n = 100, 1000\n", "A = np.random.normal(0, 1, (m, n))\n", "b = A.dot(np.random.normal(0, 1, n))\n", "objective = lambda x: least_squares_l2(A, b, x)\n", "gradient = lambda x: least_squares_l2_gradient(A, b, x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that we can find the optimal solution to the optimization problem in closed form without even running gradient descent by computing $x_{\\mathrm{opt}}=(A^\\top+\\alpha I)^{-1}A^\\top b.$ Please verify that this point is indeed optimal." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": true }, "outputs": [], "source": [ "x_opt = np.linalg.inv(A.T.dot(A) + 0.1*np.eye(1000)).dot(A.T).dot(b)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's how gradient descent fares." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nUTdgwIDEciQScT/5yU9Sjnn//fcT2++//35XUFDgJLkBAwYkPktyM2bMcE1NTYnjfv/737uhQ4e6\nwsJCJ8lVVVW5oUOHJl5Tp05N7Pv00087SW706NFtaj7mmGOcJPfDH/7QTZw40Uly5eXlifNKctOn\nT3fOOffjH//YmZmLRCKuqqoqsb2oqMg999xzbc49f/78lH/vqqqqXHl5ecq66667rt22PP/8850k\n953vfKfHP4ee/h5Lmuu68W9koHs6nHPWzdfSDo5f7Zz7inNuvHOuxDlX65w7zTkXyMGjydJ7OmJ0\ndADoB2688Ubdc889MjPNmjVLmzZt0qZNm/Thhx/qrLPOUiwW0yWXXKJnnnmm3eM/85nP6Pjjj9eS\nJUu0adMmbd68WTfeeKMikYgefPBB3XjjjYl9zz77bK1evVpHHHGEJOnWW2/V6tWrE6+XX365R7Vf\ne+21kqRnn31W9fX1qq+v189+9jMVFBRozpw5mjVrli699FJ985vf1IYNG1RXV6elS5fq8MMPV2Nj\no7761a+2OWdRUZEuvPBCPfbYY6qrq1NdXZ3q6+u1Zs0azZo1S9FoVFdddZX+/e9/96hWv+TrQNLQ\ni7QZ00HqAPLCo9+UVs/3u4rsGLavdMoPsna6+vp6XX/99ZKkb3zjG7r66qsT20aOHKn77rtPq1at\n0nPPPaerr7663eAxatQoPfjggyouLpYklZeX6+tf/7q2bduma6+9VjfccIMuvfRSlZWVtTk2U9u2\nbdMjjzyiCRMmSIoHhs9+9rN68cUX9ctf/lIzZ87Upz/9aV133XWJY0aPHq377rtPY8eO1csvv6zl\ny5enPE5jzz331C9+8Ys2X6u2tlZXX321nHOaOXOm7rjjDh166KFZ/56yjdARUG3vXvGnDgBZtnq+\ntOw5v6sIpCeeeEJbtmxRUVGRrrjiijbbo9Govv3tb+ukk07Ss88+q9WrV2vYsGEp+3zta19LBI5k\nl112mW644QZt2bJFjz/+uGbMmJH1+s8666xE4Eh2/PHH65e//KUk6Vvf+lab7aNHj9aECRO0aNEi\nvfnmmz16htf06dM1c+ZMPf/8870vPIcCfXmlP0t/9opjICmAPNcySHTKlCkaOHBgu/scffTRikaj\nKfsnmzZtWrvHVVVV6YADDujwuGzYd999211fW1srSSopKWk3lEjS0KFDJUmbNm1qs2379u265ZZb\n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\ncbRhvNaoJOtin59530uTvOfb0Ibdbt/OZiSl/Vrr7ep3sErxuZucpH8HvR19b1BebX6QyQ98mydp\nb+XR/WIAAAaoSURBVG99pVIfMJXXD3zzvueapFfyH57D0rZF0o5recDRekn/7a2LSjrP+8Pl1L0H\nHH1NrQ84OlytD0kL/IOivO/3frUG2MN6eDxtGA+68yRdKGlU0vqIpP0l/S7pd7K9Z1P0+zbson07\nDB20X5vfwxcUf0DbyKT1RZJOljQ/6Xv9SNDb0fcG5dXuD3qK+vmj7b12cN18jUk7rr1HOe9IWu7J\no5wbFcJHYks6Oqnm7er4cdirJb3czvG0YWrvWks7rktrByfpV+21BW3YZft2FTpov/Z/Dxu838PG\ntLb5VBja0fcG5dXhD3qY4qO/F3u/IGsVf0z5cX7XlsM26FXo8I4tUnwOitcUv9ZeJ+lFSRepi+5K\n7/iPS3pK0kbvH5u3JX1PUqXf7dLNtpvWg/Zb2sE5+nsbFnnfw52SXlU8oDV5f+kukPRzSf/VjXP0\n2zbs4nvrNHTQfonvoVTxyyB/UPxmgw3e7+FmxR8Q+gNJo8Pye2jeCQEAAPoUd68AAICcIHQAAICc\nIHQAAICcIHQAAICcIHQAAICcIHQAAICcIHQAAICcIHQAAICcIHQAAICcKPC7AAD9h5kVSPqkpP9R\n/BlDgxV/FsRqxR8g9aykp5xz/0k6Zn9JMxSfrv3uXNcMIHuYBh1ATpjZEEl/kzQ1afUOSTsVfyiV\neevqnHMDko67QPGHqv3LOTctJ8UC6BNcXgGQK79VPHBslXSFpOHOuVIvYFRLOkHSTxR/kBWAPMTl\nFQB9zswmSTrRW7zQOXd/8nbn3FZJ/5D0DzP7Wq7rA5Ab9HQAyIV9kz4/0tmOzrkdLZ/NzCl+aUWS\njjEzl/aaln68mR1pZr83sw/NbKeZbTCzf5jZOWZm7ew/zTvXUm95upk9bWabzKzezF40s0/04nsG\nkIaeDgC5NlLS4m7uu0ZSqeJjPpokbUzb3pi8YGY3KH7ppsUWSQMlHee9Tjezc51zsfa+mJldKukW\nSU5Snfe1D5N0mJkd4Zy7pJt1A2gHPR0AcmFe0ucfe4NKu+ScGybpK97iC865YWmvF1r2NbOvKB44\n1ki6SNIA51y1pHLF75ZZ7b1/o4MvN0TSjZLuUXy8yUBJNZJu9rZ/iR4PIDPcvQIgJ8zs15LO8xYb\nFb899iVJLyseKNZ1cNwF6uLuFTMbIOkDxXtvD3POvd7OPodLel7xgarDnHON3vppkp72dntC0kku\n7S9GM7tb0vmS3pO0Z/p2AN1DTweAXPmcpB8qHjiKFL/ccZWkByWtNbP/mNm57Y276IYzJVVI+kd7\ngUOSnHMvSnpf8cstB3Vwnus7CBTf994nKD6/CIBeIHQAyAnnXKNz7muSdpP0eUn3SVqk+PgJSTpY\n8dtq/2BmPf276Qjv/SNmtrqjl/e1lfSerEnxnpD2al8kaZW3eGAPawPgYSApgJxyzq2VdKf3kpkN\nlTRd0kzFw8BZiv/jf2sPTjvcey/zXl1pb5/1LZdcOrDC+zrdGo8CoC16OgD4yjm3xjn3c8V7ENZ4\nqy/s4Wla/i671Tln3Xjdna36AXQfoQNAIDjn1kt6yFvcs4eHt4SV3TMoocbMijrZPsJ7b3fAK4Cu\nEToABMk27z35MkfLnBqdDTB90XufZmalvfzahZIO///t3btrFFEYhvHnRbCIhQmClYVBKy+FlY1I\nUolFWvGPsLIyICIW1hbaeCnFQrC2EdRCrCSIKYIgCraKCGoln8WZdYdlE4MhI5jn1wx7LjOzW707\n882ZaR1JDjMOHa/+cv/SjmfokLTtkswnOfSHMTO0t8kCrPS6vnbbWdb3kBZY5mi1IRsdZ26D7uV1\nnp5Z7rZvq2plSr+kTTB0SBrCUWAtyaMk55KMCj9JsifJEm3djvmuuV9EutptjyQ5OW3nVfWJcTC4\nlOROkt+3aJLMJFlMcht4MW0fwHfaY7z3kuzv5s12q5yOakyubvL7SprCxcEkbbskZ4DHE80/aLdR\n9vbafgJXqur6xPxnwOnu42fam2oBzlfVy964y8A1xrdivnXHmO21va+q+d6cBdriYB+AG4yXQf/S\nndvoz9ktl0GXtsbQIWkQ3ZWHJeAUcIz2DpbdtADxDngO3K2q1Slz99HCxNnePIDFqno6MfY4cAFY\nBA4Au2jFn2+AJ8CDqvrYG79AFzqq6mB31eUicIJW5/EauFlV97f8I0g7nKFD0o42GTr+7dlI/zdr\nOiRJ0iAMHZIkaRCGDkmSNAhDhyRJGoSFpJIkaRBe6ZAkSYMwdEiSpEEYOiRJ0iAMHZIkaRCGDkmS\nNIhfBQe451Sp294AAAAASUVORK5CYII=\n", "text/plain": [ "\n", "$$\\frac1{2m}\\|Ax-b\\|^2 + \\alpha\\|x\\|_1$$\n", "
\n", "\n", "We will see that LASSO is able to fine *sparse* solutions if they exist. This is a common motivation for using an $\\ell_1$-regularizer." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def lasso(A, b, x, alpha=0.1):\n", " return least_squares(A, b, x) + alpha * np.linalg.norm(x, 1)\n", "\n", "def ell1_subgradient(x):\n", " \"\"\"Subgradient of the ell1-norm at x.\"\"\"\n", " g = np.ones(x.shape)\n", " g[x < 0.] = -1.0\n", " return g\n", "\n", "def lasso_subgradient(A, b, x, alpha=0.1):\n", " \"\"\"Subgradient of the lasso objective at x\"\"\"\n", " return least_squares_gradient(A, b, x) + alpha*ell1_subgradient(x)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nrkJggg==\n", "text/plain": [ "\n", "$$\\frac 1m \\sum_{i=1}^m \\max\\{1-y_i(a_i^\\top x), 0\\} + \\frac{\\alpha}2\\|x\\|^2$$\n", "
" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def hinge_loss(z):\n", " return np.maximum(1.-z, np.zeros(z.shape))\n", "\n", "def svm_objective(A, y, x, alpha=0.1):\n", " \"\"\"SVM objective.\"\"\"\n", " m, _ = A.shape\n", " return np.mean(hinge_loss(np.diag(y).dot(A.dot(x))))+(alpha/2)*x.dot(x)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[\n", "$$ \\min_{X\\in\\mathbb{R}^{n\\times n}, X\\succeq 0} \n", "\\langle S, X\\rangle - \\log\\det(X) + \\alpha\\|X\\|_1$$\n", "
\n", "\n", "Here, we define\n", "$$\\langle S, X\\rangle = \\mathrm{trace}(S^\\top X)$$\n", "and\n", "$$\\|X\\|_1 = \\sum_{ij}|X_{ij}|.$$\n", "\n", "Typically, we think of the matrix $S$ as a sample covariance matrix of a set of vectors $a_1,\\dots, a_m,$ defined as:\n", "$$\n", "S = \\frac1{m-1}\\sum_{i=1}^n a_ia_i^\\top\n", "$$\n", "The example also highlights the utility of automatic differentiation as provided by the `autograd` package that we'll regularly use. In a later lecture we will understand exactly how automatic differentiation works. For now we just treat it as a blackbox that gives us gradients." ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import autograd.numpy as np\n", "from autograd import grad\n", "\n", "np.random.seed(1337)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def sparse_inv_cov(S, X, alpha=0.1):\n", " return (np.trace(S.T.dot(X))\n", " - np.log(np.linalg.det(X))\n", " + alpha * np.sum(np.abs(X)))" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": true }, "outputs": [], "source": [ "n = 5\n", "A = np.random.normal(0, 1, (n, n))\n", "S = A.dot(A.T)\n", "objective = lambda X: sparse_inv_cov(S, X)\n", "# autograd provides a \"gradient\", yay!\n", "gradient = grad(objective)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We also need to worry about the projection onto the positive semidefinite cone, which corresponds to truncating eigenvalues." ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def projection(X):\n", " \"\"\"Projection onto positive semidefinite cone.\"\"\"\n", " es, U = np.linalg.eig(X)\n", " es[es<0] = 0.\n", " return U.dot(np.diag(es).dot(U.T))" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nXZMOVNRpT1mNfvDsRl//B3srenXqp6fQ4a5t8oWLmoZmffPpdXpvV7nufbNQ7+0u6/J1pR2WhW/2\nTlr1nzz7zAcHJHmCTJV3jZKmFqt/vrdXkvSrRVt9Iz9/fGuHb1TnJ89v1n/X7tdf3y3So8t2S/Ks\ng/KJB5fr5ifW6sK7l6rMuyZKSVWDLrp3qab/6BU9uGSH77MPu+t1+7/X64fPbVRFbXut7tomPb16\nnwo7HGtrbbchC/GDiaQAYsaFs0bqwlkjZa3VqqKj2rC/Qr946cOwvPf2w51Dxym/erPL/TsuRhZM\nx9Dx4oaDeu6Dg7ps7kgddtfrd69uU0Fuup79yukqLK5SbWP7iMGDi3fqtGPye1V7VX2zMtKCjwId\n7RCOyr1Bo2311jb1Ta0alJqkNz5s77/vzUJ9c8FUvb+7XDuOeC5prmpo1l/fLdJtH52mP72903ep\n829f2aabzpyk5CSX7nz5Q72w3jMCk56cpB9eOkPWWn3y4eXaXlyt1CSX3vzW2Ro7NEPuuiZ99v/e\n14YDbn3jI1N16/lTJHlGXH6+cIuMkX506QyN8p5mO1rTqBc3HNSs0bk6ftwQX62V9U3aV16r6QU5\nSgrzlVAIH0Y6AMQcY4xOmjhU/3vmJK3+4Uc0JCNFkkL6zybYSEd3iiv7FjoOuev0zafW640Pi/X1\np9bpV4u2qrnVav/ROt33ZmGnS3ybW1v17o5SXf+Xlbrnje2d5pf4q6xvkruLkZeOIwhdHaPK+q5H\nZdpOybRpCyCPLS8K6K+q94yotAUOSfrzO57Rks0HK30BpbGl1Tcy8o8VRVq/3y1rpT+8vt23cuxd\nr23TK5sPa9Gmw75TRdZaXfvn9/Wj5zfryoeW68NDlZKksuoGLfjD27rkvnf0xX+s8X12YXGVLrp3\nmc6/a4nW+c1n2bjfrVv+9YEeXLJDLX7Hx13XpDV7jqqxi8utETpGOgDEtPysNK343vnaW16rcUMz\ndPqv3+p2wmhXlhWW9mn/7b0IKbf9e72stRo1eJDSkl1q9J4G6Zgf/vHeHh03dnBAn7WeiapHqhr0\n9vYSzR0zWKdNzlNSkKthKuuau5y02nHeiauLq2kq65qUOygl6LaO9bYFl9YOGyrrmzQkM7XL9/e3\n84hn0u3j3tM9bcqrG5WVlqxn1h7w9f17zX797pNztf9onS9otFpPMPnz9SfqkWW7fCHwjQ+Lta+8\n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\nQmCC\n", "text/plain": [ "