{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Numeric Optimization of cost functions of 1 parameter" ] }, { "cell_type": "code", "execution_count": 201, "metadata": {}, "outputs": [], "source": [ "# do the usual imports\n", "import numpy as np\n", "import scipy.signal\n", "import scipy.integrate\n", "import scipy.optimize\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 202, "metadata": {}, "outputs": [], "source": [ "def hill_descent_1D( fn, p0 ):\n", " ''' Find the parameter that minimizes the function fn\n", " where fn is a function of just one parameter.\n", " p0 is the initial guess for the parameter.\n", " The approach taken to find the minimal value of fn is \n", " a hill-descending approach.\n", " Returns the best parameter value and its cost (as a tuple)'''\n", " # The current value of the parameter\n", " currP = p0\n", " # How much we will adjust the parameter by to take a setp\n", " delP = 0.05*p0\n", " # how much we will adjust the size of our next parameter step\n", " accel = 1.2\n", " # how close the costs need to be before we stop taking steps.\n", " tol = 1e-4\n", " # candidate step sizes (small and big, negative and positive)\n", " candidates = np.array([-accel,-1/accel,1/accel,accel])\n", " while True:\n", " currCost = fn(currP) # evaluate the cost at the current parameter value\n", " # then evaluate at 2 steps to the \"left\" and 2 steps to the \"right\"\n", " costs = np.array(list(map(fn,currP+candidates*delP)))\n", " # find the minium cost and the index of which step took us too it\n", " mCost = costs.min()\n", " mIdx = np.argmin(costs)\n", " if currCost < mCost:\n", " # no step made the cost any smaller. we should take a smaller step and try again\n", " delP = delP/accel\n", " else:\n", " # update the parameter to the best step taken\n", " currP = currP + candidates[mIdx]*delP\n", " # and adjust the step size\n", " delP = delP*candidates[mIdx]\n", " if np.abs(currCost-mCost) < tol:\n", " # if the last step and this step have costs within the tolerance,\n", " # then it is time to stop looping.\n", " return (currP, mCost)" ] }, { "cell_type": "code", "execution_count": 203, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3.041324494170096 0.0017077138184142878\n", "70\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# hill-climbing on quadratic function.\n", "def ftest( t, vals_t = None, vals_c = None ):\n", " if vals_t is not None:\n", " vals_t.append( t)\n", " if vals_c is not None:\n", " vals_c.append( (t-3)**2 )\n", " return (t-3)**2\n", "\n", "vals_t = []\n", "vals_c = []\n", "f = lambda t: ftest(t, vals_t, vals_c)\n", "(bt,bc) = hill_descent_1D( f, 5 )\n", "print(bt,bc)\n", " \n", "#print(vals_t, vals_c) \n", "plt.plot( vals_t, vals_c, '*');\n", "print(len(vals_t))" ] }, { "cell_type": "code", "execution_count": 204, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3.009724730540047 0.009746910915615192\n", "110\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Does the hill climbing algorithm work for abs value of error?\n", "# result: sort of. it does take more steps, presumably because the values don't flatten out at the bottom.\n", "def ftest2( t, vals_t = None, vals_c = None ):\n", " if vals_t is not None:\n", " vals_t.append( t)\n", " if vals_c is not None:\n", " vals_c.append( np.abs(t-3) )\n", " return np.abs(t-3)\n", "vals_t = []\n", "vals_c = []\n", "f = lambda t: ftest2(t, vals_t, vals_c)\n", "(bt,bc) = hill_descent_1D( f, 5 )\n", "print(bt,bc)\n", " \n", "#print(vals_t, vals_c) \n", "plt.plot( vals_t, vals_c, '*');\n", "print(len(vals_t))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Van der Pol Oscillator\n", "\n", "Define the model function for the van der Pol oscillator. It is defines as\n", "\n", "\\begin{align*}\n", "\\frac{dy_1}{dt} &= y_2\\\\\n", "\\frac{dy_2}{dt} &= \\mu (1-y_1^2)y_2 - y_1.\\\\\n", "\\end{align*}\n", "\n", "We will assume the unit of time is $h$." ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [], "source": [ "def vdp( t, y, mu ):\n", " y1 = y[0]\n", " y2 = y[1]\n", " dydt = np.zeros((2,))\n", " dydt[0] = y2\n", " dydt[1] = mu*(1-y1**2)*y2 - y1\n", " return dydt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run the model\n", "\n", "Use $\\mu$=0.1. Run it for 500 h at a tight tolerance. Then run it again for 100 h and plot the result." ] }, { "cell_type": "code", "execution_count": 92, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAEICAYAAABcVE8dAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAACFTElEQVR4nO29eZxk2VXf+b2xLxmZkVtlVWVVdVf1JnW3pG6prRWEAAkkIUtghC0wWNhm2ozB29gMwjBgMwbD+DOeMYMGLBBjMIsQElqsDYQk0AatrpZavXd1dXVXV2UtuUZmZOzLnT/ue5GxvOW+iPuyurPe7/PJT2ZGvIg48e65557zO+eeK6SURIgQIUKEg4/YtRYgQoQIESLsDyKDHyFChAjXCSKDHyFChAjXCSKDHyFChAjXCSKDHyFChAjXCSKDHyFChAjXCSKDH+EFASHEp4UQ7x7ztc8KId5oWqYIEV5oiAx+hNBgGdqaEGJXCHFVCPHfhBBT47yXlPItUsrfNS3jJBBCvFEI8XUhREUIcVEI8XddrvseIcSXhRAlIcQVIcRvCyEKfc/PCSH+WAixIYRYF0L8gRBi2nrukBDij4QQl4QQ20KIrwghXjX0/v9MCPGMEGJHCHFaCPEtfc/9OyFEyxoD++eU9dy3Dj2+K4SQQojvD+eORbjWiAx+hLDxt6WUU8DLgXuAnwvyYqHwvNNTIcTtwB8CPwvMAC8DHnC5fAb4D8BR4MXAMvCf+p7/D8AscBK4CVgC/p313BRwP/AKYA74XeCT9sJpGf9fAd5pfc77gY8IIeJ97//HUsqpvp9zAFLKL/U/DrwN2AU+M9ZNifC8x/NuIkU4mJBSrgCfBu4EEEK8WgjxVcvr/aYQ4g32tUKIvxRC/JIQ4itAFThlPfZj1vMxIcTPCSHOCyFWhRC/J4SY6Xv9j1jPbQghfjakr/RzwH+VUn5aStmWUm5IKZ92+e5/KKX8jJSyKqXcAn4LeF3fJSeBj0opd6SU28BHgDus156TUv5nKeVlKWVHSvk+IAXcZr32RuBRKeUDUm2b/z1gATg0xnd6N/AhKWVljNdGeAEgMvgR9gVCiOPAW4FvCCGWgU+iPNs54N8AHxZCLPa95EeAe4ECcH7o7X7U+vl24BTKC/5163NuB37Dev1RYB445iHXe6xFx/HH4yu92nr9w0KIy0KI3xdCzPnfCQBeDzza9/97gbcJIWaFELPA96MWRyd570IZ/LPWQ58G4kKIV1le/T8CHgSu9L3sbwshNoUQjwoh/meX982jooTnFW0WwTCklNFP9BPKD/AsiiIooYz2/wtkgZ8G/vvQtX8GvNv6+y+BXxx6/i+BH7P+/hzwT/ueuw1oAQng54EP9D2XB5rAGw1/t6b1/W5FLTgfBv5A43VvAraAW/seOwr8BdC1fj4LpBxeOw08DPxM32MC+LfW928D68Df6nv+duv948BrgcvADzq8948AzwDiWutN9BPeT+ThRwgb3yulLEopb5BS/lMpZQ24AfiBIU/6W4Ajfa+74PGeRxn0+s+jjP2S9VzvtVLRExtmvsoAasD/J6U8I6XcBX4ZFcG4QgjxahTv/04p5Zm+pz4InEFFM9PA08DvD702C/wP4G+klP+x76l/DPxDFAWUAn4Y+IQQ4iiAlPIxKeUlqeigrwL/BeXJD+PdwO9JKaNuigcYkcGPcC1wAeXhF/t+8lLKX+m7xsvwXEItGjZOoLzbqygP9rj9hBAih6J1HCGE+LcOlSq9Hw8ZHhqS0dNQCiHuBj4O/CMp5eeGnr4LlQ+oWIvHb9K3eAgh0sBHgYvAP3F47SeshacrpfwM6h681kUUiYoK+mU7DrwBxf9HOMCIDH6Ea4HfR/HK3y2EiAshMkKINwghXLn2IfwR8K+EECetapVfRlWitIEPofjwbxFCpIBfxEPPpZS/LAcrWAZ+PGT4/4B/KIQ4ZS0q7wE+4XShEOJOVOXLP5NS/g+HS+4HfkwIkbU8+XtRCwpCiKT1nWooyqvr8NrvseQQQog3oWimR6zXv8PKDQghxCuBfw58bOg9fgT4qnRJOkc4OIgMfoR9h5TyAvAOFPe8hvL4fwp9ffwd4L8DX0TxznXgn1nv/SjwEyjq5DKKL79oUHysz/kdlEd8H4pSaqCMKQBWhPCt1r//GlgE3t8XPfQnbf8RqtrmIrCCSkTbm8xeiyqX/C6g1Pd6+71/D/gAKsexA/wa8E+klE9Yz78LleAtW9f+qhzdz/APiJK11wVERNlFiBAhwvWByMOPECFChOsEkcGPECFChOsEkcGPECFChOsEkcGPECFChOsEiWstgBcWFhbkjTfeeK3FiBAhQoQXDB544IF1KeWi03PPa4N/4403cvr06WstRoQIESK8YCCEGO491UNE6USIECHCdYLI4EeIECHCdYLI4EeIECHCdYLI4EeIECHCdYLI4EeIECHCdYLI4EeIECHCdYKJDb4Q4rgQ4gtCiMesI9T+hcM1Qgjxa0KIs0KIh4QQL5/0cyNEiBAhQjCY8PDbwL+WUt6OOufzJ6xzRfvxFuAW6+de1Jmj+4NmBZ6PHUEv3A+XvnGtpRjF2hk4+7nn3z0rXYD73gfVzWstySC6HXjsY1B67lpLMor1s7BtvDP05Ng8B09/4fmnYzuX4f73P/90zCAmNvhSystSyq9bf5eBx4HlocvegXV8mpTyb4CiEOIIYePhD8F/PAYf+PuuyvXElR1+4y+fplRthi5OD898Ed7/Rvit74TL33S85Ktn13njf/4rfuuL5/ZPru2L8L5vg9//O/DgHzheslqu8yPvv4+f/9gjdLv7NGE7bfiDd8Knfwo+6ngGN61Ol3/5gW/wQ7/1N6zvNvZHLoDP/wf44D+A938XNKuOl7z3C2f5tv/0Bb781Pr+yXX+r+G9r4RffyVsPuN4ydee2eSt/+VL/PaX9lHHylfgv34b/PfvhW/8vuMlpWqTe3/vNP/7Jx7bPx3rduEPfwA++b/An97reEmnK3nPhx/ih3/7PtbK+6hjBmGUwxdC3AjcjToUoh/LDJ5RepHRRcF+j3uFEKeFEKfX1tbGF6bbgc/+PMguPPlJuPC1kUvK9RZ//7fu41c/8wQ/9aGHxv+soPjqr0Myr/6+730jT3e6kp/60EOcXd3llz/9OM+sV/ZHrr/5DWg3IDurZHTAr3z6Cb701Dq/99fn+R8PXdofuc7+Baw9AYsvhjOfcfSm/+T0RT764CW++vQG/+efP7k/cjUrcN9vQn4RypeVpz+Ec2u7/Kc/e5LzG1V++sMP0dkvA/ZXvwKxBLQsGYfQ7Up+6kPf5LHLO/zSpx7n3JrXaY4G8bX3QWMHMkX46v/jeMmvfuZJ/vyxq7z/y8/sn44985dw5WGYvwXOflZFIUP42IMrfOD+C3z57Dr/x2eeGH2PFwCMGXzrqLkPA/9SSrkz7vtIKd8npbxHSnnP4qJjOwg9PPsl2FmBd7wXEll49CMjl3zswUtsVJq84bZFPvvY1f0xrNVNePpz8Mofgzu+VxmzoejjvnMbrJRq/MLfvp2YEHzoAa/zvA1BSnj843DTd8DrfwrWHlc0Sh/K9RaffOgyP/SqE9w4n+OP798HuUAt2KkCfP9vq/+f+uzIJX/ywAVedLjA37vnOB/9xiXqrU74cj39eWhVlVyFI2oxGsKHHrhIPCb492+/g5VSja8+vQ9efnVTRZGv++dw21vhiU+OXPK1Zzc5v1HlZ9/6YuJC8CcP7BP18/gn4OS3wbf/LKw/CRuDpyrWWx0+9uAK73zFMU4u5PnD+/aJKnviU8pO/F3rWN8zfz5yyQdPX+DkQp4fetUJPv7NS1Qa7f2RzSCMGHzr3M0PA38gpfxTh0tW6DtYGjhmPRYezv2V8nDu+D44/rfg/JdHLvn8E6ucXMjzy9/3EgA+9/jVUEUC4Lm/gW4bbn0LnHoD7F6B9acGLvnK0+skYoK/97eO8/ITRf7qzASRji42nlae84veCqe+XT327JcGLrn/2U0a7S5ve8kR3nznEe5/dpPd/VD6s5+Hm78Dlu6AwlF47q8Hnt6pt/jmhRLfdcdh3vySw9RaHb72zD7wsE/9OaRn4IbXwY3f6hhFfuXsOq+4YZYfuOcYqXiML+7HWJ79nIpsb32LMq7bF2B7cLp98cwaiZjgh151glfcMMtfPbkPcpWeU0b+1u+Gk9YJjRcGyYCvn9+i2uzwPS85wlvuPMwD57fYqbfCl+3sX6j5uHQ7FE+M6Fit2eH0s1t89x2HeeudR2i0u9z3zEb4chmGiSodAbwfeFxK+Z9dLvs48A+sap1XA9tSysuTfrYnzn8VjtwFqTyceC1ceUSF4BbanS73P7PJa26a52gxy82HpvbHsF64D2JJOHo3HLWKla4M0klfe2aTO5dnyKUSfOstizyyssN2NWSlX3lA/T7+Kli8DZI5uDws1xbJuODuE7O8/pYFWh3J/WEb1vJV2Lmo5BICjt41ItcDz27RlfDqk3O8+uQ8qXiMr5zdB0/64gPKmYhb41m+pDhqC5VGm0cu7fDKG+fIpRLcc+MsXzm7D0biwn0qIjp6Nxy7Rz22MtiE8P5nN7ljeYZ8OsHrb13kscs7bFVCzmPZC+KN3wILt0F6emSR/JtnNokJuOfGWV5/6yLtruRr50LWseombD0DJ16l/j9y18ic/MZzW7S7kledmuOeG2dJJ2J8+anr0OADr0Odev8dQogHrZ+3CiF+XAjx49Y1nwLOoQ5T/i3gnxr4XHe06sqA3fBa9f/SHYCEtT1u98zVXcqNNq86OQfAq07O8eCFEqGf8Xvha8poJTOwcKsy/n3K1elKHrq4zStumAXg7hNFAB65tB2uXCsPqLzC4osgFlf3bEjpv/7cFnccnSGbivOy40WEgIcuhizXpa+r3/biePilsPHUwOL9jQslhIC7T8ySTcV50ZFC+HI1K4r2Wn6FJd/d6ndfEv6RlW06XckrbtwbyzNXy+HTTZe+rnQsFoOlOwEBVx/rPd3udPnmxW3usXTsruNFAB5eCfmeXX4Q4imVi4nF1FhefXTgkm88t8WLDk9TyCR52bEiMQEPhS3XsI4deZni8Ot7n/v157YAeMUNs2SSce5cnuHhlVK4coUAE1U6X5ZSCinlS6WUd1k/n5JS/qaU8jeta6SU8ieklDdJKV8ipQy35/H6k9Bt7U3CQ1aV6OrjvUvOXC0DcPuRaQBesjxDud7m/IZzpYURdLuqFHPZ8roSKWVg+ybjc5tVGu0utx0uAHDn0RlgHybjymnLSMTV/0t3wuqeXFJKzlwt82LrfuXTCU4t5PdBrgdAxOHISy25bld0RR/3+9TVMjfM5cimlOx3Ls/wyKXtcBfvy99UcthGYvE29XvjbO+SM6sqEfqivrFsdyVPXimHJ1e7qaLZo3ep/5MZRVFs7NGG5zerNNvd3ljum45delA5EomU+n/hFlg/M5DDOnO1zIuOqPuVTcW55VCBhy+WQpbLKo+275ltL/rH8uouy8Us05kkAHcenebRSzv7V0VkCAdzp61tQJfuUL/nTkIiM2DAnrxaJhkX3LigqmXuXN4HpS89C+2aMlo25k8NVATYC9GtS0rpZ/Mpjs1mw5Wr21WL4eGX7j02dxJqW1ArAbC226BUbXHLoaneJS9ZnuGRsI3ElUdUJJSyqprmTqnffffsyavl3v2y5Qp98bY9edupyM2pypOhhaiQTnB4OgPsk46tPQ6dhqIlbCzcqgxrn1wAty6psZzJJTkxlwt3LKVUVNywXPUSVBU1sl1tcXWnMTCWypMeuwZED5cfUnqVUeOzp2N75axnrpa5ZWlP9+9cnqHa7HBuvyroDOFgGvzVRyGehrmb1P+xOMyehK1ne5ecuVLmpsUpknF1C25dKpCICR6/HKJyrVqlXIsv3nts9qRKZnVVmG9Pxn7D+qLDBc5eDbFsbmdFVZss3rr3mK30W0rp7c/vn4y3HZ7myk6dcphJtfUzg3LN3qh+Wwa/0e5wfqM6JJf6++xqiPds/Ywy8FOH9h6bv2nAK3zq6i43L02h0lxwbDbLVDoRrlw2bWk7O6AM68bTamG35AK4aXFPx25dKoQrV/kKNLaH5LpF/bYWozOrSvdv6xvLFx0usL7bCHefzPpTKtK2MXsjIHo61u50ObdeGdAxOzqy5+sLBQfU4D+ujES870Cv4gnY2jsI5szqoFeYSsQ4MZcLtzRzzTb4t+09NndS0U87qori7KoKHfPpPdlPLU7xzEYlvPDR9v4W+g3rSfXbUvqnLGPQ7+WcWlRed2j3rN1Qi3S/XOkC5A/15Hp2vUqnKwflsqK2c+thGvynlFyWMQdg/uZBD391d2DhFkJwciEfrle4/hSI2N6CDUrHWlWorvfkOjY7qGM3LeY5v1ENb5+AvRDO39Qnl+1UPKvkshaim/vu2cneWIZ0zzpt2Hx6b/EBRYNNL/fG8sJWjWa7u79yhYSDafCvPgaH7hh8bPaG3oaddqfLpVKdG+dzA5ecXMiHb/CnlyEz3SeXbViVJ31hq8aJuVG5mu0uK6VaOHLZZaELTp60kuv8RpVsMs6hQrp3Sc+wroV0zzafAdkZlAuUobDv16aibfrvWTGXYi6fCncs158aNBIAM8fVBqxOm2qzzfpugxvm8wOXnFzIh7vJaeMp5dwk9saJaWuP47baN3F+s9ozWP1yNTtdVrZC0rGewb+5T66jllzK2bmwVSUZFxwtZnuX2E5FaDpWOg+dpoOOnew5Fc9ZOnZj31jm0wmWptP7tynSEA6ewe+0VKmcXedro3hChZS1LS5v1+l0JcdmBw3rqUVl8EPzpNeeGPTuYc+wllT0sbJVY3k2O3DJqbC9ifUzir/M9210S09Bbr5nJFZKVZZnsz16AuDEfI6YIDwDtm7REyOG9Zgq1YTeIuh0z54Oy0jUt9X+iRG5ltUCtXuVS5Zcx4bkOrmQZ6VUC69SZ/2s2i06INcx9dsyrCtbVZaLQ/fLondCi4o2ziqadfrY3mPJLOQW9sZyq8aRmSzx2J6OHZ/LkYiJEHXMcnac7tnOpZ5cMKpjoS/eIeDgGfx4Uu2Wu/uHBx8vnlC/S89xYUut2KOTcYpGu8vlnbp5uaRUXmm/hwNqhybAzmWa7S5Xy/VRuWzqJDSlPzNKT4Da5GTVla+UaiNGIp2Ic2w2F+5CBKOTcfqIanQlJRe3qqQSMRby6YFLTi3mw/MK1y1vddgrtD3pnUtcsI3EiGHNI+We12gU3a4yrE4LJMD2ReqtDuu7zRG5bI8/NI9142lF58SGTM7Mcq/B28Wt6ojuJ+OKag1tLO3qpeF7Nn1URWvdDiulKvGYYKkwqGMnF6YiD/95iz4v5+KmmozHHagTgGfCUK7aluohUrxh8PFESnk55ctc3q4h5aiRWJxKk0vFOR+GkQAVug4vRGAZVuXlXHSIPABumM+FVw2z8bRadNJTg48XjqpKlNoWK6Uax4pZYrHBxeqG+Tzruw2qzRB2AvfoiWEjYRv8i55eIcCzYRiKnRVVBTY8ltlZtZFu+2IvIjo2NyjXwlSKfCoe4lg+5axjM8d7kcfFrVGnApSOhbJAgvLwc/OqyqofhSMqWquscXGrxuHpDIn4oLk8uZBjq9oKf1OkQVw/Bn/qsPq9e4WLW1ViAg7PZAYuOW5NgpVSCMplUTbM3jD6XOEIlK9wccumAQYXIiEEy8VsjyYwinZTGfXhhQigcBjKV6g02pSqrRHvS8ma5fJ2SLxv6bk9yqsf01ZUVL7sSIHB3qJ5qRRCtGaPpR012pixufIVVko1EjHBocKgju3JFcI9s0tV+xOjoCI3iwbrLURFBx2bDUnHOm2VmB2WC9QiubNCo91htdwY0X1Qi+al0HTsvIuOWfmFnUusbNUcdd++h6Hl1kLAdWTwDwECyle5YHGFyaEVe2k6Q0wQTuLKLgl1MqzTR6B8qfe5Tsp1tJgNR7F2VgAJxeOjzxWOQmWNlQ1VqurkfR2dybK+2wyHky495yLXHg120W0yztqLdwj3rHReORDJQWNOpqg8actIHC0O8tEAc/kU6USMS9shLER27/sZh3s2fRR2LvWcCqdFMjQdK19S/aOcDOvMMjR2uLyq2pq4GdZStRVOs7LShdGFG/p07JKiMz10LJRFMiRcPwY/nlSh2+4V5RU6GK9kPMbSdIaVMLzCLS8P/7Dl4TtHHmB5OaF4q1Y3QkelPwxI1i+rxK2XYTWu9J22FXm4T8bm1kU2KqN8NNCr9AhlMpYuOC9EQljc7yUuOiRG1SUqWgvFqbAS7D36sh/5Q7C76spHA+FFkXbXVaeFaGoJgDVLx5wXIjUfjMvW7ap75rZAAp3tFa7u1DnmqGOWXGFFHyHg+jH4YBnWq6yW6xyaHlV4CFPpzysP0N7NNyDXUdhdZXV7l4Wp9EjkYcu1WWlSaxr2pL0MvqX0O+vqmqMOSh8adbKzojhUD4NfWVdG4vDMqFxLhTTxmAjHsJaec5YLVKVTZZ0r23WOFEcXbgjRky5dUJFHwkG3p5TBv+TCR9tybVVb5vMe9kLkdM/yCwCUN1Su6IiDs2M7GhdN37PKqirJdJRrEUSc6sZFuhKOOOj+Qj5NKh6LKJ3nLQqHYfcKq+XGCLdqI7TJuOXCFdpyIWmWrnguRBACRbF9QW3UsROOI3JBa0sl1RamRmU72pPLcN7DXoicvK9ECnLztErKSBxy8FYT8RiHpzPm71e3q6gTJ7kA8ovI3VXWdt11bDksHdt2ocBAGfx2jfJOyVXHjoUVrdkG30nH8mqncnNbVYMtOkYeuXDk6jk7DlF3LA75BZrbqmW6k47FYoIjxUw4kXdIuL4M/tRhuuUrVJsdV6U/WlRJSOO1+KXzznQO9MLa7u5VFh2Mqi0XhKT0haOK8hqGNRm75TXm8inHyOPwjJX3MK30Xl4hQH6R7q7ifZ2MBIRkWHevqJ3RboY1v4isrNHqSFe5jhazrJUbNNqmozUXegJ6Y9nZ8dexi6ajotIFVYmWGk3I2q0p2jurTKUT5FKJkUsWC2kSYURrPYPvPpad3fWeDE44OpNlZSvEnk2GcX0Z/MISorKGoOu4YoPiEFsdyZrJc1G7XYsGcDH4Vlgrd9c9Ig/1uHED5pa0ApXzAKiuuxqJXt4jlMkonPloUAbEarrlNpZHi2HJhftYTh0iVtskQdvD4KuxvGxykex2FQ3m6uFbm+qqa54LJIRAz21fdJcrtwAIRGXNdRzjlidtXvc9okiA3DyxqnIqXKO1sHJrIeH6MvhTS4hum1l23Q3rTAgJouq64gpdjZcyrMnGputktOW9anpTmFslDCjqJD1DvO4uF6jqptVyCHIVjjjz0QD5eZKNTeIxwWwu5SzXTIa1csNsm2SvBCT0Fu9Zyq6L5BEr53DF5FjuXrV0zM3gqygyXV93HcvFQhohQtCx7Qvuuh9PQG6OZH2dBS8dK2RY3TF8cPj2BcjOje7zsJFfJFFXh6/MTznr2JEZpfv7dlbxhLi+DL5lWGdF2ZXSsQ3rqslT6a3NS71Sr2FYRqIod1wnYyoRYy6fMitXp215hS4ePkB+nkzT2+AfKqTNT0avhQggt0CmucXCVGpk09WeXBmanS4lkxtjejX43tTJoth2X7wt3TM6lr4UmJJrwUOuZDzGXM6wjklpUU1eOnaIbGPDW8em0+E4FZ66v0imuelKZ4LS/a6EDZOMQIjnOJg60/Z3hBCrQohHXJ5/gxBiu+9ErJ838bmBYRn8OQ/vK5TJWLZOc7Q3cwwjPY2MJZkX7gYfQjCsu1dUJYxTMs2CzC2Qa5X2fzKWL3vKRX6BbGeHpalRzrcnVyGEsdy5pHaupvLOz1v9iLzG0pZrzaRcGvSERKiFyEX3QXn5aybHsrqpdv96Ld5Ti0y1tzzlOlTImB1HUGPpqWPzZLpVjuadHQqAxTAcxE//NPzfL/W/bgyY8vD/G/Bmn2u+1Hci1i8a+txgsAz+ofguxZxDkhKYz6cQAtZMhrV+Hr4QNNNzaiHyMKzGJ6N9/qrbQgS0M3PMsuM7GbeqLZrtrlnZ3O4XQG6BGJKTefc+6XsG3/A9K7jfL9vgH47vMJ1xXoxmsklS8ZhZuWwdm3ExYPEErfQsC7h7+ACHpg0b1m17IXKhdIB2dpFZ6V49BEr3y/W22Q1+5ct7u7adYI3lqZw7vWvLbHTxLl9WBzaFACMGX0r5RSDkk4YNwDL4xzO1ga6P/UjEY8znU2aTtuXLqvTR4lGdUEsWmRP+hjWUyMMqv3SWa1bJ5RN5AObuWX0HmruecpFXY3lD2r1C4pB10pTRqKh82VsuKzl6Q7riqmNCCLV4G5XrijqTOD3tekktWaQovJ0K41Hkjk90i6377lG3LRcYHMtWXfW38hrLnKJab8i465gts3mnwt1WTIL95PBfI4T4phDi00KIO9wuEkLcK4Q4LYQ4vba2ZlYCq0HSsoeRABWmGVf6/KHBA1mGUI4X/Smd6TRr5Ya5klHbw/fwpMuxaSsB6Zy0suUCWDUVFWnI1c2qybiccm9CthgGpeMXeaSnaZPgcNJPx9LmF+/C0mjH0z5UYtPMseu4n8LGoUKa9V2TOmY7Fd46Ni2qHMrH3eWyF29ThnXXX8dkPoCOmaZavXRsAuyXwf86cIOU8mXA/wN81O1CKeX7pJT3SCnvWVxcdLtsPCSz1MiwFPfuVHjI+GS85B06AiWmWRDlgVOIhrE4labdlWyZOu6tfFkdEG55Mo5yiRlSosNS2v1+GE90a0QeOzG1Y3kp4d4yWtV1x82F213V697TKxSCHTHFoYS3wT9USJulAXav+hqJbVFgPr5LJulhWAtKxzZN6djuVUD0ksZO2OqqfMhSyt2YG8/H9JwK97HcTc4CcDjufoxhJhlnJps0F91KaTkVHjo2AfbF4Espd6SUu9bfnwKSQgh3KxMitigwH/PuK68Mvkl+9bI37wtsyGnmhPf5mD2+0JRy2Yo13KO8X66uOgZyMeYuW3iT0d2ArUkl14LfPTM5lpV1leT2mYwlOcVczNupWDStY+XLnpQhwJacYk746L5pGqx8WXHhHtHthlRlkYsejtgepWMqivSPPNY7lo556L4tm7H7VdtS5bVTL2CDL4Q4LCxCUwjxSutzN/bjs/shpWSjO0VRbnted2g6zfpu01xtbfmSJ4cJsNadYoqqOsfVTa5CCJPRx3itdtVkLHTc79mc6UR3bzK6G7C1tvIKfcfSZN5Dw0h0upKNbp5p6WckDCa6e16ht4e/1rHk8ij7M57oLl/15aPXO2osZ3C/Z7O5FImY2FenYr2Vpi1jTOPDCJisUtOIPCaBqbLMPwL+GrhNCHFRCPGPhRA/LoT4ceuSdwKPCCG+Cfwa8C5pdDeMHnYbbTbkNIXujud1hwoZOl3JZsVAWNusqiPxfCidq5YBo+qe+zbuSe9c9jUSV9rKy4nV3Ndnleg2SIOVr0CqoA4sd8FWXbIjc+S73h7r4rRB6kTDSOzUWpTkFFPdfYzWGmV1SLmPkVhr50nRUte6yWWantPgo9fbquVCol5yvSYWE2bzHjuXIJ5SJbYu2Kq22CZP3m8s99mpmATucVYASCl/0Of5Xwd+3cRnTYKtSotNCuQ6z3pe1+/leCVRtdAbQG8P/0rT6sZXL7kuDnt7BAx60je+zluuliVXreR5nVFOunzJ13htVpuUZJ5DHb/FO81fGo883GXbqjbZklNk2iu+coGiKJzaKAeTS88rvNyyetlUN133ERgvMyxfgcPeNeWXmpZctS3P64zm1mw60yPJvVVtUpJTHPHRMXshklK6VmYFkgsORJXONcdmtcmWLJBpeiuW0eoOuz7ax8O/3LDqbj2UPpdSScj1soHIo1VTi4uPkVipp33lAmuPgOncggdKlSbb5Em1vCfjwlSaSrNjpq10+Qogeg2/nLBVbVJiinSr5PlWto4ZMawaC5GUkksNe/F2jyIzyThT6YQZubrqiEA/b3Wlaeu+d2X3wlSadZOetI9ctoefbvnRhmma7S47dQNtpe3qoRcyh/98wValyaYskGhXPLnyeatsbXPXgGHVoAHqrQ5X23qe9Fw+xWbFhJGw5fKOPC7XknSJqcXBA/P5FBsm7hdoT8ZdUSCmIRfAhpF7dlkZe6fOorZcFUXpxDt1tai6YM6Sy0jF1a5q4etZ+thos9H1pw1t2YzQmZU1kF1fb/VyLUGb+P7JBVpOxValyQ7+OmaPpRHZylfUmRlOnUUN4Loy+JuWVwh4GlajA1hZVb99vMI9ubw96fl8ig1TigW+Sr9Ra1OLT/nKZWwyapalbVWb1BIFLbnA4GTUoZqwmnF5yDafV06FmbG0PHyPKp2tSpMtrJyIjydtbCw1+eitaptafNpfrikll5H0n0aSW+nYNEJbx0w5FeF493AdGvwdaRlWj1V7OpMgGRdmapEraxBLqtOuPOTatkrT/Dzp/ZyMUkpK1SbNxLR/5DGVotYyQJ3YZWkak7GRnPGPPKZsD9/EPbvkK1fJ4vABT4OfTcXJJuPmoshk3jvJXVWRB+DrSZtzKqzIw8eAbVWb1JMzWnI1O112Jz3btlGGZtl/8a60aGjofm/xNjWWIVXowPVm8KtNdoW/hy+EarlrZDLurlnHpbknc0rVFmWySISGx5o2Y/BtGsDDK6w0O7Q6klZKw7Caok56crlHRKA81nZqRt0vD49vLm+Qnttd9Zer2qIs9AyrucX7iu8u262KXuSxJ5fJ3IK7jtVbHarNDq1UUUv3wUC0tmtH3d5UU6napJOegca2yke4yTVlMor02dg3Ia4rg79VadK1PW0NT9qIl1NZ3Tt8wgWblSaSGN30jL83MaXkmjisraypXbZeZWnW9+9mZvZvMlasdhoahrWbLkK3rfruuMplaDJ2u2rjlceOUbB0LKtaeOgYVmP0nEZE1CJBNznlvxCZok40nAq7dXUnM6tFZ4KBaK2iTrHyG8vNar+9cE/cGpNLSpW09VmIJsF1ZfA3K03iOcvAaRhWI17O7qqvYpUs6khmi1oLUbPdpTIpdVJZU334PXbZ9hKKmVmtZDKYmIyWwc97L5JblebeYuUhm03PTSxXbUvtsvWTq9pEZIvWa/bJw9+96rtA9j4nN+cr13w+RasjJ6dOdq+qhoUeSW5bLpGd1YqIwEC01tMx783+pWqrT8fcF6NMMk4uFe85SGOjvm3tso0MvhFsVfsMvq9hNUSdVNa1vFWAWG5OOwk5sXJV1n2Nl/39Y3l972vyyWh7X+6ytTpdyo028by/J92j5yZdvDWNxFalhbA6eercM2M65jOWpWqLeEwgcnMahtVgtKbp7MTy81oLpDG5wPOedbsqf6WjY4ClY+Hr/qS4rgz+RqVJumAPYMnzWiOJKykVpeNjJDYrTQrpBLFsUUsuMORJ63g4QDI/p7wPL67cFI9ZWVOtpD13QKrPSE3pLt4mJqNm5FFtMpUrQDy9Pxx+u6k4Zr/Fu9qkmE0iMjPQ8N67YJQ68dN9ayyTU/PQrqu2xW5yWTq2PvHibRtWd9l26i260pIL/BfvKQP2QtOpmATXlcHfqjSZmcpCakrLSJTr7cl6ndghmoaXM5u3tnnvVwlYZU3bw08X5hWd0XDfYl5IG6JOKmuKBoi5d3S0F6L0tDUxNCbj/hn8FrNTmmNporKp6m+8oF/Hitr0nJFozS8issYyU7AXb3euPJdKmKlsqqxBesb9vOR+uab1DL6RxVtzLCfBdWPwO11JqdZS4WqmqK30E22M0UxAblZbzOas0k3fahhDJWBaNEATISBT0KNOjFR3BKCacpoG3wg9Z3uFHmNpl7EWcym1eUbbk57gntlyebS4BnXPlI7NeBpVMEyd+MhlU5NZW8c0ZDNDNfnfL4DsjK6O7Z9TMQmuG4O/U2shJRSzSeXl6JYZTmJYNQdw0MMvhU+dNKuqskUj3C5mkyq3APuT99CimtRnTBWt+7of9JwG1VRutGl3JXO2wfcxXrM5A2OprWMt9XkachnZu9BpKX3RoMAK6QSJvL+Hb8tmhs70n5MABU2Dr3RsUmfHalDos0hOguvH4NdViDaTTQby8CeajHa9r4bHOpuzwm0f6iSfipNKxCaTq6qXHNqyjUSv6mQfdgFrUU1qLIsz06rjoYb3NTE9p0E12d5qUdOTNmJYNfho6NOxzIw6VNyjtUgulSCTjE0WrVUt42UnsF2wVWlSzFv3C/bJw9fILVifMTuVU/SPRhRZb3WpNieobOpRTe6ny02K68bgb9f6DL6Ohz9lItzWo3R63pdGCZgQYnLDGqD0sRd5gGafn/CpJptmm82nA+U9JqbnNBZIQNuTtqthJqq40uB9FdXUUmOpUVcOijo0shD5UU3V1l5EBPuXgNeYkwCzec3F2xQjECJ/D9eRwd+pqZV3WtPDNxJu764qGiDn7uU022qreI/Dh/CVXrP8a6s/t6Ar1yQK36or3tu39LFJNhlXR/Vp5T32ZzLuLUS6Bt8QpRNLeLbuqDQ7NDvdobEM2ZPWdCq2q01mckEWogmpk25HRR8aTkUiJphKJ/ZvLKv+zs6kMHUAyu8IIVaFEI+4PC+EEL8mhDgrhHhICPFyE58bBEE9/GJOneI0sdL7VZzU+mgADQ8fDOzQ1Cz/2qm1mMnqRR6gJmO50abRHrPqRJNq2q611P0Cq+pkHxqoBeB9B5KjHvkYI5vCKuvKi/ZoqzCg+/tFnfQoHR8dq7cDyjUhdVLdBKSWjs1kk6q/fWYa6t4J+FkjOuZPNU0KUx7+fwPe7PH8W4BbrJ97gd8w9LnasDn86azlDbWqqobZBfGYmHwzhYaRGIw8LKXXoE62TVQP+crWUvcrmbW4cm+5ipbS2wYmLLnsyQhYhlVvMtqL63iy+Xtf29Uhw9pte54uJYSgmEv1Foqw5NpxNPglz9fM5VM9WmM8ufTHcjqTgGRG7V3wdcTUuI8tm66zU2+rOQmBKJ3J7cULwOBLKb8IeO0yeQfwe1Lhb4CiECKcM7xcYBuh6UxyLwnpp1zZJKVxjRdYbRV8JmNvIeqbjD7lfBPLVVmHZM711CNQZazlRlvdLyG0lL5oTZDtsSejnoe/U28puQDS01r3CyYwEppUk30ARiGj77EWs8nJDGt13Tcxahv86Wyf7vss3jPZ5OQLkYh7Uk1SSiuK1Dess8YMvsZCFEAueyEa29npdrWopkmxXxz+MnCh7/+L1mMjEELcK4Q4LYQ4vba2ZkyAnVqLREyQS/UpoZ/HmkuOb7zAGkBvIzEYbk+rB3081plciu1ai+64h6xreBLl/qom0DOs9mSc2MP3u2dtFXmA1mS0J+7Yk1GTatqptcgmVRXVnsH3v2cTe9IaxguCUTrFXJKdepvOJDqWm/fs1VRrdWh3ZSDDOpOdMFoLEt1mLB1LT6vdzB4oZJIIMYHu17bUYTEHxOBrQ0r5PinlPVLKexYXzX15e8UWQuh7+LnUZDRAdcMzYQt93lcmqQ7uRmh5hVJCedwj1YJSTaDp4U/Y5ycQ1WTLZfGrHlx5Jql6z4ct1wjVBFoGbOJozTcissYyYOQBkyyS+s5OL1oL4kmHHUWOePg7ygt3QTwmmM4kx6dabR3zsReTYr8M/gpwvO//Y9Zj+4Zecgj0PfxJwu1uRymv3SrXTa5euJ1Q3lAAT3rsMsMAXmHPy9FIXBnx8BMZ1frCAwOUTmYGui3P4wRBUQHjyxWAaupFHkX1W8OAjW0kWjW1gU7XqejlY9Iaclme9Ng65p+AtJ2KIJTOnu5PoGM+VBOosRxcvKU6NMVHtrF1TDOKnBT7ZfA/DvwDq1rn1cC2lPLyPn02MBSiaXr4M5NQOrUSIFU7Wi+5+r0vCKT04xuwDd/66J1hSme/vC+fw2I6XUm5f/FOWzSYzyI5k5sgCdmrKfc2rON4+BPlYzQXInvxLgzoWMnzNTMmFm9NHestktmidhQ5EaXjQzWp3EK7b07qUa3FbHKyhQhCN/gJE28ihPgj4A3AghDiIvALQBJASvmbwKeAtwJngSrwD018bhAMJmGK6reGcpUbbVqdLsl4wLXRLkvT8L7SiZiqKQctT7rHY47rfdU2wW4T7SEX9FE6GpHHVDpBPCbGn4zVDd8FcrfuQDWBGkuPk4KK2STb48plt+31W7xrbY7MZIbkKnm+pphLUm12aLQ7pBPu5buO0Gy2tVNvUbDGpiebZtuHsRfvqr+HP1DVpClXNhUnnYhNIJc/1VRvdWl2ui6L93HX101UcaW5Y3pSGDH4Usof9HleAj9h4rPGxU69xfJsVv2jORln83s85sKUe2c9R9hGwqP3iv3ePcWyZdOsVBiLX21WVRtaH6ppe9jga8glhJiMBqtuat0v6Kea9JOjT626n4zlK5eIqW3vHtipt7jtsHWubM8r1KNOtqstDk0HNPgBPPzpgDrWq2waZ5FsN9X761ao9Ucedi8pjyhvokR3bctXx0YijwCJ7mc3KuPJVVkHhO+8nBTPu6RtWBgo/0qkVFmiRmkajFkCpuvh14cmo0ZFwB6/OoZcut6qE6XTqqqmWB6YmXgyjiEXaBnW8eWyFiIPGgCGFu9EGhLZcOk5Tappp9Ye1DEd6sTmyivh6b6jU6GRjylmU+PnrwI5FcFow4mcndqm+v5xIz64K64Lgz/CyYEmJ21vJBpDuap6hnW7P7egKZd9/XgLkR15+MsVjwnyKZtq0vSks8nxKZ3apgZt4kA1gcYiqSidsc5prW763q9uVx0JGHQse5z0WIu3tcNYw2MdkcvH2ZmozDAABQZO0ZpPZdMkydEAOha44iqXYqfeGq+UteovlwlcFwbf5uR6IRoEC2sn8fB9q3TaQ5SOP4efiMcoZBLjGdYAk3E6k1BlrBDAsI7pSXc7ygjpUk2ZgB5+NkmrI6mOc9iIhpEoN9pISXDqpLeRaJyx3AKEf8XJGLThRGWGvYXIP1rLp+Ik7PxYgLEci8OXUmvxHo08ipZc/s6OKpcec/H2WbhN4Low+CM0AIRfAlbbVOVvHrtZbdlGjETDu67cli1MD99RLtC6Z2PJVd9Gr6rJGku7l45uBcUk1ElVg2oaNhKguZFoArlqm4qe8aGadtw4fB0dG+t+6eevxtaxcZyd5q6ijALTmbr5mAkcxJr/QmQC14fBH/YKweqyGGItsh2ieSSfwCFpm55WO+6a3gnGYnbMigBND19RTUORB2h4Oanxksm6C9EwDZDMqW6Rmjs0x9p8peHhj0QeEH4pq0bOA6y+MMO6r8OVjxut2R6+BnUy6ITpHYIyO6lcQXUsnlR6ptvnZ6zFO/LwjWF7mJMDrVrkQjpBTIxZDVPd9E1a2b1ERowEaHo5Y3qr4M/7OtEAmnLtNsY4bCTAQhQTkE9Zk1EIrZLRiSqbNBJ940aRE5WyasjV7qj2285jWfJ87dh7BAJUqI2j+zO5JI12N/hZwAEiD3CI1vz2ekxSLl3dijh8UxhoUGZDYzLGYsJqIjVuiOatWJVmh65kKLeg2U9nXB6ztgXJvOcBzmB3C+yTS7dSYVzDGpBqisX6IqcACfjAY9mqqROitJPJwfJEE5Wy1vyNRLm3b2FILtDqJTV2biGeVl6xBwY6UvbL5bsQjbn5Sjt/1SKXig/uvUlPh9dArdNWubHIwzcDdw9fh8ccs9eJxiYiV7kgPA9fg56wZRvL++r1YAk6Ge3IoxhMLgjY9iGgXJpe4R4NMJyA99exsatONGgATx0Lq8zQjjx86Mxe++2eXLazU/KWa1yuPECF2qiOhVjkYX/fiMM3gxFODqzzYzW48nG9HA1KxzG3kNabjLPWrr7AHTM1aABbtsHcgrWhyNewjulJB/C+BuSCYMnRwHLpV5xAXzLZlkurrnyCaE13E9Ewhw/hlRlqRB7AKJ1p713Q6HEFE4ylRtLWWcf8o24Yo8eVZnmtCVwXBt+Vk4NwGqh1u1pZd2fvS5/S6UpVDhgIGh5+vdWh0e4O3q9YXC+sHXcyau9mHaKaQIvDzyTjZJKx4It3gNyCEDCVcqBOdDaFBY08Oi31nXUTkI5RZEhlhhoLkX3egqNh9aUNx+TKdfct1Bx0LOOv+71y6XEjD592JyZwXRh8R04uzMnY2FbRg3YXwzF4zHF7nWjUIe95hcENq92DJTBFEWA362i4XfQdR1u2sGgA21sdyS1AOIeg2I7KJJROWNSJhsEf6YnUL1tYJbbVTdWCPJ70vGxcSseWLTCHH3n4ZuE6gKBFBYy/YgfslAmBtnHDmIkr3R2Q41An424k0liIlGxO4bY/hw/WWI6zEIFeGeuIV6hnWMfqyhqAngC3wgC9BmqBKYpxeiL1ZAuyWW2MsdTwol0pHZ39MeOUS9f0nAoTuC4MvusAgpZylett2p0AZYYBkkMw5H31zvYMQemD7mZ1NKzectmlrONNRs1kstNYNsvq+3lgrHyMdvVQ2znyAP8zd3N7XVm10TMSRW+5nPJEibQ6d0B38Q6ySEoZKLfgvHj7dMxMxknFx6DnNJ0KRx1LT0OnqRoPemCsYorIwzcLZ06uqH5r1CJDwFKrnleoR+lMjXg5IR02EnQ36xgefiwmmB6nn47GbtZebsGJagKNOulkL3rRRm1LlRcmM56XuSaTIZxyPs1k8nb/0Z7DsulWXAVZvFs16DT0N6qNoWNCKB3bCZxb8Hcqej2RxhzLsRkBEd/7jBBxXRj8kd2sEGiTB+zRL1rodQv0D2sLmb4+5f2y6Z7TGsTLCcBHA6MeqwaHDxMYVs2a8rHHMjsGvxrEK3SjDX36D41VQRSkcZp9tOewbJoGP1DSVnPT1UiDsgByqdclxuPKfcayXLd6IjlRTaBVTLEzllxF3zJWEzBi8IUQbxZCPCmEOCuEeI/D8z8qhFgTQjxo/fyYic/VxcCReDbSejymrZCBBtF+T60uhg4JJA3Dar8u0EIUYMs74MxJa3Dl05kxva9xdkCCdmXT2HJp8r6O1UOgvXgHkk1716hDJQxoGdaCZfTCiDwcN0P2y+XDlU+P41QE2DE9rodvRx6BurLuUx8dMHAAihAiDrwXeBNwEbhfCPFxKeVjQ5f+sZTyJyf9vHHgyMnFEypj79uKeIxw235Pe8K7YKRPuQ2NyZhJqpN/Ai1Eut6XUzIZBjcSeXgj09lEMLladdVrfx8mY7XZCXaCmXYy2cGwauZjeot3UMOqQQMMHO3Zj8zM3qLhgnRClbIGi24Dti9w8qS7LcWVJ7Our5/OJIMlk+0zpsfZDGnLBVpj2epI6q0u2WEazQ371EcHzHj4rwTOSinPSSmbwAeAdxh4XyNw5eRAhVE+dfhjeV/1bWXsY94Drnhfp8moV3USmMcMMBkHjl3syTUDsqOMswcCUycBKmHAhWoCLQ4fghpWf9632e5Sa3WcozUt6kTpQLBobVOLBhjpehpALrCionE8fI1KsJhQvYRG5ALz9Jx9xvQkdCb45vyme2MZcF7uQx8dMGPwl4ELff9ftB4bxvcLIR4SQnxICOF+MKRh2JzcuGHtnpEIMBnr21oJGFdKR3syJoLJFWA3q6OR0KUoMskxvULdgynGMxLTYxnWABUnObex9KGaxlqI9DplOka3Pbl0uPIxF2/N1sgjuQVtGixgFBnwpDfXEltNpyLwYvQC8vB18D+AG6WULwU+C/yu24VCiHuFEKeFEKfX1tYm/mDXTUSgebrUmJSOhsF3TCZDoORoYH5V82xW1wUStAxYsJxHSf32KzH02qyjI1dQ6kRKayx95HLzCkGrzHAsHdOkAUZOeuvJFYArD5S0DZBMdpSrqH5rOhXaXLmmXCYoHRgjitwnDt+EwV9h8Cj3Y9ZjPUgpN6SUDevf3wZe4fZmUsr3SSnvkVLes7i4OLFwrok+0OTKYyTjIjilo+Phu3pfRa3zYwNPxh7VpLOb1YVqst/HAzNZ1b623tJsX2u/37iGNWgCXveetarQbfuO5Z6OjedUZJJxUolYcBrAx3j12m+7yWVz5R4IHEVWN1U/HA/+HVzKWG25QGssO90AJ5hp65iLU5HMQiypH63pjmW7qfp5vYA8/PuBW4QQJ4UQKeBdwMf7LxBCHOn79+3A4wY+Vwuu5V+gtSVfCBG81Kpe8jUS7U6XStON9w1QdRJC5OGeTC6q374VRAF5zN5k9E9AppxyC/GEavnsJ1fQcFtXLrdyUfu12lx5EKqp5EtPNNrqaE/XKBLC4cq1N9C5LEQacoU3luq8hYGeSKByJRrRWmBKp5fzeIEYfCllG/hJ4M9QhvyDUspHhRC/KIR4u3XZPxdCPCqE+Cbwz4EfnfRzdeHYLdCGxiEo9mtNUzp7RsJL6b1lm84mgvHRJqgm+3085QqY97AXNo3J6CiX/Vq/+5UJKpf+QtT//iNyadFziYDUiUaJoZ9coF1maFIucNmZPCBXyVuuTEBPWnMs1d6YoZ5I/bL5UjqWs6OrY7bB94k8TGHiskwAKeWngE8NPfbzfX//DPAzJj4rKHqcnFtCrbGjSrY8KmoK2YBJSB2D70U1aVad2AuRlHI0+TWmXODFr4ZUV65ZxupKNdmyaSdtzRsJcPHwNTqMKtkCRGs9GmDMEkMIxpUH0THNBKSrUxFggxOMs3j7lUq7RB62bL57FwJy+L09O0W96yfEgd9p69gL30aAzLv2AHa7SlknMRKh8Zj+ctm87yRyBU5C1rchNaWoGQ841rr3y+ZjJLLJOMm4GIMGKHrL5bY/wJarXVd7DTwQiJ4LQE94ytX/Xi6w23Dv6rbhnjR/pbt3IRtwU1h9G+Ip1UPIA64LEWhFa6lEjGwyblzHTOHAG3z7DNSRel/YW1U1wjTtydgsA3LCyajJ4Y/jSfvItdtojx67aCORUYkr3wXSDmvNyQUeJYag34MlkGHVo5q2ay1S8RjphMN00nQqpoNEkZpeoZazY7qUVWMs7Z5I7oZVv7IpsI757ltwoZpAO1qbCUKDaS7epnDgDb5rLxHYu8kam6/MJyBddrP2v1Zb6c1NRtddtmAlrvT7/OgbidJkVBPoJ0cDGdbS3nt7yWUluZ11rGi9l0Gnwu7No0GBgV8UWfKRa0zD6gHPUmlbtjBoQ83IwzuK1NGxAJVNmjpmCgfe4PuGaKAV1u7UNGt+TfC+2l5hgLC221HRh2+7Bw+5bNnC8r584DsZNZKj00GqTnR5X6c+Ov1ygRYnbedj9OXaH0oHNHWs01Y6puvsTKRjY1A6ulGkp1Oh10tKWy5bZ33mpSkceIM/cm5mPwJ40s1Ol3pLo1954MnoYChSBUAE2AWsoVwNfXpCyTW+0vfqyoMovU5uwel4wwG5NDYSBfGk69uKxkqkPS/z1jHdLflJ2l1JTWfvgq5TUfWo0tHmys3rmOdCZL/eR65EPEY+Fdf3pDV0zJbNXceK0KqY3R9j65hP+21TOPAG37XeF8bgMTUGMYCHn4wLssM15aA2RmnwhYFK00yUGNqvD4PH9JGr0uzQ6UpvfrXb9u3zE3gymog87PfykisIPRegjDVrLb6usmnrmI5cwaJbTx3TjNYCjaWPF91od6i3fHILoBWtmZTLJA68wd+pe1V2FNVvvyPogng5AQzrdMaF97Vfb9L7MkE1acoFypMOFG5Pwkfbctnv5YFAvfq1y1hdNqoFkGs8p0KnG6tH5ZNGk75AlE5Ap8JxD4r9etN9frRKpTWoJtDIewTh8PV0zBQOvsH3CrdTU6q3jMkywwC7M10Vy369b81vgAqKnlfox0fbSj/ZZNTuV97rVzPBvgVbLghUV+6LQBvVfKJIk50869tKb1NTGnJNpmNTmQAVV7qUjt9Y6u5dCFrKasLZAc2KqxbdrjkdM4UDb/A9lV6XOglSERBkE5HvZPRWrGQ8Ri6lWfMb0Psq7Bel09wF2TVDNYGWJ93sdGm0NfMxmvsWXOVK5lTfetNOhVaJoYdcoDWW8ZigkNbcBRywFYXnWOrsXdDdad6qq/fTrh7yWIhAK4qUEnabmjRYZPDNoHcG6oReTqBdfTY9odEL37UsTVMuWzbTlE4h7XDsYr9c7Rq0G87PW9D2voxRTUXr/Qx2zNSYjLVWh3ZXuutY4FJWTU9aOwE5me7bsgVyKjQqwRzPW+iXC/Q86VAijwlzfoF0TG8sTeFAG3zfagDQOwQlSAlYkPYFJiaj7rF9ASoofOUCLU9a737pyqVBNWnIFZiTnnQhsmUz2YNFM9FngtKBAPRcgMXbW8eKg+/nJpe2U2HrWNFXLpg8TxSoXDry8M3Bc6ehjTCSo7pbyz3Dbd0eLJoJIm3vyy+3UBx8PxfMZDX7lRurHtIvfwQNT1o7t+BDT4AWPReOjrWNRJHTmSCUjvDXsbpGdAta96zcaNPx48pNUk06cgWquNr2zauZxIE2+Ka8L5sr11Z6Ld7Xo3rIlquxo3rzeEB7k0d9W9X3m6Ca7PfzkUurz49mxcl2L7fgIpv2aVyannS7rvrFa/K+3mPpv3gHzsf4yNXtSu/uoqDeo9Pw5coD0Yaa5y34ygXa1XNlv3nZ282qt+nQ1eFJTaGzP0bbqWjV1f2PPHwz0KJ0AlAnepOx5DuAdp9y75K5GUBqVwT4y2WQagLtyeh7z3oGv+gr11Q6QcLt8PFkRm1gMUXpBNzc5LoQ2e9hkp6r7/jer92mOtrTDD0XwODrRh5+C6SOXLqLd4Ao0vG8BRuxmNbibVrHTOJgG3w/GgDQOQQFAlInpnhf+/08EMj70ggdPbeWB5BL28vRnow+9IT9Hvstl5aHr8uVB9ExTW/VT/ft9/OSS/eMYs0EpFb1kI5cIYylp1z2e5hK2mo6OyZxXRh878lY1NourV1mGKSmXEfpNU6XKjfa/jW/JnaN9stlaueobm7BL/KwZdM4Q0DJpTkZ/c7/9aMBQOmYzs5RHQ9fs1+Nb4sMCFRmuNto0+74lLIG2rdgxtmx389Xrv73dYHvRjX7PXzGspBJIITG/pgXqocvhHizEOJJIcRZIcR7HJ5PCyH+2Hr+PiHEjSY+1w++lR0QyID5KpZmL3xtqklHLqvmt+zXr1xjMvaOXTRwv7QnY2Nb1aonUp6XufZPH5bNRy67X7mpybiX6PO4Z+lptd+g4/2ZWjtHtUsMDeq+9R5lnXvmE3l4nrNrI5mDWMKcJ93YUe+XzHle5pvzAOUA+MgViwmm0ho9mxovQIMvhIgD7wXeAtwO/KAQ4vahy/4xsCWlvBn4v4BfnfRzdbBda5FJxkgnPBKVQXhMP+9Ltxe+TvWQdhIygNL7yFX2OpvVRu8wZz0joeVJa3qFvuG29ulSiR737ikXaHnS+VTcPbfQ/x4m8jFBG5RpRZGaOqZDnfjIVWl21HkLXnLZexc0u8Vqy+W3UU1Hx4LkYw4oh/9K4KyU8pyUsgl8AHjH0DXvAH7X+vtDwHcKrfPSJoP2AIJWEtJYckiX9+1/TxcE4jE1+9X4TsZsUX8hMiAXqMVIK9w2lRzV7oWvGXn0v6erXBocfoDNTWAuT6Tec/IoUksuWzaTlI7mvgUTUSRoLt6aY2kSJgz+MnCh7/+L1mOO11iHnm8D805vJoS4VwhxWghxem1tbSLBfLlC2Ds1SGPzlW9/jIC7Rk1tcAKfyahbU65DNdmy+chV0N2sZmrfgqZcEHAymkr09b+nh1zl56WOaRjWblcritSSC7SitXwqQUyYWYjA6m/lWxjg33AOrEPpDTmIJvG8S9pKKd8npbxHSnnP4uLiRO+lnegDba7csz+GvWhoejmepXwBKR3Pyajdr0aDagItw5qIxywec/LJ2OlKyg2ffQuacoEmV17fVv3iffqU++6nsOUCX0Nhnx9b8dKxALkFIaDgdLSnjaD0nNci2dhBj87UiCJBayxjMUFBK1rT3RsToDDAxP6Y+ra6/8ms93UGYcLgrwDH+/4/Zj3meI0QIgHMABsGPtsTWh5+UOrEaxADTEbf3EI8oTZK6YbbXkqv3SnTCrdzpnhMjR2aGpNxt5d815Cr09Q4MNzMQgQ+5y305DK4eOu2oqipfQsxt55IoN/nRydPpJ1b0MgT2e+juXibyBPZPZH07IWh/TGauQWTMGHw7wduEUKcFEKkgHcBHx+65uPAu62/3wl8Xmr1p50M2rXbYGgy6m/w8FUs+31MNAMLSgOYpE58J2OAqiadcBvMJOBN1ZSDWXpOc2dyMB0zwJUHppoM5WN0ejZp5RY0WmTYcoFWu2sTum8aExt8i5P/SeDPgMeBD0opHxVC/KIQ4u3WZe8H5oUQZ4H/BRgp3QwDWpROMmeFtSXPy7QaIgVQel/Fst/HRy6tmt8ACxFoetI+OQ/7fTzvl2ZuQZv3DdLnp6bBlevmFkxFkTqJ7iD7FrR1zFuuXCpOPCb05NpHSsd+H3+DHyS34LMQBaBaK80OLa+9C5o6ZhI+304PUspPAZ8aeuzn+/6uAz9g4rMCyKSX6NMMa7UqFUxuIgJ0tnFr1fwGKOWLxwT5lHe/nSCTcaVUc7+gVbP61RjYNWrLBVqT0ebKXfv+a0zGrpVb8B1L+4xiDRoANKI1rfbbGlVNoKVjQgh/GiyA7oNP/gqsDZFVtSEy7n5/Z7JJVsserbo7LbWxUqN1BxjUsb6y5PkplzORNXe/m8TzLmlrCuVGm67U4AohGI/p5+XoTkY/hdeUy5ZNK/Lw2TW6bTVO862YzcyYabplsoy1/320k5A+Bsxv30LD6lfjN5aaB+1oUScBeuGb0n1bNlPRrWdPpJ5ceufH+ta76+avgpSLgra98Nysdg08/ANr8LUHEPQMvq73pcv7GpyMdjmfp1z2+3nJ5dfUql+u/vd1lcsn8gggl/1+enKVPC/rGVavzVca3pc2BWbLpu1U+BgJ3ZpyQ5QOaOQ9guiYrrMDWlSrt1wlPbmClCSDVsUVaFDAkcE3A23eF7QOQSmkLa7chME3mFADVfPrrVgl6/38w209uYrW+/obMM9+5QE9fO3JqNtPx8+AmdjN2i+bz/3SOj/WZG6hJ5dOXblmtGaMztTfFFZvdWm0XdpwB3UqTBV5aFXPRQbfGLSTMKBf85v2OUNTt9633tY3Eo0dldz0gAprveTaUa2DEy5cogWtnIctF2hTFK7RRy+3UPR8n+1aCyFgKmUooeYXrWn2KbfvuamKq3hMUMj4Ld7+OtbriaQ7lppHVvrKlSqocmIPBFqI7Pf1kssvtxawesg1p2MjQMO5/vcdQbup7ntk8M0g+GTU8KRzGkrvM4CVZodOV+ovRLKrNk55yaUTbpuqKbflst/XA6Ym405NnbPrWVMO2huJfCej6RJD0EqOgkbbBx2qqVfrriNX0Xpf/7413s6OXm4hENUEk49lgPNss8k4qYSPSYwn1EEok5bYajo7pnGADb5ZDh90EkQ69b4BaQD7fb3k0kmoaW8tDyJXyfMyf8Nqvd6XBmj7bwaD4BuJ3AxYz+AXfeQyS+mAJnViqrzWlst+Xw/47qnQOPgHVBJTe07C5PRcANpQSy5Q+jppw7lr0FYBDrDBD8ThZ4paVSd63pehihMIVPNb9ar51a3s0M4tFDXl8tmSH8DD1zKq9nv5yGXvXZjUwzedtFXv5VH+KKXWWAZeiEBLxxrtLvWWB1euUWLo2xrZhjY955P30M0t6JaxgvbehURMTOzsmMaBNfg79RYxHd4XAnmsrgOo2zyqat77mtFReh/Fqrc6NNrdkPhVD7l0+tXobiKyZZt070KAFhm+/Wr65dLsweK6QAbsiaQVFfUMa8lbLr8kpIazY/dE0hrL1BSImBl6TsSs82jdYVrHhBDeUVHk4ZuF3erUl/eFgGWGXpyc1DISYJ7S6X/vEQSqONEwXsmMMtQmJqNW5BHU+5rwdCnNgym0cwtgGVZpnZngDk+nQtNb1W6RAYG5ck8D5rdvIUh0q7l3QYue0zxYXcvZgWD0nC9tGBl8I9BODoE2RaE1GbVpAIPJUb9+Olq8r2aDsn7ZJi1NC5Do0+ZXNZOjnlx5EKopyP3qf28XmPAK98pYTeqY3VpkAqciTB2b1KkIwuFrtkie9qq4igy+WWjz0RDIsNZaHZpth7A86GTU8r6KWnLZobu7cu1o1eBD0MlY8rwkb/VgmdjDNxxug0+0FmAsA8nV/94umMl69GAJ6lSEEkU6jGXg3II5rjxjVdZMbPB1N4RpygV+i7de9ZBpHFiDH8gr1DwExTasjkofuN5Xs5QP/EvmvCoCNGvKA9EAoM9jevVg0Uj0tTpdqs1OKOG250IUT6m9Cx4ITDXZ7+0B2+g4bsnXNBLbtRaJmCDn1xMJIJUHEZ+M0tHMLQQqpAAz9JxGFNntSsq6G8J6cm3774/xi9ZEXN3/fURk8EE7aetJnQTY0afVSwRU06hkTrv80dGwBvQKA92zSbfka/G+mjsg++XS3EjkKVd62rdP+Xg6NkEDtSCRRzbp3xMJzPTE166ECUfHPHeaa+2Nafufszssl+z47o/x1bGMv46ZxgE2+AG8r6AlYI7eVxAaIECTUi0e06N1s+YGj14yOYjHqtEi2deTNln6CHvf0+/ISj/vyzjVZGCHZgCnIrCOaR8YPpnuq/cKwamYILcQaAMdQHZW/fZjBCy5HI/+uAZtFeAAG3ztnh2gqk4SmX2ajAHkst/Px8PPJlXNryfVpOl9aRuw7KyvXPb7TWJYt4N6hbk59bu25XmZL1euuW8h8EI0CVeuO5ZBEpCgZVjTiTiZZGwi3d+jDQ1z5b6etGYZqzYFbBt8bx2bziZodrrUW+PrmGlMZPCFEHNCiM8KIZ6yfs+6XNcRQjxo/QyfhmUcdSuxGkzpi2YoHVPNo2xkZ309CSGEuyet2y2w1iKdiJFJavC+Pbm2/OvK3cJt3X41Qb1C3cnoyZX7T8ZA/WrATA+Wxrai+BIpz/cIVGIIwQyro47ptiBuq70xOvsWbLmaZeh4H0fpqvudtnq9yUIKgKztVGx6XuaZW3shGnzUyVWfk1LeAnwO95OsalLKu6yft7tcYwyBE5CgpfS+Hr5GL/ztmubGExu2YfWBK0URkPfVRm5OJep0jnpzMqraPU4C7FsA7cnoWdmktW8hQL8a0O/B0nMqXBYijZ2ZgXYmg3Ypq2s+JkArCu3cQv/7adBNjrofoI+Oeh+zToVnoltz97tpTGrw3wH8rvX37wLfO+H7GUHg5BBMXlceiAYIwK9m5/QNvmdlh8bW8iC8r7Yn7bMQ+RzKEqimPKBc4BGtmTYSoAyYBg0AE+pYPUD+CiavbLINqwZtGNjZAaj6LN6W7o9w5QEPVg9EZ2rINe3nIL4ADf6SlPKy9fcVYMnluowQ4rQQ4m+EEN874Wf6IjDvC5o8ZoxU3IPHNJ3oA1Uy6qNY4LHJIwC/GphqAv+wNuvSgyWMmvJ+uTQno7NhNdyvxkbOP1rLJuMk4y57FzR1LDilU9RzKtxKbDXPWwhU1QTa+ZjpTJJOV1Jpjqdjge1FUA/fdfEu6n2eQfi6AUKIvwAOOzz1s/3/SCmlEMKtMPUGKeWKEOIU8HkhxMNSyqddPu9e4F6AEydO+InniMD1vqAM68ZZz0v2+mOMx/t2u5JdnTNQ+5GbU2WGrZpq/+uC6WySlS2H82Pr2xBLKO7XAzv1FnN5b254AFnNydin9AP5Ac3cQqCacoB0QX1fzck4YljbDa0+5YF3jYJFz3kvRGrvggdXnpv3fL2dvwq2EM1Bu66lY+fWK85y6Zy3EDTy0OXK+6iTgfxAQKdiSjfCTWbUfNLME43oWKetSjr3uXEaaHj4Uso3SinvdPj5GHBVCHEEwPq96vIeK9bvc8BfAnd7fN77pJT3SCnvWVxcHOMrBexIaSPIDs0xw+1yXZ2BGkguTcPq2hPf5gp9eNPxw209pR9ZJMOoKQf1PTXyHq5cuebmprF0LDunFa25J+D9N6oFTnLbcoEWdTJRdBtYx4racoGDYQ1QSFFIJ4jr9ETqyaahY277YzSppjAwKaXzceDd1t/vBj42fIEQYlYIkbb+XgBeBzw24ed6wu5IOZbB99k959qDxXSDMhu6FIV1ItEIj6mb6AvqfQUofwSnyaiftA10v0DLk3bdu6CZgAxcuw3qnvnIBVBwzceEUGII+vScFXk4cuWa5+yGRemAQz4myL6FIHKBVm7NXa6SllxhYFKD/yvAm4QQTwFvtP5HCHGPEOK3rWteDJwWQnwT+ALwK1LKcA2+pfRa7Qts9HbPOYSsffBMQpreWg6BDGurI0drfjXkklIGn4y9DU76lM6IXGA+twBak9HmyseVy9YB3yPxnOTybZHsUHUipdbiHbjWHfZ0zDfvkaArcebKdfNXQcYyPaNaG0+8ePvrWCBbAdY52N46lkrEyCbjY8sVBgJ+y0FIKTeA73R4/DTwY9bfXwVeMsnnBMVOvUU+FSep077ARn+vk7R77+yZbJLzG0OLgmYv/JIVeczmgnDlusnRPaXP9vPdGpOxah27GMh4xRPK+PiVP7qVpvVyC+6cMajvUwxyv0Dds52Lnpe4cuWaCchSrUUyLsjr5hagr5R1e29cHTDjlI9p16Hb2qM5XDARpaM5ltsjXLl/c75Gu0O91Q22EMViyrHQpHRGoqL6NiC0qoeKOmcH9CM7C2tP+l7mSLVeo8ZpcEB32gb2VqFvJ2TJ8zLHsz01e+GXak2AYMqlmxx12+ShMRltD2R2HKWfJNzWyC1s11oUA3v4s765BXDhpDW9r1K1xUw2pZ9bgECJ7rEjIsupCHTPdD18v7H0wFhUky3b2Dq2o9ULv1RrUswGdCo05AKXjYfX0MM/sAY/MA0QoEXyCI8ZwEhAwMkYoBYZxpuMW9Wm9R5jeNIaNAC4eF8aCl+qNoN7X5qT0ZEr16YBxpBLM9FtL0SOOubjrZaqtlMRYsXVsI5pcPhjyWXL5hN5FNyqYbR1bEwPv7bl3zEz41DV19Ox52GVzgsRgfvVgLbBn8kmaXcl1X4eM2gvkSCypXKq5E2zNM1Z6YvectkLUQiG1bUHiwYf3e3KMT38IrQqGh0zHbjyAIt3YLlyetTJdMYhH6OZTC6Nw+Frlhl6VsP4Rrdj6piGU5GIx9SRlU5RkY9RlVJSqrX0joMclqvb8u2Y6Uzp6C3eYeBAGvzxKB1ND98pCaltJJpkk3H9fjU2NJKQjps8Om1l+Py8r0kmo0bViTNXvu3LR5frqm3tzDgcPuiVsrrmFrz3LYznFeonR2FcHVMJSK3228Oy6VI6/VFRu6HyC345j150Ow51UvK9zHFTmIZTUW91aba7weUKEBU5Uzr+uYUwcCANfqDTrmwEaHkKQ15OEK8wqJGwZRun3t2u9/UxrGNPRs22D65cuW7OY5wqHRifK9fMLQSmwDQ9/Ml0rBmsKKAnm34p68Ai2UtAFn3lgnGcCr1SVlfD6qf7lo6Nlb+C8Z2KjH9uIQwcSIMf6DxbG7o98Z027OhOxnEWItBLXDkaiZKmXONOxlm1QPp2zPQwrF5yjUs1Bch7jHDlmk2txsotZGYAMV4SMoCOje9U+HHlDjqm2Uen175gnLFs7kK76XnZuDq2VQlXx6YzCcqNNt3uUD7mGiRs4QAafCkl//KNt/LG2w8Fe2E8AamCdnOrcbyv7bE9/KKvl5OMx8il4mMZie1qwNbIPblmAanRVtol3A6L9w2wYceRK/eRq9lWrZEDRx6xuHrvcZpuaSb6VPXQODrm70nHY4LCMFeuW8ZabfVeHwi5ST1pPWdn/GjN3xGTEsqNIQcxMvhmIITgf3r9KV5700LwF+fmoLrheYljNYxuBcU45V+gvSXf3m07IldYVFOATWEDcmn2qylNUj2kIZcrV67prY59z3T3LgzLpXHO7lj7Fmy5dHRseCy1I48mM0FaZNgI0Ht+YE729sYUPV83dsGCto652Itr0DgNDqDBnwi5eV+D71jvrtkLfyIOX6MEbKQiwM5HaEzG8RYifaUfvF96vO/YhlVzs5ojV14r+fK+27ZXOI5h1UqOOuRjNHMLpWozeORhy1Uv6dFzA3LpUTpbkzoVGonugWSy9t6YcHVs2okGizz85wnyC1Bd97zEseZXwyscu/wLlNJrlICpgyCC5xa2qmPKFaSxW621x2MG3LcQmKJITUEsOT5XrnG/YIxEH2h5+K6UjkY31u1xOfz+XcBesmWGKZ0AdOZYC5E+pbPbaNO2j6wMvDcm4OKdSEMyr13kMXLPIoP/PEBuQb/md9iw+niFY5d/QaDdtuPmFsYyXgEau6keLO1AcpWqagt/oBYZoN8xc0zDOraRAMvD95bLMR+jkUy2y1jHonQCdMwckQs0WlE0J5NL05PuHVkZgGpKJWJkkmOYQi0d84jWrgEig9+P3BxUvD18cOCk6yWNDTFjVsJAwJN/hoyXiCmP10e2cCmdod22AaqHxkpA2rJp92Cx7lkvt1D0lmvcEkNbLq3DRhzGMqwyVgiUhBzNXwlV8OAl27gevialM0LPBYw8AucWQG+n+XAUqXnObliIDH4/8gtqwvt0zCw4hbVhtFWwMclk1OJ9J6geQuhz5dUxJuM4coFmD5Yh7yvoCUnjUifNsm+Z4ahT4U8bjl3GCvqbwjJD7Sg0+9Vsj0sbJnMqWR20K2vYBQugKoj8ijxyQ3Jdw174EBn8QdinCfklbocNq0air8dHTzQZ/eUaqPnVWIjqrQ6Ndnc8uWJx5eX4REUjie6wa8pBjaWfXK5eYdFbrnFLDCFQVBSUBhg7AQmBNoWNcOU+crU6XcqN9nhRpBBaJaPjLt5jR7cA+UXfnN9UKoEQwXUsLEQGvx85q5TTx1A4el+aJYZjKVfeksu3gigxWPMbNh9ty+aj9O6G1f+eTSRXZc3zkhGu3JZLY3fmWCWGEMiwjqtjgctYIcBZwMqw9rjyhn431omiNT9KJzeujo0ZeYCyFxXvORmLDbXhvoadMiEy+IPoefj+YW1P4XucXNHzNbb3NZsfk/cVMV8DNlLzG4T3HVfp84taC+SIXBr9arbHrWqy5aptQrfjedlAolu3jHVcPhr0o8h+Dr/XryaknclgUX8ah404RWthygXjlUtr9qsZqzmfjfyCqmrya9LXXzL6Qjb4QogfEEI8KoToCiHu8bjuzUKIJ4UQZ4UQ75nkM0NFz5MO4OFrcnITedKxuAprNQ3rdhCDP0luAfSok+GmWxq5BSnlhIZ1QZUZBjkLOMDB6hMtRKBFN+0tkEF1bFx6bhwd82+NvF0bszWyjfyitrMzoPs6vfAn4fC1I+9k4MgjLEzq4T8C/B3gi24XCCHiwHuBtwC3Az8ohLh9ws8NBzldrjyxx2PaBkWDBhi7/Av0lH4C72siA+YjVyHjwGP6yFVpdmh35eST0dewJoLzvpMsRD2D72/AevmYAHx0IT1Gp8x+2bSjyHFow/B0LJ+KE4+JQNFtvdWh1uqMvxAFoIAPBKUjpXxcSul3ztcrgbNSynNSyibwAeAdk3xuaMgUQcS1PdZyva3vFU5S/gUWVx6w7YPGFu6xD6bol6u2pagtF8Riwtq7EGQhmiDnYcsFvoZiIFrrjWXRW7Zxa8rBSsALDR3ry8cEqGoae+EGK+/hv0BCf9XJtn5r5Emcivq2Z2WTOrIyMRitaVZbTSQXaDliQQsWwsJ+cPjLwIW+/y9ajzlCCHGvEOK0EOL02pr3jTQOIbT4woH67QCVHWMrFmglIQc2eXRaqhe+ZmXHWBuvwFJ6GazXyX5FHuCfUB6ejPG0OhDER7ax9wfEE1Zlk/9CBNbirb1vYVId8/ekByidbldROrrVQ5Mu3hrzcnusyGM/5OrTMY29MWHB1+ALIf5CCPGIw08oXrqU8n1SynuklPcsLi6G8RHe0PCkB8LaAP1qxjYSECzcrrcC8b6peIxs0E6ZNuwkpE5YOw7VNAmHryHX9HC47SNXu9OlXG+HblgHOOn9qGrqyaWZj6nZrT6kP4dfbSLEXluS4HLpRWtBx3KiDXSB5BqiDTVyC2HBdwSklG+c8DNWgON9/x+zHnt+QiMJOeM0GX04/M1Kk5ML+QnkWtgLaxPOk3oqlSBmc+W6XmG1yUxuEqpJl5NOBOJ9N63JOJ8fl1/VW4j6ufKYzn6KXkS0T4a13tIuDNiqtjhazE4ml111kkg7XpKzufKB6Na/cdpMNkksFrKODUdr2mc5j2nwM0VVbaYxlrVWh2a7S+oatlWA/aF07gduEUKcFEKkgHcBH9+Hzx0POiVg/T3xNQ3rZqXJ3LjGC7TCx1hMMJ1NKu9Ys2XzRqU5vlEdkCtAZZOOwd9VpW6z48qmSZ30uPJ6W0+uijISE4+lLnUSZCx3G2bG0sOACSGY6elYST1o1/C7YHLd16tsCqxj1uEn81NjymZTwH5jmRtyEF+oBl8I8X1CiIvAa4BPCiH+zHr8qBDiUwBSyjbwk8CfAY8DH5RSPjqZ2CEiN+9rvOYs726r2rRqypOeNeXdrmSr2jKj9D6yzeZSe3JB+AtRgEqFUq2p3Qt/s9pCCAOetM/9spOvpVpTazJu7E4Yedhy+RgJe79GyTYSIg4p9wix1emyU28zl3f2zLXlAn/ZcpbB79GZRc/rNyqmFiJ/w1qqttTeC41mc5sV5VRMPC99HERbx7Y1dSxMjEmqKUgpPwJ8xOHxS8Bb+/7/FPCpST5r35BfUIrcaSsv0QH2AG5Vmupan5rynXqLTldOOBn1lL6YG/LwNQz+HUcnOEw5p1d1MptPsVVtIevbCPA1EpuVBsVskvi4NABo7YScswzrVrXFDfVtmDvpI5fl4Y/rFYJVdVLypOfshW6z0mckPHRsqxd5TJhbAP+xzKWUXL2SZH8PfyI6Mz2t+un46P5cLkWp2qRb21GerN/iXWkylU6QToyZvwItD98uiNisWPPSR8fCRLTTdhi5BfyqTlIJ1SJ50/akfXjfjYohrxB8J+OcPRk1Df7ENEAsbnUZ9VP6FM12l9rOppZcE0ceoEWdDCzeGl1PzXiF/vRcJhknm4yrxKJO5NEz+OE7FWrxbvZROkXP69VYTiCXEFp5j2JOteHe3bau2xcd85drdpgRuEZ9dCAy+KOYss7C3b3qedmeJ13aP94XNJQ+tWckwFM2IzQAaFEnNg1W3t7wlQsUdTI/sVz+fX569FylEciwTkw1gQY9l1ReoR1FesCMjulTOltVPQ/fpjMncipAy5O2v7uujplzKvyjW7Cdihcwh38gUTisfvsY/Ll8nyftx2HuGpiMvYoAP6VPqhOZNOp9t0zQE2BRJ3pKX93eTw9/UfVF8uinYxvunfIOdNtacs1kk8EPZRmWC7Q86ZJtWO1d4C7oRZGTjGW6oPYhaERrW9UWslZSOumhY9s1m840MZZ6OrYbyKkwYPCbZc9+OrZTUdqtWX23vCnU089u8vFvXppMLhdEBn8YPQ9/1fOyWduTDuB9TTQZhbBO5PL38GutDu3qlm+9r136ODeJtwp6Xo7FY9bKepNxq9ocv0LHhk3PeTTDK2QSxGOC2o4lvxY9YcB4gR5Xbht8H558y4SHr0mdzOYVPdeubFq7091zC0YWItBLdFt63Cjvo1OhUbSQTcVJJ2LUbLl8xvJPTl/kP3ziscnkckFk8IeR16N0ZnNJbQ7frvediAYALcNqK3Brd8PXK9w0EXn05PL3Vntywf7QABqcdCwmKGaTNHdL6oH9ogF85ALbw29pGfyNSnPyqiZbNs0kZGt3QythC6Z0TI+ea5btxdtdNimlGsuJFyK9sZzLp2hpyAVWVdPUhHSmCyKDP4z0lApR/Tz8fIpSL9HnHzrmU3Ey4+5mtRHAk+5oTEZz3tchq+rEPay1DVGnZ/DdFyNzNIC+YW1X9tErzMyoUl4drny3ru6tr2E1UNUEgTzpTmVLIyIykOS25WpVPU+jK1oVSp2KlVvwcHgqzQ7NTtdAdKtHzxVzKToVf90HNS8XJp2TLogMvhOmDml4+Ck6jYrF+xY9r92sNCb3JMCajN4LUa+pV23LV7GMeV8aeQ91YAjI2pZaUF3KEcHgQjSlmY/JpZA27aMxGSeOPHrUib+RkI1t1eZZYywnHkfQpnQA7cgDMJCAtwyrhyNWSCdIxIQay3jKc2+Mseh2asmSyy/nl6Rr61jO557tGhpLB0QG3wlTS1D2Mfj5FLOU1T8aCbWJK2H65ZLS9RJbUWL1faQBbIPvcc/iMbVDM1bb3D8aoGBNxvIVz8uKuaS6X+A5llJKtowZ1gXY9asrTzKD5dH6jaWJqiZbrsqqp47Z+hJrbPuPpWVYxzr4px89w+pu8IUQzOZTxOubaoH0zC2oyGNip6Kn+5c9LyvmUsQ1dyarUumI0tk/TC1pcfhFsav+0fC+JvYKAQpH1C5Vu+TSAXYjqERz25/DN0UD9Cajt2Gdy6WUXPtl8NPTkMhqVVwlGyX1j8dY7tTatE1QTaDumU+0NptPUcTWMf97NrFRBWXAOk3Pg2Ns2jDZLGnsslU9+ifa3GTLBb6GdTaX1NR9A/sWAJJZRdH5OIhK90vqHw8dq7c6VJqdyRciF0QG3wlTS74c/lwuxaxt8O1GXS4wFm5rUCezuRQJ2qTau/tHA/Qmo7fBn82nSLdK2gZ/Yi9HCCWbhveVbpWQ8bRn+wJjXiFYcvncr1yqz6nQ6VdjwCvUGMuZbJIYXUvHNOQycr+O+MoF6p6lW/5OhZHNkDamDvs6O7O5JJnWNlLEPHsi2XJFHP5+YuqQ6hrYqrleMptPMadB6djVAGY8fH8vJxmPsZy2kqf7RgMsqpp/38mYJNfe0Yo8wAANAJZh9edXp2UZmZ31pAGMeYWgDNjuVd89AjoevqpqMhhFgqcBS8RjHMtYh5FoVKgZcSpycyrR7RdF5lNk2/sYRYLe4p1PUaSMzMx6lkpv7NpJ7ojS2T9o8IXK+7INvruHX2l2aLS7hmgAPU/6RLZuybVPHn4srip1fL2cFPluWSsxOnGPExuaHv6s2KWd3kevsHBYJWO9dCzfRxt6jGWp1qIrDRov8NWx47aOaTkVBuQSQi1GvvmYFIWujlPRJJ2IkUuZ0jH/Io+iqNBOFz2vM1aw4ILI4DtBw+AXc0nmbIPvwWOu7qiJcWjahFeol4Q8mrYno7tcAOu7DRYKhhSroJHoziWYlmVfI7FabnCoYMjDmTqsVaVTFLs0U94lmWtl5X0tmKiR7lEU7ouR8vCtpK2HjtlyLZq4Z1P+USTAckYvilw3mYAsLPnKNZdLMC13kT5OxVq5wcJUevxzIPoxtaScHa9Et+XhN5N6OrYY1eHvIwr+SchMMs5ivEItXnDtqgn9A+h9bJ4W0gVV0uhj8I8kq+oPD6VvtrtsVVscKhiQC7S8r6VUk7iQNH28nLVygwVTBr+wpE5mapRdL7ErrmoJ/8kohCF+VcOTzqXizMUr1ON5Tx1bLasF3ojBT+WsJKT3WB5OWnSnx0LU6UrWdxtmnB3Qok4W0x1Sok0j6d2+YK1sUq4jWonuWbGrpWNgaCwdEBl8J2jW1h6KV9iNeSvWqjWARpXehzo5ZE9GD+9rzeIKzXnSS75yLSXUQlSJFTyvWzPp4fc8aa9Ed5JZUdYay/l8isQkfXRG5HL3WIUQHEpUqWrcLzA4loUjvp70oaR/FLlRadCV+yvXno75jWXdoFz+kfdsLsWMqPjq/upOnelMYvJNmi6Y9ACUHxBCPCqE6Aoh7vG47lkhxMNCiAeFEKcn+cx9QW5BKwm5EK+wLXwGMJTJ6C8X4Mlj2lSTMU+icFht2Om03eVKKLl28Fd6Y5GHRsnoXC5JkQrbPnKtlessmpJLM9G9EKuwo6tj0wbvmZ8nHVcRk/TIX63u2N6qqSjysCpJ9iimsHW/pHHPzOmYXT3nfs/mp1QUqSWXqXF0wKSuyiPA3wG+qHHtt0sp75JSui4MzxvEE8qwbnsfvTsnymxIf+8rFY9NdoB5P6b8ecz5WIW2jFEV7jsN9xYik4ZVetaW25NxXbp3V6w02lSaHYMLkX8530ysRlJ02PSQCwznFuIJlej246RjFbb85NppkEvFmUpPdJ7RHjScikWxQ0cKKnF3T9o4PaExlrZTsdlxL69ttDuUqi2DTpgGPRfrkBcNNrv7qGMOmMjgSykfl1I+aUqY5xWmj8LORe9LZJm1tvdJPqvlOosFQ8kh2KsI8EgQFSlTYor13ZaHXKapJo0kpFViuNpyP2jbPD3hH24Li3td9RvLHcOTUYOTnqHMRsd94QbD9ES/XN2u6yWz7LBFgTVPHbMKFvbRsNp7Y6603O+Z+YVIo7LJ0rG19j6P5RD2i8OXwJ8LIR4QQtzrdaEQ4l4hxGkhxOm1Ne+t56FietnXw5/qbHOllaPTdTe+a+WG2QRM4bDvbtuCLFOSU6zt1t3l2qkjhKESQ+gzrO5c+bS1b+FS093gG1+IMkXV490rv2CdbuYlV9d0AhK0POlCp8Sl1hTSY4E3r2NHoNvyPPWt0N1mQ073jKcT9igdgxVX4OlUFLo7wD7rWCoPqYL3WFr9iS55ODtSSlZ3DI/lEHwNvhDiL4QQjzj8vCPA53yLlPLlwFuAnxBCvN7tQinl+6SU90gp71lcXAzwEYYxcwx2Lrl70q06yW6dTTnV24HpBPNeoX9Ym29vsYH3ZFyzyuWMJCABCkfV7x33RTJZ26BNjIs1dxrJaMUJqPrt6aNqLN1QVd7Xhbq7XFvVJu2uNFsu57dHoN0g09nlaneG7Zq7J71mko+25QJP2XKtLTb9DH65wUw2aS4BqeFJx61jIy80PAz+jmE6Eywd83AQrUZ55+vulE650abR7pqVawi+s11K+UYp5Z0OPx/T/RAp5Yr1exV16Pkrxxd5nzC9rDxpt1Ir6yCSLQq+htWoVzhtG1Z3uild32Bdw/syuhBNLamdkNseNFhllW0xw2rFgwYIYzLOHPOWyxrLZ2s6XqFJw3pEfXa76fy85RX6Ld6rYXj44GlY080tNij0FmhnuQzTE9lZSGSg7LF4V1bZFgWu7rrvYDZeoQZQPO6j+8rgn6t55NV2DEceDgid0hFC5IVQqWkhRB74LlSy9/mNmWX1220QrZLNVVl0nYzNdpfNStNMDX5PruPqd+mC6yXx2jobzPSMlBOMG4lYTN0zL6XfXWM3XmRtx3uBTMZFr0GXERRPeN4ve4PdU9Uc7Y4zb2282gpg2jKsbp6hlQD3ok6qzTa7jbZZI9HTffd7FquuU9JYiIzKJYRFtXrp2Crl+Jy3E7ZTJyYwe8iIn1Nh6diz9Tz1lvNiZDy6dcCkZZnfJ4S4CLwG+KQQ4s+sx48KIT5lXbYEfFkI8U3ga8AnpZSfmeRz9wXTx9Rvt8loDeCah8Ff3w1hxS4cARF3n4ztJqJeopqc95mMISSHZo57Ggkqa1RT8z0Py1GunQaLpnZA9uQ6puiJjktksXuVdizDrsz0eqyMymUnIA0u3sUT6rfbPbM9fDntes/WTFdbgdKxWMJ9key0EPUS9eSsRhRpmJ4oHvdevCtr1FLeBn+13GAun568S2w/Zo6raK1ZdZWrE0uyQ65nF4YRylgOYdIqnY9IKY9JKdNSyiUp5Xdbj1+SUr7V+vuclPJl1s8dUspfMiF46LCpE1cPXxn8dTnjOhkvb6t64SMzBgcwnlBejpvSW/REK+Nu8NudLuu7TZZM1/vO+IW1q7QyC56T8cpOzXwd8sxxQHp40ms0M/OAcI2KrppskWHDNvhuY2nRAOvMuN6zy9tKriWTcsXiliftpmMqmdvKui/e3a40u4HOhp9TsbtKK7vA2m7DNdF9ZafO4ZkQ5AJPHWullY65jeWVMMZyCNFOWzdMHVJejluyzzL4tbS7YV0pqQFcLrpzw2OheMJd6S25urlF18l4tdyg05UszxqWy8uTlhJ21+jmFthttKk2nTdoXSrVw5ELPOm5rnWWsddYLkylzO6AnD4GCCg95/y8ZfB34u6e9KWScipC0TE3uSynQubcF+/1SoNmp2t+LIs3KDq15ZI7qKzTzS7QbHfZqTvr2MpWLYT7ZRl812htDWkdeO7mVFwq1ZjOJChkDNKZQ4gMvhticVV54krpXIVMkdnClO9kPBKGcvl4hbHCIV+5joYhl+w6L5LNCrRrxArKsK6XR6kTKSUrpTAmo48nvbvWk8vd4NfM369Eytrg5zGWiSz5vDtXHtpYzvjrWDy/6H6/tiy5ZsIyrA6Ld6sGzbLnWEopuRTGWNpOhauOrRKzSpf3VceGEBl8L3glIXevwtQSC4V0L7s+jEulGjPZpLkdkD25jqtKBSdP2pqMqZkl1ncbdB32CNiTcblomjqxPWkHpbcSkKkZVVrntEdgo9Kk2e5y1CQFBoqeAM+xtOVyqzq5VKqZN17g7UlX1iG/yOJ0xtUrXCnVzEcetlzly84VRFb1TqJ4hI1K03EfyiU7ujUerdkG3+Ge7Q7qmNNY7tTUTm7jTkXhiGqV4aZjlTWSM0sI4e7hr5Tq5uUaQmTwvTB7EjafcX5udxWmDnF0JsNKybm3x8pWSCu2lydtKX1+9gitjuz11x6QKzSv0E5COii9dX5rfk5NRpt77kdo3moyo9oYOBmJThuqGySmD1PMJbmyMyqX7RUaN15gRWvnnZ/bXYX8PEdmMr180DBWSvXwdAzpXP5r1efn5o/1OmKOyqWSl+ajSDtacxhLy9mZmlfVT1ccdCw03Y8nFSPg5OxICZU1YlOLLE6lueIylqHpWB8ig++FuVPKk3Zq1mR5+MuzWa7s1B3L+RQ9EULGfcaDL9y9Csk8SwvzPRmGcalUU6dPpUxHHpYn7RTWWjtd55aU7HaU0Y9e5BGG0ruVzVU3AAn5RZaLWS46yFWqtqg2OyEZ1hNq4XZqOle+AoWjLBezrJRqjknI0CIPr/LfncuQnubwouKkne7ZpVKdQjphroeUDbtKzUkuK/KYPeShY2EZfHDXsdqWap9s2Qun+7XbaLNda0WUzjXF3En1e+vZwcelVMo1tcSxWdVa4apDmBYKVwjeXs72RZhZ5tic2uDhpvShyJXMKk+69KyDXCoXkl+8kZls0lHpV8JKQIK6Z1sOnrS9m3RqiWOzWU8jEcriXTwB3bbzrtadizB9lOXZLPVWdyRaCzfy8NCx8iUoHOl97sWt0VLE0HTMrlJzcnasfFt6/gSLhbTLQhSijs3eMGor+uRiem/xdpMrMvjXErbB3zw3+Hh1U+3CLR7vKc6wodipt9ipt0PyJI4rL2dYLlDeomUkwHkyXgojMWpj/mbYeNpBrhVIZCE766r0K6UauVTcvFdoy1U6P5r3sCfjzDGWizkubo160rasR8Li8GGU1mnsqn5JM8scm3VevEONPKaXlY45GrDLUDi8p/tOY7lV42gYCyQow+qk+9sXIZ6C3IKnjqXiMXM9pPoxf7OSYZgRsHtyTR/j2GyOS6XaSG5tL68WGfxrh1nb4A/x+DYXPHPM1bA+u67atN44792BcSwkUkrp158afW5nBaaPMZ1JMp1JjCh9tyt5brPK8Tnvrn1jY/4mZ7msyAMhODabdVyIzm9UOTGXM7vpqifXzcqTHvby7RB85jjHZrPUWh22qoOLwvkNNZY3zIdwz+ZvVr+H75mdn5le7hmBYY/1WVuuMMbS1rENh7EsX4bpo+TTCWZzo9GalCHr2MIt6n4NU1w7K2r/TCzG8qyzwT+/UeHEfI6YyU1XNuZvAuToYmTnQWaWWZ7N0urIkcStrWPH5yKDf+2Qm1PdFocHsM9IuHn4z1gG/9RiCAYfYP4W2Dg7+Finpagmi0tfns2NTMbLO3XqrW54ci3couq0h3sQ7az0qmWWLepk2JN+Zr0S4v2yDOvwPdu+oLpp5hdcF+9n1ivM5VMUcyF4hdPHVOQzLJdtJKaXe3LZiVAb59aUjp0MbSxvhfUhubpdK7egEqPHZnMjur+222C30ebUQoi6Xy9Z+Zc+bK/0dsgfKyodG/akn1mvcDI0udx0bEXt6Zla4ljReSyfWa9QSCdCO8vWRmTw/TB3atTg2wmj4gkyyTgLU6kRb+KZ9QpCwIkwvZyNpwd7lpcvA7JnWJ046WdsIxG60g/ROtsrvbLNY7M5Kk11CIWNVqfLhc1qiHLdZMk15LFuX1RyWZEHjC7e59ZCNBKxmLpn62cGH+95+EeZySYpZBKOTkU8JsLTsfmblfHq9vV+2b0CstPbia4S3c4L0alF78M+xsbCLer3SFS00nN2js1maXa6AxVEna7k2Y1qeAvRnK1jw4v3JatdRbynY8OO2Ln1CicX8+FEt32IDL4fFm6FtScHH9u+CMlc78zYE3O5Xnht45n1CsvFbGhnUzJ/s8oj9JfNbe95haCU/sJWdcCTfmZdHRBxU1iTcd6ajP1K32kpQ2EZCVvpL/QZiotbNdpdycmFkOTKzUFu3sH7ujiwEAGc3xyi5zZCNPhgURRDBr90ARC9e3Z8Njci1zPrFU7M5UiaanE9Itet0GkMJkht52fuFIBFzw160nZ0G9o96xn8vnvWsRLfPd0fHctLpRrNdjc8udJTyrAPOztD0S0o+rIfoToVfYgMvh+W7lBVCdW+wyBK563EqVqNb10q8NTV3YGXhRo6grOX05uMKvdwanGKarMzUPN+br1CLhUP71Sd2RtVsq9frq3zat+A5QHZi03/PbMXolDvmVNCufRcrwRxJptksZAekKvSaHN1pxHyWN6q7lF/u4DNp5VcCTVONx+aGtGxp9d290nH+hZJO59l6dhNh6ZotLsDEe65tV3SiVh4CciZ44qG64/Wtp9TORprIbr5kJOOhRx5wF5U1I/Nc737lUslWC5mObu6J1e91eHSdo1TYTk7fYgMvh+W7lC/rz6699j6mb3JgFKujUqTDSt8bHe6nLla5tYl7/NuJ8LCrXuy2Ng4q3rSF28A4FZL6c9cLfcuOXO1zE2LU+GFjomUmnSrjw/KBT2658b5HKl4jDOre3I9cUX9bU/UULBwC6w+tpfsq2+rfQsLN/cuuXVpiqdWB+/XvsiFVEbexsbTezSUJddKqUaloer1W50u59YqIctl6djaE3uPbT2j+Ghrk52t409e6b9naiEKJTEKqu3J/M2Dkbe9kFvzcrmYJZuMD+i+LeNNYeU8ABZvU7pvU63NivLwh8ayX66zq7tICTcdijz8a4+lO9Vv2+B3WmrFXrytd8ktltLbq/a59Qr1Vpc7jrof8Dwx8ouq5v3yQ3uPrT+lPIm42lBlT0ZbuaSUPLKyw53LM+HJBXDkZXD5wb3/ewZfKX0iHuPUYp4zfUbi0ZUdjs9lwynJ7Ml1l0r02dSX7bnahg245ZCK1myK4pEVdZRkqPfM1rHL31S/pbQM/t5CdPOhQR07c7VMs9MNV678gto92j+Wm+csD1vp2C1LllOx2q9j27xkP3Ts0jf2Fm87orTuWSwmuGVpasCTfuTSNkdnMmb74DvJ1dhRCyPsLUR9Y3nLUoFz65XeZs2ejh0N+Z4RGXx/FJaUcb1iGdbNcyp0XNgz+LdZhvXxy+o8zX0xEkLA0buV0tvYODugWLP5FIuFNE9eUUp/cavGdq3FncshLkSg5NpZ6bV5YP0MZOcUj27hlqUCZ64OTsbQFf7o3eq3bcDWLQ+xz+DfulSg1ur0kmqPrOwwm0ua7+/Tj4VbIDUFK19X/1fWoLE94hUCPGkt3o+uKF27M0ynAkZ1bPWJgfs1nUlyZCbTW7wvb9fZqDR5ybGQx3L55eo+2Yv3xlOQmVF5Ggu3HCrwxJVyL4f1yMo2d4S+EN2lftv3bGNwIVJyTdFsd3nW4vEfXtmmkEmEU/Y7hMjg6+D4q+DZL6u/rzysfh96ce/pwzMZjs5kuP+8KkX8xnMlcql4eNUANo7erYxWY1eFjutn4PBLBi658+g0D15Qcj14oQQQvvdlG1Zb6S8/OCLXS5anWSnVWN2ps1Vpcn6jGn7ksXSHoiNsuVYfUxt1Zm/sXfJSy1B9/Tl1z755scSdyzPhVk/E4spQXLIM/qUH1e/DL+1dcuN8nplskq/bOnahRCGdCGefRz+W71aORK2kNhStn4EjLx245M7lGb5h6dZDF0u9x0LFsI5delDdr75xetnxGdZ3Gz1H59x6JXyn4tCLVX7Bdiouf1PRrH2L5F3HiwC9sXzo4jZ3HJ0OvUIHJj/x6j8JIZ4QQjwkhPiIEKLoct2bhRBPCiHOCiHeM8lnXhPc+K0qUVt6Di7cB8k8HLp94JJXnpzja89sIqXkK2fXedXJOXMHhLvh6N0qGXrp64rakV04+vKBS151ap6n1yqslRt85ew6hUyC24+E7BUeeZlS8me/rBKRVx+F5VcMynVSeWL3PbPJV55W/dVffWp+5K2MIplVC8/5r6r/L9yvZI3v0UgvPjJNIZPgvmc2Wd2p88SVMq+5KWS5QBnWKw8ro3rp64AYMKyxmOCeG2Z7Ovalp9Z49U3z4fHkPbmscbt4P1x9TJVkHh40+K86Ocf5jSpXtut86al18ql4+IZ16U5lWM9/FdoNde+GdOyVJ1VE+bVnNvnrp9eRkvDHMp5U8/KZL6n/V76udC6xRyPdfGiKuXyKrz27yWalySOXtnnNqYVw5bIwqUX6LHCnlPKlwBngZ4YvEELEgfcCbwFuB35QCHH78HXPa5z6NvX7qT+Hc38Fx17R4zBtvPZmdRjEB09f4Nx6hdffuhi+XDe+ThnWpz4Lz1lGbHnQ4NtG9PNPXOULT67yupsWwl+I0lNww2vV/br4NUWBHbtn4JI7jk5TSCf4whOrfP7xVQqZBC8LmwYAuPmNatHevqi8w+OvGng6HhO8+tQ8n3/iKn/22FUAXn/LPozlqW9XDbbO/RWc/4ryFNODSf/X3rzAufUKn3z4Mhe3arz+ln0wEideq0qQz3wGnv2ieuz4KwcusXXsLx6/yuefWOU1Ny2QSoSsY8kMnHy9kuvi/dBtjejYrYcKzOdTfO6Jq3zu8VWm0gnuPlEMVy6AW96kPPytZ2HlATj2twaeFkLwmpvm+cITq/z5o1eQEl5/6wvA4Esp/1xKabf5+xvgmMNlrwTOWkcdNoEPAO+Y5HP3HYsvUqv0J/+NolBe/PaRS976kiNMpRP89IcfJpWI8faXHQ1frnRBGf3HPgqPfETRAlOHBi552bEZTi7k+ekPP8zVnQbfe/dy+HIB3PYWVd3x2V9QntjJbxt4OhGP8fa7jvKn31jhT7+xwt9+2dHwFyJbLtmFP/5hVWN+65tHLvn+lx/j6k6D/+2jj3DbUiHc5LuNG78FUgW47zeU13rLm0YuefvLjpKICX7yD79BOhHjbS/dBx1LZuCm74DHPwGPfBiWXgKFwwOX3HF0mluXpvi5jz7C5e063//yfdKxF32PSo5+4l8pHTv1hoGnYzHB9969zKcevsKfPHCRt730SHh7Fvpx21vV7z/+YWhV4bZRHXvny4+xUWnynj99mFOL+R7NEzZMfvt/BHza4fFloL+13UXrMUcIIe4VQpwWQpxeW1szKN4EEAK+/efU3zMn4GXvGrlkKp3gl77vTo7PZfnFt98RbiVAP155r6Karj4Md//wyNNCCH7ue15MKh7jDbct8qbbl/ZHrrt+SG1Mu/R1db/So+WDP/5tN7FYSLNYSPOT336zw5uEgOVXwA3forz7xRerSGQIb7p9iTe+eIlCOsEvvP32feFWSaThnh+Fc3+pIqK7f2TkksVCmve85UUU0gl+7m23MxtGAzAnvPJ/UhvnrjwMLx+VSwjB//a228kklY591x2HHd4kBLz078HUksor3PWDIxERwD95/SmOzWZZmk7zz77zFoc3CQFLt6tI8srDqrjjxtePXPJtty7yPZaT+O/ffsf+6Bgg3A767V0gxF8ATiP4s1LKj1nX/CxwD/B35NAbCiHeCbxZSvlj1v8/ArxKSvmTfsLdc8898vTp01pfZF+wdV4Zscw+eHy6kBLu+6+qt8i3/psRqslGo90hFY/tm2IBirs/91fwindDyjm5WG91iAkRPgXQj8o6PPRBePHb9rpVOkBKub/3q1mFr/6a4qdf/Lb9+1wdfOP31U7W1/0rVx1rd7r7E6X1Y+NpeOav4KXvgpRzlUu700UIQTzsfEc/alvw0J8o736fdUwI8YCU8h7H5/wMvsab/yjwT4DvlFKOtEAUQrwG+HdSyu+2/v8ZACnlf/R77+edwY8QIUKE5zm8DP6kVTpvBv5X4O1Oxt7C/cAtQoiTQogU8C7g45N8boQIESJECI5J469fBwrAZ4UQDwohfhNACHFUCPEpACup+5PAnwGPAx+UUj7q9oYRIkSIECEcTHSoqZTSMdMmpbwEvLXv/08Bn5rksyJEiBAhwmSIdtpGiBAhwnWCyOBHiBAhwnWCyOBHiBAhwnWCyOBHiBAhwnWCyOBHiBAhwnWCiTdehQkhxBpwfsyXLwDrBsV5ISD6zgcf19v3heg7B8UNUkrHjn/Pa4M/CYQQp912mx1URN/54ON6+74QfWeTiCidCBEiRLhOEBn8CBEiRLhOcJAN/vuutQDXANF3Pvi43r4vRN/ZGA4shx8hQoQIEQZxkD38CBEiRIjQh8jgR4gQIcJ1ggNn8IUQbxZCPCmEOCuEeM+1licMCCF+RwixKoR4pO+xOSHEZ4UQT1m/Z6+ljKYhhDguhPiCEOIxIcSjQoh/YT1+YL+3ECIjhPiaEOKb1nf+99bjJ4UQ91k6/sfWORMHCkKIuBDiG0KIT1j/H+jvLIR4VgjxsNVm/rT1mHHdPlAGXwgRB94LvAW4HfhBIcTt11aqUPDfgOGTkd8DfE5KeQvwOev/g4Q28K+llLcDrwZ+whrbg/y9G8B3SClfBtwFvFkI8WrgV4H/y2pPvgX842snYmj4F6jzM2xcD9/526WUd/XV3xvX7QNl8IFXAmellOeklE3gA8A7rrFMxiGl/CKwOfTwO4Dftf7+XeB791OmsCGlvCyl/Lr1dxllDJY5wN9bKuxa/yatHwl8B/Ah6/ED9Z0BhBDHgO8Bftv6X3DAv7MLjOv2QTP4y8CFvv8vWo9dD1iSUl62/r4CLF1LYcKEEOJG4G7gPg7497aojQeBVeCzwNNAyTpJDg6mjv/fqKNTu9b/8xz87yyBPxdCPCCEuNd6zLhuT3TiVYTnJ6SUUghxIOtthRBTwIeBfyml3FHOn8JB/N5Syg5wlxCiCHwEeNG1lShcCCHeBqxKKR8QQrzhGouzn/gWKeWKEOIQ6sjYJ/qfNKXbB83DXwGO9/1/zHrsesBVIcQRAOv36jWWxziEEEmUsf8DKeWfWg8f+O8NIKUsAV8AXgMUhRC2s3bQdPx1wNuFEM+iKNnvAP4LB/s7I6VcsX6vohb2VxKCbh80g38/cIuV0U8B7wI+fo1l2i98HHi39fe7gY9dQ1mMw+Jx3w88LqX8z31PHdjvLYRYtDx7hBBZ4E2o3MUXgHdalx2o7yyl/Bkp5TEp5Y2o+ft5KeXf5wB/ZyFEXghRsP8Gvgt4hBB0+8DttBVCvBXFAcaB35FS/tK1lcg8hBB/BLwB1UL1KvALwEeBDwInUC2l/66Ucjix+4KFEOJbgC8BD7PH7f5bFI9/IL+3EOKlqGRdHOWcfVBK+YtCiFMo73cO+Abww1LKxrWTNBxYlM6/kVK+7SB/Z+u7fcT6NwH8oZTyl4QQ8xjW7QNn8CNEiBAhgjMOGqUTIUKECBFcEBn8CBEiRLhOEBn8CBEiRLhOEBn8CBEiRLhOEBn8CBEiRLhOEBn8CBEiRLhOEBn8CBEiRLhO8P8DX6FZk5VNLD4AAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "mu = .1;\n", "mf = lambda t,y : vdp(t,y,mu)\n", "sol1 = scipy.integrate.solve_ivp( fun=mf, t_span=(0,200), y0=(.1,.1), rtol=1e-8, atol=1e-8 )\n", "sol2 = scipy.integrate.solve_ivp( fun=mf, t_span=(0,50), y0=sol1.y[:,-1], \n", " t_eval=np.arange(0,50,.01) )\n", "plt.plot( sol2.t, sol2.y.T )\n", "(period,sdperiod) = get_period( sol2.t, sol2.y[0,:])\n", "plt.title( 'Period = %f' % period );" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### define get_period\n", "Stephanie copied her code from HW2." ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "def get_period(t,x):\n", " \"\"\" Approximate the period of a 1-D x, given the time-steps t.\n", " Returns a tuple with the period and the standard deviation of the period over time.\n", " if the value of the standard deviation is not smaller than 0.1, then\n", " it means the period estimate is dodgy and you shouldn't use it. Instead,\n", " plot your simulation and figure out why it isn't periodic - maybe it just\n", " hasn't reached the limit cycle yet.\"\"\"\n", " idxs = scipy.signal.find_peaks(x)\n", " idxs = idxs[0]\n", " times = t[idxs]\n", " period = np.mean(np.diff(times));\n", " sdperiod = np.sqrt(np.var(np.diff(times)));\n", " return (period,sdperiod)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define the van der Pol error function\n", "\n", "It should take the parameter $\\mu$ as input and return the squared difference between the simulated period and 10 h. \n", "\n", "To find the simualated period, first run the model for 200 hours and ignore the result. The simulate for another 50 h and call get_period." ] }, { "cell_type": "code", "execution_count": 172, "metadata": {}, "outputs": [], "source": [ "def vdp_error( mu, vals_t = None, vals_c = None ):\n", " mf = lambda t,y : vdp(t,y,mu)\n", " sol1 = scipy.integrate.solve_ivp( fun=mf, t_span=(0,200), y0=(.1,.1) )\n", " sol2 = scipy.integrate.solve_ivp( fun=mf, t_span=(0,50), y0=sol1.y[:,-1], t_eval=np.arange(0,50,.01) )\n", " (period,period_sd) = get_period( sol2.t, sol2.y[0,:] )\n", " if vals_t is not None:\n", " vals_t.append( mu )\n", " if vals_c is not None:\n", " vals_c.append( (period-10)**2 )\n", " return (period-10)**2\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plot the cost function landscape\n", "\n", "Plot the cost over 100 values of $\\mu$ ranging from 0.01 to 5.\n", "\n", "Then plot the result from the Hill descent method beginning at $\\mu=0.2$." ] }, { "cell_type": "code", "execution_count": 175, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 175, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "mus = np.linspace( 0.01, 5, 100 )\n", "errors = np.zeros( mus.shape )\n", "for i in range(mus.size):\n", " errors[i] = vdp_error( mus[i] )\n", "\n", "plt.plot( mus, errors );\n", "\n", "vals_t = []\n", "vals_c = []\n", "f = lambda t: vdp_error(t, vals_t, vals_c)\n", "\n", "# starting from 0.2 gets stuck\n", "(mu,cost) = hill_descent_1D( f, p0=.2 )\n", "plt.plot( vals_t, vals_c,'*')\n", "plt.plot( mu, cost, 'r*')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Do built-in local methods do any better? Not really." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "mus = np.linspace( 0.01, 5, 100 )\n", "errors = np.zeros( mus.shape )\n", "for i in range(mus.size):\n", " errors[i] = vdp_error( mus[i] )\n", "\n", "plt.plot( mus, errors );\n", "\n", "mu_vals = []\n", "cost_vals = []\n", "fn = lambda mu:vdp_error( mu, mu_vals, cost_vals )\n", "# try with x0=0.1 and x0=1 and Nelder-Mead (a simplex method)\n", "# Powell from 0.2 works well (a gradient method)\n", "# SLSQP from 0.2 took so long I made tea.\n", "res = scipy.optimize.minimize( fn, method='SLSQP', x0=.2 )\n", "plt.plot( mu_vals, cost_vals,'*')\n", "plt.plot( res.x, vdp_error(res.x), 'r*')\n", "\n", "plt.figure()\n", "plt.plot(mu_vals, cost_vals,'*')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### What if we have multiple parameters?\n", "\n", "Let's code up the Goodwin Oscillator" ] }, { "cell_type": "code", "execution_count": 205, "metadata": {}, "outputs": [], "source": [ "def goodwin_oscillator( t, statevars, params ):\n", " X = statevars[0];\n", " Y = statevars[1];\n", " Z = statevars[2];\n", " alpha_1 = params[0]\n", " K = params[1]\n", " n = params[2]\n", " gamma_1 = params[3]\n", " alpha_2 = params[4]\n", " gamma_2 = params[5]\n", " alpha_3 = params[6]\n", " gamma_3 = params[7]\n", " \n", " dydt = np.zeros( (3,) )\n", " dydt[0] = alpha_1*K**n/(K**n+Z**n) - gamma_1*X\n", " dydt[1] = alpha_2*X - gamma_2*Y;\n", " dydt[2] = alpha_3*Y - gamma_3*Z;\n", "\n", " return dydt\n", "\n", "def goodwin_circadian_error( params ):\n", " mf = lambda t,y : goodwin_oscillator(t,y, params)\n", "\n", " sol1 = scipy.integrate.solve_ivp( fun=mf, t_span=(0,500), y0=(.1,.1,.1) )\n", " sol2 = scipy.integrate.solve_ivp( fun=mf, t_span=(0,100), y0=sol1.y[:,-1], \n", " t_eval=np.arange(0,100,.01) )\n", " (period,sdper) = get_period( sol2.t, sol2.y[0,:] )\n", " return (period-24)**2\n" ] }, { "cell_type": "code", "execution_count": 212, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3.156544444444447\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEICAYAAABPgw/pAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAABWVUlEQVR4nO2dd3iVRfq/70kPqaSRkIQk9N57EwRCUSl2UFy7W1y37+rP/bq77q5u7/YGNrArKk1QEBBIKAktlCSEkJBeSU/Omd8fc4IR03POewpzX9e5IGfmnXnOWz7vzDPPzAgpJRqNRqNxftzsbYBGo9ForIMWdI1Go3ERtKBrNBqNi6AFXaPRaFwELegajUbjImhB12g0GhdBC7rGLgghNgkhvtPNY7OEEPOtbZNG4+xoQdd0GouQ1gohqoQQBUKINUII/+6UJaVcLKVca20bu4sQ4m9CiDNCiItCiJNCiDtapA0WQnwkhCgSQpQKIbYIIYZ0s6wwIcQeIUSJEKJcCLFXCDGjRfqtQohTQogKIUShEGKtECKwRfrrQog8IUSlEOK0EOLeFmnDhRAHhBBlls82IcTwFuk/EUJkWo69IIT4pxDCw1rnUGN/tKBrusp1Ukp/YDwwEfh1Vw4WCke876qB64Ag4DvAv4UQ0y1pwcAGYAjQB0gCPupmWVXA3UA40Bv4M/BxC2HdA8yQUgYB/QEP4A8tyn4SiJdSBgJLgT8IISZY0i4ANwIhQJjF5vUtjt0AjLccOxIYAzzU0YnROA+O+GBpnAApZS6wCSUMCCGmCiG+srQ6U4UQc5rzCiF2CCH+KITYA9QA/S3f3WtJdxNC/FoIcc7SKn1VCBHU4vjVlrQSIcSjNvo9v5FSnpRSmqWU+4FdwDRLWpKU8iUpZamUshH4JzBECBHajbLqpJSnpJRmQAAmlLCHWNLPSymLWxRnAga2KPu4lLK++U/LZ4AlrVxKmSXV9G/RyrEZUspyy58CMLdM1zg/WtA13UIIEQssAQ4LIaKBT1EtyRDg58B7QojwFoesBu4HAoBzlxV3p+UzF9Uq9Qf+Z6lnOPCM5fi+QCgQ045dD1teKq1+OvnbfIFJwPE2sswG8qWUJd0tSwhxBKhDtZpflFIWtkibKYSoAC4CNwD/uuzYp4UQNcBJIA/YeFl6uaXs/wJPXJa2SghRCRSjWujPdfQbNE6ElFJ/9KdTHyAL5TIoR4ny04Av8CvgtcvybgG+Y/n/DuDxy9J3APda/r8d+H6LtCFAI8rd8BiwvkWaH9AAzLfh71wLbAZEK2kxQC6w0gpl+QArm89TK+nRwG+Bwa2kuQMzUS4vz1bS/YDvA9e0UfYg4PdApL3vK/2x3ke30DVdZbmUMlhKGSel/L6UshaIA266rCU8E4hqcdz5dsrsyzdb7edQYt7HknbpWCllNdBhy7i7CCH+inIj3SwtytciLRzYCjwtpVzXk7LgkvtlHfCwEGJMK+m5qJfB+lbSTFLK3agXzPdaSa8GngVeFUJEtJJ+BtVreLqj36FxHrSga6zBeVQLPbjFx09K+acWedpb1vMC6qXQTD+gCShAuRRimxOEEL1QbpdWEUL8P0sUTquf9n6EEOJ3wGIgUUpZeVlab5SYb5BS/rG9cjoqqxU8Ua6m1vDA4iPvRrob0AvV0u9O2RonQwu6xhq8DlwnhFgohHAXQvgIIeYIIdr0dV/GOuAnQogEocIgnwDeklI2Ae8C11r8yl7A47Rz30opn5BS+rf1aes4IcQjwCqUK6fksrRAlAtpj5Ty4Y5+TAdlTW3+LUIIXyHEr1A9kf2W9NuEEP0s/48D/ohySSGEiLCENfpbzvNClMumOX2BEGKcJS0Q+AdQBqRZ0u9tbq1bxiYeaT5W4xpoQdf0GCnleWAZ8P+AIlSL/Rd0/v56GXgN+BI4ixrQ+6Gl7OPAD4A3Ua31MiDHiuY38wSqZ5DeokX//yxpK1ADm3dd1uJvFt7bhBDHO1mWN/AUym2UixpYvkZKecGSPhz4SghRjQphPAXcZ0mTKPdKDuo8/A34sZRygyU9GPVyrAAyUK3vRVLKOkv6DOCopeyNlk+zXRoXQLTi2tNoNBqNE6Jb6BqNRuMiaEHXaDQaF0ELukaj0bgIWtA1Go3GRbDbSmthYWEyPj7eXtVrNBqNU3Lw4MFiKWV4a2l2E/T4+HgOHDhgr+o1Go3GKRFCXL4W0iW0y0Wj0WhcBC3oGo1G4yJoQddoNBoXQQu6RqPRuAha0DUajcZF0IKu0Wg0LkKHgi6EeNmyz+OxDvJNEkI0CSFutJ55Go1Go+ksnYlDX4Pa3/HVtjIIIdxRu5dvtY5ZVy51TXXsyt3F2YqzBHsHMztmNpF+kfY2y66YpZmK+goCvQJxd3O3tzkajcPSoaBLKb8UQsR3kO2HwHuoNaM13WTH+R38bu/vKK79etN3d+HO6uGreWj8Q3i6edrPODtQXlfOUylP8UnmJ1Q1VuHj7kNifCIPjXuIPn597G2e4dQ21bL+5Hq2ZW+jvK6cAcEDuHXorUzvO93eptmF8xfP82bam5woOYGvpy8z+s7ghkE30Muzl71Nsxs99qFbdnxfgdqZXdNN3jn9Dg99/hBhvmE8v+B5km9LZsPyDSwfuJw1x9fwo89/RG1Trb3NNIzMikxu/PhG3jn9DnNj5/LLSb/k2gHXsjVrK9dvuJ6UwhR7m2goWRVZ3PTxTfzj4D8AGBoylOPFx3ngswf47Ve/pdHcaGcLjeXjjI9Z8dEK3j71NgAF1QX8JfkvXPfhdVfcvfENOrOTNBAPHGsj7R1gquX/a4Ab2ynnfuAAcKBfv35So9iTs0eOXjtafu+z78naxtpvpb996m05as0o+ZMvfiJNZpMdLDSWnIs5cvb62XL2+tnyWPGxb6RlVWTJa96/Rk56fZI8XHDYPgYaTO7FXHnV+qvk7PWz5b4L+y59X99UL/918F9y5JqR8sef/1g2mBrsaKVxbEjfIEeuGSnv3ny3zK/Kv/T94YLDctG7i+S4V8fJned32tFC2wIckG1pbFsJsvOCfhbIsnyqgELUzvDtljlhwgRjfr2DU1JbImesmyGv/+h6Wd1Q3Wa+NcfWyJFrRsrnU5830DrjqW+ql7d8fIuc+sZUmVGe0Wqeopoiufi9xfKq9VfJvKo8gy00ltrGWrnioxVy2hvTZHpZeqt5Xjv+mhy5ZqR8Yt8TBltnPGdKz8jxr46Xd22+S9Y11X0rvay2TN788c1y4msTXfaF356g99jlIqVMkFLGSynjURv6fl9K+WFPy71S+GvyX6lurOavs//aru/vjuF3sCh+EU+nPM2p0lMGWmgsLx19ieMlx/nDzD/QP6h/q3nCfMP4z9z/UNtUy6O7H8UszQZbaRxPpz7NmbIz/OWqvzAgeECreW4ffjurh6/mzZNvsjFzo8EWGkejuZFf7foV/l7+/GX2X/B29/5WnmCfYJ6e9zRhvmH8bOfPKKsrs4Ol9qMzYYvrgL3AECFEjhDiHiHEd4UQ37W9ea5NSmEKn2R+wt0j76Z/cOvi1YwQgkenPEqgdyD/t+f/XNJnev7ieV48+iKL4hcxr9+8dvMO7D2QX0z6BUn5Sbx7+l2DLDSWU6WnWHt8LTcMuoGZ0TPbzfvTCT9lTPgYnkh64huD6q7Eu6ff5XTZaR6b+hhhvmFt5gv1DeXvc/5OWV0Zv9v7OwMttD8dCrqUcqWUMkpK6SmljJFSviSlfFZK+Wwree+UUrrm02UDnk55mhCfEO4ZeU+n8gf7BPPrqb8mrTSN906/Z2PrjOe/h/+Lu5s7P5/4807lv2HQDUyNmsrfD/ydopoiG1tnPP8+9G/8Pf35yYSfdJjXw82Dx6c/Tk1jDU/uf9IA64zlYsNFnkl5hsmRk7m639Ud5h8eOpwfjvsh27O383n25wZY6BjomaJ2IqUwhb15e7lrxF1dCrOa328+kyIn8XTK01xsuGhDC40lqyKLLVlbuHXIrZ0OSRRC8NjUx2gwN/C/lP/Z2EJjOVRwiF25u7h75N0EeQd16pj+wf25f/T9bD23laS8JBtbaCxvn3qbsvoyfjrxpwghOnXM7cNvZ1DvQTyZ9CQ1jTU2ttAx0IJuJ15Pe50ArwBuHnJzl44TQvDziT+nvL6cl46+ZCPrjOflYy/j5ebFHSPu6NJxsYGxrBq6ig/OfOBSYwuvHHuFEJ8QVg1b1aXj7hxxJ5F+kfztwN9cZmyh0dTIG2lvMDVqKiNCR3T6OE83Tx6b+hj51fmsPbHWhhY6DlrQ7UBRTRHbz21nxcAV3ZoEMTx0OIsTFvPmyTddYtCnvK6cTzM/ZdnAZe36Rtvi/tH3E+AVwH8P/9cG1hnP+crz7MzZyU2Db8LXw7dLx/p4+PDQuIdIK01j41nXGCDdeHYjRbVF3Dnizi4fOzZiLAviFrD2+FpK60qtb5yDoQXdDrx35j2aZFOXW+ctuX/0/dQ21fJ62utWtMw+fJTxEQ3mhm6fjyDvIO4Yfgc7c3aSVpJmZeuMZ92pdbgL926fj2v6X8Pg3oN5LvU5TGaTla0znjfS3mBg8MBuz4h9cNyD1DbV8sKRF6xsmeOhBd1gpJR8mvkpkyInERcY1+1yBgQPYEHcAt5Me5PKhkorWmgsUkreOf0O4yLGMbj34G6Xs3LYSvw9/XnhqHM/tHVNdXx45kPmx80noldEt8pwE27cN/o+siqz2Ja9zcoWGsup0lOklaZx4+AbO+07v5z+Qf25rv91vHv6XZdvpTudoDeaGtlxfkfzpCan40TpCbIqs7gm4Zoel3XfqPuoaqzirZNvWcEy+3C85DjnKs+xYuCKHpUT6BXIyqEr2XZuGxnlGVayznh25uzkYuNFbhh8Q4/KWdBvAfGB8bxw5AWnfVYANmRswMPNgyUJS3pUzt2j7qbOVMe6k+usZJlj4nSC/knmJ/zw8x+SWpRqb1O6xabMTXi4eTA/bn6PyxoWOoxpUdNYf2q908albzqrzse8uPbjzjvD6uGr8Xb35tUTbS4M6vB8mvkp4b7hTOrTs3Xu3N3cuWfUPZwqO8Wu3F1Wss5YGs2NfJL5CXNi5tDbp3ePyuof1J+5sXNZd3KdS0e8OJ2gL4xfiJ+n36VFeZwJszSzKWsTM6NndjoUrSNWDVtFYU0h27O3W6U8IzFLM5uzNjMzeiaBXoE9Lq+3T2+uHXAtn2Z+Snldec8NNJiK+gp25e5iUcIiqywTfE3/a4jwjeDNtDetYJ3x7Luwj9K6UpYOWGqV8u4eeTcV9RV8kP6BVcpzRJxO0Ht59uLa/teyJWuL0z20R4qOUFhTyKL4RVYrc1b0LGL8Y5zyoU0pTLH6+Vg5dCX1pnreO+N8E6+2ndtGk7nJKu44UGF7Nw25iT0X9nC24qxVyjSSbdnb8Pf073CWbGcZGzGWseFjWXdyncuEdF6O0wk6wC1DbqHB3MCH6R/a25Qu8WXOl7gLd6vdoKC61iuHruRw4WFOlJywWrlG8Nm5z/By82JO7ByrlTm492AmR07mrVNv0WRuslq5RrA9ezvR/tEMDx1utTJvHHwjnm6evHXKucZZTGYTX2R/weyY2Xi6W28fgFuG3sK5ynPsz9tvtTIdCacU9EG9BzE+YjzvnH7Hqd60X+Z8ydiIsVZztzSzfNByfD18WX9yvVXLtTW7cncxKWoSfp5+Vi131bBV5FXnseP8DquWa0tqm2pJyk9iTuycbkdztEaYbxgL4xfyYfqHVDdWW61cW3Oo8BBl9WUdrunTVRLjEunt3dspXbadwSkFHeCmITeRfTHbad60+dX5nCo7xVUxV1m97ECvQBYnLGZz1maneWjPVZ7jXOU5ZkfPtnrZc2LmEOUXxTun37F62bYiKS+JelM9s2Osfz5WDl1JdWM1H2d8bPWybcX27O14u3tbtTcL4OXuxfJBy/ni/BcUVBdYtWxHwGkFfUHcAgK8Avgo4yN7m9Ipvsz5EsAmDyzAioErqG2qZWuWc2zruitHRV7Mipll9bLd3dxZPnA5ey/sJa8qz+rl24KdOTvp5dGLiX0mWr3s0eGjGRYyjPfPvG/1sm2BlJId53cwLWqaTbaTu2nwTZil2WnOR1dwWkH3dvdmUfwitp/bTlVDlb3N6ZAvc74k2j+6zTW+e8qY8DEkBCU4zU26K3cX8YHxxAbE2qT8ZQOXIZFO8cKXUrIzZyfT+07Hy93LJnUsH7ictNI0p1jvJvtiNrlVuVZvnTcTGxDL9L7TeT/9fady2XYGpxV0gKUDllJnquOzc5/Z25R2aTQ1kpSfxKzoWVb1j7ZECMGKgStIKUohsyLTJnVYi5rGGpLzk23WWwGI9o9mStQUPkz/0OEf2lNlpyisKbTp+bim/zV4unk6RSDBVxe+ArDp5tfLBy4nvzqfpHzXWpXSqQV9TPgY4gLjHL4VdqT4CLVNtUztO9Wm9Vw34DrchTsfnvnQpvX0lOT8ZBrNjTZrgTVz/cDrya3KJTk/2ab19JRmAbOF+6mZIO8g5sbO5ZPMT2g0OfYktK9yvyLGP4bYQNv03gDm9ptLgGcAH6U7tnZ0FacWdCEESwcs5WDBQXIu5tjbnDZJyk9CIGziH21JmG8Ys2NmsyFjg0PPHN2fvx8vNy/G9xlv03qu7nc1AV4BDj+RJCkviQFBA7q10mRXWD5wOeX15ezI2WHTenpCc292RvQMm9bj7e7NooRFbDu3zSlctp3FqQUd4Lr+1yEQDj2Cn5yfzNCQoVYPV2yN5QOXU1JX4tDRP8n5yYyJGNPqnpDWxMfDhyUJSxz6oW00NXKo8BCToybbvK7pfacT0SvCod0uqUWp1DTVMK3vNJvXtWzgMqdw2XYFpxf0KP8oJkdO5pPMTxxyEaK6pjpSC1OZHGn7BxZgZvRMArwCHHaz4Ir6Ck6VnmJSZM/WKuks1w24jnpTPZ+fd8xtyI6VHKO2qdaQ+8PdzZ3r+l/H7tzdDrvv6FcXvsJduBtyPkaHjSY+MN7hXbZdwekFHWBxwmKyL2aTVup4a2GnFqXSYG4wpAUGKs42MS6R7dnbqW2qNaTOrnCg4AASadgLbnTYaKL9ox32Bbc/b78h7rhmrul/DWZpdtjw1oMFBxkRNoIArwCb1yWEYNnAZRwsOMj5i+dtXp8RdCjoQoiXhRCFQohjbaTfJoQ4IoQ4KoT4Sggxxvpmts/8uPl4CA82n91sdNUdkpSfhLtwZ3yEbf3FLVmSsISaphp25uw0rM7OkpyfjI+7D6PCRhlSnxCCJQlL2Je3zyFbpcn5yQwJGUKwT7Ah9Q3qPYhBvQex6ewmQ+rrCo2mRo4VH2Ns+FjD6mxeN8cRtaM7dKaFvgZob/Wks8BVUspRwO+B561gV5cI8g5ievR0NmdtdrgQteT8ZEaEjsDfy9+wOif0mUCEbwSfZn5qWJ2dJSk/iTERY2wWb90aSxKWYJImh2uV1pvqSSlMMay30syShCWkFKWQW5VraL0dkVaaRoO5gbERYw2rM8o/inER41xmu74OBV1K+SXQ5jYfUsqvpJTNG1vuA2KsZFuXWBS/iLzqPI4UHbFH9a1S01jD0aKjhvmLm3F3c2dRwiJ25+6mor7C0Lrbo6yujDNlZwwXsIG9BzK492CHe2hTCy3uOIPPR/Pqlo7WSm/e42BMuLGd/MUJi0kvT+dM2RlD67UF1vah3wO0eZcIIe4XQhwQQhwoKiqyasVzY+fi7e7tUDfp8ZLjNMkmm4fntcaS/ktoMjc51Aj+gYIDAIYLGKhWaWpRqkP5SpMLknETbobfHzEBMYwNH+twL7iUwhSi/aO7vfVed1kQtwA34eZQ2tFdrCboQoi5KEH/VVt5pJTPSyknSiknhoeHW6tqAPy9/JkdM5stWVscZmPc5hbH6LDRhtc9PGQ48YHxDvXQHio4hLe7NyNCRxhe9+KExYBj+UpTClMYFDzIkAHAy1mcsJgzZWccplUqpSSlMMXw1jmo+RtTIqewOWuzQ0bKdQWrCLoQYjTwIrBMSllijTK7w6L4RZTUlVxqCdqbI0VHiA+MN2zAqyVCCBYlLOJA/gGHGQw8UnyEEaEjrLq+dWfp69/XoXylJrOJo8VH7SJgAInxibgLd4dpleZX51NYW2io/7wlixMWc/7ieY6XHLdL/daix4IuhOgHvA+sllKe7rlJ3WdWzCx6efRyiJtUSklqUSqjw41vnTezIG4BEsn2c/bfnq7B1EBaSZrdBAwcy1eaUZFBdWM1YyLscz7CfMOYGjWVjWc3OkSrNKUoBcDQCJeWzIubh4ebh0NoR0/oTNjiOmAvMEQIkSOEuEcI8V0hxHctWR4DQoGnhRApQgi7NY99PXyZEzuH7dnb7b5bTW5VLqV1pXYVsEHBg4gPjHcIP/qJkhM0mhvt/oITCIc4H/YaAGzJooRF5FblOsROVymFKfh6+DKo9yC71B/oFcjM6JkOGSnXFToT5bJSShklpfSUUsZIKV+SUj4rpXzWkn6vlLK3lHKs5WPMDIk2WBC3gPL6cg4WHLSnGQ7xwAohWBC3gOSCZEpq7eYJA7gUfWTP8xHmG8b4PuMdQ9ALU+nt3Zt+Af3sZsPc2Ll4CA+2nNtiNxuaSSlKYXTYaDzcPOxmw5KEJRTWFHKo4JDdbOgpLjFTtCUzomfg6+Fr94c2tSgVXw9fBgQPsKsdC+MXYpZmtmfb1+2SWpRKX7++hPey7mB4V1kQt4D08nQyy+27xHCzO85Wyyl3hiDvIKb0ncJnWZ/Z1e1S01jDqdJTdnM/NXNVzFX4eviyOctxBs67issJuq+HLzOjZ7I9e7tdu05Hio4wKmyUXVscoDZNjguMc4gXnD3dLc0siFsAwNZz9ptkVFFfQVZlll17K80sjFtITlWOXZfNOF5yHJM02c1/3kwvz17Mip7FtnPbHCZSrqu4nKCDemiLa4tJKUyxS/11TXWcKj3lEAJ2ye2Sn0xZXVnHB9iA/Op8CmoKHELAInpFMC5inF1fcI7gjmtmbuxc3IW7XWfRNj+njvC8LIhfQEldCYcLD9vblG7hkoI+O2Y2Xm5edntoT5ScoEk2OcQDC2qnc5M02c3t4gj+85YkxiVyuuw0WRVZdqn/SNER3IQbI8NG2qX+lgT7BDMlagqfnbOf2yWlKIUBQQMMWV66I2ZHz8bb3dvuPdru4pKC7ufpx/To6WzL3maXm7S5BWbUAlQdMTRkKLEBsXa7SVOLUvFy82JoyFC71H858+PmA9j1fAzuPdgmGyB3hwVxC8i+mM2pMuP3GzVLM6lFqXb3nzfTy7MXM6Nnsu3cNqeMdnFJQQd1k+ZX53OsuNVFIm1KalEqsQGxhPqGGl53azS7Xfbn7ae8rtzw+lOLUhkeOtwuE4paI9IvkjHhY+ziR7f3hKLWmNdvnt3cLlmVWVTUV9jdf96SBXELKKwtdKh1oTqLywr6VTFX4SE8DG+FNU8ocqQHFtTMQJM0Gb7RgyNMKGqNBXELOFl6kuzKbEPrvTShyIHOR2+f3kyMnMjWc1sN79GmFlrGExykhQ5KOzzdPO06cN5dXFbQL4VkGewbzKvOo7i22CEGeFoyPGQ40f7Rht+kJ0tP0mBucKgHFpQfHYyPdrm0vo+D3R+JcYmcqzzH6TJjJ3unFKUQ5B1EfGC8ofW2h7+XPzP6zrDruEJ3cVlBB1jQbwE5VTmG+gYdbQCwGSEEiXGJ7L+w39Alde25QFl7RPlHMSpslOE9OEeYUNQa8/rNw024GX4+mhfkchOOJUUL4u3nsu0JjnUWrczcfnNxE26G+gZTi1Lxcfex2xTm9kiMT6RJNvHF+S8Mq/NI0REi/SLp49fHsDo7S2JcIidKThi6pK4jTChqjVDfUCb2MdbtUlFfQWZFpkP5z5u5KuYqPNyMd9n2FJcW9BCfECb1mcS27G2G1ZlalMqIsBF4ujnGAGBLRoSOoK9fX8NfcI7WW2nG6GgXR5pQ1BoL4hZwtuIs6eXphtTX3Ju11wqL7RHkHcTUqKl2GVfoCS4t6KAe2rMVZ8koz7B5XfWmetJK0xzOP9pMc7TL3ry9VDZU2ry+wppC8qrzHM7d0kxMQAzDQ4fzWZYxgu5IE4paY37cfATCsHGFlKIU3IW7XdbH7wyJcYnkVuU65ObzbeHygj6v3zzDbtK0kjSazI4zoag1FsQvoMncxI7zO2xe16XxBAcbEG1JYlwix0qOGbK/ZmpRqsNMKGqNS4uXGfWCK0xlSMgQh4nHv5zmWbTO5HZxeUEP7xXO2IixhlwUR2+BgRqcjPSLNOShTS1KxdPNk2Ehw2xeV3dJjFfRLkadD0eaUNQaiXGJZFRk2LxH22Ru4kjxEYf0nzcT7BPM5MjJbM1yHreLyws6KN/gmbIzNp/qnVqUSrR/NGG+YTatpyc0u132XNjDxYaLNq0rtSiVYaHD8HL3smk9PSE2IJZhIcNs3oMzmU0cLXKsCUWt0bxmvK3HWc6UnaG2qdYh/ectWRCvZtEaHc7ZXa4YQQfbD345yoqCHZEYl0ijudGmbpdGUyMnSk44vICBaqUfLT7KhaoLNqsjvTydmqYahz8f4b3CGRcxji1Ztl0j3d47FHWWq2Ovtks4Z3e5IgQ90i+S0eGjbdoKy6/Op7Cm0OEfWFCTWiJ6Rdj0Jj1Vdop6U71TnI+FcQsB277wncEd18zC+IU2d7ukFKYQ0SuCSL9Im9VhDewRztkTrghBB9UqteVUb2d6YN2Em3K75O6hqqHKJnU40/mIDbS4XWzoZkgtUhOKYgNibVaHtTDC7dIczupo8fit0RzOaUSkXE+5ogQdbDfVu3lFwSG9h9ikfGuTGJdIg7mBL3O+tEn5qYWpTtECayYxPpEjxUfIq8qzSflHio44jYA1u11s9awU1hSSW5Xr8O6WZoyMlOspndkk+mUhRKEQotU5sELxHyFEuhDiiBBivPXN7DnNU71t1epILUplZNhIh1lRsCPGRowl3Dfcpi84Z3lg4esXvi3cLuV15WpCkQOHb15OYnyizbbqa+69OfqAaDOXXnB23ASks3Smhb4GWNRO+mJgkOVzP/BMz82yDYlxiaSVpll9qne9qV4NADrRA+sm3JgfN5/dubupaayxatkF1QVcqL7gNA8sQL/AfgwNGWqTF9wlAXOiF1yz28UWG0inFKbg5ebl0OGsl7MoYREZFRmcKTtjb1PapUNBl1J+CZS2k2UZ8KpU7AOChRBR1jLQmiyIt020y4mSEzSZm5zqgQX1gqs31Vvd7eKMAgZKxFKLUsmvzrdquYcLD+MhPBgR5pgzIlujeas+W7RKU4pSnKo3C+recBNuDr+BtDV86NFAyyZvjuW7byGEuF8IcUAIcaCoqMgKVXeNaP9oRoSOsPpNemlNZycYAGzJuIhxhPqEWr1VmlKUgre7t8PsUNRZbOV2SSlKYVjoMHw9fK1arq255HapsJ7bxRl7s6Bm0U7qM4ktWVscOtrF0EFRKeXzUsqJUsqJ4eHhRlZ9icT4RI6XHCfnYo7VykwpSnGoHYo6i7ubO/Pj5rMrZ5dV3S6phamMCB3hVC0wgPigeAb3HmzVF36jqZFjxcec7mUPML+fWrzMmufjWPExmsxNjI9wyKG2dlmYsJBzlec4WXrS3qa0iTUEPRdoGYsVY/nOIWluhW07Z50VGKWUpBSmOJ17oZnEuETqTHXszt1tlfLqmuo4UXrCqfznLUmMSySlKMVqbpeTpSepN9UzLmKcVcozkj5+fawe7XK48DDgfO44UC84D+Hh0G4Xawj6BuAOS7TLVKBCSmmb2C8r0LzCnrVu0tyqXErqSpxWwCb0mUCIT4jVzoezjic007y2i7Ve+JcEzEnvj8S4RM6UneFsxVmrlHeo4BADggYQ7BNslfKMpLdPb6b0neLQbpfOhC2uA/YCQ4QQOUKIe4QQ3xVCfNeSZSOQCaQDLwDft5m1VmJB3AKrTfVunsLsjF1qUG6Xef3m8WXOl9Q21fa4vEvnw8l8pM0kBCUwqPcgq73gUopSiPaPJqJXhFXKM5rmNeOt4XYxSzMphSmM6+N8vZVmFsUvIrcq12F3MupMlMtKKWWUlNJTShkjpXxJSvmslPJZS7qUUv5ASjlASjlKSnnA9mb3DGtO9U4pTMHP04+BwQN7XJa9SIxPpLaplj25e3pcVkphCnGBcYT4hFjBMvuQGJfI4cLDPXa7NLvjnPVlD2rZjHER49ictbnHrdL08nQuNl50Sv95M1f3uxpPN0+HdbtcMTNFWxIbGMuI0BF8mvlpj8s6WHCQ0WGjcXdzt4Jl9mFin4mE+ISw8ezGHpVjlmYOFhx06gcWYEnCEoAen4+cqhyKaouc0n/ekmsSriG9PL3Hg4GHC5T7yZnPR6BXIDP6zmBL1hbM0mxvc77FFSnoANf2v5a00jTSy7q/3VZpXSnp5elMjppsRcuMx8PNgyUJS9hxfkePNpA+XXaayoZKJkVOsp5xdqBfYD/GhI/h44yPe9QqTc5PBmBypHPfHwvjF+Lh5sHHmR/3qJxDhYeI8I0g2r/VqGanYWHCQgpqCi6NjzgSV6ygL05YjLtw55PMT7pdxoF85V1ydgEDuG7AdTSaG3u0bGpSXhLgIuej/3U9bpXuz9tPmG8YCUEJVrTMeIJ9gpkdPZuNmRtpMjd1qwwpJcn5yUzoM8Ep1rNpj6tjr8bXw5cNGRvsbcq3uGIFPdQ3lOl9p/Pp2U+73XVKyk/C18OX4aHDrWyd8QwLGcaAoAF8nNH9VlhyfjL9Avo5zYJc7dHTVqmUkqT8JCZFTnJ6AQP1wi+pK2Ff3r5uHZ9ZkUlRbRFT+061smXG08uzF4lxiWzJ2mL1ZTN6yhUr6KBu0vzq/Est7a6SnJ/M+D7j8XRzrgk0rSGE4LoB15FSlML5yq6vdWMymzhYcNAlWufQ81bp2YqzFNcWMyVyig2sM57ZMbMJ9Ars9gt/74W9AEyNcn5BB1g+cDnVjdVsz95ub1O+wRUt6HNi5+Dn6dctt0txbTGZFZlM6uMaAgZwTf9rEIhutUpPlp7kYuNFlxF06FmrdH/+fgCnH19pxsvdi4XxC/k8+3OqG6u7fPy+vH3EBcbR17+vDawzngl9JhDjH8OH6R/a25RvcEULuq+HL/P7zWfrua1d7jq5WosDVIja5KjJbMjY0GU3VPNM0ylRrtEiBdUqDfIO4oMzH3T52L0X9tLXry8x/jE2sMw+LB2wlDpTHZvOburScY3mRpLzk13qWRFCsGzgMpLyk8itcpyJ8Ve0oAPcMPgGqhuru3yTfpnzJaE+oQwLdZ4lQDvD9QOvJ7cq99ILq7N8mfslI0NHOvQG2V3Fy92LpQOW8nn25xTXFnf6uHpTPfvy9jErZpZL+M+bGRM+hkG9B/H2qbe7FP1zpOgINU01LiXoAMsGLEMg2JDuOIOjV7ygjw0fy6Deg3jr1FudvkmbzE3subCHWTGzcBOudQrnx80nxCeEt0691eljSutKOVp0lNkxs21omX24afBNNMmmLrXSk/KSqG2qZU7sHNsZZgeEENw8+GbSStM4XnK808d9kf0FHm4eLtV7A7VpztSoqbx35j0azY2dPu7Xu39ts4lJrqVG3aA7N2lqUSoXGy66pIB5uXuxYuAKdubs7PRMyT25e5BIlzwfCUEJTImcwrun38VkNnXqmJ05O/H18HWp8YRmru1/Lb4evrx96u1O5ZdSsj17O1OjphLgFWBj64xn1bBVFNQUsP1c5wZHsyuz+SjjIwqqC2xizxUv6PD1TdrZVum2c9vwdPNkWtQ0G1tmH24achNSSt45/U6n8m89t5WIXhEu535q5uYhN3Oh+gK7cnd1mNdkNvFF9hdMi5qGt7u3AdYZi7+XP0sSlrDp7CbK6so6zH+67DQ5VTmXluJ1NWbHzCY2IJbX017vVP7mNYKaV321NlrQUTfp0gFL+TTz0w7fnCazic1Zm5kdMxt/L3+DLDSWaP9oroq5irdPvd3hYHFFfQW7c3ezJGGJy7mfmpnbby5RflG8dPSlDt1ySflJFNYWsrj/YoOsM57Vw1dTZ6rjzZNvdph367mtCITLuZ+acRNu3DbsNlKLUjladLTD/FuztjIqbBRR/rbZ1M01n8BucOeIOzFLM6+eeLXdfEn5SRTXFl9a78NVuWfUPZTXl3fYSt96bitN5iaXPh+ebp7cNfIuUopSOFhwsN28n2R+QoBnAHNi5hhjnB0YEDyAubFzeTPtzXZDGE1mExsyNjC973Sn2/ylKywfuBx/T39ePvZyu/lOlZ4irTTNps+KFnQLMQExLElYwjun32m3K/lxxsf4efq5pL+4JWMjxjIlagprjq+hrqmuzXwfpn9IQlCC020311VWDFxBiE8Izx15rs08VQ1VfHbuMxLjE/Hx8DHQOuO5d9S9VDZUsu7kujbz7M3bS351PisGrTDQMuPx8/Rj9fDVbMvexomSE23m+yD9AzzdPLm2/7U2s0ULegvuHXUv9aZ6nkl9ptX0wppCNmVtYumApS7/wAI8MPoBimuL2+y1pBSmcKToCLcOudWlwvNaw8fDh7tH3s2+vH1tbqr9zul3qG2q5abBNxlsnfGMDh/NrOhZvHj0xTZDOtccX0OYbxhzY+cabJ3xrB6+mkCvQP558J+tuuUq6iv4MP1DFsQtsOnmHlrQW9A/uD+3DLmFt0691eqiTGuPr8VkNrF62Go7WGc8kyInsSBuAS8ceaHVPVifP/I8AZ4BLB+43Hjj7MCqoauID4znz0l//lavpaaxhtdOvMaUqCmMCBthJwuN5ReTfkF9Uz3/PPjPb6UdKjjE/rz93DniTrzcvexgnbEEeAXw/bHfZ1/evlZnnr+e9jrVjdXcPfJum9qhBf0yfjD2BwR7B/PIrke+MSCYUZ7Bm2lvsmzgMmIDY9spwbX45aRf4ibceHjXwzSavo613XF+B7tyd3H/6Pvp5dnLfgYaiKe7J49OfZTsi9k8sf+Jb7TEnkp5iqLaIh4c+6AdLTSWhKAE7hp5FxsyNnxjjZcGUwOP732cSL/IK6K30sytQ25lTPgY/pT0J7Iqsi59n1meyctHXyYxLpEhIUNsaoMW9MsI8g7iT7P+RGZFJj/Y/gOKa4s5X3meH3/xY/y9/PnJhJ/Y20RDifSL5HczfkdqUSo//PyHFFQXkJyfzKO7H2Vg8EBuG3abvU00lKlRU7lv1H18kP4Bv9/3ewqqC3j9xOu8euJVbh58s9PuHdpdvj/2+0zoM4H/2/N/vHXyLc5XnufnO39ORkUGj0197Ip52YPazvHJmU/iLty5d+u9fJX7FUeKjvDQFw/h6+nLI1MesbkNwl6bnU6cOFEeOOC4u9VtzNzIo3sexWQ2IZEEeAbwv3n/Y3wf596Np7u8d/o9/rDvDzRJtfJgtH80LyS+QGzAldNbaUZKyT8P/ZNXjr1y6btZ0bP419x/XRHuhcupbqzmx1/8+NIiZu7CnV9O+iWrhq2ys2X2Ia0kjZ/s+MmlNV6CvYP579X/tdrLXghxUEo5sdW0zgi6EGIR8G/AHXhRSvmny9L7AWuBYEueh6WU7e7f5eiCDpBVkcWmrE2XRqZdYZ3vnnCu8hw7zu8gwCuARfGLrqjWV2ucLD3JgfwD9Avsx8zomS4bh98ZzNLMvrx95FzMYVLkJKff1KOn1DTW8GXulzSaGpkVPcuqA6E9EnQhhDtwGlgA5ADJwEop5YkWeZ4HDkspnxFCDAc2Sinj2yvXGQRdo9FoHI32BL0zTYrJQLqUMlNK2QCsB5ZdlkcCgZb/BwEXumusRqPRaLqHRyfyRAMtt7DJAS5fNu23wFYhxA8BP8A1F27QaDQaB8ZaTr+VwBopZQywBHhNiG87FIUQ9wshDgghDhQVFVmpao1Go9FA5wQ9F2gZyhBj+a4l9wBvA0gp9wI+wLd2OpBSPi+lnCilnBgeHt49izUajUbTKp0R9GRgkBAiQQjhBdwKXL5FRzYwD0AIMQwl6LoJrtFoNAbSoaBLKZuAB4EtQBrwtpTyuBDicSHEUku2nwH3CSFSgXXAndJeAe4ajUZzhdKZQVEsMeUbL/vusRb/PwHMsK5pGo1Go+kKV+5MCI1Go3ExtKBrNBqNi6AFXaPRaFwELegajUbjImhB12g0GhdBC7pGo9G4CFrQNRqNxkXQgq7RaDQughZ0jUajcRG0oGs0Go2LoAVdo9FoXAQt6BqNRuMiaEHXaDQaF0ELukaj0bgIWtA1Go3GRdCCrtFoNC6CFnSNRqNxEbSgazQajYugBV2j0WhcBC3oGo1G4yJ0StCFEIuEEKeEEOlCiIfbyHOzEOKEEOK4EOJN65qp0Wg0mo7w6CiDEMIdeApYAOQAyUKIDVLKEy3yDAIeAWZIKcuEEBG2Mlij0Wg0rdOZFvpkIF1KmSmlbADWA8suy3Mf8JSUsgxASlloXTM1Go1G0xGdEfRo4HyLv3Ms37VkMDBYCLFHCLFPCLGotYKEEPcLIQ4IIQ4UFRV1z2KNRqPRtIq1BkU9gEHAHGAl8IIQIvjyTFLK56WUE6WUE8PDw61UtUaj0Wigc4KeC8S2+DvG8l1LcoANUspGKeVZ4DRK4DUajUZjEJ0R9GRgkBAiQQjhBdwKbLgsz4eo1jlCiDCUCybTemZqNBqNpiM6FHQpZRPwILAFSAPellIeF0I8LoRYasm2BSgRQpwAvgB+IaUssZXRGo1Go/k2Qkppl4onTpwoDxw4YJe6NRqNxlkRQhyUUk5sLU3PFNVoNBoXQQu6RqPRuAha0DUajcZF0IKu0Wg0LoIWdI1Go3ERtKBrNBqNi6AFXaPRaFwELegajUbjImhB12g0GhdBC7pGo9G4CFrQNRqNxkXQgq7RaDQughZ0jUajcRG0oGs0Go2LoAVdo9FoXAQt6BqNRuMiaEHXaDQaF0ELukaj0bgIWtA1Go3GReiUoAshFgkhTgkh0oUQD7eT7wYhhBRCtLrfnUaj0WhsR4eCLoRwB54CFgPDgZVCiOGt5AsAfgTst7aRGo1Go+mYzrTQJwPpUspMKWUDsB5Y1kq+3wN/BuqsaJ9Go9FoOolHJ/JEA+db/J0DTGmZQQgxHoiVUn4qhPhFWwUJIe4H7gfo169f1611RqoK4fQWKDoJTXXQKwyiRkPCbPAOsLd1xlNfBef3Q0kGmOrBPxKix0NIfxDC3tYZT0MNXDgMFTnq9wf3g8hR4OVnb8vsQ20ZXEiBmhJ1DkL6Q9jgK/Pe6AadEfR2EUK4Af8A7uwor5TyeeB5gIkTJ8qe1u3QVObB9sfhyHqQZvDwAU9fqC0HpPp72FKY+RPo8y0PlutRWwY7/gSHX4eGqm+nhwyACd+BCXeCT5Dh5hnOxXx1Po68DY3V30xz94YBV8Oke2HgvCtDzC4chp1/hdOb1PPSEv9IGL4MpjwAoQPsY5+TIKRsX1eFENOA30opF1r+fgRASvmk5e8gIANofkojgVJgqZTyQFvlTpw4UR440Gayc5PxBbx3j2qNTroXxt0G4cPAzc3SIjsExz+E1HVK3EbfAol/BP9we1tuG7L2wDt3qlbX6Jth1E2qFeruBZUX4NweOPYeZO8F3xCY/QuYfD+497i94Zic+Ag+elD12EbfrF7soQPBbILSTDi7E469D1X50HccLPoT9Jtqb6ttg9kMX/wRdv8DfHvDuNXQfw4E9lXPT1EanNkKJzeCuQnG3Q5X/x8E9LG35XZDCHFQStlq4ElnBN0DOA3MA3KBZGCVlPJ4G/l3AD9vT8zBhQX91CZ4azWEDYKb1kL44Lbz1pTCV/9VHy8/WPI3GH2TcbYaQdon8O5dEBwHN74EUWPaznvhMHz2GyVofcfB8mchYqhxthrBvmdh868geiJc/3zbLc6mBjj6Nnz+B7iYp3ouC59wLVeMqQnevxeOfwBjb4eFfwTf4NbzXiyAr/4D+59TvdvFf4axq66M3stltCfoSCk7/ABLUKKeATxq+e5xVCv88rw7gIkdlTlhwgTpcmQnSfl4mJTPz5WypqzzxxWekvLFBVL+JlDKD38gZX21zUw0lLO7pXw8XMrnr5ayprRzx5jNUh57X8o/xatjk1+2rY1GcvhNdY3XrZKyobZzx9RXSbnlUSl/EyTlv8dJmXvIpiYahtks5YffV+dj1z/V352hOF3Klxer49bf1rXnzEUADsg2dLXDFrqtcLkWelURPDdLuRHu3wG9Qrp2vKkJdjwJu/4OkSNh5VsQFG0TUw3hYj48M0Odh7u3dP18VBXCB9+FjO0w/juw5K/g4W0bW40g/yi8ME+5Tm57p+u/5ewudT5qimHp/5y/J5f8Inz6M5j9S7j60a4dazbB3v+pMare8XDruvZ7wi5Gey10PVPUWmz6hfIR3/pG18ULlL943v/Bqreh9Cy8OE+N9jsjUirxaaiGm1/r3vnwj1DCN/OncGgtrL1OuaickYZqeOcu5SO+8eXuvZgSZsEDO5Wr5v174bPHlP/ZGSk4AVsehYHzYc4jXT/ezR1m/Ai+87EKMnhxHpzeanUznREt6Nbg5EblB5z9SzXY1xMGJ6oWrXCHVxbDmc+sY6ORHH0HMr+AxN/3zAfu5g7zfwM3rVEvt5cSoeyctaw0jp1/hpIzymfuF9b9cvzC4I4PYeLdsOff8MH9ytfuTJjN8NEPVMju8mdUoEB3iZuuesO942HdLXBwrbWsdFq0oPeUpnrY9CuIGKFaDdYgciTc97kaWF13q4p4cBbqKmDrr6HveCU81mDEClj9AVQXKlHPP2qdco2g6DTsfRrG3gb9r+p5ee6ecM0/YN5v1Itz3S0qGsRZSHldRXktfEL1wnpKcCzcvRkGzIOPH4Iv/6p6iFcoWtB7SvJLUJGtRug9vKxXbkAf1aWMmQzv3g0H11ivbFvy1f+U//uav6sWtrWIn6F6Lm7u8Mo1cD7ZemXbkq2PgmcvmP9b65UpBMz6KSx7CjJ3KndUdYn1yrcVdZWw7XcQO0WFrloLLz9YuU6F/37+B9XAclZ3VA/Rgt4T6ipVi6D/HBgw1/rl+wTB7e8pX+PHP4I9/7F+HdakoRqSX4Ch16jZn9YmYtjXA6yvLVfx7Y5M/lEVQz3jIeu0Ri9n3O1qzKbwBKy9Vr1IHZmDr6hB3YVPWj/c0N1ThblOexCSnlNuHbPJunU4AVrQe8KBl6G2VHV/bYVXL7j1TRhxPXz2f2p2oaN2KQ+/oWaETn/IdnUEx8Jdm9TEk9dvUJO4HJWv/guefjDpHtvVMWSxGkgvy4I116gZyo5IU4OKwY+fBTETbFOHmxsk/gHm/D9IfRM+eEBFj11BaEHvLqZGSHperclii9ZoSzy84IYX1eSLHU/Ctt84nqibmlQoWewU6Del4/w9ITAK7tyo1vl48xY4tdm29XWHihw1+3X8HSq6xZb0v0r15CovwJolqm5H49h7cPGC9caZ2kIImPMrmPeYGmN4/171rF4haEHvLic+gspcmPoDY+pzc4el/1VLCez5N2z6pWP5CdM2QPk527bOW+IfDnd+otwwb90OJzYYU29n2feMeulO+74x9cVNtwwcF8MrSxwrGkhK1VsJH6bch0Yw62ew4Pcq+uzdu5wvGqibaEHvDlLC3qfU+huDEo2r181NLQ8w7UHVO/j4IcfwE0qppmWHDoQhS4yrt1cI3PER9B2r1oo5+q5xdbdHXYUKoRuxQq2eaBSxk1VYY125EvWSDOPqbo+M7VB4HKb/0Nip+jMegkV/hrSP4e07VESaI7DzL3Bur02K1oLeHc7vV6FXU7/Xszja7iCE8hPO/iUcfs0x/IRZu9U6LNMeNP58+AarlmnsFHj/PkhZZ2z9rXHgFWi4qATFaKInwHc+gcYa5VMvOm28DZez5z8QEGXdyJbOMvW7KuLq9CZYvwoaa423oSVFp9ViZFm7bFK88wl6XYUaGLSniO19CnyCYcxK+9QvhJou3RyL/O6d9u1SfvUf8Au33/nwDoDb34X4mfDh9+DQq/axA9R12P8sJFzV/kJktiRqtHJHmZuUT73ghH3sADUh7OxOtfStNcN6u8Kke+G6/0D6djXm0lDd8TG2Yv+zannkCXfZpHjnE/RTm9XAoL38YmVZcPITNWnG3ivfzfrp113Kt26zT+uj0LK86eT7wdPH+Pqb8fJT0R4D58GGH0LSC/ax4+g7anVEe7TOW9JnhBo4Fu6qpZ6Xah879v4PvPxtJmCdZsJ3YMWzqmX8+o1Qf9F4G2pK1ZLZo2+y2VLZzifoY25RcaxpG+Dt1dBo8I53+58D4QaT7zO23raY+l249l9qiYA3bza+9fHV/9TEmUn3Gltva3j6qhDPwYth48/VDE0jaR78ixihZi7am/DBcNdGdX3WXge5B42tvzxbzXKecGfby+IayZhb4YaXlMv0tRWWzWYM5NCryhU25Xs2q8L5BB1U5MA1/4DTm9XU+IYaY+qtq4RDr6mY8MC+xtTZGSbeZWl97IbXrld2GkFlHhx5S01w6c4CXLbAwxtuflVtGrHlEdj9T+PqPvOZ2pDB6MG/9ggdoETdJxheXQ7ZBu7hvu8Z9e+U7xpXZ0eMvF7dHxdS4NWlxi341hzmHD9LLe1hI5xT0EFN1lj2NGTugDduMqYLdfg1NdhlVChaVxhzq1rJL/eAcTfq/mdBmmCaQaGbncXDC258BUbeANt+q6IKjOCr/0BAX1WvI9E7Tom6X7hqmWbttn2dtWUq0mfkDWoymCMx7FrVkys8CWuuVUtf25q0jy1hzrbVDucVdFBbu93wotq67LXr1YCprTA1qplucTPUbjqOyIgVcMsbUHBcdbFteaPWX1TRHMOXqdXuHA13D7j+BTVQ+8UfYfvvbTsZK/eQ8s9O/Z79Bv/aIyhGiXpQjPIhZ3xu2/oOvKL2SrX3WEJbDE6E295WW/6tWWL7Gbb7noHeCTB4oU2rcW5BBxh1o2V51cOwdqntROz4h2oRruk/tE351mLIIlj1lopBtuWNenAt1FcYN5GoO7i5q17c+Dtg199g88O2m4y159/gHaj8xY5KQCTc+alyw7x5i5q9aQsa69RYU/+5PV9O2pb0n/P1DNuXEqH4jG3qyTkAOUnK9WTNBetawfkFHWD4UtWFKjoFL823/oQKKdUDGz4UBtn2DWsVBlz99Y36ymI1OGVNGuvU4F/8LNsve9BT3Nzg2n+rru7+Z1WIp7UH0ovPqJnDk+4Fn0Drlm1tmmfYRk9Uq3jufcr6daS8rja4nvlj65dtbeJnqPPRVAsvLYDzSdavY9ff1RjGuNusX/ZluIagg+pC3fmJcgW8tEC9Fa1F+nYoOKpao0ZPnOku8TPULMraUnh5sXVfcilvqAd29s+tV6YtcXODRU9C4h+V8L62wrpjDLv/pQZjbewftRq+vdVkrGHXwZb/p3YPslbPxdQIu/+tln1OsML670bQdxzcs1Wdl7VL1YY11iL/KJzaqO4N7wDrldsGnVInIcQiIcQpIUS6EOLhVtJ/KoQ4IYQ4IoTYLoSIs76pnSBmItzzmTpxa661zoWRUi2RG9DXPjPdekLMRDVrsKlWbdN19suel9nUoAQseqLzPLDNTH/w64HjlxdZZ72T0rNwZL3a99RGscU2wdMHbloLk+5TseLv3WOdaLHU9co1OfvnjhPp0xlC+sPdWy1rA92mXEbWGHP58q/gFQBT7u95WZ2gQ0EXQrgDTwGLgeHASiHE8MuyHQYmSilHA+8CBoUVtELoACXqEUPVVN8v/9qz1sepjXB+H1z1S8cc7OqIqNHqfPhFqJZp8os9Ky/5BfXAznnEuR7YZkbeoFqnVfnw/JyeL7+77bdqY/CZP7GGdcbi5q42357/O7WI1csLe+aeq69SA9DRE41d48ha+IerTWUGLVSL3214sGfrv2TvVz3Cad+3/YqbFjrTQp8MpEspM6WUDcB6YFnLDFLKL6SUza/3fUCMdc3sIv4RapbcqBvVDiZvr+5ebHZjrdqMN2wwjFttfTuNInQA3PuZ8q1/+jP4+Mfd8yNXl6j9MQfMg0EGrZpnC+Jnwn1fgH8feP16NT7SndZY1h448aFyxQVGWd1MQxBC+bpXva16LM/P6X5Pbvc/1SzZRTbYwMIovP3VeNzsX8Lh19UiZ5UXul6O2aQG4QOiDA0c6IygRwPnW/ydY/muLe4BNvXEKKvg1UuFrS18Ek5tghfmQk4XZ8p9/gcoSYdFf1JhcM6MTxCsXK/Woz74CrxwddfW+JBSre7YUKP2g3R2QgfAvdvUBKTPHoN1K7u240/9RbVuTHCc44bmdYXBiWof215h8Ooy2P5415bWyDmgBH3MSrXqozPj5qbWSrr5NbW0xTPTu7488+5/qgX8FjyuXhIGYdURPiHE7cBE4K9tpN8vhDgghDhQVGRAML8QqrvznQ2qtf3SAiXSnblRT25UEQAT71brg7gCbu7qBrvtXbXh8vNzVLRKZzYA2PeMWsNm/m+UO8sV8PZXIa+L/qTisp+eqlwPHbXWzWa1Xkx5Nqx4zv5r+liLsIFw33a1ofWuv6uIsQspHR9XVagiZgL7qnPpKgxfCg98qeZZvL0aPvieWm++IzJ3whdPqBnlRo+7SSnb/QDTgC0t/n4EeKSVfPOBNCCiozKllEyYMEEaSk2ZlO8/IOVvAqX891gpj38kpcnUet6TG6X8fR8pn5sjZX2VoWYaxsVCKd+4RZ2P/06S8tRmKc3mb+czm6Xc96zKt25V2+fM2SlIk/LZ2ep3vnKNlDkHW8/XWPf1fbTrn4aaaCgnPpbyz/2l/E2QlB89KGV5Tuv5SrOkfGqqlH+IlPJ8sqEmGkZTg5TbHpfydyFSPhEr5VdPSVlf3XreU5ul/GNfKf83RWmODQAOyDZ0VcgOWiNCCA/gNDAPyAWSgVVSyuMt8oxDDYYuklJ2Kjp/4sSJ8sABK4YWdpb0bbDl12rNjZABMHYlxM1U06IrstUo/ZG3VCjTqnecK3Khq0ip1sPZ/AiUnVVx9iNvgH7TVDx1SQYcXKOWPx2yRE2nt+eKirbG1KTcUV88ocI9Y6fA0GvVveDmAflHVPRDaQbMfRRm/8J5fcWdobZcBRXsf1bdK0MWw6AFEDpI9XizvoSkF9W5ueVVNVHHlSk6BZt+BZlfqEHOESvUXIyASLiYr8ZTTnykJlPd9q763gYIIQ5KKSe2mtaRoFsKWAL8C3AHXpZS/lEI8TjqTbFBCLENGAU0T0vMllIuba9Muwk6qAf3+AdqsZycyyYSePZSKyle9bDyw18JNDWoWYPJL1pW5GtxT/iFK+GadJ/zxOD3lLoKteH1obVQdPKbaZGjlNtqwNX2sc0elGerF9mx99SgZzPCXa2LsuBxx1z+wRZICdn71EsufRs0VH2d5hOknpNZP7OpdvRY0G2BXQW9JdXFakCnrkK9UfuOc/zZfrakulhNhmioUj7RyDHOPyDcEyrzoPiUagSE9lfrcbhyq7w9pFS9torz4OED4UMcZ5VNe9DUoHr61cXgF6Z6uB7eNq9WC7pGo9G4CO0J+hXSh9ZoNBrXRwu6RqPRuAha0DUajcZF0IKu0Wg0LoIWdI1Go3ERtKBrNBqNi6AFXaPRaFwELejdQEpJXaOJ+iaTvU1xGOTXa/poNJoOMJlt86xcwVMAu05+RR1P70hn49E8iqsaEAISQv2YOzSC5WOjGRUTZG8TDeVCeS3Pf5nJZycKyK+so5enO0MiA5g7NIIV46LpG+xrbxMNJaOoimd3ZLAnvZiymkaCe3kyKjqI+cP7sGRUFP7eV9bjtvtMMWu+OktqTgU19U1EBvkwOSGExBGRzB4UjrvblTPjtqHJzFvJ2XxwOJczBVXcNTOBny4YbPV69EzRTrI9rYCfvp1KTUMTC0dEMrxvIHWNZo7mlLMnvYQGk5kJcb25a0Y8i0ZE4uHu2p2fDakXePi9IzSZJFcPjWBAhB9VdU0cyi7naG4FbgIWDO/Dd6bHM61/KMKFp8tLKXlmZwZ/33oabw835g3rQ2SgN8VVDezPLOFCRR3+3h7cOCGGO6bF0T/cuPWx7UF1fRO/eu8InxzJo0+gN7MGhRPo40l2aQ37Mkuoqm8iNsSX26fEccukWIJ7OeFOYF0gvfAiD7x2kIyiakZGBzKhX2/mDo1gzpCIbpWnp/73kO1pBTzw2kGGRgXw35XjSQj75vrXlXWNvHsgh7V7szhXUkN0sC93zYjnlkmxBPh42slq2/H6vnP8+sNjTIjrzb9uGUtsyDcXIjpfWsObSdmsT8qmrKaRYVGB3DMzgevGROHt4W4nq22DlJJH3j/K+uTzXDs6it8uHUGYv/c30g+fL+e1vef49EgeDSYzVw+N4J6ZCUwf4HovuoraRm57cR8nLlTyk/mDuf+q/t+45g1NZj47UcCre7PYf7YUX093bpgQzV0zEhjggi+6g+fK+M7LSfh4uvGXG0czd0hEj6+5FvQesDejhDtfSWJwnwDevG9KuwJtMku2pxXw4u6zJJ0txd/bg1snxXLXzASiXcT98FFKLj9+K4W5QyJ49vYJeHm03ROpazTxUUouL+0+y+mCKsIDvFk9NY7bpvQj1N/2ixjZGiklf/g0jZd2n+UHcwfw88Qh7T6sRRfreWP/OV7fd47iqgaGRgZw98wElo7pi4+n87/oahqaWP1SEkdyynn29gnMG9an3fxpeZW8vPssH6VcoMFkZu6QcO6Z2Z8ZA13jRZeWV8ktz+0lxM+LN++bajUXpBb0bpJ6vpxVL+yjb7Avbz0wjRC/zncNj+SU8+Kus3x6VC03unhkJHdMi2dSfG+nvVm3pxVw/2sHmRjXm7V3T+60CEkp2XWmmJd2n2Xn6SK8Pdy4frxqlQ3uE2Bjq23Hf7af4R+fnebO6fH85rrhnb6udY0mNqRe4OXdZzmZf5Ewfy9umxLH7VPjCA9wzhddfZOJe9ceYE96MU+tGs/iUZ3fY/XyF92QPgHcPTOeZWOjnfZFl1VczY3P7sXDTfDu96YR09t6y+lqQe8GpwsucvNzewnw8eCdB6YTGdS9jR1yy2tZ+1UW6/Znc7G+ibjQXtw4PobrJ8Q4Vau9uacyJDKAN+5tv6fSHumFF3lpdxbvH8qhvsnMmNhgrh8XzXVj+nbphWlvXt59lsc/OcH146P5241jcOvGAJ+Ukq8ySnhp91k+P1mIp7vgqsFqQHnesAinEbMmk5kH3zzM5uP5/PXG0dw0MbZb5dQ1mvg49QIvWV50wb08uWZUFMvHRTOhX+9unWN7cKG8lpuf20tNg4m3H5jKwAjrNlq0oHeRjKIqbn1+HwJ497vT6Rfa87drdX0Tm4/l887B8+zLLAVgXL9gEodHsnBEH4ceKDuQVcodLycR3Y2eSluUVjfw3sEc3j+cS1peJR5ugpmDwpg/rA/zh/Xp9gvUCNYlZfPI+0dZOKIPT60ab5UB8MyiKtYlZbMh9QIFlfUEeHuwYIQ6F7MHhztshIzJLPnxWyl8nHqB31w3nLtmJPS4TCklezNKWJ98ns9OFFDbaCI62Jdrx0Qxb2gfxvcLdtigg6KL9dzy3F6KLtbz5n1TbRL5pgW9C5zMr+SOl5IwS8n6+63/dgU1aPhRSi5bjhdwNLcCgAHhfswaFM70AaFM6R9KkK9jDKbuzSjhvlcPEBHgzfoHphIRYH2hTcur5IPDuWw+lk92aQ0Ao6KDmDMknGn9Qxkf19thWquv7c3isQ3HuWpwOM+tnmD1QV6TWYnZB4dz2ZZWQEVtI17ubkzpH8JVg8OZ2j+UYVGBDhHyV9do4hfvHuHj1As8sngoD1w1wOp1VNc38dmJAj5MyWX3mWKazJIgX09mDw5nzuBwpvQPsao7oyecL63hrjXJ5JbV8to9k5kYb5vNP7Sgd5JPj+Txi3dTCfDx4LV7phji380tr2Xr8Xw+P1lIclYpdY1m3IQStPFxvRkTE8zomCDiQ/0M7XKazZLX9p3j95+cIC60F2/cO9XmrWYpJemFVXyWVsC2EwWknC/HLMHL3Y0xsUFMTghhdEwwo6KDiAryMXQsorbBxJOb0nh17znmDY3gqdvG2/wl02Qyc/BcGdtPFrLtRAGZxdUABPh4MCk+hEnxIYyKDmJkdKDhoX85ZTU8tO4wh7LLeXjxUL5rAzG/nMq6RnafKebzk4V8cbKQkuoGAKKDfZmc8PX5GBzpb3g01e4zxfz4rcM0NJl5/o6JTO0farO6tKB3wMn8Sv625TTb0goYExvM86sn0CfQ+C5/fZOJw9nlfJVRwr6MEo7kllPXaAbUQzyybxCD+/gzsE8AA8P9GdTHn1A/L6sKm5SSA+fK+MvmkyRnlTF3SDj/XjmOQDuEX16sa+TAuTL2ZZawL7OUY7kVl2bYhfl7MTI6iCGRAQwI92dAuD8Dw/0J6mVdO5tMZjYdy+evW06RXVrDvTMTeGTJMLu0kPMr6th/toR9mSXszyy9JPAAsSG+jOwbxLCoQPqH+9E/zJ+EMD98vawrbBW1jby+7xz/+zwdIeBvN41hSRcGQK2F2Sw5mX+RpLMlJGeVsf9sKcVV9QB4uAkGRvgzom8Qw/sG0j/Mj4QwP2J6+1rdVXO2uJr/fn6G9w/l0j/cj+dXT7BJr74lLiXoX2UU86dNJ4kK8iEqyJe+werfqCAfevt5EeTrSZCvJ55tXDgpJZV1TZwpuEjK+XK2niggyRIP+5MFg7hrRkKbxxpNk8nMmcIqjuSUk3K+ghMXKkgvrKK64eslB4J8PYnp7Ut0sC/Rzf8G+xLq702InyfBvbwI9vVs80aWUlJQWU96YRVJZ0v4LK2QtLxKQvy8eHjxUG6aEOMwUTl1jSZO5FVyLLeCIzkVHMutIKOoikbT1/dwmL8X/UJ6ERXsS98W90hEoA/Bvup8BPp4tHk+TGZJdmkNpwsu8lV6MVtPFJBXUcfACH9+v2wk0wbYruXVVcqqGzh+oZKjuRUcu6DOx7mSmm/k6RvkQ3yY36VnJDLIh6ggH/oE+qhnpZcn/l4ebfb+ahtMZBRVcSKvkl1nivk8rYDqBhPzh0Xwu2UjHWZgX0p13Y5fqOT4hQrLv5UUXay/lMfDTdAvpBdxoer+6BPgQ2SQN30C1XkJ8fMi0McTbw+3Vu95s1lSVtNARlE1R3LK2ZZWwP6zpXi5u3H3zAR+NG+QIa7BHgu6EGIR8G/AHXhRSvmny9K9gVeBCUAJcIuUMqu9Mrsr6PszS3hqRwZ55bXkVdRRVd/Uaj4/L3cCfT1xdxO4CYGbgOoGExU1jTSYzJfyDekTwNKxfVk1uR+9nSDKQkpJfmUdZwqqSC+sIqOoigvlteSW15JbVvsNsW9JgI8H3h7ueLoLPN3dMEtJdX0TVfVNlwTRTcC4fr1ZPi6aG8fHWL11ZwuaTGZyymrJKFLnIr2wivOlteRV1HKhoo6GJnOrxwV4e+Dr5X7p/gDVpa+qb6L5kfDxdGPmwHBunBBD4vA+ThFlUdtg4mxxNWeLq8ksqiKzuJpzJdXkV9RRcLG+1TVE3AQE+Hji4+mGmxAIwCQl5TWN1Lc4f6F+Xswf1ofV0+IYGe0cy1yUVNWTVVJNZlH1pfOSVVJDQWUdpRaXzeV4ugv8vT3w9XRHovbGbjJLymsaaGpx/gaE+3Ht6L6Gh5v2SNCFEO7AaWABkAMkAyullCda5Pk+MFpK+V0hxK3ACinlLe2Vay2XS2VdI3nldeRV1FJe00hFrfqU1zRysa4Rk5SYzRKzhF5e7gT38qJ3L08GRvgzvG8gUUGO0cKwBlJKKmobyS2vpay6kdKaBsprGiitbqDc8iJrMplpNEkE4O/jgZ+3B1FBPgwM92dYVKBTvNQ6i5SS0uoG8irqKLxYd+m+aP63rtGEyXJvgHrpBVp6PIP7BDA0MsBhBmOtgcksKa6qJ6+ijvyKOiprG6ms+/qZqW80I5FICUJAcC/V400I82NoZABxoX4OMRhrLeqbTBRW1lNQWUd+ZR1lFs24WNdEVV0TtY0mBKgGoRv07uVFeIA3/UJ6MSomyCYBAp2hp4I+DfitlHKh5e9HAKSUT7bIs8WSZ68QwgPIB8JlO4U7kg9do9FonIX2BL0zzuJo4HyLv3Ms37WaR0rZBFQA33I2CiHuF0IcEEIcKCoq6oztGo1Go+kkho7+SSmfl1JOlFJODA8PN7JqjUajcXk6I+i5QMu5vDGW71rNY3G5BKEGRzUajUZjEJ0R9GRgkBAiQQjhBdwKbLgszwbgO5b/3wh83p7/XKPRaDTWp8MFIqSUTUKIB4EtqLDFl6WUx4UQjwMHpJQbgJeA14QQ6UApSvQ1Go1GYyCdWvFHSrkR2HjZd4+1+H8dcJN1TdNoNBpNV3CMKZEajUaj6TFa0DUajcZFsNtaLkKIIuBcNw8PA4qtaI4zoH/zlYH+zVcGPfnNcVLKVuO+7SboPUEIcaCtmVKuiv7NVwb6N18Z2Oo3a5eLRqPRuAha0DUajcZFcFZBf97eBtgB/ZuvDPRvvjKwyW92Sh+6RqPRaL6Ns7bQNRqNRnMZWtA1Go3GRXA6QRdCLBJCnBJCpAshHra3PbZACBErhPhCCHFCCHFcCPEjy/chQojPhBBnLP/2tret1kQI4S6EOCyE+MTyd4IQYr/lWr9lWRzOpRBCBAsh3hVCnBRCpAkhpl0B1/knlvv6mBBinRDCx9WutRDiZSFEoRDiWIvvWr2uQvEfy28/IoQY3916nUrQLdvhPQUsBoYDK4UQw+1rlU1oAn4mpRwOTAV+YPmdDwPbpZSDgO2Wv12JHwFpLf7+M/BPKeVAoAy4xy5W2ZZ/A5ullEOBMajf77LXWQgRDTwETJRSjkQt+Hcrrnet1wCLLvuureu6GBhk+dwPPNPdSp1K0IHJQLqUMlNK2QCsB5bZ2SarI6XMk1Iesvz/Iuohj0b91rWWbGuB5XYx0AYIIWKAa4AXLX8L4GrgXUsWl/q9AEKIIGA2arVSpJQNUspyXPg6W/AAfC17J/QC8nCxay2l/BK18mxL2rquy4BXpWIfECyEiOpOvc4m6J3ZDs+lEELEA+OA/UAfKWWeJSkf6GMvu2zAv4BfAs3bzIcC5ZYtDcE1r3UCUAS8YnE1vSiE8MOFr7OUMhf4G5CNEvIK4CCuf62h7etqNV1zNkG/ohBC+APvAT+WUla2TLNsIOISMadCiGuBQinlQXvbYjAewHjgGSnlOKCay9wrrnSdASx+42Wol1lfwI9vuyZcHltdV2cT9M5sh+cSCCE8UWL+hpTyfcvXBc1dMcu/hfayz8rMAJYKIbJQbrSrUb7lYEu3HFzzWucAOVLK/Za/30UJvKteZ4D5wFkpZZGUshF4H3X9Xf1aQ9vX1Wq65myC3pnt8Jwei//4JSBNSvmPFkktt/r7DvCR0bbZAinlI1LKGCllPOqafi6lvA34ArWlIbjQ721GSpkPnBdCDLF8NQ84gYteZwvZwFQhRC/Lfd78m136Wlto67puAO6wRLtMBSpauGa6hpTSqT7AEuA0kAE8am97bPQbZ6K6Y0eAFMtnCcqvvB04A2wDQuxtqw1++xzgE8v/+wNJQDrwDuBtb/ts8HvHAgcs1/pDoLerX2fgd8BJ4BjwGuDtatcaWIcaI2hE9cTuaeu6AgIVvZcBHEVFAHWrXj31X6PRaFwEZ3O5aDQajaYNtKBrNBqNi6AFXaPRaFwELegajUbjImhB12g0GhdBC7pGo9G4CFrQNRqNxkX4/xM7K1N50Y9XAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "alpha_1 = 1\n", "K = 0.61\n", "n = 11\n", "gamma_1 = 0.15\n", "alpha_2 = 1\n", "gamma_2 = 0.15\n", "alpha_3 = 1\n", "gamma_3 = 0.25\n", "\n", "params = (alpha_1,K,n,gamma_1,alpha_2,gamma_2,alpha_3,gamma_3)\n", "\n", "mf = lambda t,y : goodwin_oscillator(t,y, params)\n", "\n", "sol1 = scipy.integrate.solve_ivp( fun=mf, t_span=(0,200), y0=(.1,.1,.1), \n", " t_eval=np.arange(0,200,.1) )\n", "sol2 = scipy.integrate.solve_ivp( fun=mf, t_span=(0,100), y0=sol1.y[:,-1], \n", " t_eval=np.arange(0,100,.1) )\n", "\n", "plt.plot( sol2.t, sol2.y.T )\n", "(period,sdperiod) = get_period( sol2.t, sol2.y[0,:])\n", "plt.title( 'Period = %f' % period );\n", "\n", "err = goodwin_circadian_error( params )\n", "print( err )" ] }, { "cell_type": "code", "execution_count": 209, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " final_simplex: (array([[ 1.0441589 , 0.61506829, 11.60855387, 0.14786071, 0.98794809,\n", " 0.1496552 , 1.01877043, 0.22496593],\n", " [ 1.04415183, 0.61506785, 11.60852354, 0.14786095, 0.98796358,\n", " 0.14965528, 1.01877013, 0.22496526],\n", " [ 1.04415252, 0.61506776, 11.60852725, 0.14786094, 0.98796316,\n", " 0.14965523, 1.01877009, 0.22496521],\n", " [ 1.04414654, 0.61506735, 11.60849929, 0.14786122, 0.98797646,\n", " 0.14965529, 1.01876942, 0.22496456],\n", " [ 1.04415606, 0.61506797, 11.60853764, 0.14786084, 0.98795485,\n", " 0.14965522, 1.01877037, 0.22496558],\n", " [ 1.04415979, 0.61506824, 11.60855888, 0.14786063, 0.98794604,\n", " 0.14965523, 1.01877073, 0.22496615],\n", " [ 1.04415343, 0.61506782, 11.60852881, 0.1478609 , 0.98796064,\n", " 0.14965524, 1.01877017, 0.22496535],\n", " [ 1.04415803, 0.61506797, 11.60855085, 0.14786073, 0.98794976,\n", " 0.14965522, 1.01877068, 0.22496587],\n", " [ 1.04415086, 0.61506761, 11.6085207 , 0.14786105, 0.98796623,\n", " 0.14965523, 1.01876984, 0.22496507]]), array([0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", " 1.11111111e-05, 1.11111111e-05, 1.11111111e-05, 1.11111111e-05,\n", " 1.11111111e-05]))\n", " fun: 0.0\n", " message: 'Optimization terminated successfully.'\n", " nfev: 256\n", " nit: 102\n", " status: 0\n", " success: True\n", " x: array([ 1.0441589 , 0.61506829, 11.60855387, 0.14786071, 0.98794809,\n", " 0.1496552 , 1.01877043, 0.22496593])\n" ] } ], "source": [ "# Run a built-in optimizer and print the results\n", "res = scipy.optimize.minimize( goodwin_circadian_error, method='Nelder-Mead', x0=params )\n", "print(res)" ] }, { "cell_type": "code", "execution_count": 214, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.0\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Use the results from the optimization to run the model\n", "print( goodwin_circadian_error( res.x ))\n", "\n", "mf = lambda t,y : goodwin_oscillator(t,y, res.x)\n", "\n", "sol1 = scipy.integrate.solve_ivp( fun=mf, t_span=(0,200), y0=(.1,.1,.1), \n", " t_eval=np.arange(0,200,.1) )\n", "sol2 = scipy.integrate.solve_ivp( fun=mf, t_span=(0,100), y0=sol1.y[:,-1], \n", " t_eval=np.arange(0,100,.1) )\n", "\n", "plt.plot( sol2.t, sol2.y.T )\n", "(period,sdperiod) = get_period( sol2.t, sol2.y[0,:])\n", "plt.title( 'Period = %f' % period );\n", "\n" ] } ], "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.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }