{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "OAuWuCr6YItF" }, "source": [ "### JAX Tutorial for Students\n", "\n", "# Introduction\n", "\"\"\"\n", "JAX is a library for array-oriented numerical computation (similar to NumPy), with automatic differentiation and JIT compilation to enable high-performance machine learning research.\n", "\n", "This notebook provides an overview of essential JAX features so you can get started with JAX quickly:\n", "\n", "- JAX provides a unified NumPy-like interface to computations that run on CPU, GPU, or TPU, in local or distributed settings.\n", "- JAX features built-in Just-In-Time (JIT) compilation via Open XLA, an open-source machine learning compiler ecosystem.\n", "- JAX functions support efficient evaluation of gradients via its automatic differentiation transformations.\n", "- JAX functions can be automatically vectorized to efficiently map them over arrays representing batches of inputs.\n", "\"\"\"\n", "\n", "# 1. JAX's Syntax is Strikingly Similar to NumPy's" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 452 }, "id": "pUAPS_THYJUt", "outputId": "93c4fff9-4b91-42c6-b4d6-e45b46cb200c" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjgAAAGzCAYAAAAi6m1wAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAfi5JREFUeJzt3Xl8VNX5P/DP7EuWyb6ShYQl7CCUFNRqSyogVWmtij8QpQqtlVbFutAqtGpFrFoLUqn7hnVpv1q1FaUoWhUBwShICFv2ZLInk23We39/zNw7GbKQZe7c7Xm/XnlpJjN3zoSbc55zznPO0bAsy4IQQgghREG0YheAEEIIISTcKMAhhBBCiOJQgEMIIYQQxaEAhxBCCCGKQwEOIYQQQhSHAhxCCCGEKA4FOIQQQghRHApwCCGEEKI4FOAQQgghRHEowCGEEBm58MILceGFF4pdDEIkjwIcQhTi+eefh0ajgdlsRk1NTZ+fX3jhhZg6daoIJQPKy8uh0Wj4L51Oh+zsbPz4xz9GcXFx2N4nNzc35H16fy1atChs70MIkT692AUghISXy+XCgw8+iK1bt4pdlD6uvvpqXHzxxfD5fCgpKcETTzyB9957D1988QVmzpwZlveYOXMmbrvttj6PZ2RkhOX6hBB5oACHEIWZOXMmnnrqKaxfv15yjfo555yDFStW8N+fe+65uPTSS/HEE0/gb3/7W1jeIzMzM+Q9CCHqRFNUhCjMb3/7W/h8Pjz44IODPo+bNnr++ef7/Eyj0eD3v/89//3vf/97aDQaHD9+HCtWrIDNZkNycjLuuecesCyLqqoqXHbZZYiNjUVaWhoeeeSRIZX1Bz/4AQCgrKwMLMsiNzcXl112WZ/nOZ1O2Gw2/PznPx/SdQfT0NCA5ORkXHjhhWBZln/85MmTiIqKwlVXXcU/9r///Q9XXHEFsrOzYTKZkJWVhVtvvRU9PT0h17zuuusQHR2NyspK/OhHP0J0dDQyMzOxbds2AMDhw4fxgx/8AFFRUcjJycErr7wS8npuevGTTz7Bz3/+cyQmJiI2NhYrV65Ea2vrWT+Ty+XCxo0bMW7cOL6cd9xxB1wu12h+VYTIGgU4hCjM2LFjsXLlSjz11FOora0N67WvuuoqMAyDBx98EIWFhbj//vvx2GOP4Yc//CEyMzOxefNmjBs3Dr/5zW/wySefnPV6p06dAgAkJiZCo9FgxYoVeO+999DS0hLyvHfeeQcOh2NIIzMejwdNTU19vrigJCUlBU888QQ+/vhjfhqPYRhcd911iImJwV//+lf+Wm+88Qa6u7tx4403YuvWrVi4cCG2bt2KlStX9nlfn8+HxYsXIysrCw899BByc3Oxdu1aPP/881i0aBHmzJmDzZs3IyYmBitXrkRZWVmfa6xduxYlJSX4/e9/j5UrV2LHjh1YunRpSCB2JoZhcOmll+Lhhx/GJZdcgq1bt2Lp0qX485//HBKsEaI6LCFEEZ577jkWAHvgwAH21KlTrF6vZ3/961/zP7/gggvYKVOm8N+XlZWxANjnnnuuz7UAsBs3buS/37hxIwuAXbNmDf+Y1+tlx4wZw2o0GvbBBx/kH29tbWUtFgt77bXX9nmvP/zhD2xjYyNrt9vZPXv2sLNmzWIBsP/85z9ZlmXZ0tJSFgD7xBNPhJTn0ksvZXNzc1mGYQb9HeTk5LAA+v3atGlTyHOvvvpq1mq1ssePH2f/9Kc/sQDYt956K+Q53d3dfd5j06ZNrEajYSsqKvjHrr32WhYA+8ADD/T5PWg0GvbVV1/lHz927Fif3y/3bzd79mzW7Xbzjz/00EMsAPZf//oX/9gFF1zAXnDBBfz3L730EqvVatn//e9/IeXcvn07C4D97LPPBv2dEaJUNIJDiALl5eXhmmuuwZNPPom6urqwXfeGG27g/1+n02HOnDlgWRbXX389/3hcXBwmTpyI06dP93n9xo0bkZycjLS0NFx44YU4deoUNm/ejJ/85CcAgAkTJqCwsBA7duzgX9PS0oL33nsPy5cvh0ajOWsZCwsLsWvXrj5fV199dcjzHn/8cdhsNvz0pz/FPffcg2uuuabP9JjFYuH/v6urC01NTZg/fz5YlsVXX3016O+H+z1ERUXhyiuv5B+fOHEi4uLi+v39rFmzBgaDgf/+xhtvhF6vx3/+858BP+8bb7yBSZMmoaCgIGTEipv+++ijjwZ8LSFKRknGhCjU3XffjZdeegkPPvgg/vKXv4TlmtnZ2SHf22w2mM1mJCUl9Xm8ubm5z+vXrFmDK664AlqtFnFxcZgyZQpMJlPIc1auXIm1a9eioqICOTk5eOONN+DxeHDNNdcMqYxJSUkoKio66/MSEhKwZcsWXHHFFUhNTcWWLVv6PKeyshIbNmzA22+/3ScXpr29PeR7s9mM5OTkkMdsNhvGjBnTJzCz2Wz95taMHz8+5Pvo6Gikp6ejvLx8wM9x4sQJlJSU9HlvTkNDw4CvJUTJKMAhRKHy8vKwYsUKPPnkk7jrrrv6/Hyg0RCfzzfgNXU63ZAeA9Bv3sj48ePPGnwsW7YMt956K3bs2IHf/va3ePnllzFnzhxMnDhx0NeNxPvvvw8AaG1tRXV1NeLi4vif+Xw+/PCHP0RLSwvuvPNOFBQUICoqCjU1NbjuuuvAMEzItQb6PQzn9zMSDMNg2rRpePTRR/v9eVZWVljehxC5oQCHEAW7++678fLLL2Pz5s19fhYfHw8AaGtrC3m8oqIiEkUbUEJCApYsWYIdO3Zg+fLl+Oyzz/DYY4+F/X127tyJp59+GnfccQd27NiBa6+9Fvv27YNe768WDx8+jOPHj+OFF14ISSretWtX2MvCOXHiBL7//e/z33d2dqKurg4XX3zxgK/Jz8/H119/jQULFgxpCo8QtaAcHEIULD8/HytWrMDf/vY32O32kJ/FxsYiKSmpz2qn3quIxHLNNdfg6NGjuP3226HT6bBs2bKwXr+trQ033HAD5s6diwceeABPP/00Dh06hAceeIB/Djfy0nukhWXZsE339efJJ5+Ex+Phv3/iiSfg9XqxePHiAV9z5ZVXoqamBk899VSfn/X09KCrq0uQshIidTSCQ4jC/e53v8NLL72E0tJSTJkyJeRnN9xwAx588EHccMMNmDNnDj755BMcP35cpJIGLVmyBImJiXjjjTewePFipKSkDPm1NTU1ePnll/s8Hh0djaVLlwIAbr75ZjQ3N+O///0vdDodFi1ahBtuuAH3338/LrvsMsyYMQMFBQXIz8/Hb37zG9TU1CA2Nhb//Oc/h7QvzUi53W4sWLAAV155JUpLS/HXv/4V5513Hi699NIBX3PNNdfg9ddfxy9+8Qt89NFHOPfcc+Hz+XDs2DG8/vrreP/99zFnzhzBykyIVFGAQ4jCjRs3DitWrMALL7zQ52cbNmxAY2Mj/vGPf+D111/H4sWL8d577w0roBCC0WjEVVddhb/+9a9DTi7mFBcX9/uanJwcLF26FG+//TZefPFFPPLIIygoKOB//uijj2LXrl249tprceDAARgMBrzzzjv49a9/jU2bNsFsNuPHP/4x1q5dixkzZoz6M/bn8ccfx44dO7BhwwZ4PB5cffXV2LJly6BTT1qtFm+99Rb+/Oc/48UXX8Sbb74Jq9WKvLw83HzzzZgwYYIgZSVE6jRsuDLdCCEkjG699VY888wzsNvtsFqtYhdHUM8//zxWrVqFAwcO0GgLIWFCOTiEEMlxOp14+eWXcfnllys+uCGECIOmqAghktHQ0ID//ve/+Mc//oHm5mbcfPPNYheJECJTFOAQQiTj6NGjWL58OVJSUrBlyxbMnDlT7CIRQmSKcnAIIYQQojiUg0MIIYQQxaEAhxBCCCGKo8ocHIZhUFtbi5iYGNranBBCCJEJlmXR0dGBjIwMaLWDj9GoMsCpra2lA+gIIYQQmaqqqsKYMWMGfY4qA5yYmBgA/l9QbGysyKUhhBBCyFA4HA5kZWXx7fhgVBngcNNSsbGxFOAQQgghMjOU9BJKMiaEEEKI4lCAQwghhBDFoQCHEEIIIYpDAQ4hhBBCFIcCHEIIIYQoDgU4hBBCCFEcCnAIIYQQojgU4BBCCCFEcSjAIYQQQojiUIBDCCGEEMURNMD55JNPcMkllyAjIwMajQZvvfXWWV+zZ88enHPOOTCZTBg3bhyef/75Ps/Ztm0bcnNzYTabUVhYiP3794e/8IQQQgiRLUEDnK6uLsyYMQPbtm0b0vPLysqwZMkSfP/730dxcTFuueUW3HDDDXj//ff557z22mtYt24dNm7ciEOHDmHGjBlYuHAhGhoahPoYhBBCCJEZDcuybETeSKPBm2++iaVLlw74nDvvvBP//ve/ceTIEf6xZcuWoa2tDTt37gQAFBYW4jvf+Q4ef/xxAADDMMjKysKvfvUr3HXXXf1e1+VyweVy8d9zp5G2t7cr8rBNlmVxoLwVn51sAsuymJ2bgPPHJUGrPfvhZES9nB4fdh6x45i9A3FWAy6anIq85Gixi0UkrqatB+8drkNjpwv5ydG4eFo6ok2qPMeZRIDD4YDNZhtS+y2pu3Dv3r0oKioKeWzhwoW45ZZbAAButxsHDx7E+vXr+Z9rtVoUFRVh7969A15306ZN+MMf/iBImaWmtcuNW18vxp7SxpDHZ2XHYcuyWchKsIpUMiJl+0434+ZXi2F3OPnHNu88hp+dOxZ3LS6AQUfpeiQUw7DY+uFJbP3wBLxMsJ+86T8leOinM/DDyakilo4QiSUZ2+12pKaG/lGkpqbC4XCgp6cHTU1N8Pl8/T7HbrcPeN3169ejvb2d/6qqqhKk/GJr6XLj8u2fY09pI4w6LZbOzMBPZ49BtEmPryrb8NPtn6O8qUvsYhKJ2VPagOVP74Pd4USGzYxrvpuDCyYkg2WBZz4tw69e+QpeHyN2MYmEsCyL3711GH/+73F4GRZzxybg2nk5GJsUhdZuD9a89CXe+qpG7GISlZPUCI5QTCYTTCaT2MUQFMOwuPHlgzjd2IUMmxnPrZqLiWkxAIBbfzgBq57bj+P1nVj94pd466ZzEUVDyATAyYZO3PjyIXgZFoumpOHPV82ExagDAOw8Ysev//4Vdn5rx58+KMX6xZNELi2Riuc+K8ff91dBqwEe/Ml0XPmdLACA28vgnreO4LUvq3D7P75GTqIVs7LjRS4tUStJjeCkpaWhvr4+5LH6+nrExsbCYrEgKSkJOp2u3+ekpaVFsqiS8+xnZdhX1gKrUYcXrw8GNwCQGWfBy9cXIiXGhBMNnXj4g1IRS0qkwsewuOW1r9Dj8WFeXiK2XD2LD24AYNHUNDx61QwAwN8+Po0D5S1iFZVIyPH6Djy48xgA4J4fTeaDGwAw6rXY9JNpWDw1DR4fi1teK4bT4xOrqETlJBXgzJs3D7t37w55bNeuXZg3bx4AwGg0Yvbs2SHPYRgGu3fv5p+jRtWt3fjT+/6g5e4lkzEuJabPc1JizXjkSn9j9cLn5ThS0x7RMhLpefVAJY7UOGCzGPCXZTNh1PetDn40PQNXzfE3YPe8dYSmqlSOZVn87s3DcHsZfH9iMq6bn9vnOVqtBpt/Oh2psSZUNHfjqU9OR76ghEDgAKezsxPFxcUoLi4G4F8GXlxcjMrKSgD+3JiVK1fyz//FL36B06dP44477sCxY8fw17/+Fa+//jpuvfVW/jnr1q3DU089hRdeeAElJSW48cYb0dXVhVWrVgn5USTtL/89AZeXwXfzEnD13KwBn3f++GT8aHo6GBa4992jESwhkZr2Hg8e+eA4AODWovFIiTUP+Nw7FxcgzmrAMXsH/n5AmflrZGh2lzTgQHkrzAYtNv1kOjSa/ldmxpoN+N2SyQCAbXtOoq69J5LFJASAwAHOl19+iVmzZmHWrFkA/MHJrFmzsGHDBgBAXV0dH+wAwNixY/Hvf/8bu3btwowZM/DII4/g6aefxsKFC/nnXHXVVXj44YexYcMGzJw5E8XFxdi5c2efxGO1ONnQiX8eqgYA3LmoYMAKh/O7JZNg1Gmxv6wF+043R6KIRIJe/LwcLV1u5CdHYfl3cwZ9bkKUEbcWTQAAbN9zCh4axVElhmHx0Pv+qalV545Fmm3goBgALpmejjk58XB6GDz1SVkkikhIiIjtgyMlw1lHL3W/eeNr/ONgNYompeLpa+cM6TW/ffMwXtlXifPHJ+Gl6wsFLiGRGqfHh3Mf/BDNXW78ZdlMXDYzc0ivOf+hj9DY4cJDP52OK+cMPFJIlGl3ST2uf+FLxJj1+PTOH8BmMZz1NR8fb8S1z+6HxaDDZ3f9AAlRxgiUlCjZcNpvSeXgkOFp7nTh7a9rAQA3Xpg/5NfdeEE+dFoN/neiCcfsDqGKRyTqn4eq0dzlRmacBRdPSx/Sa8wGHVafPxYA8OQnp6HCfpHqPfdZOQDg6rnZQwpuAOB745MwNTMWPR4fXtpbIWDpCOmLAhwZe/VAFdxeBtPH2HBOdtyQX5eVYMXCKf4pvVf2VZ7l2URJWJblG5qfnTd2WBv4XT03GxaDDicbOnGgvFWoIhIJKrV34NOTTdBqgJXzBp/S7E2j0WD1+XkAgNcOVMLHUGBMIocCHJliGJYPTq6dl3vW3JszXT03GwDw5qEadLu9YS8fkaZvqttxzN4Bk16Ln84eM6zXxpgNuHRGBgDg1f0UGKvJqwf8/94XTU7DmPjh7Ya+cEoa4qwG1LY78cnxxrO/gJAwoQBHpvaVtaCmrQcxJj2WTB/aNENv5+YnITvBig6XF+9+UydACYkUvf6lfxXUoqlpQ55m6O3qQn9g/O/DdWjv9oS1bESaPD4Gbxf7p8Kv/M7wgmLAP735k1n+1/2dAmMSQRTgyBS3DfrF09JhNujO8uy+tFoNrpzjr3TeCeTxEGVzenx8ztZVI0wSnjHGhoK0GLi8DHZ+S4GxGnxyvBHNXW4kRRvxvfHJI7rGssD2FR8ea0BbtzucxSNkQBTgyJDT48N/Dvsblx+fc/YVMAO5JDDd8NnJJjR1us7ybCJ3n55oQofTi3SbGd/NSxzRNTQaDX/f0MifOvzfIX9n6rKZmdCP8NDVCakxKEiLgZdh8f63A58bSJTB6fFJIvWBAhwZ+vh4IzpcXmTYzJibmzDi6+QkRmHGGBsYFnjvCFU6Ssf9Gy+ckgatdng5W739KDAlSoGx8jk9PnxU2gAAuGxmxqiuRYGxeuw8Ysese3fhD+98K2o5KMCRoV1H/WdxLZw6uoYK8G/FDwDv0jSVorm9DHYd9Qc4i6eO7ty2nMQoTMukwFgNPjvZhG63D+k2M6Zl2kZ1rSWBLQk+P9WMZgqMFW3X0Xq4vAysxuGnT4QTBTgy42NYfHjM36P64eTR7968KNDYfVnRSnPjCrb3dDMcTi+Soo2YM4pRPw63fw4XbBNl4qaTLpqcOuyVmmfKTYrClIxY+BgWuwN1GFEel9eHPaVcGyXuIdgU4MjMwYpWtHS5YbMYRjU9xclKsGJiagx8DIuPaQmnYu084p8WWDglDbpRjvoBQNGkFADAF6ebJTHXTsLPx7D4b4m/obpoSngaqgWT/J2yjyjAUay9p5rR5fYhJcaE6aMc9RstCnBkhptm+EFByogT/s70/QJ/Y/UhVTqKxDAsdh31/9suGuX0FGdcSjTGxFvg9jL47CSdaaZEXGcq1qzH3LGj70wB/noLAP53oonONFMoblS3aHLqqFMoRosCHBlhWZa/ecIxPcVZEOiN7ylthJcqHcUpsTvQ1OmCxaALW0Ol0Wj4xooCY2XiOlMLJqUOa8frwUzPtCEp2ohOlxcHylvCck0iHSzbK4VikvgHYFOAIyOVLd0ob+6GQafB9yaMbD+K/szKikOc1YD2Hg8OVbaF7bpEGv53ogkAMC8/ESZ9+JL+uJG/j4410NlUCsTdNxdODF9do9VqcMGE4H1DlOVUYyfq2p0w6rWYlz+yrSjCiQIcGfn0pL/COSc7HtEmfdiuq9dpcUEgYNp9jJJGlYbbHv9745PCet15eYkwG7SwO5w4WkeHtipJY4cLx+wdAIBzx4X3vvl+gb+uoZE/5eGC4u/kxo9oA9pwowBHRj4LBDjhrnCAYC/tc8qnUJRutxdfBg7GDOeoH+Dfgv/cfP+9+GmgYiPKwNU1k9NjkRRtCuu1zx+fDJ1Wg1ONXahu7Q7rtYm4uHrgvHHhrWtGigIcmfAxLD4/5Q8+hAhw5gcaqiO17XTGkIJ8cboZbh+DzDgLxiZFhf363DA0d28SZeBGi88P86gfANgsBkwf419d88VpysNRCo+PwRen/fWAEPfNSFCAIxNHax1o6/Yg2qTHjDHhX3qXGmtGXnIUWBbYV0aNlVJ8ctzfUH1vQvKo9zHpDxfgHChvoVUxCsGybLAnLlBDNS9wVMheCowV46vKNnS5fUiIMmJyeqzYxQFAAY5scD2q7+Ylhm15+JnmU29ccbge1XkCjPoBwKS0WMRZDeh2+/BNdbsg70Ei61RjJ+wOf6Lod8Kw11Z/uMD4i9PNlKCuEJ+e8Of6zc9PFH15OIcCHJng5sTPGydcZjo3TcU1ikTe2rrdKK33J4qGa3n4mbRaDb47NthYEfnjOjhCJorOyUmAQadBTVsPqlp6BHkPElncdKNQnamRoABHBjw+Bl9W+G+eefnC3TzcCdPH7B10iKICfFneCpYF8pKjkBwT3kTR3uaPo+kGJTkQSEovHCtcZ8pi1GFmVhwAYO9pSlCXO5fXh+LqNgDCdaZGggIcGfi21gGnh4HNYsD4lGjB3ichyoiCtBgA1BtXgv2BjdQKBa5wuHyKA+UtcHl9gr4XERbLsjhQ5r9v5uTGC/pelIejHIer2+H2MkiKNgqymGGkKMCRgS8DDdWcnHjB5za5URxuaTGRr32BhkroHtW4lGgkRRvh8jI4THk4slbd2gO7wwmDToNZWcIGOFxdQyup5G8/30YlCLKYYaQowJEBbkvzcJwCfTazc/yV2sEKCnDkrNPlxZEaf7AxV8CpBsB/bAN33xyqpPtGzri6ZmqmDRajsBu1zcqOh06rgd3hRG0b5eHIGTfq9x0JTU8BFOBIHsuy/GjKdwQeMgaCAc7ROgedEi1jhypa4WNYjIm3IDPOIvj7UWCsDAf4ukb4hspi1PHLiem+kS8fw+LLwL/f3AjcN8NBAY7ElTV1obnLDaNei2kC7H9zpow4C9JtZvgYFl9X0XSDXHHTmpGqcIIBThst+5UxbgQnEgEOQIGxEpTaO9Dh9CLKqMOk9BixixOCAhyJ40ZvZoyxhfWgxMGcw1c6NDcuV19VtQEAZmXHReT9pmTYYNRp0dTpomW/MtXS5cbJhk4A/ny/SDiHpjZlj1vhe05OvGB7tI2UtEpD+uBunkjk33DmUK9K1liWxdeBAGemwImiHLNBhymZgemGSgqM5ai4yv/3np8chfgoY0Te85xAAH601oEeN63Ak6PiyjYA/kOgpYYCHInjpokiefMEE0bbwDA03SA3ZU1dcDi9MOm1KIjgkPHswD1KK/DkiatrIhUUA0BmnAWpsSZ4GRbfBPZRIfLydeDfbWaERouHgwIcCetyeXGiwb8TrRDnTw1kUnoszAYt2ns8ONXYGbH3JeFRHBi9mZppgyGCQ8aUTyFvXEM1IytydU3vFXgHaZpKdhxOD041dgEAZoyJE7cw/aAAR8KO1LSDYYG0WDNSYs0Re1+DTovpmXEAgK9pXxPZKeanp+Ii+r5cPsXx+g50uWgFnpz0ntaMdEPFjU4fqmiL6PuS0eP2vcpOsCIhQtOaw0EBjoRxhxdOj+DoDYdbsXWYho1lhwtwZkQ4wEmNNSM11gSG9W8zQOSjqqUHrd0eGHWRndYEgvfp4Zq2iL4vGT2urhGjjRqKiAQ427ZtQ25uLsxmMwoLC7F///4Bn3vhhRdCo9H0+VqyZAn/nOuuu67PzxctWhSJjxJRxfyQcVzE35u7Yb+poREcOXF6fCgJBBezRLhvpgVG/uhkcXnhpqcmpcdEbLUmZ3J6LLQaoN7hQoPDGdH3JqPztUijxUMleIDz2muvYd26ddi4cSMOHTqEGTNmYOHChWhoaOj3+f/3f/+Huro6/uvIkSPQ6XS44oorQp63aNGikOf9/e9/F/qjRByXdCfG3Oa0TH+Ac7TWAY+Pifj7k5H5ttYBj49FYpQRY+KF3+DvTFxgfIQCY1n5WqRRPwCIMumRn+w/Y+8w3Tey8rWInfChEDzAefTRR7F69WqsWrUKkydPxvbt22G1WvHss8/2+/yEhASkpaXxX7t27YLVau0T4JhMppDnxccPnPnvcrngcDhCvqSuudd+IpHY4O9MuYlRiDHp4fIyOFFPicZy0btHJcaZMNy9Siti5OVrETtTQO/7hgIcubC3O1HvcEGn1WBKRqzYxemXoAGO2+3GwYMHUVRUFHxDrRZFRUXYu3fvkK7xzDPPYNmyZYiKCj2hdM+ePUhJScHEiRNx4403orl54BNpN23aBJvNxn9lZWWN7ANFEDc1lJcUBZvFEPH312o1mBoYxaG5cfkQK8GYw438nW7qQofTI0oZyPB4fQw/ciJWT3x6Jo38yQ1X10xIjYHVqBe3MAMQNMBpamqCz+dDampqyOOpqamw2+1nff3+/ftx5MgR3HDDDSGPL1q0CC+++CJ2796NzZs34+OPP8bixYvh8/W/UdT69evR3t7Of1VVVY38Q0XIN1XiJRhzplOvSna4BkKMUT8ASIo2IcNmBsv6p8uI9J1o6ITTwyDGpEdeUtTZXyCAab1y/uioD3ng97+J4LYCwyXNsCvgmWeewbRp0zB37tyQx5ctW8b//7Rp0zB9+nTk5+djz549WLBgQZ/rmEwmmEwmwcsbTtzNM13EvQX4lVTUq5KFLpcXZc3+PSmmZIhX6UwbY0NtuxOHq9vx3TxhTzIno8dNa04bY4NWG/lpTQCYnG6DVgM0drhQ73AhzRa5bTHIyHwjgTbqbAQdwUlKSoJOp0N9fX3I4/X19UhLSxv0tV1dXXj11Vdx/fXXn/V98vLykJSUhJMnT46qvFLCjZpEctOtM3F74ZTUOeDy0jbqUldS5wDLAqmxJiTHiBfQcxUercCTB26kjZuSFoPFqMOEVP/ydOpQSR/LsjjK3TcidqbORtAAx2g0Yvbs2di9ezf/GMMw2L17N+bNmzfoa9944w24XC6sWLHirO9TXV2N5uZmpKenj7rMUtDQ4URTpwsajX9XYbFkJVgQZzXA42Nx3E6JxlLHNVRijt4AwTwc2kNJHrg9i8ROFKX7Rj7q2p1o7fZAr9VgfGq02MUZkOCrqNatW4ennnoKL7zwAkpKSnDjjTeiq6sLq1atAgCsXLkS69ev7/O6Z555BkuXLkViYugQd2dnJ26//XZ88cUXKC8vx+7du3HZZZdh3LhxWLhwodAfJyK4yHhsUpSoyVsajYavdL6mSkfyvq3193yl0lCVN3ejvYcSjaXMx7D8vkmi3ze095ZscG3UuJRomA2R3TdpOARvPa+66io0NjZiw4YNsNvtmDlzJnbu3MknHldWVkKrDY2zSktL8emnn+KDDz7ocz2dTodvvvkGL7zwAtra2pCRkYGLLroI9913n+zybAZSUuc/f2qyiKM3nKmZNvzvRBPtTCsDUumJxwf24Klu7cG3te2Yn58kannIwCqau9Dt9sFs0GJskrg98Wm9VlKxLCvKNgdkaLjRYim0UYOJyPDA2rVrsXbt2n5/tmfPnj6PTZw4ccBMeovFgvfffz+cxZMcrqGaLIG9BbgpshIKcCTN42P4aUSxp6gAf8VX3dqDkroOCnAkjKtrJqbFQidSgjGnIM2/o3FTpxuNHa6Inr9HhudonX+UTQpt1GDoLCoJOhqYapBCdDw5cC5Nqb0DDEPLN6XqRH0n3D4GsWa9KDsYn4kCY3k4KqGeuMWoQ25gmXqJvUPk0pDBSKkTPhgKcCSm2+3F6Sb/Ul8p3Dy5iVEw6bXodvtQ0dItdnHIALj8m8kZsZIY2p8UCIyP2SnAkTKpTGtyKDCWvvYeD7/LvhQC48FQgCMxpfYOsKx/w7SUGPGHaPU6LSam+RsrqnSkSyorqDhcQ3W8vhNeOstMsvhcCokEOJMpwJE87t8mM86COKtR5NIMjgIciZHi0N+kNKp0pO5orbR64lnxVkQZdXB7GX5EkkhLQ4cTjR3+7SgKAp0YsXHlOFZHU1RSdVRiQfFgKMCRGCnNiXO46QYKcKSJZdleUw3SGMHRajUooN64pHGrNcXejqI3buTvVGMnbS4qUd9KrDM1GApwJKZEiiM4fENFvSopqmnrQafLC6NOi7xkcc4S6k8wMKb7Roqk2JlKt5lhsxjgZVicbKDNRaWIn2WQ0H0zEApwJMTHsDhm5/bAkcaQMeBfvgn4G1LauE16SgP3TF5yFAw66fxJF9DUpqRJbdQP8G8uWpBGgbFUub0MTjb4/13E3GV/qKRTGxJUtnRLZtOt3mxWAzLj/EuPj1FjJTml9f4KZ6JE8ig4tCJG2koDK9ykkn/DoftGusqbu+DxsYg2SWM7irOhAEdCuJ74+JQY0TfdOhPl4UgXd99ILcApSIuBRgM0dLjQ3OkSuzikF7eXwelGf/K31O4bbuqDthiQHq6umZAaLYntKM6GAhwJOV7P3TzSqnAAysORMj7Akdh9E2XSIyfBCgD81CuRhrKmLngZFjEmPdJt4m9H0VtBr9ytgXa0J+KQchvVHwpwJKS0PhgdS80k6lVJkscX7IlLsdKh6QZp4hqq8RLsiU9IjYFWA7R0udHQQSN/UhIcwZFeXdMfCnAk5AQX4EhsyBgIBl0nGjqpVyUh5U1dcPsYRBl1kpwT5ypCrkEl0nBconlbAGA26DA2cGRDKY38SYqU75v+UIAjEb3nxKUYHeckRsGg06Db7UNNW4/YxSEBpb2CYqn1xIHeAQ4t+ZUSqffEKTCWHqcneFyPVO+bM1GAIxHlzf458WiTHhkSmxMHAINOi7zAyq4T1FhJxnGJ5t9wuJG/kzTyJylSz6UYnxK8b4g0+P+GgYQoI5KipX1EA4cCHIngV1BJcE6cMz7QWFGvSjqOSbwnnpMYBb1Wg06XF3XtTrGLQyCPnvh4GsGRnOAqX+m2UWeiAEciuPwbqfbEAf/ydYCmG6SEawCktpcJx6jX8vkU1FhJgxx64lzgdaKeRv6kQm75NwAFOJJRKvEhY6B3ojE1VFLQ4+7VE5dwpdO7sSLik8NeJrlJVui0GnS4vKh30EoqKZBDG3UmCnAkgqv8pXzzjO/VUDEM9arEdqKhAywLJEYZkRRtErs4A6KpTWmRev4NAJj0OuQm+vdQovtGGo5LdEPRwVCAIwFOjw/lzYEVVGnS2wOHk5tohVGnRY+HVlJJgVR3MD4TN7V5ghJGJUEOAQ5AK6mkxOH0oDaQQzchRdr3TW8U4EjAqcZOMCwQZzUgWcI9cX2v06ppmkp88mmoaCWVlHA5dNIPjGkllVRwMwxpsWbYrAaRSzN0FOBIQO+GSqpz4pxxKdx0A1U6YiuVwbQmAOQm+fdQ6nR5+V4gEUeH08OPvkq9J04rqaSj987XckIBjgQc5xsq6d88NGwsHacCPVupVzoGHa2kkorjMuqJ88npNPInOqmed3c2FOBIgNQ3a+uNX0lFIzii6um1o3R+srQDHCCYh3OS7htRnZBRT5xfSeWklVRi46YJpT5afCYKcCTgeANX6Uj/5uHKeLKBVlKJ6VSjv8JJiDIiIUqae5n0RiuppIG7b8ZLfHoKoJVUUsLdN/kp0g+Me6MAR2ROjw/Vrf6e+DgZ3Dw5CbSSSgr4CieQ9C11/NQmJYyK6lTgvLv8FHndN7QCTzy9dyGXS33DoQBHZGVNXWBZwGYxIFEGPfHeK6moVyUeLv9GDkEx0GslVX0H5VOIKBgYy+O+4VZSnaC6RjRlgaA4KdqIOKv026jeKMARWe+euNRXUHHG0wnRouN74jJpqLjT6LvoNHrROD0+VAV2vpbLfUMrqcR3stH/u8+TyT3TGwU4Ijsts4YKAMYFynq6kQIcsXBJf3K5bww6LXIT/SN/XHBGIquiuRsMC8Sa9ZI9g+pMtJJKfKca5NdGcSjAEZkck7e4KapTFOCIwsewKGvyVzpymaICgvcNBcbi6F3XyGW0OCfRCo0G6HB60dTpFrs4qiS3fL/eKMARGXfz5CXJ5+bhIvlTjV3UqxJBVUs33D4GJr0WGXEWsYszZPn8yB+N4IjhlMxG/QDAbNBhTLz/HqfAWBxcGyWnzhSHAhwRMQwbHP6T0c3DbdrW3uNBSxf1qiKND4qTo6HTyqMnDgTn8GnkTxxySzDm8IFxEwXGkeb1MShvklfeVm8RCXC2bduG3NxcmM1mFBYWYv/+/QM+9/nnn4dGown5MpvNIc9hWRYbNmxAeno6LBYLioqKcOLECaE/RtjZHU70eHzQazXITrCKXZwhsxh1yAyMHFA+ReQF82/kM+oH9J6iontGDMHEdJndN0mBwJiWikdcdWsPP1qcKaPRYo7gAc5rr72GdevWYePGjTh06BBmzJiBhQsXoqGhYcDXxMbGoq6ujv+qqKgI+flDDz2ELVu2YPv27di3bx+ioqKwcOFCOJ3yOueG61HlJFph0MlrMI0bcaJh48iT65BxfqChsjuc6HJ5RS6NurAsK8t8P6BXYEwjOBHXe7RYK6PRYo7greqjjz6K1atXY9WqVZg8eTK2b98Oq9WKZ599dsDXaDQapKWl8V+pqan8z1iWxWOPPYa7774bl112GaZPn44XX3wRtbW1eOutt/q9nsvlgsPhCPmSAjnOiXO4nCGabog8uS0R59isBn71Thk1VhFldzjR7ZbfaDFAyeliknOCMSBwgON2u3Hw4EEUFRUF31CrRVFREfbu3Tvg6zo7O5GTk4OsrCxcdtll+Pbbb/mflZWVwW63h1zTZrOhsLBwwGtu2rQJNpuN/8rKygrDpxu94K6i8mqogN4jONRQRRLLsvwUldxGcIBe0w3UWEUUl+sny9HiQCBf1doDl9cncmnURc5LxAGBA5ympib4fL6QERgASE1Nhd1u7/c1EydOxLPPPot//etfePnll8EwDObPn4/q6moA4F83nGuuX78e7e3t/FdVVdVoP1pYyHEFFSefRnBE0dzlRnuPBxpNMNlbToJbDFBgHElyTTAGgJQYE6JNevgYFpXN3WIXR1XkOq3J0YtdgDPNmzcP8+bN47+fP38+Jk2ahL/97W+47777RnRNk8kEk8kUriKGzWkFjOBUtnTD5fXBpNeJXCJ14EZvsuKtMBvk9zvPp00iRSHnhkqj0SAvOQrfVLfjVGOXLA4lVgqaohpEUlISdDod6uvrQx6vr69HWlrakK5hMBgwa9YsnDx5EgD4143mmlLQ6fLC7ggcYJYkv0qH61UxLKhXFUFyr3BoBEccch7BAYKj3KebKDCOlJYuN1q7/aPFeTJsowCBAxyj0YjZs2dj9+7d/GMMw2D37t0hozSD8fl8OHz4MNLT0wEAY8eORVpaWsg1HQ4H9u3bN+RrSgHXg02KNsFmNYhcmuHjelUATVNFktyOaDgTtxdOWVMnGIY2iYyUYC6FXANjbqk4BcaRwtXrmXEWWIzyGy0GIrCKat26dXjqqafwwgsvoKSkBDfeeCO6urqwatUqAMDKlSuxfv16/vn33nsvPvjgA5w+fRqHDh3CihUrUFFRgRtuuAGAv2G95ZZbcP/99+Ptt9/G4cOHsXLlSmRkZGDp0qVCf5ywkXtPHAjd0ZhEBve7lmOCMQBkxVtg0Gng9DCoc8hrWwe56j1aLMcDE4Hem/1RZypS5LzKlyN4Ds5VV12FxsZGbNiwAXa7HTNnzsTOnTv5JOHKykpotcE4q7W1FatXr4bdbkd8fDxmz56Nzz//HJMnT+afc8cdd6Crqwtr1qxBW1sbzjvvPOzcubPPhoBSJscdjM9ES8Ujj6t05NpQ6XVa5CRG4WRDJ043dspy8zC54UaLk2NMsFnkN1oMhG4SybKsbM7SkjO5T2sCEUoyXrt2LdauXdvvz/bs2RPy/Z///Gf8+c9/HvR6Go0G9957L+69995wFTHilHDzcMEZjeBEhtPjQ217D4BghS9HeUn+AOdUQyfOH58sdnEUTwmjxWOToqDRBI+HSYyW3qIRpeGnw1Pke9/Ia0MEBQnuECnfm6f3ihg6dFN4lS3dYFkgxqRHYpRR7OKMWB6dLRRRct/LBPAfuplho+NhIon7+5RrgjFAAY4ofAwbPMBMxjdPTqIVGg3Q4fSisdMldnEUj9v9NzcpStZD9Pl0JlVEcfeNHPdN6o12NI4ct5dBVYu/jZJzJ5wCHBHUBA4wM+q0yIyXbw6C2aDDmED5y6ixEly5Yhoq2s04kpQS4NCp4pFT1doNhgWsRh1SYuQ7HUgBjgjKmv1/oNmJVuhkeIBZb7mJ/kqzvJkqHaH1HsGRM24Ep67diW43HbopJJZl+b9Npdw3NIIjPK4zlZso79FiCnBE0PvmkTuuV1jWRJv9CS3YE5fXYYlnirMakRDIIaJpKmE1dLjQ7fZBq/Hvfi1nebQtRcQoZdSPAhwRKKWhAnqN4NCwseCC941887Y4fG+c7htBcffMmHgrjHp5V/dcLkhlSzfcXkbk0ihbcNRP3m2UvO94mVLKkDEQjPBpikpYXS4vGjr8idxjFTDyR4FxZCglbwsA0mLNsBh08DEsqlppxFhI3CIYuc8yUIAjAr7SkfnNAwSDtPLmLtp6X0BcAJkQZZTl0R5n4u8bCnAExeX7KSHA0Wg0yEn0jyhUUIdKUDRFRUbE42NQ1erfrG2sjJffccbEW6DT+rfer++grfeFwicYJ8p7yJhDyemRUa6w+4Zy/oTXe0NRuc8yUIATYdWtPfAxLMwGLVJj5HO0xEAMOi2yuKXi1BsXTLlCVlBxuLn9cjqJXlD8VINi7hv/56ARHOHwG4qa5b2hKEABTsT1XkGllfkScU5wuoEaK6EEdxVVSEMVGMFp6XKjvccjcmmUiWGCS8TlPtXA4UaiqDMlnN7TU3JeIg5QgBNxZQpaIs6h6QbhKW0EJ8qkR3JgAzHqjQujzuGEy8tAr9Uo5lBTqmuEp6RtTCjAiTAlraDiBOfFqdIRCjeVo4RKh8Ml2dN9IwyuocpOsEKvU0ZVz9U1Na09tFRcIErZUBSgACfilLQHDodWxAirvdt/gjKgnKkGoFceDk1tCkJJDRUnOcYEq1EHhgUtFReIktooCnAijB/BUWBPvKKlm5aKC4Bb6psSY0KUSS9yacInh6YbBKWkPXA4/qXilGgsJCW1URTgRJDby6CGWyKuoEonI84Mg04Dt5fhlxeS8Clr8p+9o6SeOECbRApNidPhQHBkgZaKh1+324t6R2BDUQXcNxTgRFBli/+E1iijjk+wVAK9TousBJpuEApXkStlBRWHdjMWVpmCNhTtLYfuG8Fw9Xe81YA4q7yXiAMU4EQU9weZI/MTWvvDJ4xSbzzslLaCisPl4LR2e9DeTUvFw8nrY1DZwu2BI/9cit7G0tSmYJSWt0UBTgQpbU+K3ijRWDhK3FoAAKxGPVICI5nUWIVXbZsTHh8Lo16LDJsylohzuOMa6J4JP76NUkhdQwFOBAWjY2X1qAAKcITCsiz/O81TwNEeZ8qlPBxBcCOpOQlWxWwoyqGl4sKhERwyYkrKTj8TTVEJo6nTjQ6XFxqNfz8TpaG9cISh1GlNgJaKC0lpK+8owIkgLoFLKTdPb9yoVFVLN7w+6lWFCxcUZ9gsMBt0Ipcm/HKSuNOhqaEKJ6WcBt2f3kvFacQ4vJSWRkEBToQo6YTW/mTYLDDqtfD4WNS20ani4aLkhgqgERyhKK2hOtNYOqw17BxOD5o6/RuKKqWNogAnQvgTWk3yP6G1P1qtBjmBKRSapgqf4Mo75U1PAZSDIxQlnSfUH9piIPy432VStAnRCtlQlAKcCOmdvKW0JeIcSjQOP26pr1IDHO5ztXV70NbtFrk0yuDxMahS4IaivdGhm+GnpCMaOBTgRIiSk/44dOhm+HEBTnaCMu8bq1GP1FhuqThNN4RDdWsPfAwLi0HH/26Vhkb+wq9CgQf6UoATIcH9BZQTHZ+JelXhx1U6Sh3BAWi6Idy4v7+cRKuCR4v9fw+0VDx8lFjXUIATIcGbRznR8ZlyA38YldQTD4v2bg/ae/w7/CpxiTgnlxKNw4r7+1PyPZMcbUJUYKk4N8pJRqeyxf/3l62gNooCnAhRYnR8ppzAsHFVazd8dKr4qFW0BJP+lHSK+Jm46QY6HTo8gtOayq1r6FTx8OPbKAXdNxTgRIDby6AusEQ8W8EBTlqsGUYdt1ScThUfLTUExUCv06Fp5C8s1HLf5PKnilOAM1o9bh8aOvyniCvpvqEAJwKqW/2niFuNOiRHKzPpDwB0Wg3GJPjPvaFh49FTQ08coNV34abEqYb+5PIjOFTXjBa3I3SMWQ+bxSByacInIgHOtm3bkJubC7PZjMLCQuzfv3/A5z711FM4//zzER8fj/j4eBQVFfV5/nXXXQeNRhPytWjRIqE/xohV9GqolJr0x+GGN6nSGT015FIAwc/X3kOnio8Wy7LBrQUUft/Qoobw6T3qp6Q2SvAA57XXXsO6deuwceNGHDp0CDNmzMDChQvR0NDQ7/P37NmDq6++Gh999BH27t2LrKwsXHTRRaipqQl53qJFi1BXV8d//f3vfxf6o4wY11BlKbzCAYJJ1Fz+CBk57neopCHj/liNeiQHThWn+2Z0GjpccHoY6LQaZMYr6xTxM3HT/TRaPHoV/OGsyhr1EzzAefTRR7F69WqsWrUKkydPxvbt22G1WvHss8/2+/wdO3bgl7/8JWbOnImCggI8/fTTYBgGu3fvDnmeyWRCWloa/xUfHz9gGVwuFxwOR8hXJKmlRwUEe+O0kmr0KlWSSwHQyF+4cL+/jDgzDDplZyBwfxc1rT10/t0o8dPhCqtrBP0LcLvdOHjwIIqKioJvqNWiqKgIe/fuHdI1uru74fF4kJCQEPL4nj17kJKSgokTJ+LGG29Ec3PzgNfYtGkTbDYb/5WVlTWyDzRCakn6A4KfkRqq0XF5fahz+M/0Uuomf71Rbzw81JK3BQCpMWYY9Vp4GTr/brSUuIIKEDjAaWpqgs/nQ2pqasjjqampsNvtQ7rGnXfeiYyMjJAgadGiRXjxxRexe/dubN68GR9//DEWL14Mn8/X7zXWr1+P9vZ2/quqqmrkH2oE1JL0BwQDHP/ZW7RUfKSqWnrABhLTk6KVd3bZmbihcRr5G53KwFSDGoJirVbDB3I0tTk6Sg2MJb25xoMPPohXX30Ve/bsgdls5h9ftmwZ///Tpk3D9OnTkZ+fjz179mDBggV9rmMymWAyibN6SU1JfwAwJt4KjQbodHnR0uVGooJXjQmJD4pVkJgO9Br5o4ZqVCoUfnbZmXISrDjZ0ImK5m6cP17s0siTj2FR3UpTVMOWlJQEnU6H+vr6kMfr6+uRlpY26GsffvhhPPjgg/jggw8wffr0QZ+bl5eHpKQknDx5ctRlDjc1Jf0BgNmgQ3qsPxils4VGTi0rqDhZlLsVFkqdahgITW2OXl17Dzw+FgadBuk2ZbVRggY4RqMRs2fPDkkQ5hKG582bN+DrHnroIdx3333YuXMn5syZc9b3qa6uRnNzM9LT08NS7nBSU9IfJ1jpUG98pFTXEw98zjqHEy5v/1PN5OyUmiw6kGByOtU1I8Wv8o23QqdV1mix4C3uunXr8NRTT+GFF15ASUkJbrzxRnR1dWHVqlUAgJUrV2L9+vX88zdv3ox77rkHzz77LHJzc2G322G329HZ2QkA6OzsxO23344vvvgC5eXl2L17Ny677DKMGzcOCxcuFPrjDJtSl98NhvuslGg8cvwIjgrytgAgMcqIKKMOLOvPPyLD1+H0oKXLDUA9I385tNnfqFUoOCgWPAfnqquuQmNjIzZs2AC73Y6ZM2di586dfOJxZWUltNpgnPXEE0/A7Xbjpz/9ach1Nm7ciN///vfQ6XT45ptv8MILL6CtrQ0ZGRm46KKLcN9994mWZzMYrkelhj1wONl06OaoVagobwvwny2UnRiFkjoHKlu6MC4lWuwiyQ5X1yREGRFjVs5utIPhpzYDixrUkK8Wbkqe1oxIkvHatWuxdu3afn+2Z8+ekO/Ly8sHvZbFYsH7778fppIJT01LxDnBhFEKcEaCYXolpqvpvkmwoqTOQb3xEVJb3hYAZCVYoNEA3W4fmjrd/IaRZOi4VAIldsLVkRQiIjWtoOLQFNXo1Hc44fb6E9Mz4pSV9DcY2kNpdNSWtwUAJn1wUQMlGo9MsDOlvOlwCnAEprakPyD4WZs6XehyeUUujfxwPfHMOItqEtMBWhEzWkqeahgMLWoYOZZlFT3LoJ7aUwS9k/6UGB0PxGYxIN7qzwGgxmr4KhS66dbZBEf+qKEaCTVtKNobjRiPXFu3Bx1OfydUifUNBTgC4v7gEqOMiDZJek/FsMtOpMZqpIIrqJRX4QyG60FWtfaAYWgX7OFS6m60Z0OLGkaO60ylxppgNuhELk34UYAjIDVOT3Ho8MSRU9sKKk66zQy9VgO3l0F9B50tNBweH8Ofx6TEqYbB0KKGkVP6NiYU4AhIrXPiAFU6o8GdJ6S2hkqv02JMYLdvCoyHp6a1Bz6GhdmgRYrKVhLRFNXI8Zv8KbSNogBHQL3PE1KbbNp6f8SCOTjK7FUNho5sGJneeVtq2wuGFjWMnNK3o6AAR0AVKtuNtjd+h1Fa2TAs7T0etHV7AKh0apMO3RwRNZ0ifiabxQCbhRY1jITStxagAEdASl5+dzbcZ65tc8LjY0QujXxUtag3MR2g6YaRUnpP/GxoD6WRUfrmkBTgCMTtZVDX7j9TR405OCkxJpgNWvgYFjWtdLbQUFWodAUVh/bCGZkKhTdUZ8NPidPI35A5PT7YHVxiujJH/ijAEUhNWw8YFrAYdKrcPlyj0fCVDiUaDx03NaPGoBignvhIqXnFJhC8bygwHjputDjapOf3LVMaCnAEUtEcTDBWW9Ifh+sVVNJeOEOmtlPEz8QFxe09HrQHcpHI4FiWVeWRML3R1Obw9R71U2obRQGOQNTeowKClW05VTpDpuatBQDAatTzI56UaDw0jZ0udLt90GqAMfHqvG9oanP41JC3RQGOQNTeUAE03TASaqh0zoY2iRwebtQv3WaBUa/OKp37e6lp7YGXFjUMiRo64er8a4gAtSeLAsFpFkr8Gxq3l0FtIDFd3fcN9caHg4JiIDXGDKNeCy/D8js6k8EpfRdjgAIcwah5kz9OTkKwoWJZOlvobKpbu8FyienR6ktM53AVLm32NzRqX0EFAFqtBlncLtjUoRoSpe+BA1CAI4iQpD+VJosCQGa8BTqtBk4Pg4YOl9jFkTw170bbW3YiNVTDoYaphqHgNxelwPisfAyL6pbAaLGCA2MKcATQ0OGC08NAqwEy4yxiF0c0Bp0WGXFmAFTpDIVaTxE/UzaN4AyLGqYahiI7gaY2h8rucMLtY6DXapBuM4tdHMFQgCMA7g8sI069SX+c4PJN6o2fDSWm+3FD5nUOJ1xen8ilkT7KwfELLmqguuZsuM7DmHgL9DrltlHK/WQiUvMRDWeihNGh4/K21H7fJEYZEWXUgWWBqhbaBXswXS4vmjrdAGjkj1ZtDh2fI6rwFAoKcASg5oPvzkRLfodOzYez9qbRaGgF3hBxHYd4qwGxZmXuRjtU/NQmLWo4K7WMFlOAIwA1ZKcPFW2hPjS0G20oCoyHhlZQBWUlWKDRAN1uH5q73GIXR9LU0kZRgCMAqnSCeveqyMAaOlxwef2J6RkqTkzn0HTD0KhlqmEoTHod0mNpUcNQcDk4WQpvoyjAEUBlCwU4HC4voKXLjQ4nnS00EK5CpsR0P8rdGhq1TDUMVfC+oanNwfAr72gEhwxHh9ODlsDwqNJvnqGINumRGGUEQL2qwailwhmqHBr5GxLaAydUNk1tnlV7twcOpxeA8jvhFOCEGfeHlRBlRIzKk/441Bs/u+CoH001AKG5WwxDCaMDobytUNxmf7SH0sC4DTSTY0ywGvUil0ZYFOCEGU1P9UUJo2dHWwuESreZoddq4PYyqO+gs4X64/UxqGmls8t640dwqDM1IDVNa1KAE2a06VZfwSW/VOkMhHriofQ6LTK5s4UoMO5XbZsTXoaFUa9Faoxyd6MdDkpOPzs1dcIpwAkzNUXHQxU8dJMS/wZCuRR98VvvU2PVr4peB/pqteo9u6w3LnerqdOFbrdX5NJIE5fvp4a6hgKcMKNlm31lU69qUL0T09XQqxoq2kNpcNSZ6stmNcBm8ec+0n3TPzVNh1OAE2ZqunmGiquAa9t64PYyIpdGeigxvX/8OWbUUPWrikb9+kXTVIOrUtGChogEONu2bUNubi7MZjMKCwuxf//+QZ//xhtvoKCgAGazGdOmTcN//vOfkJ+zLIsNGzYgPT0dFosFRUVFOHHihJAfYUjcXga1bco/gn64kmNMsBh0YFigpo3OFjqTmubEhyOLn6Kiqc3+0AhO/7JoanNALq8PdQ5/0r4aOuGCBzivvfYa1q1bh40bN+LQoUOYMWMGFi5ciIaGhn6f//nnn+Pqq6/G9ddfj6+++gpLly7F0qVLceTIEf45Dz30ELZs2YLt27dj3759iIqKwsKFC+F0irvaoqatBwwLmA1apMSYRC2LlGg0mmA+BfXG+6BRv/7xPXG6Z/pVQSM4/eJXbVLOXx9VLT1gWSDKqOP3J1MywQOcRx99FKtXr8aqVaswefJkbN++HVarFc8++2y/z//LX/6CRYsW4fbbb8ekSZNw33334ZxzzsHjjz8OwD9689hjj+Huu+/GZZddhunTp+PFF19EbW0t3nrrrX6v6XK54HA4Qr6EwCdvJVih0VDSX2/8XjjUG++DP0WceuIhuKC4rduD9h7aBbs3lmXpUN8B0BTVwLi6JkslbZSgAY7b7cbBgwdRVFQUfEOtFkVFRdi7d2+/r9m7d2/I8wFg4cKF/PPLyspgt9tDnmOz2VBYWDjgNTdt2gSbzcZ/ZWVljfaj9Ys2axsY7TA6sOAKKrpveosy6ZEU7R8JpemGUM1dbnS5fdBo/IdMkiCu/q2ikb8+1DZaLGiA09TUBJ/Ph9TU1JDHU1NTYbfb+32N3W4f9Pncf4dzzfXr16O9vZ3/qqqqGtHnOZsZY+Lw6x+Mw4+mpwtyfTmj6YaB0eGsA6OVVP3j7pn0WDNMep3IpZEW7p6pbu2B10eLGnoLBjjq6Ewpe5/mAJPJBJNJ+JyYGVlxmJEVJ/j7yBHtadK/3onpaulVDUdOghUHK1opn+IMtIJqYKmxZhh1Wrh9DOranYo/MXs4qlS2oEHQEZykpCTodDrU19eHPF5fX4+0tLR+X5OWljbo87n/DueaRHw5vXYzZlk6W4hDiemDoxUx/QuuoFJHT3w4dFoNxiTQLtj9qVDZTvuCBjhGoxGzZ8/G7t27+ccYhsHu3bsxb968fl8zb968kOcDwK5du/jnjx07FmlpaSHPcTgc2Ldv34DXJOLLjLNAqwF6PD40drrELo5kUGL64ChhtH/8LsYqaaiGi1ZS9cUwrOq2pBB8imrdunW49tprMWfOHMydOxePPfYYurq6sGrVKgDAypUrkZmZiU2bNgEAbr75ZlxwwQV45JFHsGTJErz66qv48ssv8eSTTwLwLzm+5ZZbcP/992P8+PEYO3Ys7rnnHmRkZGDp0qVCfxwyQka9FhlxFlS39qCyuRspdHYOAEpMPxvKwelfJeVtDco/YtxI900v9R1OuL0MdFoNMuLUkZgueIBz1VVXobGxERs2bIDdbsfMmTOxc+dOPkm4srISWm1wIGn+/Pl45ZVXcPfdd+O3v/0txo8fj7feegtTp07ln3PHHXegq6sLa9asQVtbG8477zzs3LkTZjM1mlKWnWBFdWsPKpq7MSc3QeziSEKlylY1DBcX+NW2+3fBNupp83VAfVMNw0U5f31xo6CZcRYYdOr4O4pIkvHatWuxdu3afn+2Z8+ePo9dccUVuOKKKwa8nkajwb333ot77703XEUkEZCTaMXnp5ppJVUv1FANLinaCKtRh263D9Wt3chLjha7SKLrcfvQ2OGf5qUcnP7R1GZfauxMqSOMI5LA9cZps78grtKhlR79670LNgXGfty0i81igM1KZ5f1p/fO6bSowU9t+TcABTgkgmgvnFAsG0z6o12MB0bTDaF6J6aT/nEdhk6XFy1dbpFLIw0VFOAQIhzuD4t2GPVr7HChx+ODVgOMiVdPpTNcNN0QqpL2wDkrs0GHtFh/TiYlGvtxI+c0RUWIALgKuanTjU6XV+TSiI/rUaXbLJQ8O4hsfg8lmtoE6BTxocqmFXghKlS4YpNqVRIxsWYD4gM5AzTdoL5zYUYqh06iD0GJ6UOTQ+ff8dp7PGjr9h9Yq6aRPwpwSERRbzyokhqqIaGE0VB0ivjQ0NRmENehTIo2ItqkihOaAFCAQyKMelVBFdRQDUlmvAU6rQZOD4OGDnXvgu31MahupbPLhoI/5oM6U8Gdr1U2rUkBDoko2pk2iKaohsag0yIjzp8wqvbAuK7dCS/DwqjX8km0pH/c+Xdqv2cA9Z0izqEAh0RUFuVT8NS4L8VIcRvaVah8DyXunsmKt0CrpbPLBsONFjd0uNDj9olcGnGp7RRxDgU4JKJoisqvw+nh9+egEZyz4xIj1b7FgFp74iMRZzUgxuzPN6lqpfsGUF9dQwEOiSiuYq5p64HHx4hcGvFwFU5ClBExZtqN9mxyaDdjAOrNpRgJjUZDicYBal3QQAEOiaiUGBNMei18DIvath6xiyMamp4anmwa+QNAp4gPV/C+Ue/UpsvrQ227v65V24IGCnBIRGm1GmqsoN4h45GiTdv86L4ZHv78OxXfN9WtPWBZwGrUISnaKHZxIooCHBJxtJIquHSVdqMdGm5qs6XLjQ6nR+TSiCPk7DIKcIaE6prQUT+NRl2J6RTgkIijlVTBnng2JYsOSbRJj8Qof+9TrSN/LV3+I040dHbZkOXQQa2qPpyVAhwScTk0L05TDSOg9pVUXIJ1WqwZZoNO5NLIA3/PtHbDx6hzF2w1H+1BAQ6JOLVvwOX2MqgLJP3RFNXQZat8JRUlGA9fus0Cg04Dj4/l/+bUht8DR4WjxRTgkIjrnTCqxrOFqlu7wbCAxaBDcoxJ7OLIhtr3UKL8m+HTaTX8dJ5ap6nUfPo8BTgk4sbEW6DRAN1uH5o63WIXJ+IqWtSb9Dcaaj+olTb5Gxk1j/wxjLoT0ynAIRFn0uuQHjhHR42JxvxUgwornNFQ+6ZtXGCXpcKe+GioeSVVQ4cLLi8DnVaDjDiL2MWJOApwiCiC01Tq642rech4NLjfV61Kd8Gm+2ZkslW8kopbyJEZZ4FBp77mXn2fmEhC8PBE9VU6/B44NIIzLMkxJpgNWjAsUNOqroTRHrcPDR0uAHTfDBe/qEGNnSkVT08BFOAQkfAjOCoMcGgPnJHRaDSqzafgpldizXrEWdW1G+1o9Z7aVNuiBq5+Veu0JgU4RBR8paOyhiok6U+llc5o8Fvvq2wPJW6qgRKMhy8rsIqqw+lFW7e6dsGuUHldQwEOEUWOSs+I6Z30lxmvvqS/0VJrojF/OKtKpxpGw2LUISWwHYPa6hs1r6ACKMAhIuGmGho7XOh2e0UuTeRwPfGMOLMqk/5GS60jf5RgPDpqvW8q+WMa1DnyRzUsEYXNaoDNYgCgrl5VcMhYnRXOaHGBsdqOa1B7T3y01Di16XB60BqYklPryB8FOEQ0apxuoD1wRie710GtakoY5QIctSaLjpaa65qkaCOiTXqRSyMOCnCIaNS4P4Xak/5Ga0y8FdrALtiNnS6xixMRPoZFdSvtYjwaapyiqqCzyyjAIeIJVjrqGTaubKY9cEbDqNci3eZPzlZLYOzf2JCFUadFWmAHcDI8WarsTNHKOwpwiGiC0w3q2bQteA6Veiud0VLbdAM3PTUmwQKdls4uGwluxNTucMLp8Ylcmsig0+cFDnBaWlqwfPlyxMbGIi4uDtdffz06OzsHff6vfvUrTJw4ERaLBdnZ2fj1r3+N9vb2kOdpNJo+X6+++qqQH4UIQG2Jf+3dHn4fDsrBGTm1nS1EK6hGLyEqmIfCTfcpXfBwVvXeN4JmHi1fvhx1dXXYtWsXPB4PVq1ahTVr1uCVV17p9/m1tbWora3Fww8/jMmTJ6OiogK/+MUvUFtbi3/84x8hz33uueewaNEi/vu4uDghPwoRAPeHV93aA6+PgV7hy6a5IeOkaJNqk/7CIStBZQEOTTWMGrcL9tE6ByqauzEuJUbsIgmO3ztJxYGxYLVsSUkJdu7ciQMHDmDOnDkAgK1bt+Liiy/Gww8/jIyMjD6vmTp1Kv75z3/y3+fn5+OPf/wjVqxYAa/XC70+WNy4uDikpaUNqSwulwsuVzAh0eFwjPRjkTBKizXDqNfC7WVQ1+5U/AoR6lGFR/AcM3WM/NFUQ3jkJAYDHKXz16n+qX81jxYL1mXeu3cv4uLi+OAGAIqKiqDVarFv374hX6e9vR2xsbEhwQ0A3HTTTUhKSsLcuXPx7LPPDrpkdNOmTbDZbPxXVlbW8D8QCTutVoOswG6+aqh06IiG8FDtFJWKG6pwyFbRyF91azcYFrAadUiONoldHNEIFuDY7XakpKSEPKbX65GQkAC73T6kazQ1NeG+++7DmjVrQh6/99578frrr2PXrl24/PLL8ctf/hJbt24d8Drr169He3s7/1VVVTX8D0QEoaaTfrkRBzX3qMKB+/01dbrR6VL2Ltgsy9Imf2GSraLAuKLX9JRGo97E9GFPUd11113YvHnzoM8pKSkZcYE4DocDS5YsweTJk/H73/8+5Gf33HMP//+zZs1CV1cX/vSnP+HXv/51v9cymUwwmdQbxUqZmnpV1BMPj1izAfFWA1q7Pahq6cak9FixiySY1m4PH8SNiaf7ZjTUNLVJ05p+ww5wbrvtNlx33XWDPicvLw9paWloaGgIedzr9aKlpeWsuTMdHR1YtGgRYmJi8Oabb8JgMAz6/MLCQtx3331wuVwUyMiMmjb7q6Ql4mGTnWBFa3c7KpqVHeBwjXFarBlmg07k0sgb17Goau0Bw7DQKnjJPXWm/IYd4CQnJyM5Ofmsz5s3bx7a2tpw8OBBzJ49GwDw4YcfgmEYFBYWDvg6h8OBhQsXwmQy4e2334bZfPaNrYqLixEfH0/BjQypZU8Tp8cHu8MJgCqdcMhOjMLX1e2oVPjUJjVU4ZNuM0Ov1cDtZWB3OJERZxG7SIIpDwTGuUnq7kwJloMzadIkLFq0CKtXr8b+/fvx2WefYe3atVi2bBm/gqqmpgYFBQXYv38/AH9wc9FFF6GrqwvPPPMMHA4H7HY77HY7fD7/5kzvvPMOnn76aRw5cgQnT57EE088gQceeAC/+tWvhPooREC9E0aVfLZQdWs3WBaIMuqQGGUUuziyxyVqKz0wLmvyN1RjVd5QhYNep8UYlSxq4AMclW8tIOhmHDt27MDatWuxYMECaLVaXH755diyZQv/c4/Hg9LSUnR3+2+2Q4cO8Susxo0bF3KtsrIy5ObmwmAwYNu2bbj11lvBsizGjRuHRx99FKtXrxbyoxCBcHkFnS4vWrrcSFRoxj9/LkxilKqT/sJFLQmj5c20B044ZSVYUd7cjaqWbszLTxS7OILw+hhUBf4u1D6CI2iAk5CQMOCmfgCQm5sb0mu/8MILz9qLX7RoUcgGf0TezAYd0mLNsDucqGzpVnyAQ0vEw0MtIzjlgc83Nonum3DISbTifyeUvWqzts3pP7tMr0W6ys8uU/bWsUQW1NAb53vi1FCFBTeiUdPWA4+PEbk0wilvolyKcAqupFJBXZNgVXQi9VBQgENEp4beOJ9LQVMNYZESY4LZoIWPYVHTqszDWlu73Gjv8Z9dlkMr78IiWwWLGmhaM4gCHCI6NaykolUN4aXVavhGv0yh+5qU91oibjHSEvFw4JK1y5u6FLuoobyJpjU5FOAQ0WUHehpKXfLr9jL8KAOthgmf3o2VEgWDYmqowsW/sy/Q4fKiucstdnEEQZ2pIApwiOhyAyM4ZU3KHMGpbAmeC5MSo8wkajHkKjzA4f4e1L7UN5zMBh0ybP6l4kq9b/i8LbpvKMAh4uMaqqZOFzqcHpFLE35chZNDS8TDihuCL1Po1GYF9cQFwY2IlSkwwPH6GFS10hJxDgU4RHSxZgOSov2b35UrcBSHGzKmOfHw4nqoyu+J030TTvzUpgJzt2iJeCgKcIgkcJWOEhNGy2jIWBDcPVPd2g23V1lLxVmWDd431BMPq2BgrLzOVBktEQ9BAQ6RBK7SKWtUXoBDSX/CSI4xIcqoA8Mqbw+ltm4PHE7/KeK0RDy8uMD4tAJH/mhaMxQFOEQSchU8bBxctkmVTjhpNBp+rw+lTVOV0RJxwXB1TUWz8paKl9G0ZggKcIgk5HFTVAprqJweH2rb/UvEaYoq/JSaTxHcwZgaqnDLirdCqwG63T40dLjELk5YcXuJ0QiOHwU4RBJyFRrg+E9JB6JNej6RmoSPUlfEBM+gooYq3Ix6LX/Ir+LuG8r3C0EBDpEE7g+yvceDVgVtwFXWqydOS8TDb2xSNADljuDQdvvCUOImkV4fw+ei0QiOHwU4RBIsRh3Sbf5ljUpaSUU9KmFxS++VtiKGT0yn+0YQSly1WdvmhJehJeK9UYBDJEOJK6mCe+BQQyUE7p6pbe+B0+MTuTTh0XuJON03wuCScJU0gkNLxPuiAIdIxthk5SWM0h44wkqIMiLGrAeroKXird0edASWiGcnUJKxEJSY81dO+yb1QQEOkYyxiUqsdGhOXEgajSY43aCQ+4b7HOk2WiIulLH8UvFuMIwylooHpzUpKOZQgEMkQ2m9qh63D3aHEwBNNQgpV2GBMbdZWw41VILJjLNAr9XA5WVQF/gblTsawemLAhwiGb1XNihhAy6uRxVr1iPeahC5NMqltFPFyyn/RnB6nRbZCsvD4fbAGUvT4TwKcIhkZCf4N+DqcvvQqIANuHo3VLREXDhjFbYXDnc6OuVtCUtJU+K9l4jnUGDMowCHSIbSNuAqo3NhIkJpe+EEp6jovhGSkkb+atp6aIl4PyjAIZKipDOpaA+cyOB64vUOF7rdXpFLMzosy/LbJNAUlbCUlPN3mrtnEqNoiXgvFOAQSRkbmBdXwkm/dMhmZNisBj7HSe4b/jV2uNDh8kKroXOohMZPUSmgM3WqsRMAkJdMdU1vFOAQSVHSFuo0RRU5Shn5OxXoiY+Jt8KkpyXiQuICyKqWbnh9jMilGR2uQ5ifHC1ySaSFAhwiKcF5cXn3xDtdXj5RmlY1CE8pCaOnm6gnHikZNguMei08Pha1bfJeKn6aRnD6RQEOkZSxvXrict6Ai8ujSIwywkZLxAWnlHwKLpeCeuLC02o1/KZ4cp+m4kb+8ui+CUEBDpGUzDgLDDr5b8DFzYlTQxUZXM9V7gEO5VJEFteh4kZA5KjD6eFHi+m+CUUBDpEUvU6LrMD5O3I+dJOGjCOLCyRPNnTKepNIbgQnL4kC40jg7pvTsq5r/GVPijYh1kyjxb1RgEMkJ4+fbpBvr+oUTTVElH8zRaC9x4OWLrfYxRkRl9eH6lZ/7ll+CgXGkcD9fZ6S8QgOl7eVT52pPijAIZITrHTk26vip6iooYoIs0GHMfEWAPK9byqau8GwQIxJj+Rok9jFUYX8FAUEOJR/MyAKcIjk9J5ukCOGYflcEJpqiBy598ZPNQSnNeloj8jgppDrHS50OD0il2Zkgvl+1Jk6k6ABTktLC5YvX47Y2FjExcXh+uuvR2fn4JXPhRdeCI1GE/L1i1/8IuQ5lZWVWLJkCaxWK1JSUnD77bfD65X3DqYkSO69qpq2Hri8DIw6LT+qQITHBzgyDYxpL5PIizUbkBLjHy2Tax5OcASHApwz6YW8+PLly1FXV4ddu3bB4/Fg1apVWLNmDV555ZVBX7d69Wrce++9/PdWa3BHT5/PhyVLliAtLQ2ff/456urqsHLlShgMBjzwwAOCfRYSOeMCFXxduxOdLi+iTYLepmHHBWY5iVbodTRIGimyH8GhxHRR5CdHo6HDhVONnZiRFSd2cYal92gxBcZ9CVb7lpSUYOfOnXj66adRWFiI8847D1u3bsWrr76K2traQV9rtVqRlpbGf8XGxvI/++CDD3D06FG8/PLLmDlzJhYvXoz77rsP27Ztg9vdf3Khy+WCw+EI+SLSZbMakBTN9ark11jRXibi4Ibo5ZqDQ7kU4uDy5OQ4JR46WkxHe5xJsABn7969iIuLw5w5c/jHioqKoNVqsW/fvkFfu2PHDiQlJWHq1KlYv349uruDu9ru3bsX06ZNQ2pqKv/YwoUL4XA48O233/Z7vU2bNsFms/FfWVlZo/x0RGjBxkp+lQ71xMXBTW1WtXbD6fGJXJrhYVmW9k4SiZxH/rhpzZxEK3R0yGYfggU4drsdKSkpIY/p9XokJCTAbrcP+Lr/9//+H15++WV89NFHWL9+PV566SWsWLEi5Lq9gxsA/PcDXXf9+vVob2/nv6qqqkb6sUiEjEuRb6IxNVTiSIwywmYxgGXldyZVU6cbHU4vNBp/Y0UiR86rNmm/rcENO7nhrrvuwubNmwd9TklJyYgLtGbNGv7/p02bhvT0dCxYsACnTp1Cfn7+iK5pMplgMtGySzkJJozKsdIJTFGlUIATSRqNBvnJUThU2YZTDV0oSIs9+4skgmuoxsRbYDbQIZuRxP2dVjR3weNjYJBR3hx1pgY37ADntttuw3XXXTfoc/Ly8pCWloaGhoaQx71eL1paWpCWljbk9yssLAQAnDx5Evn5+UhLS8P+/ftDnlNfXw8Aw7oukTa5rqTqcHrQQNumiyY/Odof4MjsvjlN2wqIJj3WDItBhx6PD1Ut3bLKgaK8rcENO8BJTk5GcnLyWZ83b948tLW14eDBg5g9ezYA4MMPPwTDMHzQMhTFxcUAgPT0dP66f/zjH9HQ0MBPge3atQuxsbGYPHnyMD8NkSpuiqq8uQteHyOb1UhchZMcQ9umiyFPpvkU3NJ26olHnlarQV5yFL6tdeBUY5esggVaIj44wVqNSZMmYdGiRVi9ejX279+Pzz77DGvXrsWyZcuQkZEBAKipqUFBQQE/InPq1Cncd999OHjwIMrLy/H2229j5cqV+N73vofp06cDAC666CJMnjwZ11xzDb7++mu8//77uPvuu3HTTTfRNJSCcL0qj49FZUv32V8gEXyCcRJVOGKQa3I6P4JDDZUo5Jho3OXywh44kDifRv76JWi3eMeOHSgoKMCCBQtw8cUX47zzzsOTTz7J/9zj8aC0tJRfJWU0GvHf//4XF110EQoKCnDbbbfh8ssvxzvvvMO/RqfT4d1334VOp8O8efOwYsUKrFy5MmTfHCJ/Wq1Glss3Kf9GXPzUZkMXGEY+h25Ssqi45LhJJLf/TVK0ETYrjRb3R9Ad1BISEgbd1C83Nzfk5N+srCx8/PHHZ71uTk4O/vOf/4SljES68pOjcaTGIavVDTSCI67sBCv0Wg16PD7YHU5kxEl/J2mX14eq1h4ANEUlFq4zJacRHK7jR3lbA5NHYgNRJTmeScWVlUZwxGHQafll1nJprMqauuBjWMSY9fyxASSyei8V793plrITDR0AgPGpVNcMhAIcIlnjZLaSyu1l+GHjCakxIpdGveQ23XCi3l/OCakxdMimSMYmRUGjAdp7PGju6n9HfKk5HrhvxlNnakAU4BDJ6p34J4deVXlzF7wMi2iTHhk2s9jFUa3gFgPymNo8UR/oiVNDJRqzQccfjCuXwJgbLabO1MAowCGSlZtkhVYDdDi9aAzsLSNlXE98XEo09cRFJLepTb4nTg2VqPj7RgYjxk6PDxWB3brH0RTVgCjAIZJl0uuQneDPp5BDpXOceuKSwB/zIYN7BgjmUkyghkpUcgqMTzV2gmGBOKsBydGUtzUQCnCIpPF5ODKodIINFfXExcQFmI0dLrRKPJ/C5fWhvNm/Tcb4FLpvxMQFmNxIrJRxQdh4Gi0eFAU4RNK4XtUJGQQ4wakG6omLKcqk5/MpuFE1qeq9gio1lnriYuI6JqUSv2eAXqPF1JkaFAU4RNK4SkfqDZXby6CcVlBJxkSZ3DfHaQWVZHDBghxG/k7QCqohoQCHSNrEtECvyt4h6ZVUvVdQpdMKKtFNSJNHb/wk5W1JRrSMRv5O0AqqIaEAh0jauJRoaDVAa7cHjZ3SXUnFVYi0gkoauHyK43ZpT23SCippkcOIce8VVBQYD44CHCJpZoMOuYn+bdSl3FgFN2ujCkcK+IaqQdojf8dpBZWkyCEP53RjFxgWsFkMSKadrwdFAQ6RPDlUOrSCSlryk/0jf23dHsnuoeTy+lARWEFF9400TEyT/sgff0QDjRafFQU4RPL4fAq7Q+SSDIymGqTFbNAhN3DgqVQDYzqDSnrkMPJ3guqaIaMAh0heAZ8wKs1eVe8VVDQnLh0TUoIJ6lJEK6ikRw4jf7Sh6NBRgEMkj+tVnajvAMNIr1fFraCKoRVUksKN/El14zZuBRXl30hH75w/qY780QqqoaMAh0hebqIVRr0W3W4fatp6xC5OH/wKqlSaE5eSiRLP3TrOn11GDZWU8Dl/Ehz5C1lBRYHxWVGAQyRPr9NiXGBH42MSrHSOB8o0gRoqSQluvS/NfIpjgZyyidQTlxQpj/ydqPefQRVvNVDe1hBQgENkgdvwT4r7Uxyt85epIJ0aKinJTYqCQadBlwRH/rpcXlS0+FdQTaL7RlKkPPJXUucPiielx9Jo8RBQgENkQcrDxr0rHSIdBp2WP8tMaoFxaX0HWBZIiTEhkU6DlhRuqbgUc/5KAqN+BWlU1wwFBThEFvj9KSTWULX3ePjRgUlU6UgOFxhLbWqTC4oLKCiWnJxE6Y78BTtTNOo3FBTgEFmYGAgeTjV2wuNjRC5N0LFAhZMZZ4HNahC5NORM3NTmsTppBjjUUElP75E/KQXGLMuiJHAf02jx0FCAQ2Qhw2ZGtEkPj4/F6cYusYvDo4ZK2iZn+BuCo3XS2iSSC7gmU0MlSdy/S4mE7hu7w4n2Hg90Wg3G0R44Q0IBDpEFjUbD98alVOlwPTyaE5emKYGG6nRjJ3rcPpFL48cwLN03EscFxt/WtotckiCu3stPjoLZoBO5NPJAAQ6RjSkS7I1TgrG0JceYkBRtBMNKZ1VMdWsPOl1eGHVa5CVHiV0c0g8pjvxx01MUFA8dBThENqZIrFflY1i+0aQpKmnSaDSYnGEDABytlUZjxTWa41OjYdBRFSxF3BRVVUsP2ns8IpfGjzpTw0d/XUQ2pgQaqm9rHZLYuK2sqQtODwOLQYecROqJSxXXWEklMOY2+KOGSrrirEZkxlkASGdKnPL9ho8CHCIb41Ojoddq0NbtQW27U+zi8BXOxLQY6LS06ZZUSW26gV8inkYNlZTx940ERv6cHh/KAgf6UmA8dBTgENkw6XUYH9jX5Nsa8XvjNGQsD9wIzrG6DvgksHFbCa2gkgXu30cKgfHx+g4wLJAQZaQjGoaBAhwiK8E8HPErHRoyloexSVEwG7To8fhQ3izuFgMOpweVgSMaaJM/aZsioRGcIzX+MkymIxqGhQIcIitSCXBYlsXhQKUzNdMmalnI4HRaDb/yROzG6khg5DEzzoKEKKOoZSGD46aoTjR0wO0Vd3PRw4H7ZtoYqmuGgwIcIiv8sLHICaN2hxNNnS7otBqaapABqeThHK7237fTqaGSvMw4C2LN/s1FTzSIu8XA4Zo2AMA06kwNi6ABTktLC5YvX47Y2FjExcXh+uuvR2fnwEfQl5eXQ6PR9Pv1xhtv8M/r7+evvvqqkB+FSATXUNW2O9Ha5RatHN8EGqrxKdG06ZYMSGXkj3ri8uHfYkD8kT+X18cfMkwBzvAIGuAsX74c3377LXbt2oV3330Xn3zyCdasWTPg87OyslBXVxfy9Yc//AHR0dFYvHhxyHOfe+65kOctXbpUyI9CJCLGbEBOohWAuI0V9cTlZWpgi4HD1W2ibjHABTjTM+NEKwMZOm5risMiLmootXfA42MRbzVgTLxFtHLIkV6oC5eUlGDnzp04cOAA5syZAwDYunUrLr74Yjz88MPIyMjo8xqdToe0tLSQx958801ceeWViI4OPXsjLi6uz3MH4nK54HK5+O8dDvGTxsjITcmIRUVzN47UtuO88UmilOEbviceJ8r7k+EpSI+BQadBa7cH1a09yEqwRrwM7d0eVDT7E4ynZtK0phzMyIoDAHxdLV6Aw40WT820UYLxMAk2grN3717ExcXxwQ0AFBUVQavVYt++fUO6xsGDB1FcXIzrr7++z89uuukmJCUlYe7cuXj22WcH7ZVt2rQJNpuN/8rKyhr+ByKSMS3Q+/2muk2U92dZFocD7z2dhoxlwaTX8blSxVVtopSBGwXITrAizkoJxnIwM9CBKal1iJZozCWm02jx8AkW4NjtdqSkpIQ8ptfrkZCQALvdPqRrPPPMM5g0aRLmz58f8vi9996L119/Hbt27cLll1+OX/7yl9i6deuA11m/fj3a29v5r6qqquF/ICIZM7L8f+jFlW2ivH91aw9auz0w6DQooCXissH3xkUKcL7hEkWpoZKNrAQL4q0GuH0MvwN1pHEjONNoWnPYhh3g3HXXXQMmAnNfx44dG3XBenp68Morr/Q7enPPPffg3HPPxaxZs3DnnXfijjvuwJ/+9KcBr2UymRAbGxvyReRr+pg4aDT+ROMGR+R3NOZ64hPTYmDSU4KxXEwP9Ma/EWm6ge+J06ifbGg0Gv6+ESMwdnp8OB44744C4+EbdoBz2223oaSkZNCvvLw8pKWloaGhIeS1Xq8XLS0tQ8qd+cc//oHu7m6sXLnyrM8tLCxEdXV1SJ4NUa5okx4TUvwjJ2JMN1CPSp5mZgUTRr2+yE838PcNNVSywo38FVdFPjA+Zu+Al2GRGGVEhs0c8feXu2EnGScnJyM5Ofmsz5s3bx7a2tpw8OBBzJ49GwDw4YcfgmEYFBYWnvX1zzzzDC699NIhvVdxcTHi4+NhMtEW1moxMysOpfUdKK5qw0VThpZsHi7cnhQ0Jy4veUnRiDbp0eny4mRjJ7/5XyS0dLlR3doDgDaGlBsuMP5ahJw/brSYEoxHRrAcnEmTJmHRokVYvXo19u/fj88++wxr167FsmXL+BVUNTU1KCgowP79+0Nee/LkSXzyySe44YYb+lz3nXfewdNPP40jR47g5MmTeOKJJ/DAAw/gV7/6lVAfhUhQsFfVFtH3ZRiWXyJOe1LIi1ar4f/NIj3dwCXEj02KQqzZENH3JqPDTVGdauxEh9MT0ffm8gypMzUygu6Ds2PHDhQUFGDBggW4+OKLcd555+HJJ5/kf+7xeFBaWoru7u6Q1z377LMYM2YMLrrooj7XNBgM2LZtG+bNm4eZM2fib3/7Gx599FFs3LhRyI9CJGZmIMD5prodTAQPUDzd1AmH0wuzQYuJdBq07Ig13XCoohUAMCs7LqLvS0YvKdqEMfEWsGzk98P5qtJ/35yTEx/R91UKwfbBAYCEhAS88sorA/48Nze33+XdDzzwAB544IF+X7No0SIsWrQobGUk8jQhNRoWgw6dLi9ONXbyp4wL7WCgoZoxJg4GHZ10IjfcdEOktxg4FOiJn5NNDZUczciKQ3VrD76uasf8/MjsvdXS5cbpJv/hsOdk0X0zElRDE1nS67R8suZXEZxu4AKc2dSjkiVuuuGYvQM9bl9E3tPHsHxPnO4beZoRqGuKq1oj9p7cqN+4lGjYrDStORIU4BDZmiVCHg4FOPKWbjMj3Wb2Bx0RaqxK7R3ocvv8q/8iNNJIwmtWYOTtYEXkjvo4xE1P0bTmiFGAQ2SLy8PhejpCa+1y41Sjf8h4Fk01yJJGo8Gc3AQAwJflkblvDlYG8290WloJI0fTMm0w6rRo6nShvLn77C8IA+pMjR4FOES2uIaqtL4D7d3Cr27gevx5yVFIiKKt9uVqbq6/wThQ3hKR9/uqguuJU0MlV2aDjt9B/UCZ8PeNx8fwy9Lpvhk5CnCIbCXHmJCXHAWWBb6sEL7S4XtUVOHIGhcYH6pojciGfwcp/0YRvhO4byIRGB+r64DTwyDWrEd+cvTZX0D6RQEOkbXCsf5KZ38EelXclMacXGqo5GxCagxizHp0uX04Zu8Q9L0aOpyoaO6GRgPMpFwKWYtkgLOvrBmAf3m4lqY1R4wCHCJrXKWzT+AAx+nx8au1uBEAIk86rQZzAqMpQgfGe0/5G6opGbG0wZ/MnZMTD40GKG/uRkOHsGfgfXHaf998Ny9R0PdROgpwiKzNDYzgHKlpR5fLK9j7HKpohdvLIDXWhLykKMHeh0QGn2gs8NQm11DNo4ZK9mwWA3+8h5AJ6j6G5TtsdN+MDgU4RNbGxFuRGWeBl2HxVWAzNSF8HuiJz89PojNhFIALjPedbhF0J2xuBGdePjVUSvCdwPT0vkDgKoSjtQ50OL2IMekxJSNy56UpEQU4RPa4xuoLASudvdQTV5QZY+JgNerQ3OVGid0hyHvUtfegvLkbOq2Gn0ol8jY/EKh+erJJsPfYe9p/7bljE6Cn3dJHhX57RPa4oEOoSqfL5eUPZ6SeuDIY9Vo+v+Ezge4bbvRmaqYNMZR/owjz8pOg1QCnGrtQ194jyHvQqF/4UIBDZO/8Cf6zYb6pbkNbtzvs1z9Q3gIvw2JMvAVZCdawX5+I49xx/vvmfyeECXC4aU0a9VMOm8XAH/chxH3j9TE4EMjvoQTj0aMAh8heus2CCanRYFhhRnGooVKm88f7A5wD5S1wesJ7LhXLstQTV6jzAoHxpwIEOF9Xt6HT5YXNYsDkdMq/GS0KcIginD8+GQDwv+Phr3T2lDYAAM4bH5lThElkjE+JRkqMCU4PE/bjPo7Xd6KmrQcmvRZzKf9GUbh64LOTTWFPUP/wmL+u+d6EZNr/JgwowCGK8L0J/gDnkxONYT0Mr6qlG8frO6HTanBB4D2IMmg0Gr43/r8wj/ztPlYPwJ+UajHqwnptIq5zsuMFS1D/8FgjAOAHBVTXhAMFOEQR5uYmwKjXoq7diVONnWG77keB0ZvZ2fGIs9L5U0rD5W99WNIQ1ut+FOiJ/6AgJazXJeLrnaC+p7QxbNe1tztRUueARgNcMIHum3CgAIcogsWo449t2B3Gxoq71vepoVKk709MgU6rQWl9Byqau8JyzbZuN39uGd03ylQ0KRUA8MG39rBdk+tMzcyKo8N8w4QCHKIYF032VzrvHQlPpdPt9vL73yyYRA2VEsVZjXxgvOtofViu+fHxRjAsMCE1GmPiadWdEhVNToFGA3xd3R625eJc/s0PJlJdEy4U4BDFWDglDRoNUFzVFpZK57OTzXB7GWTGWTA+hU70VSouMP7g2/AEODTqp3wpMWack+3f1fi/YQiMe9w+fj8mum/ChwIcohgpsWbMDlQ6O8MwivOfw3UAgB9OTqXjGRTsh1PSAPjPpWrudI3qWk6PD7tL/A3eRZPTRl02Il1cYPx+GALjPaUN6Hb7MCbeQsczhBEFOERRFk31NyqjDXCcHh8/ZXHJjPRRl4tIV2acBVMzY8GwwH9LRtdY7SltQJfbh8w4C87JjgtPAYkkXRQIjL843Yz2bs+orvXuN/7O1JLp6dSZCiMKcIiiLAxUOgfKW9DQ4RzxdfaUNqDT5UVmnAWzsuLDVTwiUYun+oPYt76qHdV13qGGSjXGJkWhIC0GXobFvwOjvSPR7fby2wr8aFpGuIpHQAEOUZisBCtmZsWBYYF/jaKxevtr/2uXTE+nDbdUYOmsTAD+Q1WrW7tHdI0Op4dfbn7JdGqo1ODHgfvmn4eqR3yND76th9PDIDvBiqmZND0VThTgEMW5Ys4YAMDrX1aNaNO/pk4XPz112UxqqNQgM87CH8Xxr+KRBcZvf12LHo8P+clR1FCpxI9nZUKrAQ5WtKKsaWTbDPx9fyUA4PJzxtCoX5hRgEMU55IZGTAbtDjR0IniwCngw/HPg9Xw+FjMGGPDlAxb+AtIJOnH5/h7468dqIJvBFvwv7q/CgBw9dxsaqhUIiXWzB8T88aXVcN+/enGTuwra4FWE+yYkfChAIcoTqzZgIsDORUvfVExrNcyDMv3qP5fYXbYy0ak60fT0xFr1qOypZvfiXiojtS043BNO4w6LX5yDjVUanL13CwA/pGY4R7a+toBf1B0wYRkZMRZwl42taMAhyjSyvm5AIC3i2uHtSfO7mMNKG/uRoxJjx9RHoWqWI16LJvrD2qf/7x8WK998pPTAIDF09JoF1qV+eHkNIyJt6C124O3vqoZ8uscTg9e2efvTC0vzBGqeKpGAQ5RpJlZcZg7NgFehsVzn5UP6TUsy+Lxj04CAFbMy0GUSS9gCYkUrZyXA60G+PRkE47UtA/pNeVNXXj3G3/ezs+/ly9k8YgE6bQaXBfoUD31v9NDnt58+YsKdLi8GJ8STWeWCYQCHKJYP/9eHgB/RVLvOPuS8U9ONOHrqjaYDVpcf95YoYtHJGhMvBWXzvCP3G3eeWxIr3n8o5NgWP/BmpNpkzZVuvI7WbBZDDjV2DWkFVUdTg+e/bQMAHDjhfm0UlMgFOAQxfpBQQrOyY5Dt9uHP71fOuhz3V4G9717FADw/+bmICnaFIkiEgla98OJ0Gs1+N+JJnx6omnQ5xZXtfEN2tofjItE8YgExZoNWPt9/7//n3cdR4978FycrR+eRFOnG7mJVlwyg6bChUIBDlEsjUaDe340GQDwj4PV2F/WMuBzn/70NE42dCIxyoibF4yPVBGJBGUnWrE8kGC+/s1v0Ony9vs8r4/Bhn8dAcsCPzknkz+biKjTNfNykBlnQV27c9DRv1J7Bz96s/GSKTDoqBkWimC/2T/+8Y+YP38+rFYr4uLihvQalmWxYcMGpKenw2KxoKioCCdOnAh5TktLC5YvX47Y2FjExcXh+uuvR2dnpwCfgCjBrOx4XBlYfnnLq1+hsaPvWUMHK1rw513HAQDrL54Em9UQ0TIS6blt4URkxllQ1dKDDW8d6Xc/pYfeL8U31e2IMelx1+ICEUpJpMRs0OGBn0wD4E9S393PsR8dTg9ueuUQvAyLokkpdLCmwAQLcNxuN6644grceOONQ37NQw89hC1btmD79u3Yt28foqKisHDhQjidwfyJ5cuX49tvv8WuXbvw7rvv4pNPPsGaNWuE+AhEITZcMgW5iVbUtjtxzTP7UNMWXFW1v6wFq547AI+PxcXT0nB5YC8Uom6xZgMeuXIGtBrg/76qwca3v4XHxwAAfAyLR3cd51dObf7pdKTEmMUsLpGICyYk8wnHN71yCB8eCwY5jR0uXPfcAZxs6ERKjAkPXj5dpFKqh4YdyVavw/D888/jlltuQVtb26DPY1kWGRkZuO222/Cb3/wGANDe3o7U1FQ8//zzWLZsGUpKSjB58mQcOHAAc+bMAQDs3LkTF198Maqrq5GR0f9cpsvlgssV7Lk7HA5kZWWhvb0dsbGUFKgG5U1d+On2vWjqdMFi0KFocio6nR7sOd4IlgVm58TjhZ/NRTStnCK9/H1/Jdb/32EAQG6iFd/JTcA31e0ore8AANy+cCJu+j7l3pAgt5fBz1/6Eh+VNgIAzh2XiJQYM3aX1MPh9CLWrMcrq7+LqZm0iehIOBwO2Gy2IbXfkpn8Kysrg91uR1FREf+YzWZDYWEh9u7dCwDYu3cv4uLi+OAGAIqKiqDVarFv374Br71p0ybYbDb+KysrS7gPQiQpNykKb/5yPs7JjkOPx4d3vq7FR6WNfP4EBTekP1fPzcb2Fecg3mpAeXM33jhYjdL6DkQZdXjo8ukU3JA+jHottl8zG9fNz4VGA3x2shlvflUDh9OLgrQY/OPG+RTcRIhkanS73Q4ASE1NDXk8NTWV/5ndbkdKSuicpV6vR0JCAv+c/qxfvx7r1q3jv+dGcIi6ZCVY8c8b52Pv6WZ8VdkGk16LCyYkY3xqjNhFIxK2aGo6zh+fjF1H61HR3I30ODMWTkmDzUK5WqR/Jr0Ov790Cq6bn4s9pQ3ocvswJSMW549Pho6WhEfMsAKcu+66C5s3bx70OSUlJSgokFbCnclkgslEy36Jf2XV/PwkzM9PErsoREaiTHr+xHFChio3KQrXJdGeWmIZVoBz22234brrrhv0OXl5eSMqSFpaGgCgvr4e6enp/OP19fWYOXMm/5yGhtAzYrxeL1paWvjXE0IIIYQMK8BJTk5GcnKyIAUZO3Ys0tLSsHv3bj6gcTgc2LdvH78Sa968eWhra8PBgwcxe/ZsAMCHH34IhmFQWFgoSLkIIYQQIj+CJRlXVlaiuLgYlZWV8Pl8KC4uRnFxccieNQUFBXjzzTcB+KcObrnlFtx///14++23cfjwYaxcuRIZGRlYunQpAGDSpElYtGgRVq9ejf379+Ozzz7D2rVrsWzZsgFXUBFCCCFEfQRLMt6wYQNeeOEF/vtZs2YBAD766CNceOGFAIDS0lK0twcPtLvjjjvQ1dWFNWvWoK2tDeeddx527twJszm4x8SOHTuwdu1aLFiwAFqtFpdffjm2bNki1McghBBCiAwJvg+OFA1nHT0hhBBCpEGW++AQQgghhIQLBTiEEEIIURwKcAghhBCiOBTgEEIIIURxKMAhhBBCiOJQgEMIIYQQxaEAhxBCCCGKQwEOIYQQQhRHsJ2MpYzb29DhcIhcEkIIIYQMFdduD2WPYlUGOB0dHQCArKwskUtCCCGEkOHq6OiAzWYb9DmqPKqBYRjU1tYiJiYGGo0mrNd2OBzIyspCVVUVHQMhIPo9Rwb9niODfs+RQb/nyBHqd82yLDo6OpCRkQGtdvAsG1WO4Gi1WowZM0bQ94iNjaU/oAig33Nk0O85Muj3HBn0e44cIX7XZxu54VCSMSGEEEIUhwIcQgghhCgOBThhZjKZsHHjRphMJrGLomj0e44M+j1HBv2eI4N+z5Ejhd+1KpOMCSGEEKJsNIJDCCGEEMWhAIcQQgghikMBDiGEEEIUhwIcQgghhCgOBTiEEEIIURwKcMJo27ZtyM3NhdlsRmFhIfbv3y92kRRl06ZN+M53voOYmBikpKRg6dKlKC0tFbtYivfggw9Co9HglltuEbsoilRTU4MVK1YgMTERFosF06ZNw5dffil2sRTF5/PhnnvuwdixY2GxWJCfn4/77rtvSAc2koF98sknuOSSS5CRkQGNRoO33nor5Ocsy2LDhg1IT0+HxWJBUVERTpw4EbHyUYATJq+99hrWrVuHjRs34tChQ5gxYwYWLlyIhoYGsYumGB9//DFuuukmfPHFF9i1axc8Hg8uuugidHV1iV00xTpw4AD+9re/Yfr06WIXRZFaW1tx7rnnwmAw4L333sPRo0fxyCOPID4+XuyiKcrmzZvxxBNP4PHHH0dJSQk2b96Mhx56CFu3bhW7aLLW1dWFGTNmYNu2bf3+/KGHHsKWLVuwfft27Nu3D1FRUVi4cCGcTmdkCsiSsJg7dy5700038d/7fD42IyOD3bRpk4ilUraGhgYWAPvxxx+LXRRF6ujoYMePH8/u2rWLveCCC9ibb75Z7CIpzp133smed955YhdD8ZYsWcL+7Gc/C3nsJz/5Cbt8+XKRSqQ8ANg333yT/55hGDYtLY3905/+xD/W1tbGmkwm9u9//3tEykQjOGHgdrtx8OBBFBUV8Y9ptVoUFRVh7969IpZM2drb2wEACQkJIpdEmW666SYsWbIk5L4m4fX2229jzpw5uOKKK5CSkoJZs2bhqaeeErtYijN//nzs3r0bx48fBwB8/fXX+PTTT7F48WKRS6ZcZWVlsNvtIfWHzWZDYWFhxNpFVZ4mHm5NTU3w+XxITU0NeTw1NRXHjh0TqVTKxjAMbrnlFpx77rmYOnWq2MVRnFdffRWHDh3CgQMHxC6Kop0+fRpPPPEE1q1bh9/+9rc4cOAAfv3rX8NoNOLaa68Vu3iKcdddd8HhcKCgoAA6nQ4+nw9//OMfsXz5crGLplh2ux0A+m0XuZ8JjQIcIks33XQTjhw5gk8//VTsoihOVVUVbr75ZuzatQtms1ns4igawzCYM2cOHnjgAQDArFmzcOTIEWzfvp0CnDB6/fXXsWPHDrzyyiuYMmUKiouLccsttyAjI4N+zwpGU1RhkJSUBJ1Oh/r6+pDH6+vrkZaWJlKplGvt2rV499138dFHH2HMmDFiF0dxDh48iIaGBpxzzjnQ6/XQ6/X4+OOPsWXLFuj1evh8PrGLqBjp6emYPHlyyGOTJk1CZWWlSCVSpttvvx133XUXli1bhmnTpuGaa67Brbfeik2bNoldNMXi2j4x20UKcMLAaDRi9uzZ2L17N/8YwzDYvXs35s2bJ2LJlIVlWaxduxZvvvkmPvzwQ4wdO1bsIinSggULcPjwYRQXF/Nfc+bMwfLly1FcXAydTid2ERXj3HPP7bPVwfHjx5GTkyNSiZSpu7sbWm1oc6fT6cAwjEglUr6xY8ciLS0tpF10OBzYt29fxNpFmqIKk3Xr1uHaa6/FnDlzMHfuXDz22GPo6urCqlWrxC6aYtx000145ZVX8K9//QsxMTH8PK7NZoPFYhG5dMoRExPTJ68pKioKiYmJlO8UZrfeeivmz5+PBx54AFdeeSX279+PJ598Ek8++aTYRVOUSy65BH/84x+RnZ2NKVOm4KuvvsKjjz6Kn/3sZ2IXTdY6Oztx8uRJ/vuysjIUFxcjISEB2dnZuOWWW3D//fdj/PjxGDt2LO655x5kZGRg6dKlkSlgRNZqqcTWrVvZ7Oxs1mg0snPnzmW/+OILsYukKAD6/XruuefELpri0TJx4bzzzjvs1KlTWZPJxBYUFLBPPvmk2EVSHIfDwd58881sdnY2azab2by8PPZ3v/sd63K5xC6arH300Uf91snXXnsty7L+peL33HMPm5qayppMJnbBggVsaWlpxMqnYVnaypEQQgghykI5OIQQQghRHApwCCGEEKI4FOAQQgghRHEowCGEEEKI4lCAQwghhBDFoQCHEEIIIYpDAQ4hhBBCFIcCHEIIIYQoDgU4hBBCCFEcCnAIIYQQojgU4BBCCCFEcf4/asjtFzogBBQAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "## NumPy Example\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "# Generate data using NumPy\n", "x_np = np.linspace(0, 10, 1000)\n", "y_np = 2 * np.sin(x_np) * np.cos(x_np)\n", "\n", "# Plot the results\n", "plt.plot(x_np, y_np)\n", "plt.title(\"NumPy Example\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 452 }, "id": "ySLVmls6YLM2", "outputId": "e2581df3-a978-4986-c393-740063fb474b" }, "outputs": [ { "data": { "image/png": "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8Y9//ANXX301rrjiil4/v/XWW7F58+aoAOftt9/Gu+++iz/96U/Iz8/H448/jvfffx/Lly/Hf/7zn5iW75tvvsH999+PpUuXoqysDDfeeCP279/P75fT1taG7du34/e//z3WrFnDv+7o0aMxLUdPJ783y7IoLy/H1KlT+33NmDFj8N///hdnnnlm1JQaIWTkaBUVIaSXt99+G263G8uXL8cVV1zR63HxxRfjb3/7G7xeLwCgo6MDt956K2bMmIFbbrkFQCgHZ926ddi6dSveeuutmJXN7/fj+uuvR25uLp544gm89NJLaGhowO23385fw428nDzS8vjjj8esHCd75ZVX0NHRwf/7r3/9K+rr63HBBRf0+5qrrroKwWAQ69at6/WzQCCA9vZ2IYpKiCrQCA4hpJfNmzcjPT0d8+bN6/PnP/rRj/Dcc8/hX//6F37yk5/g3nvvRV1dHf7+979HTessX74cL7/8MlauXImFCxdGJeH2xel04tVXX+3zZ9wGgA888ADKysqwfft2JCUlYerUqVizZg3uvfdeXHHFFbjwwguRnJyM73//+3jkkUfg9/uRl5eHDz74ABUVFcP8jZxaWloazjrrLCxduhQNDQ14/PHHMXbsWCxbtqzf15xzzjn4xS9+gfXr16OsrAzz58+HwWDA0aNH8dZbb+GJJ57ocwSNEDIIIq/iIoRIxKZNm1gA7BdffMHq9Xr2Zz/7Wb/XdnV1sVarlf3xj3/Mfvnll6xOp2NXrFjR57W7d+9mtVote+uttw74+QMtE+eqqr1797J6vZ695ZZbol4bCATYM844g83NzWXb2tpYlmXZ2tpa9sc//jGbkpLC2mw29sorr2Tr6upYAOzatWv513LLxJuamqLe87rrrmMTEhL6LOekSZP4f3PLxF9//XV29erVbFZWFmuxWNiLLrqIraqq6vWePZeJc5599ll25syZrMViYZOSktgpU6awd911F1tXVzfg74wQ0j8Ny8YoW44QImtPPvkkbrvtNpSXl2PMmDFiF0c2duzYgfPOOw9vvfUWjbYQIiGUg0MIAQDs2bMHCQkJKCoqErsohBAyYpSDQ4jK/e1vf8OOHTuwefNm3HjjjdDrqVoghMgf1WSEqNyvf/1rdHR04IYbbsCf/vQnsYtDCCExQTk4hBBCCFEcysEhhBBCiOJQgEMIIYQQxVFlDg7D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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "## JAX Example\n", "import jax.numpy as jnp\n", "\n", "# Generate data using JAX\n", "x_jnp = jnp.linspace(0, 10, 1000)\n", "y_jnp = 2 * jnp.sin(x_jnp) * jnp.cos(x_jnp)\n", "\n", "# Plot the results\n", "plt.plot(x_jnp, y_jnp)\n", "plt.title(\"JAX Example\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "id": "eQvAv6acYXLA" }, "source": [ "## Observations\n", "- Both libraries use a similar syntax for array operations.\n", "- JAX arrays can be used in place of NumPy arrays in many scenarios with minor changes." ] }, { "cell_type": "markdown", "metadata": { "id": "etdpEwRNYaLV" }, "source": [ "# 2. JAX Arrays Are Immutable\n", "\n", "In NumPy, arrays are mutable. In JAX, arrays are immutable, meaning you cannot directly modify their contents.\n", "Instead, JAX provides functional updates using `.at[]` methods.\n", "\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Wl8uJTp4YkeV", "outputId": "c7717346-0e05-40ae-bebe-38b747b2abff" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Modified NumPy Array: [ 1 2 99 4]\n", "Original JAX Array: [1 2 3 4]\n", "Modified JAX Array: [ 1 2 99 4]\n" ] } ], "source": [ "# NumPy Example\n", "x_np = np.array([1, 2, 3, 4])\n", "x_np[2] = 99\n", "print(\"Modified NumPy Array:\", x_np)\n", "\n", "# JAX Example\n", "x_jnp = jnp.array([1, 2, 3, 4])\n", "y_jnp = x_jnp.at[2].set(99)\n", "\n", "print(\"Original JAX Array:\", x_jnp)\n", "print(\"Modified JAX Array:\", y_jnp)" ] }, { "cell_type": "markdown", "metadata": { "id": "Pni3wGGAYpDd" }, "source": [ "# 3. JAX Transform Functions\n", "\n", "## `jit()`\n", "\n", "The `jit` function compiles your code using XLA and caches the compiled version for speed.\n", "\n", "### Detailed Explanation of JIT\n", "#### What Happens When You Run a Normal Python Function?\n", "When you run a Python function, it goes through the following steps:\n", "1. **Interpretation**:\n", " - The Python interpreter reads and parses the function line by line, converting the code into bytecode.\n", "2. **Execution**:\n", " - The bytecode is executed by the Python Virtual Machine (PVM). Each line of code is interpreted at runtime, which can be slower because the interpreter translates instructions into machine code on the fly.\n", "\n", "This approach is simple and flexible, but the overhead of interpretation can make Python slower compared to compiled languages like C or Fortran.\n", "\n", "#### What Happens When You Use JIT in JAX?\n", "When you apply JIT (`@jit`) to a function in JAX, the following sequence occurs:\n", "\n", "1. **Static Analysis**:\n", " - When the function is called for the first time, JAX analyzes the function's code and determines its computation graph. This involves understanding the inputs and operations in the function.\n", "\n", "2. **Compilation**:\n", " - The function is compiled using **XLA** (Accelerated Linear Algebra), a domain-specific compiler designed for optimizing machine learning workloads. This compilation converts the Python function into highly efficient machine code.\n", "\n", "3. **Execution**:\n", " - Once compiled, the function is executed as machine code, bypassing Python's interpretation overhead.\n", " - Subsequent calls to the function reuse the cached compiled code, making them extremely fast.\n", "\n", "#### Why Is This Important in Scientific Computing?\n", "- **Speed**:\n", " - Scientific computations often involve large datasets and complex operations. JIT can significantly reduce computation time by eliminating Python's interpretation overhead.\n", "- **Optimization**:\n", " - XLA performs advanced optimizations such as kernel fusion, loop unrolling, and constant folding, which are essential for efficient computation on modern hardware (e.g., GPUs, TPUs).\n", "- **Portability**:\n", " - JIT allows the same code to run efficiently on different hardware backends, making it versatile for scientific applications.\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "2IZ8Kk4tYlFC", "outputId": "4db81a05-e26f-42ee-8c06-af2377930312" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "First call without jit: 0.397475004196167\n", "Second call without jit: 0.0010945796966552734\n" ] } ], "source": [ "import time\n", "\n", "# Define a simple function\n", "def compute(x):\n", " return jnp.sum(x ** 2)\n", "\n", "x = jnp.ones(10000)\n", "\n", "# Benchmark\n", "start = time.time()\n", "compute(x) # First call\n", "print(\"First call without jit:\", time.time() - start)\n", "\n", "start = time.time()\n", "compute(x) # Second call\n", "print(\"Second call without jit:\", time.time() - start)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "dh0fAUHQY5cp", "outputId": "76a52d5f-6d9a-4443-adfb-09b901ef840a" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "First call with jit (compilation included): 0.37212228775024414\n", "Second call with jit (cached): 0.0017631053924560547\n" ] } ], "source": [ "from jax import jit\n", "\n", "@jit\n", "def compute_jit(x):\n", " return jnp.sum(x ** 2)\n", "\n", "# Benchmark\n", "start = time.time()\n", "compute_jit(x) # First call (includes compilation)\n", "print(\"First call with jit (compilation included):\", time.time() - start)\n", "\n", "start = time.time()\n", "compute_jit(x) # Second call (cached)\n", "print(\"Second call with jit (cached):\", time.time() - start)" ] }, { "cell_type": "markdown", "metadata": { "id": "Pn-vb1xWY8aA" }, "source": [ "## `vmap()`\n", "\n", "The `vmap` function automatically vectorizes operations, allowing you to apply a function over batched inputs efficiently." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 447 }, "id": "8SmCwNeeY7Sy", "outputId": "2a1e2dac-2b78-4daa-e7e4-63652adc78e6" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Vectorized Result: [ 1 4 9 16 25]\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGdCAYAAACyzRGfAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAR1NJREFUeJzt3Xd4FHXix/H3pm16QiCVJPTeEwKCqHigCB4CwinoYSjqnQcq4lmAU7HiWX+2UzwlQbEcgoANPAQBCy0JLfRAKIGETiqpO78/PPYu1CQkmd3k83qefR4yO7v7+WZC9pOZ2e9YDMMwEBEREaklLmYHEBERkfpF5UNERERqlcqHiIiI1CqVDxEREalVKh8iIiJSq1Q+REREpFapfIiIiEitUvkQERGRWuVmdoBz2Ww2Dh8+jJ+fHxaLxew4IiIiUgGGYZCbm0tERAQuLpfet+Fw5ePw4cNERUWZHUNERESq4ODBg0RGRl5yHYcrH35+fsBv4f39/U1OIyIiIhWRk5NDVFSU/X38UhyufJw91OLv76/yISIi4mQqcsqETjgVERGRWqXyISIiIrVK5UNERERqlcOd81ERhmFQWlpKWVmZ2VFEqp2rqytubm76qLmI1FlOVz6Ki4vJzMykoKDA7CgiNcbb25vw8HA8PDzMjiIiUu2cqnzYbDbS09NxdXUlIiICDw8P/XUodYphGBQXF3Ps2DHS09Np1arVZSfrERFxNk5VPoqLi7HZbERFReHt7W12HJEa4eXlhbu7O/v376e4uBhPT0+zI4mIVCun/JNKfwlKXaefcRGpy/QbTkRERGpVpcrHjBkziIuLw8/Pj5CQEIYOHcrOnTvLrdO3b18sFku525///OdqDS0iIiLOq1LlY+XKlUyYMIE1a9awdOlSSkpKuPHGG8nPzy+33j333ENmZqb99tJLL1VraKl506dPp2vXrjX6Gn379mXSpEk1+ho1YcyYMQwdOtTsGCIiTqtS5WPJkiWMGTOGDh060KVLFxITEzlw4ADJycnl1vP29iYsLMx+q+/XaBk8eDA33XTTBe/76aefsFgsbN68+YpeY8WKFVgsFk6fPn1Fz3PWX//6V5YtW1Ytz1VViYmJ5+1Fs1gsfPDBB7Xy+vv27cNisbBx48Zyy9944w0SExNrJYOISF10Red8ZGdnAxAUFFRu+SeffEKjRo3o2LEjU6ZMueScHEVFReTk5JS71TXjx49n6dKlZGRknHdfQkIC3bt3p3PnziYkO9/ZCdx8fX1p2LCh2XHw9/cvtxctMzOTO++809RMAQEBBAYGmppBRKQqSsps3DcnmX9vzTI1R5XLh81mY9KkSVx99dV07NjRvvyOO+5gzpw5/Pjjj0yZMoWPP/6YP/7xjxd9nhkzZhAQEGC/RUVFVSqHYRgUFJeacjMMo0IZf//73xMcHHzeX8t5eXl88cUXjB8/HoCff/6Za665Bi8vL6KionjggQfKHdIqKiriscceIyoqCqvVSsuWLfnwww/Zt28f119/PQANGjTAYrEwZswY+2MeeOABQkJC8PT0pE+fPqxfv97+nGf3mCxevJjY2FisVis///zzeYddLrQHomnTpvb7U1NTGThwIL6+voSGhjJ69GiOHz9uvz8/P5+77roLX19fwsPDefXVVyv0vbNYLOX2ooWFheHl5UViYuJ5BWDhwoXl5n05O4aPP/6Ypk2bEhAQwMiRI8nNzbWvY7PZeOmll2jZsiVWq5Xo6Gief/55AJo1awZAt27dsFgs9O3bFzj/sEtFv8fLli2je/fueHt707t37/POlxIRqUmGYTDlyy0sTs3ioX9t5GR+sWlZqjzPx4QJE0hNTeXnn38ut/zee++1/7tTp06Eh4fTr18/9uzZQ4sWLc57nilTpjB58mT71zk5OZUqIGdKymj/5PdVGMGV2/bMALw9Lv8tdHNz46677iIxMZFp06bZ3yC/+OILysrKGDVqFHv27OGmm27iueeeY9asWRw7doyJEycyceJEEhISALjrrrtYvXo1b775Jl26dCE9PZ3jx48TFRXF/PnzGT58ODt37sTf3x8vLy8AHn30UebPn8/s2bNp0qQJL730EgMGDCAtLa3cHqvHH3+cV155hebNm9OgQQNWrFhRbgyZmZn2f+fn53PTTTfRq1cvAE6fPs3vfvc77r77bl5//XXOnDnDY489xm233cby5csBeOSRR1i5ciWLFi0iJCSEqVOnkpKSUuPnlezZs4eFCxfyzTffcOrUKW677TZefPFFe8GYMmUK//znP3n99dfp06cPmZmZ7NixA4B169bRo0cPfvjhBzp06HDR2UYr+j2eNm0ar776KsHBwfz5z39m3Lhx/PLLLzU6fhGRs1799y7mJWfgYoE3RnYjyMe8GZSr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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from jax import vmap\n", "\n", "# Define a simple function\n", "def f(x):\n", " return x ** 2\n", "\n", "# Vectorize the function\n", "batched_f = vmap(f)\n", "\n", "# Apply to batched input\n", "x = jnp.array([1, 2, 3, 4, 5])\n", "result = batched_f(x)\n", "print(\"Vectorized Result:\", result)\n", "\n", "# Plot the results\n", "plt.plot(x, result, label=\"Vectorized Function\")\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "id": "QlFHLW7VZGbS" }, "source": [ "## `grad()`\n", "\n", "The `grad` function computes gradients of a given function with respect to its inputs." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "SYi1g9ZZZJTX", "outputId": "1bd59ad4-fc01-43e9-d1ed-eb829607eb27" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Gradient at x=3: 6.0\n", "Gradients for array: [2. 4. 6.]\n" ] } ], "source": [ "from jax import grad\n", "\n", "# Define a simple function\n", "def loss(x):\n", " return x ** 2\n", "\n", "# Compute the gradient\n", "grad_loss = grad(loss)\n", "\n", "x = 3.0\n", "print(\"Gradient at x=3:\", grad_loss(x))\n", "\n", "# Vectorized Gradient\n", "x = jnp.array([1.0, 2.0, 3.0])\n", "grad_batched = vmap(grad_loss)(x)\n", "print(\"Gradients for array:\", grad_batched)" ] }, { "cell_type": "markdown", "metadata": { "id": "r4wdfQbhZM70" }, "source": [ "# 4. Random Number Generation\n", "\n", "\n", "Random number generation in JAX is based on a PRNG (Pseudo-Random Number Generator) model, where keys are immutable and must be explicitly managed." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "4srQ6nboZL3I", "outputId": "14218074-150c-4f55-8008-14569fc8cc93" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Initial Key: [ 0 42]\n", "Random Sample 1: [-0.02830462]\n", "Key After First Sample: [ 0 42]\n", "Random Sample 1: [-0.02830462]\n", "Random Sample 2 (New Subkey): [0.60576403]\n", "Key After Splitting: [1832780943 270669613]\n" ] } ], "source": [ "from jax import random\n", "\n", "# Initialize a key\n", "key = random.PRNGKey(42)\n", "print(\"Initial Key:\", key)\n", "\n", "# Generate random numbers\n", "val1 = random.normal(key, shape=(1,))\n", "print(\"Random Sample 1:\", val1)\n", "\n", "# Verify the key remains unchanged\n", "print(\"Key After First Sample:\", key)\n", "\n", "# Generate random numbers\n", "val2 = random.normal(key, shape=(1,))\n", "print(\"Random Sample 1:\", val2)\n", "\n", "# Split the key to get a new state\n", "key, subkey = random.split(key)\n", "val2 = random.normal(subkey, shape=(1,))\n", "print(\"Random Sample 2 (New Subkey):\", val2)\n", "print(\"Key After Splitting:\", key)" ] } ], "metadata": { "colab": { "provenance": [] }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.13" } }, "nbformat": 4, "nbformat_minor": 4 }